2009年12月31日木曜日

SWE637ふりかえり

今セメスターからMS Software Engineeringコースにおける必須科目となったこのコース「Software Testing」。このコースでは、ソフトウェアテスティングの道具として、今までの研究成果として見出された様々なテストカバレッジクライテリアを学びつつ、それらをどのように効果的に使用するかについてコースの後半に駆け足で学びました。その過程で感じたのは、
  1. ソフトウェアテスティングにおいて銀の弾丸はない
  2. ソフトウェアテスティングは設計・実装と同じかそれ以上に経験と知識が要求される
ということです。実際のソフトウェア開発現場では、ソフトウェアテスターが開発チームにおいて尊敬される存在であって、プロジェクトを技術的にリード・教育する、という考え方が浸透すべきだ、と学びました。講義の中で先生が示された、ソフトウェアテスターに対する面白い喩えが「スペルチェッカー」でした。英語の文章を書いているとき、スペルチェッカーがスペルをテストしてくれるだけでなく、それらのテストを通じて私達はスペルを学ぶこともできます。

クラスで成績1番でした
このコースの成績は「A+」でした。先セメスターに受講したSWE642と同じく、講師Dr. Offuttが「A+はクラスでtop gradeだった一人だけにしか与えない」という方針をおっしゃっていたので、私はtop gradeだったと思います。実際、今セメスターの終盤、講師と雑談をしているときに、宿題やクイズの成績を見て「Kojiは明らかにtop studentだ。Kojiのgradingは他の学生より厳しくしなくちゃ」と冗談ぽく言ってくださいました。今回のクラスでも、会社勤めをしながら講義を受けるパートタイムの学生が多く(約40%ぐらい?)、私より年上の人もたくさんいました。残りの40%はインド人の学生、残りの20%は中国人の学生、という感じでしょうか。このような中で良い成績をいただけたので、自信になります(というか、就職活動を考慮すると、もっと自分に自信を持たなくては、と自分に言い聞かせています)。

このコースが難しい理由
このコースでは、多くの学生が苦労しているようで、Aの成績を取る学生はクラス内でたいてい30%以下だそうです。その理由は、おそらくこのコースで学ぶ以下のTest Coverage Criteriaが離散系数学・情報科学と深く関わっているからだはないかと想像します。
  • Graph Coverage
  • Logic Coverage
  • Input Space Partitioning
  • Syntax-Based Testing
Graph Coverageではグラフ理論、Logic Coverageでは論理、Input Space Partitioningでは集合、Syntax-Based TestingではBNFや正規表現が関連しています。宿題やクイズでは、これら情報科学について理解できていないと正しく答えられないことが多かったはずで、特にクイズの平均点は概ね低い日が多かったと記憶しています。

2009年12月30日水曜日

SWE619ふりかえり

SWE619のタイトル「OO Software Specification and Construction」に含まれる”Specification"という言葉が暗示するように、このコースでは、他人に使われることが前提のソフトウェアモジュールをどのように作ればよいか、を学びました。

おかげさまで成績は「A+」でした。成績の内訳は、宿題33%、クイズ33%、期末試験34%で、宿題およびクイズは満点でしたし(そのつど結果は返されました)、期末試験でも全問正解の自信があったので、成績全体で満点に近かったと思います。

期末試験でバグ発見
期末試験は教材持込可で、問題のほとんどは、与えられたソースコードを基に設問に答える形式でした。このコースで学んだ内容を効果的に問う、とてもよく考え込まれた設問ばかりでした。その中で、与えられたコードの問題点を指摘する設問において、出題者の意図と明らかに逸脱したバグを見つけてしまい、試験中に先生に確認したところ、先生は「ボーナスポイントあげる」を苦笑いしていました。

このコースで学んだ内容
冒頭で述べたように、他人が使われることを前提にしたソフトウェアモジュール(メソッド、クラス)を作るのに必要な仕様の定義方法、考え方、同仕様に対する実装方法等を学びました。また、Effective Java第2版の内容を学びました。どれもうなるような奥深さで、毎回クラスや宿題が楽しかったです。特に印象に残っているのは(というか、学んだ内容全て体に染み付けないといけないのですが)、
  1. Substitution Principle(継承の原則?)
  2. equals()の注意点
  3. clone()の注意点
  4. Concurrencyの難しさ
1. Substitution Principle
今回のコースを通じて、継承を使うことにはいかに多くの危険性があるかを思い知りました。そして、継承の本質として、「Substitution Principle」の大事さを痛感しました。この本質を分かりやすい例で説明すると、StackクラスはVectorクラスを継承すべきではない、ということです。正直言うと今まで、読みやすい、あるいは重複のない、といったことに注意してコードを書いていましたが、それほど深く考えずに継承を使っていました。特に、他人に使われるであろうクラスを作成するときは、とても気をつける必要があります。

2. equals()の注意点
1.にも関連しますが、インスタンス化可能な親クラスを継承した瞬間、equals()を正しく実装することは不可能だ、という事実を学び、正直驚きました。

3. clone()の注意点
これまた1.にも関連しますが、自分のクラスが他人によって継承可能な場合、コンストラクタを使ってclone()を実装したらアウト、という注意点を学びました。基本的にclone()は使わず、ファクトリメソッドを提供すべきですね。

4. Concurrencyの難しさ
何年経っても、並行プログラミングの難しさには閉口させられます(だじゃれです)。まして、他人が使うことが前提とされているマルチスレッドモジュールを作成する、あるいは他人が複数のスレッドを使ってアクセスするモジュールを作成するとなれば、格段に問題は難しくなります。Effective Javaにおいて何度も参照されている「Java Concurrency in Practice」は、近いうちに読む必要がありそうです。

すでに分かっていることながら、今回改めて痛感したのは、ソフトウェアの品質は開発者の経験および知識によって大きく左右される、ということです。多くの経験と知識を持つ先人がその経験・知識をEffective Javaのような素晴らしい書籍に残してくれるのはとても素晴らしいことだと思います。私達は先人が残してくれた知識を注意深く学ぶべきだと思いました。ただ、どうしても人間は、先輩が注意してくれても自分が痛い目にあわないと十分に理解できないことが多いのではないでしょうか。私も、Javaを学び始めてしばらくしてEffective Javaの第1版を読み、内容を理解したつもりでも「ふーん」ぐらいにしか思えず、その重要さを理解できていませんでした。その後、ある程度実装経験を積んだ段階で、上記のようにそれらを学びなおしてみて「そうそう、これはかなり重要!」と感じ、脳に強く焼き付けることができました。

2009年12月21日月曜日

大雪

12月19日土曜日は、日本や欧州各地で大寒波に見舞われたようで、私が住むワシントンDC近郊もたくさん雪が降り積もりました。おかげさまで、期末テストが終わってリラックスしながら大雪を自宅の部屋から見守っていました。

次の日の日曜日は晴天になりました。下の写真は自宅アパートの駐車場の様子です。すっかり車が雪に埋もれてしまっています。子供達は大喜びで雪遊びです。今日は、次の日に備えて車が出れるよう雪かきをしました。日曜日の時点で、周辺の道路は除雪されて、ノーマルタイヤでも問題なく車が走れる状態のようで安心です。

2009年11月28日土曜日

Diversity Visa Lottery

来年5月に卒業を控え、米国にて就職活動中です。このエントリでもお話したように、特に私が現在住んでいるワシントンDC近郊では、米国市民権あるいは永住権(いわゆるグリーンカード)が必要な求人がとても多いです。言い換えると、市民権まではいかなくとも、永住権があると就職活動上とても有利です。

2011年度のグリーンカード抽選、Diversity Visa Lotteryの申し込み締め切りは11月30日東部時間正午、ということで今日申し込みをしてみました。実は去年申し込みすべきだったのですが、自分のミスで締切日を見過ごしてしまいました。今年はちゃんと間に合ってよかったです。

申し込み方法
この抽選の申し込みは思ったよりとても簡単でした。現住所、世帯主の最終学歴、家族全員の名前、生年月日、生まれた市の名前、顔写真(JPEG)を入力するだけです。ちょっとした注意点は、WebブラウザとしてIEを使った方が無難っぽいことだけです。

