11:54

домовой
Есть в битрикс такая гадость: фасетный индекс. Представляет он из себя две дополнительные таблицы куда складываются  свойства участвующие в поиске. 
Как оно выглядит
одна таблица имеет  формат имени b_iblock_$iblock_id_index_val  и является  справочником  текстовых значений
  поля 
  id,
  value.

вторая таблица имеет  формат имени  b_iblock_$iblock_id_index - содержит поля
 ELEMENT_ID - собственно ид  элемента  ифоблока
 SECTION_ID - все секции родители  для element_id (да  характеристики повторяются столько раз  сколько  секций  родиелей   есть  у товара)
 FACET_ID - рассчитывается по  правилу  "(вписывается цена ==Да)? (ид_типа_цены*2+1) : (ид_свойства*2)"
 VALUE - если тип свойства не число то  ид из  справочника
 VALUE_NUM - значение числовых  свойств включая перечисляемые и ссылки на  ид  элемента
 INCLUDE_SUBSECTIONS 


Оно круто ускоряет поиск по характеристикам/вывод  виджета  catalog.section.
Но вот беда, алгоритм генерации фасетного индекса творит лютую дичь  в результате  которой   часть товара  просто исчезает из результатов поиска.
ниже будут записываться способы поиска ошибок фасетного  индекса.


$iblock_id -  ид инфоблока 
$section_id - ид товарного направления 
$property_id - ид свойства  по которому идет поиск в товарном направлении.

1. Найти товары которых нет в фасетном индексе вообще.


$sql="select  xml_id from  b_iblock_element   where  iblock_id=$iblock_id and active='Y' and  not  exists (select * from b_iblock_".$iblock_id."_index where  b_iblock_".$iblock_id."_index.ELEMENT_ID=b_iblock_element.id )";



2.  Найти  товары у которых есть  свойство по которому выполняется поиск в товарном направлении и нет  в фасетном индексе


select xml_id from   b_iblock_element  where iblock_id=$iblock_id  and section_id=$section_id and  active='Y'  and not exists  (select * from  b_iblock_element_property  where IBLOCK_PROPERTY_ID=$property_id and   iblock_ELEMENT_ID=b_iblock_element.id)  and   exists(select * from b_iblock_$iblock_id_index where FACET_ID=($property_id *2)  and  element_id=b_iblock_element.id)

3.  Найти  товары у которых  нет свойства по которому выполняется поиск в товарном направлении и  есть  в фасетном индексе


select xml_id from b_iblock_element  where iblock_id=$iblock_id  and section_id=$section_id and  active='Y'  and exists  (select * from  b_iblock_element_property  where IBLOCK_PROPERTY_ID=$property_id and   iblock_ELEMENT_ID=b_iblock_element.id)  and  not  exists(select * from b_iblock_$iblock_id_index where FACET_ID=($property_id *2)  and  element_id=b_iblock_element.id)



домовой
Итак задача: есть  запрос который возвращает до 6000 позиций результата.  И необходимо  эти результаты отрисовать  стандартным компонентом catalog.section.
С сортировкой  разбиением на страницы и прочими мелкими радостями. 

Можно отдать все 6000 id через переменную фильтра, и catalog.section сделает все сам.  Но  после этого не стоит удивляться что сервер 30 секунд обрабатывает результат.

Можно  отдать  в  переменную фильтра  свего  N<99 id  элементов. Тогда скрипт должен взять на себя сортировку  и вывод  количества страниц
читать дальше

@темы: bitrix, памятка

16:39

домовой
Радуют меня требования  к современным паролям. Бессмысленностью и беспощадностью.

Итак  правильный  пароль  должен (а иногда  даже обязан) иметь длину от 8 знаков и содержать знаки из следующих групп
1. Строчные  буквы из диапазона  [a-z] (26 знаков)
2. Прописные буквы из диапазона  [A-Z](26 знаков)
3. Цифры [0-9] (10 знаков)
4. Что-то из 22 спецзнаков (количество используемых спецзнаков подсмотрено на яндексе)

Казалось бы это должно дать (2*26+10+22)^8  вариантов перебора... но на практике получается меньше.  Гораздо меньше.
Требование что должны быть ВСЕ группы знаков прводит к тому что число вариантов  уменьшается на порядки. 
читать дальше

@темы: теория игр

09:28

