SlideShare a Scribd company logo
1 of 41
Download to read offline
VIPER
Чистая архитектура для iOS
Знакомство с VIPER
● Доклад и обсуждения на MBLTDev’15
● Конференция Rambler.iOS V
● Различные статьи и видео
2
MVC
3
VIEW
CONTROLLER
MODEL
User action
Update Notify
Update
Cocoa MVC
4
VIEW
UIView
CONTROLLER
UIViewController
MODEL
Update
Notify
Минусы
● В контроллерах смешивается бизнес-логика и UI
● MVC == Massive View Controllers
● Глобальные стейты и переменные
● Контроллеры тяжело тестировать
Cocoa MVC
5
SOLID
S - Single responsibility principle (Принцип единственной ответственности)
O - Open/closed principle (Принцип открытости/закрытости)
L - Liskov substitution principle (Принцип подстановки Барбары Лисков)
I - Interface segregation principle (Принцип разделения интерфейса)
D - Dependency inversion principle (Принцип инверсии зависимостей)
6
VIPER
7
ROUTER
VIEW PRESENTER
E
E
INTERACTOR
● Четкое распределение ролей внутри модуля
● Легкая расширяемость и поддержка
● Тестируемость
● Избавление от Massive View Controllers
Что обещает VIPER?
8
VIPER от Rambler
9
ASSEMBLY
ROUTER
VIEW PRESENTER INTERACTOR
SERVICE
SERVICE
SERVICE
E
E
VIEW
● Пассивна
● Отвечает только за передачу событий в PRESENTER
10
ASSEMBLY
ROUTER
VIEW PRESENTER INTERACTOR
SERVICE
SERVICE
SERVICE
E
E
INTERACTOR
● Бизнес-логика
11
ASSEMBLY
ROUTER
VIEW PRESENTER INTERACTOR
SERVICE
SERVICE
SERVICE
E
E
PRESENTER
● Сердце модуля
12
ASSEMBLY
ROUTER
VIEW PRESENTER INTERACTOR
SERVICE
SERVICE
SERVICE
E
E
ROUTER
● Переходы
13
ASSEMBLY
ROUTER
VIEW PRESENTER INTERACTOR
SERVICE
SERVICE
SERVICE
E
E
ASSEMBLY
● Сборщик модуля
● Typhoon
14
ASSEMBLY
ROUTER
VIEW PRESENTER INTERACTOR
SERVICE
SERVICE
SERVICE
E
E
SERVICE
● Бизнес-логика
● INTERACTOR превращается в фасад над сервисами
15
ASSEMBLY
ROUTER
VIEW PRESENTER INTERACTOR
SERVICE
SERVICE
SERVICE
E
E
VIPER на практике
16
О приложении
● Новости
● Объявления
● События
● Профили пользователей
и многое другое…
Практически все экраны приложения – таблица
Практически все экраны отображают данные, полученные с сервера
17
Типовой модуль
ASSEMBLY
<ViewOutput> <InteractorInput>
<RouterInput>
<Service>
UIViewController
UIView, UIControl
ФабрикиUI-компонентов
Фабрики view model
Состояние модуля
Фабрики сабмодулей
Обработка событий от View
Обновление View
Взаимодействие с
сервисами
<ModuleInput> <ModuleOutput>
Сетевые запросы
Данные сессии
Информация о текущем
пользователе
Настройки приложения
VIEW PRESENTER INTERACTOR
ROUTER
<ViewInput> <InteractorOutput>
SERVICE
18
Работа типового модуля
Начальная загрузка
objectsobjects
Presenter InteractorView
19
viewDidLoad
displayData:
didTriggerReadyEvent
didFetchData:
fetchData
Работа типового модуля
Подгрузка данных
objectsobjects
Presenter InteractorView
20
onInfiniteScroll:
appendData:
didTriggerInfiniteScrollEvent:
didFetchNextData:
fetchNextData
Работа типового модуля
Обработка внешних событий
objectsobjects
Presenter InteractorView
21
prependData: didReceiveData: didReceivePushNotification:
Сервисы и их зависимости
● Single responsibility
● Взаимодейтвие через протоколы
● Dependency Injection (Typhoon)
22
FeedService
FeedBlocksFactoryRequestCreator
SessionStorage
AppConfiguration
Переходы
objects
Feed Router Transition HandlerFeed Presenter
23
prependData: showJobContentWithObject:
openModule:
configureWithObject:
id
Module Input
objects
Job Presenter (Module Input)
Разбиение на модули
24
Navigation module
Tabbar module
Feed module
Jobs module
Разбиение на модули
25
Carousel module
People module
Взаимодействие с сабмодулями
26
ASSEMBLY
<ViewOutput> <InteractorInput>
<RouterInput>
<ModuleInput> <ModuleOutput>
VIEW PRESENTER INTERACTOR
ROUTER
<ViewInput> <InteractorOutput>
VIEWPRESENTER
<ViewOutput>
<ViewInput>
<Input><Output>
Main Module
Submodule
Взаимодействие с сабмодулями
objects
Jobs moduleFeed module
27
Fetch content
Instantiate modules
Prepare sections
Display sections
configureModule
sectionItemWithObject:
view model
Insert cells ‘SHOW MORE’ tap
Index path
● Переиспользование сабмодулей
● Общая логика
● Общие элементы
● Однотипное представление
Контент экраны
28
Базовый модуль
29
Base View Base Presenter Base Interactor
Base Router
Service1
Service2
Job View
Job Assembly
Job Presenter Job Interactor
Job Router
Service3
Итоги
30
Первые впечатления
● ААА! Сложна!
● Очень много связей
● Assembly(Typhoon) == Магия
● Это overkill
31
Если разобраться
● Все абсолютно прозрачно
● Все связи логичные
● Assembly(Typhoon) == Фреймворк
32
Merge
● Xcode не умеет безболезненно добавлять файлы в проект
● Огромное число конфликтов
● Merge мог занимать около 40 минут
33
xUnique
● Скрипт на python
● Встраивается в проект как post-build action
● В разы уменьшает количество конфликтов
Минусы
● После работы скрипта теряется текущая навигация проекта
● Если вызвать несколько раз одновременно - поломает проект
34
Кодогенератор
Generamba
● Рутинные тесты создаются сразу
● Легко создавать свои шаблоны
● Гибкость внутри шаблонов
● Отзывчивость разработчиков
35
Адаптация к изменяющимся требованиям
36
Адаптация к изменяющимся требованиям
3737
Адаптация к изменяющимся требованиям
● Новый модуль для свайпа контента
● Подготовка старых контент модулей к отображению в новом
● Всю логику получения и кеширования контента переместили в
новый сервис
38
Тестирование
● Взаимодействие внутри модуля
● Взаимодействие между модулями
● Взаимодействие модулей с сервисами
● Сервисы
39
Итог
● Проект поделен на модули
● Бизнес-логика отделена от UI
● Проект легко покрывается тестами
● Предсказуемость поведения
● VIPER сочетается с scrum
40
Вопросы?
41

