Типичный программист
✔
78.1K subscribers
3.82K photos
1.16K videos
14 files
8.46K links
Всё самое интересное по программированию

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

VK: vk.com/tproger

Регистрация в перечне РКН: https://tprg.ru/mJwo
Download Telegram
Давайте сыграем в айтишную каламбурю!

Правила простые: берём любой термин, название компании или имя известного айтишника и делаем из него каламбур.

Я начинаю — вы подхватываете: Ада Лавпринглс
☃8👍5🔥4❤2👏2🥰1👌1🗿1
Листаете ленту, открываете ролик, переходите в сообщество автора — всё внутри ВКонтакте. За этими привычными действиями стоят разные системы и команды. Каждой нужна возможность развивать свою часть продукта и выпускать обновления в собственном темпе.

В прошлом году ВКонтакте начала переход на сервисную архитектуру: пользовательские сценарии постепенно переносили в отдельные сервисы, пока продуктовые команды продолжали выпускать обновления. Для подготовки новых сервисов создали внутреннюю платформу разработки. Она автоматизирует типовые операции — теперь подготовка занимает часы вместо недель.
Трансформация затронула и веб-версию. Основные разделы перевели на SPA: браузер обновляет нужные части интерфейса без полной перезагрузки страницы. В результате страницы открываются на 25% быстрее, а переходы между разделами ускорились в 3,5 раза.

Вместе с техническим директором ВКонтакте Юрием Кочаряном разобрали, как проходили эти изменения, что помогло командам ускорить разработку и какие подходы можно применить в своём проекте.

https://tproger.ru/articles/kak-perestraivat-produkt-kotorym-ezhednevno-polzuyutsya-65-milli
👍7🤣7❤5🔥5💊4👌3👏2🤔1🕊1🎅1🦄1
От чатбота к агентам: опыт Митчелла Хашимото

Для работы с кодом Хашимото перешёл от отдельного чата к агенту, который читает файлы проекта и запускает программы. После этого начал повторять собственную работу: сначала решал задачу сам, затем давал её агенту без готового решения.

Так он выяснял, какие задачи можно поручать ИИ. Дальше добавлял инструкции в AGENTS.md, файл с правилами проекта, и способы проверить изменения, включая запуск тестов.

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

#ии #инструменты
👏4🎉4❤2🤔2👌2👍1
Что можно настроить в ИИ-агенте Pi?

Армин Ронахер пользуется Pi и добавляет нужные возможности через расширения. В его описании устройства агента есть три составляющие:
— ядро читает, записывает и редактирует файлы, запускает команды;
— расширения добавляют функции и могут сохранять свои данные в сессии;
— ветки беседы позволяют отдельно отладить проблему и вернуть в основную сессию краткий пересказ.

Список задач и ревью изменений Ронахер поручил создать самому Pi. В разборе агента с примерами расширений видно, что он дописал под собственный рабочий процесс.

#ии #инструменты
🤔5👌3🐳2🔥1🎉1🏆1🙈1🤝1🎅1🎄1🤷1
Перенос MiniJinja с Rust на Go силами Opus и Codex

Около десяти часов работы агента и примерно 45 минут активного участия автора. Так Армин Ронахер оценивает основной перенос MiniJinja с Rust на Go. MiniJinja собирает текст по шаблонам.

Он начал с Opus 4.5 внутри Pi, а оставшиеся исправления тестов передал GPT-5.2 Codex. Рабочая среда оставалась той же; Go-реализацию сверяли с сохранёнными результатами тестов Rust-версии.

По ходу работы агент отказался от проверок, в которых программа должна завершаться ошибкой: текст сообщений не совпадал дословно. Ронахер вмешался и сохранил эти тесты, изменив способ сравнения сообщений.

#ии #инструменты
👍7👏5❤2🔥2🤔2❤‍🔥1👻1👨‍💻1😨1🤗1😎1
Doom на виртуальной машине Turso: память в таблице, кадры в строках запроса

Вся память Doom помещается в одну запись таблицы: двоичное значение BLOB на 64 МиБ. Указатель в C становится смещением внутри этого значения, а чтение и запись памяти игра выполняет командами базы данных.

Команда Turso написала компилятор vdbecc: LLVM переводит исходный C-код в промежуточное представление, а vdbecc превращает его в VDBE, байткод виртуальной машины базы. Готовые кадры игра отдаёт через ResultRow, ту же инструкцию, которой SELECT возвращает строки результата.

В разборе порта есть код и браузерная демонстрация, а также объяснение, как реализовали вызовы функций и указатели на них. Повторить это в обычном SQLite нельзя: нужны расширения Turso и добавленный загрузчик программы.

#веб
❤10👍6👏4🤔2🔥1😁1🤣1🍓1🙈1🤝1🫡1
Звонки Discord на Cloudflare: почему сервер поближе не всегда лучше

