Как стать автором
Обновить
1
0
Напольских Артём @napolskih

Разработкик, архитектор, техлид бекенд систем

Отправить сообщение

Избегаем ада перекомпиляции в Elixir с помощью mix xref

Время на прочтение13 мин
Количество просмотров471

Elixir — удивительный язык, и для меня было огромной привилегией работать с ним уже более десяти лет (как летит время)!

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

Вы вносите несколько изменений в один файл в своей кодовой базе и нажимаете «перекомпилировать». Бум: Compiling 93 files (.ex). Затем вы вносите еще одно изменение и бум: Compiling 103 files (.ex).

Мы все через это проходили. У этой проблемы есть решение. Будет ли решение болезненным, зависит от того, как долго эта проблема оставалась нерешенной в вашей кодовой базе.

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

Почему это важно

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

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

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

Шаг 1: Обнаружение проблемы

Ну, обнаружить легко: вы меняете один модуль, и несколько перекомпилируются? Да, вы в аду перекомпиляции. Но как узнать, в каком круге ада вы находитесь?

Читать далее
Всего голосов 3: ↑3 и ↓0+5
Комментарии1

Отстаивание прав после дискриминации по национальному признаку в ЕС

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров16K

Привет, Хабр! Случаи увольнения людей «не с тем паспортом» или говорящих «не на том языке», или живущих «не там, где надо» сегодня, к сожалению, стали обыденностью. Хотя, строго говоря, всё это проявления дискриминации. В этой статье я на условиях анонимности расскажу историю своего знакомого, которому удалось добиться от работодателя в ЕС компенсации за дискриминационное увольнение. Подробностей и названия компании здесь не будет (таковы условия заключённой сделки), только алгоритм сработавших действий для получения компенсации.

Читать далее
Всего голосов 89: ↑79 и ↓10+95
Комментарии248

Как действовать, если незаконно увольняют с испытательного срока

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.3K

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

Читать далее
Всего голосов 41: ↑29 и ↓12+21
Комментарии56

OrbStack: Почему я забыл про Docker Desktop

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров34K

Работая на MacBook с Docker Desktop, я часто сталкивался с тем, что система становилась менее отзывчивой, особенно при запуске нескольких контейнеров одновременно. Высокая нагрузка на CPU и память заметно влияла на время автономной работы.

Но недавно я наткнулся на OrbStack, и это изменило мой рабочий процесс настолько, что я решил поделиться своим опытом. Спойлер: теперь мой MacBook не превращается в печку, батарея держится дольше, а Docker-контейнеры летают.

Читать далее
Всего голосов 58: ↑56 и ↓2+61
Комментарии110

Как мы в Delivery Club outbox оптимизировали

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.7K

Привет, Хабр! Решил написать небольшую, техническую статью, о том, как мы ускорили запрос в таблицу, до которой не доходил autovacuum из-за большой нагрузки на БД примерно в 200 раз, а разгребание outbox очереди — ещё примерно в 3 раза.

Читать далее
Всего голосов 8: ↑7 и ↓1+12
Комментарии7

Что делать, если выгорела половина команды, бизнес встал, а вам не хочется ничего делать?

Время на прочтение9 мин
Количество просмотров7.6K

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

Как говорится - в любой шутке есть доля шутки. Давайте поговорим про выгорание в команде. Про то, как стать максимально продуктивным, перестать выгорать и в целом избавиться от ощущения «опять эта работа».

Меня зовут Евгений Идзиковский. Я начинал аналитиком, продолжил IT-карьеру в Radmin’е, а затем кардинально сменил профессию. Сейчас я — психолог и «депрограммирую» людей от того, что им мешает жить. На досуге, отдыхая от депрограммирования, пишу нейросети на R и изучаю Python.

Читать далее
Всего голосов 20: ↑17 и ↓3+20
Комментарии20

Сокращения в ВК. Не удавшийся performance review?

Время на прочтение5 мин
Количество просмотров26K

Весь 2023 год компания «ВК» активно расширяла штат сотрудников. Из пресс-релиза компании за декабрь 2023 следует, что каждый 4-й сотрудник устроился в неё в 2023 году.

Что обычно происходит с IT-компаниями после такого бурного роста? Они проводят сокращения.

Читать далее
Всего голосов 98: ↑90 и ↓8+108
Комментарии33

Экстренная реанимация epmd

Время на прочтение3 мин
Количество просмотров9.4K
(Проблема, по всей видимости, чрезвычайно экзотическая, но в плане «как оно внутри устроено» достаточно познавательная.)

