4度目のインストール

結局debian lennyに落ち着いた。
mini10vであるが、xubuntuのlxdeが遅いので、osを入れ替えることになった。いろいろと試行錯誤の結果、やはりdebianが良いだろうということになった。昔作ったxfce+lxde用のインストールCDでは、ネットワークがうまく認識できなかったので、5.04という最新のものを焼いてLXDEのdesktopとlaptopと標準システムをインストールした。やはりlxdeは起動が速い。こうでなければ。/etc/apt/source.listにcontribとnon-freeを加えて、CDROMをはずす。無線LANを使いやすいようにwicdを入れようとしたら、これはdebianには入っていないらしい。wicdのサイトによると、backportに入っているらしい。

deb http://www.backports.org/debian lenny-backports main contrib non-free

を加えて、aptitude updateを実行し、その後、debian-backports-keyringをインストールする。そうすると、wicdがインストールできるようになる。途中でkeyringがうまくいっていないのかもと思う警告が出たが、そのままインストール。wicdはうまく入ったが、無線LANはうまくいっていない。まあいいか。あとは、タッチパッドの設定。mini10vでは、タッチパッドの下の部分がボタンになっているので、ボタンを押そうとすると、変な位置にカーソルが飛んで行ってしまうことがあり、不便である。そこで、タッチパッドの設定が必須である。しかし、debianでsynclientをどうやって有効にするのかまだ分からないので、しばらく保留になってしまった。

Read more...

mini10v到着

dell mini10v
2/3に注文していた、mini10vが本日到着した。ファンレス機で新しいmini10(1012)が出たので、もう10vを買うことは無いと思っていたが、おそらく最終処分セールなのか、急に割引をし始めたので、つい買ってしまった。windowsのプリインストール版の方がubuntu版よりも安くなっているので、仕方なく前者を選択した。しかしwindowsは使う気は全く無いので、xubuntu9.10をまずはインストールした。しかし、9.04に比べて、余分な修飾が増えたように感じる。さらに、ログイン画面でuserが選択できるようになっており、user名とpasswordの両方が分からない状態よりは、危険になっている気がして気に入らない。デフォルトではLXDEが無かったので、

aptitude install lxde

でインストールすると、ログイン画面でLXDEセッションが選択可能になった。しかし、起動が遅い。以前は3秒ぐらいだったはずだが。パスワードを打ってから18秒もかかる。他のセッションも測定してみると、XFCEは6秒で起動する。9.04の時とは逆の結果になっている。起動に時間がかかるのは耐えられないので、OSを入れ替えるか、LXDEをやめてXFCEにするかを検討する必要がある。あと発見したのが、SDが途中までしか入らないということだ。mini9では全部入るので、常に入れっぱなしにして使うことが可能だったが、mini10vでは半分ぐらい飛び出してしまうので、入れっぱなしにすることができなくなっている。それから、これは欠点というわけではないが、バッテリーの取り外し方も変わっていた。ロックをはずして普通は後ろに引っ張るのだが、下に引っ張って取る仕組みになっている。いろいろと細かい仕様が変わっているんだなあ。

Read more...

encodeのバグ?

urlencodeとhtmlencode
httpでアクセスするときには、特殊な文字をencodeやdecodeする必要が出てくる。その代表的なものが、urlencodeとhtmlencodeである。これらをrubyで扱うときには、それぞれURI.escapeとCGI.escapeHTMLを使えば良い。ちなみに、これらはそれぞれ"uri",“cgi"をrequireしてから使用する。URI.escapeの場合には、デフォルトではURI::UNSAFEで定義された文字をencodeする。しかし、このUNSAFEの定義が変な気がする。試しにURI::UNSAFEをpしてみると、

/[^-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]/n

となる。これだと”[“や”]“はencodeされないことになるが、encodeするべきのようだ。uri/common.rbを覗いてみると、次のように定義されている。

ALPHA = "a-zA-Z"
ALNUM = "#{ALPHA}\\d"
UNRESERVED = "-_.!~*'()#{ALNUM}"
RESERVED = ";/?:@&=+$,\\[\\]"
UNSAFE  = Regexp.new("[^#{PATTERN::UNRESERVED}#{PATTERN::RESERVED}]", false, 'N').freeze

RESERVEDとUNRESERVEDの意味は分からないけど、

UNSAFE  = Regexp.new("[^#{PATTERN::UNRESERVED}]", false, 'N').freeze

が正しい気がする。urlencodeもいろいろな種類があるのかも知れないけど。

Read more...

chunked

またまたHTTP1.1
今度はchunkedでつまってしまった。

transfer-encoding: chunked

