Комплюктерное, всрато-айтишное

Поразбирался тут с тремя околокомплюктерными проблемами.

Первая: встраиваемая операционка не реагирует на ввод с UART на конкретном семействе микроконтроллеров. Решение: запустить GDB-сервер, потыкаться отладчиком вплоть до уровня HAL, посмотреть осциллографом на отсутствие обмена по UART, обновить прошивку отладочного адптера. Все более-менее документировано или понятно из «общего образования» (то бишь книжки Столярова, не устану рекомендовать, это лучший русскоязычный учебник для «программистов вообще»). Неприятно, но жить можно, примерно 3/10.

Вторая: после обновления Android Studio не компилируется старый проект. Решение: гуглить, смотреть Stack Overflow, применять безумные рецепты оттуда, три-четыре раза сменить версию gradle. Безумно, непонятно, какого хера IDE лезет в систему сборки?.. Не рекомендую, 6/10.

Третья: поставить Lineage OS на планшет Samsung Galaxy A Tab 10.1 2016 года. Решение: читать ебаные форумы, качать говно с файлопомоек, из блядских советов по «прошивке зверька» выбирать те, какие подойдут для твоего «андрюшки». Полный пиздец, повторять нельзя, 9/10.

И еще про Code of Conduct

Будет и у [info]eddy_em праздник — разработчики Rust посрались по поводу CoC и будет теперь у нас два раста — просто Rust и ПедеRust!

https://habr.com/ru/news/t/590869/

Очередной наброс

В 2021 году умеют работать в Unix-подобной командной строке не виндузятники (с ними все понятно), и не линуксоиды (это в массе своей позеры, воткнувшие на ноутбук убунту), а только лишь макоебы.

Еще несколько слов про отечественное айти-образование

Я все никак не соберусь и не напишу обещанные «многабукв» про околоайтишное образование — но вот еще маленький фактик в копилку. Как я уже писал, жизнь свела меня с первокурсниками магистратуры одного из считающихся неплохими московских вузов — и тем удивительнее обнаруживать у них катастрофические пробелы в знаниях! Например, на прошлой неделе выяснилось, что многим из них совершенно незнакомо слово «mutex» — хотя казалось бы, что курс под названием «Операционные системы» им читали в бакалавриате. Что должен подумать самоучка, читавший книжки Таненбаума? Неплохо, мы можем говорить на одном языке!

Но нет, «Современные операционные системы» Таненбаума включены в программу того курса лишь как необязательное дополнительное чтение, лектор рассказывает в основном об администрировании ALT Linux, а рекомендованный учебник пестрит определениями вроде «Менеджеры ресурсов: этот слой состоит из мощных функциональных модулей, реализующих стратегические задачи по управлению основными ресурсами вычислительной системы» (и как подсказывает коллега [info]matritcasiberia, это «определение» является общепринятым в российском образовании). Определение шикарно в своей бессмысленности — впрочем, подозреваю, что родилось оно из обвешивания прилагательными вполне невинной фразы «Этот слой состоит из модулей, управляющих ресурсами системы». Если «вычислительная система» еще как-то сюда вписывается, то пояснить, чем «мощные функциональные модули» отличаются от не мощных и тем более от немощных не смогут, наверное, даже авторы учебника (или многих учебников — фразочка растиражирована буквально в каждой «рекомендованной» минобразования книге!).

Естественно, «выхлоп» от подобного ПТУшного (и даже хуже) курса в вузе — примерно нулевой. Даже навыков администрирования ALT Linux не хватает, например, для понимания несложных инструкций по работе в консоли Ubuntu, а о вопросах, имеющих отношение к функционированию ядра ОС и даже простых многопоточных программ (что такое планировщик? зачем нужны примитивы синхронизации?) студенты не имеют вообще никакого представления.

Возникает вопрос — а зачем тратить четыре года жизни в бакалавриате, когда иной «колледж» (читай, ПТУ) за три года научит гораздо лучше?

О силе нетворкинга

Чатик с мужским, можно даже сказать, дедовским населением. Обсуждают животрепещущие темы — например, для чего в инстаграме промеж фоточек телочек показывают рекламу «гостиниц на час»:

