Приложение Маяки Эстонии
21 Июня

Когда красиво и... (бес)полезно

Вчера на Хабре наткнулся на генератор QR-кодов, а котором нейросеть превращает код в единую сгенерированную картинку. Результат выглядит просто бомбически!



Но есть нюанс: не читаются эти коды. Кода, который нормально бы считывался, я добился только с шестого раза.

25 Мая

Никогда такого не было и вот снова... В понедельник собирался быстренько добавить в приложение пару старых фото маяка Саксби... Очнулся только к обеду четверга, глаза слезились от Фотошопа, а в приложение добавлено 56 исторических фоток и чертежей. Неоднократно писал тут, что наш Веб-портал музеев бездонный, но не знал, что настолько. Есть пара чертовски интересных находок! Например, деревянный маяк Папе с очень необычными окнами и подпорками (маяк стоял фактически на песке). Или фото чугунного Даугавгривского маяка, которое я тоже раньше нигде не видел. Оказывается, он был очень похож на наш Кихну, только иллюминаторы в башне прямоугольные, а не круглые. Ещё обнаружилась пара чертежей (маяки Нарва-Йыэсуу и Осмуссаар) временных лантерн, которые ставились на время строительных работ в основной лантерне маяка. Причём, в случае с маяком Осмуссаар, вся конструкция пристраивалась к башне и служила лесами для строителей. Короче, узнал для себя много нового, чему очень рад. Вы же можете ознакомиться со всеми этими находками непосредственно в приложении "Маяки Прибалтики".

Приложение "Маяки Прибалтики"

Кстати, ещё сегодня выпустил для него небольшое обновление под Андроид. Ничего серьёзного, небольшие изменения интерфейса. Сидел на работе в розово-голубой рубашке и подумалось, что неплохо бы кнопочки позакруглять, ну и пошло-поехало... На Эпплах ни этого, ни предыдущего обновлений пока нет, хоть я и пытался. Когда будет - не знаю. Все "спасибы" можно слать напрямую Apple за их обновление Xcode и всю последующую несовместимость с Cocoa Pods. Андроид форева!

19 Января

Новая версия приложения "Маяки Прибалтики" с позавчера доступна на всех платформах. Последней важной его "фишкой" является новая библиотека карт. Наконец-то на карте появился фильтр по типу объекта и, как мне кажется, она впервые стала функциональной. Очень удобно оставить только маяки открытые для посещения, увидеть их расположение наглядно и составить план поездки. Дополнительный бонус, которого даже я не ожидал - новые карты работают заметно быстрее. На видео два схожих по производительности смартфона на Андроиде. Слева старая версия, справа - новая.

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

Далее об этом более подробно, с точки зрения программирования. Итак, как понятно из видео выше, я сменил библиотеку mapbox_gl на flutter_map. Более подробно об опыте работы с обеими библиотеками я писал тут.

flutter_map хорошо показала себя в "Маяках Болгарии", так что не было причин не использовать её и тут. А теперь время офигительных историй! При нажатии на маркер на карте, открывается страница приложения, соответственно, в данных каждого конкретного маркера должна храниться информация о том, страницу какого маяка открывать при нажатии на него. К сожалению, mapbox_gl такой возможности не имел, там данные маркера - это только то, что показывается на карте. Логика подсказывает, что должна быть такая возможность, но ничего такого я найти не смог. Обдумав несколько вариантов, самым простым оказалось хранить необходимые данные в виде подписи к маркеру. То есть, на карте, помимо иконок, шрифтом размером 0 выводились ещё и системные номера маяков. Костыль? Он, родимый. Ну и понятно, что судьба у него была классическая "костыльная": вроде и надо переделать, но и так работает, лучше не трогать. Ну а во flutter_map всё получилось сделать без "костылей".

23 Декабря

Третья и заключительная публикация о том, как делалось приложение "Маяки Болгарии". В этой части будут только технические подробности.

