Как быстро получать данные из ОС Аврора в приложении на Flutter? Попробуйте интерфейс D-Bus 💌 D-Bus, как почтальон, доставляет сообщения от одного процесса к другому в unix-системах.
Во Flutter-приложениях D-Bus помогает:
◾️Узнать, сколько заряда осталось
◾️Получить время
◾️Посмотреть, какие приложения запущены
◾️Получить доступ к данным датчиков
Подробную инструкцию по работе с D-Bus читайте в статье Юрия Петрова, Flutter Tech Lead Friflex и автора канала @mobile_developing.
#Flutter #ОСАврора
Во Flutter-приложениях D-Bus помогает:
◾️Узнать, сколько заряда осталось
◾️Получить время
◾️Посмотреть, какие приложения запущены
◾️Получить доступ к данным датчиков
Подробную инструкцию по работе с D-Bus читайте в статье Юрия Петрова, Flutter Tech Lead Friflex и автора канала @mobile_developing.
#Flutter #ОСАврора
❤7👍4
🍝 Спагетти-код может поначалу казаться простым и вкусным решением: лишь бы работало. Но в итоге масса переплетенных между собой строк неизбежно превращается в непроглядный лабиринт.
Спагетти-код отличают длинные функции, повторы и неясные имена. К тому же, он может «прыгать» в разные функции. Например:
Чтобы ваш код не стал похож на тарелку итальянской пасты, тщательно планируйте его структуру, не бойтесь рефакторинга и не забывайте про комментарии.
#наайтишном
Спагетти-код отличают длинные функции, повторы и неясные имена. К тому же, он может «прыгать» в разные функции. Например:
void main() {
// Эта функция делает много разных вещей
// и очень сложно понять, что она делает
int a = 1;
int b = 2;
if (a > b) {
// Делаем что-то, если a больше b
print("a больше b");
saveData();
globalValue = 10;
} else {
// Делаем что-то, если b больше a
print("b больше a");
getData();
}
}Чтобы ваш код не стал похож на тарелку итальянской пасты, тщательно планируйте его структуру, не бойтесь рефакторинга и не забывайте про комментарии.
#наайтишном
❤5👌3
👩🚀 Однажды программист Microsoft и космический турист Чарльз Симони предложил добавлять к имени переменной короткий префикс, который отражал бы ее тип и предназначение.
Эта идея так понравилась его коллегам, что стала внутренним стандартом Microsoft. Стиль именования переменных назвали венгерской нотацией: Симони — венгр по происхождению.
Использовать венгерскую нотацию довольно просто. Например:
целое число, обозначающее возраст
строка, обозначающая имя
Венгерская нотация помогает понять, что представляет собой переменная, не глядя на ее объявление. Это уменьшает количество комментариев и число ошибок.
Противники критикуют венгерскую нотацию за избыточность и говорят, что когда префиксов очень много, код сложнее читать.
Важно понимать, что венгерская нотация — инструмент, а не универсальный метод. Она может оказаться полезной в некоторых проектах, но не всегда будет лучшим решением.
#наайтишном
Эта идея так понравилась его коллегам, что стала внутренним стандартом Microsoft. Стиль именования переменных назвали венгерской нотацией: Симони — венгр по происхождению.
Использовать венгерскую нотацию довольно просто. Например:
int + age = iAgeцелое число, обозначающее возраст
string + name = strName строка, обозначающая имя
Венгерская нотация помогает понять, что представляет собой переменная, не глядя на ее объявление. Это уменьшает количество комментариев и число ошибок.
Противники критикуют венгерскую нотацию за избыточность и говорят, что когда префиксов очень много, код сложнее читать.
Важно понимать, что венгерская нотация — инструмент, а не универсальный метод. Она может оказаться полезной в некоторых проектах, но не всегда будет лучшим решением.
#наайтишном
👍3⚡1
🦆 Если вы столкнулись с проблемой, которую не можете решить, попытайтесь объяснить ее резиновой уточке. Расскажите утенку, над чем вы работаете и где застряли. Не опускайте детали — именно в них может крыться ключ к решению.
Этот метод из книги «Программист-прагматик» правда работает, и вот почему:
1. Чтобы рассказать утенку о проблеме, вам придется структурировать свои мысли. Часто это приводит к новым открытиям и решениям.
2. Диалог с утенком отвлечет вас, и вы перестанете зацикливаться на одном и том же подходе к решению.
3. Утенок создаст иллюзию присутствия партнера, вы почувствуете поддержку и будете меньше волноваться.
Вывод: иногда все, что нужно, чтобы решить проблему — это о ней поговорить. Даже если ваш собеседник — молчаливая резиновая утка.
#наайтишном
Этот метод из книги «Программист-прагматик» правда работает, и вот почему:
1. Чтобы рассказать утенку о проблеме, вам придется структурировать свои мысли. Часто это приводит к новым открытиям и решениям.
2. Диалог с утенком отвлечет вас, и вы перестанете зацикливаться на одном и том же подходе к решению.
3. Утенок создаст иллюзию присутствия партнера, вы почувствуете поддержку и будете меньше волноваться.
Вывод: иногда все, что нужно, чтобы решить проблему — это о ней поговорить. Даже если ваш собеседник — молчаливая резиновая утка.
#наайтишном
👍6
Flutter на ОС Аврора: Friflex и ОМП представили Манифест развития фреймворка. В нем 9 принципов
Во вторник в Москве прошла первая конференция разработчиков о Flutter на ОС Аврора. Конечно же, команда Friflex была там. Вместе с «Открытой мобильной платформой» @omp_ru создателями ОС Аврора, мы призвали разработчиков объединяться и выступили с Манифестом развития фреймворка Flutter на российской операционной системе 🔥
В Манифесте — девять принципов. Например, открытость: Flutter остается проектом с открытым исходным кодом. Или стабильность: приложения на Flutter должны правильно работать на разных устройствах.
Команда Friflex уже портировала на ОС Аврора три мобильных приложения, создала несколько плагинов и написала много статей о своем опыте в блоге.
Подробнее о Манифесте можно почитать в заметке на Хабре.
#ОСАврора
Во вторник в Москве прошла первая конференция разработчиков о Flutter на ОС Аврора. Конечно же, команда Friflex была там. Вместе с «Открытой мобильной платформой» @omp_ru создателями ОС Аврора, мы призвали разработчиков объединяться и выступили с Манифестом развития фреймворка Flutter на российской операционной системе 🔥
В Манифесте — девять принципов. Например, открытость: Flutter остается проектом с открытым исходным кодом. Или стабильность: приложения на Flutter должны правильно работать на разных устройствах.
Команда Friflex уже портировала на ОС Аврора три мобильных приложения, создала несколько плагинов и написала много статей о своем опыте в блоге.
Подробнее о Манифесте можно почитать в заметке на Хабре.
#ОСАврора
🔥5❤3
Этот колоритный термин произошел от фразы «изобретать велосипед».
Например, команда работает над приложением, которое хранит и обрабатывает данные пользователей. Разработчики решают не использовать системы управления базами данных, такие как MySQL, PostgreSQL или MongoDB, а создать собственную.
Зачем? Мотивация может быть разной:
🚲 Разработчики хотят создать уникальное решение, полностью контролировать код и воплотить все свои задумки
🚲 Разработчики просто не знают, что решение уже есть
🚲 Разработчики не доверяют сторонним библиотекам
🚲 Разработчики относятся к созданию собственного решения как к эксперименту
Велосипедостроение на самом помогает глубже понять принципы работы систем. Но часто оно приводит к излишним сложностям.
Например, собственную систему управления базами данных приходится поддерживать и обновлять даже после запуска проекта. Добавлять к ней новые функции может оказаться сложнее, чем ожидалось. А стоит ли?
#наайтишном
Например, команда работает над приложением, которое хранит и обрабатывает данные пользователей. Разработчики решают не использовать системы управления базами данных, такие как MySQL, PostgreSQL или MongoDB, а создать собственную.
Зачем? Мотивация может быть разной:
🚲 Разработчики хотят создать уникальное решение, полностью контролировать код и воплотить все свои задумки
🚲 Разработчики просто не знают, что решение уже есть
🚲 Разработчики не доверяют сторонним библиотекам
🚲 Разработчики относятся к созданию собственного решения как к эксперименту
Велосипедостроение на самом помогает глубже понять принципы работы систем. Но часто оно приводит к излишним сложностям.
Например, собственную систему управления базами данных приходится поддерживать и обновлять даже после запуска проекта. Добавлять к ней новые функции может оказаться сложнее, чем ожидалось. А стоит ли?
#наайтишном
🔥3
🌳 На деревьях на улице распускаются почки, а у нас в рубрике — бинарные деревья. Это иерархические структуры данных, которые помогают легко находить, вставлять и удалять элементы.
Если дерево сбалансировано, то время поиска, вставки и удаления пропорционально логарифму количества элементов в дереве. Это значит, оно достаточно короткое, даже если наборы данных большие.
Например, у нас есть адресная книга с миллионом контактов. Мы организуем их в сбалансированном бинарном дереве поиска. Каждый контакт будет узлом в дереве, а ключом сделаем фамилию.
Чтобы найти контакт, алгоритм начнет с корня дерева. На каждом шагу он будет переходить либо в правую, либо в левую ветку.
В сбалансированном дереве глубина или максимальное количество уровней от корня до любого листа примерно равна
Вывод: бинарное дерево – полезный инструмент для баз данных и файловых систем.
#наайтишном
Если дерево сбалансировано, то время поиска, вставки и удаления пропорционально логарифму количества элементов в дереве. Это значит, оно достаточно короткое, даже если наборы данных большие.
Например, у нас есть адресная книга с миллионом контактов. Мы организуем их в сбалансированном бинарном дереве поиска. Каждый контакт будет узлом в дереве, а ключом сделаем фамилию.
Чтобы найти контакт, алгоритм начнет с корня дерева. На каждом шагу он будет переходить либо в правую, либо в левую ветку.
В сбалансированном дереве глубина или максимальное количество уровней от корня до любого листа примерно равна
log2(n). Если элементов миллион, всего алгоритму будет достаточно около 20 сравнений, чтобы найти нужный узел или установить, что его нет. Вывод: бинарное дерево – полезный инструмент для баз данных и файловых систем.
#наайтишном
❤5
🤖Создаем своего клиента для Gemini без бэкенда
Помните, в версии Flutter 3.19 появился SDK для работы с генеративным ИИ? Наш Tech Lead Юрий Петров разобрался, какие горизонты этот инструмент открывает перед разработчиками.
Вместе с ним на примере простого Flutter-проекта узнаем:
◾️Как получить API-ключ
◾️Как сгенерировать текст
◾️Как настроить конфигурацию модели
◾️Как гибко отфильтровать контент
◾️Как настроить httpClient
Все подробности — уже на Хабре!
#howto
Помните, в версии Flutter 3.19 появился SDK для работы с генеративным ИИ? Наш Tech Lead Юрий Петров разобрался, какие горизонты этот инструмент открывает перед разработчиками.
Вместе с ним на примере простого Flutter-проекта узнаем:
◾️Как получить API-ключ
◾️Как сгенерировать текст
◾️Как настроить конфигурацию модели
◾️Как гибко отфильтровать контент
◾️Как настроить httpClient
Все подробности — уже на Хабре!
#howto
Хабр
Разбираем генеративный SDK от Google — google_generative_ai. Часть 1
Привет, Хабр! Меня зовут Юрий Петров, я автор ютуб-канала «Мобильный разработчик» и Flutter Tech Lead в компании Friflex . Мы разрабатываем мобильные приложения для бизнеса и специализируемся на...
❤4🔥2
💫 Коварный баг назван в честь принципа неопределенности Гейзенберга из квантовой механики. Этот принцип гласит: невозможно одновременно точно определить положение и импульс микроскопической частицы.
Дело в том, что само наблюдение за квантовой частицей меняет ее состояние. То же самое происходит с гейзенбагом. Стоит попытаться отследить его в коде, он меняет свое поведение или исчезает. Например, сбой может проявляться только через определенное время после запуска программы или в конкретной операционной системе.
Бороться с гейзенбагами сложно. Тут важно быть упорным и настойчивым:
◾️Продолжайте тестировать. Чем больше тестов вы напишете, тем скорее обнаружите гейзенбаг.
◾️Используйте инструменты отладки.
◾️Ведите журнал своих действий, чтобы заметить изменения в поведении ошибки.
◾️Попытайтесь воспроизвести условия, в которых ошибка проявляется, и изучить ее подробнее.
Помните, вы не одиноки — с гейзенбагами сталкиваются многие программисты 🫶
#наайтишном
Дело в том, что само наблюдение за квантовой частицей меняет ее состояние. То же самое происходит с гейзенбагом. Стоит попытаться отследить его в коде, он меняет свое поведение или исчезает. Например, сбой может проявляться только через определенное время после запуска программы или в конкретной операционной системе.
Бороться с гейзенбагами сложно. Тут важно быть упорным и настойчивым:
◾️Продолжайте тестировать. Чем больше тестов вы напишете, тем скорее обнаружите гейзенбаг.
◾️Используйте инструменты отладки.
◾️Ведите журнал своих действий, чтобы заметить изменения в поведении ошибки.
◾️Попытайтесь воспроизвести условия, в которых ошибка проявляется, и изучить ее подробнее.
Помните, вы не одиноки — с гейзенбагами сталкиваются многие программисты 🫶
#наайтишном
❤4👍2
Flutter появился в 2015 году как секретный проект Google под названием Sky. С тех пор вышло множество релизов и он стал настоящим взрослым фреймворком.
Команда Friflex продвигает разработку на Flutter, следит за его развитием и каждый год проводит конференцию о кроссплатформенной разработке — CrossConf @crossconf. Собрали самые важные моменты из истории фреймворка на карточках и подробнее рассказали о ней в нашем блоге. Приятного чтения🌟
Команда Friflex продвигает разработку на Flutter, следит за его развитием и каждый год проводит конференцию о кроссплатформенной разработке — CrossConf @crossconf. Собрали самые важные моменты из истории фреймворка на карточках и подробнее рассказали о ней в нашем блоге. Приятного чтения🌟
❤3
🧑🤝🧑 Если вы думаете, что копировать — это просто, вы не занимались глубоким копированием. Оно помогает создать точную копию объекта вместе со вложенными документами. Получается объект-близнец, совершенно самостоятельный и независимый.
Глубокое копирование отлично подходит:
◾️Чтобы изменения одного объекта не влияли на другой
◾️Чтобы свободно работать с объектом и не бояться испортить оригинал
◾️Чтобы клонировать многоуровневые объекты
Можно создать объект-близнец вручную или с помощью библиотек. Например, в Dart глубокое копирование помогают выполнить copyPackage, deep_copy или json_serializable.
#наайтишном
Глубокое копирование отлично подходит:
◾️Чтобы изменения одного объекта не влияли на другой
◾️Чтобы свободно работать с объектом и не бояться испортить оригинал
◾️Чтобы клонировать многоуровневые объекты
Можно создать объект-близнец вручную или с помощью библиотек. Например, в Dart глубокое копирование помогают выполнить copyPackage, deep_copy или json_serializable.
#наайтишном
👍3🔥1
⚡️Релиз плагина Flutter&Dart для VSCode 3.88.0: что нового
🟣 Во Flutter список эмуляторов больше не содержит выходных данных журнала из Android SDK
🟣 В редакторе перезапуск сервера анализа Dart больше не приводит к дублированию записей Dart DevTools в области состояния языка
🟣 В отладчике исправлена регрессия, которая приводила к повторным глобальным ошибкам («Не удается найти библиотеку»)
🟣 В DevTools устранена проблема, из-за которой боковая панель Flutter не загружалась в предварительных версиях
Наш Flutter Tech Lead Юрий Петров подготовил перевод официального релиза. О разработке на Flutter читайте также в тг-канале Юрия Мобильный разработчик.
Наш Flutter Tech Lead Юрий Петров подготовил перевод официального релиза. О разработке на Flutter читайте также в тг-канале Юрия Мобильный разработчик.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Вышла новая версия плагина Flutter & Dart для VSCode 3.88.0
Что нового во Flutter #5062 : Ссылки кода "Открыть онлайн интерактивные образцы" больше не ведут к ошибке 404 для миксинов и типов расширений. #5052 : Некоторые эмуляторы не содержали выходных данных...
🔥4
🧮 Каррирование пришло в разработку из комбинаторной логики. Понятие сформулировал американский математик Хаскарл Карри. Он показал, что функцию можно представить в виде одного аргумента, который возвращает функцию, которая принимает другой аргумент.
Как это работает в программировании? Представим, что у нас есть функция
Теперь double — это функция, которая принимает один аргумент и удваивает его. Мы можем использовать ее так:
Результат: компактный код и универсальные функции, которые можно легко комбинировать.
#наайтишном
Как это работает в программировании? Представим, что у нас есть функция
multiply, которая умножает два числа. С помощью каррирования мы можем создать из нее новую — она будет умножать свой аргумент на определенное число. Например, double.
Function(int) double = (int x) => multiply(x, 2);
Теперь double — это функция, которая принимает один аргумент и удваивает его. Мы можем использовать ее так:
print(double(5)); // Выведет: 10
Результат: компактный код и универсальные функции, которые можно легко комбинировать.
#наайтишном
👍2❤1