Skip to content

(*)電子目次

手書きノート用電子目次の開発、およびノート管理方式プロジェクト EPNIS(electrical physical note indexing system)

Section titled “手書きノート用電子目次の開発、およびノート管理方式プロジェクト EPNIS(electrical physical note indexing system)”

非リングバインダーの見開きページの利点、手書きの記憶定着、自由度を最大限に活用しつつ、 キーワード検索を電子的に可能にし、ツァイトブルク法 (Zettelkasten) の順番付き 相互参照も可能にして、記憶、整理、想起/発想のためのシステムを構築する。 これにより、パラパラと眺め、検索することも可能で、意図した順番にノートを読み直すことも可能となる。

  • ノートのページには ページ番号を物理的に書き込んで付与し、物理的にパラパラと読めるようにする
  • ノートは複数の例えばあるカテゴリーにできるだけ分けて、日々学習したことを書き込む
  • 記憶に定着させる対象をノート記載される対象としてのシステムとする。
  • 暫定的なメモ、日々アップデートされるTODOなどは対象としない。
  • 電子目次は簡易なテキストエディタで編集・追記が可能とする
  • 手動編集に加え、外部プログラムにより健全性を保ったり、ノートの
  • 「電子目次(k_index)」と呼ぶ物理ノートのページ番号を検索できるデータを作る
  • カンマ区切りのcsv形式とする
  • 文字コードはUTF-8とする
  • k_indexは複数の行から構成されk_rowと呼ぶことにする
  • k_rowはプログラム上は上限なしに持つことができる
  • k_rowの形式は「k_note,k_page, k_title, k_word_entries」とする
  • k_word_entriesは複数のk_entryをプログラム上は上限なく持つことができる
  • k_entryはk_word, k_orderの組であるとする
  • k_indexの一行はk_work,k_orderの組を上限なしに持つことができる
  • k_note
    • 半角英数字を許容
    • 全角英数字を非許容
    • 全角英数字を除く全角文字を許容
    • スペースは半角全角問わず非許容
    • 空文字は非許容
  • k_page
    • 0以上の整数値の実を許容
    • スペースは半角全角問わず非許容
    • 空文字は非許容
  • k_word
    • 半角英数字を許容
    • 全角英数字を非許容
    • 全角英数字を除く全角文字を許容
    • スペースは半角全角問わず非許容
    • 空文字は非許容
  • k_order
    • 1以上の整数値のみを許容
    • 空文字を許容
    • スペースは半角全角問わず非許容
    • k_orderの空文字はソート時に Infinity(無限大) として扱う
  • k_entryについての制約
    • k_word,k_orderは必ず対で存在する
    • 同じk_wordを持つk_entryは一つのk_rowに許容しない
    • k_note, k_page,k_titleには無関係に、同じk_entryは存在しない
1,23,javascriptの基本, object,1, javascript,3,javascript復習その1,3
1,34,javascriptの基本, array,1, javascript,2
1,23,javascriptの基本, object,1, javascript,3,javascript復習その1,3
1,34,javascriptの基本, object,1, javascript,, javascript復習その1
  • object,1のk_entryが複数のk_rowに出現しているので不正
  • k_wordのjavascript復習その1には全角数字が出現しているので不正
  • 二つ目のk_rowにはjavascript復習その1のk_wordにk_orderが存在しないので不正
  • 電子目次データは手動編集されるが、このデータを健全に保つプログラムを用意する
  • これを電子目次編集プログラム(k_edit)と呼ぶ
  • k_editは実行時引数を持つことができる。

    • “-f”オプションで開くk_indexファイルを指定することができる。-f指定されないデフォルトのファイルはindex.csv
    • “-w”オプションを指定すると開いたファイルに書き出しができるようになる(rオプションとは排他的)
    • “-r”オプションを指定すると開いたファイルに書き出しができなくなる(デフォルト指定)(wオプションとは排他的)
  • k_editは以下の機能を有する

    • コマンドを受け付ける
    • 読み込まれたk_indexをメモリ上に保持しそのの編集
    • 条件に合ったk_rowの表示
    • 条件に合ったk_rowの編集
    • メモリ上にあるk_indexのファイル出力
    • メモリ上の電子目次データの編集機能

k_editの機能と対応するコマンド

