Just another Ruby porter,

〜2006年10月下旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2006-10-21 (Sat)

[CodeGolf] 99 Bottles Of Beer

突然ひらめいていままでとはまったく違う方法で177バイトまできた。
いきなりRubyのトップだ。ヒントとしてはループは使わずに変数は1個だけ。
さすがにもう小さくなりそうもないので次の Numeric Diamonds へ進もう。


2006-10-22 (Sun)

[Ruby] rakeがエラー

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

で解決。


2006-10-23 (Mon)

[Ruby] trueとfalseのto_int

trueとfalseのto_intが1と0を返せば

"#{'s'*i>1}"

ができていいなと思ったら、優先順位的には

"#{'s'*(i>1)}"

じゃないといけないようだ。それなら

"#{'s'if i>1}"

と同じ長さなわけで意味がない。false.to_sが""なら

"#{i>1&&'s'}"

と書けるんだけどなあ。


2006-10-24 (Tue)

[Gmail] Gmail Macrosが動かなくなった

Gmail側でなにか変わったらしくGmail Macrosがいきなり動かなくなった。
会社のWindows版Firefoxと家のLinux版Firefoxのどちらも同じだったので、
やっぱGmail側だよなあ。


2006-10-25 (Wed)

[Linux] yumが調子悪い?

最近run-parts /etc/cron.dailyのメールが来てないことに気づいた。
ps auxww|grep yumしてみると19日に実行されたyumが止まってるようだ。
殺してyum check-updateしてみても反応ない。あれ?どうなってんの?
これじゃ、FC6にも上げられないな。FC6は来週末の連休にしよう。

[Ruby] riが遅い

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

意外と便利だ。


2006-10-26 (Thu)

[Ruby] 記号ゴルフ

「非記号3Bの24B」って長いから「3H24B」って表記することを提案。
と、どうでもいいところをゴルフしてみる。

[Linux] sudo yum -hが停止

昨日の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

と言われてしまう。なんでやねん。一難去ってまた一難。単に混んでるだけ?
ぐぐってみるとミラーサーバを変更しろって話になってるげ。


2006-10-27 (Fri)

[Ruby] 記号ゴルフ

「標準入力から文字列を読み込んで、奇数行目の文字列だけを出力するコードを書け」
というお題。-pオプションを使えば非記号は0にできる。

% ruby -e 'puts [*1..10]' | ruby -pe '$_*=$.&$./$.'
1
3
5
7
9

かなり反則技ではあるが。

[Firefox] Windows版Firefoxのロケーションバーで中クリック

about:configでmiddlemouse.pasteをtrueにすれば、
Xのように中クリックでペーストできる。
ついやっちゃうんだよねえ。


2006-10-28 (Sat)

[Linux] またyumが止まってる

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をダウンロードしておこう。


2006-10-29 (Sun)

[Ruby] Hashでシンボルと文字列のキーを同一視する

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=が存在しないんだな。


2006-10-30 (Mon)

[Linux] 原因はyumじゃなくてrpmだった

psして怪しいプロセスを調べてみたらrpmqが長いこと動き続けていた。
こいつが元凶か。タイミングがいいことに rpmのデータベースのrebuild話 が。
やってみたら復旧したようだ。ありがとうございます。


2006-10-31 (Tue)

[Linux] dnsmasqふたたび

なんか名前を引くのに時間がかかってる気がするので、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台だけじゃ意味がないが。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!