| Little Joe Washington "The Blues Reality" (2005) | |
|
なんだか全然分からないのですが、やばいです、この人。姿形もかなりやばいですが、サウンドもかなりやばいです。 こんな人、いたんですね。50 年代から活動していたらしいので、かなりのおじいちゃん。しかも、2004 年の FUJI ROCK では車いすだったとか。しかし、ギターはパワフル。さすが、テキサス。テキサス魂でブッチギリです ^ ^;; なんだか全然分からないですね。いいんです、それで。 とりあえず、聞いてみてください。ふっとびます。 お気に入りを選ぶのは切ないのですが、あえてあげるとしたら Lightinin' Hopkins に捧げた Me and Lightnin' かなぁ。何歌っているのか全然分からないのですが ^^;; |
|
2007/09/15
今日の一枚
2007/09/13
今日の Project Based Learning
Project Based Learning (PBL) というのは文科省の先導的ITスペシャリスト育成推進プログラムの一環で、プロジェクトを遂行することで実践的な教育を行なおうというプログラムです。
日本各地で PBL が行なわれているらしいのですが、九州では九州大学と九州工業大学が中心になって行なわれています。
いくつかのプロジェクトがあり、その中の小出先生が中心となっている PBL に櫻庭も協力することになりました。
題材は Project Looking Glass ということで、私以外にもひでやさんや Sun の藤槻さんなどが参加されています。
正式には後期からですが、一足先に 7 月には藤槻さんの LG3D 入門、そして今回講演会が行なわれることになりました。
話をするのはエイタロウソフトの西島さん、wakhok の浅海先生、そして私です。
西島さんはケイタイでの 3D に関して。エイタロウソフトで開発中のものを見せてもらったりしました。いやぁ、すごいですね。ケイタイでもここまでできるようになったんですね。
浅海先生はプロジェクトを開始するに当たり、そのコンセプトをどのようにまとめればいいかということ。エンドユーザにプロダクトを分かってもらうために、製品パッケージを作ってみましょうというものでした。
パッケージといっても Java のパッケージではなく、お店でうっている製品の箱の方です。
エンドユーザはパッケージを見てその製品がおもしろそうかどうかを見定める分けですから、パッケージはとても重要になります。限られた分量、限られたスペースの中で、どのような製品であるのか、どういう特徴があるのか、などを記述しなければなりません。
櫻庭はこういう手法を知らなかったのですが、これはおもしろいですね。
さて、櫻庭は 3D の UI に関する考察を話してきました。アフォーダンスとか、文化的制約とか、メタファとか、そういうキーワードを中心に話を進めたのですが、結論はありません ^ ^;; いまだ、3D の UI にはデザインガイドの定番は存在しないので、それをこれから作り上げていかなければならないのです。
ともっともらしい言い訳ですが、単に櫻庭の貧困な頭ではそれが思いつかなかったというだけというだけのが本音です。
今日のランチ - 九州工業大学学食
今日の一枚
| Joni Mitchell "Song to a Seagul" (1968) | |
|
Joni Mitchell のデビューアルバム。もう、40 年も前なんですね。 CSN&Y や James Taylor を聞いていると、その関連で Joni Mitchell が出てくるのですが、 苦手だったんです、彼女は。それでずっと聞かなかったのです。いや、聞いていないので、食わず嫌いだということは分かっているのですが... 端的にいって、声が好きでないのです。で、自画像の絵もきらい ^^;; そんなこんなで、聞くようになったのは結構最近です。 このアルバムはほとんど弾き語り。しかもピアノはほとんどなくて、ギター中心です。River みたいなピアノの名曲もあるけど、やっぱり Joni Mitchell の真骨頂はギターですよ。 プロデュースは David Crosby です。 サウンドはイギリス的なフォークといえばいいのかなぁ。アルペジオの作品が多いですね。 一番のお気に入りは Night in the City。静かなイントロからの展開がいいですね。ベースがまたカッコイイのです。 ちなみに今年、Joni Mitchell は引退を撤回して新しいアルバムを出してますけど、まだ聴いていないのです。早く買ってこないと ^^;; |
|
2007/09/03
今日のこんなところで国際化
ちょうど今日、公開されましたが、「Java 技術最前線」に Cookie の記事を書きました。内容は読んでいただくとして、そこで HttpCookie クラスのバグについて言及しました。
記事中には、本題とは離れてしまうので、あまり具体的な言及はしなかったのですが、せっかく見つけたのでここに書いておきます。
バグを見つけたのはサーブレットで Cookie を送信しても、クライアントで Cookie を受けとらないという現象が起きたためです。
Cookie を受けとらないのは有効期限 (Max-Age) を設定した時ということまで分かりました。
調べてみると、Max-Age を設定しても、なぜか HttpCookie では MaxAge が 0 になってしまうのです。MaxAge が 0 というのは保存しないということなので、Cookie を受けとってないように見えたのでした。
デバッガで追ってみると、MaxAge の解釈は HttpCookie クラスの parse メソッドで行なわれていることが分かります。
そして、MaxAge の設定はアトリビュートを解釈する CookieAttributeAssignor インタフェースを派生させた無名クラスで行なわれています。
assignors.put("max-age", new CookieAttributeAssignor(){
public void assign(HttpCookie cookie, String attrName, String attrValue) {
try {
long maxage = Long.parseLong(attrValue);
if (cookie.getMaxAge() == MAX_AGE_UNSPECIFIED) cookie.setMaxAge(maxage);
} catch (NumberFormatException ignored) {
throw new IllegalArgumentException("Illegal cookie max-age attribute");
}
}
});
MaxAge は秒数で表され、その値は整数になります。なので、Long.parseLong で文字列を long に setMaxAge メソッドでその値を設定しているわけです。
この記述には特に問題はなさそうです。
じゃあ、なぜ?
もう一度、サーバから送られてくる HTTP のヘッダを見てみたところ、有効期限の設定に Max-Age が使われておらず、Expires が使われているのでした。
ということで、Expires の解釈処理を見てみると...
assignors.put("expires", new CookieAttributeAssignor(){ // Netscape only
public void assign(HttpCookie cookie, String attrName, String attrValue) {
if (cookie.getMaxAge() == MAX_AGE_UNSPECIFIED) {
cookie.setMaxAge(cookie.expiryDate2DeltaSeconds(attrValue));
}
}
});
なにやら、expryDate2DeltaSeconds メソッドが臭います ^^;;
private final static String NETSCAPE_COOKIE_DATE_FORMAT = "EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'";
private long expiryDate2DeltaSeconds(String dateString) {
SimpleDateFormat df = new SimpleDateFormat(NETSCAPE_COOKIE_DATE_FORMAT);
df.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
Date date = df.parse(dateString);
return (date.getTime() - whenCreated) / 1000;
} catch (Exception e) {
return 0;
}
}
なにがおかしいか分かりますか?
こんなところで国際化が関係してくるとは思いもしませんでしたが、SimpleDateFormat のフォーマット記述子がおかしいのです。
曜日を表すフォーマット記述子 EEE は、ロケールが Locale.US の時は Mon など曜日を 3 文字で表します。ところが、Locale.JAPAN の時は 月 というように漢字で表されるのです。また、MMM は Locale.US では Sep と月を 3 文字表示で表しますが、 Locale.JAPAN の時は単に 9 と数字で表されます。
つまり、"EEE, dd-MMM-yyyy HH:mm:ss GMT" で月日を表すと、Locale.US だと
Mon, 03-Sep-2007 05:03:41 GMT
Local.JAPAN だと
月, 03-9-2007 05:03:41 GMT
となるわけです。
さて、サーブレットから送られてくる Expires はどうなっているかというと
Set-Cookie: id=1234; Expires=Mon, 03-Sep-2007 05:03:41 GMT;
のように Locale.US で表したものと同じになっています。
しかし、Locale.JAPAN の場合、曜日は漢字だと想定しているところにアルファベットになっているので、 ParseException を起こしてしまいます。expryDate2DeltaSeconds メソッドの例外処理を見てみると、例外が発生すると MaxAge を 0 にするだけです。
結局、MaxAge が 0 になってしまうため、Cookie を保存できないのでした。
欧米の人から見れば、まさか日時の表し方がロケールによって異なるとは思わないでしょうね。
で、修正の方法ですが、これは簡単。単に SimpleDateFormat でロケールを指定すればいいのです。ようするにデフォルトロケールで処理させるから、前述したようにパースを失敗するのです。だから、強制的にロケールを指定するということですね。
private long expiryDate2DeltaSeconds(String dateString) {
SimpleDateFormat df = new SimpleDateFormat(NETSCAPE_COOKIE_DATE_FORMAT,
Locale.JAPAN);
df.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
Date date = df.parse(dateString);
return (date.getTime() - whenCreated) / 1000;
} catch (Exception e) {
return 0;
}
}
今日の Bug Database
せっかく、バグを見つけたのですから、Bug Database に登録しましたよ。
今まで vote はしたことあったのですが、登録するのは初めて。かなりドキドキです ^^;;
参考にしたのは、こちら。
- Cat Typing Javaバグに投票を!
- Cafe Babe Javaのバグを見つけたんですが…
yk さんはこの後、「バグのレポート方法」について書くと予告されていたのですが... どうなってしまったのでしょう?
それは置いておいて、バグレポートです。
vote したことがあることから分かるように、櫻庭はすでに SDN には登録してあったので、あとは登録するだけです。
Bug Database のページの右側のサイドバーにには下図のように Login があるので、ログインします (このサイドバーの位置はかなり分かりにくいと思うのですが...)。
|
|
そして、同じく右側のサイドバーにある Report a Bug をクリック!
|
|
すると、Before You Start という文言から始まるページが表示されます。ようするに Bug Database はユーザサポートではないよということを書いてあるわけです。まぁ、ざっと読んでみてください。
で、最後のところに、サポートじゃないことを理解しているかどうかのチェックボックスと、「Start a new Report」があります。チェックボックスをチェックしてから、「Start a new Report」をポチっとな (死語)。
|
|
Start A Report からはじめていきます。
Type というのは Bug かリクエスト (RFE) のどちらかを選びます。今回はバグなので Bug を選択。
次の Product/Category というのは Java SE の JDK とか JMX とか Java EE の SDK とか、おおざっぱな分類です。今回は Java SE の JDK を選択。そして、Subcategory でパッケージレベルの分類です。HttpCookie クラスは java.net なので、java.net を選択しました。
Release は Java のバージョン。Java SE 7 から 1.4 まで選択できます。ここでは Java SE 6 を選択。
Operating System はその名の通り、OS を選びます。HttpCookie クラスのバグは Windows でも Linux でも Solaris でも起るので、Operating System を Generic/Other にしたのですが、怒られてしまいました。どうやら、特定の OS を選ばなければいけないようです。ということで、ここでは Windows XP にしました。
ここまで記入して「Continue」をクリック。
|
|
ここからがレポートの本体です。
記入が必須の項目と、オプションのところがあります。はじめの Synopsis は必須で、タイトルのようなものです。Bug Database を検索したときには、まずこの項目が表示されるので、なるべく分かりやすい表現にした方がいいです。
次からの 3 つの項目はオプションです。
Full OS version は OS のバージョンです。UNIX 系であれば uname -a、Windows 系であれば ver で表示される記述をそのままカット&ペーストします。
Additional Configuration Information はネットワークとかサウンドカードとか、USB とかバグに関連のある情報を記述します。
Development Kit or Runtime version は java -version で出力された表記をそのままカット&ペーストします。
次が Synopsis と同様、もっとも重要な Description。もちろん、必須項目です。
ここにバグの情報をずらずらと記述していきます。もちろん、英語です。とはいうものの、バグが発生する部分のコードや、バグを再現するテストコードや、例外のスタックトレースなど、理解を深めるために必要な情報はなるべく多く含めるべきだと思います。
特に私を含めて、英語が苦手な人はコードに説明してもらうというスタンスで ^^;;
その後の Frequency も必須。バグが頻出頻度を選択します。
その後の項目はほとんどオプションです。
Regression は以前のバージョンでは正常動作していたのに、新しいバージョンでうまく動かなくなった場合にチェックします。
Steps to Reproduce はバグを再現させるための手順、Expected Result は正常に動いていれば得られる結果、Actual Result は実際の結果を示します。
Error Message はスタックトレースや HotSpot VM が吐く hs_err_pidXXXXX.log (XXXXX には数字がはいります) などをカット&ペーストします。
Source code for an executable test case は再現させるためのテストコードです。
Workaround はバグを回避できる手法があれば記述します。
Steps to Reproduce から Workaround に書く内容は Description に書いてしまってもいいと思います。
最後の Severity は困っている度合いですね。後は名前などの情報を記入して、「submit」をクリックします。
そうすると、完了ページが表示されます。
|
|
この後、つぎのような確認メールが届きます。この確認メールにはバグの ID が記述されていますが、これがすぐにデータベースに反映されるとはかぎりません。登録にはそれなりの時間がかかるようです。
実際、HttpCookie のバグはまだ閲覧できないようです。
Your Report (Review ID: 1054938) - HttpCookies.parse can't set MaxAge correctly, when locale is Locale.JAPAN.
************************************************
Dear Java Developer,
Thank you for your interest in improving the quality of Java Technology.
Your report has been assigned an internal review ID of 1054938, which is NOT visible on the Sun Developer Network (SDN).
Please be aware that the large volume of reports we receive sometimes prevents us from responding individually to each message.
<<以下、略>>
ここまで Bug Database に登録する手順を示しました。これで少しでも Bug Database に登録するハードルが低くなってくれれば幸いです。
今日のいいのかこんな記事 その後
8/5 のエントリで、ThinkIT の近藤さんの記事を批判したのですが、その後その批判をご覧なったのか連載の最終回で近藤さんが反論らしき記述をされていました。
ただ、論点がちょっとずれているように思いました。
OSGi が Java のモジュラリティを向上することについて、櫻庭はまったく意義を唱えていません。OSGi は OSGi としてやっていくのであれば、全然問題ないと思っています。
櫻庭が論点にしているのは
- Java SE 7 に入るかどうか分からない技術に対して、さも取りいれられることが確定したようなタイトルをつけていること
- JSR 291 が JSR 277、JSR 294 と同じく Java SE 7 に取りいれられるような記述をしていること
の 2 点に限られます。
ようするに OSGi もしくは JSR 291 が問題ではないのです。
たぶん、これは著者だけの問題ではなく、編集側の問題でもあるはずです。というのも、タイトルや内容は編集者と話しあって決めていると思うからです。
編集側としては、なるべくキャッチーなタイトルにして、読者の興味を引くようにするのは当然のはずです。だからといって、誇大広告のようなタイトルになってしまってはいけません。
逆にいえば、編集側がちゃんと内容を理解して、おかしなところがあれば著者にフィードバックすべきなのです。でも、これができる人は少ないんだろうなぁ。
こういうことは私自身にもいえることです。記述の裏をとることをおろそかにしない、そして読者をミスリードさせるような記述をしないということを、私自身、身を引き締めて行なっていきたいと思っています。
今日の一枚
| The Modern Jazz Quartet "Django" (1953) | |
|
Derek Trucks の Oriental Folk Song でビブラホンを聞いたら、無性にビブラホンが聞きたくなって、引っぱり出してきたのがこれ。 高校生の頃から何度聞いたか分からないぐらい聞いているのですが、やっぱりいいですね。高校生の時は叔父にレコードを借りて、テープで聞いていたことを思いだします。 MJQ の音楽は Jazz といっても品行方正、礼儀正しく、とてもジェントル。クラシックといってもいいほど。実際にピアノの John Lewis はクラシックもやっていたわけですから。 それに Milt Jackson のビブラホンの音が柔らかいのですよ。でも、彼のプレイは思いっきりモダンジャズしてますが ^^;; まぁ、それはそれとして Django です。 タイトルナンバの Django はいわずとしれた Django Reinhardt (ジャンゴ ラインハルト) に捧げた曲です。MJQ の代表作ですね。櫻庭も何度聞いたかほんとに分かりません。Milt Jackson のソロや、Percy Heath のベースラインなど本当に印象的な曲です。 この曲は MJQ でも何度もレコーディングされていますが、櫻庭はこのアルバムの Django が一番好きです。きっちりはまっているという感じでしょうか。 Queen's Fancy も櫻庭のお気に入りの 1 曲。出だしのクラシックっぽいフレーズから、バイブの Jazz っぽいフレーズに流れるようにうつっていくのが好きなのです。 Autumn in New York も彼らの代表曲であり、櫻庭も大好きな曲の 1 つ。なんか聞いていると幸せ。 |
|
2007/08/21
今日のクロスコミュニティ
JJUG ではいろいろなコミュニティの交流が図れればいいなぁと考えており、その一環で企画したのがクロスコミュニティセミナです。
複数の技術やプロジェクト、製品など、まとめて紹介しちゃいましょうというセミナです。
第 1 回目のお題は IDE。
Java の IDE といえば、Eclipse が事実上のデファクトスタンダードにあるわけですが、それ以外にもいろいろ IDE があるわけです。今回はそれら IDE の中から Eclipse、NetBeans、Oracle の JDeveloper に登場していただきました。
スピーカは Eclipse が NTT データ先端技術の竹添さん、NetBeans がきしださん、JDeveloper がオラクルの佐藤さんです。なんと、3 人とも名前がなおきさん。3 人のなおきさんによる IDE 対決ということになりました。
でも、対決色はほとんどなかったですね。
3 人とも結構淡々と喋ってましたよ。もっと、「他と比べるとこんなにすごいんだぁ」と主張してもいいかなとも思いましたけど、みなさん大人なので ^^;;
櫻庭の感じたところだと
- プラグインの Eclipse
- オールインワンと GUI ビルダの NetBeans
- データベースの JDeveloper
という感じでしょうか。JDeveloper は Oracle 以外の DB でも、もちろん OK。
今回は Java の IDE だったわけですが、質問で Visual Stdio を比べたらどうかというものもありました。やっぱり、MS の開発ツールはすごいですからね。その分、値段も高いですけど。
|
司会は牧野さん |
Ustream セッティング中 |
竹添さん この写真だけ色味が違うのはストロボを使っているからなのです |
|
|
|
きしださん |
|
|
|
佐藤さん |
|
|
最後は 3 人で質問コーナ |
ちなみに、よういちろうさんのご厚意により、Ustream.tv でストリーム配信をしていただきました。前半と後半に別れています。
セミナの後はいつものように懇親会。稚北のとなりのビルのかこいやへ。
今回のセミナの反省点としては、2 時間という枠のなかで、講演 3 件は多すぎたということ。いろいろな IDE を取りあげたいのですが、そうすると講演時間が少なくなってしまうというジレンマが。やっぱり、講演 2 件がいいところかなぁ。
それはそうと、JJUG では、これからもこのようなセミナを企画していきます。ですので、この人の話がききたいとか、この技術を取りあげてくれといったリクエストがありましたらぜひお願いします。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
今日の一枚
| Kaki King "Legs to Make Us Longer" (2004) | |
|
Kaki King の 2 枚目のアルバム。3 枚とも持っていますけど、このアルバムが一番好きだなぁ なんか、ギターのエロティシズムを感じるのです。なんだかよく分からないけど、艶めかしい。なんででしょう? このアルバムではタッピングを多用していますが、決して Michael Hedges の二番煎じというわけではないのです。初期の Michael Hedges をもっと力強くしたような感じ。でも、女性的に感じられるから不思議。 基本的にはギター 1 本だけですが、最後の My Insect Life だけボーカルが入ってます。この曲の後にもう 1 曲入っているのですが、それが結構お気に入り。単調なリズムを刻むのですが、それがいいのです。 Solipsist や Magazine もお気に入り。特に Magazine の空間を感じさせるところがいいですね。 そして、一番のお気に入りは Playing with Pink Noise。これはやみつきになります。 |
|
2007/08/10
今日のナイトセミナ
6 回のシリーズだった wakhok ナイトセミナ 「試して学ぶ! RIAプラットフォーム」も今日が最終回。沖縄にいったり、体調不良だったりして、結局 3 回しか参加できませんでした。
今日は Silverlight の 2 回目で、特別ゲストとして MS の竹内さんが Silverlight と Expression Stdio の紹介がありました。
それにしても、やっぱり MS はすごいですね。リソースのかけ方が違うもんなぁ。
JavaFX にあんな開発ツールがあれば、どんなに開発が楽になるか...
セミナ終了後はいつものように夜学。
前々回の時の写真も一緒に載せておきます。まずは前々回のもの。前々回は甘太郎にいきました。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
そして、今回。今回はうおや一丁です。
最後の写真は、わさびです。はじめ刺身にわさびがついていなかったのです。で、店員さんに持ってきてもらうようにいったら、山盛りで出てきたのでした ^^;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|