Шкафы или развлекательные центры? Ценник вызывает улыбку | 2026-02-24T20:14:10

Забавно, у нас тут “entertainment center“ — это шкаф

Алгоритмическая стилизация: Хаски в линиях CMYK | 2026-02-01T04:18:59

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

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

Напечатать такое на плоттере, конечно, сложно, это я вечность буду ждать, но руки набиваю, первую цветную картинку я уже напечатал (так себе получилось. Ну первый блин комом. В комментах)

Разработка 3D-редактора волейбольных стратегий в полете | 2026-01-01T21:21:21

Чем я занимался в самолете в/из отпуска и иногда между и после: 3D-визуализация и редактор волейбольных схем для Нади (она — тренер). Этот корт на приложенном изображении свободно вращается, на нем могут быть поставлены игроки, и указан путь мяча и игрока — все в 3D.

Траектория мяча рассчитывается так, чтобы мяч не пересекал сетку при движении из A в B (формула Безье). Игроки могут принимать несколько поз — прямо сейчас есть наспех сделанные позы serve, attack, block, pass/receive. Кстати, из интересного в коде: пришлось прописать немного «волейбольных мозгов». Система сама считает траекторию мяча через кривые Безье так, чтобы он всегда проходил над сеткой. Причем высота вылета зависит от типа действия: для атаки мяч «вылетает» с более высокой точки, чем а для паса. Еще добавил авто-разворот: 3D-моделька сама поворачивается лицом туда, куда она по схеме должна пасовать или бежать.

Дольше и сложнее всего было сделать 3D-модель волейболистки. Для генерации реалистичной волейболистки я использовал сервис tripo3D. Он мне выдал модель в нейтральной позе (бесплатно выдал). Теоретически дальше с помощью Blender и плагина Rigify можно прицепить к ней armature и двигать руки-ноги, за которыми будет пересчитываться модель.

Однако в реальности такой подход не срабатывает: сгенерированная ИИ модель содержит большое количество геометрических ошибок, которые прощает рендер, но не прощает Rigify. Их можно условно разделить на два вида — неверные нормали полигонов и проблемы с немногообразной (non-manifold) геометрией, которые исправлять значительно сложнее. Внутри корпуса могут «плавать» невидимые кластеры полигонов или пересекающиеся поверхности. Когда Rigify пытается рассчитать веса (какая кость на какую часть кожи влияет), этот внутренний шум сбивает алгоритм с толку, и в итоге веса распределяются хаотично (например, движение руки может начать тянуть за собой сетку на животе). Плюс модель немного не симметрична.

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

Я исправлял это с помощью MashLab, попутно дорабатывая «напильником» (руками). В итоге получается модель, чуть-чуть отличающающаяся от исходной почти везде. На исходной же модели нацеплена «кожа» в виде текстуры — лицо, майка, шорты должны быть раскрашены. Как все это перенести на упрощенную модель? Для этого есть специальная операция в Blender, называется Baking. Там тоже шаманство. В итоге неидеально перенеслось, но идеально пока и не нужно.

Дальше привязываем арматуру к «суставам», и через часа три разбирательств, почему все работает не так, как должно, оно все-таки заработало. Я сделал четыре позы, и теперь каждому кружочку (игроку) можно указывать в какой позе он стоит.

Еще нужно будет сделать динамическую смену раскраски формы — это не должно быть сложно. Есть еще идея переносить позу с фотографии — это посложнее, но в целом реалистично. С помощью MediaPipe/AlphaPose можно детектировать ключевые точки в 2D, затем с помощью каких-нибудь моделей типа HMR/HybrIK можно «поднять» плоские координаты в 3D-пространство, выдавая относительные углы поворота суставов. Полученные данные можно попробовать спроецировать на Rigify-скелет. Поскольку пропорции сгенерированной волейболистки и человека на фото могут не совпадать, как раз и используется Inverse Kinematics (IK). Это довольно сложная часть, но в целом она уже не очень обязательная — просто интересно разобраться и сделать что-то работающее.

