pathogen.vimでスクリプトの管理

pathogen.vimvimプラグインの管理をするのに便利なvimプラグイン。
導入などはhttp://d.hatena.ne.jp/mkataigi/20101107/1289134775http://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をつけた名前のファイルが実行されるようにした。

*1:http://www.vim.org/scripts/index.php にアップロードされているものはhttps://github.com/vim-scriptsがある

名古屋大学オープンキャンパス行ってきた

高崎から高崎線で上野、山手線に乗り換え東京駅に。そしてムーンライトながらに乗って名古屋到着。
祖父の家で休憩させて貰って地下鉄で名古屋大学まで。
横殴りの雨のなか構内を移動して受付。
ビデオを見たあとは図書館に移動して館内を見て回る。(名簿の学年欄に4年と書いたのは私です)
12:15くらいに凄まじく混んでいる食堂でお昼を摂ってから目的の情報文化学部へ。
学科紹介とミニ授業、質問タイムの後学科ツアーへ
屋上とか

ツアー解散が1512くらいだったので危うく編入試の問題が見られなくなるところだったけどなんとかなった。

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]
コード中に実体参照で書かれていたものを文字に直した。