В пятницу на круговой тренировке снова чуть не выплюнул сердце. Тренер гоняет жёстко, думал просто адаптация, потерпеть надо. Но в какой-то момент вспомнил: на руке же часы, они что-то там меряют. Глянул, а там пульс 190 :-)
Сегодня подошёл умнее: перед каждым кругом опускал пульс до 130-135, после круга пульс поднимался до 170-180. Совсем другие ощущения. Тренировка прошла нормально, без предсмертных переживаний.
И тут накрыло осознание: мы же в работе точно так же делаем. Обмазываемся логами, настраиваем метрики, разворачиваем мониторинг, рисуем красивые дашборды… а потом месяцами на них не смотрим. Пока прод не начнёт "выплёвывать сердце" :-)
P.S. Берегите себя. И настройте алерты наконец.
Сегодня подошёл умнее: перед каждым кругом опускал пульс до 130-135, после круга пульс поднимался до 170-180. Совсем другие ощущения. Тренировка прошла нормально, без предсмертных переживаний.
И тут накрыло осознание: мы же в работе точно так же делаем. Обмазываемся логами, настраиваем метрики, разворачиваем мониторинг, рисуем красивые дашборды… а потом месяцами на них не смотрим. Пока прод не начнёт "выплёвывать сердце" :-)
P.S. Берегите себя. И настройте алерты наконец.
❤6⚡4🥰1
Как я смотрю на покрытие тестами в больших проектах 🧪
Цифра "coverage 42%" мне ничего не говорит. Что именно не покрыто? Какой пакет проседает? Где критичные дыры?
Несколько лет пользую пакет
Две команды и у тебя визуальная карта всего проекта. Открываешь в браузере или IDE и сразу видишь, где болит. Особенно полезно когда в проекте сотни файлов и обычный HTML-отчёт превращается в бесконечный скролл.
Для больших проектов есть флаг
https://github.com/nikolaydubina/go-cover-treemap
Не забывайте ставить зведы на github, если инструмент полезен. Автору будет приятно 😊
Цифра "coverage 42%" мне ничего не говорит. Что именно не покрыто? Какой пакет проседает? Где критичные дыры?
Несколько лет пользую пакет
go-cover-treemap. Это cli тулза генерит SVG-карту покрытия. Каждый прямоугольник это файл, размер пропорционален количеству statements, цвет показывает степень покрытия. Зелёное - хорошо, красное - надо разбираться.go test -coverprofile cover.out ./...
go-cover-treemap -coverprofile cover.out > coverage.svg
Две команды и у тебя визуальная карта всего проекта. Открываешь в браузере или IDE и сразу видишь, где болит. Особенно полезно когда в проекте сотни файлов и обычный HTML-отчёт превращается в бесконечный скролл.
Для больших проектов есть флаг
-only-folders, он показывает только пакеты без отдельных файлов. Удобно для helicopter view.https://github.com/nikolaydubina/go-cover-treemap
Не забывайте ставить зведы на github, если инструмент полезен. Автору будет приятно 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥2👍1
BASCODE
Как я смотрю на покрытие тестами в больших проектах 🧪 Цифра "coverage 42%" мне ничего не говорит. Что именно не покрыто? Какой пакет проседает? Где критичные дыры? Несколько лет пользую пакет go-cover-treemap. Это cli тулза генерит SVG-карту покрытия. Каждый…
В дополнение к посту, автор сделал веб версию карты покрытия тестами.
Вы туда можете скормить в неё свой
https://nikolaydubina.github.io/go-cover-treemap/
Вы туда можете скормить в неё свой
coverage.out или посмотреть пример предзагруженных hugo, chi или gin.https://nikolaydubina.github.io/go-cover-treemap/
❤1👍1🔥1
Недавно начал писать unit-тесты для storage слоёв.
PostgreSQL, Redis, всякие внешние хранилища. То, что обычно остаётся без покрытия, потому что "ну там же база, как это тестировать без базы?", ну или интеграционные/e2e тесты.
Сегодня напишу про PostgreSQL. Использую
Выглядит все просто:
Что проверяем: SQL запросы, параметры, обработку ошибок, маппинг в структуры.
Что НЕ проверим: реальную работу SQL, совместимость с версией PG, производительность. Для этого нужны интеграционные или e2e тесты.
https://github.com/pashagolub/pgxmock
Поставьте автору звездочку на github, если моки вам полезны. Ему будет приятно 😊
PostgreSQL, Redis, всякие внешние хранилища. То, что обычно остаётся без покрытия, потому что "ну там же база, как это тестировать без базы?", ну или интеграционные/e2e тесты.
Сегодня напишу про PostgreSQL. Использую
github.com/pashagolub/pgxmock/v4. 500+ звезд, мокает интерфейс pgx, репозиторий думает что работает с базой.Выглядит все просто:
mock, _ := pgxmock.NewPool()
// SELECT
rows := mock.NewRows([]string{"id", "name"}).
AddRow(1, "Дима")
mock.ExpectQuery("SELECT").WillReturnRows(rows)
// INSERT
mock.ExpectExec("INSERT INTO users").
WithArgs("Дима", "dima@mail.com").
WillReturnResult(pgxmock.NewResult("INSERT", 1))
// Ошибка
mock.ExpectQuery("SELECT").
WillReturnError(errors.New("connection refused"))
Что проверяем: SQL запросы, параметры, обработку ошибок, маппинг в структуры.
Что НЕ проверим: реальную работу SQL, совместимость с версией PG, производительность. Для этого нужны интеграционные или e2e тесты.
https://github.com/pashagolub/pgxmock
Поставьте автору звездочку на github, если моки вам полезны. Ему будет приятно 😊
❤5
2025 год стал для меня временем баланса между масштабными инженерными вызовами и личным развитием.
В профессиональной сфере ключевым вектором была цифровизация медицины Узбекистана во главе команды UZINFOCOM.
Год прошел под знаком внедрения стандартов FHIR и HL7, включая обучение у мировых экспертов и признание со стороны создателя FHIR Грэма Грива.
Технические итоги канала:
• Активное развитие в экосистеме Go: разбор релиза 1.25, публикация статьи на Хабре об организации SQL-запросов и использование инструментов визуализации покрытия тестами.
• Рассказ подхода к обучению: отказ от быстро устаревающих книг в пользу изучения исходного кода, документации и профильных подкастов.
• Анонс бесплатного YouTube-курса по разработке сервиса на Go, который я в итоге захолдил, чтобы сдать текущие проекты.
Личное и дисциплина:
• Запуск Telegram-блога как инструмента саморефлексии.
• Ставка на самодисциплину и энергетический менеджмент: внедрение силовых тренировок в 7 утра и переход на гибридный формат работы.
• Личные вехи: 35-летие, радикальная смена имиджа и сборка мощного рабочего ПК на Linux.
Главный вывод года: дисциплина важнее мотивации, и доверие к людям должно быть заслуженно действиями, а не привязанностью к ним.
P.S. Постер сгенерирован ЭйАй, с событиями канала.
В профессиональной сфере ключевым вектором была цифровизация медицины Узбекистана во главе команды UZINFOCOM.
Год прошел под знаком внедрения стандартов FHIR и HL7, включая обучение у мировых экспертов и признание со стороны создателя FHIR Грэма Грива.
Технические итоги канала:
• Активное развитие в экосистеме Go: разбор релиза 1.25, публикация статьи на Хабре об организации SQL-запросов и использование инструментов визуализации покрытия тестами.
• Рассказ подхода к обучению: отказ от быстро устаревающих книг в пользу изучения исходного кода, документации и профильных подкастов.
• Анонс бесплатного YouTube-курса по разработке сервиса на Go, который я в итоге захолдил, чтобы сдать текущие проекты.
Личное и дисциплина:
• Запуск Telegram-блога как инструмента саморефлексии.
• Ставка на самодисциплину и энергетический менеджмент: внедрение силовых тренировок в 7 утра и переход на гибридный формат работы.
• Личные вехи: 35-летие, радикальная смена имиджа и сборка мощного рабочего ПК на Linux.
Главный вывод года: дисциплина важнее мотивации, и доверие к людям должно быть заслуженно действиями, а не привязанностью к ним.
P.S. Постер сгенерирован ЭйАй, с событиями канала.
❤6🔥1💯1
Всем привет!
Первый пост в этом году будет посвещен выходу Go 1.26!
Официальные релизноты довольно скудны на детализацию и приходится изучать глубже. Я в процессе последних правок статьи для habr к которой шел несколько месяцев! Изменения затрагивают runtime, компилятор, стандартную библиотеку и поддержку платформ. Команда Go сосредоточилась на производительности и удобстве разработки.
Главное изменение: Green Tea становится сборщиком мусора по умолчанию. Алгоритм разрабатывался с 2018 года и прошёл обкатку в Go 1.25. Благодаря этому улучшается работа с кэшем процессора, а нагрузка на CPU при сборке мусора снижается от 10% до 40% на реальных задачах.
На уровне языка функция
В стандартной библиотеке появились новые пакеты. Пакет
Криптографические пакеты также обновлены. Постквантовые key exchanges включены по умолчанию в TLS. Добавлены интерфейсы
Есть изменения, влияющие на совместимость. Удалён 32-битный порт Windows ARM, FreeBSD riscv64 помечен как broken, macOS 12 Monterey поддерживается последний раз. Кроме того, несколько GODEBUG-настроек будут удалены в Go 1.27, поэтому стоит проверить код на использование устаревших флагов.
Статья будет разбира на несколько основных групп, в которых рассмотрены все изменения с примерами кода и бенчмарками (где это было возможно и хватило сил и мотивации).
К этой статье я шел несколько месяцев, по этому надеюсь проделанный труд будет полезен сообществу. Выложу я её уже на этой неделе и в ТГ дам анонс!
Релиз ноты: https://go.dev/doc/go1.26
Первый пост в этом году будет посвещен выходу Go 1.26!
Официальные релизноты довольно скудны на детализацию и приходится изучать глубже. Я в процессе последних правок статьи для habr к которой шел несколько месяцев! Изменения затрагивают runtime, компилятор, стандартную библиотеку и поддержку платформ. Команда Go сосредоточилась на производительности и удобстве разработки.
Главное изменение: Green Tea становится сборщиком мусора по умолчанию. Алгоритм разрабатывался с 2018 года и прошёл обкатку в Go 1.25. Благодаря этому улучшается работа с кэшем процессора, а нагрузка на CPU при сборке мусора снижается от 10% до 40% на реальных задачах.
На уровне языка функция
new() теперь теперь принимает произвольные выражения. Это означает, что больше не нужны вспомогательные функции вроде StringPtr() для создания указателей на примитивы.В стандартной библиотеке появились новые пакеты. Пакет
crypto/hpke реализует Hybrid Public Key Encryption по RFC 9180 с поддержкой постквантовых алгоритмов. Экспериментальный simd/archsimd открывает доступ к SIMD-инструкциям процессора. А runtime/secret обеспечивает гарантированное затирание секретных данных из памяти, что важно для безопасной работы с ключами и паролями.Криптографические пакеты также обновлены. Постквантовые key exchanges включены по умолчанию в TLS. Добавлены интерфейсы
Encapsulator и Decapsulator для работы с KEM-алгоритмами. Многие функции теперь используют детерминированную генерацию случайных чисел, что упрощает тестирование.Есть изменения, влияющие на совместимость. Удалён 32-битный порт Windows ARM, FreeBSD riscv64 помечен как broken, macOS 12 Monterey поддерживается последний раз. Кроме того, несколько GODEBUG-настроек будут удалены в Go 1.27, поэтому стоит проверить код на использование устаревших флагов.
Статья будет разбира на несколько основных групп, в которых рассмотрены все изменения с примерами кода и бенчмарками (где это было возможно и хватило сил и мотивации).
К этой статье я шел несколько месяцев, по этому надеюсь проделанный труд будет полезен сообществу. Выложу я её уже на этой неделе и в ТГ дам анонс!
Релиз ноты: https://go.dev/doc/go1.26
🔥4❤2👍1
Статья готова!
Официальные релизноты Go традиционно скупы на детали. Читаешь и думаешь: "ну ок, что-то поменяли", а в итоге оказывается что изменений много.
Решил сделать работу за тебя. Сел (на 2 месяца), раскопал каждое изменение, написал примеры и прогнал бенчмарки на своём железе.
Хабр говорит что статья вышла на 127 минут чтения. Все читать не нужно, используй как шпаргалку и возвращайся к нужным разделам.
Что лично меня зацепило больше всего:
- Green Tea GC стал дефолтным. Разрабатывался с 2018 года, обкатывался в проде у Google, и теперь просто работает из коробки. На моих бенчмарках прирост от 28% до 46% в зависимости от нагрузки. Без единого изменения в коде.
- new(42) вместо пляски с промежуточными переменными. Четыре года обсуждений proposal от Rob Pike, и наконец можно писать Age: new(30) вместо трёх строк с &age. Мелочь, а кодовая база скажет спасибо.
- Экспериментальный профиль утечек горутин. Вот это я ждал. Основан на исследовании из Uber на 75 миллионах строк кода. GC сам находит горутины, заблокированные на недостижимых каналах. Включается через GOEXPERIMENT, но уже рабочий.
- В статье ещё SIMD-инструкции из Go, постквантовая криптография, ускорение cgo на 30%, затирание секретов из памяти и куча изменений в стандартной библиотеке.
https://habr.com/ru/articles/995906
Официальные релизноты Go традиционно скупы на детали. Читаешь и думаешь: "ну ок, что-то поменяли", а в итоге оказывается что изменений много.
Решил сделать работу за тебя. Сел (на 2 месяца), раскопал каждое изменение, написал примеры и прогнал бенчмарки на своём железе.
Хабр говорит что статья вышла на 127 минут чтения. Все читать не нужно, используй как шпаргалку и возвращайся к нужным разделам.
Что лично меня зацепило больше всего:
- Green Tea GC стал дефолтным. Разрабатывался с 2018 года, обкатывался в проде у Google, и теперь просто работает из коробки. На моих бенчмарках прирост от 28% до 46% в зависимости от нагрузки. Без единого изменения в коде.
- new(42) вместо пляски с промежуточными переменными. Четыре года обсуждений proposal от Rob Pike, и наконец можно писать Age: new(30) вместо трёх строк с &age. Мелочь, а кодовая база скажет спасибо.
- Экспериментальный профиль утечек горутин. Вот это я ждал. Основан на исследовании из Uber на 75 миллионах строк кода. GC сам находит горутины, заблокированные на недостижимых каналах. Включается через GOEXPERIMENT, но уже рабочий.
- В статье ещё SIMD-инструкции из Go, постквантовая криптография, ускорение cgo на 30%, затирание секретов из памяти и куча изменений в стандартной библиотеке.
https://habr.com/ru/articles/995906
🔥10❤1
Статья на 127 минут сдана. Два месяца раскопок Go 1.26 позади, можно выдохнуть.
Но выдыхать скучно. Пока писал обзорную статью, понял что одну тему хочу разобрать отдельно и глубже - сборщик мусораGreen Tea.
В Go 1.26 он стал сборщиком мусора по умолчанию. Разрабатывался с 2018 года, прошел обкатку в 1.25 как эксперимент, а теперь просто включен из коробки. На моих бенчмарках прирост от 28% до 46%. Без единого изменения в коде.
Сажусь за новую статью. План такой:
- как Green Tea работает изнутри
- чем отличается от предыдущего GC
- реальный код runtime: go1.25 vs go1.26, что конкретно поменялось
- и блок с вопросами, которые могут прилететь на собесе про GC
Хочу разобрать так, чтобы не осталось "а что там внутри-то происходит". Код runtime лучший учебник, я это уже проверил на себе.
Если есть вопросы про GC, которые мучают - пишите, постараюсь закрыть в статье.
Но выдыхать скучно. Пока писал обзорную статью, понял что одну тему хочу разобрать отдельно и глубже - сборщик мусораGreen Tea.
В Go 1.26 он стал сборщиком мусора по умолчанию. Разрабатывался с 2018 года, прошел обкатку в 1.25 как эксперимент, а теперь просто включен из коробки. На моих бенчмарках прирост от 28% до 46%. Без единого изменения в коде.
Сажусь за новую статью. План такой:
- как Green Tea работает изнутри
- чем отличается от предыдущего GC
- реальный код runtime: go1.25 vs go1.26, что конкретно поменялось
- и блок с вопросами, которые могут прилететь на собесе про GC
Хочу разобрать так, чтобы не осталось "а что там внутри-то происходит". Код runtime лучший учебник, я это уже проверил на себе.
Если есть вопросы про GC, которые мучают - пишите, постараюсь закрыть в статье.
🔥7❤1
У меня два мака и Linux. На каждом fish, neovim, kitty, aerospace и т.д. И каждый раз при настройке новой машины один и тот же ритуал: открываешь старый мак, ищешь конфиг, копируешь, адаптируешь. В общем и целом это боль...
Можно конечно решить это симлинками и гитом, но адаптировать всеровно придется...
Недавно наткнулся на chezmoi и за вечер перетащил туда всё. Добавляешь конфиги, они хранятся в git-репозитории. На новой машине две команды и всё на месте.
Отдельно порадовали шаблоны. Один файл конфига, но с условиями под разную ОС. На маке один путь, на Linux другой. Не надо хранить три копии одного файла и помнить чем они отличаются.
Написан на Go, кстати. Один бинарник, ноль зависимостей. Установил и работаешь.
Рекомендую как минимум для ознакомления.
https://github.com/twpayne/chezmoi
Можно конечно решить это симлинками и гитом, но адаптировать всеровно придется...
Недавно наткнулся на chezmoi и за вечер перетащил туда всё. Добавляешь конфиги, они хранятся в git-репозитории. На новой машине две команды и всё на месте.
Отдельно порадовали шаблоны. Один файл конфига, но с условиями под разную ОС. На маке один путь, на Linux другой. Не надо хранить три копии одного файла и помнить чем они отличаются.
Написан на Go, кстати. Один бинарник, ноль зависимостей. Установил и работаешь.
Рекомендую как минимум для ознакомления.
https://github.com/twpayne/chezmoi
👍5
Конец прошлого года сломал мне многие привычки. Те самые, которые выстраивал месяцами. Утренние тренировки, режим, ритм - всё посыпалось.
С января пытаюсь собрать себя обратно. Начинал, бросал, начинал снова. Каждый раз хватало на пару дней.
Летом я писал, что дисциплина важнее мотивации. Красиво звучит, когда всё идёт по плану. А когда план разваливается - остаёшься один на один с собой, без привычки и без мотивации.
Сегодня снова пришёл в зал. Первая тренировка после почти месяца прогула. Прошла хорошо.
Это не первая попытка в этом году. Но первая публичная. Раньше начинал молча и так же молча сливался. В этот раз решил написать сюда. В конце концов этот блог и задумывался как инструмент саморефлексии - может, если проговорить вслух, будет сложнее слить в тишине.
День первый. 07:00 - 08:00 отработано! Посмотрим...
С января пытаюсь собрать себя обратно. Начинал, бросал, начинал снова. Каждый раз хватало на пару дней.
Летом я писал, что дисциплина важнее мотивации. Красиво звучит, когда всё идёт по плану. А когда план разваливается - остаёшься один на один с собой, без привычки и без мотивации.
Сегодня снова пришёл в зал. Первая тренировка после почти месяца прогула. Прошла хорошо.
Это не первая попытка в этом году. Но первая публичная. Раньше начинал молча и так же молча сливался. В этот раз решил написать сюда. В конце концов этот блог и задумывался как инструмент саморефлексии - может, если проговорить вслух, будет сложнее слить в тишине.
День первый. 07:00 - 08:00 отработано! Посмотрим...
🔥8❤1
BASCODE
Статья на 127 минут сдана. Два месяца раскопок Go 1.26 позади, можно выдохнуть. Но выдыхать скучно. Пока писал обзорную статью, понял что одну тему хочу разобрать отдельно и глубже - сборщик мусораGreen Tea. В Go 1.26 он стал сборщиком мусора по умолчанию.…
Сборщик мусора не собирает мусор.
Парадокс прямо в названии. Он определяет, какие объекты ещё нужны, и сохраняет их. Всё остальное - стирает.
Наверное стоит так дома шкаф разобрать. Не мучиться выбором а вдруг надену. Просто отложить то, что точно носишь, а остальное на удаление...
Парадокс прямо в названии. Он определяет, какие объекты ещё нужны, и сохраняет их. Всё остальное - стирает.
Наверное стоит так дома шкаф разобрать. Не мучиться выбором а вдруг надену. Просто отложить то, что точно носишь, а остальное на удаление...
На улице веснеет.
Птички, солнце, хочется открыть окно. Окно я конечно не открыл, но...
Дальше буду выебываться так, будто я инфлюенсер.
Проснулся в 6 утра, выпил витамины и пошел на тренировку. Встал на беговую, смотрю в даль, а там мало что видно.
IQAir на Юнусабаде показал выше 200. Жаль не успел заскринить. К восьми уже упал до 160.
На календаре зима, на улице весна. А воздух такой грязный, что его можно потрогать...
Птички, солнце, хочется открыть окно. Окно я конечно не открыл, но...
Проснулся в 6 утра, выпил витамины и пошел на тренировку. Встал на беговую, смотрю в даль, а там мало что видно.
IQAir на Юнусабаде показал выше 200. Жаль не успел заскринить. К восьми уже упал до 160.
На календаре зима, на улице весна. А воздух такой грязный, что его можно потрогать...
Коллеги начали открыто пользоваться AI-инструментами для написания кода.
Мне кажется что есть два типа лидов:
Первый - запретитель. "это не твой код", "ты не понимаешь что он делает", "за что тебе платят?". Страх потери контроля, замаскированный под заботу о качестве.
Второй - наставник. Не запрещает, а помогает использовать эффективнее. Объясняет, на что смотреть в сгенерированном коде. Подстраивает ревью под то, как код теперь пишется.
Недавно стал замечать, что от коллеги начали приходить MR с вылизанным кодом, покрытием тестами и описанием, которое наконец отвечает на три вопроса: что сделано, почему, как тестировать. Код доставляется быстрее. В багах разбираться проще. Это результат развития, а не угроза.
Мне кажется что чистый вайб-кодинг с промптом "сделай хорошо" все еще невозможен. Умение работать инструментами с AI тоже нужно развивать, и развивается оно не быстро. Человек учится на своих ошибках, а AI совершает одни и те же ошибки. Нужно расти самостоятельно и наращивать экспертизу своих AI тулов.
Единственное что я повторяю: инструмент не пишет объяснительную за сломанный прод. Кто закоммитил - тот и отвечает. AI написал код - ты его принял, ты за него в ответе.
Мне кажется что есть два типа лидов:
Первый - запретитель. "это не твой код", "ты не понимаешь что он делает", "за что тебе платят?". Страх потери контроля, замаскированный под заботу о качестве.
Второй - наставник. Не запрещает, а помогает использовать эффективнее. Объясняет, на что смотреть в сгенерированном коде. Подстраивает ревью под то, как код теперь пишется.
Недавно стал замечать, что от коллеги начали приходить MR с вылизанным кодом, покрытием тестами и описанием, которое наконец отвечает на три вопроса: что сделано, почему, как тестировать. Код доставляется быстрее. В багах разбираться проще. Это результат развития, а не угроза.
Мне кажется что чистый вайб-кодинг с промптом "сделай хорошо" все еще невозможен. Умение работать инструментами с AI тоже нужно развивать, и развивается оно не быстро. Человек учится на своих ошибках, а AI совершает одни и те же ошибки. Нужно расти самостоятельно и наращивать экспертизу своих AI тулов.
Единственное что я повторяю: инструмент не пишет объяснительную за сломанный прод. Кто закоммитил - тот и отвечает. AI написал код - ты его принял, ты за него в ответе.
🔥7👍2
Рубрика - лысая мудрость!
Есть настольная игра Go. Одна из древнейших стратегий. Правила простые: захватывай территории, окружай камни.
Лучшие игроки намеренно жертвуют своими камнями. Видят, что группа не спасётся, и вместо того чтобы тратить ходы на безнадёжное - отдают часть доски. И выигрывают в другом месте.
В 2016 AlphaGo обыграл чемпиона мира. Аналитики разбирали партии и удивлялись: ИИ отдавал территории так, как ни один человек не решился бы.
В работе замечаю то же самое. Цепляешься за решение или архитектуру, уже видишь что не взлетит, но продолжаешь вкладывать время. Каждый следующий час дороже предыдущего. AlphaGo не жалел камни. И выигрывал.
P.S. Про все это услышал сегодня в подкасте. Не перестаю удивляться как подкасты вовремя подкидывают темы и метафоры...
Есть настольная игра Go. Одна из древнейших стратегий. Правила простые: захватывай территории, окружай камни.
Лучшие игроки намеренно жертвуют своими камнями. Видят, что группа не спасётся, и вместо того чтобы тратить ходы на безнадёжное - отдают часть доски. И выигрывают в другом месте.
В 2016 AlphaGo обыграл чемпиона мира. Аналитики разбирали партии и удивлялись: ИИ отдавал территории так, как ни один человек не решился бы.
В работе замечаю то же самое. Цепляешься за решение или архитектуру, уже видишь что не взлетит, но продолжаешь вкладывать время. Каждый следующий час дороже предыдущего. AlphaGo не жалел камни. И выигрывал.
P.S. Про все это услышал сегодня в подкасте. Не перестаю удивляться как подкасты вовремя подкидывают темы и метафоры...
🔥6
Начинаю серию постов про AI-инструменты, которые реально использую в работе. Без маркетинга, только то, что прижилось.
Первый - dialectic из cc-thingz(моего краша umputun) для claude code.
Проблема, которую замечал за собой: принимаешь архитектурное решение и начинаешь неосознанно искать аргументы в его пользу. Confirmation bias в чистом виде.
Dialectic решает это в лоб. Даёшь утверждение, например: "нам стоит перейти на event-driven архитектуру". Запускаются два параллельных агента: один ищет всё, что подтверждает, второй всё, что опровергает. Потом собирает вывод и проверяет по коду - конкретные файлы и строки.
Перестаёшь защищать идею и начинаешь проверять.
Использую для архитектурных решений и оценки рефакторинга.
Поставить себе просто. Введи в claude code:
Дальше:
https://github.com/umputun/cc-thingz
Первый - dialectic из cc-thingz
Проблема, которую замечал за собой: принимаешь архитектурное решение и начинаешь неосознанно искать аргументы в его пользу. Confirmation bias в чистом виде.
Dialectic решает это в лоб. Даёшь утверждение, например: "нам стоит перейти на event-driven архитектуру". Запускаются два параллельных агента: один ищет всё, что подтверждает, второй всё, что опровергает. Потом собирает вывод и проверяет по коду - конкретные файлы и строки.
Перестаёшь защищать идею и начинаешь проверять.
Использую для архитектурных решений и оценки рефакторинга.
Поставить себе просто. Введи в claude code:
/plugin marketplace add umputun/cc-thingz
/plugin install thinking-tools@umputun-cc-thingz
Дальше:
/thinking-tools:dialectic <твоё утверждение>https://github.com/umputun/cc-thingz
❤2
Dialectic проверяет решения после того, как ты их принял. Brainstorm работает до - помогает принять правильное.
Второй инструмент из cc-thingz.
"Надо добавить кеширование." Открываешь редактор, пишешь Redis-обёртку. Через два дня понимаешь, что надо было кешировать на другом уровне. Или что кеширование вообще не нужно, а тормозит кривой запрос.
Brainstorm не даёт сразу кодить. Сначала читает код проекта, потом задаёт вопросы. По одному. "Что именно тормозит?", "Какой паттерн инвалидации?", "А замеры делал?". Те вопросы, которые ты сам себе не задал.
Четыре фазы: собирает контекст, предлагает 2-3 подхода с trade-offs, валидирует дизайн по частям, выводит на план или реализацию. На каждом шаге спрашивает, не улетел ли в сторону.
Поставить:
Дальше:
github.com/umputun/cc-thingz 🔗
Второй инструмент из cc-thingz.
"Надо добавить кеширование." Открываешь редактор, пишешь Redis-обёртку. Через два дня понимаешь, что надо было кешировать на другом уровне. Или что кеширование вообще не нужно, а тормозит кривой запрос.
Brainstorm не даёт сразу кодить. Сначала читает код проекта, потом задаёт вопросы. По одному. "Что именно тормозит?", "Какой паттерн инвалидации?", "А замеры делал?". Те вопросы, которые ты сам себе не задал.
Четыре фазы: собирает контекст, предлагает 2-3 подхода с trade-offs, валидирует дизайн по частям, выводит на план или реализацию. На каждом шаге спрашивает, не улетел ли в сторону.
Поставить:
/plugin marketplace add umputun/cc-thingz
/plugin install brainstorm@umputun-cc-thingz
Дальше:
/brainstorm:do <твоя идея>github.com/umputun/cc-thingz 🔗
🔥4
Продолжаем...
Dialectic проверяет решения. Brainstorm помогает их спроектировать. Оба дают на выходе план. А дальше нужно сесть и написать код.
Задач в плане набралось на 5-6 часов. Контекст Claude деградирует достаточно быстро, ты устаёшь контролировать каждый шаг. Нужен инструмент, который возьмёт готовый план и выполнит задачи сам.
Ralphex - standalone CLI от того же umputun. Не плагин, отдельный тул для тех у кого большие лимиты.
Пишешь план в markdown со списком задач с чекбоксами. Запускаешь ralphex, указываешь файл. Дальше он сам: берёт задачу, запускает Claude Code в свежей сессии, выполняет, коммитит, берёт следующую. Каждая итерация - чистый контекст. На пятидесятой задаче модель работает так же чётко, как на первой.
Тул не простой, есть четыре фазы. Сначала выполнение, ralphex читает план, находит незакрытые чекбоксы, делает по одной задаче за итерацию. Потом ревью, Claude в отдельной сессии смотрит весь код, цикл повторяется пока есть замечания. Дальше внешний ревью через codex или кастомный инструмент. И финализация rebase, squash, тесты.
Запускал на текущем пет-проекте (Пилю аналог литкода для задач по тонкостям Go. Скоро выложу в опенсорс, бесплатно без регистрации и смс), прошел через 8 часов автономной работы.
Для потоковой кодогенерации, когда задач много и план детальный - лучший инструмент из тех, что пробовал.
Ставится через
https://github.com/umputun/ralphex 🔗
Dialectic проверяет решения. Brainstorm помогает их спроектировать. Оба дают на выходе план. А дальше нужно сесть и написать код.
Задач в плане набралось на 5-6 часов. Контекст Claude деградирует достаточно быстро, ты устаёшь контролировать каждый шаг. Нужен инструмент, который возьмёт готовый план и выполнит задачи сам.
Ralphex - standalone CLI от того же umputun. Не плагин, отдельный тул для тех у кого большие лимиты.
Пишешь план в markdown со списком задач с чекбоксами. Запускаешь ralphex, указываешь файл. Дальше он сам: берёт задачу, запускает Claude Code в свежей сессии, выполняет, коммитит, берёт следующую. Каждая итерация - чистый контекст. На пятидесятой задаче модель работает так же чётко, как на первой.
Тул не простой, есть четыре фазы. Сначала выполнение, ralphex читает план, находит незакрытые чекбоксы, делает по одной задаче за итерацию. Потом ревью, Claude в отдельной сессии смотрит весь код, цикл повторяется пока есть замечания. Дальше внешний ревью через codex или кастомный инструмент. И финализация rebase, squash, тесты.
Запускал на текущем пет-проекте (Пилю аналог литкода для задач по тонкостям Go. Скоро выложу в опенсорс, бесплатно без регистрации и смс), прошел через 8 часов автономной работы.
Для потоковой кодогенерации, когда задач много и план детальный - лучший инструмент из тех, что пробовал.
Ставится через
brew или go install. Детали в репозитории.https://github.com/umputun/ralphex 🔗
🔥2
Вибро-кодирование у большинства выглядит так: скормил промпт, получил код, запустил, сломалось, починил руками, повторил. Хаос с AI-обёрткой.
Get Shit Done (GSD) - фреймворк, который превращает это в конвейер. Ставишь как скилл в Claude Code, и вместо "напиши мне фичу" получаешь полный цикл: обсуждение -> планирование -> исполнение -> верификация.
Под капотом 16 специализированных агентов. Один исследует кодовую базу, другой пишет план, третий выполняет задачи параллельными волнами, четвёртый проверяет результат. Каждый запускается с чистым контекстом, а это значит что на сотой задаче модель работает так же, как на первой.
Но меня зацепило другое. GSD учит тебя собой пользоваться прямо через Claude Code. Пишешь
Про GSD рассказал мой хороший друг - shakhzodme.
https://github.com/gsd-build/get-shit-done 🔗
Get Shit Done (GSD) - фреймворк, который превращает это в конвейер. Ставишь как скилл в Claude Code, и вместо "напиши мне фичу" получаешь полный цикл: обсуждение -> планирование -> исполнение -> верификация.
Под капотом 16 специализированных агентов. Один исследует кодовую базу, другой пишет план, третий выполняет задачи параллельными волнами, четвёртый проверяет результат. Каждый запускается с чистым контекстом, а это значит что на сотой задаче модель работает так же, как на первой.
Но меня зацепило другое. GSD учит тебя собой пользоваться прямо через Claude Code. Пишешь
/gsd:help - получаешь гайд, дока с которой можно пообщаться. Пишешь /gsd:next - он сам определяет следующий шаг. Не нужно читать доку на 40 страниц, CLI сам ведёт по процессу. Мета-подход: AI-инструмент, который объясняет как им пользоваться через AI.Про GSD рассказал мой хороший друг - shakhzodme.
https://github.com/gsd-build/get-shit-done 🔗
❤3