Category: it

Category was added automatically. Read all entries about "it".

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

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

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

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

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

Бритоголовый и С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

Вытащу из фейсбука

А то скоро придется снова этот стенд собирать, а ответов на вопрос, кроме как «фронтендеры петухи», у меня как бы и нет.

В общем, есть дохлый по современным меркам Raspberry Pi, на нем крутится две или даже три СУБД (постгрес, монго и кажется, mosquitto еще что-то свое притаскивал), сетевой сервер LoRaWAN (ChirpStack, если это кому-то что-то говорит), Influx DB и Grafana, а рядом стоит ноутбук, на котором запущен SDR Sharp и браузер, а в браузере крутится веб-интерфейс этого чирпстека. Так вот, зоопарк (написанный в основном на няшной сишечке и модном голанг) на распберри работает прекрасно, написанный на С# SDR-приемник крутит какие-то адовы преобразования Фурье и показывает красивые картинки, отжирая всего-то несколько сот мегабайт памяти и 10-15% процессора, а вот веб-интерфейс, написанный на прекрасном современном языке Javascript, выполняющий важную задачу — показать в окошке браузера несколько плашечек вида «куда-кому-от кого», на сотне-другой этих плашечек начинает жрать буквально гигабайты памяти и так грузить процессор, что я даже не могу представить, куда идут эти бешеные FLOPSы (а это все-таки Core i5, не херня какая).

Короче, граждане, скажите, кто тут мудак? Почему для отображения простенького списочка из пары сотен элементов нужно вычислительных ресурсов больше, чем для работы всего остального, перечисленного здесь?

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

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

Давайте поговорим про зарплаты программистов

Прикидывал на пальцах бизнес-модель одного прожектика, много ругался. В процессе пришел к выводу, что «интернет вещей» — это когда у вас офис в симпатичном пригороде Лорьяна с видом на бетонный бункер для немецких подлодок, а если денег хватает только на романтический вид на ТТК — то все то же самое называется «промавтоматика».

Помимо того родился вопрос (точнее, серия вопросов) — вот представьте, что вам надо разделить ФОТ (уже забыли про все налоги «с работодателя», они более-менее учтены) между двумя инженерами — скажем, инженером-конструктором и инженером-электроником и одним программистом. ФОТ у вас, для ровного счета, 480 тысяч рублей в месяц. Все трое сотрудников работают — по времени — примерно одинаково, у всех схожая квалификация и опыт работы.

Вопрос первый: правильно ли будет поделить сумму поровну, 160/160/160?

Вопрос второй: программисты из твитора рассказывают, что получать меньше одной козули (единица измерения зарплат программистов, 300 тысяч рублей в месяц) стыдно, и приводят в пример одного фронтендера. Не будет ли более правильным платить программисту 320, а тем двум неудачникам — по 80?

Вопрос третий: вы решили строить свой стартап в Европе, пересчитали бизнес-модель и распоряжаетесь ФОТом в 9600 евро. Команда та же, но местные, два инженера и программист. Правильно ли будет платить им 3200/3200/3200?

Вопрос четвертый: европейский программист приходит к вам и говорит, что не согласен работать за 3200, а хочет 6400, потому как в Силиконовой долине за ту же работу платят столько. Чемодан-вокзал-Лос Анджелес или 6400/1600/1600?

Вопрос пятый: расставшись с жадным европейским программистом, вы решили вернуть программирование в Россию. Сколько платить местному программисту: 160, 320 или 256 (примерно 3200 евро) тысяч рублей?

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

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

Не ходите в околотелеком

Вот уже третий день в твиттере срутся по поводу треда про тестовые задания в Nokia:

https://twitter.com/st_1ena/status/1419689924505260032

