SlideShare a Scribd company logo
1 of 51
Download to read offline
Как мы делаем
раскладку Календаря
     Владимир Рудных
Обо мне


• тимлид Календаря Mail.Ru
• pythonista
• бывший перловик
• ленивый программист



                         Moscow Django MeetUp №7
Календарь Mail.Ru
• calendar.mail.ru
• написан на Python
• Django framework
• PostgreSQL
• Rich Internet Application
• RESTful API
• шаблонизация на клиенте (Fest)

                              Moscow Django MeetUp №7
calendar.mail.ru




             Moscow Django MeetUp №7
Разработка в Mail.Ru

 Тестовое
                             Production
окружение




             Офисная сеть
            (разработчики)




                               Moscow Django MeetUp №7
Раскладка проекта



репозиторий            много
     git              серверы
                       серверы
                     серверов


              как?



                     Moscow Django MeetUp №7
Раскладка проекта



репозиторий   "rsync"     много
     git                 серверы
                          серверы
                        серверов
                 ?

   Ахаха, мы же не перловики!


                        Moscow Django MeetUp №7
Раскладка проекта




             Moscow Django MeetUp №7
Раскладка проекта



  Вся мощь Python
      с нами!



                Moscow Django MeetUp №7
Раскладка проекта


• setuptools
• distribute
• easy_install
• pip



                     Moscow Django MeetUp №7
Раскладка проекта


• python setup.py install
• pip install package
• pip install -r requirements.txt




                               Moscow Django MeetUp №7
Раскладка проекта



     NO WAY!




               Moscow Django MeetUp №7
Раскладка проекта


Загаживать систему пакетами?

Что делать с зависимостями?

 Как отслеживать их версии?



                     Moscow Django MeetUp №7
Раскладка проекта

А если нужна другая версия Python?

        А что делать, если
        нужно откатиться?

   Что делать с зависимостями
          при откате?


                         Moscow Django MeetUp №7
Раскладка проекта



       АД




             Moscow Django MeetUp №7
Раскладка проекта



 Вспоминаем про
    virtualenv



                 Moscow Django MeetUp №7
Vitrualenv


• весь проект в одном месте
• со всеми зависимостями
• любые версии Python и модулей
• не засоряет систему



                           Moscow Django MeetUp №7
Раскладка проекта


        Но как раскладывать?
             Makefile? Fabric?
                    RPM*!

* RPM, DEB или любой другой формат пакетов
                                  Moscow Django MeetUp №7
RPM
• весь проект со всеми зависимостями
• в одном пакете
• накатить/откатить - без проблем
• версионность пакетов
• версионность отдельных модулей
• не засоряет систему
• админы умеют (привет, CPAN!)

                          Moscow Django MeetUp №7
RPM



Как собирать?
 Jenkins CI



              Moscow Django MeetUp №7
сборка RPM
• пишем fabfile для запуска сборки
• пишем SPEC-файл для RPM
• заводим задачу в Jenkins CI
• ...
• пушим ветку в git, получаем RPM:
  - git master -> RPM stable
  - git prerelease -> RPM testing

                               Moscow Django MeetUp №7
Jenkins CI


 Задачи в Jenkins:
• development - все ветки
• prerelease - ветка prerelease
• release - ветка master



                            Moscow Django MeetUp №7
плюшки Jenkins
• автоматическая сборка RPM
• continuous integration
• тесты
• lint
• coverage
• change log
• мгновенная обратная связь

                           Moscow Django MeetUp №7
Jenkins CI




             Moscow Django MeetUp №7
Jenkins CI: report




               Moscow Django MeetUp №7
Jenkins jobs
            dev   prerelease       release

 pylint     ✔
 flake8     ✔        ✔
coverage    ✔        ✔
  tests     ✔        ✔               ✔
  RPM                ✔               ✔
                          Moscow Django MeetUp №7
Раскладка проекта


 Разложили, что дальше?
Как узнать, что всё хорошо?
   Нужен мониторинг!


                   Moscow Django MeetUp №7
Мониторинг

• метрики в Graphite (+Statsd)
• ошибки в Sentry
• дежурные администраторы
• обращения пользователей
 в службу поддержки


                          Moscow Django MeetUp №7
Graphite



 Что будем мониторить?
Да всё будем мониторить!



                  Moscow Django MeetUp №7
Graphite
• количество запросов
• тип запросов
• время выполнения
• время ожидания
• таймауты
• количество ошибок
• выкладки и рестарты

                        Moscow Django MeetUp №7
Graphite



  Где будем мониторить?
Да везде будем мониторить!



                   Moscow Django MeetUp №7
Graphite
• клиент (браузер)
• сервер (cpu, memory, hardware)
• nginx
• uwsgi
• приложение
• БД
• обвязка (очереди, рассыльщики)

                          Moscow Django MeetUp №7
