SlideShare a Scribd company logo
1 of 20
Download to read offline
Преимущества
разработки средствами
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

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 для управления ЖЦ разработки и сопровождения ПО
Александр Шамрай
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
jazzteam
 
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
it-people
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
Sergey Ponomarev
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к Kanban
Alexander Byndyu
 
Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта
Evgeniy Kuzmin
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
DataArt
 

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 для управления ЖЦ разработки и сопровождения ПО
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
 
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"
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестирования
 
Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)
 
А. Ахметов "Когда тесты пишут разработчики", 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
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
 
Разработка бизнес приложений (4)
Разработка бизнес приложений (4)Разработка бизнес приложений (4)
Разработка бизнес приложений (4)
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к Kanban
 
Yacovlev
YacovlevYacovlev
Yacovlev
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 
Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектов
 
презентация.1
презентация.1презентация.1
презентация.1
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
 
Как мы измеряем наши проекты
Как мы измеряем наши проектыКак мы измеряем наши проекты
Как мы измеряем наши проекты
 
What Tests Are For?
What Tests Are For?What Tests Are For?
What Tests Are For?
 
Nival: Как не увлечься погоней за универсализацией компонент
Nival: Как не увлечься погоней за универсализацией компонентNival: Как не увлечься погоней за универсализацией компонент
Nival: Как не увлечься погоней за универсализацией компонент
 

More from it-people

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
it-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
it-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
it-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
it-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
it-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
it-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
it-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
it-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
it-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
it-people
 

More from it-people (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 

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 Вопросы... — Кто делает так же? — Как сделать ещё лучше? — Как вы боретесь со сложностью?