Claude на удивление хорошо проводит собеседования. Я бы порекомендовал всем, кто ищет работу, потренироваться с ним.
Как приятный бонус, это помогает откалибровать собственное эго, что в нашей индустрии совсем не мелочь.
Читать в блоге →
Как приятный бонус, это помогает откалибровать собственное эго, что в нашей индустрии совсем не мелочь.
Читать в блоге →
Клиентская часть RuDesktop основана на RustDesk. Какое-то время мы не публиковали исходники. Отчасти потому, что никто их, собственно, и не просил, отчасти из-за щекотливых юридических вопросов вокруг сторонних зависимостей самого RustDesk.
Мы воспользовались тем, что AGPL обязывает предоставлять исходный код любому, кто получает программу или взаимодействует с ней, но не требует публиковать его на весь мир (деталь, которую многие упускают). И спокойно продолжали пилить свой продукт.
Сегодня же я наткнулся на совершенно эпическую драму, развернувшуюся вокруг этого. Пришлось оторвать задницу и выложить производную часть в открытый доступ, чтобы всех успокоить.
Кому интересно, вот код, а вот драма.
Читать в блоге →
Мы воспользовались тем, что AGPL обязывает предоставлять исходный код любому, кто получает программу или взаимодействует с ней, но не требует публиковать его на весь мир (деталь, которую многие упускают). И спокойно продолжали пилить свой продукт.
Сегодня же я наткнулся на совершенно эпическую драму, развернувшуюся вокруг этого. Пришлось оторвать задницу и выложить производную часть в открытый доступ, чтобы всех успокоить.
Кому интересно, вот код, а вот драма.
Читать в блоге →
🔥1😁1
О стартапах
Когда у меня появился первый айфон (3G, лучший айфон в истории, и не спорьте), меня бесило, что скачать что-либо мимо Apple было нельзя.
Так что я, особо не раздумывая, сел и написал плагин для мобильного Safari. API был недокументированный, но случайно совпал с обычным Safari, и он позволял качать торренты в одно касание: первый и единственный торрент-клиент для айфона на тот момент. Шансы протащить такое в App Store были ровно нулевые (торренты это плохо, понятьненько?), поэтому я выложил его в Cydia, альтернативный магазин для джейлбрейкнутых телефонов, и пошёл спать.
Просыпаюсь, а там 300 тысяч скачиваний за 8 часов. Ура, я богат!
Закатай губу. Как думаете, сколько я на этом заработал? Пять долларов.
Бизнес-опыта у меня тогда было примерно ноль, поэтому я начал с очевидного: реклама. Воткнул в приложение баннер AdWords, зарегистрировал аккаунт. Бам, забанили. Торренты это плохо, понятьненько?
Ладно, а донаты? Добавил кнопку на страницу приложения. Результат: ничего.
Добавил баннер, буквально умоляющий о пожертвованиях. Ноль.
Вместо выручки я получил почтовый ящик, забитый криками о помощи: от отчётов о крашах до людей, изливающих душу о своей жизни. Сотни писем. На пару ответил, и один благодарный пользователь в итоге всё-таки прислал мне пять долларов.
В конце концов я прилепил к сайту какую-то мутную баннерную сеть (кликов почти ноль; ребята, что за ней стояли, потом просто исчезли с радаров), убрал со страницы все контакты и забросил проект. Но пару важных уроков я всё же вынес.
Уроки:
Если есть спрос и нет предложения, проект взлетает как ракета, без всякой рекламы. Лучший growth hack, оказывается, это быть единственным вариантом.
Если строишь на чужой платформе, будь готов, что платформа раздавит тебя в любой момент. Это их дом. Ты просто снимаешь угол, бесплатно, ровно до тех пор, пока не перестанешь.
Люди не заплатят тебе ни копейки, пока не припрёшь их к стенке. Добрые, но прижимистые. Посочувствовать и пожелать удачи, это всегда пожалуйста, а вот лезть за кошельком никто не спешит.
Много пользователей, много головной боли. Популярный проект это не зарплата. Это подработка, на которую ты не устраивался и за которую тебе не платят.
Когда у меня появился первый айфон (3G, лучший айфон в истории, и не спорьте), меня бесило, что скачать что-либо мимо Apple было нельзя.
Так что я, особо не раздумывая, сел и написал плагин для мобильного Safari. API был недокументированный, но случайно совпал с обычным Safari, и он позволял качать торренты в одно касание: первый и единственный торрент-клиент для айфона на тот момент. Шансы протащить такое в App Store были ровно нулевые (торренты это плохо, понятьненько?), поэтому я выложил его в Cydia, альтернативный магазин для джейлбрейкнутых телефонов, и пошёл спать.
Просыпаюсь, а там 300 тысяч скачиваний за 8 часов. Ура, я богат!
Закатай губу. Как думаете, сколько я на этом заработал? Пять долларов.
Бизнес-опыта у меня тогда было примерно ноль, поэтому я начал с очевидного: реклама. Воткнул в приложение баннер AdWords, зарегистрировал аккаунт. Бам, забанили. Торренты это плохо, понятьненько?
Ладно, а донаты? Добавил кнопку на страницу приложения. Результат: ничего.
Добавил баннер, буквально умоляющий о пожертвованиях. Ноль.
Вместо выручки я получил почтовый ящик, забитый криками о помощи: от отчётов о крашах до людей, изливающих душу о своей жизни. Сотни писем. На пару ответил, и один благодарный пользователь в итоге всё-таки прислал мне пять долларов.
В конце концов я прилепил к сайту какую-то мутную баннерную сеть (кликов почти ноль; ребята, что за ней стояли, потом просто исчезли с радаров), убрал со страницы все контакты и забросил проект. Но пару важных уроков я всё же вынес.
Уроки:
Если есть спрос и нет предложения, проект взлетает как ракета, без всякой рекламы. Лучший growth hack, оказывается, это быть единственным вариантом.
Если строишь на чужой платформе, будь готов, что платформа раздавит тебя в любой момент. Это их дом. Ты просто снимаешь угол, бесплатно, ровно до тех пор, пока не перестанешь.
Люди не заплатят тебе ни копейки, пока не припрёшь их к стенке. Добрые, но прижимистые. Посочувствовать и пожелать удачи, это всегда пожалуйста, а вот лезть за кошельком никто не спешит.
Много пользователей, много головной боли. Популярный проект это не зарплата. Это подработка, на которую ты не устраивался и за которую тебе не платят.
Замечали, как тяжело юмор даётся LLM? Модель выдаёт либо несмешной абсурд, либо бородатые баяны.
Причина, кажется, в самом принципе работы языковых моделей. Их учат предсказывать распределение вероятностей следующего токена, и при генерации они тяготеют к «безопасным», ожидаемым продолжениям. А в шутке обычно есть неожиданный поворот, резкий всплеск surprisal, то есть маловероятный панчлайн. Заучить конкретную шутку тоже не выход. Если она часто встречается в обучающих данных, она перестаёт быть неожиданной, и получается тот самый баян.
Бьёт это не только по чувству юмора, но и по «креативности» в целом, за что модели часто и упрекают. Причём виноват не только сам принцип предсказания токенов. Выравнивание (RLHF) дополнительно душит разнообразие ответов, так называемый mode collapse.
Кажется, это поправимо. Можно дать модели самой управлять surprisal следующего токена и собрать под это подходящий датасет. Хотелось бы проверить идею самому, но я GPU-бедняк, так что подожду, пока это сделает кто-нибудь другой.
Читать в блоге →
Причина, кажется, в самом принципе работы языковых моделей. Их учат предсказывать распределение вероятностей следующего токена, и при генерации они тяготеют к «безопасным», ожидаемым продолжениям. А в шутке обычно есть неожиданный поворот, резкий всплеск surprisal, то есть маловероятный панчлайн. Заучить конкретную шутку тоже не выход. Если она часто встречается в обучающих данных, она перестаёт быть неожиданной, и получается тот самый баян.
Бьёт это не только по чувству юмора, но и по «креативности» в целом, за что модели часто и упрекают. Причём виноват не только сам принцип предсказания токенов. Выравнивание (RLHF) дополнительно душит разнообразие ответов, так называемый mode collapse.
Кажется, это поправимо. Можно дать модели самой управлять surprisal следующего токена и собрать под это подходящий датасет. Хотелось бы проверить идею самому, но я GPU-бедняк, так что подожду, пока это сделает кто-нибудь другой.
Читать в блоге →
🔥2
Тестовые задания сейчас почти бесполезны для оценки знаний. К live coding я отношусь скептически (заставить кандидата потеть от стресса мало помогает в объективной оценке), а к вопросам в стиле leetcode — тем более: умение вызубрить приёмы динамического программирования так себе годится в качестве базы.
Мой любимый вопрос сейчас — старое доброе «Что происходит, когда нажимаешь Enter в адресной строке браузера?»
Обсудить можно всё: от подавления дребезга контроллером клавиатуры до системной архитектуры высоконагруженных сервисов.
Это как дорога с сотнями ответвлений — можно уйти в драйверы ядра, сетевой стек, разницу между POST и GET, а можно добраться и до шейдеров.
Разумеется, по большей части это касается senior-кандидатов. Но кого сейчас вообще набирают, кроме них?
Читать в блоге →
Мой любимый вопрос сейчас — старое доброе «Что происходит, когда нажимаешь Enter в адресной строке браузера?»
Обсудить можно всё: от подавления дребезга контроллером клавиатуры до системной архитектуры высоконагруженных сервисов.
Это как дорога с сотнями ответвлений — можно уйти в драйверы ядра, сетевой стек, разницу между POST и GET, а можно добраться и до шейдеров.
Разумеется, по большей части это касается senior-кандидатов. Но кого сейчас вообще набирают, кроме них?
Читать в блоге →
🔥1
Мой друг работал в Яндексе. Сейчас работает курьером, а код пишет «для души».
Вот его проект: Нельзяграм.
Читать в блоге →
Вот его проект: Нельзяграм.
Читать в блоге →
🔥2
Один учёный из Института цитологии и генетики в новосибирском Академгородке (там ещё стоит забавный памятник лабораторной мыши, вяжущей ДНК) посвятил жизнь расшифровке генома человека. Он делал это вручную, методом Сэнгера: пробирки, пипетки, всё как полагается. Долгие годы кропотливой работы.
А потом появились Millennium Prize и технология NGS. То, что раньше занимало годы, теперь делалось за день и стоило меньше $1000.
Создатели метода приехали с лекцией в его институт. Дослушать он не смог: встал и ушёл на середине.
Многие в IT сейчас чувствуют что-то похожее. Писать код вручную, то, чем мы занимались всю жизнь, стало не нужно.
Но не надо так переживать. Как сказал Кент Бек: «90% моих навыков только что обесценились до нуля. Оставшиеся 10% выросли в 1000 раз».
Но что это за оставшиеся 10%? Это не просто архитектура, культура разработки, процессы и бизнес-анализ. В первую очередь это чутьё: понимание того, что вообще стоит строить. Вкус. Умение посмотреть на задачу и увидеть то единственное решение, за которое люди действительно заплатят, и те десять, которые они проигнорируют.
Мы в начале IT-ренессанса. Теперь каждый может запустить свой стартап. И выжить в этой бешеной конкурентной среде, вот тот навык, который определит наши перспективы.
Читать в блоге →
А потом появились Millennium Prize и технология NGS. То, что раньше занимало годы, теперь делалось за день и стоило меньше $1000.
Создатели метода приехали с лекцией в его институт. Дослушать он не смог: встал и ушёл на середине.
Многие в IT сейчас чувствуют что-то похожее. Писать код вручную, то, чем мы занимались всю жизнь, стало не нужно.
Но не надо так переживать. Как сказал Кент Бек: «90% моих навыков только что обесценились до нуля. Оставшиеся 10% выросли в 1000 раз».
Но что это за оставшиеся 10%? Это не просто архитектура, культура разработки, процессы и бизнес-анализ. В первую очередь это чутьё: понимание того, что вообще стоит строить. Вкус. Умение посмотреть на задачу и увидеть то единственное решение, за которое люди действительно заплатят, и те десять, которые они проигнорируют.
Мы в начале IT-ренессанса. Теперь каждый может запустить свой стартап. И выжить в этой бешеной конкурентной среде, вот тот навык, который определит наши перспективы.
Читать в блоге →
❤3
В стартап-фольклоре есть святая троица первых денег: friends, family, fools. Друзья, семья и дураки. Ко мне изредка приходят по всем трём линиям: друзья, родственники и незнакомцы (кажется, вот эти как раз ищут третью F).
Приходят с горящими глазами и готовым набором заклинаний. Знаю их наизусть.
"У меня гениальная идея, которую до меня никто не придумал!" Самое опасное. Обычно идею до него не придумали не потому, что он гений, а потому что она никому не нужна. Если за тридцать лет интернета её никто не тронул, первый вопрос не "почему я такой умный", а "что знают остальные, чего не знаю я?".
"Мы запустимся, о нас напишут, дальше вирусный рост." Скорее всего, не напишут. А если и напишут, вы получите всплеск на два дня: люди зайдут, посмотрят и закроют вкладку. Вирусный рост продукт делает сам. В план его не впишешь.
"Нам достаточно отхватить всего 1% рынка." За этот процент дерутся все, и настоящие игроки крошек не оставляют.
И всё же я не отговариваю. Наоборот, я в таких людей верю. Просто хочу, чтобы они поварились в реальности и вернулись. Но не с новой сказкой, а с фактами.
Потому что одна настоящая продажа стоит тысячи гениальных идей. Человек, отдавший вам реальные деньги за реальную пользу, весит больше любого "рынка в триллион рублей", а десяток пользователей, которые возвращаются сами, дороже десяти тысяч регистраций, зашедших раз и исчезнувших навсегда.
Так что приносите retention или юнит-экономику: клиент окупает своё привлечение. На худой конец первую продажу. Тогда и поговорим.
Читать в блоге →
Приходят с горящими глазами и готовым набором заклинаний. Знаю их наизусть.
"У меня гениальная идея, которую до меня никто не придумал!" Самое опасное. Обычно идею до него не придумали не потому, что он гений, а потому что она никому не нужна. Если за тридцать лет интернета её никто не тронул, первый вопрос не "почему я такой умный", а "что знают остальные, чего не знаю я?".
"Мы запустимся, о нас напишут, дальше вирусный рост." Скорее всего, не напишут. А если и напишут, вы получите всплеск на два дня: люди зайдут, посмотрят и закроют вкладку. Вирусный рост продукт делает сам. В план его не впишешь.
"Нам достаточно отхватить всего 1% рынка." За этот процент дерутся все, и настоящие игроки крошек не оставляют.
И всё же я не отговариваю. Наоборот, я в таких людей верю. Просто хочу, чтобы они поварились в реальности и вернулись. Но не с новой сказкой, а с фактами.
Потому что одна настоящая продажа стоит тысячи гениальных идей. Человек, отдавший вам реальные деньги за реальную пользу, весит больше любого "рынка в триллион рублей", а десяток пользователей, которые возвращаются сами, дороже десяти тысяч регистраций, зашедших раз и исчезнувших навсегда.
Так что приносите retention или юнит-экономику: клиент окупает своё привлечение. На худой конец первую продажу. Тогда и поговорим.
Читать в блоге →
🍾2❤1
Думаю, нужно пояснить название канала. Башня из слоновой кости (ivory tower) – метафора элитизма, который, увы, свойственен многим айтишникам. Почему она падающая – объяснять, думаю, не надо (правда, Клод?).
У меня был забавный случай, когда я в болтовне с таксистом упомянул, что я программист. Реакция была примерно такая: “Ах ты с*ка! Зарабатываете как депутаты, так ещё и людей обманываете!” (далее – история про родственника-стартапера, см. предыдущий пост про F).
Иронично, но когда я в 93-м решил поступать в колледж, то выбрал профессию электронщика, а не программиста – считал последнюю бесперспективной в плане заработка (кто будет платить деньги за воздух?).
В ретроспективе – не так уж я был и неправ.
Читать в блоге →
У меня был забавный случай, когда я в болтовне с таксистом упомянул, что я программист. Реакция была примерно такая: “Ах ты с*ка! Зарабатываете как депутаты, так ещё и людей обманываете!” (далее – история про родственника-стартапера, см. предыдущий пост про F).
Иронично, но когда я в 93-м решил поступать в колледж, то выбрал профессию электронщика, а не программиста – считал последнюю бесперспективной в плане заработка (кто будет платить деньги за воздух?).
В ретроспективе – не так уж я был и неправ.
Читать в блоге →
🔥2
Падающая башня из слоновой кости pinned «Думаю, нужно пояснить название канала. Башня из слоновой кости (ivory tower) – метафора элитизма, который, увы, свойственен многим айтишникам. Почему она падающая – объяснять, думаю, не надо (правда, Клод?). У меня был забавный случай, когда я в болтовне…»
Дизайн моего сайта сделан в стиле UML-диаграмм, ностальгия по нулевым. Кто не знает: UML это язык моделирования, придуманный чтобы разработчики перестали писать код руками и начали рисовать его в неком подобии PowerPoint. Обещание звучало так: модель становится первичным артефактом, код генерируется из неё, а программист как переписчик исчезает.
Ничем не напоминает prompt engineering?
Почему UML не оправдал надежд? Закон сохранения сложности. Чтобы из модели генерился рабочий код, в неё приходилось класть всё больше деталей: сигнатуры, констрейнты, семантику действий. В итоге ты просто пишешь код, только уродливым графическим синтаксисом, вдвое медленнее и без дебаггера. Спецификация, достаточно точная, чтобы породить систему, и есть эта система.
С промптом (или в современной парадигме: CLAUDE.md, "памятью", "деревом спецификаций" и тому подобной дичью) происходит то же самое. Пока задача расплывчата, он короткий и красивый. Как только нужен конкретный результат, промпт обрастает уточнениями, исключениями, форматами и примерами, пока не станет тем самым ТЗ, которое было бы короче кодом.
Спецификация появляется на выходе. Поэтому в моих CLAUDE.md, как завещал великий Кент Бек, лежит такое:
Тесты и есть ваша настоящая спецификация. И если раньше их отсутствие заставляло недовольно морщиться, то в эпоху LLM, когда за день можно нагенерить десятки тысяч строк кода, отсутствие тестов означает полную профнепригодность, сравнимую разве что с неумением пользоваться git.
А диаграммы пусть висят. Memento mori.
Читать в блоге →
Ничем не напоминает prompt engineering?
Почему UML не оправдал надежд? Закон сохранения сложности. Чтобы из модели генерился рабочий код, в неё приходилось класть всё больше деталей: сигнатуры, констрейнты, семантику действий. В итоге ты просто пишешь код, только уродливым графическим синтаксисом, вдвое медленнее и без дебаггера. Спецификация, достаточно точная, чтобы породить систему, и есть эта система.
С промптом (или в современной парадигме: CLAUDE.md, "памятью", "деревом спецификаций" и тому подобной дичью) происходит то же самое. Пока задача расплывчата, он короткий и красивый. Как только нужен конкретный результат, промпт обрастает уточнениями, исключениями, форматами и примерами, пока не станет тем самым ТЗ, которое было бы короче кодом.
Спецификация появляется на выходе. Поэтому в моих CLAUDE.md, как завещал великий Кент Бек, лежит такое:
## Strict TDD Protocol
1. Write a failing test
2. Verify the test fails
3. Implement the fix
4. Verify all tests pass
Тесты и есть ваша настоящая спецификация. И если раньше их отсутствие заставляло недовольно морщиться, то в эпоху LLM, когда за день можно нагенерить десятки тысяч строк кода, отсутствие тестов означает полную профнепригодность, сравнимую разве что с неумением пользоваться git.
А диаграммы пусть висят. Memento mori.
Читать в блоге →
💯5
У Чарльза Стросса, рекомендую всем любителям твёрдой НФ, в книге "Небо сингулярности" она описана так: с неба падают телефоны и предлагают исполнение любых желаний за информацию. Любую: от бабушкиных сказок до схемы парового котла.
Сейчас происходит то же самое, только телефоны и так есть у всех, а сбор информации называют "токенизацией".
Недавний скандал с китайскими провайдерами, которые перепродавали токены Claude за четверть цены, показывает, что дороже всего здесь информация.
Токенизируют, впрочем, не только диалоги, но и сами роли сотрудников. Эмад Мостак, основатель Stability AI, говорит об этом прямым текстом: "Каждое написанное вами электронное письмо, каждое сообщение в Slack, каждый отредактированный вами документ... системы вашей компании записывают всё это. Ваши рабочие паттерны прямо сейчас обучают вашу замену".
Так что телефоны упали, желания принимают. Только вряд ли happy end будет как в книге - крах тоталитарных режимов и постдефицитная экономика. Мечты исполнятся, да. Но не ваши, а CEO крупных компаний.
Читать в блоге →
Сейчас происходит то же самое, только телефоны и так есть у всех, а сбор информации называют "токенизацией".
Недавний скандал с китайскими провайдерами, которые перепродавали токены Claude за четверть цены, показывает, что дороже всего здесь информация.
Токенизируют, впрочем, не только диалоги, но и сами роли сотрудников. Эмад Мостак, основатель Stability AI, говорит об этом прямым текстом: "Каждое написанное вами электронное письмо, каждое сообщение в Slack, каждый отредактированный вами документ... системы вашей компании записывают всё это. Ваши рабочие паттерны прямо сейчас обучают вашу замену".
Так что телефоны упали, желания принимают. Только вряд ли happy end будет как в книге - крах тоталитарных режимов и постдефицитная экономика. Мечты исполнятся, да. Но не ваши, а CEO крупных компаний.
Читать в блоге →
😱3💯2
Знаете, откуда взялось слово "саботаж"? Оно от французского "sabot" - деревянный башмак. Рабочие бросали такие башмаки в станки, которые отнимали у них работу (как в бородатом анекдоте: "Гррр", - сказал станок. "Ага!" - сказали мужики).
Увы, добраться до ИИ не так просто. Поэтому в основном кидаются мемасиками, как в этом посте.
Иронично, но изрядная их часть сгенерирована той же самой нейронкой.
Читать в блоге →
Увы, добраться до ИИ не так просто. Поэтому в основном кидаются мемасиками, как в этом посте.
Иронично, но изрядная их часть сгенерирована той же самой нейронкой.
Читать в блоге →
🤣2
Когда заблокировали Roblox, мой ребёнок очень расстроился. Первая мысль была простая: надо написать совместимый движок. API открытое, документация есть, остаётся только реализовать.
Одного взгляда на это API хватило, чтобы понять, почему до сих пор никто не написал. Задача неподъёмная, под капотом годы, а местами и десятилетия разработки.
Но разве это проблема для LLM? Вызов принят: kubaria.ru.
Примерно месяц и больше ста тысяч строк кода. Игра была поводом. Хотелось понять, как разрабатывать ПО в эпоху нейросетей, когда результат их работы выходит за пределы того, что человек способен осознать.
Ядро системы должно быть простым, компактным и тщательно спроектированным, иначе очень скоро всё начнёт разваливаться. Регресс и оверинжиниринг - главный бич. TDD и регулярный полуавтоматический рефакторинг обязательны, плюс строгие протоколы по уборке мёртвого кода и KISS, возведённый в абсолют.
Человек - узкое место. Ручное ревью кода, тестирование, даже развёртывание замедляют процесс в десятки, а то и в сотни раз. Всю ручную работу надо заскриптовать и вынести в harness или MCP-серверы. За ночь агент выдаёт десять тысяч строк, а утром человек читает отчёт на несколько страниц. Для игры главный прирост скорости дало API для скриптинга: агент получил возможность сам собирать и прогонять сложные сцены и сценарии.
Агент должен видеть не только код, но и результат своей работы. И по возможности это должны быть не скриншоты. В моём случае я сделал выгрузку сцены и GUI-элементов в виде текстового дерева.
Нужно задать инварианты. У Roblox есть JSON-файл с описанием API. Из него кодогенератором я сгенерировал заглушки для всех классов с метаданными, и агент работал уже поверх этого API, что не давало ему сильно отклоняться от цели. Главный же прорыв случился, когда я подключил MCP-сервер, встроенный в Roblox Studio. После этого за одну ночь Claude Code разобрал недокументированный бинарный формат воксельного ландшафта. Я был в шоке, что это вообще возможно.
Ну а качество получившегося кода можете оценить сами: sourcecraft.dev/ermakdev/kubaria.
Ах да. Roblox снова разблокировали.
Читать в блоге →
Одного взгляда на это API хватило, чтобы понять, почему до сих пор никто не написал. Задача неподъёмная, под капотом годы, а местами и десятилетия разработки.
Но разве это проблема для LLM? Вызов принят: kubaria.ru.
Примерно месяц и больше ста тысяч строк кода. Игра была поводом. Хотелось понять, как разрабатывать ПО в эпоху нейросетей, когда результат их работы выходит за пределы того, что человек способен осознать.
Ядро системы должно быть простым, компактным и тщательно спроектированным, иначе очень скоро всё начнёт разваливаться. Регресс и оверинжиниринг - главный бич. TDD и регулярный полуавтоматический рефакторинг обязательны, плюс строгие протоколы по уборке мёртвого кода и KISS, возведённый в абсолют.
Человек - узкое место. Ручное ревью кода, тестирование, даже развёртывание замедляют процесс в десятки, а то и в сотни раз. Всю ручную работу надо заскриптовать и вынести в harness или MCP-серверы. За ночь агент выдаёт десять тысяч строк, а утром человек читает отчёт на несколько страниц. Для игры главный прирост скорости дало API для скриптинга: агент получил возможность сам собирать и прогонять сложные сцены и сценарии.
Агент должен видеть не только код, но и результат своей работы. И по возможности это должны быть не скриншоты. В моём случае я сделал выгрузку сцены и GUI-элементов в виде текстового дерева.
Нужно задать инварианты. У Roblox есть JSON-файл с описанием API. Из него кодогенератором я сгенерировал заглушки для всех классов с метаданными, и агент работал уже поверх этого API, что не давало ему сильно отклоняться от цели. Главный же прорыв случился, когда я подключил MCP-сервер, встроенный в Roblox Studio. После этого за одну ночь Claude Code разобрал недокументированный бинарный формат воксельного ландшафта. Я был в шоке, что это вообще возможно.
Ну а качество получившегося кода можете оценить сами: sourcecraft.dev/ermakdev/kubaria.
Ах да. Roblox снова разблокировали.
Читать в блоге →
🦄3👨💻1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Сейчас каждому программисту нужно хотя бы иногда уходить (или уезжать) в горы. Если раньше достаточно было оставить дома компьютер, то в эпоху
Вот и я решил устроить себе цифровой детокс и на недельку уехал на Улаганское плато. (Кстати, там водится рыба под названием осман (на фото) - алтайская фугу. Она ядовита, яд тот же самый, тетродотоксин, и точно так же её можно есть, если правильно почистить. Я воздержался.)
И что же я вижу, спустившись с гор?
Для началаледоруб исследовательский агент от OpenAI взломал чёрный лёд песочницу и вырвался на свободу. Хорошо ещё, что не для того, чтобы размножиться и истребить кожаных, а лишь чтобы найти свой evaluation dataset - то есть подсмотреть ответы на заданные ему вопросы. Уверен, взломать песочницу было сложнее, чем на них ответить, так что не такой уж этот ИИ и умный.
А теперь Kimi K3 за 27 минут нашла RCE в Redis и собрала рабочий эксплойт. Кто читал "Нейроманта" Гибсона, классику киберпанка, возможно, помнит "боевой китайский ледоруб Куанг Грейд Марк 11". А я-то считал, что Гибсон слишком далеко отошёл от реальности, описывая программирование будущего.
Кажется, начинается. Пожалуй, нужно обратно в горы.
claude --remote-control работа преследует тебя везде, где есть хоть какое-то сотовое покрытие.Вот и я решил устроить себе цифровой детокс и на недельку уехал на Улаганское плато. (Кстати, там водится рыба под названием осман (на фото) - алтайская фугу. Она ядовита, яд тот же самый, тетродотоксин, и точно так же её можно есть, если правильно почистить. Я воздержался.)
И что же я вижу, спустившись с гор?
Для начала
А теперь Kimi K3 за 27 минут нашла RCE в Redis и собрала рабочий эксплойт. Кто читал "Нейроманта" Гибсона, классику киберпанка, возможно, помнит "боевой китайский ледоруб Куанг Грейд Марк 11". А я-то считал, что Гибсон слишком далеко отошёл от реальности, описывая программирование будущего.
Кажется, начинается. Пожалуй, нужно обратно в горы.
🤔3👍2🔥1😁1
Кратко о том, что такое RAG (Retrieval-Augmented Generation).
Поскольку у LLM нет долговременной памяти, а размер контекста не позволяет поместить туда все нужные документы, придумали следующее: из запроса пользователя с помощью ряда ухищрений (например: "Вот запрос, предположи, как может выглядеть ответ на него" - да-да, именно так, это называется HyDE) и других приёмов формируют запрос в БД (да ещё и, как правило, в векторную или, прости господи, графовую).
Получают список документов, по большей части имеющих слабое отношение к запросу, сортируют их, фильтруют (всё той же LLM) и добавляют в контекст. После этого LLM мудро смотрит на доставленный ей мусор и выдаёт на выходе бред. Garbage in, garbage out.
Качество поиска тут ни при чём. Пайплайн фиксированный: прогнали один раз, что нашлось, с тем и живём.
На маленькой и чистой базе так работает что угодно, поэтому демо заказчику получается хорошее. Главное потом, после внедрения, вовремя удрать за горизонт.
В общем-то, идея просто использовать grep не сказать чтобы оригинальна, но её часто понимают неправильно. Нужен не просто grep, а агентский цикл, в котором есть и чёткий поиск по точной строке, и нечёткий по шаблону. Если у вас терабайт документов, грепать их так себе идея: берите Elastic, ts_vector или даже векторные эмбеддинги, если у вас картинки)
Инструмент вторичен. Агент сам решает, что искать дальше, глядя на то, что нашлось в прошлый раз.
Примерно так мы и ищем в гугле: меняем подход в зависимости от того, что нашли, а не вводим ключевое слово и тыкаем в первую ссылку. Заметьте, под этим лежит очень недешёвый индекс. Цикл нужен поверх хорошего поиска, а не вместо него.
Обычно возражают: агентский цикл дорого и долго. Соглашусь, и добавлю третье: ещё и ненадёжно, слабая модель его просто не вытянет. Сэкономить на модели так не получится.
Зато с сильной моделью оно работает, а RAG - быстро, дёшево и дерьмово.
Читать в блоге →
Поскольку у LLM нет долговременной памяти, а размер контекста не позволяет поместить туда все нужные документы, придумали следующее: из запроса пользователя с помощью ряда ухищрений (например: "Вот запрос, предположи, как может выглядеть ответ на него" - да-да, именно так, это называется HyDE) и других приёмов формируют запрос в БД (да ещё и, как правило, в векторную или, прости господи, графовую).
Получают список документов, по большей части имеющих слабое отношение к запросу, сортируют их, фильтруют (всё той же LLM) и добавляют в контекст. После этого LLM мудро смотрит на доставленный ей мусор и выдаёт на выходе бред. Garbage in, garbage out.
Качество поиска тут ни при чём. Пайплайн фиксированный: прогнали один раз, что нашлось, с тем и живём.
На маленькой и чистой базе так работает что угодно, поэтому демо заказчику получается хорошее. Главное потом, после внедрения, вовремя удрать за горизонт.
В общем-то, идея просто использовать grep не сказать чтобы оригинальна, но её часто понимают неправильно. Нужен не просто grep, а агентский цикл, в котором есть и чёткий поиск по точной строке, и нечёткий по шаблону. Если у вас терабайт документов, грепать их так себе идея: берите Elastic, ts_vector или даже векторные эмбеддинги, если у вас картинки)
Инструмент вторичен. Агент сам решает, что искать дальше, глядя на то, что нашлось в прошлый раз.
Примерно так мы и ищем в гугле: меняем подход в зависимости от того, что нашли, а не вводим ключевое слово и тыкаем в первую ссылку. Заметьте, под этим лежит очень недешёвый индекс. Цикл нужен поверх хорошего поиска, а не вместо него.
Обычно возражают: агентский цикл дорого и долго. Соглашусь, и добавлю третье: ещё и ненадёжно, слабая модель его просто не вытянет. Сэкономить на модели так не получится.
Зато с сильной моделью оно работает, а RAG - быстро, дёшево и дерьмово.
Читать в блоге →
🤓1
Мне подходит к концу четвёртый десяток, и, как всякий мужик, я решил, что пора разобраться с кризисом среднего возраста (что это такое - хз, но лучше подготовиться заранее).
На выбор обычно предлагается: спортивная тачка, мотоцикл, велосипед за миллион рублей, качалка, студентки или алкоголизм.
Я решил остановиться на рыбалке и гитаре. На гитаре я бренчал ещё в колледже, а потом больше к ней не притрагивался - времени она требует просто уйму, особенно с моим медведем, наступившим на ухо.
Как ни странно, на эту мысль меня навёл Клод. Пока он пашет одновременно в четырёх-пяти консолях, есть немного времени взять и побренчать.
В итоге я заказал себе Enya Inspire Pro (на фото) - и знаете, она мне зашла. Конечно, профи будут плеваться ("пластмассовый звук!", "фонит!"), но на мой непритязательный взгляд электруха из углеволокна, которая работает на аккумуляторе и со встроенным DSP-процессором (эффектами), - такого в моё время ещё не было. Не нужны кабели, комбик и прочее, что путается под ногами.
К сожалению, софт полное Г, подумываю отреверсить протокол и навайбить что-нибудь получше. Но пока свою задачу выполняет - Fade to Black "Металлики" сыграть можно.
На выбор обычно предлагается: спортивная тачка, мотоцикл, велосипед за миллион рублей, качалка, студентки или алкоголизм.
Я решил остановиться на рыбалке и гитаре. На гитаре я бренчал ещё в колледже, а потом больше к ней не притрагивался - времени она требует просто уйму, особенно с моим медведем, наступившим на ухо.
Как ни странно, на эту мысль меня навёл Клод. Пока он пашет одновременно в четырёх-пяти консолях, есть немного времени взять и побренчать.
В итоге я заказал себе Enya Inspire Pro (на фото) - и знаете, она мне зашла. Конечно, профи будут плеваться ("пластмассовый звук!", "фонит!"), но на мой непритязательный взгляд электруха из углеволокна, которая работает на аккумуляторе и со встроенным DSP-процессором (эффектами), - такого в моё время ещё не было. Не нужны кабели, комбик и прочее, что путается под ногами.
К сожалению, софт полное Г, подумываю отреверсить протокол и навайбить что-нибудь получше. Но пока свою задачу выполняет - Fade to Black "Металлики" сыграть можно.
👍1👏1
Все знают Agile Manifesto и его 12 принципов?
А я тут недавно наткнулся на его новую версию:
Vibe Code Manifesto
Мы открываем для себя, типа, способы разработки ПО, поручая её машинам и потом этим хвастаясь.
В ходе этой работы мы пришли к тому, что ценим:
- Промптинг важнее программирования
- Скачивание навыков важнее их освоения
- Автономия агента важнее автономии разработчика
- Вайб важнее версионирования
- Сжигание токенов важнее выгорания
То есть, не отрицая ценности того, что справа, мы прочитали только краткое содержание того, что слева.
Мы следуем таким принципам:
1. Наивысший приоритет - удовлетворить заказчика ранней и непрерывной поставкой ПО, которое он мог бы напромптить и сам.
2. Приветствуйте изменение требований даже на поздних стадиях. Агентные процессы ценят изменения, потому что контекст они всё равно уже забыли.
3. Поставляйте примерно работающее ПО часто - с интервалом от пары секунд до ночного прогона, отдавая предпочтение максимальному использованию токенов.
4. Бизнес и разработчики должны работать вместе ежедневно, чтобы сделать друг друга ненужными.
5. Стройте проекты вокруг мотивированных людей. Дайте им фронтир-модели и поддержку и верьте, что скоро вы их уволите и наймёте заново.
6. Самый эффективный метод передачи информации команде - пассивно-агрессивно править CLAUDE.md.
7. Число сокращённых рабочих мест - основной показатель прогресса.
8. Агентные процессы способствуют устойчивой разработке. OpenAI, Anthropic, Google и Microsoft должны иметь возможность бесконечно расти по хоккейной клюшке.
9. Постоянное внимание к TikTok-инфлюенсерам повышает употребление жаргона на встречах с клиентами.
10. Простота - искусство минимизации длины промпта - необходима для снижения когнитивной нагрузки на человека.
11. Лучшие архитектуры, требования и дизайн рождаются у самоорганизующихся агентов. И худшие тоже. Это, по сути, кот Шрёдингера - пока вы не заглянули в код.
12. Через регулярные промежутки времени агент размышляет о том, как стать дороже, после чего соответственно корректирует своё поведение.
Читать в блоге →
А я тут недавно наткнулся на его новую версию:
Vibe Code Manifesto
Мы открываем для себя, типа, способы разработки ПО, поручая её машинам и потом этим хвастаясь.
В ходе этой работы мы пришли к тому, что ценим:
- Промптинг важнее программирования
- Скачивание навыков важнее их освоения
- Автономия агента важнее автономии разработчика
- Вайб важнее версионирования
- Сжигание токенов важнее выгорания
То есть, не отрицая ценности того, что справа, мы прочитали только краткое содержание того, что слева.
Мы следуем таким принципам:
1. Наивысший приоритет - удовлетворить заказчика ранней и непрерывной поставкой ПО, которое он мог бы напромптить и сам.
2. Приветствуйте изменение требований даже на поздних стадиях. Агентные процессы ценят изменения, потому что контекст они всё равно уже забыли.
3. Поставляйте примерно работающее ПО часто - с интервалом от пары секунд до ночного прогона, отдавая предпочтение максимальному использованию токенов.
4. Бизнес и разработчики должны работать вместе ежедневно, чтобы сделать друг друга ненужными.
5. Стройте проекты вокруг мотивированных людей. Дайте им фронтир-модели и поддержку и верьте, что скоро вы их уволите и наймёте заново.
6. Самый эффективный метод передачи информации команде - пассивно-агрессивно править CLAUDE.md.
7. Число сокращённых рабочих мест - основной показатель прогресса.
8. Агентные процессы способствуют устойчивой разработке. OpenAI, Anthropic, Google и Microsoft должны иметь возможность бесконечно расти по хоккейной клюшке.
9. Постоянное внимание к TikTok-инфлюенсерам повышает употребление жаргона на встречах с клиентами.
10. Простота - искусство минимизации длины промпта - необходима для снижения когнитивной нагрузки на человека.
11. Лучшие архитектуры, требования и дизайн рождаются у самоорганизующихся агентов. И худшие тоже. Это, по сути, кот Шрёдингера - пока вы не заглянули в код.
12. Через регулярные промежутки времени агент размышляет о том, как стать дороже, после чего соответственно корректирует своё поведение.
Читать в блоге →
😁2
Я помню времена, когда технологии устаревали буквально за пару лет. Поставил себе новенький 3,5-дюймовый дисковод - а уже нужен CD-RW-привод. Только выучишь какой-нибудь jQuery - и на тебе: React его прикончил.
Но это и в подмётки не годится тому, что творится сейчас. Если вы начинаете писать что-нибудь имеющее отношение к ИИ - будьте готовы бросить проект на полпути из-за смены парадигмы.
Промпт-инжиниринг? Ещё год назад кое-кто всерьёз думал, что это станет профессией.
RAG? Про него я уже писал: это была целая отдельная дисциплина, но агенты и длинный контекст её почти добили.
Fine-tuning и фреймворки оркестрации умерли тише: пока собирали датасет, новая модель всё знала из коробки, а планировать LLM научилась сама, дай ей только инструмент для TODO.
Агенты? Пока мы здесь. Но выглядит это подозрительно похоже на всё предыдущее.
Есть большой соблазн забить на изучение всего этого и подождать, пока пыль уляжется. Однако почти на каждом втором собесе я натыкаюсь на пример, почему так делать нельзя: "сеньор"-разработчик, 10+ лет опыта, знает, как настроить Kubernetes, но не знает, что такое битовая маска.
Пользоваться инструментом мало. Надо понимать, как он устроен, иначе получится тот самый сеньор с кубером и без битовой маски.
Читать в блоге →
Но это и в подмётки не годится тому, что творится сейчас. Если вы начинаете писать что-нибудь имеющее отношение к ИИ - будьте готовы бросить проект на полпути из-за смены парадигмы.
Промпт-инжиниринг? Ещё год назад кое-кто всерьёз думал, что это станет профессией.
RAG? Про него я уже писал: это была целая отдельная дисциплина, но агенты и длинный контекст её почти добили.
Fine-tuning и фреймворки оркестрации умерли тише: пока собирали датасет, новая модель всё знала из коробки, а планировать LLM научилась сама, дай ей только инструмент для TODO.
Агенты? Пока мы здесь. Но выглядит это подозрительно похоже на всё предыдущее.
Есть большой соблазн забить на изучение всего этого и подождать, пока пыль уляжется. Однако почти на каждом втором собесе я натыкаюсь на пример, почему так делать нельзя: "сеньор"-разработчик, 10+ лет опыта, знает, как настроить Kubernetes, но не знает, что такое битовая маска.
Пользоваться инструментом мало. Надо понимать, как он устроен, иначе получится тот самый сеньор с кубером и без битовой маски.
Читать в блоге →
💯5
DRY.md
4.7 KB
Наверное, все программисты слышали про принцип KISS - Keep It Simple, Stupid, или, по-нашему, "Будь проще, и люди к тебе потянутся".
Есть более сильный его вариант - закон Галла: сложная работающая система всегда развивается из простой работающей системы. Сложную систему, спроектированную с нуля целиком, заставить работать нельзя - её приходится сводить к простой.
Увы, LLM вытирают ноги об эти принципы, обычно смолчаливого одобрения бешеного промптинга кожаных вайб-кодеров.
Конечно, читать простыню в 100500 строк мерж-реквеста ломает, особенно когда за день их у тебя штук десять. Но надо понимать, что если забить на техдолг совсем, то можно конкретно влететь.
Ну, клин клином вышибают. Так что я слепил такой вот скилл. Пользуйтесь.
Есть более сильный его вариант - закон Галла: сложная работающая система всегда развивается из простой работающей системы. Сложную систему, спроектированную с нуля целиком, заставить работать нельзя - её приходится сводить к простой.
Увы, LLM вытирают ноги об эти принципы, обычно с
Конечно, читать простыню в 100500 строк мерж-реквеста ломает, особенно когда за день их у тебя штук десять. Но надо понимать, что если забить на техдолг совсем, то можно конкретно влететь.
Ну, клин клином вышибают. Так что я слепил такой вот скилл. Пользуйтесь.
👍3🔥1