Всю неделю праздновал

И в честь дня работника электронной промышленности покажу, как pick-and-place станочек под управлением OpenPnP с раскрашенными под хохлому электромеханическими питателями собирает платы этих же питателей (промышленность группы А, производство средств производства, а не фигня какая).

Почему ваш Scrum не будет работать, и вы это никак не исправите

Вот кстати, небольшое отступление от записи про кроссфункциональность — но полезно его как-то осознать. Подумайте минуточку о полномочиях product owner’а в том виде, как они записаны в Scrum Guide. Оказывается, что это человек, который единолично определяет, что делает команда и зачем это нужно — то есть product goal, причем с очень широкими полномочиями относительно «продукта» — буквально «владеет» им, может внезапно решить, что цель протухла и надо бежать в противоположном направлении, или вообще прикрыть лавочку. Добавим к этому еще и способность команды сделать «продукт» от и до, ту самую «кроссфункциональность», и получим крайне стремную с точки зрения бизнеса ситуацию — есть руководитель, определяющий буквально все, касающееся продукта, есть команда, способная затащить сложную задачу, кто им мешает оформиться в отдельную ОООшку и послать всю организацию к ебеной матери?

Да, Матвейчев яркими примерами показывает, «Почему американцы побеждают» (обязательно перечитайте!), но обратите внимание, что относится это к политическому консалтингу, где, во-первых, игра зачастую идет в режиме «все или ничего», а во-вторых — время существования кроссфункциональной команды строго ограничено, после выборов она будет распущена безо всяких последствий. Обычный бизнес предпочтет как-то ограничить и полномочия «продакт-менеджера» (да, это уже не совсем product owner в смысле скрама, но по части определения целей они схожи), и обложить его творчество какими-то рамками, вот хотя бы даже возьмем пример с «согласованием у юристов» — пусть даже наличие отдельного юридического отдела замедляет работу, но оно же и ограничивает «владение продуктом». С точки зрения стабильности «бизнеса» нет ничего лучше обычной функциональной структуры — может быть, укрупненной, пример с раздельными «отделом фронтендеров», «отделом бекендеров» и «отделом тестирования» — это дичь (хотя часто встречающаяся), но в целом нормально выглядит структура R&D, когда условные «технари» собраны в один или несколько отделов, а все остальные вспомогательные по отношению к этому процессу функции — в функциональных подразделениях.

Впрочем, и тут есть забавные нюансы — например, такое разделение на «тематические» подразделения и «всех остальных» в Роскомиксе выглядело примерно так: есть «тематическое подразделение», сидящее на каком-то определенном внешнем заказе или типе заказов, в этом отделе собраны формально все необходимые инженеры, конструкторы, программисты, техники, … — в общем, все технические специалисты. Если тематическому подразделению надо что-то купить — то отдел закупок один на все предприятие, надо идти на поклон туда; согласовать договор с внешним контрагентом — к юристам; отправить официальное электронное письмо — тоже процесс, требующий одобрения от соответствующего подразделения. Разумеется, компетентность «общих» для всего предприятия закупщиков или юристов была ниже плинтуса. Скажем, чтобы купить достаточно дорогой прибор, надо было самостоятельно собрать три коммерческих предложения от разных поставщиков, подготовить проекты договоров, … — то есть буквально выполнить работу отдела закупок, да еще и объяснить контрагентам, что это пока так, собираем предложения, а когда купим — хер его знает. В итоге оказывалось, что в «тематическом» подразделении есть люди, числящиеся «инженерами», но фактически занимающиеся закупками, договорной работой, или даже буквально маркетингом — от поиска клиентов до организации стендика на отраслевых мероприятиях (да-да, вот вам и полная «кроссфункциональность»). Про «теневое IT» и «серую кассу», наполняющуюся самым невыгодным для родного завода образом, думаю, не стоит даже и задумываться :)

И второе очень сложное требование к product owner’у — кроме определения product goal, цели «с точки зрения бизнеса», этот же человек должен заниматься работой с «беклогом», то есть списком задач, причем обычно крайне «узкотехническим». Фактически, нужно сочетать в одном человеке две совершенно противоположные вещи, а это встречается крайне редко. Более того — для выходца «из менеджмента» все правила скрама покажутся детской возней в песочнице, особенно — когда начнется игра в planning poker. Для выходца «из технарей» — наоборот, совершенно неподъемной окажется «управленческая» работа (которая скрыта за словами вроде communicating, буквально «донести до команды необходимость выполнить задачу»), да и по части целеполагания возникнут вопросики.

