Как стать автором
Обновить

Разработка

Сначала показывать
Порог рейтинга

Привет, друзья! Меня зовут Александр Минкин, в компании SM Lab я работаю тимлидом Android-разработки на продукте МП Спортмастер. Сегодня я хочу поделиться с вами подробностями об одном из самых мощных архитектурных паттернов для мобильных приложений - MVI (Model-View-Intent). Этот паттерн помогает создавать приложения с четко разделенной логикой, улучшенной тестируемостью и высокой масштабируемостью. Давайте разберемся в его особенностях и посмотрим примеры кода на языке программирования Kotlin в Android с использованием Kotlin Coroutines, StateFlow и Fragment, а также давайте расширим наш пример с использованием чистой архитектуры, где добавим уровни domain-слоя (UseCases) и data-слоя (Repository). Этот подход поможет вам управлять состояниями приложения более эффективно и реагировать на изменения в реальном времени.

 Основные компоненты MVI с чистой архитектурой:

1. Model: Хранит состояние приложения.

2. View: Отображает текущее состояние Model.

3. Intent: Интерпретирует действия пользователя и направляет их в UseCase.

4. UseCase: Содержит бизнес-логику и выполняет операции.

5. Repository: Обеспечивает доступ к данным, будь то локальные или удаленные источники.

Преимущества MVI:

- Однозначное управление состоянием: Все состояния приложения проходят через один поток данных, что упрощает их отслеживание.

- Масштабируемость: Каждый компонент отвечает за свою часть логики, что позволяет легко масштабировать приложение.

- Тестируемость: Изолированные компоненты упрощают написание тестов.

Давайте рассмотрим пример использования MVI в приложении на Kotlin. Допустим, у нас есть приложение для управления задачами. Ссылка на gist:

https://gist.github.com/Rasalexman/53f9be0fc4e295b987e0921839a9a84e

Здесь мы рассмотрели базовый пример использования MVI. Хочу отметить, что в разных реализациях этот архитектурный паттерн, может включать в себя несколько дополнительных компонентов, таких как Reducer - это компонент помогающий преобразовать входное намерение в состояние. В примере выше таким reducer может выступать функция `processIntent`, но чаще его делают как абстракцию в виде интерфейса с функцией reduce, которая принимает Intent и возвращает State. Также мы можем добавить такой компонент как Store - это общая часть для работы с намерениями, которая получает результат обработки намерения и может производить как SideEffects, так и само состояние (State) экрана. Количество компонентов может меняться от сложности реализации, вплоть до добавления специальных объектов middleware и сайд-эффектов (SideEffects). Подробное рассмотрение данных компонентов не входило в текущую статью. С более сложными реализациями вы можете ознакомиться по ссылкам ниже

Заключение:

MVI - это мощный архитектурный паттерн, который помогает разрабатывать структурированные, масштабируемые и легко тестируемые приложения. Его использование позволяет разработчикам четко разделять логику представления, состояния и намерений пользователя, упрощая сопровождение и расширение приложения.

Использование Kotlin Coroutines и StateFlow с архитектурой MVI позволяет вам эффективно управлять состояниями и асинхронными операциями в вашем приложении. Интеграция чистой архитектуры с использованием UseCases и Repository делает ваше приложение более модульным и легко масштабируемым. Это упрощает написание кода, при этом ваше приложение становится более отзывчивым и масштабируемым, а так же удобным в управлении данными и бизнес-логикой, улучшая тестируемость и поддержку кода.

Спасибо, что прочитали данную статью. Буду признателен за комментарии и реакции к этому посту. Делить какую реализацию MVI вы используете у себя в проектах. Всем отличного настроения, помните, что его, как и архитектуру, вы можете выбирать сами ;)

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Как CodeStyle спасает Flutter-проекты от хаоса

Разрозненная структура файлов, разные подходы к оформлению и дублирование функциональности — всё это замедляет разработку и повышает вероятность ошибок.
Чтобы победить хаос, сделать работу команды быстрее и проще, попробуйте внедрить CodeStyle — это свод правил, которые делают код читаемым, стандартизированным и удобным для поддержки.

Вот что вы получите:

  • Читаемость: новые участники команды быстрее понимают проект.

  • Стандартизация: вся кодовая база выглядит так, будто ее писал один человек.

  • Поддерживаемость: проще рефакторить и находить ошибки.

Почему CodeStyle особенно важен для Flutter

