Кодовой Барабанщик
112 subscribers
304 photos
103 videos
175 links
БлогеРОК программиста-барабанщика 👨‍💻🥁
Telegram: @GranSteL
YouTube: https://youtube.com/@granstel
ВКВидео: https://vkvideo.ru/@drummer_programmer
Download Telegram
Приключения Электроников - Мы к вам приехали на час | 27.05.2026

📱 Ютубчик
📱 ВК Видео

#движ #пятый_угол
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Lenny Kravitz - Are You Gonna Go My Way | 27.05.2026

📱 Ютубчик
📱 ВК Видео

#движ #пятый_угол
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Это я год назад в Грузии 🇬🇪
Сейчас дома уже 👇
🔥2
This media is not supported in the widget
VIEW IN TELEGRAM
😁2❤1🔥1🌚1
Соблюдай правила, и сочиняй #ЗанимательныеИстории
😁2
Если твоя #ИИшница умеет генерировать картинки, попроси её "нарисуй картинку дня" и закидывай в комментарии👇
У меня сегодня вот такая👆
🔥2❤1
Зацени, я тут в соответствии со спецификой своего контента мини-видео-гайд запилил👇
❤1
Forwarded from C# Short Posts 🔞
Мы с тобой уже довольно сильно углубились в тему деревьев, главное - не забрести в дремучий лес (ба-дум-тсс🥁). Не переживай, скоро мы выберемся отсюда, а пока что:

🌳 Как B-дерево держит себя ровным и какая у него максимальная высота

⚖️ Balanced — это про что
Если помнишь, одно из толкований буквы B — Balanced, то есть их ещё называют сбалансированными деревьями. Эта сбалансированность заключается в том, что все листья лежат на одной глубине, любой путь от корня до листа одинаковой длины. Нет веток разной глубины, в которые можно надолго провалиться, — поэтому любой спуск к данным стоит одинаково 🟰

🤩 А как у других?
В двоичных деревьях (AVL, красно-чёрных) после вставки одна ветка может стать длиннее другой, и дерево «чинит» себя поворотом: берёт перекосившую тройку узлов и локально переставляет их — бывший потомок становится родителем, поддеревья перевешиваются, высоты выравниваются. Делает это сама структура, на каждой вставке и удалении. Поворот — это их способ оставаться ровными 🔁

🪨 Как поддерживается баланс (видео-дикпик 📱)
B-дерево балансируется без поворотов — делением переполненной страницы (split):
1️⃣ лист наполняется ключами, пока не переполнится;
2️⃣ переполнился — делится надвое (split), а пограничный ключ копируется наверх, к родителю, и становится новым разделителем (по нему потом и выбирают, в какую из половин спускаться);
3️⃣ если переполнился сам корень — он тоже делится на два узла, которые становятся внутренними, потому что сверху над ними встаёт НОВЫЙ корень (появляется новый уровень).
Таким образом дерево не удлиняет отдельные ветки, а растёт вверх равномерно. Возникает резонный вопрос:

📏 Сколько вообще может быть уровней?
Жёсткого лимита в Postgres нет, но из-за большого ветвления высота по int растёт еле-еле:
🔹 2 уровня — до ~100 тыс. строк
🔹 3 — до ~30 млн
🔹 4 — до ~8,5 млрд
🔹 5 — до ~2,4 трлн

А выше упирается в потолок физического хранения таблицы. У каждой строки есть физический адрес: номер блока + слот внутри блока. Номер блока 32-битный, значит блоков максимум ~4,3 млрд (2^32), а в один блок 8 KB влезает примерно 291 строка. Перемножаем 4,3 млрд страниц × 291 запись ≈ 1,2 трлн строк, и больше в таблицу не поместится: для новой строки просто не останется свободного адреса 📍

Пятиуровневое дерево может вместить до ~2,4 трлн ключей, а строк в таблице будет не больше ~1,2 трлн. Таблица кончится раньше, чем дерево заполнит пятый уровень и запросит шестой. Поэтому индекс по int на практике — это 2–5 уровней, и выше пяти не вырастет: столько строк в одну таблицу физически не положить 🛑

🔬 Посмотрим на живом примере (дикпик 1)
Растим таблицу с первичным ключом и смотрим высоту через bt_metap.

Рост в 10 000 раз добавил ровно ОДИН уровень. А точечный поиск всё ещё требует единицы чтений: «корень → ветвь → лист → строка». И столько будет как на тысяче строк, так и на десяти миллионах ✨

🎢 Что это даёт по скорости
Сложность поиска по такому дереву - O(log n), потому что поиск = спуск от корня до листа, то есть ровно столько шагов, сколько в дереве уровней (высота). А высота для дерева с ветвлением f и N записями — это примерно log по основанию f от N.
И в этом весь смысл баланса: если бы split не поддерживал все листья на одной глубине, дерево могло бы выродиться в почти линейную цепочку — и поиск стал бы O(n), то есть потребовались бы миллионы чтений, от которых индекс и спасает 🛟

