久しぶりの築地
昨日から明日までの3日間は築地で研修。入社したころは築地に勤務していたのだけど、その頃から10年くらいは、大して変わっていなかったように思う。それと比べると、ここ最近の数年で、この町は大きく変わってしまった。近くにマンションでもできて小さな子供のいる家族が増えたんだろうか。とにかくファミレスが増えた。そんな中、無くなっていないだろうかと、ちょっと不安になりながら、何年かぶりに馴染みの小料理屋に。おかみさんは、ちゃんと覚えてくれていた。
穴子丼をたのむ。全く臭みの無い、これが本当の穴子の味だったんだと思い起こさせる味。そういえば昔は築地市場の場内に穴子丼を食べに行ったっけ。
変化の中で、昔からの古いお店が無くなってしまわないよう願うばかりだ。
jigブラウザ
従来から用意されていた画面を90度回転させる機能に加え、メニューなどの表示も横向きに対応させた「横向き表示」を新たに搭載。
あれ? もしかして904SHでも出来るの? と思って設定を探してみたけど見つからず。なんとショートカットのところに隠れていた。ショートカットに割り当てると、90度ごとに回転できた。しかし、ちょっと遅すぎて使えない感じ。そりゃそうか。MIDPではこんな描画はサポートしていないだろうし、全部アプリケーションで描画してるんだろうな。
わーとかやーとか
研修期間も今週で終わり。warは、やっぱり「わー」と読む人の方が多そうだ。しかしearを「やー」とか言われると「わー」と区別がつかないと思った。falseを、ふぁるすってのもやめて欲しいと思った 。
configureを「こふぃぎゃー」というのを初めて聞いたけど、もしかし名古屋人?
なんか、久し振りに研修受けてみて思い出したんだけど「こういう時はこう」みたいな教え方する人っているよね。その結論に至る思考過程を伝える努力をしないっていうか。とりあえず教える側として楽なので、そうしているのか、教える側も裏側の仕組みを知らなくて説明できないだけなんだか不明だけど。あれだと応用が効かない(「なんとかのひとつ覚え」ってやつ)んじゃないかとか思ったりもするんだけど、結局のところ、そういうのを数こなすうちに、裏側も見えてくるってところもあるのかもしれない。アプローチの違い。演繹的に真実を知るのか、帰納的に真実を知るかの違いかな。しかし後者は、そのまま永遠に答が見つからない可能性もあるから、演繹的に学べるものは演繹的にやった方が良いと思うんだよね。
GMail for your domain
GMail for your domainが遅いという噂を聞きつけて、試しにアクセスしてみたら、なんだか飛ぶように速いんですけど。まるでローカルのようだ。システム増強の作業で一時的に遅くなっていたのかな。
似たようなダイアログをいっぱい作る。
NetBeansって知らない間にJDialogを直接GUIエディタで作れるようになっていた。
で、似たようなダイアログをいっぱい作る場合、OKとかCancelボタンのあたりとか、それに付随した挙動とかは共通にしたいわけで、一番簡単なのは共通部分だけ作って、テンプレート保存しておいて、使い回す方法だけど、これって結局のところコピペと同値だから、後で共通部分を変更しようと思ったら、みんな直さないといけなくなる。却下。
Bean Formという、なかなか面白い仕組みがあって、これを使うとGUIコンポーネントも継承できる。ただレイアウトマネージャがね。親クラスでGroupLayout使ってボタンだけ配置、子クラスで残りのコンポーネントを配置ってのがうまくいかない。子側はGUIエディタ上でエディットしている時には親のボタンが見えないから、ボタン部分の領域を残した配置というのができないのだ。
GUIパレットにJComponentなんてのがあれば、親はダミーで、これを貼っておいて、子でそれを具体的な実装クラスで置きかえるってことができそうだけど、そもそもJComponentはabstractだしな。
で、結局JDialogが直接作れなかった時と同じやり方に落ちつく。JPanelを貼っておいて、そこだけ実行時に差し替える。NetBeansはJPanelをGUIエディタで作れるので、子側はJPanelとして作成するわけだ。必要も無いのにJPanelを貼らないといけないのが癪だけど、他には良い方法が無さそうだ。
Agitator
Agitatorって静的なコード解析機能も持っているのか。知らなかった。しかしここにある"Avoid calling 'String.equals(literal)' or String.equalsIgnoreCase(literal)'"っていうのが、どういう意味なのかが気になる...
ThinkPad i1124
もう、使わないというので実家から引き上げてきた。さすがにWin98でネットにつなぐのは怖すぎなので、Windows2000に挑戦。
USB CDブートできないので、HDDはずしてi386の下をコピー。DOSフロッピで上げてからWinntを実行。そこで、このCDがバージョンアップグレード版だった事に気付く。
USB-CD使えないからNTのCD読ませられないし。仕方がないので、まずNTをセットアップしたら、最初の再起動のところでブートメニューが無限ループしてどうにもならない。OEM版でも買えばいいんだろうけどっていうか、もう店頭じゃ売ってないしすぐサポート切れだし。とはいえメモリ64MBじゃ、さすがにXPは重すぎだろうし(まぁ192MBまでは増設できるけど)。
仕方ないのでopen SUSEを入れてみることに。さてどうなることやら。
くりはま花の国
天気が良かったので、くりはま花の国に行ってきた。ポピーが花盛り。

