Приложение Маяки Эстонии
1 Октября

Ещё немного дневников разработчика приложения "Маяки России". Самое главное, о чём я сейчас расскажу, это статус проекта в целом. Но сначала немного о кэшировании. В "Маяках Прибалтики" все данные хранятся локально и кэшировать попросту нечего. В новом приложении все данные из интернета и надо а) дать возможность пользователю использовать приложение без интернета и б) несколько сократить передачу данных. Насколько я понял ситуацию, есть два способа: обычное кэширование и скачивание файлов с данными, то есть, что-то вроде offline-версии приложения. Первый способ комбинирует хранение данных и при этом их обновление, но имеет один недостаток - кэшем в первую очередь управляет ОС и нежданно-негаданно для пользователя она может этот кэш удалить. По умолчанию кэш хранится 30 дней, но из своей практики пользователя смартфона скажу, что вообще ни разу не имел проблем с нежелательно удалённым кэшем. Возможно, имеется в виду 30 дней, когда приложение ни разу не запускалось.

Теперь второй способ. У него есть один плюс: ОС не удалит файлы в тайне от пользователя. Больше плюсов нет. Никакой системы обновления данных тут не предусмотрено, так что, в любом случае, надо как-то комбинировать это с кэшем, а ещё придётся запрашивать у пользователя разрешение на использование памяти смартфона.

Очевидно, что первый способ - мой выбор. Так что я вторгся на совершенно новую для себя территорию и начал затачивать лапки под кэширование. Оказалось, во Flutter всё уже есть "из коробки", просто работать с этим удобнее через плагины. Для кэширования данных я использую flutter_cache_manager, а для фотографий - cached_network_image. Просто и очень удобно! Фактически всё делается само и я не должен думать где хранить, как хранить, как называть, как и когда обновлять. Важный нюанс - сама логика кэша. Это локальное сохранение получаемых данных. На практике это выливается в то, что без интернета будут доступны лишь те данные и фото, которые пользователь уже просматривал. То есть, если установить приложение, и запустить его в первый раз без интернета, никаких данных не будет. Также не будет данных, если без интернета попробовать открыть какой-то маяк или регион, который ранее не просматривался. Но в любом случае, я очень доволен тем, как это работает.

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

Теперь самое главное - статус проекта. В приложении готово всё, кроме карты. Возможно, будут какие-то косметические правки. Например, я не очень уверен в цветовой гамме, но я также понимаю, что это нездоровый перфекционизм. Карта в приложение не добавлена из-за Null safety. Последний официальный релиз плагина вышел давно (что само по себе плохой знак) и этот стандарт не поддерживает. Варианта два: либо отказаться от Null safety во всём приложении, либо использовать dev-версию карт, которая это поддерживает, но с которой на практике я так и не смог подружиться. Короче, есть причины оставить внедрение карты на самый последний момент.

На этом хорошие новости заканчиваются, потому что помимо программирования есть ещё и контент. Немного цифр. Тексты о маяках Эстонии я писал полтора года для сайта и потом пару месяцев переносил их и фотографии в приложение, это порядка 60 маяков. Тексты о маяках Латвии и Литвы писались полгода сразу на сайт и для приложения. В "Маяках России" самих маяков будет в 3-4 раза больше, чем в прибалтийском приложении. Я поставил себе цель писать по три текста в день. Мой 3d-принтер покрылся толстым слоем пыли, к эпоксидке я не прикасался больше месяца, а последняя поделка (второй экземпляр Таллиннского верхнего маяка в масштабе 1:500) так и стоит не доделанная. При этом, только в очень редкие дни я выполняю свой план и постоянно живу с ощущением, что я что-то кому-то должен. Это давит. Очевидно, план надо снижать, я уже готовлю себя к мысли, что в этом году релиза не будет. Более того, с фотографиями всё совсем вышло из-под контроля. То, что начиналось очень хорошо, скатилось в канаву: из всех людей, кто согласился помочь своими фотографиями, снимки прислали 12 человек, а это менее половины. Те, которые прислали, вы самые лучшие, спасибо вам огромнейшее! Остальным я пытался напоминать, кто-то отказывался от участия в проекте, кто-то игнорит, кто-то переходит на агрессию, мол, вообще не до меня. В итоге, сейчас я вообще не занимаюсь поиском фотографий.