Видео в комментах

Создание редактора волейбольных схем: новые технологии для тренеров | 2025-12-23T21:39:02

Завтра вылет в Коста-Рику, а я тут для Нади делаю (или сделал) редактор волейбольных схем. Она как тренер готовится к занятиям, и оставляет после себя сотни страниц текста со схемами на каждой странице. Текст рукописный, и теоретически его просто перевести в электронную форму, а вот схемы в качественную векторную форму переводить замучаешься, их очень много. И я решил сделать софт вчера. И вот сегодня уже первая ласточка, можно пользоваться. Это редактор схем, немного похожий отдаленно на редактор диаграмм. Заодно поразбирался с фреймворком fabric.

Процесс выглядит так. Gemini/ChatGPT через API могут конвертировать рукописные схемы в структуру, которая понимает моя программа. Далее открываем этот файл в программе, и немного подправляем если надо. А может и вообще рисуем заново — для простых схем это даже проще. Там есть четыре типа объекта — игрок, конус, мишень, текст. Любые можно соединять друг с другом стрелками, простыми или пунктирными, подписанными текстом или номером или нет, выбранного цвета, прямыми или по дуге. Если зацепить мышкой за объект, то потянутся за ним все стрелки.

Результат можно записать в файл. Можно открыть шаблон и на его основе сделать что-то новое. Можно сгенерировать скрипт на питоне — вчера это было еще актуально, сегодня в целом не надо уже — SVG/PNG высокого разрешения делаются сразу из этого приложения (вчера делались отдельно с питона).

Понятно, почему сразу не попросить Gemini/ChatGPT сделать что-то для готовых векторных редакторов: во-первых, они слишком гибкие и ограничить фантазию LLM довольно сложно. В итоге получаются разностильные, никуда не годящиеся картинки. Тут же есть фреймворк из четырех объектов и все, LLM о нем знает и генерит только то, что им можно отобразить. Во-вторых, этот фреймворк оперирует объектами, а не элементарными векторными примитивами.

В целом, это первый шаг к моей идее про систему автоматического диаграммрования по описанию. Когда даешь LLM описание диаграммы, а она консистентно генерит то, что написано в описании, и если ты что-то подправил, то при перегенерации это изменение будет учитываться.

Лабиринт номеров: приключения в старом отеле | 2025-10-16T05:55:06

Живу я сейчас в luxury отеле (как они сами о себе пишут) за 400 долларов за ночь. Надо сказать, что я еле нашел отель — все раскуплено. Все началось с того, что в номере нет горячей воды. Мне выдали новый номер, в котором тоже нет горячей воды. Но в этом новом номере сантехник пришел и долбанул по крану, отчего он повернулся еще больше, и вода теплая пошла. Ну хорошо, я теперь знаю как его долбить. Но этот второй номер я искал почти полчаса, бродив по коридорам и следуя указателям, которые ведут вообще не туда. Когда я на ресепшене сказал, что мое настроение от отсутствия горячей воды и вынужденного переезда исправят только привидения, тетенька на ресепшене хитро улыбнулась, и сказала, что всякое бывает. И вот после этого я полчаса искал номер.

Вот представьте, вам дали комнату 446. Выходите вы из лифта. Там указатели

«направо 438-456»

«направо 466-476»

«направо нечетные комнаты»

«налево 400-432»

«налево 478»

Идешь по этому корридору и в самом его конце

«направо 439-487»

«прямо 429-437»

«назад 427-401»

Ок, у меня 446, значит направо. Там дверь

«прямо 439-477»

Хм. десять комнат потеряли просто повернувшись к двери. Ну ладно, моя 446 где-то тем.

Заходишь, а ее там нет. Есть 445 и 447.

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

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

За такую нафигацию нужно бить дизайнеров розгами. То, что отелю 132 года его не оправдывает)

История стакана-акробата: Откуда взялось название «tumbler»? | 2025-10-05T15:32:02

