Заметки тимлида // Канал Саши Шутай

Description
Библиотека разработчика AGIMA: рассказываем про Backend, Frontend, аналитику, ML, DevOps и не только.

Больше материалов на Хабре: https://habr.com/ru/company/agima/blog/.

По всем вопросам: https://t.me/ashutay
Advertising
We recommend to visit
HAYZON
HAYZON
6,318,170 @hayzonn

💼 How to create capital and increase it using cryptocurrency

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 8 hours ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 week, 2 days ago

Новые и перспективные Web3 игры с добычей токенов.

Чат: https://t.me/Crypto_Wolf_Chat

Правила чата смотрите в описании чата.

Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118

По теме сотрудничества: @Zombini

Last updated 2 months, 3 weeks ago

1 month ago
**Как развивать лидеров внутри IT-команды и** …

Как развивать лидеров внутри IT-команды и команды и где искать сильных управленцев: https://clck.ru/3E2mGg.

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

Главные темы митапа:

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

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

Но мы не ограничимся только теорией, а попробуем сразу применить все инсайты на практике. Для этого устроим круглый стол с экспертами из X5, Альфа-Банка, Лемана Про, AGIMA и др., а затем закрепим знания на воркшопе с Алексеем Кельиным, исследователем и бизнес-тренером.

Также обещаем приятную атмосферу, вкусную еду, напитки и много нетворкинга. Подробности и обязательная регистрация — по ссылке выше.
Ждем СТО, руководителей IT-департаментов, IT-рекрутеров, IT-лидов и CPO — всех, кто отвечает за управление и развитие команд в IT.

Когда: 1 ноября, 17:30.
Где: оффлайн, Петровка, 19/4, офис AGIMA.
Регистрация: https://clck.ru/3E2mGg

3 months, 1 week ago

Как включение JIT в PHP 8 ускоряет парсинг CSV-файла
С выходом PHP 8 появилась одна из самых мощных функций — JIT компиляция. Эта технология позволяет значительно ускорить выполнение PHP-скриптов, компилируя код в машинные инструкции на лету. Одной из задач, где JIT может проявить себя особенно эффективно, является парсинг больших CSV-файлов.

Рассмотрим классическую задачу: у вас есть объёмный файл и вам нужно его обработать — например, просуммировать все транзакции выше определенной суммы.

Типичный код для решения этой задачи:

```

$file = fopen('large_file.csv', 'r');
$totalSum = 0;

if ($file !== false) {
fgetcsv($file);

while (($row = fgetcsv($file)) !== false) { $amount = (float)$row[2]; if ($amount > 1000) { $totalSum += $amount; } } fclose($file);

}

echo "Total sum of large payments: " . $totalSum . "\n";

```

Мы построчно обрабатываем файл, выполняем простую логику и добавляем сумму в общую. Если файл очень большой, то цикл будет исполнен много раз. Что в этом случае будет делать интерпретатор?

Интерпретатор PHP читает исходный код построчно и создаёт набор инструкций opcode. Opcode это не машинный код, а только набор инструкций для виртуальной машины Zend Engine. Затем виртуальная машина исполняет каждую инструкцию opcode последовательно, вызывая в режиме реального времени соответствующие операции на уровне системы.

При этом, когда интерпретатор Zend встречает в opcode цикл, он каждую итерацию заново интерпретирует и исполняет инструкции opcode.

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

Как JIT Ускоряет работу циклов

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

Как это отразится на нашей задаче обработке файла?

  1. Ускорение циклов: Основное время тратится на выполнение цикла, где каждая строка файла разбирается и обрабатывается. С JIT этот цикл будет выполняться быстрее за счет компиляции его тела в машинный код.

  2. Эффективность работы со строками: Функции, такие как fgetcsv, которые активно работают со строками и массивами, получают прирост в производительности благодаря JIT, за счет того что её не нужно интерпретировать на каждой итерации. Это особенно заметно, если в строке много столбцов или данные требуют интенсивной обработки.

  3. Уменьшение накладных расходов: Каждый вызов функции в PHP сопровождается определенными накладными расходами. JIT минимизирует эти расходы, поскольку часть функций может быть оптимизирована и выполнена быстрее на уровне машинного кода.

Настройка и включение JIT

