SlideShare a Scribd company logo
Component Inspector
Роман Дворнов
Avito
Москва, октябрь 2015
Работаю в Avito
Делаю SPA
Автор basis.js
Я…
За любую движуху, 

кроме голодовки ;)
DEMO

поговорим про боль
• Позволяет инспектировать компоненты,
показывает их DOM фрагмент
• Может показывать фрагмент кода для разных
значений (классов, методов, объектов)
• Позволяет по клику открывать редактор с
нужным файлом с курсором на нужном месте
4
Component Inspector
!
• Не завязано на фреймворк/библиотеку
• Библиотеки могут расширять возможности и
предоставлять дополнительную информацию
5
Более того
6
За пределами браузера
Браузер dev-server
Редактор
Файл
Команда в терминале
Запрос на
открытие файла
Инструментированный
код + source maps
Части решения
7
• Инструментирование кода
• Runtime API
• Инспекция DOM дерева
• dev-сервер
Инструментирование
Инструментирование –
дополнение кода другим кодом,
который делает что-то еще
9
10
Код Код
AST
(ESTree)
Парсинг
Трансформации
(Babel)
Трансляция
Esprima
Делаем трансформацию кода правильно
Просто добавь 

свой плагин
Инструментирование делается
плагином для Babel
11
github.com/restrry/babel-plugin-source-wrapper
Что делает плагин
12
var foo = $devinfo(function(a, b) {	
return a + b;	
}, { … });	
!
var obj = $devinfo({ foo: 1 }, { … });
var foo = function(a, b) {	
return a + b;	
};	
!
var obj = { foo: 1 };
Делается автоматически

и только на этапе разработки
13
Runtime API
15
window.$devinfo = (function() {	
var map = new WeakMap();	
var api = function(ref, data) {	
if (!map.has(ref))	
map.set(ref, data);	
return ref;	
};	
api.get = function(ref) {	
return ref ? map.get(ref) : undefined;	
}	
return api;	
})();
Основное API
Упрощенный код
16
window.$devinfo = (function() {	
var map = new WeakMap();	
var api = function(ref, data) {	
if (!map.has(ref))	
map.set(ref, data);	
return ref;	
};	
api.get = function(ref) {	
return ref ? map.get(ref) : undefined;	
}	
return api;	
})();
Основное API
Упрощенный код
Используем WeakMap для
хранения информации:
- объекты как ключи
- не трансформирует объекты
- не создает утечек памяти
17
window.$devinfo = (function() {	
var map = new WeakMap();	
var api = function(ref, data) {	
if (!map.has(ref))	
map.set(ref, data);	
return ref;	
};	
api.get = function(ref) {	
return ref ? map.get(ref) : undefined;	
}	
return api;	
})();
Основное API
Упрощенный код
Основная функция регистрации,
"добавляет" информацию только
если ее еще нет у объекта
18
window.$devinfo = (function() {	
var map = new WeakMap();	
var api = function(ref, data) {	
if (!map.has(ref))	
map.set(ref, data);	
return ref;	
};	
api.get = function(ref) {	
return ref ? map.get(ref) : undefined;	
}	
return api;	
})();
Основное API
Упрощенный код
Получение информации,
используется инструментами
19
var obj = {};	
!
$devinfo(obj, { data: 123 });	
!
console.log($devinfo.get(obj));	
// > { data: 123 }
Использование
Инспектирование DOM
• знать границу компонента, т.е. определять 

элемент-контейнер компонента (DOM узел)
• определять владельца компонента (view) 

по элементу-контейнеру (по DOM узлу)
21
Для инструмента нужно
• если у DOM узла есть свойство __view – 

значит это контейнер компонента
• в свойстве __view хранится ссылка на view
22
Решение в лоб
Но лучше использовать