Самое большое программное отличие "Маяков Болгарии" - новая библиотека карт. В двух других приложениях я использовал mapbox_gl. Эта библиотека выдаёт отличные векторные карты и имеет кэширование "из коробки", но с ней чертовски сложно работать. Её сложно настраивать и она капризна в работе, хотя, казалось бы, на официальном сайте есть инструкции. У меня был прецедент, когда новая версия приложения, где карты не менялись вообще, вылетала при открытии карт. С приложением "Маяки Болгарии" всё работало на эмуляторе, но не работало на реальном смартфоне. Очень это всё надоело. Вдобавок, mapbox_gl давно утратил статус официального плагина и перемещён из репозитория Mapbox в репозиторий непосредственно автора. Кроме того, развитие его остановилась и сейчас он попросту доживает.

Одной из самых популярных картографических библиотек под Flutter сейчас является flutter_map, которая, по сути, является адаптацией популярной библиотеки Leaflet. Я уже пробовал её в "Маяках Эстонии", но отказался из-за одного досадного бага: если открыть карту, нажать там на маркер маяка (откроется страница этого маяка), потом вернуться назад на карту, нажать на другой маркер, опять вернуться и повторить этот цикл ещё пару раз, карта начинала очень сильно тормозить. Сейчас попробовал её снова и, как оказалось, этого бага больше нет. Второй приятностью перехода на новую библиотеку стал фильтр по типу объектов, как в списке маяков. Я очень много сил потратил, чтобы сделать это на mapbox_gl для "Маяков Прибалтики", но так и не сдюжил. С flutter_map я просто взял код фильтра из виджета списка и он заработал.
Есть в flutter_map и свои нюансы. "Из коробки" нет ни кэширования, ни векторных карт. И то и то доступно через отдельные плагины, но выбрать надо что-то одно. Я выбрал векторные карты, но не смог прикрутить к ним кастомное оформление и отказался. Зато теперь у карт есть кэширование.

Впрочем, самое первое, что я сделал для этого приложения - это логотип. Здесь приключилась некоторая цепочка удачных решений. Идея использовать в логотипе цвета болгарского флага была крайне очевидной. Это напрямую продиктовало выбор маяка - красно-белых маяков в Болгарии всего два (чисто красных нет вообще) и из них Шабла более узнаваем. Таким образом, концепция лого оформилась, но с оригинальными цветами флага оно выглядело не очень. Поиграл с оттенками - стало лучше, даже почти хорошо. Дальше был достаточно важный для меня в таких случаях момент - я взял паузу. Периодически поглядывал на результат, но старался специально ничего не придумывать. В какой-то момент решил попробовать добавить объёма. С логотипом "Маяков России" это не сработало, но тут добавило последний недостающий штрих. Сразу проверил, как получившееся лого будет выглядеть в виде маленькой иконки и понял, что нарисовал свой лучший логотип. Он прекрасен, не спорьте!

Ставьте все приложение (Google Play Market, Apple App Store), если ещё не сделали этого, и читайте историю маяков, на русском о маяках Болгарии есть только у меня в приложении и на сайте. Хороших всем праздников!

15 Декабря

Почти вышло (версия для Apple на повторной модерации) приложение "Маяки Болгарии" и самое время рассказать о нём. Начну не совсем с того, с чего в таких случаях принято: "на_уя, а главное зачем" я его сделал. Сразу надо уточнить, что работал я не один, а вместе с болгарским фарологом Белой Беновой. Так всё же, зачем? Действительно ли есть люди (кроме нас двоих, работавших над приложением), кому интересна тема маяков Болгарии? Я не задавался и не задаюсь такими вопросами. Я не делал ни это, ни свои прошлые приложения для кого-то. Разумеется, есть целевая аудитория, которой я максимально стараюсь угодить, но делаю я приложение именно для себя. Я уже давно понял, что делать что-либо ради кого-то - это не очень хорошая мотивация в долгосрочной перспективе. И что хуже всего, обязательно настанет момент, когда мысленно начинаешь этого "кого-то" обвинять, мол я для тебя столько всего, а ты для меня такой мелочи не можешь. Всего этого очень просто избежать - надо делать всё для себя. Ребёнок просит купить игрушку и я покупаю. Не потому, что он её хочет, а потому что я хочу чтобы у меня был радостный ребёнок. Ровно то же самое и с моими приложениями - делаю для себя. Собственно, по этой причине я не смотрю статистику скачиваний - не в этом моя цель. И по этой же причине я до сих пор "облизываю" "Маяки Прибалтики" - делаю приложение лучше для себя.