Вот, допустим, работает у вас приложение, написанное на Эрланге (ну, скажем, тот же ejabberd). Давно работает, хорошо работает, но в один прекрасный день вы пытаетесь запустить управляющий скрипт (ejabberdctl, соответственно), а он вам выдает «nodedown» или еще что-нибудь страшное в этом духе, мол, не отзывается никто. При этом само приложение прекрасно отзывается на все клиентские запросы и слыхом не слыхивало о том, что оно down. По внезапному наитию вы запускаете epmd -names и — о, ужас! — получаете пустой список.

Программы на Эрланге используют для связи между собой нотацию node@host, физически же каждый узел (читай — системный процесс) открывает для этого случайный высокий порт. Задача сервиса epmd — связать между собой логическую адресацию по имени и физическую адресацию по номеру порта. Своего рода аналог DNS, с той разницей, что без реестра epmd кластер на Эрланге разваливается на кучку отдельных глухонемых узлов — что у нас только что по какой-то загадочной причине и произошло. Можно, конечно, начать искать виновных, но сначала все-таки неплохо бы поднять систему на место.

Что в такой ситуации делать? Можно, конечно, просто насильно перезапустить приложение, но, с одной стороны, клиенты отвалятся, с другой, такой красивый uptime жалко… Вот если б можно было как-нибудь восстановить реестр на живой системе, а?..

Читать дальше →
Всего голосов 7: ↑6 и ↓1+5
Комментарии12

WhatsApp, Discord и как организовать одновременную коммуникацию для миллионов пользователей

Время на прочтение10 мин
Количество просмотров5K

Я фулстек-разработчик, индивидуальный предприниматель. По моему опыту, один из самых востребованных классов проектов, за разработкой которых к нам обращаются, — приложение для работы в режиме реального времени. Конечно, вам такие приложения известны: WhatsApp, Discord, Slack, т.д. При разработке приложений для работы в режиме реального времени следует учитывать различные факторы, в частности, масштабируемость, отказоустойчивость, отзывчивость и распределённость. Это задача не из лёгких, в особенности для небольшой команды или разработчика‑одиночки.

Но что если бы я вам сказал… что можно создавать приложения для работы в режиме реального времени, которые можно масштабировать более чем на миллион пользователей силами всего нескольких разработчиков? К тому же, такие приложения можно было бы развёртывать почти без задержек и ценой минимальных затрат. Здесь я имею в виду, что для этого нужно освоить секретное оружие под названием «Виртуальная машина Erlang» или BEAM (Абстрактная машина Богдана/Бьёрна для языка Erlang).

Читать далее
Всего голосов 10: ↑8 и ↓2+8
Комментарии1

Сотрудники ВК объединяются против компании на фоне увольнений

Время на прочтение2 мин
Количество просмотров109K

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

Читать далее
Всего голосов 166: ↑149 и ↓17+178
Комментарии316

Контрактные тесты с Pact: гарантия стабильности микросервисов

Время на прочтение21 мин
Количество просмотров1.6K

Привет! Меня зовут Юрий, я старший разработчик в Купере в команде Ruby Platform, занимающейся разработкой внутренних библиотек, инструментов мониторинга и поддержки микросервисов.

У нас в Купере более 200 микросервисов на разных стеках, а также монолиты. С точки зрения инфраструктуры интеграционное тестирование такого количества компонентов - довольно затратная задача, но при этом хочется обеспечить стабильность системы, не проводя ручные интеграционные регресс-тесты. В таких условиях оптимальным решением являются контрактные тесты.

Из данной статьи вы узнаете:

- общий принцип работы контрактных тестов;

- о проблемах, с которыми мы столкнулись при внедрении контрактного тестирования и как их решали;

- как мы разработали свое решение для контрактного тестирования Ruby-приложений;

- о настройке CI/CD для автоматизации контрактных тестов.

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

Читать далее
Всего голосов 17: ↑17 и ↓0+21
Комментарии3

Как я управляю временем, чтобы все успевать: адская смесь Time Blocking, Pomodoro и дофаминовых циклов

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров52K

Привет! Я Женя, CPO в корпоративном мессенджере Compass. Было бы круто управлять временем, как в старенькой TimeShift, в которой я зависал в 2008 году, но нет. Зато можно поностальгировать, глядя на скриншоты.

Сегодня расскажу о своём подходе к планированию и тайм-менеджменту, который помогает не выгорать и справляться со всеми рабочими задачами.

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

Поэтому мне пришлось подтянуть теорию и найти свое удобное решение.

Читать далее
Всего голосов 47: ↑42 и ↓5+45
Комментарии46

Майкл Стоунбрейкер: «Всё новое — это хорошо забытое старое. Продолжение»

Время на прочтение40 мин
Количество просмотров5.3K

