この記事を作った動機

 2026/11/11 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。

次に軽くやりたいことを記述

  • WebSocket の receiveLoop において、例外が処理されていないケースがあり、無限ループになって WebSocket がつながらなくなっている可能性について調べ、修正する。現状だと ConnectionClosedOK の例外しか処理されておらず、それ以外の例外が起こった時の挙動が怪しい。
async def receiveLoop(websocket:ServerConnection,callback) -> None:
    while True:
        try: 
            message = await websocket.recv()
            if(not isinstance(message,str)):
                message = "This is not string. Nothing to show."
            print("\n\n----------------------")
            showJSONMessage(message,receive=True)
            # callback have to show sent messages.
            await callback(message,websocket)
        except ConnectionClosedOK:
            break
  • pathlib を使うように実装しなおす
  • pexpect のセッション維持とログ表示部分を nonblocking_read に改修
  • WebSocket のループにおける例外処理を正しく実装する。想定されていない例外が発生したときにループをBreakするように実装する。
  • とにかくわかってなくてもいいから選んだ英論から発表資料を作成する

 残りは前回記述したことと同上。

まだやれていないこと

マルチプロセッシングライブラリにおけるIPC

  • 実装を小さなプロジェクトを作って体験する
  • 実験した後の内容はすべてgithubに一つのリポジトリとして上げる

拡張モジュールのバリデーション実装

  • モジュールの引数確認
  • 引数の使用方法確認 (不正なプロパティへのアクセスが無いかとか)
  • エラー時と通常時でそれぞれすべての場合にレスポンスが実装されているか

その他

  • 割り込みの呼び出しが、コマンドモジュールから、コマンドコントローラのプロセスを介して、割り込みのプロセスへ IPC するようにする。
  • フロントエンドの割り込みの実装を今の試作物の DataServer に適合させる。
  • フロントエンドが DataServer の拡張機能読込み時に HTML CSS JS としてビルドされて配置され、それがホスティングされるようにデータサーバを実装する。
  • pexpect のログをファイルシステム上の位置を決めてテキストファイルとしてそれぞれ書き出すようにし、ユーザーにはそれを独立した端末で watch -n 0.1 "cat log | tail -n 10" のようにして動いている様子が確認できるようにする。できれば各コントローラやホスティングのプロセスでも同じようなログの出し方をしたい。
  • データサーバ実行において、端末セッション維持に使っている pexpect の実装を見直す。subprocess ライブラリを使うように変更するか、pexpect においてログが出るようにしながら、pexpect のタイムアウトでサーバーが強制終了しないようにする。
  • 各拡張機能が設定を持てるように実装する。
  • 拡張機能のファイルの読み書きが衝突しないようにするためのコントローラを実装し、ファイルの読み書きを各拡張機能モジュールに対して、統一したヘルパー関数を経由するようにする。ヘルパー関数は、各コントローラプロセスから、IPC によってファイルを読み書きするためのプロセスにアクセスし、リクエストを送り、結果を待機して各モジュールと接続される。各モジュールは、ファイル読み書きのヘルパー関数を呼び出すとき、リクエストだけではなく、リクエスト完了時やエラー時のコールバック関数を登録し、処理が続行されるようにする。
  • 以下の LLM が吐き出したコードについて調べる。
## LLM (DuckDuckGo ChatGPT) 出力 調査が必要 -------
## LLM (DuckDuckGo ChatGPT) 出力 調査が必要 -------
from __future__ import annotations
from typing import TYPE_CHECKING
if(TYPE_CHECKING):
    from controller.common import commandModuleArgs
## LLM (DuckDuckGo ChatGPT) 出力 調査が必要 -------
## LLM (DuckDuckGo ChatGPT) 出力 調査が必要 -------

やったことの詳細

研究に関係ありそうなブログ記事

参考にしたサイトとか