SlideShare ist ein Scribd-Unternehmen logo
1 von 129
Downloaden Sie, um offline zu lesen
Rempl – крутая платформа 

для крутых инструментов
Роман Дворнов
Москва, 2017
Чем дольше я занимаюсь rempl, 

тем больше вижу возможностей
2
Руководитель 

фронтенда в Avito
Основной интерес – SPA
Open source:

basis.js, CSSO, 

component-inspector, 

csstree, rempl и другие
Инструменты
Что значит инструмент?
«Инструменты» бывают разные!
React Developer Tools
github.com/facebook/react-devtools
React Developer Tools
github.com/facebook/react-devtools
Redux DevTools Extension
github.com/zalmoxisus/redux-devtools-extension
Reactotron
github.com/reactotron/reactotron/
Reactotron
github.com/reactotron/reactotron/
Basis.js DevTools
github.com/basisjs/basisjs
Анатомия инструментов
11
Runtime
ToolSubject
Простой случай
Инструмент работает 

в том же runtime, что и
объект изучения – в нем
же отображает интерфейс
Удаленный инструмент
12
RuntimeRuntime
Subject Tool
Удаленный инструмент
12
RuntimeRuntime
Subject Tool
???
Почему удаленные
инструменты?
13
Мобильные устройства
Удаленное
взаимодействие
Editor and devtoolsSubject
Несколько экранов / контексты
Удаленное
взаимодействие
Subject Editor and devtools
Browser's Developer Tools
Browser's Developer Tools
runtime #1
Browser's Developer Tools
runtime #1
runtime #2
Browser's Developer Tools
runtime #1
Удаленное
взаимодействие
runtime #2
Удаленное взаимодействие
=
больше сценариев
17
Идем к удаленным инструментам
19
Runtime
ToolSubject
Вернемся в начало
Инструмент работает 

в том же runtime, что и
объект изучения – в нем
же отображает интерфейс
20
Runtime
Data
Subject
Разделение ответственности
UI
Заметим, что одна часть
инструмента собирает данные, 

а другая их визуализирует
Tool
20
Runtime
Data
Subject
Разделение ответственности
UI
Заметим, что одна часть
инструмента собирает данные, 

а другая их визуализирует
Tool
21
Разделение ответственности
Хорошо ложится на паттерн
publisher-subscriber
Runtime
Data
Subject
UI
Tool
21
Разделение ответственности
Хорошо ложится на паттерн
publisher-subscriber
Runtime
Data
Subject
UI
Publisher
собирает и публикует данные
Tool
21
Разделение ответственности
Хорошо ложится на паттерн
publisher-subscriber
Runtime
Data
Subject
UI
Publisher
собирает и публикует данные
Subscriber
визуализирует полученные данные
Tool
Схема работы
22
RuntimeRuntime
PublisherSubject
Subscriber (UI) может быть вынесен в произвольный runtime
Tool
Subscriber
Схема работы
22
RuntimeRuntime
PublisherSubject
Transport
Subscriber (UI) может быть вынесен в произвольный runtime
Tool
Subscriber
Проблемы 

разработки инструментов
Ключевые проблемы
• Сложность реализации инфраструктуры
(интеграции, транспорт, протоколы, API и т.д.)
• Неудобство процесса разработки
• Версионирование
• …
24
habrahabr.ru/company/jugru/blog/317060/
25
Полезная функциональность
Инфраструктура
(оверхед)
Разные разработчики 

решают одинаковые проблемы, 

наступая на одни и те же грабли
26
Решение: rempl
Rempl спешит на помощь
29
RuntimeRuntime
Publisher Subscriber (UI)Subject
Rempl (remote platform)


платформа для получения
контролируемого удаленного доступа 

к runtime используя UI
30
Терминология
• Subject – то, за чем наблюдаем
• Publisher – собирает и публикует данные
• Subscriber – получает данные и строит интерфейс
• Transport – канал и протокол взаимодействия
• Host – интеграция в другие приложения (плагин), 

создает sandbox для выбранного publisher'а
• Sandbox – изолированная среда для subscriber'а
• Env – доступ к окружению с дополнительной 

функциональностью (devtools, редактор…)
31
Терминология
• Subject – то, за чем наблюдаем
• Publisher – собирает и публикует данные
• Subscriber – получает данные и строит интерфейс
• Transport – канал и протокол взаимодействия
• Host – интеграция в другие приложения (плагин), 

создает sandbox для выбранного publisher'а
• Sandbox – изолированная среда для subscriber'а
• Env – доступ к окружению с дополнительной 