とあったら、受け取り方を変えなければならない。一行目に16進数でバイト数があり、それだけのバイト数を読んで、一行改行を読む。さらにこれを繰り替えして、最後はバイト数の指定が0となるまで読む。最後に空行が来るまで読んで終わり。今のところ、ヘッダーのtransfer-encodingとcontent-lengthとconnectionを見て、読み方を変えている。まだ別の読み方があったりするかも。

Read more...

rubyでhttp

ようやくhttp1.1でアクセスができるようになった。
keep-aliveを要求しても、サーバー側でcloseされてしまうことがある。これに気がつくのに随分時間がかかってしまった。ヘッダーを見て、content-lengthが指定してあれば、その長さだけ読んで、connection: closeだったら全部読むというようにすれば、うまく読めた。

Read more...

New mini 10

dellからようやくN450搭載のmini10が発売された。
新しいInspiron Mini 10は、アメリカでは1/5にはすでに発売されていたが、それが日本では1/21か。もとのmini 10と名称は一緒だが、デザイン等、いろいろな点が変わっている。VGAもついたし。ちなみに型番は、旧型が1010で新型は1012のようだ。dellのサイトにはまだ分解の仕方などは載っていないが、いずれは出ると期待したい。 しかし、6セルバッテリーで1.39kgと重くなっている。3セルだと1.24kgらしいが、まだ日本では発売されていないようだし、それでも10vや旧10よりも若干重くなっている。 いずれにせよ、まだ全くカスタマイズできないし、ubuntu版が出るまで待たないといけないな。

Read more...

hashのhash

rubyのhashのくせ?
hashを値として持つhashを作るときに、

h={}
h[1][2]=3
p h

とすると、h[1]がnilなのに[]=というmethodを呼び出すので、エラーになる。そこで、次のようにすれば問題ないだろうと思って実行してみたが、うまくいかない。

h=Hash.new({})
h[1][2]=3
p h

ここでは、h[1]はすでにdefault値の{}になっているので、エラーは起きないが、hを表示すると{}となる。これは、バグなのかどうかは微妙なところだが、不思議な挙動な気がする。しかたがないので、冗長にはなるが、次のように書いたら当然だがうまく動いた。

h={}
h[1]={} unless h[1]
h[1][2]=3
p h

なんだか少し納得がいかない。

Read more...

HTTP 1.0と1.1の違い

rubyでhttpに直接アクセス
rubyでhttpを使うときには通常http.rbを使う。open-uriなんかも便利なようだ。しかし、headerの処理などの細かい部分が気に入らない場合がある。そのような場合には、httpを直接たたいた方が簡単である。 HTTP1.0の場合には、

GET /file HTTP/1.0

を送って、ソケットから全部readすれば良いので簡単であるが、HTTP1.1の場合には、keep-aliveするので、content-lengthの部分を見て、必要なサイズを読み込まなければならないので、処理が少し煩雑になる。 とりあえずは簡単なpageにはアクセスできるようにはなったが、HTTPのすべてを組み込むのは大変なので、徐々に機能を増やしていこう。一時期rubyでブラウザを書くのがはやっていたが、難しそうだな。

Read more...

bangTeX

ベンガル語のTeX
昔からの計画のひとつとして、中国語の漢字の周期律表をTeXでつくろうと思っている。多言語のTeXとしてはBabelやOmegaがあるし、中国語や韓国語に関してはCJKなどもある。まだこれらを扱うのは難しそうなので、とりあえずベンガル語をどうやって扱うかを調べてみた。Debian Lennyでは、texlive-lang-indicをインストールすれば、bangTeXというものが使えるようになって、ベンガル文字を扱えるようになる。

\documentclass{jarticle}
\usepackage{beng}
\begin{document}
{\bn rUpaa}
\end{document}

のような感じで書くと、রূপাと表示されるようになる。しかし、ベンガル文字は母音が多いので、どのように打つとどうなるかはよく分からない。bangTeXを使って、文字の対応表を作ればよいのかもしれない。

Read more...

lennyのGPIB

まだわからない
これまでに、測定装置のうち三台ぐらいをDebian Lennyにしているが、いまだにGPIBの設定のしかたがよく分からない。基本的には、2009/2/28に書いてあるようにすれば良いのだが、最後の細かい設定が毎回違っている。GPIBのモジュールを有効にするためには、スーパーユーザーで

modprobe tnt4882
gpib_config --minor 0

を実行する必要があるのだが、通常はこれをmoduleが始めて組み込まれるときに実行されるように、/etc/modprobe.d/gpibを設定しておくのだが、ここの書き方がインストールする毎に違う気がする。数ヵ月ぐらいは間が空いていると思うので、その間に何かupgradeがあるのかも知れないが。今回はどうもうまくいかないので、最終手段として、2009/12/20のように起動スクリプトの中に、これらを組み込んでしまった。まあ、測定専用マシンなので、起動時にGPIBが認識されて困ることはない。しかし、なにか美しく無いやりかたで気に入らない。

Read more...