Oh! Can Not Diary

おきゃんなダイアリー

elispでカップリングするcoupling.el

この記事はEmacs Advent Calendar jp: 2011 の 18 日目です。17 日目は、@masutakaさんの私の.emacsからピックアップした設定3つ #EmacsAdventJP [Emacs]でした。

こんばんは。Emacs(腐)女子のおきゃんです。今年も皆さんが役立つTipsをあげてくださっている中、こんなネタ記事しか書けず大変申し訳ない気分でいっぱいですがどうか箸休め的な感じで見ていってください。

coupling.elについて

ということで、coupling.elの紹介です。
coupling.elは、指定したディレクトリの拡張子を取り除いたファイル名のリストから、ランダムにカップリングを生成してミニバッファーに表示するelispです。
意外な組み合わせが、アイディアを生み出すヒントになるかもしれません!
# タイトルはelispで〜とありますが、デフォルトをelispのディレクトリにしているだけでどこでもありです。

インストール

使う人がいるとは思えませんが、インストール方法です。
https://gist.github.com/1493361からダウンロードし、ロードパスの通ったところに置いて、init.elなり.emacsなりに以下のように記述します。
coupling-source-directoryは適当に好きなディレクトリ名を設定してください。デフォルトは"~/.emacs.d/elisp"になっています。

