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卒業+就職です。毎日研究+アルファに没頭していますが、正直、就職の心配がいつも頭から離れません。というのも、米国での生活費は本当にばかにならないからです。特に医療費(健康保険)と家賃は半端ではありません。さらにこの不景気が重なり、妻子を養う身としてはかなりプレッシャーを感じてしまいます。

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