SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
Опыт использования Erlang
в разработке многопользовательской игры.
Юра Жлоба aka yzh44yzh
Многопоточность
Распределенность
Устойчивость к ошибкам
Горячее обновление кода
Кратенько про Erlang
Кратенько про нас
Кратенько про проект
А теперь переходим к сути :)
Многопоточность. Теория и практика.
Распределенность (только теория).
Устойчивость к ошибкам. Теория и практика.
Горячее обновление кода. Теория и практика.
Борьба за качество проекта.
Недостатки Erlang.
Выводы.
Многопоточность. Теория.
О, это оооочень сложно!
Мютексы там, семафоры всякие,
критические секции
“Java Concurrency in Practice”
нужно выучить назубок
А иначе страшные dead lock будут
преследовать вас в ночных кошмарах
Многопоточность. Теория.
Многопоточность бывает разная.
Бывает такая, которая простая :)
Многопоточность. Теория.
Легкие потоки
Эффективные планировщики
Изолированные области памяти
Изолированные сборщики мусора
Обмен сообщениями
Многопоточность. Практика.
Процессы – кирпичики архитектуры
Сотни и тысячи процессов в одном проекте
Многопоточность. Практика.
Сходство с ООП:
Инкапсуляция состояния
Публичные и приватные функции
Отправка сообщений вместо вызовов функций
Полиморфизм функций и модулей
Даже конструкторы и деструкторы есть
И даже фабрика :)
Многопоточность. Практика.
Dead lock, Race condition
Бывают, да. Но они не совсем не страшные.
Многопоточность. Практика.
Как выглядит эффективный сервер
если он написан не на Erlang?
(Ruby, Python, Node.js etc)
Многопоточность. Практика.
Например, так:
Несколько нод, по одной на каждое ядро
Rabbit MQ, чтобы наладить коммуникацию
Nginx на входе
Redis для in-memory кеширования
Многопоточность. Практика.
Все это заменяет одна нода на Erlang
Проще в разработке,
в развертывании,
в диагностике проблем,
в поддержке.
Распределенность
Решение высокого уровня
Сетевая прозрачность
Просто посылаем сообщение процессу в другой
ноде так же, как и процессу в своей ноде
Распределенность
Безопасность на куках
Доверенная зона, где все процессы
и все функции доступны
Распределенность
Но и собственное решение
с предоставлением внешнего АПИ
не запрещается делать :)
Устойчивость к ошибкам. Теория.
3 уровня защиты:
Изоляция потоков
Супервайзеры
Распределенность
Устойчивость к ошибкам. Практика.
Нет волшебной таблетки
От бага в бизнес-логике
никакой супервайзер не спасет
Нода не падает,
Но отказ в обслуживании ничем не лучше
Устойчивость к ошибкам. Практика.
Let it crash
или
try/catch, где надо
Горячее обновление кода. Теория.
Жизнь и смерть Erlang-процесса
Как изменить неизменяемое состояние?
Горячее обновление кода. Теория.
Бесконечная рекурсия
Хвостовая, без накопления памяти на стеке
Горячее обновление кода. Теория.
Аргументы функции и все переменные в ней неизменны
А состояние процесса меняется. Чудо :)
Горячее обновление кода. Теория.
Горячая загрузка модуля меняет код его функций
Но состояние процесса остается прежним
В какой-то момент процесс покидает старую
функцию loop, и входит в новую функцию loop
Горячее обновление кода. Теория.
В простом случае все просто
Но бывают сложные случаи :)
Горячее обновление кода. Теория.
Изменилась структура данных
Изменилось дерево супервайзеров
Разное время обновления процессов
Горячее обновление кода. Практика.
Юзаем локально, в ходе разработки
Написал код, загрузил, поглядел как работает
Перезапускать сервер
при каждом изменении в коде – лишнее.
Горячее обновление кода. Практика.
Выкатываем фичу в production
Потому что не хотим рестартовать сервер
Потому что там всегда есть игры,
которые прервутся
Горячее обновление кода. Практика.
Имеем нестабильный production сервер
И пользователей в роли бета-тесторов
(и они не счастливы выполнять эту роль :)
Горячее обновление кода. Практика.
Отдельный тестовый сервер
Нестабильные изменения выкатываем на него
Горячее обновление кода. Практика.
Production сервер обновляем редко
Горячее обновление не получается
из-за “сложных случаев”
Обновление – это всегда рестарт
Горячее обновление кода. Практика.
Сохранение состояний игр перед рестартом
Восстановление после рестарта
Горячее обновление кода. Практика.
И что теперь?
Горячее обновление не нужно?
Горячее обновление кода. Практика.
Ну можно выкатывать быстрые,
не опасные фичи, мелкие фиксы
Если не хочется ждать 2 недели
до конца спринта.
Горячее обновление кода. Практика.
Но еще есть супер полезное применение ...
Горячее обновление кода. Практика.
Диагностика проблем прямо в production
Создание новых средств диагностики
И внедрение их налету
Борьба за качество проекта
Тестировать сложно
И вручную, и автоматически
Оба варианта стоят времени и усилий
Борьба за качество проекта
Хорошо иметь функцию без побочных эффектов
Написал юнит-тест
Проверил правильные, неправильные
и граничные входящие данные
И уверен, что функция всегда работает как надо
Борьба за качество проекта
Вот бы весь проект состоял из чистых функций!
Но, черт возьми, повсюду полно побочных
эффектов. Кишмя кишат. Печаль :(
Побочные эффекты:
послали данные в сокет
записали чего-то в файл
вывели сообщение на консоль
сохранили данные в базу
запустили новый процесс
послали сообщение другому процессу
Страшная тайна программирования
Об этом не пишут в книгах ...
Страшная тайна программирования
Побочный эффект -- это смысл работы любой
программы, это и есть то полезное, что она делает.
Примите это :)
Борьба за качество проекта
Тестируем работу с базой данных
К черту моки!
Будем тестировать работу с базой данных,
а не с моками!
Борьба за качество проекта
Отдельная тестовая база
DROP TABLE, CREATE TABLE,
наполнение таблиц тестовыми данными
Перед каждым тестом
Борьба за качество проекта
Тестируем функции,
которые реально читают из базы и пишут в базу
Да, это не быстро
Зато тестируем то, что надо :)
Борьба за качество проекта
Тестируем взаимодействие процессов
В тестах подымаем дерево супервайзеров
Запускаем процессы
Заставляем их посылать сообщения друг другу
Борьба за качество проекта
Творится синхронное и асинхронное невесть что
А тест должен это как-то проверять
(асинхронное сразу не проверишь, подождать надо)
Придумай, как проверять.
Ты ведь инженер, это твоя работа :)
Борьба за качество проекта
Надеюсь, эти тесты не сильно
зависят от фазы луны :)
Мои худо-бедно работают,
и местами что-то проверяют
Борьба за качество проекта
Более-менее нормальное покрытие тестами
стоит дорого.
А их еще поддерживать надо,
обновлять при изменениях в коде.
Борьба за качество проекта
Большая компания наймет
отдельных людей для этого.
А что делать маленькой компании?
Нас всего трое, как тестировать?
Борьба за качество проекта
Тестовый клиент
Отдельное консольное приложение
Умеет создавать десятки и сотни подключений
И через них дергать все АПИ сервера
Борьба за качество проекта
Два режима работы:
Полу-ручной
Стресс-тест
Борьба за качество проекта
Выявил и устранил проблемы в архитектуре
Нашел и оптимизировал узкие места
Пофиксил баги
Сплю спокойно :)
Недостатки Erlang
Малое количество разработчиков
Не является языком общего назначения
Динамическая типизация
Библиотеки третьих сторон
не production ready
Выводы
Будем ли мы применять Erlang
в следующих проектах?
Выводы
Однозначно да :)
Вопросы? :)