WeakMap (node ➝ view)
Крохотный патч для Backbone
23
!
var _setElement = Backbone.View.prototype._setElement;	
Backbone.View.prototype._setElement = function() {	
_setElement.apply(this, arguments);	
this.el.__view = this;	
};
Или с WeakMap
24
!
var map = new WeakMap();	
var _setElement = Backbone.View.prototype._setElement;	
Backbone.View.prototype._setElement = function() {	
_setElement.apply(this, arguments);	
map.add(this.el, this);	
};	
window.getBackboneViewByNode = function(el) {	
return map.get(el)	
};
Использование
basis.js
26
Работает из коробки
(нужен basis.js 1.5)
component-inspector
27
github.com/lahmatiy/component-inspector
Другие фреймворки
npm install component-inspector --save-dev
React
28
Подключение в html перед React!
<script src="node_modules/component-inspector/dist/react.js">	
</script>	
<script src="react.js"></script>
Backbone
29
Подключение в html после Backbone
<script src="backbone.js"></script>	
<script src="node_modules/component-inspector/dist/backbone.js">	
</script>
Свое решение?
Запросто!
30
31
<script src="node_modules/component-inspector/dist/base.js"></script>
Инициализация
<script>	
initComponentInspector({	
isComponentRootNode: function(node){	
return Boolean(node && node.__view);	
},	
getInstanceByNode: function(node){	
if (node) {	
return node.__view;	
}	
}	
});	
</script>
32
<script src="node_modules/component-inspector/dist/base.js"></script>
Описываем API
<script>	
initComponentInspector({	
isComponentRootNode: function(node){	
return Boolean(node && node.__view);	
},	
getInstanceByNode: function(node){	
if (node) {	
return node.__view;	
}	
}	
});	
</script>
Можно определить многое
33
• isComponentRootNode(node)
• getComponentNameByNode(node)
• getInstanceByNode(node)
• getInstanceRootNode(instance)
• getInstanceClass(instance)
• getInstanceLocation(instance)
• ...
github.com/lahmatiy/component-inspector#api-free-build
dev-сервер
• отдавать инструментированный код
• при отдаче html встраивать в него runtime.js
• исполнять команды, например, открытие
файла в редакторе
35
dev-сервер должен
в идеале
36
Вариант настройки: webpack
Инструментирование
webpack
+ babel + babel-plugin-source-wrapper
!
Открытие файла в редакторе
express или webpack-dev-server
+ express-open-in-editor
37
Пример конфигурации
для Webpack + React
tinyurl.com/pwj6bln
Вариант настройки: basisjs-tools
38
> npm install basisjs-tools -g	
> npm install basisjs-tools-instrumenter	
// создать конфиг basis.config	
> basis server
{	
"plugins": [	
"basisjs-tools-instrumenter"	
]

}
Сервер будет отдавать
инструментированный код и
встраивать необходимое в html
• open-in-editor

npm пакет для программного открытия файла в редакторе

github.com/lahmatiy/open-in-editor
• express-open-in-editor

расширение для Express для открытия файла по урлу

github.com/lahmatiy/express-open-in-editor
• extract-code-fragment

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

скоро
39
Побочные продукты
Главное – идея
Попробуйте – это круто! ;)
Вопросы?
42
Роман Дворнов
@rdvornov
rdvornov@gmail.com
github.com/lahmatiy
tinyurl.com/moscowjs-ci
Component Inspector
basis.js
github.com/basisjs

More Related Content

What's hot

Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работу
corehard_by
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Yauheni Akhotnikau
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Sergey Platonov
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Sergey Platonov
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
Anton Arhipov
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
Platonov Sergey
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
Python Meetup
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Sergey Platonov
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Sergey Platonov
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
Sergey Platonov
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
matroskin1980
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
m2rus
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
Ontico
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and cats
corehard_by
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency Injection
Platonov Sergey
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
corehard_by
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
Ontico
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
Sergey Platonov
 

What's hot (20)

Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работу
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and cats
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency Injection
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 

Viewers also liked

18022942 engelllernhaklarivesorunlari
18022942 engelllernhaklarivesorunlari18022942 engelllernhaklarivesorunlari
18022942 engelllernhaklarivesorunlari
Tuncay Küçükdanacı
 
マイナンバーセミナー補足資料
マイナンバーセミナー補足資料マイナンバーセミナー補足資料
マイナンバーセミナー補足資料
Takeshita Kouhei
 
식용곤충식 전문조리과정(양식)
식용곤충식 전문조리과정(양식)식용곤충식 전문조리과정(양식)
식용곤충식 전문조리과정(양식)
keilab2016
 
Serebrovasküler Vak'alar (anevrizma + avm)
Serebrovasküler Vak'alar (anevrizma + avm)Serebrovasküler Vak'alar (anevrizma + avm)
Serebrovasküler Vak'alar (anevrizma + avm)
Abdurrahman Şimşek
 
Будь первым
Будь первымБудь первым
Будь первым
FDConf
 
エッセンシャルCore springハンズオン
エッセンシャルCore springハンズオンエッセンシャルCore springハンズオン
エッセンシャルCore springハンズオン
土岐 孝平
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
ITCrowd Almaty
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускорения
Roman Dvornov
 
