Из презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
DevConf 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.
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
Python 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 с помощью Emscripten, Андрей Карпушин
В докладе я расскажу о своем практическом опыте компиляции и использовании C++ на веб страницах, о том что нужно сделать, чтобы портировать приложение на С++ под веб, об ограничениях с этим связанных, об интеграции С++ кода с JavaScript и другими элементами веб страницы.
Докладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на 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 компиляции.
Видео доклада: https://www.youtube.com/watch?v=slnQBoxsHPU
Rust - системный язык программирования, который быстро исполняется, предотвращает почти все падения, и устраняет гонки по данным.
Как он этого достигает? Про это доклад.
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Python Meetup
Автор: Роман Иманкулов (doist.io)
Когда необходимо заставить веб-приложение выполнить тяжелую работу без ухудшения user experience, или нужно по-быстрому собрать кластер на коленке, возникает потребность в распределенном выполнении очередей команд. В докладе будут рассмотрены варианты организации таких очередей подручными средствами, будет выяснено, чем так хорош Celery, есть ли у него достойные альтернативы, и как написать рабочий менеджер очередей в тридцать строчек кода.
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
Python 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 с помощью Emscripten, Андрей Карпушин
В докладе я расскажу о своем практическом опыте компиляции и использовании C++ на веб страницах, о том что нужно сделать, чтобы портировать приложение на С++ под веб, об ограничениях с этим связанных, об интеграции С++ кода с JavaScript и другими элементами веб страницы.
Докладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на 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 компиляции.
Видео доклада: https://www.youtube.com/watch?v=slnQBoxsHPU
Rust - системный язык программирования, который быстро исполняется, предотвращает почти все падения, и устраняет гонки по данным.
Как он этого достигает? Про это доклад.
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Python Meetup
Автор: Роман Иманкулов (doist.io)
Когда необходимо заставить веб-приложение выполнить тяжелую работу без ухудшения user experience, или нужно по-быстрому собрать кластер на коленке, возникает потребность в распределенном выполнении очередей команд. В докладе будут рассмотрены варианты организации таких очередей подручными средствами, будет выяснено, чем так хорош Celery, есть ли у него достойные альтернативы, и как написать рабочий менеджер очередей в тридцать строчек кода.
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ЛЕКЦИЯ 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/
Презентация мастер-класса "Создание динамических пользовательских интерфейсов и 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 и создания "виртуальных хостов"