Weitere ähnliche Inhalte

Was ist angesagt?

Erlang railsclub - 1
Erlang   railsclub - 1Erlang   railsclub - 1
Erlang railsclub - 1Max Lapshin
 
Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потерялиIvan Grishaev
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...it-people
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляютсяMax Lapshin
 
Как устроен мониторинг в Badoo
Как устроен мониторинг в BadooКак устроен мониторинг в Badoo
Как устроен мониторинг в BadooUptime Community
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPOleg Poludnenko
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)Ontico
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоDotNetConf
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав БахмутовCodeFest
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 

Was ist angesagt? (19)

Erlang railsclub - 1
Erlang   railsclub - 1Erlang   railsclub - 1
Erlang railsclub - 1
 
Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потеряли
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодня
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляются
 
Как устроен мониторинг в Badoo
Как устроен мониторинг в BadooКак устроен мониторинг в Badoo
Как устроен мониторинг в Badoo
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHP
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешево
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 

Andere mochten auch

CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере NitrogenCodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере NitrogenCodeFest
 
Ivbit erlang презентация
Ivbit   erlang презентацияIvbit   erlang презентация
Ivbit erlang презентацияjskonst
 
Алексей Воинов — Языки программирования
Алексей Воинов — Языки программированияАлексей Воинов — Языки программирования
Алексей Воинов — Языки программированияYandex
 
Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьYuri Zhloba
 
