2010-09-29

ひみつメモ帳 for Mac OS X

最近 Cocoa のプログラミングについて調べたりしているのですよ。Objective-C も Xcode も最初はどうしていいかわからなかったけど、わかってくるとよくできていると感心するようになってきた。ほんとはこれで iOS アプリを作れるようになりたいのだけど。

学習をかねて、「ひみつメモ帳」の Mac 版を作りました。Mac をお使いの方は試しに使ってみて動いたかどうか報告いただけるとありがたいです。

動作環境:
Mac OS X バージョン 10.6 (Snow Leopard) 以降 (Universal Binary)

初めての Mac アプリなので(配布方法含め)これでいいのか自信がない。

とはいえ、これでようやくウェブサイトのパスワードなどを記録したひみつテキスト (*.txts) を Dropbox などのストレージサービスに保存してさえおけば、 Windows からも Mac からも参照できるようになったぞ。これこそ当初のもくろみだったのに、一年近くかかってしまった。

余談だけど、当初はクロスプラットフォームにするのにいいかと思って、コードは wxWidgets を使って書いていた。しかし Mac 版を作るとなると、メニュー構成やらなにやらで結局 Xcode を使って Cocoa で書いたほうが無理がないことに気づいた。Windows 版も最初から C# で書けばよかったのかな? ただ .NET Framework はネイティブのライブラリ (OpenSSL) と組み合わせるのがめんどくさそう。できればシングルバイナリにしたいのですよ。あるいは、wx ならせめて wxPython を使っていたほうが幸せだったかもしれない。まあなんでも経験ということで。

その他近況

  • ThinkPad X201s 買った。
  • iPhone 4 買った。

iPad や Kindle まで手を出して、どう考えても今年は買いすぎ。なんの風が吹いていたのか。ThinkPad と iPod はいずれ買い換えなくてはいけなかったのだけど。まあ散財に見えるよね……。

Xcode 使うと iMac (2006年、Core 2 Duo) のビルドが遅いなあとか思ってしまうのだけど、今年は自制しよう。

ツイッターだと環境構築とかアプリの話とかができないのでなにか書くかも。といっても流行りものなんであんまりあらためて書くことないかなあ。

2010-08-30

Kindle 3 を買ったので。

Kindle 3 について

Kindle 2 からの変化を踏まえた、Kindle 3 についての覚え書き。

筐体

小さく、軽くなった。Kindle 2 でもじゅうぶん小さく、軽かったけど。

キーボードが一列減って、数字キーがなくなった。数字は記号と同様 SYM キー経由で入力する。でも意外と困らないよ。というかキーボードはあまり出番がない。

新しい 5-way ナビゲーションキーに慣れない。Kindle 2 のもあんまり操作しやすくなかったけど。Kindle 3 では、 5-way ナビゲーションの下に Back ボタンがあるのだが、下方向を押しているときに間違ってこの Back ボタンに触れてしまい、操作画面が一つ前に戻ってしまうことがある。これはたいへんなストレス。慣れればいけるのかなあ……。

ディスプレイ

Kindle 2 よりも良くなった(黒がより黒くなった)。が、劇的に変わったわけではない。Kindle 2 でもなかなかの品質であった。表示品質のためだけに Kindle 2 から買い換えることはない。

(ちなみに、前に某氏に聞かれて即答できなかった、Kindle ディスプレイの仕様は、 600 × 800 ピクセル、16 階調モノクロ電子ペーパー。)

電子ペーパーを見たことない人にその表示品質を説明するのは難しい。コントラスト的には新聞紙くらいで、それをラミネート加工した感じといえば近いだろうか。

ファイル名やコンテンツで日本語が表示できるようになった

正確にいうと、日・中・韓およびキリル文字のフォントを内蔵した。

これがいちばんありがたい。USB でパソコンとつなげて UTF-8 のテキストファイルを放り込めば、そのまま読める。小さな文書ならわざわざ電子ブックのフォーマットにする必要もない。

日本語の書体は、出自がよくわからないのだけど、独特のゴシック(サンセリフ)体。意外とまともなんだけれども、読書に最適な書体とはいえないことも確か。技術書やビジネス書なら気にならないかもしれないけど。

Kindle 3 で日本語ファイル名の文書を表示

Kindle 3 で書体は 3 種類から選べるようになったが、どの書体を選んでも日本語の書体は変わらない。内蔵フォントによる日本語コンテンツの表示品質に過度の期待はしないように。Kindle 3 になっても日本語の本格的な読書は PDF に頼ることになると思う。

それから、日本語の入力までできるようになったわけではないことに注意。コレクション(タグのようなもの)を作っても、そのコレクションに日本語の名前を付けることはできない。ノートやソーシャル・ネットワーク機能などで日本語を使えれば素晴らしいのだけれど。

