SlideShare a Scribd company logo
- почем опиум для народа?
(с) Остап Бендер
Write once run anywhere
• GUI приложение с нуля
• Сопровождение легаси кода
• Портирование легаси
Применимость доклада
В рамках работы:
Вне работы:
• Персональные проекты
• Быстрая разработка
• Компактность кода
• Мультиплатформенность
• Зрелая экосистема
Преимущества
разработки на Python
• Медленный runtime у Python
Отрицательные стороны
разработки на Python
Пример сложного десктопного
приложения на Python
Основные десктопные системы
MacOS
Windows
Linux
• Небольшой размер
• Нетребовательность к
ресурсам
• Нативный вид
• Системная интеграция
ТРЕБОВАНИЯ
К КРОССПЛАТФОРМЕННОМУ
GUI ПРИЛОЖЕНИЮ
Виджетсеты платформ
Carbon/Cocoa
WinAPI
Gtk+/Qt
Биндинги к Python
PyObjC
pywin32
PyGtk
PyQt/PyKDE
Python
как основа для
кроссплатформенных
приложений
Три независимых проекта, использующих
платформенно-специфические биндинги:
• на Windows - pywin32
• на MacOS X - PyObjC
• на Linux - PyGtk
Самый надежный путь,
но при этом самый затратный
Казалось бы, что может быть проще?
Правильно выбранный тулкит и
мультиплатформенное приложение готово!
• Tkinter
• PyQt
• PyGtk
• wxpython
МУЛЬТИПЛАТФОРМЕННЫЕ ТУЛКИТЫ
Tkinter
PyQt
PyGtk
wxpython
Look & Feel
для Tkinter
на Linux платформе
"Что делать?" (с)
и кто виноват :)
WX 3.0
WX 3.0
WX 2.8
WX 3.0 WX 3.0 WX 2.8
Получившаяся архитектура sK1
Приложение sK1
Widgetset Abstraction
Layer (WAL)
Код на WAL
Код на wxpython
panel = wx.Panel()
vbox = wx.BoxSizer(wx.VERTICAL)
btn = wx.Button(panel, -1, "click Me")
vbox.Add(btn, 0, wx.ALIGN_CENTER)
btn.Bind(wx.EVT_BUTTON, self.OnClicked)
panel = wal.VPanel()
btn = wal.Button(panel, "click Me",
onclick=self.on_clicked)
panel.pack(btn)
Код класса wal.Button
class Button(wx.Button, WidgetMixin):
callback = None
def __init__(self, parent, text, size=DEF_SIZE,
onclick=None, tooltip='', default=False, pid=wx.ID_ANY):
wx.Button.__init__(self, parent, pid, text, size=size)
if default: self.SetDefault()
if onclick:
self.callback = onclick
self.Bind(wx.EVT_BUTTON, self.on_click, self)
if tooltip: self.SetToolTipString(tooltip)
def set_default(self):
self.SetDefault()
def on_click(self, event):
if self.callback: self.callback()
• Кроссплатформенность
• Кроссвиджетсетность и
кроссверсионность
• Код приложения не завязан на UI
• Сокращение объема кода
• Стиль кода по PEP-8
• Улучшение читабельности кода
Преимущества паттерна WAL
Паттерн WAL в
контексте поддержки
легаси кода
PyGtk 2.8
КОД
ПРИЛОЖЕНИЯ
PyGtk 2.8
КОД
ПРИЛОЖЕНИЯ
PyGtk 2.8
КОД
ПРИЛОЖЕНИЯ
WAL
Gtk 3
КОД
ПРИЛОЖЕНИЯ
WAL
PyGtk 2.8
КОД
ПРИЛОЖЕНИЯ
WAL
Qt 5
КОД
ПРИЛОЖЕНИЯ
WAL
PyGtk 2.8
КОД
ПРИЛОЖЕНИЯ
WAL
PyGtk
Логика приложения
Widgetset Abstraction
Layer (WAL)
TkinterTkinter
Упрощенный вариант
мультиплатформенного приложения
PyObjC pywin32 PyGtk
Вариант создания полноценного
мультиплатформенного приложения
Логика приложения
Widgetset Abstraction
Layer (WAL)
Разработка
унифицированных
абстракционных
слоев для всех
платформ
Спасибо за внимание!
И какие есть вопросы?

More Related Content

PDF
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
PDF
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
PDF
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
PPTX
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
PPTX
Александр Афенов
PDF
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
PDF
Путь к Go на конкретном примере
PDF
Ansible in the enterprise
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Александр Афенов
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Путь к Go на конкретном примере
Ansible in the enterprise

What's hot (20)

PDF
My talk on Salt and Ansible from DevConf 2014
ODP
My talk on Docker, Youcon 2015
PPTX
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
PDF
My talk on Docker from Moscow Django Meetup #25
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PDF
My talk on LeoFS, Highload++ 2014
PDF
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
PDF
On Docker
PDF
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
PPTX
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PDF
Платформа для поставки счастья в команду QA
PDF
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
PDF
My talk on Hadoop stack operations engineering at OSPCon
PDF
Python Development process in Yandex
PDF
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
PDF
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
PDF
Benchmarking PostgreSQL in Linux and FreeBSD
PDF
Как анимировать тысячи объектов на карте и не подвесить браузер
My talk on Salt and Ansible from DevConf 2014
My talk on Docker, Youcon 2015
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
My talk on Docker from Moscow Django Meetup #25
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
My talk on LeoFS, Highload++ 2014
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
On Docker
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Платформа для поставки счастья в команду QA
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
My talk on Hadoop stack operations engineering at OSPCon
Python Development process in Yandex
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Benchmarking PostgreSQL in Linux and FreeBSD
Как анимировать тысячи объектов на карте и не подвесить браузер
Ad

Similar to «Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr (20)

PPTX
[Add 4] crossplatform .net
PPT
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
PDF
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
PDF
Игорь Новак — Редакторы
PDF
"Девопс - это не только для программистов. Практические примеры из жизни одно...
PPT
Веб 3.0. Футуристический рассказ о будущем интернета и IT
PDF
Денис Чистяков — JavaScript на фронте и в тылу
PPTX
Continuous Integration в мобильной разработке
ODP
Не так страшен Linux…
PDF
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
PDF
Применение low-code платформ в энтерпрайзе
PDF
Robot Framework: универсальный инструмент автоматизатора
PDF
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
PPTX
разработка корп приложений на платформе 1с 8
PPTX
Jelastic для разработчиков ПО
PDF
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
PDF
Юрий Василевский «Автоматизация в XCode»
PDF
Юрий Василевский "Автоматизация в XCode"
PDF
Тестирование ПО, основанного на сторонних компонентах, на примере дистрибут...
PDF
Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015
[Add 4] crossplatform .net
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
Игорь Новак — Редакторы
"Девопс - это не только для программистов. Практические примеры из жизни одно...
Веб 3.0. Футуристический рассказ о будущем интернета и IT
Денис Чистяков — JavaScript на фронте и в тылу
Continuous Integration в мобильной разработке
Не так страшен Linux…
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
Применение low-code платформ в энтерпрайзе
Robot Framework: универсальный инструмент автоматизатора
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
разработка корп приложений на платформе 1с 8
Jelastic для разработчиков ПО
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский "Автоматизация в XCode"
Тестирование ПО, основанного на сторонних компонентах, на примере дистрибут...
Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015
Ad

More from it-people (20)

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

«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr