何か創りたい

2日は友人と御飯食べてその後友人宅でボードゲームをしてた。ブロックスっていうゲームで、単純だけど4人でやったから戦局に対して自分の支配力が小さくて、勢いみたいなものでゲームが決まって面白いゲームだった。終わった後に勢いが色で分かるのも良い。終わった後の譜面を見て学習できるのも良いと思う。欲を言えばそこで次の局に行くのを止めて、しばらく考察したかった。優劣がその出来事の外に反映されないイベントにおいて何か分からないけど終わったというのは、大体最悪な結果だと思う。

何か創りたい

何か創りたいという気持ちがある。去年の暮れまでは研究で脳が死んでて駄目だった。twitterでつぶやいたら、つくりましょうとかなんか一緒にやりましょうとか言ってくれる人が居て嬉しかったので何かやろうと思う。あと今日買い物行ったときに漫画屋に入ったらすごい欲しいサービス思い付いた。普段Amazonで買うから漫画屋とか絶対入らないと思ったけど入って良かった。サービス思いつこうとする時に「自分だったら普段しないかもしれないけど普通の人はしてそうなこと」を体験してないと思い付かない、みたいなのは結構ある気がして、それが難しいと思う。勢いとか外力とかそういうものに身を委ねない限り必ず自ら進んでやることはないであろう体験に不便さが詰まっていて、発想を得ることが多いが、そういう体験を自ら増やすのは相当難しい。真摯さがいると思う。便利なものつくろうとしたときにそこにしんどさがあると思う。昔は赤魔道士みたいに何でも出来るのがかっこいいと思ってたけど、何かもっとこう万物を味方にしていて触れるものを輝かしていく感じの、錬金術師みたいなイメージに焦がれてる。

フレームワーク

つぎ創りたいもの、Railsで作るとController1つModel1つみたいになりそうで、Sinatraとかでいいかなとか思ってる。でもPadrinoが気になってるので使いたい。本当はこういうControllerとかの単位で数えて1個だし小規模だからこのフレームワーク使うわみたいな安直な指針は良くないのかもしれない。フレームワークの特性ってもっとちゃんとした要素で決定できそう。今回についてはPadrinoは未経験なので使わない理由が無さそう。twitterで寝言のようにPadrino、Padrinoと言っている人がいて無意識に気になってる。映画の中にたまに1フレームだけ美味しそうなものの広告を出して映画後に食べたくさせるとか、子供の頃から親が暴力を振るっている姿を見て育ったので暴力的になるとか、もはやそういうものに近い感じだと思う。
最近Modelの設計に困ってるから、多くのものを知ってその上でどうすべきか見極めたいという気持ちもある。オレオレフレームワーク作らないといけないとき、どこから設計考えるかとか考えてたけど、まず俺考最強APIを作るのが良さそう。そのためにも俺よりも強いAPIに会いに行く必要がある。

『Rubyベストプラクティス』の電子版読んでる

年始なのでやる気出して技術書も読もうと思ってRubyベストプラクティスを読み始めた。英語版はPDFで無料公開されているけど、日本語の方が高速に読めそうなのでO'Reillyで日本語版をダウンロードした。入浴中にiPadで読んでる。

1章は既に英語版で読んでたけどテストしようぜという話だった。テストもっと高速に書けるようになると良さそう。最近Mechanizeを沢山使ってテスト書いてるけど結構上手くいってて気持ちいい。Webアプリで細かいテスト書くよりも、仮想ユーザにどう使われるかみたいな統合テストが1本書いてあった方が分かりやすいしほとんどの場合十分だと思ってる。

2章はかっこいい引数のメソッドつくろうぜという話だった。デフォルト引数とか与えられるけど、順序が問題になることもあるし、Hashで渡した方が良さそうという話だった。メソッドに必須の値は普通に引数で渡して、任意の値はHashで渡すのが良いみたいな感じだった。他にもブロック便利だからどんどん使おうという話もあった。Perlも同じ感じでやればいいかなと思ったけど、%optで受け取るか$optで受け取るかみたいな違いがあった。見た目が綺麗だから普段は%optで渡してることが多い気がするけど、頭痛くなってきたからひとまずPerlのことを考えるのはやめた。

3章は動的な機能を使って少し難しいけどかっこいいことしようぜという話でいま読んでた。method_missingとかinstance_evalとかのいわゆる黒魔術とかリフレクとかの話がでてきた。method_missingは研究で作ってるフレームワークで使ってるけど、大した実装するわけではない場合にメソッドのインターフェースや実装が綺麗になって便利だった。ここらへんの話はこの本読むよりメタプログラミングRuby読んだ方が順を追って理解できるからそっちを読んだほうが良いと思う。次のようなものを使う話が出てきた。extend/includeとか実は自分で使ったこと無くて、でも本文中に「まあextendがクラスレベルでメソッドを定義し、includeがインスタンスレベルでメソッドを定義するというのは知っているとは思いますが」というような言葉が出てきて挙動を初めて知った。そういうところで回収できるのは良いけど、奇跡的にたまたま学べているみたいな状況が逆にかなり怖いしちゃんと知りたいとは思いつつも、知らない部分だけまとまっているという本はなかなか無くて難しそう。

  • define_method
  • undef_method
  • singleton = class << obj; self; end
  • alias_method
  • instance_methods
  • extend / include