Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
Потоковая репликация, которая появилась в 2010 году, стала одной из прорывных фич постгреса и в настоящее время практически ни одна инсталляция не обходится без использования потоковой репликации. Она надежна, легка в настройке, нетребовательна к ресурсам. Однако при всех своих положительных качествах, при её эксплуатации могут возникать различные проблемы и неприятные ситуации. Для диагностики и решения проблем, связанных с потоковой репликацией, есть множество инструментов, как встроенных в PostgreSQL, так и сторонних.
В этом докладе я сделаю обзор доступных инструментов и расскажу, как с помощью этих средств диагностировать различные типы проблем и как устранять их. Рассматривая методы решения, мы также рассмотрим проблемы, которые возникают при эксплуатации потоковой репликации.
Доклад будет полезен DBA и системным администраторам.
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
Общие принципы оптимизации производительности мобильных приложений:
- работа с длинными списками — таблицы, коллекции;
- графика — загрузка из сети, кэширование;
- ленивая загрузка частей приложения.
Работа с периодически обновляемыми структурированными данными.
- как передавать данные с сервера на клиент: запросы, объем, формат, десериализация;
- как хранить полученные данные на клиенте — виды хранилищ: от плоских файлов до NoSQL.
Практический кейс. "Едадил": как мы ускоряли работу приложения для Android.
"В последнее время тема пиринговых технологий становится очень популярной. Уже не первый день работают такие проекты как криптовалюта Bitcoin, микроблоги Twister и мессенджер Tox. Теперь дошло дело и до децентрализованного веба.
Будет рассказано про общую схему работы сети, о работе с криптографией на JavaScript, о создании приложений на JavaScript без использования центральных серверов."
Кэширование данных с помощью Service WorkerAndrew Smirnov
Как хорошо вы знаете Service Worker API? А способы применения его для кэширования данных? В этом рассказе мы постараемся понять, как Service Worker может взаимодействовать с запросами, что и как кэшировать, а также как все это поможет нашим с вами сайтам загружаться значительно быстрее.
Структуры данных в разделяемой памяти,
про алгоритмы замещения страниц в буфере и блокировки, которые используются на разных уровнях взаимодействия.
А также средства мониторинга памяти, уже существующие и те, которые ещё только в процессе разработки.
Доклад о разработке (а главное - оптимизации) программы на Perl под Raspberry PI.
Наглядно показывает, что в Perl есть немало возможностей, а также инструментов, которые позволяют делать программы быстрее и эффективнее - используя как преимущества самого языка, так и оптимизацию алгоритма программы.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
Потоковая репликация, которая появилась в 2010 году, стала одной из прорывных фич постгреса и в настоящее время практически ни одна инсталляция не обходится без использования потоковой репликации. Она надежна, легка в настройке, нетребовательна к ресурсам. Однако при всех своих положительных качествах, при её эксплуатации могут возникать различные проблемы и неприятные ситуации. Для диагностики и решения проблем, связанных с потоковой репликацией, есть множество инструментов, как встроенных в PostgreSQL, так и сторонних.
В этом докладе я сделаю обзор доступных инструментов и расскажу, как с помощью этих средств диагностировать различные типы проблем и как устранять их. Рассматривая методы решения, мы также рассмотрим проблемы, которые возникают при эксплуатации потоковой репликации.
Доклад будет полезен DBA и системным администраторам.
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
Общие принципы оптимизации производительности мобильных приложений:
- работа с длинными списками — таблицы, коллекции;
- графика — загрузка из сети, кэширование;
- ленивая загрузка частей приложения.
Работа с периодически обновляемыми структурированными данными.
- как передавать данные с сервера на клиент: запросы, объем, формат, десериализация;
- как хранить полученные данные на клиенте — виды хранилищ: от плоских файлов до NoSQL.
Практический кейс. "Едадил": как мы ускоряли работу приложения для Android.
"В последнее время тема пиринговых технологий становится очень популярной. Уже не первый день работают такие проекты как криптовалюта Bitcoin, микроблоги Twister и мессенджер Tox. Теперь дошло дело и до децентрализованного веба.
Будет рассказано про общую схему работы сети, о работе с криптографией на JavaScript, о создании приложений на JavaScript без использования центральных серверов."
Кэширование данных с помощью Service WorkerAndrew Smirnov
Как хорошо вы знаете Service Worker API? А способы применения его для кэширования данных? В этом рассказе мы постараемся понять, как Service Worker может взаимодействовать с запросами, что и как кэшировать, а также как все это поможет нашим с вами сайтам загружаться значительно быстрее.
Структуры данных в разделяемой памяти,
про алгоритмы замещения страниц в буфере и блокировки, которые используются на разных уровнях взаимодействия.
А также средства мониторинга памяти, уже существующие и те, которые ещё только в процессе разработки.
Доклад о разработке (а главное - оптимизации) программы на Perl под Raspberry PI.
Наглядно показывает, что в Perl есть немало возможностей, а также инструментов, которые позволяют делать программы быстрее и эффективнее - используя как преимущества самого языка, так и оптимизацию алгоритма программы.
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
Примеры кода приложений и конфигурации сервера с доступом к файлам, памяти, базам данных и параллельной асинхронной обработкой различных типов API запросов с состоянием и без состояния.
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
Рассмотрим сравнительно сложные, и в то же время, часто возникающие, задачи, для которых ядро Yii не дает готового решения. Посмотрим как из отдельных моделей ActiveRecord собирать единые сущности, и как разбивать большие модели на составляющие. Разберем как правильно сохранять файлы и как сэкономить на обработчиках событий и поведениях
- Интернационализация сущностей в базе данных;
- Обработка “ролей” в реляционных базах данных;
- Работа с файлами;
- Вложенные модели;
- Trait вместо Behavior.
[Expert Fridays] Dmitry Isaev - Функциональные велосипеды в JavaProvectus
Есть ли в джава функциональщина? Если есть - нужна ли она? Если нужна - как ее лучше приготовить? Скандалы, интриги, расследования. Немного Vavr, стримов и монад на закуску
FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»Yandex
Асинхронность в JavaScript-приложениях – обычное дело. Любой обмен данными – асинхронный, что HTTP, что чтение файла, что БД. Все просто, если запрос один – callback, и все дела. Если логика сложнее, то приложение в худшем случае превращается в «Callback Pyramid of Doom» или обрастает разной магией. Promise – это подход, который выпрямляет вложенные запросы, превращает «асинхронную лапшу» в структурированный код и делает ваше приложение лучше. Вы всё еще боитесь использовать Promise? Тогда приходите на мой доклад.
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
Примеры кода приложений и конфигурации сервера с доступом к файлам, памяти, базам данных и параллельной асинхронной обработкой различных типов API запросов с состоянием и без состояния.
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
Рассмотрим сравнительно сложные, и в то же время, часто возникающие, задачи, для которых ядро Yii не дает готового решения. Посмотрим как из отдельных моделей ActiveRecord собирать единые сущности, и как разбивать большие модели на составляющие. Разберем как правильно сохранять файлы и как сэкономить на обработчиках событий и поведениях
- Интернационализация сущностей в базе данных;
- Обработка “ролей” в реляционных базах данных;
- Работа с файлами;
- Вложенные модели;
- Trait вместо Behavior.
[Expert Fridays] Dmitry Isaev - Функциональные велосипеды в JavaProvectus
Есть ли в джава функциональщина? Если есть - нужна ли она? Если нужна - как ее лучше приготовить? Скандалы, интриги, расследования. Немного Vavr, стримов и монад на закуску
FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»Yandex
Асинхронность в JavaScript-приложениях – обычное дело. Любой обмен данными – асинхронный, что HTTP, что чтение файла, что БД. Все просто, если запрос один – callback, и все дела. Если логика сложнее, то приложение в худшем случае превращается в «Callback Pyramid of Doom» или обрастает разной магией. Promise – это подход, который выпрямляет вложенные запросы, превращает «асинхронную лапшу» в структурированный код и делает ваше приложение лучше. Вы всё еще боитесь использовать Promise? Тогда приходите на мой доклад.
Meet Magento Belarus - Alexander Kaigorodov speech on The Tale of Javascript in Magento: the untapped potential of the client side of the application
http://by.meet-magento.com/
http://amasty.com/
Случалось ли, что вы видели (чужой) код и хотели все переписать? Бывало такое, что вы не могли понять, почему кем-то было принято конкретное решение, не другое? Хотели ли вы воскликнуть:«А я бы сделал еще круче!»?
Если вы задумывались об этом, вам будет интересно послушать историю о том, как эти вопросы возникали у Александра и Кирилла и как они решались в условиях большой компании.
Разработчики расскажут, как в самом начале пути вытаскивали шашки и шли в атаку на проблемную архитектуру. Но все оказалось не так просто, и по мере погружения в проект парни стали понимать, что архитектура большой системы — компромисс между различными подходами и решениями, инновациями и легаси (наследованным кодом), централизацией и децентрализацией компонентов. Докладчики наработали очень много опыта в решении архитектурных задач и поделятся опытом и выработанными принципами, которых придерживаются в настоящее время.
Во время доклада будут обсуждаться непростые вопросы, возникающие при принятии решений о том, как будет жить и эволюционировать система.
Вместе со слушателями Александр и Кирилл проделают упражнение по созданию «таблицы технологий» и её эволюции. Также они покажут, насколько важно инженерное решение на любой из стадий развития системы.
Мы рассмотрим область применения, архитектуру и основные особенности такой известной операционной системы как Android. Также расскажем о процессе создания мобильного приложения TulaDev, о проблемах с которыми мы столкнулись и о способах их решения. Вы можете найти приложение для Android <a>на Google Play</a>
Леонид Васильев "Python в инфраструктуре поиска"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Леонид Васильев "Python в инфраструктуре поиска"
О докладе:
Описание архитектуры и реализации внутренних инструментов для управления поисковым кластером.
Что такое инфраструктура поиска? Какие задачи приходится решать? Какие инструменты для управления кластером используются в поиске? Как они устроены изнутри? Что можно посоветовать проектам с большой инфраструктурой? Какие существуют open-source аналоги?
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
О докладе:
Про Python и Django: зачем нужна красота и простота перфекционистам с дедлайнами, на примере Яндекс.Погоды.
Когда число сервисов, которые делаются в Яндексе, стало возрастать, дедлайны — поджимать, а от процесса разработки требовалось стать более гибким, возникла потребность в свежих решениях. В докладе на примере Яндекс.Погоды рассказывается, как в Яндексе делают сервисы с помощью языка Python и веб-фреймворка Django.
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Я.Субботник в Челябинске в рамках конференции UWDC
О докладе:
Все, что вы хотели узнать про одностраничное ajax-приложение Яндекс.Почта, но боялись спросить. Изнанка фронтенда, загрузка данных, обновление страниц и взаимодействие с пользователями без регистрации, без смс. Бонус-трек: как работают сторонние приложения в рамках одной платформы.
15. describe "downloader" do
before :all do
@data_server = DataServerHelper.new
@downloader = DownloaderHelper.new
@data_server.start
end
before :each do
@data_server.delete_all_schedules
@downloader.clear_jobs_queue
end
it "download schedule for tomorrow" do
schedule = Schedule.new(Time.now + 1.day)
@data_server.create_schedule(schedule)
act_schedule = @downloader.download_schedule(schedule)
act_schedule.should == schedule.expected
end
after :all do
@data_server.stop
end
end
15
16. describe "downloader" do
before :all do
@data_server = DataServerHelper.new
@downloader = DownloaderHelper.new
@data_server.start
end
before :each do
@data_server.delete_all_schedules
@downloader.clear_jobs_queue
end
it "download schedule for tomorrow" do
schedule = Schedule.new(Time.now + 1.day)
@data_server.create_schedule(schedule)
act_schedule = @downloader.download_schedule(schedule)
act_schedule.should == schedule.expected
end
after :all do
@data_server.stop
end
end
16
17. describe "downloader" do
before :all do
@data_server = DataServerHelper.new
@downloader = DownloaderHelper.new
@data_server.start
end
before :each do
@data_server.delete_all_schedules
@downloader.clear_jobs_queue
end
it "download schedule for tomorrow" do
schedule = Schedule.new(Time.now + 1.day)
@data_server.create_schedule(schedule)
act_schedule = @downloader.download_schedule(schedule)
act_schedule.should == schedule.expected
end
after :all do
@data_server.stop
end
end
17
18. describe "downloader" do
before :all do
@data_server = DataServerHelper.new
@downloader = DownloaderHelper.new
@data_server.start
end
before :each do
@data_server.delete_all_schedules
@downloader.clear_jobs_queue
end
it "download schedule for tomorrow" do
schedule = Schedule.new(Time.now + 1.day)
@data_server.create_schedule(schedule)
act_schedule = @downloader.download_schedule(schedule)
act_schedule.should == schedule.expected
end
after :all do
@data_server.stop
end
end
18
19. $ rspec spec -f doc
downloader
download schedule for today
download schedule for week
not download yesterday schedule
not download schedule after 7th day
download schedule if it was updated
download schedule with different event names
Finished in 120.089 seconds
6 examples, 1 failures
19
24. Данные Тестируем как
name, description текстовые поля
beginning - ending интервал времени
id числовое поле
24
25. Нормальное название
Длинное название
Стандартные разделители
“‘`|/,;:&<>^*!?«»
Пустое название
Пробелы
ЧуВсТвИтЕлЬнОсТь К рЕгИсТрУ
Окончания строк
^M, n, r
Диакритические знаки
àáâãäå
Плохие символы
♂♠♪
Греческий, арабский, китайский
Другая кодировка
Плохое выражение
“[|]’~<!--@/*$%^&#*/()?>,.*/-->
25
26. 1. Учить язык программирования
2. Использовать готовые библиотеки
3. Писать обертки
4. Отделять данные от тестов
5. Не забывать о «тестировании по выходу»
26
Добрый день, уважаемые коллеги! Давайте начнем.Мой доклад называется "Автотестирование веб-сервиса с помощью Ruby и Rspec". Но для начала давайте познакомимся.Я хотел бы узнать кто пришел на доклад.Кто из Вас занимается автоматизацией тестирования?Кто работает с Linux?Кто из Вас знает Ruby?
Теперь я расскажу немного о себе, чтобы вы знали кто я и почему вообще что-то рассказываю.Меня зовут Игорь Любин. Я закончил Казанский Государственный университет и имею степень кандидата физико-математических наук. В тестировании я работаю ровно 4 года, начал свою карьеру в Казани, учился в Санкт-Петербурге. Участвовал в конференциях SQAdays, был и докладчиком и организатором.
Последние полгода я живу в Москве и работаю в компании undev.ru. Наша компания занимается разработкой различных интернет-проектов.Основным языком разработки является Ruby. У нас работает самая большая команда Ruby разработчиков в Москве.
Цель этого доклада рассказать о своей работе. На примере из своей работы я покажу решение как можно автоматизировать веб-сервисы. Расскажу как написать свои обертки (helperы) на функциями сервиса, расскажу как организовать тесты, тестовые данные и сам тестовый проект в целом. Ну и в конце хотел бы получить обратную связь и узнать ваши мысли по этому поводу.
На практике встречаются проекты с массой бек-энд сервисов, и порой всю работу вашего приложения не видно через UI. Здесь UI лишь вершина айсберга. От нашего взгляда бывает скрыта масса различного рода сервисов. Для их проверки ручного тестирования через UI явно недостаточно. Для более качественной проверки прибегают к компонентному тестированию при помощи автоматизации.Для своего рассказа я выбрал один из таких сервисов, который скрыт глубоко под капотом.
Это сервис по скачиванию расписаний. На рисунке я его изобразил "черным ящиком". Он взаимодействует с 2-мя компонентами.Data Server- это сторонний сервер, который у себя выкладывает расписание событий в XML формате.Наш downloader ходит к этому DSyза расписанием событий, скачивает их, затем обрабатывает полученные данные, урезает их и в виде json файлов отправляет дальше в Web.Вот такой сервис, которому на вход приходит XML, а на выходе получается json, и надо тестировать. Как сказал выше здесь надо писать автоматизацию.
В моем случае язык программирования был жестко определен, практически без вариантов. Ruby надо сказать не самый плохой язык для программирования.Я использовал библиотеки из Ruby. Webrick - для написания эмулятора веб-сервера, iconv - для работы с кодировками.Фреймворком для запуска тестов был выбран rspec. Наиболее популярный для ruby, и что не мало важно по rspecу есть достаточно хорошей документации и примеров. На последнем слайде будет ссылка на один из них. Фреймворк я сам не писал, взял готовый.А вот драйвера готового нет, здесь я писал свои обертки над приложением, так называемые helperы.
Имеющуюся архитектуру тестового приложения мы проектируем в свои тесты и создаем над каждым имеющимся объектом, над каждой сущностью обертку. Так я получаю 2 будущих класса, с которыми буду работать в тестах. Интересующий нас DownloaderHelper и эмулятор DataServerHelper.В этих классах я описываю команды для взаимодействия с реальными сервисами.Эмулятор DSHнеобходим поскольку мы не можем на реальный сервер выкладывать свои тестовые данные.
Мы можем написать свой веб-сервер. С помощью webrick это делается буквально в одну строчку.А в конфигеdownloaderа прописываем, что теперь расписания надо скачивать по адресу нашего эмулятора.
Перед тем как тестировать нужно подготовить тестовые данные. Это я делаю следующим образом. Я подготавливаю пару файловXML-JSON.XML – я буду выкладывать на веб сервер.JSON – я буду сравнивать с тем что получается в результате теста.Причем в тестах я не буду явно использовать ссылки на XML и JSON. О них будет знать только объект Schedule, который я буду создавать перед тестом. И лишь он будет содержать всю информацию о расписаниях. На какой день мы создаем расписание, какую XML берем и с каким JSON сравниваем.Итак имея заготовленные тестовые данные…
Мы запускаем веб сервер, и выкладываем на нем XMLрасписания. Просто копируем заранее заготовленный файл с XML в папку вебсервера.
Затем просим наш downloader скачать эту XML. Мы вызываем команду закачки у нашего веб-сервиса, ждем достаточное время, переодически опрашивая веб-сервис не скачал ли он расписание. И как только он скачал возвращаем результат в переменную – актуальное раписание.
И последним шагом мы производим проверку только что скаченного расписания с заранее заготовленным файлом.Причем сравниваем не строки содержащие JSON, а преобразуем JSON в хеш, ассоциативный массив. И сравниваем массивы друг с другом.
Только что описанная процедура записывается в виде rspecтеста следующим образом.В rspecмы делаем описание нашего downloaderа. Этот тест говорит нам что downloader должен уметь скачивать расписания на завтра.
В начале теста есть 2 блока before.Before :all выполняется 1 раз перед всеми тестами.В нем мы создаем экземпляры наших объектов с которыми будем работать в тесте. И запускаем веб-сервер.Before :each выполняется перед каждым тестом. И перед каждым тестом мы осуществляем очистку состояний, на веб-сервере мы удаляем все старые файлы XMLек от предыдущих тестов, а у downloaderа чистим очередь работ по закачиванию.
В конце теста есть блок after :all. В котором мы останавливаем запущенный в начале теста веб-сервер.
Теперь разберем что происходит в тесте.Сначала мы создаем расписание на завтра. Затем выкладываем расписание на веб-сервер. Даунлоадер скачивает расписание. И в конце мы производим проверку актуального расписания с ожидаемым.Думаю тест понятен. Все почти на понятном английском.