2013-06-10
■ [ubuntu] Ubuntuにthe silver searcherを入れてみた
the silver searcher(Ag)はgrepとかackとかrakみたいな検索ツール。速いらしい。
aptで入らないらしいので、ソースからコンパイルする。
$ git clone https://github.com/ggreer/the_silver_searcher
$ cd the_silver_searcher
$ aptitude install automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev (READMEにあるとおり)
$ ./build.sh
agというファイルができるので、パスを通す。
あとは
$ ag foo
とかで、カレントディレクトリ以下の全ファイルから"foo"を探すことができる。
あと.agignoreというファイルを作って
log
とか書いておくと、log/* は検索に引っかからなくなるみたい。便利。
■ [ruby] TRICKみたいなコードをどうやって思いつくのかを解説してみる
RubyKaigiの感想など見ていると、TRICK枠はわりと(一部の人に?)とても好評だったようで嬉しいです。
ということで、壇上でも少しだけ触れましたが、「どうやってこういうのを思いつくのか?」という方法をいくつか解説してみます。
1. Rubyの特定の機能に着目する
この分野のコンテストではIOCCCが有名ですが、RubyにはC言語にはないさまざまな機能があります。クラスやオブジェクトもそうだし、さまざまなリテラル、文法、予約語、それからRubyGemsもありますね。
これらの一つに着目して、何か変わった使い方・派手な使い方・極端な使い方はないかと考えてみるのが一つ目の方法です。例えば投稿1の方は「例外(のクラス名)」に着目して、そこから何か文字列を取り出せないかと考えた結果生まれました。
2. 制限をかける
真っ白な紙を渡されて「何か描いて」と言われてもすぐには何を描けばいいのか思いつかないように、高すぎる自由度はかえって発想を困難にします。そういう時は、「赤いもの」「丸いもの」といった具合であえて対象に制限をかけることで、アイデアを生みやすくすることができます。
TRICKでいうと、例えば「JUST ANOTHER RUBY HACKERという文字列を出力する」というのが制限の一つになります。また1.の反対で、「○○を使わずにプログラムを書く」という枠組みでもいろいろな制限が考えられます。
3. 他の分野からアイデアを拾う
最後の方法は、他分野の何か面白いものを見つけたらそれを抽象化して、プログラミングに置き換えてみることです。例えば投稿2の方は「Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffaloは文法的に正しい英文である」というWikipediaのページがTwitterに流れてきたのを見て、それをRubyに置き換えてみたものです。
もう一つ例を挙げると、これはジャグリングの公演の動画ですが、途中で「道具をたくさん投げるのだけど、全部はキャッチせず、あえて落とす」というパターンが出てきます(動画はtrailerなので一瞬だけですが)。これをプログラムに置き換えてみると、「あえてエラーを出す」「エラーを出して例外でキャッチする」「スレッドがたくさん走っていて、一部がエラーになるんだけど一つだけ成功する」といったアイデアが思いつきます。
もちろん、着想だけでは作品になりません。実際、今回も2, 3個のアイデアは作品という形にならず、ボツになっています。それでも書いているうちに別のアイデアが見えてくることもあるので、とりあえず手を動かしてみることが重要かと思います(自分用のメモ)。
アフィリエイト
最後の物事を抽象化して考えるという話は、森先生の『人間はいろいろな問題についてどう考えていけば良いのか』という新書に詳しく書かれています。この本は単独の紹介エントリを書きたいところですが、書かないかもしれないので、ここに貼っておきます。書名からはなんとなく国家間紛争や難民問題みたいなものを想像しますが、実際は「抽象的に考えるとはどういう意味か」「抽象的思考のメリット・練習法」みたいな話です。
4106105101