顔写真の作り方
上記のように情報入力は簡単なのですが、ちょっと厄介なのは顔写真です。このページに書いてある条件を満たす顔写真を作成する必要があるからです。ざっくりと条件を列挙すると
  • 横600px、縦600pxのサイズ
  • 顔の長さが写真の大体50%
  • 目の高さが写真の底辺から大体60%
私はデジカメで撮った写真をIrfanViewを使って以下のように編集しました。

1. 写真撮影
カメラを縦方向にして撮ります。そのとき、上記条件を考慮して長方形の下側を切り取って正方形にしたときに顔の長さがその正方形の50%ぐらいになるように撮影します。

2. サイズ変更
写真をPCに取り込んだ後、IrfanViewで開きます。そして、以下のように、メニュー「Image」→「Resize/Resample...」を選択し、まずは横600px、縦80opxのサイズに変更します。

3. 切り抜き

最後に下側200px分を切り取ります。マウスをドラッグして領域を選択しても良いですが、以下のようにメニュー「Edit」→「Create custom crop selection...」を選択し、数値入力で領域を選択すると確実です(ダイアログ右上)。
4. Photo Validatorで確認
グリーンカード抽選サイトにPhoto Validatorが提供されているので、編集した写真をアップロードし正しくファイルを作成できたか確認します。私が試した限りFirefoxでは正しく動作しませんでした。IEではうまくいきました。

抽選結果は2010年5月以降
さてさて、当選するかどうか、来年5月までのお楽しみです。

2009年11月23日月曜日

SWE637 Software Testing

今セメスターで履修している二つ目のコース、SWE637を紹介します。

SWE637
講義名は「Software Testing」です。以下、シラバスからの引用です。
Concepts and techniques for testing software and assuring its quality. Topics cover software testing at the unit, module, subsystem, and system levels, automatic and manual techniques for generating and validating test data, the testing process, static vs. dynamic analysis, functional testing, inspections, and reliability assessment. Professor's note: The course will attempt to prepare students to test software in structured, organized ways. This course should provide practical knowledge of a variety of ways to test software, an understanding of some of the tradeoffs between testing techniques, and a feel for the practice of software testing and the research in software testing.
講師はDr. Offutt。2009年度春セメスターで私が履修したSWE642の講師でもありました。Dr. Ammannと同じくソフトウェアテスティングで有名な先生で、私がGMUに入学する前からこのコースを履修することを計画していました。

ソフトウェアテスティングは、ソフトウェア工学という分野においてとても重要なトピックであって、ソフトウェアの大規模化・複雑化に伴ってその重要性は益々高まっていると言えます。このような背景から、私が所属しているMS Software Engineeringコースでは、このSWE637が必須科目となりました。

教科書はDr. AmmannおよびDr. Offutt共著。教科書の著者が講師というのは、なんというか、迫力がありますね。講義の内容
この講義のテーマは、「テストの設計方法を学ぶ」です。デバッグとテストの違い、プログラムの抽象度を上げてテストするという概念「モデルベーステスティング」の理解から始まって、以下の各種Test Coverage Criteriaについて学びます。
  • Graph Coverage
  • Logic Coverage
  • Input Space Partitioning
  • Syntax-Based Testing
基本的なアイデアは、例えばGraph Coverageの場合、プログラムをノードと矢印から成るグラフにモデル化し、全てのノードをカバーするようなテストケース集合(Node Coverage)を設計する、だとか、全ての矢印をカバーするようなテストケース集合(Edge Coverage)を設計します。
上記のようなCoverageはほんの一例で、プログラムを様々な視点からモデル化し、同モデル上でこれまで研究者が見出してきた、有用だと言われているCoverageを学びます。

私はソフトウェアの設計や実装は大好きですが、一方で、テストの重要性を認識しておきながら、正直テストに関わるのを避けてきちゃいました。このコースを履修して、初めてテストに正面から向き合ったような気がします。

この講義では、毎週宿題が出題され、全て個人プレーで取り組みます。また、毎回講義の最初にクイズが出題されます。グループワークはありません。先日紹介したSWE619もグループワークがないので、今セメスターはかなり楽で、研究に時間を費やすことができています。

2009年11月21日土曜日

SWE619 OO Software Specification and Construction

早いもので、もう11月下旬になってしまいました。遅くなってしまいましたが、2009年度Fallセメスターで履修している二つのコースを紹介します。今日はそのうちの一つ、SWE619です。

SWE619
講義名は「OO Software Specification and Construction」です。以下、シラバスからの引用です。
To give the students a solid understanding of modern software construction. To prepare students to construct sequential and concurrent programs. To encourage the construction of software systems of high quality. In-depth study of software construction in a modern language including control structuring and packaging. Concepts such as information hiding, data abstraction, and object-based and object-oriented software construction are discussed and illustrated. This course is part of the core of the SWE program. This section of 619 uses Java.
講師はDr. Ammann。Dr. Offuttと同じくソフトウェアテスティングを専門とされている先生で、次回ご紹介するテスティングのクラスで使われている教科書の著者でもあります。

教科書について
この講義では、Javaを例にソフトウェアの実装について学びます。より具体的には、アカデミック界および産業界の双方から見出された実装のベストプラクティスを学ぶ、と言ってよいのではでしょうか。というのは、この講義では以下の2冊を教科書とし、ほぼその内容を学ぶからです。
以下の2冊を教科書としてそれらの内容を学びます。
  • Program Development in Java, Barbara Liskov
  • Effective Java 2nd Edition, Joshua Bloch
2冊ともとても有名な本ですね。1冊目はアカデミック界からMIT教授のLiscov氏による著書、一方2冊目は産業界から元Sun MicrosystemsのBloch氏による著書。

実は、1冊目については、以前勤めていた会社の研修において「設計論」というタイトルで、コンパイラで有名な法政大学の中田先生から学んだことがあります。一方、2冊目については、1st Editionの日本語版を読んだことがあり、良い復習になっています。振り返ると、日本語版は小難しく書かれていて、英語版の方が読みやすい気がします。

講義の内容
前半はLiskovの本を中心に、ソフトウェアモジュール(メソッド、クラス)の仕様(Precondition, Postcondition, Invariant等)の定義および同仕様に対する実装方法等について学びました。時折、2冊目の教科書を用いて、Exception、Generics、Concurrency等を学びました。先週、デザインパターンを学んだところです。

毎週宿題が出題され、全て個人プレーで取り組みます。また、毎回講義の最初にクイズが出題され、前回学んだ内容について確認します。特にグループワークはありません。

上記のように、このコースでは私の大好きな実装について学ぶので、とても楽しんで受講しています。しかも、使用している教科書からもお分かりのように、このコースの内容は、信頼性・保守性の高いプログラムを作成する上で学ぶべき内容が盛りだくさんで、とても素晴らしいコースだと思います。

2009年10月17日土曜日

US Citizenship Required

早いもので、私は2010年5月にGMUを卒業する予定です。卒業後は米国にて就職を希望しています。そこで、去る10月7日、8日の二日間、GMUのFairfaxキャンパスにおいて、Fall 2009 Job & Internship Fairがあり参加してきました。

今回のJob Fairでは、二日間で合計177ものEmployerがブースを構えました。主に今年の12月または来年の5月の卒業予定の学生がスーツを着てレジメを持って会場を練り歩き、リクルータにレジメを渡しつつ自己アピールをしていました。もちろん私もスーツを着てレジメを持って挑みました。

US Citizenship Required
ところが、ほとんどのブースには以下のような立て看板が。
US Citizenship Required
そうなんです、私が通うGMU(George Mason University)はワシントンDC近郊に位置するため、Job Fairに来るEmployerのほとんどが政府関係の企業・団体ばかり。特に技術系の企業の場合、General Dynamics、Northrop Grumman、Lockheed Martin、BAE Systems、Raytheonといった軍事関係の企業が多いのです。このような企業では、米国外から来ている留学生は門前払いなのです。

