Firefox 3の「ホーム」ボタンが邪魔なとき

Firefox 3(Beta)を使い始めるとFirefox 2に戻れなくなるくらい快適なのだが、一点だけどうしても違和感の残る部位があった。ブックマークツールバーを出していると、左端に「ホーム」のボタンが出てしまうのだ。

右クリックしても「削除(D)」のようなメニューが現れる気配がないし、ものすごく邪魔だけど我慢して使うしかないか…と思っていたら意外に簡単に退散させることができた。「表示→ツールバー→カスタマイズ」で出てきたウィンドウの中にドラッグ&ドロップで「ホーム」ボタンを投げ込んでしまえばよいのだ。

気がつくまでに何週間もかかった。「早く気づけ」と叱られたい気分だ。

MySpaceアプリケーションを作ろう

昨日、IDEA*IDEAの田口元氏が主催する「MySpace勉強会」に参加してきた。Web APIに興味を持つ開発者が10人程度で、それらに対し米国MySpace本社から来たBrian、Frank、Joshらがプレゼンしながら実際のコードを見せていくというスタイル。

意外だったのは、参加者の中でMySpaceアプリケーションの開発に手を出したことのある人が皆無だったこと。この類のイベントに来る人の中で0人なのだから、日本全体としても限りなく0に近いのではなかろうか。開発プラットフォームはまだほとんど宣伝もされず、利用者のフィードバックを少しずつ得ながら静かに広まっていく初期段階だという認識をMySpaceの人たちも持っているようだ。

今日は、その時に聞いてきた仕様や開発手順を基にして「はじめてのMySpaceアプリケーション」に挑戦してみた。"Hello, World"だけでは寂しいので利用者の性別と年齢を取り込みながら挨拶するようになっている。


↑開発者向けのサイトは http://developer.myspace.com/community/ だ。開発を行う人は最初に申請をしないといけない。名前やメールアドレス等を書き、submitすると返事が来るまで10分くらい待たされる。その間に「OpenSocialとは何ぞや」等の説明を適当に読みながら心の準備をしておく。

承認がおりたら http://developer.myspace.com/modules/apps/pages/myapps.aspx で"Create New App"ボタンを押す。


↑作るアプリケーションの名前やメールアドレス等を入れる。メールアドレスはアプリケーション毎にユニークでないといけない。これは昨日の勉強会で衝撃を受けたことなのだが、MySpaceのアプリケーションはユーザと同じように「人格」のようなものを持ち、開発者がそのアプリケーションの「最初の友人」になっているのだという。

XMLファイルをアップロードせよと言われるが、最初は気にせず"Skip This Step"ボタンを押す。

↑アプリケーションのカテゴリを指定する。ここではとりあえず「コミュニケーション」にしておく。

↑ページ上部の"Edit App Source"タブを選択し、いよいよ実際のコードを書き始める。"Canvas Surface"、"Profile Surface"、"Home surface"と3つ並んでいるうちの"Profile Surface"を選び、HTML/JavaScript Sourceの所に書き込んでいく。Firefoxで表示が少し崩れるが、気にしない。

今回使ったコードはこれだ。Viewer(MySpaceアプリケーションではインストールした人をOwner、いまブラウザで見ているひとをViewerと呼ぶ)の年齢と性別を取得して「こんにちは」と挨拶するようになっている。

