Tomcatハック日記
>>> import org >>> org.apache.catalina.startup.Bootstrap <jclass org.apache.catalina.startup.Bootstrap at 20696008> >>> B = _ >>> B.main(["start"]) (略) 2007/03/12 12:51:13 org.apache.coyote.http11.Http11Protocol init 情報: Coyote HTTP/1.1を http-8080 で初期化します (略) 2007/03/12 12:51:16 org.apache.catalina.startup.Catalina start 情報: Server startup in 3031 ms無事JythonからTomcatが起動した。 でもブロックされてしまう。
>>> import thread >>> import org.apache.catalina.startup.Bootstrap as B >>> thread.start_new_thread(B.main, (["start"],)) (略)あ、respectJavaAccessibility=falseにするのを忘れてた。
>>> B.daemon org.apache.catalina.startup.Bootstrap@1d1e765 >>> B.catalinaDaemon <reflected field private java.lang.Object org.apache.catalina.startup.Bootstrap. catalinaDaemon at 11703650> >>> B.daemon.stop() 2007/03/12 13:19:38 org.apache.coyote.http11.Http11Protocol pause 情報: Coyote HTTP/1.1を http-8080 で一時停止します (略) 2007/03/12 13:19:39 org.apache.coyote.http11.Http11Protocol destroy 情報: Coyote HTTP/1.1を http-8080 で停止しますうーむ。一応JythonからTomcatを起動して、 そのデーモンのフィールドにアクセスすることはできたけど、 ここからどうやって「おお、それはすごい」というデモにつなげればいいかがよくわからないなぁ。
= 伝言ゲーム。 スラッシュドット ジャパン | 神経は電気ではなく音を使う?。
いやはや。 どこからつっこんでいいかすらわからない。
On soliton propagation in biomembranes and nerves -- Heimburg and Jackson 102 (28): 9790 -- Proceedings of the National Academy of Sciences。 これが概要か。 どこをどう読んだら「神経は電気ではなく音を使う」という話が出てくるのかさっぱりわからない。 たくさん出てきているmeltという単語を全部まとめて無視しているのか?
そんなことより「melting transitions」が専門用語かどうか確かめようとしてググったら、 渡辺さんとこにヒットしたw
簡単に説明しようかと思ったけど、間違ったことを書くのは嫌なので調べていたら、 いつの間にか時間が…。そう、こうやって日記に「執筆力」を割いてしまうと 本の執筆が進まないんだった。というわけで半分くらい書いたけど削除。 ソリトンがエネルギーを伝えるからchain meltingが起きる、って理解で正しいでしょうか?
はっ。スルー力か。
= The py.test tool and library
2.12 継承を必要としませんああ、なるほど。 それは確かに便利そう。テストクラスは Test で始まる名前で認識されます. unitest.py とは違い, テストランナーに見つけてもらうために, あるクラスを継承することは必要ではありません. さらに簡単なことに, アプリケーションクラスを継承したテストクラスを書くことが出来できます.
= GROW ver.3 Flash Game Planet___EYEZMAZE をついついやってしまった。 とりあえず並んでいる順番においてみて、得られた情報から適当に並べてみると3回目で1つを残してmaxに。 なんだ、かんたんじゃん、と思ったらそこからさらに3回かかってしまった。 だってあれとあれがインタラクトするとは思わなかったんだもん。
この問題を自動生成できないかなぁ。 っていうかテキスト形式なら自動生成できるなぁ。 問題は「アイテム 1 が Level 3 に上がりました」 「アイテム 4がアイテム 5 とインタラクトしました」 という文字列が出力されるゲームがどれくらい面白いのかだ。
考える力を計るテスト問題にはなるなぁ。少なくとも。
=
>>> B.daemon.catalinaDaemon StandardService[null] >>> c = B.daemon.catalinaDaemon >>> c.class <jclass org.apache.catalina.startup.Catalina at 9048956> >>> [m.name for m in c.class.methods] ['stopServer', 'stopServer', 'await', 'setCatalinaHome', 'setCatalinaBase', 'set ParentClassLoader', 'setConfig', 'setConfigFile', 'getConfigFile', 'setUseShutdo wnHook', 'getUseShutdownHook', 'setServer', 'main', 'load', 'load', 'start', 'de stroy', 'stop', 'create', 'process', 'setAwait', 'setCatalinaHome', 'setCatalina Base', 'getCatalinaHome', 'getCatalinaBase', 'addLifecycleListener', 'addConnect or', 'setUseNaming', 'isUseNaming', 'isRedirectStreams', 'setRedirectStreams', ' getRealm', 'setRealm', 'isAwait', 'createConnector', 'createConnector', 'createC onnector', 'createConnector', 'createEngine', 'createHost', 'createLoader', 'rem oveContext', 'removeEngine', 'removeHost', 'addAuthenticator', 'findLifecycleLis teners', 'removeLifecycleListener', 'createContext', 'addEngine', 'getInfo', 'po stDeregister', 'postRegister', 'preDeregister', 'preRegister', 'getObjectName', 'removeConnector', 'setContainer', 'getContainerName', 'getServer', 'getConnecto rNames', 'findConnectors', 'getName', 'toString', 'init', 'setName', 'initialize ', 'addPropertyChangeListener', 'removePropertyChangeListener', 'getContainer', 'getDomain', 'hashCode', 'getClass', 'wait', 'wait', 'wait', 'equals', 'notify', 'notifyAll']うーん。 やっぱり道は長そうだ。 走っているTomcatを止めずに一部のオブジェクトを書き換えたり差し替えたりすることは、 原理的にはこの方法でできるのだけど、実際にやるにはTomcatの中の仕組みを 理解する必要がある。 簡単にできそうだったらJython本にサンプルの一つとして載せようかと思ったのだけど、 なかなかそうも行かなさそうだ。
十分時間があれば別なんだけども、 Tomcat本を書くわけではないので、 今からTomcatの中身を勉強するよりは現状でわかっていることだけで本を仕上げた方がいいだろう。
試してみたい人のための情報。 Jython2.1をインストールして、jython.batをコピーし、 最後の行を下のように書き換える。もちろん自分がJREやTomcatを入れた場所に応じてパスを変更すること。
"C:\Program Files\Java\jre1.5.0_10\bin\java.exe" "-Dpython.home=c:\jython-2.1" -classpath "c:\jython-2.1\jython.jar;C:\apache-tomcat-6.0.10\bin\bootstrap.jar;%CLASSPATH%" "-Dcatalina.home=C:\apache-tomcat-6.0.10" org.python.util.jython "-Dpython.security.respectJavaAccessibility=false" %ARGS%
後はそのバッチファイルを起動するだけ。
=
= 書くの忘れそうだったからあわてて書いた。 西尾泰和のブログ: タスクバーで目的のショートカットを選ぶまでの時間を短縮。 もうちょっとキャッチーなタイトルをつけたかったけど思いつかなかった。
= げげげ。 Jythonで「こんにちわ」ってファイルに保存したら、当然UTF-8だと思ったのにSJISだった。 うーん。 2.1ではコンソールの入力もSJIS、画面やファイルへの出力もSJISだから化けず、 一見うまく行っているように見え、 2.2では画面からの入力が何か別のものになったせいで化けていると考えるのが妥当だろうか。 文字コード周りは触れたくないんだがなぁ。
= ああ。Jythonで使えない最新のPythonの機能、デコレータもあったね。 デコレータ滅多に使わないので忘れてた。
デコレータなんて飾りですよ。 だってデコレーションっていうじゃない。
TomcatをJythonから起動したのと同じ方法で、 JythonをJythonから起動することもできるかも。
C:\jython-2.1>jython -Dpython.security.respectJavaAccessibility=false Jython 2.1 on java1.5.0_10 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> import org >>> org.python.util.jythonできた、けど…いやー、別窓で開いて欲しいなぁ。 ああ、JythonからJyConsole(JFrameを使っている)を呼び出せばいいのか。>>> org.python.util.jython.main >>> org.python.util.jython.main([]) Jython 2.1 on java1.5.0_10 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> ^Z >>>
= TAKESAKO @ Yet another Cybozu Labs: gihyo.jp Web連載 - この先生きのこるために注目をあびる優れた技術を身につける この先生、きのこ?あびる優? 絶対わざとだ(笑)