Floating Log 2011/12

2011-12-31

ユニコード戦記

小林龍生「ユニコード戦記」東京電機大学出版局(2011)。 面白いことは面白いが、どこか物足りなくもある。 ジャストシステムからユニコード規格制定の戦場へ赴いた戦いの記録という意味で(ガリア戦記に倣って)このタイトルであり、確かに戦ってきたんだなというのは判る。 でも「それで?」という読後感が拭えないのは何なのだろう。

つまらないことを言うと、文字符号の本なのに「符合標準化」という文字が見えて(189ページ)脱力した。

あと表紙の南半球が裏返っているのがなぜなのか気になる。

posted at 00:00:16
 
2011-12-30

py2pdf

Python スクリプトを pdf に変換する py2pdf というプログラムは巷にいくつもあるようだから、今更増やす必要性は薄いかもしれないが、自分はこんなのを使っているというのを晒してみる。

本体はシェルスクリプトなので、だいたいどこでも使える: py2pdf.sh。 …とか言ってしまうのはあまり正しくはないかもしれない。 依存が三つある(というか三つのプログラムを呼び出しているだけ)。

まず a2ps。 テキストファイルを(それぞれの文法に合わせて整形した) ps ファイルにしてくれる。 Python にも対応しているが、文法定義がおそらく Python 2.1 か 2.2 ぐらいで止まっているので、新しいキーワードに対応していない。 そこを修正するパッチもある(a2ps-4.14-python-keywords.patch)のだが、アップストリームがどこなんだか良く判らない(作者のページが消えてる)。

a2ps の出力が微妙なのは他にもある。 トリプルクオートの中のインデントがずれる。 というのがその症状なのだが、これが a2ps の文法定義で直せないのではないかと思われる。 そこで、勿論 awk で整形する(こういうところまで Python を使おうとは思わない)。 ps はテキストファイルなので余裕です。 awk スクリプトはこちら: pypstrans.awk

最後に ps を pdf に変換するのは ps2pdf。 ghostscript 付属のものを想定している。

ということで、py2pdf.sh と pypstrans.awk を適当な場所において実行して下さい。 質問等はコメントを残してくれれば。

posted at 16:15:12
 
2011-12-29

テルマエ・ロマエ IV

ヤマザキマリ「テルマエ・ロマエ IV」エンターブレイン(2011)。 まさかの長編化により、何だか感想が書きにくい。 温泉旅館で働き始めることになってしまったルシウスは無事にハドリアヌス帝の元へ帰れるのか、待て次巻!

posted at 22:22:08
 

ピュタゴラスの音楽

キティ・ファーガソン「ピュタゴラスの音楽」白水社(2011)。 ピュタゴラスとピュタゴラス教団あるいはピュタゴラス主義者の歴史と現代に至る思想的影響を繙くノンフィクション。 本文ではピュタゴラス本人もいわゆるピュタゴラスの定理などに名を残すように数学的貢献をしたと推測しているが、斎藤憲の解説によれば数学史の通説(1962年のブルケルトの論文が決定打になったらしい)ではそれは否定されているそうだ。 ブルケルトという名前は本文中にも散見されるので著者は知っていてあえて(一般の読者を引きつけるために?)そういう書き方をしたのだろう。 そういう点は割り引いたとしても読むだけの価値はある。

ところで正方形の対角線が通約不能と判ったときに、では対角線など本物の線ではなく線が引けるように見えるのはまやかしだ、という方向で幾何学を展開した人はいなかったのだろうか。 任意の2点を通る直線が引ける、というのを否定して…

posted at 19:12:16
 
2011-12-26

箱玉系の数理

時弘哲治「箱玉系の数理」朝倉書店(2010)。 一列に並んだ箱に玉を入れ適当な規則に従って動かしていく、というセルオートマトンの一種と、KdV方程式などの微分方程式の解が関係しているのだという。 普段は離散的なものしか考えないので、微分方程式など遠い分野の無関係な話と思っていたが、つながりが見えるとなかなか楽しそう。 それほど期待せずに読み始めたものが意外に楽しめて良かった。

posted at 21:37:20
 
2011-12-23

pycomplete — Gentoo で

pycomplete の続き。 Gentoo の ebuild に仕立てるには、というお話。 結果だけ見たい人は bitbucket に上げてある のを見て下さい。

元々 python-mode の ebuild はあるので、あとは pycomplete.{el,py} をインストールさせるだけ。 ではあるのだが。 難関は py の方である。 Python 関係の ebuild はいろいろ作法があってややこしい。 一応 Gentoo Python Developers Guide というのを読むと選択肢は示されているのだが、実際に今自分が書こうとしている ebuild ではどの選択肢を選ぶべきなのか、が簡単ではない。 いろいろややこしくなったのは Python に互換性の乏しい 2 系と 3 系が併存しているからなので Gentoo python herd を責めるのは筋が違うような気もするが、ともかくややこしい書き方が求められているのは間違いない。