Сервер в Рейкьявике снизил задержку местных звонков, но пинг иностранных участников вырос в 2,7 раза. У Discord весь звонок обслуживает один сервер: если он оказался в Исландии, участники из Германии тоже отправляют пакеты туда и обратно.

Перенос трафика из Роттердама в Амстердам добавил другую проблему. У пользователей французского провайдера Orange задержка в часы пик превышала секунду: соединение между сетями на пути к Cloudflare было перегружено. Перенос пришлось откатить.

В разборе миграции голосовых звонков команда Discord показывает, как эти сбои изменили план: регионы стали переносить по одному, заранее проверяя, выдержат ли соединения с крупными интернет-провайдерами дополнительный трафик.

#облака
🔥9👍3👏3😨2🎉1🙏1💋1😈1👨‍💻1🙈1😇1
Модель C-интерфейса в Quint помогла найти больше десяти ошибок в SQLite

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

Паван Намби из сообщества Turso моделировал в Quint отдельные контракты C-интерфейса SQLite: что операции должны делать по документации. Quint генерировал последовательности состояний, которые переводили в небольшие программы на C и запускали на настоящей базе. Сравнение ожиданий с поведением SQLite выявило ошибки, пропущенные прежними проверками.

В разборе Намби и команды Turso показаны шаги, приведшие к падению, и подход к проверке отдельных контрактов без моделирования всей базы данных.

#инструменты
🔥8❤3👏3🤔2👍1🎉1🙏1😴1🙈1😘1
Каскадный сбой Discord: почему сокращение кластера сорвало звонки

Инженеры Discord увеличили ресурсы каждой копии сервиса сессий и уменьшили число копий. При остановке те не успели передать данные соседним узлам: разом оборвались 17% сессий подключённых устройств.

Переподключения перегрузили два процесса, через которые создавались HTTP-соединения для управления звонками. Через них же шло обновление регистрации сервисов в etcd, хранилище сведений о доступных узлах. Очереди росли, регистрация перестала обновляться, узлы выпадали из списка доступных. После перезапуска нагрузка снова блокировала их работу.

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

#облака
🌭5❤4👍3🤔3🔥2👌1💯1🍓1😈1😴1😎1
Викторина об оптимизации Rust: проверка компилятора и испытание живой аудиторией

Деление целого числа на пять компилятор может заменить умножением и битовым сдвигом. Автор викторины для EuroRust проверял такие превращения в Compiler Explorer, сервисе для просмотра машинных инструкций, и переводил результат обратно в Rust, чтобы составить вопросы.

Затем собрал веб-приложение: ведущий переключает слайды, зрители отвечают с телефонов. Тесты с участием до 50 человек прошли успешно, но на сцене один ранний голос закрыл вопрос для остальных. При возврате на слайд игра разрешала отвечать только тогда, когда голосов ещё не было.

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

#веб
🔥6👏5❤2👍2😢2💯2🤗2🎉1🤩1🙈1🦄1
Почему разработчик планирует отдавать больше задач Claude

Винсент Шмальбах описал план перераспределить расходы на ИИ: больше работы отдавать Claude, а Codex сохранить для части задач.

К решению его подтолкнули затяжные сессии. По наблюдениям автора, агент иногда часами продолжал проверки и добавлял соседние задачи. Квота расходовалась, а момент, когда можно принять результат и двигаться дальше, было трудно предсказать.

В личном разборе Шмальбах связывает эти эпизоды с условиями подписки и затратами на собственные проекты.

#ии #инструменты

🐸 Библиотека ИИ для айтишников
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉8👍3❤2👏2💊2🥰1👌1🕊1🤗1🗿1😎1
Подготовка мобильных приложений Etsy к пикам нагрузки без мгновенного отката

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

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

Срочные оповещения оставляют для ухудшения показателей сбоев. К ошибкам в Sentry добавляют тег последнего экрана пользователя: он помогает найти ответственную команду, когда одна группа ошибок затрагивает и каталог, и корзину.

#инструменты
❤3👌3🍓2🔥1🥰1😢1🙏1🍌1🤨1😨1👾1
Ускорение просмотра изменений в GitHub через упрощение компонентов React

Одна строка кода во вкладке Files changed могла нести больше 20 обработчиков событий. На тысячах строк цена такой архитектуры росла: интерфейс тормозил, память уходила на повторяющиеся компоненты.

Команда GitHub упростила дерево React и передала обработку событий общему обработчику: он определяет строку по атрибутам HTML-элемента. Состояние комментариев и меню перенесли в дочерние компоненты, которые появляются по необходимости.

В разборе оптимизации есть замеры: на 10 000 изменённых строк задержка от действия до обновления экрана снизилась примерно с 450 до 100 мс. Тест проводили на MacBook Pro M1 с четырёхкратным замедлением. Для самых крупных изменений понадобилось ещё и отображать только видимые строки; этот подход тоже разобран в материале.

