2010年05月27日

『プログラミングRuby 1.9 言語編/ライブラリ編』



/


/

長かった……。Subversionリポジトリにr1が作られたのが2009年2月13日16:50:13。翻訳の田和さんが2009年5月から翻訳をコミットし始め、2010年1月から本格的に編集が始動。レビューア陣からの多数の指摘、監訳のまつもとゆきひろさんの判断を受けて、改善が重ねられた。 そして、r1071のタグをもって、世に出されることとなったのが本書である。

------------------------------------------------------------------------
r1071 | 2010-05-22 13:02:45 +0900 (土, 22  5月 2010) | 1 line

Tag r1070 as 1.0 (1st print).
------------------------------------------------------------------------

本書は、うさぎ本こと初版の『プログラミングRuby——達人プログラマーガイド』(ピアソンエデュケーション)、出版社を変えての改訂版となる『プログラミングRuby 第2版 言語編/ライブラリ編』(オーム社)を受け継ぎ、Rubyの入門者からアドバンスドなRubyハッカーまでをターゲットにした、王道Ruby本の改訂第3版だ。

本書は「第3版」ではなく、「1.9」というバージョンをその書名に刻み込むことをあえて選んでいる。Rubyプログラマにはご存じのとおり、Rubyは1.8から1.9へのバージョンアップに伴って大幅な変更が施され、(多くはないが)通用しなくなったもの、通用はするがより良い方法があるもの、そしてたくさんの新しい追加されたものがある。著者のDave Thomas、Chad Fowler、Andy Huntは、これらを丹念に調べ上げ、1.9のリファレンスとして通用する書籍を作り上げた。

それでも、これほどのボリューム(邦書は上下巻で950ページ超)ともなると、技術的な誤りや著者の思い込みが紛れ込む余地はあるし、バージョン1.9ではモアベターなプラクティスもある。 また、日本語翻訳版の本書のターゲットは、日本語を読み書きの言語とする読者であり、日本語として読んだときに滑らかに頭にインプットされることが何よりも重要と言えよう。

そこで登場するのが本書のレビューア陣である。L.Chinさんや卜部さん、笹田さんほか多数のRubyの最前線で活躍し情熱を持つ人々が集まり(本当に豪華だ!)、「Ruby 1.9対応を謳った、日本語で記述された良書」と呼べるにふさわしいものへと本書をブラッシュアップするために惜しみない力が注がれた。

そして、製作に当たったオーム社開発局の皆さんの尽力に言及しないわけにはいかないだろう。 これだけのボリュームの書籍の改訂出版に踏み切る勇気はもとより、途方に暮れそうな原書の原稿ソースファイル(TeX+超絶マクロ)から日本語TeX組版システムに乗せるのは大変な試練であったと思われる(自分なら途中で諦めて別フォーマットにしていただろう……)。その苦労の甲斐あって、本書でもオーム社おなじみのコミット&即組版&プレビューのイテレーションを実現し、1.9での新機能を示す「1.9」マーカーの配置、上下巻にわたる目次や索引・相互参照の処理等々のタグ+バッチ型ならではの利益を得ている。

Rubyの初心者には本書の言語編の最初から読んでいくことで、着実に知識が身に付いていくことだろう。中級者は言語編とライブラリ編にある1.9のマーカーを追いながら新機能にチャレンジしてみるのもよいだろう(特に文字列のエンコーディングや、高機能になった正規表現は必見)。上級者は本書をぱらぱらと斜め読みして、鋭くツッコミを入れるなり、新しいライブラリの開発のヒントの着想とするなりしてみていただきたい。

干しサンマ、もやしの黒酢炒め、自家製豆腐

寒風干しサンマおいしいです。もやしはごま油でざっと炒めて、塩胡椒し、黒酢を少し垂らす。 もやしの独特の臭みが消えて風味が良くなる。豆腐は今日も固まってくれず。干し魚と合うのでいいけど。

茶葉蒸し鳥、きゅうりのごま油炒め、自家製豆腐

