〜2006年10月下旬〜
突然ひらめいていままでとはまったく違う方法で177バイトまできた。
いきなりRubyのトップだ。ヒントとしてはループは使わずに変数は1個だけ。
さすがにもう小さくなりそうもないので次の
Numeric Diamonds
へ進もう。
CodeGolfのチェックが面倒なったのでMakefileでも書こうと思った。
いや、今ならRakeかと
task :default do sh 'ruby 99-bottles-of-beer.rb | diff -U1 99-bottles-of-beer -' end
のような簡単なRakefileを作ってrakeを実行してみるも、なぜかエラー。
--traceオプションで実行してみると
wrong number of arguments (3 for 2) /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake.rb:725:in `fu_check_options' /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake.rb:725:in `sh' <後略>
ってことらしい。
そういえばfileutils.rbの変更でそんなエラーになると聞いた覚えがある。
これか。なるほど。
ベータバージョンでは直ってるので
gem update --source http://onestepback.org/betagems rake
で解決。
trueとfalseのto_intが1と0を返せば
"#{'s'*i>1}"
ができていいなと思ったら、優先順位的には
"#{'s'*(i>1)}"
じゃないといけないようだ。それなら
"#{'s'if i>1}"
と同じ長さなわけで意味がない。false.to_sが""なら
"#{i>1&&'s'}"
と書けるんだけどなあ。
Gmail側でなにか変わったらしくGmail Macrosがいきなり動かなくなった。
会社のWindows版Firefoxと家のLinux版Firefoxのどちらも同じだったので、
やっぱGmail側だよなあ。
最近run-parts /etc/cron.dailyのメールが来てないことに気づいた。
ps auxww|grep yumしてみると19日に実行されたyumが止まってるようだ。
殺してyum check-updateしてみても反応ない。あれ?どうなってんの?
これじゃ、FC6にも上げられないな。FC6は来週末の連休にしよう。
riって遅いよねえ。というわけで、キャッシュするシェルスクリプトを作った。
#! /bin/sh cachedir=$HOME/.fri mkdir -p $cachedir args="$@" cachename=$cachedir/"$(echo -- $args | md5sum | cut -d' ' -f1)" if [ ! -e $cachename ]; then ri -T "$@" > $cachename fi ${PAGER-less} $cachename
意外と便利だ。
「非記号3Bの24B」って長いから「3H24B」って表記することを提案。
と、どうでもいいところをゴルフしてみる。
昨日のyumの件を調べていたら、yum -hすら止まってしまうことが判明。
straceしてみると、
open("/var/lib/rpm/Packages", O_RDONLY|O_LARGEFILE) = 3 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 fstat64(3, {st_mode=S_IFREG|0644, st_size=75460608, ...}) = 0 futex(0xb7483ba0, FUTEX_WAIT, 2, NULL
で止まってる。futexってなに?man futexしてみると、
「futex - 高速ユーザ空間ロック機構のシステムコール」とあった。
ロックが取れないってことか。誰が握ってるのかわからないけど、
だったら再起動で解決?おお的中。
しかし、
% sudo yum check-update Loading "installonlyn" plugin Loading "fastestmirror" plugin Setting up repositories core [1/4] Cannot find a valid baseurl for repo: core Error: Cannot find a valid baseurl for repo: core
と言われてしまう。なんでやねん。一難去ってまた一難。単に混んでるだけ?
ぐぐってみるとミラーサーバを変更しろって話になってるげ。
「標準入力から文字列を読み込んで、奇数行目の文字列だけを出力するコードを書け」
というお題。-pオプションを使えば非記号は0にできる。
% ruby -e 'puts [*1..10]' | ruby -pe '$_*=$.&$./$.' 1 3 5 7 9
かなり反則技ではあるが。
about:configでmiddlemouse.pasteをtrueにすれば、
Xのように中クリックでペーストできる。
ついやっちゃうんだよねえ。
ps auxww |grep yumしてみるとまた止まってた。straceすると
% sudo strace -p26818 Process 26818 attached - interrupt to quit futex(0xb7bba160, FUTEX_WAIT, 2, NULL <unfinished ...>
同じか。困ったもんだな、これ。何が原因?
面倒なのでsudo killall -9 yumして殺す。
その後sudo yum search dnsmasqしてみると最後に止まる。
またstraceするとfutexで止まってる。うーむ。
そういえば、これってkernel上げてから起きてるな。
そのあたりに原因があるのか?
とりあえずazureusでFC6のdvd imageをダウンロードしておこう。
hash[key.to_s]すればいいだけの話ではあるが、Hash.newのブロックに指定してもできることに気づいた。
大文字小文字も対処できる。
% irb h.rb >> hash = Hash.new do |h, k| ?> h[k.to_s.downcase] >> end => {} >> hash.update "abc"=>"def" => {"abc"=>"def"} >> hash[:abc] => "def" >> hash["AbC"] => "def"
でもnewしてupdateってのが煩わしい。
hash = Hash.new{|h,k| h[k.to_s.downcase]}.update "abc"=>"def"
とするのもなあ。
そういえばHash#default=は存在するけどHash#default_proc=が存在しないんだな。
psして怪しいプロセスを調べてみたらrpmqが長いこと動き続けていた。
こいつが元凶か。タイミングがいいことに
rpmのデータベースのrebuild話
が。
やってみたら復旧したようだ。ありがとうございます。
なんか名前を引くのに時間がかかってる気がするので、dnsmasqを入れた。
ppp接続してたときにはお世話になったわけだが、dnsmasqは設定が簡単でいいよねえ。
とりあえず今使ってるresolv.confを元に
% sudo cp /etc/resolv.conf /etc/resolv.dnsmasq
として/etc/dnsmasq.confは
resolv-file=/etc/resolv.dnsmasq expand-hosts
の2行だけ有効に。あとは/etc/resolv.confの最初に
nameserver 127.0.0.1
を追加しとけばok。これでキャッシュされるようになる。
expand-hostsを有効にすると/etc/hostsに書いた内容も引けるようになる。
1台だけじゃ意味がないが。