2009年2月28日土曜日

Ubuntu on HP 2133 Mini

(追記)Ubuntu 10.04 LTSにアップグレードした。動画の再生が遅いこと以外、8.04で遭遇した問題はすべて解決し、起動時間が大幅に短くなった。

今までかたくなに大昔のLOOXでLinuxを使ってきたのだけど、ネットブックが安く手に入るようになってきたため、とうとう新しいノートPCに移行した。

値段とHDDが理由でHP 21333 Miniのスタンダードモデルを選択。ちょうど値下げ直後に買えたのは幸運だった。インストールしたのは前のノートPCでも使っていたUbuntu。

使い始めてすでに数ヶ月経つけどとても快適。GNOMEデビューも果たすことができたし。Firefoxが動画サイトによっては遅いこともあるけど他には特に不満もない。

デュアルブート

インストール前から気になっていたのだけど、Windows Vistaとのデュアルブートはとても簡単にできる。というのも、Ubuntuのインストーラ自体にNTFSのパーティションをリサイズする機能があるからだ。GRUBのメニューにも自動的に反映される。なので、細かいことは気にせずとりあえずインストーラを起動すればいい。

インストール

HP 2133にはCD/DVDドライブはついてないけど、SDカードリーダがついているためSDカードからインストールした。

インストールしたバージョンは8.04.1 LTSで、Ubuntu Desktop 日本語 RemixのCDイメージをダウンロードして使った。

基本的にはHP 2133 Mini-Note - Ubuntu Wikiのとおりにやれば問題ないのだけど、不必要な手順もあるようなのでUbuntu日本語フォーラム / HP2133 Mini-Note PC で無線LANが動きましたも見ておくべき。Rhythmboxで音楽が再生できないのはハマった。

追記

  • そういえばサスペンドとハイバネーションの復帰に失敗する。仕方ないので毎回ブートしている。
  • F-Spotフォトマネージャが起動に失敗する。
  • Firefoxで動画があるページを開いていると(再生していなくても)、mplayerなどの動画再生ソフトが絶望的に遅い。

2009年2月24日火曜日

インサイドフラッギングについて

このブログのタイトルの「インサイドフラッギング」はクライミングのムーブ(クライミングにおける独特な動きのこと)からとっている。とくに深い意味はなく、ブログの登録のときになんとなく思いついただけである。

インサイドフラッギングは使いどころがとても難しい。クライミングのムーブの中で一番使いにくいムーブかもしれない。インサイドフラッギングの利点は、

  1. カウンターバランスを使いたいけど
  2. アウトサイドフラッギングは使えない状況で(フットホールドの位置が低い)
  3. 足の踏み替えを省略できる(ダイアゴナルだと踏み替えが発生してしまう)

ことだと思う。たぶん。自分は無駄な踏み替えが発生しないか考えながらじゃないと使えないのだけど、慣れてくれば無意識のうちにできるようになるのだろうか。

(追記)インサイドフラッギング再考で続きを書いた。

2009年2月23日月曜日

RackでCGI

RackはWebサーバとWebフレームワークをつなぐ最低限のAPIを提供するライブラリで、ハンドラはMongrelやWEBrickだけではなくCGIもサポートしている。ということで、Rackを使えばCGIを書くのにcgi.rbを使う必要がなくなる。また、コードを変更することなくCGIからMongrelなどに切り替えることもできる。

CGIの場合、Webサーバは別で立ち上がっているはずだから、実はrackupは必要ない。とりあえずHello world!をCGIハンドラを使って書いてみるとこんな感じになる。

#!/usr/bin/env ruby
require "rubygems"
require "rack"

class HelloWorld
  def call(env)
    [200, {"Content-Type" => "text/plain"}, "Hello, world!"]
  end
end

Rack::Handler::CGI.run(HelloWorld.new)

あとは普通のCGIと同じように実行権限をつけてcgi-binなどに置けばいい。

ミドルウェアを使う場合は

Rack::Handler::CGI.run(Rack::Session::Cookie.new(HelloWorld.new))

のようにすればいい。RackのミドルウェアはDecoratorパターンで実装されているので、newの引数にアプリケーションをわたすことで何回でもdecorateできる。

WEBrickを使ってテストしてみる。CGIとして実行させたいのでrackupは使えない。

require "webrick"

DOCUMENT_ROOT = File.dirname(__FILE__)

srv = WEBrick::HTTPServer.new(:DocumentRoot => DOCUMENT_ROOT,
                              :BindAddress => "127.0.0.1",
                              :Port => 3000)
srv.mount("/hello_world.cgi",
          WEBrick::HTTPServlet::CGIHandler,
          File.join(DOCUMENT_ROOT, "hello_world.cgi"))
trap("INT"){ srv.shutdown }
srv.start

このスクリプトを実行してから、

http://localhost:3000/hello_world.cgi

にアクセスすればHello, world!と表示されるはず。

(追記)上記のHelloWorldクラスはContent-Typeしかヘッダを返していないため、Rack::Lintを使うとエラーになる。これを解決するにはヘッダにContent-Lengthも追加すればいい。Content-Lengthの値は数値ではなく文字列で渡す必要がある。Rack::LintはアプリケーションがRackのスペックに適合しているかをチェックするミドルウェア。

class HelloWorld
  def call(env)
    body = "Hello, world!"
    [200, {"Content-Type" => "text/plain", "Content-Length" => body.size.to_s}, body]
  end
end

実際のアプリケーションではRack::RequestRack::Responseを使うだろうから、あまり問題にはならないかもしれない。