Диплом с отличием: путь программиста Рауфа Велиевича | 2026-03-21T13:54:58

Мама прислала. Это мне с окончанием школы выдали. Хорошее школьное образование было по крайней мере в то время. Часть занятий по точным наукам шла в институте

Словарь Набокова: Мультиязычное путешествие по текстам писателя | 2026-03-15T18:30:39

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

Вы бы купили такую книжку?

Для того, чтобы корректно сделать их определения, я также написал aligner — программу, которая сопоставляет предложения и абзацы на английском с их переводами (набоковским) на русский. И когда создается определение слова, используется не только знание LLM, но и перевод на русский автора. Отдельно стоит рассказать, как работает алгоритм (я его сам придумал, потому что все, что нашел в сети, не работало как мне надо). Он находит сначала длинные предложения, и находит для самых длинных предложений их пару через косинусное сходство embedding-векторов, созданных через модель multilingual e5. Эти предложения становятся якорями. Затем, предполагая, что для длинных предложений ошибка почти исключена, находится самое длинное предложение уже между якорями, и все повторяется заново рекурсивно. Там много ситуаций, когда у предложения на русском нет аналога на английском и наоборот, когда предложение разбито на два, или наоборот два слиты в одно. Алгоритм как может это обрабатывает. Результат — очень неплохое качество выравнивания. До такой степени, что ошибки выравнивания уже не получается находить (но наверняка они есть). Так или иначе, оно нужно только для контекста для перевода слов, даже если там и есть редкие ошибки, то не страшно.

Вы бы купили такую книжку?

С турбо паскаля до CAD для мебели: история Bazis Soft | 2026-03-06T17:43:22

Моя первая работа, программистом, с офисом в Коломне и за деньги. 1993 год, а может еще годом раньше. 10-11 классы школы. И эта компания до сих пор существует, и ребята, с которыми я работал, до сих пор там! Наталья Бакулина, Павел Бунаков, Николай Каскевич. Прикиньте. Причем они вообще начали в 1986 году, то есть 40 лет назад уже! Я с трудом вспомню еще коммерческие компании такого возраста в России. Когда я пришел к ним работать, был MS DOS, писали на Turbo Pascal, но они начинали за много лет до меня еще на ЭВМ СМ-1420, правда, тогда компания была не совсем коммерческой. На момент моего прихода система была конкурентом AutoCAD на рынке, локально еще конкурировали с «Компас». Я делал установщик с дискет 5.25″ и 3.5″ — это чтобы почувствовать дух эпохи. Дальше они перешли на Delphi и Windows. Дальше они сузили тему, и из CAD для машиностроения перешли к CAD для мебели, где до сих пор у них очень неплохие позиции.

Инновационный веб-блокнот с AI и PDF: переосмысление работы с информацией | 2026-02-19T16:19:37

Еще доработал новый тул для себя для работы с информацией и её организации. Основная идея — это веб-блокнот для исследований, изучения темы, работой над ней, интегрированный с AI и поддержкой PDF.

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

Процесс работы:

— Контекстный AI. Я могу просить AI разъяснить сложные пассажи прямо внутри документа. Объяснение остается именно там, где был задан вопрос. При этом оно является отдельным документом, привязанным к конкретному месту в источнике. При клике вы видите на экране одновременно и оригинал, и пояснение.

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

— Поддержка PDF. Я могу загрузить PDF, выделить область на странице (например, сложную диаграмму или список авторов), и LLM мгновенно извлечет данные, дополнит или объяснит их. Объяснение прицепится к месту, где его просили, как и в случае не-PDF.

— Вложенные аннотации. Мои комментарии — это не просто статичный текст. Они могут содержать собственные PDF, ссылки и дальнейшие подзадачи для AI, поддерживая глубину вложенности, которая отражает то, как мы мыслим на самом деле.

Это не просто система хранения файлов, а «движок» для построения знаний.

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

Интерактивные врезки для понимания текста: новый инструмент объяснений | 2026-02-12T16:11:10

Запилил буквально за час такую штуку. Как думаете, она кому-то кроме меня нужна?

Идея такая. Берем любой текст — статья, например, википедии. Выделяем любой фрагмент, например, что непонятно. LLM нам дает объяснение, и тут же в текст втыкает врезку. На которую можно кликнуть, и откроется объяснение. В этом объяснении может быть тоже что-то непонятно. Выделяем мышью уже из этого, и там тоже появляется врезка. И так, пока не разберемся. Все врезки остаются в тексте, так что всегда можно к ним вернуться. Как бы идея, раз мне тут было непонятно, может и другим не будет, и тогда им очень кстати будет готовая ссылка с разъяснениями. Результат можно зашарить с коллегами.

Для разъяснения конечно используется не только фрагмент, но и контекст. Например, иначе бы выделенное слово Terrier выдавало бы текст про собак, а не про про поисковую систему.

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

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

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

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

10 лет динамики и вызовов в EPAM | 2026-01-05T13:43:25

10 лет в EPAM.

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

Сейчас я на проекте в компании-гиганте: более 100 тысяч сотрудников и выручка за 30 миллиардов долларов. До этого был автопром — махина со штатом в 175 тысяч человек и оборотом в 150 миллиардов. Где-то around был контракт с компанией на 80 тысяч сотрудников и 35 миллиардов дохода. Настоящие масштабы и по-настоящему серьезные вызовы. А еще раньше были косметические бренды, биотех и «нефтянка». В общей сложности — больше 20 проектов самого разного калибра. При том, что у меня была более чем 100% загрузка каждый день. И еще у меня в этом году, кажется, было больше отпуска, чем обычно, но все равно меньше, чем я мог бы взять. Съездил в Коста-Рику, Мексику, Сиеттл, Анталию.

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

Прошлый год в EPAM выдался максимально интенсивным, и я искренне надеюсь, что 2026-й не будет сбавлять обороты.

Создание и визуализация волейбольных схем | 2026-01-01T21:37:01

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

Детали реализации тут:

Разработка 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 описание диаграммы, а она консистентно генерит то, что написано в описании, и если ты что-то подправил, то при перегенерации это изменение будет учитываться.