Category: software

  • maimat:批量图像压缩和调整大小

    maimat(海量图像处理工具)是一款开源工具,专为批量图像处理而设计:调整大小和压缩。该应用程序是用 Python 3.10+ 编写的,并使用 ImageMagick 作为处理引擎。

    链接

    https://github.com/zefir1990/maimat

  • Aleka 是一款基于 Flutter 构建的跨平台绘图应用

    Aleka 是一款用 Flutter 编写的轻量级、快速绘图应用程序。它适用于任何地方:浏览器、桌面(Windows、macOS、Linux)和移动设备(iOS、Android)。

    引擎盖下是纯粹的 Dart、Material 3 和对细节的关注。

    机会

    • 手绘图:通过二次贝塞尔插值实现平滑笔画。
    • 15 种颜色的调色板:通过视觉指示快速选择。
    • 画笔大小:可使用滑块在 1 到 30 像素之间进行调整。
    • 撤消:后退一步。
    • 清除画布:只需单击一下即可。
    • 洪水填充:具有平滑边缘容差的 BFS。
    • 保存:格式.aleka (JSON)。
    • 加载:打开之前保存的绘图并继续。
    • PNG 导出: 以 3 倍分辨率捕获画布。
    • 🎬 动画模式: 带时间轴的逐帧动画:
      • 添加和删除框架,每个框架都有自己的设计。
      • 帧持续时间从 50 毫秒到 5 秒。
      • 更改 FPS:6、8、12、15、24、30 或 60。
      • 导出为 MP4(通过桌面上的 ffmpeg、浏览器中的 ffmpeg.wasm)。
    • 深色和浅色主题:材质3,遵循系统。

    为什么要颤动?

    Flutter 允许您为六个平台编写一个应用程序,而无需重复代码。 Aleka 仅使用 Dart 和 Flutter SDK 的本机功能以及最少的第三方依赖项:file_pickerimage 用于在填充时处理像素、ffmpeg_wasm 用于在浏览器中导出视频。

    架构

    该项目遵循简洁架构和 SOLID 的原则:

    • PaintCanvasController – 通过侦听器/观察者模式控制笔划和填充的状态。
    • PaintToolbar – 调色板、滑块和按钮的 UI 组件。
    • AlekaFile – JSON、PNG 捕获中的序列化/反序列化。
    • MovieController – 帧和动画状态的模型。
    • VideoExport – 封装 MP4 编码逻辑(桌面/网络)。

    I/O 函数(saveStrokesloadStrokescapturePng 等)可注入 – 它们可以在测试期间用模拟替换。该项目有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 的成熟端口,直接在浏览器沙箱中工作。

    洪水填充

    填充实现使用宽度优先搜索 (BFS) 和颜色容差 (_kFillTolerance = 1000)。这使您可以正确处理笔画的平滑边缘 – 填充不会超出轮廓,但会捕获边框上的半透明像素。对于空画布,将创建实心填充,无需进行不必要的计算。

    尝试

    Aleka 可在网络上使用并作为本机应用程序使用:

    demensdeum.com/software/aleka/

    源代码在 MIT 许可证下开放:

    github.com/demensdeum/Aleka

  • 妈妈日历 – 跨平台提醒应用程序

    Mama Calendar 是一个用 React Native (Expo) 编写的跨平台事件和提醒应用程序,具有两个后端实现:Node.js + MongoDB 和 PHP + MariaDB。

    该应用程序允许您创建带有表情符号分类的事件,选择重复类型(一次、每年、每月、每周、每天),并在单独的“重要事件”选项卡中查看接下来 3 天的重要事件。

    技术栈

    前端是通过带有 TypeScript 的 Expo SDK 57 用 React Native 0.86 编写的,用于导航的 Expo Router 和用于动画的 react-native-reanimated 。 Expo-symbols 用于图标(iOS 上的 SF 符号,Android/Web 上的 Material 图标)。

    后端有两个版本实现:

    • Node.js: Express 4、通过本机驱动程序的 MongoDB 8、使用 scrypt + salt 的自定义身份验证、手动令牌管理。 Docker Compose 会启动客户端 (nginx)、服务器和 MongoDB。
    • PHP: 无框架的 PHP 8.2、PDO + MariaDB 11、用于密码散列的 bcrypt、您自己的路由器以及通过 Composer 自动加载的 PSR-4。

    应用功能

    • 注册和授权:带有用户名/密码和不记名令牌的简单系统
    • CRUD 事件:创建、查看、编辑和删除包含日期、表情符号和重复类型的事件
    • 智能过滤:“重要事件”选项卡显示未来 3 天的事件,并考虑重复规则。例如,年度事件显示最近的年度事件、每月 – 按月中的日期、每周 – 按星期的日期
    • 表情符号选择器: 20 个预设表情符号,用于对事件进行快速分类
    • 突出显示今天的活动:今天的活动以红色背景突出显示 (#B71C1C)
    • 深色主题:自动检测系统配色方案,并使用单独的浅色和深色主题调色板
    • 国际化:通过 React Context 实现俄语和英语
    • Анимации: анимированный сплэш-скрин с Keyframe API и упругой интерполяцией, анимированная иконка приложения с вращающимся свечением
    • 管理端点:管理用户、令牌并通过主令牌清除数据库

    为什么有两个后端实现?

    Node.js 版本是主要版本,但 PHP 版本作为更经典托管的替代方案存在。 API 完全相同,允许您在不更改客户端代码的情况下在它们之间进行切换。

    基础设施

    整个堆栈是通过 Docker Compose 构建的:客户端通过多阶段构建(Expo export → nginx alpine)进行组装,服务器位于 Node.js、MongoDB 8 上。对于 PHP 版本,有一个单独的包含 MariaDB 11 和 phpunit 的 compose 文件用于测试。

    Web 版本的组装由 PowerShell 脚本自动完成,该脚本会在 expo 导出 之前修补 API_URL,并在之后恢复原始版本。

    输出

    Mama Calendar 是一款功能齐全的跨平台应用程序,涵盖整个周期:从 React Native 上的移动和 Web 前端到两个服务器端选项。该项目因其架构、现代 Expo SDK 功能的使用和双后端实现而有趣。

    链接

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

  • 特弗莱彻


    Teflecher 是一款快速、交互式、跨平台的测验应用程序,构建于 Kotlin Multiplatform (KMP)Compose Multiplatform 之上。它允许用户直观地从本地 JSON 文件或远程 URL 加载测验、回答多项选择题、查看正确答案的即时反馈并跟踪结果。

    网址:
    https://demensdeum.com/software/teflecher/

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

    也是基于 Ionic + Capacitor 技术的 Teflecher Editor 格式的测验编辑器

    网址:
    https://demensdeum.com/software/teflecher-editor/

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

  • 幽灵联系人


    Ghost Contacts 是一个简单的 Web 应用程序,旨在隐藏标准系统 API 和电话簿中的联系人。所有信息仅存储在您的浏览器本地,不会传输到外部服务器。

    主要功能

    • 从系统 API 中隐藏:您的联系人不会与标准系统联系人 API 和设备电话簿同步。
    • 紧急密码:特殊密码,输入后,整个联系人数据库将立即且不可撤销地删除。
    • 导入和导出:通过 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 格式。

    微软商店:
    https://apps.microsoft.com/detail/9nvzjs98smgc

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

  • 乌什基广播电台

    Ushki-Radio 是一款用于在线广播的跨平台广播播放器,专注于简单性和聆听乐趣。没有不必要的功能,没有超载的接口 – 只需打开它并聆听即可。


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

    该项目使用开源广播浏览器,使来自世界各地的数千个广播电台可以在应用程序中使用。您可以按名称、流派或受欢迎程度搜索它们,将它们添加到您的收藏夹并快速返回您最喜欢的电台。

    Ushki-Radio 非常适合背景广播播放器的角色:它会记住最后一个电台,允许您控制音量并且不需要复杂的设置。界面简洁易懂 – 一切都经过精心设计,不会分散音乐、对话和广播的注意力。

    从技术上讲,该项目是基于 React Native 和 Expo 构建的,因此它既可以在浏览器中运行,也可以作为本机应用程序运行。在底层,expo-av 用于播放音频,用户设置存储在本地。支持多种语言,包括俄语和英语。

    Ushki-Radio 是现代互联网广播播放器的一个很好的例子:开放、轻量级、可扩展并且主要以听众为中心。该项目根据 MIT 许可证分发,非常适合个人使用,也可以作为您自己的音频应用实验的基础。

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

    谷歌播放:
    https://play.google.com/store/apps/details?id=com.demensdeum.ushkiradio

  • Glazki TV:互联网电视的现代播放器

    Glazki TV 是一款现代、高性能的互联网电视 (IPTV) 播放器,建立在 React Native 和 Expo 的基础上。该项目注重易用性和速度,为在移动设备和浏览器中观看 IPTV 频道提供便捷的界面。

    主要功能

    • 频道浏览:浏览数千个频道,并进行分类以便于导航。
    • 搜索:按名称快速查找您需要的频道。
    • 收藏夹:保存您喜爱的频道以便快速访问(数据保存在本地)。
    • 深层链接:共享自动打开频道的直接链接。
    • 主题支持:界面自动适应系统深色或浅色主题。
    • 网络支持:播放器在浏览器中具有 URL 同步功能。

    技术栈

    该项目基于现代开发工具:

    • 框架: React Native + Expo
    • Video Player: expo-video (замена устаревшему expo-av)
    • UI 工具包:react-native-paper
    • 播放列表解析器: iptv-playlist-parser

    网页版:
    https://demensdeum.com/software/glazki-tv/

    谷歌播放版本:
    https://play.google.com/store/apps/details?id=com.demensdeum.glazkitv