2010年01月01日 bangTeX
_ ベンガル語のTeX
昔からの計画のひとつとして、中国語の漢字の周期律表をTeXでつくろうと思っている。多言語のTeXとしてはBabelやOmegaがあるし、中国語や韓国語に関してはCJKなどもある。まだこれらを扱うのは難しそうなので、とりあえずベンガル語をどうやって扱うかを調べてみた。Debian Lennyでは、texlive-lang-indicをインストールすれば、bangTeXというものが使えるようになって、ベンガル文字を扱えるようになる。\documentclass{jarticle} \usepackage{beng} \begin{document} {\bn rUpaa} \end{document}のような感じで書くと、রূপাと表示されるようになる。しかし、ベンガル文字は母音が多いので、どのように打つとどうなるかはよく分からない。bangTeXを使って、文字の対応表を作ればよいのかもしれない。
2010年01月16日 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でブラウザを書くのがはやっていたが、難しそうだな。
2010年01月17日 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なんだか少し納得がいかない。
2010年01月21日 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版が出るまで待たないといけないな。
2010年01月23日 rubyでhttp
_ ようやくhttp1.1でアクセスができるようになった。
keep-aliveを要求しても、サーバー側でcloseされてしまうことがある。これに気がつくのに随分時間がかかってしまった。ヘッダーを見て、content-lengthが指定してあれば、その長さだけ読んで、connection: closeだったら全部読むというようにすれば、うまく読めた。
2010年01月25日 chunked
_ またまたHTTP1.1
今度はchunkedでつまってしまった。transfer-encoding: chunkedとあったら、受け取り方を変えなければならない。一行目に16進数でバイト数があり、それだけのバイト数を読んで、一行改行を読む。さらにこれを繰り替えして、最後はバイト数の指定が0となるまで読む。最後に空行が来るまで読んで終わり。今のところ、ヘッダーのtransfer-encodingとcontent-lengthとconnectionを見て、読み方を変えている。まだ別の読み方があったりするかも。
2010年01月31日 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').freezeRESERVEDとUNRESERVEDの意味は分からないけど、
UNSAFE = Regexp.new("[^#{PATTERN::UNRESERVED}]", false, 'N').freezeが正しい気がする。urlencodeもいろいろな種類があるのかも知れないけど。