JAWSとプログラミング言語ruby

スクリプト言語ruby、私は日頃Linux上で使うことが多いのですが、Windows上でJAWS for Windowsと一緒に使うと、なぜか出力メッセージなどを読み上げず、JAWSカーソルによる画面探索も何もできない状態に陥る、という現象を経験していました。JAWSWindowsGUI部品やブラウザのみならずコマンドプロンプトも読み上げるため、プログラミングやシステム管理には必須だと思っています。しかし、なぜかrubyだけ音声が出ないのでした。
1年くらい前に気がついてrubyソースコードを読んだりいろいろなWindowsrubyを試したりしていたのですがなかなか解決策を見つけられませんでした。
ところが、今朝この状況がJAWSの「スリープモード」ににているというかそっくりであることに気づきました。そして実際、JAWSの共通設定フォルダにruby.jcfが。我ながら何というか遅すぎです。
結局たどり着いた解決策ですが、以下の2行を書いたruby.jcfというテキストファイルを作り、それをJAWSの個人設定フォルダに置けばOKです。

[options]
SleepMode=0

では何でrubyにスリープモードを適用する必要があったのかということになります。調べてみると、欧米で使われているOpenBookという有名な視覚障害者用OCRソフトの一時期のバージョンとして、「OpenBook Ruby Edition」というのがあるようです。ruby.jcfは(おそらく)そのための設定なのです。つまり、OpenBookは元々視覚障害者用アプリで、それ自体で読み上を行う機能があります。そのような時、JAWSも画面読み上げを提供すると重複した読み上げとなるため、スリープモードにしてJAWSの読み上げを抑制していたのです。しかし、きっと後発でrubyというプログラミング言語が現れて実行ファイル名が重なってしまったために、言語のrubyもスリープモードになってしまうのだと思われます。
同様な状況になってグーグルに聞いてみた人が情報に出会えるように、ここに書いてみました。

はてなとかWikipediaをよく見る人のためのJAWS設定

JAWSでウェブページを閲覧する場合、仮想バッファと呼ばれる見えない場所に閲覧用の文書が準備されて、それを矢印キーで読んでいくことになります。
閲覧用の文書はブロック要素やある程度の長さ単位、それにリンクなど操作対象単位で改行されます。なので、1単位があまり短いと、下矢印キーをたくさん押すことになります。もちろんINSERTキー+下矢印で全文まとめて読ませることもできますが、閲覧のコントロールを失った気がして私はあまり使いません。
たとえばこんな感じに見えます。

新年早々失礼します。

リンク Linux
を端末で操作している時、失敗したことにすぐに気づかないことがあります。私の場合、結果を
リンク 点字
ディスプレイなどで確認するのですが、絶対成功する.....(以下略)

読むのがめんどくさいなと感じるページにはてなダイアリーWikipedia(というか一般にWiki)があります。これらでは、文中のキーワードがリンクになっています。そのため、上のように細切れになり、とても面倒に感じるわけです。
JAWSには表示モードとして、リンクごとに改行せず、もっと1行を長く表示するモードがあります。INSERT+Vを押し、「D 文書表示モード」を「簡易レイアウト」から「画面レイアウト」にすることで、リンクいっぱいの文書もざっくり読みやすくなります。リンクの部分は「リンク」という言葉を前置きして読み上げられるので、ほんとにリンク先を見たいならTabキーでそのリンク部分に移動してEnterキーを押せばいいわけです。
ところがこの設定はブラウザを閉じたりタスクを切り替えると元に戻ってしまいます。また、切り替えた後はすべてのサイトで画面レイアウトになってしまうため、それはそれで困ることもあります。
そこで、INSERT+Shift+V(個別設定)を利用します。特別扱いしたいサイトで個別設定を開き、同じように画面レイアウトに設定すると、以後そのサイト(d.hatena.ne.jpなどFQDN単位)でその設定が有効になります。その他のサイトでは依然として簡易レイアウトのままです。
という使い方、知っていたのですがふと思い出したので先ほど設定してみました。幸せになれるでしょうか。

コマンドが失敗したらビープを鳴らす(zsh)