И кстати, в достаточно большой организации не поможет и внедрение Scrum’а «сверху», которое обычно происходит, когда кто-то из руководства решит прочитать что-то о «революционном методе управления проектами» — потому что противодействие возникнет и на уровне «среднего менеджмента», тех самых кандидатов в product owner’ы — потому что вместе с офигенными полномочиями на «владельца продукта» свалится и офигенная ответственность, а суть карьеры многих «управленцев» как раз и состоит в избегании любой ответственности, местами — буквально по разделу General Interference with Organizations and Production из Simple Sabotage Field Manual. В результате у всех причастных возникает желание «все поменять, ничего не меняя», и поэтому внедрение Scrum обычно сводится к следующему — открываем Scrum Guide, внимательно читаем, вычеркивая обязанности и полномочия «по существу» — а с другой стороны, уделяем параноидальное внимание «ритуалам». Нет ничего проще «внедрения Scrum» в «функциональной» команде — скажем, состоящей исключительно из тестировщиков — просто добавляем в календарь бессмысленные «дейлики» и раз в две недели — «планирование спринта» (которое сводится к определению, сколько типовых задач из Jira можно будет переложить из графы «надо сделать» в графу «сделано»).

А в следующий раз — напишу немножко про «матричную структуру» — которую, внезапно, у нас толком не понимают, и совершенно шикарный способ ее поломать :)

Про кроссфункциональность и ИИшенку

Хотел недавно обсудить с юными программистами, что такое «кроссфункциональная команда», о которой говорит нам Scrum Guide, но неожиданно обнаружил, что «работающие по скраму» молодые люди с основными положениями этой методологии не знакомы — но не пропадать же заготовленной проповеди? Тем более, не далее чем сегодня в телеге наткнулся на пару обсуждений нашего будущего с иишенкой или без — и тут тоже есть, что сказать.

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

Scrum Teams are cross-functional, meaning the members have all the skills necessary to create value each Sprint.

Программисты и вырастающие из них малокомпетентные руководители любят ее извращать (одновременно притаскивая еще одну фразочку — Scrum recognizes no titles for Development Team members other than Developer — из старых версий руководства, в версии 2020 года ее убрали, потому что она создавала сложности с пониманием) — мол, каждый член команды должен обладать всеми необходимыми навыками, а поэтому можно вешать любому какие угодно задачи, и может быть, в программировании это и так — но вот давайте посмотрим на процесс разработки несложного электронного устройства, лучше даже чего-то IoT’шного. Возьмем простой метод:

Прикиньте на пальцах количество направлений, в которых вам надо иметь компетенции. Умножьте на два. Получите число людей, которых вам надо собрать в коллектив и удерживать в нем для того, чтобы обеспечить стабильную разработку.

Какие специалисты понадобятся для этого, кто будет «работать руками»? Загибайте пальцы:

— надо уметь разрабатывать принципиальные схемы;
— надо уметь трассировать печатные платы (да, это немного другая специализация, иногда один человек умеет делать и то, и другое, иногда — нет);
— надо уметь программировать под микроконтроллеры;
— надо уметь программировать под «desktop» (в кавычках, потому что это могут быть и какие-то cli-утилитки, и gui-шные приложения, и вообще что угодно, типа питоновского скрипта для автоматизированного тестирования);
— надо уметь программировать бекенд для веба;
— надо уметь программировать «фронтенд» (опять же, название условное, это может быть и классический веб-сайт, и приложение на Android);
…
— заметьте — я уже перечислил чисто технические специальности, при этом пальцев на одной руке уже не хватает, а на выходе мы получим «продукт, сделанный программистами» — так что добавьте сюда пару дизайнеров («индустриального» и веб-); конструктора и/или технолога, если аппаратная часть представляет собой что-то сложнее ардуины; быть может, вам понадобится несколько тестировщиков; в конце концов, кто-то должен в конечном итоге этот ваш «продукт» продать, так что давайте не забывать и про Business Development, Sales and Marketing. Ах да, я не упомянул самого главного — кто-то должен представлять себе, что же в итоге мы хотим получить, и как-то организовывать работу этой толпы — то есть никак нельзя обойтись без менеджера проекта, или в скрамовской терминологии — Product Owner.