Canon EOS 20D EF135mmF2L 1/2500秒 ISO 100 F2.0
これはネモフィラかな。

Canon EOS 20D EF70-200mmF2.8LIS@200mm 1/1600秒 ISO 100 F4.0

Canon EOS 20D EF70-200mmF2.8LIS@200mm 1/800秒 ISO 100 F4.0

Canon EOS 20D EF70-200mmF2.8LIS@200mm 1/800秒 ISO 100 F4.0

Canon EOS 20D EF70-200mmF2.8LIS@70mm 1/640秒 ISO 100 F4.0

Canon EOS 20D EF135mmF2L 1/3200秒 ISO 100 F2.0

Canon EOS 20D EF135mmF2L 1/2000秒 ISO 100 F2.0

Canon EOS 20D EF135mmF2L 1/3200秒 ISO 100 F2.0

Canon EOS 20D EF135mmF2L 1/3200秒 ISO 100 F2.0

Canon EOS 20D EF70-200mmF2.8LIS@175mm 1/1600秒 ISO 400 F4.0

Canon EOS 20D EF70-200mmF2.8LIS@175mm 1/3200秒 ISO 400 F4.0

Canon EOS 20D EF70-200mmF2.8LIS@180mm 1/400秒 ISO 100 F4.0

Canon EOS 20D EF70-200mmF2.8LIS@200mm 1/400秒 ISO 100 F4.0
しかし、ずいぶんと色んな品種があるものだ。

Canon EOS 20D EF70-200mmF2.8LIS@195mm 1/400秒 ISO 100 F4.0
一面の花畑。

Canon EOS 20D EF70-200mmF2.8LIS@70mm 1/400秒 ISO 100 F4.0

Canon EOS 20D EF70-200mmF2.8LIS@70mm 1/400秒 ISO 100 F4.0
これは駐車場で見かけた、知らない花。

Canon EOS 20D EF70-200mmF2.8LIS@173mm 1/640秒 ISO 100 F4.0
おなじみミニチュアもどき。

Canon EOS 20D TS-E45mm 1/2000秒 ISO 100 F3.2
帰りは三崎港によってマグロを食べてきた。しかし、さすがにこれは挑戦せず…

