2011-01-01から1年間の記事一覧

旅の恥とirbは使い捨て

.screenrcに以下のように追記した。 escape ^Jj : : bind -c app t screen top bind -c app i screen irb : : bind ^j command -c app「escape ^Jj」という指定で、標準だとCtrl-aのscreenのキーバインドをCtrl-jにしている。主に指の健康のため。で、2打目…

Rubyのensureはどのぐらい強いか

catch(:goto) do begin puts "hey" raise rescue puts "rescued" throw :goto exit 1 ensure puts "ensure" end end puts "caught" % ruby rescue.rb hey rescued ensure caughtなるほどなぁ。exitよりもensure。ensureの利用目的を考えると、そうなのかも。…

RubyのFileとFileUtilsの違い

何となくモヤッとしたまま必要なときにメソッドを調べて使っていたけど、FileとFileUtilsの違いは、Fileが文字通りファイルを抽象化するクラスで、その属性やタイプを調べたり、読み書きしたりするためのもの。ファイルをオブジェクトとして扱うだけではなく…

RubyのTime#strftimeを覚える(これっきりにしたい)

RubyのTime#strftimeのディレクティブは対称性があるように見えて、そうでもない例外があって覚えづらい。 %a - The abbreviated weekday name (``Sun'') %A - The full weekday name (``Sunday'') %b - The abbreviated month name (``Jan'') %B - The full…

ハフマンツリーをRubyで書く

ハフマン符号化に使うハフマンツリーをRubyで作ってみた。2本のキューを用意して、2つのノードをくっつけたり出し入れするのが簡単というのでそういう方針で。本当は1本はプライオリティ・キューでないとエンキュー時にソートするために効率が悪い。 # Huffm…

Rubyでぷよぷよ19連鎖

http://okajima.air-nifty.com/b/2011/01/2011-ffac.html にある、連鎖するプログラムを書けというやつ。大きな方針として、最初から以下のようにすべきだった。オブジェクトは各種状態を1つだけ表現するようにして、次々と状態が隣接状態を作るという。やっ…

cronでrakeが動かない問題

「man 5 crontab」とやれば書いてあるけど、Ubuntu(たぶんDebianも)のcronで、rakeが上手く動かないように見えた問題は、環境変数絡みだった。cronはSHELL、LOGNAME、HOME、PATH、NAMEなどの最低限の環境変数を独自に設定して/bin/shを呼ぶ。cronのPATHに…

Cで文字列を反転させる再帰関数

c

Cで文字列を反転させる関数を再帰を使って書け、という問題をふと思い出して書いてみた。久しぶりにCを書くと一発でコンパイルが通らなかったりする。で、プロトタイプ宣言なしだと、小粒の関数から順に並べないとダメだったりして、どうも気持ち悪い。抽象…

クラスが分からない

人気の高いライブラリのコードを読んだりすると、ナルホドそうやってクラスやモジュール、処理を切り分けるのかなんて思うけど、自分で書くとなると、なんだかむちゃくちゃ。読めるけど書けない、聞けるけど話せないというのは外国語の学習では普通のことな…

ぷよぷよ19連鎖にRubyで2時間かかった。

http://okajima.air-nifty.com/b/2011/01/2011-ffac.htmlまたしても2次元配列の初期化を間違えてハマったり、再帰による探索で初歩的なミスをしたり、なにより状態とクラスの扱いをどうするべきかで各関数の出し入れに統一感がなくぐちゃぐちゃになり、とい…

zshでmkdirとcdを一緒にやる

mkdir hoge; cd hogeが面倒なので、.zshrcにコマンドを追加した。なぜ、bashにもzshにも標準でこれが入ってないのだろうか。 function mkcd() { if [[ -d $1 ]]; then echo "It already exsits! Cd to the directory." cd $1 else echo "Created the directo…

Rubyでinvalidなバイト列を含むUTF-8文字列を扱う

Ruby 1.9系ではStringオブジェクトにエンコーディング情報が付加されていて、マルチバイトや複数エンコーディングを扱う日本人としては嬉しい限りだけど、時々エンコーディング関連で例外が発生して落ちすぎるぐらい落ちるように感じるときがある。ちょっと…