Бритоголовый и С1-97

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

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

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

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

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.

Бритоголовый и С1-97

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

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

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

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

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

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

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.

Бритоголовый и С1-97

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

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

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

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.

Бритоголовый и С1-97

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

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

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

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

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

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

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

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.

Бритоголовый и С1-97

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

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

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.

Бритоголовый и С1-97

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

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

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

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

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

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

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

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

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.

Бритоголовый и С1-97

Про бесплатные сервисы

На днях в твиторе срались, может ли программистская контора держать свой код на гитхабе, или это стыдно. А я вот подумал — есть ли что-то стыдное в том, что у той же конторы сайт будет на narod.ru и почта на mail.ru?

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.

Бритоголовый и С1-97

Про эти ваши выборы

Вот, кстати, прочитал тут очередную заплачку о том, что математик из МГУ Михаил Лобанов (КПРФ+УГ) проиграл выборы «административному кандидату» Попову. Валят все, как обычно, на электронное голосование — мол, «очно» Лобанов уверенно побеждал, а когда добавились результаты «дистанционки» — то единоросс резко скакнул вверх. Че хочу сказать? Ну во-первых, считать независимыми голосование очно/дистанционно и голосование за/против ЕР нельзя — тут играет куча факторов, начиная от КПРФовской агитации «против» электронного голосования и заканчивая «мобилизацией» бюджетников именно на дистанционное голосование (добавим еще сомнения в том, что голосование останется тайным и страшилки, что проголосовавших неправильно ждут мелкие репрессии — и получим изрядный перекос). Собственно, на аргументы вроде «очно побеждал А, а дистанционно у Б на 100500 голосов больше» можно отвечать этим соображением.

Удивляет, конечно, другое — а были ли квалифицированные наблюдатели или члены УИК ДЭГ от КПРФ вообще или Лобанова лично? Кажется, это несложно — отлови пару студентов мехмата или ВМК, выдай по ноутбуку и отправь в комиссию. Но судя по происходящему — никто особо не озаботился даже проверкой «почасовых» выгрузок из базы данных, не говоря уж о проверке результатов на какие-то аномалии. Это несложно — я в прошлом году на спор написал довольно элементарную проверялку результатов дистанционного голосования в его московском варианте за полчаса — но похоже, что ни одна из вопящих о невероятных нарушениях политических сил ничем подобным не озаботилась.

Если вашему кандидату настолько похер на результаты — то с чего вы взяли, что ему будет не похер на избирателей?

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.

Бритоголовый и С1-97

Охуительный ролик

Эппловских юристов вызвали в Совфед, чтобы разъяснить политику модерации в App Store.

Юристы (и особенно юристка) несут невообразимую чушь в ответ на простые вопросы, вроде «Имеет ли Apple Distribution International отношение к Apple Incorporated?» Местами ржал в голос. Также из ролика видим, что тактика «включить дурочку» не работает, так как просто раздражает собеседника.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там или в ЖЖ.