Giter Site home page Giter Site logo

mycroft's Introduction

Mycroft: A Program for Managing Documents


Name: Satoshi Nakagawa Date: 2020-06-10


まとめ

Mycroft は 軽い軽い文書管理システムです。

文書ファイルはローカルな場所ならば、 どこに置いてもけっこうです。

文書ファイル名は単純(たとえばスキャンした日付) なままにして、 それの説明、キーワードは別ファイルに記述することが 前提とされています。

Introduction

(1) 文献を自炊することによって、 PDF ファイルが増えてきました。 (2) さまざまな事務書類をスキャンしているうちに 収拾がつかなくなってきました。

(1) の問題の解決のためにいろいろ ソフトを探し、 Calibre を しばらく使いました。 しかしながら Calibre はわたしの趣味にあいません --- あまりに仰々しすぎます。 もっと軽いプログラムがほしいのです。

(2) のためには 日本語のディレクトリ名をつかって、 日本語のファイル名をつかいました。 しかし、 このような階層的なタクソノミーでは 事務書類は処理しきれません。 いちばんいいのはタグ方式です。

データ構造

つぎのようなファイルがあるとします:

 20200608064751_001.pdf
 20200608064843_001.pdf
 20200609132634_001.pdf
 212228.PDF
 C-101.mp3

これまでは、(1) これらを Calibre に登録するか、 さもなくば、 (2) これらのファイルに適当なファイル名をつけて、 適当なディレクトリ名に入れるという作業をしていました。 どちらにしても手間ばかりかかって、 あまり整理する意味もありませんでした。

その代わりに、 これらのファイルを説明するファイルを作成します。 以下のような行から成り立っています:

 20200608064751_001.pdf::アマゾンの領収書(タオルその他)::\
   2020-06-05::finance,receipt, amazon
 20200608064843_001.pdf::サイドトレーの説明書::2020-06::\
   manual,captain stag, manual
 20200610091621_001.pdf:::東南大学出張証\
 明書::2020-06::wk,証明書::1
 2122228.PDF::A Logical Paradox by L. Carroll::bib,carroll-paradox
 C-101.mp3::mp3::1986年のフィールドワークの録音::1986::fieldwork,ende

一つのファイルが '::'と ',' とで区切られた1行の中で説明されます。 :: で区切られた部分をフィールドと呼びましょう。 五番目のフィールドはオプショナルです。

 1::2::3::4a,4b,4c,...::5

それぞれのフィールドは次のような意味です:

  1. ファイル名(ディレクトリ名はいらない、拡張子はかならずつける)
  2. ファイルの簡単で、わかり易い説明
  3. 日付
  4. キーワードが ',' で区切られて列挙されています
  5. より詳しい説明書がある場合、五番目のフィールドに 1 と 記入されます

特別な行

それぞれの行がドキュメントを指していまじゅ。 いくつか例外であるところの特別な行があります。

まず、空行と # で始まる行は無視されます。 ですから、なにかコメントを書き込みたければ、 # 以下に書いてください。

ただし、#conf: で始まる行は特別な意味があります。 たとえば次のようになっています:

  #conf:ps:/home/satoshi/Cloud/Gdrive/Data/ps/:
  パーソナルファイル:0000

表示の都合上2行になっていますが、じっさいは1行です。 こんどは : が区切り文字となっています。

1:2:3:4

1 は #confで、この行が特別なコンフィギュレーションだという ことを示しています。 2 は、このリストの所属するカテゴリーです。 ここでは ps(「パーソナル」という意味で、 わたしは使っています)がそのカテゴリー名です。 3 はじっさいに対象のファイルのあるディレクトリ (ウィンドウズでは「フォルダ」)の場所を示しています。 そして、 4 はカテゴリーの詳細な説明です(これが タイトルになります)。 そして 5 は意味がありません、とりあえず 0000 を書いておいてください。

html

mycroft はリストファイルから 複数の html ファイルを作成します。 じっさいに html ではなく、 org あるいは markdown のマークアップ言語で書かれた ファイルを作ります。 (org はまだできていません)。 orgemacs のなかで html にコンバートできます。 markdownpandoc をつかえば html にコンバートできます。

じっさい

ps-1.lst というファイルがあります。 (ファイルの内容はファイル名をクリックしてください。)

 mycroft ps-*.lst > myindex.md

とすると、 [[myindex.md]] というマークダウンファイルができます。 およびいくつかのタグクラウド用のマークダウン、 たとえば tax試験 ができあがります。 タグファイルは(あとで削除しやすいように) すべて TAG- という文字列ではじまっています。 ですから 試験 タグのファイル名は TAG-試験.md です。

それぞれのマークダウンファイル (md) は、 pandoc を使って html ファイル を作成してください。 myindex.htmlTAG-tax.htmlTAG-試験.html などができます。

以上でおしまいです。

適当なウェブブラウザで ローカルファイルである [[myindex]] に アクセスしてください。

五番目のフィールド

これまで四つのフィールドについてお話ししてきました。 じつは五つめフィールドに隠し機能があります。 行末に :: をつけて、 その後に 1 と書いてください。 下のようになります。

 20200608064751_001.pdf::アマゾンの領収書(タオルその他)::\
   2020-06-05::finance,receipt, amazon::1

そうすると、対象の pdf ファイルと 一部が同じ名前で 拡張子が .md のファイル (INF-20200608064751_001.md という名前のファイル)が出来上がります。 あとは、 この md ファイルに オリジナルのファイルの説明を書き込んでください。

Makefile や .gitignore の書き方

たとえばこんな Makefile をつくればいいでしょう。

 .phony: all list output clean cleanall
 MD=$(filter-out index.md INF-%.md, $(wildcard *.md))
 HTML=$(MD:.md=.html)
 PS=$(wildcard ps*.lst)
 FW=$(wildcard fw*.lst)
 ST=$(wildcard st*.lst)
 LIST=$(wildcard *.lst)
 LISTMD=$(LIST:.lst=.md)
 %.html : %.md
     pandoc -s -c hatena.css -w html -o $@ $<
 list: $(LISTMD)
 ps.md: $(PS)
     mycroft.pl $(PS) > ps.md
 fw.md: $(FW)
     mycroft.pl $(FW) > fw.md
 st.md: $(ST)
     mycroft.pl $(ST) > st.md
 clean:
     rm -f *~ *.BAK
 cleanall: clean
     rm -f TAG-* $(MD)
 output: $(HTML)
     cp *.html ~/Output/Project/dt/mycroft/
 all: list $(HTML) output

md や html は git で管理する必要はありません。 ただし、INF- ではじまるファイルと、 (おそらく) index.md という名前のファイルは きちんと管理する必要があるでしょう。

 *.md
 !INF-*.md
 !index.md
 *.html

mycroft's People

Contributors

merapano avatar

Watchers

 avatar

mycroft's Issues

md風のHLを許す

リストに MD風のSectionや Subsection(# ... ## ...)を許すようにする

  • 現在は # で始まる行はすべてコメントとなっている。
  • '#' のあとにスペースなしをコメントとし
  • '#' のあとにスペースをつけたら、そのままにする(md のHLとなる)ようにする

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.