2025/11/27-やったことリスト

この記事を作った動機 2025/11/20 から、2025/11/27 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 動作の様子 今回は特に前回から目立って進捗していないのでなし。 TODOs TODOs 2025/11/27 になる間やる項目たち。やりきれなかった分は次に持ち越し。 メイン(持ち越し、新規混合) バックエンドの実装 ターゲット層を明確にする ネットワーク監視について実装を思いついた案に基づいて進める バックエンドの設定についてフロントエンドにUIを設けたい deleted.json に対して、ページUUIDも記録するようにし、過去に削除されたページと同じ階層構造で同じ名前を持つページが新規作成されても衝突しないようにする。 削除されたことになっているが、まだ物理的にファイルシステム上からは消されていないページと同じ階層構造で同じ名前を持つページが新規作成された場合、重複としては扱わず、削除対象のページを退避する。というか、元から削除されたページは退避する場所(フォルダー)をノートブック内に専用に作る。 全体的なページやノートブックのメタデータなどにおける時間の扱いを全部 UnixTime の秒単位に置き換える フロントエンドのネットワーク周り useDatabaseStoreをuseNetworkStoreに名前を変更する。 send関数をuseDatabaseStore(useNetworkStore)内にあるものに置き換え、旧来のsend関数の実装を廃止する。 createPage.tsxの実装で、ページタイプを取得するとネットワーク周りがバグってリクエストした履歴が消えない結果、未接続の状態として判定されてしまうというバグを何とかする。 free ページの実装 フロントエンド 共通のUIについて、使い方の説明について、ドキュメントを書いた。 overlayWindow messagebox toolsbar page 実際に変更があったら、変更内容をリアルタイムで保存するようにする。 別のページを開いたときとかに、バグって変なタイミングでデータを保存しようとするのを止める セーブする際に、ページのUUIDが一致するか確かめてからセーブする。 書式設定に関する edit toggleable を作る。文章をどこに寄せるかとか、フォントサイズとか、フォントカラーとかそういう細かい設定ができるようにする。 アイテムが何もないページにおいて、アイテムの追加時に、どんなアイテムタイプが利用可能か取得するのに失敗するのをどうにかする。 リアルタイムセーブがバグることについて調査する。別のページを開いたとき、Freeページコンポーネント自体やその変数の中身が、どういう状態になっているのかを調べる。 Metadata を表示できるようにする Free ページの要素について、基本要素の項目にアイテムの色をRGBAで設定できるようにする。 とりあえず、まだ色を変更するUIがないが、RGBAとしてCSSスタイルを設定してアイテムごとの色を反映するようにFreeページの実装を更新はした。 色を設定するUIや項目へのアクセスボタンを実装する。 -> すべてのアイテム共通の設定項目であるため、汎用に設定項目を表示できるpropertiesとは独立して、commonsの一部として実装する。 設定UIで色の一部が正しく表示できていないバグをなおす。 -> padStart commonsが正しく色を更新できないバグを何とかする。 z-index をちゃんと更新するようにする useFreePageItemsStore の items や activeItems の配列をページごとに分離して管理するようにする。 どうしてもzustandを使ったグローバルなアイテム管理が暴走する場合は、Freeコンポーネント内部でアイテムを管理するように実装を変更する。 -> とりあえず zustand を使った実装で続行。 範囲選択の実装 -> activeItemsを操作する 編集機能、データセーブ(更新)の実装 free ページにおいて、保存が成功するまでは、変更があってから保存されるまでの間に、バッファーを保持するようにする。 バックエンド割り込みの実装 updatePageの割り込みがあった時に、どのページがセーブされたかIDをUUIDをデータとして含める updatePageがあったら差分を扱えるように、先にセーブされたデータをバッファーにためるようにして、diffをマージできるようにする データサーバに接続されているかどうかなどの、ステータスインジゲーターを作る データサーバのupdatePageコマンドのUUID検証ロジックについて正しく機能しているか調べる。 データサーバの実装 addTag deleteTag コマンドの実装 queryTag コマンドの実装 前回からの持ち越し 持ち越し分 内部構造を説明する図とかドキュメントを作る ...

2025年11月20日

2025/12/4-やったことリスト

