Читать в телеге. Когда-то там были посты не только от меня.
Нормальные формы в БД
В одном (нерабочем) чате мимолетно промелькнуло упоминание нормальных форм БД. Я понял, что уже забыл вообще все, что связано с ними. Почитал определения — ничего не понял с первого раза. Посмотрел примеры — “а, ну да”. Но воспроизвести все 8 нормальных форм наизусть я даже после освежения их в памяти не смогу.
Как будто большую часть требований легко покрыть просто логичной группировкой (которая выводится из SRE и DRY): очевидно же, что хранить скидку на товар и телефон магазина в одной таблице — это дичь. Я не помню, чтобы в рабочем процессе хоть кто-то ссылался на нормальные формы и что это когда-то имело значение. Но допускаю, что не очень опытным разрабам эти моменты могут быть непонятны, так что, хоть и ежедневная ценность теории сомнительная, надо “набить руку” и все-таки эти формы изучить и понять.
При всем этом я видел, как в проде не выполнялась даже 1НФ, причем это решение выглядело плюс-минус адекватным. И это даже если исключить денормализацию ради поиска.
Спроектируй видеокарту с нуля
Песочницы OAuth
Очень простенькая песочница OAuth, где можно прокликать сценарии OAuth и в общих чертах понять их логику и какие данные в каком формате передаются между участниками.
И еще одна, где интерфейс немного перегружен, но чуть больше степеней свободы.
База про оптимизации компилятора
Отличная серия коротких постов про базовые оптимизации компилятора от создателя Godbolt (он же Compiler Explorer). Рассмотрены арифметические операции, циклы, ABI, инлайнинг, рекурсия и векторизация.
Мораль достаточно простая: не надо делать работу компилятора и мешать ему, но важно явно обозначать свои намерения. Например, если у вас логически положительное число, то и хранить его надо в беззнаковом типе — оптимизации будут лучше. При этом компилятор не всесилен, и узкие места надо проверять и измерять.
P.S. Навигация между постами странная, я сам не с первого раза нашел. Вот первый пост, для перехода ищите ссылку в курсиве после основного текста, но до сносок — моя баннерная слепота эту секцию заблокировала.
Физическая карта интернета
Детальная визуализация физической инфраструктуры: подводные кабели, датацентры, спутники и т.п.
Написание кода занимает малую долю времени разработчика
По разным оценкам, от 11 до 32%.
И это подтверждается несколькими исследованиями, вот относительно свежие:
- 2019, выборка почти 6 тыс. респондентов из Microsoft, опрос — 15%-18% (29-32%, если учесть отладку и багфиксы).
- 2021, выборка 250 тыс, телеметрия через IDE-плагин — 11% (52 минуты в день в среднем).
- 2024, 484 разработчика из Microsoft, опрос — 14% (11% на кодинг и 3% на рефакторинг).
Даже у работяг, прошедших в фаанг только полдня было занято кодингом:)
.new домены
На сессии группового программирования коллега создал новый Google Sheet с помощью sheet.new (не спрашивайте, как таблички связаны с программированием).
Это тупо редирект, но все равно прикольно и явно удобнее, чем заходить через Drive.
.new — это один из TLD-доменов Google, и там есть аналогичные “ярлыки” для прочих сервисов гугла. Но и другие компании имеют сайты на этом домене. Полный список ведет сам гугл. Все это появилось в основном в районе 2019 года, но я как-то пропустил. Набор довольно сомнительный, о большей части компаний у нас и не слышали, а достаточно заметное количество доменов уже не работают.
Что потенциально интересно/бросилось в глаза (кроме гугловских ссылок):
Шпаргалка по Gradle

Если надо быстро объяснить основные термины и суть, то вот неплохая страничка, которая весьма практично написана, без воды.
Новый движок для регулярок
Очень интересная статья про новый движок для регулярок.
Авторы изначально хотели поддержать возможность пересечения и дополнения регулярок (и в статье есть хороший пример с проверкой ограничений для пароля), но чтобы на статью обратили внимание, упоролись по производительности и получили еще хороший выигрыш по скорости по бенчмаркам, достигнув при этом линейной асимптотики (как я понял, ReDos не грозит).
Одним из открытий для меня стало, что в PCRE-регулярках (т.е. почти везде) (a|ab)+ и (ab|a)+ — не одно и то же, и варианты рассматриваются жадно слева направо. Из-за этого для aababaabab первая регулярка выдаст aa, а вторая — всю строку.
Пишите в поддержку
У меня как-то сложился стереотип, что писать куда-то с обращениями — это обычно спортлото. Но мне тяжело объяснить почему. При этом у меня есть успешные истории, расскажу о трех из них.
Первая — из 2016 года: попросил Мосгортранс перенести остановку трамвая — перенесли через пару недель! Через год-полтора вернули обратно, а сейчас ее уже вообще нет, но все равно результат был достигнут.
Вторая — прошлогодняя. Полугосушная программа выдавала ошибку, к счастью довольно подробную (0x3b56abcd != 0x3B56ABCD). Я искал варианты решения в интернете, пробовал ставить версии под другие ОС и т.п., в общем, пытался сам решить. Нашел что как-то через жопу можно сделать, что мне надо. Даже думал о том, чтобы отредактировать бинарник, чтобы эту проверку отключить. Чисто по приколу написал на почту. Причем не каким-то разрабам, а в контактный центр — т.е. в максимальную помойку. Во-первых, мне ответили! Отвечали мне с пингом в пару недель, и из серии “переустанови, перезапусти”. Но на третий раз, когда я им выслал логи, скриншоты и какую-то лабуду, они… сделали новую версию! И она РАБОТАЕТ.
Наконец, самая свежая. Пару лет назад выяснилось, что stale бот на GitHub реализован очень тупо: делает полный перебор всех тикетов вместо фильтрации. Ну, открыл им тикет, написал свой action (все равно сценарий отличался) и забыл. В октябре мой action стал регулярно падать с “Something went wrong”. Написал в поддержку, долго с ними бодался, потому что они меня газлайтили, что это мои запросы кривые, а не их инфра, которая, судя по всему, тоже делает полный перебор вместо фильтрации. Выдавил из них обещание “передать разработчикам”. А феврале все внезапно “починилось” и поддержка вскоре отписалась, что теперь все ок.
В общем, иногда в поддержку писать все-таки имеет смысл.