Разумеется, это не имеет ничего общего с «кроссфункциональностью» в ее извращенном понимании, инженер-электроник, занимающийся трассировкой печатных плат, никогда не сможет хотя бы удовлетворительно писать бекенд-приложения, например — а бекендер вряд ли справится с задачей «перерисовать принципиальную схему ардуины, добавив вот то и убрав это». Кроссфункциональность в организации команды здесь противопоставляется функциональному делению — немного на другом примере разница описана у О. Матвейчева в «Уши машут ослом» — прочитайте главку «Почему американцы побеждают», там кроссфункциональный принцип описан в разделе про «принцип спагетти» и противопоставляется «пирамидально-функциональному», когда каждое отдельное направление выделяется в отдельное подразделение со своим руководителем — скажем, в гипотетической большой фирме, разрабатывающей много вышеописанных IoT’шных проектов, был бы выделен отдел схемотехников, отдел программистов (а может быть даже два, а то и три разных), обязательно — отдел тестировщиков, и так далее. Дальше в каждом таком отделе начинают «внедрять Agile» — и получаются именно характерные для такого подхода команды из одинаковых взаимозаменяемых узких специалистов, «людей-функций»; взаимодействие между командами максимально затруднено. С другой стороны, когда «все члены команды обладают одинаковыми навыками» — именно эти одинаковые навыки объявляются «всеми необходимыми». Для типовых хорошо формализуемых задач, вроде конвейерного аутсорса всяких оперденей для внешнего заказчика, оно может даже работать — но к кроссфункциональности, к «принципу спагетти», это никакого отношения не имеет.

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

Но впрочем, из мира больших компаний давайте вернемся к всякой мелочевке, буквально к стартапам :) Типовой путь разработки того же IoT’шного устройства в мелкой фирмочке выглядит примерно так — есть один «гениальный директор/генитальный конструктор», который и в инженерии имеет довольно широкий кругозор (как минимум способен удовлетворительно, «на троечку», закрыть сразу несколько пунктов из перечисленных выше), и сумел ухватить какую-то чисто бизнесовую идейку, которую «закрыл» самостоятельной (или буквально с одним-двумя единомышленниками) разработкой востребованного на рынке прибора. А дальше начинается боль, потому что «техническую» сторону вопроса хорошо бы кому-то скинуть делегировать, «генеральный конструктор» смотрит на узких специалистов и офигевает — хотя это я уже описывал!

И вот тут нам на помощь приходит современная ИИшенка! Говорят, что всякий там Claude Code вполне успешно заменяет «младшего разработчика», который по достаточно точным указаниям в несколько итераций может реализовать несложный изолированный кусок кода, к которому не предъявляется каких-то специфических требований. Превратить CLI в GUI? Можно дать задачку «инженеру-программисту 3 категории» (он же «джун») — а можно скормить ее иишенке и получить результат ничем не хуже. Какая-то мелкая автоматизация, «типовой» код, в конце концов, тот же boilerplate — в общем, задачи, хорошо формализуемые и не требующие понимания «проекта в целом» уже не требуют участия узкоспециализированного программиста, к тому же иишенка не жалуется на жизнь и несправедливость мира, который не желает оценить по достоинству творческую работу «программиста под Android» (которая сводится, скажем, к превращению текстового описания апишечки в более формализованное, на каком-нибудь Retrofit).

Так вот, большинство действительно успешных применений LLM’ок — это замена редко нужных узких специалистов их иишным «аналогом». В сущности нет разницы между программистом, берущим задачку из Jira, а затем отдающим ее на code-review, и делающей то же самое нейросеткой (забавно, кстати, что это по сути перевод с человеческого языка в код, а именно для перевода LLM’ки и были придуманы); чем лучше формализуется такая задача, тем проще отдать ее железному болвану. И вот тут вырисовывается интересный критерий, как определить, заменит ли вас ИИ или нет — если в вашей работе в какой-то степени требуется давать указания подчиненным или коллегам, а потом проверять результаты работы — то ИИшенка заменит скорее коллег или подчиненных, но не вас; а вот если ваша работа, как программиста-кнопкодава, сводится к перекладыванию карточки на канбан-доске из графы «в работе» в графу «можно проверять» — то у меня для вас плохие новости!

Ну и да, плохие новости у меня для тех кнопкодавов, которые занимают агрессивно-оборонительную позицию по отстаиванию «своей зоны ответственности». Скажем, какие перспективы у условного «аишника», который практически демонстративно отказывается от изучения предметной области, не хочет отличать Telnet от TCP и вдаваться в нюансы маршрутизации в IP-сетях? Если «аишная» задача ставится и проверяется в терминах, понятных сетевикам — то какая этим сетевикам разница, будет ли построенная ML-модель сделана белковым data scientist’ом (это такое модное название для программиста на Python, который умеет перекладывать данные между Pandas и Torch) или нейросеточкой? Да собственно, никакой.

