Top.Mail.Ru
? ?
flag

eddy_em


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


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

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

Избавился от хлама
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, сайт открылся! Правда, архив все равно не получилось скачать…
Ну вот зачем, интересно, эти пидарасы такое творят?

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

Чуть обновил репозиторий small_tel
flag
eddy_em
Код на гитхабе.
В прошлый четверг отвезли на гору новый аккумулятор (правда, все равно, сколько я не указывал, что обязательно "гелевый", взяли самый обычный), включили инвертор первого купола. Заработало. Кинулись проверять, как оно с компьютера будет работать, а фигвам: SSD в очередной раз "обнулился". Как обычно: полностью затерт нулями, а SMART показывает, что "все хорошо, прекрасная Маркиза".
Тимур опять поставил туда кальку, а я стал обновлять. И обратил внимание на то, что старые демоны вообще перестали собираться! ОК, немножко временно подправил, но таки сел и вчера-позавчера обновил (точней — полностью переписал, уже с опорой на мои usefull_macros). Так куда удобней, потому что лушче один раз найденный косяк в библиотеке исправить, чем в каждом из 100500 демонов!
Думали сегодня съездить компьютер повесить, но погода "нелетная": снег идет, купол открыть нельзя. Съездим, как только погода позволит побаловаться с куполом. А я к тому времени еще и демон монтировки "на новые рельсы" переведу.
В новые демоны добавил также флаг "PROHIBITED": если "пнуть" демона сигналом SIGUSR1, выставится этот флаг. При этом купол и створки телескопа закроются, и все демоны будут принимать лишь команды "закрыться и парковаться". Если пнуть сигналом SIGUSR2, то флаг снимется — наблюдения можно будет продолжать. Это у меня такой временный велосипед до перехода к глобальному диспетчеру наблюдений (но с такой скоростью развития событий, подозреваю, что его не будет никогда; да и, как оказалось, малые телескопы почти никому не нужны).
А еще, я значительно переделал библиотечку для работы с SidServo и сегодня у меня впервые даже получилось более-менее сносно (лучше 1'') навестись и сопровождать условный объект, движущийся со скоростью 15''/с по часовому углу и 0.1''/с по склонению (в общем, эдакая эмуляция реальной звезды). Тоже код в тот же small_tel запушил помимо локального репозитория. Обратил внимание на то, что как я ни бился с коэффициентами ПИД-регулятора, все равно по часовому углу какая-то слишком уж большая болтанка: по склонению "сидит" лучше, чем 0.1''! Надо разбираться, что там да как. Еще и глючит почему-то преобразователь с энкодеров в USB. Возможно, еще какой-то скрытый баг закопан (я заметил, что нет события отключения терминала, это может привести к переполнению буфера; буду выяснять, почему).

P.S. Про "Observations prohibited". Я периодически вижу, как наблюдатели убивают Ц-1000, открывая его в погоду, когда наблюдать запрещено. И если на БТА этому противодействуют АСУшники (хотя, были прецеденты, когда и БТА был открыт в запрещенную погоду), на Ц таких "менторов" нет. Есть два решения проблемы: а) на уровне администрации (запретить наблюдать тем, кто замечен в стремлении убить телескоп), и б) на уровне разработчика (программно закрывать купол в непогоду и не позволять его открыть, пока не сойдет туман/кончатся осадки/влажность понизится/ветер стихнет).