функциональностью (devtools, редактор…)
31
Инструмент
Терминология
• Subject – то, за чем наблюдаем
• Publisher – собирает и публикует данные
• Subscriber – получает данные и строит интерфейс
• Transport – канал и протокол взаимодействия
• Host – интеграция в другие приложения (плагин), 

создает sandbox для выбранного publisher'а
• Sandbox – изолированная среда для subscriber'а
• Env – доступ к окружению с дополнительной 

функциональностью (devtools, редактор…)
31
Инструмент
Фокус на самом инструменте –
об остальном позаботится rempl
32
Принцип работы
Принцип работы
34
Publisher Subscriber (UI)
Принцип работы
34
Publisher Subscriber (UI)
publish(data)
Принцип работы
34
Publisher Subscriber (UI)
publish(data) subscribe(data => { … })
Принцип работы
34
Publisher Subscriber (UI)
publish(data) subscribe(data => { … })
on each update
Принцип работы
34
Publisher Subscriber (UI)
publish(data) subscribe(data => { … })
call('method', …args, callback)
on each update
Принцип работы
34
Publisher Subscriber (UI)
publish(data) subscribe(data => { … })
call('method', …args, callback)method(…args, callback)
on each update
Принцип работы
34
Publisher Subscriber (UI)
publish(data) subscribe(data => { … })
call('method', …args, callback)method(…args, callback)
callback(…args)
on each update
Где живет subscriber?
35
• Subcriber может запускаться в произвольном
WebView
• Если WebView-клиент будет знать о subscriber,
то будет заточен на один UI и его версию
• Поэтому информация о subscriber хранится в
publisher'е, а клиент ее запрашивает
«Минутка» кода
Live coding
37
npm install rempl
38
Publisher
39
<script src="node_modules/rempl/dist/rempl.js"></script>
<script>
var myTool = rempl.createPublisher('myTool', getUI);
setInterval(function() {
myTool.publish(Date.now());
});
function getUI(settings, sendUI) {
sendUI(null, 'script', '/* JavaScript */');
}
</script>
Subscriber
40
var myTool = rempl.getSubscriber();
myTool.subscribe(function(data) {
document.body.innerHTML = new Date(data);
});
Обмен командами (RPC)
41
endpoint.provide(
'method',
function(…args, callback) {
/* ... */
}
);
На одной стороне На другой стороне
endpoint.callRemote(
'method',
/* … args */
/* callback */
);
endpoint – publisher или subscriber
декларируем методы вызываем метод
RPC API
42
publish(data)
provide(methods)
revoke(method)
callRemote(method, ...args, cb)
ns(name)
publish/provide/...
subscribe(fn)
provide(methods)
revoke(method)
callRemote(method, ...args, cb)
onRemoteMethodsChanged(fn)
ns(name)
subscribe/provide/...
Publisher Subscriber
Дистрибуция subscriber'а (UI)
44
RuntimeRuntime
Publisher
Subscriber (UI)
Инициализация Subscriber'а
44
RuntimeRuntime
Rempl host
Publisher
Subscriber (UI)
Инициализация Subscriber'а
44
RuntimeRuntime
Rempl host
Publisher
Subscriber (UI)
Инициализация Subscriber'а
44
RuntimeRuntime
Rempl host
getRemoteUI
Publisher
Subscriber (UI)
Инициализация Subscriber'а
44
RuntimeRuntime
Rempl host
getRemoteUI
{ type: 'script',
content: '/* js */' }
{ type: 'url',
content: 'http://…' }
или
Publisher
Subscriber (UI)
Инициализация Subscriber'а
44
RuntimeRuntime
Rempl host
getRemoteUI
Rempl sandbox
{ type: 'script',
content: '/* js */' }
{ type: 'url',
content: 'http://…' }
или
Publisher
Subscriber (UI)
Инициализация Subscriber'а
44
RuntimeRuntime
Rempl host
getRemoteUI
Subscriber (UI)
Rempl sandbox
{ type: 'script',
content: '/* js */' }
{ type: 'url',
content: 'http://…' }
или
Publisher
Subscriber (UI)
Инициализация Subscriber'а
44
RuntimeRuntime
Rempl host
getRemoteUI
Subscriber (UI)
Rempl sandbox
{ type: 'script',
content: '/* js */' }
{ type: 'url',
content: 'http://…' }
или
Publisher
Subscriber (UI)
Инициализация Subscriber'а
Типы subscriber'а
45
script – JavaScript bundle (string)
sandbox.eval(rempl.source)
sandbox.eval(content)
url – адрес страницы с subcriber'ом
sandbox.src = content
// нужно подключить rempl самим
Better for
production
Better for 