最初に決めるのは PYTHON_DEPEND で、これはインストールしようとしているスクリプトがどのバージョンで使えるものなのかを設定する変数。 この段階で、スクリプトの作者ならざる身としては、悩むところである。 Python の各バージョンで何が導入されたか、その書き方が使われているかどうか、を調べないと判らない。 yield を使っているとか with を使っているとか、あるいは import されているライブラリーが…とか。 今回は、ぱっと見、素直に基本的な機能しか使っていなさそうなので、PYTHON_DEPEND="*" としておく。

Ebuilds should set SUPPORT_PYTHON_ABIS="1" before 'inherit'. などと書いてあり、inherit python の前に SUPPORT_PYTHON_ABIS を置かなければならない。 実はさっきの PYTHON_DEPEND もそう。 inherit が(せいぜい EAPI の設定の後に)一番上にあるものだという気分でいると面食らう。 ちなみに上の引用文は Supporting of installation for multiple versions of Python というセクションの最初の文であり、Python 2.7 でしか動かないというようなものに関しては SUPPORT_PYTHON_ABIS は設定しない。 今回は、まあどれでも動くんじゃない、という見通しなので設定しておく。

さらに、動かないことが判っている Python のバージョンがある場合、それを RESTRICT_PYTHON_ABIS に並べることになっている。 さっきの PYTHON_DEPEND の補集合ということになると思うが、そのように自動で計算はしてくれず、手で両方書くようである。 矛盾したらどうなるんだろう。

このぐらいが事前準備。 次からは src_* とか pkg_* の関数の中身を定義をしていく。

先ほど SUPPORT_PYTHON_ABIS を 1 にして、複数のバージョンに対応できることにしたので、pycomplete.py をそれぞれの Python バージョンに対してインストールしなければならない。 そのために、ビルドディレクトリをそれぞれのバージョン用に分ける、ということをしてもらう必要がある。 (本当は今回ライブラリとリンクするような工程はないので必要ないかもしれない。) そのために使うのが python_copy_sources() 関数である。 pycomplete.py は completion サブディレクトリにあるので、 python_copy_sources completion のように指定する。 分けてしまったので、ビルドの作業もインストールの作業も Python のバージョンに応じて複数回こなさなければならない。 python_execute_function() 関数に作業関数を渡したりして、これを実現する。 先ほどのガイドで物足りなければこの辺りの関数を定義している python.eclass の文書もあるが、説明が簡潔すぎて動作を理解した後でないと説明が理解できなかったりする。

python_execute_function に渡す関数が必要になるのは、今回はインストールだけで、site-packages にコピーするだけの単純なものである。

install_pycomplete() {
    insinto $(python_get_sitedir -f)
    doins *.py || die
}

python_get_sitedir() も python.eclass に定義されている関数で -f は ABI ごとに違うものになるよ、ということを伝えるオプション。 insinto は Install Functions Reference にものすごく簡潔な説明があるが、次の doins がファイルを置く先を決める。 prefix を使っている身としては EPREFIX はどうなるのだ、とかいろいろ気になったりするが、よろしくやってくれるようだ。

.py をコンパイルした .pyc はいつ作るのか知らなかったのだが、pkg_postinst の中で python_mod_optimize() を呼び出すのが作法らしい。 引数にファイル名かパッケージ名を引き渡す。

逆に .pyc ファイルをアンインストールの際に消して回るのは python_mod_cleanup() で当然 pkg_postrm に書いておく。

ということで、何やら面倒な諸々を使って Python のスクリプトをインストールする ebuild を書くことができるまでをだらだら書いてきたが、他の人が作業する際の参考になればと願いながら、終わりにする。

posted at 18:33:52
 

pycomplete

Emacs 上で python のプログラムを書くときに、今まで補完機能とか特別に要らないのじゃないかと思っていた。 メソッド名とか dabbrev-expand (M-/)で十分だろうと。 別に、その考えが変わったわけでもないのだけれど、最近 pycomplete という名前を数回見たので、入れてみることにした。

ぐぐってみても 拡張版 とか、ライセンスも怪しい パクり+α とかがあるのは判ったものの、公式サイトみたいなものが見当たらなくて、疑問ばかりが募った。 が、実は灯台もと暗しというやつで、python-mode そのものに含まれていたのだった。

というわけで、completion というサブディレクトリにある pycomplete.el と pycomplete.py を適当な場所にコピーすれば OK。 もちろん .emacs に

(add-hook 'python-mode-hook
                 '(lambda () (require 'pycomplete)))

とかは要るけど。

