2010年01月28日

『OpenCL入門 —マルチコアCPU・GPUのための並列プログラミング』



/

最近編集・DTPを担当した上記書籍が刊行されました。表紙も中身もクールなので、ぜひ手に取っていただきたいと思います。

既存のCPU/MPUの処理能力の向上が頭打ちになる中、昨今大きな注目を集めているのがGPGPUプログラミングです。GPUはCPUの補完的な機能として画像処理を専門に担当するプロセッサとして開発されましたが、高速性と高度な描画表現の要求に応えるべく進化の進んだ結果、単純ながら多数の演算装置を持つ超並列計算機としての性質を持つようになっています。 GPGPUプログラミングは、GPUをグラフィックではなく汎用目的として、フーリエ変換やデジタル画像・音声処理、各種のシミュレーション、クラスタリングといった並列計算に用いるものです(たとえばNVIDIAはグラフィック出力ではなく計算のみに特化したGPUも製造しています)。

GPGPUプログラミングでの問題は、プロセッサ、コンパイラ、組み込み環境の有無といった違いに応じてそれぞれプログラムコードを対応させなければならず、移植性が低く、学習しづらいことでした。そのための解決が「OpenCL」です。OpenCLは、C言語を拡張した並列プログラミング言語およびそのランタイムAPIをセットにした環境です。ほぼC言語と同じ感覚で、プロセッサの違いを意識することなくプログラムコードを記述でき、移植性と学習の容易さを提供してくれます。また、パフォーマンスを最大限に引き出すチューニングも可能です。OpenCL環境はLinux、Mac OS X、Windowsと主要な各種OS向けに提供されています。

本書は、この新しい技術基盤であるOpenCLを解説した日本初の書籍です。 著者陣は並列計算やCellプログラミングの分野で高い技術力を評価されているフィックスターズ社のメンバーで構成され、技術的内容にかけてはまず安心と言えます。 すでにバリバリとGPUプログラミングを使い込んでいる方には物足りないかもしれませんが、OpenCLの概要、並列化の概念、言語仕様と既存CコードのOpenCL化のテクニック、フーリエ変換、画像処理、市場シミュレーション、パフォーマンスチューニング、とOpenCLを始める基礎となる知識が盛り込まれており、入門として適しているでしょう。

2010年01月25日

『HTC Tattoo』

海外でのモバイル環境としてそろそろちゃんとSIMフリー端末がほしくなった。iPhoneでもJBすれば一応できるが、iPhoneのJB+SIM unlockはいつまでできるかはわからないし3.1でのunlockは副作用もあるのであまりやりたくない。それに、iPhone、あるいはGoogle Nexus Oneあたりは高額なので、ひったくりやスリの多い地域で持ち歩くのはちょっと躊躇する。 ほしい機能としては、SIMフリー、通話、Google Maps、メール、フルブラウザ、カメラ。TwitterやIRCができればなお良し、というところ。

ということで、Android 1.6塔載で小型、廉価となかなか条件の揃った「TC Tattoo」を購入してみた。

輸入業者は1ShopMobile.comで、US$での決済。本体が$309で送料$25の計$334。今はドル安なので、下手に欧州などで現地購入するよりも安い。クレジットカード決済もできるようだが日本のカードだとうまくいかないこともあるらしいので、Google checkout経由で申し込んだ(1/20午後)。Google checkoutだと運送保険が付けられないようなのだが、まぁ壊れるものでもあるまい、と。1/21夕にはEMSの追跡コード付きで発送連絡。香港から航空便、22日夜には税関を通過して、23日の午前には配達がきていた。早い! この日は東大のBSPに参加していたので、再配達をお願いし、無事に受け取り。


梱包はかなり厳重で、iPhoneっぽい元々の箱をぷちぷちで巻き、それをさらにビニール質の梱包袋でくるんでいる。もちろん中身はまったく平気。製品としてはイギリス仕様らしい。


ご開帳。本当にiPhoneみたいなセットである。本体にはすでに(やや厚めの)保護フィルムが貼られている。付属品は、micro SD 2G(内蔵)、充電/データ通信用のmini USBケーブル、USBプラグのあるACアダプタとそのコンセント(イギリスプラグをアダプタに取り付け、その上に日本/USのアタッチメントを取り付ける形。プラグを付けたら二度と取れなくなった気配…まぁいいんだけど)、ステレオイヤフォン。あとは保証書と薄いマニュアル。


