Pharo1.3での日本語表示と入力

ようやくPharo 1.3が正式リリースとなった。

http://www.pharo-project.org/home

日本語表示についてはMac, Windowsともにフォントの設定だけで表示可能になる。具体的には、[ https://d.hatena.ne.jp/nqthm/20110905/p1 ]と同様だが、DLLやプラグインのコピーは必要ない。(既にある)

入力についてMac(SnowLeopard)ではそのまま入力できるが、Windowsでは「栄」や「!」など特定の文字が入力できない。対応するには、TextEditor>>dispatchCommandOn:return:メソッドを以下のように変更すれば良い。

- asciiValue := aKeyboardEvent keyValue.
+ asciiValue := aKeyboardEvent keyCharacter charCode.

暫定的なパッチを以下で公開する。当然のことながら無保証である。

http://itolab.com/software/pharo/pharo1.3-japanese-input-patch.1.cs

いつものような「とりあえず」パッチなので、将来にわたって利用できるとは限らない。このところ入力関連のコードが頻繁に変わる状況では次のバージョンではまた違う対応が必要になる可能性が高い。

11.04での日本語入力

ROSのためにubuntu 11.04をインストールしている。特に日本語入力することもなかったので気づかなかったが、ゼミ学生の環境構築を見ていたときに日本語入力できないことがわかった。調べてみると不思議なことに、最近インストールした3台のうち1台は問題なく、残り2台で入力できない。

具体的には、Ctrl-Spaceを押してもanthyが起動しない。web上では入力メソッドがibusにならないといった事例はあったが、どうやら違う原因のようだ。もちろんanthyやibus-anthyはインストールされていし、入力メソッドは「システム(IBUS(Intelligent Input Bus))」になっている。

解決は簡単で、システム設定で「キーボード・インプットメソッド」を開き、インプットメソッドタブに「日本語-Anthy」を追加すれば良いだけである。

本来は自動的に設定されるはずが、インストール中に何らかの理由で設定されなかったのだろう。

これからubuntuのインストールが増えそうなので備忘として記録。

Adobe Reader Xで「アクセスが拒否されました」

Adobe Reader Xにアップグレードしたところ、CutePDFで生成したPDFが読み込めず表題のようなエラーが表示されるようになった。

これはセキュリティ強化によるものらしい。

メニューから編集-一般を選び、「起動時に保護モードを有効にする」のチェックを外してアプリケーションを再起動すれば読めるようになった。

通常時のプロセス

何も悪い事してない状態でのプロセスをメモっておく。

Delay class>>handleTimerEvent
the low space watcher
Input events fetching process
the WeakArray finalization process
the UI process
the idle process

rospharoのクリーンインストール

なんだかイメージの調子が悪いので最初からインストールしてみた。きちんと手順を踏まないとならないので、備忘のために記録しておく。

1. XMLRPCのインストール

1-1. まずWorkspaceを開いて以下を入力し、XMLRPCのコンフィグレーションを読み込む。(以下、同様)

(Smalltalk at: #Gofer) new
squeaksource: 'MetacelloRepository';
package: 'ConfigurationOfXMLRPC';
load.

1-2. テスト付きクライアントパッケージをインストールする。

ConfigurationOfXMLRPC project latestVersion load: 'Client with Tests'.

1-3. テスト付きサーバーパッケージをインストールする。

ConfigurationOfXMLRPC project latestVersion load: 'Server with Tests'.

インストール中にエラー(Error: nil cannot be found in the list)が発生する。これは、XMLRPCHttpModuleのクラスメソッドinitializeで、Pharo 1.3に存在しないAutoStartを参照しているために起こる。

Debugボタンを押してデバッグウィンドウを出し、一覧からXMLRPCHttpModule class>>initializeをクリック。赤く表示されているAutoStartをClipboardに変更して、Alt-sでAcceptする。

途中でAuthor identificationが出たら自分のフルネームを入力する。スペースやクオーテーション、ハイフンなどは使えないので注意する。AcceptしたらProceedボタンを押して続行する。

1-4. 次に、XMLRPCのパッケージを修正するパッチを適用する。パッチファイル(xmlrpc-bugfix-struct.1.cs)は以前のエントリ https://d.hatena.ne.jp/nqthm/20110909 で公開しているので予めダウンロードしておく。

具体的な手順としてはメニューからTools-File Browserでファイルブラウザを開き、パッチファイル(xmlrpc-bugfix-struct.1.cs)を選んで、Fileinを押せばよい。

この時点で、XMLRPC-Client-TestsおよびXMLRPC-Server-Testsのテストが全て合格するはずである。

2. rospharoのインストール

2-1. 続いてrospharoをインストールする。Monticello Browserを開いて、+Repositoryボタンを押し、一覧からHTTPを選ぶ。

Information Requiredの画面で以下をカット&ペーストで入力してOKを押す。

MCHttpRepository
location: 'http://www.squeaksource.com/rospharo'
user: ''
password: ''

2-2. http://www.squeaksource.com/rospharo が選択されている状態でOpenボタンを押し、右側のペインの最上位のパッケージを選んでLoadする。

以上でインストールは完了する(はずである)。

rospharoのユニットテストはRos-Testsにある。またroscoreを起動した状態での通信テストはRos-Examplesにある。使い方の参考になるだろう。

pharo-xmlrpcのバグ

Rosでノード間通信するのに必要なので、Pharo上にXMLRPCを実現するpharo-xmlrpcというパッケージを利用している。

http://code.google.com/p/pharo-xmlrpc/

ベータ公開中のようであるが、テストはオールグリーンということで導入すると痛い目にあう。実際のところ、1.3RCはおろか1.2.1であってもテストの実行に失敗する。

問題は2点あり、ひとつはstructノードの生成に関すること、もう一つはネットワークポートに関することである。

以前このブログで、デコード時の問題を解決するパッチを公開した。このパッチでは、decodeStruct:というstructのデコード時にノードを深くたどりすぎるバグに対処するものだった。

http://d.hatena.ne.jp/nqthm/20110822/p1

実はこのパッチを当てると今まで動いていたテストが失敗するようになる。というのも実はエンコード時に以下のような結果を生成するようになっていたからである。

<struct><struct>....</struct></struct>

要するにstructノードを二重に生成してしまっているのだ。このためにパッチ前のデコード処理とうまく整合するようになっている。

structノードの生成は、encode:内でwrapVal:type:とencodeStruct:内の二カ所で連続して行っている。

本来こういった問題を回避するためのテストコードが必要で、実際そのためのテストコードもXMLRPCEncoderTest>>testEncoderにあるのだが、そもそもencodeStruct:でstructを生成することを前提にチェックしており問題は露見しない。不思議なのは、同じテストの別の箇所は全てencode:を用いてチェックしているのに、この部分だけはencodeStruct:を用いている。

以上のバグについては、XMLRPCDecoder>>decodeStruct:,

XMLRPCEncoder>>encodeStruct:, XMLRPCEncoderTest>>testEncoderを修正すれば良い。

もう一つのバグは、XMLRPCHttpModuleに関するものである。具体的な現象としては、テストを一度実行するとそれ以降、ネットワークポートが既にアサイン済みである旨のメッセージが出て、テストに失敗するというもの。どうもテスト終了時にネットワークポートの解放ができていないようである。

これはXMLRPCHttpModule class>>pauseでservice unassignPortを実行することで回避した。本来、ここに置くべきなのか不明なのだが、とりあえずの対処として行った。

近日公開予定と思われるPharo-1.3では、pharo-xmlrpcのインストール中にエラーが発生する。この理由は、XMLRPCHttpModule class>>initializeがStartUpListへの登録に、1.3では存在しない(らしい)AutoStartクラスへの参照を含んでいるからである。initializeの実行に失敗しただけなので、手動で実行すれば良いだろう。

なお、パッチは以下に置いてある。

http://itolab.com/software/pharo/xmlrpc-bugfix-struct.1.cs

Asus eeePCのブートメニュー

Asus eeePCにもubuntuを入れようと思ったけど、USBブートできなくて困った。

いや、当然できるんだろうけど起動時にホットキーの表示がなくいきなりWindowsが立ち上がるのでブートメニューが出せない。

電源オンですかさずF2を連打し(押しっぱなしは駄目みたい)BIOSメニューを出して、BOOTセクションでBoost BootをDisabledにして保存する。

再起動時にESCを連打するとブートメニューが出た。

慣れてないマシンだとこんなことでも戸惑ってしまう。

Pharo 1.3RCの日本語表示と日本語入力

Windowsでの日本語表示については、以下の手順でOK。

  1. FT2Plugin.dllをCog.exeのあるフォルダにコピー
  2. Pharoを起動
  3. World-System-SettingsでSettings browserを開く
  4. Appearance-Standard fontsでDefaultのフォント変更ボタンを押す
  5. Font fot defaultFontで、右下のUpdateボタンを押す。
  6. 適当なフォントを選んで Apply, OKボタンを押す。
  7. Settings browserでReset all to defaultボタンを押す。
  8. Settings browserを閉じる。
  9. イメージを保存しておく。

入力については一部文字の入力ができない。原因は1.2.1の時と同様。ただし、TextEditor>>dispathOn:は複数のメソッドに分割されたため、以前のパッチを当てるのは不適当である。

TextEditor>>dispatchCommandOn:return:メソッドで以下の部分を変更すれば良い。

- asciiValue := aKeyboardEvent keyValue.
+ asciiValue := aKeyboardEvent keyCharacter.

なお、全ての入力に対して適切に動作するかどうかは未確認であるので変更には注意されたい。

※追記(2011/10/5):上記のTextEditorに対するパッチは問題が生じることが判明した。正しくは、 https://d.hatena.ne.jp/nqthm/20111004/p1 を参照してほしい。

Pharo1.3RC

Pharoの1.3もRelease Candidateになったので、そろそろ出そうな感じである。

日本語の表示と入力を試してみたところ、SnowLeopardについてはFT2Plugin.bundleをコピーすれば問題なさそう。

Windowsについてはまだ試していないが、前回パッチをあてたTextEditor>>dispathOn:の中身が大幅に変わっているようなので、イヤな予感がする。

とりあえず1.3では、このブログに書いてある1.2.1のパッチ当て方では駄目なようなので注意!