Xe4 launch мобильная разработка всеволод_леонов
-
Upload
- -
Category
Technology
-
view
393 -
download
3
description
Transcript of Xe4 launch мобильная разработка всеволод_леонов
Запуск XE4
Windows, Mac, iOSВсеволод Леонов
Средства разработки под различные устройcтва
Стенд (provisioning)
Ethernet, Wi-Fi(patch cord)
Обычный «хвост»
http://blogs.embarcadero.com/vsevolodleonov/2013/04/23/dios_dev_hardware/
Вспомогательное ПО
• Симулятор на Mac OS
• RAD PAServer XE4 (не забыть запустить)• VMWare Fusion (Win on Mac)• VNC Viewer (видеть Mac)• Reflector (видеть iPhone или iPad)
Стенд в облаках• Но только на этапе раннего прототипирования
http://macincloud.com
Account разработчика
• «Индивидуальный» - в AppStore
очень привлекательно…
$$$
Account разработчика
• «Корпоративный» - без AppStore
очень привлекательно…
$$$
Delphi must…
• Delphi 1-7 («античный период»)• Delphi 8 (for .NET, C#Builder…) (нас предали?)• BDS 2006-2007 (поздний Borland)• RAD Studio (Delphi) 2009 (собрались с мыслями)• RAD Studio 2010, XE (эпоха возрождения)• RAD Studio XE2 (FireMonkey = новая VCL)• RAD Studio XE3 (прощай, Windows)• RAD Studio XE4 (iOS)
Из фанеры лобзиком...
http://www.embarcadero.com/ru/rad-in-action/application-showcase
Community
• MVP– Александр Алексеев (www.gunsmoker.ru)– Александр Божко (www.delphifeeds.ru)– Андрей Терехов – Владислав Баженов (www.webdelphi.ru)
Blaise Pascal Magazine
http://blaisepascal.ru/
Вебинары
• Александр Алексеев (Fundamentals)• Андрей Карпов (C++)• Дмитрий Арефьев (FireDAC)• Дмитрий Кузьменко (InterBase)• Михаил Филиппенко (FastReport)• Евгений Крюков (FireMonkey)• Ярослав Бровин (FireMonkey)
http://blogs.embarcadero.com/vsevolodleonov/category/recorded-webinars/
Эксперты
• Александр Люлин18delphi.blogstop.com
Почему RUP и "прочие западные практики" не ложатся на российскую почву
«Стадии развитие проекта»«Зачем дельфисту UML»«Тестирование»
Переход количества в качество
RAD Studio
Multi-Device App DevelopmentTrue Native Apps
On Device Rapid Prototyping
Лёд тронулся, совпало с весной
Еще один «нативный»
• Multi-device – возрождение • Embarcadero и ISOCPP
Наш паровоз вперёд летит…
• Android – остановка• Windows 8 – внезапно• Delphi (C++Builder)
– Корпоративная мобильность– Индивидуальная разработка
• Данные, базы данных, компонентный доступ
• Идеологическая преемственность
Уже не новость
http://www.embarcadero.com/ru/products/rad-studio/firedac
RAD Studio (не только Delphi)?• RAD Studio многоплатформенная
нативность• Больше устройств – «толще
студия»
Единая база исходных кодов
• Ресурс всё тот же– Кодовая база– Люди– График производства
• Множественность компетенции/команд/проектов/ошибок
Быстрое прототипирование
• Быстрый старт• Быстрый прототип• Быстрое подключение к БД• Радость от каждого нового
устройства• Ускоренный цикл
разработки
21
Embarcadero: Multi-Device App DevelopmentHTML5 Cross
Platform“Platform Native”
Platform Vendor Tools Rapid Multi-Device
ExamplesAdobe, Sencha,
Kendo, HTML5Builder
Appcellerator, Xamarin Mono
XCode, Visual Studio, Eclipse
EmbarcaderoRADStudio
Platforms iOS/Android iOS/AndroidWin or Mac/iOS
or Android(Sep IDE, lang, & SDK
for ea platform)
Mac/Win/iOS & Android* (2013)
Native “Real Code” No No Yes Yes
Native Platform API Access No (PhoneGap) Yes Yes Yes
Single Source Multi-Vendor Targeting Yes No No Yes
Single IDE Yes/Plugin Yes/Plugin No Yes
Single Project Multiple Multiple Multiple Yes
App Performance Low Low High High
App Number Crunching Power Low Low High High
App Capacity (mem/data) Low Low/Med High High
App UX (User Experience) Low/Med Med High High
Enterprise Connectivity Low Low High High
Delphi
• Компилятор (новый)• IDE (классический)• Компоненты (FireMonkey)• Компоненты DB (FireDAC)
New Compiler Architecture
Open IR
C/C++
Delphi
Intel
ARM
LLVM
FireMonkey (не VCL)
• Библиотека компонентов (не Kylix)• Классическая разработка RAD• Набор компиляторов (или LLVM+CLANG)
– Win– Mac OS– iOS
• Поведение• Внешний вид (стиль)• Единая среда, единый исходный код –
различные сборки24
«Родная» и оригинальная стилизация
Поддержка жестов
• Swipe• Tap• Pinch & Zoom• Tap & Hold• Double-Tap
«Датчики»
• Ориентация/компас• Движение• Позиционирование• Камера
Базы данных• Локально (SQLite, InterBase)• Клиент-сервер• Прямой доступ• Многозвенная архитектура
DataSnap Server DatabaseDelphi for iOS app
Delphi XE4
Delphi for iOS
Мобильное приложение решает проблемы:
• Повысить производительность• Повысить доступность• Сократить время принятия решений• Конкурентноспособность
Я бы начал бы мобильное приложение:
• Без потери времени на освоение другого инструмента
• ... желательно в старых-добрых традициях RAD (каковыми они бы ни были)
• Использовать готовый код• Кому-то это нужно
Клиенты в восторге:
• Получше выбрать, подешевле заказать• Свежие новости• Рекламные компании и скидки• В любое время, в любом месте
• Мощный тренд (enormous)
Менеджеры в восторге:
• Имидж компании (совет директоров)• «Баннер»• Более управляемый коллектив• Пользователи мобильных приложений –
самые активная и платежеспособная аудитория
Delphi FireMonkey для iOS• «Нативный стиль» iOS• «Нативный» код прилоежний• Разработка в стиле Delphi (iOS Human Interface Guidelines)
XE4 FireMonkey MobileDemos and Code Snippets Online
• http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RadStudio_XE4/
• http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RadStudio_XE4/FireMonkeyMobile/
• http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RadStudio_XE4/iOSCodeSnippets/
Open or Grab XE4 FireMonkey MobileSamples and Code Snippets
• File | Open from Version Control…– http://svn.code.sf.net/p/radstudiodemos/code/br
anches/RadStudio_XE4/FireMonkeyMobile/– http://sourceforge.net/p/radstudiodemos/code/H
EAD/tree/branches/RadStudio_XE4/iOSCodeSnippets/
• SVN Command Line to get all XE4 samples – svn co
svn://svn.code.sf.net/p/radstudiodemos/code/branches/RadStudio_XE4 c:\AllSamples
Вопросы
Проектирование приложений
• Интерфейс– User experience– Проектирование взаимодействия– Сценарии– Mockup («бальзамик»)– Прототипирование
• Работа с данными• Безопасность
Разработка
• Роли• Сценарии• Прототипирование• Данные
Корпоративные данные• Local (SQLite, IBLight, IB ToGo)
– «плохой» интернет– «редкие» обновления и синхронизация
• Client/Server– «хороший» Интернет– Традиционные практики
• DataSnap («многозвенка»)– «портфельная» модель– Локальная и C/S модели
Локально
• «типа каталоги»• «слабая» зависимость бизнес-роли от
основной IT-инфраструктуры
Delphi for iOS app (iPhone …)
• DB в файле• IBLite• InterBase ToGo• SQLite• Пользовательская
структура
Синхронизация!
Client Server
• Классический дизайн C/S• «Внутри»• Интенсивный обмен данными
Delphi for iOS app(iPad…)
• InterBase Server• Third party for
Oracle/PostgreSQL/MySQL
• IBX• dbExpress• FireDAC
DataSnap (многозвенный доступ)
• DataSnap framework с 2010, сейчас XE4• «Портфельная модель»• dbExpress, FireDAC
DataSnap Server DatabaseDelphi for iOS app(iPhone, iPad)
Local + DataSnap
• Лучшее из двух технологий• Широкий диапазон задач
DataSnap Server DatabaseDelphi for iOS app
(iPhone, iPad)
Local file DB
Язык Delphi
• Новые возможности
Язык Delphi
• Старый-добрый (32/64)• LLVM – новый-злой• Front-end – back-end• IR LLVM• Новый стиль кодирования• Управление памятью• ARC (Automatic Reference Counting)• Objective-C • http://clang.llvm.org/docs/AutomaticReferenceCounting.html
Старый Delphi vs Новый Delphi
• Objective-C, C#, Java, .NET• Memory management, “Interface”• Борьба самих с собой
Зачем нужны перемены?
• Новые платформы, новые стили, новые стандарты, новые компиляторы, новый язык (точка входа)
• Много способов сделать одно и то же• Новые люди• Существующие противоречия
Разные типы строк
• Короткие строки Pascal (255)• AnsiString (C-o-W, R-C)• + еще немного (UTF8String и RawByteString)• С-подобные строки/функции (PChar)• Строки Unicode (с 2009), UTF16 (C-o-R, R-C)• COM-совместимые (no R-C)
Один тип строки
• Unicode-based• Immutable str1[i] := ch• Reference-counted
Как правильно?• TStringBuilder (был уже давно…)
• s1, s2, s3 : string;
• s1 := ‘Hello’;
• s2 := ‘World’;
• s3 := s1 + s2;
• sBuilder := TStringBuilder.Create;
• sBuilder.Append(s1);
• sBuilder.Append(s2);
• s3 := sBuilder.ToString;
• sBuilder.Free;
Immutable• TStringBuilder (был уже давно…)
for I := Low (str1) to High (str1) doif str1 [I] = 'a' thenstr1 [I] := 'A’;
sBuilder := TStringBuilder.Create;for I := Low (str1) to High (str1) do
if str1.Chars [I] = 'a' thensBuilder.Append ('A')
elsesBuilder.Append (str1.Chars [I]);
str1 := sBuilder.ToString;sBuilder.Free;
Zero-based strings
• Нас предали? (продались «сюшникам?»)
• Де-факто это свершилось– Динамические массивы– List : TList; List.Items[0]– sList: TStringList; sList[]– ListBox1.Items[0]
• $ZEROBASEDSTRINGS
Zero-based strings
• Внутренняя структура осталась такой же.• Можно смешивать (проект, модуль,
функции)• Классические функции RTL – прежние (1-
based)• TStringHelper – используем его
– unit System.SysUtils;– MyString.Length; MyString.ToInteger;– …
TStringHelper• procedure TForm4.Button1Click(Sender: TObject);• var• s1: string;• begin• // применительно к переменной• s1 := 'Hello';• if s1.Contains('ll') then• ShowMessage (s1.Substring(1).Length.ToString);• // применительно к константе• Left := 'Hello'.Length;• // «цепочка»• Caption := ClassName.Length.ToString;• end;
Automatic Reference Counting
• Автоматический подсчёт ссылок• Управление памятью• string• Interface variable• не Garbage Collector!• ARC – automatic reference counting
Interface
• TMyClass = class(TInterfacedObject, IMyInterface)• // ...• end;
• IMyInterface = interface(IInterface)• // ...• end;
Interface
• procedure TForm1.Button1Click(Sender: TObject);• var• myInterface : IMyInterface;• begin• myInterface := TMyClass.Create;• //...• end;
ARC
• ARC by default in LLVM compiler• iOS device and Simulator (Mac)
• procedure TForm1.Button1Click(Sender: TObject);
• var• MyObj: TMySimpleClass;
• begin• MyObj := TMySimpleClass.Create;
• // ...
• end;
ARC - освобождение• procedure TForm1.Button1Click(Sender: TObject);
• var• myObj : TMyClass;
• begin• myObj := TMyClass.Create;
• // ...
• myObj := nil;
• // ...
• end;
MyObj.DisposeOf;
ARC - ссылки• type• TMyComplexClass = class;•• TMySimpleClass = class• private• [Weak] FOwnedBy: TMyComplexClass;
• public• constructor Create();
• destructor Destroy (); override;• procedure DoSomething(bRaise: Boolean = False);
• end;•• TMyComplexClass = class• private• fSimple: TMySimpleClass;
• public• constructor Create();
• destructor Destroy (); override;• class procedure CreateOnly;
• end;
Двигаемся в ногу со временем
• Новые платформы• Новые традиции классической Delphi• Не надо бояться перемен, они к лучшему
https://www.facebook.com/SoftlineCompany
Заключение
Вопросы