iPhoneと比較。厚みは同じくらいで、縦横サイズは2回りくらい小さい。スペック表によると、106x55.2x14mm、113gらしい。コンパクトでなかなかいいね。iPhoneと違ってストラップを付ける場所もちゃんとある。


SIMは裏蓋、バッテリを外して挿入する。とりあえずアクティベーションのためにソフトバンクの黒SIMを刺してみた。microSDを入れるにも同様に取り外す必要がある。これはちょっと面倒だね。


起動。HTCロゴ→Vodafoneロゴ→Androidの「見てるヨー」アニメーション(かわいい!)→HTCロゴ(このときに爆音でジングルが鳴る。音量調整も不可。JBしたら消せるんだろうか…)となって、ようやく操作できるようになる。起動まではわりと時間かかる。1分くらい?

マニュアルによると本当はここで言語やSIMやメールの設定などがあるみたいなのだが、無意識にスキップしてしまったのか、そのままホーム画面になった(その後誤って完全リセットしたら、ちゃんと設定手続きが出てきた)。

入っている言語は英語のみ。ファームはAndroid 1.6、ベースバンドは13.29.55.3H_3.35.07.31、カーネルは2.6.29-gf922713、ソフトウェアバージョンは1.67.161.18。 通話は問題なくできる。クリアだし、コンパクトな分扱いやすい感じ。パケットは怖いので試していない。USBモデム化してテザリングすることもできるっぽい。Linuxで動くかどうかは不明だけど。 あれ、SDカードが認識されていない?

とりあえずアクティベーションは終わったのでSIM戻すか、と思ったところでたいへんな事態。裏蓋がまったく開かない。最初のときにはすぐに開いたのに、「Androidマークを押しながら上にスライドして開けろ」というマニュアルのとおりにやってはみたものの、がっちり噛んでいてらちがあかない…。しょうがないので手持ちの精密ドライバで無理矢理隙間を作って開いたけれども、早速傷物にしてしまったヨ。ちなみにTattooは「着せ替えケータイ」っぽい売り方をしているようで、今回傷物にした部分も含めてケース全部交換して好きなものにできるようだ。検索するとカラフルなのがいっぱい売られている。日本では買えないけど。 SIMは外し、SDカードを刺し直し。開けるために力をかけた際に完全リセットがかかってしまい(メニューと電源ボタンを長押しでこうなるようなのだが、上から押しつければそりゃ両方押されるよな…)、前述の設定手続きが出てきてた。さっきいろいろ設定したものが全部消えててちょっと泣ける。SDは認識された。


デフォルトではいろいろ不足なので、Androidマーケットで無料アプリ(有料はdocomo SIMかJBしないとだめっぽい)をいくつかインストール。 端末自体は英語モードではあるけれども、フォントはUnicodeのものが用意されている(ちょっと中国語っぽいが)ので、Android共通として適当なツールさえ入れれば日本語の使用はほぼ問題ない。 日本語入力として比較のためにsimejiとopenwnnの両方。リーダの性能を見るためにVTextViewer。メッセージロケールを追加するmore locale2。そのほかにToggle Settings、AK Notepad、ES Task Manager、AndChat、Google Newsなど。 Twitterのクライアントはデフォルトでpeepというのが入っていた。それほどは悪くない感じ。メールもデフォルトのMailでとりあえずIMAP+SMTP Authの設定ができた。