И еще про инновационную лабораторию

Немножко меня эта тема триггернула, так что продолжу :) В комментариях телеги написали, что оснащение лабы отличное, человеку понадобилось плату изготовить — и он принес герберы на флешке, за полчаса плату отфрезеровал и тут же запаял! Что же, разберем подробно возможности того оборудования, что мы видим на снимках.

Но для начала — маленькое лирическое отступление. Практически всегда, если оснащение такой мастерской выбирают люди, от тематики далекие, оно делится на две категории. Первая — «дорого-богато», и к ней в этой мастерской относятся, например, металлообрабатывающие станки марки Optimum. Бренд, разумеется, псевдонемецкий, на самом деле они полностью аналогичны китайской продукции, продающейся под десятками брендов — от чисто алиэкспрессовских Weisan, Numobams и Fusikaya до имеющих какое-то представительство в РФ марок вроде Корвет или Metalmaster. На форуме Chipmaker даже есть списочек «близнецов» в разделе «Китайские хоббийные станки«. Optimum, правда, на этом форуме не обсуждают — угадаете, почему? Но про металлообработку поговорим при случае как-нибудь в другой раз, сегодня — про электронику.

Пример бессмысленно дорогого оборудования в этой категории — это как раз станок для фрезеровки печатных плат, LPKF Protomat, в 2019 году стоивший около 1,5 миллионов рублей. «Коммерсанты», считающие деньги, подобным оборудованием пользуются редко — а вот в вузах, ЦМИТах, «Кванториумах», всяких конторах, кормившихся вокруг WorldSkills этот станочек был безусловным хитом (нет-нет, никакой коррупционной составляющей). Чисто для понимания порядка величин — даже в считающемся недешевым «Резоните» небольшой заказ на производство однослойной печатной платы без маски обойдется в сумму около 1500 рублей (причем большую часть стоимости будет составлять «подготовка производства»). Что лучше, один Protomat или 1000 заказов в Резоните? Будучи руководителем небольшой фирмы, разрабатывавшей всякую электронику, Олег Артамонов писал на Хабре:

На данный момент лично у меня там 177 выполненных заказов и один — в процессе. Минимальная партия из того, что мы там заказывали, составляла 1 штуку, максимальная — несколько тысяч штук.

Думается мне, что «Резонит» мог бы спокойно продавать абонементы на изготовление плат по цене Protomat’а, или провести акцию «Разбей Protomat кувалдой и получи пожизненную скидку!», и даже не обеднеть! :) А статью Олега прочитайте, потому что дальше ее немножко дополню.

Но сначала — про вторую категорию оборудования, «говно на сдачу». Что мы видим на фотографии ниже?

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

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

Ручной инструмент — разумеется, Dexell из ближайшей леруашки, зачем эти пассатижи на рабочем месте монтажника — хер знает, там нужны нормальные стриппер (Proskit 8PK-3001 или что-то типа того) и кримпер (тут сложнее, но какой-нибудь SN-58B с алиэкспресса закроет большую часть потребностей — большинство Molex, крупные JST, «Dupont» с некоторыми нюансами). Вытяжек на рабочих местах, конечно, тоже нет, даже «номинальных» китайских вентиляторов, потому что зачем?

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

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

Например, SMD-компоненты паяльником не паяют (с), но можно относительно недорого оснастить лабораторию режущим плоттером для изготовления трафаретов (пассивка вплоть до 0603 и микросхемы с шагом выводов до 0,5 мм получаются приемлемо), самым простеньким ручным принтером для паяльной пасты с алиэкспресса и «печкой» типа T-962 — такой комплект обойдется в сумму порядка 50 000 рублей (если брать за свои и экономить), или тысяч в 100 — если деньги можно тратить, особо не оглядываясь. Например, что-то подобное получилось у американцев в том же 2019 году — просто при комплектации лаборатории цель была не «освоить бюджет», а купить оборудование, подходящее для монтажа единичных, но «современных» устройств:

https://dl.acm.org/doi/abs/10.1145/3299874.3317968

