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等を学びました。先週、デザインパターンを学んだところです。

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

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