この記事を作った動機 2025/11/27 から、2025/12/4 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 動作の様子 TODOs TODOs 2025/12/4 になる間やる項目たち。やりきれなかった分は次に持ち越し。 メイン(持ち越し、新規混合) バックエンドの実装 ターゲット層を明確にする ネットワーク監視について実装を思いついた案に基づいて進める バックエンドの設定についてフロントエンドにUIを設けたい deleted.json に対して、ページUUIDも記録するようにし、過去に削除されたページと同じ階層構造で同じ名前を持つページが新規作成されても衝突しないようにする。 削除されたことになっているが、まだ物理的にファイルシステム上からは消されていないページと同じ階層構造で同じ名前を持つページが新規作成された場合、重複としては扱わず、削除対象のページを退避する。というか、元から削除されたページは退避する場所(フォルダー)をノートブック内に専用に作る。 全体的なページやノートブックのメタデータなどにおける時間の扱いを全部 UnixTime の秒単位に置き換える フロントエンドのネットワーク周り useDatabaseStoreをuseNetworkStoreに名前を変更する。 send関数をuseDatabaseStore(useNetworkStore)内にあるものに置き換え、旧来のsend関数の実装を廃止する。 createPage.tsxの実装で、ページタイプを取得するとネットワーク周りがバグってリクエストした履歴が消えない結果、未接続の状態として判定されてしまうというバグを何とかする。 free ページの実装 フロントエンド 共通のUIについて、使い方の説明について、ドキュメントを書いた。 overlayWindow messagebox toolsbar page 実際に変更があったら、変更内容をリアルタイムで保存するようにする。 別のページを開いたときとかに、バグって変なタイミングでデータを保存しようとするのを止める セーブする際に、ページのUUIDが一致するか確かめてからセーブする。 書式設定に関する edit toggleable を作る。文章をどこに寄せるかとか、フォントサイズとか、フォントカラーとかそういう細かい設定ができるようにする。 アイテムが何もないページにおいて、アイテムの追加時に、どんなアイテムタイプが利用可能か取得するのに失敗するのをどうにかする。 リアルタイムセーブがバグることについて調査する。別のページを開いたとき、Freeページコンポーネント自体やその変数の中身が、どういう状態になっているのかを調べる。 Metadata を表示できるようにする Free ページの要素について、基本要素の項目にアイテムの色をRGBAで設定できるようにする。 とりあえず、まだ色を変更するUIがないが、RGBAとしてCSSスタイルを設定してアイテムごとの色を反映するようにFreeページの実装を更新はした。 色を設定するUIや項目へのアクセスボタンを実装する。 -> すべてのアイテム共通の設定項目であるため、汎用に設定項目を表示できるpropertiesとは独立して、commonsの一部として実装する。 設定UIで色の一部が正しく表示できていないバグをなおす。 -> padStart commonsが正しく色を更新できないバグを何とかする。 z-index をちゃんと更新するようにする useFreePageItemsStore の items や activeItems の配列をページごとに分離して管理するようにする。 どうしてもzustandを使ったグローバルなアイテム管理が暴走する場合は、Freeコンポーネント内部でアイテムを管理するように実装を変更する。 -> とりあえず zustand を使った実装で続行。 範囲選択の実装 -> activeItemsを操作する 編集機能、データセーブ(更新)の実装 free ページにおいて、保存が成功するまでは、変更があってから保存されるまでの間に、バッファーを保持するようにする。 バックエンド割り込みの実装 updatePageの割り込みがあった時に、どのページがセーブされたかIDをUUIDをデータとして含める updatePageがあったら差分を扱えるように、先にセーブされたデータをバッファーにためるようにして、diffをマージできるようにする データサーバに接続されているかどうかなどの、ステータスインジゲーターを作る データサーバのupdatePageコマンドのUUID検証ロジックについて正しく機能しているか調べる。 データサーバの実装 addTag deleteTag コマンドの実装 queryTag コマンドの実装 前回からの持ち越し 持ち越し分 内部構造を説明する図とかドキュメントを作る ...

2025年11月27日

2025/12/11-やったことリスト