25日の補完。 台湾風の茶葉料理が立ち読みのウーウェン料理本に載っていたのをナナメ読みして、適当に作ってみる。烏龍茶をお湯で蒸らして戻し、塩をもみ込んだ鳥胸肉と一緒にビニール袋に入れる。たっぷりのお湯の入った鍋に袋を入れ、冷めないように蓋をして1時間放置。切って、黒酢をつけながら食べる。これはうまい! 茶葉の香りと苦み、ふっくらしてジューシーな鶏肉、これが黒酢でキリッとまとまって実に良い。飲みきれない烏龍茶の葉っぱは茶葉料理で使おう。
きゅうり炒めも簡単ながら良い味。きゅうりを叩いて塩摺りして10分ほど置き、水気を拭き取って、熱くしたごま油でさっと炒めるだけ。
豆腐は固まってはくれなかったけど、豆漿風でこれもいい。

焼きそば

24日の補完。 豚肉、キャベツ、人参、ネギで焼きそば。オイスターソースとおたふくを混ぜて使ってみた。なかなかうまい。

豚肉と大豆のトマト煮

23日の補完。 豚肉をニンニクオイルで炒め、茹で大豆とホールトマトと一緒に煮込み。タコス用のチリパウダーで調味した。

タイカレー

22日の補完。 たまにはイエローカレーペーストということで。予想よりも攻撃的な辛さだった。鶏肉、筍、人参、ナス、ピーマンで。

2010年05月22日

Debian SqueezeでのGhostscriptフォント設定方針

リリース準備中のDebian GNU/Linux次期安定版「Squeeze」での小目標として、「defomaの廃止」というものがあります。その作業の一貫として、defomaを使用していたGhostscriptのフォント設定の新機構を実装・アップロードしました。 Lennyからのアップグレードでdefomaにいろいろと調整を加えていたユーザや、CJK(Chinese Traditional/Chinese Simplified/Japanese/Korean)フォントをGhostscriptに提供したいという開発者はこの変更に注意が必要です。

[経緯]

「defoma」(Debian Font Manager)は、2000年に日本人Debian Developerのtakeさんが開発したDebian向けのフォント管理機構です。TrueTypeやType1/CIDなどのベクタフォントパッケージにヒントファイルを持たせることで、Xフォント、TeXプレビューア、fontconfig、Ghostscriptといった各種のソフトウェアでのフォント設定およびデフォルト選出を統括しようという野心的な試みです。アプリケーションごとのフォント管理がバラバラで、それぞれの設定もわかりにくかった時代に、defomaは有効なソリューションでした。特にtakeさんの保守していたGhostscriptパッケージにとっては欠かせないコンポーネントです。

しかし、takeさんが就職後にDebian活動に時間を割けなくなり、後を引き継いだAngus Leesも2006年半ばを最後に保守が見られなくなると、Perlで記述されたdefomaソースコードのわかりにくさとバグの多さのためにDebianにとって重荷となっていきました。アプリケーションでのフォント管理も、fontconfigを使用するものが多くなり、レガシーなものはGhostscriptほかごくわずかとなりました。また少なくとも日本語についてはalternativesシステムでデフォルトの明朝/ゴシック書体を示すttf-japanese-mincho.ttf/ttf-japanese-gothic.ttfが提供されるようになったことで、defomaを使う意義はほとんどなくなっていました。

このため、Squeezeではdefomaを削除しようという運動がpkg-fonts-develチームを中心に起こり、各フォントパッケージからは次々とdefomaのヒントファイルが削除されます。しかし、GhostscriptについてはCJK方面以外にはほぼ影響がないため、誰にも顧みられていない状況でした。このままリリースされて後から品質の問題になるのを防ぐため、筆者は今年の1月に、defomaに代わってGhostscript向けのみのシンプルなヒントファイルを関連するCJKフォントパッケージのみが提供する仕組みをプロポーサルとして提出しました。

このプロポーサルはpkg-fonts-develではあまり反応を得られなかったのですが、特に大きな反対はなく、またその後Changwoo RyuやAndrew LeeなどのCJK系のDebian Developerに質問して得られた回答を受けて、5/18〜5/19にかけてパッチ提案およびNMUに踏み切りました。現在、Sidにはすべての変更が反映され、5/30にはSqueezeに反映される見込みです。

[仕組み]