More Related Content

Similar to 2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS

Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSГлеб Тарасов
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектахe-Legion
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextGoSharp
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
 
Mvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patternsMvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patternsIvan Dyachenko
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Sergiy Shychynov
 
The MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCBulat Khabirov
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETDev2Dev
 
Модульная структура
Модульная структураМодульная структура
Модульная структураDenis Tsvettsih
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Denis Tsvettsih
 
Viper в ios проектах
Viper в ios проектахViper в ios проектах
Viper в ios проектахAnvar Basharov
 
Yet another architectur. Как устроены приложения SuperJob изнутри
Yet another architectur.  Как устроены приложения SuperJob изнутриYet another architectur.  Как устроены приложения SuperJob изнутри
Yet another architectur. Как устроены приложения SuperJob изнутриDenisenko Sergei
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic appsDenis Izmaylov
 

Similar to 2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS (20)

Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
Mvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patternsMvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patterns
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Backbone lesson 1
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4
 
The MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVC
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
 
Toggle your app
Toggle your appToggle your app
Toggle your app
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus
 
Viper в ios проектах
Viper в ios проектахViper в ios проектах
Viper в ios проектах
 
MVVM in WPF
MVVM in WPFMVVM in WPF
MVVM in WPF
 
Yet another architectur. Как устроены приложения SuperJob изнутри
Yet another architectur.  Как устроены приложения SuperJob изнутриYet another architectur.  Как устроены приложения SuperJob изнутри
Yet another architectur. Как устроены приложения SuperJob изнутри
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
 

