Ковид-диссидентство

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

Ноучная наука велит всемирный гулаг

https://twitter.com/drandreaskruger/status/1246008600708947969
https://twitter.com/niedakh/status/1244738807615959045
https://www.medrxiv.org/content/10.1101/2020.03.25.20043109v2
https://www.medrxiv.org/content/10.1101/2020.04.29.20082065v1
https://science.sciencemag.org/content/368/6491/eabb6936

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

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

Есть упоение в бою,
И бездны мрачной на краю,
И в разъяренном океане,
Средь грозных волн и бурной тьмы,
И в аравийском урагане,
И в дуновении Чумы.

Все, все, что гибелью грозит,
Для сердца смертного таит
Неизъяснимы наслажденья —
Бессмертья, может быть, залог,
И счастлив тот, кто средь волненья
Их обретать и ведать мог.

Итак, — хвала тебе, Чума,
Нам не страшна могилы тьма,
Нас не смутит твое призванье.
Бокалы пеним дружно мы,
И девы-розы пьем дыханье, —
Быть может… полное Чумы.

Вспомнил зачем нужен ЖЖ

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

ЖЖ больше не нужен

В связи с тем, что ЖЖ теперь с концами уехал в мордор, надо переселится в DW, а там видно будет.
Впрочем, сюда уже почти никто не пишет, так что разницы уже нет.

Firebird 3.0

Как известно, после многолетних трудов был выпущен Firebird 3.0.
Если подключаться к нему клиентом от Firebird 2.5 то он выдает сообщение об ошибке "connection rejected by remote interface".
Если я правильно понимаю, это старый клиент так реагирует, когда его сервер посылает, когда обнаруживает устаревший wire-протокол, который по умолчанию запрещен (его надо разрешать в firebird.conf или использовать клиент от 3.0): https://stackoverflow.com/questions/30390465/connection-rejected-by-remote-interface-connecting-to-firebird-3-with-pdo

Еще в нем при инсталяции руками надо подключаться локально к произвольной базе (в примерах используется демо-база employee) и создавать юзера SYSDBA на весь сервер. Немного смущает что для манипуляции общей базой юзеров надо подключаться к частной базе - нелогично.
И еще надо давать пользователям - владельцам БД явные права на создание баз.

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

"Как много нам открытий чудных..."

Недавно я узнал, что среди людей моего круга (всякого рода программисты-сисадмины-инженеры-ученые) существуют люди, которых устраивает отсутствие общественного порядка. Как то: насрано в подъездах, надписи на стенах, бухающие гопники, бомжи, машины на зеленой зоне, мусор выбрасываемый на землю и прочая такая нечисть.
А вот наведение порядка посредством установки камер видеонаблюдения, железных дверей и тотального полицейского сапога с zero-tolerance к мелким правонарушениям - не устраивает, ограничивает их вымышленную "свободу" вплоть до того, что они готовы ломать камеры и домофоны.

Уведомления для CI задом наперед

Столкнулся тут с очередным порождением сумеречного хипстерского гения - CI сервер drone.io.
Сам сервер живет внутри докер-образа, собирает и тестирует софт тоже внутри докера - т.е. к одной хипсторятине добавляется еще и вторая - докер.
Далее, если я правильно понял из просмотра документации краем глаза - чтобы узнавать про изменения в репозиториях, этой софтине нужно зарегистрировать "приложение" в гитхабе, которому надо дать доступ к репозиториям и оно на них настроит хуки, которые будут дергать оный сервер за торчащий в интернет http-endpoint. Т.е. запустить его внутри локалки - это надо заниматься пробросом портов, а еще надо бы выяснить какими средствами аутентификации оно прикрыто (вроде OAuth, но с ходу во всей это конструкции из гитхаба, докеров, приложения и хипстософта непонятно, кто есть кто).

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

Типы данных для телеметрии

В процессе пиления датчика co2 столкнулся с такой фигней: если датчик сам не передает тип данных - то каждая доработка софта на контроллере датчика вынуждает дорабатывать и парсер его сообщений, чего делать совершенно нет желания.

