Программирование без натива

Рейтинг:   / 4
ПлохоОтлично 

С тех давних пор, когда я приступил к написанию прототипов, альфа версий, пилот версий и прочих проектов для изучения возможности использования мобильных устройств с iOS на борту прошло уже достаточно много времени. Довольно много сломано копий и много щитов, но щит юридического отдела и вставшие дыбором волосы бухгалтеров (apple очень интересуется финансово информацией и глубоко желает проникнуть в пучины организации фирмы) мне так и не дали оснований приступить к нативному программированию iOS. Просто по причине, что публиковать на эпловском апп-маркете мне запретили под страхом урезания выпирающих частей организма.

Но при этом задачи написания программ для использования агентами "в поле" ни кто не отмечал. И вот же фокус: агенты сии предпочитают ровно в 50% те самые агрегаты с той самой ужасной iOS на борту :). Вот и выпрыгивай из портóк, как хочешь...

Вот такова предыстория. Вторая часть марлезонки без балета заключается во второй части от 100%. Остаток агентов упорно влюблённо таращится на экраны своих android устройств и расставаться с ними не желает, вплоть до мордобоя с апологетами яблок. 

Вопрос мультиплатформенности при разработке стоит с тех самых пор первых android и iOS устройств. А ужас с названием Windows Mobile я даже описывать не хочу. Хотя программировать там было бы мне лично комфортнее всего, я всю жизнь провёл в засосе в дёсны с майкрософтом и его технологиями.

Вот так, окружение имеющее к миру программирования ни какого прямого отношения, не задумывающееся о методах асинхронной работы в мультипоточных задачек, не знающая какой шаблон поведения имеет какой-то там гость, но заставляющее применять ту архитектуру, которая меняет целиком весь твой подход к проектированию и выбрасывает в утиль все твои хотелки.

Итак я вам сейчас буду петь туже самую оду, что пел в первых статьях на своём ресурсе (т.е. в рамках этого сайта)...

Я уже порывался рассказать вам о возможных вариантах написания проектов используя в качестве несущего двигателя HTML5 и JavaScript. Но в те времена android 2.x и его iOS конкурентов выглядело это достойно только в эмуляторе. Перенос же все этих WebView и прочих web offline приложений в жизнь реальных устройств превращал написанные программы в болезненных подагрой стариков, с явным расстройством опорно-двигательного аппарата и болезнью ожирения одновременно.

С тех пор как я услышал музыку слов quard-core и 3 GB RAM, во мне родилось стойкое чувство, что что-то в мире происходит в правильном для моих задач направлении. Собственно тут надо и круг оных сразу ограничить, чтобы не допустить метания в себя любимого лошадиными яблоками людей, озабоченных использованием специфическими возможностями присущими исключительно для задач ограниченного, технически ограниченного, круга. А между тем в мире существует просто неизмеримое количество задач, для которых, скажем узнавание направления движения "сий момент" не такое уж обязательное условие, как и познания о давлении, встряске и прочих. И, знаете, того, что даёт нам в распоряжение современный HTML5 с его доступом к GPS, "телефону / смс" (поймите меня правильно, кавычки тут именно ограничивают смысл слова ДОСТУП), "камере" вполне достаточно для безумного количества решений. При этом "резиновый" интерфейс позволяет воплощать в жизнь работоспособные проекты на абсолютно разных устройствах: MAC, PS, SmartPhone, Tablet и вне зависимости от операционной системы устройства на котором в данный момент запущено ваше приложение. Есть, конечно, оговорка - Майкрософт. Эти товарищи, которые нам давно уже не товарищи, а  противники, ни как не желают жить приличной жизнью и переименовав Internet Explorer в слово с синей буквой E, всё-равно в музыканты не сгодятся. Пока Майкрософт работает по принципу: закон это - Я, поток проклятий в свой адрес слушать не перестанет.

Собственно сию  свою реплику, точнее статью, я посвящаю тому, что перед тем как выбрать конечную архитектуру проекта, подумайте о его целях и тех кто им будет пользоваться. Одно дело если это люди работающие у вас на складе, которым вы сами выберите устройство - средство производства и совсем иная ситуация, когда коечный пользователь не предсказуем, мало образован (поверьте мне, в одной немецкой стране я услышал от управленца высокого ранга: я что должна ехать во Франкфурт в этот app store, чтобы купить там программу?) и очень пуглив. Многих повергает в близкий смертельному обморок заявление, что программу надо "забрать", "скачать", "установить" и тд и тп. Люди и так сломали себя через колену выучил слово ЛИНК. Мало того они все, кто старше 35 лет, имеют суицидальные наклонности при пользовании E-Mail, что уже как-бы всё меньше актуально, WhatsApp, Skype и "о ужас" должны запоминать больше одного пароля (я то знаю, что у многих один пароль на всё - ключ в тайники их души). Так вот все эти люди панически боятся нового, даже если оно происходит из уже привычного источника. В той же самой Европе мне с этим пришлось сталкиваться на каждом шагу, а у себя в родном Курске я вообще так и не смог убедить пользоваться смартфоном довольно "продвинутых" по моим представлениям людей. Им это - запредельно сложным кажется!

Так что планируя архитектуру думайте сначала над вопросом: кому оно надо? А уж потом над всеми остальными моментами из области безопасности их собственности, своей собственности (ведь программу хоячется как-то защитить от кражи из оной кода), размеров данных, пути получения данных, путей размещения данных и прочих сотнях технических вопросов. Но на то ведь мы и программисты, чтобы оные решать. Так ведь?