Раскладка проекта


   Разложились.
   Есть ошибки.
   Что делать?


                 Moscow Django MeetUp №7
Раскладка проекта



 Просить админов
  погрепать логи?



               Moscow Django MeetUp №7
Раскладка проекта




             Moscow Django MeetUp №7
Раскладка проекта



     Sentry!




               Moscow Django MeetUp №7
Sentry

Получаем все ошибки
Frontend + Backend
  в удобном виде.
     Realtime!

                 Moscow Django MeetUp №7
Sentry
• url ошибки
• данные запроса (request)
• полный stacktrace ошибки
• версии модулей
• информация о пользователе
 (email, браузер, ОС)
     Для каждой ошибки!
                             Moscow Django MeetUp №7
Sentry

    За исключением
    приватных данных
     пользователя =)


“password”: “********”


                       Moscow Django MeetUp №7
Sentry




         Moscow Django MeetUp №7
Sentry




         Moscow Django MeetUp №7
Раскладка проекта



      Но как
 избежать ошибок?



               Moscow Django MeetUp №7
Раскладка проекта


  Тестирование
        +
   Code review


             Moscow Django MeetUp №7
Тестирование

• nose
• factory_boy
• mock


• Selenium (coming soon...)


                              Moscow Django MeetUp №7
Тестирование

• модульное
• функциональное
• регрессионное
• альфа (тестировщики)
• бета (пользователи)


                         Moscow Django MeetUp №7
Code review



Phabricator



          Moscow Django MeetUp №7
Code review


• подписка на коммиты (с фильтрами)
• аудит и рецензирование коммитов
• просмотр кода и diff’ов




                            Moscow Django MeetUp №7
Подведём итоги




            Moscow Django MeetUp №7
Best practice
• пишем на Python
• используем virtualenv
• менеджеры пакетов ОС (RPM)
• автоматизируем процесс (Jenkins)
• мониторим всё и вся
• тесты, тесты, тесты!
• обратная совместимость кода
• code review, code style + lint
                              Moscow Django MeetUp №7
Ссылки

• Virtualenv: virtualenv.org
• Jenkins: jenkins-ci.org
• Graphite: graphite.wikidot.com
• Statsd: github.com/etsy/statsd
• Sentry: getsentry.com
• Phabricator: phabricator.org


                               Moscow Django MeetUp №7
Контакты


• Владимир Рудных
• rudnyh@corp.mail.ru
• github.com/dreadatour
• dreadatour.habrahabr.ru



                            Moscow Django MeetUp №7

More Related Content

What's hot

Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромKirill Kovalchuk
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Yandex
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаAleksandr Makhomet
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON
 
My talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruMy talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruAlex Chistyakov
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков2ГИС Технологии
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Oleg Poludnenko
 
Михаил Коробов: Как перейти на Python 3
Михаил Коробов: Как перейти на Python 3Михаил Коробов: Как перейти на Python 3
Михаил Коробов: Как перейти на Python 3it-people
 
Django. Web project full circle
Django. Web project full circleDjango. Web project full circle
Django. Web project full circleOlexiy Strashko
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Pythonautomated-testing.info
 
Python & Web: От простого к сложному
Python & Web: От простого к сложномуPython & Web: От простого к сложному
Python & Web: От простого к сложномуIlya Bolkhovsky
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовYandex
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Ontico
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?CodeFest
 
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Anatoly Sharifulin
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliverySQALab
 

What's hot (20)

Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодером
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кода
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open Source
 
My talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruMy talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ru
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
 
Михаил Коробов: Как перейти на Python 3
Михаил Коробов: Как перейти на Python 3Михаил Коробов: Как перейти на Python 3
Михаил Коробов: Как перейти на Python 3
 
Django. Web project full circle
Django. Web project full circleDjango. Web project full circle
Django. Web project full circle
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
 
Python & Web: От простого к сложному
Python & Web: От простого к сложномуPython & Web: От простого к сложному
Python & Web: От простого к сложному
 
Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
 
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
 

Similar to Как мы делаем раскладку Календаря@Mail.Ru

Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьPVasili
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорьdrupalconf
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуИгорь Родионов
 
Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Anastasia Goryacheva
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформаSQALab
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Yandex
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Anastasia Lubennikova
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TKConf
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаYandex
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...Sergey Ponomarev
 

Similar to Как мы делаем раскладку Календаря@Mail.Ru (20)

Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорь
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойменту
 
Ryazan
RyazanRyazan
Ryazan
 
Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
Little Service in 2h
Little Service in 2hLittle Service in 2h
Little Service in 2h
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
Sivko
SivkoSivko
Sivko
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
 

Как мы делаем раскладку Календаря@Mail.Ru