🅰️ Что унести с собой
🔹 Поиск по индексу — O(log n), потому что большое ветвление держит дерево низким, а split гарантирует одинаковую глубину листьев.
🔹 Это гарантия худшего случая, а не «в среднем»: split держит все листья на одной глубине, поэтому длинных веток просто не бывает.
🔹 Точечный поиск по индексу почти «бесплатный» — что на тысяче строк, что на сотне миллионов это несколько уровней дерева.

Команды, чтобы самому замерить высоту на разных размерах, — в 👉 гисте 👈

🧑‍💻dp 🥁
#бд #postgresql #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
Зацени дофаминовый маркетплейс:

👉https://dofamarket.granstel.ru/👈

Он доставит тебе дофамин от покупок без трат: оплаты и курьеров нет, деньги не списываются🤩

Зачем?
В Корее набирают популярность сайты для «фейкового» шоппинга, пишет The KoreaTimes.
На сайтах по доставке одежды или еды вы добавляете товары в корзину, вбиваете свой адрес и делаете «заказ». Курьер якобы выезжает по вашему адресу, его «передвижения» можно отслеживать на карте. По факту же вам ничего не везут, и деньги с карты тоже не списывают.
Говорят, таким образом можно получить заряд быстрого дофамина и, самое главное, сэкономить деньги💰

Мне понравилась идея, ведь в целом это довольно легко реализовать, и руководствуясь своей мыслью о пет-проектах, решил воплотить её ✨
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Этот маркетплейс 👆 был написан агентом, по сути, за пару часов, и был готов к публикации ещё в понедельник, а я опубликовал его только в четверг.

Почему?

Потому что надо было повозиться с хостингом, доменными именами, добавление секретов для автоматизированной публикации, и ещё всякие свои дела делать. Теперь агент сам пишет код и сам может публиковать, но на мне: указания, что надо сделать, а самое сложное - привлечь посетителей. Да, проект на проде, это уже круто (не каждый из них может по-настоящему сказать "Hello, world!"), но без пользователей от него теперь мало толку. Агент может автоматически настроить рекламу и делать рассылки, но для этого надо ещё всё настроить РУКАМИ🤯
Так что это правда👇 мы научились быстрее генерировать код, но ещё учимся быстрее поставлять его без потери качества
AI, похоже, реально ускоряет разработчиков. Но не так, как обычно продают в презентациях.

В новой статье от NBER "Writing Code vs. Shipping Code" исследователи посмотрели на 100 000+ GitHub-разработчиков и сравнили разные поколения AI coding tools: автокомплит, интерактивных агентов и автономных агентов.

Да, судя по тексту, AI резко увеличивает количество написанного кода. Автокомплит даёт примерно +40% к числу коммитов. Вместе с интерактивными агентами совокупный прирост доходит до +140%, а с автономными — до +180%. В отдельных местах цифры вообще безумные: sync-агенты дают +741% строк кода.

Но больше кода ≠ больше продукта.
Эти +741% строк превращаются всего в +65% pull requests и примерно в +20% релизов. А общий эффект +180% по commits сжимается до +50% по проектам и до +30% по настоящим релизам.

Почему? Потому что bottleneck переехал.
Раньше узким местом было написание кода. Теперь AI это резко удешевил. Но остались другие этапы: понять, что вообще строить (дискавери), проверить, интегрировать, отревьюить, зарелизить, довести до нужного качества, найти пользователей.

И вот эти этапы всё ещё человеческие, медленные и дорогие.
Самое забавное: авторы проверили 3 крупных marketplace приложений и увидели рост количества новых приложений, но не увидели роста их суммарного использования. То есть приложений стало больше, а внимания пользователей — нет.

По сути, AI сделал производство кода дешевле. Но не сделал дешевле доверие, дистрибуцию этого кода, продуктовый вкус, поддержку и market fit. Так что “AI пишет код” — правда. А вот довезти этот код до пользователей — всё ещё отдельная боль.
❤4🔥2
Добавил в #занимательныеистории страшилку, атмосферные звуки и внезапные повороты прилагаются👍
🔥2😁1
Король и шут - Лесник | 27.05.2026

📱 Ютубчик
📱 ВК Видео

#движ #пятый_угол
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
Это я перекатился из Додо 🌯 в Юрент 🛴
Сейчас на работе уже ⚡

#офисныеистории теперь будут про новую компанию, так что
🟪🟪🟪🟪🟪

Если интересно, как я менял работу, ставь 🤟, расскажу👇
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥421
Записать всё ✍️
или
Записывай свои рабочие достижения ✍️
Поиск работы обычно начинается с резюме. Говорят, сейчас резюме проверяется ИИшницами, а значит и составлять его вроде как надо ИИшницей. Но, в любом случае, чтобы было что написать, нужно вспомнить какие-нибудь интересные задачи, которые тебе доводилось выполнять.

