Нет, ну ведь красота же! Крутилось-крутилось, пофиксило странный баг "egui backend is implemented incorrectly", надеюсь, плюс еще там мелкие правки. Затем само перезапустило через оркестратор (из моей "экосистемы"), проверило логи через duckdb, сделало health-check, обновило спеки, перестроило связи в gitnexus, выполнило commit. --
Antigravity 2.0 report
#### 2. Implemented Fixes
1. **Migrated to Deferred Viewports:**
- Switched both `alert_overlay_viewport` and `mini_pip_viewport` from `ctx.show_viewport_immediate(...)` to `ctx.show_viewport_deferred(...)`.
- Deferred viewports safely register UI closures with `eframe` without panicking if frames are skipped during window creation or headless passes.
2. **Suppressed Child Viewports When Minimized to Tray:**
- Added `if self.is_minimized_to_tray { return; }` before secondary viewport passes in [`src/ui/app.rs`](file:///c:/abcd/cam/src/ui/app.rs).
3. **Enhanced Mini-PIP Controls & State Synchronization:**
- Introduced `exit_mini_pip: Arc<AtomicBool>` and `mini_pip_opacity_atomic: Arc<AtomicU32>`.
- Added window dragging on click-drag via `ViewportCommand::StartDrag`.
- Added quick return to Dashboard on `Escape` key press or double-clicking the video feed.
- Enabled smooth mouse wheel opacity control (clamped between 20% and 100%) with real-time alpha tinting via `Color32::from_rgba_unmultiplied(255, 255, 255, tint_alpha)`.
---
#### 3. Verification & Autonomous Deployment Protocol
- **Service Verification:**
1. Stopped service: `sm stop abcd-cam`
2. Built release binaries: `cargo build --bin abcd-cam --bin abcd-cam-ui --release` (Clean build, exit code 0).
3. Started service: `sm start abcd-cam`
4. Observed 7-second stabilization delay.
5. Ran health check: `target\release\abcd-cam.exe health` (`status: "healthy"`, all 6 subsystem checks passing, code 0).
6. Queried session telemetry via DuckDB: Verified `err_count: 0` for all errors and reconnect loops.
- **OpenSpec & Git Lifecycle:**
- Synchronized and updated [`openspec/specs/ui-client/spec.md`](file:///c:/abcd/cam/openspec/specs/ui-client/spec.md).
- Archived change to `openspec/changes/archive/2026-09-19-fix-secondary-viewport-panic/`.
- Analyzed graph changes via GitNexus `detect_changes`.
- Committed cleanly to git (`[master fc676fd] fix(ui): eliminate egui immediate viewport callback panic and tray conflicts`).
Или вот еще пример, который меня самого впечатлял. Забацал я с Antigravity 2.0 Gemini кое-какой сервис (который слушает источники в Telegram и делает LLM анализ новых сообщений), который разделен на несколько отдельных модулей, выполняющих четко каждый свою задачу (на Rust). У каждого своя четкая зона ответственности.
Плюс приложение для Android на Kotlin и сайт на TypeScript (React). Работает все как локально на Windows 10, как и на удаленном VPS. Автоматизм полный - агент сам собрал и docker-контейнер для полных симуляций и прогонов. И docker для сборки под linux. И агент сам умеет любой модуль компилировать и заливать на сервер, перезапускать процессы.
И вишенка на торте. Я ему могу говорить - слушай, там у нас только что false positive произошел. Разберись. Он сам лезет по ssh, берет последние свежие данные в базе (базах) за ХХ минут (сколько я сказал), проводит анализ и описывает причины. Например, в LLM промпте анализатора нет обработки вот такой-то нестандартной ситуации. И он предлагает вариант улучшения промпта. Ну или еще там какие-нибудь правки.
А я могу ответить - не-не-не. Не спеши так делать. Запусти бенчмарк и сделай прогон по нашему референсному датасету, сравнивая текущий промпт и новый промпт. И затем мне дай report. Могу и попросить голосом маянкнуть мне (написал ему скилл, который позволяет боту запускать классный TTS OmniVoice (который крутится у меня в docker). Иногда удобно, когда он почти человеческим голосом тебе репортит, а ты не за компом. :)
Чуть позже заглядываю в анализ, проверяю, нет ли дерградации результатов. И решаю, обновлять ли промпт. Вообще, правильней было бы постоянно shadow test оставлять, но не хочется под гугловский рейт лимитер попадать.
Короче, это офигенное чувство, когда LLM-агенту можно делегировать настолько много.
Я, кстати, усовершенствовал pipeline. Теперь просто пишу yta URL (ну и еще можно в конце приписать, например, low для выбора качеста). И оно сразу качает туда, куда нужно, заодно качает и картинку-превьюшку и кладет в папку, чтоб в плеере сразу ее показывало (ну и даже в мета-данные для страховки ее запихивает).
"без танцев с бубном" "но чтобы из этих модулей собрать серьезную программу - ИИ вряд ли потянет."
Эмммм. Что?
" Моего ответа нет: я не фанатик, но программирую не "20+", а "40+" "
А я чуть меньше - 35+. Калькулятора не было, а вот на ZX Spectrum уже вовсю писал на бейсике, лазер-бейсике и ассемблере.
" хоть один пример РЕАЛЬНОЙ ЗАДАЧИ "
Ну у меня уже целая эко-система локальных тулзов. Чего только нет (Rust/Python/TypeScript, MongoDB). Например,
- локальная вертикальная панель (task-bar, который прилипает к правому краю первого (левого) монитора), на котором и всякие кнопки (например, переключения между виртуальными десктопами с четкой идентификацией текущего соответствующим изображением), и разные статусы (cam alarm, air alarm), можно даже включить прям там трансляцию с камер в мелком виде. (Rust)
- вот еще свежачок - свой Harness для Antigravity 2.0, позволяющий выполнять определенные задачи (на hooks), видеть trajectory действий агента, как это удобно сделали в DeepSeek Harness (Rust)
- своя замена для Live Wallpaper (Rus) и целая "тренировочная" система (TypeScript), которая на правом мониторе всегда теперь отображается как wallpaper. точнее, там две. но приведу пример первой. есть 5 кнопок для базовых физических упражнений. отжался ХХ раз - кликнул по кнопке ХХ раз. все пошло в MongoDB. и отображается график активности в виде многоугольника (по всем 5 точкам, нормализованный) за последние 7 дней (точнее, там много разные графики выбирать, я про дефолтный).
- система для камер (переписал на Rust + TensorRT, а до этого юзал свою на python) - тут много детализировать смысла нет. своя зафайнтюненая на своем датасете YOLO model. и клипы сохраняет, и алерты умеет слать, и отдельный UI читает фреймы через shared memory, чтобы лишнюю нагрузку на сеть не делать
- ...
Так, ладно, могу и дальше расписывать, но смысла мало. Я не знаю, что подразумевается под танцами с бубном. Ну мысли LLM-ки читать не умеют. Нужно юзать openspec, составлять четкие инструкции. Дописывать свои skills/rules, давать ей еще тулзы типа gitnexus, дробить все на модули, уменьшая связанность...
:) Вспомнил, сколько раз брал ESP8266 (Wemos d1), когда рядом еще лежали ESP32. Так как нефиг было тратить ESP32 для такой простой задачи. Дошло и до "esp 07" (или какая там версия была, не помню), но понял, что не-не-не. Вот это уже было зря, паять потом эти обвязки, подтягивающие резисторы. "Ну нафиг" (с)
На фоне того, как многие "странные люди" спускают сотни баксов (а некоторые и тысячи) каждый год на паки с игроками (казиношная механика) внутри ФИФЫ (а эти все карточки каждый год сгорают в новой версии) - это вообще выглядит детским лепетом. :)
Очень удобно, кстати, вот так `yt-dlp -xhttps://youtu.be/XXxXxxXxxXX` скачивать аудио-дорожку некоторых youtube-подкастов (где картинка не нужна), а потом сразу по sftp на телефон в нужную папку закидывать для прослушивания позже.
~ 24 года прошло, как я писал статью "Написание экстра-маленьких Win32 приложений на С++ от 1 КБ используя лишь API, на примере программы Windows Hider". Но там я "уходил" от 32Кб до 1 Кб пустышки и 4 Кб полезной программы.
Ха. Забавно. Я похожего про-активного агента себе проектирую (реализация пока начальная/частичная, все лень/некогда). Тоже через EventBus, чтобы четко разделить проект на независимые модули (иначе общая сложность/связанность системы просто накроет с головой). Только я хочу сразу нативное UI приложение собрать, чтобы упростить и способы нотификации меня (без необходимости задействовать telegram), и окно чата туда, и TTS<->STT, и прочий функционал на него [временно] повесить для удобства.
Не понимаю, почему все так механически добавляют в env очевидные названия типа OPENAI_API_KEY, если они пишут СВОЙ КОД. Ну напиши ты абра-кадабру непонятную, типа TMP_IMAGE_FOLDER_NAME. Да и сам ключ не обязательно в открытом виде записывать. Можно хоть как подстроку ("абракадабраключабра"), можно перестановки, да что угодно. Без просмотра исходников никто ничего не поймет. Ну а большего в этих ситуациях и не нужно обычно.
Ха! Я точно такое же делал год назад, когда психанул от этого хаоса формата параметров. Сначала на питоне потестил все, затем сбилдил ai.exe на go (хотя я не нем не пишу) для удобства. Когда ты не "узкозадачный", сложно помнить все-все-все инструменты, которые ты используешь раз в Х времени. Я даже проект тогда назвал "RelaxTerm". :) Ну реально достало, хаос полный с этими параметрами командной строки.
Вот только я взял Gemini гугловский (Free Tier). Можно и в Ollama гонять локально, но такое подходит только тем, у кого и так и так должна быть подгружена какая-то LLM моделька для других целей. Или, как вариант, можно еще параллельно собрать "ailocal", который будет дергать только локальную LLM-ку, если есть причины. Ну или ключ "--local" добавить к команде "ai" и каждый раз его забывать (шутка).
:) Можно еще попробовать что-то тупое-тупое спросить, на что человек бы не отвечал, а LLM-ка (если работает на автомате) не поймет этой проверки и ответит "как на духу". :)
Когда Shazam вернул результат, надо записать теги. Но есть нюанс: файл мог быть уже частично размечен .... Флаг overwrite=False по умолчанию — уважение к моим прошлым усилиям по разметке.
А я бы вообще не рисковал. Проще сначала все папки отсканировать, прохэшировать, считав все тэги и записав все важное просто в dictionary (для простоты) и сдампить на диск. Затем уже прогнать через Шазам, заполняя в этом dictionary дополнительное поле с информацией от Шазама. И только на третьем этапе переименовывать файлы и заполнять теги, чтоб можно было или где-то откатиться (предыдущая информация вся останется на всякий случай, мало ли).
О, а мне это в голову не пришло, почему-то. Делал только для проводника через реестр добавление контекстного меню на разных файлах для конвертации в другие форматы. А в FAR-е ж проще и быстрее. Теперь надо не забыть начать этим пользоваться, когда снова надо будет часто.
Но потом понимаю, что сейчас открою Хабр, и придется вместо стрелки вниз нажимать
Вот и я посидел на такой "неполноценной" сплит механике. А после очередного случайного сброса настроек мне стало лень разбираться, вернулся к старой низкопрофильной обычной K820e, хоть и снова перепривыкать пришлось.
Не понимаю я прикола отказа от отдельных выделенных клавиш, которые ты можешь нажимать вообще не глядя на клавиатуру (да еще и одним пальцем). Это и навигация (стрелки и Page Up/Down), и еще некоторые другие клавиши.
А, помню еще и с F1-F12 рядом вообще матюкался, когда понял, как с FAR-ом стало неудобно, ну это такое, частный случай.
Нет, ну ведь красота же! Крутилось-крутилось, пофиксило странный баг "egui backend is implemented incorrectly", надеюсь, плюс еще там мелкие правки. Затем само перезапустило через оркестратор (из моей "экосистемы"), проверило логи через duckdb, сделало health-check, обновило спеки, перестроило связи в gitnexus, выполнило commit.
--
Antigravity 2.0 report
Или вот еще пример, который меня самого впечатлял. Забацал я с Antigravity 2.0 Gemini кое-какой сервис (который слушает источники в Telegram и делает LLM анализ новых сообщений), который разделен на несколько отдельных модулей, выполняющих четко каждый свою задачу (на Rust). У каждого своя четкая зона ответственности.
Плюс приложение для Android на Kotlin и сайт на TypeScript (React). Работает все как локально на Windows 10, как и на удаленном VPS. Автоматизм полный - агент сам собрал и docker-контейнер для полных симуляций и прогонов. И docker для сборки под linux. И агент сам умеет любой модуль компилировать и заливать на сервер, перезапускать процессы.
И вишенка на торте. Я ему могу говорить - слушай, там у нас только что false positive произошел. Разберись. Он сам лезет по ssh, берет последние свежие данные в базе (базах) за ХХ минут (сколько я сказал), проводит анализ и описывает причины. Например, в LLM промпте анализатора нет обработки вот такой-то нестандартной ситуации. И он предлагает вариант улучшения промпта. Ну или еще там какие-нибудь правки.
А я могу ответить - не-не-не. Не спеши так делать. Запусти бенчмарк и сделай прогон по нашему референсному датасету, сравнивая текущий промпт и новый промпт. И затем мне дай report. Могу и попросить голосом маянкнуть мне (написал ему скилл, который позволяет боту запускать классный TTS OmniVoice (который крутится у меня в docker). Иногда удобно, когда он почти человеческим голосом тебе репортит, а ты не за компом. :)
Чуть позже заглядываю в анализ, проверяю, нет ли дерградации результатов. И решаю, обновлять ли промпт. Вообще, правильней было бы постоянно shadow test оставлять, но не хочется под гугловский рейт лимитер попадать.
Короче, это офигенное чувство, когда LLM-агенту можно делегировать настолько много.
Я, кстати, усовершенствовал pipeline. Теперь просто пишу yta URL (ну и еще можно в конце приписать, например, low для выбора качеста). И оно сразу качает туда, куда нужно, заодно качает и картинку-превьюшку и кладет в папку, чтоб в плеере сразу ее показывало (ну и даже в мета-данные для страховки ее запихивает).
"без танцев с бубном"
"но чтобы из этих модулей собрать серьезную программу - ИИ вряд ли потянет."
Эмммм. Что?
" Моего ответа нет: я не фанатик, но программирую не "20+", а "40+" "
А я чуть меньше - 35+. Калькулятора не было, а вот на ZX Spectrum уже вовсю писал на бейсике, лазер-бейсике и ассемблере.
" хоть один пример РЕАЛЬНОЙ ЗАДАЧИ "
Ну у меня уже целая эко-система локальных тулзов. Чего только нет (Rust/Python/TypeScript, MongoDB). Например,
- локальная вертикальная панель (task-bar, который прилипает к правому краю первого (левого) монитора), на котором и всякие кнопки (например, переключения между виртуальными десктопами с четкой идентификацией текущего соответствующим изображением), и разные статусы (cam alarm, air alarm), можно даже включить прям там трансляцию с камер в мелком виде.
(Rust)
- вот еще свежачок - свой Harness для Antigravity 2.0, позволяющий выполнять определенные задачи (на hooks), видеть trajectory действий агента, как это удобно сделали в DeepSeek Harness (Rust)
- своя замена для Live Wallpaper (Rus) и целая "тренировочная" система (TypeScript), которая на правом мониторе всегда теперь отображается как wallpaper. точнее, там две. но приведу пример первой. есть 5 кнопок для базовых физических упражнений. отжался ХХ раз - кликнул по кнопке ХХ раз. все пошло в MongoDB. и отображается график активности в виде многоугольника (по всем 5 точкам, нормализованный) за последние 7 дней (точнее, там много разные графики выбирать, я про дефолтный).
- система для камер (переписал на Rust + TensorRT, а до этого юзал свою на python) - тут много детализировать смысла нет. своя зафайнтюненая на своем датасете YOLO model. и клипы сохраняет, и алерты умеет слать, и отдельный UI читает фреймы через shared memory, чтобы лишнюю нагрузку на сеть не делать
- ...
Так, ладно, могу и дальше расписывать, но смысла мало. Я не знаю, что подразумевается под танцами с бубном. Ну мысли LLM-ки читать не умеют. Нужно юзать openspec, составлять четкие инструкции. Дописывать свои skills/rules, давать ей еще тулзы типа gitnexus, дробить все на модули, уменьшая связанность...
:) Вспомнил, сколько раз брал ESP8266 (Wemos d1), когда рядом еще лежали ESP32. Так как нефиг было тратить ESP32 для такой простой задачи. Дошло и до "esp 07" (или какая там версия была, не помню), но понял, что не-не-не. Вот это уже было зря, паять потом эти обвязки, подтягивающие резисторы. "Ну нафиг" (с)
На фоне того, как многие "странные люди" спускают сотни баксов (а некоторые и тысячи) каждый год на паки с игроками (казиношная механика) внутри ФИФЫ (а эти все карточки каждый год сгорают в новой версии) - это вообще выглядит детским лепетом. :)
Очень удобно, кстати, вот так `
yt-dlp -xhttps://youtu.be/XXxXxxXxxXX` скачивать аудио-дорожку некоторых youtube-подкастов (где картинка не нужна), а потом сразу по sftp на телефон в нужную папку закидывать для прослушивания позже.~ 24 года прошло, как я писал статью "Написание экстра-маленьких Win32 приложений на С++ от 1 КБ используя лишь API, на примере программы Windows Hider". Но там я "уходил" от 32Кб до 1 Кб пустышки и 4 Кб полезной программы.
А вот Gemini 3.1 PRO Preview. Кстати, доступно свободно через aistudio.google.com
Ха. Забавно. Я похожего про-активного агента себе проектирую (реализация пока начальная/частичная, все лень/некогда). Тоже через EventBus, чтобы четко разделить проект на независимые модули (иначе общая сложность/связанность системы просто накроет с головой). Только я хочу сразу нативное UI приложение собрать, чтобы упростить и способы нотификации меня (без необходимости задействовать telegram), и окно чата туда, и TTS<->STT, и прочий функционал на него [временно] повесить для удобства.
Не понимаю, почему все так механически добавляют в env очевидные названия типа
OPENAI_API_KEY, если они пишут СВОЙ КОД. Ну напиши ты абра-кадабру непонятную, типа TMP_IMAGE_FOLDER_NAME. Да и сам ключ не обязательно в открытом виде записывать. Можно хоть как подстроку ("абракадабраключабра"), можно перестановки, да что угодно. Без просмотра исходников никто ничего не поймет. Ну а большего в этих ситуациях и не нужно обычно.Ха! Я точно такое же делал год назад, когда психанул от этого хаоса формата параметров. Сначала на питоне потестил все, затем сбилдил ai.exe на go (хотя я не нем не пишу) для удобства. Когда ты не "узкозадачный", сложно помнить все-все-все инструменты, которые ты используешь раз в Х времени. Я даже проект тогда назвал "RelaxTerm". :) Ну реально достало, хаос полный с этими параметрами командной строки.
Вот только я взял Gemini гугловский (Free Tier). Можно и в Ollama гонять локально, но такое подходит только тем, у кого и так и так должна быть подгружена какая-то LLM моделька для других целей. Или, как вариант, можно еще параллельно собрать "ailocal", который будет дергать только локальную LLM-ку, если есть причины. Ну или ключ "--local" добавить к команде "ai" и каждый раз его забывать (шутка).
Вот и я забайтился на тему ПО. Странно автору делать такой акцент, а этот вопрос вообще обойти.
:) Можно еще попробовать что-то тупое-тупое спросить, на что человек бы не отвечал, а LLM-ка (если работает на автомате) не поймет этой проверки и ответит "как на духу". :)
А я бы вообще не рисковал. Проще сначала все папки отсканировать, прохэшировать, считав все тэги и записав все важное просто в dictionary (для простоты) и сдампить на диск. Затем уже прогнать через Шазам, заполняя в этом dictionary дополнительное поле с информацией от Шазама. И только на третьем этапе переименовывать файлы и заполнять теги, чтоб можно было или где-то откатиться (предыдущая информация вся останется на всякий случай, мало ли).
О, а мне это в голову не пришло, почему-то. Делал только для проводника через реестр добавление контекстного меню на разных файлах для конвертации в другие форматы. А в FAR-е ж проще и быстрее. Теперь надо не забыть начать этим пользоваться, когда снова надо будет часто.
И я с вами. :) Тоже механику отложил в коробку, хоть и успел привыкнуть и перестроиться. Вернулся на свою k-280e.
Ха. Зашел как раз найти этот коммент. Только у меня в голове было слово "ПЕРЕизобрели". Остальные буквы все совпали. :)
Вот и я посидел на такой "неполноценной" сплит механике. А после очередного случайного сброса настроек мне стало лень разбираться, вернулся к старой низкопрофильной обычной K820e, хоть и снова перепривыкать пришлось.
Не понимаю я прикола отказа от отдельных выделенных клавиш, которые ты можешь нажимать вообще не глядя на клавиатуру (да еще и одним пальцем). Это и навигация (стрелки и Page Up/Down), и еще некоторые другие клавиши.
А, помню еще и с F1-F12 рядом вообще матюкался, когда понял, как с FAR-ом стало неудобно, ну это такое, частный случай.
У меня оно подтверждения еще требует для ввода. :) А вообще можно для валидации вторую независимую LLM-ку использовать. Они точно не договорятся. :)