ただし、python-mode の最新のソース (リリース版じゃなくて bzr の最新) には、開けない Python スクリプトがある (Bug #906778: cannot open aifc.py) というふざけたバグがある。 そのうち直るだろうけど。

追記 1: 上記バグは直った。

追記 2: 実はこれだけでは pycomplete が動作しないようだ…

posted at 17:06:24
 
2011-12-21

サイバネティックス

ウィーナー「サイバネティックス」岩波文庫(2011)。 古典。 一度は読まないといけないかと思って読んだが、それほど面白くもなかった。

posted at 02:48:48
 
2011-12-17

煙とサクランボ

松尾由美「煙とサクランボ」光文社(2011)。 幽霊、松尾由美で幽霊というと「ハートブレイク・レストラン」を思い出したりもしたが、そういう設定が好きなのか。 話の内容を紹介しようと思うとほとんどネタバレでしか書けないのでやめておくが、ともかくいろんなエピソードが伏線として最後に回収されていく様は感動的。

posted at 20:03:28
 
2011-12-15

バグ報告100件目

Gentoo bugzilla へのバグ報告が(INVALID とか DUPLICATE とかも数件あるけど)100件目に到達した。 というわけで振り返ってみよう。

最初に報告したのは Gentoo Bug 30884 - GCL can depend on virtual/tetex 2003年10月10日というからもう8年も前、バグの番号もまだ5桁でしかなかった頃。 内容は、dev-lisp/gcl は app-text/tetex に依存することになってるけど ptex でも大丈夫だから virtual/tetex で良くない? というもの。 多分 gcl は maxima の依存とかで入れたかったもののはず。 対応してくれたのは小町(usata)さん。

その後 PyDS を入れるのに必要なものとか PyDS の bump request とかが続く。

現在もクローズされないままの最古のものは Gentoo Bug 105151 - dev-python/bicyclerepair support for IDLE 2005年9月。 BicycleRepairMan という python 用リファクタリングツールを IDLE から呼べるようにして、というもの。 なんだけど、BicycleRepairMan 自体がもうメンテされてないし、IDLE の構造上キーバインドはできるけどメニューが上手く出せないという部分もあって解決されず、結局忘れ去られた。 もはや誰も関心を持たないだろうと思うけど、こういうのはどう処理するのがいいのだろうか。

prefix に移って最初のバグは恐らく Gentoo Bug 190140 - sys-libs/ncurses-5.6 does not install libncursesw.5.dylib で2007年8月(その前の #181427 も USE=-X とか言っているのでそこからかも)。

自分で最も気に入っているバグ報告 Gentoo Bug 278113 - ecopy: 0 is not the least version number は2009年7月。 サマリー通りバージョン番号には 0 の前があるよね、という内容。 実際に mplus-outline-fonts のバージョン番号が 0_pre024 とかで ecopy できなかったのだった。

現在もクローズされていない(上で書いたの以外の)バグは

最後のが、100件目。 Gentoo prefix プロジェクトの Fabian Groffen さんがとても親切なので調子に乗ってバグ報告をしている内に大台に乗ってしまった。

posted at 02:21:04
 
2011-12-14

アルゴリズムとデータ構造

K.メールホルン / P.サンダース「アルゴリズムとデータ構造」シュプリンガージャパン(2009)。 ためになる。 ただし少し議論が細かすぎて、全部をまじめに読むのは大変。 ある程度割り切って、必要になったとき読み返せばいいだろう。 そういう意味で手元に置いておきたい。 (今回は図書館で借りたのだが)買っておくか、と思ったけど、シュプリンガーなので英語版なら(職場から) pdf が入手できるからそれでいいか。

posted at 23:00:32
 
2011-12-11

emerge の出力削減

emerge の出力が突然減った。 コンパイルの途中経過は出さずに、

>>> Jobs: 2 of 4 complete                           Load avg: 1.47, 0.60, 0.35

といった一行が出るだけになった。

「以前のような出力は make.conf の EMERGE_DEFAULT_OPTS に --quiet-build=n を加えれば回復できますが、そもそも以前のような出力は必要でしたか」 と問われれば「必要」ではない。 それでも何か一抹の寂しさを感じるのはなぜか考えてみた。

できあがる過程が見えるというのは意外に楽しいものだ。

そう、喩えてみれば、たい焼きができあがる工程を見ているようなものである。 「あなたはたい焼きを食べたいだけだろう」 と言われれば確かにそうなのだが、それでも衣になる材料を鉄板の型に流し込みあんこを投入し挟んで焼き上げる、あの過程を見ているだけでわくわくするではないか。

子供っぽい?

posted at 09:08:32
12月 2011
     1 2 3
4 5 6 7 8 910
11121314151617
18192021222324
25262728293031
11月
2011
 1月
2012

浮遊する思考・浮遊する言葉を拾い集めて記録しておくページ。

Python
Desktop
Server

© 2011-2013, Matsui Fe2+ Tetsushi