Ладно, ныть мы все умеем, а что по существу? По существу, полностью готов регион Калининградской области (11 маяков), но нет фотографий к одному из маяков (Гвардейский). В Инстаграме я их нашёл, но получить не удалось. Следующий регион, Сахалин и Курилы - всего 45 маяков, из которых сейчас написаны тексты для 35, фотографии вообще не подготовлены. На следующей неделе необходимо его закончить. Дальше надо будет делать самые популярные регионы: Финский залив, Ладога, Онега, Белое и Баренцево моря. После этого, в теории, можно выпускать приложение и после этого добавлять остальные данные. Ещё есть идея - после релиза запустить открытый канал в Телеграме для обсуждения приложения. Такой вот роадмап.

18 Сентября

Продолжу немного рассказывать о приложении. Меня очень выбили из колеи проблемы с предыдущим. Сделал совсем небольшое косметическое обновление версии для Android и... приложение стало вылетать при попытке открыть карту. А карту я не менял совсем. С одной стороны ситуация анекдотичная, мол "я не трогал, оно само", а с другой - первые три дня я почти не вылезал из-за компьютера, пытаясь найти проблему. Приложение и карта в нём отлично работали на эмуляторе, компилировались без ошибок, но на смартфоне карта продолжала вылетать. Я перепробовал всё, на что хватило моего ума: отключал поочерёдно функции карты в готовом приложении, делал совершенно новое приложение с картой, компилировал примеры, идущие вместе с плагином карт. После трёх десятков часов таких ковыряний уровень понимания проблемы был нулевым. Я не продвинулся ни на миллиметр. Важный нюанс: я поменял компьютер, на который заново были установлены все программы для разработки и именно после этого ошибка и появилась. В какой-то момент появилась иллюзия победы: приложение, загруженное на телефон непосредственно из Android Studio, работало без ошибок. Я сделал новый релиз, загрузил в маркет, обновил приложение у себя на телефоне и... ошибка никуда не ушла. Очень сильно ситуацию усугублял тот факт, что в Play Market'е была опубликована версия с этой ошибкой и, как я узнал, нельзя было отменить и убрать последний релиз и вернуть предыдущий неглючный. Раньше можно было, а теперь Гугл убрал эту возможность. В итоге, переработка, гонка и стресс, а на выходе ноль. Идей больше не было, тикет на GitHub и вопрос на Stackoverflow не помогли совсем. Остался последний вариант - забить. Я дал проблеме отдохнуть от себя, съездил на Рухну и спустя дней пять начал ковыряться снова и уже к обеду работающая без ошибок версия была отправлена в Play Market на код-ревью. Перебрав ранее все остальные варианты, я начал разбираться с тем, что могло измениться при переносе приложения с одного компьютера на другой, а именно настройками проекта. Ранее я знал, что Flutter - это фреймворк, который использует язык программирования Dart. Чего я не знал, так это того, что в конечном итоге приложение компилируется под другой язык. Для андроида это Kotlin или Java, причём выбрать это в Android Studio можно лишь один раз при создании нового приложения. Я не уверен на 100%, но мне кажется, что почти два года назад, когда я только начинал делать "Маяки Прибалтики", возможности такого выбора не было. Насколько я понимаю ситуацию, при переносе проекта с одного компьютера на другой, результирующий язык с Java поменялся на Kotlin и это начало вызывать ошибку. Другой вопрос, почему под Kotlin карта не работает, хотя должна. А в моём случае изменение языка на Java убрало ошибку.

Теперь немного о новом приложении. Абзацем выше я уже писал, что начинал писать "Маяки Прибалтики" почти два года назад, в ноябре 2019. Сейчас я сел за новое приложение и реально офигел, как сильно изменился Flutter за это время. Изначально я планировал брать готовые куски кода из старого приложения и с минимальными изменениями использовать в новом, но за меня решили, что так не будет. В Dart появилась такая штука как Null safety. В теории вещь прекрасная, на практике хоть и не сильная, но постоянная "попаболь". Так что приложение "Маяки России" я пишу полностью с нуля.

Ещё одним аспектом, который изменился очень сильно, стали стили и темы. Поясню: во Flutter стили элементов можно писать непосредственно в самом элементе (как inline CSS в HTML), либо объявить и описать всё заранее (как CSS "нормального человека"). Сложность в том, что первый способ значительно проще и очевиднее, но отдельное оформление для светлой и тёмной тем работает только во втором способе, который на тот момент был плохо задокументирован. Короче, в "Маяках Прибалтики" мне пришлось делать очень костыльную смесь обоих способов. Сейчас этот вопрос проработан намного лучше и написать тему намного проще и удобнее.

3 Сентября

