まだまだ Java 勉強中でアレなので、digit な String 型変数を int 型変数にするという方法を理解していなかったので、自作してしまった。ちなみに目標としている挙動は、String は 0 から 9の数値のみで構成されていている場合、その数値の数を int型で返す。そうでない場合は 0 で返す。ようは C 言語で言うところの atoi() が欲しかっただけ。
まずは最初に書いていた悪い例:
static int str2int (String str) {
Integer i = Integet.valueOf(str);
return i.intValue();
}
この場合、str が数値以外で構成されていると NumberFormatException が発生するらしい。あと Integer.valueOf(String s) した結果を Integer 型変数 i に代入していたが、お作法的に良いのかどうか不明だが 「Integer.valueOf(str).intValue()」 と書けるらしい。ということで以下のように書き替えた。
static int str2int (String str)
throws NumberFormatException {
try {
return Integer.valueOf(str).intValue();
} catch (NumberFormatException e) {
return 0;
}
}
今日の昼ご飯はエロ中。
やばい、携帯買ってから1週間経っていないのにパケット割の無料通信分を使い果たしてしまったなり。 あとは通話にも使える無料通信分をチビチビ使うか。
今日、職場に19吋ラックマウント型のサーバ機を設置したのだが、ラックがフルサイズで設置しようとしたサーバのマウンタが昔の古い規格の小さい奴でマウンタ使えずショボーン。 それにしてもサーバルーム、冷房がガンガンにききすぎ。
@小田急乗務中。 隣りのオジサンが premini 使っている。いいなぁ。いやでも今更PDC使う気が1ビットもおきないぞ。会社から携帯支給されるらしいがメーカー選べられるのかなぁ。晩ご飯を何にしようか思案中。
本当に放っておけないのは、その売上金の使い道。
ヤフオクで落札。約15万円。あとは任意保険に入って・・・だから20万円ぐらいになるのか。メットは miyaくんにモロタし。
PHPやRailsで提供されているセッションの機能は、セッションでの値の保存として、セッションIDをキーにして、hash table (key:value pair の変数) をサーバ内のファイルシステムに保存するという具合になっている。 この条件で、ある問題に遭遇した。
多くのHTTPリクエストに応えられるように複数台のWebサーバを導入してクラスタを組む場合、サーバ内のディスクにセッションでの値が保存されるため、クラスタ内の別のノード(サーバ)で書かれた値を取得することができない。 セッションを書く場所を NFS で共有するようにしたとしても、セッションの保存場所が一か所になり、一台のマシンに読み書きの処理が集中するかたちとなってしまうため、スケーラビリティに限界があったり、一台のマシンが故障すると全体に波及するというアベイラビリティの問題になる。 同様にセッション保存場所にMySQLを置いても同様だ。 分散DBが使えるってことならば、それでもよいのだが、今回はそっち方面で攻めない。 できればサーバ内のファイルシステムにセッション情報を書き込むのをやめる方法をとりたい。
Webアプリでのセッションってそもそも何者か、って考えたところ、「途切れとぎれ (stateless) にリクエストを送ってるHTTPにおいて、前の HTTP リクエスト・レスポンスで使われたプログラム中の変数を永続化 (persistent) すること」なんじゃないかって思ったのです。 なんだ、永続化か、ってことで。
プログラム中の変数の永続化ならば、Dumperを使えばいいんじゃない。 ってことで、Perl ならば Data::Dumper 、PHPなら var_dump、Ruby ならば Marshal なんかが使えそうです。 これらだと、各々のプログラム言語に依存しているので、JSONやXMLを使ってプログラム言語非依存にしてもいいかもしれないですね。
あとセッションの保存としての要件には、クライアントにも第三者にも見られたくない内容があったり、改変されたり偽造されたりしては困る場合もあるだろう。 そんなことで、上述の dump されたデータをIDEAやAESなどの共通鍵暗号して base64 なんかしちゃえばいいのかも。 途中でデータ圧縮で lzo なんか使ったりしてもいいし、 base64 ってそのままだと URL encode しなければならないので、base64 の map を変更してみてもいいかもしれないし。
あとはこれらの値をどこに保存するか。 HTTPとして真っ先に思いつくのが Cookie。 または POST などするフォーム中にセッションの値を入れてもいいかもね。 携帯だとCookie使えないとかページ容量の制約などがあるので、この方法だとダメっぽそうですが。
ってことで、こんなことをやるライブラリを作ってみようかどうしようか考え中。 どの言語のものを先に作るかとか考え中。 ってことでリクエストありましたら、つっこみどうぞ。
横浜の横を通過中
【GPS情報】
http://walk.eznavi.jp/map/?datum=0&unit=0&lat=%2b35.24.24.73&lon=%2b139.43.06.89&fm=0
・ tsuyoshi [朝 DJEBEL を見たが、あれって車高たかくねぇ?]
・ knaka [車高くらい、運用で何とかするですよ。]
・ まさる [今回のは200ccのほうなのでシート高81cmで、ヤマハのセローと同じぐらいっす。 250ccだと89cmぐらいある..]