2011/10/13

Dartのラクそうなところ The static checker


Eclipse上でAndroidのプログラムをJavaで書いていくのはとってもラクです。何がラクって、間違いをすぐに指摘してくれるところです。一方、XMLを書いているとそこまでラクではないです。何でだろう?もっとEclipse頑張って!と思いがちですが、根は深くてEclipseなどのIDEで何とかできるようなものではないような気がします。

詳細の説明は手に余りますが、Playframework2.0のテンプレートに採用が決まったScalaの良いところをJavaやRubyと比べている記事を紹介しておきます。

Ruby対Scala - tech.cm55.com
http://tech.cm55.com/wiki/scala/ruby
制限が厳格であればあるほど機械的な解析可能性が高まる。プログラマが「この名前とあの名前が同じものであるか」を悩む必要は無くなり、それらをコンピュータに肩代わりさせることができるのである。

Google Developper Day2011のGoogle Apps Script解答例
ところで、Google Developper Day2011のクイズでJavaScriptを書きました。Googleドキュメントで「20都市の日別の供給電力と最大消費電力」が記述されたJSONのデータを取得して個別のシートに展開する問題です。

function myFunction() {
  var url = "http://gdd-2011-quiz-japan.appspot.com/apps_script/data?param=-1488301623206336159";
  var fetchdata = UrlFetchApp.fetch(url);
  var json = Utilities.jsonParse(fetchdata.getContentText());
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  //都市の数だけシートを追加する
  for(s =json.length - 1; 0 <= s ; s--){
    spreadsheet.insertSheet(json[s].city_name);
    // The code below will move the active sheet to the first position
    SpreadsheetApp.getActiveSpreadsheet().moveActiveSheet(1);

    //追加した名前のシートを取得
    var sheet = spreadsheet.getSheetByName(json[s].city_name);
    for (var i=0; i < json[0].data.length; i++){
      //供給電力(capacity)
      sheet.getRange(i+1,1).setValue(json[s].data[i].capacity);
      //消費電力(usage)
      sheet.getRange(i+1,2).setValue(json[s].data[i].usage);
      //電力の消費割合を0.00%の表示形式で設定
      sheet.getRange(i+1,3).setFormulaR1C1('=(R[0]C[-1])/(R[0]C[-2])').setNumberFormat('0.00%');
    }
  }
}

型のチェックが欲しい
JavaScriptでは変数をintで宣言できません。上の、sheet.getRange(i+1,1)というところ、iが0,1,2,,,ではi+1は1,2,3,,,となりますが、このコードを書いている過程では、01,11,21,,,と文字列の連結として認識されてしまいました。Javaに慣れている方がJavaScriptを書き始めると、きっと遭遇する点ではないかと思います。

このときは、01は1、11は11と認識され、21は元データが20都市だったためループを抜けるように認識されました。for文が2回しか回らなく?となってしまいました。変数宣言が厳格でなくても良いのですが、できれば、ここは間違えの可能性を指摘して欲しいところです。

キャストも面倒
一方、Androidのプログラムをしていると真っ先に覚えるのはボタンのキャストだと思います。
Button button = (Button)FindViewById(R.id.button1);でいうところの(Button)です。いちいちキャストの指示をしなくてもわかりそうなものですが、間違えの可能性を指摘してくれるので私はありがたいと思っています。

Dartはいいとこどり
Dartは型をチェックしてくれますが、キャスト(パース?)しなくても実行してくれるようです。(The static checker)
http://www.dartlang.org/articles/optional-types/#static-checker
For example, consider:
String s1 = '9';
String s2 = '1';
...
int n = s1 + s2;
print(n);
This is clearly a problem. The static checker will issue a warning in this case. Note that the code still runs, setting n to '91' and printing 91.
まさに、私がJavaScriptで引っかかった点が解説されています。