У нас стаканы называют tumblers. Я решил поинтересоваться, почему, ведь tumbler — это по сути акробат.

Есть две взаимоисключающие теории. По одной, изначально tumbler-стаканы имели округлое или слегка выпуклое дно, из-за чего они могли «покачиваться» или «переворачиваться» (to tumble), но не опрокидывались полностью. То есть, tumbler в этом смысле типа «неваляшка». По другой, они как раз делались специально, чтобы их не ставили на стол открытыми, потому что условно на корабле они могли опрокинуться и ценный ром бы из них вылился.

AI-генератор диаграмм: текст визуализации | 2025-09-30T20:57:35

Я пока работаю над книгой, понял, какого продукта мне не хватает. Это AI-генератор диаграмм по текстовому описанию.

Идея в том, что мастер-документом для диаграммы является текст. Это текстовое описание может быть (и должно быть) довольно подробным, чтобы сгенерированная диаграмма была именно такой, какой ее себе представляет автор. Саму диаграмму не редактируют. То есть, ее можно редактировать — подвигать там кружочки, но в идеале после внесения изменений система должна обновить текст, после генерации из которого получится то, что надвигал юзер.

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

Но дальше мы понимаем, что автор мог довольно случайно попасть в то, что ему понравилось своим кривым текстом. И если перегенерить, то получится что-то другое, и не факт, что хорошее. Поэтому —

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

То есть, с этого момента вы уже не работаете с диаграммой. Вы работаете с текстом. Если нужна диаграмма — вы просто компилируете текст в диаграмму и получается как надо. Но вы даже с текстом не работаете напрямую. Вы работаете с этим текстом -описанием диаграммы через LLM. То есть, просите добавить какой-нибудь блок, и меняется текст, но меняется так, чтобы внезапно не поменялось вообще все.

Диаграмма на выходе должна быть в объектной форме, из которой можно уже делать растровую (PNG) или векторную (SVG, EPS).

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

В общем, вот такие фантазии. Если у кого есть представления как это реализовать — давайте обсудим 🙂

Инновации на автозаправках: как технологии предотвращают перелив и аварии | 2025-09-28T13:36:28

С покупкой Теслы внезапно заинтересовался как топливный пистолет понимает, что бак полон. И еще пара интересных находок по теме.

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

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

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

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

Еще оказалось, что дизельный пистолет имеет более крупный размер носика, чтобы его нельзя было сунуть в бензиновый бак. Но вот наоборот по ошибке сунуть можно. Хотя могли бы сразу придумать разный дизайн, который работал бы в обе стороны.

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

А еще оказалось, что если вы уедете на машине, не вытащив шланг, то никаких огненных шаров, разлитого топлива, уроненной бензоколонки не будет. Шланг, соединяющий пистолет с бензоколонкой, спроектирован так, чтобы разъединяться на две части при приложении определённой силы. В следующий раз, когда будете на заправке, обратите внимание на металлический разъём на шланге. Это и есть точка разрыва. Когда шланг отсоединяется и вы едете дальше, в этом месте шланг разрывается, встроенные клапаны в шланге перекрывают топливо, но, конечно, колонка какое-то время работать не будет, пока все это не приведут в нормальный вид снова. Но интересно, что такой риск учтен и ущерб минимизируется.

А, ну вот еще тем, кто в Нью-Джерси не катался. Там по закону запрещено заправлять самому свою машину. На всех заправках есть заправщики, которые это делают для тебя.

Миниатюрные чудеса Европы: встречайте автомобили будущего | 2025-09-21T17:41:18

Мне показались очень милыми такие автомобильчики в Европе. Это все из Амстердама, их там очень много. В США, кажется, их совсем нет, даже на студенческих кампусах. Мне кажется, если они на наш хайвей выйдут, во-первых, все свернут шеи, а во-вторых, их снесет ветром. Среди показанных самая интересная — Microlino, зелененькая. У нее дверь спереди, буквально. Электрическая. 15-18К евро. Из остальных неплохой дизайн еще у Opel, FIAT, и Citroen.