あとはまあ当然といえば当然かもしれないけど、日本語の読み上げには未対応。日本語はぜんぶ読み飛ばします。まあしかたない。(PDF 以外での)縦書きも非対応。まあ当たり前。世の中人がやってくれるのを待ってちゃ駄目なことだってある。

とはいえ、ずらっとならんだローマ字の書名から文書を探すのは苦痛だったので、スキャンした書籍や、「青空キンドル」でPDF にした「青空文庫」の作品など、日本語のデータをたくさん Kindle に入れていた人には便利。

なお、PDF の表示では、日本語の文書はこれまで同様フォントが埋め込まれている必要があるのには注意。

WebKit ベースブラウザ

Kindle にもモダンなブラウザが搭載された。しかし相変わらず “experimental” 扱い。ほんとに WebKit で、JavaScript まで動くので、ぴょこぴょこ動くページでは電子ペーパーの表示速度だとかえってつらいのが泣ける。このあたりが実験的とされるゆえんか。

しかし日本語のページも問題なく表示できるので、テキスト主体のブログなどならそのまま読める。それから、日本語が最初から使えることで、ウェブから Kindle 向けにコンテンツを配布できるハードルは下がったと思うから、ユーザーベースでの今後の展開は期待できるかもしれない。

しかしこのタイミングで「青キンDirect」がなくなるのは残念すぎる……。

Kindle 3 で新聞社のサイトを表示
Kindle 3 でテキスト主体のブログを表示

ちなみに、Kindle は(2 も 3 も)ディスプレイの書き換えが遅いので、これをウェブブラウジング用のタブレット端末として使おうというようなことを考えてはいけません。リファレンス的な用途にもまともに使えません。小説やエッセイなどの読みものをじっくり腰を据えて読むのに最適化されたデバイスです。小説を読むことだけに特化されていると言ってもいいくらい。便利デバイスが欲しい人は iPad を買いましょう。

2010-08-15

夏バテの日々。

更新情報

『源氏物語の世界』校訂本文差分」というページを公開。くるってるとでもなんとでも言ってくれ、もうやっちゃったんだから。まじめに作業に集中すればおそらく三か月くらいで終わっただろうけど、だらだらと他のことの合間の合間くらいのペースでやってたので一年半かかってしまった。

源氏物語の本文というデータをウェブで自由に利用できる形で公開してるというのはとても価値のあることだと思う。それが少しでも正確でより良いものとなるのに協力できるのなら悪いことではないでしょう。

それにしても、「源氏物語の世界」のテキストを利用している人のうち、間違いに気づいたらちゃんと報告してる人はどれだけいるのかね!? そういうことも、インターネット時代のリテラシーのひとつだと思うのだけど。

以下この作業にまつわる雑談。

校正といっても、白状しますと本文を読んで目視校正したわけではない。ここで洗い出された疑問点は、基本的には渋谷氏が公開されているデータ自身から見つけ出されたものなのです。

どういうことかというと、「源氏物語の世界」では本文のローマ字版テキストも公開されている。そこで、ローマ字テキストを仮名に機械的に変換し、それをまたプログラムにより本文テキストと付き合わせて整合性を見る(もちろんそれもプログラムでやる)ことで、入力間違いをほぼ自動的に洗い出せる、と。

ローマ字版テキスト: naki tamahu
仮名に変換: なき たまふ
結果: 一致 不一致 
※ ここで本文に入力間違いがあることがわかる。
正規表現に変換: *き たふ
本文テキスト: 泣き たふ

細かいことを省くとこんな感じ。とはいえ、実際には当然ながらローマ字側にも入力間違いがあるので、まずそちらを校正しなければならなかった。また、誤りの個所がわかっても、正しくはどういう語が入るのかについては結局人間が判断して決めなければならない。微妙な例ならほかの全集の源氏物語の本文を引かなければならないものだってある。というわけで、そんなに楽な作業ではないことも確かだったのですよ。しかし結果としてはやってよかったと思う。

もともと僕にはある計画があって、それは自由に利用できる源氏物語の語彙データベースを作るというものです。各単語が分かち書きされているローマ字版テキストの存在は、そのデータベース作成にすごく役に立つ。もとの本文だと単語の区切り目がわからないから。で、ローマ字版と本文との突き合わせ処理をする必要があった。その作業の過程で生まれた副産物が「メカ紫」だったり、今回公開した「校訂本文差分」なわけです。ここ二年くらい僕のやってることは、駄目なのも多いけど、一応ぜんぶつながっているのだ。

2010-06-13

Unicode 文字列の折り返し処理をするスクリプト アップデート

先週の続き。

UAX #14 に書いてあることについて疑問があったので、Unicode.org のメーリングリストで質問して教えてもらったことを反映。ちょっと勘違いしてたとこがあった。

2010-06-05

Unicode 文字列の折り返し処理をするスクリプト

追記 アップデートあり

ときどき気が向いては Unicode の仕様書 (UAX) などを読んで遊んだりするんだけど、このたび少し形になったのでご紹介。

作り始めてから公開するまでたぶん三年くらいかかってる。「人生の 0.2 % ルール」によって生まれました。

下のやつはひとつの exe になってるので Python なくてもコマンドラインで動きます。

このスクリプトは、テキストファイルを等幅フォントできれいな見栄えになるように指定された桁数で折り返し整形します。よくあるやつです。が、折り返し処理に Unicode の Line Breaking Algorithm (UAX #14) を実装しています。結合文字やサロゲートペアにも対応しているので、アクセント記号付きアルファベットは当然として、小書きのプ―― U+31F7 (KATAKANA LETTER SMALL HU) U+309A (COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK) ――などが使われるアイヌ語のカタカナ表記や、新しく常用漢字に追加された口偏に「七」の「叱」に似た字形の U+20B9F などが使われた文書でも整形できます(それを表示できるエディタを探すほうがたいへんだけど)。

例:

Japanese:
+-------+-------+-------+-------+-------+-------+---
ある日の事でございます。御釈迦様は極楽の蓮池のふち
を、独りでぶらぶら御歩きになっていらっしゃいました。
池の中に咲いている蓮の花は、みんな玉のようにまっ白
で、そのまん中にある金色の蕊からは、何とも云えない好
い匂が、絶間なくあたりへ溢れて居ります。極楽は丁度朝
なのでございましょう。

English:
+-------+-------+-------+-------+-------+-------+---
Alice was beginning to get very tired of sitting by 
her sister on the bank, and of having nothing to 
do: once or twice she had peeped into the book her 
sister was reading, but it had no pictures or 
conversations in it, 'and what is the use of a 
book,' thought Alice 'without pictures or 
conversation?'

English, justified:
+-------+-------+-------+-------+-------+-------+---
Alice was beginning to get very tired of sitting  by
her sister on  the bank,  and of  having nothing  to
do: once or twice she  had peeped into the book  her
sister was  reading,  but  it  had  no  pictures  or
conversations in  it,  'and what  is  the use  of  a
book,'   thought   Alice   'without   pictures    or
conversation?'

French, justified:
+-------+-------+-------+-------+-------+-------+---
Pendant un  demi-siècle,  les bourgeoises  de  Pont-
l'Évêque  envièrent   à  Mme   Aubain  sa   servante
Félicité.

後半の例のように、justification もできます。

サロゲートペア対応などのため、Python 標準の unicodedata モジュールではなく、自前でおんなじようなライブラリをでっちあげてしまった。Python スクリプト版に同梱されている ucd ディレクトリに入っているモジュールがそれです。が、見ると目が腐る可能性があるので気をつけてください。

さて。この uniwrap.py はもとは等幅フォントを前提にした単なるユーティリティではなく、じつは文字列の幅情報を渡せば任意の論理幅で折り返し処理を行なうことができるクラスが入っているライブラリなのだ。だから GUI のテキスト描画にも使える(実際に wxPython と組み合わせて動いてるよ)。要は、まあ夢があるってことです。ドキュメントとかまだないから、細かくは書けないけど。

最後にコマンドライン・オプションの説明。

Usage: uniwrap.py [オプション] ファイル名

オプション:
  -h, --help            ヘルプの表示
  -e ENCODING, --encoding=ENCODING
                        ファイルのエンコーディング
  -x, --expand-tabs     タブをスペースに展開
  -j, --justify         両端揃え (justification)
  -r, --ruler           結果にルーラーを表示
  -t TAB_WIDTH, --tab-width=TAB_WIDTH
                        タブ幅 <8>
  -l, --legacy          全角・半角があいまいな文字を全角として扱う
  -w WRAP_WIDTH, --wrap-width=WRAP_WIDTH
                        折り返し桁数 <60>
  -c, --char-wrap       単純な折り返し処理

「全角・半角があいまいな文字を全角として扱う」は説明が必要かな。これは、要はキリル文字やギリシャ文字などを全角として扱うか半角として扱うかというオプションです。JIS の日本語文書では全角として扱われてますが、ユニバーサルな用途としては当然アルファベットのように扱う必要がある。デフォルトでは後者の扱いになっているので、日本語ローカルのエンコーディングで使う時はオンにしたほうがいい、と思う。

しかし uniwrap という名称は、Unicode に対応している折り返し処理、という意味で名づけたのだけど、なんか台所用品ぽいね……。