後発だけにシンプルで勉強しやすそう
ActionScript3.0での変数宣言で、var i:int = 0;などと型を後から指定するのを見て「他と揃えてよ!」などという人もいますが、後から言語仕様を拡張したのでしょうがないです。
Javaのジェネリックの入ったサンプルコードを幼馴染のSEに見せたら「<>って何?わからん」とか言っていてビックリしたことがありました。
後に『Java The good parts』を読んで後から追加された機能だと知り納得しました。言語仕様の拡張は便利にはなりますがシンプルさがなくなっていくので、勉強するには面倒です。
その点、Dartはサンプルを見た限りとってもシンプルです。

Virtual machineが気になる
Androidのプログラムをしていると少し不思議なところがあります。WebkitなのかWebClientなのか知りませんが、JavaScriptというかHTML5というか期待するほど対応していないようなのです。まるで、Dart活躍の場所が取ってあるかのようです。
もしかして、DartのVMってDalvik VMとバイナリ互換していたりするのでしょうか?そら恐ろしい感じがしてきました。
GWTの二の舞になるのか大化けするのか楽しみです。個人的には、JavaScriptはそこそこにJavaに注力しておこうと思うニュースでした。

リンク
米Google、ウェブプログラミング構造化言語「Dart」を発表
http://internet.watch.impress.co.jp/docs/news/20111011_482895.html

DART STRUCTURED WEB PROGRAMMING
http://www.dartlang.org/

2011/10/11

ThinkPad並みの指紋認証精度「USBメモリDEFENDER F200+BIO」レビュー


指紋認証USBメモリのモニターになりました。USBメモリは紛失しやすいので何らかの認証をかけておかないとダメです。ダメですが、面倒なので素のままデータを保存している方がほとんどです。

個人情報保護しているつもり
個人情報保護をうたっているECサイトなど「厳重にデータを保存しています」と言いつつ、Excelファイルにパスワードかけただけとか良くあります。(Excelのパスワードはパスワードのチェックロジックをパスできてしまうようなのでデータの保護をする用途では使えません)

データの保護にもいろいろありますが、USBメモリを指紋認証で保護するというのは現実的で、一番ラクでしょう。どんどん安くなっていくUSBメモリをみていると不安になりますが、指紋認証USBメモリで巻き返してほしいと思います。

指紋認証USBメモリDEFENDER F200+BIO
[特徴]
  1. ソフトが仮想CD-ROMに入っているためインストール不要。ドライバ不要。
  2. 指紋認証の読み取り精度がLenovo ThinkPad X201 Tablet「生態認証」の「簡易モードのレベル」と遜色ないレベル
  3. WindowsとMacで使える
[感想]
エンドユーザーが使いやすいように考えられています。いらない機能がついていない点が素晴らしいです。
  1. 特徴1.のラクさは複数台のパソコンを管理していると思い知ります。オブジェクト指向万歳!
  2. 特徴2.のラクさは日常的にかなり重要だと思います。ただ、仮想CD-ROMから起動するのは面倒なので、常駐できるようなオプションがあるといいです。
  3. 特徴3.のMac対応もかなり重要でしょう。勉強会へ行くとMacBookAirが主流です。アルミっぽいデザインもMacを意識していると思います。
指紋認証は、これからまだまだ普及する余地があると思います。私がThinkPadを使っている理由の半分くらいは指紋認証機能です。なかなか認証精度を試す機会はないと思いますが、F200+BIOの認証精度はThinkPadとほぼ同じと感じました。ご参考までに。

関係ないのですが、ThinkPad Tablet に指紋認証ユニットがつかなかったのが不思議でならないです。Androidではまだ難しいのでしょうか。

箱を開けてからデータを保存するまでの動画
ビデオカメラの焦点がボケていてごめんなさい。10分55秒です。
データ保存容量は2GB弱です。ロック状態ですと約9MBのロック領域がマウントされます。

※この記事では指紋認証精度を本人拒否率の意味で使っています。