Ghostscript向けの新しいフォント管理は、/etc/ghostscript/cidfmap.d/と/etc/ghostscript/fontmap.d/に置かれたヒントファイルと、ghostscriptパッケージのupdate-gsfontmapコマンドからなります。update-gsfontmapコマンドは、ヒントファイルを単にまとめてそれぞれcidfmapとFontmapという名前で/var/lib/ghostscript/fontsディレクトリに置くだけです。前者はCIDマップ(実際にはTrueTypeを含む。日本語等のCJKフォントはこちらを使います)、後者は欧文Type1マップです。

日本語用のデフォルト設定はgs-cjk-resourceパッケージが提供する/etc/ghostscript/cidfmap.d/90gs-cjk-resource-japan1.confで、PostscriptおよびAdobe Acrobatの主要フォントを定義しています。

/Japanese-Mincho-Regular << /FileType /TrueType /Path (/usr/share/fonts/truetype/ttf-japanese-mincho.ttf) /SubfontID 0 /CSI [(Japan1) 4] >> ;
/Japanese-Gothic-Regular << /FileType /TrueType /Path (/usr/share/fonts/truetype/ttf-japanese-gothic.ttf) /SubfontID 0 /CSI [(Japan1) 4] >> ;
/Ryumin-Light /Japanese-Mincho-Regular ;
/Adobe-Japan1 /Japanese-Mincho-Regular ;
/HeiseiMin-W3 /Japanese-Mincho-Regular ;
/GothicBBB-Medium /Japanese-Gothic-Regular ;
/Adobe-Japan1-Bold /Japanese-Gothic-Regular ;
/HeiseiKakuGo-W5 /Japanese-Gothic-Regular ;

ローカルの設定を定義したいときには、90よりも若い番号(10local.confなど)のファイルを同ディレクトリに作成してください(Postscriptのルール上、始め(小さい番号)に書いたものが後(大きい番号)からのものに優先されます)。例を次に示します。

/Jun101-Light << /FileType /TrueType /Path (/usr/share/fonts/opentype/A-OTF-Jun101Pro-Light.otf) /SubfontID 0 /CSI [(Japan1) 0] >> ;

フォントパッケージ提供者は、独自のヒントファイルを提供し、Ghostscriptで使用できるように登録できます。今のところ番号のポリシーは設定していませんが、50番台あたりを使うのが妥当かと思います。パッケージでは、ヒントファイルを/etc/ghostscript/cidfmap.d/または/etc/ghostscript/fontmap.d/にインストールするようにし、postinstとpostrmでそれぞれupdate-gsfontmapを起動するようにします。

postinst
#!/bin/sh
 ...
case "$1" in
  configure)
    if [ -x /usr/sbin/update-gsfontmap ]; then
      update-gsfontmap
    fi
  ...

postrm
#!/bin/sh
 ...
case "$1" in
  purge|remove)
    if [ -x /usr/sbin/update-gsfontmap ]; then
      update-gsfontmap
    fi
  ...

[ユーザは?]

特にこれまでGhostscriptに調整を加えた覚えのないユーザは、新しいghostscript、gsfonts、gs-cjk-resource、cmap-adobe-japan1のパッケージをインストールすることで、自動でttf-japanese-mincho.ttf、ttf-japanese-gothic.ttfをデフォルトの明朝/ゴシックフォントとして利用するようになります。Squeeze新規インストールの場合にはIPA明朝/ゴシックになるはずです。

ttf-japanese-mincho.ttfおよびttf-japanese-gothic.ttfのリンク先フォントを変更するには、update-alternativesコマンドをroot権限で使用します。

# update-alternatives --display ttf-japanese-mincho.ttf ←現在の状態を調べる
ttf-japanese-mincho.ttf - auto mode
  link currently points to /usr/share/fonts/opentype/ipafont/ipam.ttf
/usr/share/fonts/opentype/ipafont/ipam.ttf - 優先度 100
/usr/share/fonts/truetype/sazanami/sazanami-mincho.ttf - 優先度 50
Current 'best' version is '/usr/share/fonts/opentype/ipafont/ipam.ttf'.