development
rempl.source (quine)
46
Rempl может реплицировать себя
Не нужно включать rempl.js в subscriber (для script)
;(function $rempl() {
// … rempl bundle (rempl.js)
rempl.source = ';(' + $rempl + ').call(this);';
}).call(this);
Финальный шаг сборки
47
47
Not bad ;)
48
Publisher
Publisher
Subscriber (UI)
Rempl
Типовая самодостаточная сборка
решения на rempl
48
Publisher
Publisher
Subscriber (UI)
Rempl
Типовая самодостаточная сборка
решения на rempl
Rempl sandbox
Transport
WebSocket
50
Publisher Subscriber (UI)Server
Протокол #1 Протокол #2
Соединение publisher-subscriber = 2 WS соединения
Транспорт не всегда WebSocket
Транспорт не всегда WebSocket
Event based
communication

Сервер явно не нужен
Extending DevTools
52
developer.chrome.com/extensions/devtools
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Panel
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Panel
Runtime
Background page
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Panel
Runtime
Background page
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Panel
Runtime
Background page
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Panel
Runtime
Background page
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Panel
Runtime
Background page
Runtime (devtools)
Что это значит для нас?
53
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Panel
Runtime
Background page
Соединение publisher-subscriber = 4 event-based соединения
Хорошая новость – 

за вас это всё сделает rempl
54
Новые горизонты
Не только браузер
Insight #1:
Publisher работает только с данными – 

можно запустить в node.js
57
Publisher – косметические изменения
58
var fs = require('fs');
var rempl = require('rempl');
var myTool = rempl.createPublisher('myTool', getUI);
function getUI(settings, sendUI) {
sendUI(null, 'script', fs.readFileSync('./ui.js', 'utf8'));
}
...
И мы получаем ту же
инфраструктуру и для node.js
59
webpack-dashboard
github.com/FormidableLabs/webpack-dashboard
webpack-runtime-analyzer
github.com/smelukov/webpack-runtime-analyzer
webpack-runtime-analyzer
github.com/smelukov/webpack-runtime-analyzer
Плюсы
• Можно открыть в любом rempl-хосте
• Построен на web-технологиях
• Проще делать UI
• Возможность сделать более богатый UX
• Можно прикрутить готовые решения для
анализа и пр.
62
Insight #2:


ServiceWorker,
WebWorker,
…
63
Insight #3:


Publisher может «жить» 

не только в JavaScript
64
Source + Runtime
Два мира инструментов
66
Source
Static analysis
Editors, IDEs, linters, etc
Runtime
Dynamic analysis
Devtools, etc
Представьте, что у вас есть
информация о коде, контексте
редактирования и состоянии
runtime в одном месте…
67
Расширяем возможности subscriber'а
68
RuntimeRuntime
Rempl host
Subscriber (UI)
Rempl sandbox
Publisher
Subscriber (UI)
Editor
Rempl plugin
Расширяем возможности subscriber'а
68
RuntimeRuntime
Rempl host
Subscriber (UI)
Rempl sandbox
Publisher
Subscriber (UI)
Editor
Rempl plugin
Расширяем возможности subscriber'а
68
RuntimeRuntime
Rempl host
Subscriber (UI)
Rempl sandbox
Publisher
Subscriber (UI)
Несколько идей
• Во что ресолвится ссылка на модуль и переход 

к нужному файлу
• Во что транспилируется редактируемый файл
• Подсвечивать на странице то, на что влияет
редактируемый файл или его часть
• Доступные в шаблоне биндинги или текущие значения
• … ограничивается лишь вашей фантазией
69
rempl плагин для Atom
70
github.com/rempl/host-atom
Demo
env
71
Remote devtools → remote apps
Инфраструктура позволяет
создавать разноплановые
решения (приложения)
73
Demo
shower-remote-control
74
youtu.be/So_81loUFx0
rempl не для построения сервисов,
но отличная возможность 

для экспериментов
75
Планы
rempl в фазе MVP – 

многое на подходе
77
В первую очередь
• Стабилизировать API
• Документация, туториалы, примеры
• Обкатать ключевые компоненты (хосты,
транспорты и т.д.), реализовать недостающее
• Больше опций для поставки UI
78
Интеграции
• Browser's devtools
• Chrome (Opera)
• Firefox (планируется)
• В других браузерах пока невозможно
• Редакторы и IDE
• Atom
• VS Code (github.com/Microsoft/vscode/issues/22068)
• JetBrains IDEs (планируется)
• …
79
В долгосрочной перспективе
• SDK для наиболее частых задач (данные, DOM etc)
• Перевести существующие инструменты на rempl
• Безопасность
• Возможность авторизации и разделения прав
• Connection specific content
• … новые идеи появляются постоянно ;)
80
Подводим итоги
Rempl (remote platform)