По своему опыту скажу - это не так-то просто. Обычные задачи разработчика у меня как-то не отложились в голове (хотя я делал много прикольных вещей), и было намного проще вспомнить достижения по дополнительным активностям (realtime board, девфорум, музыкальная комната), нежели по основным. Чтобы заполнить своё резюме, мне пришлось восстанавливать историю из своих личных заметок, где я разбирался со сложными задачами🤯

Поэтому рекомендую в течение работы (даже если не планируешь её менять) записывать достижения и результаты по задачкам. Как минимум, это может стать подспорьем на регулярном ревью (после которого обычно пересматривают ЗП), и ты сможешь доказать лиду (и себе), что ты молодец✨
Ну и составить резюме, при необходимости, будет намного проще.

Только не забывай про метрики📈
Просто "Сделал то-то и то-то" могут понять люди внутри твоей компании, потому что они в контексте (и даже им конкретные внутренние метрики интереснее). Снаружи это ничего не значит.
В идеале, представить свои успехи в деньгах: сэкономленных или заработанных компанией, конечно же. Если сложно обосновать прямое влияние, попробуй найти косвенное: экономия на инфраструктуре (стоимость ресурсов) или времени (TTM за счёт ускорения пайплайна), а время - деньги, как говорится🪙

#поиск_работы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥2💯2
Forwarded from C# Short Posts 🔞
В прошлых постах мы довольно тщательно разобрали структуру индексов, и нам осталось разобраться, откуда происходит чтение как данных, так и индексов: из диска, или из оперативки, или «зависит»?

📚 Несколько кэшей
Представь, что ищешь нужную книгу: она может быть на твоём рабочем столе — прям под рукой, очень близко; или на полке рядом — на шаг дальше; или вообще в книжном шкафу в другой комнате — туда топать дольше всего. Память под страницы у СУБД устроена такими же уровнями, и за страницей она идёт по ним сверху вниз:

1️⃣ shared_buffers — рабочий стол. Собственный кэш СУБД, она сама им рулит. В Postgres по умолчанию всего 128 MB.
2️⃣ кэш ОС (page cache) — полка рядом. Операционка сама держит в RAM файлы, которые недавно читала; СУБД им не управляет, но пользуется.
3️⃣ диск — шкаф в другой комнате.

Глянула 1️⃣ shared_buffers → нет → 2️⃣ спросила ОС, та смотрит, что есть в RAM → нет → идем на 3️⃣ диск Найденную страницу обычно кладём обратно в shared_buffers, чтобы следующий запрос взял её уже оттуда.

🧩 Данные и индексы — в одном кэше
Тут есть контр-интуитивный момент: и куча с данными (heap — страницы, где лежат сами строки таблицы), и индексы (страницы с элементами дерева) лежат в одном shared_buffers, конкурируя за место. Отдельной «памяти под индексы» нет 🤯

🌳 Почему индекс будто всегда в RAM
Верхушка B-дерева (корень и внутренние узлы) — набор страниц, который дёргает каждый поиск. Из-за частых переходов по дереву верхние уровни почти всегда в кэше, так как с них начинается почти любой поиск, поэтому дочитывать чаще приходится только лист и/или саму страницу кучи.

🔬 Пощупаем (дикпик 1)
EXPLAIN (ANALYZE, BUFFERS): секция BUFFERS показывает, сколько страниц нашли в shared_buffers (hit), а сколько пришлось дочитывать (read).
Холодный поиск по PK на таблице в 1 млн строк, у меня в эксперименте: shared read=4 — три страницы индекса плюс одна кучи, всё мимо кэша.
Повтор: shared hit=4 — всё в shared_buffers диск не трогали, время заметно меньше.
Ищем другой далёкий id: hit=1 read=3 — корень уже в кэше с прошлого раза, поэтому он был переиспользован.

⚠️ Тонкость: read ≠ обязательно диск
«read» здесь значит лишь «не было в shared_buffers». Но страница могла прилететь мгновенно от ОС, а не из диска.
Отсюда неочевидное: два запроса с одинаковым read могут идти с разной скоростью — в одном случае страница пришла с диска, в другом уже лежала в кэше ОС.

🧑‍💻 Как это использовать в работе
1. Первый запрос после рестарта PostgreSQL (или сервера) обычно медленнее: кэш пустой, он наполняется заново. Это так называемый «холодный старт».
2. Index Only Scan (когда всё нужное есть в самом индексе и в кучу за строкой идти не надо) экономит не только чтения, но и кэш: чем меньше heap-страниц тащим в shared_buffers — тем больше места остаётся другим.

Команды из дикпика — в 👉 гисте 👈

Дальше разберём, куда девается оперативка, когда её внезапно «съели» под 99%, и как это диагностировать 👉

🧑‍💻dp 🥁
#бд #postgresql #инженерныештучки #heavywednesday
1
#занимательныеистории пополнились новой историей✨
Напомню: скажи Алисе💜 "Запусти навык занимательные истории", а дальше там понятно))
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2