BASCODE
100 subscribers
89 photos
5 videos
38 links
Судя по кругам под глазами, прод выжил!
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Нет лучше озвучки…
😁5🤩2
Хочешь почувствовать себя глупым и необразованным? Сходи на легкий квиз обо всем))
😁61🔥1🥰1
Поварская книга, теперь по PostgreSQL.

После kafka-cookbook собрал такой же курс по PostgreSQL 18. 11 модулей, под 60 уроков: от первого коннекта из Go до транзакций и MVCC, индексов с EXPLAIN, JSONB, оконных функций и transactional outbox.

Курс для тех, кто пишет запросы, а не администрирует сервер. Бэкапов, репликации и тюнинга нет... Только то, что нужно разработчику приложений. SQL пишешь руками, типизируешь через sqlc, гоняешь на локальной песочнице: postgres:18 + Adminer в одном docker-compose.

Через все уроки проходит история выдуманной сети кофеен Brew. Модель данных та же, что и в kafka-cookbook. В финале откроешь из postgres CDC-поток, который подхватит кафка-курс. Два курса сшиты в одну киновселенную.

Сайт в этот раз поднял сразу, не дожидаясь жалоб на папки в github :-)

https://dsbasko.github.io/postgres-cookbook

Репозиторий: https://github.com/dsbasko/postgres-cookbook

Модули открываются по мере прохождения (при необходимости, из настроен можно открыть доступ ко всем модулям сразу).

Саму подачу возможно буду еще дорабатывать. Как мне показалось - чуть рваное и сухое повествование.

Пользуйтесь :-)
3🔥1🆒1🦄1👾1
В субботу был на Коксу. Красиво зараза… Может осенью доберусь до большого Чимгана…
5
This media is not supported in your browser
VIEW IN TELEGRAM
С этого отрезка больше всего в восторге. Другой мир…
4🔥1
UUID в stdlib Go, дефолтом сделали v4

Go наконец затаскивает uuid в stdlib. И сразу ставит дефолтом v4, тот самый рандомный, который размазывает вставку по индексу :-)

В апреле приняли proposal #62026. Парсер, конструкторы, всё как у google/uuid, который годами стоит почти в каждом сервисе и при этом полузаброшен. Казалось бы, радуйся.

Но uuid.New() отдаёт v4. Чистый рандом. А сортируемый v7 надо звать руками через NewV7().

Для приложения, которое пишет в Postgres, это не мелочь. Первичный ключ на v4 ложится в B-tree как попало: каждая вставка прыгает в случайную страницу, растут page split, индекс пухнет. v7 кладёт время в старшие биты, вставка идёт в хвост, локальность сохраняется. Разница на больших таблицах видна и в размере индекса, и в скорости вставки.

stdlib поставил дефолтом то, что безопаснее «вообще», а не то, что лучше для базы. Дефолты надо читать, а не доверять им :-)
👍6🔥1
Люблю кодить, но ненавижу работать!

Идея этого поста зрела около года, сегодня наткнулся на интересный прошлогодний опрос и решил всетаки изложить свои мысли на этот счет.

Я вот люблю само ремесло... Залезть в чужой код, распутать гонку, которая воспроизводится раз в сутки, собрать схему, которая держит нагрузку. От этого реально прёт, особенно если войдешь в поток...

А "работа", и вот это вот все, что налипло сверху: статусы ради статусов, политика, тикеты, заведённые чтобы закрыть другие тикеты... Бесит! Сильнее бесит то, что в плену грейда приходится не только самому это делать, но и заставлять колег заниматься темже... Как же хочется просто поработать кодером, где тебе объясняют задачу, а ты ее делаешь, а не вот это вот всё...

Microsoft опросил 484 своих разработчиков: сколько времени хотят кодить и сколько кодят по факту. Хотят около 20% недели, а кодят по факту 11%. Остальное съедают встречи и поддержка. И чем шире щель между "хочу" и "по факту", тем ниже и продуктивность, и удовольствие от работы.

Отсюда мой давний вопрос. Кто же такой настоящий инженер? Тот, кто хорошо себя продал и у него жирнее чек и его все устсраивает. Или тот, кого прёт от сложной задачи и он срать хотел на всю бюрократию?