платформа для получения
контролируемого удаленного доступа 

к runtime используя UI
82
В чем польза
83
Для разработчиков
• Не нужно тратить 

время на инфраструктуру
• Готовые решения 

для типовых задач
• Надежная и обкатанная
платформа (в перспективе)
• Не нужно наступать на грабли ;)
• Не нужно ставить плагины
под каждый инструмент
• Возможность выбрать
наиболее подходящий
сценарий использования
• Нужно разобраться только
с одним решением (rempl)
Для пользователей
84
Subject
Subject
in-pageSubscriber (UI)
Browser
Node.js
Browser's Developer Tools
Browser
Editor
Subscriber (UI)
Subscriber (UI)
Electron app
Subscriber (UI)
Subscriber (UI)
in-pagePublisher
in-pagePublisher
85
Subject
Subject
Subscriber (UI)
Browser
Node.js
Browser's Developer Tools
Browser
Editor
Subscriber (UI)
Subscriber (UI)
Subscriber (UI)
Publisher
Publisher
Одна из миcсий проекта – 

снизить порог входа
в разработку инструментов
86
87
Rempl – первопроходец
github.com/rempl
88
Присоединяйтесь,

поддерживайте,

делитесь идеями …
Интересно,

что получится у вас
@rdvornov
rdvornov@gmail.ru github.com/rempl
Роман Дворнов
Вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo Os
HighLoad2009
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)
Badoo Development
 

Was ist angesagt? (20)

QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 
Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования Go
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Структура кода на С++
Структура кода на С++Структура кода на С++
Структура кода на С++
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Html лаб 2
Html лаб 2Html лаб 2
Html лаб 2
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo Os
 
Опыт внедрения Docker .
 Опыт внедрения Docker .  Опыт внедрения Docker .
Опыт внедрения Docker .
 
Олег Савкин
Олег СавкинОлег Савкин
Олег Савкин
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходников
 
Base php 1
Base php 1Base php 1
Base php 1
 
Как компилируется программа на С++?
Как компилируется программа на С++?Как компилируется программа на С++?
Как компилируется программа на С++?
 
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
 
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)
 
Golang
GolangGolang
Golang
 
PHP: SAPI
PHP: SAPIPHP: SAPI
PHP: SAPI
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Problem my sql_2
Problem my sql_2Problem my sql_2
Problem my sql_2
 

Ähnlich wie Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)

Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментов
Roman Dvornov
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
Roman Dvornov
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
Кирилл Толкачёв
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщика
mcslayer
 

Ähnlich wie Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito) (20)

Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментов
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Конкурс для разработчиков от Evernote
Конкурс для разработчиков от EvernoteКонкурс для разработчиков от Evernote
Конкурс для разработчиков от Evernote
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
Tdd php
Tdd phpTdd php
Tdd php
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщика
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
 
"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
 
Little Service in 2h
Little Service in 2hLittle Service in 2h
Little Service in 2h
 

Mehr von AvitoTech

Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
AvitoTech
 

Mehr von AvitoTech (20)

Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
 
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
 
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
 
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений Фомченко
 
Migro - Юрий Богомолов
Migro - Юрий БогомоловMigro - Юрий Богомолов
Migro - Юрий Богомолов
 
TableKit - Максим Соколов
TableKit - Максим СоколовTableKit - Максим Соколов
TableKit - Максим Соколов
 
Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)
 
SimplePEG - Алексей Охрименко
SimplePEG - Алексей ОхрименкоSimplePEG - Алексей Охрименко
SimplePEG - Алексей Охрименко
 
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
 Как перестать бояться и начать контрибьютить - Алексей Кудрявцев Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
 
"Анонимизация фото с помощью Vision", Хомутников Тимофей, Avito
"Анонимизация фото с помощью Vision",  Хомутников Тимофей, Avito"Анонимизация фото с помощью Vision",  Хомутников Тимофей, Avito
"Анонимизация фото с помощью Vision", Хомутников Тимофей, Avito
 
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
 
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb..."ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
 
ASO for iOS 11
ASO for iOS 11ASO for iOS 11
ASO for iOS 11
 
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
 
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
 
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
 
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
 
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий РубцовКонкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
 

Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)