タイトル/名前 | 更新者 | 更新日 |
---|---|---|
日記/2009/10/24/気が付いたら「魔人探偵脳噛ネウロ」終わってた・・・。 | msakamoto-sf | 2009-10-24 22:38:22 |
日記/2009/10/21/NASMメモ | msakamoto-sf | 2009-10-21 10:48:59 |
日記/2009/10/18/ようやく「Java言語で学ぶデザインパターン入門 マルチスレッド編」読み終わった・・・。 | msakamoto-sf | 2009-10-18 18:36:33 |
日記/2009/10/17/仕事と{家族or自分の体}のどちらが大事か | msakamoto-sf | 2009-10-17 13:14:20 |
Java/BCEL/実験コード1 | msakamoto-sf | 2009-10-12 22:45:05 |
添付ファイル/2009/10/12/bcel_tests.zip | msakamoto-sf | 2009-10-12 22:37:52 |
Java/clas3hift/失敗談 | msakamoto-sf | 2009-10-12 19:42:58 |
日記/2009/10/11/クラスを「すげ換える」SandBoxライブラリ、"clas3hift"登録 | msakamoto-sf | 2009-10-11 23:47:48 |
日記/2009/10/11/JUnit-addonsもJUnitでprivateメソッドをテストできるようだ | msakamoto-sf | 2009-10-11 23:27:42 |
JavaScript/XMLの要素前後の改行やタブ(=ホワイトスペースノード)のブラウザ互換性 | msakamoto-sf | 2009-10-04 17:57:01 |
最近の週刊少年ジャンプで唯一、応援していたのだが4月に終わってたのか・・・。
アフターヌーンで育った自分は基本的に週刊少年ジャンプの漫画は肌に合わないのだが、JOJOとネウロは別口だった。どちらもパワー戦じゃなくて頭脳戦だから。
まぁ母親が幼稚園の先生だったこともあり、「ドラゴンボール」ですら「暴力的だから読んじゃいけません」という環境だった。
小学生くらいだと手塚治虫か「ドラえもん」しか読んでなかったが、中学生当たりからアフターヌーン色が・・・というか、姉が既にWINGSとかアフターヌーン系の漫画を読んでいたので自分も嵌っていった感じ。
幽々白書は読んでるけど(というか姉が幽白同人やってたから)。
そんな経歴もあり、パワー戦でひたすら主人公と敵が強くなってくだけの漫画には馴染めなくなり、ジャンプ系であれば頭脳戦というか「人間ってすげぇなぁ」と思わせてくれるJOJOとネウロが大好きだった、という話。
ネウロについては頭脳戦か?と問われれば厳密にはまぁ違うと思うけど(ヒロイン推理してないし、ネウロは人間じゃなくて魔人で、便利道具使いまくった上に推理すっ飛ばしてるし)。
でも全編を通じてヒロインが徐々に人間的に成長していき、最初は人間を奴隷orエネルギー源にしか見ていなかったネウロも、その様子を見て考えを変えていく所とか、かなりJOJOの人間賛歌に通じる部分があると思う。
ネウロは物語序盤は無敵状態だったのだが、人間界に長くいる事で徐々に魔人としてのパワーが落ちていき、後半では物理的な戦闘で結構苦戦している。代わりに周囲の人間達が頑張るようになっていくのも読んでいて面白かった。
作者の次回作に期待する。
・ロングジャンプのアドレス指定:
jmp 0xAAAA:0000
と
jmp 0AAAAh:0000
の表記どちらもOK.ちなみにこれやると、ジャンプした時点でCSレジスタにセグメントアドレスがセットされている。(上の例ならAAAA)
・現在位置から510バイトまで0埋め
times 510 - ($ - $$) db 0
のあとに0x55, 0xAAを詰める
dw 0xAA55 or dw 0AA55h
結局、アドレス表記に関しては
0x...
と
0...h
の両方がOKみたい。後ろhの場合は、頭に必ず0(ゼロ)をおく。
・現在位置で無限ループ
jmp $
ようやく読み終わりました。
2007年くらいに購入していてずっと本棚の肥やしになってましたが、先日お仕事でjava.util.concurrentパッケージを活用しているソースコードと付き合う事になり、本棚から引っ張り出してきました。
休日とか職場行く前とかにすこしずつゆっくり消化したので2~3週間ほど掛かってしまいました。
Objectクラスのwait()とかnotify()、あと長年謎だったvolatileとかの意味がやっと分かりました。
職場での同じ現場で、Javaのマルチスレッド周りを専門にやってきた人が居るのですが、これでようやくその人の話す内容が少しは理解できるようになれたかな・・・。
経由
夫婦間の問題は結婚した事もないので分からない。
仕事と自分の体/家族の優先度について言えば、自分自身は「自分/家族優先」の考え。
だって、会社や組織は自分の体や家族が壊れても治してくれないから。会社や組織が冷酷だ、というわけではなくて、単純に病気にかかったら治すのはお医者さんだし、家族が病気になっても同様。家族の仲が険悪になったらそれを何とかするのは当事者である自分や、エスカレートしたら家庭裁判所の人達とかになるわけで。
もちろんそうなった場合の医療費や裁判費用はどうするの?って、それは毎月のお給料や保険代から出るので、それを出してくれる会社は確かにありがたいけど、でも単純に役目が違うだけなので。
仕事優先したあまり夫婦仲が悪くなった、じゃぁ会社や上司に仲直りを頼めるのか?頼まれたとして実行できるのか?仕事優先で成人病にかかったり過労死しました、じょあ会社や上司に病気の治療を頼めるのか?死んだ人間を生き返らせる事ができるのか?
多分難しいか不可能だし、仮に自分が社長や上司の立場になったとして、部下やその家族から上記のような依頼をされて受ける事ができるか?保険代をきちんと払うとか、過労死に至った場合は賠償金を払うのが限度で、人の肉体や感情のもつれそれ自体までは戻せない。
ってなことをつらつら考えるに、やっぱり会社や組織よりか、自分の身の安全や家族だよなー、と考える自分は多分、ネット上で騒がれているようなブラック企業には向いてないのだろう。自分の人生上手く行かなかったのが会社のせいだとしたところで、じゃぁ会社が骨折って自分の人生をやり直させてくれるのかってそんなわけ無いし。会社で作った人脈が助けてくれる事はあるのだろうけど、でもそれは知り合った個々人の働きかけに依存するもので、会社や組織それ自体が率先して世話してくれる制度になっているわけでも無いし。
BCELで実験した時のjavaファイル,classファイル詰め合わせセット:
添付ファイル/2009/10/12/bcel_tests.zip
別途 bcel-5.2.jar が必要です。
中身の解説:
clas3hiftで挫折した経緯についてつらつらと。
Java/clas3hift でclas3hiftを紹介したが、現実的には殆ど使えない。SandBox環境でインナークラス・ネストクラス記法が使えないのは不便だし、なにより差し替え対象となるクラスに制限が大きすぎる。
10/10, 11, 12 の3連休をclas3hiftに費やした(実際には正味二日間ほど)が、どこで躓いたのか、何故あんなに制限だらけになっているのか、振り返ってみたい。なお思いつくままに適当に書いていくので、実際に手を動かした順番にはなっていない。
staticメソッドばかりを詰め込んだクラスがあって、そのstaticメソッドを使いまくってるソースコードをどうにかしてJUnitにかけようと思った。
→めんどくさいので諦めた。
→でもなんとなく頭に来てるので、せめてクラスのすげ換えだけでもできないか、ClassLoaderの資料とか読み込む。
→とりあえずPoCは動いたので、せっかくなのでGoogleCodeに登録。
→でもtestが通らない・・・。Eclipse上で作成したPoCは動いたのに。何故?(今ここ)
テストが無い、いわゆるLEGACYなJavaクラスをテストしようとした時、インスタンス渡しで中で使われているものについてはEasyMockなどで何とか逃げれると思います。しかし、
AppUtils.calcFooBar(int i, int j)
みたいに、クラスのstaticメソッドと通信しまくっているコードはEasyMockも使えませんしテストしようがありません。
そういうときに、テストコードをSandBox化し、その中で"AppUtils"を使おうとすると、裏側では"test.AppUtils"に自動的に置き換えてくれるようなライブラリをイメージしてます。
"class shift" で、"s"が3つ続くので "clas3hift" になりました。shiftというのは、shellscriptとかで引数を一つずつずらしていくアレのイメージです。なんとなく、ダルマ落としを思い浮かべての命名でした。
技術/TDD/JavaでUnitTestでprivateメンバにアクセスしたい場合 でPrivilegedAccessorを使ったprivateメソッド (というか非publicなもの全体)のテストについて調べたが、どうやら JUnit-addons というのも暫く前からあって、こちらでもprivateメソッドをテストできるようになるらしい。
「らしい」というのは実際にDLして動かしたりしてないから。というか対応がJUnit3.7/3.8で停まっているらしく、2009/10時点でのJUnit4.x系列には対応しているのか居ないのか不明。
他にも日本語のJUnitのWikipediaによると "JxUnit" (xは小文字)というのもprivateメソッドをテストできるらしいが・・・
http://ja.wikipedia.org/wiki/JUnit
ただし、2009/10現在、"JXUnit"(xが大文字)はあるのだが、これはどうやらテストデータを分離するフレームワークのようで、XMLにテスト情報を記述してディレクトリ構成を整える事で実行してくれるとかそんなやつらしい。
「らしい」ばっかりになっているが、いずれにしてもprivateメソッドをテストするのは一苦労らしい。
・・・もういっそのこと、アクセス制御止めちゃえば?と思いたくもなる・・・。いや、だってさー、privateがなまじあるから、場当たりに「あ、この処理はprivateにまとめちゃえ~」って場当たりなメソッドがぐちゃぐちゃ増えてくるような気がする。いっそ全部publicで良いじゃん?publicにしちゃえば少なくとも多少はIF考えるようになるし、それでもぐちゃぐちゃになる時はぐちゃぐちゃになるんだから・・・。それに、ぐちゃぐちゃにされても、それでも、リフレクション使ったライブラリを使わなくてもpublicだからじゃんじゃんテストコードを書けるというのは結構ストレス少なそうなんだけど。
まぁ単体テストについて言えばオブジェクトなりクラスの「外からの/外への」IN/OUTを調べるのだからそもそもprivateなメンバを調べないとイケナイというのがおかしいといえばおかしいのだけれど。
JavaScript/select-optionタグによるメニューの動的更新 でselectメニューをonMouseOverで動的に<option>のラベルを更新するサンプルを試したが、実際のお仕事では更新データはAjaxを用いてXMLをAPIから取得している。その後、JavaScriptのDOMを使って値を取り出すようにした。
すると同じ現場のベテランが、「JavaScriptのDOMをそのままXML解析に使うと嵌りやすいから止した方が良い。APIもうちが作ってるので、JSONで返すようなオプションを付けてeval()した方が良いよ。」と教えてくれた。
どういう事かと聞いてみると、ブラウザ間でホワイトスペースノードを始めとして非互換な挙動があるとのこと。以下のURLを教えてくれた。
今回使ったAPIは幸いにして改行やホワイトスペースノードが存在しないXMLを返してくれていたので、「偶々」クロスブラウザでも正常に動いていた。
実のところ今までAjaxで、特にJavaScriptでのXML操作を仕事で取り組んだ事が無かったので、こうした嵌りどころに対してまだまだ無知な状態である。教えてくれてありがとうございました。
・・・で終わるのも何だかスッキリしないので、ホントにホワイトスペースノードの挙動が違うのかどうか確認してみる事にしました。あと、仕事ではprototype.jsを使っているのだけれど(XML無しの)JavaScript操作としてはjQueryの方が使用回数が多い。そこで、jQueryでAjaxで取ってきたXMLを操作するのどうしてるんだろうとさっと検索してみたら・・・
→有り難い事に、Ajaxで取得したXML DocumentをラップしてHTML DOMと同様のselectorが使えるようになっている。
ふと思い出したが、Ajaxが流行始めの事、prototype.jsが日本でも騒がれ始めた初期に、JKL.ParseXMLのようなXML解析ライブラリが合わせて紹介された時期があった。
こうしたライブラリが出てきたのも、JavaScriptでのXML DOM Element操作のクロスブラウザ問題を考えれば納得が行く。
戯れ言はこの辺にして、実際にホワイトスペースノードの挙動を確認してみる。
HTML/JavaScriptなどは一通り次のzipファイルに収めてあるので、実際に動かしてみたい方はダウンロードして下さい。
xmldom_whitspace_crossbrowser.zip