Предупреждение: публикацията съдържа доста технически термини и може да не е особено интересна на потребители, без технически познания.
С първата част ви запознах със премеждията, които имах с началните версии на Android и уеб приложенията, а с тази публикация ще разкажа повече за това, какъв автогол си вкарах покрай тези две версии. Отвън може би всичко изглеждаше добре – добавяха се нови институции сравнително редовно, отговарях в рамките на 24 часа на всяко потребителско запитване, но всъщност добавянето и поддържането на институциите беше ад. Причината за това беше, че имах два сета от данни, които да поддържам – едни хардкоднати в Android и втори хардкоднати в уеб версията. Казано на прост език, аз се грижих за едни и същи данни, на две различни места. Добавяйки нова институция в Android, не довеждаше до добавянето ѝ в уеб версията. За това беше нужно да отида и да я добавя и там. Също така, във всяка една версия беше нужно да се пише код. По-долу виждате нужния код за Android и уеб версията, за да може да се появи нова институция.
contactList.add(createContactWithPaindNumber(ContactCategoryEnum.Bank, R.drawable.fibank, "Първа инвестиционна банка", "028180006", "070012777","https://www.fibank.bg/","Parva investicionna banka", "Purva investicionna banka", "Pyrva investicionna banka", "Fi bank", "Фи Банк", "банка", "banka"));
<li> <a class="contactRow" href="tel:0882191000" aliases="Parva investicionna banka Purva Pyrva Фибанк Фи Банка Fibank Fi bank банки финанси пари pib пиб"> <span class="verticalAlignMiddle imageSpan"><img class="contactImage" src="images/institutions/fibank.png"></span> <div class="contactNameAndPhoneHolder"> <div>Първа Инвестиционна банка</div> <div class="phoneHolder">0882191000<span>070012777</span></div> </div> <span class="verticalAlignMiddle"><img url="https://www.fibank.bg" class="siteImage" src="images/info.png" title="Страницата на Първа Инвестиционна банка"></span> </a> </li>
Това не беше всичко. В Android контактите се сортираха автоматично по азбучен ред, но в уеб приложението не беше толкова тривиално да се направи, за това бях решил да ги добавям като спазвам реда, по който вече бяха добавени в Android версията. Безумие! Беше ми безкрайно неприятно да го правя, тъй като изискваше ужасно много усилия и като цяло изчаквах да се съберат около десетина институции и тогава ги вкарвах първо в Android приложението, като уеб версията я обновявах по-рядко. Случваше се намери някой дълго издирван номер, да го добавя в Android версията, да публикувам във Facebook, че се е намерил и някой да пише, че го няма в уеб версията. Айде тогава сядай да обновяваш и нея. При нея обновяването се случваше, що-годе лесно. Копирах файловете на сървъра и това беше. При Android процеса на ъпдейтване на приложение е по-тежък. Трябва да build-неш новото apk, да му сложиш нов versionCode и нов versionName. После отиваш в Google play console, от където публикуваш новото apk. Абе процес, който не е хубаво да го правиш три пъти в месеца. А понякога се налагаше да го правя даже по-често. Бях гледал приложения за статистика на Android приложения, и всички ме съветваха да публикувам по-рядко ъпдейти, тъй като това дразни потребителите. Трябваше нещо да се промени.
Роди се идеята за iOS версия
Няма да лъжа, че нямах никакви намерения да правя версия за iOS, макар и в едно интервю да бях казал, че най-вероятно ще разработя. Мотивацията ми да тръгна да я разработя дойде изцяло от потребителите – не веднъж получавах съобщения и имейли с подкана да разработя и версия за iOS. Като видях критичната маса от потребители, които имаха интерес да си го инсталират на техните iPhone-и, просто реших да тръгна и да го разработя.
Сървърно приложение
Едно знаех със сигурност – преди да разработя iOS приложението, трябваше да има друга разработка – сървърно приложение, което да се използва за менажиране на данните (master data), които после да бъдат теглени или репликирани по приложенията. Без тази стъпка трябваше да поддържам контакти на три места, а вече имах големи главоболия само с две. В края на май месец бях поканен на конференция на Теленор, и имайки тази визия бях тръгнал да си подготвям презентацията. Отдолу виждате слайд, който описва именно този преход – от приложение, което съдържа контактите, към архитектура от тип клиент-сървър. При тази архитектура клиентите (в този случай клиентите бяха тогава вече съществуващите Android и уеб приложения, и евентуално бъдещото iOS) се свързват със сървъра и теглят нужните данни за да функционират.
Бях озаглавил слайда с Future work, но докато дойде време да го презентирам, повечето неща вече бяха готови – сървърното приложение, както и почти готовата разработка на iOS. Даже след презентацията бях пратил първата версия към App store за одобрение. Там последваха една сурия откази, но това ще остане за друга публикация. Качих презентацията в Slide share, имайте предвид, че понеже беше приготвяна с Power point и имаше добавени анимации към слайдовете, не изглежда както трябва в Slide share.
Успях да направя сървърното приложение за седмица, като работих по един-два часа на ден. Отново скоростното разработване беше спомогнато от опита ми с Java EE разработки. Още седмица ми отне и да го deploy-на. Проучвах пазара с VPS сървъри, като също търсих възможно най-евтината алтернатива. Бях намерил нещо, което ми се струваше твърде добро за да е истина – 1 Евро без ДДС на месец със следните характеристики – 1 vCPU, 1 GB RAM, 20 GB SSD Storage, 2 TB/month data transfer. Провайдъра беше Aruba Cloud. Бях изключително скептичен, понеже Digital Ocean са с пет пъти по-високи цени, тези бяха италианци и не ми вдъхваха доверие. Направих проверка в интернет, и отзивите бяха добри. Това ме докара до мисълта да направя тест драйв, като нагласата ми беше, че ако не ми хареса, просто мигрирам на Digital Ocean. За мое учудване тест драйва мина успешно, и реших да реинициализирам сървъра, тъй като бях бях изхакал доста неща при тестването – избрах по-стара версия на Ubuntu например. Към момента Aruba Cloud са 2,79 Евро с ДДС на месец, което отново го прави може би най-евтината алтернатива.
Товарът падна от плещите ми
След като сървърното приложение беше live, имаше малък overhead докато въведем на ръка данните, като за целта взехме Android кода и го цъкахме по формата. След това всичко стана песен – можеш да въведеш бързо и лесно нова институция. Промяната става също за секунди. Не са ти нужни програмистки умения за да добавиш нова институция, като вече имаше възможност не само аз да се грижа за това. Ето и формата, която използваме за тази цел.
Ето и endpoint-ите които захранват приложенията:
Android –
https://admin.0700bezplatnite.com/0700backend/contact/getContacts
iOS, web –
https://admin.0700bezplatnite.com/0700backend/contact/getIOSContacts
Ако ги отворите в браузър, ще видите JSON масива, който захранва приложенията.
Като заключение, бих споделил, че сървърното приложение дойде в правилния момент. Никога нямаше да тръгна да разработвам сървърно приложение, ако нямаше такъв интерес от потребителите. Подбудата ми дойде от агонията, която изпитвах при добавяне на институции, както и за бъдещата разработка на iOS версия. В една алтернативна реалност, ако потребителите нямаха интерес към Android и уеб версията, щеше рядко да е нужно да се добавят нови институции, то тогава нямаше да има нужда и от сървърно приложение. Най-важното от тази публикация е, че понякога си струва да си спестиш усилия, за да тестваш нещо (наричано в програмистките среди изхакаш) и после да го преведеш до правилната имплементация. Надявам се да намирате тази публикация за полезна. Ще се радвам и на обратна връзка било в коментар, лично съобщение или имейл. Последните две може да ги откриете на тази страница.
За мен изключително важно е да обогатявам знанията си, като 0700 успя да ми помогне изключително много с това – придобих познания за разработване на Android и iOS приложения, които тотално ми липсваха. Преди да създам iOS версията на 0700 беше нужно да създам и сървърно решение, което да ни улесни да добавяме нови номера. За десерт от към нови знания създадох и този блог, като преди това нямах кой знае какъв опит с WordPress. От към академично ниво, преследвам докторска степен. В професионален план се занимавам със софтуерно консултиране в сферата на ecommerce решенията. Всичкият този пъстър и богат опит ме прави изключително полезен, щом се опре до консултиране за софтуер. Ще се радвам, ако бих могъл да ви помогна с нещо.
Напишете първия коментар