この記事を作った動機 2025/12/4 から、2025/12/11 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 動作の様子 特に大きな変更はないので今回はなし。 TODOs TODOs 2025/12/11 になる間やる項目たち。やりきれなかった分は次に持ち越し。 メイン(持ち越し、新規混合) バックエンドの実装 ターゲット層を明確にする ネットワーク監視について実装を思いついた案に基づいて進める バックエンドの設定についてフロントエンドにUIを設けたい 全体的なページやノートブックのメタデータなどにおける時間の扱いを全部 UnixTime の秒単位に置き換える フロントエンドのネットワーク周り useDatabaseStoreをuseNetworkStoreに名前を変更する。 send関数をuseDatabaseStore(useNetworkStore)内にあるものに置き換え、旧来のsend関数の実装を廃止する。 createPage.tsxの実装で、ページタイプを取得するとネットワーク周りがバグってリクエストした履歴が消えない結果、未接続の状態として判定されてしまうというバグを何とかする。 free ページの実装 フロントエンド 共通のUIについて、使い方の説明について、ドキュメントを書いた。 overlayWindow messagebox toolsbar page 実際に変更があったら、変更内容をリアルタイムで保存するようにする。 別のページを開いたときとかに、バグって変なタイミングでデータを保存しようとするのを止める セーブする際に、ページのUUIDが一致するか確かめてからセーブする。 書式設定に関する edit toggleable を作る。文章をどこに寄せるかとか、フォントサイズとか、フォントカラーとかそういう細かい設定ができるようにする。 アイテムが何もないページにおいて、アイテムの追加時に、どんなアイテムタイプが利用可能か取得するのに失敗するのをどうにかする。 リアルタイムセーブがバグることについて調査する。別のページを開いたとき、Freeページコンポーネント自体やその変数の中身が、どういう状態になっているのかを調べる。 Metadata を表示できるようにする Free ページの要素について、基本要素の項目にアイテムの色をRGBAで設定できるようにする。 とりあえず、まだ色を変更するUIがないが、RGBAとしてCSSスタイルを設定してアイテムごとの色を反映するようにFreeページの実装を更新はした。 色を設定するUIや項目へのアクセスボタンを実装する。 -> すべてのアイテム共通の設定項目であるため、汎用に設定項目を表示できるpropertiesとは独立して、commonsの一部として実装する。 設定UIで色の一部が正しく表示できていないバグをなおす。 -> padStart commonsが正しく色を更新できないバグを何とかする。 z-index をちゃんと更新するようにする useFreePageItemsStore の items や activeItems の配列をページごとに分離して管理するようにする。 どうしてもzustandを使ったグローバルなアイテム管理が暴走する場合は、Freeコンポーネント内部でアイテムを管理するように実装を変更する。 -> とりあえず zustand を使った実装で続行。 範囲選択の実装 -> activeItemsを操作する 編集機能、データセーブ(更新)の実装 free ページにおいて、保存が成功するまでは、変更があってから保存されるまでの間に、バッファーを保持するようにする。 バックエンド割り込みの実装 updatePageの割り込みがあった時に、どのページがセーブされたかIDをUUIDをデータとして含める updatePageがあったら差分を扱えるように、先にセーブされたデータをバッファーにためるようにして、diffをマージできるようにする データサーバに接続されているかどうかなどの、ステータスインジゲーターを作る データサーバのupdatePageコマンドのUUID検証ロジックについて正しく機能しているか調べる。 データサーバの実装 addTag deleteTag コマンドの実装 queryTag コマンドの実装 前回からの持ち越し 持ち越し分 内部構造を説明する図とかドキュメントを作る ...

2025年12月4日

2025/12/25-やったことリスト

この記事を作った動機 2025/12/18 から、2025/12/25 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 動作の様子 今回は変更はなかったので特になし。 TODOs TODOs 2025/12/25 になる間やる項目たち。やりきれなかった分は次に持ち越し。 メイン(持ち越し、新規混合) バックエンドの実装 ターゲット層を明確にする ネットワーク監視について実装を思いついた案に基づいて進める バックエンドの設定についてフロントエンドにUIを設けたい 全体的なページやノートブックのメタデータなどにおける時間の扱いを全部 UnixTime の秒単位に置き換える フロントエンドのネットワーク周り useDatabaseStoreをuseNetworkStoreに名前を変更する。 send関数をuseDatabaseStore(useNetworkStore)内にあるものに置き換え、旧来のsend関数の実装を廃止する。 createPage.tsxの実装で、ページタイプを取得するとネットワーク周りがバグってリクエストした履歴が消えない結果、未接続の状態として判定されてしまうというバグを何とかする。 free ページの実装 フロントエンド 共通のUIについて、使い方の説明について、ドキュメントを書いた。 overlayWindow messagebox toolsbar page 実際に変更があったら、変更内容をリアルタイムで保存するようにする。 別のページを開いたときとかに、バグって変なタイミングでデータを保存しようとするのを止める セーブする際に、ページのUUIDが一致するか確かめてからセーブする。 書式設定に関する edit toggleable を作る。文章をどこに寄せるかとか、フォントサイズとか、フォントカラーとかそういう細かい設定ができるようにする。 アイテムが何もないページにおいて、アイテムの追加時に、どんなアイテムタイプが利用可能か取得するのに失敗するのをどうにかする。 リアルタイムセーブがバグることについて調査する。別のページを開いたとき、Freeページコンポーネント自体やその変数の中身が、どういう状態になっているのかを調べる。 Metadata を表示できるようにする Free ページの要素について、基本要素の項目にアイテムの色をRGBAで設定できるようにする。 とりあえず、まだ色を変更するUIがないが、RGBAとしてCSSスタイルを設定してアイテムごとの色を反映するようにFreeページの実装を更新はした。 色を設定するUIや項目へのアクセスボタンを実装する。 -> すべてのアイテム共通の設定項目であるため、汎用に設定項目を表示できるpropertiesとは独立して、commonsの一部として実装する。 設定UIで色の一部が正しく表示できていないバグをなおす。 -> padStart commonsが正しく色を更新できないバグを何とかする。 z-index をちゃんと更新するようにする useFreePageItemsStore の items や activeItems の配列をページごとに分離して管理するようにする。 どうしてもzustandを使ったグローバルなアイテム管理が暴走する場合は、Freeコンポーネント内部でアイテムを管理するように実装を変更する。 -> とりあえず zustand を使った実装で続行。 範囲選択の実装 -> activeItemsを操作する 編集機能、データセーブ(更新)の実装 free ページにおいて、保存が成功するまでは、変更があってから保存されるまでの間に、バッファーを保持するようにする。 バックエンド割り込みの実装 updatePageの割り込みがあった時に、どのページがセーブされたかIDをUUIDをデータとして含める updatePageがあったら差分を扱えるように、先にセーブされたデータをバッファーにためるようにして、diffをマージできるようにする データサーバに接続されているかどうかなどの、ステータスインジゲーターを作る データサーバのupdatePageコマンドのUUID検証ロジックについて正しく機能しているか調べる。 データサーバの実装 addTag deleteTag コマンドの実装 queryTag コマンドの実装 前回からの持ち越し 持ち越し分 内部構造を説明する図とかドキュメントを作る ...

