Технологии и ирония: когда современный телевизор воспроизводит историю | 2025-12-20T20:31:24

У нее что, правда дома телевизор 21:9 для трансляции растянутой картинки 4:3?

Городки: больше, чем игра | 2025-12-20T05:29:16

Что-то у меня в голове сегодня внезапно выскочило слово «городки». Когда я был маленький, в Баку, в Азербайджане, мы почему-то во дворе играли в две игры — городки и ножички.

Гуглю. Интернет говорит, что в России есть Федерация Городошного спорта России. У нее есть президент, первый вице-президент, и просто вице-президент. Все в пинжачках. Есть президиум, и там есть председатель комиссии по международным связям. Есть целый аппарат президента городошного спорта с тремя советниками и ответсвенным секретарем. Они проводят конференции, как минимум в 2018 и 2020. У них есть марш городошников, музыка А. Рощина, слова В. Авдеева, И. Виноградского.

На сайте есть раздел «Антидопинг». Вы себе как представляете допинг в городошном спорте? У него есть подраздел «методические рекомендации».

В 2024 был Чемпионат Мира По Городошному Спорту. И у него было Торжественное Закрытие. Кроме Беларуси, в чемпионате мира принимали участие спортсмены из Германии и Казахстана. Из Германии кроме Сергея, Виталия, и Константина был Шляйн Ойген, короче, Женя.

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

В общем, все серьезно.

А вот федерации игры в ножички я не нашел.

Робомассаж Aescape: массаж будущего? | 2025-12-19T21:26:58

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

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

Превращение морозильника в холодильник: юный инженер и простой адаптер | 2025-12-19T00:56:58

Сегодня продал холодильник. У него есть история. Заключается она в том, что это не холодильник, хоть и выглядит как холодильник. Это морозильник. И морозит он в среднем до минус 18. А я его с рук покупал, и думал, что это холодильник. Покупатель сегодня тоже кстати приехала, думая, что это холодильник.

И вот я понимаю, что минус 18 мне совсем не надо.

Ну что, я ж Solution Architect. Лезть внутрь я не хотел, я просто поехал в Lowe’s и купил простенькую мигалку. Она по расписанию включает и выключает то, что в нее воткнуто. Сунул внутрь радиотермометр (у меня был), и подобрал частоту «мигания» (20 минут), чтобы внутренняя температура была в среднем +4 градусов. Радиотермометр показал, что флуктуации температуры совсем маленькие — условно плюс-минус 0.5 градуса от +4, даже меньше. И так он у меня работал сколько-то там месяцев, пока я понял, что он мне просто не нужен.

Сегодня продал с адаптером. Ушло в народ.

Нефтегазовые «ёлки»: больше, чем просто украшение | 2025-12-18T18:34:08

О, сколько нам открытий чудных приносит просвященья дух…

оказывается, Christmas tree в oil & gas industry — это фонтанная арматура. Это я по работе поиск тестирую

Перевод Excel-организма в код: стратегия и исполнение | 2025-12-17T18:56:17

Все мы с этим сталкивались — «Главная Excel-Таблица, Управляющая Бизнесом». Та самая, которую B2B-компании используют, чтобы считать котировки на миллионы долларов. В ней 12 вкладок, 1000+ вложенных формул и ноль документации. Десять лет туда лепили «быстрые фиксы» и прятали константы. Это уже не файл, а живой организм, который уже никто до конца не понимает кроме того чела, уволившегося годы назад. Вот такой я был озадачен. Более того, там еще была неопределенность нужна ли вообще половина формул, или это рудименты прошлого.

Типичная ячейка:

=IF($D11=$D10,»», IF(ISNUMBER( INDEX(Data!$T$10:$U$17,

MATCH(TabCalc!$F11,Data!$T$10:$T$17,0),2)),

INDEX(Data!$T$10:$U$17, MATCH(TabCalc!$F11,Data!$T$10:$T$17,0),2),

INDEX(TabProd!$C$8:$U$112,TabCalc!$D11,I$1)))

Мне поручили перенести эту логику в код, чтобы все считалось софтом. Excel-файл как бы все имел что надо, но по факту — это был сложнораспутываемый черный ящик. 1069 формул.

Челлендж был в том, как перевести тысячу взаимозависимых формул в чистый код и не потерять ни одного пограничного случая (edge case).

В итоге вот что я сделал.

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

Я построил структуру на Groovy, которая имитировала поведение Экселя. Каждое вычисление (из ячейки) я определил как функцию, которая выполняется только тогда, когда её вызывают. А функциями был многомерный dictionary.

Я пошел с конца графа вычислений: от результатов к входным данным. Если формула зависела от чего-то, что я еще не написал, я «мокал» это в коде, просто подставляя значение из Excel-листа.

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

Другими словами, движение шло от результата к исходным данным. На каждом шаге было ясно, какие моки надо превратить в код, и можно было сравнить версию +1 с версией -1 — результат должен был совпадать. Как только все моки заменились на вызовы — задача была готова.

Настоящим «секретным ингредиентом» стала динамическая природа Groovy для создания многомерной карты функций. Вместо статических переменных я использовал глубоко вложенную структуру, где каждый «лист» был замыканием (closure). Это позволило обращаться к любой части таблицы — будь то входной параметр, константа конфига или сложный промежуточный результат — через простой, унифицированный синтаксис, причем некоторые компоненты были динамическими.

Вот пример:

conf[«group»] = { x -> [«a», «b», «c»] }

conf[«group»]().each {

calculate[«Group»][«Subgroup»][it][«TotalQuantity»] =

{

x -> calculate[«Group»][«Subgroup»][it][«Someparameter»]() * conf[«someConstant»]()

}

}

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

Тестировать можно было прямо сразу после начала переноса формул. Прелесть была в том, что ты вроде как как бы к ячейке обращаешься через синтаксис типа calculate[«Totals»][«A»](), а на самом деле запускаешь целое дерево вычислений в этот момент. И это дико удобно в отладке.

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

P.S. Ну и конечно, все данные на всех скриншотах тщательно обфусцированы, а точнее сказать, написаны с нуля для этого текста.