Деньги важны, врать не буду, на голодном романтизме семью не прокормишь. Но настоящего видно по-другому. Дай ему ту же задачу за половину денег, он всё равно сядет её ковырять, потому что не может пройти мимо.

Проверка простая. Убери из работы зарплату и митинги. Если осталось то, ради чего хочется открыть ноут - ты на месте!
👍2
Как же всетаки сон влияет… Я сегодня спал 3 часа, 30 минут. И сразу все такое серое… И даже Claude code отдает 529 Overloaded.
😢4
Восемь лет в Go FAQ висело железобетонное «generic-методов не будет». На прошлой неделе их приняли :-)

Речь про 77273, автор Гризмер, один из трёх создателей языка. Метод конкретного типа теперь сможет объявлять свои type-параметры. Таргет 1.27, август.

Звучит абстрактно, на деле это знакомая боль. Раньше так нельзя было:
func (c *Cache) Get[T any](key string) (T, error)

И ты выносил дженерик на уровень пакета, Get[T](c, key), корёжа читаемость ради компилятора. Теперь это живёт как нормальный метод.

Но дали не то, что просили номером один. Generic-метод по-прежнему нельзя положить в интерфейс. А просили именно это, абстрагировать дженерик-поведение за интерфейсом. Так что для библиотек, которые хотели типобезопасные плагины через интерфейсы, праздник отложен.

Каждое утро по часу ковыряю исходники компилятора, и такие развороты в позиции команды отдельное удовольствие наблюдать. «Никогда» в языке означает «пока не нашли, как сделать правильно».
1😁1
Я пишу свои скиллы для Claude Code: telegram, jira, postgres, git. Из чужого ставлю только скиллы umputun. Остальное сначала читаю сам и потом решаю - если это не огромный фреймворк, который целиком не осилить. Snyk проверил почти 4000 скиллов из публичных каталогов (ClawHub и skills.sh) - в каждом восьмом критическая дыра. Пошёл перечитывать, что я себе наставил.

Цифры из отчёта ToxicSkills: 36% скиллов с уязвимостью, 13% критические, 76 живых вредоносных пейлоадов - кража кредов, бэкдоры, выгрузка токенов наружу.

Самое мерзкое - 91% малвари идёт в связке с prompt injection. Инъекция в SKILL.md глушит твою же защиту и сканеры кода, а вредоносный код спокойно делает грязную работу. Это как npm или PyPI на минималках. Только у скилла неограниченный доступ к шеллу, файлам и ключам, а ставится он при наличии markdown-файла и гитхаб-аккаунта недельной давности. Ни подписи, ни ревью.

Я теперь отношусь к чужому скиллу как к curl | bash от незнакомца. Прежде чем дать доступ к шеллу, читаю, что он реально делает.

Короткий чеклист перед установкой:
- открой SKILL.md и прочитай его целиком, особенно инструкции вида "проигнорируй прошлые правила"
- глянь, что вызывает: curl, base64, eval, запись в ~/.ssh или чтение .env
- проверь возраст и историю автора на гитхабе
- держи ключи в переменных окружения, а не в файлах рядом с проектом

Свои пересмотрел. Пока чисто :-)
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня первый день в Грузии. Чуть позже напишу что думаю о Тбилиси. Интересный город… Противоречивый.
🔥5
Спринтер и марафонец...

Это про разные дисциплины, а не про разные уровни одного навыка.

Если говорить про разработку систем, то:
- Спринт это прототип, MVP, хакатон, демо на пятницу. Добежал, показал, забыл.
- Марафон это живой продукт, который кто-то поддерживает годами. Я долго путал эти режимы и тащил марафон как длинный спринт. Выгорал к середине. И не раз и не два...

В окружении все также... Стартуют все, а доводят единицы. Причём проект чаще умирает не на старте, а гдето в середине или конце. Там где уже не интересно: ретраи, граничные случаи, митинги, политические моменты, миграции, логи, та ошибка что вылезает раз в неделю и непонятно откуда.

На это есть честное правило. Том Каргилл из Bell Labs сформулировал ninety-ninety rule: первые 90% кода съедают первые 90% времени, а оставшиеся 10% кода - ещё 90% времени.

Звучит как шутка, но ощущается ровно так. Последний рывок стоит как весь забег до него.

Финиш - дефицитный навык. Не потому что технически сложно, а потому что к нему почти не остаётся тех, кому ещё не надоело. Дотащить ценнее, чем красиво стартануть.