177社中7社のみ
前もって、GMUのキャリアサービスのWebサイトで、今回のJob Fairに参加するEmployerの中で、US Citizenshipを必要としないところを探したところ、
177社中7社のみ
でした。。。
というわけで、会場では何が起こったかというと、この数少ない企業のブースに、多くの優秀な留学生がレジメを持って長蛇の列を成すわけです。もちろん、私のその列に加わって長いこと待っていました。

Career Fair Breakfastに参加したものの。。。
なお、Job Fairの二日目の朝には、Volgenau School Career Fair Breakfastという、私が所属するDept. of Computer Scienceの上位組織主催の朝食会がありました。この朝食会には、学部で5人しか選ばれない成績優秀者のみが出席できるもので、Employerと優先的にアピールできる、という貴重な機会でした。私は、その5人を選ぶ立場にある学部長Gomaa先生のリサーチアシスタントということで、ありがたくこの立場を有効活用して選んでいただきました。私のGPAは4.0なので特に問題もなかったと思います。

正直、内心かなり期待していました。Employerも特別な目で朝食会に出席している学生を見てくれると思ったからです。

時間通りに朝食会の会場に行ってみると、選ばれた学生がスーツに身を纏い、気合を入れているのがよくわかります。大体、出席している学生の6割か7割ぐらいが留学生でしょうか。ところが、開始時刻を過ぎても、なかなかEmployerの方たちが来ません。30分ぐらいしてちらほらEmployerの方たちが来たのですが、上記のように政府関係の企業の方ばかり。留学生は必死にアピールするも効果なし。私を含め選ばれた留学生達は会場で立ち尽くすのみでした。

GMUのJob Fairは留学生にとってはほとんど意味がない!?
以上のように、GMUの留学生はJob Fairはほとんど当てにできないと言えるでしょう。日ごろからコネクション作りに励みつつ、Web等を最大限に活用して自力で就職先を見つけるしかなさそうです。インドや中国の学生は、すでに米国で就職している先輩のコネを利用したりしているようです。

残念ながらGMUの日本人卒業生はかなり少ないのでそのようなコネは全くありません。あらゆる手段を用いて頑張るしかなさそうです。

2009年9月4日金曜日

CUEバスがリニューアル

自宅のアパートからGMUのキャンパスまでは、CUEバスという公共バスを利用しています。これはFairfax市とGMUとおそらく共同で運営しているバスではないかと想像します。

GMU関係者は無料で利用可能
GMUの学生、スタッフ、教員は無料でCUEバスを利用することができます。これを主な理由に、CUEバスが便利に利用可能な今のアパートを選びました。このおかげで、私は車を必要ないため家族が車を利用でき、2台所有する必要はありません。

GMU⇔Vienna駅
CUEバスは、基本的にGMUとDCメトロのオレンジラインの終着駅Viennaとを往復しています。GoldとGreenの2つのコースがあります。

車体が新車にリニューアルされました
この不景気にもかかわらず、先週ぐらいからこのCUEバスの車体が新車にリプレースされました。一回り大きくなり、車内の椅子の数が増えより多くの人が座れるようになりました。
ハイブリッド?
上の写真にあるバスの後方の上部をよく見てみてください。「HYBRID」の文字が。ハイブリッドエンジンが搭載されているのでしょうか。乗車した時、常にエンジンが回っているのは確実に感じました。少なくとも、低速ではガソリンエンジンが起動しないトヨタのプリウスとは違う方式のハイブリッドのようです。

GMUキャンパスにおけるバス停もリニューアル
GMUキャンパスで乗り降りするバス停の場所も変更になりました。ますます、私の研究室から遠くなってしまいました。。。

2009年9月2日水曜日

新セメスター開始

8月31日月曜日から、とうとう新セメスターFall 2009がスタートしてしまいました。夏休みはおしまいです。

夏休みは実質1週間だけ
結局、5月から8月までほぼ4ヶ月あった夏休みのうち、本当に休みを取ったのは、Ocean Cityに行った6月末の1週間だけで、あとはひたすら研究趣味のプログラミング・論文執筆でした。

論文2本執筆中
8月から執筆を始めた2本の論文の締め切りは、それぞれ9月8日と10月8日。当初の予定では8月中旬締め切りと9月初旬締め切りのワークショップおよびカンファレンスに投稿予定でしたが、諸所の事情により上記のような締め切りのカンファレンスに投稿することを目指すことになりました。現在、鋭意執筆中で、1本目の方は概ね完成で細かい修正をしている段階です。一方、2本目については内容自体もまだ未完成の部分があり、1本目を投稿次第、気合を入れ直す必要がありそうです。

今セメスターは2つのコースを履修
先期春セメスターは3つもコースを履修しなければならなかったため、とても忙しかったのですが、今セメスターは2つのコースを履修するので、だいぶましなはずです。しかも、どちらもグループワークがなく、宿題は全て個人プレー。良くも悪くも自分のスケジュールで取り組めるのでだいぶ楽なはずです。残念なのはグループワークでないため、会社勤めをしているパートタイムの学生と深く知り合える機会がないことです。

Master Thesisも履修
実は上記2つのコースに加え、「Master Thesis」というコースも履修するので、形式的には先期と同じく3つのコースを履修することになります。ただ、Master Thesisといっても、今までと同じように研究を続けるだけなので、実質2つのコースを履修するのと同じです。

1年前渡米してきたばかりの頃を思い出します
新セメスターが始まったということで、キャンパス内は大賑わいです。いろいろなテントが立ち並び、キャンパスの案内や様々なクラブ・団体の紹介等をしています。それらを見ていると、昨年の今頃、渡米してきたばかりで情報に飢えていていろいろなテントを練り歩いたのを思い出します。日本のJAFにあたるAAAに加入したのも、このようなイベントのときだったと思います。なお、今年はなんと、遊園地にあるような遊具が以下のように設置されていました。がんばります
この4ヶ月間、講義なしで研究のみに集中できてとても良い状況だったのですが、とうとう新セメスターが始まってしまいました。講義と研究をうまく両立してがんばりたいと思います。

2009年8月31日月曜日

CMU訪問

8月27日と28日の二日間、ペンシルバニア州ピッツバーグにあるCMU(Carnegie Melon University)を訪問しました。以前勤めていた会社の先輩がこの日程でCMUを訪問する予定であることを知り、無理を言って同行させていただいたのです。

大慌てで前日の夜に出発
せっかくの訪問だったので、同じ研究プロジェクトSASSYのメンバでCMU卒業生の先生にお願いして、CMUの先生を紹介していただきました。前日まで良い返事をいただけてなかったのですが、26日の午後にようやく返事をいただけて、27日の午前11時に会っていただけることに!
私が住むバージニア州Fairfaxからピッツバーグまでは車で4時間はかかります。大慌てで、モーテルを予約し夜の7時に出発しました。

以下は、高速道路を走ってペンシルバニア州に入ってすぐのインフォメーションにあった看板。結局、そのモーテルに着いたのは夜の11時すぎでした。予約したのはRed Roof Innというモーテル。なかなか快適でした。School of Computer ScienceとComputer Science Department
CMUのコンピュータサイエンス系の学部は次のような組織構造になっています。まず最上位にSchool of Computer Scienceがあります。その下に、Computer Science DepartmentInstitute for Software ResearchRobotics Instituteがあります。このように、"Computer Science"の付く組織が上位と下位組織の双方にあるので、少し混乱してしまいます。

CMUのキャンパスは街中にあるのですが、キャンパス自体はとても広々として芝生がきれいでした。まず、Computer Science Departmentの先生お二人とお会いし、研究内容等についてお話することができました。ちょうど、GHCと呼ばれる新しい建物に引っ越してきたばかりで、その建物の内部はモダンな作りで容易に迷子になりそうでした。まだまだ工事中です。
その次に、Robotics Instituteにお邪魔しました。Robotics Instituteがある建物の一階には、以下のようなロボットが設定されていて、カメラで人を検知し「Good evening」と挨拶してくれます。
Robotics Instituteでは日本から多くの研究者が共同研究に来られていて、そのうちの何人かの方とお会いする機会に恵まれ、興味深いお話をさせていただきました。また、スタッフとして働いている日本人の方も何人かいらっしゃり、そのような方々ともお会いしてお話することができました。GMUでは、Dept. of Computer Science全体でも日本人は私一人であることを思うと、CMUでは多くの日本人が活躍されていてうらやましい限りです。

