JavaのStringの微妙なポジション

[Java]技術って習ったことがすべてではないんだなぁ。
こちらのエントリを読ませて頂いたのをきっかけに。コメント欄に凡そ書いてあるけれど、補足としてはJava5からはオートボクシングなので

public class Test {
public static void main(String[] args) {
Integer a = 1;
Integer b = 1;
Boolean c = true;
Boolean d = true;
System.out.println(a == b);
System.out.println(c == d);
}
}

こういうのもtrueになる。
“”を内部的にプリミティブとして解釈しているかというのはjavap -cで逆アセンブルすると見当がつくと思う。例えば、

public class Test {
public static void main(String[] args) {
char a = 'w';
String b = "w";
}
}

というコードを逆アセンブルすると

Code:
0:   bipush  119
2:   istore_1
3:   ldc     #2; //String w
5:   astore_2
6:   return

という結果になる(環境はJDK 5.0 Update 12)。istoreは数値の格納だけれどもastoreはオブジェクト参照の格納なので、””はちゃんとStringオブジェクトとして認識されている筈。数値や””やtrue/falseはシンタックスに依存していてnewキーワードなしに生成できるから、ものすごく最適化されるのだと思う。
だいぶ以前に、Stringを使った文字列結合とStringBufferを使った文字列結合の比較をやってみたけれど、Stringはかなり最適化されるので””で埋め込まれた定数の場合は+を使って結合しても全く遅くならなかった(当然、String変数を消したり増やしたりする場合はStringBuilderかStringBufferを使うほうが遥かに効率的で、あくまで””の話)。
こういうnew要らずで生成できるオブジェクトがあったり、Stringが+を演算子オーバーライドしていたり、純粋なオブジェクト指向としてはあまり良くないと思ったこともあったけれど、C#とかと戦うには実用面から必要な妥協なのだろうなと今は思っている。

MySQLのファイルインポートでNULLを扱う

もし FIELDS ESCAPED BY 文字が空でなければ、その文字の発生は削除され、後続文字はフィールド値の一部として文字通りに取り込まれます。 例外は、拡張された ‘0’ または ‘N’ です。(例えば、もし拡張文字が ‘\’ なら \0 または \N です。)これらのシーケンスは、ASCII NUL (ゼロの値のバイト) と NULL として解釈されます。

MySQL AB :: MySQL 5.1 リファレンスマニュアル :: 12.2.5 LOAD DATA INFILE 構文

ここに詳しく書いてあるけれど、\Nとすれば良いみたい。知らなかった。
JDBC経由でファイルインポートを行う処理でint型にNULLもしくは空があったときにエラーになるので、どうしたものかと調べていてたら、会社の人に教えてもらった。

仕事の修羅場経験は自慢にはならない

若いからだろうけれども、先輩の武勇伝を飲み屋で聞く機会が多い。いつも何が凄いのだろうかと普通に考えてしまうのだけれども、話を聞く限りはとんでもなく凄いことをやってきたことになっているようだ。しかし、凄いことの内容は説明してくれない。どんなに大変だったのかということを一生懸命語っている。
本人達に言っても「若いから」と言って意見を聞かないだろうから、自戒の念も込めてここに書く。

人のことを書くのも嫌なので、自分のことを例にして書こう。

若造の文系プログラマだけれども、実は商品先物取引の営業をやっていた時期がある。登録外務員としての正社員だ。
電話でアポイントを取って次の日に訪問するのが会社での定例だった。商品先物取引の営業を辞めた後にアルバイトで電話営業をした経験があるから言うのだけれども、商品先物取引の会社での電話アポは本当に辛い。ガチャ切りや社名を言った瞬間に切られるというのは日常茶飯事。そんな中で嫌そうに相槌を打っている相手から訪問のアポを取るのが日常なのだ。
訪問はもっと辛い。居留守は勿論のこと、「電話で断りましたよ」とか言われることも多い。相手に会えるのがやっとのことで、会えても世間話が1・2分とかで終わってしまうことも多い。訪問毎に上司に電話報告する義務があるので、これまた辛い。昨日の電話でアポイントが取れていることになっているのだから、上記のような結果は許されるものではない。罵倒どころではない罵倒をされる。
電話のアポが不出来な場合は飛び込み営業で補うしかない。本人に補う気があるのかどうかは関係がない。「名刺20枚集めてから帰れ!」とかを深夜0時あたりで上司に言われたりするのだ。深夜に開いている店は少ないけれども、コンビニの店長や居酒屋の店長を目指して明かりのある方へと歩く。当然タクシーで帰ってもタクシー代が出るわけではない。
ノルマに達成できていない場合は、土日出勤も当たり前だ。朝の6時から深夜まで毎日働く。仕事が終わって寮に帰ったらご飯を食べてお風呂に入ってそのままベッドに入るけれども、ベッドに入った瞬間に目覚ましが鳴っているような錯覚に陥る。

