Forwarded from Дневник Flutter-разработчика (Dmitry Lyovochkin)
Команда Яндекса делится опытом в разработке на Flutter:)
Все вышедшие на сегодняшний день лекции:
Для чего Flutter используют в Яндекс Драйве и Яндекс Маркете? Как Flutter показал себя в Практикуме? Есть ли будущее у Flutter в Такси?
Асинхронное программирование в дарте. Future, FutureOr, Stream, async, await, yield, Zone... Как это всё работает? Копаем вглубь, ломаем стереотипы, убираем магию.
Лекция в широком смысле рассказывает об архитектуре как явлении и указывает, о чём важно помнить при проектировании приложения
На лекции мы обсудим идею state management в целом, ее архитектурные особенности при работе с состоянием. Обсудим популярные подходы к state management и самые популярные реализации. Сравним их по критериям, важным для масштабируемого приложения. Наконец, обсудим, какие решения лучше подходят для конкретных кейсов.
Как виджеты превращаются в пиксели на экране? Почему Flutter еще не переписали на Kotlin? Что круче — Skia или Impeller?
Спикер: Глеб Осотов, Flutter-разработчик Яндекс Про
На лекции мы рассмотрим, зачем нужны анимации в приложениях, как они устроены во Flutter. Вы узнаете не только какие виды анимаций можно использовать во Flutter, но и как они устроены внутри.
Спикер: Даниил Артамонов, руководитель группы мобильной разработки Яндекс Лавки
В рамках лекции мы познакомимся с пакетами, плагинами и другими способами делиться кодом между проектами на Dart. Познаем семантическое версионирование и научимся управлять зависимостями в больших проектах; Для этого погрузимся в инструментарий Dart и Flutter cli.
Научимся публиковать свои пакеты для общего и не очень доступа и изучим pub.dev.
Спикер: Константин Федуров, Flutter-разработчик Яндекс Про
В лекции рассмотрим, как работают и как использовать пакеты для кодогенерации, научимся исследовать код и покажем это на демо. Вместе с этим мы узанем как работает анализатор, и как мы можем писать свои правила для увеличения качества кода нашего проекта.
Спикер: Дмитрий Золотов, Flutter-разработчик Яндекс Доставки
На лекции мы научимся использовать навигацию на основе Router, разберем какие бывают диплинки и как их правильно обрабатывать, а также посмотрим на особенности Flutter Web в обработке ссылок и настройки стратегии навигации.
Спикер: Андрей Смирнов, Flutter-разработчик Яндекс Про
В этой лекции мы научимся писать Unit-тесты, UI-тесты, интеграционные тесты и узнаем, что такое golden тесты. А также разберем, что такое code coverage и научимся его собирать.
Спикер: Евгений Седанов, руководитель группы мобильной разработки Яндекс Про
Пуши и уведомления - это одно и то же? Может ли быть пуш без нотификации и нотификация без пуша? Что такое TTL пуша и почему пуши могут потеряться? Какие есть различия в пуш уведомлениях на Android и iOS? Можно ли выполнить Dart код по пушу или даже запустить приложение? Что такое VOIP пуши и чем они отличаются от обычных? Всё это и многое другое вы узнаете на этой лекции.
Спикер: Никита Березовский, Flutter-разработчик Яндекс Про
На лекции мы разберёмся с CI/CD и настроим пайплайн для github actions. Разберем что нужно знать чтобы довести приложение до релиза в сторы. Узнаем как наш код превращается в приложение: начиная с вызова flutter build и до запуска конечного артефакта.
Весь список лекций ШМР 2024: https://www.youtube.com/playlist?list=PLXtiZNKIobF4R3g_CCVkXgaMDg4E4pxeH
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Флаттер-мастерская: опыт команд Яндекса в разработке на Flutter — ШМР 2024
Для чего Flutter используют в Яндекс Драйве и Яндекс Маркете? Как Flutter показал себя в Практикуме? Есть ли будущее у Flutter в Такси?
В рамках дискуссии представители разных сервисов Яндекса расскажут, как и зачем в стеке технологий их продуктов появился…
В рамках дискуссии представители разных сервисов Яндекса расскажут, как и зачем в стеке технологий их продуктов появился…
👍1
Forwarded from Николай Хитров | Блог
Валидация названий commit-ов
Недавно затащили к себе в проект gitlint. Оказалась прям годной штукой. Довольно шустро работает, подробная дока. Ему можно скормить названия через пайпы обычным текстом, а можно подтягивать имена коммитов через
Но самое клевое, что можно писать свои плагины. Мы у себя в проекте сделали проверку названий контекстов - тупо на питончике проходимся по определенным папкам в проекте и используем их названия как список допустимых значений. Больше никаких тыканий на ревью, что и как нужно называть. Чистый кайф🤤🤤🤤
#git #python #gitlint
Недавно затащили к себе в проект gitlint. Оказалась прям годной штукой. Довольно шустро работает, подробная дока. Ему можно скормить названия через пайпы обычным текстом, а можно подтягивать имена коммитов через
git. Есть встроенные проверки по типу длины строки, conventional commits и т.д.Но самое клевое, что можно писать свои плагины. Мы у себя в проекте сделали проверку названий контекстов - тупо на питончике проходимся по определенным папкам в проекте и используем их названия как список допустимых значений. Больше никаких тыканий на ревью, что и как нужно называть. Чистый кайф🤤🤤🤤
#git #python #gitlint
Jorisroovers
Introduction - Gitlint
Linting for your git commit messages
Forwarded from Flutter на Русском 🇷🇺
Media is too big
VIEW IN TELEGRAM
Мега крутое выступление Вячеслава Егорова про то как работает среда выполнения Dart.
Из выступления вы узнаете:
✔️ Как работает компилятор в Dart
✔️ Что такое IRHydra 2
✔️ Как вызывать Dart код из Swift
✔️ Как в Swift реализовать горячую перезагрузку c помощью Dart кода
✔️ Как в Jetpack compose реализовать горячую перезагрузку ч помощью Dart кода
✔️ Некоторые умопомрачительные новые функции которые знает только команда Dart
📌 Смотреть на VK:
https://vk.com/flutter_na_ruskom
📌 Оригинал:
https://www.youtube.com/watch?v=jV2Zx3hjHPc
#dart #mraleph
Из выступления вы узнаете:
📌 Смотреть на VK:
https://vk.com/flutter_na_ruskom
📌 Оригинал:
https://www.youtube.com/watch?v=jV2Zx3hjHPc
#dart #mraleph
Please open Telegram to view this post
VIEW IN TELEGRAM
# Задача 002
На входе предоставляется список целых чисел. Необходимо сжать список в строку, объединив последовательные числа в диапазон. Если в списке есть числа, которые не являются последовательными, они должны быть выведены отдельно. Если в списке есть только одно число, оно должно быть выведено отдельно.
# Формат ввода:
Список целых чисел, разделенных запятыми или пробелами. Список может быть пустым.
## Примеры ввода:
[1, 4, 5, 2, 3, 9, 8, 11, 0]
[1, 4, 3, 2]
[1, 4]
[]
# Формат вывода:
Строка, содержащая сжатые диапазоны чисел, разделенные запятыми. Если в списке есть только одно число, оно должно быть выведено отдельно. Если в списке нет чисел, должна быть выведена пустая строка.
## Примеры вывода:
"0-5,8-9,11"
"1-4"
"1,4"
""
#algorithm
На входе предоставляется список целых чисел. Необходимо сжать список в строку, объединив последовательные числа в диапазон. Если в списке есть числа, которые не являются последовательными, они должны быть выведены отдельно. Если в списке есть только одно число, оно должно быть выведено отдельно.
# Формат ввода:
Список целых чисел, разделенных запятыми или пробелами. Список может быть пустым.
## Примеры ввода:
[1, 4, 5, 2, 3, 9, 8, 11, 0]
[1, 4, 3, 2]
[1, 4]
[]
# Формат вывода:
Строка, содержащая сжатые диапазоны чисел, разделенные запятыми. Если в списке есть только одно число, оно должно быть выведено отдельно. Если в списке нет чисел, должна быть выведена пустая строка.
## Примеры вывода:
"0-5,8-9,11"
"1-4"
"1,4"
""
String compressRanges(List<int> nums) {
// Если список пустой, сразу возвращаем пустую строку
if (nums.isEmpty) {
return "";
}
// Сортируем числа
nums.sort((a, b) => a.compareTo(b));
List<String> result = [];
int start = nums[0];
int end = nums[0];
for (int i = 1; i < nums.length; i++) {
if (nums[i] == end + 1) {
// Если текущее число продолжает диапазон
end = nums[i];
} else {
// Если диапазон прерывается, добавляем его в результат
if (start == end) {
result.add(start.toString());
} else {
result.add("$start-$end");
}
start = nums[i];
end = nums[i];
}
}
// Добавляем последний диапазон
if (start == end) {
result.add(start.toString());
} else {
result.add("$start-$end");
}
// Объединяем диапазоны в строку
return result.join(",");
}#algorithm
Forwarded from Vue-FAQ
Как выяснилось, за последний год в мире
Вышел в open source
По функционалу с большим отрывом лидирует
Мир устал от жирного, жадного и неповоротливого online-only
#hoppscotch #yaak #bruno #api #tauri #postman
API клиентов случилась почти что революцияВышел в open source
Yaak (React, Tauri), релизнулся и активно развивается вполне достойный Bruno (Next.js, Tauri) и наконец-то появилась десктопная версия Hoppscotch (Vue 3, Tauri). Hoppscotch пока в альфа версии, но вполне хорошо работает и решены проблемы с прокси для запросов. Дистрибутив занимает всего 10Мб (у Yaak 120Mb, у Bruno - 40Mb). На скриншоте, сколько они отъедают памяти в холостом режиме. Ну и просто какой-то бенефис Tauri.Yaak и Bruno полностью оффлайновые, поэтому их UI работает очень быстро, Hoppscotch синхронизирует данные в облаке, поэтому есть небольшая задержка, но в целом хорошо.По функционалу с большим отрывом лидирует
Hoppscotch, за ним - BrunoМир устал от жирного, жадного и неповоротливого online-only
Postman-a. Попробуйте эти клиенты и забудьте Postman как страшный сон.#hoppscotch #yaak #bruno #api #tauri #postman
13 способов исправить ошибки в Git
https://gitprotect.io/blog/git-undo-13-ways-to-undo-mistakes-in-git/
https://gitprotect.io/blog/git-undo-13-ways-to-undo-mistakes-in-git/
Blog | GitProtect.io
Git Undo: 13 Ways to Undo Mistakes in Git - Blog | GitProtect.io
In the words of American motivational writer William Arthur Ward “to make mistakes is human; to stumble is commonplace; to be able to laugh at yourself is maturity”. Not all mistakes in life are easy to recover from, but the main goal of technology development…
Forwarded from Flutter. Много
Hola, Amigos!
На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga. Сегодня рассмотрим некоторые базовые концепции пакета rxdart. Он позволяет нам работать с потоками данных еще эффективнее, так как добавляет много всего полезного.
RxDart - пакет от компании ReactiveX, которые до него уже сделали много популярных библиотек для других языков программирования. Например, RxJava или RxSwift. Но так как в Dart уже есть стримы, их не добавляли, но дополнительно улучшили, добавив методы расширений и новые типы потоков данных.
Давайте посмотрим для начала на то, как мы можем добавить буферизацию к нашему
Также иногда нам нужно отбрасывать данные и брать только последнее, что приходит. Для этого пригодятся методы
А что делать, если нужно объединить несколько потоков данных? Для этого у RxDart заготовлены несколько конструкторов. Например,
Делитесь в чате, используете ли вы RxDart на своих проектах и как он вам помогает? А мы поделимся еще несколькими полезными концептами во второй части!
На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga. Сегодня рассмотрим некоторые базовые концепции пакета rxdart. Он позволяет нам работать с потоками данных еще эффективнее, так как добавляет много всего полезного.
RxDart - пакет от компании ReactiveX, которые до него уже сделали много популярных библиотек для других языков программирования. Например, RxJava или RxSwift. Но так как в Dart уже есть стримы, их не добавляли, но дополнительно улучшили, добавив методы расширений и новые типы потоков данных.
Давайте посмотрим для начала на то, как мы можем добавить буферизацию к нашему
Stream. Допустим, что у нас есть поток данных, который выдает информацию достаточно часто, а нам нужно получать ее не по одному, а сразу несколько штук. Для этого мы можем воспользоваться добавлением еще одного потока данных, который будет отмерять время, просто передать количество, функцию для определения конца отрезка или необходимый отрезок времени, а функции buffer, bufferCount, bufferTest и bufferTime вернут нам список данных, который накопился.Также иногда нам нужно отбрасывать данные и брать только последнее, что приходит. Для этого пригодятся методы
debounce и debounceTime. В первый мы можем передать какой-нибудь другой Stream и при получении в него событий, получать данные и в изначальном. Во второй мы просто передадим время для промежутков с выдачей информации.А что делать, если нужно объединить несколько потоков данных? Для этого у RxDart заготовлены несколько конструкторов. Например,
MergeStream, который просто добавляет события из всех стримов в себя, или CombineLatestStream, который позволяет производить какие-либо вычисления, когда в один из стримов приходит событие, в этом случае, для других берутся последние значения.Делитесь в чате, используете ли вы RxDart на своих проектах и как он вам помогает? А мы поделимся еще несколькими полезными концептами во второй части!
Forwarded from Flutter. Много
Hola, Amigos!
На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga. Мы продолжаем изучать концепции и полезные функции в rxdart.
В прошлый раз мы забыли про троттлинг. Он похож на debounce, но возвращает не последнее, а первое значение, что полезно при обработке различных случаев, например, отправки форм. Для него можно использовать методы throttle и throttleTime.
Еще давайте затронем фильтрацию данных внутри стримов, так как это часто необходимо. Да, в Dart есть метод where, но его может не хватать или он будет слишком большим в коде. Поэтому в rxdart есть расширение whereType, которое позволяет фильтровать по типу без применения cast, и его дополнение - whereNotNull, которое убирает все нулевые значения из потока данных.
Еще одно полезное расширение - distinctUnique. Оно позволяет нам сохранять в стриме только уникальные значения. Очень похоже на применение toSet().toList() для списков.
И самое главное, что добавляет rxdart - это новые StreamController, которые здесь называются Subjects. Их 2 - BehaviorSubject и ReplaySubject. Давайте посмотрим на каждый из них.
BehaviorSubject - контроллер, который при добавлении слушателя сразу же передает ему последнее значение, которое попало в стрим. Также ему можно задать изначальное значение при помощи конструктора BehaviorSubject.seeded.
ReplaySubject - контроллер, который при добавлении слушателя сразу же передаст все значения, которые в него попадали. Но если нам нужно возвращать последние N значений, то мы можем применить в его конструкторе параметр maxSize.
Делитесь в чате, как часто вы используете стримы на своих проектах?
На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga. Мы продолжаем изучать концепции и полезные функции в rxdart.
В прошлый раз мы забыли про троттлинг. Он похож на debounce, но возвращает не последнее, а первое значение, что полезно при обработке различных случаев, например, отправки форм. Для него можно использовать методы throttle и throttleTime.
Еще давайте затронем фильтрацию данных внутри стримов, так как это часто необходимо. Да, в Dart есть метод where, но его может не хватать или он будет слишком большим в коде. Поэтому в rxdart есть расширение whereType, которое позволяет фильтровать по типу без применения cast, и его дополнение - whereNotNull, которое убирает все нулевые значения из потока данных.
Еще одно полезное расширение - distinctUnique. Оно позволяет нам сохранять в стриме только уникальные значения. Очень похоже на применение toSet().toList() для списков.
И самое главное, что добавляет rxdart - это новые StreamController, которые здесь называются Subjects. Их 2 - BehaviorSubject и ReplaySubject. Давайте посмотрим на каждый из них.
BehaviorSubject - контроллер, который при добавлении слушателя сразу же передает ему последнее значение, которое попало в стрим. Также ему можно задать изначальное значение при помощи конструктора BehaviorSubject.seeded.
ReplaySubject - контроллер, который при добавлении слушателя сразу же передаст все значения, которые в него попадали. Но если нам нужно возвращать последние N значений, то мы можем применить в его конструкторе параметр maxSize.
Делитесь в чате, как часто вы используете стримы на своих проектах?