SlideShare uma empresa Scribd logo
1 de 60
Baixar para ler offline
BEViS& bt
Smarty, Django и т.п.
контроллер шаблоны
представления
HTML
< / >
HTTP Server
3
BEViS
index
.page.js
index
.bt.js
HTML
< / >
HTTP Server
4
BEViS controller
pages.declare('index', function () {
return [
{ block: 'header' },
{ block: 'authorization' }
];
});
01.
02.
03.
04.
05.
06.
5
И.И.Шишкин, К.А.Савицкий
«Утро в сосновом бору»
1889
Простой JSON
[
{ block: 'header' },
{ block: 'authorization' }
]
01.
02.
03.
04.
Сложный HTML
<div class="header">
<a class="header__logo" href="/">
<img src="logo.png">
</a>
<h1 class="header__title">Демо-страница</h1>
<h2 class="header__slogan">Слоган</h2>
<a class="header__rss" href="/?rss">
<img src="rss.png">
</a>
</div>
<form class="authorization" action="/?task=login">
<label class="authorization__label">Логин</label>
<input class="authorization__login" value="">
<label class="authorization__label">Пароль</label>
<input class="authorization__password"
value="" type="password">
<button class="authorization__submit">
Войти
</button>
</form>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
9
Одного имени
достаточно
Имя блока
{
друг: 'Марат'
}
01.
02.
03.
11
Необязательные параметры
{
суп: 'солянка',
сметанаНужна: 'да'
}
01.
02.
03.
04.
12
Создавать страницы - просто!
{
block: 'header',
showSearch: true
}
01.
02.
03.
04.
13
Блок - это
1. HTML-cтруктура
2. CSS-представление
3. JS-поведение
14
HTML
Императивные шаблоны
<p>Уважаемый {{ person }}</p>
<p>Ваш заказ от {{ date:"F j, Y" }} принят на обработку.</p>
<p>Пожалуйста, убедитесь, что всё выбрано верно:</p>
<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% if ordered_warranty %}
<p>Гарантия - 12 месяцев.</p>
{% else %}
<p>Со всеми неполадками обращайтесь в наш сервиcный центр.</p>
{% endif %}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16
Smarty
контроллер императивные
шаблоны
HTML
< / >
HTTP Server
17
Smarty
index.php index
.tpl.php
HTML
< / >
HTTP Server
18
Декларативные
шаблоны
Что это?
h1 {
color: red;
}
01.
02.
03.
20
Исходный JSON
pages.declare('index', function () {
return {
block: 'header'
}
});
Финальный HTML
<div class="header">
</div>
01.
02.
03.
04.
05.
01.
02.
21
Абстрактный декларативный шаблон
header {
tag: div;
}
01.
02.
03.
22
Абстрактный декларативный шаблон
header {
tag: div;
}
Реальный декларативный шаблон
bt.match('header', function (ctx) {
ctx.setTag('div');
});
01.
02.
03.
01.
02.
03.
23
Делаем шаблон умнее
bt.match('header', function (ctx) {
ctx.setTag('div');
ctx.setContent({ // Генерим внутри шапки новый JSON
elem: 'title', // создаём элемент title в содержимом
titleText: 'CodeFest 2014' // параметром передаём в него текст
});
});
01.
02.
03.
04.
05.
06.
07.
24
Делаем шаблон умнее
bt.match('header', function (ctx) {
ctx.setTag('div');
ctx.setContent({
elem: 'title',
titleText: 'CodeFest 2014'
});
});
bt.match('header__title', function (ctx) {
ctx.setTag('h1');
ctx.setContent(
ctx.getParam('titleText')
);
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
25
Результат
<div class="header">
<h1 class="header__title">CodeFest 2014</h1>
</div>
01.
02.
03.
26
Простой JSON
{
block: "y-header",
view: "islet-search",
showSearch: true,
showSuggest: true
}
01.
02.
03.
04.
05.
06.
07.
27
Простой JSON
{
block: "y-header",
view: "islet-search",
showSearch: true,
showSuggest: true
}
01.
02.
03.
04.
05.
06.
07.
Сложный HTML
<header class="y-header_islet-search _init _live-events" data-block="y-header" data-options="{"mixin
<div class="y-header_islet-search__wrapper">
<a class="y-header_islet-search__logo _lang_ru" href="http://www.yandex.ru">
<img class="y-header_islet-search__logo-img" alt="Яндекс" src="//yandex.st/lego/_/X31pO5
</a>
<div class="y-header_islet-search__info">
<span class="y-header_islet-search__board-call">
<a class="y-button_islet-board _init" data-block="y-button" role="button" href="http
<span class="y-button_islet-board__icon">
<div class="y-header_islet__board-call-icon"></div>
</span>
</a>
</span>
</div>
<div class="y-header_islet-search__arrow">
<form class="y-header_islet-search__form _live-events" action="/">
<div class="y-header_islet-search__button">
<button class="y-button_islet _init" data-block="y-button" tabindex="2" type="su
</div>
<div class="y-header_islet-search__input">
<div class="y-suggest_islet _init" data-block="y-suggest"
data-options="{"options":{"suggestDropOptions":{"view":"islet-header","sugg
<span class="y-input_islet-label-icons _init" data-block="y-input"><span cla
class="y-input_islet-label-icons__icons"><span class="y-input_islet-
class="y-input_islet-label-icons__control" id="uniq0" name="text" va
<div class="y-suggest-drop_islet-header" data-block="y-suggest-drop" data-op
</div>
</div>
</form>
</div>
</div>
<div class="y-header_islet-search__board"></div>
</header>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
28
{
block: 'y-header',
view: 'islet-search',
showBoard: true,
serviceName: 'Карты',
searchQuery: 'Новосибирск'
}
Карты НайтиНовосибирск
Чем декларативные шаблоны лучше?
1. Даже в большом проекте остаются простыми
2. Гарантируют внешнее API блока
BEViS - это как Web Components, только работает уже сегодня ;)
30
CSS
Мы так не делаем
<div class="header authorization">
</div>
01.
02.
32
Г.Данелия, 1977
В.Кикабидзе
«Мимино»
View
{
block: "header",
view: "search"
}
Финальный HTML
<div class="header_search">
</div>
01.
02.
03.
04.
01.
02.
34
Кто-то пишет так
<div class="button button_theme_normal button_shadow_yes">
нажми меня
</div>
01.
02.
03.
35
Бивис делает иначе
<div class="button_normal-shadow">
нажми меня
</div>
01.
02.
03.
36
Простой JSON
{
block: "button",
view: "normal-shadow"
}
Простой HTML
<div class="button_normal-shadow">
нажми меня
</div>
01.
02.
03.
04.
01.
02.
03.
37
CSS-
препроцессор
Публичные селекторы
.button {
skin-common();
skin-theme-normal();
}
.button_normal-shadow {
skin-common();
skin-theme-normal();
skin-shadow();
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
39
Публичные селекторы
.button {
skin-common();
skin-theme-normal();
}
.button_normal-shadow {
skin-common();
skin-theme-normal();
skin-shadow();
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
Приватные функции
skin-common() {
/* общие стили кнопки */
}
skin-theme-normal() {
/* цвета кнопки */
}
skin-shadow() {
/* тень под кнопкой */
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
40
Все конфликты под контролем
.button {
skin-common();
skin-theme-normal();
/* а здесь разрулил все конфликты этих миксинов */
}
.button_normal-shadow {
skin-common();
skin-theme-normal();
skin-shadow();
/* а здесь разрулил все конфликты этих миксинов */
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
41
JS
В маленьких проектах
$(document).ready(function() {
var form = $('#my-form');
form.submit(onSubmited);
function onSubmited() {
if ($('#my-form .button').hasClass('disabled')) {
return false;
}
}
});
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
43
В маленьких проектах с модулями
modules.define(
'form',
['jquery'],
function(provide, $) {
var form = $('#my-form');
form.submit(onSubmited);
function onSubmited() {
if ($('#my-form .button').hasClass('disabled')) {
return false;
}
}
provide(form);
}
);
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
44
Бивис = Модуль + YBlock-класс
modules.define(
'form',
['y-button', 'y-block'],
function(provide, YButton, YBlock) {
var Form = inherit( YBlock , {
__constructor: function () {
this._submitButton = YButton.find(this);
this._bindTo(this.getDomNode(), 'submit', this._onSubmitted);
},
_onSubmitted: function (e) {
if (this._submitButton.isDisabled()) {
e.preventDefault();
} else {
this.emit('submit');
}
}
});
provide(Form);
}
);
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
45
Бивис = Модуль + YBlock-класс
1. Код можно реиспользовать
2. Мы управляем абстракциями, а не DOM-объектами
46
Поведение отделено от отображения
<div
class="header"
data-block="header">
</div>
01.
02.
03.
04.
47
Состояние блока
<input class="login _unfilled" type="text"/>
/* обычное состояние */
.login {
...
}
/* тревожное состояние */
.login._unfilled {
border: 1px solid red;
}
01.
02.
01.
02.
03.
04.
05.
06.
07.
08.
09.
48
Block
Element
View
State
Файлы и сборка
Файлы
blocks/
form/
form.styl
form.js
form.bt.js
header/
header.styl
header.js
header.bt.js
01.
02.
03.
04.
05.
06.
07.
08.
09.
51
ENB-сборщик
http://github.com/enb-make/enb
ENB-конфигуратор
http://enb-make.info/config/
BEViS-документация
http://github.com/bevis-ui/docs
Быстрый старт
git clone git@github.com:bevis-ui/bevis-stub.git your-project
cd your-project
make
01.
02.
03.
55
Todo MVC
http://github.com/bevis-ui/bevis-todo
Blog Engine
http://github.com/bevis-ui/bevis-blog
BEViS
• Полноценный сайт на обычном JS
• Покрыт юнит-тестами на 100%
• Написан в понятном Сode Style
Это серьёзный инструмент с добрым лицом ;)
58
(: Спасибо ;)
BEViS & bt
• Презентация — bevis-ui.github.io/bevis-and-bt-speech
• TODO MVC — github.com/bevis-ui/bevis-todo
• Blog Engine — github.com/bevis-ui/bevis-blog
• Документация — github.com/bevis-ui/docs
• bt — github.com/enb-make/bt
• ENB — github.com/enb-make/enb
• ENB-конфигуратор — enb-make.info/config
Марат Дулин
• mdevils@yandex.ru
• twitter.com/mdevils
• github.com/mdevils
Вадим Макишвили
• makishvili@yandex.ru
• makishvili.com
60

Mais conteúdo relacionado

Mais procurados

JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
Сергей Горобцов "Веб для незрячих"
Сергей Горобцов "Веб для незрячих"Сергей Горобцов "Веб для незрячих"
Сергей Горобцов "Веб для незрячих"Yandex
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнDevDay
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20MoscowJS
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
Что нового в ASP.NET 4
Что нового в ASP.NET 4Что нового в ASP.NET 4
Что нового в ASP.NET 4akrakovetsky
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
Webpack integration
Webpack integrationWebpack integration
Webpack integrationIllia Zub
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17MoscowJS
 
Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Technopark
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстромRoman Dvornov
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
 
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливееYaroslav Serhieiev
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"Roman Dvornov
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 

Mais procurados (17)

JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
Сергей Горобцов "Веб для незрячих"
Сергей Горобцов "Веб для незрячих"Сергей Горобцов "Веб для незрячих"
Сергей Горобцов "Веб для незрячих"
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
Что нового в ASP.NET 4
Что нового в ASP.NET 4Что нового в ASP.NET 4
Что нового в ASP.NET 4
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Webpack integration
Webpack integrationWebpack integration
Webpack integration
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 

Semelhante a CodeFest 2014. Макишвили В., Дулин М. — BEViS & bt

Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Yandex
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта Olga Pirozhenko
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Yandex
 
Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinyaevents
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlexander Baumgertner
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 
БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природеIhor Zenich
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Yandex
 
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Yandex
 
Создание сайта на PHP
Создание сайта на PHPСоздание сайта на PHP
Создание сайта на PHPVasya Petrov
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10Technopark
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияIgor Sazonov
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 

Semelhante a CodeFest 2014. Макишвили В., Дулин М. — BEViS & bt (20)

Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
SQL Server Denali
SQL Server DenaliSQL Server Denali
SQL Server Denali
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
 
Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshin
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projects
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природе
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"
 
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
 
Yac2012
Yac2012Yac2012
Yac2012
 
БЭМ
БЭМБЭМ
БЭМ
 
Создание сайта на PHP
Создание сайта на PHPСоздание сайта на PHP
Создание сайта на PHP
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 
рабочая тетрадь Html
рабочая тетрадь Htmlрабочая тетрадь Html
рабочая тетрадь Html
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для понимания
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 

Mais de CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

Mais de CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

CodeFest 2014. Макишвили В., Дулин М. — BEViS & bt