ALGOBIT

2012/01/13

Evernote と DropBox を使った文書管理

Filed under: 離散的な気まぐれ — タグ: , — Kohyama @ 14:56
  • ローカル保存してある以下のような電子文書
    • Web上で公開されているが, じっくり読みたい, ネットにつながっていない場合(飛行機で移動中など)も読みたいためにローカル保存してあるようなもの.
    • 購入したもの.
    • 購入した紙の書籍からスキャンしたもの.
    • 自分の作成したもの.
  • ウェブページのブックマーク.

これら全てに対して,

  • 自分なりの規則性を持ってタグ付けして管理したい.
    フォルダ階層管理で十分なものはそれで良いとして,
    複数のノードに属させてカテゴリ管理したい場合は, Macエリアス(他のUnixライクOSシンボリックリンク, Windowsショートカット)を多用しなくてはならない.

  • (同じインターフェイスから)キーワード検索したい.
  • 自分の所有する複数のマシンで同じものを閲覧したい.(が, 上記理由でローカル保存はしておきたいもの対象)

とういわけで, かねてから重宝している DropBox と最近使い始めた Evernote を以下のように組み合わせてみた.
(「とっくにそうしているよ」という方ごめんなさい.)

まず, 複数の Mac で同じパスに DropBox のフォルダを配置する.
複数の Windows 機の場合も同じようにできると思う.
iPhone, iPad 他のスマートフォンやタブレット, および Mac/他のUNIXライクOS/Windows 混合で, 以下のようなことができるかは分からない.

  • 自分の作成するメモ
    Evernote のノートに記述

  • 自分の作成する文書のうち
    フォルダ階層に収まらない雑多なもの, 複数カテゴリーに属させておきたいもの, 同じインターフェイスから検索できるようにしておきたいものなど.

    • 編集した(編集中の)ファイルを DropBox に置く
    • 作成したノートのURLに file:// を付けて保存した文書のパスを入力.
      ノートのURLを編集状態にし, ファインダ(エクスプローラ他)からアイコンをドラッグドロップするとパスを入力できるので頭に file:// をつける.

    • 内容を表す一部分を Evernote が認識できる形式でクリップしてノートに貼付け.
  • Webページのブックマーク.
    ウェブブラウザに Evernote 拡張機能をインストールし, その機能でクリップ.

  • ネット上に公開されている電子書籍や論文をダウンロードしたもの.
    • DropBox の適当なフォルダに分類を気にせず保存.
    • 文書のタイトルをタイトルにして Evernote にノートを作成.
    • 作成したノートのURLに file:// を付けて, 保存した文書のパスを入力.
    • 作成したノートに元の URL へのリンクを作成.
      (ブラウザのアドレスバーからドラッグドロップ)

    • 文書の表紙や要約の部分などをクリップして, 作成したノートに貼付け.
      スキャンしたものでも, Evernote が OCR してくれるので, 内容でキーワード検索できる.
  • 購入した電子書籍や論文
    • DropBox の適当なフォルダに分類を気にせず保存.
    • 文書のタイトルをタイトルにして Evernote にノートを作成.
    • 作成したノートのURLに file:// を付けて保存した文書のパスを入力.
    • 文書の表紙や要約の部分などをクリップして, 作成した Evernote のノートに貼付け.

これら全ては自分なりの規則性をもってタグを付けておく.
これで O.K.

また, ウェブブラウザ用に Evernote の拡張機能を入れてあれば, ウェブを検索した時にノート内も検索してくれる(そう設定すれば)ので, 閲覧したかったものがローカル保存済みであれば, ダウンロードの時間が少々短縮できる.

クラウド万歳!

Evernote with DropBox

2012/01/06

Clojure でも mapBetween

Filed under: 離散的な気まぐれ — タグ: , — Kohyama @ 11:02

404 Blog Not Found:algorithm – mapBetween – 配列の隣接する2項にそれぞれ演算を施した配列
を見たので clojure でどうなるかやってみました.

(defn map-between [f s] (map (fn [[a b]] (f a b)) (partition 2 1 s)))

実行例

