Reform: путь к лучшему ORMBadoo DevelopmentИз презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo DevelopmentDevConf 2016
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Lua — высокоуровневый язык, похожий на Python/JS, но существенно более простой. Он гибкий и при этом очень быстрый.
Возможно, вы слышали про OpenResty. Это решение для разработки Nginx модулей на Lua. Cloudflare, крупнейший CDN/anti-DDOS провайдер, как раз работает на OpenResty.
На скоростях 10/100Gb сетевой стек в ядре Linux становится “узким местом”. Есть ряд технологий для выноса обработки пакетов из ядра в userspace; например Snabb Switch. Последний написан целиком на Lua и справляется с потоком в 200+Gb.
Как на счет менее экзотических применений? На Lua есть свой Node.js (luvit.io). Lua есть в БД Tarantool. У нас была задача валидации данных на соответствие схеме; мы переписали валидацию с Си на Lua и получили ускорение в 4 раза (за счет JIT-компиляции).
Lua набирает популярность и он объективно хорош. Что будет в докладе:
1) Краткое введение в Lua: мы убедимся в том, что язык простой и там есть все необходимое на каждый день.
2) Секция Lua WAT (смешные контр-интуитивные особенности языка, 0 and 1 == 0)
3) Поговорим о том, почему Tarantool использует LuaJIT, а не V8.
4) Разберемся, почему именно Lua такой быстрый, и как работает трассирующий JIT-компилятор.
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...OnticoМногие современные высоконагруженные системы построены с использованием очередей. Не является исключением и внутренний сервис обработки OAuth токенов, который создала наша команда. Исключением является то, что и в качестве основного хранилища, и в качестве всех очередей используется один и тот же продукт - Tarantool. Более того, мы поставили себе амбициозную цель по отказоустойчивости - полную доступность сервиса, когда уходят любые два из трёх датацентров, и успешно её достигли.
При решении мы столкнулись с массой интересных инженерных задач и в нашем докладе мы расскажем вам о том, какие технологии и подходы использовались. В частности, рассмотрим более детально такие вещи, как:
- создание deadline очереди и проблемы, с ней связанные;
- создание кольцевой очереди;
- интеграция между собой шардинга, Raft и очередей;
- как мы победили split brain ;)
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Badoo DevelopmentКаждый день на badoo.com пользователи просматривают порядка 100 миллионов профилей других юзеров. Мы храним счетчики и полную историю посещений за последние 90 дней, с некоторой агрегацией - это около 5 миллиардов ивентов. Система обрабатывающая этот поток данных создана давно и пережила несколько инкарнаций, становясь все ближе к базе данных.
В какой-то момент мы решили перестать изобретать велосипед, отказались от демонов на C+sqlite, не стали делать на mysql-ях, редисах и мемкешах, а взяли и запилили на Tarantool.
Рассказываем почему Tarantool, как шардим, реплицируем (все просто) и как плавно это дело внедрили на живой системе без downtime.
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey PaznikovЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python MeetupPython AST: между исходным текстом и байт-кодом / Николай Карелин / Системный архитектор VPI Development Center
Николай познакомит слушателей с деталями устройства Python AST и, в частности, расскажет некоторые интересные факты о работе диалекта Hy.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey PaznikovЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
C++ для web с помощью Emscriptencorehard_byC++ для web с помощью Emscripten, Андрей Карпушин
В докладе я расскажу о своем практическом опыте компиляции и использовании C++ на веб страницах, о том что нужно сделать, чтобы портировать приложение на С++ под веб, об ограничениях с этим связанных, об интеграции С++ кода с JavaScript и другими элементами веб страницы.
Мир Python функционалим с помощью библиотекPyNSKДокладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey PaznikovЛЕКЦИЯ 6. Разработка параллельных структур данных на основе блокировок
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python MeetupВ своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...OnticoВ данном докладе я расскажу о том, как Lua помогает расширять функционал Rspamd, позволяя людям без особых знаний С писать эффективные правила фильтрации спама. Также будут рассмотрены особенности внедрения Lua в C код и основные приемы, применяемые при написании API для Lua приложений. Отдельное внимание будет уделено документации к Lua API, которая является одним из необходимых компонентов для opensource приложения.
Кроме этого, отдельная часть доклада посвящена анализу производительности Lua: использованию LuaJIT, сравнению вызовов C функций через FFI с традиционным вызовом, оптимизации строковых операций и таблиц в Lua.
В заключение будут рассмотрены некоторые открытые вопросы: будущее языка, наличие нескольких диалектов, статический анализ Lua стека, а также вопросы безопасности при JIT компиляции.
Почему Rust стоит вашего вниманияMichael PankovВидео доклада: https://www.youtube.com/watch?v=slnQBoxsHPU
Rust - системный язык программирования, который быстро исполняется, предотвращает почти все падения, и устраняет гонки по данным.
Как он этого достигает? Про это доклад.
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey PaznikovЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Python MeetupАвтор: Роман Иманкулов (doist.io)
Когда необходимо заставить веб-приложение выполнить тяжелую работу без ухудшения user experience, или нужно по-быстрому собрать кластер на коленке, возникает потребность в распределенном выполнении очередей команд. В докладе будут рассмотрены варианты организации таких очередей подручными средствами, будет выяснено, чем так хорош Celery, есть ли у него достойные альтернативы, и как написать рабочий менеджер очередей в тридцать строчек кода.
Паттерны и примеры структур данных в NoSQL на примере TarantoolAlexandre KalendarevПрезентация к докладу на HiLoad++
часть информации устарела с выходом новой версии tarantool
так как часть паттернов решается через lua-процедуры
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey PaznikovЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey PaznikovЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python MeetupPython AST: между исходным текстом и байт-кодом / Николай Карелин / Системный архитектор VPI Development Center
Николай познакомит слушателей с деталями устройства Python AST и, в частности, расскажет некоторые интересные факты о работе диалекта Hy.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey PaznikovЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
C++ для web с помощью Emscriptencorehard_byC++ для web с помощью Emscripten, Андрей Карпушин
В докладе я расскажу о своем практическом опыте компиляции и использовании C++ на веб страницах, о том что нужно сделать, чтобы портировать приложение на С++ под веб, об ограничениях с этим связанных, об интеграции С++ кода с JavaScript и другими элементами веб страницы.
Мир Python функционалим с помощью библиотекPyNSKДокладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey PaznikovЛЕКЦИЯ 6. Разработка параллельных структур данных на основе блокировок
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python MeetupВ своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...OnticoВ данном докладе я расскажу о том, как Lua помогает расширять функционал Rspamd, позволяя людям без особых знаний С писать эффективные правила фильтрации спама. Также будут рассмотрены особенности внедрения Lua в C код и основные приемы, применяемые при написании API для Lua приложений. Отдельное внимание будет уделено документации к Lua API, которая является одним из необходимых компонентов для opensource приложения.
Кроме этого, отдельная часть доклада посвящена анализу производительности Lua: использованию LuaJIT, сравнению вызовов C функций через FFI с традиционным вызовом, оптимизации строковых операций и таблиц в Lua.
В заключение будут рассмотрены некоторые открытые вопросы: будущее языка, наличие нескольких диалектов, статический анализ Lua стека, а также вопросы безопасности при JIT компиляции.
Почему Rust стоит вашего вниманияMichael PankovВидео доклада: https://www.youtube.com/watch?v=slnQBoxsHPU
Rust - системный язык программирования, который быстро исполняется, предотвращает почти все падения, и устраняет гонки по данным.
Как он этого достигает? Про это доклад.
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey PaznikovЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Python MeetupАвтор: Роман Иманкулов (doist.io)
Когда необходимо заставить веб-приложение выполнить тяжелую работу без ухудшения user experience, или нужно по-быстрому собрать кластер на коленке, возникает потребность в распределенном выполнении очередей команд. В докладе будут рассмотрены варианты организации таких очередей подручными средствами, будет выяснено, чем так хорош Celery, есть ли у него достойные альтернативы, и как написать рабочий менеджер очередей в тридцать строчек кода.
Паттерны и примеры структур данных в NoSQL на примере TarantoolAlexandre KalendarevПрезентация к докладу на HiLoad++
часть информации устарела с выходом новой версии tarantool
так как часть паттернов решается через lua-процедуры
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey PaznikovЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey PaznikovЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
QA Fest 2015. Иван Пашко. XPath yourself. Tips & TricksQAFestВсе мы знаем, что такое XPath и широко используем его в автоматизации. Но неправильное построение XPath выражений приводит тестровщиков в ужас, делает наши тесты хрупкими, и как результат - получаем долгие вечера отладки кода. В докладе я расскажу о том, что такое XPath, о распространенных ошибках при работе с ним, и как их избегать. Будет интересно и начинающим тестировщикам, и экспертам в области автоматизации.
анализ кода: от проверки стиля до автоматического тестированияRuslan ShevchenkoРассказ о истории и использовании в реальной жизни инструментов анализа кода на основе JavaChecker и TermWare
Сопустствующий текст: http://datacenter.gradsoft.ua/files/articles/OSDN2011/
Rich UI on Dojo Toolkit and Zend FrameworkGeorgy TurevichПрезентация мастер-класса "Создание динамических пользовательских интерфейсов и AJAX-приложений промышленного класса с помощью Dojo Toolkit и Zend Framework"
2. Модули Модулей много Списки модулей есть, статистики использования — нет Люди, пытающиеся впервые написать что нибудь, видят просто список в алфавитном порядке Кроме модулей нужны другие компоненты
3. Компоненты стека Фронтенд Поддержка и мониторинг процессов Управление выполнением (flow control) Фреймворк Шаблонизатор Хранилище данных
5. Использование фронтендов Nginx — отличный фронтенд Единственный минус — не работает с WebSockets Варианты: HAProxy, фронтенд на node либо вообще без него
9. Упорядочивание кода Step( function readId() { fs.readFile(__filename, this); }, function getItem(err, id) { if (err) throw err; db.getFromDB(id, this); }, function showIt(err, item) { if (err) throw err; console.log(item.name); } ); fs.readFile(__filename, function(err, id) { if (err) throw err; db.getFromDB(id, function(err, item) { if (err) throw err; console.log(item.name); }); }) До После
10. Step и async Step — библиотека от Tim Caswell, в разработке больше года, 316 watchers Async — библиотека от Caolan McMahon, полгода в разработке, 538 watchers (помимо них есть node-seq, node-promise, flow-js, nimble, streamline и множество других, в том числе самописных)
11. Использование Step Step( function readFirst() { fs.readFile(filename, this); }, function readSecond(err, name) { if (err) throw err; fs.readFile(name, this); }, function showIt(err, text) { if (err) throw err; console.log(newText); } ); Step( function loadStuff() { fs.readFile(file1, this.parallel()); fs.readFile(file2, this.parallel()); }, function showStuff(err, first, second) { if (err) throw err; console.log(first); console.log(second); } ) Последовательное выполнение Параллельное выполнение
12. Произвольное число задач Step( function readDir () { fs.readdir(__dirname, this); }, function readFiles (err, results) { if (err) throw err; var group = this.group(); results.forEach(function (filename) { if (/\.js$/.test(filename)) { fs.readFile(__dirname + "/" + filename, 'utf8', group()); } }); }, function showAll (err , files) { if (err) throw err; console.dir(files); } );
13. Использование async async.map(['file1','file2','file3'], fs.readFile, function(err, results){ // results is now an array of stats for each file }); Параллельное чтение Последовательное чтение async.series([ function(callback){ fs.readFile('file1', callback) }, function(callback){ fs.readFile('file2', callback) }, function(callback){ fs.readFile('file3', callback) } ], function(err, results) { // результаты });
14. Другие возможности async Фильтры, reduce Асинхронные циклы ( whilst , until ) Кеширование результатов асинхронных вызовов ( memoize )
16. Connect — структура Функционал добавляется с помощью middleware Запрос и ответ проходят через все подключенные middleware (если один не оборвёт цепь или не вернёт ответ) Достаточно для простых сайтов / сервисов
17. Доступные middleware router — позволяет назначать функции определенным URL vhost — виртуальные хосты и поддомены static — отдача статических файлов logger — ведение логов session — работа с сессией compiler — сборка CSS из SASS, JS из CoffeeScript и т.д. connect-gzip — сжатие ответов connect-i18n — определение языка пользователя по заголовкам Всего больше 50 модулей
18. Express Надстройка над Connect View и redirection helpers Возможность подключать шаблонизатор прямо к фреймворку Генерация заготовки сайта из командной строки Разные конфигурации для dev / production
21. Использование Jade Основан на HAML Гибкая настройка Логи ошибок Версии для разных языков, в т.ч. PHP !!! 5 html(lang="en") head title= pageTitle script(type='text/javascript') if (foo) { bar() } body h1 Jade - node template engine #container - if (youAreUsingJade) p You are amazing - else p Get on it!
22. Использование EJS Embedded JavaScript Шаблонизация в стиле PHP Логи ошибок Фильтры <h1><?= title ?></h1> <ul> <% for(var i=0; I < supplies.length; i++) {%> <li><%= supplies[i] %></li> <% } %> </ul> <%= img_tag('test.jpg') %>
30. Мой стек Фронтенд: Nginx (если не работаю с Websockets) Фреймворк: Express Шаблонизатор: Mu Поддержка: Runit + доп. скрипты для запуска Управление выполнением: Step Дополнительные скрипты для деплоя из Git и создания "виртуальных хостов"