さて、敢えて書こう。上に書いた話は実話ではあるけれども、決して凄くはないのだと。
凄い話なら「周りの人は苦しんでいたけれど、自分は他人の10倍くらい契約を取っていたから平気だったよ」というようなワンライナーで終わる話なのだ。
しかし、世間の人たちは、「こんな辛い状況下で“あれこれ”こなしていた」とか言う。“あれこれ”こなしたことが凄いならそれを話せば良いのに、なぜか重点は辛い状況のことばかりだ。つまり、“あれこれ”が大したことがないのだ。
仕事においては修羅場を潜ることが凄いことではないのだ。何を成し遂げたのかしかない世界なのだから。だから、修羅場経験を自慢気に語るのは自粛した方が良いと思う。

関連してだけれども、プロ意識という言葉が最近嫌いになった。世間的には「お金をもらって仕事をしているのだから、嫌でも辛くても仕事はしますよ」というような基準のようだ。それは雇われ人としての契約履行でしかないのだけれども、それがプロの定義なのだろうか。
言葉としてはそれで合っているのかもしれないけれども、どうも好きになれない。アマチュアと一線引くのであるならば、プロと言う以上はアマチュアの到達できないところに居て欲しい。それが自分にとってのプロの定義だ。スポーツの世界では大方そのようになっているような気がする。

島田紳助のビジネス経営哲学を読んだ

お金は必要だけれど、そのためだけに人は一生懸命になれない。そして、一生懸命やることが楽しいチームなら必ず成功する。自分本位だったり目の前の勘定しかできない経営者に最適な教訓本だと感じた。

2ちゃんねるはなぜ潰れないのか?を読んだ

2ちゃんねるはなぜ潰れないのか? (扶桑社新書)

2ちゃんねるはなぜ潰れないのか? (扶桑社新書)

Web2.なんちゃらを会社として掲げているようなところの社長が読むべき本だと思った。至極全うでそのままなことがそのままに書かれていて非常に気持ちの良い本。
本書内で一番面白かったのは、ひろゆき氏と小飼弾氏による対談話。この世の在りようを感じ取れる会話のように感じた。

EXTRA – HYPER GAME MUSIC EVENT 2007 に行ってきた

EXTRA – HYPER GAME MUSIC EVENT 2007
楽しかった。けれど、疲れた。6時間スタンディングは普段座って仕事をしている人間にはつらい。
さて、感想を簡単に。全般的に楽しいイベントだったと思う。何より出演者が豪華だ。小柳ゆき出演で凄いとならない出演層だったことがすでに凄いと思う。あとは、個別のステージで印象に残ったことなどを。

スタートバッターとしては適任だったと思う。始まる前のスクリーンのカウントダウンが0になったあとに、momo-iの名前が表示されたときの観客の盛り上がり具合がとてもいい感じだった。もう少し長いステージだったら良かったのにと思った。

普通にフュージョンなテイストが素敵だった。しかし、あのギタースタイルは間違いなくスティーブ・ヴァイの影響が。

  • H.

アフターバーナーでテンション上がったのもあるけれど、普通に演奏も良かったし、何よりパフォーマンスが素敵だった。本当に良いステージだった。

ステージはとても良かったと思う。でも、正直、ロマサガから一曲もないのは、ちょいといただけないなと思った。SQUARE時代のはダメとかあるのかなぁ。

Ysの曲をやってくれてうれしかった。自分は世界樹の迷宮をやっていなかったのでわからなかったけれど、あれもファンサービスとしては良かった筈。それにしても凄い音のギターだったなぁ。メタルゾーンでも使って歪ませているのだろうか。

正直、知らなかった。こんなに偉大なタイトルを作りまくった人だとは。ゲーム音楽好きな癖に超度素人だった。ゲーム楽曲をベースにしたアレンジが活きて、とても満足だった。源平討魔伝あたり最高だ。