;; coupling
(require 'coupling)
(setq coupling-source-directory "~/.emacs.d/elisp/test") ; 任意のディレクトリ
(global-set-key (kbd "C-c b") 'coupling-from-directory)
;; key-chordインストール済みの場合
(key-chord-define-global "bl" 'coupling-from-directory)

これで、key-chordを使っている人なら、blと打つだけで次々とミニバッファーにカップリングが生成される!!!素敵!!!!!

f:id:oh_cannot_angel:20111218041325p:plain

経緯と今後の方針

elispで掛け算するのが趣味なので、自動的に生成できたら面白いかなと思って作りました。なので、ファイル名でカップリングするというちょっと気持ち悪いことをしています。が、気が向いたら、ディレクトリを複数指定できるようにしたりとか、マンガやアニメキャラのリストを用意してそこから選べるようにしたりとかできたら楽しいかなとか考えています。



明日は@myuheさんの sheephead: Stay hungry Stay foolishです。では引き続きEmacs Advent Calendar:2011をお楽しみください。

reverse

テスト。

(define A "abcde")
(define B "1234")

(define rev-list
  (lambda (list new-list)
    (cond
     ((null? list) new-list)
     (else (rev-list (cdr list) (cons (car list) new-list))))))

(define rev
  (lambda (str)
    (cond
     ((null? str) null)
     (else (list->string (rev-list (string->list str) '()))))))

(rev (string-append (rev A) (rev B))) ;1234abcde

reverse

例の30minプログラミングから。

問題1

文字列 A と B があり、C を A+B とする。文字列を逆順にする関数 rev() をつかって、
rev(rev(A) + rev(B)) という操作をすると結果はどうなるか。
まず予想したあと、実際にプログラムを書いて確かめよ。
例: A="abcde"、B="1234"、C="abcde1234"

予想はC="1234abcde"
Schemeで書きました。

(define A "abcde")
(define B "1234")

(define rev-list
  (lambda (list new-list)
    (cond
     ((null? list) new-list)
     (else (rev-list (cdr list) (cons (car list) new-list))))))

(define rev
  (lambda (str)
    (cond
     ((null? str) null)
     (else (list->string (rev-list (string->list str) '()))))))

(rev (string-append (rev A) (rev B))) ;1234abcde

# ハイライトされてないけど…

実行結果
http://ideone.com/oXJPh
# ideoneだとwriteしないとoutputに出なかったのでちょっと変えています。

rev()を使ってswapができますよという話でした。でも再帰向いてないですよね。
あとこの時の勉強会で、何割のプログラマが再帰を使ったプログラムが書けるかという話になり、9割、3割、1割、1%という意見が出ました。さあどれくらいいるでしょう。

30minプログラミングのこと

私はいま客先常駐の身なのですが、常駐組の同僚数名で週一回、昼休みにスマホ勉強会というのを開催しています。雑談で終わる時もあるゆるい感じですが、私が常駐始めた時には既に始まっていたので、なんだかんだで2年以上続いていることになります。そもそもAndroid勉強会という名前だったのが、私がiPhoneにしたこともあってスマホ勉強会になったといういきさつがあります。が、いまやスマホも関係なくなっています。ちょっと前まではカードゲームとかやっていました。(フランスのDixitとか。これはこれで面白かった。)で、最近はというと、オフラインという環境を生かしてネットレスコーディング修行というのをやっています。制限時間30分、言語自由、調べていいのは言語仕様のみというルールでその日の用意された課題から選んでプログラムを書いています。実際は、昼ごはん食べ終わってからとりかかると10分ぐらいしかありませんが…。私はいつもSchemeで挑戦してますが、上司が苦笑いしているのでそろそろPythonとかにしたほうがいいかなと思っています!!!しかし、2年前とはAndroidをとりまく環境も変わりましたし(HT-03Aが出たばかりでした)、勉強会の情報共有の手段もGoogle WaveからGoogle+に移行しましたし、時間の流れをしみじみと感じる今日この頃ですね。

diredメモ

先日の関西Emacs勉強会で、「diredでファイルとか開くときに今のディレクトリを表示したままにしたい」という話が出たような気がするんですが、私もとっさに出てこなかったりしたので、関連するコマンドをメモしておきます。

  • i

指定したサブディレクトリの内容をバッファの終りに追加する。

  • o

ファイルのバッファを別のウィンドウに表示する。ウインドウが分割されて、選択ウインドウもうつる。

  • c-o

ファイルのバッファを別のウィンドウに表示する。ウインドウが分割されるけど、選択ウインドウは今のウインドウのまま。


このoとC-oの微妙な違いが、Emacsらしいというか、奥が深くて好きです。

NyARToolKit for ProcessingをMacBookで試してみた

NyARToolKit for ProcessingのサンプルアプリをMacBookで動かしてみました。

ダウンロード

まずはNyARToolKit for Processingをここからダウンロード→http://sourceforge.jp/projects/nyartoolkit/releases/?package_id=8920
わたしが落としてきたのはnyar4psg-1.1.4です。

外部ライブラリ追加

そのままでサンプルアプリを動かしたら、ライブラリみつからんで!って怒られるので、Processingの外部ライブラリの追加方法を調べます。で、以下の通りいくつかあることがわかった。
(参考)"[Processing][仕様]外部ライブラリ(*.jar)の設置方法 : うえちょこ@ぼろぐ"
http://labs.uechoco.com/blog/2008/03/processingjar.html

codeフォルダに置く

nyar4psg-1.1.4/example以下にいくつかサンプルアプリがあり、それぞれにcodeフォルダがあるので、その中にnyar4psg-1.1.4/library/以下の*.jarをコピーします。(*.jarファイルだけ。)

ただし、当然アプリ毎にやらなきゃいけないので面倒ですよね。

ライブラリシステムを使う

いくつか規約があってややこしいですが、とりあえず…

Processing/Resources/java/modes/java/libraries以下に
・Nyar4psg/library/Nyar4psg.jar
・NyARToolkit/library/NyARToolkit.jar

というフォルダ構成でjarファイルをコピーします。

それからProcessingを再起動し、Skecheメニュー→import Libraryを選択すると、
Nyar4psgとNYARToolkitが増えてるので二つともクリックしてimportします。

すると、ずらずらっとimport文が出ます。多いですね。

マーカを用意

もうあとはマーカをかざすだけです。簡単ですね。
と思いきや(わかってたけど)問題発生。Hiroマーカが手元ありません。プリンタもありません。本は会社。

iPhoneでHiroマーカの画像検索して試してみましたがだめでした。

これは明日かなーと諦めかけましたが、暇だったので手書きでマーカを書いてみた。

f:id:oh_cannot_angel:20110623232355j:image:w360
さすがに適当すぎるかな〜wと思いつつかざすと…








f:id:oh_cannot_angel:20110624004341p:image


動いたー
マーカもすばやく認識してくれました。

どうでもいいですが、こういう写真に手が映るとなまなましくて嫌ですね。

まとめ

(手書きマーカでも)動いた

本家でも動くかもしれませんが、これくらいなら認識してくれるようです。

3Dプログラミング手軽にいろいろできそう

ARToolKitOpenGLとかメタセコとか難しそうで手を出しにくいイメージがありましたが、
Processingだったらもっと手軽にできそうでいいですね。