新年早々失礼します。
Linuxを端末で操作している時、失敗したことにすぐに気づかないことがあります。私の場合、結果を点字ディスプレイなどで確認するのですが、絶対成功すると思い込んでいる時には確認をサボりがちで、そういう時に限ってミスっているというようなことが最近もありました。
こちらのページで、zshにprecmdという関数があることを知りました。プロンプトが表示される直前に実行されるので、これを定義しておくことでコマンド実行後に何かさせることができます。
これを応用してコマンドが0以外のステータスコードを返したらビープをならすようにしてみました。

precmd () {
  if [ $? != 0 ]; then
    echo -n \\a
  fi
}

これの問題点はCTRL+Cで入力を中断したときもビープがなってしまうことですが、EmacsだってC-Gでビープするし、問題ないでしょう。
ちなみに、bashでもできないのかと調べてみると、precmd/preexecをbashで実現する方法を考えた人がいるようです。まだ試してはいません。

リニューアル後のはてなブックマークに関する感想とTips

11月にはてなブックマークがリニューアルされ、使い勝手がいろいろ変わっています。何か書こうと思いっつ1ヶ月ほど過ぎてしまいました。
JAWS for Windows 9.0+IE7またはFF3で利用する上でよくなった、もしくは操作に工夫を要するようになったところを書いてみます。

使いやすくなったところ

見出しマークアップの全面採用

これまでハテブのページはマークアップとしてはリストの入れ子でしっかりしてはいたと思います。しかし、スクリーンリーダー利用者からすると、ブックマークのタイトルが見出しマークアップになっていないことがあるというのが気になっていました。個人のブックマークページではよいのですが、トップページでは挙がっているブックマークを一覧するのが面倒でした。
しかし今回のリニューアルで、各ブックマークのタイトルが見出しになり、JAWSだとhキーを押していくだけでざっくり見やすくなりました。フィードを通してみることも多いのですが、たまに何かないかな的に見に行くことがあるので、そういう時に気軽なのは助かります。

続きを読む

イー・モバイルとDebianでルータ

引っ越して自宅ネットワークが1ヶ月くらい使えないことになったので、衝動的にイー・モバイルスーパーライトデータプランに契約してしまいました。新二年なので2年間やめられませんが、月々最低1000円、いくら使っても上限4980円というのに惹かれました。
さて、1代のPCではもったいないので、自宅サーバをルータにしてNATしてみることにしました。以下はそのメモです。イー・モバイル端末はD02HW、OSはDebianのLenny(カーネル2.6.26)です。

続きを読む

RubyでSAPI 5をしゃべらせる

RubyからMicrosoft Speech API 5.0を動かして遊んでみたので書いてみます。
以前BEPというプロジェクトでEmacspeakに日英2カ国語をしゃべらせるために、スピーチサーバと呼ばれる音声出力部を自作したことがありました。本家EmacspeakのスピーチサーバはTCL(エンジン制御部はC)で書かれているのですが、その頃の知識の問題もあって、日本語版は全体をC++で開発しました。文字列操作がとても面倒だったことを覚えています。
今ならLinux版はエンジン制御はCで書き、その上にスクリプト系言語をかぶせるのがいいだろうと思っています。RubySwigあたりでCライブラリをつなぐのが良さそうです。
ところで、BEPにはWindows版もあり、そちらはCOMを利用したC++のプログラムになっています。COMならRubyのWin32OLEでできるんじゃないか、ということで、SAPIを利用する方法を調べてみました。

続きを読む

DebianでCPANのモジュールを利用する

DebianではCPANのモジュールもパッケージとして提供されていますが、もちろんオフィシャルには提供されていないものもたくさん存在します。そういうモジュールたちを利用したくなったときに、どうやるのが正しい方法なのかがいまいちわかりませんでした。
そこで少し調べてみたことをメモしておきます。素人なので間違っていたらご指摘を歓迎します。また、2008/05/24時点でのDebian testingで調べました。システム標準のPerlは先日5.10に更新されました。

  • 自分でPerlをインストールする
  • dh-make-perlを使ってローカルパッケージを作成する
  • CPAN++を使う

おそらくCPAN++が現状モダンな方法なのではないかと思っています。

続きを読む