Юрий Петров | ai engineering
Ir al canal en Telegram
Привет! 👋 Я руководитель отдела разработки. Здесь мы изучаем LLM, автоматизацию с n8n, делаем крутые приложения на Flutter и учим их думать с помощью ИИ. Новости, лайфхаки, интересные кейсы, присоединяйся. #flutter #dart #llm #ai #ollama #n8n #agent #go
Mostrar más1 774
Suscriptores
-224 horas
-127 días
-6030 días
Archivo de publicaciones
Ну что, ребята, готовы?)
21 февраля в Москве пройдет Профессиональная Flutter-конференция!
FlutterConf — это уникальная возможность для Flutter-разработчиков углубить свои знания и обменяться опытом в области мобильной разработки.
Что в программе?
- Два потока докладов про реальные кейсы с нестандартными требованиями; архитектурные решения и инструменты для Flutter-проектов;
- Нетворкинг-события – полезные знакомства;
- Круглый стол: прошлое, настоящее и будущее Flutter;
- Афтепати – отдохнуть от продуктивного дня и неформально пообщаться с коллегами.
Я вместе с Аней будем выступать с докладом «Router во Flutter. Когда думал, что всё легко», где расскажем про концепцию декларативного роутера.
Регистрация участников и подача докладов открыты на сайте.
Специальный промокод на скидку 10%:
СПИКЕР10
Присоединяйся — будут все свои!
+2
Всем привет, на выходных допиливал бота), сделал:
1. Отображение последней релизной версии Flutter и Dart (просьба подписчика).
2. Переработал работу пула изолятов для равномерной нагрузки.
3. Переработал алгоритм обновления и получения данных.
4. Добавлена команда /about — информация о боте.
5. Более информативное сообщение о выходе новых релизов Flutter/Dart.
Если есть функционал, который бы вы хотели видеть в боте, пишите)
Repost from Flutter Friendly
Привет, это Роза, Flutter Dev Friflex. Сегодня расскажу, как использовать ARB-файл для локализации на максимум. Что это такое и как работает, писала в этом посте.
Если вы занимаетесь локализацией приложений, то наверняка сталкивались с ситуациями, что в текстах встречаются динамические значения. Например, имя пользователя, дату или сумма денег. Чтобы не писать все это жестко в коде, в ARB-файле есть плейсхолдеры.
Что это такое
Плейсхолдеры — это метки, которые заменяются на реальные значения в runtime.
Что они содержат
🔴 description — описание, которое помогает разработчикам понять контекст строки и ее назначение
🔴 example — пример использования строки
🔴 type — тип данных: String, Object, int, double, num, DateTime
Некоторые типы позволяют настроить поведение еще точнее:
🔴Для чисел (num, int, double): параметры форматирования, такие как валюта, количество знаков после запятой
🔴Для дат (DateTime): поддержка форматов и кастомных шаблонов для отображения дат
Например:
"pageHomeBalance" : "Your balance is {amount} on {date}",
"@pageHomeBalance" : {
"placeholders": {
"amount": {
"type": "double",
"format": "currency",
"example": "$1000.00",
"description": "Account balance",
"optionalParameters": {
"decimalDigits": 2,
"name": "USD",
"symbol": "$",
"customPattern": "¤#0.00"
}
},
"date": {
"type": "DateTime",
"format": "yMd",
"example": "11/10/2021",
"description": "Balance date"
}
}
}
Здесь {amount} и {date} — плейсхолдеры, которые заменяются на реальные значения при отображении. Основные параметры плейсхолдеров — в таблице.
Виды плейсхолдеров
Виды плейсхолдеров:
1. Standard Placeholder (`{}`): для подстановок динамических значений.
2. Plural: изменяет текст в зависимости от количества объектов.
3. Select: выбирает строку в зависимости от кастомного параметра. Например, от времени суток.
4. Gender: изменяет текст в зависимости от пола
💬 Примечания
Указывайте other на случай неожиданных значений.
Plural, Select, Gender используют синтаксис ICU.
Если у вас есть свои лайфхаки или рекомендации по работе с ARB — делитесь ими в комментариях!Repost from Flutter Friendly
Привет! На связи Анна, Friflex Flutter Team Lead
Совсем недавно всеми известная библиотека bloc обновилась до версии 9.0.0. Вместе с ней критические изменения в мажорном обновлении получили:
🔴flutter_bloc (v9.0.0)
🔴hydrated_bloc (v10.0.0)
🔴bloc_test (v10.0.0)
Что эти обновления нам принесли и стоит ли обновляться в ближайшее время? Разберем по пунктам!
1️⃣ Минимальная версия Dart SDK поднята до 2.14.
2️⃣ Удален класс BlocOverrides. Этот объект был внедрен в библиотеку bloc в версии 8.0.0 и успешно работал на чистых Dart программах, но в приложениях на Flutter он вызывал много критичных ошибок.
Из-за этого создатели уже в версии bloc 8.1.0 пометили его как Deprecated и рекомендовали к замене на Bloc.observer и Bloc.transformer. Сейчас в версии 9.0.0 класс был удален полностью — самое время обновиться и избавиться от проблемного API 🙂
3️⃣ Представлен EmittableStateStreamableSoure. Новый интерфейс позволяет библиотеке bloc_test отвязаться от прямого использования реализаций BlocBase. Как результат — метод тестирования блоков blocTest больше не зависит от BlocBase.
4️⃣ Добавлена поддержка WASM. Отличная новость для тех, кто использует библиотеку hydrated_bloc и кому необходимо компилировать Flutter-приложения в WASM — обновление до версии 10.0.0 позволит это сделать!
5️⃣ Изменено поведение HydratedStorage.build(). В предыдущей версии библиотеки повторный вызов метода HydratedStorage.build() возвращал кэшированный экземпляр хранилища. Теперь проблема решена — каждый новый вызов будет создавать новый объект.
Принимать решение о том, поднимать ли версии в своих проектах или нет, конечно, стоит индивидуально, учитывать специфику приложения и остальных зависимостей. Но эти изменения однозначно стоят внимания!
Подробнее ознакомиться с документацией по миграции можно здесь.
Наткнулся на репозиторий, где собраны бесплатные приложения, никакого пиратства. ) Может кому пригодится. 😅
Забираем здесь.
Repost from Flutter Friendly
Привет, это Катя, Flutter Dev Friflex. Недавнее обновление Android Studio вызвало проблему на целый день. Сегодня расскажу, как сделать так, чтобы ваше рабочее окружение снова заработало без ошибок.
Проблема
После обновления с AS 2023.2.1 на AS 2024.2.1 начала появляться ошибка:
ERROR: JAVA_HOME is set to an invalid directory
Причина
Эта ошибка возникает из-за того, что при установке новой версии Android Studio автоматически обновляется версия Java, что может нарушить совместимость.
Шаги решения
1. Установка OpenJDK 17 через brew. Установите нужную версию Java с помощью команды
brew install openjdk@17.
Подробнее о пакете можно узнать на странице установки OpenJDK через brew.
2. Переопределение JAVA_HOME в ~/.zshrc. Обратите внимание, что этот подход может не сработать, так как параметр JAVA_HOME устанавливается, но не применяется в системе. Добавьте следующую строку в ваш ~/.:
export JAVA_HOME=/opt/homebrew/opt/openjdk@17
3. Проверка текущих настроек Flutter. Выполните команду:
flutter config --list
Обратите внимание на параметр jdk-dir. Он указывает текущий путь до Java Development Kit (JDK).
4. Обновление пути до JDK. Замените текущий путь на установленную версию OpenJDK.
Например:
flutter config --jdk-dir /opt/homebrew/opt/openjdk@17
Если вы уже устанавливали JDK другим способом, укажите соответствующий путь.
5. Проверка конфигурации Flutter. Убедитесь, что изменения применились, выполнив:
flutter config --list
Затем попробуйте запустить проект, чтобы проверить работоспособность.
Теперь проект должен успешно запускаться 🥳
Если вы сталкивались с подобной проблемой и решили ее иным способом, поделитесь своим опытом в комментариях!Всем доброе утро, первый перехват появления нового релиза Flutter. С чем @FlutterObserver_bot и поздравляю 🥳
Repost from Flutter Friendly
ARB-формат во всей красе
Привет, это Роза, Flutter Dev Friflex. В последнее время я много работаю с локализацией и заметила интересную вещь: ARB-файл часто недооценен. Сейчас расскажу, что это и как работает.
Что это
ARB (Application Resource Bundle) — это, по сути, файл JSON, улучшенный для локализации, с расширением
.arb. Проще говоря, там хранятся переводы текста, которые вы видите в приложении. Помимо ключей и строк, ARB поддерживает:
🔴описания контекста
🔴примеры использования
🔴типы данных
🔴форматирование
Например:
{
"@@locale": "ru",
"topicTitle": "Arb-формат во всей красе",
"@topicTitle": {
"description": "Заголовок для статьи про Arb-формат"
}
}
Здесь ключ topicTitle хранит строку, а под @topicTitle — метаданные. При помощи метадаты вы можете указывать для ключей локализации:
🔸context: пояснения для переводчиков и разработчиков
🔸type: указание типа строки или ее назначения
🔸comment: подсказки к строкам
Например:
{
"welcome": "Добро пожаловать, {name}!",
"@welcome": {
"description": "Сообщение для приветствия",
"context": "Для нового пользователя",
"type": "Information",
"comment": "Имя {name} нельзя переводить."
}
}
Где используется
Во Flutter ARB-файлы тесно интегрированы с библиотекой intl, которая отвечает за локализацию.
Как это работает
1️⃣ Создаете отдельные ARB-файлы для всех языков, которые хотите поддерживать.
2️⃣ С помощью команды flutter gen-l10n генерируете Dart-код, который автоматически подтягивает правильные переводы для языка пользователя.
3️⃣ В коде просто обращаетесь к строкам по их ключам, а перевод подставляется автоматически.
❗️В реальных приложениях часто требуется использовать динамические значения внутри строк.
Например, вместо «Привет, Роза!» в строке может быть «Привет, {name}!»
Для этого в ARB-файлах применяются плейсхолдеры. О них я расскажу в следующем посте.Repost from Стас Ильин | Flutter
📦 Вышел BLoC v9.0.0
✅ Поддержка WebAssembly (wasm)
✅ Обновление примеров и туториалов по использованию
✅ Минимальный Dart v2.14
✅ Новый внутренний интерфейс EmittableStateStreamableSource заменил Emittable у BlocBase
По-сути это "посредник", который помогает тестировать блоки и внедрять кастомный source, не привязываясь к конкретной реализации BlocBase
⚠️ Удален ранее помеченный как Deprecated класс BlocOverrides. Вместо него тепреь нужно использовать Bloc.observer и Bloc.transformer
⌨️ Гайд по миграции
Всем привет друзья. Многие спрашивают, как организовать папки внутри фичи.
Вот, мы тут запилили плагин Flutter Friflex для VSCode.
Плагин прошел проверку, и опубликован.
Исходный код плагина здесь.
1.Плагин умеет создавать папки для отдельной фичи
2. Создавать StatefulWidget и StatelessWidget по названию файла
3. Создавать класс согласно названия файла
4. Есть настройки
Также, если вы хотите поменять структуру для генерации, то можете в папке .friflex_config изменить шаблон.
Ждем обратную связь, и если есть идеи для добавления функций, которые будут полезны разработчикам, пишите.
P.S. Сильно не пинайте, мой первый плагин))
Всем привет, сейчас пошла мода писать миниапы и боты для телеграма. Ну и я решил тоже написать). Но он мне был реально нужен.
Так вот, представляю Flutter Observer. Бот, который следит за репозиториями Flutter и Dart и оповещает пользователей о появлении новых релизов и изменений в ветке STABLE.
Сам бот написан на чистом Dart, а не на всяких там котлинах и go)))
База данных SQLite + Drift.
В боте есть возможность настроить наблюдателя так, как вам необходимо.
В дальнейшем есть планы добавить дашборды активности в репозиториях, отслеживания в pub dev и так далее.
@FlutterObserver_bot
Repost from Flutter Friendly
+4
«Он сказал мне, что жизнь, как в мечте, получу я без всяких преград»🐼
Но только если ваше приложение пройдет аудит. Виды, этапы и как подготовиться — на карточках.
📎Полезные ссылки:
Статья на Хабре
OWASP
Пример чек-листа на Стингрей
Repost from Flutter Friendly
А вдруг вы прямо сейчас пишете сервис на Dart, задача которого — отправить миллион сообщений ровно в 12 дня? Юрий Петров, Tech Lead Friflex написал статью, как это можно сделать:
🔸Установить и запустить контейнер с RabbitMQ
🔸Настроить RabbitMQ
🔸Создать Producer (отправителя) на Flutter
🔸Создать Consumer (потребителя) на Flutter
Сохраняйте, чтобы не потерять🔖
Repost from MADTeacher | Станислав Чернышев
Книга "Основы Flutter" уже написана наполовину 😎, а значит - цена курса на степике увеличивается на 500 рублей😅
Если вы хотели приобрести курс, но на это все никак не было "времени", по 21 января его можно будет купить по старой цене, воспользовавшись скидкой в 25% 🫣
Repost from MADTeacher | Станислав Чернышев
У меня для вас хорошие новости по книге "Основы Flutter" 👀
Перед новогодними праздниками мне на редактуру прислали материал Юра Петров (глава про навигацию в Flutter) и Стас Ильин (первый раздел главы про локальное хранение данных).
Глава по навигации отредактирована и утверждена, а значит, на курсе "Основы Flutter" на степике большое обновление ^_^ Приступаю к редактированию материалов Стаса😎
p.s. Так же, на ютубе выложил новое видео из курса по Dart, посвященное типу данных Map🫠
#book@madteacher_channel
Repost from Friflex Dev
+5
📎Пост заряженный на повышение!
Для всех, кто когда-нибудь планирует возглавить команду разработчиков, собрали плюсы и минусы этой должности вместе с Дмитрием, Flutter Team Lead Friflex.
Не отговариваем, а обращаем внимание на навыки, которые стоит подтянуть. Будет полезно и тем, кто только стал тимлидом и не знает, с чего начать. Не переживайте, все получится!💜
Repost from MADTeacher | Станислав Чернышев
Книга "Основы Flutter" перевалила за 600 страниц (в вордовском документе)😎
Перед новогодними праздниками на редактуру прислали материал Юра Петров (глава про навигацию в Flutter) и Стас Ильин (первый раздел главы про локальное хранение данных).
Сейчас редактирую главу про навигацию (сделано ~ 30%), потом настанет очередь Стаса, а там гляди и Павел подоспеет со своими материалами😊
Этот год обещает быть жарким для авторского коллектива и книги 🔥🔥🔥
p.s. по 9-е января на электронную версию книги, главы и разделы которой выкладываем на степик после редактуры и утверждения, действует скидка в 1️⃣5️⃣ 🔤 Основы Flutter
⚡️⚡️⚡️ Всех с наступающим Новым годом, друзья! 👋
Желаю, чтобы у всех получилось реализовать задуманное в Новом году!
В связи с этим прекрасным событием, по 9-е января можно приобрести следующие курсы со скидкой:
🔥 3️⃣0️⃣ 🔤 Dart 3 в действии
🔥 3️⃣0️⃣ 🔤 Go (Goland) + Gin = быстрый бэкенд для заметок.
🔥 3️⃣0️⃣ 🔤 Dart+ Flutter — быстрый gRPC бэкенд и клиент для чата на Protobuf.
🔥 3️⃣0️⃣ 🔤 Создаем RESTful бэкенд на Dart и клиент на Flutter.
🔥 1️⃣5️⃣ 🔤 Основы Flutter
#flutter #dart.