От редакции: Майкл Стоунбрейкер - один из самых известных в IT мире ученых и отец-основатель Postgres. В соавторстве с Энрю Павло, недавно опубликовал большой обзор всех актуальных технологий систем управления базами данных. В этом материале — подробно обо всем, что произошло в мире баз данных за последнее время, а также прогнозы. Мы посчитали что нельзя лишать нашу аудиторию возможности ознакомиться с этим обзором, поэтому подготовили данный перевод.

Читать далее
Всего голосов 23: ↑23 и ↓0+31
Комментарии2

Почему я предпочитаю исключения, а не значения ошибок

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров24K

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

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

Давайте рассмотрим пример, в котором применено защищённое от ошибок целочисленное деление:

int safeDiv(int a, int b) {
   if (b == 0)
      throw Div0(); // Исключения передаются особым образом
   return a / b; // Теперь-то всё абсолютно безопасно, ведь так?
}

Новые языки программирования склонны применять сообщения об ошибках в функциональном стиле и кодировать ошибки в возвращаемый тип. Например, Go кодирует ошибку в возвращаемый тип при помощи кортежа (res, err), а Rust возвращает Result<T, E> — тип-сумму результата и ошибки.
Читать дальше →
Всего голосов 65: ↑57 и ↓8+67
Комментарии214

10 возможностей современного Tarantool, о которых вы могли не знать

Время на прочтение9 мин
Количество просмотров4.2K

В прошлом году Tarantool исполнилось 15 лет. Он прошел долгий путь от обычного кэша до платформы управления данными с десятками разных внутренних продуктов и расширений. Такое обилие инструментов создает множество возможностей — и в этой статье мы расскажем о десяти, о которых многие забывают или попросту не знают.

Читать далее
Всего голосов 31: ↑31 и ↓0+37
Комментарии8

Apache Avro — на светлой стороне Кафки

Уровень сложностиСложный
Время на прочтение5 мин
Количество просмотров6.3K

Добрый день, Хабр!

Меня зовут Сергей Игнатенко, я — девлид в поезде «Операционная платформа» ВСК. Хочу сегодня рассказать об опыте использования SchemaRegistry и Avro в Kafka.

Начну с базовой схемы работы с Kafka, которая, возможно, будет знакома многим, но важна для понимания контекста.

Принцип работы прост: продюсер отправляет сообщение в Kafka, где оно размещается в очереди. Далее один или несколько консюмеров считывают это сообщение.

Читать далее
Всего голосов 7: ↑6 и ↓1+8
Комментарии11

B-Tree индекс и его производные в PostgreSQL

Время на прочтение18 мин
Количество просмотров43K

Меня зовут Азат Якупов, я люблю данные и люблю использовать их в разных задачах. Сегодня хочу поделиться своим опытом относительно B-Tree индексов в PostgreSQL. Рассмотрим их топологию, синтаксис, функциональные B-Tree индексы, условные B-Tree индексы и включенные B-Tree индексы.

Читать далее
Всего голосов 23: ↑23 и ↓0+23
Комментарии0

REDIS: такой простой и такой сложный

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров23K

Меня зовут Андрей Комягин, я СТО компании STM Labs. Мы занимаемся разработкой очень больших распределённых высоконагруженных систем для различных отраслей и в своей работе широко используем open-source решения, в том числе СУБД Redis. Недавно я подробно рассказывал об этой системе на конференции Saint HighLoad++, а теперь с удовольствием поделюсь основной информацией с читателями Хабра. Итак, поехали.

Читать далее
Всего голосов 50: ↑49 и ↓1+60
Комментарии28

Как максимально сконцентрироваться на работе

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров15K

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

Читать далее
Всего голосов 11: ↑9 и ↓2+7
Комментарии7

DuckDB. Колоночная OLAP СУБД в кармане

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.9K

Привет, меня зовут Антон, я старший инженер в департаменте аналитических решений ЮMoney. В компании мы используем технологию MSSQL OLAP-кубов SSAS, которая хорошо себя зарекомендовала — она сравнительно легко развёртывается и достаточно производительная. Но есть ряд минусов: Microsoft прекратил развивать её примерно в прошлом десятилетии, технология требует производительных серверов, ну и, конечно, вопрос зависимости от иностранного вендора тоже стоит остро. Поэтому, посматривая по сторонам в поисках альтернативы, я решил попробовать недавно появившуюся технологию DuckDB. Особых надежд не было, но хотелось понять, на каком она уровне по сравнению с привычными для меня инструментами. 

Читать далее
Всего голосов 10: ↑10 и ↓0+13
Комментарии19
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность

Специализация

Backend Developer, Software Architect
Lead
От 500 000 ₽
High-loaded systems
Ruby
Designing application architecture
PostgreSQL
Database
Redis
Elasticsearch
Ruby on Rails
SQL
REST