Вчера на всех платформах вышло новое обновление для моего приложения "Маяки Прибалтики". Наиболее важные его фишки: новые фотки и информация о маяке Вилсанди и пять недействующих латвийских маяков. В загашнике есть ещё два таких маяка, но в этом году я до них точно не доберусь. Ещё одно важное изменение - замена кнопок навигационных приложений на одну общую. В ходе этих мозгоклюйств я узнал, что есть особый тип ссылок, его и использовал. Гораздо проще для меня и удобнее для пользователей. Небольшая часть изменений - "под капотом", в основном они сделаны с прицелом на новое приложение. Чтож, пожалуй, пора рассказать и о нём.

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

Когда я начинал ездить по маякам Эстонии, я был уверен, что доберусь лишь до некоторой части, но не до всех. Объездил все, многие по несколько раз. Когда меня спрашивали на радио, не планирую ли я расширить своё приложение с маяков Эстонии до Латвии или Литвы, я уверенно отвечал, что нет. Уже 10 месяцев, как там вся Прибалтика. И уж точно я никогда бы не подумал, что возьмусь за новое приложение о маяках такой большой страны, как Россия. Отправной точкой тут несомненно стала поездка на Жужмуй. Я пообщался с представителями российского комьюнити любителей маяков. Это интереснейшие люди, преданные маякам также фанатично, как и я, а кто-то и больше. И именно с целью продолжить это общение и завести новые связи я решился делать новое приложение. А ещё мне самому это очень интересно.

Я очень горжусь своим прибалтийским приложением, так как знаю, что за ним стоит. Такой информации в онлайне не найти нигде, кроме приложения и данного сайта, да и фото тоже. И это качество контента очень мне дорого. Для приложения "Маяки России" от этой идеологии пришлось отказаться - объём маяков слишком велик (по моим очень приблизительным прикидкам 300-400), а я сам видел из них лишь 7-8, а фоткал и вовсе три. Поэтому главная идея нового приложения - сначала количество контента, а потом его качество. Не надо трактовать это в плохом контексте. В приложение будут добавляться не все, а лишь интересные для туристов маяки. Кроме "мёртвого", что крайне печально, форума mayaki.ru, я больше не знаю мест, где была бы собрана информация о большом количестве маяков России. Именно поэтому я говорю о превалировании количества над качеством и это только плюс. Да, на поиск и проверку исторической информации для каждого маяка я не могу потратить столько сил и времени, как это было с маяками Прибалтики, но... это можно будет сделать позже. Главной фишкой приложения "Маяки России" будет то, что все данные будут храниться на сервере и для их изменения не надо будет обновлять приложение. С фотографиями та же ситуация - все они будут не моими. Я с несколькими людьми, которые мне помогают посильно, ищу фотографии в Инсте и ВК, я списываюсь с авторами, большинство из них без проблем предоставляют свои фотографии. Но и в этом случае, найти фотки абсолютно всех маяков - невозможно. Но я рассчитываю, что эта часть контента будет добавлена уже после релиза. Для этого внизу каждой страницы с инфо о маяке добавлена кнопка связи. Вот такой проект. В следующих публикациях я расскажу о том, на какой стадии он находится сейчас, а также непосредственно о программировании.

18 Августа

Верхом на ракете

Читаю я в последнее время откровенно мало: за этот год всего четыре книги. Хочу немного рассказать о последней прочитанной. Я даже не помню откуда я о ней узнал, так как книга для меня совсем не типичная. Это биография американского астронавта Майка Маллейна "Верхом на ракете: Возмутительные истории астронавта шаттла". Так случилось, что книга невероятно хорошо мне зашла и я с удовольствием дочитал её до последней страницы, не смотря на немалый объём. Вероятно, причина этого в том, что в книге умело перемешаны технические подробности, солдафонский юмор, простые семейные ценности и детские воспоминания. Читал её на Жужмуе, читал на Бенгтшере, брал с собой на Мерсрагс, но там до чтения не добрался. Могу точно сказать, это лучшая из книг, прочитанных мой за последние три года.

Майк Маллейн

Теперь о другом. Времени в последние недели катастрофически мало, кажется, что уже ворую его сам у себя. По крайней мере, субъективно это ощущается именно так. После долгих раздумий, я таки взялся за проект, который отнимет у меня ещё не одну сотню часов жизни - мобильное приложение "Маяки России". Подробнее я расскажу о нём через пару недель. Сейчас же я стараюсь по-быстрее доделать обновление для "Маяков Прибалтики". Опять же, подробности будут после релиза обновления, но главная его фишка - 5 новых маяков в Латвии. Я уже вкратце писал о них. В ближайшие дни будут выходить исторические публикации об этих маяках, а затем, очень надеюсь, и само обновление приложения.

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