家に帰ってきたのは夜中の3時前
今回の訪問の最後には、同行させていただいた先輩とRobotics Instituteの先生とともに、ダウンタウンで夕食をご一緒させていただきました。老舗のシーフードレストランでとてもおいしかったです。結局、家路に着いたのは夜の10時半ぐらい。バージニアにある自宅に着いたのは夜中の3時前ぐらいでした。夏休みおしまい
このCMU訪問で、私の人生でおそらく最後の(学生としての長い)夏休みはおしまいです。その締めくくりとして、CMUで活躍されている方々とお会いすることができ、とても充実した二日間でした。

2009年8月20日木曜日

Minimal Perl

現在、2本の論文を同時に執筆中で忙しいにもかかわらず、そういう時に限ってやりたい事がたくさん思いついてしまいます。この本もその一つ。GMUの図書館で本のタイトルを見かけたときに「これだ!」と思い、つい手にとって読んでしまいました。「Minimal Perl」です。Perlを便利なワンライナーとして使う
Perlは、本来とても高機能な、オブジェクト指向もサポートしたプログラミング言語です。世の中には、そのような高機能を詳細に説明したPerl本がたくさん出版されていますが、この本はそのタイトルが示すように、それらの本とは一線を画すユニークな本です。

最近私はEclipseのようなIDEを使うようになり、使う頻度が低くなってきてしまいましたが、それでもやはりgrep, find, sed, awkといったUnixコマンドはとても便利で手放せません。Perlも時々ちょっとした複雑な処理に使ってきました。ただ、特にsedを使って大量ファイルに対してささっと一括文字列置換をしたりする際、「Perlの方が強力な正規表現をサポートしてるし、もうちょっと複雑な処理も出来て良さそうなんやけど、ワンライナーで手軽に済ませたいからなあ」なんてよく感じていました。また、Perlの文法は複雑なのでちょっと使っては忘れてしまっていて、なかなか完全にマスターできていません。

この「Minimal Perl」は、まさにそのような私の想いに応えてくれる本です。大きく2部構成になっていて、Part 1がまさにgrep, find, sed, awkの強力版としてPerlを使う方法を解説しています。Part 2はより複雑なスクリプトの書き方を解説しています。私はPart 1だけ読みました。

Perl as a (better) grep command
grepの代わりになる、Perlのワンライナーの書き方が紹介されています。以下は基本形です。
perl -wnl -e '/RE/ and print;' file file2 ...
マッチしない部分を表示する(grep -v)には、
perl -wnl -e '/RE/ or print;' file file2 ...

Perl as a (better) sed command

以下が基本形です。
perl -wpl -e 's/RE/replacement/g;' file file2 ...
以下は、ファイルを便利に直接書き換えるワンライナー。
perl -i.bak -wpl -e 's/RE/replacement/g;' file file2 ...

Perl as a (better) awk command

特定のフィールドを表示する例は
perl -wnla -e '($fname, undef, $lname)=@F; print "$lname\t$fname";' file

Perl as a (better) find command

findの場合は、完全にPerlで入れ替えるのではなく、以下のようにPerlでfindを補強するテクニックが紹介されています。
find . -type f -print | perl -wnla -e '-T and /RE/ and print;'

この本は手元に置いておきたい
上記のように、この本には豊富なテクニックが例とともに示されていて、手元に置いておきたい本です。図書館で借りた本だったので、とりあえず、可能な限りGoogle Docにメモっておきました。(今は貧乏学生なので。。。)

2009年8月17日月曜日

CNN News Update Podcast

自宅から大学の研究室まで、バス+徒歩で往復1時間弱あります。夏休みに入るまでは、同じGMUの学生とバスで出くわすことが多く、ちょっとした英会話の練習になっていました。ところが、夏休みに入ってからめっきり学生と出くわすことが少なくなり、このちょっとした1時間を有効活用したいと思い始めました。そこで、英語リスニング力強化の一環として、この夏休みからCNNの無料ポッドキャスト"CNN News Update"を聞いています。

同じニュースを異なる表現で
このポッドキャストは1本だいたい約4分で、1時間おきに更新されます。そこで、私は10本程度をiPodに入れて聞いています。1時間おきに更新ということで、同じようなニュースが何度か重複して報道されます。しかし、回によってニュースキャスターが変わったり、ちょっと内容が更新されたりして、同じニュースでも異なる英語表現で伝えられます。一度そのニュースを聞いて、後ほど再度同じ内容のニュースが読まれると、心の準備ができて余裕を持って聞くことができるとともに、異なる表現も知ることができてとても良いと思っています。

世間話にGood
CNNのポッドキャストなので、主な内容は米国でのニュースがほとんど。米国滞在中の私にとっては、オバマ大統領による健康保険大改造に関するニュースなど、身近な話題も多いので興味深く聞くことができています。また、大学での仲間との世間話にも役に立っていて、リスニング力強化とともに一石二鳥です。

難しい
とはいえ、私にとってはかなりレベルが高いです。スピードもさることながら、頻繁に固有名詞(人名、地名)や数字(人口、金額)が出てくるので、詳細を理解するのがとても難しいです。あまり、がっくりすることなく気楽に聞くように心がけています。そうでないと長続きしないので。。。

2009年8月12日水曜日

渡米してから1年経過

本当に早いもので、昨年8月11日に日本を経ってから今日でちょうど1年が経過しました。昨年末に約一ヶ月間、一時帰国していたので、海外滞在暦約11ヶ月ということになります。

この1年を振り返ると、いろいろな事がありすぎてとても書ききれないので、1年前の自分と今の自分との比較に試みたいと思います。

違和感がなくなっている
まず気がついたのは、自分がアメリカで生活していることにすっかり違和感を感じなくなっていることです。去年必死の思いで見つけたアパートに家族と住んでいる自分、キャンパスを歩いている自分、町中で車を運転している自分、外国人と英語に囲まれながら研究・勉強をしている自分、、、。昨年、渡米したての頃を思い出すと、言語をはじめ生活の全てががらりと変わり、とても違和感を感じていたのですが、(良い意味で)だいぶ慣れてきたんだろうと思います。

英語(外国人)に対して度胸がついた
渡米当初、何かと手続きをすることが多く、いろいろな建物に行っては事務の人と話す必要がありました。最初に一声かけるときや、何か物を尋ねるにも、最初は何て言おうかか少し考えて気合を入れてから話しかけていたのを覚えています。Gomaa先生とのミーティングや、SASSYプロジェクトの週一回のミーティングでは、とても緊張していました。今は、そこまで緊張したり気合を入れたりすることなく、それなりに自然に振舞えるようになったような気がします。もちろん、英語力はまだまだでもっと訓練が必要なのですが、少なくとも、上記のような対人場面に対して度胸がついたような気がします。

英語力はまだまだ
まだまだ英語力不足を強く感じます。大学キャンパス内でもいまだに聞き取れないことがしばしば。講義では先生はある程度のスピードで話してくれるので問題ないのですが、研究ミーティングや雑談においてリスニング力不足を強く感じます。より強く英語力不足を感じるのが日常生活で、電話でアパートのメンテナンスについて話したり、病院で子供のことについて話したりする際には四苦八苦しています。
ただ、渡米当初に比べると、よく使う単語が浮かぶスピードが格段に上がった気がします。この「よく使う単語」をこれからどんどん増やせばよいのでしょうか。

良い成果を出さねば、というプレッシャーから開放された
渡米前、「アメリカは厳しい国で成果を出さないとすぐに首になる」という先入観があり、Gomaa先生のリサーチアシスタントを始めた当初、かなりのプレッシャーを(勝手に)感じていました。実際、最初の2008年Fallセメスターはあまり良い成果を出せずにいました。幸い、年が明けて2009年Springセメスターに入ってしばらく頑張っているうちにぼちぼち良い成果が出始めました。また、それと同時に、自分が思っていたよりも、(少なくともGMUでは)リサーチアシスタントというポジションにおいて厳しく成果を問う感じはそれほどなく、むしろ日本と同じように人情的な雰囲気があることがわかってきました。このダブル効果のおかげで、今は当初のような狂ったようなプレッシャーからは開放され、肩の力を抜いて頑張れるようになりました。