Flutter на проектах дает гибкость, которая при отсутствии дисциплины превращается в проблему. Например, вы можете столкнуться с:

  • разрозненной структурой файлов, которая затрудняет поиск компонентов;

  • непоследовательным оформлением кода, которое усложняет его понимание;

  • дублированием библиотек и функционала, которое приводит к путанице.

Единый CodeStyle решает эти проблемы и создает прозрачную и предсказуемую структуру проекта.

Как внедрить CodeStyle: 4 шага

1. Обучение

Проводите мастер-классы и лекции, показывайте примеры из реальных проектов. Это помогает разработчикам видеть преимущества стандартов.

2. Автоматизация

Настройте инструменты для проверки кода:

  • линтеры (например, flutter_lints) для автоматической проверки стиля;

  • pre-commit хуки (Husky или Lefthook) для форматирования кода перед коммитом.

3. Код-ревью

Сделайте ревью обязательным этапом Pull Request. Это улучшит качество кода и поможет следить за соблюдением правил.

4. Командное соглашение

Создайте документ с правилами CodeStyle и внедрите их в культуру команды. Пусть разработчики понимают, что стандарты упрощают жизнь каждому.

Если хотите внедрить эти подходы на своих проектах, читайте подробную статью от нашего Flutter-разработчика Никиты Грибкова. В ней найдете больше примеров, кода и рекомендаций.

Теги:
Рейтинг0
Комментарии0

Как программисту-фрилансеру защитить свои разработки

Работаете программистом на удаленке на крупного (или не очень) заказчика? Чтобы созданное вами никто не украл, необходимо юридически подстраховать себя.

Есть несколько вариантов того, как это сделать.

Вариант №1. Регистрация программы ЭВМ в Роспатенте

Осуществляется методом депонирования кода. Этот формат имеет некоторые недостатки: например, если ушлый противник фундаментально перепишет ваш код, то наказать обидчика становится практически невозможно.

Вариант №2. Патентование изобретения или дизайна созданного ПО, интерфейса  

Если ваша программа имеет новизну, изобретательский уровень и промышленную применимость, то в этом случае можно претендовать на юридическую защиту сути ПО, его алгоритма.

Интерфейс разработанного, а также шрифты и иконки — патентуются как промышленные образцы, если экспертиза Роспатента признает указанное новым и оригинальным.

Вариант №3. Товарный знак созданной программы

Регистрация в данном случае защищает название и логотип ПО. После оформления — ни один конкурент не сможет воспользоваться брендом вашей разработки.

Какие есть еще выгоды от официальной юридической защиты созданных объектов интеллектуальной собственности?

Если вашу программу (ее начинку, код или товарный знак) незаконно позаимствовали, то вы можете подать на нарушителя в суд. В этом случае — с нарушителя взыщут серьезную компенсацию. Но нужно помнить, если Вы создаете что-то на заказ, внимательно читайте договор: кому отходит исключительное право на созданные объекты интеллектуальной собственности. Если Вам, то никаких проблем возникнуть не должно. 

Сложно ли регистрировать указанные объекты?

Заявителям надо собрать пакет документов, оплатить предусмотренные пошлины и отправить материалы на экспертизу в профильное ведомство.

Отметим, что если Вы оформляете права на изобретение или дизайн интерфейса — экспертам Роспатента надо доказать, что эти объекты соответствуют установленным законодательно требованиям патентования.

Вполне очевидно, что если Вы, готовя материалы, допустите существенные ошибки, то, скорее всего, в регистрации указанных объектов интеллектуальной собственности Вам откажут.

Если нужна регистрация товарного знака, то сделать это можно здесь, вот тут можно защитить программу, а здесь получить патент на дизайн. 

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

🔎 АНО «Цифровая экономика» делится важным исследованием «Эффективные отечественные практики применения технологий искусственного интеллекта в промышленности».

Смотрите в нашем Telegram-канале – сделали для вас классные карточки 🤓

В нём собраны кейсы успешного использования ИИ на производстве, мнения экспертов о внедрении технологий, а также рассмотрены меры поддержки, вопросы защиты данных и возможности интеграции искусственного интеллекта с цифровыми двойниками изделий.

🌐 Важные мировые и российские тренды из исследования мы собрали в формате карточек и предлагаем вам с ними ознакомиться.

Кроме того, рекомендуем изучить полное исследование, уверены, оно станет полезным руководством для всех, кто стремится внедрять передовые решения на производстве: https://vk.cc/cG8xro

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Искусственный интеллект в образовании 🎓🤖