домовой
Обзавелся компактной игрушкой по фамилии easythreed k7. Впечатления ... сложные.
Оси X Y не перпендикулярны. Угол примерно  88.5-89.2 градуса. 
Недостаточно  жесткий. (ось z можно скручивать пальцами).
Медленный.  Редукторные 24byj-28 не позволяют принтеру выжать сколь нибудь большие скорость и ускорение.
Шумный. 25х7 вентиляторы, и песня распаяных драйверов 4988  создают  много  шума.
С старым Марлином (без поддержки linear advance). 
С достаточно большим ретрактом для директа (больше  2 мм).


С другой стороны принтер может в 40 мм/сек. (И это значение даже  похоже на истину.)
Он компактный.
И он работает. 
при том ускорении  которое  есть, сил трения недостаточно  чтобы малая жесткость принтера  вносила искажения в печатаемую модель.

И что самое  грустное его бессмысленно переделывать. Максимум : поменять  прошивку (на  марлин с linear advance  и настроенной компенсацией углов) и поставить на обдув вентиляторы 30 мм.
Клиппер ставить на эту игрушку увы не имеет смысла.

@темы: 3d

09:18

домовой
Уже вторую неделю пытаюсь отбиться от тараканов предлагающих "под предлогом борьбы за экологию" сделать из старого  смартфона  монстра Франкенштейна. 
По задумке, старый смартфон без  otg и с поломанным корпусом  должон получить новый толстый корпус в котором скроется мультиметр, транзистор-тестер (и возможно  показометр-осциллограф ), а так  же батарея которая будет все это питать .

основа мультиметра - спец модуль ina226  (который иногда обзывают powermonitor. измеряет и напряжение и ток на  клеммах, потому использование его в роли ампер+вольт+омметра прямо таки напрашивается.  )

транзистор тестер он и есть транзистор тестер. 
Протокол связи с смартфоном : блютус. при отдельном питании это даст гальваническую развязку со смартфоном.  

Из грустного: если не  смогу отбиться от  этой идеи, придется весьма глубоко закопаться в программирование  под мобильники. 
А еще придется понять и полностью переписать транзистор тестер, чтобы он не требовал жать на кнопку, проверял только выбранный параметр, отдавал данные в понятном мобильному приложению виде,  мог соединяться с ina226 и т п.

@темы: схемотехника

09:48

домовой
запустил memcached   на  битрикс  сервере.
битрикс сразу же перестал жрать дисковое место гигабайтами.
Время отклика уменьшилось до 1 сек  максимум. (в среднем  0.5-0.7 сек)

И блин,  у меня один (философский | риторический) вопрос: по какой причине разработчики битрикс не смогли написать продукт так же без memcached?
грамотно  написанные  sql запросы  получают необходимые данные  за  те же  0.5-0.7  сек. на все необходимые запросы

@темы: bitrix

09:40

домовой
Мы в восхищении. Королева в восхищении.  
Битрикс и Аспро радуют дичью.

В процессе  переписывания  алгоритма поиска ( выбрать весь мусор содержащий слова, а потом постобработкой отобрать удовлетворяющее  условиям) задумался а как быть с xss  в "умном поиске" .
Для примера ввел название  товара  "<sсript>alert(xss)</sсript>" , сохранил. При открытии  детальной страницы  увидел алерт. Сильно удивился. Написал в аспро.
upd
При просмотре исходной страницы удивился еще больше.  14 из 16 упоминаний слова  sсript  корректно  обработаны. дичь только в js  имеющем буквы seo. И есть  подозрение что это скорее  ошибка  bitrix нежели aspro.

@темы: bitrix

домовой
Я считал, что телефонная книга утеряна и все содержимое флешки телефона тогда перемешало в нечитаемый мусор. И бекапа не осталось.
Неожиданно спустя 12 лет откопал на старом винте бекап телефонной книги того устройства.

10:32

домовой
youtube подсунул очередное интересное:  автоматический раскладчик  smd компонентов из палок и желудей. И черт подери это интересно.
Получается что из
3д принтер (четырехосевой чпу станок) +компьютер +две веб камеры+ вакуумный пинцет можно попытаться сотворить раскладчик компонентов.
нужна лишь программа openpnp, железо и время.

ман по настройке программы:
https://www.youtube.com/watch?v=1v9Qjctx5Vo 

вики по  проекту openpnp утверждает что дорогие платы для управления принтером не  обязательны:  Теоретически достаточно ардуино, cnc шилда и модифицированной прошивки  grbl.

остается сложный философский вопрос вида:  как и рыбку сьесть и на крюк не попасть. 
как организовать электронику так, чтобы станок работал и как принтер, и как раскладчик компонентов, и как лазерный гравер.