Section titled “k_editの機能と対応するコマンド”
  • k_editはコンソールで動作することが前提で、コンソールからコマンドを入力して実行する
  • 起動時には以下に定義するdコマンドを暗黙のうちに実行して健全性を確認する
  • コマンドを受け付けるときは点滅する”>”をプロンプトとして表示する
  • コマンドは以下の通り
    • h
      • ヘルプでコマンド一覧を表示
    • v
      • 現在のメモリ上にあるk_indexを表示
      • ソートなしでそのまま表示
    • r 検索文字列
      • 検索文字列に一致するk_wordを持つk_rowをフィルタリングして表示
      • 表示時には、ソートは最初の検索文字列に対してk_order順に行われる
    • R 検索文字列
      • rのコマンドを実行後、k_word_entriesを検索文字列でk_wordでフィルタして合致するk_entryのみを表示
      • 検索文字列にヒットするk_wordはk_rowにも複数ある可能性があることに注意
    • d
      • 健全性の評価を行い健全でない場合どこに問題があるかを表示する
      • このコマンドで健全性が確保されないときに他のコマンドは実行できない
      • 以下の理由でデータが壊れている場合は問題を指摘するメッセージとデータを表示する
      • エラー探索は以下の順で実行しエラーが出たらそこで停止する
        • 全k_rowに対して、k_noteの文字列チェック「ノートの文字列が不正です」
        • 全k_rowに対して、k_pageの文字列チェック「ページの文字列が不正です」
        • 全k_rowに対して、k_titleの文字列チェック「タイトルの文字列が不正です」
        • 全k_rowに対して、k_wordの文字列チェック「キーワードが不正です」
        • 全k_rowに対して、k_orderの文字列チェック「キーワードとペアとなる順番が不正です」
        • 複数のk_rowにまたがって同じk_entryが存在するチェック「同じキーワードで同じ順番を持つ列が存在します」
      • メッセージの表示方法は、最初の行にメッセージを表示引き続く行にエラーが出たk_rowを表示
    • i
      • 1,2,3,…k-1,k,k+1,…nをk_orderとしたときにk,k+1移行のk_orderを1インクリメントする機能
      • 本コマンドを実行する前に暗黙的にdコマンドを実行して正常なときにだけコマンド内容を動作させる
    • c k_word n1 n2
      • k_wordかつk_order=n1とk_order=n2のk_rowに対して、n1, n2の値を入れ替える
      • 本コマンドを実行する前に暗黙的にdコマンドを実行して正常なときにだけコマンド内容を動作させる
    • s
      • コマンド引数で -wオプションが指定されている場合に限りファイルを上書き保存
      • 本コマンドを実行する前に暗黙的にdコマンドを実行して正常なときにだけコマンド内容を動作させる
    • e ファイル名
      • 現在メモリ上に保管されているk_indexを指定されたファイル名で保存。上書はできない。
      • ファイルの出力形式はk_indexの形式を維持して保存
      • 本コマンドを実行する前に暗黙的にdコマンドを実行して正常なときにだけコマンド内容を動作させる
    • a k_note k_page k_title k_word K_order
      • このk_rowのデータをメモリ上のk_indexに付け加える
      • 形式が間違っている場合にはエラーを返す
      • 本コマンドを実行する前に暗黙的にdコマンドを実行して正常なときにだけコマンド内容を動作させる

k_editコマンドラインに指定する検索文字列