Дело Бартоша Цехановского живет. Время интерактивных учебников уже близко: студенты Университета Калгари разработали «Дополненную физику» — инструмент, который преобразует статические физические диаграммы из учебников в интерактивные симуляции. Под капотом модель Segment Anything, выделяющая разные детали изображений и LLM, например, Gemini. Языковая модель, видимо, отвечает за интерпретацию и "логику" происходящего.

Интерактивные иллюстрации, боты-репетиторы и наставники - эти разработки напоминают интерактивный букварь из Алмазного века Нила Стивенсона, и ставят серьезные вопросы о том, как будет выглядеть образование в ближайшем будущем.

dTech исследователь Энди Матущак в эссе Exorcising us of the Primer пытается ответить на этот вопрос на примере того самого букваря. Он рассказывает о том, чего мы хотим от обучения, как создавать сценарии, которые поощряют обучение и мышление, и как можно использовать технологии, чтобы вызвать любопытство… В дискуссию включается нейробиолог и игровой дизайнер Адриан Хон. "Возможно нужно не универсальное решение, а специализированные обучающие инструменты?" - предлагает он.

Я же хочу зафиксировать момент. Поразительно, что ученые обсуждают этот фантастический роман в прикладном ключе.

Нынешнее состояние системы образования представляется удручающим, поэтому хочется понять, как приближение сингулярности изменит ситуацию. К счастью, появляются первые оценки применения LLM в преподавании.

Учащиеся, которые были случайным образом отобраны для участия в программе, значительно превзошли своих сверстников, не участвовавших в ней, по всем направлениям, включая английский язык, что являлось главной целью программы. Эти результаты убедительно доказывают, что генеративный ИИ при продуманном внедрении и поддержке учителей может эффективно выполнять роль виртуального репетитора.


From chalkboards to chatbots: Transforming learning in Nigeria, one prompt at a time.

Стивенсон предполагал, что каждый получит доступ к продвинутому виртуальному репетитору с высокой степенью персонализации, который сделает обучение более легким и продуктивным. Возможно, мы на правильном пути. Исследователи утверждают, что их ученики достигли результатов, эквивалентных двум годам обучения, всего за шесть недель.

Пока не появится больше данных, отношусь к результатам с долей скепсиса, но отмечу: речь идет о совместной работе ученика и учителя с LLM, а не о полной замене педагогов. Это подтверждает общее наблюдение – нынешний ИИ эффективнее всего работает в связке с человеческим интеллектом. Тут невольно вспоминается уже "Культура" Иэна Бэнкса.

Ищите больше интересного в телеграм.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Что написать на Go, если «вывод суммы на экран» вы уже переросли

You look lonely... I can fix that.
You look lonely... I can fix that.

На этот вопрос нашел ответ Игорь Горбунов. Он разрабатывает платформу базовой станции в YADRO и второй год изучает Go. Когда стандартные задачи ему надоели, он придумал челлендж: построить приложение, похожее на утилиту ping в UNIX-подобных системах.

Первым делом разработчик набросал список требования к приложению, чтобы опираться на него в процессе работы:

  • Возможность запросов Echo-Request по протоколам ICMP и ICMPv6 и поддержка IPv4 и IPv6 со стороны ping.

  • Возможность указания целевого узла в виде непосредственно адреса либо в виде имени, что требует поддержки разрешения имен.

  • Возможность менять из командной строки размер отправляемых запросов и их количество.

  • Подсчет и вывод в консоль статистики отправленных запросов, полученных и неполученных ответов, ошибок, минимального, среднего, максимального времени круговой задержки (rtt), а также стандартного отклонения rtt.

Получилось ли у Игоря реализовать настоящий ping и какую проблему ему так и не удалось решить — читайте в статье.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Лицензионный договор на использование программы для ЭВМ

Допустим, вы разработали свое уникальное ПО, оформили на него права в Роспатенте и теперь хотите предоставить право временного пользования вашим продуктом другом лицу. Для этого вам необходимо заключить лицензионный договор.

Что такое программа для ЭВМ по законам РФ 

Программой для ЭВМ называют софт, программное обеспечение, исходный код приложения и так далее. ПО (программное обеспечение) - одна программа или совокупность нескольких программ. Чтобы подтвердить свое авторство на программу, а также обезопасить свой продукт от контрафакта, ее можно зарегистрировать в базе Роспатента.