# update-alternatives --config ttf-japanese-mincho.ttf ←設定を変更する
There are 2 choices for the alternative ttf-japanese-mincho.ttf (providing /usr/share/fonts/truetype/ttf-japanese-mincho.ttf).

  Selection    Path                                                    Priority   Status
------------------------------------------------------------
* 0            /usr/share/fonts/opentype/ipafont/ipam.ttf               100       auto mode
  1            /usr/share/fonts/opentype/ipafont/ipam.ttf               100       manual mode
  2            /usr/share/fonts/truetype/sazanami/sazanami-mincho.ttf   50        manual mode

Press enter to keep the current choice[*], or type selection number: ←Selection列の数字を入れる

以上、Squeeze以降でのGhostscriptのフォント設定について説明しました。ghostscriptについてはメンテナではないものの、バグの状況はウォッチしていますので、何か問題を発見したらDebianバグ追跡システムに報告してください。

『ルンバ577』



/

いわゆる自動掃除器。いろいろな評判を聞いて検討の末、先月初めに購入した。 その振舞いから、家では「グレゴール・ザムザ」、略称「ザムザ君」と名付けられ、日々活躍している。 1ヶ月半の様子を見ての、ザムザ君のインプレッション。

日本向けのルンバとしては527、537、577とある。カラーは537が一番すっきりしているのだが、タイマー起動があるのは577だけ。 写真で言うと、上側の分厚い弧がクッション型バンパーで、内側の黒い弧は人が持ち上げるときのハンドル。大きさは直径34cmあり、実際に見るとそれなりにでかい。

吸塵能力は高い。腹で吸い込むと共に、触覚のような小さな回転ブラシで取り込むので、壁沿いもわりと綺麗にしてくれる。とはいえ、サイズ的にどうしても入れないところは取り残しはできてしまう。同じようなところをぐるぐる周ることはあるが、最終的には1時間ほどでひととおり全体をこなせるようだ。 とはいえ、完全ではない感じ。ひとところをひたすら何度もやったかと思えば、えらく淡白に終わらせてしまうところもあり。577には、ブロックまたは部屋区切りを指定するための発信機が2つ付属しており、これを使ってうまく誘導する必要がある。充電ステーションも一種の部屋区切りシステムのようで、思ったように誘導するのは困難だ。場合によっては物理的に区切って今日はここを、という使い方のほうがよいかもしれない。

音は大きめ。手動掃除器ほどではないにせよ、何度もやってくるし、家具への衝突音も頻繁(ガラスなどは置かないほうがいい)。段差は5mmくらいのは越せる。1cmでも勢いがあるときなら乗り上げる。スタンドのようにナナメになっている構造物だとそのままがんばって登ることもある。スリッパやゴミ箱のような軽いものだと、押し切る。落下防止のために段差は一応判断するけれども、完全とは言えなくて、たまに玄関に落ちていることが。階段のある家では、念のためにブロックしていないとたいへんな惨事になるかもしれない。

天敵はラグやケーブル。フリンジのあるラグは当然絡んで動けなくなるし、なくても、押しつけて乗り上げてにっちもさっちもになることがある。ケーブルはプラスチックのケーブルカバーを取り付けてみたけれども、それを絡めて曲げちゃうほどのパワーがあるので厄介。ケーブルが絡むとブラシが折れることもあるようだ。また、オフィス用の椅子の足はちょうど高さ的に挟まりやすく、ここにハマると動けなくなる。

スケジュールは曜日ごとに何時に開始するかを設定可能。清掃状況にかかわらずだいたい1時間で切り上げてステーションに戻るようだ。 付属品としてリモコンがついているが、自動作業中に移動方向をちょっと変えたいというものではなく、完全に自分で操作するためのもの(押した途端に自動作業は終了する)。これは使えない…。

日々のメンテナンスは比較的容易。写真で言う下側がゴミ容器になっているので、これを外して、適当なハケで落とす。毎日やってもけっこう出てくる。一体どこからこのホコリは出てくるのやら…。なお、家ではザムザ君という名前なので「ほーれ、このクソ虫さん」(新訳版)などとぶつぶつ呟きながら作業すると雰囲気もばっちりである。今のところは車輪への絡み込みなどはないけれども、たまに見てあげないと危険かも。

