Factorでツイートする

連鎖性プログラム言語FactorでTwitterにポストできたのでメモ.

Factor?

どうやらFactorはすごくマイナーなようなのでまずは紹介です.

Factorという連鎖性言語があります.
http://factorcode.org
連鎖性言語というのは要するにForthやPostScriptのようなスタック型言語のようなプログラム言語のことを指します*1

FactorはREPLや高階関数,同図像性*2といったLispめいた性質に加え,HTTPサーバやWebフレームワーク,OpenGLGUIなどの組込みライブラリが非常に充実しているという特徴があります.

ちなみに,REPLで

(scratchpad) "demos" run

とするとFactorのデモ一覧が出ます.

本題

Factorの組込みライブラリはTwitterもサポートしているので,これを使います.
REPLで

(scratchpad) "twitter" about

とすると,twitterボキャブラリの詳細が表示されます.

twitterボキャブラリはTwitter APIへのアクセスにconsumer-keyとconsumer-secretを要求するので,http://dev.twitter.comであらかじめ入手しておきます.また,ツイートするためにwrite権限も設定しておきます.

以下はTwitterにOAuth認証してhelloとツイートするコードです.URLをブラウザで開くのにMac OS Xのopenコマンドを使っているので,OS Xでしか動きません.

REPL上でこのソースをロードして,authorizeを評価します.

(scratchpad) authorize

すると認証ページが表示されるので,認証してPINコードを取得します.その後,

(scratchpad) "取得したPINコード" set-access-token-with-verifier
(scratchpad) hello

とすると,helloとツイートされます.

*1:厳密には違う. http://oss.infoscience.co.jp/factor/concatenative.org/wiki/view/Concatenative%20language/index.html

*2:コードとデータが同じであるという性質.

gnupack + Cygwin/Emacs24 が快適

いろいろ試した結果,WindowsでEmacs24使うならcygwin-gccでビルドしたEmacsが一番快適に使えるという結論に至りました.
gnupackで配布されているemacs24はmingwでビルドされているのですが,これが実はCygwinでビルドされたアプリとの相性が悪く,以下のような問題が発生したりします.

  • shell-modeからsshできない
  • sshできないのでssh経由でgitやbzrが使えない
  • ファイルパスの表現の仕方がCygwinと違うので一部elispが動かない

というわけで,CygwinでビルドしたEmacsをインストールします.

Cygwin版のgccを入れる

$ cyg-pm install -require gcc

Emacsのビルドに必要なライブラリを入れる

なんかごちゃごちゃやってたので,ビルドに何必要だったかは覚えてないですけど(ぇ
Emacsの実行に必要なパッケージは

$ cyg-pm search -require emacs

とかやるとでてくるので,これを参考に-develのサフィックスが付いたパッケージを入れとけばいいと思います.

ホームディレクトリのマウントポイントを変える

デフォルトでは /home が %INST_DIR%/home にマウントされてますがこれが実は厄介で,Emacs上のシェルから 非Cygwinアプリを実行しようとするとCygwinで認識してるパス(/home) と,非Cygwinアプリが認識してるパス(%INST_DIR%/home) が異なります.したがって,非CygwinアプリとEmacsが連動するような処理 (例えばflymakeでantを動かす場合) が正しく実行できなかったりします.ということで,gnupackのディレクトリにあるconfig.iniのHOMEを C:\home に変更してこれを回避します.

HOME           = C:\home

ソースを取ってきてビルド

ソースを取って~/src/emacsに展開.
インストール先は好きなところに入れればいいと思います.
私は~/installに入れました.
CCに/usr/bin/gccを設定しないとmingwのほうを使ってしまうので注意が必要です.

$ cd ~/src/emacs
$ CC=/usr/bin/gcc ./configure --prefix=$HOME/install
$ make && make install

出来上がりはこんな感じ.
f:id:st63jun:20120405160650p:plain

別途インストールしたtwittering-modeとanythingが動いてます.
X入れないので軽くて良いです.