Добавлю немного скринов:
🔸 список сохраненных вкусняшек (или наоборот)
🔸 большое вью с картой, где можно выбрать место
🔸 вью редактирования/просмотра с превьюшкой карты (тут можно увидеть кнопку share)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Через полгода как я завел девелоперский аккаунт, apple почему-то поинтересовался моим паспортом и заблокировал 👨💻 AppStore Connect.
Через полдня после того, как я отправил всё, что им было нужно, доступ восстановили 😊
Через полдня после того, как я отправил всё, что им было нужно, доступ восстановили 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Всем привет 👋 Давно не было от меня новостей
Так вот, несу прикольный апдейт.
Я начал параллельно смотреть на геймдев, и познакомился с Godot👩💻
Так уж вышло, что для меня классикой является змейка, поэтому вот моя версия:
Так вот, несу прикольный апдейт.
Я начал параллельно смотреть на геймдев, и познакомился с Godot
Так уж вышло, что для меня классикой является змейка, поэтому вот моя версия:
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Видео с телефона
Так уж получается, что я прыгаю от одного проекта к другому. Мне не хочется сделать проект и забросить его. К тому же, пользователи, знакомые и я пользуемся и хотим видеть какие-то улучшения в приложениях.
Это время я занимался улучшением стратегии подбора слов в DerDieDas🇩🇪
Вот самое интересное:
🔸 Создал отдельный Package в котором храню бизнес логику, и линкую его в основной проект.
Воспользовался подходом, который подсмотрел в упоминаемом ранее проекте: https://github.com/Dimillian/IcySky/tree/main
Самые классные плюшки тут:
- это можно легко тестировать (алгоритм получился не очень простой)
- мокаю всё, что захочу
- дизайн классов построенный на абстракциях
- разбиение проекта на модули, single responsibility наше всё (несмотря на то, что проект небольшой, поддерживать его становится сложнее со временем)
🔸 Алгоритм подбора слов основанный на комбинации стратегий:
- due words (слова, которые пора повторить) способом 4х колод
- примерный уровень пользователя (давать слова из этого же уровня и выше)
- калибровка, если уровень ещё не известен
То, что меня тут больше всего цепляет, это https://en.wikipedia.org/wiki/Sigmoid_function
Я использую её, чтобы откорректировать вес среднего по каждому уровню.
Например, пользователь ответил правильно на 5 из 5 на уровне A2 - вроде в среднем 100%, но 5 вопросов это мало, поэтому с помощью Сигмоида это всего лишь 24%. Как? Сделаю небольшой отдельный пост (там всё просто).
🔸 Отказ от CoreData?
Попробовать было интересно и даже полезно. Но с этим товарищем нам, похоже, не по пути.
Пока вижу так, что вся эта реактивщина изменений мешает. Мне намного удобнее иметь отдельный метод, через который я делаю изменения и контролирую все зависимые от него части.
Более конкретный пример: сложно реализовать локальные кэши, в которых я хочу сделать оптимизации. Например, мне нужно хранить среднее. При реактивном подходе, среднее нужно пересчитывать. Иначе - все изменения под контролем, я могу использовать переменные для хранения различных счетчиков, и использовать их оптимальнее.
Может это излишняя оптимизация, но мне так легче. А это главное!
Не спешу с этим, но похоже придется убрать CoreData. Посмотрим ещё😮
Это время я занимался улучшением стратегии подбора слов в DerDieDas
Вот самое интересное:
Воспользовался подходом, который подсмотрел в упоминаемом ранее проекте: https://github.com/Dimillian/IcySky/tree/main
Самые классные плюшки тут:
- это можно легко тестировать (алгоритм получился не очень простой)
- мокаю всё, что захочу
- дизайн классов построенный на абстракциях
- разбиение проекта на модули, single responsibility наше всё (несмотря на то, что проект небольшой, поддерживать его становится сложнее со временем)
- due words (слова, которые пора повторить) способом 4х колод
- примерный уровень пользователя (давать слова из этого же уровня и выше)
- калибровка, если уровень ещё не известен
То, что меня тут больше всего цепляет, это https://en.wikipedia.org/wiki/Sigmoid_function
Я использую её, чтобы откорректировать вес среднего по каждому уровню.
Например, пользователь ответил правильно на 5 из 5 на уровне A2 - вроде в среднем 100%, но 5 вопросов это мало, поэтому с помощью Сигмоида это всего лишь 24%. Как? Сделаю небольшой отдельный пост (там всё просто).
Попробовать было интересно и даже полезно. Но с этим товарищем нам, похоже, не по пути.
Пока вижу так, что вся эта реактивщина изменений мешает. Мне намного удобнее иметь отдельный метод, через который я делаю изменения и контролирую все зависимые от него части.
Более конкретный пример: сложно реализовать локальные кэши, в которых я хочу сделать оптимизации. Например, мне нужно хранить среднее. При реактивном подходе, среднее нужно пересчитывать. Иначе - все изменения под контролем, я могу использовать переменные для хранения различных счетчиков, и использовать их оптимальнее.
Может это излишняя оптимизация, но мне так легче. А это главное!
Не спешу с этим, но похоже придется убрать CoreData. Посмотрим ещё
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2⚡1👌1
Похоже, получилось громоздко 🤔 Какой размер постов вам удобнее (спасибо, что читаете)?
Final Results
0%
Короткие
67%
Средние
17%
Большие
67%
И так сойдёт!
Всем привет! 👋 Пора бы заполнить тишину 😂
Сейчас я активно работаю над приложением🇩🇪
Переделываю дизай - да, задумку про минимализм не получается реализовать на💯 Хочется чего-то большего, и тут не получится без “Настроек” и прочих мелочей.
Обновляю не только визуал, хотя это большая часть. Но так же разобрался с локальными нотификациями - приложение само планирует когда и что показать. Либо само приложение, но чаще пользователь, настраивает расписание.
Есть ещё и серверные push-нотификации, когда с сервера присылаются уведомления. Это сложнее, и в моём случае пока не нужно было.
Помимо этого, поскольку я планирую использовать Firebase🔥 и для других приложений, то этот проект выступает в роли подопытного кролика, на котором я реализую:
🔸 anonymous login - вполне говорящее название. Даже без регистрации (и смс) можно будет различать пользователей.
🔸 App Check - Firebase может проверять, что запросы приходят именного из твоего приложения. Работает через интеграцию с сервисами Apple. Когда сделаю - потестирую и отпишу о результатах #todo
Сейчас я активно работаю над приложением
Переделываю дизай - да, задумку про минимализм не получается реализовать на
Обновляю не только визуал, хотя это большая часть. Но так же разобрался с локальными нотификациями - приложение само планирует когда и что показать. Либо само приложение, но чаще пользователь, настраивает расписание.
Есть ещё и серверные push-нотификации, когда с сервера присылаются уведомления. Это сложнее, и в моём случае пока не нужно было.
Помимо этого, поскольку я планирую использовать Firebase
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1
Saga. Но не паттерн, а история как я пытался перехитрить Firebase/GCP.
В предыдущем посте я рассказывал о планах подключить anonymous login и App Check в🇩🇪
С этими задачами я разобрался относительно быстро. Больше времени ушло на изучение документации. А у гугла, так уж получается, документация настолько хороша, что после её прочтения всё заводится с полпинка.
❗️ Anonymous Login
В кратце, в приложении всё что нужно сделать - это:
При успешном выполнении, получаем
В моём случае я использую его репортинга ошибок. Так я могу видеть какие баги были зарепорчены одним и тем же пользователем. Как минимум это может быть полезно, если кто-то захочет просто так порепортить всё подряд.
❗️ App Check
Эта фича позволяет проверить, что запросы прилетают из приложения. Firebase интегрируется с Apple и проверяет входящие запросы на валидность.
Настройка так же не занимает много времени. Нужно на стороне Apple выпустить
В предыдущем посте я рассказывал о планах подключить anonymous login и App Check в
С этими задачами я разобрался относительно быстро. Больше времени ушло на изучение документации. А у гугла, так уж получается, документация настолько хороша, что после её прочтения всё заводится с полпинка.
В кратце, в приложении всё что нужно сделать - это:
Auth.auth().signInAnonymously { authResult, error in
При успешном выполнении, получаем
uid
пользователя и используем его как хотим.В моём случае я использую его репортинга ошибок. Так я могу видеть какие баги были зарепорчены одним и тем же пользователем. Как минимум это может быть полезно, если кто-то захочет просто так порепортить всё подряд.
Эта фича позволяет проверить, что запросы прилетают из приложения. Firebase интегрируется с Apple и проверяет входящие запросы на валидность.
Настройка так же не занимает много времени. Нужно на стороне Apple выпустить
private key
, зарегистрировать в Firebase, и настроить приложение выполнив
private func configureFirebaseAppCheck() {
#if DEBUG
// для симуляторов
let providerFactory = AppCheckDebugProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)
#else
// для прода
// хотя, возможно, эта часть не обязательна - в документации об этом ни слова :’(
let providerFactory = DeviceCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)
#endif
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧨 А вот тут самое интересное
Поскольку это ужасно неудобно - проверять firebase console на наличие новых документов ввелосипед нотификатор на базе Telegram Bot.
Радостный я - узнал, что можно использовать💪 ) вызываются всякий раз, когда добавляется (обновляется, и другие события тоже) документ в базе.
Довольный я - написал функцию, но при попытке деплоя обнаружил, что нужно перейти на платный Pricing Plan - Blaze… (Spark дефолтный и полностью бесплатный). В целом платишь, если только используешь выше квоты.
С этим я мириться не смог, стал изучать как можно обойти это ограничение. И тут обнаружил, что
Поскольку это ужасно неудобно - проверять firebase console на наличие новых документов в
Firestore Database
(именно тут я и храню репорты о багах), в добавок у Firebase нет мобильного приложения. Я решил изобрести Радостный я - узнал, что можно использовать
Firebase Functions
. Идея известная, похожие на триггеры в субд - функции (на nodejs Довольный я - написал функцию, но при попытке деплоя обнаружил, что нужно перейти на платный Pricing Plan - Blaze… (Spark дефолтный и полностью бесплатный). В целом платишь, если только используешь выше квоты.
С этим я мириться не смог, стал изучать как можно обойти это ограничение. И тут обнаружил, что
Google Cloud
отлично интегрируется с Firebase, ведь Firebase работает поверх Google Could. Небольшой сложностью было то, что сообщения в функции (Cloud Run) приходят в формате Proto (protobuf). Ну ничего, нашел на гитхабе пример (от гугла) и воспроизвел его. Поковырялся около 4 часов с этим безобразием, я всё же смог задеплоиться. И знаете что? 🤣 Они меня автоматом перевели на Blaze в Firebase. Обнаружил я это только на следующий день, увидев письмо с “поздравлениями”.Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
На этом хитрость века закончилась…
Разочарованный я - решил всё же использовать
В
Но всё же по итогу у меня получился “бесплатный” функционал нотификаций из✈️ через бота.
Через
Сообщение представляет собой markdown форматированный текст с метаданными и некоторыми полезными полями в форме json.
Однако редактировать приходится руками. Если придется заниматься этим часто - буду автоматизировать😉
Разочарованный я - решил всё же использовать
Firebase Functions
, поскольку помимо упрощения, когда приходит сразу json, а не proto, Firebase
предоставляет локальные симуляторы. Очень просто и красиво поднимается web server, с помощью которого, можно создавать документы (прям как в `Firestore Database`) и тестировать свои супер функции.В
Cloud Run
такого функционала я не нашел, поэтому приходилось на каждое изменение деплоить их в клауд. Мало того, что это долго, так ещё и тестирование усложняется в разы.Но всё же по итогу у меня получился “бесплатный” функционал нотификаций из
Firestore Database
в Telegram Через
Bot Father
создал бота и в Firebase Functions
посылаю себе в личку нотификации каждый раз как появляется новый документ.Сообщение представляет собой markdown форматированный текст с метаданными и некоторыми полезными полями в форме json.
Однако редактировать приходится руками. Если придется заниматься этим часто - буду автоматизировать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🆒1
Я наконец-то вернулся из отпуска - но времени я не терял, поэтому есть много чего рассказать. Stay tuned 🏖
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👀1
Даже хейтерам ChatGPT это будет интересно.
🌴 Лежу я значит на пляже - солнце, шум моря, загар ложится ровно, телефон в руке. Но мозг, как обычно, не умеет отдыхать. В голове вертится: "А что если добавить в приложение простенькую фичу? Можно то, и можно это… а ещё и так, да эдак”
И тут я вспоминаю про Copilot в GitHub. Проверил - он доступен с телефона. Думаю: “Дай-ка напишу ему, пусть скажет насколько это вписывается в текущий проект”. А он в ответ предлагает создать Pull Request.
o_O ничоси
Попросил его сделать easy mode для🇩🇪 . Он создает Pull Request, запускается Xcode Cloud CI, сборка проходит успешно, а Copilot ставит меня ревьюером. После нескольких замечаний, он исправляет, то что мне не нравится, объясняет что не понятно. Мой клик на Мерж, сборка Xcode Cloud, отправка в Test Flight, и я не взяв в руки ноутбук и не написав ни единой строчки кода устанавливаю приложение… Итс факинг крейзи 😆
Самое классное, что я понимаю по итогу, что я получаю в проекте, и контролирую, что туда попадает. Ревью как ни как.
До этого я использовал Github Copilot в режиме Agent. Он помогает со всеми делами (жаль не по дому) в VS Code👩💻
У него есть контекст проекта - умеет читать README (для него можно даже писать специальные инструкции в `.github/copilot-instructions.md`), может создать тесты, запустить что-нибудь в терминале, поревьюить, или написать логику.
Это вызывало огромный дискомфорт, поскольку это занятие не высвобождает свободное время - приходится постоянно переписываться и смотреть, что он делает. И главное, я в это время не могу заниматься ничем другим. Мне хотелось, чтобы это было больше похоже на поручение задачи своему коллеге.
Создатели GitHub Copilot coding agent поняли это достаточно быстро. По пути в магазин, на работу, на вечеринку или просто на прогулке, меня посещает мысль - я закидываю её в агента и в свободную минуту могу посмотреть результат, даже с телефона.
Вот это реально экономит время и позволяет больше эксперементировать!😺
И тут я вспоминаю про Copilot в GitHub. Проверил - он доступен с телефона. Думаю: “Дай-ка напишу ему, пусть скажет насколько это вписывается в текущий проект”. А он в ответ предлагает создать Pull Request.
o_O ничоси
Попросил его сделать easy mode для
Самое классное, что я понимаю по итогу, что я получаю в проекте, и контролирую, что туда попадает. Ревью как ни как.
До этого я использовал Github Copilot в режиме Agent. Он помогает со всеми делами (жаль не по дому) в VS Code
У него есть контекст проекта - умеет читать README (для него можно даже писать специальные инструкции в `.github/copilot-instructions.md`), может создать тесты, запустить что-нибудь в терминале, поревьюить, или написать логику.
Это вызывало огромный дискомфорт, поскольку это занятие не высвобождает свободное время - приходится постоянно переписываться и смотреть, что он делает. И главное, я в это время не могу заниматься ничем другим. Мне хотелось, чтобы это было больше похоже на поручение задачи своему коллеге.
Создатели GitHub Copilot coding agent поняли это достаточно быстро. По пути в магазин, на работу, на вечеринку или просто на прогулке, меня посещает мысль - я закидываю её в агента и в свободную минуту могу посмотреть результат, даже с телефона.
Вот это реально экономит время и позволяет больше эксперементировать!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Ссылка на Github Copilot coding agent
https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent
Накидайте лайков, если эта тема интересна. Могу про схожее ещё написать😉
https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent
Накидайте лайков, если эта тема интересна. Могу про схожее ещё написать
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub Docs
GitHub Copilot coding agent - GitHub Docs
Find out how Copilot can work on GitHub issues and raise pull requests for you to review.
❤4
Продолжаю осваивать Firebase 👩💻
Добавил интеграцию с
🟥 Документация - на уровне!
Достаточно пройтись по инструкции: https://firebase.google.com/docs/crashlytics/get-started?platform=ios
Отдельно понравилась настройка
Главной мотивацией подключения
Как делать UI тесты и “мокать” Firebase - до сих пор загадка для меня 🤔💭
Добавил интеграцию с
Crashlytics
- это сервис, который показывает, когда и почему твоё приложение падает у пользователей. Он собирает все вылеты в одном месте и помогает быстро понять, что сломалось, чтобы починить.Достаточно пройтись по инструкции: https://firebase.google.com/docs/crashlytics/get-started?platform=ios
Отдельно понравилась настройка
Xcode
для загрузки Apple Debug Symbols (dSYM)
, не сам процесс, а идея. После этого отчёты об ошибках становятся человекочитаемыми: вместо адресов памяти видно имена методов.Главной мотивацией подключения
Crashlytics
был баг, который я обнаружил после релиза. Снова ною про тесты, они очень нужны, но писать их сложно - мешает интеграция с Firebase.Как делать UI тесты и “мокать” Firebase - до сих пор загадка для меня 🤔💭
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Зарегал домен 🌐
У меня появился мой первый домен, и этого первенца зовут grocemelier.app
Создавая это приложение, я хочу пройти путь наиболее похожий на создание продукта. Независимо от результата, уверен, что получу уйму полезных навыков, и познакомлюсь с тем, что на работе встретить почти никогда не удаётся.
✍️ Регистрация не заняла много времени, напротив, это было одно из самых простых. Плати и получай 🤑
Но даже при регистрации домена мне удалось узнать что-то новое. В интерфейсе настройки обнаружил типы записей в DNS. Если я знал, что такое
✍️ Создание landing страницы порядком меня помучало (я потратил на это 5 часов)
Поскольку я уже повязан Firebase, то и тут я решил воспользоваться их продуктом Firebase Studio.
Firebase Studio по своей сути является генератором сайтов, приложений, ai решений. И да, это снова AI - Gemini.
Интерфейс представляет собой VS Code👩💻 запущенный на виртуалке (поэтому доступ к терминалу имеется). Туда накинуты расширения, которые показывают Preview сайта, интегрируются с Gemini Agent, и отсюда же можно задеплоить приложение на Google Cloud инфраструктуру посредством Firebase Hosting.
Я создал несколько версий, но на текущий момент оставил только одну - самую простую. Сейчас я смогу собирать emails потенциальных пользователей для участия в Beta тестировании (для этого буду использовать TestFlight). Возможно стоит разместить сразу TestFlight кнопку, но так целостность страницы нарушается, я оставил это немного на попозже - пока буду инвайтить руками.
✍️ По пути применяю полученный опыт
В качестве базы использую Firebase Firestore. Есть функции для отправки нотификаций в телеграм. Firebase Studio умеет работать только с nextjs фреймворком (просил написать на Vue.js - отказался, сказав, что не такой умный), но другие языки/платформы так же поддерживаются.
В общем я получаю очень много интересного опыта и позитивных эмоций занимаясь этим проектом 🥰
У меня появился мой первый домен, и этого первенца зовут grocemelier.app
Создавая это приложение, я хочу пройти путь наиболее похожий на создание продукта. Независимо от результата, уверен, что получу уйму полезных навыков, и познакомлюсь с тем, что на работе встретить почти никогда не удаётся.
Но даже при регистрации домена мне удалось узнать что-то новое. В интерфейсе настройки обнаружил типы записей в DNS. Если я знал, что такое
A
, NS
, то MX
и CNAME
стали для меня открытием. Разрабатывая backend очень редко приходится сталкиваться с этими вещами, а времени, свободного времени, всегда мало. Даже сказал бы - его нет!Поскольку я уже повязан Firebase, то и тут я решил воспользоваться их продуктом Firebase Studio.
Firebase Studio по своей сути является генератором сайтов, приложений, ai решений. И да, это снова AI - Gemini.
Интерфейс представляет собой VS Code
Я создал несколько версий, но на текущий момент оставил только одну - самую простую. Сейчас я смогу собирать emails потенциальных пользователей для участия в Beta тестировании (для этого буду использовать TestFlight). Возможно стоит разместить сразу TestFlight кнопку, но так целостность страницы нарушается, я оставил это немного на попозже - пока буду инвайтить руками.
В качестве базы использую Firebase Firestore. Есть функции для отправки нотификаций в телеграм. Firebase Studio умеет работать только с nextjs фреймворком (просил написать на Vue.js - отказался, сказав, что не такой умный), но другие языки/платформы так же поддерживаются.
В общем я получаю очень много интересного опыта и позитивных эмоций занимаясь этим проектом 🥰
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Добавил кнопу логина через Google 🖥
Над этой темой пришлось попотеть.
🔴 Во первых, почему-то Google Sign-In не включен в Firebase SDK
В Firebase Console можно включить различные механизмы Authentication. Но по какой-то непонятной мне причине, https://github.com/google/GoogleSignIn-iOS нужно подключать отдельно.
🔴 Во вторых, документация расходится с практикой
Хорошо описано как добавить Firebase Auth. Есть примеры, и много сторонних статей. Но есть такой пример:
https://firebase.google.com/docs/auth/ios/google-signin
Который у меня не сработал.
Нашел, что я не единственный столкнулся с этой проблемой: https://github.com/firebase/firebase-ios-sdk/issues/15151
Помимо того, что в файле
В документации https://firebase.google.com/docs/auth/ios/google-signin про это ни слова…
🔴 Ну и в третьих, это линковка аккаунтов (тут телеграм сходит с ума и рисует красный кружок 😁)
Если залогинился под одним провайдером, потом под другим, их можно слинковать как одни и те же. Но похоже только 2… Для большинства проектов это совсем не проблема. Но штука не очевидная🥵 (а тут супер-эмодзи совсем перестали работать)
Над этой темой пришлось попотеть.
В Firebase Console можно включить различные механизмы Authentication. Но по какой-то непонятной мне причине, https://github.com/google/GoogleSignIn-iOS нужно подключать отдельно.
Хорошо описано как добавить Firebase Auth. Есть примеры, и много сторонних статей. Но есть такой пример:
https://firebase.google.com/docs/auth/ios/google-signin
guard let clientID = FirebaseApp.app()?.options.clientID else {
fatalError("Firebase clientID not found. Ensure GoogleService-Info.plist is properly configured and added to the project.")
}
let config = GIDConfiguration(clientID: clientID)
GIDSignIn.sharedInstance.configuration = config
Который у меня не сработал.
Нашел, что я не единственный столкнулся с этой проблемой: https://github.com/firebase/firebase-ios-sdk/issues/15151
Помимо того, что в файле
GoogleService-Info.plist
CLIENT_ID, это же значение нужно прописать в Info.plist
в поле GIDClientIDВ документации https://firebase.google.com/docs/auth/ios/google-signin про это ни слова…
Если залогинился под одним провайдером, потом под другим, их можно слинковать как одни и те же. Но похоже только 2… Для большинства проектов это совсем не проблема. Но штука не очевидная
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Ну что друзья, время порадоваться!
Наконец приложение выпущено, конечно, сырое, но уже получившее пару апдейтов:
https://apps.apple.com/de/app/grocemelier/id6745146245
Основная цель, по которой я заводил этот канал, в какой-то степени достигнута, и даже года не прошло😅
Но это не конец пути, а скорее начало. В частности, это и начало обратного пути, к Kotlin.
За это время я узнал очень много, плюсом оно совпало с бумом AI, и от этого стало только увлекательнее.
Раздумываю сейчас над созданием версии для👩💻 и заодно реализацией некоторых важных фич (трудоемких, но все же нужных), от которых приложение должно стать на 999,99% удобнее и полезнее.
Наконец приложение выпущено, конечно, сырое, но уже получившее пару апдейтов:
https://apps.apple.com/de/app/grocemelier/id6745146245
Основная цель, по которой я заводил этот канал, в какой-то степени достигнута, и даже года не прошло
Но это не конец пути, а скорее начало. В частности, это и начало обратного пути, к Kotlin.
За это время я узнал очень много, плюсом оно совпало с бумом AI, и от этого стало только увлекательнее.
Раздумываю сейчас над созданием версии для
Please open Telegram to view this post
VIEW IN TELEGRAM
App Store
Grocemelier
Grosmelier - Your Personal Groceries Rating Library
Discover, rate, and remember the groceries you try - all in one place.
Grosmelier helps you keep track of what you’ve loved (or not to skip it next time), so shopping for food becomes simple, smart, and…
Discover, rate, and remember the groceries you try - all in one place.
Grosmelier helps you keep track of what you’ve loved (or not to skip it next time), so shopping for food becomes simple, smart, and…
🔥3👍1