Примеры зарегистрированных в базе Роспатента программ:

  • Чат-бот для Microsoft Teams от компании i-Sys Labs – № 2020663407

  • Мобильное приложение Connected Car (Сбербанк-Телеком) для iOS от ПАО «Сбербанк России» – № 2021666087 

  • «Телеграм-бот финансовый советник» от «Алго Капитал» – № 2021611952

Что такое лицензия 

Лицензионное соглашение на использование программного обеспечения – это договор, заключение которого позволяет предоставить право на использование ПО другому лицу. Автора ПО, который передает право на использование называют лицензиар, а тот, кто получает это право – лицензиат.  По взаимному соглашению сторон возможно установить срок действия лицензии на месяц, квартал или год.

Лицензия бывает двух видов:

  • Неисключительная. Это значит, что лицензиар имеет право заключать лицензионное соглашение с несколькими лицами.   

  • Исключительная. Лицензиар передает право пользования ПО только одному лицу. 

В лицензионном договоре на использование ЭВМ должны быть:

  • полное описание лицензионного продукта;

  • лицо или лица, которые получают доступ к ПО;

  • прописаны разрешенные способы использования ПО;

  • порядок выплаты вознаграждений, размер выплат;

  • территория использования ПО лицензиатом;

  • может быть указано право заключения лицензиатом сублицензии;

  • особенности проведения аудита применения ПО, чтобы предотвратить несанкционированное использование;

  • срок действия лицензии. Если этот пункт не прописан, то по умолчанию договор действует в течение пяти лет.

Обратите внимание, что в лицензионном договоре должны быть четко указаны сферы и методы, где и как будет применяться продукт. Если лицензиат использует ПО в областях, которые не входят в договор лицензии, то это считается нарушением договора. 

Что грозит за нарушение лицензионного договора на ПО:

  • финансовая компенсация в размере выплаты просроченных вознаграждений, плюс процент неустойки, если это прописано в договоре;

  • расторжение договора и запрет на использование ПО.

    Реальный кейс

    ПАО «Ростелеком» заключил несколько договоров с компанией «Прогресс» на использование программного обеспечения «Оптимайзер». Сублицензиат не выполнил обязательные требования по договорам и просрочил выплату вознаграждений за право использования ПО. В итоге «Ростелеком» обратился в суд. Суд встал на сторону истца и постановил выплатить в пользу «Ростелеком» 29 153 000 рублей задолженности по договорам, а также процент неустойки за задолженность – 3 407 033 рублей и расход по госпошлине в размере 185 800 рублей (N А40-158708/2020).

    Поиск по программам для ЭВМ

    Регистрация программы для ЭВМ

    Подготовка лицензионного договора

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Европейский USB: всемирная польза или цепи для прогресса?

С 28 декабря 2024 на территории ЕС вступили в силу требования единого стандарта зарядки для всех портативных устройств. В списке упомянуты телефоны, планшеты, цифровые камеры, разнообразные наушники, мобильные игровые консоли и многое другое. Все устройства должны поддерживать разъём USB-С с силой тока до 3 ампер (мощность зарядки — 15 Вт). Зачем?

ЕС надеется снизить количество отходов. Кажется, получилось. Раньше каждый ведущий производитель считал обязательным иметь свой разъём для зарядки, а в результате везде приходилось иметь пучок зарядных устройств и проводов. Директива ЕС действительно заставила всех производителей заблаговременно перейти на общий разъём, и теперь практически в любом месте можно найти зарядку.

С одной стороны, такая совместимость действительно уменьшит количество проводов и будет удобна пользователям. С другой стороны, регулирование — это всегда ограничения. Многие производители и сами стали переходить с проприетарных разъёмов на USB ещё в 2010-х — он позволял и телефон заряжать, и передавать данные без задержек. Дальше уже каждый производитель выжимал из USB что мог, и так родились первые быстрые зарядки.

Получается, производители смартфонов и дальше будут реализовывать собственные стандарты быстрой зарядки, которая уже перевалила за 100 Вт, а коллега с другой моделью смартфона получит из вашей зарядки только стандартные 15 Вт. Производителей же новая директива будет сковывать при разработке новых, ещё более скоростных интерфейсов.

Теги:
Всего голосов 15: ↑14 и ↓1+21
Комментарии2

Ежемесячный дайджест: главные новости за декабрь❄️

📺 Провели вебинары:

А также 23 января в 11:00 мск приглашаем на вебинар:

🦾 Поделились обновлениями сервисов на наших облачных платформах в дайджесте на сайте. Например, теперь в Public Preview доступны:

  • Сервис Evolution Managed Spark, который позволяет развернуть кластерный вычислительный сервис на основе Apache Spark для распределенной обработки данных. С его помощью можно создавать и конфигурировать инстансы Spark, а также запускать задачи обработки данных. Все подробности в документации.

  • Evolution Managed Kafka — сервис для развертывания и управления кластерами Kafka® в инфраструктуре платформы Cloud.ru Evolution. Apache Kafka® — распределенный программный брокер сообщений, проект с открытым исходным кодом, разрабатываемый в рамках фонда Apache Software Foundation на языках программирования Java и Scala. Подробнее читайте в документации.

  • Evolution Managed Redis — сервис для создания и управления кластерами Redis® в инфраструктуре платформы Cloud.ru Evolution. Больше информации про сервис в документации.

⚙️ В личном кабинете добавили раздел «Доступность сервисов» в меню «Помощь и документация». Теперь можно: 

💼 Как компания «СК10» оптимизировала работу 1С и получила современное решение для организации удаленной работы — рассказали в новом кейсе.

🎓 Запустили новые бесплатные курсы и сертификацию:

До встречи в следующем выпуске!

Теги:
Рейтинг0
Комментарии0

Telegram заблокировал официальный канал крупнейшего русскоязычного торрент-трекера RuTracker за нарушение авторских прав.

Канал существовал с 2017 года, на момент блокировки на него было подписано чуть более 27 тысяч человек. Новости владельцы канала публиковали очень редко и в основном оповещали о неполадках, например, о проблемах с сайтом из-за блокировок. Сейчас найти канал в поиске Telegram невозможно, а при переходе по прямой ссылке высвечивается сообщение: «Этот канал недоступен из-за нарушения авторских прав».

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии2
2041 оттенок несерого, или Как впихнуть невпихуемое.
2041 оттенок несерого, или Как впихнуть невпихуемое.

Легко обозначить на диаграмме четыре цвета! И 16 — не проблема. Все 256 оттенков серого, пожалуй, человеческий глаз уже не различит. А как различить тысячу и более?

На помощь приходят они! Палитры «в стиле тепловизора». Как же их получить?

Попробуем сначала тривиальное решение. Повторим один канал от 0 до 255 четыре раза подряд, а при помощи другого — различим эти повторы. Бррр, и некрасиво, и отличающиеся на единичку цвета часто похожи друг на друга меньше, чем отличающиеся на 256.

Нет, нужно что-то непрерывное! Давайте сначала перейдём от чёрного к зелёному, потом — к красному, потом — к белому, потом — к синему? Уже лучше! Но всё-таки белый светлее синего, а зелёный — красного, и хотя синие звёзды таки горяче́е — синий цвет зрение воспринимает как холодный…

Да, вот теперь лучше! Чёрный — синий, синий — зелёный, зелёный — красный, красный — жёлтый, жёлтый — белый! Прекрасные дополнительные диапазоны таились в комбинациях нескольких каналов сразу! А можно ли ещё больше?

От чёрного до серого — 128, от серого до светло-синего — 128, от него до чисто синего — 128, потом до зелёного 256 и потом до сине-зелёного, и только от него уже к красному, и потом от него сначала к пурпуру, а только от пурпура — к жёлтому и потом — к белому! Хорошо, но светло-синий светлее синего, а между сине-зелёным и красным — явный грязно-тёмный провал.

Ладно, пусть будет от чёрного — к серому, от него — к синему, от него — к светло-синему, а от него уже — к зелёному, а в переходе от сине-зелёного к красному пусть сначала быстро разгорается красный и медленно затухает сине-зелёный, а потом — наоборот! Две тысячи уникальных оттенков, плавно нарастающих по «психологической температуре»!

