2009/12/29

mac gear boot

Mac の調子が悪くなってしまいまして
起動すると最初に歯車みたいなのがクルクル回るんですが
その途中で止まっちゃう事態が発生

ちょっと持ち運んだときになってしまったのでもしかして
ハードディスクとかハードウェアの接触に不良が? と思って
ハードディスクは経年劣化もあったしシステムリフレッシュしたかったので
交換しようとしたら大変だったんですが交換できて解決しませんでした
残念

で、最初にやるべきだったメモリの抜き挿しをしたら少し良くなって
メモリ壊れたのか? メモリも増やしちゃうか!! なんて思ってました
でもなー、歯車クルクルの裏で何起きてるんだったかなー

ってここまですっかり忘れてたんですが
あの歯車クルクルではなくコンソールの表示も見ることもできるんですよね
あのクルクル出してるのは openfirmware っていう
パソコンでいうところの BIOS みたいなやつ? の機能でして
OS X からなら nvram ってコマンドで色々とパラメータ設定できます

例えば
$ sudo nvram boot-args="-v"
ってすると
起動時に verbose = 歯車でなくて黒いコンソールで白い字 が出てきます
Mac でこの画面見るとちょっとギョっとしますが

boot-apgs をいじらなくても
起動時に Command + v すれば、その起動のときだけ verbose にできます

つわけで仕掛けたので、今度起動に失敗したら原因が分かる、かも??

sphinx doctree

2010/08/09 追記:
@shibukawa
http://blog.shibu.jp/article/40049067.html
何か作ってくれてると
ステキ!!

Sphinx ついでに
Sphinx って reStructuredText って Wiki みたいな形式で文章書いて
make すると素敵にしてくれるって仕組みらしいんですが
これで HTML 作ってみると変にスペースが空くんですよ
っていうかそもそも HTML って変なスペース空くよね
Django の概要 — Django v1.0 documentation
ほら、「チュートリアルやリファレンス用ではあり ません」って
「り」と「ま」の間に空白入っちゃってるでしょ、これ改行なの

文章書いてたら改行するでしょ? え? しないの?

HTML は英語のこと考えて作ってあるからか、
や、どちらかというとブラウザの問題なんでしょうけど
改行があると表示するときに空白として扱うんですよね
日本語だったらブラウザが無視してくれればいいだけの話なんだけど
何とかしてよ、ブラウザ

と思ったら、IE7 は空白が無い!
Firefox, Opera, Chrome は空白になるのに
お前ら IE7 見習え!! (日本語のときの改行だけね)

で、今んとこ Firefox or Chrome を使っているので
空白嫌なら改行を無くすしかないなーと思いまして
ちょっと調べてみると docutils/parsers/rst/states.py の
RSTState class の paragraph って method で
        data = '\n'.join(lines).rstrip()
って改行入れてる
どっかで parse した段落の各行を lines に入れてて
この lines は indent は削除されているみたい
で、消された改行を復元してるのがココ

やっちゃいけないとは思いつつ直接いじっちゃいました、
        data = ''.join(lines).rstrip()
そしたら、
消えたよ! 改行が消えたよ!!
ひどいね! 英文引用とかだったらどうするんだろうね!!

でね、例えば、
Sphinx で language が ja で html を build するなら
この改行を消しちまいたいわけですよ

Sphinx で language って持ってますけど
多分 po file の処理にしか使ってなくて docutils には伝えておらず
print debug で確認もしてみたけどどうやら
Sphinx から呼ばれる docutils の language は en ぽくて
en にしてあるってよりは default が en ってだけなのかなぁ

一方で docutils も language って設定項目あるんだけど
これもやっぱり po file みたいなことをしてるだけみたい
まぁ self.document.settings.language_code は引けるので
それを元に join するところを場合分けするだけなんだけど

あと、html って RSTState に伝えるのはどうするのかなぁ〜
別に html を特別扱いしなくてもいいのかな?
改行要らないよね? そこまで

language_code で分岐くらいならまぁできそうなんだけど
Sphinx から docutils の language を指定するのが面倒になって
とりあえず放置することにしました
最悪改行無しの 1 行が凄い長い rst file を書けばいいんだしね!!

