SlideShare a Scribd company logo
1 of 20
Преимущества
разработки средствами
BEM + Python + node.js
Алексей Спиридонов
Евгений Генералов
Процесс разработки
Общее время разработки
Процесс разработки (реальный)
Общее время разработки
Мы решили все поменять
• Технологии развивались
• Сроки затягивались
• Простои учащались
• Масштабируемость отсутствовала
Постановка
и анализ
Дизайн
Верстка
Программирование
Тестирование
Новый процесс разработки
Общее время разработкиОбщее время разработки
Что мы получили
• Снижение количества коллизий
• Сокращение сроков разработки
• Уменьшение времени простоев
• Масштабируемость
• Увеличение точности оценок
А как это все реализовать?
И причем тут bem, node.js и python
Презентационная логика в Django
mytardis.readthedocs.org/en/latest/architecture.html
Для верстки «по живым
данным» необходима
работоспособность
всего стека
компонентов Django
— Общая логика обработки запроса
Middleware
— Представление ресурсов
URL Mapper, View
— Предметная область
Model, Business Logic
— Готовые решения Auth, Migrations,
Logger, Cache, Geodata, …
Специализация Django
БЭМ — верстка, которую легко
поддерживать и развивать
• Методология http://ru.bem.info/
• Node.JS https://github.com/joyent/node/wiki/
Installing-Node.js-via-package-manager
• БЭМ https://github.com/bem/project-stub
БЭМ
— Единая предметная область:
Блок, Элемент, Модификатор
— Библиотеки bem-bl, bem-controls, ...
— Шаблонизатор на JavaScript bemhtml
— Сервер для разработки bem server
— Сборщик ресурсов borschik
— Менеджер зависимостей bem make
— Возможности для кастомизации node.js
Интерфейс стека технологий БЭМ
БЭМ
bemjson
HTML
CSS
JS
Images
Django как сервис JSON API
def view(request):
data = json.dumps({'title', 'Hello, Dump!'})
return HttpResponse(data,
content_type='application/json')
Backend
(django)
Frontend
(node.js)
JSON API
Frontend
(node.js)
Frontend
(node.js)
bem-express — интеграция с BEM
для node.js
var express = require('express')
, app = express();
app.configure(function(){
app.engine('.bemhtml.js', require('bem-express').__express);
app.set('view engine', 'bemhtml.js');
...
app.get('/', function(req, res) {
httpclient.get('http://django-server.local/index/').then(function(data) {
res.render('index', {
data: JSON.parse(data)
}
Просто PyV8
bemjson = json.dumps({
'block': 'b-page', 'content': 'Hello, DUMP!',
})
bemhtml = readfile(
'./desktop.bundles/index/_index.bemhtml.js')
with PyV8.JSContext() as jsctx:
jsctx.eval(bemhtml)
jsctx.locals.bemjson = bemjson
html = jsctx.eval(
'BEMHTML.apply(JSON.parse(bemjson))')
HTML
bemjson
bemhtml
priv.js — преобразование данных
из формата приложения в bemjson
БЭМ
Application
Data
HTML
CSS
JS
Images
"priv.js
"
bemjson
python-bem
# settings.py
BEM_ROOT = '/path/www/'
# views.py
from pybem.shortcuts import render
def view(request):
data = {'title': 'Hello, DUMP!'}
return render(request, 'index', data)
PyV8
python-bem — удобная поддержка
Django
bemhtml.js
View
"priv.js"
BEMJSON
RequestContext
HTML
Что из это вышло
• Параллельность и асинхронность
• Сроки
• Качество
• Масштабируемость
Алексей Спиридонов spiridon@jetstyle.ru
Евгений Генералов lucky@jetstyle.ru
JetStyle http://jetstyle.ru
http://github.com/jetstyle/
ppa:jetstyle/pyv8
Вопросы...
— Кто делает так же?
— Как сделать ещё лучше?
— Как вы боретесь со сложностью?

More Related Content

Viewers also liked

Битва мух и котлет. Сторителлинг в проектировании взаимодействия.
Битва мух и котлет. Сторителлинг в проектировании взаимодействия. Битва мух и котлет. Сторителлинг в проектировании взаимодействия.
Битва мух и котлет. Сторителлинг в проектировании взаимодействия. JetStyle
 
Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015
Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015
Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015JetStyle
 
Как выжить в условиях сложного продукта. Дарья Прокуда.
Как выжить в условиях сложного продукта. Дарья Прокуда.Как выжить в условиях сложного продукта. Дарья Прокуда.
Как выжить в условиях сложного продукта. Дарья Прокуда.JetStyle
 
Данные на службе бизнеса
Данные на службе бизнесаДанные на службе бизнеса
Данные на службе бизнесаJetStyle
 
Автоматизация общения с менеджером, Полина Бынова, JetStyle
Автоматизация общения с менеджером, Полина Бынова, JetStyleАвтоматизация общения с менеджером, Полина Бынова, JetStyle
Автоматизация общения с менеджером, Полина Бынова, JetStyleJetStyle
 
Об особенностях работы художника, который гипотетически может все
Об особенностях работы художника, который гипотетически может всеОб особенностях работы художника, который гипотетически может все
Об особенностях работы художника, который гипотетически может всеJetStyle
 
Исследовательские проекты в жизненном цикле и рутинных процессах компании
Исследовательские проекты в жизненном цикле и рутинных процессах компанииИсследовательские проекты в жизненном цикле и рутинных процессах компании
Исследовательские проекты в жизненном цикле и рутинных процессах компанииJetStyle
 
CPC-трафик в unit-экономике, Полина Бынова
CPC-трафик в unit-экономике, Полина БыноваCPC-трафик в unit-экономике, Полина Бынова
CPC-трафик в unit-экономике, Полина БыноваJetStyle
 
Особенности MVP в Enterprise / Владимир Васильев (Почта России)
Особенности MVP в Enterprise / Владимир Васильев (Почта России)Особенности MVP в Enterprise / Владимир Васильев (Почта России)
Особенности MVP в Enterprise / Владимир Васильев (Почта России)Ontico
 
Интерфейсы для Smart TV #uxsreda
Интерфейсы для Smart TV #uxsredaИнтерфейсы для Smart TV #uxsreda
Интерфейсы для Smart TV #uxsredaJetStyle
 
Управление - это игра. Алексей Кулаков, JetStyle
Управление - это игра. Алексей Кулаков, JetStyleУправление - это игра. Алексей Кулаков, JetStyle
Управление - это игра. Алексей Кулаков, JetStyleJetStyle
 
MVP. Минимальный Жизнеспособный Продукт. Tolstoy Startup Camp 02.04.14
MVP. Минимальный Жизнеспособный Продукт. Tolstoy Startup Camp 02.04.14MVP. Минимальный Жизнеспособный Продукт. Tolstoy Startup Camp 02.04.14
MVP. Минимальный Жизнеспособный Продукт. Tolstoy Startup Camp 02.04.14Ilya Korolev
 
MVP (минимальный жизнеспособный продукт): как не потерять деньги на разработк...
MVP (минимальный жизнеспособный продукт): как не потерять деньги на разработк...MVP (минимальный жизнеспособный продукт): как не потерять деньги на разработк...
MVP (минимальный жизнеспособный продукт): как не потерять деньги на разработк...dkalaev
 
Создание нового стиля, дизайна и шрифта для "Батенька, да вы трансформер!"
Создание нового стиля, дизайна и шрифта для "Батенька, да вы трансформер!"Создание нового стиля, дизайна и шрифта для "Батенька, да вы трансформер!"
Создание нового стиля, дизайна и шрифта для "Батенька, да вы трансформер!"JetStyle
 
Разработка MVP. Зачем это нужно и как это делать?
Разработка MVP. Зачем это нужно и как это делать? Разработка MVP. Зачем это нужно и как это делать?
Разработка MVP. Зачем это нужно и как это делать? JetStyle
 

Viewers also liked (15)

Битва мух и котлет. Сторителлинг в проектировании взаимодействия.
Битва мух и котлет. Сторителлинг в проектировании взаимодействия. Битва мух и котлет. Сторителлинг в проектировании взаимодействия.
Битва мух и котлет. Сторителлинг в проектировании взаимодействия.
 
Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015
Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015
Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015
 
Как выжить в условиях сложного продукта. Дарья Прокуда.
Как выжить в условиях сложного продукта. Дарья Прокуда.Как выжить в условиях сложного продукта. Дарья Прокуда.
Как выжить в условиях сложного продукта. Дарья Прокуда.
 
Данные на службе бизнеса
Данные на службе бизнесаДанные на службе бизнеса
Данные на службе бизнеса
 
Автоматизация общения с менеджером, Полина Бынова, JetStyle
Автоматизация общения с менеджером, Полина Бынова, JetStyleАвтоматизация общения с менеджером, Полина Бынова, JetStyle
Автоматизация общения с менеджером, Полина Бынова, JetStyle
 
Об особенностях работы художника, который гипотетически может все
Об особенностях работы художника, который гипотетически может всеОб особенностях работы художника, который гипотетически может все
Об особенностях работы художника, который гипотетически может все
 
Исследовательские проекты в жизненном цикле и рутинных процессах компании
Исследовательские проекты в жизненном цикле и рутинных процессах компанииИсследовательские проекты в жизненном цикле и рутинных процессах компании
Исследовательские проекты в жизненном цикле и рутинных процессах компании
 
CPC-трафик в unit-экономике, Полина Бынова
CPC-трафик в unit-экономике, Полина БыноваCPC-трафик в unit-экономике, Полина Бынова
CPC-трафик в unit-экономике, Полина Бынова
 
Особенности MVP в Enterprise / Владимир Васильев (Почта России)
Особенности MVP в Enterprise / Владимир Васильев (Почта России)Особенности MVP в Enterprise / Владимир Васильев (Почта России)
Особенности MVP в Enterprise / Владимир Васильев (Почта России)
 
Интерфейсы для Smart TV #uxsreda
Интерфейсы для Smart TV #uxsredaИнтерфейсы для Smart TV #uxsreda
Интерфейсы для Smart TV #uxsreda
 
Управление - это игра. Алексей Кулаков, JetStyle
Управление - это игра. Алексей Кулаков, JetStyleУправление - это игра. Алексей Кулаков, JetStyle
Управление - это игра. Алексей Кулаков, JetStyle
 
MVP. Минимальный Жизнеспособный Продукт. Tolstoy Startup Camp 02.04.14
MVP. Минимальный Жизнеспособный Продукт. Tolstoy Startup Camp 02.04.14MVP. Минимальный Жизнеспособный Продукт. Tolstoy Startup Camp 02.04.14
MVP. Минимальный Жизнеспособный Продукт. Tolstoy Startup Camp 02.04.14
 
MVP (минимальный жизнеспособный продукт): как не потерять деньги на разработк...
MVP (минимальный жизнеспособный продукт): как не потерять деньги на разработк...MVP (минимальный жизнеспособный продукт): как не потерять деньги на разработк...
MVP (минимальный жизнеспособный продукт): как не потерять деньги на разработк...
 
Создание нового стиля, дизайна и шрифта для "Батенька, да вы трансформер!"
Создание нового стиля, дизайна и шрифта для "Батенька, да вы трансформер!"Создание нового стиля, дизайна и шрифта для "Батенька, да вы трансформер!"
Создание нового стиля, дизайна и шрифта для "Батенька, да вы трансформер!"
 
Разработка MVP. Зачем это нужно и как это делать?
Разработка MVP. Зачем это нужно и как это делать? Разработка MVP. Зачем это нужно и как это делать?
Разработка MVP. Зачем это нужно и как это делать?
 

Similar to DUMP-2013 - Frontend: Преимущества разработки средствами BEM+Python+node.js

Microsoft Team System 2010 для управления ЖЦ разработки и сопровождения ПО
Microsoft Team System 2010 для управления ЖЦ разработки и сопровождения ПОMicrosoft Team System 2010 для управления ЖЦ разработки и сопровождения ПО
Microsoft Team System 2010 для управления ЖЦ разработки и сопровождения ПОАлександр Шамрай
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»DataArt
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙCEE-SEC(R)
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Nival: Как не увлечься погоней за универсализацией компонент
Nival: Как не увлечься погоней за универсализацией компонентNival: Как не увлечься погоней за универсализацией компонент
Nival: Как не увлечься погоней за универсализацией компонентDevGAMM Conference
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовАгентство AlterEGO
 
Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Alexander Gornik
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetGoSharp
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TKConf
 
Drupal хостинг
Drupal хостингDrupal хостинг
Drupal хостингDrupalSib
 
Как мы измеряем наши проекты
Как мы измеряем наши проектыКак мы измеряем наши проекты
Как мы измеряем наши проектыRambler Android
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareMarina Gryshko
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareBAKOTECH
 
Egor Fedorov "Behavior-driven development in Python"
Egor Fedorov "Behavior-driven development in Python"Egor Fedorov "Behavior-driven development in Python"
Egor Fedorov "Behavior-driven development in Python"Fwdays
 
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014it-people
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестированияRina Uzhevko
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоSQALab
 
Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта Evgeniy Kuzmin
 

Similar to DUMP-2013 - Frontend: Преимущества разработки средствами BEM+Python+node.js (20)

Microsoft Team System 2010 для управления ЖЦ разработки и сопровождения ПО
Microsoft Team System 2010 для управления ЖЦ разработки и сопровождения ПОMicrosoft Team System 2010 для управления ЖЦ разработки и сопровождения ПО
Microsoft Team System 2010 для управления ЖЦ разработки и сопровождения ПО
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Nival: Как не увлечься погоней за универсализацией компонент
Nival: Как не увлечься погоней за универсализацией компонентNival: Как не увлечься погоней за универсализацией компонент
Nival: Как не увлечься погоней за универсализацией компонент
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектов
 
презентация.1
презентация.1презентация.1
презентация.1
 
Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Drupal хостинг
Drupal хостингDrupal хостинг
Drupal хостинг
 
Как мы измеряем наши проекты
Как мы измеряем наши проектыКак мы измеряем наши проекты
Как мы измеряем наши проекты
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
Egor Fedorov "Behavior-driven development in Python"
Egor Fedorov "Behavior-driven development in Python"Egor Fedorov "Behavior-driven development in Python"
Egor Fedorov "Behavior-driven development in Python"
 
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
 
My presentation for PM-Forum in Ukraine
My presentation for PM-Forum in UkraineMy presentation for PM-Forum in Ukraine
My presentation for PM-Forum in Ukraine
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестирования
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудство
 
Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта
 

More from JetStyle

Frontttalks nov2013
Frontttalks nov2013Frontttalks nov2013
Frontttalks nov2013JetStyle
 
Мобильное приложение для бизнеса: взгляд со стороны разработчика
Мобильное приложение для бизнеса: взгляд со стороны разработчикаМобильное приложение для бизнеса: взгляд со стороны разработчика
Мобильное приложение для бизнеса: взгляд со стороны разработчикаJetStyle
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruJetStyle
 
Сергей Беляев: Интернет-телевизор - самый недооцененный сегмент разработки #uwdc
Сергей Беляев: Интернет-телевизор - самый недооцененный сегмент разработки #uwdcСергей Беляев: Интернет-телевизор - самый недооцененный сегмент разработки #uwdc
Сергей Беляев: Интернет-телевизор - самый недооцененный сегмент разработки #uwdcJetStyle
 
Илья Седов: Как заставить программу под iOS шевелиться? #uwdc
Илья Седов: Как заставить программу под iOS шевелиться? #uwdcИлья Седов: Как заставить программу под iOS шевелиться? #uwdc
Илья Седов: Как заставить программу под iOS шевелиться? #uwdcJetStyle
 
Алексей Кулаков: Суеверия vs научный подход в проектировании интерфейсов #uwdc
Алексей Кулаков: Суеверия vs научный подход в проектировании интерфейсов #uwdcАлексей Кулаков: Суеверия vs научный подход в проектировании интерфейсов #uwdc
Алексей Кулаков: Суеверия vs научный подход в проектировании интерфейсов #uwdcJetStyle
 
Борис Касавин: Big data для нужд реального российского бизнеса #uwdc
Борис Касавин: Big data для нужд реального российского бизнеса #uwdcБорис Касавин: Big data для нужд реального российского бизнеса #uwdc
Борис Касавин: Big data для нужд реального российского бизнеса #uwdcJetStyle
 
Алексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalksАлексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalksJetStyle
 
Александр Устинов: Работа с существующими клиентами (бизнес-завтрак)
Александр Устинов: Работа с существующими клиентами (бизнес-завтрак)Александр Устинов: Работа с существующими клиентами (бизнес-завтрак)
Александр Устинов: Работа с существующими клиентами (бизнес-завтрак)JetStyle
 
Сергей Наймушин: Управление привлечением новых клиентов (бизнес-завтрак)
Сергей Наймушин: Управление привлечением новых клиентов (бизнес-завтрак)Сергей Наймушин: Управление привлечением новых клиентов (бизнес-завтрак)
Сергей Наймушин: Управление привлечением новых клиентов (бизнес-завтрак)JetStyle
 
Разработка сайта как создание мультфильма #oseminar
Разработка сайта как создание мультфильма #oseminarРазработка сайта как создание мультфильма #oseminar
Разработка сайта как создание мультфильма #oseminarJetStyle
 
Алексей Кулаков: Доклад о ненависти к рыбе...и любви к осмысленному тексту
Алексей Кулаков: Доклад о ненависти к рыбе...и любви к осмысленному текстуАлексей Кулаков: Доклад о ненависти к рыбе...и любви к осмысленному тексту
Алексей Кулаков: Доклад о ненависти к рыбе...и любви к осмысленному текстуJetStyle
 
Алексей Кулаков: Теория ограничений Голдратта #oseminar
Алексей Кулаков: Теория ограничений Голдратта #oseminarАлексей Кулаков: Теория ограничений Голдратта #oseminar
Алексей Кулаков: Теория ограничений Голдратта #oseminarJetStyle
 

More from JetStyle (13)

Frontttalks nov2013
Frontttalks nov2013Frontttalks nov2013
Frontttalks nov2013
 
Мобильное приложение для бизнеса: взгляд со стороны разработчика
Мобильное приложение для бизнеса: взгляд со стороны разработчикаМобильное приложение для бизнеса: взгляд со стороны разработчика
Мобильное приложение для бизнеса: взгляд со стороны разработчика
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 
Сергей Беляев: Интернет-телевизор - самый недооцененный сегмент разработки #uwdc
Сергей Беляев: Интернет-телевизор - самый недооцененный сегмент разработки #uwdcСергей Беляев: Интернет-телевизор - самый недооцененный сегмент разработки #uwdc
Сергей Беляев: Интернет-телевизор - самый недооцененный сегмент разработки #uwdc
 
Илья Седов: Как заставить программу под iOS шевелиться? #uwdc
Илья Седов: Как заставить программу под iOS шевелиться? #uwdcИлья Седов: Как заставить программу под iOS шевелиться? #uwdc
Илья Седов: Как заставить программу под iOS шевелиться? #uwdc
 
Алексей Кулаков: Суеверия vs научный подход в проектировании интерфейсов #uwdc
Алексей Кулаков: Суеверия vs научный подход в проектировании интерфейсов #uwdcАлексей Кулаков: Суеверия vs научный подход в проектировании интерфейсов #uwdc
Алексей Кулаков: Суеверия vs научный подход в проектировании интерфейсов #uwdc
 
Борис Касавин: Big data для нужд реального российского бизнеса #uwdc
Борис Касавин: Big data для нужд реального российского бизнеса #uwdcБорис Касавин: Big data для нужд реального российского бизнеса #uwdc
Борис Касавин: Big data для нужд реального российского бизнеса #uwdc
 
Алексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalksАлексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalks
 
Александр Устинов: Работа с существующими клиентами (бизнес-завтрак)
Александр Устинов: Работа с существующими клиентами (бизнес-завтрак)Александр Устинов: Работа с существующими клиентами (бизнес-завтрак)
Александр Устинов: Работа с существующими клиентами (бизнес-завтрак)
 
Сергей Наймушин: Управление привлечением новых клиентов (бизнес-завтрак)
Сергей Наймушин: Управление привлечением новых клиентов (бизнес-завтрак)Сергей Наймушин: Управление привлечением новых клиентов (бизнес-завтрак)
Сергей Наймушин: Управление привлечением новых клиентов (бизнес-завтрак)
 
Разработка сайта как создание мультфильма #oseminar
Разработка сайта как создание мультфильма #oseminarРазработка сайта как создание мультфильма #oseminar
Разработка сайта как создание мультфильма #oseminar
 
Алексей Кулаков: Доклад о ненависти к рыбе...и любви к осмысленному тексту
Алексей Кулаков: Доклад о ненависти к рыбе...и любви к осмысленному текстуАлексей Кулаков: Доклад о ненависти к рыбе...и любви к осмысленному тексту
Алексей Кулаков: Доклад о ненависти к рыбе...и любви к осмысленному тексту
 
Алексей Кулаков: Теория ограничений Голдратта #oseminar
Алексей Кулаков: Теория ограничений Голдратта #oseminarАлексей Кулаков: Теория ограничений Голдратта #oseminar
Алексей Кулаков: Теория ограничений Голдратта #oseminar
 

DUMP-2013 - Frontend: Преимущества разработки средствами BEM+Python+node.js

  • 1. Преимущества разработки средствами BEM + Python + node.js Алексей Спиридонов Евгений Генералов
  • 4. Мы решили все поменять • Технологии развивались • Сроки затягивались • Простои учащались • Масштабируемость отсутствовала
  • 5. Постановка и анализ Дизайн Верстка Программирование Тестирование Новый процесс разработки Общее время разработкиОбщее время разработки
  • 6. Что мы получили • Снижение количества коллизий • Сокращение сроков разработки • Уменьшение времени простоев • Масштабируемость • Увеличение точности оценок
  • 7. А как это все реализовать? И причем тут bem, node.js и python
  • 8. Презентационная логика в Django mytardis.readthedocs.org/en/latest/architecture.html Для верстки «по живым данным» необходима работоспособность всего стека компонентов Django
  • 9. — Общая логика обработки запроса Middleware — Представление ресурсов URL Mapper, View — Предметная область Model, Business Logic — Готовые решения Auth, Migrations, Logger, Cache, Geodata, … Специализация Django
  • 10. БЭМ — верстка, которую легко поддерживать и развивать • Методология http://ru.bem.info/ • Node.JS https://github.com/joyent/node/wiki/ Installing-Node.js-via-package-manager • БЭМ https://github.com/bem/project-stub
  • 11. БЭМ — Единая предметная область: Блок, Элемент, Модификатор — Библиотеки bem-bl, bem-controls, ... — Шаблонизатор на JavaScript bemhtml — Сервер для разработки bem server — Сборщик ресурсов borschik — Менеджер зависимостей bem make — Возможности для кастомизации node.js
  • 12. Интерфейс стека технологий БЭМ БЭМ bemjson HTML CSS JS Images
  • 13. Django как сервис JSON API def view(request): data = json.dumps({'title', 'Hello, Dump!'}) return HttpResponse(data, content_type='application/json') Backend (django) Frontend (node.js) JSON API Frontend (node.js) Frontend (node.js)
  • 14. bem-express — интеграция с BEM для node.js var express = require('express') , app = express(); app.configure(function(){ app.engine('.bemhtml.js', require('bem-express').__express); app.set('view engine', 'bemhtml.js'); ... app.get('/', function(req, res) { httpclient.get('http://django-server.local/index/').then(function(data) { res.render('index', { data: JSON.parse(data) }
  • 15. Просто PyV8 bemjson = json.dumps({ 'block': 'b-page', 'content': 'Hello, DUMP!', }) bemhtml = readfile( './desktop.bundles/index/_index.bemhtml.js') with PyV8.JSContext() as jsctx: jsctx.eval(bemhtml) jsctx.locals.bemjson = bemjson html = jsctx.eval( 'BEMHTML.apply(JSON.parse(bemjson))') HTML bemjson bemhtml
  • 16. priv.js — преобразование данных из формата приложения в bemjson БЭМ Application Data HTML CSS JS Images "priv.js " bemjson
  • 17. python-bem # settings.py BEM_ROOT = '/path/www/' # views.py from pybem.shortcuts import render def view(request): data = {'title': 'Hello, DUMP!'} return render(request, 'index', data)
  • 18. PyV8 python-bem — удобная поддержка Django bemhtml.js View "priv.js" BEMJSON RequestContext HTML
  • 19. Что из это вышло • Параллельность и асинхронность • Сроки • Качество • Масштабируемость
  • 20. Алексей Спиридонов spiridon@jetstyle.ru Евгений Генералов lucky@jetstyle.ru JetStyle http://jetstyle.ru http://github.com/jetstyle/ ppa:jetstyle/pyv8 Вопросы... — Кто делает так же? — Как сделать ещё лучше? — Как вы боретесь со сложностью?

Editor's Notes

  1. Всем привет! Меня зовут Алексей Спиридонов со мной будет рассказывать Евгений Генералов. Давайте перед тем как рассказывать свой доклад поинтересуемся: 1) Кто знает что такое BEM? Кто сталкивался с ним? 2) Кто занимается разработкой на PHP? Кто на питоне? Кто на руби? Кто на с++ - шарпах и прочей? Кто не из всего вы перечисленных? А чем? кто уже когда нибудь сталкивался со связкой BEM
  2. У нас в JetStyle есть отделы дизайнеров, верстальщиков, программистов и тестировщиков. В нашем докладе мы хотим расссмотреть этапы верстки и программирования и их взаимодействие. И как в большинстве компаний процесс разработки выглядит следующим образом: Каждая задача идет каскадным методом (по так называемому класическому "Водопаду") от постановки до тестирования: После постановки и проектирования за нее брался дизайнер и рисовал что-то. После этого, это что-то брал верстальщик и преврашал его в HTML. Псоле всего над получившимся макетом дрожал программист и обвещивал все это дело яваскриптом, разбивал это все на шаблоны в своем шаблонизаторе и получал готовый продукт на выходе. После чего менеджер и тестировщик проверял правильность выполнения задачи. Но это все в идеальном мире. На деле же происходит следующее:
  3. ВОт такой вот ежик. Дизайнер не то или не все наривсовал, верстальщик что-то сделал не так или все так но совершенно не согласуется с виденьем программиста. ПРограммист не так натянул верстку или при такой верстке яваскрипт работает медленно и еще какие то. В итоге разбитый результат правится несколькими льюдьми и получается ад и ненависть. Когда Общее время разработки растет, затягиваются сроки, все недовольны ибо плохая предсказуемость.
  4. Пока технологии были относительно просты и программирование фронт енда занимало маленькую часть от общего программирования приложения, мы как-то мирились с этим. Но постепенно технологии расли, появлялась фронтендная магия и становилось сложнее "разворачивать" задачу обратно верстальщику. У нас появляется куча всего нового: 1) Сложный аякс 2) Хранение данных на клиенты 3) Сокеты 4) МВЦ 5) Динамические сложные системы 6) Сложность верстки росла и приближалась (в некоторых проектах) по времени к бекендовой разработке. В общем львиная часть логики переносится на яваскрипт Граница ответсвенности становится зыбкой и непонятной, вертальщик говорит что это должен делать программист, программист говорит что это удобнее делать верстальщику и тд. В итоге после всех этих припитий кто-то делает и.... все ломает, потому что другой тоже решил это сделать.. в общем бардак и суматоха. А еще может сложиться так, что кто-то кого то ждет и все сроки идут в... Стоит так же упоминуть про масштабируемость, в настоящее время можно легко выделить несколько видов приложений, браузерное, тачевое, мобильное. И данные то одни и логика то одна но встараивать они должны все разными видами и по разному. Зачастую для каждого из типов приходиться делать большой кусок работы на бекенде. Это большая работа, случается много опять же проблем с оценкой и прочее прочее... После прихода понимая что так дальше жить нельзя мы решили все поменять. Об этом и об средствах для этого собственно наш сегодняшний доклад.
  5. Для начала мы решили что верстака от программиста надо обособить друг от друга. Сделать их разработку независимой друг от друга.
  6. После данного изменения в процессе мы получили: 1) Мы избавил от вредных пересечений зон отвественности разработчиков, раньше было так называемое сложение ответственности и "перекидывание задач" (когда верстальщик утверждает ) 2) Сроки, изза более раннего начала этапа программирования, проекты стали выполняться быстрее по времени, 3) Изза того что мы распралелили и изолировали версту и программинг теперь никто никого не ждал, а следовательно и простоев на осталось 4) Масштабируемость, теперь у нас одна логика для всех приложений и каждому приложению только одна своя шкурка 5) Оценка - изза независимости разработки, в оценку вкладывается меньше факторов которые влияют на ее оценку, а следовательно она стала точнее //ВО первых, данный метод прост в управлении, от постановщиков и главное от менеджеров не требуется специальных знаний или инструментов. Временные и людские затраты //относительно малы. //Во вторых, из за четкости постановки задачи и понятного конечного результата оценка, пусть даже с небольшим огрехом, достаточно верна (при отсутвии форс-мажоров и хорошем //менеджменте) //После каждого этапа идет вполне обособленный результат. Данный пункт можно частично отнести к минусам, потому изза обособленности результата, имеено после выполнения //задачи мы можем //Во первых это Масштабируемость - при вмешательстве в разработку по причинам внутренним (на предыдущем этапе что-то не доделали) и внешних (заказчик передумал и надо //все поменять). Это очень накладно, вообще у нас получается так, что чем раньше мы внесли изменения (баг это или новая функциональность) тем дешевле она на выходит. //Коллизии -, мы считаем что, если какую то задачу могут сделать 2 типа разработчиков это плохо! Это выливается в "перекидывание задачи" или в выполнении задачи менее //квалифицированным специалистом. //На сроки при таком подходе очень сильно влияют различные внешние и внутренние факторы, изменения верстки, разрезка макетов, плохое настроение заказчика и прочее... Иногда //может доходить до простоев в производстве
  7. Для того, чтобы внедрение данных подходов в процесс разработки стало возможным на практике, нам нужны эффективные инструменты. Кто использует python и django и считает что они классные?
  8. Использование шаблонизато
  9. БЭМ (аббревиатура от слов Блок-Элемент-Модификатор) про "острова" Мы более трех лет делаем сайты для Яндекс с использованием методологии БЭМ и наши скиллы проверены на практике. Для разработчика Упрощение разработки и поддержки Простота переключения между проектами Ускорение разработки при повторном использовании кода Рост проекта не ухудшает качество кода Для командной работы Быстрое подключение человека к команде Совместная работа с кодом разных специалистов Независимая работа над частями проекта Использование чужого кода без погружения в детали реализации
  10. Примерная схема работы всего такогва, !ОБЪЯСНИТЬ ЧТО ТАК А ЧТО НЕ ТАК!
  11. Примерная схема работы всего такогва, !ОБЪЯСНИТЬ ЧТО ТАК А ЧТО НЕ ТАК!
  12. Примерная схема работы всего такогва, !ОБЪЯСНИТЬ ЧТО ТАК А ЧТО НЕ ТАК!
  13. Мы помогали развивать pybem и решили ряд функциональных проблем.
  14. Что нам дало такое разделение: 1) Изоляция, теперь верстальщик и программист полностью дистанцированны друг от друга, у них разный однозначно определнный круг задач !!НАДО ЕЩЕ!!! 2) Сроки, стали немного более пресказуемыми, дизайн перестал влиять на программиста, верстак начал делать javascript и css с html для себя, что тоже немного ускорило разработку. Ошибки стали более дешевые и быстро исправляемые. 3) Внесение измений стало более быстрым и пресказумым с меньшим кол-вом ошибок. 4) Рост проекта в ширь (создание нескольких разных версий) или в глубь (увеличение функционала, увеличение команды и прочее) стало сильно менее проблематичным.
  15. На данный момент JetStyle это 15 разработчиков (7 программистов, 8 верстальщиков), с полсотни проектов в активной доработке и поддержки, а еще с полдестяка новых проектов, часть которых наверняка добавится к проектам в доработке и поддержки. /// На этом сайте хочется показать Преимущества JetStyle // Мы используем крутые трендовые штуки и технологии от крутых разработчиков // для реализации крутых проектов крутым клиентам // и есть место для эксперимента, что позволяет придумывать новые комбинации для принесения максимальной пользы. Визуально список технологий БЕМ Django Node.js HTML5/CSS3 Компании Microsoft Yandex SAP