На самом деле даже 2041, но это я пожадничал со стартовым серым. В максимуме он слишком светлый для начала диапазона и вообще слишком похож на другие цвета из серединки. Код этого варианта я приведу целиком, можете на свои вкусы дорабатывать:

	int c,x=0;
	for (c=0;c<192;c++,x++)
	{
		Test[y][x][0]=c;
		Test[y][x][1]=c;
		Test[y][x][2]=c;
	}
	for (c=0;c<192;c++,x++)
	{
		Test[y][x][0]=191-c;
		Test[y][x][1]=191-c;
		Test[y][x][2]=192+c/3;
	}
	for (c=1;c<128;c++,x++)
	{
		Test[y][x][0]=c;
		Test[y][x][1]=c;
		Test[y][x][2]=255;
	}
	for (c=1;c<256;c++,x++)
	{
		Test[y][x][0]=127-c/2;
		Test[y][x][1]=127+c/2;
		Test[y][x][2]=255-c;
	}
	for (c=1;c<256;c++,x++)
	{
		Test[y][x][0]=0;
		Test[y][x][1]=255;
		Test[y][x][2]=c;
	}
	for (c=1;c<256;c++,x++)
	{
		int Br = 127-abs(c-128);
		Test[y][x][0]=c  +Br/4;
		Test[y][x][1]=255-c +Br/4;
		Test[y][x][2]=255-c +Br/2;
	}
	for (c=1;c<256;c++,x++)
	{
		Test[y][x][0]=255;
		Test[y][x][1]=0;
		Test[y][x][2]=c;
	}
	for (c=1;c<256;c++,x++)
	{
		Test[y][x][0]=255;
		Test[y][x][1]=c;
		Test[y][x][2]=255-c;
	}
	for (c=1;c<256;c++,x++)
	{
		Test[y][x][0]=255;
		Test[y][x][1]=255;
		Test[y][x][2]=c;
	}

Тут мы, конечно, вступили на скользкую тропку первого (лобового) варианта. Некоторые цвета почти повторяются, разница только в одном канале, который их позволяет различить «как старший разряд». Но в целом вроде ничего вопиющего?

А гость нашей программы — профессиональная логарифмическая палитра, цельнотянутая из какого-то научного журнала то ли конца 80-х, то ли начала 90-х, когда тепловизоры только завоёвывали свою экологическую нишу (увы, авторство по этой причине вряд ли удастся установить, она очень долго переходила из рук в руки). Обратите внимание, как в ней идут цвета: первые несколько отличаются очень сильно, а последние — на какую-то несчастную единичку в одном разряде одного канала. Вот она — работа профессионалов!

А какие палитры для приведения одноканального HDR (с неподвластным глазу SNR) к трёхканальному обычному изображению (с подвластным глазу SNR) знаете вы?

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии6

Привет,Хабровчане ! Неожиданно решился на создание этой публикации – пусть она окажется полезной для кого-то из вас. Представьте ситуацию: рабочий день позади, включаем компьютер, запускаем музыкальное сопровождение и... прямо в кресле дивана нас уже сморит Морфей. Пробуждение же наполняет осознанием неразрешимой дилеммы – выключить ПК или переключить трек? Особенно когда репертуар оставляет желать лучшего!

Вот и приходится преодолевать себя, чтобы добраться до компьютера.

Так вот, в качестве решения этой проблемы разрабатываю приложение для Android с небольшим сервером на PC (начало только под Windows).

Основной фишкой станет регулировка яркости экранов, удаленное отключение ПК, переключение треков в плеере.

Телефонное приложение будет максимально чистым: без рекламы, подписок или дополнительных платежей.

Я – инженер(технарь), а не профессиональный программист, так что обещаю уделять больше внимания техническим моментам .

Все будет сделано в меру моих умений и возможностей. Благодарен за внимание! По мере продвижения работы буду дополнять этот пост новыми деталями.

А какого функционала не хватает вам ?

Пока все в стиле демо
Пока все в стиле демо

Сделал ещё несколько дэмок . 2 приложения на kivymd (python3) связь с сервером http запросами ,но вес приложения уменьшить не удалось . Попробовал на flutter спасибо Гуглу ,ии и другу разработчику ,связь. с сервером с помощью протокола mqtt.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии11

$hyoo_science - поисковик научных статей.

Умеет искать по базам Scopus, ScienceDirect и CrossRef.

В некоторых из них умеет фильтровать по области науки и месту в статье. По умолчанию отсеивает статьи с платным доступом.

Сортировать умеет по: дате, индексу цитирования и лучшему совпадению.

Тут же позволяет глянуть основную информацию по статье и прочитать её резюме. А если этого не хватит - перейти уже к месту её публикации.

И киллер фича - возможность одним кликом скопировать отсылку к статье для списка использованных материалов в своей.

Следите за остальными новостями из нашей экосистемы на канале @mol_news.

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии6

Ближайшие события

E-mail шаблоны Joomla 5: добавление и просмотр своих переменных