<div id='heading'></div>
<hr size='1px' />
<script type='text/javascript'>
var os;
var dataReqObj;
var html = '';
var heading = '';
function init() {
    var p={};
    // どんな情報を取得したいか?
    p[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
        [opensocial.Person.Field.ID,
        opensocial.Person.Field.NAME,
        MyOpenSpace.Person.Field.AGE,
        MyOpenSpace.Person.Field.GENDER ];
    os = opensocial.Container.get();
    // DataRequestオブジェクトの作成
    dataReqObj = os.newDataRequest();

    // RequestItemオブジェクトの作成とDataRequestオブジェクトへの追加
    var viewerReq = os.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER,p);

    // 要求のディスパッチ
    dataReqObj.add(viewerReq);

    // コールバック関数を指定し、送る
    dataReqObj.send(viewerResponse);
}
function viewerResponse(data) {
    var viewer = data.get(opensocial.DataRequest.PersonId.VIEWER).getData();
    var friendData=viewer;
    var friendName = friendData.getField(opensocial.Person.Field.NAME);
    var age = friendData.getField(MyOpenSpace.Person.Field.AGE);
    var gender = friendData.getField(MyOpenSpace.Person.Field.GENDER);
    var heading = 'こんにちは' + viewer.getDisplayName() + ', お前は' + age + '歳の' + gender;
    document.getElementById('heading').innerHTML = heading;
}
init();
</script>

↑書き終わり、アプリケーションのプロフィールページに行くと「アプリケーションの追加」ボタンが現れる。成功を願いながら押し込む。

↑このように表示され、うまくいったことがわかる。19歳なのはバグではなく自分のせいだ。


昨日の勉強会によると、自作のアプリケーションを他の人達に向けて公開するにはレビュー(審査)を受けないといけないらしい。主にセキュリティ面のチェック(eval使うな、とか)とのことだが、そこを通過すれば2億ユーザに使われる可能性を持つアプリケーションの誕生だ。まだ日本にはほとんど開発者がほとんどいないのだから、今のうちにたくさん練習しておいて大ブレイクを狙う、というのもいいかもしれない。

【追記】最初の開発者の登録のところで10時間以上待たされた、という人がいた。承認はもしかして人手でやっているのだろうか?

Firefox 3の何が良いか

オフライン機能だスマートブックマークだ、といろいろ言われているが、使ってみてすぐわかる嬉しい違いは「IMEがオンになっていてもスペースバーでスクロールできる」ことだ。

Firefox 2ではそうはいかず、スクロールさせるためにわざわざIMEをオフにする操作がストレス源になりFirefoxをやめてしまった、という人が周りに何人もいる。上の画像(『はてなブックマーク』の例)のようにIMEの状態を親切に教えてくれるページであればよいのだが、そうでないとブラウザの外にある言語バーを目視して確認してから切り替えないといけない。自分もInternet ExplorerからFirefoxに乗り換えるときに慣れるまでにだいぶ時間がかかった。

Firefox 3はまだ"Beta 4"の段階であり、皆にお勧めするわけにはいかない。だがIMEに関する今回の機能変更が今後覆ることは考えにくいし、全体として動作も軽くなっている。今後におけるFirefox 3は間違いなくお勧めだ。

Firefox 3ベータ版のダウンロード

その他のFirefox 3の新機能の解説

研究レベルでのSCORM 2004

