AI Programming Guide.pdf
437.6 KB
Я спросил и ИИ ответил. После небольшого форматирования получилась методичка по работе с ИИ при программировании. В общем, дельные советы.
Там есть повторы в текстах между главами, пара водянистых предложений, но на разок прочитать по диагонали сойдет.
Там есть повторы в текстах между главами, пара водянистых предложений, но на разок прочитать по диагонали сойдет.
Супер-безопасные ID для сущностей
Ох, давно я не писал, ох, давно!! Но вот начал прогать и понеслась мысля по полю 😊
Суть вот в чем. Есть сторейдж, откуда вы берете какие-то сущности. И у этих сущностей есть Id какие-то. И по этим id вы сущности считываете, передаете между разными штуками. Например, из экрана в экран.
Обычно это int или string. И существует вероятность ошибки: вдруг строка не правильная будет? Вдруг int неправильно значение? И когда будешь из сторейджа делать getById, будет либо null, либо кидаться исключение StateError или ArgumentError.
А если такое возможно, тогда в каждом месте, в каждом методе, которых хочет обналичить id до сущности, надо делать проверки и проектировать сценарии работы в случае отказа. На каждом экране, в каждом блоке (контроллере экрана) придется рисовать отдельный режим кукиша.
А уж если совсем по хорошему, это надо ошибки все логгировать и отправлять в свой какой-нибудь онлайн-копилку, для дальнейшего исправления.
А давайте без этого
И давайте сделаем вместо int или string - свой отдельный класс: MyEntityId. И чтоб совсем было весело: с приватным конструктором. То есть, экземпляр никто никогда не может создать, кроме… MyEntityStorage. В Dart так можно.
И просто такой факт, что такие id можно взять только у MyEntityStorage обозначает, что технически вообще не возможно никогда нигде никакая ошибка неверного id. Сущность не может несуществовать. Bullet-proof.
Это же сколько кода, сколько обработчиков, сколько UI не надо писать, сколько сценариев ошибок не нужно учитывать. Класс, да?
Вот только есть мааааленькая проблемка…
Начинает казаться, что если мы вместо примитивов будем передавать какой-то объект класса MyEntityId, который еще и сериализовать нельзя никаким образом, возникает вопрос. А почему бы нам тогда не передавать везде собственно сущность?
Или другой вариант. А что, если на сервере сущность удалили. И в момент какой-то асинхронной операции выясниться, что Id более не валидный, и он может где-то в какой-то переменной еще висеть. И тогда ошибка будет. И ее надо обрабатывать.
Или другой вариант: в другом типе данных хранится такой вот id, чтобы ссылаться на другую сущность. И… И как мы создадим этот другой тип данных, если мы не можем создавать MyEntityId?
Ну в общем, я еще подумою… А вам спасибо, и хорошего дня!
Ох, давно я не писал, ох, давно!! Но вот начал прогать и понеслась мысля по полю 😊
Суть вот в чем. Есть сторейдж, откуда вы берете какие-то сущности. И у этих сущностей есть Id какие-то. И по этим id вы сущности считываете, передаете между разными штуками. Например, из экрана в экран.
Обычно это int или string. И существует вероятность ошибки: вдруг строка не правильная будет? Вдруг int неправильно значение? И когда будешь из сторейджа делать getById, будет либо null, либо кидаться исключение StateError или ArgumentError.
А если такое возможно, тогда в каждом месте, в каждом методе, которых хочет обналичить id до сущности, надо делать проверки и проектировать сценарии работы в случае отказа. На каждом экране, в каждом блоке (контроллере экрана) придется рисовать отдельный режим кукиша.
А уж если совсем по хорошему, это надо ошибки все логгировать и отправлять в свой какой-нибудь онлайн-копилку, для дальнейшего исправления.
А давайте без этого
И давайте сделаем вместо int или string - свой отдельный класс: MyEntityId. И чтоб совсем было весело: с приватным конструктором. То есть, экземпляр никто никогда не может создать, кроме… MyEntityStorage. В Dart так можно.
И просто такой факт, что такие id можно взять только у MyEntityStorage обозначает, что технически вообще не возможно никогда нигде никакая ошибка неверного id. Сущность не может несуществовать. Bullet-proof.
Это же сколько кода, сколько обработчиков, сколько UI не надо писать, сколько сценариев ошибок не нужно учитывать. Класс, да?
Вот только есть мааааленькая проблемка…
Начинает казаться, что если мы вместо примитивов будем передавать какой-то объект класса MyEntityId, который еще и сериализовать нельзя никаким образом, возникает вопрос. А почему бы нам тогда не передавать везде собственно сущность?
Или другой вариант. А что, если на сервере сущность удалили. И в момент какой-то асинхронной операции выясниться, что Id более не валидный, и он может где-то в какой-то переменной еще висеть. И тогда ошибка будет. И ее надо обрабатывать.
Или другой вариант: в другом типе данных хранится такой вот id, чтобы ссылаться на другую сущность. И… И как мы создадим этот другой тип данных, если мы не можем создавать MyEntityId?
Ну в общем, я еще подумою… А вам спасибо, и хорошего дня!
🔥1
Просто код
Супер-безопасные ID для сущностей Ох, давно я не писал, ох, давно!! Но вот начал прогать и понеслась мысля по полю 😊 Суть вот в чем. Есть сторейдж, откуда вы берете какие-то сущности. И у этих сущностей есть Id какие-то. И по этим id вы сущности считываете…
Я еще подумал. Можно вместо приватного контруктора делать sealed class, в Dart есть такая фишка. Нигде снаружи нельзя будет такой класс расширить. Это повышает надежность.
Я поставил антигравити от Гугла и изучаю структуру проектов и разбивку на модули в c++
Йолы-палы, ребят. Я конечно тормозок, но наконец-то я по нормальному погонял агентов, скилы, слегка увидел под капотом, как это все работает, и как это отличается от использования chatgpt.
Это прост небо и земля! Реальна
Это прост небо и земля! Реальна
Много прошло всего, и чет я с середины начинаю. Ну да и ладно. Теперь буду писать про программирование с AI, если никто не против
Программирую в Antigravity. И завезли туда поддержку skills. И я такой обрадовался, понаписал скилы, чтоб агент правильно задачи делал. Например, скилл по тому, как оформлять спецификацию.
И вот чо я осознал в итоге, кое-что неприятное.
Вот я пишу в новом чате первый запрос, говорю, чтоб писал документацию. И могу сказать — используй скилл для документации (прям словами, без магии). И он чаще всего ее использует! Все правильно делает.
И после прочтения первого варианта я прошу его: внеси такие-сякие изменения (зайчишка мой сладкий). А он берет ... и уже не помнит, что нужно было использовать скил и засирает всю тока что созданную красивую доку.
Получается, все скилы надо напоминать каждое сообщение. Каждое!!! Суть он помнит из истории чата, а необходимость использовать скиллы — нет.
И вот чо я осознал в итоге, кое-что неприятное.
Вот я пишу в новом чате первый запрос, говорю, чтоб писал документацию. И могу сказать — используй скилл для документации (прям словами, без магии). И он чаще всего ее использует! Все правильно делает.
И после прочтения первого варианта я прошу его: внеси такие-сякие изменения (зайчишка мой сладкий). А он берет ... и уже не помнит, что нужно было использовать скил и засирает всю тока что созданную красивую доку.
Получается, все скилы надо напоминать каждое сообщение. Каждое!!! Суть он помнит из истории чата, а необходимость использовать скиллы — нет.
уже три дня восстанавливаю утраченный функционал. Сраная кнопка "undo changes to this point" в антигравити. Она все испортила, все удалила, что я не успел закоммитить. А я хотел причесать перед коммитом.
И три дня эти модели как сговорились пишут только откровенный шлак вместо красивого кода, что изначально получился. Пишу вручную. Я просто уничтожен, подавлен
И три дня эти модели как сговорились пишут только откровенный шлак вместо красивого кода, что изначально получился. Пишу вручную. Я просто уничтожен, подавлен
Forwarded from Пеши Музло!
Фух, ну я вырвался из ада программирования. Гиперфиксация — это зло конешно.
Что я напрограммировал чудесного с помощью ИИ? Перечислю с места в карьер, кто не поймет, тому пирожок. Кратко, напомню, делаю универсальное DSP DAW-like библиотеку на c++ и Dart, для использования в проектах Flutter.
* Graph-like структура проекта: перечисляешь юниты в древовидной структуре, задаешь параметры
* Есть пока несколько юнитов: Mixer, SineSynth, примитивный SimpleSampler и SampledInstrument — куда можно грузить засемплированное пианино, например.
* бинарная передача данных в DSP для передачи сложных структур: пресеты и зоны для SampledInstrument, например.
* Загрузка WAV и ресемплинг в нужный битрейт и формат
* SampledInstrument — большой проект, где саму суть многоголосной, но ограниченой системы пришлось спроектировать самостоятельно, ИИ не умеет такие сложности.
* А и интерполяция семпла — задача оказалась вроде простая даже. ИИ такое на изи умеет, и алгоритмы знает всякие
* Горячее автоматическое подключение миди-устройств: в любой момент работы программы подрубаешь миди-клаву, и она сразу работает.
* Собственно движок для рендеринга Аудио буферов юнитов, раздача зависимостей между юнитами.
* И отдельная гемороина: убирание щелчков при срочном выключении голоса синтезатора или семплера.
Это самые большие штуки. Делал это все с 6 по 26 января, в отрыве от нескольких тусовок, прогулок, занятий спортами и тд.
В общем, кажется, что весьма недурственно. Сам бы я дольше писал это, особенно учитывая, что язык с++ я знаю весьма плохо.
Что дальше? Надо теперь найти и скачать себе пианино библиотеку, которая не то что бесплатная, а позволяет делать redistribute, чтобы я мог пианино внедрить в свою программу.
А вообще — надо доделать в DSP систему транспорта: пауза-стоп, секвенсор для воспроизведения миди-клипов, маршрутизацию миди-данных устроить, и доработать SimpleSampler, или может вместо него приделать DrumSampler.
Это я к тому, что если вы вдруг задумались, где мое музло - то вот оно где, я прогал. Прогаю прогу-тренажор, и для тренажера писал аудио-движок. Может не самое рациональное решение, но и прога-тренажер — это не единственная у меня цель.
Как вам название тренажера PandaMusic? 🙂
Что я напрограммировал чудесного с помощью ИИ? Перечислю с места в карьер, кто не поймет, тому пирожок. Кратко, напомню, делаю универсальное DSP DAW-like библиотеку на c++ и Dart, для использования в проектах Flutter.
* Graph-like структура проекта: перечисляешь юниты в древовидной структуре, задаешь параметры
* Есть пока несколько юнитов: Mixer, SineSynth, примитивный SimpleSampler и SampledInstrument — куда можно грузить засемплированное пианино, например.
* бинарная передача данных в DSP для передачи сложных структур: пресеты и зоны для SampledInstrument, например.
* Загрузка WAV и ресемплинг в нужный битрейт и формат
* SampledInstrument — большой проект, где саму суть многоголосной, но ограниченой системы пришлось спроектировать самостоятельно, ИИ не умеет такие сложности.
* А и интерполяция семпла — задача оказалась вроде простая даже. ИИ такое на изи умеет, и алгоритмы знает всякие
* Горячее автоматическое подключение миди-устройств: в любой момент работы программы подрубаешь миди-клаву, и она сразу работает.
* Собственно движок для рендеринга Аудио буферов юнитов, раздача зависимостей между юнитами.
* И отдельная гемороина: убирание щелчков при срочном выключении голоса синтезатора или семплера.
Это самые большие штуки. Делал это все с 6 по 26 января, в отрыве от нескольких тусовок, прогулок, занятий спортами и тд.
В общем, кажется, что весьма недурственно. Сам бы я дольше писал это, особенно учитывая, что язык с++ я знаю весьма плохо.
Что дальше? Надо теперь найти и скачать себе пианино библиотеку, которая не то что бесплатная, а позволяет делать redistribute, чтобы я мог пианино внедрить в свою программу.
А вообще — надо доделать в DSP систему транспорта: пауза-стоп, секвенсор для воспроизведения миди-клипов, маршрутизацию миди-данных устроить, и доработать SimpleSampler, или может вместо него приделать DrumSampler.
Это я к тому, что если вы вдруг задумались, где мое музло - то вот оно где, я прогал. Прогаю прогу-тренажор, и для тренажера писал аудио-движок. Может не самое рациональное решение, но и прога-тренажер — это не единственная у меня цель.
Как вам название тренажера PandaMusic? 🙂
А вот кстати полезное видео! Всем зыреть и умнеть, кто еще не 🙂
https://www.youtube.com/watch?v=zzuOvQzerFk
https://www.youtube.com/watch?v=zzuOvQzerFk
YouTube
Ускоряем карьерный рост в FAANG | Apple, Google, Meta | Podlodka Podcast #384
Существует популярное мнение – делай свою работу быстрее и лучше других, и продвижение по карьере не заставит себя ждать. На ранних этапах карьеры это еще справедливо, но чем дальше – тем больше правила игры меняются. Особенно в FAANG, где на каждую высокую…
Я просто оставлю эту ссылочку тут, кто знает, тот знает, что с этим делать: https://p.umputun.com/2026/02/12/ai-agents-2026/
Umputun
Как я использую AI агентов в 2026 году
На дворе февраль 2026 года, и я пишу это с четким осознанием того, что через полгода этот пост может стать музейным экспонатом. Область AI-assisted разработки меняется настолько стремительно, что любые наблюдения устаревают быстрее, чем молоко в холодильнике.…
Если кто-то не использует эту удобную программку, я рекомендую попробовать. Вставляет везде, пунктуацию делает, языки одновременно разные воспринимает, шепот слышит. Вставлять текст можно даже в терминале.
Эт моя реферальная ссылка, там больше бонусов дают (если не обман): https://wisprflow.ai/r?DMITRIY185
P.S. Но тест на проверки скорости печати у них совсем неправильный, он не то тестирует
Эт моя реферальная ссылка, там больше бонусов дают (если не обман): https://wisprflow.ai/r?DMITRIY185
P.S. Но тест на проверки скорости печати у них совсем неправильный, он не то тестирует
wisprflow.ai
You have been invited to Flow | Wispr Flow
Flow makes writing quick and clear with seamless voice dictation. It is the fastest, smartest way to type with your voice.
🔥1
Так ты скажи ему чтобы сам задекомпозировал и составил хороший промпт, делов та
👇
👇
Forwarded from Метаверсище и ИИще (Sergey Tsyptsyn ️️)
Голосовой ввод
Многие говорят, что пользуются голосовым вводом и что это экономит время.
Я тут вайбкожу на досуге и пришел вот к чему: чтобы наговорить Gemini задание, я должен Продумать это задание, декомпозировать задачу на разные инструкции, описать каждую, расписать в каком виде я хочу получить результат. Пока я пишу промпт, я все это проделываю в голове и в Notepad++, исправляю текст, вижу где нестыковки, уточняю, редактирую, потом бахаю. Чтобы наговорить промпт, я должен всю эту работу проделать в голове, а лучше на бумажке. И только потом включить микрофон.
На итоге получается примерно столько же времени - что для написания промпта, что для продумывания и наговаривания.
Возможно я слоупок и не умею быстро думать, меня просто учили семь раз отмерять в голове, а потом резать.
Возможно для задач написания текстов или поиска инфо в интернете голос будет быстрее. Но для кодинга у меня не получается.
Как у вас?
@cgevent
Многие говорят, что пользуются голосовым вводом и что это экономит время.
Я тут вайбкожу на досуге и пришел вот к чему: чтобы наговорить Gemini задание, я должен Продумать это задание, декомпозировать задачу на разные инструкции, описать каждую, расписать в каком виде я хочу получить результат. Пока я пишу промпт, я все это проделываю в голове и в Notepad++, исправляю текст, вижу где нестыковки, уточняю, редактирую, потом бахаю. Чтобы наговорить промпт, я должен всю эту работу проделать в голове, а лучше на бумажке. И только потом включить микрофон.
На итоге получается примерно столько же времени - что для написания промпта, что для продумывания и наговаривания.
Возможно я слоупок и не умею быстро думать, меня просто учили семь раз отмерять в голове, а потом резать.
Возможно для задач написания текстов или поиска инфо в интернете голос будет быстрее. Но для кодинга у меня не получается.
Как у вас?
@cgevent