Top.Mail.Ru
? ?
flag

eddy_em


Емельянов Эдуард Владимирович


[sticky post]Содержание
Костерок
eddy_em
Здесь - краткое содержание моего графоманстваCollapse )

promo eddy_em февраль 18, 09:43 4
Buy for 10 tokens
По-отдельности все четыре в своей "мультиплате" проверил. Т.к. использовал преобразователь 485+232 на CH340, быстрей 2Мбод проверить не вышло, нужно на pl2303 искать, или, что проще — два интерфейса между собой соединить. А мне вчера дипсик как раз почти и сказал, что ошибка у меня в ДНК, когда я…

Вот, ЖЖошка напоминает, мол "напиши", а о чем?
flag
eddy_em
Выходные провел, наконец-то, в полной "просрации": попил пивка (да, сорвался, надеюсь вернуться обратно в трезвое русло к отпуску), ну и не только пивка…
Тем временем кое-кто, нарушив "священный обет" логику, умудрился переполюсовать питание. ОК, вместо актуальной и очень нужной работы занимался тем, что починял (благо, еще молодой коллега неплохо помог, а то бы я точно в абсолютный запой ушел) помершее оборудование. К счастью, отделались "легко". А другой коллега предложил "штрафовать" за сожженое оборудование. Ну, на этот раз вышло примерно от ~15тыр (если реально смотреть на то, что мы все починили) до ~300тыр (если смотреть на то, что нужно полностью компенсировать стоимость уничтоженного, хоть и частично, оборудования).
А и ладно.