Я исключая из рассмотрения предложенные на хабре варианты типа «купить электродуховку, ардуину и твердотельное реле» — они явно не найдут понимания у вузовской администрации (хотя можно пропихнуть в формате «студенческого проекта» в том же МИЭМе — что, правда, не снимает вопроса «кто будет отвечать, если ваша электродуховка загорится»). Но из «самостроя» — можно дополнить вышеозвученное совместимым с OpenPnP pick-and-place-автоматом, по сложности он не отличается от заебавших всех 3D-принтеров, но намного, намного полезнее! Можно обойтись и готовым чем-нибудь тысяч за 150 с алиэкспресса — но тогда в хороший студенческий проект превратится доведение этого полуфабриката до ума.

Кстати, раз уж вспомнили о пожарной безопасности. Есть еще одно занятное последствие решения «оборудуем лабу всяким говном за три копейки», применительно, например, к вот этому рабочему месту монтажника: похожая паяльная станция стоит от 5 тысяч рублей, остальные аксессуары — тоже копеечные, поэтому у других вузовских лабораторий появляются собственные неучтенные «наборы монтажника» (я в МИЭМе точно знаю два, старательно спрятанные от проверяющих) — просто потому, что никакой разницы нет, но в «инновационную мастерскую» бегать не надо. При этом пожарная безопасность выходит из чата — если в «централизованной» лаборатории еще можно проверить, что в конце дня все паяльники выключены, то в каком-нибудь закутке компьютерного класса забыть включенную паяльную станцию — элементарно!

Конспирология-лайт

Пишут, что детектору иишенки подсунули текст Декларации Независимости США и он определил, что она на 97,75% написана иишенкой:

https://decrypt.co/286121/ai-detectors-fail-reliability-risks

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

Мастерская инноваций

Нашел тут официальный набор фоточек к 60-летию МИЭМ, где пытаются рассказать о том, какая замечательная мастерская имеется для будущих иннноваторов:

https://60.miem.hse.ru/innovation

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

Более сложное упражнение — найдите хоть одну фотографию, от которой не хочется сделать facepalm :)

Управлять программистами легко и приятно

Спрашивал на днях юных программистов, что такое Scrum; ответы были примерно такими:

— ну это где карточки на доске…
— нет, карточки на доске — это канбан!
— тогда где в покер на время выполнения задач играют!

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

Написал тут бредятинки

Это уже пошло распространяться самостоятельно, народ подозревает, что писала иишенка, но нет:

Почему Excel не может одновременно открыть два файла с одинаковыми названиями?

Когда-то давно, когда первая бета-версия Excel называлась Incel, запись дискет с дистрибутивом планировалось осуществлять на бывшем авиазаводе, где для прокладки кабельных трасс при сборке сверхсекретных бомбардировщиков F-19 использовали хорьков (потому что сборщик пролезть в некоторые места не мог). Кроме того, на заводе была узкоколейная железная дорога на той же хорьковой тяге, которую решили оставить и использовать для доставки дискет к месту упаковки.

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

Последние два байта удалось отжать сменой названия продукта с Incel на EXCEL — второй вариант чуть лучше сжимается с помощью run-length encoding. Под нож пошел проект рекламной кампании In cell, где зеки в камере строят офис с колл-центром, пронося продукцию Microsoft на зону в трехдюймовом воровском кармане, но это уже совсем другая история.

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

С вами был Redmond Chlen, штатный сказочник M$!

Про блокировки всего

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

Впрочем, нижние уровни модели OSI «национализировать» несколько проще, чем самый верхний, восьмой уровень — до недавнего времени не редкостью были сайты, зависевшие от нормальной работы какого-нибудь там AWS, или Cloudflare, или любых других иностранных сервисов — да даже разместить «статику» на какой-нибудь нерусской CDN и сейчас не считается чем-то зазорным. Так вот — а не является ли целью всех этих нововведений принуждение популярных в России сайтов к «техническому» приземлению, чтобы даже в случае полного отрубания «внешнего» интернета они могли работать? А то помните, скажем — лежит AWS, а проблемы у Сбербанка, причем игрушечные, уровня «не загружается JS и CSS на сайте»? Вот и давят с двух сторон — и на пользователей, «деньгами» — чтобы зарубежный трафик влетал в копеечку, и на сайты — зависишь от буржуинов? Тогда к тебе заходить не будут!

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

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

Страшно ору

Новое guilty pleasure — закидывать в переводчик на Linkedinese похабные присказки, например:

Было: Моя работа — ебать енота.

Стало: I am a dedicated professional specializing in high-impact, unconventional wildlife engagement and hands-on environmental stewardship.

Было: Засадил Андрюха свинке, не покушаем свининки.

Стало: I am thrilled to share a key learning moment regarding resource management and unexpected pivots in our supply chain.