Собственно приведу пример.

Перед мной стаяла надысь задача написать некое что-то работающее на всех видах мобильных устройств, в крайне ужатые сроки. Это нечно должно интегрироваться в живую уже десяток лет клиент-серверную систему, обеспечивать безопасность от проникновения плохих замышлятелей злодейств, собирать и первично обрабатывать некие данные, путём использования человека в качестве малоинтелектуального джойстика, способного однозначно отвечать на каверзные вопросы ДА или НЕТ и при необходимости писать осмысленный коментарий, путём использования ротовой полости и системы распознавания речи, что сейчас крайне распространена у подавляющего большинства производителей мобильных операционных систем и интегрирована в программу экранной клавиатуры (у кого как). Правда некоторые предпочитают набирать вручную (например я).

Открою завесу, многие разработчики, которые привязаны к всем этим App Store с помощью кошелька так же очень недовольны вынужденностью портировать программы с одной на другую ось. Поэтому ооооочень многие используют почти тоже самое (ну, скажем без HTML5, зато с javascript) приспосабливая всевозможные не то движки, не то инструменты работающие сразу под всеми осями, но в качестве надстройки позволяющие программировать себя каким-то-там распространённых универсальным языком. Что сводит программирование с портированием только к перекомпилированию для той или иной операционной системы.

Но моя задача была такова, что помимо всего прочего и коллектив программистов не ухищрённый в мобильных заморочках программирования всяких там дроидов так же мог бы поддерживать проект и пользоваться наработками.

В проекте во всю предполагалось использовать блага технического прогресса в максимальных количествах перечисленных заказчиком так: GPS, Camera, позвонить из программы, отослать СМС с заранее подготовленным шаблоном текста.

И вот скажите мне чего такого из этого я не могу добиться средствами современного HTML5? А так же в качестве вишенки я ещё добавил для счастливых обладателей Android обратную реакцию в виде вибрации при использовании экранной клавиатуры (есть такие моменты, когда ни одн из стандартных форматов клавиатур вам не подходит, например, когда вы заполняете графу "уникальный идентификационный номер автомобиля", чтобы не ввести чушь, мы можете показать только те символы, которые допустимы в этом VIN-номере, или пример бухгалтерской клавиатуры как на калькуляторе). Скажу сразу: со звуком вышел косяк. На современных операционных устройствах звуковой сигнал подать без ручной активации путём тырка в экран возможно, но не для всех. Т.о., например, звуковое оповещение для привлечение внимания выливается в процесс: сначала ткни в меня пальцем, а потом я тебе свистну. Что, несколько, поздновато как-то.

Вот собственно и вся недолга. Ода WebOffline application. Когда у вас есть в руках HTML5, любой из современных паттерновых фрейморков (мы выбрали angular + Ionic) и знания, вы можете реализовать проект любой сложности. А понимая как "косьвено" пользоваться возможностями компьютера (согласитесь, что смартфон, тоже ведь того... - компьютер) можно запрограммироват что угодно. Например, если у вас настроен Skype для интегрирования звонков на вашем РС, то клик на линк типа "tel", приводит к тем же точно последствиям, что и на телефоне: вызове службы ответственной за выполнение телефонного звонка. Скальп не обязательно. Достаточно любой программы для приёма/выполнения телефонных звонков (каковая у заказчика и стоит).

О современных возможностях сохранять данные offline, я вообще молчу. Но перечислю некоторые из: самый старый - куки, из более своременных - Storage (session, local), Web SQL, IndexedDB, application cache, cache storage. У каждого свои плюсы и минусы, свои ограничения, но вооружившись знаниями мы получаем уже реализованный до нас механизм той самой плеяды движков-инструментов. Бери и программируй. А возможность создания App.cache и "установки" офлайновой версии вашей веб программы на устройсто делает из обычного веб сайта - полноценно созданный продукт любой сложности на которую хватит ваших знаний, фантазии и дерзости.

Дерзайте и обрящите :)
 

Вместо "напосашок":

Тем кто любит сказки - сходить в раздел их послушать ;).  Скорость разработки подобного дела, на готовом фронтэнде - 1 день. С тестированием (поверхностным), отладкой и обкаткой. К сожалению познанный мной мир умных ТВ (SmartTV) имеет некоторые малоприятные ограничения, но и он не устаял перед чарами WebOffline и без дополнительных шаманств вполне себе в таком виде пригоден для использования. Но ограничения с медиа накладывают свой отпечаток на архитектуру. Придётся всё поменять, но это "всё" - пустяк, требующий просто немного иного подхода к плейлисту.

PPS: да, скорость разработки на angular + ionic меня потрясла. Как вам повторить целиком функционал "Контакты" смартфона? Даже если у вас есть готовая БД с контактами. Не забываем фильтрацию, групирование, создание и редактирование имеющихся контактов, интеграцию с Maps, если есть адрес, запись попытки позвонить в историю звонков... Я не буду говорить точно сколько часов на это ушло. Скажу только, что такая прыть в веб-проекте о мной давно не случалась. Раза в 3 быстрее написалось. И это - оптимистично говорю, полная CRM у меня обычно медленнее идёт.

PPPS: о самих этих angelar и ionic напишу уже в другой статье