Forwarded from 🅵🅾️🆇
flutter compose up
Шиммер реализованный через шейдер, без всяких левых либ. Набираем 20 лайкосов и делюсь сорцами.
#chicken #shimmer #skeleton #shader
Держите, малятки:
https://gist.github.com/PlugFox/7cb6362f020363d1544495fa262aa6a1
Держите, малятки:
https://gist.github.com/PlugFox/7cb6362f020363d1544495fa262aa6a1
Gist
Flutter Shimmer & Skeleton
Flutter Shimmer & Skeleton. GitHub Gist: instantly share code, notes, and snippets.
# Задача 001
Даны две бесконечных возрастающих последовательности чисел A и B. i-ый член последовательности A равен i^2. i-ый последовательности B равен i^3.
Требуется найти C_x, где C — возрастающая последовательность, полученная при объединении последовательностей A и B. Если существует некоторое число, которое встречается и в последовательности A и в последовательности B, то в последовательность C это число попадает в единственном экземпляре.
# Формат ввода
В единственной строке входного файла дано натуральное число x (1 <= x <= 10^7).
# Формат вывода
В выходной файл выведите C_x.
# Решение
#algorithm
Даны две бесконечных возрастающих последовательности чисел A и B. i-ый член последовательности A равен i^2. i-ый последовательности B равен i^3.
Требуется найти C_x, где C — возрастающая последовательность, полученная при объединении последовательностей A и B. Если существует некоторое число, которое встречается и в последовательности A и в последовательности B, то в последовательность C это число попадает в единственном экземпляре.
# Формат ввода
В единственной строке входного файла дано натуральное число x (1 <= x <= 10^7).
# Формат вывода
В выходной файл выведите C_x.
# Решение
int findCx(int x) {
int i = 1, j = 1; // Начальные индексы для квадратов и кубов
int count = 0; // Счетчик найденных элементов
int current = 0; // Текущий элемент последовательности C
while (count < x) {
int square = i * i;
int cube = j * j * j;
if (square < cube) {
current = square;
i += 1;
} else if (square > cube) {
current = cube;
j += 1;
} else {
current = square; // или current = cube, значения равны
i += 1;
j += 1;
}
count += 1;
}
return current;
}#algorithm
Forwarded from Surf Flutter Team
Каркас фичи за 7 секунд. Чем может быть полезен mason?
В какой-то момент у всех появляются лучшие подходы к написанию кода, которые кочуют из проекта в проект. Они превращаются в шаблонный код, который мы привыкли называть бойлерплейт.
Никто не любит бойлерплейт: для старта проектов появляются шаблоны, как, например, Surf Flutter App Template, для небольших кусков кода существуют Snippets (VSCode) и Live Templates (IntelliJ IDEA, Android Studio).
Но что, если этих инструментов недостаточно? Если есть потребность в более гибком инструменте для генерации шаблонного кода?
Мы во Flutter-команде Surf задались этими вопросами, и пришли к mason — мощному и гибкому генератору кода по шаблонам. И сейчас покажем, как его использовать.
Ссылки из карточек:
🔵 mustache
🔵 mason_cli
🔵 BrickHub
🔵 Синтаксис brick
#surf_flutter
В какой-то момент у всех появляются лучшие подходы к написанию кода, которые кочуют из проекта в проект. Они превращаются в шаблонный код, который мы привыкли называть бойлерплейт.
Никто не любит бойлерплейт: для старта проектов появляются шаблоны, как, например, Surf Flutter App Template, для небольших кусков кода существуют Snippets (VSCode) и Live Templates (IntelliJ IDEA, Android Studio).
Но что, если этих инструментов недостаточно? Если есть потребность в более гибком инструменте для генерации шаблонного кода?
Мы во Flutter-команде Surf задались этими вопросами, и пришли к mason — мощному и гибкому генератору кода по шаблонам. И сейчас покажем, как его использовать.
Ссылки из карточек:
#surf_flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Если у вас VS Code тормозит из-за каких-то расширений, то есть такое:
F1 -> Developer: Open Process Explorer
F1 -> Developer: Show Running Extensions
и вообще:
F1 -> Developer: ...
#vscode
F1 -> Developer: Open Process Explorer
F1 -> Developer: Show Running Extensions
и вообще:
F1 -> Developer: ...
#vscode
Одна из лучших лекций про асинхронку от профессионального преподавателя
2 часа полезных знаний
https://www.youtube.com/live/Fux9LhX2ODA
2 часа полезных знаний
https://www.youtube.com/live/Fux9LhX2ODA
YouTube
Асинхронка — ШМР 2024
Асинхронное программирование в дарте. Future, FutureOr, Stream, async, await, yield, Zone... Как это всё работает? Копаем вглубь, ломаем стереотипы, убираем магию.
👍1
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 на своих проектах и как он вам помогает? А мы поделимся еще несколькими полезными концептами во второй части!