В своей "сниппетобиблиотеке" добавил функцию "демонизации" (т.к. классический int daemon(int nochdir, int noclose);
вообще не пригоден к реальному использованию: он первым делам форкается, а потом убивает "папу", соответственно, если его из-под openrc или sysv-init запускать, супервайзер решит, что демон помер, начнет пытаться его восстановить, и отвалится с ошибкой "too much respawn" (или как оно там).

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

"Демон монтировки" переписал в минимуме под свою "snippets-library", т.к., напомню, "внезапно" оказалось, что в таперешной glibc не существует struct termio, а тупо переименовать ее в termios, сами понимаете, нельзя. Ну, в моей библиотеке используется struct termios2, поэтому есть надежда, что, пока не появится "3", оно deprecated не будет.

Ну и для будущих "железных разработок" вынес урок: лучшей защитой "от дурака" будет включение "обратных диодов" вообще везде! И по питанию, и по входным интерфейсам (когда по "земле" USB фигачит +12В, будет плохо; благо, сработал USBLC6, взяв на себья обратку, и токоограничивающие резисторы по 22Ом тупо сгорели, правда, вместе с USBLC6 — зато, МК не помер).

Избавился от хлама
flag
eddy_em
Таки удалил "телегу" и "ватсап" с лопатофона. Смысла держать нерабочий софт нет. Кому надо, на мыло напишут. Или в BiP.

Демонов много не бывает!
flag
eddy_em
Я писал уже, что после "обнуления" SSD на компьютере "роботелескопа №1", мои демоны "превратились в тыкву". И если демоны купола и элементов телескопа шустренько получилось переделать на основе моей обновленной "библиотеки сниппетов", то с демоном монтировки "10micron" похуже: там и протокол пообширней, да и обязательно нужно метеоданные откуда-то получать. Изначально я запускал 100500-го клиента и опрашивал метеодемон (раньше он был на этой же машине, но теперь он на отдельном "метеокомпьютере"). Теперь решил, что ведь метеоданные много кому нужны будут, незачем на каждый чих по сокету открывать.
Попросил дипсик, он мне быстренько набросал "скелет". Я его подправил под реалии, удалил "загоны", вот, что получилось. Таки понемножку привыкаю поручать "грязную работу" дипсику: сам бы я этот же костяк на часик подольше бы писал. Понятно, что "as is" он нафиг не нужен: я его к своей "сниппетобиблиотеке" прилеплю, чтобы и разбор аргументов командной строки упростить, и запуск сокета и т.п.…
Часть его "загонов" я оставил в комментариях. Кому интересно, можете поржать. Особенно с его варианта "демонизации". Дважды форкнуть "шобы было" — это сильно! Да и дескрипторы вручную закрывать и "дупать" — зачем, когда есть функция daemon()? Она и chdir при необходимости сделает. Правда, я тоже эту функцию не использую: она вызывает fork и киляет родителя, что не позволит запускать такой демон средствами openrc, а только через его rc.local. Я обычно оставляю "родителя" пасти "дитятку", и если тот помирает, через некоторое время родитель опять делает fork и запускает нового. А паузу по-разному выдерживаю: где-то по 5с постоянно, где-то наращиваю ее вплоть до пяти (а то и пятнадцати) минут…
А еще один "загон" дипсика - в логгировании средствами syslog! Да если я каждую фигню (особенно на уровне LOG_ANY) буду логгировать таким образом, у меня в /var/log/messages такая каша будет, что полезные системные вещи просто не найдешь! В моей "сниппобиблиотеке" есть функции логгирования, их и использую. Заодно и logrotate обычно на эти логи настраиваю, чтобы не жирели.
Ну, а что до демонов, стараюсь, чтобы если уж "вдруг" появится общий для всех телескопов планировщик, ему было несложно выдавать задания любому телескопу: независимо от реального железа, "наружу" торчит однообразный интерфейс. Те же светоприемники нонче через мою ccd_capture окучиваю. Хоть в ней еще и есть неисправленные баги + ее надо бы под последнюю версию "сниппобиблиотеки" переписать (и достаточно хорошо тем самым проредить код серверной части), в режиме standalone работает без нареканий.

Qelectrotech?
flag
eddy_em
Поставил. Не запускается. Сделал su в аккаунт дочки. Запускается. Чуть поменял локаль - и там не запускается, причем, после смены назад запускаться перестал. Даже под рутом первый раз открылся, а потом - фиг.
strace показывает, что он какие-то шрифты не может найти, а потом внезапно, без предупреждения, делает munmap'ы и выходит со статусом 0! Ну, офигеть! Ладно бы ошибку какую выдал, сегфолт…
При этом на работе запускается. Чертвщина какая-то.
Думал потренироваться, хоткеи настроить и прочее... А по ssh, хоть и рабочая локалка в дом заходит, гонять иксовое приложение — так себе занятие!

Shit! Я сглазил!!! На работе он тоже перестал запускаться…

P.S. Думал с сайта разработчиков скачать и попробовать вручную установить. Но… Ну, в общем, вы догадались!

UPD. В общем, нашел на гитхабе, скачал. Попрыгал с бубном, доустанавливая недостающее (даже пришлось убогий qt-designer установить - вот уж верх рукожопия у разработчиков!!!). Интересно, что make install от рута ругнулся, пришлось сначала от себя же запустить make install, оно там чего-то еще поделало (тоже извращение: make install должен исключительно файлы копировать), потом ругнулось, что рут нужен. А тут-то я от рута и запустил. Авось, не умрет…

Поигрался немножко. Вообще не понял, как по-человечески привязать контакты к пускателю или реле! Т.е. если реле К1, то контакты К1.1 и далее. А это чудовище либо рядом с реле рисует контакты и подписывает их координаты по схеме, либо рисует рядом какую-то табличку, расписывая в ней координаты нормально замкнутых и нормально разомкнутых! Ну это ж вообще дичь какая-то! Мне ГОСТ не нужен, но и это ублюдство - тоже! Хочу К1 и К1.х!..
Если не разберусь, схемы буду от руки рисовать, и сам же страдать потом…

"Рисовалка" силовых схем
flag
eddy_em
Искал-искал, но, похоже, кроме qelectrotech ничего и нет. А интерфейс там не такой приятный, как в кикаде… Еще и адски перегружен.
В чем же народ рисует схемы электрощитов и прочей силовой разводки? Естественно, софт исключительно под Linux и исключительно свободный…

Завтра поеду на гору наводить порядок в электрощитах: нарисую, где какие автоматы стоят, и, если будет возможность переставить, поменяю — чтобы от потребителя автоматы по нарастающей шли, а не как сейчас (когда в щите стоит автомат на 40А, потом — на 63А, потом — на 16А, за ним — на 25А…). Если не получится просто переставить, составлю список и поинтересуюсь у электриков на БТА и внизу, не поменяют ли они мне автоматы на нужный номинал. Или в закупки список отдать, хотя что с лишними автоматами делать — не солить же! А их уже накопилось штук 12… И все — долбаные "Цэшки". Хотя, там местами нужны "бэшки", а то и "ашки".

Как вам такой косяк?
flag
eddy_em
        int l = USB_receivestr(inbuff, 255);
        if(l > 0){
            parse_cmd(inbuff); // call it even for NULL (if `flood` is running)
            if(Tms - SPIctr > CANONPROC_INTERVAL){ // not more than once per 10ms
                SPIctr = Tms;
                canon_proc();
            }
        }

Называется, "промазал", когда щелкал средней кнопкой мыши…
А в итоге полностью поменялось поведение объектива: любое телодвижение — только по поступлению команды.

Вчера обновил, сегодня - переделал…
flag
eddy_em
Писал, что демоны для работы с баадеровским куполом и астросибовским телескопом переделал под мою новую библиотеку сниппетов… Это я их еще не проверял ☺
Сегодня утром повесили компьютер и, внезапно, оказалось, что старые демоны вообще не хотят "заводиться", да и порты блокируют с чего-то вдруг (хоть там в открывании портов никакого криминала я не видел, разве что, возможно, "по-быстрому" переименованные struct termio в struct termios что-то возымели, но это вряд ли: тем более, termio у меня только в настройках терминала участвовала).
Ну, да ладно. Стал запускать обновленные демоны, а они глючат. Это я парсер криво нарисовал. Не учел некоторых "документированных и не очень" особенностей протоколов. Скажем, у баадера вообще нет признака конца строки. Просто до опупения принимай данные, а как опупел - обрабатывай. А у астросиба на некоторые сеттеры выдается "OK\r" (причем, что интересно: вместо "\n" они "\r" используют, а "\n" там вообще нет!), а на некоторые (пока только один выявил - останов движения фокусера, но я по всему протоколу и не пробегался) — тишина. Еще и зачем-то астросибовский телескоп на геттеры сначала "OK\r" выдает, а потом — данные, хотя, казалось бы: зачем? Данные-то все равно выдаются…
Баадеровский демон по протоколу почти без изменений остался: open/close/status/stop, да добавил weather (показания датчика погоды). Плюс добавил вывод "временных меток" геттеров состояния/погоды. А в геттер состояния - еще и вывод сообщений о "неудавшихся" по той или иной причине командах (т.к. ввод-вывод асинхронный, невозможно сразу сказать, что какая-то ошибка) + сообщение "PROHIBITED", если запрещены любые действия, кроме закрывания купола (правда, он в такой ситуации и сам закроется).
Телескопный демон помимо прежних open/close/status (status, кстати, тоже изменился по образу и подобию предыдущего демона) получил еще и управление фокусом (актуально только для работы в кассегреновском, т.к. в прямом используется FLI'шный фокусер; поэтому я так долго этим не занимался, на втором телескопе фокус через баш-скрипт управляется), а также вентиляторами охлаждения зеркала. Ну и status еще и температуры выводит (можно проверять, охладилось ли зеркало до окружающей среды, т.к. в подкупольном всегда теплее).
У астросибовского телескопа на зеркале еще и "грелка" есть, но я сомневаюсь, что ее когда-либо придется использовать. Разве что внезапно нагрянет теплый влажный фронт, но в этом случае будет "forbidden" по погоде…

Может, кому пригодится: "разблокирование" последовательного порта
flag
eddy_em
Сегодня с Тимуром отвезли утром компьютер на "роботел-1", а демоны мои не работают! Только спустившись, обнаружил (по strace), что никаких блокировок нет, а просто подвисает сисвызов open при попытке открыть порт. Погуглил: оказывается, если включить аппаратное управление потоком или что-то там еще, то порт будет блокироваться сигналом DCD. С USB-шными такого не происходит.
А началось все с обновления glibc: выкинули termio, заодно, похоже, "более правильно" сделали работу портов. На старой системе ("роботел-2") те же демоны превосходно работают.
В общем, решается проблема так:
stty -F /dev/ttySx clocal

Т.е. отключаем реакцию на ненужные вещи.

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

Что за [censored]?
flag
eddy_em
Смотрю: у меня жутко старый arm-none-eabi-gcc. Решил с сайта ARM скачать свежий. И таки что бы вы думали? Какой-то пидарас (то ли с "той", то ли с "этой" стороны) банит запросы!
И даже "404" или "503" не появляется!!! Тупо долго грузится и… "Hmm. We’re having trouble finding that site."!
Ну и откуда мне его качать? Устанавливать посредством crosstool-ng пробовал когда-то. Не выходит: либо работают Cortex-M0, но не работают M3, либо наоборот! А чтобы, как с сайта ARMян, все работало - не выходит! Да и со сборкой тулчейна какие-то косяки вечно были.
Что, на 12.2 сидеть, который я когда-то успел скачать на работе? Шышнадцатый хачуууу (или хотя бы 15.2.1)!

Я слыхал уже, что у нас в стране есть враги народа, которые умудрялись даже кратковременно забанить доступ на github! А это — вообще дичь дичайшая, т.к. огромное количество хороших вещей есть только там. Те же разработчики российских дистров знатно тогда подохренели…

P.S. Похоже, пидарас - с "этой" стороны:
traceroute developer.arm.com
developer.arm.com: Temporary failure in name resolution
Cannot handle "host" cmdline arg `developer.arm.com' on position 1 (argc 1)

10 лет расстрела и на Колыму гондурасить твари!

P.P.S. Сволочь - однозначно с "этой" стороны, т.к. после того, как я первым в /etc/resolv.conf на маршрутизатре воткнул "гугольный" DNS, сайт открылся! Правда, архив все равно не получилось скачать…
Ну вот зачем, интересно, эти пидарасы такое творят?

Ростелеком: у вас работают пидарасы, вы в курсе?