グセフ
これは、Galaxy Unlimited Platform のメインのモノリポジトリです。ここに含まれるソフトウェアは、ライブラリと派生サービスおよびアプリケーションのコレクションであり、本質的にはすべてかなり汎用的なものです。これらのライブラリの主な目的は、アプリケーションやサービスを迅速に開発するための C++ ツールチェストとして機能することです。このようなツール/アプリケーション/サービスの一部も同じモノリポジトリに含まれています。
メイン プラットフォーム モジュールは、最新のコンパイラが利用できない状況でも C++ の新しいバージョンを使用できるように意図的に強制していないことに注意してください。そのため、新しい言語機能の使用はマクロを介して処理される傾向があり、古いコンパイラを使用してもコードをコンパイルできます。
名前について
GUCEF は、かつては「Galaxy Unlimited Client Engine Framework」の略称でした。これは、独立した GUCE および GU ソフトウェア スタック層を持つ多層スタックの一部でした。 GUCE は「Galaxy Unlimited Client Engine」の略です。 GUCは「Galaxy Unlimited Client」の略称でした。 GUは今でも「Galaxy Unlimited」の略称です。この度、GUCEF と GUCE は合併し、GUC と GU の一部も統合されました。新しい開発の多くはクライアント側に焦点を当てるのではなく、サポート サービスと一般にバックエンド開発に焦点を当てています。
ちょっとした歴史
長年にわたり、さまざまなコードベースが作成され、作成者は教訓を学びました。ゆっくりと、しかし確実にコードの共通コアが出現し、有機的に成長し始めました。元の共通コア コード ベースは、データ保持の問題と若い世代のバックアップ慣行により、数回部分的に失われ、さらに資金不足によって制約を受けました。さまざまなリポジトリがマージされ、さまざまな部分バックアップが結合されて、GUCEF リポジトリの最初のバージョンが作成されました。この最初のバージョンは、SourceForce に公開ホームを見つけました。当初は CVS がバージョン管理システムとして使用され、その後 SVN、さらに後に Git が使用されました。 Git への移行が検討されたとき、オープンソース リポジトリの新しい拠点も検討されました。オープンソース コミュニティの人気の高まりにより、GitHub が GUCEF といくつかの関連リポジトリの新しい本拠地として選ばれ、現在もその場所にあります。
著者について
依存関係を除けば、このリポジトリ内のほぼすべてのコードは Dinand Vanvelzen によって書かれました。ディナンドは 1980 年代に子供の頃からプログラミングを始め、フィリップスが PC のコンセプトを取り入れて設計した MSX 用のアセンブリ コードを書きました。その後 1990 年代に、RAD プログラミングの原則は、Borland Delphi、続いて Borland C++ Builder を介して新たな愛の対象となりました。この時点で、著者はソフトウェア エンジニアリングという闇の芸術の専門教育に乗り出しました。当時は別個の学位であったアプリケーション プログラミングとバックエンド/下位レベルのプログラミングの間で二重戦略が追求されました。この間、このリポジトリにあるコードベースは、概念が融合し進化するにつれて成長し、進化し続けました。 2000 年代、著者はビジュアライゼーションに主に焦点を当てていましたが、主に 3D グラフィックスが専門的かつ知的好奇心としてこのリポジトリに登場しました。米国への移住と家族の誕生により、個人的な状況が安定すると回復し始めるまで、かなりの年の間、新規開発が少しずつ停滞しました。若者の理想主義が現実主義に道を譲り始めたのはこの段階でした。専門的には、介入型ヘルスケアの分野は企業向けヘルスケアに取って代わられ、その後、金融セクターに取って代わられました。その後の新たな展開は、著者の職業生活における一般的なニーズに実用的に焦点を当てており、目的を達成する手段として偶発的な風変わりなプロジェクトが混合されています。
モノリポジトリの内訳
- /platform : これには、具体的なポータブル機能と、プラグインを介して追加機能を利用するためのインターフェイスの両方を備えたメイン プラットフォーム モジュールがあります。
- /plugins : これには、プラットフォーム機能を拡張するためにオプションで使用できるさまざまなプラグインがあります。
- /projects : ビルドプロジェクトを生成するためのスクリプトなどが含まれます。
- /common/bin : プロジェクトのバイナリ出力が含まれます
- /dependency : 名前が示すように、このフォルダーにはプラグインによって使用されるさまざまな依存関係ライブラリがあり、プラットフォーム ライブラリによって直接使用されることはありません。
- /tests : 名前が示すように、これには専用のテスト コードが保持されます。
IDE 用のプロジェクトを生成する方法
IDE プロジェクト/ソリューション ファイルがサポートされる主な方法は、CMake を使用することです。 CMake ファイル自体は、このリポジトリに含まれる「ProjectGenerator」と呼ばれるツールを介してほぼすべて自動生成されます。 ProjectGenerator は、最小限の ModuleInfo.xml ファイルを使用してリポジトリ内のファイルの分析を実行してモジュールを特定し、そこから必要なパスをすべて導出し、必要なファイルを生成します。この同じツールは、CMake だけでなく、他のツールチェーンのミドルウェア ファイルも出力できます。 premake 4、premake 5、android make ファイルも含まれていますが、現時点ではそれほど頻繁に更新されていないため、使用できる期間はそれらによって異なります。
ほとんどの場合、最初に /projects/CMake に移動して、関連する IDE ファイルを生成します。そのフォルダーには、長い名前のさまざまなスクリプトが表示されます。ある時点で、これは TODO リストに従ってリファクタリングされますが、現時点ではスキームは次のとおりです。
例として、「RunCMake_Shared_CodeBlocks_Unix_Debug_pubsub2pubsub.sh」のようなスクリプト ファイルがあります。
- RunCMake_ : この最初のセグメントは、歴史的な理由からフォルダー内の他のファイルと区別するためのものです。無視してください。
- Shared_ : このセグメントは主に CMake に関連しており、渡されるデフォルトのモジュール ビルド メソッドは「動的」 (dll/so) と静的 (.lib/.a) になります。
- CodeBlocks_ : このセグメントには、プロジェクト ファイルを生成する IDE の名前が含まれます。この例では、Code Blocks IDE です。
- Unix_ : このセグメントはターゲット プラットフォームを示します。一部の IDE は複数のターゲット プラットフォームをサポートします。
- Debug_ : このセグメントはすべてのスクリプトに存在するわけではなく、ジェネレーターの機能によって異なります。一部のジェネレーターでは、デバッグ ビルドまたはリリース ビルドのためにプロジェクト ファイル自体を最初から作成する必要があります。これは、Visual Studio の場合には必要ありません。
- pubsub2pubsub.sh : このセグメントは、モノリポジトリ全体の論理ビューの主なターゲットを示します。この場合、サービスは pubsub2pubsub です。
つまり、形式は次のようになります。「RunCMake_Shared/Static_IDE から use_OS Target_Debug/Release_Target 名.実行可能スクリプト拡張子」
Windows では、上記のスクリプトなどを実行すると、ProjectGenerator の実行もトリガーされます。これは、単にフローをより確実にすることを目的としています。通常、コミットされた CMake ファイルはすでに最新であるため、このステップは通常 x で除外してスキップできるためです。この潜在的なステップに続いて、ビルド ファイルの生成を処理するために CMake が呼び出されます。このようなファイルは /common/bin に書き込まれます。このリポジトリは、一時出力ファイルをコードと混在させるべきではないという考えに従っています。何らかの理由で古い/不良な出力ファイルで問題が発生した場合 (ディスクの問題?)、いつでも /common/bin の下のフォルダー構造全体を削除できます。
含まれるプラットフォーム ライブラリ
- gucefMT: マルチスレッド プログラミング プリミティブを備えたライブラリ。おそらく、ある時点で gucefCORE に組み込まれるでしょう。
- gucefCORE: プラグイン/ロギング/メトリクス/イベント/システムなど、プラットフォーム上に構築された機能が動作する方法の中核となる機能を備えたライブラリ
- gucefIMAGE: デジタル画像を利用するソフトウェアを構築する際に使用されるオプションのライブラリ
- gucefVFS: 基本的なアクセスだけでなく、より複雑なファイル システム スタイルの I/O を実行するソフトウェアを構築するときに使用されるオプションのライブラリ。 VFS = 仮想ファイル システム。
- gucefCOMCORE: 基本的なネットワークを実行するソフトウェアを構築するときに使用されるオプションのライブラリ
- gucefCOM: ネットワーキングを実行し、StatsD などのほぼ業界標準の機能を使用するソフトウェアを構築するときに使用されるオプションのライブラリ
- gucefWEB: インターネット/Web スタイルのネットワーキングを実行するソフトウェアを構築するときに使用されるオプションのライブラリ
- gucefPUBSUB: パブリッシュ/サブスクライブの概念を使用するソフトウェアを構築するときに使用されるオプションのライブラリ
- gucefGUI: GUI が必要な場合に使用されるオプションのライブラリ。主な焦点は、OS ネイティブ GUI ではないレンダリングのコンテキスト内の GUI です。
- gucefINPUT: 人間の入力デバイスのサポートが必要な場合に使用されるオプションのライブラリ。
- gucefLOADER: 複数の GUCEF プラットフォーム バージョンを動的にロードするときに使用されるオプションのライブラリ
- gucefPATCHER: 自動パッチ適用機能のサポートが必要な場合と、エンドユーザーが更新を手動でダウンロードする場合に使用されるオプションのライブラリ
- gucefMATH: オブジェクト指向の概念を介して数学計算を実行するときに使用されるオプションのライブラリ
- gucefKAITAI: Kaitai スキーマを利用してバイナリ形式を解釈するときに使用されるオプションのライブラリ
含まれるプラットフォームプラグイン
- dstorepluginPARSIFALXML: gucefCORE プラグイン: XML の DStore (DataNode) コーデック サポートを追加します。 GUCEF コードを介した書き込みと ParsifalXML 依存関係ライブラリを介した読み取り
- dstorepluginJSONPARSER: gucefCORE プラグイン: JSON の DStore (DataNode) コーデック サポートを追加します。 json-parser および json-builder 依存関係ライブラリを使用します。
- dstorepluginYAML: gucefCORE プラグイン: YAML の DStore (DataNode) コーデック サポートを追加します。 libyaml 依存関係ライブラリを使用します
- codecspluginZLIB: gucefCORE プラグイン: zlib/gzip/deflate/crc32/adler32 のコーデック サポートを追加します。
- codecspluginSTBRUMMEHASH: gucefCORE プラグイン: CRC32/MD5/SHA1/SHA3/SHA256/Keccak のコーデック サポートを追加
- imgpluginDEVIL: gucefIMAGE プラグイン: DEVIL イメージ依存関係ライブラリをソースとするデジタル イメージ管理機能を追加します。さまざまな画像コーデックをサポートします。
- imgpluginFLIC: gucefIMAGE プラグイン: FLIC 形式の画像コーデックのサポートを追加します。
- imgpluginFreeImage: gucefIMAGE プラグイン: FreeImage 画像依存関係ライブラリをソースとするデジタル画像管理機能を追加します。さまざまな画像コーデックをサポートします。
- imgpluginITV: gucefIMAGE プラグイン: リバース エンジニアリングされた ITV 形式の画像コーデック サポートを追加します。
- vfspluginAWSS3: gucefVFS プラグイン: AWS S3 を仮想ファイルシステムの一部としてマウントおよび使用するための VFS バックエンドを追加します
- vfspluginDVP: gucefVFS プラグイン: DVP アーカイブ ファイルを仮想ファイル システムの一部としてマウントおよび使用するための廃止された VFS バックエンド
- vfspluginITV: gucefVFS プラグイン: リバース エンジニアリングされた ITV アーカイブ ファイルを仮想ファイル システムの一部としてマウントおよび使用するための VFS バックエンド
- vfspluginVP: gucefVFS プラグイン: ゲーム Decent や FreeSpace で使用されるような、仮想ファイル システムの一部として「Violation Pack」アーカイブ ファイルをマウントおよび使用するための VFS バックエンド
- vfspluginZIP: gucefVFS プラグイン: zlib 互換アーカイブ ファイルを .gz や .zip などの仮想ファイル システムの一部としてマウントおよび使用するための VFS バックエンド
- inputdriverDIRECTINPUT8: gucefINPUT プラグイン: Microsoft DirectInput 8 を介した入力デバイス対話用の入力ドライバーを追加します。
- inputdriverMSWINMSG: gucefINPUT プラグイン: Microsoft Windows Win32 API メッセージを介した入力デバイス対話用の入力ドライバーを追加します。
- inputdriverNANDROID: gucefINPUT プラグイン: ネイティブ Android API を介した入力デバイス対話用の入力ドライバーを追加します。
- inputdriverOIS: gucefINPUT プラグイン: OIS 依存関係ライブラリを介して入力デバイス対話用の入力ドライバーを追加します。
- inputdriverXWINMSG: gucefINPUT プラグイン: Linux 用 X-Windowing メッセージング システムを介した入力デバイス対話用の入力ドライバーを追加します。
- pubsubpluginAWSSNS: gucefPUBSUB プラグイン: AWS の SNS サービスに pub-sub コンセプトと互換性のあるバックエンドを追加します。 AWS C++ SDKを使用します。
- pubsubpluginAWSSQS: gucefPUBSUB プラグイン: AWS の SQS サービスに pub-sub コンセプトと互換性のあるバックエンドを追加します。 AWS C++ SDKを使用します。
- pubsubpluginKAFKA: gucefPUBSUB プラグイン: Kafka ストリーム用の pub-sub コンセプトと互換性のあるバックエンドを追加します。 RdKafka 依存関係ライブラリを使用します。
- pubsubpluginMSMQ: gucefPUBSUB プラグイン: MSMQ の pub-sub コンセプトと互換性のあるバックエンドを追加します。 Windows オペレーティング システムの MSMQ サブシステムを使用します。これをインストールする必要があります。
- pubsubpluginREDISCLUSTER: gucefPUBSUB プラグイン: Redis ストリーム用の pub-sub コンセプトと互換性のあるバックエンドを追加します。 redis++ と Hiiris の依存関係を使用します。
- pubsubpluginSTORAGE: gucefPUBSUB プラグイン: VFS とその機能との簡単な対話を可能にする、pub-sub コンセプトと互換性のあるバックエンドを追加します。
- pubsubpluginUDP: gucefPUBSUB プラグイン: 基本的な UDP に pub-sub コンセプトと互換性のあるバックエンドを追加します。
- pubsubpluginWEB: gucefPUBSUB プラグイン: HTTP/REST/WebSocket などの Web 概念に対応する pub-sub 概念と互換性のあるバックエンドを追加します。
- ProjectGenDependsFilter: ProjectGen プラグイン: depends.exe ツール出力レポートに基づいてリポジトリ内のライブラリをフィルタリングできるようにします。
- ProjectGenVSImporter: ProjectGen プラグイン: Visual Studio プロジェクト ファイルをインポートして、新しいリポジトリの開始点である ModuleInfo.xml を生成します。
- comcorepluginDBL: Myricom DBL ネットワーク ドライバーから情報を提供しようとする gucefCOMCORE プラグイン
- comcorepluginGEOOSM: Open Street Maps ベースの地理的位置検索機能を追加する gucefCOMCORE プラグイン
含まれるサービス
- UdpViaTCP: UDP トラフィックを TCP セグメント上に集中させるブリッジ サービス。 pubsub2pubsub に置き換えられます。
- udp2kafka: Kafka ストリームへの UDP トラフィックの入力を許可するアダプター サービス。 pubsub2pubsub に置き換えられます。
- udp2redis: 非クラスター化 Redis の Redis ストリームへの UDP トラフィックの入力を許可するアダプター サービス。 pubsub2pubsub に置き換えられます。
- udp2rediscluster: クラスター化された Redis の Redis ストリームへの UDP トラフィックの入力を許可するアダプター サービス。 pubsub2pubsub に置き換えられます。
- ProcessMetrics: 対象プロセスのメトリクスを取得するエージェント サービス。高周波パフォーマンスカウンターなどに代わる、ターゲットを絞った軽量の代替品として意図されています。
- redisinfo: Redis プロトコルを使用して Redis クラスターに関する情報を取得し、メトリクスなどの情報をブロードキャストに公開するモニタリング サービス
- pubsub2storage: メッセージング パラダイムとストレージの間をより一般的に変換するアダプター サービス。 pubsub2pubsub に置き換えられます。
- pubsub2pubsub: 異なるメッセージング パラダイム間でより一般的に変換するアダプター サービス。他の多くのアダプター サービスに取って代わります。
- FilePusher: ファイル システムで特定のファイルを監視し、それらを VFS 宛先 (AWS S3 など) にプッシュするエージェント サービス。
- FileSorter: ファイルを自動的に分類するエージェント サービス。たとえば、デジタル画像やビデオ アーカイブの最初の並べ替えに便利です。
- GucefLogService: ネットワーク接続を介してストリーミングされる GUCEF プラットフォーム ログを受け入れることができるサービス。ローカルログを取得できない/アクセスできない状況を対象としています。
- ServerPortExtender: アプリケーション サーバー ポートのインバウンド/アウトバウンド接続の開始を反転して、出力のみの制限をバイパスするために使用されるサービス
- UdpTransformer: 受信 UDP を受け取り、単純な変換とその後の再送信を実行するサービス
- MsmqMetrics: MSMQ キューに関する情報を収集し、その後、そのキューのメトリクスを収集して送信するエージェント サービス
含まれるツール
- ProjectGenerator: さまざまなプロジェクト/モジュール ファイルと同じモノリポジトリのさまざまな論理ビューを自動生成するツール
- DCSBruteInstaller: 一部のハードウェアとこのソフトウェアの組み合わせを利用して、DCS 家庭用警報パネルのコードをブルートフォース クラックするツール
- itvExporter: クラシック ゲームに含まれるアセットのリバース エンジニアリングされたエクスポート ツール
- GucefArchiver: VFS とそのプラグインを利用する基本的なアーカイバー ツール
- HDFiller: 名前が示すように、ハードドライブをいっぱいにします。テストシナリオを対象としています。
- PubSubStorageTool: pubsub ストレージ プラグインによって生成されたストレージ ファイルを操作するツール
含まれるその他のライブラリ
- MemoryLeakFinder: 動的にロードされるプラットフォーム ヘルパー ライブラリで、GUCEF プラットフォーム機能を利用してメモリ リークを追跡します。
- ProjectGen: ProjectGenerator ツールのすべてのロジックを保持するライブラリ。機能を拡張するプラグインをサポートしています。
TODOリスト
- 短期: プラットフォームにネイティブな基本的な WebSocket サポートを追加します。
- 短期: コーデックに対する適切なパラメータのサポートを追加します。
- 短期: StringView サポートを追加
- 短期: pubsub2pubsub 'web' プラグインでの初期パスを完了する
- 短期: pubsub2pubsub 'aws sns' プラグインでの初期パスを完了する
- 短期: pubsub2pubsub 'aws sqs' プラグインでの初期パスを完了する
- 短期: 構成主導の CodecChain クラスを追加します。
- 中期: GitHub CI 統合を修正します。自動ビルドトリガーのリンクが壊れています。
- 中期: DataNode スキーマ システムの追加
- 中期: 構成主導のメッセージ変換エンジンを追加
- 中期: AWS Lambda サポートを追加
- 中期: Utf16 および Utf32 のサポートを追加
- 中期: すべての静的文字列参照に String の代わりに StringView を使用する
- 中期: ProjectGenerator をバックグラウンド サービスとして実行できるものに変える
- 中期: ProjectGenerator による GitHub Actions の完全なサポート
- 中期: ProjectGenerator 経由で GitLab CI サポートを追加
- 中期: プラットフォーム ソース ファイルの名前変更を完了し、すべてにモジュール プレフィックスが付くようにする
- 中期: モノリポジトリ内に含まれるプロジェクトの大規模な活性化作業の一環として、デッド コードを削除します。ここに含まれる他のどのアプリを保存する価値があるかを判断してください。
- 中期: 最適化としてスレッドごとに事前に割り当てられた出力バッファを使用して、ロギング システムにストリーム サポートを追加します。
- 中期: プラットフォーム コンソール クライアント機能を再作成する
- 中期: サポートされているプラットフォームにネイティブのセキュア ソケット サポートを追加します。
- 長期: Web アセンブリのサポートを追加します。
- 長期: ProjectGenerator 経由で Jenkins CI サポートを追加
- いつか: クラスのクラシック MFC スタイルの「C」プレフィックスを非推奨/元に戻す。これはすべてを破壊する大きな変化となるため、まだ実現していません。
- 進行中: 多数の制約を考慮して、さまざまな依存関係を更新する必要性を評価します。
- 進行中: ロギング/メトリクスを改良する
- 進行中: javadoc 形式 (doxygen 互換) ドキュメントを追加します。