Реализация паттерна “Спецификация” на dart
Нашел примение этого паттерна в скоринге кредитных заявок: к клиенту предъявляются требования, как сумме и продолжительности кредита тоже.
Читается это необычно, будто бы читаю СпЕцИфИкАцИю к тому, кому выдавать кредит
Исходный код
Нашел примение этого паттерна в скоринге кредитных заявок: к клиенту предъявляются требования, как сумме и продолжительности кредита тоже.
Читается это необычно, будто бы читаю СпЕцИфИкАцИю к тому, кому выдавать кредит
Исходный код
GitHub
GitHub - WebMad/credit_issuer_specification_example
Contribute to WebMad/credit_issuer_specification_example development by creating an account on GitHub.
Early return pattern упростит вашу жизнь
Суть паттерна в том, чтобы досрочно завершать функцию, вместо того, чтобы писать else.
В примере приведен реальный код из dart’а
Есть классная лекция про метрики кода, хотел бы подсветить цикломатическую и когнитивную сложности.
Мысль у меня такая: если у вас появилась необходимость вложить if в if или дописать else в вашей функции, значит вы что-то делаете не так. Вернитесь на шаг назад и переосмыслите, может быть надо вынести метод? Или дело в концепции?
Суть паттерна в том, чтобы досрочно завершать функцию, вместо того, чтобы писать else.
В примере приведен реальный код из dart’а
Есть классная лекция про метрики кода, хотел бы подсветить цикломатическую и когнитивную сложности.
Мысль у меня такая: если у вас появилась необходимость вложить if в if или дописать else в вашей функции, значит вы что-то делаете не так. Вернитесь на шаг назад и переосмыслите, может быть надо вынести метод? Или дело в концепции?
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Разберем подробнее вчерашний пример с импеллером. Дело в том, что этот пример был создан для демонстрации загрузки UI и Raster потоков. В потоке UI сложная операция, которая рисует множество окружностей на экране + рисует SweepGradient (для отрисовки крутящегося радара). Ну и где-то через полторы минуты приложение крашнулось.
Радар при этом обернут в RepaintBoundary, чтобы выделить новый слой отрисовки и не затрагивать слой со сложной отрисовкой.
На конференции GDG Devfest Astrakhan 2023 расскажу подробнее. Постараюсь побыстрее для вас выложить запись доклада, ну а после доклада выложу видосы с примерами и пришлю ссылку на код.
P.S. да, я запускал с флагами --enable-impeller --profile, и да, это версия 3.16, телефон Google Pixel 7
Радар при этом обернут в RepaintBoundary, чтобы выделить новый слой отрисовки и не затрагивать слой со сложной отрисовкой.
На конференции GDG Devfest Astrakhan 2023 расскажу подробнее. Постараюсь побыстрее для вас выложить запись доклада, ну а после доклада выложу видосы с примерами и пришлю ссылку на код.
P.S. да, я запускал с флагами --enable-impeller --profile, и да, это версия 3.16, телефон Google Pixel 7
🔥3
В эту субботу (25.11) прошла конференция DevFest Astrakhan.
Я счастлив, что удалось порадовать моих земляков докладом про особенности отрисовки UI на Flutter. В городе много молодых, умных и амбициозных ребят.
Надеюсь в ближайшее время появится запись доклада и я смогу ею поделиться с вами. А пока выкладываю ссылку на исходный код проекта (там же есть и презентация).
Напишу еще парочку разъясняющих постов по этому докладу)
Я счастлив, что удалось порадовать моих земляков докладом про особенности отрисовки UI на Flutter. В городе много молодых, умных и амбициозных ребят.
Надеюсь в ближайшее время появится запись доклада и я смогу ею поделиться с вами. А пока выкладываю ссылку на исходный код проекта (там же есть и презентация).
Напишу еще парочку разъясняющих постов по этому докладу)
👍3👏2💋1
Прозрачность во Флаттер
Прозрачность во флаттер может быть коварным инструментом, который в некоторых случаях значительно увеличивает сложность отрисовки страницы.
Сам по себе виджет Opacity вызывает операцию saveLayer (см операции skia). Эта операция занимает много времени в масштабе одного кадра и ее вызов происходит неочевидно. Говоря о примерах вызова saveLayer, можно привести накладывание шейдера, в некоторых случаях источником вызова может стать ClipRRect.
Совет: если есть возможность примешать к цвету прозрачность вместо обертывание в виджет Opacity, примешивайте прозрачность. Накладывание прозрачности на цвет не является сложной операцией и может сохранить производительность вашего приложения.
Ссылочка на официальную доку
Прозрачность во флаттер может быть коварным инструментом, который в некоторых случаях значительно увеличивает сложность отрисовки страницы.
Сам по себе виджет Opacity вызывает операцию saveLayer (см операции skia). Эта операция занимает много времени в масштабе одного кадра и ее вызов происходит неочевидно. Говоря о примерах вызова saveLayer, можно привести накладывание шейдера, в некоторых случаях источником вызова может стать ClipRRect.
Совет: если есть возможность примешать к цвету прозрачность вместо обертывание в виджет Opacity, примешивайте прозрачность. Накладывание прозрачности на цвет не является сложной операцией и может сохранить производительность вашего приложения.
Ссылочка на официальную доку
💋1
This media is not supported in your browser
VIEW IN TELEGRAM
Малоизвестный инструмент отладки на Flutter
Skia debugger позволяет посмотреть как ваша страница рисовалась на экране шаг за шагом.
Для этого вам необходимо перейти на страницу, которую хотите отладить, перейти в консоль и написать команду
vm-observatory-url вы можете увидеть когда запускаете приложение через консоль или когда переходите в devtools, в url-строке есть get параметр с этим адресом. Вот пример такой строки:
Стоит отметить, что в skia debugger можно посмотреть операции, которые не отображаются в devtools
Skia debugger позволяет посмотреть как ваша страница рисовалась на экране шаг за шагом.
Для этого вам необходимо перейти на страницу, которую хотите отладить, перейти в консоль и написать команду
flutter screenshot --type=skia --vm-service-url=<vm-observatory-url>
vm-observatory-url вы можете увидеть когда запускаете приложение через консоль или когда переходите в devtools, в url-строке есть get параметр с этим адресом. Вот пример такой строки:
http://127.0.0.1:49609/gYvhoIlPpbE=
Стоит отметить, что в skia debugger можно посмотреть операции, которые не отображаются в devtools
❤2🔥2💋1
Залетаем на YATalks, задаем вопросы!
Тема: Кросс-платформа будущего: Flutter или KMP
https://www.youtube.com/watch?v=OXOMNjIjxO8
Тема: Кросс-платформа будущего: Flutter или KMP
https://www.youtube.com/watch?v=OXOMNjIjxO8
YouTube
YaTalks 2023: Разработка интерфейсов
Поговорим о хардовых технологиях и значимых трендах в индустрии без привязки к стекам и конкретным инструментам.
00:00:00 Обратный отсчет
00:11:03 Тернистый путь в open source
01:09:03 Виджет Android vs виджет iOS
02:09:20 Тестировать нельзя мучиться: собственная…
00:00:00 Обратный отсчет
00:11:03 Тернистый путь в open source
01:09:03 Виджет Android vs виджет iOS
02:09:20 Тестировать нельзя мучиться: собственная…
Разбор задачи AA1 с собеседования в Яндекс
Условие задачи:
1 решение:
Всего есть два решения (мне известных): в начале сортируем входной массив, затем идем по этому массиву, ищем разрывы и записываем их в строку (Память - O(1), время - O(N * log N));
2 решение:
Первым проходом записываем все числа в HashSet, затем берем случайным образом число из HashSet до тех пор, пока она не окажется пустой. Затем ищем крайнее число слева для нахождения исходного диапазона, затем идем вправо от этого числа, попутно удаляем найденные числа из HashSet (Память - O(N), время - O(N)), но есть нюанс, этот алгоритм не сортирует конечный результат, а лишь находит диапазоны.
А какое решение больше нравится вам?
1 решение - 🤡
2 решение - 😍
Условие задачи:
Дан список неотрицательных целых чисел, повторяющихся элементов в списке нет. Нужно преобразовать его в строку, сворачивая соседние по числовому ряду числа в диапазоны.
Примеры:
[1,4,5,2,3,9,8,11,0] => "0-5,8-9,11"
[1,4,3,2] => "1-4"
[1,4] => "1,4"
[1,2] => "1-2"
1 решение:
2 решение:
А какое решение больше нравится вам?
1 решение - 🤡
2 решение - 😍
😍4🙊2👍1🙉1
Открывается набор на программу Сириуса и Яндекса
«Научно-практический интенсив по мобильной разработке»
Если вы уже какое-то время занимаетесь программированием и вам интересна мобильная разработка, это ваш шанс пройти насыщенный знаниями курс по ios или flutter.
Вас ждут 2 недели лекций и семинаров под руководством опытных разработчиков Яндекса.
При успешном прохождении отборочного этапа, вас пригласят на очный этап, который пройдет в университете Сириус. Билеты, питание и проживание оплачиваются организаторами.
Год назад я и сам проходил этот интенсив, атмосфера там бомбовая а ночное море завораживает)
Канал про технологии - @Gubin_dev
Ссылка - https://yandex.ru/yaintern/siriusmobile
😍 - подам заявку
🙈 - уже побывал
🤡 - я в своем познании настолько преисполнился
«Научно-практический интенсив по мобильной разработке»
Если вы уже какое-то время занимаетесь программированием и вам интересна мобильная разработка, это ваш шанс пройти насыщенный знаниями курс по ios или flutter.
Вас ждут 2 недели лекций и семинаров под руководством опытных разработчиков Яндекса.
При успешном прохождении отборочного этапа, вас пригласят на очный этап, который пройдет в университете Сириус. Билеты, питание и проживание оплачиваются организаторами.
Год назад я и сам проходил этот интенсив, атмосфера там бомбовая а ночное море завораживает)
Канал про технологии - @Gubin_dev
Ссылка - https://yandex.ru/yaintern/siriusmobile
😍 - подам заявку
🙈 - уже побывал
🤡 - я в своем познании настолько преисполнился
🤡5👍3🙊3😍2