就職できるのかという危機感倍増
一方、このひどい不景気のせいで、希望に満ちた渡米当初に比べると、卒業後の就職にかなり危機感を感じています。毎日のように求人情報をネット上で見ていますが、要求されるスキルや経験の多さに圧倒され呆然としてしまいます。また、今の英語力で面接をクリアできるのか、という不安も感じてしまいます。ですが、完璧主義だといつまで経っても応募できないので、自信を持たねばと自分に言い聞かせています。

初心を忘れず
上記のように、今の自分を客観的に眺めてみると、総じて「だいぶ落ち着いた」感じがします。ですが、相当の覚悟で渡米してきた去年の今頃の、あの強い決心は今も忘れずにいます。これからも毎日を大切に研究・勉強・就職活動に頑張りたいと思います。

2009年8月3日月曜日

クールなビジネス道具

Cisco Systems, Inc.に勤めている友人からいただきました。レーザポインタとボールペンです。とてもかっこいいです。聞くところによると、Ciscoグッズはデザインがかっこいいので、日本でちょっとプレミアがつくとかつかないとか。

ちなみに、この友人が会社で無料で手に入れたのを譲ってくれたと思ったら、社内にあるショップでわざわざ私のために購入してくれたそうです。なお、そのショップのことを知っている人は社内外を問わず、ほとんどいないそうです。。。

レーザポインタは、プロジェクタを使ったプレゼン中の際や、プレゼンを聴講中の際であっても、質問をする際に離れた場所から指し示すことができるので、とても便利ですね。

2009年7月30日木曜日

アメリカで初めて歯医者に行きました

先日、渡米してきて初めて歯医者に行きました。といっても家族の誰かが虫歯で痛くて行ったわけではなく、いわゆる定期健診・クリーニングです。デンタルの保険を購入していると一般に、6ヶ月に一回の定期健診は100%カバーされるそうです。念のため、前日に保険会社に電話し、私が購入したデンタルの保険も、そのような定期検診は100%カバーされることを確認しました。

日本人の友人に紹介された歯医者さんを予約。ひとまず子供たちだけ定期健診・クリーニングしていただきました。X線撮影もやりました。X線撮影は1年に一度であれば保険で100%カバーされるそうです。

その歯医者さんは自宅から車で3分のところにあり、とても近くて便利です。先生はアメリカ生まれの韓国の方のようで、若くてハンサムな上にとてもやさしく子供たちを扱っていただきました。子供たちも日本人と同じ顔立ちだったからか安心していました。

診察では虫歯が見つからずほっとしたのですが、X線撮影の結果、とても小さいながら虫歯が発見されてしまいました。乳歯なので放っておいても良いかと思いきや、あと4,5年は抜けない歯なので治療したほうが良いとのこと。さっそく次の週に予約を入れることに。

その予約の当日、同じ先生に虫歯の治療をしていただきました。米国での歯の治療はとても高額だと聞いていたのでハラハラドキドキでした。結局、とても小さな虫歯の治療で165ドル!Copayとして55ドルをその場で支払いました。あとは保険会社と歯医者さんとの交渉で最終的に残りいくら払うか決まります。

次の日から、より気合を入れて子供たちの歯磨きに励んでいます。

2009年7月27日月曜日

Reflective Ecore Model Diagram Editor 0.2.1をリリースしました

Reflective Ecore Model Diagram Editor0.2.1を今日リリースしました。

リリース0.2.1のダウンロード

このリリースでは大きく以下の2点の機能追加・バグフィックスが含まれています。
  1. 「Initialize xmi_diagram diagram file」アクションの実装(修正)
  2. メタモデルにクラス継承が含まれている場合に発生するバグの修正
1. 「Initialize xmi_diagram diagram file」アクションの実装(修正)
GMFで自動生成されるダイアグラムエディタには、「Initialize xxx_diagram diagram file」アクションが実装されています。このアクションは、EMFがデフォルトで生成するツリーエディタで編集可能なインスタンスモデル.xxxファイルからダイアグラムファイル.xxx_diagramを生成する機能です。
Reflective Ecore Model Diagram Editorではリリース0.2.0まで、.xmiまたは.xmlファイルから.xmi_diagramまたは.xml_diagramファイルを生成する上記アクションを実装できていませんでした。今回のリリース0.2.1では以下のように実装できています。
  • .xmiファイルを右クリックし、「Initialize xmi_diagram diagram file」メニューを選択することで、選択された.xmiファイルから.xmi_diagramファイルを生成
  • .xmlファイルを右クリックし、「Initialize xml_diagram diagram file」メニューを選択することで、選択された.xmlファイルから.xml_diagramファイルを生成
なお、上記.xmiまたは.xmlファイルにおいて、schemaLocation属性にメタモデルファイル.ecoreまたは.xsdファイルのロケーションが指定されていない場合、対応するダイアグラムファイルは生成できません。エラーが表示されます。ただし、.xmlファイルについては、エラーダイアグラムは表示されず、空のダイアグラムファイルが生成されてしまいます。そのダイアグラムファイルを開こうとするとエディタ領域にエラーが表示されます。

2. メタモデルにクラス継承が含まれている場合に発生するバグの修正
情けないことに、以下に示すバグがリリース0.2.0まで含まれていました。今回のリリース0.2.1で修正されています。

例として以下のようなメタモデルを考えます。Diagramクラスは複数のFigureクラスのインスタンスをコンポジションとして保持します。Figureクラスは抽象クラスなので、実際にはRectangleクラスおよびTriangleクラスのインスタンスをDiagramクラスは保持できます。
ところが、リリース0.2.0までは、上記Diagramクラスのインスタンスに対し、RectangleクラスおよびTriangleクラスのインスタンスをコンポジションとして接続することができませんでした。なぜなら、コンポジション参照であるfiguresのタイプがFigureなので、接続されようとしているインスタンスのタイプがFigureかどうかチェックして、そうでなければ接続を許さない実装になってしまっていたからです。
リリース0.2.1では、上記実装を修正し、接続されようとしているインスタンスのタイプがFigureかその子孫であるかどうかチェックして、そうでなければ接続を許さない実装に修正しました。これにより、RectangleクラスおよびTriangleクラスのインスタンスをコンポジションとしてDiagramクラスのインスタンスに接続できます。

上記のように、クラス継承に関して上記の他にいくつかのバグがあったので、全て修正しました。さまざまなインスタンスモデルの編集時において、クラス継承を正しく認識してポップアップの表示をはじめ適切な編集を提供します。

2009年7月21日火曜日

GMUの留学生センタに日本人スタッフが採用されました

これからGeorge Mason University(GMU)に留学または共同研究に来る日本人の方々に朗報です。GMUにおける留学生向けに様々なサービスを提供するOIPS(Office of International Programs & Services)に、この夏から日本人スタッフが採用されました。Odagawa Satokoさんです。Satokoさんは、今年の5月にGMUのマスターコースを卒業され、数百人の応募者の中から選ばれました。私が昨年の夏に初めて渡米した際は、OIPSのインターンシップをされていて留学生オリエンテーションで初めてお会いし、それ以来、生活立ち上げを助けていただいたり、米国に関する些細なことについて質問に答えていただいたりして、とてもお世話になっています。もう米国に移られてから10年目だそうで、もちろん英語が堪能でいらっしゃいます。

Satokoさん自身も10年前は渡米したばかりの留学生として、生活立ち上げ等の大変さを経験されており、そのような留学生を助けたいという強い想いをお持ちです。実際、彼女の修士論文のテーマは留学生のカルチャーショックに関するもので、私も微力ながらアンケートやインタビューで協力させていただきました。

そんなSatokoさんなので、OIPSでの仕事はまさに天職ではないでしょうか。Satokoさんは100%信頼できる方です。これからGMUに留学/訪問される方は、まずSatokoさんを訪れることをお勧めします。きっと力になってくれるはずです。

2009年7月15日水曜日

リリース時に大失敗

