pathogen.vimでスクリプトの管理
pathogen.vimはvimプラグインの管理をするのに便利なvimプラグイン。
導入などはhttp://d.hatena.ne.jp/mkataigi/20101107/1289134775 や http://d.hatena.ne.jp/ksmemo/20110111/p1 に書いてくれている人が居るので省略する。
全てのプラグインにgitレポジトリがあれば*1gitのsubmoduleを利用すれば自動で更新が出来るのだけど、mercurialで管理されていたり、vba、zipなどのアーカイブで配布されているものもある。そして、vimprocのように再makeする必要のあるものもある。
そういうものの管理は今までは手動でやってきたけれど、スクリプトを書いて自動化してみた。
#/bin/sh BUNDLE=~/.vim/bundle cd $BUNDLE for nm in * do if [ -d "$BUNDLE/$nm" ] ; then cd "$BUNDLE/$nm" echo "update $nm" case $nm in *.git) git pull ;; *.hg) hg pull ;; *.script) $BUNDLE/${nm}.update ;; *.manual) echo "please update manually." ;; *) echo "can't determine the way to update." ;; esac if [ -f "$BUNDLE/$nm.after" ] ; then $BUNDLE/${nm}.after fi cd .. fi done
全てのプラグインを統一的に扱うために、git submoduleの利用はやめて、プラグインの格納されているディレクトリ名の末尾でレポジトリの種類を.hgや.gitのように表すようにした。
更新した後で別のプログラムを走らせなくてはいけないときは、プラグインの格納されているディレクトリ名の末尾に.afterをつけた名前のファイルが実行されるようにした。
cygwinでpTeX-liveをビルドしてみた
まず、
http://tutimura.ath.cx/ptexlive/
からptexlive-20100322.tar.gzをダウンロードして、適当なCTANのミラーサイト(例えば http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/systems/texlive/Images/ )からtexlive2009-20091107.iso.xzをダウンロードする。
そのあと、
$ xz -d texlive2009-20091107.iso.xz
としたあと、生成された.isoをp7zipなり7zを使うなりして展開する。
例えば、i:\Data\tex\texlive2009に展開されたとすると、そこで
$ ./install-tl
として全ファイルをインストールする。
そして、PATHの先頭にインストール先の、実行ファイルのあるディレクトリを指定する。
そうしたら、ptexliveをダウンロードしたディレクトリ下で
$ tar xf ptexlive-20100322.tar.gz $ cd ptex-live-20100322 $ cp ptexlive.sample ptexlive.cfg
として、ptexlive.cfgを編集する。
自分の場合は以下のようにした(必要なところだけを抜粋)
### (必須・変更不可) ベースとなる TeX Live のバージョン TEXLIVE_VERSION=2009 ### (必須) mount した TeX Live 2009 DVD のディレクトリを指定 ISO_DIR=/cygdrive/i/Data/tex/texlive2009 ### (任意) インストールした TeX Live 2009 のディレクトリを指定 TEXLIVE_DIR=/usr/local/texlive/2009 ### (任意) インストールする ptexlive のディレクトリを指定 PREFIX=/usr/local/texlive/p2009 ### (任意) configure 時にキャッシュを用いる(高速化されるが実験的) conf_option -C ### (任意) make 中に最大 N 個のプロセスを起動する(高速化) ### N は (コア数+1) にするのがよいらしい make_option -j 5 # for 4 core ### 余分にコンパイルするツールを指定する ### texdoc コマンドには luatex が必要 conf_option --enable-luatex conf_option --enable-xetex conf_option --enable-xdv2pdf conf_option --enable-xdvipdfmx conf_option --enable-dialog conf_option --enable-pdfopen conf_option --enable-ps2eps conf_option --enable-psutils conf_option --enable-t1utils # conf_option --enable-tpic2pdftex # conf_option --enable-vlna # conf_option --enable-xindy conf_option --enable-afm2pl conf_option --enable-bibtex8 conf_option --enable-cjkutils # conf_option --enable-detex # conf_option --enable-devnag # conf_option --enable-dtl # conf_option --enable-dvi2tty conf_option --enable-dvidvi conf_option --enable-dviljk conf_option --enable-dvipng conf_option --enable-dvipos conf_option --enable-lacheck conf_option --enable-lcdf-typetools # conf_option --enable-musixflx # conf_option --enable-seetexk conf_option --enable-tex4htk conf_option --enable-ttf2pk conf_option --enable-ttfdump ### kanji <=> unicode 変換に iconv を使う conf_option --enable-kanji-iconv ### ptex/platex コマンドの入出力文字コードを指定(ディフォルトは UTF8) KANJI_CODE=UTF8
そうしたら、
$ make all3 && make install
でインストール完了……のはずだが、SILのGraphiteライブラリのコンパイルでエラーを吐いたのでGraphiteだけ最新の開発版をGraphiteのレポジトリから上書きしてやり直した。
すると、正常にビルドとンストールが出来たので最終的に、
#!/bin/sh PATH=/usr/local/texlive/2009/bin/i386-cygwin:$PATH PATH=/usr/local/texlive/p2009/bin/i686-pc-cygwin/:$PATH export PATH
といった感じの内容のファイルを/etc/profile.d/texlive.shにでも保存しておく。
これで終わり。
APLでFizzBuzzを書いてみた
APL(A Programming Language)っていう名前はあんまり聞きなれないかもしれないけど、
APL(エーピーエル)は、コンピュータのプログラミング言語の一種で、1957年のケネス・アイバーソンによる創案に基づいた独特の表記法を用いた、対話型インタープリター言語である。
http://ja.wikipedia.org/wiki/APL
モルガンスタンレーやソロモンブラザーズなどの投資銀行がAPLを駆使し、巨額の利益を得ていた(もしくは巨額の損失を生み出していた)というお話。
http://slashdot.jp/developers/article.pl?sid=09/06/08/0439231
とあるようにそれほどマイナーではないのかもしれない。
APLの処理系は商用のものが多いようだけど、NARS2000という名のオープンソースの処理系を使ってみた。
NARS2000 Welcome Page
インデックスオリジンが1に設定されている時(何もしなければ通常1)
(2⊥0=3 5∘.|L)⊃¨(⊂1↓,⍬'Fizz'∘.,⍬'Buzz'),¨L←⍳100
と書くと
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 6 2 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz
という結果が返ってくる。出力が途中で改行されてしまっているけど、本来は一行。
anarchy golf - FizzBuzzだと、数字(若しくは「FizzBuzz」など)一つ出力する毎に改行してるけど、APLではまだどうやるか調べが付いてない。
ちなみに上のプログラムは46文字。要素ごと改行するのに何字必要かはわからないけど、1文字1バイトのAPL用のエンコーディングなら10位以内には入りそう。
もしこのままでいいのならJより短くなることになる。Golfscriptより短く出来る気はしないけど……。
APLにはその後継としてJ言語というのがあって、J言語でFizzBuzzをしている人もいた。
2009-03-13 - niming538の日記
解説とかは後日。
追記[2013-07-24]
コード中に実体参照で書かれていたものを文字に直した。