期待していた機能は全部あり、すばらしい。小さく軽いので、日本で出しても売れそう。 あまり速いプロセッサではないので、動作としてはキビキビよりももっさり感はある。画面は小さい(2.8" TFT-LCD)が、可読性には問題ない。このQVGA(240x320)だとアプリによっては対応していないみたいね。バッテリは3時間ほど遊んで半分くらい消費。G1同様に毎日充電すれば困らない程度かな。

デフォルトの入力(英語)もなかなか使いやすい。タイプ時に振動でお知らせするのだけど、その振動は、Wiiのコントローラで画面外に出したときのような「もこっ」とした感触がある。アルファベットは入れやすいけど、数字の入力にはちょっとまだるっこしいかも。とはいえ、何も見ずに使ってみただけなので、用意されているチュートリアルをちゃんと実践すればいいのかな、とは思う。simejiとWnnはどちらもそれほどは違いはない。画面が小さいぶん、ちょっと打ちにくく、ミスタイプしやすい。フリックより携帯打ちモードのほうがいい気もする。画面の上のほうの感度がやや低いので、Notificationなどはメニューからいったほうがよさそう。ダブルタッチは対応してないみたい。

Wifiは11b/g。まぁ使用用途的にも特にこれで困らない。Bluetooth 2.0はそのうちヘッドセットがちゃんと動くか試したいところ。オーディオフォーマットはMP3やAAC、WMA9などの主だったもの、ビデオはMPEG4、H263、H264、WMV9に対応。SDに普通にベタでファイルを置くだけで、iTunesみたいな管理はしてくれない。Flashも未対応。

FMラジオが付いているけれども、90MHz-110MHz帯なので、日本の放送はほぼ入らない。ハックして使えるといいんだけど、ハードウェア的なものっぽいよな。コンパスや加速度センサもあるみたいだけどいまいちどうなるのか不明。


カメラはいまいちというか、「いまに」くらい。解像度は高いが暗くて感度も低いためぶれやすく、W53Sあたりとあまり変わらない。さっと撮るにはiPhoneのほうがいいね。

iPhoneから乗り換える!という類のものではないけれども、海外旅行に持っていって現地プリペイドSIMを刺すという使い方ならベストに近いものじゃないかと思う。rootもすでに取れる雰囲気らしいが、元に戻せる保証がないので今のところは手を出さず。中国フォントもそれほど気にはならないし。


裏蓋を開けるのに精密だと傷だらけにするわりになかなか開かないので、ホームセンターでコーキングヘラを買ってきた。100円ショップも見たんだけど、ケーキナイフ・もんじゃヘラ・スクレーパーあたりでは薄さが不足してだめっぽい。少々でかいがこのコーキングヘラを使えばぱちぱちと開けられるようになった。これで勝てる。ステンで外観は刃物っぽいので、機内持ち込みは駄目だろうな…。

2010年01月24日

第60回東京エリアDebian勉強会 Debian Bug Squash Party

2010年最初となる東京エリアDebian勉強会で今回は東大にてDebian Bug Squash Partyが開催されていたため、途中までですが参加してきました。

朝9時に東京大学先端科学技術研究センター3号館に集合。前回TeXユーザの集いのときは迷って遅刻しかけたくらいだったのですが、今回はiPhoneに誘導されてずいぶん早く到着してしまい、しばらく散歩をして時間を潰すことに。先端研側は学生がほんとにいない…。会場担当の荒木さんと合流して入室し、無線の準備ができるまで久々にイーモバイルを使って接続。

9時前には幹事の岩松さんをはじめ、ぼちぼちと揃いました。岩松さんと荒木さんによる開会挨拶とガイダンスを経てBSP開始。各自持ち寄りで飲み物やおやつが用意されました。線としては会場回線を使ってのWifi 11a/g、岩松さんの持ってきたWimax(pocket Wifiのように接続する)の2種。VAIO Type Z+Debianの私の環境では、11aではAPに接続はできるもののAPにすらping通らずという不思議な状態に。11gのほうは使えたのでこちらを使っていました。東大のネットワークは速いです。

今回のBSPはDebian.orgのSqueezeに向けたバグ修正が主ターゲットなのですが、私のほうはDebian JPのリリースクリティカルとも言うべき問題の解決作業を行っていました。すなわち、鵜飼さん依存の脱却。特に問題なのがLDAPと鍵管理で、鵜飼さん以外にはrootを持ちづらい環境にこれらの情報が置いてあるため、g15.jpの仮想化内環境に移行することが前々から予定されていたのです。

手始めに、g15.jp自体がEtchだったため、まずはこのアップグレード作業(9:41-11:30)。荒木さんに以前にNOCで付けてもらっていたシリアルを使ったコンソールの挙動が若干謎だったのですが、とりあえずシリアルコンソールが必要になってしまうような緊急事態になることもなく、無事にアップグレードを完了しました。

次に、仮想環境のセットアップ。OpenVZの仮想マシンを1つ追加し、設定を行っていきます。テンプレートのダウンロード、マシン作成、メモリ・ネットワークやディスクパラメータの調整。 とりあえず基本環境自体は手慣れているのでさっくり(11:40-12:15)なのですが、問題はここから。

鵜飼さんの管理しているLDAPはだましだまし保持しているバージョン1.2で、現行のOpenLDAP 2.4.11とはだいぶ違っています。1.2の頃は適当なエントリをどんどん作って使えたのですが、2からはスキーマファイルをちゃんと定義してあげないと怒られます。無視するオプションもないことはないのですがそれも気持ち悪いので、ちゃんとスキーマを書くことにしました。 まずは現在使用している属性の洗い出しを行い、バージョン2にデフォルトで用意されている属性で同じものがあるか、ない場合は移行できる属性があるかの照合。続いて、新規に起こすスキーマの書式の調査。

この辺りで中間発表の時間(12:30くらい?)。今のところは皆細かなバグ取り作業や調査がメインで、Debian RCバグの作業はあまり進んでいない模様。荒木さんや八重樫さんらと共に駒場の学食で昼食を取りました。台湾ラーメンなかなか辛くて侮れず。学食は安くていいですね。駒場のは充実しています。近くでは院試も行われていました。部屋に戻ってから、八重樫さん、山田さん、杉浦さん、小池さんとGPGサイン交換を実施。

引き続き午後の作業です(14:00-)。昼過ぎからは参加者が続々と増えてきて(特にGentooは3名)、なかなか盛況となりました。

私のほうは、スキーマファイルの書式をだいたい理解したので、試行錯誤しつつ実際にローカルスキーマを作成。LDAPの検索はオブジェクトクラスの階層をちゃんと見ているということがわかったりしました。つまり、Aを継承したBというクラスを作った場合、objectclass=Aを探索するとBも出ます。Debian JP用のLDAPのオブジェクトクラスとしては正会員、Debian.org会員、賛助会員、システムユーザの4つのクラスを用意したかったのでまず正会員クラスを作って残り3つはそこから当初継承していたのですが、これだとまずい結果となるわけですね。4つの親となるベースクラスを作ってそこから全部継承するように変更することで、期待どおりの結果となりました。ここまでできたら、あとは旧環境からLDAP情報を引き出し(rootもないしLDIFで生成する方法も使えなさそうなので、ldapsearchのベタ結果を取得)、それを変換して新環境に突っ込みます。所詮1回きりの作業なので、変換についてはあまり完璧なのを作ることは求めず、Rubyで書いて途中でエラーが出たら元データなりコードなりを修正し、というように進めました。古いデータにはいくつか属性の欠損が見られました(ほとんどは賛助会員ですが)。

16:30過ぎにmasterqさんからlintian freeにしたuimができたという連絡を受け、スポンサーアップロードを実施。 LDAPのほうは、LDAPデータベースを使って各種の情報を展開するスクリプトが新環境でも動作するように調整作業を行いました。

そうこうしているうちに、私のほうはタイムアップ(17:00)。残りは帰宅してから。uimアップロード時に付けたサインをわざわざobsoleteなほうでやってしまい、蹴られてしまっていました。あうあう。再アップロードしてACCEPTED。LDAPは調整作業をだいたい完了し、あとは運用周りの実験を今後引き続き行うことにしました。可能なら今月中に完全移行させたいと思っています。

鯖の一夜干し、青首大根おろし、菜の花の辛子和え、きゅうりのぬか漬け

まだ1月終わっていないのに、もう菜の花が出回っている…。さっと茹でて絞り、辛子を溶いた醤油、白胡麻と一緒に和えてみた。美味。鯖と大根、きゅうりもおいしい。

煮込みうどん

22日の補完。昆布、鳥皮、人参、豆腐、ネギ、椎茸、油揚、うどんという組み合わせ。鳥皮をかなり煮たので、濃厚なダシになった。うまい。

芋煮

21日の補完。里芋、ごぼう、ネギ、牛肉、生姜で芋煮。圧力鍋を使った芋煮おいしいです。

ハンバーグのりんご乗せ、茹で人参

20日の補完。フルーツと肉を一緒に食べるというペルシャの流儀を真似て、ハンバーグに煮林檎を乗せてみた。ちょっと林檎を甘くしすぎた(砂糖は0でいいかな)気はするけど、組み合わせ的には悪くない。

じゃがいもと大根と豚肉の煮物、まぐろの刺身、油揚とネギの味噌汁、きゅうりのぬか漬け

19日の補完。煮物は前回に気をよくして作ったんだが、なんか違うぼんやりした味に…。うーむ、簡単かと思ったが意外と難しい。刺身はいい味。

スモークサーモンと茸のクリームパスタ

18日の補完。生クリームを使ったソースでフィトチーネを食べたくなったので。 粗く切った椎茸とスライスしたエリンギをオリーブオイルで炒め、塩胡椒して取り出す。薄切りの玉葱、バター、強力粉をじっくり炒め、牛乳、コンソメ、ベイリーブス、胡椒と入れてとろみの付いたところで白ワインを加えた後、生クリームを入れる。パスタが茹で上がったらスモークサーモンも加えて絡め、ディルを振ってできあがり。サーモンと茸とクリームの組み合わせはいいねぇ。

ピーマンのドルマ

16日の補完。ペルシャ料理本からピーマンの肉とピラフ詰め。ぱらっと茹でたインディカ米、炒め煮にした挽肉・玉葱とトマト、スパイスを混ぜてピーマンに詰め、トマトスープで煮る。カイエンペッパーを入れすぎてちょっと辛くなりすぎた感じもするけどなかなかおいしい。

牛肉と大根と春菊の煮物、きゅうりのぬか漬け

15日の補完。和食希望ということで少しすき焼き風な煮物。だし汁を煮立てて大根と牛肉を茹で、春菊を加えて醤油、酒、味醂、塩で味つけるだけ。春菊がいい味。

2010年01月21日

HPデスクトップに付いている15 in 1メディアスロットを認識させる(メモ)

オフィスで使っているHP Pavilion m9680jpにはCF/SD/MSなどを入れられるメディアスロットが付いている。5インチベイにあるが実際にはUSBデバイス。

Bus 008 Device 002: ID 0bda:0152 Realtek Semiconductor Corp. Mass Stroage Device

で、こいつはLinuxをそのまま起動して使っているとCFスロットしか認識されない。これまでネットワーク越しにばかりファイルをやり取りしていたので使う場面がなかったんだけど、たまたまデジカメのメモリスティックを開こうとして難儀した。当座は人からリーダを借りてしのいだのだが、機構は同じはずだし何か方法はありそうだよな、と調査。

結論としては、usb_storageにdelay_useオプションでたとえば値に10とか指定すればいいらしい。おぉ、見える、見えるぞ!

Host: scsi8 Channel: 00 Id: 00 Lun: 00
  Vendor: Generic- Model: Compact Flash    Rev: 1.00
  Type:   Direct-Access                    ANSI  SCSI revision: 00
Host: scsi8 Channel: 00 Id: 00 Lun: 01
  Vendor: Generic- Model: SM/xD-Picture    Rev: 1.00
  Type:   Direct-Access                    ANSI  SCSI revision: 00
Host: scsi8 Channel: 00 Id: 00 Lun: 02
  Vendor: Generic- Model: SD/MMC           Rev: 1.00
  Type:   Direct-Access                    ANSI  SCSI revision: 00
Host: scsi8 Channel: 00 Id: 00 Lun: 03
  Vendor: Generic- Model: MS/MS-Pro        Rev: 1.00
  Type:   Direct-Access                    ANSI  SCSI revision: 00

/etc/modprobe.d/usb_storageにも記述しておいた。

options usb_storage delay_use=10

2010年01月15日

かしわそば

鶏肉とネギをオーブントースターで焼き、蕎麦と合わせて。蕎麦は若干茹ですぎた気もするけど、腹具合が悪かったのでまぁちょうどよかったのかも。かえしとだし汁も成功。

豆乳鍋

13日の補完。 豆乳と昆布だしに、鱈、ネギ、白菜、豆腐、えのき、しめじ、豚肉。ご飯も進むよー。

ローストチキン、パン、マトンタジン

12日の補完。 11日に作ったパンがあと半分、タジンが少し、という状況だったので、ローストチキン(というか鶏肉のオーブン焼き)を作って合わせてみた。うまうま。

マトンと林檎のタジン風、ライ麦入り田舎パン、アンチョビと塩のじゃが芋

11日の補完。 マトンとフルーツを合わせてみようということで、プルーンでは実績があるタジンに。玉葱とマトンとスパイスを軽く炒め、サフラン汁や水と一緒に圧力鍋で柔らかく。林檎とバターを入れて煮詰めて出来上がり。
カンパーニュは自家製。賞味期限をだいぶ過ぎてしまったリスドォルがあって、かといってこれだけではちょっと不足だな、と未開封ながら開けていなかったフランスもプラス。これにライ麦粉、捏ね時のべたつきすぎるのを抑えるために普通のカメリア強力粉。小さいのだとどうも火加減などが難しいので、500gでどーんと作った。食べるときには少しだけトーストするといい感じ。水気を吸いやすいので、汁を付けながら食べるのが最高。
じゃが芋はスペイン風を目指してアンチョビ、岩塩、パセリ、オイルをゴリゴリとすりこぎでペースト化し、粉吹き芋状にしたじゃが芋と和えた。が、塩をちょっと入れすぎたのと、アンチョビがなんか癖がありすぎてちょっと失敗。アンチョビなし、塩はもうちょっと減らす、でリベンジしたいところ。

牛肉の山芋巻き

10日の補完。パートナー実家産の山芋の食べ方はこれに限る、という気がするくらい美味。味付けは塩・胡椒、照りは醤油、味醂、酒と、奇をまったく照らっていないのだが、軽く炒めてほくほくした山芋と肉の旨味の相互作用が最高。

鯵の干物、青首大根おろし、きゅうりのぬか漬け、豚肉と青梗菜・ターサイの炒め物、麸とネギの味噌汁

9日の補完。鯵もおいしかったけど、炒め物のターサイ(パートナーご実家産)がすごく美味。シナモンをもっと中華風にしたような香りがする。

鶏肉のバルサミコ酢パスタ、ツナレタスサラダ

8日の補完。ナスはないけどバルサミコ酢パスタ。唐辛子は切って焦がし目に。ツナとレタスはマヨネーズにて。

ひじきと大豆の煮物

7日の補完。ひじき、人参、油揚、大豆で。少々豆が固めの茹で加減だったけど、おいしく食べられた。

2010年01月10日

Subject: Changes for Squeeze in Debian Installer

d-d-aにfjpから。

Lennyの後にd-iに加えられた重要な変更のまとめ。これらはすでにdaily/weeklyなビルドイメージで利用できる。なお、注意点としてdaily/weeklyのイメージを使えるアーキテクチャはi386/amd64/armel/sparcで、それ以外は現在、古いか利用できないか壊れている。

Recommendsなパッケージのインストール。Lenny以前のインストーラではRecommendsの依存関係のパッケージをインストールしていなかったが、Squeeze以降ではデフォルトでRecommends依存パッケージをインストールする。ブートパラメータかプリシードでオフにすることは可能。

言語/国/ロケールの選択の変更。localechooserコンポーネントに改良を加えた。 localechooserは言語、場所(国)、ロケールを尋ねるが、その聞き方をより良くした。 言語に英語、ドイツに居住(タイムゾーンの判定)、ロケールにen_GB.UTF-8、という選択ができる。 追加ロケールの生成はexpertモードのみ。

言語/国/ロケールの柔軟なプリシーディング。Lenny以前はロケールしかプリシードできなかったのを改善した。

ミラー選択の改良。oldstableおよびアーカイブリリースをサポートした。そのミラーで利用可能なリリースだけを表示するようにした。コードネームと利用可能なリリースセットを表示するようにした。デフォルトリリースが利用できないときに警告するようにした(これまでは別のリリースに黙ってフォールバックしていた)。選択されたミラーの完全性の確認を改良した。

「UTC」タイムゾーンの選択。expertモードのみで利用可能。

パーティショナー(partman)の変更。ext4ファイルシステムをサポート。RAID/LVM/cryptoの設定をより簡易にし、パーティションに事前に使用方法を定義する必要がなくなった。

その他の変更。インストールされたシステムでは(console-tools+console-dataの代わりに)console-setupを使うようになった。x86ではgrub-pc(grub2)がデフォルトになった。armelではMarvellのKirkwoodプラットフォームとIntel Storage System SS4000-Eをサポート。Lennyインストールの互換サポート(カーネルはLennyのを使うので2.6.26になる)。

2010年01月07日

牡蠣のパスタ、豚と大根とじゃが芋の洋風煮物

魚介系でオイルなパスタが食べたくなったので、牡蠣を使って。新鮮で臭みがなく、おいしい。
煮物はフランス風をイメージ。細かめに切った豚バラ薄切り、じゃが芋、大根、ピーマン、潰したニンニク、コンソメ、やや多めの岩塩、コショウ、ベイリーブス、白ワイン、水少々でまず煮立て、味を染みさせる。水を増量して弱火でじゃが芋と大根がやわらかくなるまで煮込んで出来上がり。作り方は簡単だけど、「強め」な塩気の調整がコツと見た。野菜は玉葱とか人参とかいったものを入れずシンプルにまとめるのもポイント。

麻婆豆腐

5日の補完。 少し刺激がほしくなったので麻婆豆腐。最初に唐辛子を切って炒ってみた。香ばしさがちょっとアップした感じ。辛さにはそれほど影響しないようだ。

コロッケ、豆腐

4日の補完。 手抜き料理。茹でたキャベツ、出来合いのコロッケ、豆腐。豆腐は今回も3日と同じレシピで作ったつもりなのだが、3日のときのにがりは7.5ccより少なかったようで、7.5ccちょうどで作ったら若干苦みが出てしまった。なかなか奥が深い。

ひつまぶし、豆腐、きゅうりのぬか漬け、ほうれん草の炒め物

3日の補完。 今回の自家製豆腐は10%豆乳で。300ccの豆乳、7.5ccのにがり、13分蒸し。ほどよく固まっていい出来になった。パートナーご実家のほうれん草も美味!

ビーフストロガノフ

2日の補完。 すっかり定番のビーフストロガノフ。肉、たまねぎ、トマト、ヨーグルト、生クリームと材料さえ揃えておけば実はわりとお手軽。ピラフ作りも今のところ安定してるなー。

味噌雑煮

1月1日元旦の補完。あけました。 鮭の両面を焼き、昆布、玉葱、白菜、じゃがいも、人参、椎茸、豆腐、餅、味噌で煮込み。おいしいです。

鶏豚インド風カレー

12月31日大晦日の補完。年越しといえばカレーです。うどんも蕎麦もなくて外に行くのは寒い、ということで引き籠った結果ですが。玉葱を大量に炒めて豚、鳥、じゃがいも、トマト。鳥の解凍が甘くてちょっと臭みを感じたため、大量に生姜などを入れたらやたらと爽やかな味に。おいしかったけど。

2010年01月02日

Ghostscript 8.70でのCJK表示 (メモ)

Debianのghostscriptに関しては、cmap-adobe-*でごちゃごちゃやるよりも、CMapについてはpoppler-dataにまとめたほうがよいと思う。gs-cjk-resourceも同じようなファイルを持っているのだがどうもわかりにくい。で、cmap-*とgs-cjk-resourceとdefoma(こいつが一番問題だ)を本当に捨てられるのか、試行錯誤中。

Debianのghostscript 8.70~dfsg-2ではまだfontconfig(FAPI)を使うようになっていない模様。この場合は次のような挙動になっていた。

  • 基本Postscript欧文Type1フォント(Nimbusなど): /var/lib/defoma/gs.d/fonts/Fontmapの参照マップから検索される。マップのファイル名はパスが付いていないので同一ディレクトリから検索される。defomaを使っている場合は/usr/share/fonts/type1/gsfontsの各pfbフォントへのシンボリックリンクが貼られているので、ここから拾われる。実際のところFontmapがなくても、最終的には/usr/share/fonts/type1/gsfontsが探索されてちゃんと処理されるけれども、ちょっと気持ちが悪いので絶対パス参照にしたFontmapを用意して、gsパスに入れるのがいいだろう。結局varかetcに何らかのファイルを置く必要がありそうだ。
  • CJK TT/OTFフォント: 昔Turbo/Axeで開発したらしきCIDFnmapやその他の修正は「パッチ当たらないので捨て」とchangelogに書かれていた(まぁよくあるパターン)。CMapは/usr/share/ghostscript/8.70/Resource/CMapが使われる。現在は/var/lib/defoma/gs.d/CMapへのシンボリックリンクになっていて、この中にcmap-adobe-*の各ファイルへのリンクがベタで置かれている。サブディレクトリは使えない。poppler-dataのファイルを流用できるが、ベタでリンクし直す必要がある。マッピングのキモは検索パスにもなっている/var/lib/defoma/gs.d/fontsのcidfmap。フォント定義、エイリアスの両方が記述されている。書式はこちらが参考になった。OTFはTT機能部分だけを使うことになる。defomaは動的にこれを生成しているが、fontconfigを使って何か……ということになったら結局似たものを作ることになっちゃいそう。静的でいいなら/Ryumin-Light、/GothicBBB-Medium、/Adobe-Japan1、/HeiseiKakuGo-W5Hにttf-japanese-mincho/gothic.ttfとでも書いちゃうという(ひどい)手もある。

レンダラにFreeTypeを使う「FAPI」という機構もある。DebianのデフォルトはOFF。FT_BRIDGEパラメータをDEB_BUILD_OPTIONSに付けて再ビルドすると有効になる。が、これで動かすのはどうもよくわからなかった。fontsにFAPIcidfmap、FAPIconfig、FAPIfontmapの3つのファイルを置いて調整するようなのだが、文字のないPSですら起動しない。単にレンダラなだけでFreetypeのフォント名が使えるわけでもないし、メリットがわからない。

FAPI/fontconfigはとりあえず無視? CJKについては、cmap-*/gs-cjk-resourceは捨ててpoppler-dataに統一してもよさそう(gs-cjk-resourceのSMgoJが気になるが)。ただし、ghostscript用にCMapのベタ展開と、cidfmapの何らかの管理は必要。poppler-dataでやる話ではないので、何か別のパッケージを用意する必要がある(gs-cjk-resourceを作り変える?でもupstreamとは何の関係もないものになるので、名前を変えたほうがいいのではないか)。欧文Fontmapについてはgsfontsかghostscriptかで面倒を見るのがよさそう。

もうちょっと見てみた(2010.1.2 16:16)。また別にfontconfigを使う箇所があって、これはHAVE_FONTCONFIGフラグでデフォルトで有効になっており、FT_BRIDGEとは関係ない。設定はbase/gp_unix.cに反映され、fontconfigで管理しているフォントファミリとスタイルからPSフォント名をマングルして生成するmakePSFontNameという関数が有効になる。また、unix_fontenum_tというfontconfig接続構造体が追加され、gp_enumerate_fonts_init関数にはfontconfigの設定を読み込んでフォント一覧を取得するコードが追加される(エイリアスは読まれるんだろうか?デバッガで追わないとよくわからない)。gp_enumerate_fonts_next関数には順次フォントを読んでmakePSFontNameを使いPSフォント名とパスを返すコードが入ってるっぽい。gp_enumerate_fonts_free関数には掃除コードが追加。

結局、代表PSフォントのエイリアスをやってくれるわけではないっぽいので、これは引き続きfontconfigにエイリアスマップを記述することになりそう。逆に言えばこれだけが現状の問題?本当にfontconfigの探索がうまくいくか実験してみよう……。

……だめげ。和文については、makePSFontNameで「VLゴシック-Unknown」とか返してきちゃってる。LANG=Cにすれば一応英語名が先に返るようにはなる。欧文についても、gp_enumerate_fonts_nextで実ファイルしか探さないので、fontconfigでのエイリアスは効果がないっぽい(エイリアスはFontmapかcidfontmap側)。しかしそもそもPSファイルでPSフォント名をどのように書いても、ファイルが読まれないっぽい感じ。