正規で購入すると、1年での無料メンテサービスが付く。寿命・故障を前提にしているのか、交換部品の案内やサードバッテリを使用する際の諸注意といったものが妙に充実しているのがちょっとおもしろい。

床しか清掃できず、希望の場所をやらせるのにちょっとクセはあるけれども、実際使ってみると確かに便利。ザムザ君が作業しやすい環境を提供するために、床になるべく物やケーブルを置かないようになり、すっきりするという副次効果も。

ペンネとコロッケのオーブン焼き

21日の補完。 ナスと玉葱のトマトソースを作り、茹でたペンネと出来合いコロッケの上にかけて、チーズとパン粉を振り、オーブンで焼き上げ。初摘みのルッコラをかけてみた。

カルボナーラ、レタスとミニトマトのサラダ

19日の補完。 カルボナーラはちょっとパンチェッタが塩強すぎ、サラダはビネガー入れすぎ、になってしまった。両方合わせるとこってり&さっぱりでバランスは取れたんだけど。

粕漬け金目鯛、小松菜と豚肉炒めの豆乳煮

18日の補完。 白身系の焼き魚が食べたいな、ということで金目鯛。豆乳煮は前回とほぼ同じはずなのだが、えらく固まってしまった。どういうツンデレ豆乳だ…。

うど入り棒々鶏、まぐろの刺身、とろろ

17日の補完。 最後のうどを棒々鶏風にしてみた。ちょっとチャレンジだったけど、わりといける。ただ、うどはマヨネーズのほうが合うかなー。

ホタテと玉葱のフライ、茹でキャベツ

16日の補完。 冷蔵庫の素材から適当に。フライはパン粉がちょっとしかない上にパンもないという状況で、フリッターぎみになってしまった。

焼き餃子

15日の補完。 久々に焼き餃子が食べたくなったので、土曜日なのを良いことに餃子作り。 皮は上手に出来たかな。試しに湯溶き片栗粉を入れてみたら羽根どころか鍋にくっついてしまった…。

きんぴらごぼう、かんぱちとまぐろの刺身、きゅうりのぬか漬け

13日の補完。 しばらく前から残っていたごぼうをようやく消化。まぐろはずいぶん安い大トロだったのだけど、確かに筋が多め。

ミートボールクリームソース、野菜のグリル、バンドエピ

12日の補完。パンはアンデルセンのもの。 ミートボールは牛肉を多めにした挽肉で、炒め玉葱、生姜と一緒にボールにしてオーブン焼き。クリームはIKEAのパウダーに生クリーム(やっぱりちょっと味が単調だなぁ…)。野菜はズッキーニ、ナス、ピーマンに塩胡椒してオーブンで焼き、オリーブオイルをまわしかける。

レバニラ炒め、豚肉と小松菜炒めの豆乳煮

11日の補完。鮮度の良いレバーをここのところ探していたのだけれど、なかなかいいものがなく。ニラの鮮度もそろそろ心配になってきたので妥協してスライス済みのものを使用。臭いは味噌で上書き。
炒め煮は、ニンニク、豚肉、小松菜を炒めて、塩・胡椒し、豆乳とニガリを加えて煮るだけ。手軽だけど良い味になった。

牛肉の長芋巻き、きゅうりにぬか漬け、自家製豆腐

10日の補完。頂き物の長芋を使って定番の焼き物。美味。豆腐は濃度やニガリ分量には問題ないものの、固まってくれなかった。無調整とは書いてあったけれども豆腐に使用できるとは書いてなかったため、何か凝固防止剤みたいなのが入ってるのかも。豆乳かけごはんぎみに食べる。

ビーフストロガノフ

9日の補完。安くて薄いサーロインがあったので、これをビーフストロガノフに。ステーキ感を残しつつ血生臭くならないようにちょっと注意しながら。

チョリソーとナスのトマトソースパスタ

8日の補完。ありもので適当に。チョリソーがけっこう辛い。

ゴーヤチャンプルー、鶏肉とふきのマヨサラダ

7日の補完。初ゴーヤ。ふきは塩ずりして軽く茹で、茹でた鳥胸肉と共にマヨネーズ和え。とても美味しい。

