bitBuyer 0.8.1.aのエンターテインメント性を高める「システムログ」
Hey there!😉
今回はbitBuyer 0.8.1.aのエンターテインメント性を高める要素として設計している「システムログ」のお話をします。以下は歴程4の投稿で初公開したスクリーンショットです。

システムログのビジュアルデザインとUIの工夫
今回見ていただきたいのは、スクリーンショットの左側にあるサイドバーです! 「システムログ」と銘打って番号付きのログがズラッと並んでいますね?😉 しかも日本語で! さらに重複する内容のログは省略されています! おまけに視覚的要素として区切り線もあります! え、何でこんなにテンションが高いのかって? そりゃあもう、このシステムログ表示システムを作るのに多大な労力を費やしたからですよ😁。
システムログを「見せる」意義とは?
本来、システムログというのはデバッグ目的に使用されることの方が圧倒的に多いものです。実際、システムログをアプリケーションの画面に直接表示しているものってほとんど見かけないですよね? しかし、bitBuyer 0.8.1.aではそれを行っています。しかも日本語で!(二回目😁)これは、個人的に「暗号資産(仮想通貨)自動取引アプリケーション」というものの “自動取引” という性質上、ほとんどの処理はバックグラウンドで行われるため、アプリケーションの画面上に表示できる情報というのはチャートや取引情報などしかなく、かなり限られてくる、というところから、「ならばバックグラウンドでいま何をしているのか表示したら面白いのでは?」と考えているところに理由があります。
バックグラウンド処理の可視化がもたらす価値
システムログを眺めることを面白いと感じるかどうかは人によるとは思いますが、少なくとも私は面白いと感じます! 自分で開発しているからかな? 何にせよ、同じように考える人がいることを願って、エンターテインメント性の提供に繋がるような表示にするべく奮闘したわけです。
システムログを日本語で表示する理由
そう、エンターテインメント性を提供するのであれば、プログラムが出力する英語のシステムログなんかではだめですよね。次々と高速で出力されるシステムログが母国語でないなんて、何にも面白くありません。だって読めないのですから。ですから、私はbitBuyer 0.8.1.aのプログラムのあちこちに、「日本語で」状況によってシステムログを出力するコードを埋め込みました。そしてそれらのシステムログを処理する専用のクラスも用意しました。「クラス」が何かはいまはまだ完全には理解しなくて大丈夫ですが、ざっくり言えば、特定の目的のために用意されているプログラム群をまとめたもの、ですかね。
システムログ専用のプログラム構造
はい、プログラム群をまとめる「クラス」が必要になるほどの量の「システムログ」関連のプログラムを作成したのです。コメントも含めると1,588行にも上ります。まぁ本職のプログラマーからしたら、この程度では何とも思われないかもしれませんが……😅。
でも、私は「同じ処理をするプログラムは一度しか書かない」という哲学の下、プログラミングをしています。つまり非常に効率的なプログラミングを心がけているのです。にも関わらず、1,588行! やはり中〜大規模、といったところではないでしょうか?
システムログ管理のための関数
クラスの内訳は以下の通りです。
- “GetInstance” 関数。クラスのシングルトンインスタンスに関わる関数。
- “__init__” コンストラクタ。クラスの初期化に関わる関数。
- “SetLogInstance” 関数。複数のログUIインスタンスをクラスに設定する関数。
- “LogCount” 関数。システムログの個数のカウントを行い、必要に応じて古いログを削除する関数。
- “InsertLOG” 関数。指定されたログテキストエリアに新しいシステムログを挿入する関数。
- “RecordLOG” 関数。新しいシステムログを対応する処理待ちのログ(ProcessLog)に記録する関数。
- “RecordBackLOG” 関数。非同期処理中(バックグラウンド処理中)のシステムログを対応するバックログ(バックグラウンドスレッドのログ)属性に記録する関数。
- “InsertBackLOG” 関数。非同期処理中(バックグラウンド処理中)に蓄積されたバックログ(バックグラウンドスレッドのログ)を対応するログテキストエリアに挿入する関数。
- “ProcessLOG” 関数。ログ行のリストを処理し、重複するログを省略する関数。
- “InsertProcessedLOG” 関数。処理待ちのシステムログを処理し、対応するログテキストエリアに挿入する関数。
- “ToProcessedBackLOG” 関数。非同期処理中(バックグラウンド処理中)に蓄積された処理待ちのログ(ProcessLog)またはバックログ(バックグラウンドスレッドのログ)を処理し、非同期処理中のバックログとして保存または再保存する関数。
- “RecordProgress” 関数。システムログに進捗率を追加する、 “ReportProgress” 関数専用関数。
- “UpdateLogSegment” 関数。ログテキストの特定の区切り線のインデックス計算用にログセグメントを保持する変数を更新する関数。
- “LogSeparator” 関数。ログテキストエリア、処理待ちのログ(ProcessLog)、またはバックログ(バックグラウンドスレッドのログ)に区切り線を挿入する関数。
リストの三番目の項目以降の関数の説明は、一部文脈に合わせて書き換えたところもありますが、ほぼソースコード内に配置しているコメントと同じです。どうでしょうか。クラスの直下に配置している関数だけで14個あります。「直下」ということは、そう、関数の中に配置する「補助関数」もあるということです。
AIの進捗表示とプログレスバー
“RecordProgress” という関数がありますね? これはシステムログに何らかの処理の進捗率を示すプログレスバーを記録するための関数です! スクリーンショットには進捗率を表示している部分はありませんが、これは例えば、AIが何らかの少々時間のかかる処理を実行しているときに、その進捗を視覚的に表現するためのものです。もちろん、動作テスト済みです!
AIが「いま何をしているか」が分かるシステム
AIによる自動取引を考えているのですから、やはりチャートの表示や取引状況の表示といった、通常考えられる表示内容だけではつまらないですよね。「AIがいま何をしているのか」これが分かってこそ、AIを搭載するアプリケーション『bitBuyer 0.8.1.a』の魅力であると、私は考えています。ですから、システムログの表示機能に心血を注いだわけです。
bitBuyer 0.8.1.aの目指す未来
bitBuyer 0.8.1.aは、単なる暗号資産自動取引アプリケーションではありません。単に取り引きを自動化するだけではだめなのです。それでは、利益が出たときにしか愉悦を感じられません。bitBuyer 0.8.1.aは、暗号資産の自動取引にエンターテインメント性を付加価値として提供します。利益を出すことももちろん重要ですが、使っていて面白いものでなければ、この世界では生き残れません。
というわけで、以上、「システムログ」表示機能についてでした!
Cheers!


