WSL2 で Swift を構築する (Linux)

Swift エコシステムは Apple プラットフォームの外で積極的に開発されており、現在では Windows Subsystem for Linux (WSL2) を使用して Windows 上で Swift エコシステムに書き込むのが非常に快適です。 Linux/WSL でのアセンブリの場合、独自の Apple フレームワーク (SwiftUI、UIKit、AppKit、CoreData、CoreML、ARKit、SpriteKit、その他の iOS/macOS 固有のライブラリなど) なしで、Swift の軽量バージョンが利用可能であることを考慮する価値がありますが、コンソール ユーティリティとバックエンドの場合はこれで十分です。この投稿では、環境を準備し、WSL2 内のソース コードから Swift コンパイラーを構築するプロセスを段階的に説明します (例として Ubuntu/Debian を使用)。

パッケージのリストとシステム自体を更新します。

sudo apt update && sudo apt upgrade -y

ビルドに必要な依存関係をインストールします。

sudo apt install -y \
  git cmake ninja-build clang python3 python3-pip \
  libicu-dev libxml2-dev libcurl4-openssl-dev \
  libedit-dev libsqlite3-dev swig libncurses5-dev \
  pkg-config tzdata rsync

コンパイラとリンカー (LLVM と LLD) をインストールします。

sudo apt install -y llvm lld

すべての依存関係を含む Swift リポジトリのクローンを作成します。

git clone https://github.com/apple/swift.git
cd swift
utils/update-checkout --clone

`swiftly` と既製の swift を swiftc でインストールする

curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz && \
tar zxf swiftly-$(uname -m).tar.gz && \
./swiftly init --quiet-shell-followup && \
. "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" && \
hash -r

ビルドを開始しましょう (これには長い時間がかかります)。

utils/build-script \
  --release-debuginfo \
  --swift-darwin-supported-archs="x86_64" \
  --llvm-targets-to-build="X86" \
  --skip-build-benchmarks \
  --skip-test-cmark \
  --skip-test-swift \
  --skip-ios \
  --skip-tvos \
  --skip-watchos \
  --skip-build-libdispatch=false \
  --skip-build-cmark=false \
  --skip-build-foundation \
  --skip-build-lldb \
  --skip-build-xctest \
  --skip-test-swift

ビルドが完了したら、コンパイラーへのパスを PATH に追加します (ビルド フォルダーへのパスを指定します)。

export PATH=/root/Sources/3rdparty/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin/swiftc:$PATH

インストールされている Swift のバージョンが動作していることを確認します。

swift --version

テスト ファイルを作成して実行します。

echo "print(\"Hello, World!\")" > hello.swift
swift hello.swift

バイナリをコンパイルして実行することもできます。

swiftc hello.swift
./hello

ソース

テフレッチャー

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

パターンインタープリターの実践

前回の記事では、インタープリター パターンの理論を検討し、AST ツリーとは何か、終端式と非終端式を抽象化する方法を学びました。今回は、理論から離れて、このパターンが私たち全員が毎日使用する本格的な商業プロジェクトにどのように適用されるかを見てみましょう!

ネタバレ: ブラウザでこのテキストを読んでいるだけで、あなたは今 Interpreter パターンを使用している可能性があります。

業界におけるこのパターンの使用例の中で最も印象的で、おそらく最も重要なものの 1 つは JavaScript です。もともと「膝の上で」作成されたこの言語は、今日ではまさに解釈という概念のおかげで何十億ものデバイスで動作します。

インターネットを変えた 10 日間

JavaScript の歴史には伝説がたくさんあります。 1995 年、ネットスケープ コミュニケーションズで働いていたブレンダン アイヒは、ブラウザ (Netscape Navigator) で直接実行して Web ページをインタラクティブにする簡単なスクリプト言語を作成するという任務を与えられました。経営陣は、当時非常に人気があった Java に似た構文を持つものを望んでいましたが、プロのエンジニアではなく、Web デザイナーを対象としていました。

Eich がこの言語の最初のプロトタイプを書くのにわずか 10 日しかありませんでした。この言語は当時 Mocha と呼ばれていました (その後 LiveScript になり、マーケティング上の理由から JavaScript のみになりました)。このラッシュは偶然ではありませんでした。Microsoft はそれに熱心に追随しており、同時に Internet Explorer ブラウザに埋め込むための独自のスクリプト言語VBScript を積極的に準備していました。 Netscape は、迫り来るブラウザ戦争に負けないよう、早急に対応策を発表する必要がありました。

複雑なコンパイラをマシンコードに記述する時間がありませんでした。アイヒにとっての明白かつ最速のソリューションは、古典的なインタプリタのアーキテクチャでした。

最初のインタープリター (SpiderMonkey) は次のように機能しました:

<オル>

  • ページからスクリプトのテキスト ソース コードを読み取ります。
  • 字句アナライザーはテキストをトークンに分割しました。
  • パーサーは抽象構文ツリー (AST) を構築しました。インタプリタ パターンの観点から見ると、このツリーは終端式 (文字列、42 などの数値) と非終端式 (関数呼び出し、If や While などのステートメント) で構成されていました。
  • その後、仮想マシンはこのツリーを段階的に「走査」し、ツリーに埋め込まれた命令を各ノードで実行します (Interpret() と同様のメソッドを呼び出します)。
  • コンテキストとオブジェクト

    従来の実装では Interpret(Context context) メソッドに渡す必要があった Context オブジェクトを覚えていますか?インタプリタは現在のメモリ状態を保存するためにこれを必要とします。

    JavaScript の場合、トップレベルでのこのコンテキストの役割はグローバル オブジェクト (ブラウザのウィンドウなど) によって実行されます。 AST ノードが、たとえば document.write(“Hello”) 経由で画面にテキストを書き込もうとすると、インタプリタはそのコンテキスト (ドキュメント オブジェクト) にアクセスし、目的の内部ブラウ​​ザ API を呼び出します。

    JavaScript が DOM (ドキュメント オブジェクト モデル) と簡単にやり取りできるのは、インタープリタのおかげです。これらはすべて、ツリー ノードによってアクセスされるコンテキスト内の単なるオブジェクトです。

    インタプリタの進化: JIT コンパイル

    歴史的に、ブラウザの JS は長い間「純粋な」インタープリタであり続けてきました。そして、これには速度が遅いという大きな欠点がありました。スクリプトが実行されるたびにツリーを解析し、各ノードをゆっくりと走査すると、複雑な Web アプリケーションの速度が低下しました。

    2008 年の Google の V8 エンジン (Chrome に組み込まれている) の登場により、革命が起こりました。エンジニアは、現代の Web には 1 人のインタプリタでは不十分であることに気づきました。エンジンはより複雑になりました。引き続き AST ツリーを構築しますが、JIT (ジャストインタイム) コンパイルを使用するようになりました。

    最新の JS エンジン (V8、SpiderMonkey) は、複雑なパイプラインのように動作します。

    <オル>

  • 高速かつダムなベース インタープリターは、コンパイルを待つことなく、即座に JS コードの実行を開始します (ここでも古典的なパターンが機能します)。
  • 並行して、エンジンはコードの「ホット」セクション(何千回も呼び出されるループまたは関数)を監視します。
  • これらのセクションは、遅いインタープリタをバイパスし、JIT コンパイラによって最適化されたマシンコードに直接コンパイルされます。
  • インタプリタの即時起動とコンパイルの計算能力の組み合わせにより、JavaScript は世界を席巻し、サーバー (Node.js) やモバイル アプリケーション (React Native) の言語になりました。

    ゲーム業界の通訳

    ヘビー コンピューティングでは C++ が優勢ですが、インタプリタ パターンはゲーム開発におけるゲーム ロジック作成の業界標準です。何のために?これにより、ゲーム デザイナーはエンジンを「ドロップ」するリスクやエンジンを常に再コンパイルする必要がなく、ゲームを作成できます。

    歴史的な優れた例は、UnrealScript です。これは、Unreal Championship および Gears of War ゲームのロジックが Unreal Engine 1、2、3 で記述された言語です。テキストはコンパクトな抽象マシン バイトコードにコンパイルされ、エンジンの仮想マシンによって段階的に (解釈) されます。

    ビジュアル グラフ スクリプト (ブループリント)

    現在、テキストはビジュアル プログラミング、つまり Unreal Engine 4 および 5 のブループリント システムに置き換えられています。

    Unreal Engine でブループリントを開いたことがあれば、多くのノードがワイヤで接続されているのを見たことがあるでしょう。アーキテクチャ的には、ブループリント グラフ全体が画面上に描画される巨大な抽象構文ツリー (AST) です

    <オル>

  • ターミナル式: 定数ノード。たとえば、単純に数字 42 または文字列を格納するノードです。解釈されると特定の値を返します。
  • 非端末式: 計算ノード (追加) またはフロー制御ノード (分岐)。これらには引数入力があり、インタープリタは結果を出力ピンとして生成する前に、最初に再帰的に評価します。
  • ここでのコンテキストの役割は、特定のゲーム オブジェクト (アクター) のインスタンスのメモリによって果たされます。インタプリタ マシンはこのグラフ内を安全に「ウォーク」し、データをリクエストして遷移を実行します。

    インタープリタは他にどこで使用されますか?

    インタプリタ パターンは、動的な命令を実行する必要があるほとんどすべての複雑なシステムに見られます。以下に商用ソフトウェアの例をいくつか示します。

    • インタープリタ型プログラミング言語 (Python、Ruby、PHP)。 ランタイム全体は古典的なパターンに基づいています。たとえば、CPython リファレンス実装では、まず .py スクリプトを AST に解析し、バイトコードにコンパイルしてから、巨大な仮想マシン (コンピューティング ループ) がそのバイトコードを段階的に解釈します。
    • Java 仮想マシン (JVM)。 最初、Java コードは機械語命令ではなくバイトコードにコンパイルされます。アプリケーションを実行すると、JVM はインタープリターとして機能します (ただし、V8 と同様に積極的な JIT コンパイルが行われます)。
    • データベースと SQL PostgreSQL または MySQL で SQL クエリ (SELECT * FROM ユーザー) を発行すると、データベース エンジンがインタープリタとして機能します。字句解析を実行し、AST クエリ ツリーを構築し、実行プランを生成して、テーブルの行を反復処理することでこのプランを文字通り「解釈」します。
    • 正規表現 (RegEx)。 正規表現エンジンは内部で文字列パターン (^\d{3}-\d{2}$ など) を解析して状態グラフ (NFA/DFA オートマトン) にし、内部インタープリタがそれを通過させて、各入力文字をこのグラフの頂点と照合します。
    • Unity シェーダー グラフ / アンリアル マテリアル エディタ – ビジュアル ノードをモジュラー シェーダー コード (GLSL/HLSL) に解釈します。
    • Blender ジオメトリ ノード – 数学的および幾何学的演算を解釈して、リアルタイムで手続き的に 3D モデルを生成します。

    合計

    Interpreter パターンは、「独自の計算機を作成する」という範囲をはるかに超えています。これは最も強力な業界標準です。毎日ブラウザの舞台裏でギガバイトのコードを実行する JavaScript エンジンから、C++ の知識がなくても複雑なロジックを構築できるゲーム デザイナーに至るまで、インタプリタは依然として現代の IT 開発において最も重要なアーキテクチャ概念の 1 つです。

    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

    プロジェクトは開発を続けており、フィードバックをお待ちしております。

    フレイムスティール:デスマスク2

    薄暗く、ネオンがちらつくデジタル地下世界の深層では、新たな挑戦が待っています。私たちは、レトロなサイバーパンクの美学と現代のリアルタイム ゲームプレイを融合させたマルチプレイヤー 3D ダンジョン クローラーであるFlame Steel: Death Mask 2 の幕を引くことに興奮しています。

    🕹️ Flame Steel: Death Mask 2 とは何ですか?

    手続き的に生成された迷路で目を覚ますと、すべての影が別のプレイヤーまたは敵対的な「フィルター」エンティティである可能性があることを想像してください。 Flame Steel: Death Mask 2 では、あなたはシーカーのブーツに履き替えられ、Flame Steel Engine 2 と Three.js で構築された世界をナビゲートします。

    このゲームは現在開発の初期段階にありますが、核となるエクスペリエンスはすでに稼働しており、探索する準備ができています。

    🚀 主な機能

    • マルチプレイヤー探索: グリッドにいるのはあなただけではありません。迷宮のような通路を移動しながら、他のプレイヤーをリアルタイムで確認できます。
    • プロシージャル ダンジョン: 2 つの実行は同じではありません。サーバーは謎と危険に満ちた新鮮なマップを生成します。
    • ターミナル: より「実践的な」アプローチを好む人は、統合されたコマンドライン インターフェイスを使用してシステムと直接対話でき、高度なアクションを実行したり、デバッグしたり、他の Seeker と単にチャットしたりすることができます。
    • 戦闘とサバイバル: フィルターと対戦してビットを獲得し、それらのビットを使用してチェストのロックを解除し、ステータスをアップグレードします。健康状態に注意してください。生存は保証されません。
    • レトロなサイバーパンクの美学: 古典的なサイバーパンク時代に敬意を表した、ハイコントラストのビジュアルとザラザラとした雰囲気

    🛠️ マスクの背後にあるテクノロジー

    ブラウザ用に構築されたこのゲームは、以下を利用します。

    • フロントエンド: スムーズな 3D レンダリングのためのバニラ JavaScript と Three.js。
    • バックエンド: Node.js と WebSocket (ws) による超高速マルチプレイヤー同期
    • インフラストラクチャ: データの永続化には MongoDB、リアルタイムの空間インデックス作成には Redis。

    🗺️ 次は何ですか?

    まだ始まったばかりです。早期アクセス プロジェクトとして、デスマスク 2 は次のような更新を頻繁に受け取ります。

    • 新しいエンティティ タイプと複雑な戦闘メカニズム
    • より深い伝承と環境に関するストーリーテリング
    • ターミナル コマンドとソーシャル機能の強化
    • ビジュアルとパフォーマンスを磨き上げる

    🔗 グリッドに参加しましょう

    自分の勇気を試してみませんか?コードネームを入力して、今すぐ ID を初期化してください。

    👉 Flame Steel: Death Mask 2 をプレイ

    私たちはデジタルフロンティアを拡大し続けるため、さらなる最新情報にご期待ください。サービスへようこそ。それにはあなたが必要です。

    ウシュキ ラジオ Google Play

    Ushki-Radio は、シンプルさと聴く楽しさに重点を置いて作られた、オンライン ラジオ用のクロスプラットフォーム ラジオ プレーヤーです。不要な機能やオーバーロードされたインターフェイスはなく、電源を入れて聞くだけです。

    Google Play でのリリース:

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

    ウシュキラジオ

    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

    カバー

    Coverser – LLM を使用したインテリジェントなプロセス オブザーバー

    Coverseer は、プロセスをインテリジェントに監視し、自動的に再起動するための Python CLI ツールです。従来のウォッチドッグ ソリューションとは異なり、LLM モデルを使用してアプリケーションのテキスト出力を分析し、終了コードだけでなくコンテキストに基づいて決定を行います。

    このプロジェクトはオープンソースであり、GitHub で入手できます。
    https://github.com/demensdeum/coverseer

    カバーサーとは

    Coverseer は、指定されたプロセスを開始し、その stdout と stderr を継続的に監視し、出力の最新のチャンクを (Ollama 経由で) ローカル LLM に供給し、プロセスが正しい実行状態にあるかどうかを判断します。

    モデルがエラー、フリーズ、または不正な動作を検出した場合、Coverseer はプロセスを自動的に終了し、再度プロセスを開始します。

    主な機能

    • 出力のコンテキスト分析 – 終了コードをチェックする代わりに、LLM を使用してログ分析が使用されます
    • 自動再起動 – 問題または異常終了が検出されるとプロセスが再起動されます
    • ローカル モデルの操作 – データを外部サービスに転送せずに、Ollama を使用します
    • 詳細なログ – すべてのアクションと決定が後続の診断のために記録されます
    • スタンドアロン実行 – 単一の実行可能ファイル (.exe など) にパッケージ化できます

    仕組み

    <オル>

  • Coverser は CLI 経由で渡されたコマンドを実行します
  • プロセスからのテキスト出力を収集してバッファリングします
  • 最後の行を LLM モデルに送信します
  • プロセス状態のセマンティック評価を取得します
  • 必要に応じて、プロセスを終了して再起動します
  • このアプローチにより、標準の監視ツールでは検出できない問題を特定できます。

    要件

    • Python 3.12 以降
    • Ollama がインストールされ実行中
    • ロードされたモデル gemma3:4b-it-qat
    • Python の依存関係: リクエストollama-call

    使用例

    <コード>
    python coverseer.py “ここにコマンドを入力してください”

    たとえば、Ollama モデルのロードを観察すると、次のようになります。

    <コード>
    python coverseer.py “ollama pull gemma3:4b-it-qat”

    Coverers はコマンド出力を分析し、失敗やエラーに自動的に対応します。

    実際の応用

    Coverers は、標準のスーパーバイザ メカニズムが不十分なシナリオで特に役立ちます。

    • CI/CD パイプラインと自動ビルド
    • バックグラウンド サービスとエージェント
    • 実験的または不安定なプロセス
    • 大量のテキスト ログを含むツール
    • 自己修復が重要な開発環境

    LLM アプローチがより効果的である理由

    従来の監視システムは症状に対応します。 Coverser は行動を分析します。 LLM モデルは、プロセスが形式的に動作し続けている場合でも、エラー、警告、繰り返される障害、論理的な行き詰まりを認識できます。

    これにより、監視がより正確になり、誤警報の数が減少します。

    結論

    Coverseer は、DevOps および自動化タスクにおける LLM の実際的な応用例です。これは、プロセス監視の従来の理解を拡張し、よりインテリジェントなコンテキストベースのアプローチを提供します。

    このプロジェクトは、AI ツールを実験し、インフラストラクチャを複雑にすることなくシステムの安定性を向上させる方法を探している開発者にとって特に興味深いものとなるでしょう。

    フレームスチール: マーズマイナーズ

    Flame Steel: Mars Miners は、異常なペースと反射神経よりも意思決定に重点を置いた戦術的戦略ゲームです。このゲームは火星で行われ、プレイヤーは限られた情報とライバルからの絶え間ない圧力に直面しながら、資源と領土の支配をめぐって競い合います。

    ゲームプレイは、遠征のインフラを形成するハブ ステーションの建設に基づいています。ノードを使用すると、リソースを抽出し、影響範囲を拡大し、兵站を構築できます。すべての配置が重要です。1 つのミスが敵の主要セクターへの道を開いたり、戦略的優位性を奪ったりする可能性があります。

    ゲームのリズムは意図的にコントロールされており、激しいものです。これはチェス、囲碁、海戦の中間のようなものです。ここでは位置取り、相手の行動の予測、そして不確実性を扱う能力が重要です。マップの一部と敵の意図は隠されたままなので、成功は計算だけでなく状況の読み取りに依存します。

    Flame Steel: Mars Miners はオンライン プレイをサポートしており、それが各ゲームをユニークなものにしています。戦略は進化し、メタは現在形成されています。このゲームは開発の初期段階にあり、これがこのゲームの強みです。プレイヤーには、最初に新しい非標準プロジェクトに飛び込み、その開発に影響を与え、ジャンルの通常のテンプレートをコピーしないメカニズムを発見する機会があります。

    深み、実験的なデザイン、思考力を重視した戦術ゲームに興味があるなら、Flame Steel: Mars Miners を今すぐチェックする価値があります。

    ゲームルール

    * プレイフィールドは、プレイヤーがオブジェクトを 1 つずつ配置するセルで構成されます。各ターン、プレイヤーは 1 つの建設アクションを実行できます。

    * ハブ ステーションと鉱山の 2 種類のオブジェクトのみを建設できます。あらゆる構築は、既存のプレイヤー ノードの垂直方向または水平方向に隣接する 1 つのフリー セル上でのみ可能です。斜めに配置することはできません。

    * ハブステーションはテリトリーコントロールの基礎を形成し、拡張ポイントとして機能します。地雷は同じルールに従って配置されますが、リソース オブジェクトとしてカウントされ、パーティーの最終結果に直接影響します。

    * プレイヤーが自分のノードステーションを縦または横に連続したラインを構築すると、そのラインは自動的に武器に変わります。この武器により、敵を攻撃し、インフラを破壊することが可能になります。

    * 銃を発砲するには、プレイヤーは自分の銃に属する 1 つのセルを選択し、フィールド上の任意の敵ノード ステーションをポイントします。選択した敵ノードステーションは破壊され、プレイフィールドから削除されます。地雷を直接攻撃することはできません。地雷へのアクセスを提供するノードを破壊することによってのみ可能です。

    ※ゲームは設定されたゲーム終了まで継続します。勝者は、現時点で競技場上に最も多くのリソース鉱山を持っているプレーヤーです。互角の場合は、縄張り制圧やゲームモードによる追加条件が決め手となる場合がある。

    https://mediumdemens.vps.webdock.cloud/mars-miners

    反重力

    数日で、Antigravity の助けを借りて、Masonry-AR バックエンドを PHP + MySQL から Node.js + MongoDB + Redis -> Docker に移行しました。 AI の機能は本当に驚くべきもので、2022 年に ChatGPT 経由で shadertoy.com で最も単純なシェーダーを作成したときのことを覚えていますが、このおもちゃではそれ以上のことはできないように思えました。
    https://www.shadertoy.com/view/cs2SWm

    4 年後、私は、約 10 回のプロンプトで、プロジェクトをあるバック プラットフォームから別のプラットフォームに簡単に移行し、コンテナ化を追加する様子を観察しました。
    https://mediumdemens.vps.webdock.cloud/masonry-ar/

    かっこいい、本当にかっこいい。

    カバンボード

    KabanBoard は、カンバン形式でタスクを管理するためのオープンソース Web アプリケーションです。このプロジェクトは、シンプルさ、理解しやすいアーキテクチャ、およびチームまたは個々の開発者の特定のタスクに合わせた変更の可能性に焦点を当てています。

    このソリューションは、小規模プロジェクト、内部チーム プロセス、またはサードパーティの SaaS サービスに縛られない独自の製品の基盤として適しています。

    プロジェクト リポジトリは GitHub で入手できます。
    https://github.com/demensdeum/KabanBoard

    主な機能

    KabanBoard は、カンバン ボードを操作するための基本的かつ実用的な関数セットを実装しています。

    • さまざまなプロジェクトに複数のボードを作成する
    • タスクのステータスを含む列構造
    • 編集および削除できるタスク カード
    • 列間でのタスクの移動 (ドラッグ アンド ドロップ)
    • カードの色分け
    • ダークインターフェーステーマ

    機能は過負荷ではなく、タスクを伴う日常的な作業に重点を置いています。

    使用されているテクノロジー

    プロジェクトは、共通でわかりやすいスタックに基づいて構築されています。

    • フロントエンド:Vue 3、Vite
    • バックエンド: Node.js、Express
    • データ ストレージ: MongoDB

    クライアント部分とサーバー部分が分離されているため、プロジェクトのサポートとさらなる開発が簡素化されます。

    プロジェクトの展開

    ローカルで実行するには、標準環境が必要です。

    • Node.js
    • MongoDB (ローカルまたはクラウド経由)

    プロジェクトは、npm を介して通常モードで起動することも、Docker を使用して起動することもできます。これは、テスト環境または内部環境での迅速なデプロイメントに便利です。

    実際の応用

    KabanBoard はさまざまなシナリオで使用できます。

    • 社内タスク管理ツール
    • カスタム カンバン ソリューションの基礎
    • SPA アーキテクチャを学ぶためのトレーニング プロジェクト
    • 重要なプロジェクトまたはポートフォリオの開始点

    結論

    KabanBoard は、カンバン ボードを操作するための洗練された実用的なソリューションです。このプロジェクトは大企業システムを置き換えるものではありませんが、小規模チーム、個人での使用、特定のタスクのさらなる開発に適しています。

    ゴフィス

    Gofis は、ファイル システム内のファイルを迅速に検索するための軽量のコマンド ライン ツールです。
    Go で書かれており、並列処理 (ゴルーチン) を多用しているため、特に効率的です。
    大規模なディレクトリやプロジェクトを操作する場合。

    プロジェクトは GitHub で入手できます。
    https://github.com/demensdeum/gofis

    🧠 Gofis とは

    Gofis は、名前、拡張子、または正規表現でファイルを検索するための CLI ユーティリティです。
    find のような古典的なツールとは異なり、gofis は独自に設計されました
    速度、読みやすい出力、およびディレクトリの並列処理に重点を置いています。

    プロジェクトは MIT ライセンスに基づいて配布されており、自由に使用できます
    個人的および商用目的。

    ⚙️ 主な機能

    • ゴルーチンを使用した並列ディレクトリ トラバーサル
    • ファイル名と正規表現で検索
    • 拡張子によるフィルタリング
    • 重いディレクトリ (.git、node_modules、vendor) を無視する
    • 人間が判読できるファイル サイズの出力
    • 最小限の依存関係と高速なビルド

    🚀 インストール

    動作するには Go がインストールされている必要があります。

    git clone https://github.com/demensdeum/gofis
    cd gofis
    go build -o gofis main.go
    

    ビルドしたら、バイナリを直接使用できます。

    リリース ページには、Windows の最新バージョン用のスタンドアロン バージョンもあります。
    https://github.com/demensdeum/gofis/releases/

    🔍 使用例

    ファイルを名前で検索します。

    ./gofis -n "config" -e ".yaml" -p ./src
    

    クイック位置検索:

    ./gofis "main" "./projects" 50
    

    正規表現を使用して検索します。

    ./gofis "^.*\.ini$" "/"
    

    🧩 仕組み

    Gofis は Go の競争モデルに基づいています。

    • 各ディレクトリは個別の goroutine で処理されます
    • セマフォを使用してアクティブなタスクの数を制限します
    • チャネルは検索結果の送信に使用されます

    このアプローチにより、CPU リソースを効率的に使用できます。
    また、大きなファイル ツリーの検索が大幅に高速化されます。

    👨‍💻 Gofis は誰に適していますか?

    • 大規模なリポジトリを扱う開発者
    • DevOps およびシステム管理者
    • 端末から簡単に検索する必要があるユーザー
    • Go での同時実行性の実践的な使用法を学習している人向け

    📌 結論

    Gofis は、1 つのことをうまく実行できる、シンプルですが効果的なツールです。
    大規模なプロジェクトでファイルを頻繁に検索し、速度を重視する場合は、
    この CLI ツールは一見の価値があります。

    オラマコール

    Ollama を使用していて、毎回独自の API ラッパーを作成したくない場合は、
    ollama_call プロジェクトにより、作業が大幅に簡素化されます。

    これは、1 つの関数でローカル LLM にリクエストを送信できる小さな Python ライブラリです。
    JSON 形式などの応答をすぐに受け取ります。

    インストール

    pip install ollama-call
    

    なぜ必要なのか

    • モデルを操作するための最小限のコード;
    • さらなる処理のための構造化された JSON レスポンス;
    • ラピッドプロトタイプや MVP に便利です。
    • 必要に応じてストリーミング出力をサポートします。

    使用例

    from ollama_call import ollama_call
    
    response = ollama_call(
        user_prompt="Hello, how are you?",
        format="json",
        model="gemma3:12b"
    )
    
    print(response)
    

    特に役立つ場合

    • Ollama 上でスクリプトまたはサービスを作成します。
    • 予測可能な応答形式が必要です。
    • 重いフレームワークを接続する必要はありません。

    合計

    ollama_call は、Python から Ollama を操作するための軽量で明確なラッパーです。
    シンプルさと迅速な結果が重要な場合に適した選択です。

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

    SFAP: 最新のデータ取得と処理のためのモジュール式フレームワーク

    自動化と人工知能の積極的な開発の文脈において、効果的に収集するタスクは、
    データのクリーニングと変換が重要になります。ほとんどのソリューションは閉じるだけです
    このプロセスの別々の段階では、複雑な統合とサポートが必要になります。

    SFAP (シーク・フィルター・適応・公開) は、Python のオープンソース プロジェクトです。
    これは、ライフサイクルのすべての段階でデータを処理するための総合的かつ拡張可能なアプローチを提供します。
    ソースの検索から完成した結果の公開まで。

    SFAP とは

    SFAP は、データ処理パイプラインの明確な概念に基づいて構築された非同期フレームワークです。
    各ステージは論理的に分離されており、独立して拡張または置換できます。

    このプロジェクトは責任連鎖アーキテクチャ パターンに基づいており、次の機能が提供されます。

    • パイプライン構成の柔軟性
    • 個々のステージの簡単なテスト
    • 高負荷に対するスケーラビリティ
    • コンポーネント間の責任を明確に分離する

    パイプラインの主なステージ

    シーク – データ検索

    この段階では、Web ページ、API、ファイル ストレージなどのデータ ソースが検出されます。
    または他の情報の流れ。 SFAP により、変更せずに新しいソースに簡単に接続できます
    システムの残りの部分。

    フィルタ – フィルタリング

    フィルタリングは、無関係なコンテンツ、重複、技術的要素などのノイズを除去するように設計されています。
    そして低品質のデータ。これは後続の処理ステップにとって重要です。

    適応 – 適応と処理

    適応ステージは、正規化、構造化、データ変換などのデータ変換を担当します。
    セマンティック処理と AI モデル (生成モデルを含む) との統合。

    発行 – 出版

    最終段階では、データはデータベース、API、ファイル、外部サービスなどのターゲット形式で公開されます。
    またはコンテンツプラットフォーム。 SFAP は、結果の配信方法を制限しません。

    プロジェクトの主な特徴

    • asyncio に基づく非同期アーキテクチャ
    • モジュール性と拡張性
    • 複雑な処理パイプラインのサポート
    • AI/LLM ソリューションとの統合の準備ができている
    • 高負荷のシステムに適しています

    実際の使用例

    • ニュースソースの集約と分析
    • 機械学習用のデータセットを準備する
    • 自動化されたコンテンツ パイプライン
    • 大規模なデータ ストリームのクレンジングと正規化
    • 異種ソースからのデータの統合

    SFAP を使ってみる

    始めるために必要なのは次のとおりです。

    <オル>

  • プロジェクト リポジトリのクローンを作成します。
  • Python の依存関係をインストールします。
  • 独自のパイプライン ステップを定義します。
  • 非同期データ処理プロセスを開始します。
  • プロジェクトは特定のビジネス タスクに簡単に適応でき、システムとともに成長することができます。
    一枚岩にならずに。

    結論

    SFAP は単なるパーサーやデータ コレクターではなく、構築のための本格的なフレームワークです。
    最新のデータ パイプライン システム。を重視する開発者やチームに適しています。
    スケーラブルで、アーキテクチャ的にクリーンで、データ対応が可能です。
    プロジェクトのソース コードは GitHub で入手できます。
    https://github.com/demensdeum/SFAP

    FlutDataStream

    デバイス間の高速データ ストリーミングのために、あらゆるファイルを機械可読コードのシーケンス (QR および DataMatrix) に変換する Flutter アプリ。

    特徴
    * デュアル エンコーディング: 各データ ブロックを QR コードと DataMatrix コードの両方として表します。
    *高速ストリーミング: 最大 330ms の自動切り替え間隔をサポートします。
    * スマート チャンク: ファイルをカスタム チャンクに自動的に分割します (デフォルト: 512 バイト)。
    * 詳細スキャナ: デバッグと即時フィードバックのためにリアルタイムで ASCII コードを読み取ります。
    * 自動回復: ファイルを即座に回復し、ダウンロード ディレクトリに保存します。
    * システム統合: 完了後、デフォルトのシステム アプリケーションを使用して保存されたファイルを自動的に開きます。

    https://github.com/demensdeum/FlutDataStream

    なぜバグを修正できないのですか?

    コードの作業に何時間も費やし、仮説を検討し、条件を調整しても、バグは依然として再現されます。おなじみですね?この欲求不満の状態は「ゴーストハンティング」と呼ばれることがあります。プログラムは、あなたの修正を無視して、独自の生活を送っているようです。

    この状況の最も一般的な、そして最も迷惑な理由の 1 つは、アプリケーション内のまったく間違った場所でエラーを探していることです。

    「偽症状」の罠

    エラーを見つけると、エラーが「発生」した場所に注意が集まります。しかし、複雑なシステムでは、バグ (クラッシュまたは不正な値) が発生しても、それは長い一連のイベントの終わりにすぎません。結末を修正しようとすると、病気ではなく症状と闘うことになります。

    ここでフローチャートの概念が登場します。

    実際にどのように機能するか

    もちろん毎回紙にフローチャートを直接書く(描画する) 必要はありませんが、アーキテクチャのガイドとして頭の中に入れておくか、手元に置いておくことが重要です。フローチャートを使用すると、アプリケーションの操作を結果のツリーとして視覚化できます。

    この構造を理解していないと、開発者はしばしば暗中模索になります。状況を想像してみてください。1 つの条件ブランチでロジックを編集している間に、アプリケーションは (特定のパラメータのセットにより) 考えもしなかったまったく別のブランチに移動します。

    <ブロック引用>
    結果: アルゴリズムの一部で「完璧な」コード修正に何時間も費やしましたが、当然のことながら、アルゴリズムの別の部分で実際に失敗した問題は何も修正されません。


    バグを克服するためのアルゴリズム

    閉ざされたドアを叩くのをやめるには、診断のアプローチを変える必要があります。

    • 結果ツリーで状態を見つける:コードを記述する前に、アプリケーションがたどったパスを正確に判断する必要があります。どの時点で論理が間違った方向に進んだのでしょうか?問題の原因となった特定の状態 (状態) は何ですか?
    • 再現は成功の 80% です: これは通常、テスターと自動テストによって行われます。バグが「浮遊」している場合、開発は条件を共同で検索するプロセスに関与します。
    • できるだけ多くの情報を使用する: ローカリゼーションには、ログ、OS バージョン、デバイス パラメータ、接続タイプ (Wi-Fi/5G)、さらには特定の通信事業者さえも重要です。

    エラーの瞬間を捉えた「写真」

    理想的には、バグを修正するには、バグが再現された時点のアプリケーションの完全な状態を取得する必要があります。インタラクション ログも非常に重要です。インタラクション ログには、最終ポイントだけでなく、ユーザー パス全体 (障害が発生する前にどのようなアクションが行われたか) も示されます。これは、同様の状態を再度作成する方法を理解するのに役立ちます。

    今後のヒント: 複雑なケースが発生した場合は、その状況が再び発生した場合に備えて、コードのこのセクションに拡張デバッグ ログ情報を追加してください。


    AI 時代の「とらえどころのない」状態の問題

    LLM (大規模言語モデル) を使用する最新のシステムでは、古典的な決定論 (「1 つの入力、1 つの出力」) が違反されることがよくあります。まったく同じ入力データを渡しても、異なる結果が得られます。

    これは現代の運用システムの非決定性が原因で発生します。

    • GPU 並列処理: GPU 浮動小数点演算は常に結合的であるとは限りません。スレッドの並列実行により、数値の加算順序が若干変更される可能性があり、結果に影響を与える可能性があります。
    • GPU の温度とスロットル: 実行速度と負荷分散は、ハードウェアの物理的状態に依存する場合があります。大規模なモデルでは、こうした微細な違いが蓄積され、出力時に異なるトークンが選択される可能性があります。
    • 動的バッチ処理: クラウドでは、リクエストが他のリクエストと結合されます。バッチサイズが異なると、カーネルでの計算の計算が変わります。

    このような状況では、「同じ状態」を再現することはほぼ不可能になります。ここであなたを救うことができるのは、テストへの統計的アプローチのみです。


    ロジックが失敗した場合: メモリの問題

    「安全でない」言語 (C または C++) を使用している場合、メモリ破損が原因でバグが発生する可能性があります。

    これらは最も深刻なケースです。1 つのモジュールでエラーが発生すると、別のモジュールのデータが「上書き」される可能性があります。これにより、通常のアプリケーション ロジックを使用して追跡できない、完全に説明不可能な孤立した障害が発生します。

    アーキテクチャ レベルで身を守るにはどうすればよいですか?

    このような「謎の」バグを回避するには、最新のアプローチを使用する必要があります。

    • マルチスレッド プログラミング パターン:明確な同期により競合状態が排除されます。
    • スレッドセーフな言語: コンパイル時にメモリの安全性を保証するツール:
      • Rust: 所有権システムによりメモリ エラーが排除されます。
      • Swift 6 同時実行性:強力なデータ分離チェック。
      • Erlang: アクター モデルを通じてプロセスを完全に分離します。

    概要

    バグを修正するということは、新しいコードを書くことではなく、古いコードがどのように機能するかを理解することです。管理者が触れてもいないブランチを編集するのは時間を無駄にする可能性があることを覚えておいてください。システムの状態を記録し、AI の非決定性の要素を考慮して、安全なツールを選択します。

    フェラル

    Ferral は、大規模言語モデル (LLM) からコードを生成するために特別に設計された高レベルのマルチパラダイム プログラミング言語です。従来の言語は人間工学を念頭に置いて設計されていましたが、Ferral は大規模言語モデル (LLM) が論理を推論、トークン化し、推論する方法に最適化されています。

    名前は 2 つの R で綴られており、AI によって生成されたコードの予測不可能な性質に対する「再考された」アプローチを示しています。

    https://github.com/demensdeum/ferral

    ドリーチャット

    DoryChat は、保持ゼロのアーキテクチャ モデルに基づいて構築された、安全で永続的なインスタント メッセージング プラットフォームです。メッセージは一時的にエンドツーエンドで暗号化され、60 秒後に自動的に削除されるため、中央インフラストラクチャに会話の痕跡は残りません。

    https://github.com/demensdeum/DoryChat
    https://mediumdemens.vps.webdock.cloud/dorychat-app

    DemensDeum コーディング チャレンジ #2

    Demensdeum コーディング チャレンジ #2 を開始します。
    1. ユーザーエリア内のパーティー/イベントのリストを表示するには、Web アプリケーションをバイブコーディングする必要があります。
    2. データ ソースは、フロントからの Web スクレイピング、またはローカル/リモート データベースです。
    3. 今日のイベント/パーティーのみを地図上に表示します。
    4. 検索範囲を変更できます。
    5. Google AI Studio などの無料のコード ジェネレーターで再現できる一連のテキスト プロンプトとして送信します。
    6. iOS、Android、PC の Web 上で動作する必要があります
    7. 最も優れたデザインが勝利を収める
    8. 地図上のイベントをタップすると、イベントの詳細情報が表示されます。
    9. 指またはマウスを使用してマップをズームします。
    10. 勝者は陪審によって選ばれます (陪審に参加するには私に手紙を書いてください)
    11. 賞品 200 USDT
    12. 期限: 7 月 1 日。

    過去の DemensDeum コーディング チャレンジ #1 の優勝者
    https://demensdeum.com/blog/ru/2025/06/03/demensdeum-code-challenge-1-winner/

    石積み-AR アップデート

    暗号通貨のコインを購入する機能が Masonry-AR ゲームに追加されました。 1 ドルで 5000 MOS を入手できます。紹介リンクもゲームに追加されました。友人が購入するたびに、紹介者は 50,000 MOS を受け取ります。詳細はフリーメーソンWikiにあります。自動歩行モードも追加されました。GPS モジュールにアクセスできない場合、メイソンは世界の首都の 1 つから前方にのみ自動的に歩き始めます。

    ゲームリンク:
    https://demensdeum.com/demos/masonry-ar/client/

    ロバの達人

    「Donkey Adept」は、ピクセル化されたシュールレアリスムの驚くべき、しびれるような作品です。中央には、黒い革のジャケットを着た人物がいます。その頭は、燃えるようなロバの耳を持ち、静電気が発生する燃えるテレビです。被験者は強力なランタンを持ち、騒音の中で真実を探求する孤独な番兵として行動します。それは、メディア、狂気、そして光の絶え間ない探求についての猛烈なレトロスタイルの瞑想です。

    https://opensea.io/item/ethereum/0x008d50b3b9af49154d6387ac748855a3c62bf40d/5

    キューブアートプロジェクト2オンライン

    Cube Art Project 2をオンラインで満たす – ブラウザで直接動作するステーションスケジュールの軽量、高速、完全に書き直されたエディター。今、共同の創造性の可能性があります!

    これは単なるツールではなく、色、ジオメトリ、瞑想的な3D作成での実験であり、友人をつなぐことができます。このプロジェクトは、純粋なJavaScriptとFrameworkとWebAssemblyのないThree.jsで作成され、WebGLとShaadersの機能を実証しました。

    新しい:マルチプレイヤー!リアルタイムで他のユーザーと協力します。すべての変更、キューブの添加、着色は即座に同期されているため、ステーションの傑作を一緒に作成できます。

    コントロール:
    -WASD-カメラを移動します
    – マウス – 回転
    -GUI-色設定

    オンライン:
    https://demensdeum.com/software/cube-art-project-2-online/

    Githubのソース:
    https://github.com/demensdeum/cube-art-project-2-online

    このプロジェクトは、Three.jsを使用して純粋なJavaScriptに書かれています。
    フレームワークなし、コレクターなし、WebAssemblyなし – WebGL、シェーダー、ピクセルジオメトリへの少しの愛のみ。

    ドンキヒルズスチーム

    Donki Hillsはコメディホラーゲームであり、最初の人のエキサイティングな物語体験であり、予期せぬユーモアの混合物でプレイヤーを深い秘密に陥れます。 DemensdeumがUnreal Engine Engineで開発および公開したこのゲームでは、普通の人であるJamesをコントロールできます。彼の唯一の手がかりは、ノボシビルスクの近くにある静かなドンキと呼ばれる人里離れたロシアの村を示唆する1つの写真です。揺るぎないつながりと答えの必死の必要性(そして、おそらくいくつかの緊張した笑いで)を運転して、ジェームズは壮大な旅に出て、メアリーの消失についての真実を明らかにします。

    ゲームはSteamで利用できます:
    https://store.steampowered.com/app/3476390/Donki_Hills/

    プログラミングのエントロピー

    [補完]

    プログラミングのエントロピーは強力であるが、しばしば目立たない力であり、ソフトウェアの動作の変動性と予測不可能性を決定します。単純なバグから複雑なおじいちゃんまで、エントロピーは、私たちのプログラムが予想通り常に動作するとは限らない理由です。

    ソフトウェアのエントロピーとは何ですか?

    ソフトウェアのエントロピーは、アルゴリズムの予期しない結果の尺度です。ユーザーは1STTIの結果をエラーまたはバグとして認識しますが、マシンの観点から見ると、アルゴリズムはプログラマーが敷設した命令を正確に実行します。入力データ、システム条件、および相互作用の膨大な数の可能な組み合わせにより、予期しない動作が発生します。

    エントロピーの原因:

    *状態の変更:オブジェクトが内部データを変更できる場合、その作業の結果は、その使用の履歴全体に依存します。

    *アルゴリズムの複雑さ:プログラムが成長するにつれて、コードを実行する可能性のある方法の数が指数関数的に増加し、すべての結果の予測がほとんど不可能になります。

    *外部要因:オペレーティングシステム、その他のプログラム、ネットワーク遅延 – これはすべて、コードの実行に影響を与え、追加の変動ソースを作成します。

    エントロピーの原因:

    *状態の変更:オブジェクトが内部データを変更できる場合、その作業の結果は、その使用の履歴全体に依存します。

    *アルゴリズムの複雑さ:プログラムが成長するにつれて、コードを実行する可能性のある方法の数が指数関数的に増加し、すべての結果の予測がほとんど不可能になります。

    *外部要因:オペレーティングシステム、その他のプログラム、ネットワーク遅延 – これはすべて、コードの実行に影響を与え、追加の変動ソースを作成します。

    エントロピーの原因としてのグローバル変数

    彼の作品では、「Global Varia Byblesは有害なものと見なされます」(1973)W.A。W.A。WulfとM. Shawは、グローバル変数が予測不可能な行動の主な原因の1つであることを示しました。それらは、エントロピーの古典的な症状である追跡と制御が困難な暗黙の中毒と副作用を生み出します。

    レマンとエントロピーの法則

    ソフトウェアシステムの複雑さを高めるというアイデアは、ソフトウェアの進化の法則においてマニー・レマンを完全に策定しました。それらの2つはエントロピーの概念を直接反映しています。

    使用されるコンピュータープログラムは変更されます。このステートメントは、ソフトウェアが静的ではないことを示唆しています。新しい要件と環境を満たすために、それは生き、開発、変更されます。プログラムの寿命の新しい「ラウンド」は、エントロピーの潜在的な源です。

    コンピュータープログラムが変更されると、誰もこれを防止しない限り、その複雑さが増加します。この法律は、エントロピーの直接的な結果です。ターゲットを絞った複雑さ管理の取り組みがなければ、新しい変更はそれぞれ、システムに追加の変動と予測不可能性をもたらします。バグや解放されていない行動の可能性を高める新しい依存関係、条件、副作用があります。

    AIおよびLLMの世界におけるエントロピー:予測不可能なコード

    人工知能モデル(LLM)の分野では、エントロピーは特に急性です。ここでは、非メトナムアルゴリズムを扱っているためです。同じアクセスが常に同じ方法を提供する従来のプログラムとは異なり、LLMは同じ要求に対して異なる答えを出すことができます。

    これにより大きな問題が生じます。アルゴリズムの正確性は、著者を使用して特定の限られた入力データのセットでのみ確認できます。しかし、不明な入力データ(ユーザーからの要求)を使用すると、モデルの動作は予測不可能になります。

    LLM のエントロピーの例

    不一致の語彙と人種差別的な声明:インターネットからのデータをトレーニングした後、MicrosoftのTayやXIIのTayなどのチャットボットが攻撃的または人種差別的な声明を生み出し始めたときの既知のケース。これはエントロピーの結果でした。膨大な量のトレーニングサンプルと組み合わせた未知の入力データは、予測不可能で誤った動作につながりました。

    違法な控訴:このような問題は、ニューラルネットワークが著作権または倫理的規範に違反するコンテンツを発行し始めたときに発生します。

    ゲームのAI BOTA:たとえば、Fortniteで学習の可能性を伴うゲーム内のAIキャラクターの導入により、AIボットをオフにして、LLMボットからの違法行為を防ぐために、活動の正しさの追跡に追加する必要があるという事実につながりました。

    技術的債務:欠陥への関心の累積

    不十分に書かれたコードとバイパスソリューション
    技術的義務は、長期的なサポートと品質を損なうために迅速な送達を優先する意識的または無意識の妥協です。しばしば短時間で実装され、蓄積され、「地雷原」を形成する高速補正と文書化されていないバイパスソリューション。これにより、コードベースは、意図的なバイパスソリューションを実際の誤ったロジックと区別することが困難になり、予期しない回帰とエラー数の増加につながるため、コードベースが軽微な変更にも非常に敏感になります。

    これは、エラーの広がりとアルゴリズムの完全性に対する技術義務の直接的な累積的な効果を示しています。ここで、現在の削減が採用されていることは、将来より複雑で頻繁なエラーにつながります。

    不十分なテストとその累積効果

    ソフトウェアシステムが慎重にテストされていない場合、エラーや予期しない動作を受けやすくなります。この不十分さにより、エラーは時間の経過とともに蓄積し、サポートが困難でさらなるエラーの影響を受けやすいシステムを作成します。最初からテストを無視すると、技術的な負債が増加するだけでなく、エラーの数を増やすのにも役立ちます。ソフトウェアエントロピーの「壊れた窓の理論」は、取るに足らない、無視されたエラーや設計上の問題が時間とともに蓄積し、より深刻な問題につながり、ソフトウェアの品質を低下させることを示唆しています。

    これにより、直接的な因果関係が確立されます。テストの欠如はエラーの蓄積につながり、エントロピーの増加につながり、より複雑で頻繁なエラーにつながり、アルゴリズムの正確性と信頼性に直接影響します。

    ドキュメントと情報サイロの不足

    適切なドキュメントは、ソフトウェアを開発するときに無視されることがよくあり、システムの仕組みとそれをサポートする方法に関する断片化または知識の喪失につながります。これにより、開発者は変化を起こすためのシステムを「バック」するようになり、誤解の可能性を大幅に増やし、変更が誤っていることが大幅に増加し、エラーに直接つながります。また、重要な情報は利用できないか誤解を招くため、新しい開発者の適応を真剣に複雑にします。

    プログラムエントロピーは、「知識の欠如」と「一般的な仮定と既存のシステムの実際の動作との間の矛盾」のために発生します。これはより深い組織の観察です。エントロピーは、コードレベルだけでなく、知識のレベルでも現れます。これらの非公式で暗黙の知識は脆弱であり、(たとえば、チームメンバーを去るときに)簡単に失われます。これは、特にチームの新しいメンバーを変更しようとするときに直接エラーにつながり、それによって主な仮定が明確になるため、アルゴリズムロジックの完全性を危険にさらします。

    一貫性のない開発方法と所有権の喪失

    ヒューマンファクターは、ソフトウェアエントロピーの重要な、しばしば過小評価されている駆動要因です。開発者間のさまざまなスキル、コーディング、および品質の期待は、ソースコードの矛盾と逸脱につながります。糸くず、コードレビュー、テスト、ドキュメントのための標準化されたプロセスの欠如は、この問題を悪化させます。さらに、コードの不明確または不安定なコードは、いくつかのコマンドがコードの一部を所有しているか、誰も所有していない場合、無視および崩壊の増加につながり、異なる方法で同じ関数を実行するコンポーネントの重複につながり、エラーを広げます。

    これは、エントロピーが技術的な問題であるだけでなく、組織のダイナミクスと人間の行動に深く根ざした社会工学でもあることを示しています。一貫性のない慣行と断片化された所有のために生じる「集合的な矛盾」は、直接矛盾と欠陥につながり、システムを予測不可能で制御が困難にし、アルゴリズムの完全性に大きく影響します。

    相互接続されたシステムのカスケード誤動作

    最新のソフトウェアシステムはしばしば複雑で、非常に相互接続されています。このようなシステムでは、高度な複雑さと密接に関連するコンポーネントは、1つのコンポーネントの拒否が他のコンポーネントの障害の連鎖反応を引き起こすと、障害をカスケードする可能性を高めます。この現象は、アルゴリズムのエラーと不適切な動作の影響を悪化させ、ローカライズされた問題を体系的なリスクに変えます。このようなシステムのアルゴリズムの結果は、実行の直接的な経路からはほど遠い障害に対して非常に脆弱になり、結果が広く誤って誤った結果につながります。

    エントロピーの直接的な症状、アーキテクチャの複雑さは、分離されたアルゴリズムエラーを大規模なシステム障害に変換する可能性があり、一般的なシステムが信頼できなくなり、その出力データは信頼できません。これは、エントロピー効果の広がりを抑えるための建築の安定性の必要性を強調しています。

    最新の例の1つは、2024年にウイルス対策ソフトウェアを更新した後、青い死のスクリーンが登場したため、アメリカとヨーロッパの空港のよく知られている停止です。ウイルス対策アルゴリズムの誤った結果とオペレーティングシステムが世界の航空交通につながりました。

    実用的な例

    例1:ユニコードおよびバイト制限のエントロピー

    32バイトによって制限されているテキストフィールドを使用した簡単な例を見てみましょう。

    ASCII(低エントロピー)を使用したシナリオ

    フィールドがASCIIシンボルのみを受け入れる場合、各シンボルは1バイトを取ります。したがって、正確に32文字がフィールドに配置されます。他のシンボルは単に受け入れられません。

    @startuml
    ASCIIを使用したタイトルの例(低エントロピー)
    俳優ユーザー
    参加者「テキストフィールド」

    ユーザー – > Textfield:32のシンボルASCIIを紹介します
    Textfield-> Textfield:長さをチェック(32バイト)
    右に注意してください
    すべてが順調です。
    エンドノート
    テキストフィールド – >ユーザー:acceps入力
    @enduml

    UTF-8(高エントロピー)を使用したシナリオ:

    現在、彼らの80年代のプログラムは2025年に落ちます。フィールドがUTF-8を取ると、各シンボルは1〜4バイトを占有できます。ユーザーが32バイトを超えるラインを導入すると、システムは誤って削減できます。たとえば、絵文字は4バイトを占めています。シンボル内で剪定が発生した場合、「壊れた」シンボルが取得されます。

    @startuml
    UTF-8のタイトル例(高エントロピー)
    俳優ユーザー
    参加者「テキストフィールド」

    ユーザー – > Textfield:「HI」(37バイト)を紹介します
    Textfield-> Textfield:32バイトまでのラインをカットします
    右に注意してください
    突然!シンボル
    バイトでカットします。
    エンドノート
    テキストフィールド – >ユーザー:「こんにちは」を表示します
    左に注意してください
    間違ったシンボル。
    エンドノート
    @enduml

    ここで、エントロピーは、異なる入力データの同じ剪定操作が予測不可能で誤った結果につながるという事実に現れます。

    例2:CSSのエントロピーとブラウザの非互換性

    CSSなどの一見安定した技術でさえ、標準の異なる解釈のためにエントロピーが発生する可能性があります。

    開発者がユーザーエレクトを適用していると想像してください。すべての要素にテキスト出力をオフにします。

    ブラウザ10(古いロジック)

    ブラウザ10入力フィールドの例外を作成します。したがって、フラグにもかかわらず、ユーザーはデータを入力できます。

    @startuml
    タイトルブラウザ10
    俳優ユーザー
    参加者「ブラウザ10」としてブラウザ10

    ユーザー – > browser10:入力に入力します
    BROWSER10-> BROWSER10:CSSをチェックします
    右に注意してください
    -user-elect:none;
    入力は無視されます
    エンドノート
    BROWSER10->ユーザー:Enteringを許可します
    @enduml

    ブラウザ11(新しいロジック)

    新しいブラウザの開発者は、例外なくすべての要素にルールを適用して、仕様に厳密に従うことを決定しました。

    @startuml
    タイトルブラウザ11
    俳優ユーザー
    参加者「ブラウザ11」としてブラウザー11

    ユーザー – > browser11:入力の入力
    BROWSER11-> BROWSER11:CSSをチェックします
    右に注意してください
    -user-elect:none;
    入力を含むすべての要素に適用されます
    エンドノート
    BROWSER11->ユーザー:入力を拒否します
    左に注意してください
    ユーザーは何もできません
    タイプ。
    エンドノート
    @enduml

    エントロピーのこの古典的な例 – 同じルールは、「システム」(ブラウザのバージョン)に応じて異なる結果につながります。

    例3:あいまいなtkによるエントロピー

    あいまいな技術タスク(TK)は、エントロピーのもう1つの強力なソースです。ボブとアリスの2人の開発者が同じ要件をさまざまな方法で理解すると、これは互換性のない実装につながります。

    TK:「フィボナッチ数のジェネレーターを実装するには。最適化のために、生成された数字のリストはジェネレーター内で扱われなければなりません。」

    ボブのメンタルモデル(可変条件のOOP)
    ボブは「リスト… cobleめなければならない」というフレーズに焦点を合わせました。彼は、同じ状態を保存するクラス(Self.Sequence)を実装し、すべての呼び出しでそれを増やします。

        def __init__(self):
            self.sequence = [0, 1]
    
        def generate(self, n):
            if n <= len(self.sequence):
                return self.sequence
    
            while len(self.sequence) < n:
                next_num = self.sequence[-1] + self.sequence[-2]
                self.sequence.append(next_num)
    
            return self.sequence
    

    アリスのメンタルモデル(機能的アプローチ)

    アリスは「シーケンスを返す」というフレーズに焦点を合わせました。彼女は、キャッシュを内部最適化としてのみ使用して、毎回新しいリストを返す純粋な関数を書きました。

        sequence = [0, 1]
        if n <= 2:
            return sequence[:n]
    
        while len(sequence) < n:
            next_num = sequence[-1] + sequence[-2]
            sequence.append(next_num)
    
        return sequence
    

    アリスがボブジェネレーターの使用を開始すると、Generate(5)が常に5つの数字を返すことを期待しています。しかし、このボブが同じオブジェクトでGenerate(8)と呼ばれる前に、アリスは8つの数字を受け取ります。

    結論:エントロピーここでのメンタルモデルの結果です。ボブの実装における変化する状態は、アリスにとってシステムを予測不可能にし、純粋な機能の動作を待っています。

    エントロピーとマルチセットネス:人種と祖父の状態

    多注フローイングプログラミングでは、特にエントロピーが現れます。いくつかのフローが同時に実行され、その実装の手順は予測不可能です。これは、結果が共通リソースに最初にアクセスするストリームに依存する場合、人種状態につながる可能性があります。極端なケースは、2つ以上のストリームがお互いを待っているときの祖父であり、プログラムはフリーズします。

    Dedlokの解決策の例:

    Dedlokの問題は、2つ以上のストリームが互いにブロックされ、リソースのリリースを待っているときに発生します。解決策は、リソースを押収するための単一の固定手順を確立することです。たとえば、IDを増やすことでリソースをブロックします。これは、デッドロックを防ぐ循環的な期待を除外します。

    @startuml
    タイトルソリューション:統一ブロッキング手順
    参加者「ストリーム1」としてスレッド1
    参加者「ストリーム2」はスレッド2として
    参加者は「As As Acoucta」として
    参加者「アカウントB」としてアカウントB

    スレッド1-> accounta:ブロックアカウントa
    Thread1に注意してください
    ルールは次のとおりです。
    ブロックID
    エンドノート
    thread2-> accounta:アカウントを待っているaは解放されます
    スレッド2に注意してください
    ルールは次のとおりです。
    ロックを待っています
    エンドノート
    Thread1-> accountB:ブロックアカウントb
    Thread1-> accounta:アカウントを無料でa
    スレッド1-> accountB:スコアをリリースb
    Thread1に注意してください
    トランザクションが完了しました
    エンドノート
    スレッド2-> accounta:アカウントをブロックします
    Thread2-> accountB:アカウントをブロックb
    スレッド2に注意してください
    トランザクションは終了します
    エンドノート
    @enduml

    このアプローチ - 順序付けられたブロッキング(ロック順序) - は、並列プログラミングでDeadllesを防ぐための基本的な戦略です。

    素晴らしい、OOPアプローチの変更可能な状態がエントロピーを増加させる方法を分析しましょう。キャンバスに描画する例を使用して、これを純粋な機能と比較します。

    問題:状態とエントロピーの変化

    オブジェクトの状態が変化すると、その動作は予測不可能になります。同じ方法を呼び出す結果は、その議論だけでなく、このオブジェクトとの相互作用の歴史全体に依存します。これにより、エントロピーがシステムになります。

    キャンバスの長方形の描画に対する2つのアプローチを考えてみましょう。1つは可変条件を持つOOPスタイルの1つ、もう1つは純粋な関数を持つ機能です。

    1。OOPアプローチ:可変状態のクラス
    ここでは、この場合は内部状態を保存するカーソルクラスを作成します。抽選方法は、この条件を使用して長方形を描画します。

      constructor(initialColor) {
        // Внутреннее состояние объекта, которое может меняться
        this.color = initialColor;
      }
    
      // Метод для изменения состояния
      setColor(newColor) {
        this.color = newColor;
      }
    
      // Метод с побочным эффектом: он использует внутреннее состояние
      draw(ctx, rect) {
        ctx.fillStyle = this.color;
        ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
      }
    }
    
    // Использование
    const myCursor = new Cursor('red');
    const rectA = { x: 10, y: 10, width: 50, height: 50 };
    const rectB = { x: 70, y: 70, width: 50, height: 50 };
    
    myCursor.draw(ctx, rectA); // Используется начальный цвет: red
    myCursor.setColor('blue'); // Изменяем состояние курсора
    myCursor.draw(ctx, rectB); // Используется новое состояние: blue
    

    OOPアプローチのUML図:

    この図は、抽選方法の呼び出しが異なる結果をもたらすことを明確に示していますが、その引数は変わらない可能性があります。これは、オブジェクトの内部状態を変更した別のセットカラーコールによるものです。これは、変更可能な状態でのエントロピーの古典的な症状です。

    title ООП-подход
    actor "Программист" as Programmer
    participant "Класс Cursor" as Cursor
    participant "Canvas" as Canvas
    
    Programmer -> Cursor: Создает new Cursor('red')
    note left
      - Инициализирует состояние
        с цветом 'red'.
    end note
    Programmer -> Cursor: draw(ctx, rectA)
    note right
      - Метод draw использует
        внутреннее состояние
        объекта (цвет).
    end note
    Cursor -> Canvas: Рисует 'red' прямоугольник
    Programmer -> Cursor: setColor('blue')
    note left
      - Изменяет внутреннее состояние!
      - Это побочный эффект.
    end note
    Programmer -> Cursor: draw(ctx, rectB)
    note right
      - Тот же метод draw,
        но с другим результатом
        из-за измененного состояния.
    end note
    Cursor -> Canvas: Рисует 'blue' прямоугольник
    @enduml
    

    2。機能的アプローチ:純粋な機能

    ここでは、純粋な関数を使用します。そのタスクは、それに送信されるすべての必要なデータを使用して長方形を単に描画することです。彼女には状態がなく、彼女の挑戦は彼女の国境以外のものに影響を与えません。

      // Функция принимает все необходимые данные как аргументы
      ctx.fillStyle = color;
      ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
    }
    
    // Использование
    const rectA = { x: 10, y: 10, width: 50, height: 50 };
    const rectB = { x: 70, y: 70, width: 50, height: 50 };
    
    drawRectangle(ctx, rectA, 'red'); // Рисуем первый прямоугольник
    drawRectangle(ctx, rectB, 'blue'); // Рисуем второй прямоугольник
    

    機能的アプローチのUML図:

    この図は、ドローレクタングの関数が常に外の色を取得することを示しています。彼女の動作は入力パラメーターに完全に依存しているため、クリーンでエントロピーのレベルが低くなります。

    @startuml
    タイトル機能アプローチ
    プログラマーとしての俳優「プログラマ」
    参加者の「関数\ n drawrectangle」drawfunc
    参加者「キャンバス」はキャンバスとして

    プログラマー - > drawfunc:drawrewerctangle(ctx、recta、 'red')
    右に注意してください
    - 引数を呼び出します:
    -CTX
    -Recta(座標)
    - 「赤」(色)
    - 関数には条件がありません。
    エンドノート

    drawfunc-> canvas:色の「赤」色であふれています
    プログラマー - > drawfunc:drawrewerctangle(ctx、rectb、 'blue')
    右に注意してください
    - 新しい引数で電話してください:
    -CTX
    -RECTB(座標)
    - 「青」(色)
    エンドノート
    drawfunc-> canvas:「青」の色であふれています
    @enduml

    純粋な機能を備えた例では、機能には条件がないため、動作は完全に予測可能です。仕事のためのすべての情報は、議論を通じて送信され、孤立して安全になります。ドローメソッドの動作に対して可変状態を持つOOPアプローチでは、オブジェクトとの相互作用の歴史全体が影響を与える可能性があります。これにより、エントロピーが導入され、コードの信頼性が低下します。

    モジュラー設計とアーキテクチャ:分離、テスト可能性、再使用

    複雑なシステムをより小さく、独立した、自己安全性の高いモジュールに分割すると、設計、開発、テスト、メンテナンスが簡素化されます。各モジュールは特定の機能を処理し、明確に定義されたインターフェイスを介して相互作用し、相互依存を減らし、責任の分離に貢献します。このアプローチは、読みやすさを改善し、メンテナンスを簡素化し、並列開発を促進し、問題を分離することによりテストとデバッグを簡素化します。これにより、エラーの「敗北の半径」が減り、個別のモジュールの欠陥を妨げ、カスケード障害の防止が重要です。マイクロサービスアーキテクチャは、モダリティの強力な実現です。

    モジュール性は、単なるコードを整理する方法ではなく、欠陥を含む基本的なアプローチと安定性の増加でもあります。 1つのモジュールでのエラーの影響を制限すると、モダリティはシステムの全体的な安定性をエントロピー減衰に向上させ、1つの拒否のポイントがアプリケーション全体の正確性を損なわないことを保証します。これにより、チームはシステムのより小さく、より制御された部分に集中できるようになり、より徹底的なテストとより速い検出と修正エラーにつながります。

    純粋なコードの実践:信頼性のためのキス、ドリス、堅実な原則

    キス(シンプルにしてください、愚かです):
    このデザイン哲学は、シンプルさと明快さを表し、不必要な複雑さを積極的に回避します。単純なコードは本質的に読み取り、理解、変更が簡単であるため、エラーの傾向が減少し、サポートが改善されます。複雑さは、エラーの栄養環境として明確に定義されています。

    キスは審美的な好みであるだけでなく、デザインの意図的な選択であり、エラーの攻撃の表面を減らし、将来の変化に対してコードをより耐性にし、それによってアルゴリズムの正確性と予測可能性を維持します。これは、詳細なレベルのコードでのエントロピーに対する積極的な尺度です。

    乾燥(Donat Repeat Yourself):
    乾燥した原理は、情報の繰り返しとコードの重複を減らし、抽象化に置き換える、またはデータの正規化を使用することを目的としています。その主な位置は、「知識の各断片には、システムに単一の明確な権威ある表現が必要だ」ということです。このアプローチは冗長性を排除し、矛盾を減らし、複製された論理のいくつかのコピーでエラーの拡散またはそれらの一貫性のない修正を防ぎます。また、コードベースのサポートとデバッグを簡素化します。

    コードの複製は、一貫性のない変化につながり、それがエラーにつながります。乾燥はこれを防ぎ、ロジックとデータに単一の真実の原因を提供し、これはアルゴリズムの正確性に直接寄与し、一般的なロジックがシステム全体で均一かつ予測可能に動作することを保証し、薄くてエラーの入力が困難になることを防ぎます。

    ソリッド原理

    このニーモニックの頭字語は、5つの基本的な設計原則(統一された責任、開放性/近さ、リスキンの代替、インターフェイスの分離、依存関係の反転)を示しています。堅実なソフトウェアエンティティを順守することは、サポートと適応が容易になり、エラーの数が少なくなり、開発サイクルが速くなります。彼らは、サービス(SRP)を簡素化し、修正なし(OCP)のないスケーラブルな追加機能を確保し、行動の一貫性(LSP)を確保し、コヒーレンス(ISP)を最小限に抑え、抽象化(DIP)による柔軟性の向上によってこれを達成します。

    確固たる原則は、構造的完全性に対する全体的なアプローチを提供し、それがシステムを本質的に変化のスタント効果に対してより耐性にします。モジュール性、分離、明確な責任を促進すると、システムが継続的に進化していても、エントロピーと戦うための基本的な尺度として機能していても、カスケードエラーを防ぎ、アルゴリズムの正確性を維持します。

    エントロピーおよびドメイン駆動型設計(DDD)

    ドメイン駆動型のデザイン(DDD)は、単なる哲学ではなく、アプリケーションをドメインに分割するための特定のパターンを提供する本格的な方法論であり、複雑さを効果的に制御してエントロピーと戦うことができます。 DDDは、混oticとしたシステムを、予測可能な孤立したコンポーネントのセットに変えるのに役立ちます。

    単一の概念的な装置としての4つのデザインのギャングのパターン

    「デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素」(1994)は、「ギャングオブフォー」(GOF)によって書かれたもので、典型的な問題のために一連の実績のあるソリューションを提供しました。これらのパターンは、構造化された予測可能な制御システムを作成するため、エントロピーと闘うための優れたツールです。

    パターンの重要な効果の1つは、単一の概念的な装置の作成です。 1つのチームの開発者が「工場」または「Loner」について話すと、彼の同僚はすぐに私たちが話しているコードの種類を理解します。これにより、コミュニケーションのエントロピーが大幅に減少します。

    あいまいさは減少します。パターンには明確な名前と説明があり、ボブやアリスの例のように異なる解釈を除外します。

    加速の切除:新しいチームメンバーは、複雑な構造の背後に立っているロジックを推測する必要がないため、プロジェクトに速く注がれます。

    リファクタリングは促進されます。パターンに従って構築されたシステムの部分を変更する必要がある場合、開発者はそれがどのように配置され、どの部品を安全に変更できるかをすでに知っています。

    GOFパターンの例とエントロピーへの影響:

    パターン「戦略」:個々のクラスのさまざまなアルゴリズムをカプセル化し、それらを交換可能にすることができます。これにより、メインコードを変更せずにシステムの動作を変更できるため、エントロピーが減少します。

    パターン「コマンド」(コマンド):inkapsulesメソッドのメソッドをオブジェクトに挿入します。これにより、実行を延期したり、コマンドをキューに入れたり、キャンセルしたりできます。パターンは、チームの送信者を受信者から分離し、独立したエントロピーを減らします。

    オブザーバーパターン(オブザーバー):1つのオブジェクトの状態の変化が自動的に依存していることを自動的に通知する「1対多」の依存性を決定します。これは、副作用を制御するのに役立ち、それらを明白で予測可能にし、混oticとしたものではなく、隠されていません。

    パターン「ファクトリーメソッド」:オブジェクトを作成するためのインターフェイスを定義しますが、サブクラスはどのクラスを制定するかを決定できます。これにより、特定のクラスを知る必要なくオブジェクトを柔軟に作成できるため、エントロピーが減少します。

    これらのパターンは、プログラマーがより予測可能でテストされた制御されたシステムを作成するのに役立ち、それによりエントロピーを減らします。これは、複雑なプロジェクトで必然的に発生します。

    エントロピーを制御するための

    dddキーパターン

    限られたコンテキスト:このパターンはDDDファンデーションです。大きなシステムを小さな自律的な部分に分割することを提供します。各コンテキストには、独自のモデル、用語の辞書(ユビキタス言語)とロジックがあります。これにより、変化や副作用のspread延を防ぐ厳格な境界が作成されます。たとえば、「注文のコンテキスト」などの限られたコンテキストでの変更は、「配信コンテキスト」に影響しません。

    集合体(集合体):ユニットは、関連するオブジェクトのクラスター(たとえば、「注文」、「順序の行」)であり、全体として考慮されます。ユニットには1つのルートオブジェクト(集約ルート)があります。これは、すべての変更の唯一のエントリポイントです。これは一貫性を提供し、ユニットの状態が常に積分のままであることを保証します。ルートオブジェクトを介してユニットを変更することにより、条件に変化がある方法と時期を制御し、エントロピーを大幅に削減します。

    ドメインサービスサービス:サブジェクトエリアの特定のオブジェクトに属さない運用(たとえば、アカウント間のお金の譲渡)については、DDDはドメインサービスを使用することを提案します。それらは、いくつかのユニットまたはオブジェクト間のアクションを調整しますが、条件自体を維持しないでください。これにより、ロジックがより透明で予測可能になります。

    主題領域のイベント(ドメインイベント):異なるコンテキストからの直接呼び出しメソッドの代わりに、DDDはイベントを使用することを申し出ます。あるコンテキストで重要なことが起こると、彼はイベントを「公開」します。他のコンテキストはこのイベントを購読して応答できます。これにより、コンポーネント間にかすかなつながりが生じ、システムがよりスケーラブルで耐性があります。

    DDDは、エントロピーを制御し、明確な境界、厳格なルール、孤立したコンポーネントを作成するのに役立ちます。これにより、複雑で紛らわしいシステムが独立した制御された部分のセットに変わり、それぞれに独自の「法」と予測可能な動作があります。

    複雑で活気のあるドキュメント

    コードの変更、設計ソリューション、アーキテクチャ図、ユーザーマニュアルに関する詳細かつ関連するドキュメントを維持することは非常に重要です。この「ライブドキュメント」は、開発者がシステムの複雑さを理解し、変更を追跡し、将来の変更または正しいエラーを正しく行うのに役立ちます。エラーの一般的なソースである「再オープニング」またはシステムの逆設計に費やされる時間を大幅に短縮します。

    プログラムエントロピーは、「知識の欠如」と「一般的な仮定と既存のシステムの実際の動作との間の矛盾」のために発生します。ドキュメントはガイドとしてだけでなく、

    「知識のエントロピー」と直接戦う知識を維持するための重要なメカニズム。暗黙の知識を明示的かつ手頃な価格にすることにより、アルゴリズムまたはシステムの相互作用の動作に関する誤った仮定のために誤解とエラーを起こす可能性を減らし、それによって機能的正しさを保護します。

    厳密なテストと継続的な品質保証

    自動テスト:モジュラー、統合、システム、回帰テスト
    自動テストは、ソフトウェアのエントロピーを柔らかくし、エラーを防止するための不可欠なツールです。問題の早期検出が可能になり、コードの変更が既存の機能に違反しないことを保証し、迅速で一貫したフィードバックを提供します。キータイプには、モジュラーテスト(分離コンポーネント用)、統合テスト(モジュール間の相互作用)、システムテスト(完全な統合システム用)、および回帰テスト(新しい変更が古いエラーの繰り返しの外観につながらないように)が含まれます。自動テストは、ヒューマン要因を大幅に削減し、信頼性を向上させます。

    自動テストは、隠された欠陥の蓄積に対する主な保護です。開発サイクルでエラーの発見を積極的に「シフト」します。つまり、補正が最も安くて単純な場合に問題が発見され、エントロピーの雪a睡状態に貢献することが妨げられます。これは、アルゴリズムの正確性に直接影響し、いくつかのレベルの詳細で予想される動作を常にチェックします。

    テストによる開発(TDD):エラーの検出で左にシフト

    テスト(TDD)による開発は、ソフトウェア開発のプロセスであり、コード自体を作成する前にコードのテストを作成することを含みます。この反復サイクル「赤緑系再生」は迅速なフィードバックを促進し、エラーの早期検出を可能にし、開発の後期で複雑な問題のリスクを大幅に減らします。 TDDは、より少ない数のエラーとコードの最適な品質につながり、乾燥の哲学を十分に調整することが示されました(Donat Repeats Yourself)。 IBMとMicrosoftの経験的研究は、TDDがエラー密度を低下させて印象的な40〜90%で放出できることを示しています。テストの例は、ライブドキュメントとしても機能します。

    TDDは、開発プロセスに直接構築された積極的な品質管理として機能します。開発者に実装前に予想される動作を決定することを強制すると、論理エラーの導入を最小限に抑え、コードが要件に準拠するために意図的に作成され、最初からアルゴリズムの正確性と予測可能性を直接改善することを保証します。

    継続的な統合と配信(CI/CD):早期フィードバックと安定したリリース
    CI/CDプラクティスは、最新のソフトウェア開発の基本であり、初期段階のエラーを特定し、開発を加速し、途切れない展開プロセスを確保するのに役立ちます。中央リポジトリへの小さなコードパッケージを頻繁に統合することで、自動アセンブリとテストを通じてエラーの早期検出とコード品質の継続的な改善が可能になります。このプロセスは迅速なフィードバックを提供し、開発者が問題を迅速かつ効果的に排除できるようにし、コードの安定性を大幅に向上させ、未検証または不安定なコードの蓄積を防ぎます。

    CI/CDコンベヤーは、エントロピーを減らすための連続メカニズムとして機能します。統合とテストを自動化することにより、統合の問題の蓄積を防ぎ、絶えず展開する状態を提供し、回帰の即時の可視性を提供します。この体系的で自動化されたアプローチは、継続的な変化によって行われた障害に直接対抗し、アルゴリズムの安定性を維持し、システム全体にエラーの拡大を防ぎます。

    技術的債務の体系的な管理

    インクリティオンリファクタリング:戦略的コードの改善

    リファクタリングとは、外部動作を変更せずに内部構造を改善するために既存のコードを再構築するプロセスです。これは、ソフトウェアの腐敗と複雑さを減らすための直接的な手段です。リファクタリングは通常、エラーの数を減らす方法と見なされますが、一部の屈折率は、厳密なテストが必要な新しいエラーに意図的に寄与する可能性があることを認めることが重要です。ただし、研究では、一般に、屈折したコードが非スカューリングよりもエラーの影響が少ないことを確認しています。債務管理が現在の開発プロセスに統合され、延期されていないリファクタリングは、技術的債務の指数関数的な蓄積を防ぐために重要です。

    リファクタリングは、エントロピー、プロアクティブなコード再構築を減らして変更に対してより耐性を高め、将来のエラーの可能性を減らし、アルゴリズムの明確性を改善するための意図的なアクションです。それは、反応的な消火火事を構造的健康の積極的な管理に変えます。

    技術的債務のバックログ:リソースの優先順位付けと配布

    現在の技術的債務の維持は、体系的な管理と技術的債務の排除のための重要な慣行です。このバックログは、これらの問題が見落とされないことを保証する改善を必要とする技術義務と分野の特定された要素の包括的な登録簿として機能します。これにより、プロジェクトマネージャーは、影響力と潜在的なリスクの深刻さに基づいて債務要素を優先することができます。プロジェクト中のBablogの統合により、リファクタリング、エラー修正、コードクリーニングがプロジェクトの日常管理の定期的な部分であり、長期的な返済コストを削減することが保証されます。

    技術的債務のバクログは、抽象的で成長している問題を制御された効果的なタスクのセットに変えます。この体系的なアプローチにより、組織は新しい機能の開発と品質への投資との間に合理的な妥協点を取ることができ、目立たない債務の蓄積を防止し、アルゴリズムの生産性の重大なエラーや分解につながる可能性があります。主要なエントロピー能力を可視化し、制御します。

    静的および動的コード分析:問題の積極的な識別

    静的分析

    この手法には、エラー、コードの臭い、安全脆弱性、コーディング基準の障害などの問題を特定するための実装なしのソースコードの分析が含まれています。 「保護の最初の行」として機能し、開発サイクルの初期段階で問題を特定し、コードの全体的な品質を改善し、実行中にエラーとして表示される前に問題のあるテンプレートを特定することにより技術的な負債を減らします。

    静的分析は、自動化された「コード品質警察」として機能します。潜在的な問題(アルゴリズムロジックに影響を与えるものを含む)を実行する前に、エラーまたはアーキテクチャの欠点の形でそれらの症状を防ぎます。これは、コーディング標準を確保し、ソフトウェアエントロピーに寄与する一般的なエラーを特定するスケーラブルな方法です。

    動的分析

    この方法は、実行中のソフトウェアの動作を評価し、実行中にのみ現れる問題に関する貴重な情報を提供します。メモリ漏れ、レースの状態、ゼロポインターの除外、パフォーマンスの狭い場所や安全性の脆弱性など、実行中のエラーを非常に発見します。

    動的分析は、実行中の行動の欠点を特定するために重要です。これは、静的分析では検出できません。静的分析と動的分析の組み合わせにより、コードの構造と動作に関する包括的なアイデアが保証され、チームが深刻な問題に発展する前に欠陥を特定できるようにします。

    生産と事件の監視

    APM(アプリケーションのパフォーマンス監視):
    APMツールは、アプリケーションのパフォーマンスを監視および最適化するように設計されています。彼らは、パフォーマンスの複雑な問題を特定して診断するのに役立ち、エラーの根本原因を検出し、それにより、ダウンタイムと劣化による収入の損失を減らします。 APMシステムは、応答時間、リソースの使用、エラー頻度など、リアルタイムの情報を提供するなど、さまざまなメトリックを監視します。これにより、ユーザーに影響を与える前に問題を積極的に解決できます。

    APMツールは、問題に対する積極的なソリューションとサービスレベルの維持に批判的です。これらは、生産環境で深い可視性を提供し、チームが正しいアルゴリズムに影響を与える可能性のある問題を迅速に識別および排除することができ、それによりダウンタイムを最小限に抑え、ユーザーエクスペリエンスを改善できます。

    観測可能性(ログ、メトリック、トレーサー):

    観測性とは、出力データと資産間の相互作用に基づいて、システムの内部状態を分析および測定する機能を指します。観測可能性の3つの主要な柱は、メトリック(リソースの生産性と使用に関する定量的データ)、ログ(イベントの詳細な時系列記録)、および追跡(システムコンポーネントを介したリクエストの流れの追跡)です。一緒になって、問題を特定して解決するのに役立ち、システムの動作を包括的に理解することができます。観測性は、従来の監視を超えており、「未知の未知」の理解に役立ち、トラブルの時間を改善するアプリケーションの適用を改善します。

    観察可能性により、チームは何が起こっているのかを柔軟に調査し、予見していない問題の根本原因を迅速に判断できます。これにより、システムの動作をより深く柔軟に積極的に理解することができ、チームは予期せぬ問題を迅速に特定して排除し、アプリケーションの高いアクセシビリティを維持することができます。

    根本原因の分析(RCA)

    根本原因(RCA)の分析は、システムまたはプロセスの問題の基本的な原因を明らかにするデータに基づいた構造化プロセスであり、組織は症状を排除するだけでなく、効果的で長期的なソリューションを実装できるようにします。問題の定義、関連するデータの収集と分析(たとえば、メトリック、ログ、一時的なスケール)、「5つ」や石川図などのツールを使用した因果的および関連する要因の決定、および修正アクションの開発と実装が含まれます。 RCAは、問題の再発生とインシデントに関するトレーニングを防ぐために重要です。

    RCAは、事件に関する問題とトレーニングの長期予防にとって重要です。主な原因を体系的に識別して排除し、症状だけでなく、組織はエラーとアルゴリズムの障害の再発生を防ぐことができ、それによりシステムの全体的なシステムが減少し、その信頼性が向上します。

    柔軟な方法論とチームプラクティス

    アジャイルのエラー管理:

    アジャイル環境では、エラー管理が非常に重要であり、スプリントで時間を割り当てて修正することをお勧めします。エラーは製品の単一の製品に記録され、対応する履歴に関連付けられて、根本原因の分析を促進し、その後のスプリントでコードを改善する必要があります。チームは、蓄積を防ぐために、できるだけ早く、できれば現在のスプリントでエラーを修正するよう努力する必要があります。エラー統計の収集(解決済みの数、登録済みの数、修正に費やされた時間)は、コードの品質のアイデアを得てプロセスを改善するのに役立ちます。

    これは、即時の修正、根本原因の分析、継続的な改善の重要性を強調しています。柔軟な方法論は、エラーを予防的に制御するためのフレームワークを提供し、システムのエントロピーへの貢献を防ぎ、一定の検証と適応によりアルゴリズムの正確性を維持します。

    devops プラクティス

    DevOpsのプラクティスは、いくつかの重要なアプローチを通じてソフトウェアの欠陥を軽減し、品質を向上させるのに役立ちます。それらには、協力文化と紛れもないコミュニケーションの開発、継続的な統合と配信の採用(CI/CD)、自動テストの構成、観察可能性とメトリックに注意を払うこと、開発サイクルの初期段階やインセントのトレーニングを含む手作りの作業を避けることが含まれます。これらのプラクティスは、エラーの数を減らし、品質を改善し、絶え間ない改善に貢献します。

    DevOpsは、自動化、迅速なフィードバック、および一般的な責任の文化を通じて、継続的な改善とエントロピーの削減に貢献します。開発と運用のプロセスを統合すると、DevOpsは問題が検出および排除される環境を作成し、システムの蓄積と劣化を防ぎ、アルゴリズムの整合性を直接サポートします。

    結論

    プログラムエントロピーは、特にアルゴリズムとエラーの正しさのコンテキストで、ソフトウェアシステムの劣化のために常に努力する避けられない力です。これは物理的な老化だけでなく、コード、その環境、そして絶えず混乱を起こす人的要因との間の動的な相互作用です。この崩壊の主な原動力には、複雑さの高まり、技術的債務の蓄積、不十分な文書、絶えず変化する外部環境、一貫性のない開発方法が含まれます。これらの要因は、アルゴリズムの作業の誤った結果、予測可能性の喪失、および相互接続されたシステムを通じてカスケーデンに広がる可能性のあるエラーの数の増加に直接つながります。

    ソフトウェアエントロピーとの戦いには、多面的で継続的かつ積極的なアプローチが必要です。エラーが発生したときに修正するだけでは十分ではありません。それらを生成する主な理由を体系的に排除する必要があります。モジュラー設計、クリーンコード(KISS、ドライ、ソリッド)、および複雑なドキュメントの原則の採用は、エントロピーの影響を受けやすい安定したシステムを作成するための基本です。厳格な自動テスト、テストによる開発(TDD)および継続的統合/配信(CI/CD)は、コードベースの早期発見と防止の重要なメカニズムとして機能します。

    さらに、技術的債務の偶発的なリファクタリングと困惑を介した技術的債務の体系的な管理、ならびに静的および動的なコード分析ツールの使用により、組織は重要な障害につながる前に問題領域を積極的に特定して排除することができます。最後に、APMツールと観察可能性プラットフォームの助けを借りて、根本原因と柔軟なチームプラクティスの規律ある分析と組み合わせて、信頼できる生産監視により、新たな問題に対する迅速な対応を保証し、継続的な改善サイクルを作成します。

    最終的に、アルゴリズムの整合性を確保し、ソフトウェアエントロピーの条件でのエラーを最小限に抑える - これは1回の努力ではなく、動的で絶えず変化する環境で秩序を維持する絶え間ない義務です。これらの戦略を適用すると、組織はソフトウェアシステムの信頼性、予測可能性、耐久性を大幅に向上させることができ、アルゴリズムが進化しても計画どおりに機能することを保証できます。

    ホルマリンなしの実際の図をブロックします

    ブロック図は、複雑なアルゴリズムを理解しやすく構造化されたアクションシーケンスに変えるのに役立つ視覚ツールです。プログラミングからビジネスプロセス管理まで、最も複雑なシステムの視覚化、分析、最適化のための普遍的な言語として機能します。

    道路の代わりにロジックであり、都市の代わりにアクションがある地図を想像してください。これはブロック図であり、最も混乱するプロセスでナビゲーションのための不可欠なツールです。

    例1:簡素化されたゲームの起動スキーム
    仕事の原則を理解するために、簡単なゲームの起動スキームを提示しましょう。

    このスキームは、すべてが失敗することなく起こるときの完璧なスクリプトを示しています。しかし、実際の生活では、すべてがはるかに複雑です。

    例2:データ読み込みでゲームを開始するための拡張スキーム
    最新のゲームでは、ユーザーデータ、保存、または設定をダウンロードするためにインターネット接続が必要になることがよくあります。これらの手順をスキームに追加しましょう。

    このスキームはすでにより現実的ですが、何かがうまくいかない場合はどうなりますか?

    どうでしたか:インターネットの損失で「壊れた」ゲーム

    プロジェクトの開始時に、開発者は考えられるすべてのシナリオを考慮することができませんでした。たとえば、彼らはゲームの主な論理に焦点を合わせており、プレーヤーにインターネット接続がある場合に何が起こるか考えませんでした。

    このような状況では、彼らのコードのブロック図は次のようになります。

    この場合、エラーを発行したり正しく閉じたりする代わりに、接続がないために受け取っていないデータを待つ段階でゲームが凍結しました。これにより、「ブラックスクリーン」が発生し、アプリケーションが凍結されました。

    それがどのようになったか:ユーザーの苦情の修正

    ホバリングに関する多くのユーザーの苦情の後、開発者チームは、エラーを修正する必要があることに気付きました。彼らは、アプリケーションが接続の欠如に正しく応答できるエラー処理ユニットを追加することにより、コードを変更しました。

    これは、修正されたブロック図がどのように見えるかであり、両方のシナリオが考慮されます。

    このアプローチのおかげで、ゲームはユーザーに問題について正しく通知し、場合によってはオフラインモードに移動してゲームを続けることができます。これは、ブロック図が非常に重要である理由の良い例です:開発者に、実行の理想的な方法だけでなく、すべての可能な障害についても考えさせ、最終製品をより安定して信頼できるものにします。

    不確実な行動

    ハンギングとエラーは、プログラムの予測不可能な動作の例の1つにすぎません。プログラミングでは、不確実な動作(未定義の行動)の概念があります – これは、言語の基準が特定のケースでプログラムの動作を説明しない状況です。

    これは何にもつながる可能性があります:撤退のランダムな「ごみ」からプログラムの失敗や深刻なセキュリティの脆弱性まで。たとえば、メモリを使用して作業するとき、無期限の動作はしばしば発生します。たとえば、Cの言語の線で

    言語cの例:

    開発者がラインをバッファーにコピーしたが、ゼロシンボル( `\ 0`)を最後に追加するのを忘れたと想像してください。

    これがコードがどのように見えるかです:

    #include 
    
    int main() {
    char buffer[5];
    char* my_string = "hello";
    
    memcpy(buffer, my_string, 5);
    
    printf("%s\n", buffer);
    return 0;
    }
    

    予想される結果:「こんにちは」
    実際の結果は予測不可能です。

    なぜこれが起こっているのですか? spitifier`%sを使用した「printf」関数は、線がゼロシンボルで終了することを期待しています。彼がそうでない場合、彼女はハイライトされたバッファーの外でメモリを読み続けます。

    次に、このプロセスのブロック図を紹介します。

    これは、ブロック図が非常に重要である理由の明確な例です。開発者に、理想的な実行方法だけでなく、そのような低レベルの問題を含むすべての可能な障害についても考えさせ、最終製品のより安定性と信頼性を高めます。

    LLM Fine-Tune

    現在、人気のあるLLMサービスプロバイダーはすべて、jsonlファイルを使用して微調整を使用しています。これは、モデルの入力と出力を記述し、Gemini、Openaiなど、形式はわずかに異なります。

    特別に形成されたJSONLファイルをダウンロードした後、指定されたデータセット上のLLMモデルの専門化のプロセスが始まります。

    Ollamaを使用してローカルマシンで微調整するには、YouTube Channel Techの詳細なビデオに頼ることをお勧めします。
    https://www.youtube.com/watch?v=pTaSDVz0gok

    すべての電報メッセージのエクスポートからJSONLデータセットの準備を備えたJupyterラップトップの例は、ここで入手できます。
    https://github.com/demensdeum/llm-train-example