Previous month:
January 2008
Next month:
March 2008

使い心地の良い工具

せっかく買うなら使い心地が良くてずっと使えるものを買うようにしています。

例えばドライバー 。100円ショップでいくらでも買えますが、僕はPBのドライバーを使っています。しっかりした製品はいくら使ってもグリップがぐらついたりメッキが剥げたりといったことがありません。

SANY0007.JPG

性能的はVESSEL と変わらないと思いますが、握った感じが柔らかいのが好きです。

ソケットとラチェットはSnap-on

SANY0004.JPG

学生の頃に自転車屋でアルバイトしていたときに自分用に買いました。FLANK DRIVE のおかげで安心してトルクをかけられます。Snap-on は永久保証なのでずっと使い続けられます。無理して買っても一生使えるのがいいです。

SANY0005.JPG

握った感じもラチェットの音も気持ちがいいです。

ソフトウェアは本来は触れる事ができない道具ですが、ここにあげた道具と変わらない「使い心地」を提供できる不思議な存在だと思います。ソフトウェアを作る上で実在する道具から学ぶ事は多いです。


クリスピー・クリーム・ドーナツ食べ放題

Doughnut

クリスピー・クリーム・ドーナツは未だに行列ができているそうですが、先日アップルの方から「WWDC のドーナツはずっと前からクリスピー・クリーム・ドーナツですよ」と教えてもらいました。

そうだったんだ。行列ができるドーナツとはどんなものなのかと思ってましたが、WWDC で会場のテーブルの上にてんこ盛りになってたあれでしたか。

セッションの合間におなかが空いて「外まで行くのは面倒だしこれでいいや」と思ってパクついてました。すごく甘くて2つも食べると血糖値がはね上がるんです。というわけでWWDC に行けば食べ放題なのでした。

今年のWWDC はiPhone SDK でかなり盛り上がるでしょうね。僕は行けそうにありませんが...


代表取締役印

SANY0024.JPG

今日は会社帰りに相棒と一緒に「代表取締役印」を注文してきました。
先週金曜日にお世話になった方達と銀座で食事をしたとき見つけた渋いはんこ屋さん「新橋印章」。

先週に通りがかったときに店の中で一人で仕事をしている店主らしき方の姿がちらっと見えたのですが、その方がとても姿勢良く座って仕事されていたのが印象的でした。いかにもきちんとやってますという感じ。

印鑑は大切なものなのでしっかりしたお店でお願いしたいものです。

本当は「だいたい会社を興すってことはなぁ...」なんて説教されるのをちょっと期待したのですが、淡々と説明していただきあっという間に発注完了でした。

お願いしたのは柘に手彫りの印鑑。

印鑑を注文したという事で屋号はもう決まってます。


仲間

いっしょにやっていく仲間ができました。
僕と一緒に仕事してきた男です。

僕は製品企画が終わるとすぐにエンジニアとしてひたすらコードを書いていました。僕はコードを書いていると他の事は何もできなくなります。机の上もめちゃくちゃで、チームのスケジュールも管理できなくなります。そんな僕がチームをまとめられるはずもなく、その代わりに彼がしっかりとチームをまとめてくれました。

彼は僕がコードを気持ちよく書けるようにあらゆることを調整してくれました。物ごとの段取りは彼の方が上手です。よく「段取り八割、仕事は二割」と言いますが、全体から見れば僕の仕事は二割の部分です。製品を世に出すには無数の段取りが必要になります。開発がオンスケジュールで進んだのは彼の段取りのおかげです。

こんなすばらしいパートナーは滅多にいないと思ったので、「社員をサーフィンに行かせよう」を貸して読ませてみたら「ぱくっ」と食いついてきました。でも大きな成功を夢見て目的を見失わないように「マイクロソフトでは出会えなかった天職」も読んでもらいました。当分2人とも無給ですが、それでも一緒にやってくれるのだからまさに運命共同体です。

でも事業をイーブンで始めるとうまくいかないことが多いのも事実です。2人とも「世の中何でも契約から」ということを叩き込まれているので、お互いの役割など、あらゆることを話し合ってます。こういった部分は友情でも男のロマンでもなくドライにいくしかないです。

いずれにせよ、これからは会社の登記から社会保険のことなど全部彼が段取りしてくれる(らしい)ので、僕はひたすらコードを書いていればいいというわけです。彼がスケジュールを組んでくれればきっと早く出来上がりますね。


Kerning

欧文のカーニングを実装するとレイアウトがとても引き締まって見えます。ここでいうカーニングとは「ペアカーニング」のことで、特定の文字と文字の間隔を調整する機能です。ずっと以前にApple のエンジニアにOpenType への対応について聞いた事があるのですが、彼らは最初にカーニングに対応すると言っていました。リガチャよりも優先順位は高いのです。

カーニングをオフにして欧文を入力すると良くわかります。例えば「Tokyo」の「T」と「o」はずいぶん間抜けに見えます。

日本語でも「かな」のカーニングがあり、ヒラギノにも定義されています。例えば「っ」のような小さな文字を「て」に近づけるような組み合わせがたくさん定義されています。でも僕はカーニングされた「てっきょう」を読むと「てっ」の部分でちょっと引っかかる感じがしてしまいます。

好みの問題ですが、日本語の場合は文字をすべて正方形で組んだ方が読むときのリズムを乱さないような気がするのでegword のデフォルトは欧文だけに適用するようにしました。テキストエディットでは欧文も和文も区別なくデフォルトでオンです。

今はJIS X 4051 の組版ルールの実装を行っています。日本語の場合はカーニングよりも約物の間隔を上手に調整する事で読みやすいレイアウトができるのだと思います。


Ligatures