Теперь в общих чертах о приложении "Маяки Болгарии", чем оно уникально или интересно. Также при работе я специально считал затраченное время и на этом аспекте будет сделан особый акцент. Итак, идея сделать приложение пришла мне в голову 12 августа. Логика была такой: я уже имею готовую программную базу приложения "Маяки Прибалтики", которую с минимальными изменениями можно использовать, фото почти всех маяков у меня есть, тексты я в любом случае буду писать для сайта. Получается сделать ну очень малой кровью, плюс, весьма возможно, заведу новые интересные знакомства. На практике же только на программирование, где требовалось взять код и с минимальными переделками адаптировать под новое приложение, у меня ушло две недели плотной работы. Подтянуть интерфейс, поменять цвета, протестировать всё на светлой теме, протестировать всё на тёмной теме, пофиксить ошибки, заново протестировать и т.д. Даже такой простой процесс, как публикация в Google Play занял более 4 часов. Подготовка к публикации в App Store заняла тоже 4 часа. но там процесс ещё не заверщён. Помимо бесчисленного количества форм, надо подготовить баннеры и скриншоты для каждого языка отдельно и в разных разрешениях.

Теперь контент. Он делался параллельно программной части. Все тексты писал я, корректировала и переводила Бела. На написание одного текста у меня уходило в среднем 45 минут. Первый из них я написал ещё в июле, потом ждал книг, когда занялся приложением, времени на написание почти не осталось и т.д. Последний текст я дописал 27 ноября. Тексты в приложении те же самые, что и на этом сайте. Источники информации указаны тут, но часто их было недостаточно. В таких случаях Бела связывалась с департаментом мореходства и узнавала непосредственно у них. В первую очередь, нужны были уточнения по характеристикам огня, так что эта инфа в приложении эксклюзивна.
Чтобы закрыть тему затраченного времени, скажу, что у меня на свою работу по приложению ушло 100-120 часов при очень грубом подсчёте. Это при том, что это мой pet-проект и мотивирован я был до предела. Собственно, это ответ на вопрос почему я не принимаю заказы на создание приложений. У меня на это уходит неконтролтруемо много времени.

Теперь о неочевидном функционале этого и других моих маячных приложений. Если в списке маяков сделать долгое нажание на одном из объектов, он добавится в избранное (раздел "Мои маяки"). То же самое можно сделать свайпнув название маяка влево. В самом разделе "Мои маяки" объект можно убрать из избранного свайпом вправо. Я изобрёл маячный Tinder!

Ещё одно удачное решение данного приложения - дополнительный блок о компании "Compagnie des Phares de l'Empire Ottoman". Эта компания строила и обслуживала некоторые маяки и очень желательно рассказать немного и о ней. На сайте я написал об этом блок текста, в других публикациях просто ставил ссылку непосредственно на него. В приложении так не сделать. В какой-то момент мне вспомнились бумажные журналы и их врезки. Практически то же самое я сделал и в приложении - отдельный блок в рамке с текстом про компанию, идущий после исторической информации. Он показывается только на страницах маяков связанных с "Compagnie des Phares de l'Empire Ottoman", а контент его всегда одинаков. Идея показалась мне настолько удачной, что я решил использовать её и в "Маяках Прибалтики".

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

Цитировать
в комментарии