Руслан Садовников

24
1 Apps4All FORUM 2014 apps4all.ru

Transcript of Руслан Садовников

Page 1: Руслан Садовников

1

Apps4AllFORUM 2014

apps4all.ru

Page 2: Руслан Садовников

PARALLELS CONFIDENTIAL – DO NOT DISTRIBUTE

Руслан СадовниковВедущий программист-разработчик

Parallels Access Добавляем кроссплатформенности iOS приложению

Page 3: Руслан Садовников

3

APPLIFY YOUR UNIVERSE!

PARALLELS ACCESSПозволяет использовать компьютерные приложения на

iPad так, как будто они были для него разработаны

Page 4: Руслан Садовников

4

История возникновения Parallels Access

2008 – Первая версия Parallels Mobile

• «Реактивный» продукт — реакция на

происходящее на рынке

• Дополнение к Parallels Desktop 4 for Mac

• Базовая функциональность для работы с

виртуальными машинами

• Поддержка iPhone

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 5: Руслан Садовников

5

История возникновения Parallels Access

2010 – Большой апгрейд Parallels Mobile

• Эволюция текущего продукта

• Компонент Parallels Desktop 6 for Mac

• Удаленное управление виртуальными

машинами

• Поддержка iPhone и iPad

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 6: Руслан Садовников

6

История возникновения Parallels Access

2011 – Обновление Parallels Mobile

• Эволюция текущего продукта

• Компонент Parallels Desktop 7 for Mac

• Удаленное управление виртуальными

машинами

• Поддержка iPhone и iPad

• Удаленное управление удаленным

хостом (Mac-only)

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 7: Руслан Садовников

7

История возникновения Parallels Access

2012 – Начата разработка новой версии Parallels Mobile с учетом:

• Новых идей• Текущих проблем рынка• Пожеланий пользователей• Потребностей рынка• Позиций конкурентов

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 8: Руслан Садовников

8

2013 - Релиз Parallels Access 1.0

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 9: Руслан Садовников

9

Пресса

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

"In short, Access does a lot more than just blast your computer’s screen onto the iPad’s. It truly does “appify” your computer’s programs. It creates a smooth, logical hybrid of iPad and “real” computer, in away that the VNC apps do not. It works amazingly well." – David Pogue, New York Times (US)

“It isn't the only iPad app that can remotely control computers, but of the ones I've tested, it does the best job of treating the computer programs it accesses as if they were iPad apps, without sacrificingfunctionality.” – Walt Mossberg, The Wall Street Journal (US)

400+ статей о Parallels Access300+М потенциальных просмотров89% позитивная реакция (10% нейтральная)

Page 10: Руслан Садовников

10

Промо в App Store

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 11: Руслан Садовников

11 PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Все начинается с идеи и осознания проблемы...

Page 12: Руслан Садовников

12

Что же мы имеем

• Клиент только под iOS

• Клиент – разработчик аутсорсинговая кампания

• Server + SDK(C++) – разработчик Parallels

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 13: Руслан Садовников

13 PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 14: Руслан Садовников

14

Пишем с «нуля»?

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Берем готовое решение?

Page 15: Руслан Садовников

15

iOS - причешем? Android - напишем рядом?

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 16: Руслан Садовников

16

Волевое решение

• Выделяем бизнес-логику – RemoteClientCore

• RemoteClientCore пишем на С++

• Добавляем SDK по вкусу

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 17: Руслан Садовников

17

Protocol Buffers — язык описания данных. Google

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Описываешь структуру данных в .proto-файле

http://ru.wikipedia.org/wiki/Protocol_Buffers

message Car { required string model = 1; enum BodyType { sedan = 0; hatchback = 1; SUV = 2; } required BodyType type = 2 [default = sedan]; optional string color = 3; required int32 year = 4; message Owner { required string name = 1; required string lastName = 2; required int64 driverLicense = 3; } repeated Owner previousOwner = 5;}

Page 18: Руслан Садовников

18

Protocol Buffers — язык описания данных. Google

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Компилируешь под свою платформу

http://ru.wikipedia.org/wiki/Protocol_Buffers

Большое кличество компиляторов: C++, Java, Python, С#, Action Script, Clojure, Common Lisp, D, Erlang, Go, Haskell, JavaScript, Lua, Matlab, Mercury, Objective-C, OCaml, Perl, PHP, Python, Ruby, Scala, Visual Basic, Delphi и т.д.

Результатом будет класс, который содержит простейшие методы доступа ко всем полям типа get/set, а также методы для сериализации и десериализации вашей структуры данных в/из массива байтов.

Page 19: Руслан Садовников

19

Protocol Buffers — язык описания данных. Google

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

http://ru.wikipedia.org/wiki/Protocol_Buffers

• Простота использования

• Хорошая документация

• Поддержка большого количества языков

• Обратная совместимость

Page 20: Руслан Садовников

20

ZeroMQ — библиотека обмена сообщениями. iMatix

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

http://zguide.zeromq.org/

ZeroMQ обеспечивает взаимодействие между потоками выполнения. Это взаимодействие максимально унифицировано для нитей, процессов, локальных и глобальных сетей. Ключевой метод — передача информации с помощью сообщений, вместо обеспечения прямого доступа в ней. Для этого внутри библиотеки ZeroMQ используются неблокирующие алгоритмы и структуры данных en.wikipedia.org/wiki/Non-blocking_algorithm, а прикладной программист всего лишь использует ее элегантный API.

Page 21: Руслан Садовников

21

ZeroMQ — библиотека обмена сообщениями. iMatix

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

http://zguide.zeromq.org/

• Проста в использовании

• Хорошо написана

• Отлично документирована

• Великолепная производительность

• Поддержка большого количества языков

• Отзывчивое комьюнити

Page 22: Руслан Садовников

22

Результат

• Бизнес-логика отделена от платформенного кода

• Простота тестирования этой логики

• Скорость и простота реализации

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 23: Руслан Садовников

23

Подводные камни

• Все API должно быть описано в Protocol Buffers

• Все API асинхронно

• Количество генеримого кода(методов) из *.proto

• Сериализация/десериализация Protocol Buffers

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE

Page 24: Руслан Садовников

24

Q&A

PARALLELS CONFIDENTIAL -- DO NOT DISTRIBUTE