Дополненная реальность через веб камеру
Дополненная реальность через веб камеруДополненная реальность через веб камеру
Дополненная реальность через веб камеруМихаил Кокорев
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlangYuri Zhloba
 
Краткое введение в Erlang/OTP
Краткое введение в Erlang/OTPКраткое введение в Erlang/OTP
Краткое введение в Erlang/OTPAlexander Byndyu
 

Andere mochten auch (8)

CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере NitrogenCodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
 
Ivbit erlang презентация
Ivbit   erlang презентацияIvbit   erlang презентация
Ivbit erlang презентация
 
Алексей Воинов — Языки программирования
Алексей Воинов — Языки программированияАлексей Воинов — Языки программирования
Алексей Воинов — Языки программирования
 
Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитать
 
Дополненная реальность через веб камеру
Дополненная реальность через веб камеруДополненная реальность через веб камеру
Дополненная реальность через веб камеру
 
Http streaming
Http streamingHttp streaming
Http streaming
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlang
 
Краткое введение в Erlang/OTP
Краткое введение в Erlang/OTPКраткое введение в Erlang/OTP
Краткое введение в Erlang/OTP
 

Ähnlich wie Опыт использования Erlang в разработке многопользовательской игры

XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeDmytro Mindra
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаSergey Platonov
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java DeveloperOlexandra Dmytrenko
 
MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7Alexander Levantovsky
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееRoman Dvornov
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
Python и высокая нагрузка
Python и высокая нагрузкаPython и высокая нагрузка
Python и высокая нагрузкаAlexander Shigin
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокRoman_Lut
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Fwdays
 
Олег Антонян
Олег АнтонянОлег Антонян
Олег АнтонянForkConf
 
Дмитрий Прокофьев: Эволюция системы синхронизации данных между сервисами
Дмитрий Прокофьев: Эволюция системы синхронизации данных между сервисамиДмитрий Прокофьев: Эволюция системы синхронизации данных между сервисами
Дмитрий Прокофьев: Эволюция системы синхронизации данных между сервисамиit-people
 

Ähnlich wie Опыт использования Erlang в разработке многопользовательской игры (20)

XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
 
запахи кода
запахи кодазапахи кода
запахи кода
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 
MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Python и высокая нагрузка
Python и высокая нагрузкаPython и высокая нагрузка
Python и высокая нагрузка
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Sivko
SivkoSivko
Sivko
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
 
Олег Антонян
Олег АнтонянОлег Антонян
Олег Антонян
 
Дмитрий Прокофьев: Эволюция системы синхронизации данных между сервисами
Дмитрий Прокофьев: Эволюция системы синхронизации данных между сервисамиДмитрий Прокофьев: Эволюция системы синхронизации данных между сервисами
Дмитрий Прокофьев: Эволюция системы синхронизации данных между сервисами
 

Опыт использования Erlang в разработке многопользовательской игры