upd
сел считать а сколько должен стоить вакуумный  пинцет на  альтернативных компонентах  и получил утверждение, что это почти не имеет смысла.
1. насадки остаются те же. ибо дешевой замены тупо нет.  
2. клапан и компрессор  менять  смысла нет. 
3.  мотор  с полым валом теоретически можно  поменять на связку:
мотор 28byj-48+шкивы+ремень gt2+подшипники+алюминиевая трубка.  Но увы суммарная стоимость  будет примерно  500 руб. И много гемороя при проектировании. 
4. Крепление на вал -  скорее  всего заменить нечем.  Разве что  точить на токарном станке. но стоимость такой работы под вопросом.

@темы: 3d

15:14

домовой
я продолжаю тихо фаломорфировать от фреймворка битрикс.
было сказано что надо поставить подписки на новости и акции всем пользователям.
Начинаю искать примеры, проверять как это работает и понимаю что я ничего не понимаю.
пример из официального  мануала не  работает от слова совсем. молча. 
другие примеры работают абы как.  создается адрес подписки, но нет рубрик.

3 часа изображал из себя барана перед новыми воротами, пока в голову не  постучалась банальная мысль: посмотреть что творится в бд. Через 5 минут стало понятно что узел подписок был прилеплен соплями с экскрементами, и почти  никак не  пересекается  с остальными таблицами.
И блин весь танец с бубном можно было заменить на три sql запроса

insert into b_subscription(USER_ID,ACTIVE,EMAIL,FORMAT,CONFIRM_CODE,CONFIRMED) values($user_id,'Y','$user_email','html',md5("$user_id $user_email "),'Y'))


insert  b_subscription_rubric values ($subscription_id ,1),($subscription_id ,2)
 где $subscription_id это результат выполнения  select last_insert_id()

@темы: bitrix

06:05

домовой
Плюс еще одно приложение для андроид из класса must have. Называется web video caster. Представляет из себя  браузер, который умеет выдирать видео с сайтов и отсылать на dlna плееры.
Таким образом все выглядит примерно как на хромокастах: жмешь по видео, выбираешь  dlna плеер/miracast/прочий hdmi свисток  и оно воспроизводится на телевизоре к которому подключен плеер.
Телефон  при этом в воспроизведении видео не  участвует. 

upd:
Единственное что не  совсем понятно  - почему при одновременно  включенных wifi и 4g   dlna/airdrop плеер не обнаруживается.

11:24

домовой

Стал  "счастливым обладателем" noname подделки samsung a71. Не спрашивайте за сколько.
Внутри неведома плата имеющая много надписей c529_sc7731g.
Встроенной памяти нет. 
Оперативной памяти 1 гб.
Процессор  одноядерный, от spreadtrum .
Прошивок нет.
upd:
Treble на первый взгляд похоже даже есть.  судя по тому что раздел вендор не  существует/ не смонтирован можно предполагать что  treble это обманка. 
Рекавери не  выполняет полезную работу 
Рекавери обычный. просто включена защита от дурака.
В рекавери есть адб но он требует авторизации. 
В выключенном состоянии никакого adb нет 
Похоже в телефоне не sc7731g. По крайней мере программа research download не смогла определить кто оно такое (по крайней мере с FDL  от  прошивки под sc7731g ).
Аида 64 скромно пытается говорить о sc8830.
Удалось выяснить что андроид на самом деле 5.1. Вероятно качественно задекорированный. 
Miracle thunder /miracle box не смогли определить что  это за SOC и что с ним можно сделать .Единственное чем помог  комбайн - однозначно сказал, что это android 5.1

Рут получен. Вероятно с помощью kingo root. Но криво.  Вероятно  стоит какой то служебный  вариант su. он дает доступ по первому требованию.  и никакого  менеджера доступа нету.  



План на будущее:
 посмотреть на  https://projectsakura.xyz/  
Поставил на свой rosy. Тот же lineage только в профиль. Но приключения во время установки не позволят откатиться назад. Ибо следуя кривой инструкции я потер все содержимое телефона. А последний бекап был на телефоне. 

 Получить root на подделке (ок) 
 
побаловаться с установкой  gsi прошивок. Ну а вдруг получится?
- Увы без шансов. Требле на подделке нет. 

 научиться делать бекап spreadtrum soc. 
3. портировать и поставить twrp
оказывается есть  программа  "SPD Auto TWRP recovery porter" берет  стоковый рекавери и выдирает из него ядро, dbt, стартовые скрипты,  и подставляет  все  это  в подходящий вариант twrp  (из веток  андроид 4,5,6 )

Теперь остается понять как я это все сделал. И как  это правильно  делать.



15:07

