今日は、元同僚とXP祭に行ってきた。
勉強会は、Rails勉強会に参加させてもらって、なんとなくイメージが掴めていたのだけど。。。「祭」のためか、最初思い描いていたものとだいぶギャップがあった。まぁ、こういうものなのね。
そのためか、一番私がよかったと思ったのは、C言語で組み込みをTDDで行こうってな内容のものだった。構造体をクラスの型として、その構造体のメンバをフィールドとして、OOPっぽく書こうというもの。メソッドは、その構造体のポインタを渡して、フィールドをごにょごにょして返したりするって感じ。なんか、PerlとかPythonは第一引数がそんな感じがするね。ほとんど書いたことがないからあってるかどうかは知らないけど。
まぁ、XPはコミュニケーションを積極的にしていかないといけなさそうだということはわかってきた。TDDだけじゃなくてね。
そう言えば、今日来ていた本間さんは、昔NHKのビジネス英語を担当していた本間さんの兄弟の方でしたね。その番組は、私が英語に狂っていたときにビデオで録画してよく見ていた。で、そこで、「相手との商談、もしくは上司を説得させるときの一言」として、彼が言っていた「Say, YES!」の言葉が忘れられない。言い方がね。「セイ、イエース!」って。ははは。
まつもとさんの講演は。なるほど。勢いのある方ですね。ってのが率直な感想だ。キャズムの話をしていたけど、普通のプログラマのためのRubyをアピールしていたことに、「へー」って感じだ。アーリーアダプターだけでいいような気もするけど、好きなことで飯を食っていこうと思えば、やっぱりマジョリティを引きつけることも大事なのかな。
あぁ。XPに関して一つ気になるのは、就業時間についてかな。XPは実践することが大事だと言われているし、思うのだけど、その実践の中に、週40時間?50時間?ってのがあったと思うんだよね。飲み会に参加しなかったから、そのことを聞くことができなかったけど、実際にXPを実践している人ってどうなんだろう。「みなさんは、忙しい。」とか、「徹夜」ってことをよく聞いたけど、実際問題、XPを実践することにおいて、就業時間はどうなっているのかなーなんて思ってみたりした。私は勝手に、XPをするってことは、徹夜で作業をすることの、反対にあるものだと思っていただけに、ショックだった。
確かに、私が最近遊びでプログラムが書けるのもデスマーチなプロジェクトにいないからで、仕事で、徹夜の連続だったら、創造性も何もないと思うのが率直な感想。つーか、冗談抜きで、それは鬱になるな。あ。あと、最後にコミュニケーションが大事で、連番で付けようというときに、「いや、それはまずいだろう」と思って、話し合いで一発で解決しなければ、やっぱり私は引いちゃうなー。使う言語によるけど、その言語がオブジェクト指向言語であれば、「そのくらい察してくれ!」と思ってしまう。そうでない人であって、一言言って変わらない人だったら、諦めそう。。
あ。あと平鍋さんのプレゼンは良かった。40歳とはとても思えないな。見た目はかなり若い。今日何度もあがってきた言葉の「ふりかえり」は、なんだかメタ認知的活動みたいね。でも、自分がふりかえるだけではなく、チームがふりかえるということが必要なんだろうね。
で、XPに関して個人的に思ったこととして、実践共同体、正統的周辺参加、メタ認知的活動といった言葉が合いそうでした。って、私が学生のときにやっていたテーマじゃん。こんなところで「こんにちは。」ですか?
最近やけにkernel panicが起きて、嫌になる。
で、ウノウラボさんでbadblockについて書かれていたので、チェックする。つーか大丈夫だった。
で、前から気づいていたのだが、DVDROM Driveを認識するときとしないときがあるので、/var/log/messegeを洗っていると、やはり。。。
Sep 23 08:52:09 muse kernel: hdc: status error: status=0x00 { }
Sep 23 08:52:09 muse kernel: hdc: status error: error=0x00
Sep 23 08:52:09 muse kernel: hdc: status error: status=0x00 { }
Sep 23 08:52:09 muse kernel: hdc: status error: error=0x00
Sep 23 08:52:09 muse kernel: hdc: status error: status=0x00 { }
Sep 23 08:52:09 muse kernel: hdc: status error: error=0x00
Sep 23 08:52:09 muse kernel: hdc: status error: status=0x00 { }
Sep 23 08:52:09 muse kernel: hdc: status error: error=0x00
Sep 23 08:52:09 muse kernel: hdc: DMA disabled
Sep 23 08:52:09 muse kernel: hdc: ATAPI reset complete
.. snip..
Sep 23 08:58:30 muse kernel: Unable to handle kernel NULL pointer dereference at virtual address 000
00000
Sep 23 08:58:30 muse kernel: printing eip:
Sep 23 08:58:30 muse kernel: c016f6e7
Sep 23 08:58:30 muse kernel: *pde = 00000000
Sep 23 08:58:30 muse kernel: Oops: 0002 [#1]
Sep 23 08:58:30 muse kernel: Modules linked in: i2c_dev i2c_core arc4 ieee80211_crypt_wep ds ipt_REJ
ECT ipt_state ip_conntrack iptable_filter ip_tables button battery ac yenta_socket pcmcia_core uhci_
hcd ehci_hcd hw_random snd_intel8x0m snd_intel8x0 snd_ac97_codec snd_pcm_oss snd_mixer_oss snd_pcm s
nd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore ipw2100 ieee80211 i
eee80211_crypt e1000 floppy dm_snapshot dm_zero dm_mirror ext3 jbd dm_mod
Sep 23 08:58:30 muse kernel: CPU: 0
Sep 23 08:58:30 muse kernel: EIP: 0060:[] Not tainted VLI
Sep 23 08:58:30 muse kernel: EFLAGS: 00010287 (2.6.9-42.0.2.EL)
Sep 23 08:58:30 muse kernel: EIP is at create_empty_buffers+0x14/0x127
Sep 23 08:58:30 muse kernel: eax: 00000000 ebx: c131f680 ecx: 00000000 edx: 00000000
Sep 23 08:58:30 muse kernel: esi: 00000000 edi: 00000000 ebp: c131f680 esp: dee4dd18
Sep 23 08:58:30 muse kernel: ds: 007b es: 007b ss: 0068
Sep 23 08:58:30 muse kernel: Process hald (pid: 3342, threadinfo=dee4d000 task=df0c8700)
Sep 23 08:58:30 muse kernel: Stack: 0000000c c17e3934 c016fff6 00000220 00000220 00000001 c14db900 0
0008000
Sep 23 08:58:30 muse kernel: 00000046 c17e3938 00000000 00000000 c01e848c c17e3854 c0174789 c
131f680
Sep 23 08:58:30 muse kernel: 00000000 c17e3938 c17e3934 c131f680 00000000 00000010 c014b0a7 c
131f680
Sep 23 08:58:30 muse kernel: Call Trace:
Sep 23 08:58:30 muse kernel: [] block_read_full_page+0x61/0x286
Sep 23 08:58:30 muse kernel: [] radix_tree_node_alloc+0x10/0x41
Sep 23 08:58:30 muse kernel: [] blkdev_get_block+0x0/0x4b
Sep 23 08:58:30 muse kernel: [] add_to_page_cache+0x8e/0x116
Sep 23 08:58:30 muse kernel: [] read_pages+0x97/0xdd
Sep 23 08:58:30 muse kernel: [] buffered_rmqueue+0x1c4/0x1e7
Sep 23 08:58:30 muse kernel: [] __alloc_pages+0xb4/0x29d
Sep 23 08:58:30 muse kernel: [] do_page_cache_readahead+0x243/0x262
Sep 23 08:58:30 muse kernel: [] page_cache_readahead+0x164/0x20a
Sep 23 08:58:30 muse kernel: [] do_generic_mapping_read+0x11c/0x403
Sep 23 08:58:30 muse kernel: [] __generic_file_aio_read+0x160/0x17a
Sep 23 08:58:30 muse kernel: [] file_read_actor+0x0/0xc9
Sep 23 08:58:30 muse kernel: [] generic_file_read+0x98/0xaf
Sep 23 08:58:30 muse kernel: [] __dentry_open+0xca/0x16a
Sep 23 08:58:30 muse kernel: [] filp_open+0x5c/0x70
Sep 23 08:58:30 muse kernel: [] autoremove_wake_function+0x0/0x2d
Sep 23 08:58:30 muse kernel: [] block_llseek+0x33/0xd4
Sep 23 08:58:30 muse kernel: [] block_llseek+0x0/0xd4
Sep 23 08:58:30 muse kernel: [] vfs_read+0xb6/0xe2
Sep 23 08:58:30 muse kernel: [] sys_read+0x3c/0x62
Sep 23 08:58:30 muse kernel: [] syscall_call+0x7/0xb
Sep 23 08:58:30 muse kernel: Code: 89 f0 e8 03 ff ff ff 89 44 24 04 8b 44 24 04 83 c4 0c 5b 5e 5f 5d
c3 56 89 ce b9 01 00 00 00 53 89 c3 e8 08 f7 ff ff 89 c2 89 c1 <09> 31 89 c8 8b 49 04 85 c9 75 f5 8
9 50 04 8b 4b 10 81 79 6c 3c
Sep 23 08:58:30 muse kernel: <0>Fatal exception: panic in 5 seconds
となっていた。で、例によってググってみると、DVDROM Driveのエラーっぽい。そりゃあ、最近CDROMブートしようとしてもできんわけだ。どうやらハードが逝っている。というわけで、とりあえず外すか。。
ところで、4日間実家に行ってきます。ネットのない環境で4日間。Services_YouTubeのドキュメント書いていますので、もう少しだけ待ってください。。すいませーん。
もちろん、アウェーなわけだ。
XPは、前から興味があると言っているわけだが、どうもその機会がない。まぁ、何を持ってXPという言うかにもよると思うのだが。。。確かにユニットテストは、余裕があるときや、リファクタリングするときは、するのだが、どうも時間がないときとか、一生懸命作ったところが、「あ。ごめーん、やっぱこうして!」なんて言われてしまうと「クソー!」なんて思って、テストを作るのが嫌になるときがある。
先日、私の唯一の同期が東京からオフィスに来て、ソースレビューをしていたのだが、突っ込まれてしまった。「この1, 2, 3, 4って何ですか?コメントに『後で外に出す』って書いてありますが、それはいつですか?」って。そこで、苦し紛れに、「前は数で管理するものでなかったんだ。そして、今回がんばって作ったところだったんだけど、鶴の一声で変更がかかってしまって。。。」と言ってしまう。いや、わかっている。私がいけないのだ!横着をしてしまった私がいけないのだ!早速、今日その、マジックナンバーを外に出した。
今回は、こうやって突っ込まれて修正したのだが、これってペアプログラミングの真骨頂じゃないの?つまり、横着な行為に対して、突っ込み合うということ。その結果、一人で作るものよりも質の高いものができあがると思うんだよね。
というわけで、XP祭り関西2006に行ってみる。しかし、ワッハ上方って。。。ドーンセンター。とか。。大阪はネーミングセンスが一味違うな。。
昨日、会社の帰りに烏丸三条の大垣書店に寄った。
特に用事は無かったが、コンピュータのセクションに行くと、pythonの書籍を発見した。
今まで、pythonはやったことなかったけど、どうなんかなーなんて思って、よく見てみると8/26発売と。
そして、よく考える。買うのはいいけど、本当にやるのか?そして、この「みんなのpython」はいい書籍なのか?と。
とりあえず、家に帰って調べる。なるほど。待望されたpython入門書のようだ。というわけで、今日また、大垣書店に行き、購入。値段は、2800円か。まぁ、安いものだ。「たのしいRuby」も、第二版が出たときに買おうと思っているわけだが、まだかなー。それまで、python本でも読んで遊んでいようかなーなんて思う。
ぜんぜん関係ないが、PEARのcall for voteに行こうと思った。待つのに疲れた。pythonやrubyやりはじめちゃうぜ。と言いつつ、昨日は、Cを勉強していたし。本業はPHPなんだけどなー。
最近は、もっぱらSeleniumのことを考えているのだけども、ドキュメントに不備があることを発見した。日本語のドキュメントもおかしいところが多々あるが、英語の方も間違っているっぽい。
たとえば、storeSelectedが普通に書かれているが、実はこれないっぽいのだ。
私も、なんか与える引数が三つあるんだけど、どうするのかなぁ、と考えていてフォーラムを探していたのだが、同じことを考えている人がいて、実は、storeSelectedってないんだよね。。。といったことが書かれていた。
http://forums.openqa.org/thread.jspa?messageID=6042រとか参照。
まぁ、XMLで書かれた内容をXSLTでよろしく変換かけて自動生成しているっぽいんだけど、それがうまくいってないのね。
むー。Selenium.prototypeから始まるもので、doXXXってのをよろしく、XXXだけとって、AndWaitを全部付けて、そして、(is|get)系は、verify, assert それぞれの Not版などを自動的に割り振ればいいやって思っていたけど、それではうまくいきそうにない。
他にも、assertFailureOnNextや、assertErrorOnNextとかが書かれていないし。。。
うーん。PEARにがんばって載せようと思ったけど、どうやらSeleniumの方をもっと理解しないとね。。
ちなみに、日本語のリファレンスでは、storeSomethingSelectedとか書いているけど、おそらくないし。英語の方のドキュメントでは存在しない。まぁ、見ている英語のリファレンスが間違っているのだから、頭が混乱してくることは、確かだ。。。
うーん。うーん。うーん。
Selenium RCのPHPクライアントを書いたときは、JettyのHTTP Connectionを切ってくれない問題でうまくいかないし、SeleniumのHTMLを自動生成しようとしたときは、間違ったコマンドがあるし、なんだかなぁ。つーか、ヲイラもSeleniumの開発に入るように努力すればいいのかな。JavaScriptは嫌いじゃないし。ソースを見た感じでは結構きれいだし。