著作一覧 |
妙だな、と、絶妙だな、では相当違う。多分、絶妙だな、が正しい。でもなんちゃらは絶えて久しいと云うが如し。
状況は、StrutsのTilesを使っていて複数のペインがある。で、bodyタグを持っているペインは既定。その中でonload="init();"とか呼んでいて、かつinit()は共通処理がコードされている。
問題は、initファンクションに手を入れずに、各ペインがロード時処理をどうやれば記述できるか?
で、こんなのを作った。
<html> <head> <script> function init() { alert("pane1"); } </script> </head> <body onload="init();"> <h1>original pane</h1> <!-- end of pane --> <h1>2nd pane</h1> <script> function pane2_init() { pane2_init.init(); alert("pane2"); } pane2_init.init = init; init = pane2_init; </script> <!-- end of pane --> <h1>3rd pane</h1> <script> function pane3_init() { pane3_init.init(); alert("pane3"); } pane3_init.init = init; init = pane3_init; </script> <!-- end of pane --> </body> </html>
ここでたとえばpane3_initファンクションの中でpane3_init.init();とメソッド呼び出しをしているが、最初、this.init();と書いたらぴくりとも動かないので、ちょっと悩んだ。
結局、ちゃんと調べなかったのだが、関数の中のthisはグローバルなオブジェクト(ここではwindow。alert(this);したらwindow objectと表示されるから多分、正しい認識)で、各関数はそれぞれ関数オブジェクトのインスタンスで、オブジェクトID=関数名という関連になってるんだと納得したのだが、それって正しい認識なのかな?
VB2005便利:Usingステートメントで簡単……を読んでちょっと考えた。
僕は、usingマンセーなのだが、その一方でIDisposable/Dispose/using に関してという議論での、Closeとの違い、インターフェイスの公開、共有の3点についての吉松さんの指摘も正しそうに思える。もっとも3番目の論点については、共有する場合にはusingなんて使えないねというのが答えだし、その結果1についてはだから両方必要じゃんとなる(共有不可ならCloseは不要。ただし長く利用するものはブロックには持てないのでその場合はやはりCloseが必要(Disposeのエイリアスとして)という感じかな。Open/Close、Create/Disposeとかで生成時のメソッド名の好みに依存するだけだったりして)のだが。2番目は公開すりゃいいと思ってるから隠している実装というものの設計思想についてはこちらが知りたいな、という程度でしかない。だからusingが提供されていて、共有するのじゃなければがんがん使うのが良いと思う。それによって確実にリソースの解放漏れが減るからだ。ちなみに、この議論は途中で一般化してしまってusingの存在が消えているが、単純にusingで囲ってコンパイルエラーになればusingを使わずにCloseを呼べば済むだけの話に見える。usingのためのインターフェイスじゃん。
で、VB.NET2005にはusingが……というのとの対比で、J2SE 1.5のConcurrencyユーティリティのLockを考える。
synchronziedステートメントの美点はそれがブロックだという点そのものだ。つまり、例外で飛ぼうがなんだろうが確実にアンロックされるという点だ。これが、C++で同期プリミティブを扱うという話になれば確実にアンロックされないパスが生じてたわけだから(ということも無いか)、ブロック化されるのは非常に良いことに思える。
ところが、Concurrencyユーティリティで、まるで同期プリミティブのようにロックしたままアンロックせずにどこかに行ける機能が提供されることになった。なんだかなぁ、という印象を持たざるを得ない。もっとも、アノテーションなんかと同じで、使う局面が絞られてるわけなんだが。で、この絞られるが、IDisposableが使えない局面(共有とか長くオープンしたまま保持するとか)と同じようなものかな、と思ったのだった。
実際には、とにかく2種類あったほうが良い。
#ほとんどの場合 File.open('foo', 'r') do |f| s = f.read p s end #でも稀に f = File.open('foo', 'r') s = f.read p s f.close両方あるからいいな。でも、最初に覚える/主として利用するは、前者であって欲しいとは思う。
なんで、80MBもあるんだ? おまけに頼みもしないプログラム(Net configとか言うようなの)をインストールしようとして、止まってみたり。で、中止をクリックすると不要だけどいいから入れろというような押し付けがましいメッセージを出すし。しかもJREまで入れるし。
というわけで、相当嫌いになるが、でもADOは楽ちんだね。
_ 咳 [図がきれい。]
SwingUtilities.invokeLaterのように、イベントディスパッチスレッドからブロックを与えることによってうまくいくんじゃないかと考えてみた。
つまり、メインスレッドはキューに対する待ち状態とし、キューにはインターフェイスのインスタンスを入れる。スレッド側はインスタンスを入れたところでnotifyを呼び出す。
で、メインスレッドはキューからインターフェイスのインスタンスを取り出し決められたメソッドを呼び出すと、それがブリッジ経由でRubyのスクリプトとして実行される。
このキューの待ち状態に入るメソッドをRjbから呼び出すRjb側のJavaのプログラムとしておけばスレッド側でRubyのスクリプトを呼び出す必要はない。
しかし、よくよく考えてみると、SwingUtilties.invokeLaterへ与えるものは、Rubyのスクリプトにならざるを得ないから、いやでもあっち側でも動くことなる。
ということは結局ダメなんじゃないかな、と気づいた。
SwingUtilities = Rjb::import('javax.swing.SwingUtilities') JFileChooser = Rjb::import('javax.swing.JFileChooser') class Run def initialize(&block) @block = block end def run @block.call end end run = Rjb::bind(Run.new do chooser = JFileChooser.new() ret = chooser.showOpenDialog(nil) if ret == JFileChooser.APPROVE_OPTION puts chooser.getSelectedFile end end, 'java.lang.Runnable') SwingUtilities.invokeAndWait(run)
というか、既にイベントディスパッチスレッドでRubyのスクリプトが動く前提になってしまっている。だったら最初から問題ないわけだし……(もちろん問題ある)
すげーおもしろかった。今まで見たことのある鈴木清順の映画の中でも最高のできじゃなかろうか。とにかく、一瞬たりとも退屈を覚えなかったってのは、この10年くらいに見たどんな映画(そう言えばクリントイーストウッドの臓器移植のやつとかくらいかな、全然退屈しなかったってのは。何かしら気が抜けることろがあるもんだし)よりもすごい。その意味じゃ、ロシュフォールの恋人くらい好きかも。もちろんピストルオペラとかこれにくらべれば屁みたいなものだし、ツィゴイヌルワイゼンなんてしみったれただけの静的映画だ。カポネ大いに泣くはすごく好きな映画だが、それよりももっと好きだ(多分にオペレッタといっても映画なんだからミュージカルだよね、だからだと言えそうだ)し、ひとつ喧嘩は逃げる足よりも、どうせさすらい独り身のよりも、もっと好きだ。うん、実に好きな映画だ。
とは言うものの、例によって木村威夫との爺さんコンビのスカスカ映画なのだが。いざとなればピンクっぽい照明だけの何も無い空間(確か、東京流れ者の最後のほうの決闘シーンはこんな感じだったような)で、すかすかしてたりするし。しかも、ここぞというところで決め構図(ポーズと音が同じだな)では、役者がへたれているからふらついてたりもするし。
にも関わらず、映画だよ、映画。
最初、どうしてこうもスカスカしてるのかと思ったけど、不自然な背景のロングで5人くらいが全身で映ってるからだな。バストショットが出てくるのは(記憶してる限りでは)後半になってからじゃなかろうか。顔のクローズアップの時には下からのライティングで、ああ、映画だ、とこれまた映画だよな、とつくづく納得させられるわけだし。
特にああっと素晴らしかったのは由紀さおりが、薬師丸ひろ子とのじゃんけん勝負に負けて自ら糸にくるまって天高く舞い上がったところで、今度生まれても100歳くらいのなんちゃらばばあになりたいなと唄うところ。すげえいい歌を、すげえいい声で唄うもんで、思わず感動のあまり泣きそうになるくらい堪能できたよ。やっぱり唄が出ない映画は映画じゃないよなぁ、と思う間もなくこれはオペレッタと銘打ってるんだから唄があるのはあたりまえなんだが。
あと、ソーダ、メロン、レモンとカタカナで色をつけるきれいなデュエットをオダギリジョーと名前知らない中国か台湾か香港の女優が唄うとこもいい感じ。でも、映画としては後半の下からのライティング(でもバックは違うけど)で印影くっきりさせてたところとか。
なんで、唐の狸が姫なのか? とオダギリジョーがパパイヤ鈴木に訊くと、人には人にしかわからない理由があるように、狸には狸にしかわからない理由があると答えるシナリオも嫌いじゃない。
極楽カエルのばかばかしいほどの人形っぷりと、思いもかけぬ甲高い声とか。
暑かったり寒かったりするかえらずの山の玄妙さの表現とか。木村威夫ってどうしてこうもいい加減な仕事をするんだろうかとくらくらしてくるようだ。
結局、映画というのは、唄と踊りとライトと色と構図だということを再確認できたということだろうか。それにしても、これっぽっちも感動は(由紀さおりの最期の唄を除き)しないわけだが(感動するにはさすがに物語か、重厚なある種のハーモニーが必要なようだ)、驚くほど刺激に溢れていて、実に楽しかった。それにしてもいい仕事してるな、びっくりした。
なんて題なので、コーネルウールリッチかな、とか思いながら読んでみる。まあ、確かにコーネルウールリッチが出てくることはないわけだが。
失敗した人を罵るのは割と簡単だし、多分、ウケも取れる。でもそうではなく、
計画にかかわった人々への尊敬の念と、失敗をくりかえさないためにできることを今やろうという、著者の思いは十分伝わるとおもう。
という書き方をすることもできる。し、そう読み取れる人が確かにいる。それにしても、Amazonで見るとちゃんと売れているようだ。で、僕も買うことにする。
それにしても、とつくづく思うのだが、やはりBlogというのは良いものだ。少なくても僕は、Moleskinさんと高岡さんという2人の良き書評家(書き手がどう考えているかはともかく僕にとっては、ということだ。いずれにしろ面識のない人間である以上、機能的な繋がりになることは避けられないわけだ)を得ることができわけだから(もちろんそれだけではないのだが)。ここですごいのは、(悪意がある場合に利用される言葉だと思うが、それは無視して)ウォッチできるからどんな本を読んで、それに対して何を語っているかを現在形でかつ時系列に沿って読めるってことだ。それによって、先に「機能的」なつきあい(日記を読むってのは一方的ではあるがつきあいには違いあるまい)と書いたが、それに留まらないもの――共感――が生じるわけで、「こいつが誉めるんだから、おれにも向いているに違いない」という友達の意見みたいな受け止め方が可能になることだろう。まあ、その共感の一線を超えると相当気持ちが悪い(ウールリッチ的な世界であるな)ことになるわけでもあるから、諸刃の剣でもあるが(何しろ不特定多数に開かれてるわけだし)。
この時感じるのは、随分遠くまで行けるだろうな、という感覚だ。
以前、誰か、確かマルセルシュオッブについてじゃなかったかな、あるいはアルカンか、死ぬほど死ぬまで本に埋もれ本を読む人のことを読んでいて思ったものだ。あるいは中国の正史は牛車に5台、何者もそれすべて読むに能わず、とか。しかし、歴史は続く。リレーのようだ。誰かが牛車に1台読んでそれを掻い摘んでくれれば、次の人は2台目から読めば良い。そうでなければ、歴史によって蓄積された澱に押し潰されてしまう。最期、書棚が崩れてきて本に押しつぶされて死んだアルカンのように。
だから実際のところ、共感を覚える人が読んだ本は読む必要はなく、信頼できそうな人が手がけていることはする必要がない。にも関わらず読みたくなり思わず手にしてしまうのは、ある意味不思議なことでもある。だが、考えてみれば追体験なしに信用することはできないのだがから、自明のことなのかも知れない。つまるところ、最後に決めるのは自分だ。5個のうち1個を追体験し、確認しながら、あまり興味を持てない4個は任せる。そんな感じで歴史は進む。
後先を考えてない思いつきだから真に受ける必要はないが、もしかしたら、ファンクションの存在が混乱とかバグとかの元なんじゃなかろうか?
staticなユーティリティを除いて、すべてプロシージャとして実装させることで、例外は例外として使わざるを得なくなるし、責務は分担せざるを得なくなるんじゃないかな。
思えば良き構造化プログラミングスタイルでは、プロシージャとしてサブルーチンは組まれるものだ。ダメパターンってのはにもかかわらずファンクションとして実装してしまい(しかし戻り値を返せないから)グローバル変数を使いまくるってのが第1だ。第2は例外がないから深き淵から浮かび上がるためにグローバルな処理制御フラグが必要になる点だけど。(もちろん、インスタンスが無いから微妙なわけだが、実際にはトップレベルからインデックスを回してやるというような方法で個々のプロシージャが利用するデータ毎にリデファインして用意しておけば、実際にはそれほどひどいことにはならないし、そんなことをしなくてもいずれにしろあらかじめバウンダリーは設計しておくものだ。というか、もしひどいことになれば銀行の第3次オンラインは存在できなかったことになる)。それにプロシージャ主導で設計すると、エンドゥーテストが必須になるということも実は良いことなのではなかろうか?
と考えるとファンクション主導の出来の悪い(ask, ask, ask, accs関係ないか)オブジェクト指向な実装は、ピュアな構造化された実装よりも悪いことのほうが多いということに見える。COBOLというよりも、Windows3.0〜3.1時代のVBみたいだ(もちろん、VBはファンクションとプロシージャの区別を明示的に持つ優れた構造化言語だから、実際には使われ方の問題ということでもある)。さらにさかのぼると、デフォルトでintが戻ったCが元凶かも?
元凶は入門書なのかな? 読んでないからわからないが。でも、どうして呼んで得て見てこねくり回してまた与えて得て……という組み立て方をするんだろう? どこかでそういうもんだと習ってるからじゃなかろうか。
フローチャートで「処理」を記述するとそうなりがちだから、それは原因の一つだろう(これは、気付いているのでJavaの処方箋で指摘している)。とは言えアルゴリズムを記述するのには向いているわけでそれは現在でも事実だと思うが、もう細かいアルゴリズム(ソートとかマージとかサーチとか)を考えることも通常の分野では無いわけだから、さっさと捨ててしまうことも必要だろうな。特許の説明書くときには有用な記法らしいけど。
あとはなんだろう? Hello worldは、printfとかSystem.outにtellするだけだから別段悪くはない。その次あたりだな。というと演算をするからローカル変数が出てくるのかも。ローカル変数を教えなければどうかな? askした結果をしまうものを最初のうちに見せてしまうから、手元に持って来たくなるかも。収集癖はすべての動物の本能だし(と思う。リスは団栗を集めて地面に埋める。で忘れてしまう。できの悪いプログラムのようだ。もっとも、おかげで次の木が生えるわけでそれは良いことだったりするけど、不用変数への代入はコンパイラが捨てられるだけでろくなものではない)でもローカル変数を見せないとフィールドに入れられたりするかも。それじゃ逆効果だ。ということは変数を無いことにしてしまったらどうだろうか? それはさすがに無理か。
結局、カタだな。そう言えば角谷さんのカタ入門はどうなったんだろうか? と突然思い出したり。
呼び出しのバウンダリーが明確だと死んだ時の解析もしやすいとか、そういったことを示しながら進めるというのはどうだろうか? でも、現実的にはならなかったり。でもそれは心配ないはずだ。
朱に交われば赤くなる。水は方円の器に従う。
トランザクションスクリプトのほうが向いていれば、そっちで作るのは簡単だ。だから、逆に概念的にはどうかはわからないが、実装的には逆に単純(シンプル)な、ドメインモデルをこそ最初に教えるべきではないか。
_ 咳 [どこかで習うものなんですかねえ。先人のを見ちゃうとそうなるとかかなあ。手抜きとか悪いコードほど真似されやすい傾向にあ..]
曰く「このメモは、インターネットコミュニティに対するインフォメーション目的のものだ。インターネット標準とかに特化したものではない。このメモは無制限にばら撒いていいよん」
なんか、妙に投げやりなRFCだなぁ。
結論というかリコメンデーションは
1. 技術コミュニティは、ラベルでどうこうしようってのに効果があるなんて意味無いじゃんと考えている。
2. って言ってるにもかかわらずアメリカの36個の州と27の国がそんな方法を採用することにしちゃった。技術コミュニティは意味ないじゃんと思ってるけど、やるならSubject:以外の場所にしたほうがいいよということでコンセンサスを取れてるけどね。
3. もし、1.とか2.とか言ってるのにSubject:を使っちゃったら、しょうがない、No-Solicit:を追加しておいてね。
ということか(な? 自信なし)
エンコーディングがいろいろ大変だし、短くあるべきだし、所詮、人間のためのフィールドでしょ、ということだと読んだんだけどどうなのか。というか、だからどうしたというか。でもNo-Solicit:でも何でもいいが、それなりにSubject:にみしょーだくとか書く程度の良心があるスパマーもいるわけだから、別変数を追加するというのはフィルター設定には楽なような気もするな。
Floating Log経由。
って属性(アトリビュート)と何が違うんだろう?
いつ頃か忘れたけど、ruby-listでまつもとさんが、「プロパティってなんですか?」みたいなことを書いていたことがあったが(Rubyではアトリビュート。なぜならModule#attr_* とattrと前置してるし)、でもVBやCOMではプロパティと呼ぶ。たとえば、IDLではメソッドの属性としてpropputとか書くし。そのメソッドはC++の記述ではset_xxxxになるが(正確には好きな名前で書けると思ったが命名規約だと思う)、VBからはプロパティとして呼ぶ。JScriptからも同じだったかな。Win32OLEからもそうだ(def xxxx=と宣言されたかのように振舞う)。
結局のところ、同じ概念に異なる呼び名がついてるってだけのことじゃなかろうか。
でもマイクロソフトの言葉の利用の仕方には比較的一貫性があるような気がする。IDLでのメソッドの属性という書き方を上ではしたが、.NETでも属性はいっぱい出てくる。.NETでは属性はメタデータで、プロパティはオブジェクト(インスタンス)の文字通りの性格(個々のインスタンス毎に異なるパラメータということかな?)だ。思い出したが、XMLのスキーマの決め方教室みたいなのが以前あったけど、そこでも属性はメタデータ、エレメントは内容というのを方針にしてたという覚えもある。
というわけで、.NETというかCTS上のオブジェクトが保持する情報へアクセスするためのインターフェイスにはプロパティを利用するということになっている。こういうのは規約だから、規約は守っておいたほうが通常は良いことのほうが多いはずだ。ちなみに、C#やVBと異なりマネージドC++から呼ぶ場合は、プロパティであっても実際にコンパイラが生成するメソッド名のget_xxxxと書かなければだめだったと思う。
ちなみに、GUIコンポーネントで、GUIエディターのプロパティエディターから設定可能なものはプロパティとして記述しなければならなかったと記憶している(忘れちゃった)。
なんかあやふやだ。
spamに紛れて危うく削除するところだったが、久々にASRのバグ指摘が来た。 っていうか、CallByNameなんて関数は存在自体を知らなかったよorz。
Private Sub Command1_Click() Set fso = CreateObject("Scripting.FileSystemObject") For Each d In fso.drives MsgBox CallByName(d, "DriveLetter", VbGet) Next Set fso = Nothing End Sub
なるほど。文字通りだな。
と存在はわかったもののいつ見りゃいいんだ?
VBLifeで試した。
VBLife.rbに以下を追加
def about "vb life" end
LifeCanvasのForm_Loadの最後に以下を追加した。
MsgBox CallByName(life, "about", VbGet)
おお、ちゃんとメッセージボックスにvb lifeって表示されるぞ。というか、うまく動いちゃだめなんだが。
で、第3引数を変えてみるか
MsgBox CallByName(life, "about", VbMethod)
やっぱり動くな。引数が必要なのかな
def about(a, b) "vb life" + a + b end
としてから
MsgBox CallByName(life, "about", VbMethod, "a", "b")
う、ちゃんと"vb lifeab"と出てくる……
再現パターンを問い合わせることにしよう。
再現パターンとして、VB側からVBのオブジェクトを引数で与えてruby側からその引数のメソッドを呼び出すというのを示された。が、動く。
向こうももう少し考えてみる(どうも別のエラーが出たらしい)ということで一旦、中止。
エミリーはさっそく試してみた。でも勘違いしてたんだ
徹夜で誰かの夢を現実にしようと頑張ってみたり
今やんなきゃだめじゃん
別の切り口でやってみっか
熱中しちゃえば心はあっち側
フリーのゲームだぜ
エミリーのハックを見てみろよ
画面がブラックアウトしたらわめき出すよ
明日になる前に終らせなけりゃ後悔の嵐かも
今日やらなきゃいつやるってんだ?
他のやり方でやり直しだい
フリーのゲームを失っちまうのはごめんだな
エミリーのハックを見てみろよ
iPodの中からポップトーッン(ここはライドン)
なんて題だが例によって勝手な考察だ。
VBだとon resume nextとか書いて、「どうです死ななくなりましたよ」と胸をはるというお話(都市伝説かも)をどっかのサイトで見かけたが、この「死ななくなった」というのがキーなのかなと。
例によって、
try { ResultSet rs = preparedStatement.executeQuery(); ... rs.close(); preparedStatement.close(); } catch (SQLException e) { } // っていうか、finally節の存在を知らんのか?
みたいなのを書くプログラマってどうして、こういうのを書くんだろうか? と考えてたわけだ。
ちなみに、こういうのは僕は書くけど。
try { ... // throw させてしまう } finally { try { ps.close() } catch (SQLException e) {} // 飲み込む }
まあ、清濁併せ呑む気概というわけではなく、例外の上書きがイヤだからだ。closeでバッファフラッシュが行われたりするIOExceptionの場合と異なり、executeQueryについては、closeで例外になっても別に構わない。その後にどうせ死ぬわけだし、必要な情報はすでに取ってしまっている。一方、更新系の場合は、commitでどうせエラーがわかるからそれで良い。commitかrollbackするまではどうせ実際の更新は求めていないからだ。
でもそういうのと違うんだよね、最初の例のは。
で、例外というのは、プログラムのバグではなく(そういうのもあるけど)、特にIOExceptionとSQLExceptionなんかについては、ハードウェアや環境によって発生するプログラムから見れば天災のような例外なのだが、どうも飲み込んじゃうプログラマーというのは、例外=オレのバグみたいに思っているか、またはそういうふうに思われると思っていて、とにかく自分が作ったプログラムの上を通り過ぎればそれで万事快調と考えてしまうのでは無いか? と思いついた。
脳内妄想として、「バカヤロー、例外でシステムが逝ったぞ。スタックトレース見たら、A君の作ったプログラムだな。責任とって腹を斬れ!」と言われる光景を夢見てしまうのではなかろうか? それで、とにかく通してしまおうとか?
もし、この推測が当たりなら、想像力は豊かに持っているってことになる。では、どうしてかくも想像力に乏しいプログラムを書けるんだろうか?
謎だ。
あるいは、「恥」ってやつの誤用勝手かも。例外で自分が担当したメソッドがスタックトレースを吐くのが恥ずかしいとか。例外を飛ばさない=健康で素敵なプログラムとか。
でも、それは恥知らずな考え方だ。ゾンビになってスーパーをうろうろされたら、生きている人間に迷惑だ。さっさと往生するのが正しいありようだろう。でも、そのあたりのいさぎよさが欠けてるのかも。
アジャイルじゃないが例外喰らって死ぬ勇気を持って欲しいものだ。
しかし、なんで後先考えずに平気で飲み込むプログラムを書けるんだろうか?
謎だ。
Carbon Emacsとことえりの相性が悪くなったのなんのって、バッファに何かがたまるらしくて変換中にハングすることびしばし、どうにか^Gで抜けて(抜けられないことも結構あって、シグナル9のお世話になることも)やってるといきなりどわどわ文字列が入ってきたりわけわからん状態になる。
Japaneseとかいうのはお話にならないくらいに変換できなくてやたらいらつくし、で、SKKにする。
SKKはもちろんSKKなんだが、今となっては面倒きわまりないな。それにつけても最近のカナ漢字変換はうまくできてる。というわけで、SKKを使う気にはならない。ql^jql^jqlqlとか覚えてはいるけれど。単語登録は1番楽だけど。やっぱり先にモードを変えるっていうvi的な方法は好みじゃないようだ。
となると、Emacsでテキスト入力するって考えを捨てることになる。
だったら、Mac使えないじゃん、と思ったが、ふとiWorkを思い出した。TigerとiLifeは使うけどiWorkって使ってなかったな(3種バンドル版を買ったのだ)。
で、Pagesを使ってみるとそれはやはりワープロで面倒なのなんのって。何が面倒かっていうとカーソルキーに指を伸ばすのが面倒だ。
で、何気なくペーストしようとして^vとやったらいきなり画面が変わってびっくり。いったいおれは何を貼り付けたんだと見てみるとどうも様子が違う。ページが移動したようだ。
あれ? ともう一度^vすると、ペーストじゃなくてスクロールアップされてるじゃん。ってことは^pだとプリントじゃなくて……おお、previous-lineだ。さらに^n,^a,^f,^b、^e,^y,^kと試す。なんだ、まともなキーアサインじゃん。こいつはいいや。で、逆スクロールしようとして、M-vしたらペーストされたorz。でも、まあいいや。Ctrlが使えるならとりあえずテキスト入力はPagesで決まりだな。
で、さらに思い返すと、Macのテキスト入力ウィンドウってSafariもEmacs風だったような。ってことは、もしかするとWord 2004もそうなのかな? (とこれは持ってても、はなから入力用に使う気はなかったのだが)と試してみる……違った。ウェイがあるようだ。
だめだ。同じ文書を2つ以上のビューで見られないのは使えない。
やっぱり、Emacsが最強だとつくづくわかるが、それにしても文章の記述に特化してるはずのワープロ(じゃないのかな? Pagesってもしかすると)でビューを1つしかもてないってのは信じ難い。隠しコマンドとか無いかな。
charset=windows-31Jだと正しくデコードできない(本当にこの場合はデコードでいいんだろうか。xml宣言でencoding="windows-31J"なっているのを読み手側の世界に引っ張るんだからデコードでいいと思うけど、あまりそういう言い方してるの見たこと無いし)んですが、Ajaxなみなさんは問題ないんでしょうか? っていうか、charset=shift_jis or utf-8を使うものなのかなぁ。
追記:kazzさんのJavaと.NETでのエンコーディング名についてのまとめ。これはありがたい。
現実主義でcdWindows31J=Windows-31J(Java)=Shift_JIS(MS)とするか、utf-8を利用するか、ということですね。
Eclipseの特集って、NetBeansと同等機能を持たせる設定だけだったりするのに、情報がNetBeansより多いことになってるんだよねぇ。
へー、そうなのか。と感心してみたり(だから使ってから言えと……)。
(深刻ぶって)
そろそろメインマシンの2000をどうにかしたい感じ。
問題は、オンキョーのUSBオーディオが2000で打ち切りなこと。
(ここからラップになる)
だからしょうがないから、このさいUSBオーディオ買い換えちゃえとAmazonでクリックだ。
すんばらしいぞ、高性能、うそ、でもバスパワードだから、これでコンセントが1個空くぞ、嬉しいぞ。
多分、絶対、間違いないけど、使わないけど入力端子もついてるぞ。
あとは、今さら、どこにも存在しないUSB XpressSCSIがゴミになっちゃうことと、その先にくっついている外付けPDが使えなくなることだけど、もうPDを使わなくなって2年以上はたってるから、もったいないお化けが夢に出てるけど、しょうがないだろ、成仏してくれ、さようなら。
ところがどっこい世の中は、甘くは無いんだ、辛くもないけど、でも、今、とっても悲しいことが、判明したんだ、急展開。日記に書くので調べてみたんだ、オンキョーのページ、そしたらそこには、Windows XPに対応しました。 このドライバはWindows XP専用です。ガーソ、こういつはびっくり驚いた。はるか昔のその昔、XPはサポートしないって書いていたじゃんサポートページ、あれは何かの間違いか? 対応予定と書いとけよ。すっかり信じていたんだぞ。だからと言っちゃなんだがね、2000を使いつづけていたんだよ、ヘイ、ヅカスカヅカスカガガガガガ。
発送までにはまだ間があるな、ここが思案のしどころだ。オンキョーを、取るか残すかどうするか? そうくりゃ、やっぱり残すだろ。キャンセルするんだ今すぐに。
(我に返って、セリフに戻る)
うむ、なんか口惜しいな。
Excelにいろいろ書いて、VBマクロやRubyを使ってコードを生成するってのをいろいろ試している。
軌道に乗ったものもあるし、まだルールをその場その場で決めて(=当然マクロやスクリプトもその場で作る)やんなきゃならないのもある。
でも取りあえず生成できるようになる。
修正依頼が来る。シートが修正されてくる場合もあるし、こっちでシートをいじる場合もある。
で、マクロを実行するとかスクリプトを走らせるとかする。
と、ドバドバ、ソースが出てくる。それをftpルートに乗せてサーバーへ送り込んでビルドプロセスを走らせる。
これだよ、これが製造だ。
問題は、まだまだ金型作るのにえらく職人芸を求められるってとこだな。
#しかも、部品で言えばまだまだ全然本質じゃない部分だったり。
大島さんのとこ経由。
英語読むの面倒な人のために、ちょっと説明をいい加減に訳。
右側の輪の両側に灯を燈したら勝ち。
パズルもあるけどタイミング勝負もあるよ。壁にはちょっとヒントも書いてある。
追記:今日もう一回やりに行ったら10000人目だか100000人目だからベガスへ招待っていううざったいポップアップが出なくなってたけど、実はあれって本当だったのかな?
やっぱ行けないや。おもしろそうなのにな。
昨日のゲームの解き方が複数あるという話。
Coople(あれ十行さんじゃなくなってるのか? 名前はどうでもいいけど)
あんな短くてシビアなやつでも2種類の方法がある(もっとあるのかも)ってのがおもしろい。
レミングスに乗りが近いかな。
っていうか、「電」?
倫理言語ってのをでっちあげると非技術的なところからすごーく評価されて(名前が。っていうか中身が有り得るんだろうか?)そこら中で怒涛のように導入されてプログラマーを苦しめるとか。
本屋へ行くと「はじめての倫理」「倫理でなぜつくるのか」「倫理思考でいこう」「倫理脳の作り方」「あなたの会社の技術者を倫理で鍛えなおす32の法則」「実践倫理」とかいっぱい。すべてがお説教だ。ソフトウェアの見える化支援ツールとして倫理注入棒というのがそこら中の管理者に与えられたり。
(この言語の浸透によりハックは死ぬ。とポールグラハムも言っている)
コンサルタント「これからのシステム構築のキーとなるテクノロジは倫理言語です」
顧客「倫理、なんて美しい響き」
コンサルタント「各社から『忠義』『愛社』『滅私』などの実装が出始めていますが、私としては弊社の『大日本』をお勧めしたい」
顧客「しこうして導入実績はありや?」
コンサルタント「愛国戦隊のミサイル制御システムの開発言語は『大日本』ですぞ」
顧客「しかし、オフショアへ出すことを考えるといささかその名前は抵抗をもたれるのでは?」
コンサルタント「そういうお客様へは『五族協和』プラグインの追加をお勧めいたしております。ちなみに『大日本』に『五族協和』をバンドルした『王道楽土』にいたしますと多少お値段のほうも抑え目にさせていただけますが」
顧客「ふむ、倫理指向開発ですか。うちの技術者には難しいんじゃないかなぁ。なにしろOOP+アジャイルとかしかやったことないし」
コンサルタント「いえ、そんなことはありません。倫理指向開発では開発プロセスもきっちりと規定してありますから、どんな技術者でも一騎当千の兵(つわもの)に鍛え上げることが可能です。弊社の『特攻魂、行って来い』プロセスの支援サービスを『王道楽土』にバンドルいたしますと……」
顧客「なんか負けそうだなぁ」
コンサルタント「誰に?」
顧客「アジャイルはケントベックやマーティンファウラーとかも支持してるんじゃありませんでしたっけ」
コンサルタント「それは欧米流といい我が国の倫理、我が国の風土に根ざしたものではありません。それは失敗があらかじめプログラムされていると申しても過言ではない。しかし我が国……ではなく我が王道楽土には孫呉の兵法ありと申し上げたい」
顧客「孫呉?」
コンサルタント「プロセス構築支援ツール監視ツールとして『釈迦の掌』という製品もご用意させていただいております」
顧客「そんごくうかい」
と、論理言語という字面を見て恐怖に震えた。
追記:タワゴトはタワゴトであって、倫理的であるというのは当然必要なことだ。規律というのは倫理観の発現なわけだし。
しょえー。
ピカピカのぎろちょんが着々と復刊への道を歩み出している雰囲気。
ネタにしてすみません。「型」が抜けてたから良からぬイメージが湧き出したってのは多分、当たりでしょう。でも、書き間違えてたってのは気づきませんでした。(一瞬、目がくらくらして一応グーグルかけたら哲学の他にPrologなんてのも見えたのでそういう言い方もあるんだな、と思ってしまった。というか堂々の1位ですよ)
その話はおいておいて、『関数言語』というのは用語として定着している/存在している呼び方なんでしょうか? なんでそんなことを訊くかというと、以前(って言っても10年というような単位)Cのことを関数(型)?言語と書いてあったのを見た覚えがあって、それがずっと気になっているからです。もちろん、Cは関数型言語ではないので「型」があるわけはないですが、かといって関数言語という呼び方を他に見た事がなかったからですが(見ないということと無いということは違うわけだし)。
というわけで、関数言語というクラスを持たない手続き型言語の呼び方について言及されている機会を見逃さずに食らいついたわけですが、よろしければ教えていただけないでしょうか?
自動生成ネタの続きメモ。
はじめにモデルがあり、そこからシート、そしてソースというのは納得がいく流れだと思います。
しかし、始めにシートありき(その裏側にはもやもやとしたモデル――蛭子みたいなものなのだろうな――しかない)、だと選択肢としてはアドホックにシート→ソースとなりますね。シートがレガシーとなっているために量の問題として大きく変更できないというような場合です。
そこでモデルの構築に立ち戻るのが良いか、アドホックに変換できれば良いかはケースバイケースではないかと。その意味では、3種類あって
・モデル->シート->ソース
・シート->ソース
(シートがレガシー)
・テンプレートソース->シート->ソース
(ものによってはこういう流れもある。アドホックなDTOでソース書くの面倒な場合とか)
2番目の場合、セルの中身によってはどうにもならない場合もあるけど。
その場合、1へ戻るのではなく
シート->定型的に書式化し直したシート->ソース
という手段を取っても良いと思います。
PowerBookにEclipseを入れてみることにした。
入った。
でもランゲージパックにはWin32用とLinux/GTKしか無いな。
でも、なんで分かれてるんだろう? zipとtgzって言いたいだけだったらLinux/GTKとはしないよな。
でも、しょせんリソースくらいだと思うんだが、なんで2種類ある(かつGTKと決めうち)んだろう?
と疑問に思いながらもとりあえずWin32用を入れてみた。なんか問題なく動いてるみたいだが……様子見かな。
が、それはそれとして、正しい(少なくてもメモ帳やデフォルトのviを使う人間から見て)設定方法がだいたいわかったように思える。
ウインドウ(W) ― 設定(P)
Javaーエディター
●外観ー表示されるタブ幅(T) 8 (デフォルトは4 ― 多分これは不要だが一応入れておく。この時、「構文」は8インデントで表示されるが実際の編集ではテンプレートが有効となるので4インデントとなるのでOK)
●入力ータブのスペースを挿入(E) をチェック (デフォルトはアンチェック。どうもこれが重要なようだ)
―●テンプレート コード・フォーマッターの使用(F) をチェック (デフォルト)
この設定で今のところまともな動作をしている(インデントは4、ハードタブは空白に置換)
しかし、EmacsといいEclipseといい、妙に主張が強いのがデフォルトなのはたまらんな(メモ帳とviのデフォルトが素人も使うから正しいと想定しないと始まらない。っていうかメモ帳のハードタブ位置なんて変えられないし、viデフォルトは緊急時に使うからいちいちタブの設定とかしてられんし)。
いや、本物を見るとは思わなかったがすさまじく強力でびびった。ものはセッタインジェクションがからんでいる超弩級のオーバーライドだったのだが、以下はそれを甘ちゃん化したもの。
public class Root { private String name; public void setName(String newName) { name = newName; } public void printName() { System.out.println("my name is " + name); } }まあ、どうでも良いクラスなのだがセッタインジェクションの対象となるフィールドとセッタを定義したクラス。
public class Extended extends Root { private String name; public void setName(String newName) { name = newName; } public static void main(String[] args) { Extended e = new Extended(); e.setName("watashi ha nakano"); e.printName(); } }
で、問題のクラス。実行すると当然、次の結果となる。
$ javac *.java $ java -cp . Extended my name is null $
こういうものをどうすれば作らせないですむかをちょっとディスカッション。
プログラマが100人の村だとして、たった1人でもこういうとんでもないのが紛れ込んでいたら、全部staticメソッド(フィールド利用禁止)にしようホトトギス、と考えたくもなるがそれは無理なので実装継承禁止だホトトギス。
いや、直して見せようホトトギス。でもどうやって? 全部チェックできるのか? そんなときのFndBugsFindBugsだホトトギスとか。
フィールドを直接参照禁止だホトトギス。常にゲッタを使えば済むんじゃないか。いえいえそれは無理でしょう。フィールドを直接さわりたいからオーバーライドしたのじゃないかなホトトギス。privateが問題なのだよホトトギス、パッケージプライベートにしとけばこんなことはしなかったんじゃないのかな(と、これはまじめな考察である)。
結局、コピペできなくすれば良いのだホトトギス。DOSで開発させようホトトギス。それは何がなんでも非効率ではなかろうか? いや、こんなプログラムを量産されるよりは効率的だぞホトトギス。そうは言ってもホトトギス、一生懸命基底クラスの内容をDUPするかもホトトギス。copy Root.java Extended.javaとかしてから編集するかもホトトギス。と、世にぬすっとのネタは尽きマジ。
というか、フィールドオーバーライドだけなら良くはないけどまだ救いはあるのに、なぜセッタまでオーバーライドしたんだろうか(セッタをオーバーライドしなければRootクラス側のフィールドに入る。とは言えExtended側でもフィールドを参照しているメソッドが実際にはあるからだめなんだけど)。とまじめに考察してみる。クラスをまたがってリファクタリングして重複しているセッタとフィールドを基底クラスに汎化して、しかし特化クラス側から削除を(好意的に取れば)忘れた、あるいはもったいないお化けに取り憑かれたか。だろうな。リファクタリングに情けは無用。移動したならばっさり削除。というか、ユニットテストしてないだろうな。それはリファクタリングではなく、バグの培養というべき行為だ。
手続き型を関数言語と呼ぶのはあ、突っ込まれたほうの言い方だったのですか。それは残念というか。
なんか本屋へ行ったらいろいろ出てるではないか。
というわけでふたつのスピカを買って読む。
ソーンダイクみたいになるわけはないが、こうなるのか。
で、子供のところ行き。アニメと違って絵が柔らかいから子供も本のやつのほうが好きみたいだな。
後は、大人の世界だ。
……それにしてもシグルイはこの先一体どうなるんだろう?
そう言えば、白石一郎の秘剣も独自剣法の話だったが、才能が無い上に指を失った者が一念で2回転身するというなんとなく不思議な話なのだが、同じように身体能力を削がれた人間の話(ただしこっちは才能ありまくり)でもここまで違う方向へ進むってのもあたりまえだが面白い。
なんだ、やっぱり香港や舞踏家は黒歴史になってしまうのか。な?
にしては、20から始めるところが不思議ではある。
いがぴょんさんのとこですが、
あるいはフィールド変数さへ利用しなければ全部staticメソッドにしなくたって良いのかしら? (フィールド変数が利用禁止だったら 全部staticメソッドと あんまし意味変わらないですねぇ…)。
いや、それはちょっと言い過ぎでは。
そのクラスの実装自体にとってはフィールドを使わなければthisを意識しないので確かに意味は変わりませんが、システムから見れば実行するのがインスタンス(素直に仮想化可能)かクラス(リフレクションを利用すれば仮想化可能)かでは、それは全然違います。
まあ、わかってて、クラスの実装側に立った場合のことをおっしゃてるのだとは思いますが、念のため。
_ いがぴょん [指摘の通りです。ご指摘 ありがとうございます。 恥ずかしいことに、リフレクション可能かどうかという考察は すっぽ抜け..]
はぶさんとっから回ってきたから堂々と書くぞ。
これ、どっかで見たのも含めて3種類くらいの楽しみが書く側にあるね。
では、
映画だけど、やっぱこれかな。ミシェルルグランの自己言及な歌とか、ダムダムとか、おいらは興行師とか、双子座の姉妹とか、火と土ととか、マクシミリアンのしみったれた唄以外は全部好きだ。
マーラー:交響曲第9番(ワルター(ブルーノ))おお、CDでも出てるのか(当然だ)。こいつのGR盤、本当に宝物のように聴いたのだ。聴かなくても針音があり、聴けばますます針音が入る。だから、1回聴くたびに磨り減って行くのだということを本当に意識して息を潜めて聴く、そういう演奏だ。っていうか、そういう聴き方って今は不要なんだから楽になったもんだな。
動乱(獣を野に放て)(紙ジャケット仕様)(ザ・クラッシュ)クラッシュはサンディニスタが7賢人とかヒッツビルUKとか散りばめられていて全体としては好きなんだが、どれか1曲であれば獣に自由に動けるだけの余地をやってくれのステイフリーだ。
Permanent(Joy Division)ジョイディヴィジョンの愛が僕らを引き裂いちゃうだろう。きっとそうだろう、は今でも好きだ。 モノトーンで、ドンドコいうだけのリズム隊、いつも同じように吠えながら低い声で唸っているだけのイアンカーティスの声、どの曲を聴いても受ける印象はほとんど同じ(アトモスフィアはちょっと特殊だ)。だから飽きてしまうし、通して聴く気にはならない。 でもヴァルターがヴィーンを振ったマーラーの9番のGR盤と同じく、ファクトリーの17"のLove will tear us apartもまた宝物である。聴くのがもったいなくて、ファクトリーのオリジナルLP(でもStillはあまりにもつまらないから捨てたような気がするな)2枚と、17"のトランスミッション、シーズロストコントロール、ラブウィルティアラスアパートは今もどこかに残っている。
エリザベス朝のヴァージナル音楽名曲選(グールド(グレン))グールドを聴き始めてしばらくした頃、ジェシカラングの翔ぶのが怖いという小説がベストセラーになった。その中でグールドのゴルトベルク変奏曲を聴くシーンが出てくる。というようなどうでも良いことは別にして、一番好きなのはエリザベス朝のヴァージナル用の曲をピアノで楽しそうに弾いているこのアルバム(とCDについても呼ぶのかな)。
バルトークが出てこないな。水みたいなもんだからか。実際に一番良く聴くのはポリーニとアバードのバルトークのピアノ協奏曲の1と2のカップリングだ。
_ ryugate [こんにちは、RjbQandAにclassのロードについての質問をさせていただきました。どうぞよろしくお願いいたします..]
それはとても難しいツッコミです。問題点は2つあります。
1つは、Class.forName(String)って、Class.forName(String, true, this.getClass().getClassLoader())と等しくて、ではこのthisとは? と考えるとRjbなんですよね。で、thisを取るのに動くのはsun.reflect.Reflection.getCallerClassという、SunのJ2seの内部実装そのもので多分、スタックを戻ってthisを取ってくる仕組みになってたり。でもRjbはJavaから見たらVMからの呼び出しと等しいから結局ClassLoaderとしてnullを与えたことになってしまい、この状態はJ2SEのClass#forNameでは規定されていない(少なくてもSystemClassLoaderが利用されるわけではないことはわかるけど)のでもにゃもにゃとClassNotFoundExceptionになるんでしょう。(J2SEの配布ソースまでは追ったけど、sunの実装はまで追ってないのでとりあえずここまで)
2つ目はimportで取って来たのとClass.forName(String, boolean, ClassLoader)で取って来たのではRjbの内部処理が異なってnewが呼べなかったり(でも、これは戻り値がClassだったらimportと同等の処理を走らせれば良いから大した問題じゃないか)。
2つ目はともかく、1つ目はRjbが内部でimportに置き換えるのが良いかな?
なんか、最後のテスト(_が付いた定数の処理)が引っかかるな。それとsize_tが見つからないみたいで#include <unistd.h>が必要になったけど、なんなんだろう? と言いながら真剣に追う気にはならないのだが。
とりあえずメモ。
mswin32とLinuxでは問題なくmakeもテストも動くんだが(待てよ、両方ともJ2SE 1.4.2だ。それか?)。
#あと、javahの動作が変だ。以前からなのかな(他のプラットフォームではたまたま動かなくて済んでいるとか)。その意味ではmakeの動作も多少違うのかも。
なんてことやってる閑があるなら、ツッコミのほうの問題をやれと、思いながらも今はそれはできない。
ちょっと釣られ過ぎな感じが端で見ててもしてくんだけど。
お金になるのはもうインフラじゃないんじゃないの? っていうかインフラじゃないよ。
でも、まつもとさんが言語市場は死屍累々(志士累々って気もするな)と言うのと違って、僕が言っても説得力はないな。
というわけで困ったときのポールグラハムだ。
ポールグラハムはLISPで稼いだんじゃなくて、普通のやつらより早く圧倒的なコマースサイトキットを作ったから稼げたんじゃないのかな。だからポールグラハムの本を読んでもぺらぺら喋れるLISPのことしか見えないように書いてるけど実際に重要なのはVCが金を出したのもYahooが買ったのもLISP技術じゃなくてアプリケーションのほうだ。そのアプリケーションを普通のやつらより上でやるのにMITハッカーだったからLISPを使うのが都合が良かったってだけのことだ。
だから金の話をするならインフラじゃなくてアプリケーションでしょう。そのアプリケーションがRails使うとちょろいなら別にRailsで何にもまずいことはない。
#ポールグラハムにLISPは金のにおいがしないと言ってもそれほど意味はないよね。だってポールグラハムにとってLISPはインフラに過ぎないわけだから。はあ、それが何かと言いながらLISPを使ってばっちり稼ぐ。それでいいじゃん。
で、成功したら、LISP! LISP! と声高に叫んで宣伝する。そのほうがいいと思うよ。
rjb-0.2.2。
Rjb::importしたjava.lang.ClassのRjb側のクラスJava_lang_ClassにforName(1)を定義し、呼ばれた場合にRjb::importにデリゲートする修正と、Rjb::importしたクラスをJVMへ与える場合には内部に保持しているJavaのClassのインスタンスを取り出してそれを与える修正。
#結局、作ってしまった。
追記(01:27)メソッドオーバーロードをつい引数の数を別扱いできるつもりになってたので取り下げ。
追記(02:17)rjb-0.2.3。上記を修正。戻り値がClassのインスタンスだった場合の変換も追加。QandAで指摘されたcygwinでtest.rbが失敗する件に対するパッチを取り込み。どうもありがとうございます。
5時間半があっという間だ。それにつけてもマレーホフいいダンサーだ。
っていうか、バレエがあんなに面白いとは思わなかった。というかヴァグナーの音楽が好きで、リングはライトモティーフほとんど覚えてるからっていうのもでかそうなんで、割り引いて考えるべきかも知れないが。
ブリュンヒルデ役は本当はフリッカ役みたいだが、軽そうで良かったし(ヴォータンと踊っている時も、ジークフリートと踊っている時も、ローゲと踊っている時も、というかこの舞台ではブリュンヒルデがラインの黄金の最後の部分から一環してローゲ、ヴォータンと並んで活躍する。というか死んでも踊りに出てくるジークムントとジークリンデもいるけど)、くるくる回る良く回る(子供のほうかな)ジークフリートもいい。
でも、炎のゆらぎのライトモティーフ(チャーンチャンーチャンチャンチャの部分)でぴょんぴょん小刻みに飛ぶローゲがすばらしい。白塗りの体に黒い衣装、紅い髪。
フリッカの登場時の踊りと揺りかごをどうも現しているらしい振り付けとか。ドンナーの手を挙げる仕草。
ジークリンデとジークムントがヒッピー(ていうか破れてるからもっと新しいか)なのはシェローあたりからそうだった(あれはジークフリートだけだったかな?)から取り立ててどうとは思わないが、君こそ春で、花がいっぱい踊りはじめるところとか、クラウスノミみたいなかっこうで女性の中の女性ノルンとか。ジークフリートが萌えはじめる森のシーンで番のケモノが出てくるところとか。ヴォータンとブリュンヒルデの別れのところとか。それは美しかった。 っていうかブリュンヒルデを守っている間、閑なのかローゲがピアノを弾くとか。
結局ちょっとウンザリしたのは、ハーゲンとアルベリヒの部分だけかな。ちょっとだれたぞ。
それにしてもハーゲンがアルベリヒを夢の中で殺すってのは東京リングでもそうだったけど、定説なのかな?
頻繁にハングするようになったんで、落ち着いて考えてみる。
やっぱ、電源かな、と落ち着いて考えても埒が明かないから手持ちのリソースでどうにかなる部品を交換してみる。
当たりだったみたいだな。
それにしても、なんでアンダースコア付きフィールドのテストに失敗するんだろう。J2SE 1.5が原因かもとか考えていてもしょうがないからLinuxのJ2SEを1.4.2から1.5.0_04に上げてみる。再現しない。
というか、gcc 2.95か。Tigerのはgcc 4.0.0だが、そっちかな(というか、もしそうだととんでもなくロジカルなバグがあるということなのだが)。
#追記
もっと全然違う問題だ。メソッド名をtest_under...からtest_s...に変えたらOKになった。テストの実行順序に依存している。
public interface Robo { ... }と定義されたリソースがあって、セッターインジェクションの必要があって
public class RoboUser { Robo robo; public void setRobo(Robo r) { robo = r; } ... }
とする。それはそうだろう。でも、
public class RoboUser { Robo robo; public void setRobo(Robo r) { robo = r; } public Robo getterRobo() { return robo; } ... }
なぜ、ゲッタメソッドが必要なんだ? というか、ゲッタメソッドってゲッタっていうプリフィクスが付くものなのか? というか、セッタメソッドとの名前の対称性とか少しでも考えてみることはないのだろうか? というかBean規約というものを……
良いプログラムを考えるということ自体が恐竜なのか、帝国主義なのか。まあ、いずれにしろ、こんなくされた合体ロボは叩きつぶすしかないわけだが。
ジェズイットを見習え |
_ Kazz [はい、正しいと思います。 Javascript(1.2)では件のpane3_initファンクションは以下の記述と同様..]
_ arton [関数のコンストラクタってのはおもしろいですね。]
_ Kazz [>関数のコンストラクタってのはおもしろいですね。 Lispとかのラムダ関数と同じようなものだそうです。といっても私は..]