домовой
Мды. Или я чего то не понимаю в шаблоне аспро,  или  надо придерживаться правила 
Если обьявил копирование страницы в буфер через конструкцию setViewTarget .... endViewTarget то будь любезен обязательно показать этот буфер на странице. 

@темы: bitrix

домовой
создание простого компонента  умеющего в  ajax

Этап первый: создаем компонент

1. перейти  в папку где лежит битрикс

cd  www/ 

2. создать папку  нового виджета

mkdir -p local/components/domov0y/my.super.component

3. перейти в  папку компонента 
cd  local/components/domov0y/my.super.component 

4. создать файл component.php содержащий  следующий код
<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
//todo: тут будет логика  компонента

//здесь говорится о том что надо подключить  файл шаблона
$this->IncludeComponentTemplate();

?>

5. создать  каталоги  templates/.default и templates/.default/lang/ru/   

mkdir -p templates/.default/lang/ru/  

6.   создать файл шаблона компонента templates/.default/template.php  содержащий текст 
<?
IncludeTemplateLangFile(__FILE__)
//Так выводятся тексты лежащие  в языковом файле
echo getMessage('MY_MESSAGE');?>
//todo: тут код шаблона

?>
7.  создать  файл templates/.default/lang/ru/template.php  
<?
$MESS["MY_MESSAGE "] = "Это произвольный текст  который будет выведен на  экран   после  того  как  языковой файл будет подключен  через функцию IncludeTemplateLangFile(__FILE__) и вызван код echo getMessage('MY_MESSAGE');  ";

Собственно  на этом создание простого и бессмысленного  компонента завершено.
И его  даже  можно  запустить  написав на странице код 
<? $APPLICATION->IncludeComponent(
"domov0y:my.super.component ",
".default",
Array(),
false
);

 Этап второй: учим компонент  работать через ajax
условно простое, но не универсальное решение:  создать файл  ajax.php который будет содержать следующий код
<?
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
define("ajax",1);
include('component.php');
include('templates/.default/template.php');
?>
при этом надо исправить component.php 
 строка
 $this->IncludeComponentTemplate();
 
меняется  на  
 if (!defined("ajax" ))$this->IncludeComponentTemplate(); 

Ну а дальше  остается писать javasсript  позволяющий работать  с файлом 
local/components/domov0y/my.super.component/ajax.php
 c помощью ajax  запросов.
Никакой магии в этом нет. Используйте  стандартный  jquery и не вспоминайте  о том что  в фреймворке bitrix есть свой вариант  функций реализующих ajax

@темы: bitrix

15:47

домовой
на третий год чукча увидел как наименее варврскими методами сказать обнови кеш  по измененным элементам инфоблока.





if (CModule::IncludeModule('iblock')){CIBlock::clearIblockTagCache($iblock_id);}
 

Печально. Нельзя просто так взять и с помощью update изменить все потроха инфоблока.Точнее можно, но это мало что даст в условиях когда существуют таблицы фасетных индексов. Когда они существуют то большая часть данных для пущего ускорения работы битрикс запросов берется как раз из фасетных индексов.

Пока найдено интересное но не совсем понятное:




if (CModule::IncludeModule('iblock'))
{
$indexer=\Bitrix\Iblock\PropertyIndex\Manager::createIndexer($iblock_id);
    $result=$indexer->deleteElement($element_id);
    $result=$indexer->indexElement($element_id );
}





Если оно  реально  работает,  то  можно будет попытаться сотворить нехорошее вида 

1. записать список обновленных  элементов в  массив
2. со словами  " они украли нашу прелесть"  вызвать  метод  удалить  и обновить  индекс элемента  инфоблока






А еще  я понял каким матерным заклинанием надо было отбиваться от  битрикса. 
показать шаманство класса: заполнить базу и попытаться  сделать  бекап битрикса и восстановление  на  другом хосте.   30 раз.  (каждый день  по  одному разу) и составить график когда  операция завершиласьошибкой.



@темы: bitrix

10:24

домовой
Прочитал комментарии к статье про то что  wd похорронила данные  на приличном проценте  nas  подключенных к тырнету.   Увидел совет предлагающий купить ленточную библиотеку с роботом на  касетах lto-4 или lto-6 и  не колебать мозг. 
Не подозревал что


  • ленточные  накопители живы до сих пор. 

  • емкость  одного картриджа lto-6  составляет   2.5 тб

  • скорость доступа к данным на скорости 130 МБ/сек

  • интерфейсы fibreChannel  ,  sata , sas.


Даже немного жаль что такая игрушка не имеет смысла  если нет  сверхценных  данных записываемых один раз и воспроизводящихся максимум один раз в месяц.