選曲が素晴らしかった。ファンの期待のままにやってくれたというか。ビッグブリッジの死闘をやってくれたのは本当にテンションが上がったのだけれど、どうせやるならは超えて欲しかった。あのタッピングでは恐らく原曲通りに弾いていないと思われる。オフィシャルなのだから、そこはなんとか頑張って欲しかった。
最後に少し残念に感じたことなのだけれど、

“EXTRA”は「ゲームミュージック・コンポーザーを招き、ゲームミュージックをみんなで聴いて楽しもう!」がテーマ。

EXTRA – HYPER GAME MUSIC EVENT 2007

と書いてあるのだから、せめて代表作的なものはそれぞれ一曲はやって欲しかった。アレンジがダンスビートになりすぎて原型留めてなかったり、そもそもゲーム音楽やってくれなかったりというのは、ゲーム音楽のイベントとして期待して行ってしまっただけに、残念に感じた。ということで、次回に期待。

svnがlibaprutil-0.so.0を読めない

自宅サーバの電源を不慮に引き抜いてしまって、HD大丈夫だろうかと心配したけれど、問題はなさそう。そのはずみかどうかは判らないけれど、svnserveが起動できなくなってしまった。吐かれるエラーは以下の通り。

svnserve: error while loading shared libraries: libaprutil-0.so.0: cannot open shared object file: No such file or directory

ライブラリが見つかりませんと。どんな状態かなと思ってldd打ったらこんな感じにでた。

ldd /usr/local/bin/svnserve
linux-gate.so.1 =>  (0x00b49000)
libsvn_repos-1.so.0 => /usr/local/lib/libsvn_repos-1.so.0 (0x00f02000)
libsvn_fs-1.so.0 => /usr/local/lib/libsvn_fs-1.so.0 (0x00e85000)
libsvn_fs_fs-1.so.0 => /usr/local/lib/libsvn_fs_fs-1.so.0 (0x00ee9000)
libsvn_fs_base-1.so.0 => /usr/local/lib/libsvn_fs_base-1.so.0 (0x00f25000)
libsvn_delta-1.so.0 => /usr/local/lib/libsvn_delta-1.so.0 (0x00e99000)
libsvn_subr-1.so.0 => /usr/local/lib/libsvn_subr-1.so.0 (0x00f4d000)
libsvn_ra_svn-1.so.0 => /usr/local/lib/libsvn_ra_svn-1.so.0 (0x00ec1000)
libaprutil-0.so.0 => not found
libdb-4.3.so => /lib/libdb-4.3.so (0x02bfa000)
libexpat.so.0 => /lib/libexpat.so.0 (0x00101000)
libapr-0.so.0 => not found
librt.so.1 => /lib/librt.so.1 (0x00de7000)
libm.so.6 => /lib/libm.so.6 (0x00122000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x02a50000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00149000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00b7b000)
libdl.so.2 => /lib/libdl.so.2 (0x00b37000)
libz.so.1 => /usr/lib/libz.so.1 (0x00b66000)
libc.so.6 => /lib/libc.so.6 (0x009f8000)
/lib/ld-linux.so.2 (0x009db000)
libaprutil-0.so.0 => not found
libapr-0.so.0 => not found
libapr-0.so.0 => not found
libaprutil-0.so.0 => not found
libapr-0.so.0 => not found
libaprutil-0.so.0 => not found
libapr-0.so.0 => not found
libaprutil-0.so.0 => not found
libapr-0.so.0 => not found
libaprutil-0.so.0 => not found
libapr-0.so.0 => not found
libaprutil-0.so.0 => not found
libapr-0.so.0 => not found

not foundだ。今までサーバのリブートとか何度もやったことはあるけれど、いきなりリンクがないと言われてもと思いながら、「/sbin/ldconfig -v」とかやってみたけれど、状況は変わらず。
Webで同じようなエラーあるのかねと思って探してみると、同じようなものは見つかった。
svn で libaprutil が見つからない (きっちん)
ただ、残念なことに、ここに書かれていることでは解消しなかったので、とりあえず、自分でリンク貼った。

sudo ln -s /usr/local/apache2/lib/libaprutil-1.so.0.2.8 /usr/local/lib/libaprutil-0.so.0
sudo ln -s /usr/local/apache2/lib/libapr-1.so.0.2.8 /usr/local/lib/libapr-0.so.0

動くようにはなったけれど、普通こういうことはしないような気がするなぁ。どうしたものか。

[追記 1]
動くようになってなかった。実行したら「segmentation fault」といわれる。うーん。

