SlideShare a Scribd company logo
Практика применения MPS
   на примере проекта




                    Денис Гладкий
                      Татьяна Лях
Базовые подсистемы

            Чтение/запись *.one файлов
            Синхронизация с «облачными»
            сервисами:




© Технологика
                                          1
Модель данных OneNote


                OneNote COM API

                Объектная модель
                   документа

                      VCS



© Технологика
                                   2
Синхронизация с «облачными» сервисами




                             Протокол            Протокол
                             Dropbox             SkyDrive

                         Интерфейс «облачного» файлового
                                    хранилища

                         Общий алгоритм синхронизации:
                         - Вычисление файловой разности
                         - Отправка/удаление локальных файлов
                         - Загрузка/удаление файлов в хранилище
                         - Построение индекса локальных файлов



© Технологика
                                                                  3
В цифрах

                        Модель данных   Парсер   Синхронизация Всего
    *.java файлов       206             77       61            344
    # cтрок кода        ~7438           ~14818   ~5847         ~28103
    Объём *.java файлов ~280 Kb         ~896 Kb ~500 Кб        ~1.6 Mb




   Цель: портировать этот КОД на iOS.




© Технологика
                                                                       4
На этапе планирования

         Неудовлетворённость IDEA + Java
                А писать придётся на Objective-C + Xcode
                AppCode был в виде постоянно падающей «беты»


        Классические проблемы дублирования кода
                Править одни и те же «баги» в 2-х местах
                Писать [новый] функционал дважды




© Технологика
                                                           5
Domain-Specific Language

  Существующие DSL:                     Создание своего DSL:
   Эффективное решение                  Компилятор, среда
    «частных» задач:                      выполнения
      Увеличение                        Среда разработки:
       продуктивности разработки          редактор, отладчик и т.д.
      Улучшение коммуникаций с
       заказчиком
   «Success stories»: SQL,
    HLSL/GLSL

 Domain-specific language (noun): a computer programming
 language of limited expressiveness focused on a particular domain.
                                                      -Martin Fowler


© Технологика
                                                                 6
Создание DSL

      Редактор
      Абстрактный синтаксис (AST Model)
      Семантика




© Технологика
                                      7
Базовые понятия MPS


                    Узел (Node)

                Концепция (Concept)

                  Язык (Language)


© Технологика
                                      8
Язык структуры




© Технологика
                  9
Язык редактора




© Технологика
                  10
Шаблоны




© Технологика
                11
Как делать транслятор?

          Точный перевод абстрактного
          синтаксического дерева одного языка в
          синтаксическое дерево другого языка

          Взять уже готовый язык текстового
          документа и транслировать из
          расширения Java в текстовый документ



© Технологика
                                                  12
Объявление и определение класса




                                  .h
                .java
                                  .m


© Технологика
                                       13
Объявление и определение класса




© Технологика
                                  14
Объявление и определение класса




© Технологика
                                  15
Enum


                .h


                .m




© Технологика
                     16
Проблемы трансляции


          Анонимные классы
          Ручное управление памятью




© Технологика
                                      17
Retain, release, autorelease
                   Structure




© Технологика
                               18
Retain, release, autorelease

                     Editor




© Технологика
                               19
Retain, release, autorelease




© Технологика
                               20
Retain, release, autorelease




© Технологика
                               21
Трансляция стандартной библиотеки


      1) typedef для имен классов;
         интерфейс адаптируется при
         помощи «категорий»

      2) В java вводим классы из
         Objective-C


© Технологика
                                      22
Трансляция стандартной библиотеки




© Технологика
                                    23
Нововведения MPS 2.0



                Копирование из Java



                  Импорт из Java



© Технологика
                                      24
Выводы

        + Низкая цена
          отказа
        + Проекты с
          большим
          сроком жизни
        + И таки да, оно   - Сырость проработанности
          работает           use cases
                           - Слабая [offline] поддержка
                           - «Птичий язык»



© Технологика
                                                      25
Спасибо за внимание!
       Денис Гладкий
       generalgda@gmail.com   Большие проекты
       Татьяна Лях            Сложные задачи
       tanyaluach@gmail.com
                              Интересные люди




© Технологика
                                                26

More Related Content

Similar to CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
Alexander Granin
 
Новые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковНовые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковDocsvision
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Pavel Tsukanov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
Provectus
 
Ms SharePoint workspace for Project Management
Ms SharePoint workspace for Project ManagementMs SharePoint workspace for Project Management
Ms SharePoint workspace for Project ManagementVladimir Ivanov
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
Oleg Nenashev
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
Alexander Bausk
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest
 
Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...
Ivan Ruchkin
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 
Java Presentation.pptx
Java Presentation.pptxJava Presentation.pptx
Java Presentation.pptx
PavelKhankevich1
 
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0. Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0. Cisco Russia
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийMedia Gorod
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex
 