Section titled “k_editコマンドラインに指定する検索文字列”
  • 検索文字列は、文字列または、正規表現で指定できる
  • 正規表現の実装方式は採用技術の項を参照
  • 検索文字列は複数の文字列を半角スペースで区切って含むことができる
  • 検索文字列例
    • javascript
    • .*script
    • java.*
    • type.* java.*
    • *.script *.thon
  • 電子目次表示プログラム(k_ui)は電子目次データを人間に読みやすく表示する
  • k_ui上では表示内容を以下のように変更することができる
    • 特定のk_wordを含むk_rowだけの表示
    • 複数のk_wordを指定し、そのどちらかに一致するキーワードを持つ項目を表示可能
    • 複数のk_wordを指定し、その両方に一致するキーワードを持つ項目を表示可能
    • 定義されたk_word指定してk_orderでソートすることが可能
    • キーワード入力は自動補完可能
  • 画面上側にコマンド入力を受け付ける領域c_painが表示される

  • 画面下側にはk_indexや検索ソートされたk_rowを表示する領域d_paneが表示される

  • d_pane下にスクロールダウンする、c_paneはスクロールダウンしないで画面上部にとどまり続ける

  • d_paneにはデータ以外に上部にラベルが張ってある

    • ノート ▼,ページ,タイトル,キーワードがテーブルタイトルとなっている表でk_indexのデータを表示
    • ノートはk_note, ページはk_page, タイトルはk_page, キーワードはk_wordとk_orderのペアが該当
    • ノートの列にはソート機能とフィルタ機能が存在する
    • ノートの列には「ノート ▲」のように「テキストラベル」(ノート)と「ソート順」(▼)を示す部分から構成される
    • ノートの列の「テキストラベル」を押下したとき   - 「テキストラベル」をクリックするとノート名のどれを表示するのか、Excelのフィルターのように選べる
    • ノート列の「ソート順」を押下したとき
      • ascii順、ascii逆順、元のソートなしでラウンドロビンで選べる
      • ascii順の時は「▼」、逆順の時は「▲」、ソートなしでは「ー」が表示される
    • キーワードのところにはk_word,k_orderは組で表示する
  • c_painは以下の構成要素からなる

    • k_wordに対する検索キーワードを入力するテキストインプットが存在
      • リターン押下でデータを検索しフィルタリング表示となる
        • キーワードにマッチしたk_rowを検索し、そのk_rowのみを表示する
      • k_word入力時は自動補完が働く
      • k_wordは半角スペースで区切って複数入力できる
    • 検索キーワードをクリアするクリアボタンが右側にある
      • クリアボタン押下でテキストインプットがクリア
      • フィルタクリアされた状態となり全データの表示になる
    • 複数k_word選択時には全てをorでつなぐかandでつなぐかを指示するチェックボックスがある
    • k_wordでフィルタされている状態では、「キーワード」列のソートが可能になる
      • 「キーワード ▼」のような表示となり、「ソート順」が表示される
    • キーワード列の「ソート順」を押下したとき
      • ascii順、ascii逆順、元のソートなしでラウンドロビンで選べる

      • ascii順の時は「▼」、逆順の時は「▲」、ソートなしでは「ー」が表示される

  • 電子目次データ k_indexはcsv形式とし、UTF-8とする
  • 電子目次編集プログラムk_editの実装言語はpyhon(バージョンは最新バージョン)を採用する
    • k_editの正規表現はPythonのreモジュール、POSIX準拠を利用する
    • キーワードの自動補完はカスタム実装とする
  • ieditはZsh上、もしくは、windowsシェル上での動作を保証する
  • 電子目次のバージョン管理はGitを採用する
  • 電子目次の表示はhtml 5.0/UTF-8とし、ブラウザはchromeもしくはsafariを採用する
  • htmlから呼び出されるプログラムはtypescriptを採用する
  • 電子目次表示はセキュリティーなしのwebサーバとし、GitHubPagesを採用する
  • npm/Viteを使ってホットリロード機能などを利用して開発を行う

アーキテクチャ/システム全体構成

Section titled “アーキテクチャ/システム全体構成”
  • 物理ノート
    • ノート番号とページ番号が手で書き込まれている
    • k_uiのURLのQRコードが張り付けられている
  • ローカルPC
    • プロジェクトディレクトリが存在する
    • プロジェクトディレクトリには、k_indexの保管とk_edit,k_uiの開発ファイルが存在する -手動もしくはk_editでk_index(index.csv)を編集確認する
  • gitHub
    • k_indexの履歴管理する
    • k_uiプログラムの履歴管理する
    • k_editプログラムの履歴管理する
  • GitHubPages -k_uiとk_indexを保管しwebサーバでk_uiを表示する
  • 紙のノートは非常に優れた手書きインタフェースを持つ電子的な紙のノートに置き換えられるだろう
  • その際に手書きノートの書かれた順番は作成年月日に寄ってのソートに他ならなくなる
  • ただし、さらに未来に行かない限り、パラパラ読みのインタフェースをつけることは難しいだろう
  • その一点においてしばらくはこの物理ノートの利用が有意であることは間違いないだろう