Особенно многих удивила озвученная там зарплата (в 2018 году) — предлагали 120 тысяч рублей в месяц. Народ поделился примерно на два лагеря — первые считают, что задания простые, решит любой студент, и с чего бы это студенту платить больше? Вторые — в основном это успешные фронтендеры, у которых единицей измерения зарплаты служит «1 козуля» (вроде бы 300 тысяч рублей в месяц) считают задачи адски сложными, критерии оценки дикими, ну а озвученную зарплату нищенской. Срутся уже три дня, смотреть на это весело.

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

Спойлер — основано на личном опыте ощупывания большого телекомовского слона, к Нокии отношения не имеет, YMMV.

Для начала вспомним модель OSI, которая, как всем известно, не существует. Когда ее упрощают до четырехслойной — то руководствуются простой логикой, все, что ниже IP (то бишь сетевого уровня) — это херня какая-то, проводочки, не заслуживающие внимания. На самом деле там адов зоопарк, от «понятных» и привычных проводного Ethernet и живущего в вашем роутере WiFi до всякой редкой хтони типа 6LoWPAN. Это, кстати, два разных уровня — упрощенно их можно обозвать MAC (medium access control) и PHY (physical); стандарт Ethernet описывает, грубо, один вариант MAC поверх нескольких PHY, WiFi — несколько связок MAC+PHY, 6LoWPAN — один LLC и MAC поверх полутора десятков PHY из IEEE 802.15.4 и даже Bluetooth. PHY — это отдельная песня, а мы сейчас посмотрим на уровень MAC. Издеваться над людьми я не хочу, так что в качестве учебного протокола уровня MAC в современной беспроводной сети возьмем LoRaWAN.

Ну я думаю, вы все ознакомились со стандартом LoRaWAN? Он небольшой, всего-то сотня страничек — так что давайте продолжим. Стандарт — это хорошо, это надежно, можно (теоретически) набрать толпу программистов и начать делать оборудование под этот стандарт. Потом, правда, возникнут вопросы — например, очевидный: LoRa (физический уровень) поддерживает несколько скоростей передачи данных. В LoRaWAN есть механизм ADR, Automatic data rate, с помощью которого сетевой сервер может назначить конечному устройству какую-то скорость.

Вопрос попроще: а как бы нам эту скорость определить правильно? Побольше? Проиграем в дальности (а LoRa — это Long Range, что намекает). Поменьше? Начнутся коллизии при передаче, проиграем в емкости сети (это сколько устройств можно повесить на одну «точку доступа»). Стандарт этот вопрос почти никак не комментирует, предлагая всегда использовать наибольшую скорость из возможных (определяя ее по SNR, например). Но у модуляции LoRa есть очень интересное свойство — передача данных с использованием разных data rate ортогональна. Это значит, что если одно устройство передает данные, допустим, с DR5, а другое — с DR4 — то шлюз примет данные от обоих! И возникает вопрос посложнее — а как назначать data rate устройствам, чтобы максимально использовать вот этот бесплатный бонус?

Уже звучат вопросы — так какие же задачи придется решать после того зверского собеседования в Нокию? Нет, не такие. Вопрос на самом деле уже решен — немного в другой постановке, но идея довольно понятна (если вы осилите 20 страниц настоящего «матана«). Ноучная ноука в виде Евгения Хорова из ИППИ РАН с соавторами понаписала формул, порисовала графиков — и с точки зрения науки, все хорошо, план по публикациям выполнен, можно спать спокойно.

На самом деле между такого рода «академической» наукой и программистами у любого более-менее крупного вендора есть еще прослойка в виде толпы математиков-алгоритмистов (я тут осознанно упрощаю реальное взаимодействие между всеми заинтересованными сторонами — это не так важно), которые должны выцеплять вот такие хорошие идеи, независимо их проверять и дальше передавать программистам. Разумеется, не все так безоблачно — 95% публикаций будет полным говном, неприменимым в реальной жизни — но в принципе, на то эти математики и нужны, чтобы склепать из оставшихся 5% что-то теоретически удобоваримое. «Удобоваримое» — это еще оптимистично, математики на выходе генерят обычно псевдо- или говнокод на ебучих языках типа питона или матлаба; могут выдать полный пиздец на том, что им кажется C++, или просто на отъебись хуйнуть блок-схему:

Не правда ли, все просто и понятно? Попизжено, кстати, вот отсюда: https://arxiv.org/pdf/2010.08860.pdf, это тоже творчество Хорова сотоварищи, но довольно близко к тому, что попадет в руки программистам.

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

Мне так жалко программиста стало, что пойду за пивком схожу.

Пока я за пивком еще не пошел — пизданул тут на днях, что сетевой сервер LoRaWAN можно утоптать ногами в жирный микроконтроллер (хотя таких прецедентов я не знаю) — и мне похуй, спизданул и спизданул, а для руководителя вашего проекта это стало руководством к действию!

Я вернулся, принял пивка, продолжим.

Что проверяют те нокиевские задания и что мы увидим в нашем проекте охуительного сетевого сервера LoRaWAN по цене простого тупого шлюза? Да собственно все то же самое — манипуляции с битиками? Открываем стандарт и смотрим на любой заголовок MAC-уровня. Манипуляции с самописной реализацией половины коллекций из stdlib? Этого в эмбеде полно, кушайте, не обляпайтесь. Если хотите рассказать, как вам в жизни помогает знание std::list — посмотрите на любое scatter-gather DMA и представьте, что это очередь пакетов, которые будут запихиваться в радиомодем «по готовности». Нет, вы не обернете её в привычный список — а манипулировать очередью надо! Что еще? Задачи с неясной изначально постановкой, про которые надо либо спросить, либо додумать? И этого тут предостаточно, посмотрите хотя бы на это произведение математического мозга:

Ученый (в говне моченый) написал «Sort groups by $PLR_g^{QoS}$» (да, именно так и написал) — а ты теперь сам думай, в какую структуру обернуть эти «группы» и как после этого их эффективно отсортировать. Ах да, учоные на словах еще сообщили, что лучше всего этот алгоритм выполнять «как можно чаще» :)

Математиков этот вопрос не волнует — они готовы даже показать симуляционную модель, где сортируют std::list<std::map<std::string, std::list<SomeShit>>> — в типичном случае эта штука займет всю доступную память в вашем устройстве.

И это, считайте, вам еще повезло — потому что ваш коллега вынужден реализовывать сок мозга другого математика, который молодец, читал Кормена и даже может там ткнуть пальцем в алгоритм Хопкрофта-Карпа (поиск паросочетания в двудольном графе). Вы даже можете найти эту штуку в википедии, но она вам не поможет — это еще более ебаный псевдокод, чем напечатан у Кормена. Что вы там говорили по поводу «адаптации алгоритмов, которые сто раз уже реализованы»?

Ну и да, не забываем, что все эти красивости происходят на микроконтроллере, пусть и жирном, с целым МЕГАБАЙТОМ оперативной памяти — а вам надо будет еще упихнуть туда целый TCP/IP стек, возможно, даже готовый — что-то вроде lwIP, но даже от этого не легче. Остается утешать себя тем, что вам досталась простая и понятная вещь — потому что старый стандарт того же WiFi, 802.11-2012 — это 2800 страниц, вот такая упаковка бумаги и еще полпачки:

Я кончил и закурил.

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

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

Надо бы небольшой срач устроить

А то меня программисты читают, в том числе эмбеддеры :)

Вопрос: можно ли так писать, или надо обязательно написать еще и

#define VERY_MAGIC_BOOTLOADER_CONSTANT 0xB00710AD,

и почему?

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

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

Читал и ржал

https://www.cnews.ru/news/top/2021-04-20_nazvany_samye_neobychnye

Прямо даже не знаю, что смешнее — «редкий и необычный» программист микроконтроллеров или «московская компания» Ventra.

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