2025年12月18日

2025/12/18-やったことリスト

この記事を作った動機 2025/12/11 から、2025/12/18 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 動作の様子 TODOs TODOs 2025/12/18 になる間やる項目たち。やりきれなかった分は次に持ち越し。 メイン(持ち越し、新規混合) バックエンドの実装 ターゲット層を明確にする ネットワーク監視について実装を思いついた案に基づいて進める バックエンドの設定についてフロントエンドにUIを設けたい 全体的なページやノートブックのメタデータなどにおける時間の扱いを全部 UnixTime の秒単位に置き換える フロントエンドのネットワーク周り useDatabaseStoreをuseNetworkStoreに名前を変更する。 send関数をuseDatabaseStore(useNetworkStore)内にあるものに置き換え、旧来のsend関数の実装を廃止する。 createPage.tsxの実装で、ページタイプを取得するとネットワーク周りがバグってリクエストした履歴が消えない結果、未接続の状態として判定されてしまうというバグを何とかする。 free ページの実装 フロントエンド 共通のUIについて、使い方の説明について、ドキュメントを書いた。 overlayWindow messagebox toolsbar page 実際に変更があったら、変更内容をリアルタイムで保存するようにする。 別のページを開いたときとかに、バグって変なタイミングでデータを保存しようとするのを止める セーブする際に、ページのUUIDが一致するか確かめてからセーブする。 書式設定に関する edit toggleable を作る。文章をどこに寄せるかとか、フォントサイズとか、フォントカラーとかそういう細かい設定ができるようにする。 アイテムが何もないページにおいて、アイテムの追加時に、どんなアイテムタイプが利用可能か取得するのに失敗するのをどうにかする。 リアルタイムセーブがバグることについて調査する。別のページを開いたとき、Freeページコンポーネント自体やその変数の中身が、どういう状態になっているのかを調べる。 Metadata を表示できるようにする Free ページの要素について、基本要素の項目にアイテムの色をRGBAで設定できるようにする。 とりあえず、まだ色を変更するUIがないが、RGBAとしてCSSスタイルを設定してアイテムごとの色を反映するようにFreeページの実装を更新はした。 色を設定するUIや項目へのアクセスボタンを実装する。 -> すべてのアイテム共通の設定項目であるため、汎用に設定項目を表示できるpropertiesとは独立して、commonsの一部として実装する。 設定UIで色の一部が正しく表示できていないバグをなおす。 -> padStart commonsが正しく色を更新できないバグを何とかする。 z-index をちゃんと更新するようにする useFreePageItemsStore の items や activeItems の配列をページごとに分離して管理するようにする。 どうしてもzustandを使ったグローバルなアイテム管理が暴走する場合は、Freeコンポーネント内部でアイテムを管理するように実装を変更する。 -> とりあえず zustand を使った実装で続行。 範囲選択の実装 -> activeItemsを操作する 編集機能、データセーブ(更新)の実装 free ページにおいて、保存が成功するまでは、変更があってから保存されるまでの間に、バッファーを保持するようにする。 バックエンド割り込みの実装 updatePageの割り込みがあった時に、どのページがセーブされたかIDをUUIDをデータとして含める updatePageがあったら差分を扱えるように、先にセーブされたデータをバッファーにためるようにして、diffをマージできるようにする データサーバに接続されているかどうかなどの、ステータスインジゲーターを作る データサーバのupdatePageコマンドのUUID検証ロジックについて正しく機能しているか調べる。 データサーバの実装 addTag deleteTag コマンドの実装 queryTag コマンドの実装 前回からの持ち越し 持ち越し分 内部構造を説明する図とかドキュメントを作る ...

2025年12月14日

2026/1/8-やったことリスト

この記事を作った動機 2025/12/25 から、2026/1/8 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 動作の様子 TODOs TODOs 2026/1/8 になる間やる項目たち。やりきれなかった分は次に持ち越し。 メイン(持ち越し、新規混合) バックエンドの実装 ターゲット層を明確にする ネットワーク監視について実装を思いついた案に基づいて進める バックエンドの設定についてフロントエンドにUIを設けたい 全体的なページやノートブックのメタデータなどにおける時間の扱いを全部 UnixTime の秒単位に置き換える フロントエンドのネットワーク周り useDatabaseStoreをuseNetworkStoreに名前を変更する。 send関数をuseDatabaseStore(useNetworkStore)内にあるものに置き換え、旧来のsend関数の実装を廃止する。 createPage.tsxの実装で、ページタイプを取得するとネットワーク周りがバグってリクエストした履歴が消えない結果、未接続の状態として判定されてしまうというバグを何とかする。 free ページの実装 フロントエンド 共通のUIについて、使い方の説明について、ドキュメントを書いた。 overlayWindow messagebox toolsbar page 実際に変更があったら、変更内容をリアルタイムで保存するようにする。 別のページを開いたときとかに、バグって変なタイミングでデータを保存しようとするのを止める セーブする際に、ページのUUIDが一致するか確かめてからセーブする。 書式設定に関する edit toggleable を作る。文章をどこに寄せるかとか、フォントサイズとか、フォントカラーとかそういう細かい設定ができるようにする。 アイテムが何もないページにおいて、アイテムの追加時に、どんなアイテムタイプが利用可能か取得するのに失敗するのをどうにかする。 リアルタイムセーブがバグることについて調査する。別のページを開いたとき、Freeページコンポーネント自体やその変数の中身が、どういう状態になっているのかを調べる。 Metadata を表示できるようにする Free ページの要素について、基本要素の項目にアイテムの色をRGBAで設定できるようにする。 とりあえず、まだ色を変更するUIがないが、RGBAとしてCSSスタイルを設定してアイテムごとの色を反映するようにFreeページの実装を更新はした。 色を設定するUIや項目へのアクセスボタンを実装する。 -> すべてのアイテム共通の設定項目であるため、汎用に設定項目を表示できるpropertiesとは独立して、commonsの一部として実装する。 設定UIで色の一部が正しく表示できていないバグをなおす。 -> padStart commonsが正しく色を更新できないバグを何とかする。 z-index をちゃんと更新するようにする useFreePageItemsStore の items や activeItems の配列をページごとに分離して管理するようにする。 どうしてもzustandを使ったグローバルなアイテム管理が暴走する場合は、Freeコンポーネント内部でアイテムを管理するように実装を変更する。 -> とりあえず zustand を使った実装で続行。 範囲選択の実装 -> activeItemsを操作する 編集機能、データセーブ(更新)の実装 free ページにおいて、保存が成功するまでは、変更があってから保存されるまでの間に、バッファーを保持するようにする。 バックエンド割り込みの実装 updatePageの割り込みがあった時に、どのページがセーブされたかIDをUUIDをデータとして含める updatePageがあったら差分を扱えるように、先にセーブされたデータをバッファーにためるようにして、diffをマージできるようにする データサーバに接続されているかどうかなどの、ステータスインジゲーターを作る データサーバのupdatePageコマンドのUUID検証ロジックについて正しく機能しているか調べる。 データサーバの実装 addTag deleteTag コマンドの実装 queryTag コマンドの実装 前回からの持ち越し 持ち越し分 内部構造を説明する図とかドキュメントを作る ...

2025年12月29日

2026/1/15-やったことリスト