Canon EOS 20D TS-E45mm 1/1250秒 ISO 100 F4.0
FindBugs-1.0.0-rc1
結構ディテクタが増えているなぁ。CVS見てると正式版までには、もう少し増えそうだし。まいった。とりあえずメッセージファイルの翻訳版を送っておいた。
今回見つけたバグパターンで面白かったのは、これ。
public class Test {
public static void foo(Object ... data) {
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
public static void bar(int ... data) {
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
public static void main(String args[]) {
foo(1, 2, 3);
bar(1, 2, 3);
foo(new int[] {1, 2, 3});
bar(new int[] {1, 2, 3});
}
}
どんな結果になるかはやってみてのお楽しみ。まぁ可変引数の仕組みを考えれば当然なのだけど。
EJB 3.0 QL
JavaEE 5 Tutorialから引用。
---
There are two types of numeric literals: exact and approximate.
An exact numeric literal is a numeric value without a decimal point, such as 65, -
233, and +12. Using the Java integer syntax, exact numeric literals support numbers
in the range of a Java long.
An approximate numeric literal is a numeric value in scientific notation, such as
57., -85.7, and +2.1. Using the syntax of the Java floating-point literal, approximate
numeric literals support numbers in the range of a Java double.
---
BigDecimalは無いのか。それでサンプルでは給料がdoubleというアバンギャルドな実装になっているのか...
低消費電力Athlon x2
次は、デスクトップもCore duoでCerelon 300A以来のIntelかなんて思っていたんだけど、PentiumMの時と同様マザーが高い。メモリが2GBしか乗らないやつなら、そこそこなんだけど、4GB乗るやつだと3万をこえる。
模様眺めをしていたら低消費電力版Athlon 64x2なんてのが出てきた。65Wでも十分だな。マザーが安かったら、またAMDかも。
なんかもうメチャクチャ
組織変更の嵐。引越しで14Fになった。自分の郵便受けも14Fに移動。でも自分の荷物ロッカは元の場所のままで16F。移動の予定も無し。郵便受けは鍵がかからないから、荷物は別の場所に保管してあるというので秘書さんとこに行ったら休みで結局郵便物を受けとれないし。もう何がなんだか。
どうせ客先常駐が多くてオフィスになんて来ないんだから、引越しなんてやめりゃいいんだよ。席はバラバラでよし。必要な時はネットワークと電話会議でいつでも会えるんだし。
しかしまぁ、こんな状態なのに紙もので回覧を回すやつが未だにいるんだよな。1-2か月後、ひどい人なんて半年くらい経ってから見たりするわけで資源の無駄も甚しい。
Eclipseのキーバインド
なんかワークスペースを切り替えたら元に戻ったので、設定はワークスペースに紐付くらしい。で、Preferences->Keysの画面にExportというボタンがあるので「よしよし」とこれでエクスポート。CSVファイルができあがる。

でワークスペースを切り替えた後に「インポート、インポートって、無いんですけど…」
と思ったら、どうやらFile->Export->Preferencesでやるのが正解っぽい。.epfというファイルができて、File->Import->Preferencesで選択的に取り込める。これはなかなか良くできてる。
しかし、Preferences->Keysの方のExportって何に使うんだろ。
EJB QL
TutorialもEJB QLまでは、基本的にHibernateと一緒だし、特にひっかからずに来たのだけれど、
SELECT DISTINCT p FROM Player p, IN(p.teams) t
なんですか、これは。と思ったらIN(p.teams) tの部分は変数tの宣言なのだ。p.teamsはコレクションなので、p.teams tとは書けないのだそうだ。でも、これってtを宣言しているけれど使われていない。だったら無駄かというと、そうではない。
SELECT DISTINCT p FROM Player p
これとは得られる結果が違うのだ。前者の場合、tが得られる結果しか返らない。つまりPlayer => Teamの関連をたどって、それが存在する結果セット、つまりチームに所属しているプレーヤだけが返る(このデータモデルはチームとプレーヤが多対多関連なので、なんだか妙な感じだけど)。こんなのは、Hiberanteには無かった気がする(自分が知らなかっただけかも)。
JavaEE 5
チュートリアルが、もう更新されている。結構細かいところが修正されている感じ。DerbyがJava databaseという呼び方になっていた。NetBeans-5.5もpreviewからbetaになってる。
Eclipseだいぶ慣れてきた
とりあえず気になるのは、プロジェクトを親子関係にしていて、親のエラーで子にもエラーが出ているような状況で、Problemsペインの先頭に子の方のエラーが先に出ることがあることと、Problemをダブルクリックしても該当ファイルの先頭に飛ぶだけで、問題の位置に飛ばないことがあること(もう一度ダブルクリックすれば飛ぶ)。あ、あとProblemを上から1つ1つ開いていくキー操作が無いこと。EmacsのCtrl+X `みたいな(ま、これは他のIDEでも無いのがほとんどだし)。自分が見つけられていないだけなのかもしれない。
気にいったのは、Exceptionクラスを作った時、Throwable(), Throwable(String), Throwable(Throwable), Throwable(String, Throwable)を自動生成とか、serialVersionUID宣言を自動生成とか、いらないimportの削除とかあたりかな、あ、あと単語削除がキャメルノーテーションを認識するのが、何げに好きかも(defaultDataOutputとかでDataの先頭で実行するとdefaultOutputになる)。
あとはやはりプラグインが豊富なので、その辺は強いかな。FindBugs、aspectJ、djUnitあたりは簡単に設定できるし。
ミケランジェリ
石丸に行ったらミケランジェリが安売りされていたので3枚ほど買ってみた。ベートーベンのソナタ4番。なかなか良い。多分4番のなかでは一番好きな演奏。
次はベートベンのコンチェルト1, 3。う〜む、なんだこりゃ。オケ(ウィーンフィル、ジュリーニ)と合わなかったんだろうか。なんか、あらゆるところに疑問符が付く演奏(個人的に)。
そして今は3枚目のドビュッシのプレリュード。まだ最後まで聴いていないけど、これはいい感じ。ミケランジェリのソロ演奏を全て集めてみたくなった。
GMail設定完了
これって、これまで使ってたGMailアカウント内のメールは移行してくれないのね。使い勝手は普通のGMailと全く変わらない感じ。ただ空き容量はピッタシ2GBだった。これならドメインさえ取れば自ドメインでメールサーバ立てられるから、お手軽な感じだ。レジストラ側でDNSサービスやってくれるのが条件だけど。
なんか知らない内に紹介可能人数が100人に増えていた。
GMail for your domain
昔、だめもとで申し込んであったのが、通ったようで返事がきていた。自分のドメインでGMailを使うサービス。ブラウザ上でユーザの作成などの設定をして、MXレコードを書き換えればokのようだ。でも設定中にGMail側が落ちてしまったので、続きはあした…
階層ディレクトリ
英辞郎だと"layered directory"と出てくるけど、あまり聞かないなぁ。"hierarchical directory"じゃないだろうか。と思ったら「階層化」ディレクトリだと"hierarchical directory"になっていた。「階層ディレクトリ」と「階層化ディレクトリ」って違うの?
AAC変換
904SHはSD-Audio以外にAAC形式の音楽も再生できる。SH53の時に揃えたSD-JukeBoxとかもあるのだけど、あれってエンコードが遅いし、ツールもどうも自分には使い易いとは言えず、不安定で良く落ちる。今回はAAC形式を試してみた。
904SHは、どうもスピーカから出る音を聴く限りは妙な効果(サラウンドとか)がかかっているようで、ちょっと心配したのだけど、ヘッドホンで聴く限りは問題なかった。Linux Zaurusと互角の音が出ている。試してみたら、Linux ZaurusもKino playerならばAACが演奏できるので、この機会に全部AACでエンコードし直すことにした。
といっても、リッピングし直す必要はないので大した作業ではない。元ネタは猿形式で圧縮してサーバに放り込んであるので、これをデコードしてwavに直してから、AACに変換するスクリプトを流すだけだ。
コマンドラインから使えそうなツールとして、faac Win32版を使ってみたら、これが結構バリバリと落ちる(どうもffacは被害者だった模様。monkey audio側が爆走していた(3.99で作ったファイルを3.97でデコードすると、爆走してしまうケースがあるようだ)。iTunesEncode.exeというのもあるようだ。これはiTunesをCOMで呼び出して変換する模様。う〜む、faacで失敗するやつは、こちらで変換するか。なんかフォーラムに貼ってあるだけでソースも無いので、怪しさ満点。できればffacの方で済ませたかった。
setOpaque()って即時反映されないのか。
こんなの作って、

背景色を設定しておいて、
jLabel1.setBackground(new java.awt.Color(102, 255, 255));
各ボタンにopaqueを変更するコードを書く。
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
jLabel1.setOpaque(false);
jLabel1.repaint();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
jLabel1.setOpaque(true);
jLabel1.repaint();
}
明示的にrepaint()を呼んでやらないと、反映されないようだ。
今ごろ気づいたけどorg.jdesktop.layout.GroupLayoutっていいね。
覚え書き:Eclipse
JUnit実行時に-ea
Run->Runで指定(なんで、前は見つけられなかったんだろう)。
Emacsバインド
Windows->Preferences->General->Keys->ModifyでSchemeを指定。
Ctrl+HでBackspace
Windows->Preferences->General->Keys->Modifyで、CategoryからText Editingを選び、NameからDelete Previousを選ぶ。Key Sequenceの下のNameでCtrl+Hを押してからAddボタン。
Ctrl+X Ctrl+Sで保存
Windows->Preferences->General->Keys->Modifyで、CategoryからFilを選び、NameからSaveを選ぶ。Key Sequenceの下のNameでCtrl+X Ctrl+Sを押してからAddボタン。
Alt+.でタグジャンプ
Windows->Preferences->General->Keys->Modifyで、CategoryからNavigateを選び、NameからOpen Declarationを選ぶ。Key Sequenceの下のNameでAlt+.を押してからAddボタン
Alt+/でdabbrev-expand
Windows->Preferences->General->Keys->Modifyで、CategoryからEditを選び、NameからWord Completionを選ぶ。Key Sequenceの下のNameでAlt+/を押してからAddボタン
最後の3つはなんでEmacsバインドに入ってないんだ?
ImageObserver.WIDTH
ImageObserverインターフェースってWIDTHとかstatic final定数で抱えているのか。これはやだな。自前コンポーネント作る時に、幅固定だからとWIDTHで定数定義したつもりが、ミスタイプ。でもコンパイルエラーにならず、なぜか幅が1になるという現象ではまった。JComponentがImageObserverを実装しているから、自前コンポーネントには自動的にWIDTHとかHEIGHTとかがとりこまれてしまう。せめてINFO_FLAG_WIDTHとかにしてくれれば…
Google SketchUp
Google SketchUpおもしろい。
チュートリアルだけ試す限りは、すごく簡単でおもしろい。でもいざ、自分で作ってみようとすると難しい。なかなか思った通りに行かない。
試しに薬瓶みたいなのを作ってみた。肩の丸いところをどうやって描くかで、小一時間悩んでしまった。

しかし、こんなツールが当り前になって、プレゼンも3Dバリバリを求められたりしたら、悪夢だ。
ケータイのブラウザ
904SHにはブラウザがついていて、一応フレームにも対応しているので、PC用のサイトでも結構読めるページが多い。しかしまぁ基本はケータイ用ブラウザなので、表示できないページも多い。
Javaで書かれたjigブラウザというのもあり、良くここまで作ったものだと感心するくらい良くできている。これを使うと9割くらいのサイトは閲覧できる。ただ月額料金600円が微妙。
もう1つの手段で、ぐるっぽというのもあり、これはサーバ側でHTMLを簡略化する仕組みのようだ。これが結構使える。試しにこのページに書き込んでみたが、うまくいった。かなり面倒なのでサイトに軟禁された時くらいしか使わないと思うけど。
久しぶりにザウルスにAirH"でアクセスしてみたら、やっぱりケータイに比べると遥かに使い易い。同じVGAでもえらい違いだ。904SHでザウルスいらなくなるかと思ったけど、やっぱり両方必要な感じだ。MIDPなので猫さいふが使えるかと思ったら、公式サーバに乗せないと端末にはダウンロードできないようだ。無料登録できるサーバもあるようだけど、面倒だな。せっかくのサンドボックスなんだからもう少し自由にやらせてくれてもいいもんだと思うが、なんでケータイ周辺は、こう囲いたがるんだろう。