В Joomla 5 появились настраиваемые email-шаблоны, как системные, так и сторонних компонентов. Их нельзя (пока что) добавить самостоятельно, они добавляются расширениями при установке. Но их можно отредактировать в Система - Шаблоны - Шаблоны писем. В настройках шаблонов писем (кнопка настроек компонента в верхнем правом углу) мы выбираем формат писем текст или HTML. Тогда становятся доступны настройки макетов шаблонов писем Joomla. Эти глобальные параметры можно переопределить в каждом конкретном email-шаблоне. Таким образом для каждого из email-шаблонов можно указать свою вёрстку и настройки логотипа.
Это, конечно, требует отдельной подробной статьи...

Для разработчиков: как добавить свои переменные для e-mail шаблонов Joomla?

Полезны окажутся 2 триггера для плагинов: onMailBeforeTagsRendering и onMailBeforeRendering.

onMailBeforeRendering - триггер, который позволяет добавлять свои шорт-коды для строковой замены в плагине. Отдать туда надо массив вида [ variable_name => variable_value ]. Из админки свои переменные нужно добавлять уже с фигурными скобками: {variable_name} заменится на variable_value. Аргументом $event плагина является экземпляр класса BeforeRenderingMailTemplateEvent, в котором есть кроме прочих 2 метода: getTemplate() (получение объекта мейлера, куда можно добавлять свои данные) и getTemplateId() (получение id шаблона письма вида com_users.registration.admin.new_notification), по которому мы определяем нужный ли это для нас email-шаблон или нет. Аналогично контексту в контент-плагинах.

Также полезное свойство класса для передачи данных из плагина в лейаут письма для рендера - $layoutTemplateData. Это ассоциативный массив.

// Получаем текущий мейлер 
$mailTemplate = $event->getTemplate();
$data = [
   'variable_name' => 'variable_value'
];
// с Joomla 4 для всех типов писем. 2-й аргумент - plain - текстовый формат письма 
$mailTemplate->addTemplateData($data, false);
// с Joomla 5.2 - для HTML-писем
$mailTemplate->addLayoutTemplateData($data);

// пример из ядра Joomla
// Add additional data to the layout template
$this->addLayoutTemplateData([
    'siteName' => $app->get('sitename'),
    'lang'     => substr($this->language, 0, 2),
]);

onMailBeforeTagsRendering - триггер, который добавляет ваши переменные в список доступных переменных для замены в окне редактирования email шаблона Joomla. Отдать туда нужно массив с переменными, но без их значений.

Чат Joomla-сообщества в Telegram

Мой личный Telegram-канал

Теги:
Рейтинг0
Комментарии0

Попросили вашу умную колонку включить музыку, а она вместо этого вызвала такси? Похоже на атаку типа «подмена распознавания»!

Не секрет, что системы ИИ уязвимы. И один из вариантов их аудита — активное тестирование, которое подразумевает поиск уязвимостей.

Специалист отдела перспективных исследований ИТ-компании «Криптонит» Алексей Протопопов провёл эксперимент: он написал свой алгоритм, который мог бы сгенерировать атаку на систему распознавания речи.

В случае успешной атаки нарушается транскрибирование фраз и выполняются совершенно другие команды. Например, говорите: «Колонка, включи музыку», а она вместо этого набирает номер. Триггером атаки может послужить и какая-то мелодия, которая будет распознаваться как команда.

Это разновидность атаки типа «подмена распознавания», но существуют и другие. Например, атака подмены личности. Они могут быть направлены на то, чтобы система ИИ (та же «Алиса» или Siri) распознавала атакующего как владельца.

Эффективные атаки выполняются «по воздуху», то есть — не требуют подключения к атакуемой системе. Достаточно, чтобы она услышала звук. Суть атаки в том, чтобы передать ей такой набор звуков, который исказил бы транскрипцию.

На практике атака усложняется фоновыми шумами, эхом и тем простым фактом, что все микрофоны и динамики обладают разными характеристиками.

Алексей с коллегами симулировали свыше 700 разных конфигураций и создали итерационный алгоритм, который выполняет атаку на ИИ незаметно для человека, используя психоакустические особенности восприятия звука.

Этот доклад был на V встрече экспертного сообщества по криптографии и большим данным, которую организовал «Криптонит» при поддержке Музея криптографии. Дискуссия была посвящена теме аудита безопасности систем ИИ.

Смотрите запись встречи
📺 на Rutube
📺 в VK видео

Теги:
Рейтинг0
Комментарии0