Добавим в конфигурацию PHP:

```

opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=100M
opcache.jit=1255

```

Сравнение производительности: С JIT и Без JIT

Проведем небольшой эксперимент. Подготовим CSV-файл с 10 миллионами строк. Мы запускаем вышеуказанный скрипт — с включенным JIT и без него.

Без JIT: Среднее время выполнения 120 секунд.
С JIT: Средне время выполнения 80 секунд.

Получается, что включение JIT позволило сократить время на парсинг файла на ~33%.

Вопрос читателям: Использовали ли вы JIT для ускорения обработки данных в PHP? Какие результаты вы получили? Поделитесь своим опытом в комментариях!

3 months, 2 weeks ago

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

Например вы разработали систему для покупки билета на самолёт. Предположим у вас 3 сервиса: Оплата, Уведомление, Бронирование. Сервис успешно списал деньги, выслал уведомление о покупке, но возникла ошибка на этапе бронирования. Как вернуть всё в исходное состояние когда у нас 3 независимых сервиса? В монолитном приложении нас бы спасли транзакции ACID. А в случае с микросерисами - Саги.

Основная идея шаблона "Сага"

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

Принципы работы саги

1️⃣ Разбиение на шаги: Сага состоит из нескольких шагов (транзакций), каждый из которых выполняется в рамках одного микросервиса. В процессе покупки билета на самолёт, это могут быть шаги: списание средств, уведомление о списании, проверка доступности рейса и его бронирование.

2️⃣ Компенсирующие транзакции: Для каждого шага определяется компенсирующая транзакция, которая откатывает изменения в случае ошибки. Например, если возникла ошибка на этапе бронирования, то нужно его отменить и запустить компенсирующие транзакции для предыдущих шагов.

3️⃣ Асинхронное выполнение: Шаги в саге могут выполняться асинхронно. После успешного выполнения одного шага инициируется следующий. Если какой-либо шаг не удался, запускаются компенсирующие транзакции. Компенсирующее действие для этапа оплаты - вернуть средства. Для этапа уведомления - отправить новое уведомление с информацией, что бронирование не удалось.

Стратегии реализации саги

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

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

8 months, 1 week ago

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

#шутка

8 months, 2 weeks ago

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

Для тех кто не знаком с таким методом оценки, вкратце расскажу основные этапы:

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

2️⃣ Выбор единиц измерения: Согласовываются единицы измерения сложности задачи. Практично пользоваться числами Фибоначчи (1, 2, 3, 5, 8, 13 и т. д.). Они увеличиваются экспоненциально, что помогает подчеркнуть неопределенность оценки и уменьшить вероятность установки точных значений, в отличие от строгой оценки часами. Числа 1, 5 - это не 1 и 5 часов. Это некая абстрактная величина, например “вес” задачи, для сравнения с другими задачами;

3️⃣ Сессия игры в покер: Команда обсуждает задачу, её детали, задает вопросы и делает предположения. Затем каждый участник записывает оценку, которая, по его мнению, соответствует сложности задачи и скрывает ее от других. Это позволяет избежать влияния лидеров мнений и субъективных оценок;

4️⃣ Обсуждение и согласование оценки: После того как все участники записали свою оценку, они одновременно разглашают их. Как будто выкладывают свою карту в покере на игровой стол. Если оценки отличаются, задача считается не оцененной. Участники обсуждают причины различий, уточняют понимание задачи и повторяют сессию оценки. По итогу все члены команды должны согласовать оценку с которой согласен каждый.

В результате вы получаете полностью оцененный бэклог. И имеете согласие в команде относительно каждой задачи. Осталось конвертировать “вес” задачи в реальные трудозатраты. Если вы планируете покером первый раз, то потребуется провести экспертную оценку, чтобы сформировать матрицу сопоставления оценки покером с оценкой в трудозатратах.

We recommend to visit
HAYZON
HAYZON
6,318,170 @hayzonn

💼 How to create capital and increase it using cryptocurrency

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 8 hours ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 week, 2 days ago

Новые и перспективные Web3 игры с добычей токенов.

Чат: https://t.me/Crypto_Wolf_Chat

Правила чата смотрите в описании чата.

Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118

По теме сотрудничества: @Zombini

Last updated 2 months, 3 weeks ago