鶏肉とほうれん草のカレー

5日の補完。頂き物ほうれん草の一部が痛み始めてしまったので、急遽カレーに決定。若干スジっぽくはあったけど、おいしいカレーに。

2010年05月05日

『セキュリティの神話』



/

監訳の葛野さんとオライリー社から献本いただいた。ありがとうございます。

著者はアンチウイルス企業McAfeeでCTOを務めるJohn Viega氏。作中、オープンソースへのコミットメントの例にMailmanを挙げていたのでchangelogを見たところ、確かに1998年にいくつかのパッチをコントリビュートしていたようだ(ただそのMailmanといい、Eric Raymondのfetchmailといい、どうもこの手の例題に出される作品は「筋が悪い…」のが多い気がしなくもない)。

本書は、Viega氏の考えるセキュリティおよびコンピューティングを綴った45章からなるエッセイ集だ。扱う範囲は広く、技術的なものからソーシャルなものまで言及しているが、技術的な細部には立ち入りすぎないように配慮されている。とはいえ、マルウェアの解析やパターンシグネチャの仕組み、現在および今後発生し得る攻撃手段など、必要とあらば詳細にも踏み込んでおり、軽薄に終わることはない。

McAfeeを擁護するわけではないと言いつつも、「私がかかわってからはずっと良くなっている」と書いてしまうのはご愛嬌。2006年3月にExcelのシグネチャ誤検出をして削除をしてしまった経験からMcAfeeが懸命に改善に取り組んだというのも、つい2010年4月にWindows XP SP3を止めてしまったという騒動が記憶に新しく、苦笑せざるを得ない(難しいことだとは思うが)。 提案される内容とセンスがちょっと古臭い(「AntiVirus 2.0」とかなりすまし対策とか)のもズッコケるところだ。

同じ「神話」でも『人月の神話』(Frederick Brooks著)に比べると、内容はちょっと粗が目立ち、意見もあまり同意を得にくい面はある——特にオープンソース/フリーソフトウェア派には身構えそうな箇所も。ただ、情報セキュリティを考える上で、専門ではない人にもなるべく平易にしようという挑戦は感じるので、セキュリティやアンチウイルスにちょっと興味はあるけれども詳細はよく知らないという人には、悪くない本だと思う。

なお、Amazonの書評にもあるとおり、大きいのから小さいのまで誤殖はちょっと目立つな…という印象(これは版元に報告しておくつもり)。

ツナマヨペンネ

おやつに緑豆おはぎを作ったら随分重くなってしまった。夕食は軽めに。 ツナ缶、薄切りにして水にひたした玉葱、キュウリ、トマト、マヨネーズ、オリーブオイル、塩、胡椒をペンネに和えて。クリーミーかつトマトやキュウリがさっぱりしていてなかなか美味。

牛肉のごぼう巻き、ふきの油揚巻き、豆腐とワカメの味噌汁

3日の補完。巻物2種。新ごぼうたまらんです。ふきは塩摺りした後に茹で、皮を剥いて油揚で巻き込み、だし汁で煮る。油揚と一緒だとちょっとふきのクセがなくなりすぎ?

タコス

2日の補完。羊肉をケバブ風に。しかし玉葱はさぼらずにちゃんと炒めるべきだった…。

山菜天ぷら

1日の補完。パートナーご実家から山菜をいただいたので、まずは足の早いものを天ぷらに。 こごみ、うど、たらの芽、海老、ほたて、しめじ、ピーマン、ナス。山菜はちょっと仕込みに時間がかかったけど、天ぷらはどれも良い味。

ポークステーキ、もやしとキャベツのグリル

4月30日の補完。トンカツ用のロースを叩いてバルサミコ酢ソースのステーキに。もやしとキャベツと玉葱はオイルをかけてオーブンで少々グリル。 誕生日祝いのデザートケーキに抹茶ロール。

豚汁

4月29日の補完。疲れぎみなので冷蔵庫の残り物で。おいしかったけど豆腐がないのが残念?

鶏肉とナスの黒酢炒め、きゅうりのぬか漬け

4月27日の補完。定番にしては久々の黒酢炒め。