Я периодически просматриваю, рекомендации GitHub — там попадаются интересные библиотеки и люди. И вот после написания статьи Что не так с cProfile в Python GitHub через некоторое время подкинул ссылку на репозиторий tuna: Python profile viewer.

Как заявляет автор, в своём инструменте он порешал, проблемы, которые имеются в SnakeViz (связанные с невозможностью восстановить граф вызовов). И на мой взгляд, автор tuna заблуждается и вводит остальных в заблуждение — проблемы он не решил, а скорее замел под ковер. «Решение», которое он выбрал — если мы не можем показать достоверную информацию о вызовах, то просто не будем ее показывать. «Решение» отличное. Да на небольших примерах это сработает (или, например, для ячеек в Jupyter), но как только граф вызовов разрастется и там появятся повторные вызов, ценность tuna резко уменьшится.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

В 2021 году в Небраске местный фермер увидел, что сын его товарища Джонсона разрабатывает какого-то робота. “Если твой сын может построить такую штуку, то он сможет придумать что-то, чтобы мне и моим сотрудникам не приходилось лазить в бункеры для зерна”, — сказал он и таким образом случайно положил начало стартапу. Проблема, которую описал фермер, заключается в следующем: примерно раз в пару месяцев нужно ворошить зерно в силосных башнях и бункерах, чтобы разбить образовавшиеся там комки. В таких объемах зерно может вести себя как зыбучие пески, поэтому задача становится опасной для работников.

Джонсоны сначала взялись за задачу просто ради интереса, но затем увидели, что местные производства всерьез заинтересовались идеей, и со временем появилась первая версия их коммерческого робота Grain Weevil. Он выглядит как краулер с “миксером” вместо колес, оборудован камерой и управляется оператором. “Миксер” перемешивает зерно и разбивает образовавшиеся комки, мостики и столбы из зерна. Автоматизация в этой версии еще не предусмотрена, но разработчики планируют сделать Grain Weevil автономным со следующей версией. На один бункер предлагается использовать по два робота, каждый из которых рассчитан примерно на 500 000 бушелей зерна (около 13 600 тонн). 

В мае 2024 Grain Weevil привлекла 3,5 млн в качестве инвестиций, а ко второму кварталу 2025 создатели планируют окупиться. Оптимистичный настрой, вероятно, объясняется тем, что пока их единственный конкурент на рынке — бесстрашный фермер с лопатой. 

Истории местных стартапов, родившихся из реального запроса бизнеса, особенно интересны своей прямотой и близостью к производству. Поэтому желаю Джонсонам успеха, а через год или больше, может быть, доведется написать пост об автономной версии Grain Weevil.

Больше подобных новостей о роботах и AI в индустрии — в нашем канале

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

Задача о поиске секретной службы

Задача подойдет для специалистов по информационной безопасности и всех, кто интересуется CTF-турнирами.

Условие

Вы давно ищете путь к секретной службе. И вот, наконец, вам удалось перехватить трафик, в котором должен быть ключ к получению ее адреса. Разберите дамп и следуйте верным маршрутом.

Задача

Найдите флаг — строку в формате slcctf{}. 

Чтобы выполнить задание, перейдите на страницу Secret Service и скачайте файл dump.pcap.

Попробуйте решить задачу самостоятельно и делитесь своими идеями в комментариях. А если потребует помощь, ищите ответ в Академии Selectel.

Теги:
Всего голосов 6: ↑6 и ↓0+8
Комментарии0

Выводим Ситника на чистую воду

Топ перлов:

  • Sync-engine избавляет от однотипного кода по загрузке данных .. он заставляет вас проверять isLoading === true и рисовать крутилку.

  • Во всех sync-engine используются нормальные стейт менеджеры .. например, nanostore (см. видео с разбором этой библиотеки).

  • (Я запилил штуку, которая ничего не умеет, но ты можешь поверх этой штуки запилить своих костылей для решения проблем, которые у тебя возникнут из-за моей штуки).

  • CRDT - это просто лог операций (лог операций - это CmRDT и OT, CvRDT даже близко не лог).

  • Работать с IndexedDB через скомпилированный под WASM SQLite быстрее, чем напрямую работать с IndexedDB (разве что, если руки заточены под обнимашки).

Упомянутые ссылки:

Копилка благодарностей

Теги:
Всего голосов 4: ↑1 и ↓3-2
Комментарии1

Сервис ITOA: Image to ASCII Converter превращает любое изображение в ASCII-картинку — в цвете или монохроме. Результат можно сохранить в символах или в PNG.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии1