サーブレットのお勉強日記
よくわかんないけどたぶんHttpServletを継承して作ったクラスを、 どっかにおいて、設定ファイルを書けばいいんだろうなぁ。
= HttpServletがない。 J2EEを入れないといけないのか。
違ったみたい。 Jettyのlibの中にあるservlet-api-....jarにjavax.servletが入っていた。
サンプルのHelloWorldサーブレットのコードを貼り付けたらコンパイル通った。 出力メッセージを少し書き換えて、 できたクラスファイルをサンプルのHelloWorld.classに上書きして、 Jettyを再起動したら… OK、書き換わった。めでたしめでたし。
= XML-RPCを積んだ。コンパイルは通ったが実行時にエラー。 実行時のクラスパスに追加する必要があるんだな。
= STBBS.NET blog: Jettyを使ってWebアプリケーションをスタンドアロン動作可能にする。
なるほど、Jettyは起動が高速だからこういう使い方でも苦にならないわけだな。
= 設定ファイルのどこに「このサーブレットはxmlrpc2.0.jarを使う」と書けばいいのか さんざん調べたあげく、設定ファイルに書かずにlibフォルダに入れればいいだけだと、 Tomcatでサーブレットの説明をしているページで知った…。 時間を無駄にした…。 まぁ、XML-RPCのクエリを受け取るサーブレットは動いた。 Pythonからクエリを投げてきちんと結果が得られたし、 その後でブラウザから別のクエリを投げて、 サーブレット内で保持しておいた値をちゃんと見られることを確認した。
4時。 今日は書類書きのために5時にお台場のラボに行くので、 続きは明日。
= 出かける前にささださんからSkype。 この前の「Rubyの文字列はミュータブルだけど、 配列のキーに入れるときにイミュータブルなものに変換するのかな?」 「Rubyにはタプルに相当するものはあるのかな?」 という疑問に関して。NOだそうな。
Rubyではミュータブルな文字列やアレイがそのままハッシュのキーにできる。 で、文字列やアレイの場合、 ハッシュ値の計算の際にオブジェクトのIDを使うのではなくて、 中身の値を使うらしい。 ちょうど西尾泰和のブログ: immutableクイズの3番目に相当する。
>>> class Foo(list): def __hash__(self): return sum(self)もちろん本当はsumなんかじゃなくてもうちょっとまともなハッシュ関数なんだけど、 「中身の関数」という点では同じね。
だから見かけが同じオブジェクトはIDが違っていても同じと見なされる。
>>> h = {}
>>> a = Foo()
>>> a
[]
>>> b = Foo()
>>> b
[]
>>> h[a] = 1
>>> h[b] = 2
>>> h
{[]: 2}
そして「入れたときに違っていたら、その後破壊しても違うまま」
>>> c = Foo([1])
>>> c
[1]
>>> d = Foo([2])
>>> d
[2]
>>> h[c] = 3
>>> h[d] = 4
>>> h
{[]: 2, [1]: 3, [2]: 4}
>>> c.remove(1)
>>> d.remove(2)
>>> h
{[]: 2, []: 3, []: 4}
もちろん、この3と4は取り出すことのできない値になってしまう。
>>> h[d] 2immutableクイズの時は 「キーを変更されるとこんなことが起こってしまうので、 変更のできないリストを作らなきゃね→それがタプル」 という結論だったのだけどRubyは 「キーを変更されるとこんなことが起こってしまうね →だからしないでね。っていうかメリットないし誰もしないよね」 という方針なのだなぁ。
そしてタプルなんか作らなくてもそれでよかったような気もするなぁ。 Rubyの人たちはイミュータブルなアレイがなくてもちっとも困ってないみたいだし。
あ、でも代わりにRubyの人たちには ミュータブルな文字列と、イミュータブルなシンボルがあるのかw Pythonはもとから文字列がイミュータブルなので Rubyのシンボルに相当するのだ。
= NAISTの松浦君(お台場ラボに松浦さんがいて、サイボウズ本社にも松浦さんがいるのだ、松浦率高い!) からライブドアリーダーのキャプチャ画像をもらいました。
たぶん 秋元@サイボウズラボ・プログラマー・ブログ: サイボウズ・ラボにまたまた新しい仲間が増えた を見てフィードを登録した人がたくさんいたということでしょう。 ありがとうございました。 なるべく有益な情報を頻繁に出すように努力します。
会社ブログと言えば、 最近メモが出てきて思い出したのだけど、僕は 一つ目のエントリーで 「Pで始まる言語はあまり詳しくないのでこれから勉強していきたいと思います」 と書いておいて、 二つめのエントリーで 「Pで始まる言語を勉強してみました!Pietで"Just Another Piet Hacker,"と表示します!」 とやるつもりだったようだ。 すっかり忘れてた。