Месяц: Декабрь 2025
| 2025-12-21T13:00:02
Технологии и ирония: когда современный телевизор воспроизводит историю | 2025-12-20T20:31:24
У нее что, правда дома телевизор 21:9 для трансляции растянутой картинки 4:3?

| 2025-12-20T14:06:53
Городки: больше, чем игра | 2025-12-20T05:29:16
Что-то у меня в голове сегодня внезапно выскочило слово «городки». Когда я был маленький, в Баку, в Азербайджане, мы почему-то во дворе играли в две игры — городки и ножички.
Гуглю. Интернет говорит, что в России есть Федерация Городошного спорта России. У нее есть президент, первый вице-президент, и просто вице-президент. Все в пинжачках. Есть президиум, и там есть председатель комиссии по международным связям. Есть целый аппарат президента городошного спорта с тремя советниками и ответсвенным секретарем. Они проводят конференции, как минимум в 2018 и 2020. У них есть марш городошников, музыка А. Рощина, слова В. Авдеева, И. Виноградского.
На сайте есть раздел «Антидопинг». Вы себе как представляете допинг в городошном спорте? У него есть подраздел «методические рекомендации».
В 2024 был Чемпионат Мира По Городошному Спорту. И у него было Торжественное Закрытие. Кроме Беларуси, в чемпионате мира принимали участие спортсмены из Германии и Казахстана. Из Германии кроме Сергея, Виталия, и Константина был Шляйн Ойген, короче, Женя.
Мастера спорта. Для допуска к международным соревнованиям нужно прийти со справкой, ой, сертификатом о прохождении антидопингового образования учреждения, что бы это ни значило.
В общем, все серьезно.
А вот федерации игры в ножички я не нашел.

Робомассаж Aescape: массаж будущего? | 2025-12-19T21:26:58
Сходили с Надей на робомассаж Aescape. Ну так, мне интересно было посмотреть на техническую сторону всего этого. В целом довольно интересно, но ехать 45 минут на машине вместо 15 и получать робота, пусть даже чуть дешевле.. ну так.. не уверен, что имеет смысл ходить туда регулярно. Другое дело, если ты уже там в зале занимаешься, и хочешь массаж прямо сейчас, без записи — это такой заменитель массажного кресла «на максималках». Да, в этом случае прям самое то.
Система сканирует тело четырьмя камерами под потолком, строит 3D-модель, и дальше в целом довольно неплохо эти роборуки отрабатывают, погружаясь в мышцы ровно так, как надо, где-то посильнее, где-то послабее — с учетом анатомии вообще, и конкретного массажируемого на столе. Кто-то может сказать, а не убьют ли они нафиг из-за какого-то бага, но мы и туда, и обратно ехали на автопилоте Теслы, и уж если машины решили бы нас убить, у них был бы шанс попроще.
| 2025-12-19T14:53:43
Превращение морозильника в холодильник: юный инженер и простой адаптер | 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. Ну и конечно, все данные на всех скриншотах тщательно обфусцированы, а точнее сказать, написаны с нуля для этого текста.