2日前、Reflective Ecore Model Diagram Editorの0.2.0をリリースしましたが、このとき大失敗をしてしまいました。

Webサーバ上のHTMLファイルを誤って削除
どんな大失敗かというと、Reflective Ecore Model Diagram EditorのWebページを、手元にバックアップを取っていない状況で全て誤って削除してしまったんです。実は、SourceForgeが運用しているWebサーバ上のファイルをEclipseから手軽に管理したいと思い、Target Management Projectに含まれるRemote System Explorer(RSE)をインストールしました。RSEを使うと、SSHを介して遠隔サーバに接続しファイルの閲覧・ダウンロード・アップロードをすることができます。しかし、ローカルコピーとの同期を行う機能はなかったらしく、その機能を探す試行錯誤の中で誤ってWebサーバ上のファイルを削除してしまったのです。ひとまず、ファイルをダウンロードしローカルにバックアップしておくべきでした。

SourceForgeでは個別のファイル復元はやってもらえません
多数のオープンソースプロジェクトをホスティングしているSourceForge。電子メールだけでなく、チャットでも各種サポートを受け付けています。そこで早速チャットでファイル復元のお願いを試みたのですが、SourceForgeではシステム全体のバックアップは行っているが、システムクラッシュ等からシステム全体の復元はやっているが個別のファイルの復元はできないので各自バックアップは定期的にやってほしい、と回答を受けました。残念。

チャットで問いかけてから返事が来るのに数分しかかかりませんでした。SourceForgeスタッフによるサポートは素晴らしかったと思います。

ちょっと古いファイルから復元
幸い、Google Doc上にドラフト版を残していたので、そこから復元しました。削除前のものとは若干内容が異なるかもしれません。

2009年7月13日月曜日

Reflective Ecore Model Diagram Editor 0.2.0をリリースしました

Reflective Ecore Model Diagram Editor0.1.2をリリースしてから約2年越しに、ようやく次バージョン0.2.0をリリースしました。このリリースに合わせ、ホームページ上の情報も更新しました。

リリース0.2.0のダウンロード

このエントリでご紹介したように、このリリースにおける最大の変更点は.ecoreサポートの追加です。リリース0.1.2までは、.xsd(XMLスキーマ)のみサポートしており、そのインスタンスであるXML文書のみを作成・編集可能でした。このリリースによって、任意のEMFモデルのインスタンスをダイナミックに作成・編集可能となります。以下のスクリーンショットは、EMFのヘルプドキュメントでも使用されているLibraryモデルのインスタンスを編集中の画面です。
.ecoreファイルエディタのコンテキストメニューからインスタンスを作成
従来どおり、新規作成ウィザードからインスタンスモデルを作成するだけでなく、EMFデフォルトの.ecoreファイルツリーエディタ上のコンテキストメニューからもインスタンスモデルを作成できるようになりました。

以下のように、ダイアグラムのルートオブジェクトにしたいEClassオブジェクト上で右クリックし、”Create Dynamic Instance Diagram...”メニューを選択します。ウィザードが起動されるので、.xmi_diagramおよび.xmiファイルのファイル名をそれぞれ入力すると、グラフィカルエディタが表示されます。

2009年7月12日日曜日

Obon Summer Festival

なんと米国でもお盆祭りがありました。自宅から車で30分弱のところに恵光寺というお寺があり、そこで毎年盆祭りをやっているそうです。日本人集結
行ってみると、案の定日本人がたくさん参加していて、とてもうれしく感じました。この日だけは、子供が通うワシントン日本語学校よりもたくさん集まったのではないでしょうか。浴衣を着ている人もたくさん見かけました。

夜店
普通、盆祭りというと夜なので、その祭りのときに並ぶお店は「夜店」ですよね。ところが、このバージニア州では夜の9時前ぐらいまで明るいので、夜店にもかかわらず青空の下でした。ヨーヨー釣りや輪投げなど、子供たちが喜びそうなお店が出ていました。やはり残念ながら金魚すくいはありませんでした。
食べ物は、そうめんやカキ氷、和菓子も販売されていて、大盛況でした。
盆踊り
夜7時からはいよいよ盆踊りが始まりました。国籍関係なく、たくさんの人が参加して踊っていました。1曲ずつ、英語で踊り方の説明が入ります。ちょっと変な感じ。
後半は、太鼓の演奏も行われていました。

2009年7月8日水曜日

Reflective Ecore Model Diagram Editorの.ecoreサポートを実装

夏休みに入ってから開発を再開したReflective Ecore Model Diagram Editor (Dynamic GMF)。今日、ようやく.ecoreファイルへ対応することができました。

Ecoreファイル用新規作成ウィザード作成
このエントリに書いたように、従来の新規作成ウィザードを改造したことにより、XSDファイル以外のファイル形式に対応したウィザードを拡張ポイントを介して追加できるようになりました。そこでまず、Ecoreファイルをメタモデルとして指定可能な新規作成ウィザードを作成し、上記拡張ポイントに登録しました。以下のスクリーンショットは、新規作成ウィザードの1ページ目でウィザード選択ページです。XSDファイル形式だけでなくEcoreファイル形式も選択肢として表示されています。ユーザの選択に応じて、上記拡張ポイントに登録されたウィザードが次のページから表示されます。親クラスの指定が必要
GMFベースのグラフィカルエディタでは、ダイアグラムを描くキャンバスがモデルツリーの根オブジェクトに相当します。言い方を変えると、同エディタはモデルツリーの根オブジェクトを知る必要があります。上記新規作成ウィザードでは、指定されたXSDまたはEcoreファイルをメタモデルとして読み込み、根オブジェクトのクラスを特定した後、根オブジェクトを新規作成しダイアグラムエディタを起動します。

XMLスキーマの場合、同スキーマにvalidなXMLインスタンスは必ず一つだけルートエレメントが存在するようにスキーマが定義されているはずなので、エディタはスキーマを解析することで根オブジェクトのクラスを特定することができます。一方、Ecoreモデルの場合、メタモデルを解析しただけでは根オブジェクトのクラスを特定することができません。そこで、以下のようなルートクラス指定用ウィザードページを最後のページに用意しました。このアプローチは、EMFで自動生成できるツリーエディタの新規作成ウィザードとまったく同じです。その他実装を修正
あとはEMFが提供するモデルインポータを使って、.ecoreファイルをEcoreモデルに変換し、既存のグラフィカルエディタ実装に渡すだけです。XSDファイルであっても.ecoreファイルであってもEcoreモデルに変換した後は、直列化以外はまったく処理が同じです。

従来、変換されたEcoreモデルに関する情報をエディタ内部で参照する際には、MetaModelManagerという静的クラスを介して、あたかもグローバル変数のようにアクセスするという、ダサい実装になっていました。そこで、 上記MetaModelManagerの機能をEMFのアダプタとして実装しなおしました。これにより、Ecoreモデルに含まれる任意のメタオブジェクト(EClass、EReference等々)から上記アダプタを取得し、上記情報を参照できるようにしました。別の言い方をすると、拡張オブジェクトパターンを使ってサブクラス化することなく上記メタオブジェクトに機能を追加しました。

まだTODOあります
概ね問題なく動いているような気がしますが、少なくとも以下のTODOがあります。
  • 上記MetaModelManagerと同様、EcoreModelElementTypesというグローバル変数さながらの静的クラスがあります。(GMFによって自動生成されるグラフィカルエディタには全てこのようなXXElementTypesクラスが自動生成され利用されています。)ダサい実装を直したいところです。
  • この夏に初めて気がついた(!)のですが、GMFによって自動生成されるグラフィカルエディタには、モデルナビゲータなる機能を実装するコードも自動生成されます。本機能により、Project Explorer(Package Explorerではない)上にダイアグラムファイル(.xml_diagramや.xmi_diagram)が表示された場合、同ファイルに含まれるEMFオブジェクトをツリー上に表示させることができます。現状では、この機能がうまく動作していません。上記EcoreModelElementTypesと深い関連があり、同時に修正したいところです。
  • EMFに同梱されているReflective Ecore Model Editorと同様、.ecoreファイルを編集するエディタのコンテキストメニューから、Dynamic GMFを起動できるようにしたいです。