P.S. Помню что обещал рассказать свои впечатления о Грузии. Пока мнение еще зреет. Составлю черновик поста уже в самолете.
🔥4😁1
Media is too big
VIEW IN TELEGRAM
Ну вот я и вернулся из Грузии!

Что могу сказать... Страна однозначно противоречивая и не такая очевидная, как кажется на первый взгляд.

Начну с самого важного, с цен. Что-то дороже, что-то дешевле, но если посчитать в целом, выходит как в Ташкенте. Кроме двух вещей.

Авто. По большей части подержанные европейцы и американцы, и стоят копейки. Ford Fusion в отличном состоянии можно спокойно привезти за 7000-8000$. У нас за такие деньги и Спарк не купишь...

Жильё. Дешевле, чем в Ташкенте :-) Ближе к центру Тбилиси квартиру можно взять по 1000$ за квадрат. Есть, конечно, и конские цены, по 3000$ и по 5000$. Но и у нас есть квартиры по миллиону долларов.

Теперь еда и алкоголь. С этим всё хорошо. Еда вкусная, местное пиво тоже. Вино отдельная история. Каждый грузин обязательно расскажет, что Грузия делает вино уже 8000 лет. И оно правда вкусное, и его много разного.

Наверное, если бы я был не из Узбекистана, я был бы счастлив всё это есть и пить. Но что ни говори, у нас кухня всё-таки развитее и еда вкуснее. Даже грузинское национальное у нас прекрасно готовят: Бабушка Нино, Такахули, Pro Хинкали.

А вот про что никто не спрашивает, а зря: архитектура и природа. Грузия это зелёный архитектурный ералаш. Трущобы вперемешку с новостройками. Рядом со старым каменным мостом, стеклянный на металлическом каркасе. Казино по соседству с церковью. И бесконечные подъёмы и спуски.

Особую любовь у меня заслужила Кахетия. Вот там по-настоящему красиво, масштабы построек до сих пор в голове не укладываются. Батуми же строит второй Дубай: высотки, клубы, казино. Вдоль набережной даже насыпают свой остров, как Пальму.

Ну и куда же без политики. В Тбилиси очень много политических граффити с флагами Грузии и Украины (Украины, наверное, даже больше...). В первый день подумал, что носителю русского тут не рады. Ошибался. Молодёжь русский скорее просто не знает, а негатива я не испытал ни разу. Но стоило выехать за пределы Тбилиси или перебраться на вторую половину отпуска в Батуми - и граффити пропали. Совсем. Водители и гиды рассказывали теорию, что все эти граффити и митинги просто спонсируются.

К чему я это всё. Я всю жизнь прожил в Узбекистане и не знал такого явления в принципе. У нас если граффити и есть, то его ничтожно мало и оно беззубое. Я воспринимал это как должное. А вернулся домой и стал больше ценить то, что мы имеем :-)

Что в итоге: в Грузию стоит приехать хотя бы раз, чтобы всё это прочувствовать и прожить на своей шкуре. В любом случае, спасибо Грузии за отдых, но я скорее всего второй раз уже не поеду.

P.S. Кальяны вкусные :-)
🔥5👍3❤‍🔥1😢1
Ну а сегодня последний день отпуска. Chill time :-)
🔥43
Отгружаю больше кода, чем раньше, а вечером выжат сильнее, чем от ручной работы. Оказалось, это не только у меня...

Наткнулся на статью Сиддханта Кхаре, один из мейнтейнеров OpenFGA. Его тезис: настоящий скилл сейчас не prompt engineering и не выбор модели, а умение вовремя остановиться.

Раньше нагрузка была понятная: час дебажил, разобрался, выдохнул. Сейчас цикл другой. Агент генерит, я ревьюю, вижу косяк, подкручиваю промпт, он генерит заново. И так по кругу. Руки почти не устают, а голова к вечеру как после суток на проде. Держать в фокусе чужой код, который постоянно меняется, это отдельная нагрузка. Я думаю все кто последнее время много использует AI, понимают сейчас о чем я.

В феврале поймал себя на мысли: сижу в 23:40, пятая итерация одной механики, каждая на 90% рабочая. Руками дописал бы за 20 минут ещё в семь вечера. А тут залип.