Unfortunately, due to an unforeseen operational misalignment by our team member Andrew, we’ve had to re-evaluate our Q3 protein procurement strategy. While we won’t be moving forward with the pork initiative as planned, this challenge presents a unique opportunity to embrace agility and explore alternative sustainable solutions.

#Resilience #AgileLeadership #SupplyChainOptimization #GrowthMindset

Было: Ебитесь как хотите, коллеги, в умелых руках и хуй балалайка.

Стало: Feel free to navigate the challenges as you see fit, team; in the hands of a true professional, even the most unconventional tools can drive exceptional results.

Было: Служи, браток, как мы служили, а мы на службу хуй ложили!

Стало: Keep up the great work, my friend, just like we did — though we definitely prioritized our own work-life balance! 🚀 #CareerGrowth #WorkLifeBalance #Mentorship

Было: Соси хуй, читай газету, станешь комиссаром к лету.

Стало: I am thrilled to announce my transition into a leadership role this summer! 🚀

Success isn’t just about the destination; it’s about the grit, the daily grind, and staying informed in a rapidly changing landscape. By staying focused on the «unconventional» tasks and keeping my finger on the pulse of industry news, I’ve positioned myself for this next level of executive responsibility.

Remember: stay hungry, stay humble, and keep putting in the work. The promotion is just a byproduct of the hustle. #Leadership #CareerGrowth #HustleHard #ExecutiveMindset

Было: Бывайте, ихтиандры хуевы.

Стало: Wishing you all the best in your future endeavors as you transition to new horizons. It’s been a pleasure navigating these deep waters together! #NewBeginnings #CareerGrowth #ProfessionalJourney

Свежие иноагенты

Надеюсь, что упомянутая здесь MISRA не имеет никакого отношения к Motor Industry Software Reliability Association.

Писатель Ян Шенкман и микробиолог Александр Гольдфарб внесены в реестр иноагентов, сообщили в Минюсте.

В перечень также попали проекты MISRA, «Дозор в Волгограде» и медиапроект «Новая вкладка».

https://t.me/tass_agency/359093

Про Excel несколько слов

Тут недавно в одном телеграм-канальчике раскопали старые мысли интернет-пиздобола Джоэля Спольски о том, что формулами в Экселе никто не пользуется:

When we were designing Excel 5.0, the first major release to use serious activity-based planning, we only had to watch about five customers using the product before we realized that an enormous number of people just use Excel to keep lists. They are not entering any formulas or doing any calculation at all! We hadn’t even considered this before.

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

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

Возьмем достаточно несложную задачку судейства в автоспорте, причем опять же, простую как мычание дисциплину ралли-спринта. Выглядит этот любительский ралли-спринт, например, так — есть довольно компактная трасса, не замкнутая, то есть с отдельными стартом и финишем, на старте и на финише (в эконом-варианте, с хронометражом до секунд) стоят судьи с секундомерами — точнее, часами, показывающими секунды, фиксирующие время проезда участника и докладывающие по рации что-то типа «номер 14, время 12:34:56!» (ну или можно сократить до «34:56»). В будочке неподалеку от трассы сидит секретарь соревнования с ноутбуком и забивает вот эти доклады в протокол (его удобно оформить в экселе, но можно представить и другие варианты). В день соревнований выставляется две разных схемы трассы, у каждого участника есть 4-5 заездов по каждой из конфигураций, итоговым результатом является сумма наилучших времен проезда по обеим вариантам трассы. Так вот, дополним эту штуку еще одной вводной — участники хотят видеть результаты онлайн, достаточно оперативно (пока стоишь в очереди на следующий заезд, надо понять, был ли ты быстрее в этот раз или нет).

Ну в принципе, все же просто и понятно? Делаем веб-приложение, разрисовываем ER-диаграмму БД, пишем немного boilerplate на каком-нибудь Flask, рисуем две странички фронтенда — для секретаря и для участников, готово, вы великолепны! Даже сложность изменений в случае, когда к спринтам добавляется еще и слалом, где время умножается на коэффициент 3, а к докладу судьи добавляется еще один параметр — количество задетых ограничителей, каждый стоит 5 секунд, остается пока что приемлемой — «ну написать еще одну формулу в питоне и все».