More from Омские ИТ-субботники

2017-08-12 01 Алексей Коровянский. Привет, ARKit!
2017-08-12 01 Алексей Коровянский. Привет, ARKit!2017-08-12 01 Алексей Коровянский. Привет, ARKit!
2017-08-12 01 Алексей Коровянский. Привет, ARKit!Омские ИТ-субботники
 
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKitОмские ИТ-субботники
 
2017-05-06 02 Илья Сиганов. Зачем учить машины?
2017-05-06 02 Илья Сиганов. Зачем учить машины?2017-05-06 02 Илья Сиганов. Зачем учить машины?
2017-05-06 02 Илья Сиганов. Зачем учить машины?Омские ИТ-субботники
 
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальноеОмские ИТ-субботники
 
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системыОмские ИТ-субботники
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOpsОмские ИТ-субботники
 
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидацииОмские ИТ-субботники
 
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...Омские ИТ-субботники
 
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...Омские ИТ-субботники
 
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 02 Алексей Городецкий. Как пишут компиляторыОмские ИТ-субботники
 
2016-12-03 03 Евгений Тюменцев. DSL на коленке
2016-12-03 03 Евгений Тюменцев. DSL на коленке2016-12-03 03 Евгений Тюменцев. DSL на коленке
2016-12-03 03 Евгений Тюменцев. DSL на коленкеОмские ИТ-субботники
 
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборотОмские ИТ-субботники
 
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...Омские ИТ-субботники
 
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность 2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность Омские ИТ-субботники
 
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?Омские ИТ-субботники
 
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикерОмские ИТ-субботники
 
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
2016-10-01 01 Звиад Кардава. Welcome to Internet of ThingsОмские ИТ-субботники
 

More from Омские ИТ-субботники (20)

2017-08-12 01 Алексей Коровянский. Привет, ARKit!
2017-08-12 01 Алексей Коровянский. Привет, ARKit!2017-08-12 01 Алексей Коровянский. Привет, ARKit!
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
 
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
 
2017-05-06 02 Илья Сиганов. Зачем учить машины?
2017-05-06 02 Илья Сиганов. Зачем учить машины?2017-05-06 02 Илья Сиганов. Зачем учить машины?
2017-05-06 02 Илья Сиганов. Зачем учить машины?
 
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
 
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
 
2017-02-04 02 Яков Лило. Решение задач
2017-02-04 02 Яков Лило. Решение задач2017-02-04 02 Яков Лило. Решение задач
2017-02-04 02 Яков Лило. Решение задач
 
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
 
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
 
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
 
2016-12-03 03 Евгений Тюменцев. DSL на коленке
2016-12-03 03 Евгений Тюменцев. DSL на коленке2016-12-03 03 Евгений Тюменцев. DSL на коленке
2016-12-03 03 Евгений Тюменцев. DSL на коленке
 
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
 
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
 
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность 2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
 
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
 
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
 
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
 
2016-09-17 03 Василий Полозов. WebRTC
2016-09-17 03 Василий Полозов. WebRTC2016-09-17 03 Василий Полозов. WebRTC
2016-09-17 03 Василий Полозов. WebRTC
 

2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS