SlideShare a Scribd company logo
Двухуровневая
шаблонизация
Алексей Иванов, Злые Марсиане
Структура доклада
1. Стандартный подход к организации верстки и его проблемы
2. Пути решения этих проблем
3. Холивар!
Создаем шаблоны
для интернет‐
магазина
Создаем шаблоны
для интернет‐
магазина
 
listing.html:
div.listing
div.listing__header
div.listing__breadcrumbs
= render breadcrumbs.slim", items: page.breadcrumbs
h1.listing__title= page.title
div.listing__sorting
= render "sorting.slim", items: page.sorting
div.listing__content
div.listing__items
= render "goods.slim", items: page.goods
div.listing__nav
= render "filters.slim", items: page.filters
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
goods.html:
div.goods
- for item in items do
= render "good.slim", item: item
01.
02.
03.
Сайт запустился!
Добавляем
баннеры
 
listing.html:
// ...
div.listing__content
div.listing__items
= render "goods.slim",
items: page.goods,
banners: page.banners
01.
02.
03.
04.
05.
06.
goods.html:
div.goods
- items.each_with_index do |item, i|
- if i%3 == 0
= render "banner.slim", item: banners[i/3-1]
= render "good.slim", item: item
01.
02.
03.
04.
05.
Разный вид для
разных категорий
 
listing.html:
div.listing__view-mode
= render "view-mode.slim", items: page.viewMode
// ...
div.listing__items
= render "goods.slim",
items: page.goods,
banners: page.banner,
mode: page.mode
div.listing__nav
- if page.categories
= render "categories.slim", items: page.categories
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
goods.html:
div.goods
- items.each_with_index do |item, i|
- if type == list
- if i % 3 == 0
= render "banner.slim", item: banners[i/3-1]
= render "good.slim", item: item
- elsif
- if (i+1)%6 == 0
= render "banner.slim", item: banners[(i+1)/6-1]
= render "grid-good.slim", item: item
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
Корневая страница
категории
 
 
Что можно сделать в такой
ситуации?
—  Добавить еще пять условий в шаблоны, чтобы избежать копипаста.
—  Решить, что нервы дороже и разнести все это на несколько
шаблонов с повторяющимися элементами.
—  Пойти другим путем.
 
 
 
Что хочется
1. Разделять структуру страницы и шаблоны отдельных компонентов
2. Использовать один шаблон на разных страницах с разными детьми.
3. Работать без передачи в шаблон всей информации о его потомках и
их логике работы.
Варинты другого пути
—  Extend’ы – путь Django Templates, Twig и производных.
—  Block/Yield – путь haml, Slim, erb и отчасти Jade.
—  Псевдотеги и их разворачивание – путь XSLT и его потомков.
Extend
layout.html:
<div class="listing">
//...
<div class="listing__content">
<div class="listing__items">
{% block items %}{% endblock %}
</div>
<div class="listing__nav">
{% block nav %}{% endblock %}
</div>
</div>
</div>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
grid.html:
{% extends "listing.html" %}
{% block items %}
{% for item in items %}
//...
{% endfor %}
{% endblock %}
{% block nav %}
//...
{% endblock %}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
Block/Yield
page.slim:
= render :layout => 'listing.slim', title: title do
= render :layout => 'goods.slim' do
- items.each do |item|
//...
= render :layout => 'nav.slim' do
//...
goods.slim:
div.goods
= yield
01.
02.
03.
04.
05.
06.
01.
02.
XSLT
page.xml:
<listing title={{title}}>
<breadcrumbs items="{{breadcrumbs}}" />
<goods>
// ...
goods.xslt:
<xsl:template match="goods">
<div class="goods">
<xsl:copy-of select="node()"/>
</div>
</xsl:template>
01.
02.
03.
04.
01.
02.
03.
04.
05.
Наследники XSLT
—  BEM
—  Web Components и Polymer
—  React
—  Riot 2.0
Чем же они хороши
1. Создают компоненты со всем зависимостями.
2. Строят дерево страницы из созданных ранее компонентов.
3. Позволяют вкладывать компоненты друг в друга.
4. Могут работать как на клиенте, так и на сервере.
5. Позволяют описать логику поведения на JS.
6. Дают публичный API для компонента.
Примеры шаблонов с
применением разных
технологий
https://github.com/iAdramelk/dump‐2015‐demo/
Web Components и
Polymer
page.html:
<x-listing-nav>
<x-categories items='[...]'></x-categories>
<x-facets>
<x-facet xtitle='Цена, руб.' closed>
<x-price min='900' max='20000'></x-price>
</x-facet>
<x-facet xtitle='Основной материал'>
<x-checkbox-list items='[...]'></x-checkbox-list>
</x-facet>
//...
</x-facets>
</x-listing-nav>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
facet.html:
<polymer-element name="x-facet"
attributes="xtitle closed">
<template>
<link rel="stylesheet" href="facet.css">
<div class="title"></div>
<div class="content">
<content></content>
</div>
</template>
<script src="facet.js"></script>
</polymer-element>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
Особенности
—  Черновик спецификации для браузера.
—  Shadow DOM.
—  Не требует прекомпиляции.
—  Несколько точек для вставки детей с выбором по css‐селекторам.
listing.html:
//...
<div class="header">
<h1 class="title">{{xtitle}}</h1>
<div class="sorting">
<content select="x-sorting, x-lead"></content>
</div>
</div>
<div class="content">
<div class="items">
<content select="x-listing-main"></content>
</div>
//...
</div>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
listing.html:
<x-listing xtitle='Заголовок'>
<x-breadcrumbs items="[...]"></x-breadcrumbs>
<x-sorting items="[...]"></x-sorting>
<x-view-mode items="[...]"></x-view-mode>
<x-listing-main>
//...
</x-listing-main>
</x-listing>
01.
02.
03.
04.
05.
06.
07.
08.
Проблемы и ограничения
—  Везде кроме Google Chrome нужен полифил.
—  Полифил медленный и заметно тормозит загрузку страницы.
—  Не работает в IE до 10 версии.
React
page.jsx:
<Listing.Nav>
<Categories items=[...] />
<Facets>
<Facet title="Цена, руб." closed={true}>
<Price min="900" max="20000" />
</Facet>
<Facet title="Основной материал">
<CheckboxList items=[...] />
</Facet>
//...
</Facets>
</Listing.Nav>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
facet.jsx:
var Facet = React.createClass({
componentDidMount: function() {},
render: function() { return (
<div className="facet">
<div className="facet__title">
{this.props.title}
</div>
<div className="facet__content">
{this.props.children}
</div>
</div>
); }
});
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
Особенности
—  Создан для быстрой шаблонизации в браузере.
—  Свой синтаксис для компиляции в JavaScript.
—  Очень быстрый, обновляет страницу с минимальными
перерисовками.
—  Генерирует html на сервере как с data‐binding’ами, так и без.
Проблемы и ограничения
—  Большой вес скомпилированных шаблонов.
—  Необходимос грузить все шаблоны в браузер для работы data‐
binding’ов.
Riot 2.0
page.html:
<listing-nav>
<categories items="[...]"></categories>
<facets>
<facet title="Цена, руб." closed="{true}">
<price min="900" max="20000"></x-price>
</facet>
<facet title="Основной материал">
<checkbox-list items="[...]"></checkbox-list>
</facet>
//...
</facets>
</listing-nav>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
facet.tag:
<facet>
<div class="facet{opts.closed ? ' is-closed' : ''}">
<div class="facet__title">{opts.title}</div>
<div class="facet__content">
<inner-html/>
</div>
</div>
this.ready = function() { ... };
</facet>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
Особенности
Тот же React, но весит в 20 раз меньше и с более простым
синтаксисом.
Проблемы и ограничения
—  Меньше возмонжостей по сравнению со всем остальным.
—  Нет серверного рендеринга.
—  Оставляет теги, использованные для разметки.
—  Нет работающего из коробки способа вставлять теги в теги. Нужно
создавать свой плагин для этого.
—  Совсем новый и слабо обкатан.
BEM
Как работает BEM
—  ENB запускает и генерирует все.
—  BEMTREE трансформируется в BEMJSON.
—  На BEMJSON применяются трансформации из BEMHTML или BH.
—  На выходе полученный BEMJSON компилируется в HTML.
page.bemtree:
block('page').mod('bundle', 'listing-list')(
content()(function() {
return [ {
block: 'facets',
content: {
block: 'facet', title: data.title, closed: true,
content: {
block: 'price', min: data.min, max: data.max
}
}
} ]
})
);
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
page.bemjson:
( {
block: 'facets',
content: {
block: 'facet', title: "Размер", closed: true,
content: {
block: 'price', min: 900, max: 20000
}
}
} )
01.
02.
03.
04.
05.
06.
07.
08.
09.
facet.bh.js:
module.exports = function(bh) {
bh.match('facet', function(ctx, json) {
ctx.content({
block : 'facet',
elemMods: { 'closed': json.closed },
content: [
{ elem: 'title', content: json.price },
{ elem: 'content', content: json.content }
]
});
});
};
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
Особенности
—  Умеет почти все. Генерировать статику, работать в браузере, делать
логику для блоков без необходимости тащить с собой все шаблоны,
работать с любыми типами данных, и так далее.
—  Можно переназначать не только блоки целиком, но и отдельные
элементы в них.
Проблемы и ограничения
—  Нельзя брать по частям.Сразу подписываетесь на весь стек.
—  Очень высокий порог вхождения.
Заключение
Что и где можно использовать
уже сейчас
—  Web Components и Polymer – проекты заточенные под Chrome и
Chrome OS.
—  React – SPA, с необходимостью предзагрузки.
—  Riot – SPA с одной точкой входа.
—  BEM – везде, если сможете разобраться.
Холивар?
—  Алексей Иванов, Злые Марсиане
—  Twitter: @iadramelk
—  Github: @iadramelk
—  Примеры и слайды:
https://github.com/iAdramelk/dump‐2015‐demo

More Related Content

What's hot

МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016
Anastasia Goryacheva
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
Ontico
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Ontico
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
Igor Shkulipa
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Ontico
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Roman Dvornov
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
Roman Dvornov
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
Roman Dvornov
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
Roman Dvornov
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
Volha Banadyseva
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
Konstantin Komelin
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Ontico
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
DevDay
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
Roman Dvornov
 

What's hot (20)

МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
 

Viewers also liked

Problemas tecnológicos
Problemas tecnológicos Problemas tecnológicos
Problemas tecnológicos
chaconesteban
 
salud ocupacional
salud ocupacionalsalud ocupacional
salud ocupacional
ElaUrdiales
 
Mim
MimMim
Ensayo de Microsoft Word
Ensayo de Microsoft WordEnsayo de Microsoft Word
Ensayo de Microsoft Word
odmora
 
Guiaincapacidad
GuiaincapacidadGuiaincapacidad
Guiaincapacidad
MaraCarmi
 
Presentacion rss (27)
Presentacion rss (27)Presentacion rss (27)
Presentacion rss (27)
MarciaOtalora
 
¿Que tipos de software hay y como se clasifican?
¿Que tipos de software hay y como se clasifican?¿Que tipos de software hay y como se clasifican?
¿Que tipos de software hay y como se clasifican?
jose_julian_63
 
Longitud de una curva
Longitud de una curvaLongitud de una curva
Longitud de una curva
agueroj19
 
Viaje a dublín (1)
Viaje a dublín (1)Viaje a dublín (1)
Viaje a dublín (1)
iriafeernandez
 
Tarea del Seminario 3
Tarea del Seminario 3Tarea del Seminario 3
Tarea del Seminario 3
Cristina Leon Mirman
 
Diapositivas
DiapositivasDiapositivas
Diapositivas
ivonun
 
Presentación del restaurante. abril 2014. nº 2 (1)
Presentación del restaurante. abril 2014. nº 2 (1)Presentación del restaurante. abril 2014. nº 2 (1)
Presentación del restaurante. abril 2014. nº 2 (1)
Iñaki Patxi Larrocha
 
Test de personalidad
Test de personalidad Test de personalidad
Test de personalidad
snkirobs
 
RRS
RRS RRS
RRS
nerak11
 
CRISTIAN TRABAJO 3
CRISTIAN TRABAJO 3CRISTIAN TRABAJO 3
CRISTIAN TRABAJO 3
cristianuniandes1
 
Información de la carrera de Derecho
Información de la carrera de DerechoInformación de la carrera de Derecho
Información de la carrera de Derecho
brayan0903
 
derecho
derechoderecho
El escritorio
El escritorioEl escritorio
El escritorio
Leonel Jaimes Cobo
 

Viewers also liked (20)

Problemas tecnológicos
Problemas tecnológicos Problemas tecnológicos
Problemas tecnológicos
 