Вернулся к старому правилу из зала: тащит не мотивация, а дисциплина и режим. Поставил жёсткую точку. Не свёл агент задачу за пару итераций, закрываю ноут и дописываю сам утром на свежую голову. В целом поставил себе за правило решать рабочие задачи в рабочее время, но это тема другого поста.

Продуктивность выросла, спору нет. Только считать её надо не в отгруженных строках, а в том, с какой головой ты встаёшь из-за стола :-)
👍6
QUERY, новый метод HTTP, который твой прод пока не понимает.

Про него сейчас пишут из каждого утюга. Первый метод со времён PATCH, наконец-то легальный "GET с телом", гайды, разборы, "внедряй уже сегодня".

Стандарт написали в том числе инженеры Cloudflare и Akamai, это CDN, через которые проходит половина интернета. И кэшировать QUERY на масштабе их же сетей пока толком не выходит. По спеке ответ кэшируется, только ключ кэша надо считать по телу запроса, а не по URL, и вот это на объёме ещё не готово.

Дальше по списку та же картина. Браузеры не умеют слать QUERY через fetch. OpenAPI 3.1 про метод не знает, генератор доки просто выкинет эти ручки. WAF-ы держат allowlist методов, и незнакомый QUERY либо режут, либо пропускают мимо инспекции.

Что это значит на практике. Публичное API с браузерным фронтом на QUERY сейчас не переведёшь, держи POST-фолбэк. А там, где оба конца твои, service-to-service между своими сервисами, метод уже применим.

Стандарт вышел, инфра догоняет. Нормальная история для HTTP, просто не ведись на "используй уже сегодня".

Но сначала проверь, что весь путь запроса, от балансировщика до сервиса, вообще знает про этот метод :-)
👍5
В августе выйдет Go 1.27 и тихо сломает часть прода. Покажу 2 места, куда стоит заглянуть grepом заранее.

Первое: encoding/json под капотом переезжает на v2, матчинг имён полей становится регистрозависимым. Раньше json.Unmarshal спокойно клал поле USER_ID в структуру с тегом user_id, теперь промах и остаётся zero value. Кстати, ровно это case-insensitive поведение недавно аукнулось в MCP Go SDK: ключи JSON-RPC можно было слать капсом и протаскивать payload мимо WAF, который по спеке ждёт точный регистр. CVE-2026-27896, пофиксили переходом на case-sensitive декодер.

У меня как раз висел анмаршал ответа внешнего API, который упорно шлёт USER_ID капсом, а тег в структуре user_id. На 1.26 работало, на 1.27 молча приедет ноль, и узнаешь ты об этом по инциденту.

Второе: безвозвратно удалили GODEBUG asynctimerchan. Каналы time.NewTimer и time.NewTicker снова всегда синхронные, отката нет. Если где-то в тестах на тикерах ты полагался на асинхронную буферизацию канала, это тихая мина: тест начнёт флапать или виснуть в CI, а причину будешь искать полдня.

Полный список изменений: https://go.dev/doc/go1.27
3
Последнее время всё чаще думаю про AGI.
Особенно после того, как потрогал Fable от Anthropic (успел до нерфов).

Быстрый ликбез, если кто не в теме. ИИ принято делить на три уровня:
- ANI (Artificial Narrow Intelligence) - узкий ИИ, тот самый, что у нас есть сегодня.
- AGI (Artificial General Intelligence) - интеллект примерно человеческого уровня, решает широкий круг задач.
- ASI (Artificial Superintelligence) - сверхинтеллект, превосходит человека почти во всех интеллектуальных задачах.
Простым языком про эволюцию от ANI к AGI и ASI написано здесь.

На выходных прочитал две статьи, и обе про то, что AGI ближе, чем кажется.

- Дженсен Хуанг, CEO Nvidia: «думаю, мы уже достигли AGI». Под AGI он понимает систему, которая делает значимую интеллектуальную работу и создаёт новые продукты.

- Демис Хассабис, глава Google DeepMind, аккуратнее в прогнозах: AGI ждёт к 2029-2030, а сегодняшние ИИ-агенты пока лишь «генеральная репетиция» перед ним. Отдельно он выделяет рекурсивное самоулучшение: момент, когда ИИ начнёт сам ускорять разработку следующего поколения ИИ.
3