…зачем делать макияж с QR-кодом, похожим на настоящий, но не работающим:

…успехи студентов МИЭМа, «IoT-академии Samsung» и лично фирмы Rightech в деле автоматизации «гостиниц на час»:

https://www.hse.ru/news/life/527990527.html

…а также — что такое «кьюаринг» и нахер такая банковская услуга нужна.

Постепенно из предложений набить QR-код на крестце и прочих смехуечков рождается идея стартапа по вшиванию в блядей кибернетических имплантантов (QR-код для оплаты показывать, считать количество фрикций, тариф «на полшишечки», это вот все) — кажется, надо срочно бежать искать инвестора!

Low IQ

Пересказали прекрасный диалог, состоявшийся в одной из фирм, занимающейся контрактной разработкой и мелкосерийным производством электроники. Во многих их устройствах применяются стабилизаторы напряжения NCP512 — не знаю, почему (ничего особо выдающегося там нет), скорее всего — потому что когда-то купили бобину на 100500 штук.

Все шло хорошо, пока одному из заказчиков не потребовался BOM (bill of materials, перечень элементов), сделанный по его, заказчика, отраслевому стандарту — с описанием каждой поганой детальки. Ну напротив резисторов-конденсаторов его написать легко, а вот с микросхемами пришлось помучиться, банальные слова Integrated circuit заказчика не устроили. Где взять небанальное описание? Разумеется, из первой строчки даташита! Но после копирований-вставок из pdf в Excel и обратно прекрасная фраза

LDO Regulator, 80 mA, Low Dropout, Low Iq

превратилась сначала в

LDO Regulator, 80 mA, Low Dropout, Low Iq

а потом и вообще в

LDO Regulator, 80 mA, Low Dropout, Low IQ

— видимо, в последнем случае какая-то очередная автозамена что-то слышала про тест Айзенка.

Когда документы уже были готовы для отправки заказчику, кто-то засомневался — а стоит ли писать, что у нас компоненты такие, с низким IQ? Решили уточнить у инженеров, позвонили и спросили:

— А что такое NCP512?
— Да стабилизатор напряжения тупой, мы их везде ставим!

Сопоставив слова инженеров про «тупой» и low IQ, продажники крепко задумались — и решили от греха подальше упоминания про low IQ из отправляемых заказчику документов исключить.

Про QR-коды и тоталитаризм

Вот некоторые утверждают, что введение повсеместных QR-кодов — это ползучий тоталитаризм:

https://t.me/SkiperKakao/1003

Не буду спорить с общим посылом — но хочется добавить, что одно из самых зверски тоталитарных государств прекрасно проводило свои тоталитарные зверства без полной паспортизации населения (и это ставять ему в вину!). Что же касается пресловутых QR-кодов — то они ничем не хуже и не лучше других порождений государственного контрол-фричества (оно же wannabe-тоталитаризм) вроде регистраций по месту жительства, ИНН, СНИЛС, полиса ОМС и прочей бессмысленной ерунды типа предъявления паспорта при покупке билетов на междугородний автобус.

PS Вообще интересно, почему именно QR-коды, а не замечательный Datamatrix с акцизных марок?

Про коррупцию

Тут вот в фейсбуке доцент РАНХиГС жалуется, что совершенно невозможно потратить деньги с гранта:

https://www.facebook.com/alina.garbuznyak/posts/5284528958258528

А с другой стороны, какому «народному хозяйству» и «государственной службе» могут научить люди, неспособные самостоятельно реализовать простейшие коррупционные схемы?

PS А еще доцент топит за Навального, туда и дорога.

Introduction to Embedded Systems — A Cyber-Physical Systems Approach

Прекрасная, просто замечательная книжка.

Во введении и первой главе наивного читателя заманивают рассказами про «интернет вещей», «киберфизические системы», «индустрию 4.0» и прочий набор стандартных баззвордов. Читатель уже ждет, когда же ему расскажут про то, как на Ардуине и Распберри сделать очередной умный дом — но тут же в главе 2 ему выкатывают второй закон Ньютона, на пальцах объясняют кусочки термеха, пишут всякие дифференциальные уравнения, а немногих выживших добивают преобразованием Лапласа. Дальше, конечно, становится немного полегче, всякая там дискретная математика и конечные автоматы особого полета фантазии не требуют, а местами даже предлагают написать немного кода на Си. Перевернуть свое представление о встраиваемых системах можно по ссылке:

https://ptolemy.berkeley.edu/books/leeseshia/

А если серьезно, без смехуечков — это прекрасный пример, чему надо учить магистров «околокомпьютерных» специальностей — не «рукоделию» (это бакалавр должен уметь собрать из двух ардуин и распберри подобие работающей системы), а тому, как обосновать, что эти две ардуины с засунутой туда FreeRTOS работают правильно.

Про стартапы

Вот увидел в одном телеграм-канальчике новость:

https://www.wsj.com/articles/apple-wants-iphones-to-detect-car-crashes-auto-dial-911-11635768001

Сразу же началось обсуждение в духе «а мы такое предлагали в прошлом году», «а у нас такое мобильное приложение студенты два года назад на конкурсе инноваций показали» — но ни разу в этом обсуждении не прозвучали слова вроде «Эру-Глонасс с 2015 года ставят» или «Ителма такую херню для всего российского автопрома делает». Как бы показывает уровень всех этих конкурсов инноваций со студенческими стартапами вместе взятыми.

А ведь у Эппла есть неоспоримое преимущество — когда основные конкуренты (Эра-ГЛОНАСС и европейский eCall) звонят в 112, их система набирает номер 911 — что показано на этом весьма впечатляющем графике!

Это пиздец

Вот мне интересно, лет через этак 7-10, когда этот Ярослав сможет принять участие в Worldskills, к которым он так серьезно готовится — будет ли этот ворлдскиллз все еще котироваться?

«Подготовка к международным соревнованиям», пиздец просто.

ВШЭ переименуют в ДВФУ, а Владивосток — в Нью-Москву

Пишут, что вместо гадалки Ирмы вшэшкой будет рулить секта имени Щедровицкого:

https://novayagazeta.ru/articles/2021/10/29/valeriia-kasamara-pokinula-dolzhnost-prorektora-niu-vshe-news

Чудесный мир российского айтишного образования…

…в котором студент выпускного курса бакалавриата по специальности «Информационные системы и сети» ни разу не слышал про модель OSI, а для студента специальности «Информатика и вычислительная техника» слова «быстрая сортировка» означают, что надо вызвать метод sort().

Люблю таких дурачков

https://twitter.com/jnrUnderhood/status/1450412326776197126

Чувак рассуждает про отличия «энтерпрайза» и «стартапов» — мол, в первом завсегда есть деньги и ресурсы на любые хотелки, а у вторых денег нет. Так вот, это было бы не так смешно, если бы я буквально только что не обсуждал бы с коллегами по крупной международной корпорации, как купить на алиэкспрессе измерительный прибор, а к нему — б/у Thinkpad на авито.

Да и про стартапы у меня есть история, когда в рамках срочного освоения сколковского гранта были куплены четыре топовых макбука (а вот осциллограф с алиэкспресса так и не купили, за алиэкспресс хер возврат НДС получишь).

Теоретикам и практикам контроля версий

А вот вопрос созрел. Предположим, есть у нас вполне себе обычный IoTшный проект, состоящий из множества взаимосвязанных частей:

— схемотехника и печатная плата нескольких похожих устройств, библиотека компонентов для Eagle или DipTrace;
— прошивки — несколько, своя для каждого устройства (скорее всего, на базе Riot OS или Contiki, и возможно, с доработками самой ОС — то есть с ней обычно притаскивают целиком ее репозиторий);
— приложение для Android или какой-то там Progressive Web App;
— вебовский бекенд (скорее всего, на Django).

«Команда» — ну, по человеку (или по «полчеловека») на каждую из частей, проект новый, каждый взаимодействует с «соседями» (схемотехник-эмбеддер-фронтендер-бекендер). Вносят ли доработки в соседние части — возможно теоретически, но вряд ли.