В принципе, даже если заказчик придет к вам со следующей хотелкой — а давайте судить таким образом не спринты, а полноценное ралли (пусть даже и «третьей категории)! — вы с небольшими переделками (по человекомесяцу аналитика, бекендера и фронтендера) родите что-то более-менее работающее. Да, в процессе аналитик проклянет РАФ вообще и комитет ралли в частности, а особенно авторов правил, но зато разберется в нюансах вроде «как считать льготу на ВКВ, если на секторе была нейтрализация, а до этого накоплена судейская задержка». В принципе, пока еще все укладывается в модель «результаты участника определяются исключительно временем его отметки на судейских пунктах».

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

Продолжаем? Приходит к вам еще один организатор, берет вас нежненько за пуговку, и начинает рассказывать — вот знаешь, у нас часто участники путаются в порядке прохождения судейских пунктов, вот если правильная последовательность — 1-2-3-4, то что лучше? 1-2-4-3 или 1-2-4? А 4-3-1-2? Разобрав десяток примеров, пособирав из буковок слова КУПАНСКОЕ слова КУБРИНСК, КУПЯНСК и КУТАКБАШ вы, придете, конечно, к алгоритму вычисления расстояния Дамерау-Левенштейна — но вероятно, примерно в этот момент вам придется расстаться с бекендером, так как он отъедет в дурку.

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

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

А что же с исходной хотелкой, с онлайн-табло результатов? И такие примеры есть, опять же, с экселем. Чуваки из Мосавтослалома (собственно, откуда «несложная задачка» и возникла) поступили чудовищно просто — есть «считающая результаты» табличка (отдельная вкладка с результатами, которая смотрит ВПР-ом на вкладку с введенным протоколом), и есть кнопка, запускающая несложный скрипт на VBA — текущие результаты экспортируются в CSV и по FTP загружаются на сайт — https://mosautoslalom.ru/table/class.html — вот тут можно посмотреть, как это устроено, буквально сотня строчек тупейшего кода для красивого отображения этой csv-шки.

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

Когда доел салатики, а бухлишко еще осталось

Решил немножко вернуться к недоделанным прожектам прошлых лет, но вот думаю, не впадаю ли в грех хипстерства, не сильно ли ебанатское решение придумал.

В общем, есть ПэКа с линуксом и подключенный к нему по USB десяток разных микроконтроллеров (в основном STM32 и nRF52) с отладчиками (отладчики какие попало, есть J-Link, STLink и даже CMSIS-DAP — в общем, разные); хочется удаленно прошивать их, перезагружать и может быть даже отлаживать через веб-приложение на Flask. Так исторически сложилось :), что приложенька умеет делать все это через GDB (pygdbmi или как-то так) и GDB-шные команды вроде monitor.

Так вот, «ценное техническое решение» видится таким — запускаю на этом ПэКа десяток копий openocd, постоянно работающих, с интерфейсом gdb на разных портах (3333, 3334, 3335 и так далее), возможно, с чуть разными конфигурационными файлами (для разных пар отладчик-микроконтроллер), и тем самым «сводим задачу к предыдущей». А чтобы эти openocd не перезапускать ручками всякий раз (бывает, что они падают по каким-то причинам) — хочу использовать supervisord, его в каком-то мануале по Flask рекомендовали для запуска питоновских веб-приложений, так что он там будет.

Собственно два вопроса — нормально ли держать запущенными кучку openocd, и нормально ли пользоваться supervisord?

Пострадайте и вы

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

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

Про тщательно выстраиваемые границы

Вот я как-то рассказывал в качестве курьеза историю про программиста под Android, который, когда у него по какой-то причине перестала загружаться Android Studio, сообщил об этом боссу, отказался самостоятельно разбираться, что там глючит и попросил, чтобы сисадмин «все починил». Так как умения сисадмина в офисе ограничиваются своевременной заменой картриджей в принтере, все растянулось на два дня с переустановкой ОС, хотя скорее всего, могло бы быть решено гораздо проще. Ну и разумеется, приводил я ее в качестве примера «тщательно выстроенных границ», причем выстроенных в ущерб логике и здравому смыслу.

Вообще, конечно, в этой вашей айтишечке это считается крайне «неправильным» поведением, принято наоборот, всячески стараться разобраться в чем-то непонятном самостоятельно. Вот глючит у тебя твоя Android Studio? Сам разберись, сам поправь, «ты ж программист» — и любое поведение в духе «этим должен заниматься другой специалист» считается контрпродуктивным. Занятно, кстати, что во многих интерпретациях скрама даже требуют, чтобы каждый «разработчик» был кросс-функциональным (то есть мог выполнять работу кого угодно в команде) — хотя это не так, в Scrum Guide речь шла только о кросс-функциональных командах (т. е. состоящих из всех необходимых разнопрофильных специалистов).

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

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