А вот работа ленточной библиотеки весьма завораживает тараканов  в моей голове:) даже появляются абсурные идеи: а не повторить  ли  благородному дону сию конструкцию для касетниц с деталями. Надеюсь меня все  таки отпустит и я не  начну судорожно рисовать  детали для печати  такой игрушки))

11:18

домовой
Пришел usb осциллограф  osc520. Он же loto osc482. В виртуалке  под xp все  запустилось  практически без косяков. Ну подумаешь программа вылетает после того как загрузит прошивку в устройство. при повторном запуске прошивка не загружается и все работает  корректно.

vid  и pid устройства соответствуют hantek 6022.

Точно работает с  фирменной урезанной версией hscope содержащей только прошивки  loto osc*. искать где-то здесь 

Теоретически должен работать с hscope (еще не проверено)  не завелось. пару раз грузилась прошивка в устройство, но hscope так и не распознал железо.


Если будет работать с  hscope  то скорее всего  будет работать с sigrok (pulseview). (Еще не проверено  потому как я не  поставил пакет содержащий прошивки железа)
работает, но прошивка  похоже воспринимает осциллограф как  логический анализатор. (ткнул щупом в руку  и вместо кривой синусоиды наводок увидел меандр)

Выяснилось что осциллограф как минимум пытается работать с программой openhantek6022.  И иногда даже корректно. Закономерности еще не выявлены. возможно я сам дурак.

09:59

домовой
Продолжаются мазохистские отношения с bitrix и шаблоном от аспро. 
Маленькие полезные находки помогающие понимать что откуда взялось
0. Самоочевидное. но от того не менее полезное. Показать что в какой последовательности подключалось.

<?
global $USER; 
if (defined("admin_debug") && $USER->IsAdmin()) 
{
 echo "<pre>"; 
 $tmp=get_included_files(); 
 foreach($tmp as $val)
 if ( strlen( $_REQUEST['search_file'] )>0 )
 {
  if ( !strpos( $val , $_REQUEST['search_file'] )===false ) echo "$val\n" ;
 }
else
{
 echo "$val\n" ; 
}
 echo "<pre>"; 
}
?>


1.  Показать какие глобальные переменные хочет компонент. Имеет смысл  подсовывать  туда где виджет имеет в аргументах  то что  описывается в мануалах "имя переменной где  будет лежать..."

global $USER;
if (defined("admin_debug") && $USER->IsAdmin())
foreach ($arParams as $val)
{
  if (!is_array($val))
   {   if ( isset( $GLOBALS[$val] ) )
    {
      echo  "<PRE>";
      echo  "$val\n";
      print_r($GLOBALS[$val] );
      echo  "</PRE>";
    }
  }
}
Подсунул  это  выражение  во все шаблоны  catalog.section. Узнал много нового про хентай  БДСМ  и  быдлокод призванный  тормозить  весьма шустрые  процессоры.

@темы: bitrix

10:21

домовой
Опыт зло. При попытке посчитать любой 3д принтер я получаю неадекватное и удивительное утверждение вида
"дельта принтер дешевле, немного проще, и менее требователен к качеству деталей".

Текущего опыта вполне хватает чтобы собрать дельта принтер достаточно дешево.
1. калиброваный прокат вместо конструкционного профиля. 
2. алюминиевая  трубка вместо карбоновой  в роли диагональных тяг
3. фанерные основания ( на них тупо наклеить лист с разметкой и аккуратно засверлить) 
4. минимум деталей 


  • 6 деталей удерживающих валы на основаниях,

  • 3 каретки, 

  •  эффектор.



из покупных деталей


  • моторы,

  • драйвера,

  • плата управления 

  • голова  e3d v6 в сборе,

  • экструдер а ля китайский bmg,

  • вентиляторы

  • шкивы,

  • магниты,

  • шарики 



upd: из обидного: эти самые покупные детали тянут на 7 тыс руб даже если не считать плату управления

01:09

домовой
Года четыре назад мне отдали останки hero 9300+ с неработающим дисплеем . Тогда восстанавливать смартфон мне показалось дорого и сложно.
Сейчас же дисплеев почти нет но то что нашлось  стоит с доставкой всего 500 руб. А телефон все же лучше чем абы что из днс.
Тачскрин снял с экрана проволочкой из ide шлейфа за пару тройку минут. собрал в кучу  весь бутерброд тачскрин дисплей платы корпус. И на удивление все работает. остается напечатать утеряную кнопку home, и прикупить тонкие полоски 3м ленты

@темы: мог(б)ильные технологии