Category: 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) など、どこでも機能します。

    ボンネットの下にはピュアダーツ、マテリアル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 を使用すると、コードを複製することなく 6 つのプラットフォームに対して 1 つのアプリケーションを作成できます。 Aleka は、Dart および Flutter SDK のネイティブ機能と最小限のサードパーティの依存関係のみを使用します: file_picker、塗りつぶし時にピクセルを操作するための image、ブラウザでビデオをエクスポートするための ffmpeg_wasm。

    アーキテクチャ

    このプロジェクトは、クリーン アーキテクチャとソリッドの原則に準拠しています。

    • PaintCanvasController – リスナー/オブザーバー パターンを通じてストロークと塗りつぶしの状態を制御します。
    • ペイントツールバー – パレット、スライダー、ボタンの UI コンポーネント。
    • AlekaFile – JSON でのシリアル化/逆シリアル化、PNG キャプチャ。
    • MovieController – フレームとアニメーション状態のモデル。
    • VideoExport – MP4 エンコード ロジック (デスクトップ/ウェブ) をカプセル化します。

    I/O 関数 (saveStrokes、loadStrokes、capturePng など) は注入可能になっており、テスト中にモックに置き換えることができます。このプロジェクトには 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 フィールドによってバージョン管理されます。

    アニメーション モード

    主な機能の 1 つは、組み込みのフレームごとのアニメーション エディタです。フレームを描画し、新しいフレームを追加し、次のフレームを描画する、ということを繰り返します。タイムラインにはサムネイルが表示され、フレームの順序と長さを変更できます。完成したアニメーションは MP4 にエクスポートできます。

    エクスポート アルゴリズムはすべてのフレームを反復処理し、RepaintBoundary 経由でフレームをキャプチャし、PNG バイトを収集してエンコーダに転送します。デスクトップではシステム ffmpeg と呼ばれ、ブラウザでは ffmpeg.wasm が使用されます。これは、ffmpeg を WebAssembly に完全に移植したもので、ブラウザのサンドボックスで直接動作します。

    塗りつぶし

    塗りつぶしの実装では、色の許容値 (_kFillTolerance = 1000) を持つ幅優先検索 (BFS) を使用します。これにより、ストロークの滑らかなエッジを正しく処理できるようになります。塗りつぶしは輪郭を超えて流れず、境界上の半透明のピクセルをキャプチャします。空のキャンバスの場合、不必要な計算を行わずに塗りつぶしが作成されます。

    試してみる

    Aleka は、Web 上およびネイティブ アプリケーションとして利用できます。

    demensdeum.com/software/aleka/

    ソース コードは MIT ライセンスの下で公開されています。

    github.com/demensdeum/Aleka

  • ママカレンダー – クロスプラットフォームのリマインダーアプリ

    Mama Calendar は、Node.js + MongoDB および PHP + MariaDB という 2 つのバックエンド実装を備えた React Native (Expo) で書かれたクロスプラットフォームのイベントおよびリマインダー アプリケーションです。

    このアプリケーションでは、絵文字を分類してイベントを作成し、繰り返しの種類 (1 回、毎年、毎月、毎週、毎日) を選択し、別の「重要なイベント」タブで今後 3 日間の重要なイベントを表示することができます。

    テクノロジースタック

    フロントエンドは、TypeScript、ナビゲーション用の Expo Router、アニメーション用の react-native-reanimated を使用した Expo SDK 57 を介して React Native 0.86 で作成されています。アイコンにはエキスポシンボルが使用されます(iOSではSFシンボル、Android/Webではマテリアルアイコン)。

    バックエンドは 2 つのバージョンで実装されています。

    • 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 и упругой интерполяцией, анимированная иконка приложения с вращающимся свечением
    • 管理エンドポイント: ユーザー、トークンの管理、マスター トークンによるデータベースのクリア

    なぜ 2 つのバックエンド実装があるのですか?

    Node.js バージョンがメインですが、よりクラシックなホスティングの代替として PHP バージョンが存在します。 API は完全に同一であるため、クライアント コードを変更せずに API を切り替えることができます。

    インフラストラクチャ

    スタック全体は Docker Compose を通じて生成されます。クライアントはマルチステージ ビルド (Expo エクスポート → nginx alpine)、Node.js 上のサーバー、MongoDB 8 を通じて組み立てられます。PHP バージョンの場合は、MariaDB 11 とテスト用の phpunit を含む別の compose ファイルがあります。

    Web バージョンのアセンブリは、expo エクスポート の前に API_URL にパッチを適用し、後で元のファイルを復元する PowerShell スクリプトによって自動化されます。

    出力

    Mama Calendar は、React Native のモバイルおよび Web フロントエンドから 2 つのサーバー側オプションまで、全サイクルをカバーするフル機能のクロスプラットフォーム アプリケーションです。このプロジェクトは、そのアーキテクチャ、最新の Expo SDK 機能の使用、およびデュアル バックエンド実装において興味深いものです。

    リンク

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

  • テフレッチャー


    Teflecher は、Kotlin マルチプラットフォーム (KMP) と Compose マルチプラットフォーム 上に構築された、高速でインタラクティブなクロスプラットフォームのクイズ アプリケーションです。これにより、ユーザーはローカル JSON ファイルまたはリモート URL からクイズを直感的にロードし、多肢選択式の質問に回答し、正解に対する即時のフィードバックを確認し、結果を追跡することができます。

    ウェブ:
    https://demensdeum.com/software/teflecher/

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

    また、イオン + キャパシタ テクノロジーに基づいた Teflecher Editor 形式のクイズ エディターでもあります。

    ウェブ:
    https://demensdeum.com/software/teflecher-editor/

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

  • ゴーストコンタクト


    ゴースト連絡先は、標準システム API や電話帳から連絡先を隠すように設計されたシンプルな Web アプリケーションです。すべての情報はブラウザ内でのみローカルに保存され、外部サーバーには転送されません。

    主な機能

    • システム 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

    このプロジェクトではオープンソースの Radio Browser を使用し、世界中の何千ものラジオ局をアプリケーションで利用できるようにしています。名前、ジャンル、または人気で検索し、お気に入りに追加して、お気に入りのステーションにすぐに戻ることができます。

    Ushki-Radio はバックグラウンド ラジオ プレーヤーの役割に最適です。最後の放送局を記憶しており、音量を制御でき、複雑な設定は必要ありません。インターフェイスは簡潔で理解しやすく、音楽、会話、放送の邪魔にならないようにすべてが行われています。

    技術的には、このプロジェクトは React Native と Expo に基づいて構築されているため、ブラウザーとネイティブ アプリケーションの両方で動作します。内部では、expo-av を使用してオーディオを再生し、ユーザー設定はローカルに保存されます。ロシア語や英語など、いくつかの言語がサポートされています。

    Ushki-Radio は、オープン、軽量、拡張可能、そして主にリスナーに焦点を当てた、最新のインターネット ラジオ プレーヤーがどのようなものであるかを示す好例です。このプロジェクトは MIT ライセンスに基づいて配布されており、個人使用だけでなく、オーディオ アプリケーションを使用した独自の実験の基礎としても最適です。

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

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

  • Glazki TV: インターネット テレビ用の最新プレーヤー

    Glazki TV は、React Native と Expo に基づいて構築された、インターネット テレビ (IPTV) 用の最新の高性能プレーヤーです。このプロジェクトは使いやすさと速度に焦点を当てており、モバイル デバイスとブラウザの両方で IPTV チャンネルを視聴するための便利なインターフェイスを提供します。

    主な機能

    • チャンネルの閲覧: 簡単にナビゲーションできるように分類された何千ものチャンネルを閲覧します。
    • 検索: 必要なチャンネルを名前ですばやく見つけます。
    • お気に入り: すぐにアクセスできるようにお気に入りのチャンネルを保存します (データはローカルに保存されます)。
    • ディープリンク: 自動的に開くチャンネルへの直接リンクを共有します。
    • テーマのサポート: インターフェースは、システムの暗いテーマまたは明るいテーマに自動的に適応します。
    • ウェブ サポート: プレーヤーは URL 同期によりブラウザで完全に機能します。

    テクノロジースタック

    このプロジェクトは最新の開発ツールに基づいています。

    • フレームワーク: React Native + Expo
    • Video Player: expo-video (замена устаревшему expo-av)
    • UI ツールキット: 反応ネイティブペーパー
    • プレイリスト パーサー: iptv-playlist-parser

    ウェブ版:
    https://demensdeum.com/software/glazki-tv/

    Google Play バージョン:
    https://play.google.com/store/apps/details?id=com.demensdeum.glazkitv

DemensDeum
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.