Viacheslav Smirnov
Привет всем! Готовлюсь записывать короткие видео и демо, связанные с производительностью. Раньше уже брался, но бросал. Поэтому сейчас нужен public commitment, надо пообещать что сделаю. Это обещания-пост. А начал с того, что пересмотрел набор инструментов…
А по sitespeed будешь пилить?
❤1
Заметил что у YouTube канала появились подписчики, хотя там нет никаких обновлений. Вот авторы, подходы которых посмотрел, тут есть обновления:
Anton Putra⏺ 106 тыс. подписчиков ⏺ 274 видео
A Life Engineered⏺ 177 тыс. подписчиков ⏺ 126 видео
James Willett⏺ 6,11 тыс. подписчиков ⏺ 46 видео
Alek OS⏺ 279 тыс. подписчиков ⏺ 64 видео
Лёша Корепанов⏺ 224 тыс. подписчиков ⏺ 153 видео
Software Engineering With Scott Moore⏺ 306 тыс. подписчиков⏺ 628 видео
Federico Terzi⏺ 9,04 тыс. подписчиков⏺ 43 видео
Anton Putra
⏺ готовит в каждому видео тестовые стенды в AWS⏺ бенчмарки на Go и Python к каждому видео https://github.com/antonputra/tutorials/tree/main/lessons⏺ демонстрирует графики Grafana⏺ использует анимированные слайды с темным фоном, на слайдах оставляет место в правом нижнем углу, чтобы потом вставить туда круг с видео⏺ если показывает рабочий стол или среду разработки или браузер, то не накладывает кружок с видео на демо
A Life Engineered
⏺ делает много экспериментов⏺ использует профессиональный звук и свет, так как занимался музыкой отдельно, использует профессиональное оборудование⏺ использует полноразмерные слайды или слайды на половину экрана, использует разделение экрана на две равные части⏺ использует сложный монтаж, где включает стоковое видео в ролик, собирает историю из кусочков стокового видео⏺ возможно использует услуги специалиста по монтажу
James Willett
"ретроспективный" канал от создателя лучших курсов по Gatling:⏺ можно видеть как 5 лет назад он использовал простой монтаж и только демонстрацию экрана⏺ как два года назад он использовал маркерную доску и несколько камер с несложным монтажом⏺ как он начал использовать screen.studio год назад
Alek OS
⏺ использует много анимации и демонстрацию экрана⏺ не использует видео с рассказчиком, использует только голос, демонстрацию экрана и анимацию
Лёша Корепанов
⏺ иногда использует видео с собой но с разных локаций, которые склеивает в один рассказ⏺ чаще использует видео из одной локации и позции⏺ снимает на камеру⏺ добавляет небольшие вставки с кодом или сайтами⏺ не использует сложные анимации и эффекты
Software Engineering With Scott Moore
⏺ использует какое-то популярное решение для записи demo, может быть camtasia или prezi для наложения слайдов на видео⏺ использует хромокей и анимированный фон, анимированный фон его фишка⏺ снимает на GoPro и не использует сложное оборудование и свет
Federico Terzi
⏺ использует несложный монтаж с borumi
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Знаете ли вы, что некоторые инструменты профилирования сделаны почти в одиночку или очень малой командой?
Привет всем! Часто использую инструменты профилирования JVM, иногда завожу дефекты или разбираюсь в исходном коде инструментов, и так ближе знакомлюсь с создателями, и заметил вот такую особенность — команды проектов небольшие
💡 Если есть мысли сделать инструмент для себя, то можно начать в одиночку и даже развить проект до коммерческого продукта
Некоторые оценки размеров команд:
Некоторые источники:
Привет всем! Часто использую инструменты профилирования JVM, иногда завожу дефекты или разбираюсь в исходном коде инструментов, и так ближе знакомлюсь с создателями, и заметил вот такую особенность — команды проектов небольшие
Некоторые оценки размеров команд:
⏺ YourKit Java Profiler поддерживается примерно тремя людьми, но это не точно⏺ JProfiler поддерживался одним человеком (я пока только один контакт нашел)⏺ jvm-tools/sjk активно поддерживается одним человеком, на github есть 26 участников проекта⏺ AsyncProfiler судя по коммитам создавался двумя инженерами, потом долго-долго поддерживался одним инженером, и теперь в разработке участвуют 4 человека⏺ VisualVM активно разрабатывается тремя инженерами, но всего 7 участников на github⏺ Java Mission Control, где JFR используется как бекенд, активно разрабатывали около 20 человек, и 49 участников проекта есть на github⏺ Grafana Pyroscope или Pyroscope, где AsyncProfiler используется как бекенд, имеет более 10 активных разработчиков и 221 участников на github
Некоторые источники:
⏺ YourKit Java Profiler: https://www.yourkit.com/forum/ — посмотрел на тех, кто отвечает на вопросы, заглянул в контакты на сайте и на linkedin⏺ JProfiler: https://www.ej-technologies.com/company — посмотрел на контакты и на linkedin⏺ jvm-tools/sjk: https://github.com/aragozin/jvm-tools/graphs/contributors оценил по github⏺ AsyncProfiler: https://github.com/async-profiler/async-profiler/graphs/contributors⏺ VisualVM: https://github.com/oracle/visualvm/graphs/contributors⏺ Java Mission Control: https://github.com/openjdk/jmc/graphs/contributors⏺ Grafana Pyroscope: https://github.com/grafana/pyroscope/graphs/contributors
Please open Telegram to view this post
VIEW IN TELEGRAM
Ej-Technologies
ej-technologies - Company
Imprint for ej-technologies with management, address and contact information.
👍11
OnePager — стартовая точка для мониторинга, как продукта
Привет всем! Создаю, внедряю, применяю мониторинг производительности. И замечал, что мониторингом активно не пользовались
💡 Если подходить к мониторингу как к продукту, то такой продукт может начинаться с одной основной страницы, с которой пользователь может по ссылкам перейти на более детальные страницы
Привет всем! Создаю, внедряю, применяю мониторинг производительности. И замечал, что мониторингом активно не пользовались
Создать такой one pager и провести онбординг пользователей для такой страницы — важная и не самая очевидная задача
Где-то такую страницу называют Иконостас. Это страница Grafana с отражением статусов и основными графиками:
🟦🟦🟥🟦
🟦🟥📉📈
📊📈🟦🟦
🟦🟦🟥🟦
Я пробовал создавать много досок с большим количеством графиков и таблиц:
📊📈📉📈
🗂📊📊📊
🗂📈🗓📉
Это сложно читать и она может медленно грузиться
Пробовал доски с интерактивными диаграммами:
🖼🖼🖼🖼
📊📈📉📈
🗓📉🗓📉
Это круто, но почти никто не кликает по частям диаграмм — это неочевидно, что они интерактивные и по ним можно кликать.
Пробовал создавать страницу только со статусами:
🟦🟦🟥🟦
🟦🟥🟥🟦
и ссылками на детали при клике по статусам. Но видимо не хватило разнообразия статусов на такой доске. На моей версии пока только статусы по загрузке страниц, и нет запросов или подсистем или системных метрик или транзакций или чего-то ниже уровнем, чем страницы. Такой высокий уровень, возможно, слишком высокий. И не хватает деталей
А самую популярную доску мониторинга в мире — Node Exporter Full
https://grafana.com/grafana/dashboards/1860-node-exporter-full/
не считаю удачным примером one pager-а. Она конечно умещается в одну страницу, но она довольно большая и сложная. Она изначально компактная за счет строк (row). Но если строки раскрыть, то там много деталей. Безусловно, такой формат распространения очень удачный — достаточно установить одну доску, и все сразу видно. Но добавляется сложность⏺ Буду пробовать делать что-то между просто статусами со ссылками и большим количеством графиков⏺ И попробую посмотреть, что пользователи делают на доске и что ждут от мониторинга. Пользователи — коллеги
Please open Telegram to view this post
VIEW IN TELEGRAM
Grafana / Inspect / Query / Refresh позволяет перезагрузить одну панель на доске Grafana
Привет всем! Бывало такое, что у вас не загружается доска Grafana и показывает пустую панель со значком предупреждения вверху⚠️ ? А минуту назад все работало. Или бывало что часть панелей загрузилась, а часть показывают предупреждение?
Чаще всего хочется просто перезагрузить доску. Но если это проблема производительности хранилища метрик, то перезагрузка просто повторяет ситуацию множесвенной отправки запросов. И хотелось бы перезагрузить только сбойные панели
💡 В контекстном меню каждой панели можно найти пункт Inspect / Query, где будет кнопка Refresh, для перезагрузки только текущей панели. Это можно делать несколько раз, пока панель не загрузится успешно
Привет всем! Бывало такое, что у вас не загружается доска Grafana и показывает пустую панель со значком предупреждения вверху
Чаще всего хочется просто перезагрузить доску. Но если это проблема производительности хранилища метрик, то перезагрузка просто повторяет ситуацию множесвенной отправки запросов. И хотелось бы перезагрузить только сбойные панели
А кеширующий прокси-сервер между Grafana и хранилищем метрик позволяет решить проблему для более общего случая, в котором и обновление страницы дозагружает только сбойные панели
Большинство хранилищ метрик и логов доступны по HTTP и подключаются к Grafana по HTTP. Поэтому можно выставить вместо цепочки:⏺ Grafana => Хранилище
Цепочку:⏺ Grafana => Nginx => Хранилище
Так для InfluxDB использовал Nginx вот с такой конфигурацией:⏺ https://gist.github.com/polarnik/cb6f22751e8d1590342198609243c529
Тут ключевые настройки были такие
Кеш на 20 минут в секции http { ... } :⏺ proxy_cache_path /data/nginx/cache keys_zone=mycache:20m max_size=1g inactive=60m;
Указание этого кеша в http { server { location /query { ... } } } :⏺ proxy_cache mycache;⏺ proxy_cache_key "$host-$request_method-$request_uri";⏺ proxy_cache_min_uses 1;⏺ proxy_cache_methods GET;⏺ proxy_ignore_headers Cache-Control;
игнорирование настроек кеширования от самого хранилища метрик тут обязательно, хранилище метрик будет говорить, что кешировать ответ не надо. Но если выбрать статический интервал времени:⏺ 00:00:00 ... 12:00:00
но не динамический:⏺ now-12h ... now
то кеширование будет успешно работать, потому что request_uri не изменится
Если хранилище метрик подключено к Grafana через POST-метод, то тогда в настройках кеширования можно указать:⏺ proxy_cache_key "$host-$request_method-$request_uri-$request_body";⏺ client_body_in_single_buffer on;⏺ client_body_buffer_size 64k;⏺ proxy_cache_methods GET POST;
Так как Nginx не будет выполнять авторизацию доступа к данным из кеша, то надо будет настроить Firewall так чтобы только IP-адрес Grafana Server имел доступ до Nginx Proxy. В этом случае авторизацию выполняет Grafana, и пользователи имеющие доступ до хранилища метрик там будут иметь доступ и кешу
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня собрал нагрузочный pipeline, где объект тестирования готовится с помощью Java Test Containers (Docker)
https://java.testcontainers.org/
TL;DR; Простые варианты использования в Java Test Containers работают — монтирование файлов, переменные окружения, запуск, остановка
Библиотека дала возможность сделать микро-стенды для тестов, которые на каждую сборку собираются в CI
https://java.testcontainers.org/
TL;DR; Простые варианты использования в Java Test Containers работают — монтирование файлов, переменные окружения, запуск, остановка
Для всего остального есть Java. Если что-то не описано в документации библиотеки и не работает, то оно не заработает, скорее всего
Мне надо было обложить приложение разными агентами мониторинга. Агенты бывают для x64, arm64, musl, windows, … Я думал, что напишу в коде Dockerfile RUN IF … проверю переменные окружения и настрою то, что нужно. Это не работаем если контейнер собирает библиотека testcontainer, а не команда docker build
Если сделать слои и в каждом слое подготовить нужный агент, то команда копирования из слоя не работает для testcontainer
Но простая команда монтирования внешнего файла работает отлично. Поэтому всю сложную логику (какой агент выбрать, для какой архитектуры, …) делает Java, и потом монтирует нужный файл в оригинальный контейнер с приложением
Библиотека дала возможность сделать микро-стенды для тестов, которые на каждую сборку собираются в CI
⏺ в BeforeAll запустить небольшую систему и мониторинг к ней⏺ в другом BeforeAll дождаться старта⏺ нагрузить систему⏺ проверить assertion-ы⏺ в AfterAll все остановить и удалить
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
BSOD на Mac розовый 🩷
Отлаживаю тесты производительности локально, и так как на ноутбуке 64 гигабайта памяти, думал что смогу запустить и браузеры и среду разработки и контейнеры с системой и все все
Если запустить все все и запустить еще и нагрузку, так что и сервисы и тест начнут логи писать с огромной скоростью в консоль, то можно получить розовый экран и перезагрузку
Получил🔤 🔤 🔤 🔤 уже трижды, поэтому выключил все 🥰 😌 💻 , оставил только Terminal — так работает отлично
Думаю что самой странной идеей было выставить лимит в💻 на 500k строк в консоли с подсветкой, и запустить в трёх вкладках разные процессы, которые пишут логи неистово. И одновременно открыть дамп памяти на анализ
Интересно, что памяти хватало и процессора тоже. Запас был. Может быть дескрипторы файлов заканчивались или еще что-то
Отлаживаю тесты производительности локально, и так как на ноутбуке 64 гигабайта памяти, думал что смогу запустить и браузеры и среду разработки и контейнеры с системой и все все
Если запустить все все и запустить еще и нагрузку, так что и сервисы и тест начнут логи писать с огромной скоростью в консоль, то можно получить розовый экран и перезагрузку
Получил
Думаю что самой странной идеей было выставить лимит в
Интересно, что памяти хватало и процессора тоже. Запас был. Может быть дескрипторы файлов заканчивались или еще что-то
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Три доклада и десять разговоров за конференцию
Если вы посещаете конференции и думаете, какой доклад или мастер-класс посетить, то мой опыт с фокусом на несколько докладов, вопросами и беседами может пригодиться
Если вы посещаете конференции и думаете, какой доклад или мастер-класс посетить, то мой опыт с фокусом на несколько докладов, вопросами и беседами может пригодиться
Я интроверт и начал активно ходить и выступать на конференциях с 2018 года. За семь лет прошёл путь от 🪫 стресса до 🔋 заряжения от митапов и конференций
Если коротко, то стал ставить себе цель посетить лишь два-три доклада даже на двухдневной конференции с программой на несколько десятков событий, но зато поговорить с большим количеством людей, послушать, обсудить, познакомиться, позавтракать, поужинать, покодить
А когда-то пробовал посетить максимум событий программы и мало общался. Думал не упустил ли что-то, а еще слушал комментарии других посетителей, они почти всегда были критическими. Это было время стресса🔔 Первый прилив энергии ощутил от вопросов. Я задавал вопросы, даже старался к каждому выступлению, все больше и больше и чувствовал что так мне нравится все больше и больше. Вопросы становились поводами для общения между докладами 🔋 И так постепенно пришел к балансу того, чтобы посетить несколько докладов, постараться заранее найти интересных мне людей и поговорить с ними во время конференции. Это давало большой прилив энергии и идей. С фокусом и общением
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11
Неочевидная оптимизация Grafana досок для Thanos — добавить фильтр по label
prometheusThanos это один из вариантов долговременного хранилища метрик Prometheus. И типичная архитектура такая, что Thanos один, а Prometheus-ов много. И я наивно полагал, что если выбрать один точный фильтр, то запрос будет быстрым. Оказалось, что если отфильтровать данные сначала по prometheus, а потом по имени сервера instance, то запрос получается быстрее, чем когда фильтрация происходит только по имени сервера
Примеры:
metric{instance="$instance"}
и
metric{prometheus="$prometheus", instance="$instance"}
Эффект небольшой, но заметен. На первом запросе. Со второго начинается кеширование и данные уже не такие разные
Также довольно простое ускорение — увеличить $__interval для графиков. Например у вас отображается 2600 точек на графике, можно в свойствах панели (Query options) указать "Max data points" = 300 — это не очень мало, но довольно быстро
Viacheslav Smirnov
Сегодня собрал нагрузочный pipeline, где объект тестирования готовится с помощью Java Test Containers (Docker) https://java.testcontainers.org/ TL;DR; Простые варианты использования в Java Test Containers работают — монтирование файлов, переменные окружения…
Docker desktop обновился до последней версии. Но я в файле libraries.gradle не обновил версию библиотеки-клиента
org.testcontainers:testcontainers . И Java Test Containers версии 1.21.1 (последняя версия из ветки 1) перестала подключаться к Docker. Так как нет ни одного дефекта про это, то я думал что у меня что-то не так. А причина была в том, что надо обновлять и бибилиотеку тоже до 2.0.2Спонсор потерянного дня — старая версия библиотеки🤦♂️
Ошибки были вот такие
[Test worker] ERROR org.testcontainers.dockerclient.DockerClientProviderStrategy - Could not find a valid Docker environment. Please check configuration.
🔴 И любые настройки не помогали для Docker Desktop 4.53.0, пока не обновился до testcontainers-java 2.0.2
🟠 Для предыдущей версии 4.52.0 помогало переключиться с docker context docker-linux на docker context default командой
docker cotext use default
🟢 А для версии Docker Desktop 4.51.0 просто работала библиотека testcontainers-java 1.21.1
Версии testcontainers: https://github.com/testcontainers/testcontainers-java/releases
Версии docker-desktop: https://docs.docker.com/desktop/release-notes/
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
Интересное наблюдение про файловую систему APFS, которая по умолчанию используется в MacOS
Если скопировать файл в пределах одного диска, то копия не занимает места, это ссылка с другим именем. Если удалить копию, то место также не освобождается
Возможно, это может нарушить логику некоторых инструментов, которые считают место на диске. Представьте, что есть диск на 100 Гбайт, но на нем 100 файлов по 90 ГБайт
Все это требует дополнительной проверки. Я проверял так
Запустил
и скопировал большой файл
При первом копировании заметил всплеск скорости записи
А потом повторил копирование, ожидая снова увидеть
Посчитал место на диске
Если скопировать файл в пределах одного диска, то копия не занимает места, это ссылка с другим именем. Если удалить копию, то место также не освобождается
Возможно, это может нарушить логику некоторых инструментов, которые считают место на диске. Представьте, что есть диск на 100 Гбайт, но на нем 100 файлов по 90 ГБайт
Все это требует дополнительной проверки. Я проверял так
Запустил
iostat -w 2 disk0
и скопировал большой файл
При первом копировании заметил всплеск скорости записи
disk0 cpu load average
KB/t tps MB/s us sy id 1m 5m 15m
4.84 9658 45.69 14 17 69 17.06 15.92 12.23
11.66 2606 29.67 15 16 69 16.01 15.72 12.18
132.30 2220 286.83 10 16 74 16.01 15.72 12.18
226.11 1058 233.61 13 14 73 14.89 15.49 12.12
78.92 443 34.14 12 14 74 14.89 15.49 12.12
33.20 1178 38.20 12 16 73 13.94 15.28 12.07
42.61 1060 44.12 17 16 67 12.90 15.05 12.01
А потом повторил копирование, ожидая снова увидеть
233-286 MB/s, но ничего не увидел. Таким образом заподозрил, что копии 2 и больше были "бесплатные"Посчитал место на диске
df -h. Удалил копии 2 и больше и посчитал снова df -h — ничего не изменилось. Тогда удалил все файлы (тестовый файл был архив на 20 ГиБ) — вот тогда место освободилосьПоставил себе openjdk 25 через
Это обновило мне openjdk@24 до 25, удалив 24. И потребовало починить запуск VisualVM https://visualvm.github.io/
Чтобы починить поставил
И указал для VisualVM кастомный путь к JDK через команду в
Починилось!
Но openjdk в любом случае крутое обновление. Трассировка вызовов понравилась
Если пропустили workshop "Работа с JDK Flight Recorder из командной строки" от Алексея Рагозина, то можно посмотреть инструкцию и запись вот тут https://training.ragozin.info/ru/webinars/2025-11-JFR-CLI/workshop.html и поделиться потом обратной связью https://forms.gle/VDtmEd85oKTNht4X6 с Алексеем
brew install openjdk@25
Это обновило мне openjdk@24 до 25, удалив 24. И потребовало починить запуск VisualVM https://visualvm.github.io/
Чтобы починить поставил
openjdk@21, выдал права приложению Terminal на доступ к каталогу /Application в Privacy & Security / App Management / TerminalИ указал для VisualVM кастомный путь к JDK через команду в
Terminal:echo visualvm_jdkhome="/opt/homebrew/Cellar/openjdk@21/21.0.9/libexec/openjdk.jdk/Contents/Home" >> /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.confПочинилось!
Но openjdk в любом случае крутое обновление. Трассировка вызовов понравилась
Если пропустили workshop "Работа с JDK Flight Recorder из командной строки" от Алексея Рагозина, то можно посмотреть инструкцию и запись вот тут https://training.ragozin.info/ru/webinars/2025-11-JFR-CLI/workshop.html и поделиться потом обратной связью https://forms.gle/VDtmEd85oKTNht4X6 с Алексеем
https://t.me/dive_memo
Рекомендую уютный канал Михаила с ценными заметками про производительность. Он сейчас делает перфоманс аналитику по облаку для анализа данных
Читает и делает заметки в канал выше
Познакомились мы с ним недавно. А вы, может, с ним знакомы уже и работали вместе в ПерфЛабе, Яндексе или еще где
Рекомендую уютный канал Михаила с ценными заметками про производительность. Он сейчас делает перфоманс аналитику по облаку для анализа данных
Читает и делает заметки в канал выше
Познакомились мы с ним недавно. А вы, может, с ним знакомы уже и работали вместе в ПерфЛабе, Яндексе или еще где
Telegram
struct dive_memo
Dump of thoughts after readings
Author: @epikhinm
Author: @epikhinm
👍5
Вчера был международный день гор — 11 декабря ⛰🏔🌋
Почему это важно для меня? Мои путешествия начались с горного туризма.
И там я впервые понял, что я не нагрузочник и не сотрудник компании, я был просто собой и людям вокруг было важно чтобы был верный маршрут, починенные вещи, приятная компания. А до походов я почти всегда был инженером, кроме тех дней когда я был дома
Заниматься инженерией и производительностью круто. Но если сложно ответить на вопрос, а кто же я, без использования названия компаний, то можно сходить в поход или домой поехать. А почему стоит посмотреть на горы? В горном походе хорошо то, что комаров мало и красиво как нигде.
🔥5👍3❤2
Ускоряем Allure.TestOps
Год назад работал над ускорением вот этой инсталляции🕚 https://qameta.io/our-customers/miro/▶️ 3000 tests for each of the 400 pull requests being run every day
которая давала более 1млн новых launch за день
И делал доклад потом🕚 https://polarnik.github.io/Allure.TestOps.SpeedUp/slides.html🕚 https://www.youtube.com/watch?v=Bzs7cAweTLY
По результатам также появился вот этот раздел инструкции🕚 https://docs.qameta.io/allure-testops/install/database/#separating-connection-pools▶️ The analytics pool, if enabled, will be used for some of the read-only aggregated data queries. It is a common practice to use a separate database for analytics, with replication configured between the two databases.
Но честно говоря, именно для той инсталляции, нагрузка от аналитики не была такой огромной, что это требовало отдельной реплики.
Там нагрузка создавалась вставками и обновлениями в огромном количестве (1+ млн в день). А также запросами по API разных данных — интеграциями. И там хорошо помогло🕚 удалить некоторое количество индексов🕚 создавать partial-индексы только на новые данные, где launch >= ..., test_id >= ... — раз в неделю
Индексы все же были нужны, потому что свежие данные по API и через UI использовались. Но именно свежие
При этом удалять старые данные из системы было непроизводительно. Вот этот скрипт🕚 https://github.com/eroshenkoam/allure-testops-utils?tab=readme-ov-file#delete-launches-in-allure-testops
ставит много задач на удаление в очередь задач, а они тяжелые, тяжелее задач на выборку и вставку, поэтому если его запустить, то производительности конец. Его можно запускать по выходным. Если такие дни бывают у вашей системы. Но partial-индексы с фильтром по свежим id будут игнорировать все архивные записи, поэтому их наличие не будет сказываться на скорости
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Оказалось, что больше всего в этом году смотрел Heisenbug на YouTube
Иногда это были доклады, на которых был, но хотелось вспомнить детали
Иногда это были просто интересные материалы
Буду очень рад новым мастер-классам и докладам по мониторингу и производительности весной. Да и не я один. Отправляете свои материалы ☺️. Просто идеи бывает сложно конвертировать в отличный материал, а MVP довести до прода — одно удовольствие
Весной будет юбилей конференции. Будет здорово!
Иногда это были доклады, на которых был, но хотелось вспомнить детали
Иногда это были просто интересные материалы
Буду очень рад новым мастер-классам и докладам по мониторингу и производительности весной. Да и не я один. Отправляете свои материалы ☺️. Просто идеи бывает сложно конвертировать в отличный материал, а MVP довести до прода — одно удовольствие
Весной будет юбилей конференции. Будет здорово!
🔥13