[追記 2]
結局、BerkeleyDBとSubversionをインストールしなおしたら動くようになった。何だったのやら。

メタリカはダウンピッキングで弾こう


Dream Theaterはかなり好きなんだけど、これはいけてないと言わざるを得ない。メタリカ弾くのにオルタネイトピッキングはない。それは本当にない選択肢だ。どこのことを言っているかと言えば上の0:31辺りからだ。

本物はこの速度でちゃんと全てダウンで弾いているじゃないか。ジェイムズ・ヘットフィールドは本当に凄いよ。どういう右手なんだろうか。

おいしいたこ焼きの作り方

先日、自宅に人を呼んでたこ焼きパーティーをした。自分が大阪出身というのもあって、実家でやっていたことをそのまま記憶頼りに作ったら、かなりおいしくできたので、作り方などをメモ。
まずは必要なキット。

  • ガスコンロ
  • たこ焼き用の鉄板
  • サラダ油
  • 計量できるもの
  • 泡だて器
  • キリ(たこ焼きをひっくり返す用の小さいもの)
  • クッキングペーパー(油を染みさせる用)

次に準備する材料(分量は一人前)。

  • 小麦粉(120g)
  • 水(300ml)
  • 卵(1個)
  • ゆでだこの足
  • ネギ
  • 紅しょうが
  • 天かす
  • かつおぶし
  • 醤油
  • 青海苔
  • お好み焼きソース

たこ焼きのだしは、たこ焼き用に販売されているだしを使わないで自前で作る。小麦粉に少しずつ水を足しながらダマを作らないようにして混ぜる。きれいに混ざればよいというような感覚であまり泡立てをしないように注意。小麦粉と水が混ぜれたら、卵を入れてさらに混ぜる。卵を入れる前に卵だけでも混ぜておくこと。
ゆでだこの足は一口サイズに適当に切っておく。ネギと紅しょうがは細かく切っておく。かつおぶしは細かく刻まれたものではなく、ふわふわした薄いものを購入しておくと、焼いているときに楽しい。

準備が出来たら鉄板に火をかけながら全体に油を塗る。クッキングペーパを適当なサイズに切って、箸で油を染みさせて全体に塗ってゆく。鉄板は最初によく焼いておいたほうが良い。また、一回目を作ったときはどうしても引っ付いてしまったりするけれど、その辺は適宜諦める。

油が塗れたら、たこ焼きのだしを入れてゆく。たこ焼きのだしを入れたら、材料を入れるのだけれど、固まる前に全体に混ざって欲しいものから入れる。自分の場合は以下の順番に入れる。

  1. 醤油
  2. ネギ
  3. 紅しょうが
  4. 天かす
  5. ゆでだこの足
  6. かつおぶし

醤油は1、2回垂らす感じ。ネギ、紅しょうが、天かすは中を埋め尽くさないように適当に入れる。ゆでだこの足は基本ひとつに一個。最後にかつおぶしを全体的にまぶす。

材料を迅速に入れたあとに、すぐにたこ焼きを回したくなるのが心情だけれども、ここで少し休憩。たこ焼きは皮が固まらないと回らないので、最初は少し待つ必要がある。穴以外にこぼれた部分の焼き加減などを目安にすると判り易い。良い頃合と感じたら90度ほど回してみる。

90度回したあとはそこまで待たなくても良いので、180度分回してしまう。

あとは、焼けてないところが焼けるようにクルクルと回してあげればよい。下からの熱がたこ焼きの中にたまると膨れ上がって丸くなる。この中に熱々の空気がたまっていると食べたときに非常においしい。写真は中の空気がいっぱいになりすぎて溢れ出している様子。

全体が焼けたらお皿に乗せる。

かなり熱いので舌の焼けどには注意。周りはパリッと焼けていても、中身はやわらかい食感が味わえる。そもそも味付けはそこまで濃くしていないので、お好み焼きソースあたりをつけて食べるとおいしい。お好みで青海苔をかけるとおいしく食べることができる。

たこ焼きを回すのが難しいと感じる人は、鉄板に引っ付いているから回せないのか、皮が固まる前に回しているのから回せないのかを疑うと良いだろう。前者の場合は焼く前に入念に油を塗ることである程度軽減すると思う。後者の場合はビールでも飲んでひと段落すると良い。
元祖とか本家からすれば、いい加減な箇所も多いのだろうけれども、個人的には外で焼いているたこ焼きを買って食べるよりも、数段おいしいと感じる。あと、原価が非常に安い。