Зато, разумеется, гайз, мы получили ценный опыт!

Про ИИ

Задался вопросом — как правильно писать — «Элиза Вейценбаума» или «Элиза Вейценбаум», особенно в свете вот этого комментария к советскому переводу «Приключений Тома Сойера»:

Если бы у мистера Харбисона был раб, по имени Булл, Том сказал бы о нём «Булл Харбисона», но если имя Булл принадлежало сыну или псу этого господина, каждого из них называли Булл Харбисон

А вы как считаете, всякие там чатботы и прочие ии-агенты ближе к детям, собакам или рабам?

Supply chain attack

В одном прожекте увидел, что для визуализации данных из питоновского скрипта используют библиотечку Pygal, которая из питоновских данных умеет генерировать красивые графики в формате svg. Глянул чуть глубже — и офигел, библиотека «подтягивает» свою содержательную часть, отвечающую за рисование этих графиков в браузере, из интернета, с урла https://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js. Использующие ее люди буквально ставят свое очко на то, что по этому адресу будет та самая библиотека, а незнакомый им ее автор (да и еще этак с полдесятка чуваков, имеющих законную или не очень возможность этот URL подменить) не ебанется внезапно и не заменит ее на код, рисующий аршинными буквами надпись СЛАВА ТИБЕТУ! УЙГУРАМ СЛАВА!

В свете всего этого офигеваю, конечно, от того, насколько в этом вашем современном программировании принято доверять совершенно незнакомым анонимусам из интернетов.

PS В качестве несложного упражнения: найдите в документации библиотеки указание на то, как заменить файл из интернета на «локальный», который вы можете сохранить и использовать без доступа к сети.

Про НДС и плачущих программистов

Вот хотел написать тут всякого злобного (и идущего вразрез с народным мнением) про налоговую реформу, в том числе и советов космического масштаба и космической же глупости, но вот меня очень удивляет один маленький ее нюанс — говорят, что собираются отменить «льготу по НДС» для разработчиков ПО. Эти самые разработчики ПО заныли, что ожидаемо — налоги платить никто не любит! Вон даже Синодов подключился:

https://t.me/thinkaboutism/9316

Но если честно, складывается такое впечатление, что обсуждающие, как «ИТ-отрасль» внезапно умрет, вообще не имеют понятия о том, что такое НДС, так что давайте начну с простого примера — предположим, есть у нас компания, ООО «Гудбай, Америка», занимающаяся… ну пускай изготовлением импортозамещенных автоматизированных систем из компонентов по ГОСТ 26074-84 и ГОСТ 8486-86. Говно покупается по 100 рублей за ведро у ИП Писькина, палки — а пускай у ООО «Кировлес» по 120 рублей за палку. Дальше автоматизированная система из палки и ведра с говном продается АО «Газмяс», скажем, за 300 рублей.

А теперь самое интересное! Эти самые 300 рублей в выставленном Газмясу счете-фактуре разбиваются на 2 части — стоимость товара 250 рублей и 50 рублей НДС (по ставке 20%). Но это еще не означает, что импортозаместители заплатят 50 рублей — у них есть «входящий НДС» от Кировлеса, 20 рублей с той же палки — и сумма налога к уплате на эти 20 рублей уменьшается, итого платить надо не 50, а всего-то 30 рублей. А вот с навозом так не получится, ИП Писькин сидит на каком-нибудь льготном режиме налогообложения и НДС не платит.

Внимание, вопрос — предположим, в «Гудбай, Америку» приходит чувак из ООО «ЛГБТ» (Льем грязь без тормозов, а не то, что вы подумали!) и предлагает покупать говно у них, по твердой цене из прайс-листа, 120 рублей за ведро. Стоит ли брать говно у этих пидорасов? И внезапно для импортозамеса при этом ничего не меняется! Да, говно у ЛГБТ стоит будто бы дороже, чем у Писькина — но в эту цену включены 20 рублей НДС, и на эту же сумму можно уменьшить налог — так что сумма НДС к уплате сократится до 10 рублей.

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

https://its.1c.ru/db/newscomm/content/496884/hdoc

Соответственно, если бы та самая «ИТ-отрасль» была устроена нормально — то все разговоры об «отмене льготы по НДС» закончились бы двумя вещами:

— стоимость софта во всех прайс-листах подскочила бы на 20% (точнее, ставку НДС);
— для «корпоративных» покупателей этого софта не изменилось бы ничего.

Вопрос: а почему тогда «отрасль» так демонстративно страдает?