Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
Selective Test Execution at Stripe: Fast CI for a 50M-line Ruby monorepo
Очередная статья, в которой компания описывает, как решала проблемы в технической системе. Сегодня страйп, который сделал один из самых больших руби монорепозиториев (50+ миллионов строк). А возникшая проблема — как перестать гонять миллионы тестов на каждый PR. Спойлер: написали собственный анализатор измененных файлов, на основе которого запускаются только нужные тесты. Мне тема интересна, потому что в топтале (когда я там работал), тесты гонялись полчаса в 60+ потоков. А для решения похожей проблемы для подобной проблемы использовались сети петри.
Текст начинается с описания проблемы: 50к сборок в неделю, 1.2 миллиона тестов, каждый раз гонять такое количество тестов возможности нет. Для решения проблемы в компании решили построить граф зависимостей, основанный на том, какие файлы вызываются во время прогона тестов (единственный способ для руби из-за «динамичности»). Сделали это с помощью библиотеки на с++, которая перехватывает «открытые» файлы на уровне ОС. Далее описываются корнер кейсы: что делать с тестами, которые только ищут файлы, что делать с областью видимости, как работает планировщик и выбирает тесты для нового кода. В конце описывается, где хранится мета по тестам (спойлер: в монге) и как хранятся «релизы».
#how_it_works #testing
—————————————
Математический анализ для разработчика: что действительно нужно понимать
В институте проходил и матанализ и линал, в реальной жизни пригодился только линал (матрицы, вектора и пересечения плоскостей). А вот с матанализом не срослось, мозги вправило, но неопределенные интегралы, градиенты и любые эпсилоны больше нуля так и остались воспоминанем. Статья выше — попытка предположить, где абстракции из матанализа могут помочь в анализе кода.
Так, автор начинает с области видимости функции. В качестве примера используется функция
1/x, которая не определена в точке 0, что приводит к ошибкам. Далее рассказывается о пределах, который привязывается к bigO. После рассматривается непрерывность и производные. Причем производная привязывается к определению «скорости» роста метрик (latency в случае текста). Далее рассматривается приближения и разложения Тейлора (когда сложная функция раскладывается на бесконечную сумму степенных функций) и многомерный анализ. Хоть текст написан нейронкой (уверен на 90%), статья дает повод подумать о том, где и как использовать абстрактные понятия в работе.#math
—————————————
How to Pick a Database for Your System \(Without Guessing\)
Еще одна статья о том, как выбирать базу данных, на основе требуемых свойств. В отличии от других статей, упоминавшихся в канале, автор решил выбирать по PACELC, а не CAP. Хотя текст и начинается с объяснения CAP теоремы, автор приходит к обсуждению ситуации, при которой availability и consistency не достижимы одновременно. Благодаря этому происходит переход к PACELC. А после показывается как выбирать между 6 бд (упоминается кассандра, монга, постгрес, редис, динамоДБ и cockroachDB). Для этого автор предлагает в основе выбора использовать характеристики из PACELC и вид бд. А в качестве дополнительных критериев — internal mechanisms и юзкейсы каждой из бд.
#db