Больше всего меня тут напрягает, что очень много вопросов будет «на стыке» частей (допустим, прошивка версии такой-то перестала работать с устройством версии такой-то, кто виноват?), в принципе, сюда просится монорепозиторий и общий для всех трекер задач — но как я представлю монорепу с вот этим всем, у меня глаз начинает дергаться. Общий трекер — возможно, но как оно будет жить с несколькими репозиториями для кода?

А как бы вы организовали контроль версий и трекинг задач в таком проекте? Интересуют все аспекты — от используемых инструментов до «оргмер».

Еду бухать два дня

Опробуем в этот раз разнообразную продукцию Кашинского ЛВЗ. А заодно, чтобы иметь повод для пьяной драки — читают ли меня специалисты по этим вашим блокчейнам?

Вот смотрите — есть приватный блокчейн, в нем с какой-то частотой генерируются блоки. Вопрос — бывают ли в природе механизмы изменения частоты генерации блоков в зависимости от количества попадающих в них транзакций, например?

А давайте результаты побыстрее!

Есть в «дорожном ралли» — особенно в его блудильно-квестовом подвиде — забавная составляющая, связанная с подсчетом результатов. В большом и серьезном автоспорте все просто и понятно — скажем, в кольцевых гонках процедура награждения должна состояться непременно через 15 минут после финиша и регламентирована вплоть до высоты ступенек подиума и размера груди у девушек, подносящих всякие там кубки и медали. Впрочем, победитель определяется просто и особых вопросов ни у кого обычно не возникает (нет, бывают иногда странные правила вроде Ле-Мановских, где результат определяется по пройденному за 24 часа расстоянию — но с ними тоже в целом все понятно). Легко определить результат и в ралли, и в дисциплинах вроде ралли-рейдов — хоть там и не всегда работает правило «кто самый быстрый — тот и папка».

А вот когда речь заходит об «автофизкультуре» — то подсчет результатов становится ну этак на порядок-другой сложнее, особенно, если соревнование имеет яркий «квестовый» оттенок, типа ретро-ралли. Вот казалось бы — чем может отличаться подсчет результатов соревнования, сделанного по простому определению — «проехать заданный маршрут, соблюдая определенный скоростной режим»? Беда в том, что так ездить умеют многие, и чтобы усложнить жизнь, авторы трасс придумывают разнообразные сложности, чтобы запутать участников.

Например — как вам идея, что ошибившись в прохождении маршрута, вы проходите те же судейские пункты, но в неправильном порядке? Или приезжаете на пункт внезапного контроля времени с лютым опережением? Да даже банальные соревнования на «регулярность движения», когда на километр дистанции приходится несколько точек смены заданной скорости, превращаются в сложную проверку внимательности экипажа.

Впрочем, проблема тут возникает и у самих же организаторов соревнования. Как подсчитать результаты, когда ни один из участников не проехал по маршруту правильно? Как «разгрести» протокол судейского пункта с множеством повторных прохождений? Тот же подсчет норматива «регулярности движения» запросто может оказаться неверным, о чем незамедлительно напомнят участники (был у меня случай, когда я зашел в секретариат «Ралли МАДИ» с множеством претензий по подсчетам нормативов, посидел часа полтора с судейской бригадой, пересчитывая нормативы, и вышел победителем соревнования — правда, все было вполне честно, с моими подсчетами согласны были и другие участники).

Естественно, все это обычно сильно усложняет подсчет результатов — и редко бывает, что результаты оказываются готовы в определенное регламентом соревнования время (на МАДИ порой сидят до раннего утра следующего дня). Но то МАДИ, а на каком-нибудь ретро судейская бригада находится в крайне сложном положении — кабак снят на определенное время, иногда заказаны артисты, и награждение просто нельзя особо сильно сдвигать. Недавно был свидетелем крайне курьезного подведения итогов — в одном из зачетов обнаружились сложности с подсчетом, и аж на голосование участников был вынесен вопрос — провести награждение сейчас, по не совсем корректным результатам, или дождаться подсчета и собраться той же компанией для торжественного награждения через пару дней?

