SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Практика применения 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

Weitere ähnliche Inhalte

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

Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Новые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковНовые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковDocsvision
 
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 html5Provectus
 
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 productionAnatoly Popov
 
Новые возможности решений на базе 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
Middlewaremegakott
 
Hpc Server 2008 Ecosystem
Hpc Server 2008 EcosystemHpc Server 2008 Ecosystem
Hpc Server 2008 EcosystemOleg Nazarevych
 
модуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .netмодуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .netYevgeniy Gertsen
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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