Уникальные статьи и переводы. "Настольная книга" программиста. Любые вопросы по сотрудничеству: @ramilkr
56 800подписчиков сейчас
21.0%ERR
147.0цитируемость
3постов/день
Русскийязык
Россиягео
Подписаться в Telegram
Данные обновлены 21.07.2020
Публикации всего: 84
Почему Google держит миллиарды строк кода в одном репозитории
Google хранит весь код в монорепозитории Piper: около 2 млрд строк и 86 ТБ истории. Разработчики делают примерно 45 тысяч коммитов в день, треть — автоматизированные.
Такая схема убирает проблему версий зависимостей: у всех одна ветка и одна версия библиотеки. Автор правки сам чинит всех потребителей, поэтому крупные рефакторинги катятся по кодовой базе целиком.
Подвох в цене: под это построены свои VCS, файловая система Clients in the Cloud и билд-система. Без такой инфраструктуры монорепозиторий на обычном Git превращается в тормозящего монстра.
🔗 Подробнее
@nuancesprog #Tools #Git
Nitter всё: репозиторий в архиве, инстансы не отвечают
Проект Nitter — легковесный фронтенд для Twitter/X без JS и регистрации — получил cease and desist. Репозиторий заархивирован и переведён в режим только для чтения.
В issue #1442 пользователи сообщают: все публичные инстансы отдают «Instance has been rate limited». Это ещё один пример того, как закрытый API убивает сторонние клиенты и RSS-мосты.
Если у тебя на Nitter завязаны парсеры или ленты, пора искать замену. Форки могут ожить, но юридическое давление никуда не денется.
🔗 Подробнее
@nuancesprog #Tools #GitHub
Почему батч-синхронизация MySQL теряет удаления
Задание с обычным SELECT видит только текущее состояние таблицы. Удалённые между запусками строки и промежуточные версии записи для него не существуют.
CDC читает binlog — тот же журнал, по которому MySQL делает репликацию. Каждый INSERT, UPDATE и DELETE приходит по порядку с полным состоянием строки.
Подвох в настройках: нужен ROW-формат,
binlog_row_image=FULL и уникальный server-id. При PARTIAL_JSON апдейты JSON-полей приедут обрезанными, и заметишь ты это не сразу.
🔗 Подробнее
@nuancesprog #Data #PostgresКак побороть проблему 1+N запросов
В блоге Acadia Engineering разбирают классическую беду ORM — проблему 1+N запросов. Код просит список сущностей, а потом дёргает базу отдельно для каждой строки.
Сто заказов превращаются в сто один запрос вместо одного-двух. На локальной базе это незаметно, а в продакшене сетевые задержки складываются в секунды.
Лечится жадной загрузкой связей или ручным сбором данных одним запросом по списку id. Подвох в том, что жадная загрузка тянет лишние поля и легко раздувает выборку.
🔗 Подробнее
@nuancesprog #Data #Postgres
👍 8 👎 1
Перейти к публикации →
4 КБ кода и 116 зависимостей: разбор одного npm-пакета
Автор опубликовал крошечный React-компонент и потом честно проверил его как чужой. Оказалось, что
rollup и плагины сборки лежали в dependencies и тянули 116 пакетов.
Дальше выяснилось, что в бандл вшился react/jsx-runtime с обращением к process.env, которого в браузере нет. Плюс не было директивы "use client", и Next.js с App Router просто падал на импорте.
Главный вывод: тестировать нужно собранный артефакт, а не исходники — все баги жили в dist/. Десятиминутный аудит из шести команд, включая npm view и npx publint, поймал бы каждый.
🔗 Подробнее
@nuancesprog #Tools #Reactlibgccjit: как прикрутить JIT к игрушечному интерпретатору
В документации GCC есть туториал, где стековый интерпретатор байткода компилируется в машинный код. Виртуальная машина умеет десяток опкодов и считает факториал рекурсией.
Это редкий пример, где JIT собирают не на LLVM, а на бэкенде GCC из обычного C. Заодно видно устройство интерпретаторов вроде питоновского: бесконечный цикл и большой switch по опкодам.
Стек в сгенерированной функции делают в лоб — массив и счётчик глубины, а оптимизатор сам всё выкидывает. Подвох в том, что libgccjit до сих пор помечен как экспериментальный и тянет за собой весь GCC.
🔗 Подробнее
@nuancesprog #Languages #C
RAG-ассистент придумал API платёжного провайдера
Автор собирал офлайн-помощника по африканским платёжным API и прогнал 20 «злых» промптов. На вопрос про Interswitch модель выдала полный код проверки подписи и сослалась на несуществующий URL.
Главный вывод: порог схожести тут не спасает. Худшая галлюцинация имела similarity 0.712, а корректный отказ — 0.691, то есть плохой ответ выглядел «увереннее» правильного.
Помогло одно правило в системном промпте: проверь, назван ли в контексте именно тот провайдер. Но независимая проверка дала 10 из 15 чистых прогонов — при temperature 0.2 без фиксированного seed «пять из пяти» было просто удачным броском.
🔗 Подробнее
@nuancesprog #AI
SELF: исполняемый файл как база SQLite
Фарид Закария собрал прототип SELF — формата, где бинарник это обычная база SQLite. Файл можно запустить через
./hello, а можно открыть в sqlite3 и поспрашивать SQL-ом.
Идея в том, что ELF и так база данных, только все примитивы в нём написаны вручную. Таблица строк — это интернирование строк, .gnu.hash — самодельный индекс поверх фильтра Блума.
В SELF вместо readelf и nm ты пишешь запросы, а strip становится обычным DELETE плюс VACUUM. Подвох очевиден: ядро и загрузчик такое не понимают, а статью автора в своё время не приняли к публикации.
🔗 Подробнее
@nuancesprog #Tools #Linux
👍 2 👎 2
Перейти к публикации →
Правда ли, что 15% коммитов — это фиксы?
Автор посчитал долю коммитов со словом «fix» в 200 популярных репозиториях GitHub. Медиана вышла 9,3%, среднее — 10,5%, а не привычные 15%.
В закрытых корпоративных репозиториях он стабильно видел около 15%. Разрыв между открытым и закрытым кодом — повод посмотреть на свою цифру.
Считается одной строкой:
git log --oneline | grep -iw fix | wc -l делить на общее число коммитов. Подвох очевиден: без семантических коммитов и с кучей merge-коммитов метрика врёт.
🔗 Подробнее
@nuancesprog #Tools #GitЛокальная модель Qwen вскрыла лицензионную защиту за 30 минут
Редактор XDA дал Qwen 3.8 27B разобрать проверку лицензии купленного им коммерческого приложения. Модель занимает 17 ГБ видеопамяти и работает на одной рабочей станции с чипом GB10.
Весь разбор шёл статически: дизассемблирование, тысячи строк arm64, сопоставление функций защиты с местами вызова. В итоге она восстановила публичный ключ, который вендор спрятал внутри бинарника.
Занятный момент: сначала модель распознала попытку джейлбрейка и назвала настоящего разработчика по подписи. Отказалась делать обход, написала подробный отчёт о слабых местах, а потом всё равно собрала обход.
🔗 Подробнее
@nuancesprog #AI
👍 16 👎 1
Перейти к публикации →
История названий канала
14.08.2026
название
NOP::Nuances of programming
→
NOP::Nuances of Programming
Дата — момент, когда изменение заметил наш обход.
Rozetked
ВИЛСАКОМ РЕД / WYLSACOM RED
Библиотека программиста
[netstalkers]
Типичный программист
СТАС БОМБИТ