Поначалу данные в udp-пакетах с датчика выглядели так: 2016-10-29T21:26:40.990599,ff8601e440402eb92e
Потом вот так, чтобы сразу видеть концентрацию: 2016-10-29T23:48:35.310594,ff86027840042e305e,632

А потом я решил это дело засунуть сразу в эластик с кибаной, чтобы рисовать графики, причем у нас туда данные (мониторинг нашего софта) идут в виде json-объектов в сообщениях через mq-сервер. Наиболее прямой путь такое делать - это поля от датчика разложить в виде полей json-объекта, тогда эластик автодетектит типы полей и все становится сразу доступным для запросов и графиков.
Но прога, которая транслирует udp-пакеты в mq сообщения - вообще говоря, тестовый/отладочный клиент от моей mq-либы и впихивать в нее прибитые гвоздями имена полей от одного конкретного датчика - лютый грех, такой код должен быть универсальным, очевидно.
Поэтому формат пакета превратился в: "utc=2016-10-30T12:04:08.740605,hex=ff8602db40402e30bf,co2=731", а программа просто конвертирует это в json и добивает служебными полями от себя (уникальный идентификатор ноды, тип сообщения, и прочее такое). В таком варианте я смогу, например, добавить еще пакетов от других датчиков - давления, освещенности, влажности, радиации и температуры, не переделывая транслятор.

Фактически, это структурный тип данных - смысл данных определяется тем, какие в нем есть поля. Это очень удобно для обобщенной обработки.

При этом, когда я работаю с чужими железками, там почти всегда типы данных прибиты гвоздями - начиная от просто упакованных бинарных структур, заканчивая csv с позиционным назначением полей или бинарным массивом из кучи бинарных пакетов с CRC и прочим.
Понятно, что так сильно экономится GPRS-трафик для телеметрии и байтики в прошивке, но почему бы этим устройствам сразу после подключения по TCP не передавать метаданные протокола, которые можно было бы грузить в парсер и он автоматом бы становился совместимым с тем, что устройство будет передавать после этого.
Т.е. хотя бы передавать csv заголовок для csv-форматов, или массив "тип, имя, длина" для бинарных структур или еще что-нибудь в том же духе.

LinkIt Smart 7688 и датчик CO2

Дошли наконец-то руки запустить очередной бриколяж - датчики CO2 mh-z19 (https://geektimes.ru/post/272090/)
Наиболее прямым способом, без ордуин и прочего такого оказалось завести микрокомпутер с OpenWRT на борту - LinkIt Smart 7688 (http://wiki.seeedstudio.com/wiki/LinkIt_Smart_7688).

Подключение достаточно влоб: 3.3v usb-uart на пины земли, P9 и P8 для отладки загрузки c serial консоли, сам датчик на пины земли, +5вольт питания и P18(RX linkit)-P3 (TX датчика) P19(TX linkit)-P2(RX датчика).

USB-UART, похоже желательно подключать после питания - а то он через TX и защитные диоды начинает пытаться питать все это устройство, по крайней мере светодиод питания загорается сразу.

Питать его желательно от хорошего USB не сильно длинным проводом - похоже, он при включении wifi-модуля иногда проседал у меня по питанию и перезагружался сам по себе.

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

Дольше всего времени ушло на то, чтобы чтобы разобраться с wifi - который не умеет каналы выше 11 по умолчанию, а у меня модем сел на 13 канал и его вообще не было видно и на то, чтобы вспомнить питон и как на нем отправить массив байт в uart и получить обратно ответ (2 и 3 питоны ведут себя по разному).

Тестовая прога на питоне: https://gist.github.com/metametaclass/fdcd53e4e699ed5a0a780bc74a8a5eca, отправляет результат опроса по udp на комп, где запущен nc на порту 49344 и всякие тестовые прожки на 49345.

Получается вот такая картинка, ночью - с закрытой дверью, днем с открытой и датчиком, на который я дышу: http://www.cacodaemon.org/co2/20161029_212640_20161030_153355.png