Middleware
MiddlewareMiddleware
Middleware
megakott
 
Hpc Server 2008 Ecosystem
Hpc Server 2008 EcosystemHpc Server 2008 Ecosystem
Hpc Server 2008 Ecosystem
Oleg Nazarevych
 
модуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .netмодуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .net
Yevgeniy Gertsen
 

Similar to CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD» (20)

Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Новые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковНовые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиков
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Ms SharePoint workspace for Project Management
Ms SharePoint workspace for Project ManagementMs SharePoint workspace for Project Management
Ms SharePoint workspace for Project Management
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
 
Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Java Presentation.pptx
Java Presentation.pptxJava Presentation.pptx
Java Presentation.pptx
 
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0. Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
 
.NET Development
.NET Development.NET Development
.NET Development
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Middleware
MiddlewareMiddleware
Middleware
 
Hpc Server 2008 Ecosystem
Hpc Server 2008 EcosystemHpc Server 2008 Ecosystem
Hpc Server 2008 Ecosystem
 
модуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .netмодуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .net
 

More from CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
CodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
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 Graebe
CodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
CodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
CodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
CodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
CodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
CodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
CodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
CodeFest
 

More from 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 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

  • 1. Практика применения MPS на примере проекта Денис Гладкий Татьяна Лях
  • 2. Базовые подсистемы Чтение/запись *.one файлов Синхронизация с «облачными» сервисами: © Технологика 1
  • 3. Модель данных OneNote OneNote COM API Объектная модель документа VCS © Технологика 2
  • 4. Синхронизация с «облачными» сервисами Протокол Протокол Dropbox SkyDrive Интерфейс «облачного» файлового хранилища Общий алгоритм синхронизации: - Вычисление файловой разности - Отправка/удаление локальных файлов - Загрузка/удаление файлов в хранилище - Построение индекса локальных файлов © Технологика 3
  • 5. В цифрах Модель данных Парсер Синхронизация Всего *.java файлов 206 77 61 344 # cтрок кода ~7438 ~14818 ~5847 ~28103 Объём *.java файлов ~280 Kb ~896 Kb ~500 Кб ~1.6 Mb Цель: портировать этот КОД на iOS. © Технологика 4
  • 6. На этапе планирования Неудовлетворённость IDEA + Java А писать придётся на Objective-C + Xcode AppCode был в виде постоянно падающей «беты» Классические проблемы дублирования кода Править одни и те же «баги» в 2-х местах Писать [новый] функционал дважды © Технологика 5
  • 7. Domain-Specific Language Существующие DSL: Создание своего DSL:  Эффективное решение  Компилятор, среда «частных» задач: выполнения  Увеличение  Среда разработки: продуктивности разработки редактор, отладчик и т.д.  Улучшение коммуникаций с заказчиком  «Success stories»: SQL, HLSL/GLSL Domain-specific language (noun): a computer programming language of limited expressiveness focused on a particular domain. -Martin Fowler © Технологика 6
  • 8. Создание DSL Редактор Абстрактный синтаксис (AST Model) Семантика © Технологика 7
  • 9. Базовые понятия MPS Узел (Node) Концепция (Concept) Язык (Language) © Технологика 8
  • 13. Как делать транслятор? Точный перевод абстрактного синтаксического дерева одного языка в синтаксическое дерево другого языка Взять уже готовый язык текстового документа и транслировать из расширения Java в текстовый документ © Технологика 12
  • 14. Объявление и определение класса .h .java .m © Технологика 13
  • 15. Объявление и определение класса © Технологика 14
  • 16. Объявление и определение класса © Технологика 15
  • 17. Enum .h .m © Технологика 16
  • 18. Проблемы трансляции Анонимные классы Ручное управление памятью © Технологика 17
  • 19. Retain, release, autorelease Structure © Технологика 18
  • 20. Retain, release, autorelease Editor © Технологика 19
  • 21. Retain, release, autorelease © Технологика 20
  • 22. Retain, release, autorelease © Технологика 21
  • 23. Трансляция стандартной библиотеки 1) typedef для имен классов; интерфейс адаптируется при помощи «категорий» 2) В java вводим классы из Objective-C © Технологика 22
  • 25. Нововведения MPS 2.0 Копирование из Java Импорт из Java © Технологика 24
  • 26. Выводы + Низкая цена отказа + Проекты с большим сроком жизни + И таки да, оно - Сырость проработанности работает use cases - Слабая [offline] поддержка - «Птичий язык» © Технологика 25
  • 27. Спасибо за внимание! Денис Гладкий generalgda@gmail.com Большие проекты Татьяна Лях Сложные задачи tanyaluach@gmail.com Интересные люди © Технологика 26