引く可能性がありそうなものを、とりいそぎ。

  • 池田,林: "SCORM2004準拠学習コンテンツの知識レベル設計支援 -知的学習支援プラットホームに関する オントロジー工学的考察-"
  • 林,伊東,池田: "適応的学習コンテンツの知識レベル設計支援−SCORM2004準拠学習コンテンツの構成に関するオントロジー工学的考察−",人工知能学会全国大会論文集,3D2-02,2005.
  • Melia, M., Barrett, R. and Pahl C.:"A Model-based Approach to SCORM Sequencing", 7th Annual Irish Educational Technology Users Conference, EdTech 2006, Sligo I.T.ILTA 2006.
  • Abdullah, N.A.,Davis, H.C.: "A real-time personalization service for SCORM",Advanced Learning Technologies, 2005. ICALT 2005. Fifth IEEE International Conference, pp.61-63, 2005.
  • Sabbir Ahmed Kazi: "A conceptual framework for Web-based intelligent learning environments using SCORM-2004", Advanced Learning Technologies, 2004. Proceedings. IEEE International Conference, pp.12-15, 2004.
  • Yang, J.-T.D.,Chiung-Hui Chiu,Chun-Yen Tsai,Tsung-Hsien Wu: "Visualized online simple sequencing authoring tool for SCORM-compliant content package", Advanced Learning Technologies, 2004. Proceedings. IEEE International Conference, pp.609-613, 2004.
  • Aroyo, L., Pokraev, S., and Brussee, R.: “Preparing SCORM for the Semantic Web”, proc. of CoopIS/DOA/ODBASE 2003, pp. 621-634, 2003.
  • Chih-Ping Chu, Ching-Pao Chang, Chung-Wei Yeh, Yu-Fang Yeh: "A Web-Service Oriented Framework for building SCORM Compatible Learning Management Systems", Proceedings of the International Conference on Information Technology: Coding and Computing (ITCC'04) Volume 2 - Volume 2, pp.156-161, 2004.
  • Sergio Gutiérrez Santos, Rosa García Rioja, Abelardo Pardo, Carlos Delgado Kloos.: "Beyond Simple Sequencing: Sequencing of Learning Activities using Hierarquical Graphs", Internacional Conference on Web Based Education, pp.514-519, 2003.
  • Meng-Che Chen, Chien-Tsun Chen, Yn Chin Cheng, Chin-Yun Hsieh: "On the development and implementation of a sequencing engine for IMS learning design specification", Advanced Learning Technologies, 2005. ICALT 2005. Fifth IEEE International Conference, pp.636-640, 2005
  • Hsuan-Pu Chang, Chun-Chia Wang, Kuen Han Jan, Shih, T.K.: " SCORM sequencing testing for sequencing control mode", Proceedings of the 20th International Conference on Advanced Information Networking and Applications - Volume 2 (AINA'06) - Volume 02, pp.899-906, 2006.
  • Jun-Ming Su, Shian-Shyong Tseng, Jui-Feng Weng, Kuan-Ting Chen, Yi-Lin Liu, Yi-Ta Tsai: " An object based authoring tool for creating SCORM compliant course", Advanced Information Networking and Applications, 2005. AINA 2005. 19th International Conference, pp.209-214 vol.1, 2005.
  • Kiyoshi Nakabayashi, Takahide Hoshide, Masanobu Hosokawa, Taichi Kawakami, Kazuo Sato:"Design and Implementation of a Mobile Learning Environment as an Extension of SCORM 2004 Specifications", The 7th IEEE Interntional Conference on Advanced Learning Technology, pp.369-373, 2007.
  • Tongchaitong Yordpret, Boonmee, Choompol: "On the Development of Sequencing Engine for Coach Assisted System with Learning Growth Rate", Information Technologies and Applications in Education, 2007. ISITAE '07. First IEEE International Symposium", pp.167-170, 2007.
  • 延原 哲也, 庄司 成臣, 劉 渤江, 横田 一正: "ECAルールを活用したeラーニングシステムにおけるシーケンシング制御の改善", 情報処理学会研究報告. データベース・システム研究会報告, Vol.2005, No.68(20050714) pp. 601-606, 2005.

# 台湾の人が多いね。

perlappとUnicode::Japaneseで起こる問題

ActiveStateの"Perl Dev Kit"に含まれるperlappはPerlスクリプトをexeファイルに変換してくれる優れモノだ。pp(Perl Packager)に比べてexeファイルの起動も速く「さすが売り物」という感じで快適に使えていたのだが、使うモジュールによってはppで起こらない問題に直面することもあり、Unicode::Japaneseでは実行時に以下のような症状が見られた。

C:\hoge>hoge.exe
Tk::Error: could not open file [/Unicode/Japanese.pm] for input : Invalid argument at /Unicode/Japanese.pm line 485.
 Unicode::Japanese::PurePerl::_init_table at /
Unicode/Japanese.pm line 485
 Unicode::Japanese::AUTOLOAD at /Unicode/Japanese.pm line 213
 Unicode::Japanese::new at /Unicode/Japanese.pm line 176
(中略)
 (command bound to event)

Japanese.pmファイルの該当箇所を見るとUnicode::Japaneseは自分自身をファイルとしてopenしにいっており、"/Unicode/Japanese.pm"というパス名が引っかかってエラーになっている。短期的な解決策として以下のように変更してみた。

483:        if( $INC{$file} )
484:        {
485:          $INC{$file} =~ s/\/<.+>/C:\/Perl\/site\/lib\//;
486:          open($FH,$INC{$file}) || CORE::die("could not open file [$INC{$file}] for input : $!");
487:          last OPEN;
488:        }

openするファイルはC:/Perl/site/lib/Unicode/Japanese.pmという名前で決め打ち。これで問題が回避されたように見えるが、生成したexeファイルをPerlの環境がないマシンで動かそうとしたときに"C:/Perl/site/lib/Unicode/Japanese.pm"が存在しないせいで再び引っかかる。exeファイルと一緒にJapanese.pmも配布すればよいのだが、それは美しくない。自分が許せない。

ということで以下のようにした。

483:        if( $INC{$file} )
484:        {
485:          if(defined(&PerlApp::extract_bound_file)){
486:            $INC{$file} =~ s/\/<.+>//g;
487:            $INC{$file} = PerlApp::extract_bound_file($file);
488:          }
489:          open($FH,$INC{$file}) || CORE::die("could not open file [$INC{$file}] for input : $!");
490:          last OPEN;
491:        }

http://aspn.activestate.com/ASPN/docs/PDK/7.0/PerlApp.html によると、PerlApp::extract_bound_fileはコンパイル時に--bindオプションで割り付けられたファイルを展開し一時ディレクトリに書き出してくれる。ここではその一時ファイルをopenの対象としたため、以降のコードは全く書き換えなくてもよい。実行終了後に一時ファイルは消してくれるので、ゴミは残らない。

コンパイル時のオプションの例は以下のようになる。

C:\hoge>perlapp -exe hoge.exe hoge.pl --bind Unicode/Japanese.pm[file=/Perl/Site/lib/Unicode
/Japanese.pm,text]

perlappの作者はユーザがこんな問題に遇うことを見越してPerlApp::extract_bound_fileのような機能を用意したのだろうか? 苦肉の策だが美しい。美しいが苦肉の策だ。

Answers.comとFoxit Readerで英語論文読みが快適に

様々なオンライン辞書引きツールの中でも、特に気に入って常用しているのがAnswers.comの"1-Click Answers"だ。
平易な解説による英英辞典でネイティブ読み上げの音声つき、利用料金はかからない。そして何といっても最大の特徴は「Alt-クリック」による直感的な辞書引き操作にある。この割付が気に入らない時は「Alt-クリック」「Shift-Ctrl-右クリック」などへの変更も可能だ。

Answers.comのツール郡の中でも有名なのはWebブラウザに組み込む"Firefox Extension"だが、今回使っているのはWindowsのどんなソフトウェア上でも利用できる"1-Click Answers"だ。このほうが活躍する場面が多い。そして論文などのPDFファイルの表示には大定番の"Adobe Reader"ではなく"Foxit Reader"を選んでいる。Adobeのほうは"1-Click Answers"と組み合わせると目的の単語をマウスでなぞって反転させてから引かないといけない。その点でFoxitなら単語上での「Alt-クリック」だけでよく、続けて使う時のストレスが少ない。

最近まで、論文などの長い文章は「印刷しないとうまく読めない」と思っていた。コンピュータの画面は紙ほどの解像度がなく、見ているうちにすぐ疲れてしまうからだ。しかし"1-Click Answers"のような思考を遮断しない辞書ツールがあるなら、ぜひとも画面上で読み通そうという気になってきた。英語で最新の情報に触れ続けたい者にとって、これはありがたい変化だ。

Answers.com - Download 1-Click Answers
http://www.answers.com/main/download_answers_win.jsp

窓の杜 - Foxit Reader
http://www.forest.impress.co.jp/lib/offc/print/docviewer/foxitreader.html