#веб
❤7👍4😐2👏1🎉1🤣1🍌1👨‍💻1🎃1💘1
This media is not supported in your browser
VIEW IN TELEGRAM
Хотел просто поиграть на Mac. В итоге написал новый движок Total Annihilation

Тут есть те, кто в детстве играл в Total Annihilation? Разработчик решил вернуться к любимой игре детства и написал для неё собственный движок на Go. При этом игровые движки до этого он вообще не делал.

Он изучал записи матчей, разбирал сетевые пакеты, ставил эксперименты в оригинальной игре. В общем, парень сильно увлёкся.

Конечно же не обошлось без вайбкодинга. Claude и Codex помогали исследовать старый движок и писать новый. Автор проверял результат, сравнивал с оригиналом и исправлял ошибки.

📎 Подробности он собрал здесь.

Проект называется Nanolathe, код открыт. А самое приятное, что три миссии уже сейчас можно запустить прямо в браузере. Пока это beta, баги ещё есть. Для полной игры понадобятся свои оригинальные файлы. Если играли в Total Annihilation, можно сравнить, что получилось.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14💊9😁4👍3👏3🤔2💯1🏆1🍾1🤓1🤝1
Замена Redis на MySQL в Shopify: устройство резервов и поиск дефицита соединений

На время оплаты Shopify резервирует товары, чтобы два покупателя не забрали последнюю единицу. Перенос резервов в MySQL позволил списывать товар и снимать резерв одной транзакцией. Но первые попытки упирались в конкуренцию за одну строку с количеством товара.

Команда завела строки для отдельных единиц, ограничив запас 1000 строк на товар и место хранения. SKIP LOCKED позволяет при резервировании пропускать заблокированные строки и выбирать свободные.

Запросы ускорились, но соединений всё равно не хватало. Метки в SQL-запросах и замеры на прокси показали: другие части оформления заказа удерживали соединения слишком долго. В разборе миграции Shopify есть эта диагностика, подбор ключей и уровня изоляции, а также проверка двух систем в параллельной работе.

#веб
❤5👎4🌚3🔥1😁1💋1👨‍💻1👀1🙈1🙊1👾1
Cookies удалены, а браузер всё ещё узнают

Удаление cookies не обязательно делает браузер новым посетителем для сайта. Автор этой демонстрации собирает его цифровой отпечаток и выдаёт по нему прозвище. Можно обновить страницу, удалить cookies или включить VPN и сравнить, изменится ли ник.

В ход идут результаты рисования через canvas и WebGL, обработки звука, язык, часовой пояс и характеристики устройства. Значения складываются в хеш. VPN меняет IP, но остальные признаки могут остаться прежними. По отдельности они встречаются у многих людей; сочетание помогает различать браузеры.

📎 Попробуйте на своём браузере и посмотрите, какие данные используются. Это упрощённое демо: изменение одного значения меняет отпечаток, а встроенная защита браузера может мешать распознаванию. Ник не доказывает, что вас однозначно узнают на всех сайтах.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥2🤔2💊2👍1🤩1💔1🤨1🤗1
Разработчик превратил Wi-Fi роутер в программируемый радиоприёмник

Автор написал собственную прошивку для радиочипа и научился получать с него сырые данные. Теперь можно открыть браузер и увидеть, что происходит в эфире на частотах 2,4, 5 и 6 ГГц. Правда, данных столько, что передавать их на компьютер приходится через Ethernet на 10 Гбит/с.

На демо он показывает сразу весь диапазон 2,4 ГГц: видны передачи Wi-Fi и короткие всплески сигнала. Частоту, усиление и фильтры можно менять прямо в интерфейсе.

Если захочется повторить, нужен именно Gemtek W1700K, USB-UART-адаптер и компьютер с Linux и сетевой картой на 10 Гбит/с. Учтите: установка заменяет штатную ОС роутера, а новая прошивка только принимает сигналы.

📎 Код, демо и инструкция
Please open Telegram to view this post
VIEW IN TELEGRAM
💊12👍4🤷‍♂3❤2👏1😁1💅1
Как метрики помогли найти ошибку в ИИ-оценщике размера видео

Cliparr обещал один размер видео, а после конвертации получался другой: в 16 замерах файлы оказались на 30–83% больше прогноза. ИИ написал формулу, которая уменьшала ожидаемый размер пропорционально высоте кадра, хотя при заданном битрейте расчёт должен опираться на длительность.

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

В материале есть код сбора метрик и настройка панели. Замеры идут из публичного браузерного конвертера, сами видео, имена файлов и адреса на сервер не отправляются.

#ии #веб
👏3🏆2⚡1❤1👍1🎉1🕊1🐳1👻1