Livedoorブログからの移動

Tagsistant

論文だったり自分のメモだったりをまとめるためのシステムとして, Dropboxとか, Google Scholarのマイライブラリだとか色々使ってみたけど, どれも一長一短だった.

で, 今回tagsistantというものを見つけて, 適当にスクリプト書いたら上手く使えそうだったので使ってみた. この作業時の所感をまとめておく. 細かい使い方等は書いていないのでそういうのを知りたい人は他のところみてください.

どんなもの?

一般的なファイルシステムにタグシステムを導入して統合したもの. タグを用いて管理しつつ, 同時にそれをただのファイルシステムとしてシェルから叩ける. 多分だけど論文としてはTagFSが近いのではないか. その後継研究としてtagsistantの論文あるかもしれないけど自分は読んでいない.

インストール

githubから落としてきてコンパイルしようと思ったのだが, なぜか上手くいかない. なので, Debian/Ubuntu用のpackageを持ってきて,

$ sudo dpkg -i tagsistant_0.8.1a-1_14.04-amd64.deb

でインストールした(自分は). 本当を言うとバージョン管理のためにgithubから落としてきたいのだけれども.

使い方

公式のドキュメント参照. 細かく触れるのは色々大変だし, 自前でスクリプト書いた後生で触ってないので最近忘れてきたので.

スクリプト

自分用のスクリプトをgithubに公開した. zshを使っている人なら補間(最低限)ありなのでそれなりに使えると思う. 使い方はREADME参照のこと.

ちなみに, 全部英語で書いているのは英語力を高めようとする意思の現れ. 間違ってても怒らないで.

感想

これを使ってみようと思ったきっかけは, 「ファイルシステムだとファイル管理が面倒,でもタグ付けはGUI上でしかできないことが多いからシェルにいることの多い自分には使いづらい」という問題を解決しようとしたから. 結果として, この問題はある程度解決できた. スクリプトかけるし, 関係の定義もできるし, 自分的には満足.

一方で問題点としては, 閲覧が面倒なことが一番大きいと思う. ただし, これについては, 自作スクリプトの難点というのも少なからず存在する.

利点

  • ウェブブラウザやSNS等では一般的なタグ管理を, ローカルのファイルシステムにも適用できる.
  • ファイル構造の作り方で悩まなくていい.
  • 適当にファイル放り込んでもそこまでごちゃごちゃにはならない.
  • スクリプトが書きやすい.

欠点

  • 閲覧・検索には弱い. 具体的には, ファイルシステムとして全部扱おうとした限界と, 補間機能の弱さが原因で使い勝手が悪くなっているように思えた.
  • オンラインストレージ上での使用が難しい. これはUNIXファイルシステムに載せた以上当然の結果.

以後の予定

tagsistantを使う最低限のインフラは整ったけど, まだまだやりたいことはある. 大きく上げると以下のとおりかな.

  1. スクリプトの改良
    • alias機能に触っていないのと, 色々と検索機能が残念.
    • 検索機能については, Consoleアプリケーションの作成も考えている.
  2. Firefoxへの統合
    • 最近, evince(ドキュメントビューア)がemacsバインドじゃないことに疲れてきている. そこにきてFirefoxはkeysnailのおかげでemacsバインドかつpdf閲覧が可能
    • emacsでpdfがちゃんと見られればいいんだけどかつそれを可能にする能力はありそう(pdftools)なんだけど・・・
      • いかんせん一度pngにレンダリングというのが足を引っ張っているのか遅いのが気になる.
      • 非同期IOとか組み合わせてどうにかできるならしたい.
  3. Google Scholarとの連携
    • そもそもが論文管理が目的なので, Google Scholarから学会名・著者名等を引っ張ってこれるならすごく便利.
    • Google ScholarにはそもそもAPIが無いので, 使うとすればfirefox上からの使用となるだろうと思う.
  4. 色々とデータ提示方法が残念
    • タグ間の関係とか, machine tagの状態とかがよくわからない.
    • scalaのDSL書くかもしれない. 現状では以下のような設定ファイルを作り, それを事前にコンパイルしておくことを考えている.

      "tag1" < "tag2" // tag2 includes tag2
      "tag1" == "tag2" // tag1 is equivalent tag2
      empty("tag1" * "tag2") // tag1 excludes tag2
      (x, y) => x.startsWith(y) -> x < y // yがxのprefixであるならば, x include y
  5. レポジトリ単位のプラグイン
    • レポジトリごとにプラグインを設定して, タグ付けの方法などを変更したい.