Shpinx の話でなくて docutils の話だな、これ

ちなみに pTeX は改行どうしてるかっていうと
行の最後と次の行の最初の文字の種類で
空白を入れるかどうか判断してるはずなんだけど
今試したら日本語で終わって日本語が始まったら改行無視で
その他の場合は空白を入れるっぽい
正しい
句読点とか禁則処理とかまでは面倒だから調べない

sphinx math

ドキュメント作るなら Sphinx が素敵って方々から聴いていまして
まぁ、興味があったんでちょっといじってみました
参考は渋川さんの
渋日記: Pythonって何?という人のためのSphinxインストール入門
渋日記: Pythonって何?という人のためのSphinxチュートリアル
渋日記: Pythonって何?という人のためのSphinxチュートリアル[2]
もぉ手取り足取りです

設定なんてエンター連打でとりあえずちょこちょこ書いてみてたんですが
ちょっと数式打ってみたくなって思いだしました
> pngmath: include math, rendered as PNG images (y/N) [n]: n
> jsmath: include math, rendered in the browser by JSMath (y/N) [n]: n
sphinx-quickstart でどっちも n と答えてしまった!!

でまぁ拡張なんで追加できるはずじゃん、追加すればいいじゃん
って思ったんですがドキュメントとか読むの面倒だしーと思いまして
新しく Sphinx のプロジェクト立てようとして
> pngmath: include math, rendered as PNG images (y/N) [n]: y
> jsmath: include math, rendered in the browser by JSMath (y/N) [n]: y
Note: pngmath and jsmath cannot be enabled at the same time.
pngmath has been deselected.
しっかり怒られました
conf.py を diff してみると
$ diff -u /tmp/conf.py ~/myproject/conf.py
(前略)
@@ -22,7 +22,7 @@

# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.pngmath', 'sphinx.ext.jsmath']
+extensions = []

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
(後略)
名前登録するだけだった、っつーかコメントに書いてあるじゃん

png より jsmath とか格好良いかなーと思ったんですが
ググって出てきた渋川さんの翻訳
Sphinxにおける数式のサポート — Sphinx v1.0 (hg) documentation
の jsMath のとこ見たら
jsMath(と必要なフォント)はかなり巨大です
確かにフォントを用意するのは嫌だな
HTML で提供すれば十分だから今回は逃げちゃおう
ということでささっと sphinx.ext.pngmath に転向

あ、ちなみに、LaTeX 環境は当然のように整ってるんだZE!!
debian lenny なら多分 texlive-latex-base が入ってれば OK なはず

で、こんな文章書いてみました
==========
超幾何級数
==========

超幾何級数 :math:`_2F_1` とはパラメータ :math:`a, b, c, z \in\mathbb{C}` に対し

.. math::
_2F_1(a,b,c;z) &= \sum_{n=0}^\infty \frac{(a)_n (b)_n}{(c)_n n!} z^n,\\
(\alpha)_n &= \alpha \dot (\alpha+1) \cdots (\alpha + n - 1)

で定義される。但し :math:`c\not\in\mathbb{Z}_{<0}` とする。この級数は :math:`|z|<1` で絶対収束し正則関数を定義する。
そして make すると
(前略)
pickling environment... done
checking consistency... done
preparing documents... done
WARNING: dvipng command 'dvipng' cannot be run (needed for math display), check the pngmath_dvipng setting
(後略)
おぉ、dvipng ってのが要りますか、入れますとも入れますとも
debian lenny だと dvipng ってのがあったんで aptitude install dvipng
再度 make したら

こんなになりました

ってこんなスムースにはいかず LaTeX の部分で少しエラーと格闘したんですが
math:: の場合は要するに amsmath の gather 環境につっこんでいるみたい
\mathbb も使えたので amssymb も usepackage されてる
で、conf.py に pngmath_latex_preamble で preamble が書けるみたいだし
math:: に :nowrap: って付ければ段落を gather 環境に入れないみたいだし
色々好き勝手できそう

でも、数式打つのには YaTeX か AUC-TeX 使いたいな
次は jsMath?