Ligatures

リガチャは、例えば上の例のように“f”と“i”や“f”と“l”がぶつかってしまうのを防いで読みやすくするための仕組みです。他にも“T”と“h”のような組み合わせもありますが、ぶつかるかどうかはフォントのデザイン次第です。リガチャは活字の時代からありました。当時は人が活字を組みながら特定の組み合わせのときは合字と入れ替えていたのでしょう。コンピュータはこれを自動化してくれますが、自由な組み合わせで効率よく自動化できるようになったのはApple Advanced Typography (AAT)やOpenType フォントのおかげなのです。この仕組みをさらに応用して筆記体のScript フォントもきれいにつながるようになります。

極めつけはMac OS X に標準で入っているZapfino® というフォント(AATフォント)。“Zapfino”と入力するとZapfino のロゴに変身します。これは“Zapfino”の7文字が一つのリガチャに置換されているのです。

Zapfino

egword なら字形インスペクタで「任意のリガチャ」をオンにすると表示されます。OpenType 版のZapfino Extra Pro ならMac OS X 版よりもたくさんの字形が入っています。


10,127 Lines

Kern_2

カーニングのコードが書けました。
こんな調子じゃちっとも出来上がらないと言われそうですが、基礎的な部分は使い心地に大きな影響を及ぼすため絶対に手を抜けません。

今書いているコードは文字を一文字ずつ精査するコードです。文章を書いているときに何十万回、長い文章を読み込んだときには何百万回も呼び出されます。ここでの小さな手抜きが大きなロスにつながります。またバグがあったら目も当てられません。

Mac OS X にも今書いていることをやってくれるサービスがありますが、自分で書く事で、例えば特定のフォントで縦書きの約物が置き換わらないといった問題にも簡単に対応でき、パフォーマンスも自分でコントロールできます。

フォントに含まれるグリフ合成のルールやカーニングのパラメータはタイプデザイナーが決めます。タイプデザイナーは文字ではなく単語をデザインすると言われます。高品質なフォントは単語として組んだときに最も美しく見えるようにカーニング等のパラメーターが調整されています。僕のようなプログラマがそれを無視したり、間違った値を使ったりする事は絶対にできません。

例えば、ヒラギノ明朝 ProN W3 の「て」には29通りのカーニングが指定されています。「て」の後ろに「。,ーぁぃぉくぐせぜっつのふぶぷへべぺみゃやゅらゎゐ」などの文字が来たときに少しだけ「て」に食い込ませるパラメーターが後に続く文字に対して個別に決められています。それも10ptのサイズで僅か0.3pt〜1.5ptという小さな調整値がそれぞれ決めてあるのです。

高品質な日本語フォントの開発は気の遠くなるような作業です。彼らの努力に報いるためにもしっかりと実装したいところです。


誕生日プレゼント

SANY0013.JPG

今日は僕の誕生日で36歳になりました。年男です。
新卒で今の会社に入った24歳からちょうど12年。人生の節目は12年ごとに訪れるものなのでしょうか?

さて、今日は女房が僕を連れて行きたいところがあるというので、家族揃って南青山まで出かけました。
何か買ってくれるのかなぁと思っていたら、そこは書斎館という名の万年筆屋さん。

中に入ってみると万年筆だらけで、しかもかなり高価なものが目立ちます。
僕は鉛筆とスケッチブックしか使わないから、最初は「弱ったなぁ」と思いました。あまり使わないのに高価なものを贈られてももったいないし、だいたいそんな余裕あるのか?と。

眺めていても全然ピンと来ないから、ちょっと開き直って、「高い筆圧でも細い線がしっかりと書けるもので予算はこんなくらい」と店員さんに聞いてみると、一本一本説明しながら出してくれて、カウンターでいいろいろ試させてもらえました。こうやってしっかりとアドバイスしてくれる店員さんだと買い物が楽しいです。

国産のセーラー、パーカー、ペリカンを試してみて、書き心地が良かったセーラーとパーカーで悩んだけどパーカーを選びました。殺し文句は、

「パーカーのアロークリップには目標に向かって真っ直ぐに進むっていう意味があるんです」

この人、なんだか僕の置かれた状況を知っているんじゃなかろうか?

そんなやり取りをしているうちに「毎日使います!」とすっかり万年筆に魅了されたのでした。ワープロもそうですが書き心地ってのはなにより大切です。

で、そんなやり取りをしている横でいつの間にか女房も買う気満々で試し書きしてるじゃありませんか。
女房も結局同じパーカーの色違いを選んでました。

インクの入れ方や手入れなどを全部ちゃんと教えてくれて1時間以上もお店にいました。子供連れだと入りにくい佇まいだったけど、試し書きしている間に他の店員さんがとても親切に相手してくれて、とても感じの良いお店でした。

帰って袋から出してみると見覚えのないペンケースが。「旦那様の誕生日ですからサプライズという事で!」と店員さんがサービスしてくれたそうです。とても気分のいい誕生日でした。


9,045 Lines

Aat

9,045行
今日までに書いたコードの行数。

ここまでに次のようなコードを書きました。


  1. 基本的なストレージの実装

  2. Unicodeからグリフへの変換

  3. リガチャ(合字)への対応

  4. フォントのアセンダ、ディセンダ、レディングの取得

  5. グリフの幅(Advance)の取得

  6. テスト用アプリケーションの作成

まだまだ基礎工事の段階です。
僕はCocoa のText System をほとんど使わないで実装します。
使うのは文字列と文字属性を管理するNSTextStorage というクラスだけ。
それも内部の実装は全部オリジナルのコードで上書きしています。
そうしないとパフォーマンスをかせげないからです。

Continue reading "9,045 Lines" »