ひとまず、上記のうち3つ目を実装したら0.2.0としてリリースしつつ、他の二つをこなそうかな、と考えています。

2009年7月7日火曜日

EMF第2版

2008年の12月にようやく出版されたEMF: Eclipse Modeling Framework (2nd Edition)を読みました。大幅に増補・改訂された第2版
この本の第1版に対しては以下の日本語訳が出版されていて、それを読みました。第1版はEMF1.1をベースに執筆されており、日本語訳版ではEMF2.0で拡張されたXMLスキーマインポータ(XMLスキーマからEcoreへのマッピング)とFeature Mapに関する記述が追加されていました。この第1版に比べると、この第2版はEMF 2.2をベースに執筆されており、以下のように大幅に増補・改訂されています。
  • Extended Metadataを用いたEcoreモデルへのアノテーションの活用法(たとえば、XML直列化のカスタマイズ方法)
  • Feature Mapの詳細な説明
  • デフォルトと比べパフォーマンス・メモリ使用量を改善するモデルコード生成オプション
  • Generator Model(.genmodel)の属性の全記述(!)
  • XML直列化のオプションの全記述(!)
  • EStore、Change Model、Validation Framework
  • EMF 2.3および2.4で導入された新機能(Java 5.0サポート(EnumおよびGenerics)等)
また、第1版と同様、Ecore(M2モデル、すなわちMOFの実装)の詳細な説明や、Ecoreから生成される各種ソースコード(モデルコード、Editコード)の生成パターンの詳細な説明、生成コードのカスタマイズの例などが記述されていて、EMF/Eclipseを使う開発者必須の本と言えると思います。私はこの本が出版されていないころ、EMFのソースコードを読んだり、.genmodelの属性をいじっては生成コードを読んでその属性の意味を理解したり、といった地道な作業を通じてEMFの詳細を理解してきました。もっと早くこの本があったらなあ、と思いました。この本を読むことで、良い復習・再確認ができたような気がします。もちろん、知らなかった新機能・側面もたくさんあり、とても参考になりました。特に、EcoreモデルにおいてComposition参照(EContainment)にも関わらずisProxyをtrueにすることで、親オブジェクトと別のリソースに子供オブジェクトを保存できるようになったのは知りませんでした。

EclipseにおけるEMFの重要性
年々、EclipseにおけるEMFの重要性は増しています。以前より、EclipseのさまざまなプロジェクトがEMFをベースに開発されてきています。何かプラグインをインストールしようとしたとき、そのプラグインがEMFに依存していることに気がつくことも多いのではないでしょうか。
昨年からe4プロジェクトという、Eclipse 4.0へ向けた次世代Eclipse(?)の開発が進められています。RAP(Rich Ajax Platform)に触発されてEclipseをWebブラウザ上で利用可能にしよう、とかプラグイン開発をもっと楽にできるようにしよう、などといった革新的な取り組みがなされているようです。その中で、EclipseのUI開発はEMFモデルをベースにしようという取り組みも行われています。

このように、Eclipse開発に関わっていく上で、今後はEMFについて少なくとも基本的な内容は理解する必要性が高くなるのではないでしょうか。この第2版は700ページ以上もあって、基本を理解するのに全部を読む必要はないかもしれませんが、最初のパートI(1章から4章)はEMFの概要を理解するのにとてもよくまとまっていると思います。

2009年7月5日日曜日

4th of July

昨日7月4日は、インディペンデスデイ。共通の友人を介して、あるご家庭のご自宅でホームパーティにご招待いただきました。「水着を忘れないように」と言われていたので、どこかコミュニティのプールにでかけるのかと思っていたら、なんと、裏庭にプライベートプールが!アメリカンドリームの一端を垣間見た気がします。
ちなみに、この日はプールを楽しみながらバーベキュー。上記共通の友人以外はみな初対面でした。同世代の子供たちが6,7人居たので、子供たちはおおはしゃぎでした。毎度感心しますが、子供はたとえ言葉が通じなくてもいっしょに楽しく遊ぶことができます。正反対の状況
このお宅の持ち主の息子さん家族は日本に2001年に引っ越して7年以上住んでいらっしゃっていて、大体毎年インディペンデンスデイ前後に米国に帰ってこられるそうです。この日は、そのご家族とのお話が非常に興味深かったです。というのも、私達とまったく逆の状況で、子供たちは英語を第1外国語としながらも日本の公立学校に通っていて、文化の違いについてお話を聞くことができたからです。中には「はっ」とさせられるような、日本の習慣(良い面悪い面)を指摘されたりもしました。
日本とアメリカ、それぞれ良い面悪い面が当然あると思います。生活習慣や教育方針等について、両方を見て良い面を参考にしていきたいものです。

誕生日サプライズ

先日7月3日、友人宅に夕食を招待されました。夕食後しばらく歓談していたら、私のために誕生日ケーキが!本当にありがとうございました。まったく予想していなかったので、とてもうれしかったです。この夕食には、何人かの友人が招待されていたのですが、その方たちからも誕生日カードやGeorge Mason University特製ステンレスボトルをプレゼントにいただきました。36回目とはいて、本当にうれしかったです。Thank you so much!

2009年7月1日水曜日

36歳になりました

今日7月1日に、36歳になりました。私は日本で生まれたので、時差を考えるとちょっと複雑ですが、今は東海岸の時間に合わせて誕生日を迎えることにしました(?)。以下は、妻が作ってくれたレアチーズケーキ。アメリカンなスプリンクルが飾ってあります。毎年、おいしいケーキを作ってくれてありがとう!
35歳だったこの1年間は、私の人生の中で最も短い1年だったような気がします。本当にあっという間でした。「35歳になりました」と書いたこのはてな日記のエントリ、ついこないだ書いたような感覚です。その理由は、なんといっても昨年8月から渡米してきたことでしょう。毎日を怒涛のように過ごしてきました。この渡米の具体的な準備をしていた34歳の頃も考えると、ここ2,3年はかなり忙しく過ごしてきたと思います。

今日からの36歳の1年はどんな年になるのやら。まさしく勝負の年になりそうです。当面の目標は、来年5月のGMU卒業+就職です。毎日研究+アルファに没頭していますが、正直、就職の心配がいつも頭から離れません。というのも、米国での生活費は本当にばかにならないからです。特に医療費(健康保険)と家賃は半端ではありません。さらにこの不景気が重なり、妻子を養う身としてはかなりプレッシャーを感じてしまいます。

このプレッシャーを跳ね返すにはどうしたらよいか。やはり一生懸命研究・勉強してスキルアップに励むしかないと思っています。頑張ります!

2009年6月30日火曜日

Reflective Ecore Model Diagram Editorの開発再開

去る6月24日私がOcean Cityに行っている間に、Eclipse 3.5 Galileoがリリースされました。遅ればせながら、昨日Eclipse Classic 3.5.0をインストールしました。

Eclipse 3.5 - New and Noteworthy

Reflective Ecore Model Diagram Editor (DynamicGMF)の開発再開
実は、春セメスターが終わって夏休みに入ってから、私が2007年に公開したEclipseプラグイン、Reflective Ecore Model Diagram Editorの開発を再開していました。Eclipse 3.4 Ganymedeをベースに開発をしていたのですが、昨日Galileo上での正常動作を確認しました(EMF、GMFの後方互換性維持に感謝)。

研究の合間に、現在ほそぼそと取り組んでいるのは、Ecoreファイルへの対応です。現状はXSDファイル(XMLスキーマ)のみに対応しています。XMLスキーマファイルを指定すると、そのXMLスキーマをダイナミックにEcoreモデルに変換し、そのインスタンスをグラフィカルに編集可能にしています。Ecoreファイルに対応できれば、ユーザはEcoreファイルを指定しそのインスタンスを編集可能になります。開発の難しさを考えると、Ecoreファイルへの対応の方が簡単で、開発する順番が逆だったかもしれません。