Не помню, какое в итоге было принято решение, но сама постановка вопроса — выдать «абы какие» результаты прямо сейчас или дождаться точных, но потом — чем-то напомнила мне судьбу электронной голосовалки в Москве республике Анчурия.

А вот вам еще сказочка для самых маленьких программистов

Лежит файл, в том файле SQL-дамп, в SQL-дампе поле с JSON, в JSON-е NaCl-овский криптоконтейнер, в криптоконтейнере protobuf, а в protobuf’е смерть Кащеева.

И еще сказочка про выборы и ленивого программиста

Люблю я истории про O(N²), ничего не могу с собой поделать. Так как в этот раз все пока что держится на слухах — пусть это будет сказочка про республику Анчурия, где-то в Латинской Америке.

Анчурия — республика демократическая, в ней есть аж четыре партии — Пиратов, Жуликов, Воров и Коммунистов, и даже иногда проводятся выборы в парламент. Более того, Анчурия не чужда высоким технологиям и решила применить на очередных выборах модную новинку — электронную голосовалку на блокчейне, скачав ее прямо с гитхаба.

Одного не знали бедные любители высоких технологий из Анчурии — писал ту голосовалку не очень образованный программист Вася, и время подсчета результатов в той голосовалке зависело от количества избирателей квадаратично. Но Министерство Информационных Технологий Анчурии — люди прошаренные, и даже провели тестовое голосование — выбирали, что лучше, леденцы с ментолом или менты с леденцами. В голосовании приняли участие самые прошаренные граждане Анчурии, коих набралось аж 10 000, результаты подсчитались достаточно быстро — и систему решили внедрить на будущих парламентских выборах с десятью миллионами избирателей.

И вот поздно вечером в воскресенье закрылись электронные избирательные участки, и сам Министр Информационных Технологий нажал на самом мощном компьютере Анчурии кнопочку Enter, запустив процедуру подсчета. Долго ли ждать результатов? Ну полчаса-час, ответил министр — и все решили подождать. Сначала два часа ждали, потом четыре, восемь… — в общем, и к утру не дождались. Зато проснулись коммунисты и с криком «Дурят капиталисты нашего брата!» собрали митинг на Главной площади. К вечеру собрался уже не митинг, а целый майдан, кто-то обозвал цифрового министра пiдрахуем (не обошлось без украинского следа), пираты подрались с коммунистами, жулики с ворами — но все вместе пошли от Главной площади по Главной улице к Президентскому дворцу (география столицы Анчурии проста и понятна).

Ну дальше как всегда — Эль Президенте почуял, что пахнет жареным, и сбежал, в Анчурии случилась маленькая гражданская война, к власти пришла военная хунта и от греха подальше запретила все выборы, компьютеры и на всякий случай — украинский язык. Жуликов посадили, воров постреляли, пиратов развесили на реях, коммунистов отправили в тайные тюрьмы ЦРУ. Говорят, что где-то в начале гражданской войны бывший министр даже вылез из своего дата-центра в подземном бункере со словами «Мы все посчитали!» — но всем это было настолько безразлично, что никто про него и не вспомнил.

Так вот, господа программисты, вся беда случилась из-за того, что случайно найденная на гитхабе голосовалка имела сложность подсчета голосов O(N²) — то есть если для подсчета 10 000 бюллетеней требовалась всего 1 секунда — то подсчет 10 000 000 бюллетеней занял не 1 000 секунд, как надеялся цифровой министр, а гораздо больше — 1 000 000 секунд, или целых 11 дней — как раз хватит на то, чтобы не дождавшиеся итогов выборов анчурийцы начали гражданскую войну. O(N²) — очень «хорошая» оценка сложности, она, с одной стороны, достаточно мала, чтобы успешно проходить тесты на небольших наборах данных (это вам не перебор всех подмножеств, и даже не какие-нибудь числа Белла) — а с другой стороны, очень плохо ведет себя, когда данных становится много.

А чтобы не спровоцировать гражданскую войну в латиноамериканской стране — не делайте алгоритмы со сложностью O(N²), а читайте книжки Скиены, Седжвика, Дасгупты и Кормена, можно еще поставить на полочку многотомник Кнута.