mini10vでdebian

DebianWiki
debian lennyをインストールしたmini10vだが、無線LANとスピーカーが動いていないことが分かった。いろいろと調べていると、優れた先人はいるもので、DebianWikiにmini10vへのインストールのコツが書いてあった。無線LANはすでに分かっていたように、BCM4312のdriverをなんとかしないといけない。スピーカーは最新のalsaをコンパイルし直さなければいけないらしい。イヤホンでは聞けるのが不思議なのだが。 wikiを参考にalsaをいじってみることにした。まずは、alsaのページから、driver,library,utilitiesをdownloadする。そして、build-essentialとncurses-dev,libncursesw5-dev,xmltoをインストールする。現在使っているkernelのheaderもインストールする。私の場合はlinux-headers-2.6.26-2-686だった。そして、tar xjfでファイルを展開して./configure,make,sudo make installを順に実行する。driverを入れた後にsudo alsaconfを実行すると、とりあえずは音が出るようになった。気持ち悪いのでlibraryとutilitiesも入れようとしたら、エラーが出ている。まあ、動いているからいいか。

Read more...

mini10vの無線LAN

debianで使えるように
いろいろ調べてみると、mini10vにdebianを入れると、動かないものが結構あるようだ。まず、無線LANとスピーカーはうまく動かないらしい。他の人の記録を見ると、以前は有線LANも動かなかったらしい。lennyの新しいリリースではこれは解決しているようだが。 無線LANは、lspci -vnnで確認すると、BroadcomのBCM4312の14e4:4315というものを使っているらしい。このdriverは"supported 2.6.32 and later"らしく、debian lennyではそのままでは使えないようだ。しかし、b43-fwcutterをインストールして、modprobe b43とすると、何かmoduleが組み込まれているようだ。動かないが。もう少し試してみよう。

Read more...

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...