この記事を作った動機 2026/1/8 から、2026/1/15 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 動作の様子 今回は特に大きな変化はないので特になし。 TODOs TODOs 2026/1/15 になる間やる項目たち。やりきれなかった分は次に持ち越し。 メイン(持ち越し、新規混合) バックエンドの実装 ターゲット層を明確にする ネットワーク監視について実装を思いついた案に基づいて進める バックエンドの設定についてフロントエンドにUIを設けたい 全体的なページやノートブックのメタデータなどにおける時間の扱いを全部 UnixTime の秒単位に置き換える フロントエンドのネットワーク周り useDatabaseStoreをuseNetworkStoreに名前を変更する。 send関数をuseDatabaseStore(useNetworkStore)内にあるものに置き換え、旧来のsend関数の実装を廃止する。 createPage.tsxの実装で、ページタイプを取得するとネットワーク周りがバグってリクエストした履歴が消えない結果、未接続の状態として判定されてしまうというバグを何とかする。 free ページの実装 フロントエンド 共通のUIについて、使い方の説明について、ドキュメントを書いた。 overlayWindow messagebox toolsbar page 実際に変更があったら、変更内容をリアルタイムで保存するようにする。 別のページを開いたときとかに、バグって変なタイミングでデータを保存しようとするのを止める セーブする際に、ページのUUIDが一致するか確かめてからセーブする。 書式設定に関する edit toggleable を作る。文章をどこに寄せるかとか、フォントサイズとか、フォントカラーとかそういう細かい設定ができるようにする。 アイテムが何もないページにおいて、アイテムの追加時に、どんなアイテムタイプが利用可能か取得するのに失敗するのをどうにかする。 リアルタイムセーブがバグることについて調査する。別のページを開いたとき、Freeページコンポーネント自体やその変数の中身が、どういう状態になっているのかを調べる。 Metadata を表示できるようにする Free ページの要素について、基本要素の項目にアイテムの色をRGBAで設定できるようにする。 とりあえず、まだ色を変更するUIがないが、RGBAとしてCSSスタイルを設定してアイテムごとの色を反映するようにFreeページの実装を更新はした。 色を設定するUIや項目へのアクセスボタンを実装する。 -> すべてのアイテム共通の設定項目であるため、汎用に設定項目を表示できるpropertiesとは独立して、commonsの一部として実装する。 設定UIで色の一部が正しく表示できていないバグをなおす。 -> padStart commonsが正しく色を更新できないバグを何とかする。 z-index をちゃんと更新するようにする useFreePageItemsStore の items や activeItems の配列をページごとに分離して管理するようにする。 どうしてもzustandを使ったグローバルなアイテム管理が暴走する場合は、Freeコンポーネント内部でアイテムを管理するように実装を変更する。 -> とりあえず zustand を使った実装で続行。 範囲選択の実装 -> activeItemsを操作する 編集機能、データセーブ(更新)の実装 free ページにおいて、保存が成功するまでは、変更があってから保存されるまでの間に、バッファーを保持するようにする。 バックエンド割り込みの実装 updatePageの割り込みがあった時に、どのページがセーブされたかIDをUUIDをデータとして含める updatePageがあったら差分を扱えるように、先にセーブされたデータをバッファーにためるようにして、diffをマージできるようにする データサーバに接続されているかどうかなどの、ステータスインジゲーターを作る データサーバのupdatePageコマンドのUUID検証ロジックについて正しく機能しているか調べる。 データサーバの実装 addTag deleteTag コマンドの実装 queryTag コマンドの実装 前回からの持ち越し 持ち越し分 内部構造を説明する図とかドキュメントを作る ...

2026年1月8日

2026/1/22-やったことリスト

この記事を作った動機 2026/1/15 から、2026/1/22 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 動作の様子 今回は特に大きな変化はないので特になし。 TODOs 今は実装には手を出さないようにしているので、特になし。 やったことの詳細 卒論を書いた 誤字脱字の修正 冗長な表現を削除 修正案の反映 参考にしたサイトとか 今回は特になし。

2026年1月27日

2026/9/16-やったこと