user=> (map-between #(- %2 %1) '())
()
user=> (map-between #(- %2 %1) '(0))
()
user=> (map-between #(- %2 %1) '(0 1))
(1)
user=> (map-between #(- %2 %1) '(0 1 4))
(1 3)
user=> (map-between #(- %2 %1) '(0 1 4 9))
(1 3 5)

partition は便利で,
partition n step coll
で, シーケンス coll から, n 個ずつの要素のリストを, step 個ずつずらしながら取得できます.

user=> (partition 2 1 '(:a :b :c :d :e :f))
((:a :b) (:b :c) (:c :d) (:d :e) (:e :f))

[[a b]] の [a b] の部分はパターンマッチです.
引数が二要素のリストなら a に第一要素が, b に第二要素が束縛されますので,
元のシーケンスから partition で一個ずつずらしながら, 二個ずつ要素を取得し,
map で, そのそれぞれの二個の要素に対して, それを引数として二引数関数 f を適用し,
全体をシーケンスとして返します.

追記: 2011.01.06
@omasanori さんからのご指摘 で, 無駄に無名関数ひとつ挟んでいたのを直しました.
@omasanori さんありがとうございます.


Stuart Halloway
オーム社
発売日:2010-01-26

Clojure は JVM 上で動く LISP 処理系の一実装です.
文法は S 式ですが, 現代的な言語の良いところを集めて, 洗練された言語である上に, JVM の上で動き, Java クラスライブラリとの相互運用を可能にすることで, 若い言語でありながらライブラリが追いつく前から実用できるという成る程なやり方.
(この本を読んでいる間に純 Clojure のライブラリもどんどん充実し, Java との相互運用の必要性も薄れ, CLR 版も開発が進んでる様子ですが..)
言語が洗練されているので, この本は薄いですが, Clojure を理解するのに十分と思えます. ただし密度は濃いので流し読みはできません.
まずはこの本を, と思い, 他の Clojure 本は読んでませんが, これから他の本も読んでみたいと思います.

Amit Rathore
Manning Pubns Co
発売日:2011-11-28

パート1(七章まで)は, Clojure がどうなっているかの説明だ.
「どうしてそうなっているか」, 「(あなたが知っているかもしれない)他のやり方のどの欠点を克服するためにそうなっているか」を, 必要なところはパラダイムの説明に何節か割いたり, 他の言語でのそのパラダイムの取り扱われ方の説明も交え, 懇切丁寧に書かれている.
Clojure について, LISP について, 一般のプログラミング パラダイムについて, 知らなかったことについてはもちろん, 既に知っているものについても, より理解が深まると思う.

パート2(八章以降)は, 実用のケーススタディだ. 自分の必要とするケースに併せて拾い読みしても良いし, ケース自体の勉強のために通読しても良いと思う.

以下は, 前書きからの引用(拙訳)
“より良い道具とはなんだろう. 何に対してより良いということだろう.より良い道具とは複雑さの管理をより良く助けてくれるようなものだと私は思う.結局, 「複雑さ」が我々の業界のこんな状況の根本的な原因なのだ.ブルックスは1986年という早い時期に複雑さについて論文で言及している.彼は本質的な(essential) 複雑さと本質的でない (accidental) 複雑さの区別を書いている.
本質的な複雑さとは目的領域にそもそも存在するものであり, 一方,
本質的でない複雑さとは目的領域の外から持ち込まれた複雑さである.
例えば, 税金の申告を取り扱うソフトウェアプロジェクトにおいて,
入り組んだ税金コードに起因する複雑さはその領域の一部であり, つまり本質的である.
難解なビジター・パターンを採用するとか, そういったことが引き起こす全ての複雑さは
本質的ではないものだ.

先ほどの言明を言い換えさせてもらうならば, 「より良い道具とは本質的でない複雑さを
最小限にするよう我々を助けてくれるようなものだ」と言える.
我々が我々の仕事を可能な限り良い方法で行えるようにする.
すばらしい道具とはそれ以上のものだ. 我々に力を与えてくれる. 道具自体の問題を持ち込んだりせず, 設計者やプログラマとしての我々の有効性を増幅してくれる.
LISP プログラミング言語はそういった道具になるべく設計されている.
そして Clojure は驚くほど良く設計された LISP である.”


Copyright © 2010 Yoshinori Kohyama All Rights Reserved.