Edible insect in Lao PDR
Edible insect in Lao PDREdible insect in Lao PDR
Edible insect in Lao PDR
BUG Corporation
 
はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談
はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談
はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談
LIFULL Co., Ltd.
 
非クラウドエンジニアのための「はじめてのAWS」
非クラウドエンジニアのための「はじめてのAWS」非クラウドエンジニアのための「はじめてのAWS」
非クラウドエンジニアのための「はじめてのAWS」
takaoka susumu
 
GraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLGraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQL
Riza Fahmi
 
UX デザインに求められる「3つの目」
UX デザインに求められる「3つの目」UX デザインに求められる「3つの目」
UX デザインに求められる「3つの目」
Kazumichi (Mario) Sakata
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
yy yank
 
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
OpenStack Korea Community
 

Viewers also liked (16)

18022942 engelllernhaklarivesorunlari
18022942 engelllernhaklarivesorunlari18022942 engelllernhaklarivesorunlari
18022942 engelllernhaklarivesorunlari
 
マイナンバーセミナー補足資料
マイナンバーセミナー補足資料マイナンバーセミナー補足資料
マイナンバーセミナー補足資料
 
식용곤충식 전문조리과정(양식)
식용곤충식 전문조리과정(양식)식용곤충식 전문조리과정(양식)
식용곤충식 전문조리과정(양식)
 
Serebrovasküler Vak'alar (anevrizma + avm)
Serebrovasküler Vak'alar (anevrizma + avm)Serebrovasküler Vak'alar (anevrizma + avm)
Serebrovasküler Vak'alar (anevrizma + avm)
 
Будь первым
Будь первымБудь первым
Будь первым
 
エッセンシャルCore springハンズオン
エッセンシャルCore springハンズオンエッセンシャルCore springハンズオン
エッセンシャルCore springハンズオン
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускорения
 
Edible insect in Lao PDR
Edible insect in Lao PDREdible insect in Lao PDR
Edible insect in Lao PDR
 
はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談
はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談
はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談
 
非クラウドエンジニアのための「はじめてのAWS」
非クラウドエンジニアのための「はじめてのAWS」非クラウドエンジニアのための「はじめてのAWS」
非クラウドエンジニアのための「はじめてのAWS」
 
GraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLGraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQL
 
UX デザインに求められる「3つの目」
UX デザインに求められる「3つの目」UX デザインに求められる「3つの目」
UX デザインに求められる「3つの目」
 
Hypertensive Crises
Hypertensive CrisesHypertensive Crises
Hypertensive Crises
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
 

Similar to Component Inspector

REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
IT61
 
RDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDKRDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDK
RAMBLER&Co
 
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
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
Roman Dvornov
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
Ontico
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
Alex Simanovich
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Yandex
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
Anna Fedoruk
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Mail.ru Group
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
Igor Shkulipa
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Ontico
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Kirill Chebunin
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
Roman Dvornov
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
Михаил Бакулин
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуИгорь Родионов
 

Similar to Component Inspector (20)

REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
RDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDKRDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDK
 
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. Родионов Игорь
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
php frameworks
php frameworksphp frameworks
php frameworks
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойменту
 

More from Roman Dvornov

Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Roman Dvornov
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
Roman Dvornov
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
Roman Dvornov
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
Roman Dvornov
 
Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментов
Roman Dvornov
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
Roman Dvornov
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricks
Roman Dvornov
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
Roman Dvornov
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
Roman Dvornov
 
CSSO – compress CSS (english version)
CSSO – compress CSS (english version)CSSO – compress CSS (english version)
CSSO – compress CSS (english version)
Roman Dvornov
 
CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)
Roman Dvornov
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
Roman Dvornov
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
Roman Dvornov
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
Roman Dvornov
 
Карточный домик
Карточный домикКарточный домик
Карточный домик
Roman Dvornov
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
Roman Dvornov
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
Roman Dvornov
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
Roman Dvornov
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
Roman Dvornov
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
Roman Dvornov
 

More from Roman Dvornov (20)

Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментов
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricks
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
CSSO – compress CSS (english version)
CSSO – compress CSS (english version)CSSO – compress CSS (english version)
CSSO – compress CSS (english version)
 
CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Карточный домик
Карточный домикКарточный домик
Карточный домик
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 

Component Inspector