この記事を作った動機 2026/9/16 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 次に軽くやりたいことを記述 割り込みの呼び出しが、コマンドモジュールから、コマンドコントローラのプロセスを介して、割り込みのプロセスへ IPC するようにする。 フロントエンドの割り込みの実装を今の試作物の DataServer に適合させる。 フロントエンドが DataServer の拡張機能読込み時に HTML CSS JS としてビルドされて配置され、それがホスティングされるようにデータサーバを実装する。 pexpect のログをファイルシステム上の位置を決めてテキストファイルとしてそれぞれ書き出すようにし、ユーザーにはそれを独立した端末で watch -n 0.1 "cat log | tail -n 10" のようにして動いている様子が確認できるようにする。できれば各コントローラやホスティングのプロセスでも同じようなログの出し方をしたい。 データサーバ実行において、端末セッション維持に使っている pexpect の実装を見直す。subprocess ライブラリを使うように変更するか、pexpect においてログが出るようにしながら、pexpect のタイムアウトでサーバーが強制終了しないようにする。 各拡張機能が設定を持てるように実装する。 拡張機能のファイルの読み書きが衝突しないようにするためのコントローラを実装し、ファイルの読み書きを各拡張機能モジュールに対して、統一したヘルパー関数を経由するようにする。ヘルパー関数は、各コントローラプロセスから、IPC によってファイルを読み書きするためのプロセスにアクセスし、リクエストを送り、結果を待機して各モジュールと接続される。各モジュールは、ファイル読み書きのヘルパー関数を呼び出すとき、リクエストだけではなく、リクエスト完了時やエラー時のコールバック関数を登録し、処理が続行されるようにする。 やったことの詳細 現状の動作の様子 現状としてはかろうじて動くという感じでバグや不具合だらけである。DataServer なのか、それとも卒論の試作物で使いまわしているフロントエンドの実装がいけないのか、切り分けがついていないことも多く、しばらくは調査が必要そうである。特にページコントローラ周りが動作が不安定である様相が見受けられる。これは、拡張機能名とUUIDがモジュール名に加えて解決が必要になったことが影響していると考えられる。 動画中では撮影中に気づいた不具合があり、動揺しているが表示と作ろうとしているページが一致していないことが分かった。これはフロントエンドのif,elseの実装が多分確認がまだできていないが良くない気がしており、未知のページタイプををすべてjsonとして扱うように実装していたのが影響している可能性がある。新しく実装したDataServerが返すページタイプのリストが、今の一時的にあてがっているフロントエンドに適合していないため、色々とそこら辺で不具合が発生しているように思われる。 拡張機能を導入するためにしたこと モジュールに渡す引数をクラスで共通化して定義 コントローラの引数のモジュール呼び出しの定義を変えると、連動して拡張機能側のモジュールも引数を正しい順番や名前で合わせる必要があり、煩雑になるため、クラスにまとめて小さな変更が大きな影響として波及しにくいようにした。 主な役割として、mainSystem のサブシステムからモジュールに対して共通して提供する関数群や設定、必要があればフロントエンドとの接続についてなどを保持、伝搬することがある。 実装 class commandModuleArgs: def __init__(self,request:dict,websocket:ServerConnection,Settings:dict) -> None: self.request = request self.websocket = websocket self.settings = Settings self.funcs = { # common lib "showJSONMessage" : showJSONMessage, "dataKeyChecker" : dataKeyChecker, "timeString" : timeString, "findNotes" : findNotes, "checkTheAbsolutePath" : checkTheAbsolutePath, "deleteDataSafely" : deleteDataSafely, "updateNotebookMatadata" : updateNotebookMatadata, "readMetadataFormMarkdownPage" : readMetadataFormMarkdownPage, "mkdir" : mkdir, # access passive controller "callInterrupt" : callInterrupt, "getPageTemplate" : getPageTemplate, "getPageTypeList" : getPageTypeList, # server response "NotImplementedResponse" : NotImplementedResponse, "malformedRequestResponse" : malformedRequestResponse, "internalServerErrorResponse" : internalServerErrorResponse, "notFound" : notFound, "malformedRequestChecker" : malformedRequestChecker, } # def getArgs(self) -> dict: # return { # "request" : self.request, # "websocket" : self.websocket, # "funcs" : self.funcs, # "Settings" : self.settings # } class interruptModuleArgs: def __init__(self,data:dict,websocket:ServerConnection,allWebSocketConnections:list[ServerConnection]) -> None: self.data = data self.mainConnection = websocket self.allConnection = allWebSocketConnections self.funcs = { "sendInterrupt" : sendInterrupt } # def getArgs(self) -> dict: # return { # "data" : self.data, # "mainConnection": self.mainConnection, # "allConnection" : self.allConnection, # "funcs" : self.funcs # } class pageModuleArgs: def __init__(self,data:dict) -> None: self.data = data self.funcs = { # common lib "showJSONMessage" : showJSONMessage, "dataKeyChecker" : dataKeyChecker, "timeString" : timeString, "findNotes" : findNotes, "checkTheAbsolutePath" : checkTheAbsolutePath, "deleteDataSafely" : deleteDataSafely, "updateNotebookMatadata" : updateNotebookMatadata, "readMetadataFormMarkdownPage" : readMetadataFormMarkdownPage, "mkdir" : mkdir, } # def getArgs(self) -> dict: # return { # "data" : self.data, # "funcs" : self.funcs # } class taskModuleArgs: def __init__(self,Settings:dict) -> None: self.settings = Settings self.funcs = { # common lib "showJSONMessage" : showJSONMessage, "dataKeyChecker" : dataKeyChecker, "timeString" : timeString, "findNotes" : findNotes, "checkTheAbsolutePath" : checkTheAbsolutePath, "deleteDataSafely" : deleteDataSafely, "updateNotebookMatadata" : updateNotebookMatadata, "readMetadataFormMarkdownPage" : readMetadataFormMarkdownPage, "mkdir" : mkdir, } # def getArgs(self) -> dict: # return { # "funcs": self.funcs # } ...

2026年9月13日

2026/9/9-やったこと

この記事を作った動機 2026/9/9 に至るまでの間で OneNote 代替に関して、実装をするなど研究を進めているうちにわかったことなどを簡易的に記録する。 次に軽くやりたいことを記述 コントローラープロセス間のファイル書き込み衝突を回避する実装 Core拡張機能と、コントローラーにおいて、設定を伝搬するように実装 拡張モジュールにmainSysから共通で提供する関数(インターフェース)を引数として辞書型などにまとめ、モジュールに渡して呼び出せるようにする コントローラーのログを見えるように、マルチプロセッシングに関して調べる コントローラー間をマルチプロセッシングライブラリのIPC実装でつなげる pexpect の端末セッションや、マルチプロセッシングで独立したプロセスとして動くプロセスのそれぞれの出力は、独立したターミナルを立ち上げるようにする。GUI環境であれば、GUIのインストールされているターミナルエミュレーターを複数起動し、それぞれのセッションやプロセスに端末を1つずつ割り当て、ログの可読性向上を図る。 拡張機能を読み込み終わったあと、依存関係に関して不足がないか確認する処理を導入する。具体的には各拡張機能の依存関係リストに対して、読み込んだ拡張機能を線形探索で単純にそれぞれ照合して不足がないか確認する。 卒論の試作物から、フロントエンドをコピーしてきて、今回の試作物の DataServer の動作検証ができるように改変する。Core拡張機能の呼び出し名に対応させ、割り込みとコマンドに関して、それぞれが独立してwebsocket接続を持つようにする。 やったことの詳細 DataServer の起動オプションを追加 DataServer について、拡張機能を読み込むだけの動作と、読み込んだ拡張機能をもとに、DataServer を起動させようとすることを分けてユーザーが明示してそれぞれ操作できるようにするために、argparseライブラリによって以下のようになるように実装した。 以下は、argparseに関する実装が正しくできたかテストした様子である。引数に対してどう動作するか確かめたかったので、実際に拡張機能を読み込んだり、DataServer を起動する機能は一時的にコメントアウトしてテストした。何も出力がターミナルに出ていないとき、引数が受理され、正常に動作したことを示す。 python main.py --loadExtension # 何も出力しない python main.py --startServer # 何も出力しない python main.py --loadExtension --startServer #--loadExtension and --startServer cannot be set at the same time. python main.py --loadExtension aaa #usage: main.py [-h] [--loadExtension] [--startServer] #main.py: error: unrecognized arguments: aaa Core 拡張機能の機能を一時的に制限 卒論で書いた試作物のフロントエンドと今回試作している DataServer 間で一旦動作を確認したいため、すでに実装がある程度できており、卒論時点で動いていたモジュールに限定して動作するように実装を変更した。 変更前 { "name": "Core", "UUID": "589fe65d-639c-42a3-b395-fca2143afd75", "description": "Manage notebook and pages. Provide basic notebook interface.", "frontend":{ "modules": [] }, "DataServer":{ "CommandModules":[ "backend/commands/info.py", "backend/commands/notebookAndPage/createNotebook.py", "backend/commands/notebookAndPage/deleteNotebook.py", "backend/commands/notebookAndPage/getPageType.py", "backend/commands/notebookAndPage/pageInfo.py", "backend/commands/notebookAndPage/updatePage.py", "backend/commands/notebookAndPage/copyPage.py", "backend/commands/notebookAndPage/createPage.py", "backend/commands/notebookAndPage/deletePage.py", "backend/commands/notebookAndPage/movePage.py", "backend/commands/notebookAndPage/renamePage.py", "backend/commands/notebookAndPage/addTag.py", "backend/commands/notebookAndPage/createTag.py", "backend/commands/notebookAndPage/deleteTag.py", "backend/commands/notebookAndPage/getTagList.py", "backend/commands/notebookAndPage/queryTag.py", "backend/commands/notebookAndPage/removeTag.py", "backend/commands/notebookAndPage/fileAdd.py", "backend/commands/notebookAndPage/fileData.py", "backend/commands/notebookAndPage/fileDelete.py", "backend/commands/notebookAndPage/fileInfo.py" ], "InterruptModules":[ "backend/interrupts/newInfo.py", "backend/interrupts/updatePage.py", "backend/interrupts/updateTag.py" ], "TaskModules":[ "backend/tasks/pageCleaner.py", "backend/tasks/showPingMessage.py" ] }, "extensionDependencies":[ ] } ...

2026年9月8日