hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
03/05/2010 ふむ [長年日記]
■ [golang] リフレクション
先日の Go の記事 で取り扱おうかどうしようかと最後まで悩んだ末に除外したリフレクション.
先日所用にて適当な HTTP サーバを Python でさっと書いたのだけれど,さて Go でこういったものを書くとどうなるだろうと思い,書いてみたらリフレクションの良い (かどうかは分からないけれど) 例になりそうだったので紹介してみようかなと思い筆をとった次第.
これ がソースコード. Python の BaseHTTPServer 相当とするために reflect を使っていて,ビルトインの http を wrap する形で実装した. 効率はあまりよろしくないけれど,まあシビアな用途でこんなの使わないので充分でしょう. ちなみに Makefile は x86 と x86_64 にしか対応してないのであしからず :-)
handler.Handle() はあるオブジェクトから do<METHOD> という名前のメソッドを走査して,マッチしたらそのメソッドを http.Conn と http.Request と共に呼び出す. 「あるオブジェクトを調べて,ある名前を持つメソッドを抽出して呼び出す」,これを行うために,reflect.Typeof() で得た型情報からメソッドの名前を,reflect.NewValue() で得た値情報からメソッドそのものをそれぞれ得ている.
main からは CCHandler が渡されているので,CCHandler に実装された doGET() と doHEAD() がリクエストに応じてよしなに呼び出されるという案配. 例えば HOGE とかいうリクエストメソッドを作りたければ doHOGE() を実装するだけ.
実は reflect.Typeof() で得た型情報からもメソッドそのものを得ることは可能なのだけれど,型情報から得たものは特定のレシーバにバインドされていないので,こちらを利用する場合,Call() 引数にレシーバとしてオブジェクトを渡してやる必要があったりする. ここら辺は Python に慣れ親しんだ人には違和感ないと思うのだけれど,Python を触ったことのない人には「は?」という感じかも知れない.
ちなみに CCHandler の CC はチョメチョメの略です.
03/06/2010 むう [長年日記]
■ [戯言] caps/ctrl
自分は英語配列のキーボードに慣れている人なのだけれど,別に日本語配列を使えないわけではなくて,どちらでも良い. 記号等の配列の違いは作業の効率にそこまで大きな影響はない.
けれど,ctrl だけは a の左隣にないと発狂しそうになる.
自分は本物のブラインドタッチができない. ホームポジションなにそれおいしいの?
で,左手小指は全く使わない.となると ctrl は薬指で使うわけ. alt や win キーの隣にあるキーを薬指で打てるか!?
特に端末エミュレータや Emacs やその互換系を操作しているときは C-a, C-e, C-k, C-u, C-h, C-d, C-f, C-b, C-p, C-n, C-r, ...ともう ctrl キーのオンパレード.
もうね,指がつりそうになるわけですよ. そのうち諦めて矢印キーとか BS キーとか使い始める. カーソル合わせだの何だのって,割と無意識に行う作業. それを意識的にしなきゃいけなくなるので,作業効率が目に見えて落ちる.
ていうか caps なんか存在意義すら怪しいキーなんだし,どんな配列でも a の左隣と alt の隣辺りの 2 箇所に ctrl を配置すればいいのに.
□ matsuu [発想を変えてctrlをあまり使わないVimに私は乗り換えました。readlineではバリバリctrlてすが ]
□ atzm [自分の環境は自分用にカスタマイズするので何でも良いのですが,他人の環境で操作するときヤバイです. 人によって開いてる..]