salud ocupacional
salud ocupacionalsalud ocupacional
salud ocupacional
 
Mim
MimMim
Mim
 
Ensayo de Microsoft Word
Ensayo de Microsoft WordEnsayo de Microsoft Word
Ensayo de Microsoft Word
 
Guiaincapacidad
GuiaincapacidadGuiaincapacidad
Guiaincapacidad
 
Presentacion rss (27)
Presentacion rss (27)Presentacion rss (27)
Presentacion rss (27)
 
¿Que tipos de software hay y como se clasifican?
¿Que tipos de software hay y como se clasifican?¿Que tipos de software hay y como se clasifican?
¿Que tipos de software hay y como se clasifican?
 
RSS
RSSRSS
RSS
 
Longitud de una curva
Longitud de una curvaLongitud de una curva
Longitud de una curva
 
Viaje a dublín (1)
Viaje a dublín (1)Viaje a dublín (1)
Viaje a dublín (1)
 
Tarea del Seminario 3
Tarea del Seminario 3Tarea del Seminario 3
Tarea del Seminario 3
 
Diapositivas
DiapositivasDiapositivas
Diapositivas
 
Presentación del restaurante. abril 2014. nº 2 (1)
Presentación del restaurante. abril 2014. nº 2 (1)Presentación del restaurante. abril 2014. nº 2 (1)
Presentación del restaurante. abril 2014. nº 2 (1)
 
Test de personalidad
Test de personalidad Test de personalidad
Test de personalidad
 
RRS
RRS RRS
RRS
 
CRISTIAN TRABAJO 3
CRISTIAN TRABAJO 3CRISTIAN TRABAJO 3
CRISTIAN TRABAJO 3
 
Kopie Van Untitled 2 Edited 3
Kopie Van Untitled 2 Edited 3Kopie Van Untitled 2 Edited 3
Kopie Van Untitled 2 Edited 3
 
Información de la carrera de Derecho
Información de la carrera de DerechoInformación de la carrera de Derecho
Información de la carrera de Derecho
 
derecho
derechoderecho
derecho
 
El escritorio
El escritorioEl escritorio
El escritorio
 

Similar to ДАМП 2015 Екатеринбург

Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinyaevents
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Yandex
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
Igor Sazonov
 
Trening modul2-webinar12
Trening modul2-webinar12Trening modul2-webinar12
Trening modul2-webinar12
olgaoov
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнDevDay
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Technopark
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Andrey Taritsyn
 
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Ontico
 
03 templates kachalova
03 templates kachalova03 templates kachalova
03 templates kachalova
Sokolov Artyom
 
Static Sites Generation
Static Sites GenerationStatic Sites Generation
Static Sites Generation
Alexei Yuzhakov
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Yandex
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
Sergiy Shychynov
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBDataArt
 
Как создать сайт за 2 часа? (Wordpress)
Как создать сайт за 2 часа? (Wordpress)Как создать сайт за 2 часа? (Wordpress)
Как создать сайт за 2 часа? (Wordpress)
Oleksii Prohonnyi
 
презентация Day4
презентация Day4презентация Day4
презентация Day4Bulatov Edward
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
Yandex
 
Trening modul2-webinar13
Trening modul2-webinar13Trening modul2-webinar13
Trening modul2-webinar13
olgaoov
 

Similar to ДАМП 2015 Екатеринбург (20)

Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshin
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Trening modul2-webinar12
Trening modul2-webinar12Trening modul2-webinar12
Trening modul2-webinar12
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
 
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
 
Backbone js
Backbone jsBackbone js
Backbone js
 
03 templates kachalova
03 templates kachalova03 templates kachalova
03 templates kachalova
 
Static Sites Generation
Static Sites GenerationStatic Sites Generation
Static Sites Generation
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEB
 
Как создать сайт за 2 часа? (Wordpress)
Как создать сайт за 2 часа? (Wordpress)Как создать сайт за 2 часа? (Wordpress)
Как создать сайт за 2 часа? (Wordpress)
 
презентация Day4
презентация Day4презентация Day4
презентация Day4
 
презентация Day4
презентация Day4презентация Day4
презентация Day4
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
Trening modul2-webinar13
Trening modul2-webinar13Trening modul2-webinar13
Trening modul2-webinar13
 

ДАМП 2015 Екатеринбург