新規ウィザードを改造中
上記のように、2種類(以上)のファイル形式をサポートするためには、ユーザがファイル形式を選択できるように、新規ウィザードを改造する必要があります。そこでまず、拡張ポイントを新規に用意し、新しいファイル形式(および同ファイル形式に特化したウィザード実装)を追加できるようにしました。そして、上記拡張ポイントに登録されたファイル形式を選択できる、以下のようなウィザードページ(より正確には、ウィザード選択ページ)を作成し、新規ウィザードの1ページ目に持ってきました。上記スクリーンショットでは、XSDファイルのみが上記拡張ポイントに登録されている状態です。現在は、上記のように新規ウィザードの改造が完了し、従来のままXSDファイルのみが対応している状態です。次のステップは、Ecoreファイルに特化した新規ウィザードを作成し、上記拡張ポイントに登録します。

2009年6月29日月曜日

国立自然史博物館

Ocean Cityに行った6/23(火)から昨日の6/28(日)まで、自分の中で夏休みと位置づけ、研究・勉強は一休みしていました。この夏休みの最終日の昨日、家族とワシントンDCにある国立自然史博物館に行ってきました。内心、航空宇宙博物館にも行こうかと思っていたのですが、自然史博物館はとても広く見所が多かったので、この博物館だけで一日を過ごしてしまいました。

よく考えたら、家族が渡米してから約5ヶ月半経つというのに、家族とワシントンDCに行くのはこの日が初めてでした。

Smithsonian Folklife Festival
つい先日レッドラインで大きな事故を起こしたワシントンDCの地下鉄でスミソニアン駅に着くと、モール内で偶然Folklife Festivalというイベントをやっていました。いざ国立自然史博物館へ
この日は日曜日だけあってかなり混雑していました。オーシャンホール
1階のオーシャンホールには大きな鯨やカニのはく製があったり、水槽に熱帯魚がいたり、子供たちは大喜びでした。
哺乳類のホール
同じく1階にある哺乳類のホールでは、ライオンやキリン、カバ等のはく製があり、これまた子供たちは大喜びでした。恐竜の化石
同じく1階にある恐竜の化石コーナーでは、迫力満点のTレックスやステゴザウルス、トリケラトプス等の化石や復元模型があり、大人の私は大喜びでしたが子供たちの反応はいまいちでした。そういえば、恐竜のことを教えていなかったせいかもしれません。昆虫園
凄かったのは2階にあった昆虫園。残念ながら写真を撮るのを忘れてしまったのですが、ここは正式名称「Insect Zoo」だけあって、ほかの展示とは異なり生きた昆虫が展示されていました。とても珍しい昆虫がたくさん展示されていて、巨大な蜘蛛や植物の茎にそっくりの昆虫等が居ました。中でも、ミツバチの巣がガラス越しに見えるところがあって、無数のミツバチが忙しそうに行き来している様子も目の前で見ることができました。

上記の他にも、骨格のコーナーや宝石のコーナー等があり、ある程度ゆっくり楽しんでいたら、あっという間に一日費やしてしまいました。事前の評判どおり、自然史博物館は子連れ家族には最適の博物館でした。これだけ楽しめて、入場料無料は学生の私にはとても助かります。ワシントンDCには他にもたくさんの博物館があるので、子供たちが夏休みの間にできるだけ行っておきたいと思います。

2009年6月26日金曜日

Ocean Cityに行ってきました

私のアドバイザのGomaa先生が今週から2週間ほど夏休みに入られるということで、私も今週の火曜日から昨日までの二泊三日で、メリーランド州にあるOcean Cityというリゾート地に行ってきました。私が住むヴァージニア州Fairfaxからは車で4時間弱というところです。

View Larger Map
当初、ヴァージニアビーチに行こうかと考えていたのですが、昨年の秋セメスターにおいて英語のチューターをしていただいたMarilyn先生にOcean Cityについて薦めていただきました。

涼しい。。。
Ocean Cityはリゾート地ということで、ビーチで過ごしたりするつもりだったのですが、良くも悪くも湿度が低くてとても過ごしやすい気候。水に浸かってしまうととても寒い感じで、とても海水浴という感じではありませんでした。まだ6月終わりというせいもあったと思います。ただ、7月に入ると宿泊費が跳ね上がるので、この時期を選んでしまいました。

Francis Scott Key Family Resort今回泊まったのは、Francis Scott Key Family Resortというところで、正確にはモーテルのようです。子供のいる家族向けの宿泊施設で、アウトドア/インドアプール、ミニゴルフ、バーベキュー施設、バスケットコート、ビーチバレーコートなどが敷地内に備えられていて、この敷地内だけで十分1日過ごせてしまいます。なお、このホテルはビーチからは車で5分ほど離れていて、Ocean Cityの中心地Boardwalkへの無料シャトルが15分おきに用意されています。このホテルはtripadvisorというホテルレビューサイトで2009年度家族向け部門(?)全米10位にランキングされたようです。実際、そのレビューどおり、従業員はみな親切で、ビンゴやちょっとしたゲームのイベントも一日中企画されていたり、子供のいる家族にはとても助かるサービスが充実していました。また、シーズン中は軽い朝食(オレンジジュース、牛乳、コーヒー、マフィン、ドーナツ、バナナ)が無料で提供されていました。ただ、この朝食は受付のある建物まで自分で取りに行く必要がありましたが。
肝心の部屋はそれほど素晴らしい感じではありませんでしたが、基本的に寝るだけだったのでまったく問題ありませんでした。

BoardwalkOcean Cityはリゾート地ということで、広大なビーチが延々と続いています。そのビーチに沿うようにBoardwalkという木道があり、道沿いに無数のお店が並んでいて、ど平日(火、水、木曜日)にもかかわらず、たくさんの人でにぎわっていました。また、このBoardwalkの裏側にはリゾートホテルがひしめき合っていて、オーシャンビューの部屋がたくさん見えました。

名物フレンチフライ
そのBroadwalkで買って食べたのが、この名物フレンチフライ。この大きさはミディアムで7ドル。もっと大きなラージもありました。結構おいしかったですが、一人で全部食べたら胃がもたれそう。。。Funnel Cake
これを食べながら歩いている人もたくさん見かけたので、試しに食べてみました。これは、ドーナツみたいなもので、とても脂っこかったです。上記フレンチフライとダブルパンチで胃がもたれそうでした。
Crab Cake
リゾート地ということで、シーフードレストランがたくさんあります。1日目は、上記フレンチフライとFunnel Cakeだけで夕食が終了してしまったので、2日目はWaterman'sというシーフードレストランに行きました。
ここで頼んだのは、Waterman's Original Crab Cake PlatterとShrimp & Steak Combo。どちらも大体20ドル弱でした。Crab Cakeはカニのハンバーグみたいなもので、とてもおいしかったです。Jolly Rogersのミニゴルフ
意外に楽しかったのが、ミニゴルフ。別名パターゴルフでしょうか。上記のようにとても過ごしやすい気候だったので、海水浴はとてもできませんでした。そこで、インドアプールや遊園地で過ごしたのですが、意外にも家族はミニゴルフが気に入り、合計3回もプレーをしてしまいました。その中で、Ocean Cityで最も大きな遊園地JollyRogersにあったミニゴルフでは、ジャングルの中でプレーするのですが、そこにあった噴水やら川の水が青色に染めてありびっくり。かなり気持ち悪かったです。

アメリカならではの高速道路
上記のように、自宅からOcean Cityまでは片道4時間弱。ワシントンDCを抜けたとたん、延々と広大な高速道路が続きます。アクセルを踏まなくても一定速度を保ってくれるクルーズコントロールはかなり便利だと思います。途中、ワシントンDCからChesapeake湾を渡るChesapeake Bay Bridgeという巨大な橋を渡りました。本当に大きな橋でした。ワシントンDCから渡る際には2ドル50セントかかるのですが、帰りはお金を取られませんでした。ちょっと不思議。
家族とともに渡米して、初めて旅行に行きました。久しぶりに大きな気分転換ができてとても楽しかったです。ふと気がついたのが、この小旅行は海外旅行のようなそうでないような、ちょっと不思議に感じたことです。だんだん、米国での生活に慣れてきたせいか、自分の周りが外国人だらけ(というか私達が外国人なのですが)でも、それほど違和感を感じなくなってきたのかもしれません。