Рубрика: software

  • maimat: массовое сжатие и изменение размеров изображений

    maimat (Mass Images Manipulation Tool) — это инструмент с открытым исходным кодом, предназначенный для пакетной обработки изображений: изменения размеров и сжатия. Приложение написано на Python 3.10+ и использует ImageMagick в качестве движка обработки.

    Ссылки

    https://github.com/zefir1990/maimat

  • Aleka — кроссплатформенное приложение для рисования на Flutter

    Aleka — это лёгкое, быстрое приложение для рисования, написанное на Flutter. Оно работает везде: в браузере, на десктопе (Windows, macOS, Linux) и на мобильных устройствах (iOS, Android).

    Под капотом — чистый Dart, Material 3 и внимание к деталям.

    Возможности

    • Рисование от руки: плавные штрихи с квадратичной интерполяцией Безье.
    • Палитра из 15 цветов: быстрый выбор с визуальной индикацией.
    • Размер кисти: регулируется слайдером от 1 до 30 px.
    • Отмена (Undo): шаг назад по вашим штрихам.
    • Очистка холста: одним нажатием.
    • Заливка (Flood Fill): BFS с tolerance для сглаженных краёв.
    • Сохранение: формат .aleka (JSON).
    • Загрузка: открывайте ранее сохранённые рисунки и продолжайте.
    • Экспорт PNG: захват холста в 3x разрешении.
    • 🎬 Режим анимации: покадровая анимация с временной шкалой:
      • Добавление и удаление кадров, каждый со своим рисунком.
      • Длительность кадра от 50 мс до 5 с.
      • Смена FPS: 6, 8, 12, 15, 24, 30 или 60.
      • Экспорт в MP4 (через ffmpeg на десктопе, ffmpeg.wasm в браузере).
    • Тёмная и светлая тема: Material 3, следует за системой.

    Почему Flutter?

    Flutter позволяет писать одно приложение для шести платформ без дублирования кода. Aleka использует только нативные возможности Dart и Flutter SDK и минимум сторонних зависимостей: file_picker, image для работы с пикселями при заливке, ffmpeg_wasm для экспорта видео в браузере.

    Архитектура

    Проект придерживается принципов чистой архитектуры и SOLID:

    • PaintCanvasController — управляет состоянием штрихов и заливки через паттерн Listener/Observer.
    • PaintToolbar — UI-компонент палитры, ползунка и кнопок.
    • AlekaFile — сериализация/десериализация в JSON, захват PNG.
    • MovieController — модель кадров и состояния анимации.
    • VideoExport — инкапсулирует логику кодирования MP4 (десктоп/веб).

    Функции ввода-вывода (saveStrokes, loadStrokes, capturePng и др.) сделаны injectable — их можно заменять на моки при тестировании. В проекте 79 тестов: проверка сериализации, отмены, загрузки/сохранения, экспорта PNG и видео, модели кадров и временной шкалы.

    Формат файла .aleka

    Файл .aleka — это читаемый JSON, который можно открыть в любом текстовом редакторе:

      "aleka": "1.0",
      "strokes": [
        {
          "color": 4278190080,
          "strokeWidth": 3.0,
          "points": [[100.0, 200.0], [150.0, 250.0]]
        }
      ]
    }
    

    Каждый штрих хранит цвет (ARGB32), толщину и массив точек. Формат версионирован полем aleka.

    Режим анимации

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

    Алгоритм экспорта перебирает все кадры, захватывает их через RepaintBoundary, собирает PNG-байты и передаёт в энкодер. На десктопе вызывается системный ffmpeg, в браузере используется ffmpeg.wasm — полноценный порт ffmpeg в WebAssembly, работающий прямо в песочнице браузера.

    Заливка (Flood Fill)

    Реализация заливки использует поиск в ширину (BFS) с допуском по цвету (_kFillTolerance = 1000). Это позволяет корректно обрабатывать сглаженные края штрихов — заливка не вытекает за контур, но захватывает полупрозрачные пиксели на границе. Для пустого холста создаётся сплошная заливка без лишних вычислений.

    Попробовать

    Aleka доступна в вебе и как нативное приложение:

    demensdeum.com/software/aleka/

    Исходный код открыт под лицензией MIT:

    github.com/demensdeum/Aleka

  • Mama Calendar — кроссплатформенное приложение для напоминаний

    Mama Calendar — это кроссплатформенное приложение для событий и напоминаний, написанное на React Native (Expo) с двумя реализациями бэкенда: Node.js + MongoDB и PHP + MariaDB.

    Приложение позволяет создавать события с эмодзи-категоризацией, выбирать тип повторения (однократно, ежегодно, ежемесячно, еженедельно, ежедневно) и просматривать важные события на ближайшие 3 дня на отдельной вкладке «Important Events».

    Стек технологий

    Фронтенд написан на React Native 0.86 через Expo SDK 57 с TypeScript, Expo Router для навигации и react-native-reanimated для анимаций. Для иконок используется expo-symbols (SF Symbols на iOS, Material иконки на Android/Web).

    Бэкенд реализован в двух вариантах:

    • Node.js: Express 4, MongoDB 8 через нативный драйвер, самописная аутентификация с scrypt + salt, ручное управление токенами. Docker Compose поднимает клиент (nginx), сервер и MongoDB.
    • PHP: PHP 8.2 без фреймворков, PDO + MariaDB 11, bcrypt для хеширования паролей, свой роутер и PSR-4 автолоадинг через Composer.

    Функции приложения

    • Регистрация и авторизация: простая система с username/password и Bearer-токенами
    • CRUD событий: создание, просмотр, редактирование и удаление событий с датой, эмодзи и типом повторения
    • Умная фильтрация: вкладка Important Events показывает события на ближайшие 3 дня с учетом правил повторения. Например, ежегодные события показывают ближайшее годовое вхождение, ежемесячные — по дню месяца, еженедельные — по дню недели
    • Эмодзи-пикер: 20 предустановленных эмодзи для быстрой категоризации событий
    • Подсветка сегодняшних событий: события на сегодня выделяются красным фоном (#B71C1C)
    • Тёмная тема: автоматическое определение системной цветовой схемы с отдельными палитрами для светлой и тёмной темы
    • Интернационализация: русский и английский языки через React Context
    • Анимации: анимированный сплэш-скрин с Keyframe API и упругой интерполяцией, анимированная иконка приложения с вращающимся свечением
    • Админ-эндпоинты: управление пользователями, токенами и очистка базы через мастер-токены

    Почему две реализации бэкенда?

    Node.js версия является основной, но PHP вариант существует как альтернатива для более классического хостинга. API полностью идентичен, что позволяет переключаться между ними без изменения клиентского кода.

    Инфраструктура

    Весь стек поднимается через Docker Compose: клиент собирается через мультистейдж билд (Expo export → nginx alpine), сервер на Node.js, MongoDB 8. Для PHP-версии есть отдельный compose-файл с MariaDB 11 и phpunit для тестов.

    Сборка веб-версии автоматизирована PowerShell-скриптом, который патчит API_URL перед expo export и восстанавливает оригиналы после.

    Вывод

    Mama Calendar — это полнофункциональное кроссплатформенное приложение, которое покрывает полный цикл: от мобильного и веб-фронтенда на React Native до двух вариантов серверной части. Проект интересен своей архитектурой, использованием современных возможностей Expo SDK и двойной реализацией бэкенда.

    Ссылки

    https://github.com/zefir1990/Mama-Calendar
    https://demensdeum.com/software/mama-calendar/events

  • Teflecher


    Teflecher — это быстрое, интерактивное, кроссплатформенное приложение-квиз, созданное на основе Kotlin Multiplatform (KMP) и Compose Multiplatform. Оно позволяет пользователям интуитивно загружать викторины из локальных JSON-файлов или удаленных URL-адресов, отвечать на вопросы с несколькими вариантами ответа, мгновенно видеть обратную связь о правильности ответов и отслеживать свои результаты.

    Web:
    https://demensdeum.com/software/teflecher/

    GitHub:
    https://github.com/zefir1990/teflecher

    Также редактор квизов формата Teflecher Editor на основе технологий Ionic + Capacitor

    Web:
    https://demensdeum.com/software/teflecher-editor/

    GitHub:
    https://github.com/zefir1990/teflecher-editor

  • Ghost Contacts


    Ghost Contacts — это простое веб-приложение, созданное с целью скрыть ваши контакты от стандартных системных API и телефонных книг. Вся информация хранится исключительно локально в вашем браузере и не передается на внешние сервера.

    Основные возможности

    • Скрытие от системных API: Ваши контакты не синхронизируются со стандартными системными API контактов и телефонной книгой устройства.
    • Экстренный пароль (Panic Password): Специальный пароль, при вводе которого вся база контактов моментально и безвозвратно удаляется.
    • Импорт и экспорт: Удобный перенос базы контактов через файлы формата CSV для создания резервных копий.

    Приложение онлайн:
    https://demensdeum.com/software/ghost-contacts/

    GitHub:
    https://github.com/demensdeum/GhostContacts

  • Raiden Video Ripper

    Raiden Video Ripper — это проект с открытым исходным кодом, предназначенный для редактирования видео и конвертации форматов. Он создан с использованием Qt 6 (Qt Creator) и позволяет осуществлять монтаж и конвертировать видео в форматы MP4, GIF и WebM. Вы также можете извлекать аудио из видео и конвертировать его в формат MP3.

    Microsoft Store:
    https://apps.microsoft.com/detail/9nvzjs98smgc

    GitHub:
    https://github.com/demensdeum/RaidenVideoRipper/releases

  • Ushki Radio

    Ushki-Radio — это кроссплатформенный радиоплеер для онлайн-радио, сделанный с упором на простоту и удовольствие от прослушивания. Без лишних функций, без перегруженных интерфейсов — просто включил и слушаешь.


    https://demensdeum.com/software/ushki-radio

    Проект использует открытую базу Radio Browser, благодаря чему в приложении доступны тысячи радиостанций со всего мира. Их можно искать по названию, жанрам или популярности, добавлять в избранное и быстро возвращаться к любимым станциям.

    Ushki-Radio отлично подходит именно для роли фонового радиоплеера: он запоминает последнюю станцию, позволяет управлять громкостью и не требует сложной настройки. Интерфейс лаконичный и понятный — всё сделано так, чтобы ничего не отвлекало от музыки, разговоров и эфира.

    Технически проект построен на React Native и Expo, поэтому работает как в браузере, так и в виде нативного приложения. Под капотом используется expo-av для воспроизведения аудио, а пользовательские настройки хранятся локально. Есть поддержка нескольких языков, включая русский и английский.

    Ushki-Radio — это хороший пример того, каким может быть современный интернет-радиоплеер: открытый, лёгкий, расширяемый и ориентированный в первую очередь на слушателя. Проект распространяется под лицензией MIT и отлично подойдёт как для личного использования, так и как база для собственных экспериментов с аудио-приложениями.

    GitHub:
    https://github.com/demensdeum/Ushki-Radio

    Google Play:
    https://play.google.com/store/apps/details?id=com.demensdeum.ushkiradio

  • Glazki TV: Современный плеер для интернет-телевидения

    Glazki TV — это современный, высокопроизводительный плеер для интернет-телевидения (IPTV), построенный на базе React Native и Expo. Проект ориентирован на простоту использования и скорость работы, предоставляя удобный интерфейс для просмотра IPTV-каналов как на мобильных устройствах, так и в браузере.

    Основные возможности

    • Просмотр каналов: Просматривайте тысячи каналов, разделенных по категориям для удобной навигации.
    • Поиск: Быстро находите нужные каналы по названию.
    • Избранное: Сохраняйте любимые каналы для быстрого доступа (данные сохраняются локально).
    • Deep Linking: Делитесь прямыми ссылками на каналы, которые открываются автоматически.
    • Поддержка тем: Интерфейс автоматически адаптируется к системной темной или светлой теме.
    • Веб-поддержка: Плеер полностью функционален в браузере с синхронизацией URL.

    Технологический стек

    В основе проекта лежат современные инструменты разработки:

    • Framework: React Native + Expo
    • Video Player: expo-video (замена устаревшему expo-av)
    • UI Toolkit: react-native-paper
    • Playlist Parser: iptv-playlist-parser

    Веб версия:
    https://demensdeum.com/software/glazki-tv/

    Google Play версия:
    https://play.google.com/store/apps/details?id=com.demensdeum.glazkitv