Just another Ruby porter,

〜2010年12月上旬〜


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

2010-12-01 (Wed)

11月のspam

2200通ほど。先月忘れていることに気づいた。

逆転したビット列

reverseを使わないとするとunpackぐらいですねえ。

>> n = 4
=> 4
>> (0..2**n-1).map{|e| e.chr.unpack("b#{n}")[0].to_i(2)}
=> [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]

2010-12-02 (Thu)

man install info

Ubuntuでman install infoと実行したらinstall-infoが出てきて驚いた。
一方FreeBSDでman install infoと実行するとinstall-infoじゃなくて、
man install, man infoが続けて実行される感じになる。


2010-12-03 (Fri)

Monitor a file with tail with timestamps added

単純だけどなかなかいいアイデア。
画面に表示されるメッセージをファイルに落としてるときはタイムスタンプがないから、
そんなとき使えそうだ。

まあ、でもおれだったら

% tail -f file | awk '$0=strftime("%F %T%z\t")$0'

とするかな。


2010-12-04 (Sat)

findの-mtimeのずれ?

find . -mtime +1とやると1日以上古いファイルが見つけてくれるとふつう思うが、
実際は2日以上のファイルが対象となる。なぜか1日ずれるのが仕様らしい。

These tests are mainly useful with ranges (`+N' and `-N').

 -- Test: -atime n
 -- Test: -ctime n
 -- Test: -mtime n
     True if the file was last accessed (or its status changed, or it
     was modified) N*24 hours ago.  The number of 24-hour periods since
     the file's timestamp is always rounded down; therefore 0 means
     "less than 24 hours ago", 1 means "between 24 and 48 hours ago",
     and so forth.  Fractional values are supported but this only
     really makes sense for the case where ranges (`+N' and `-N') are
     used.

24時間の幅があるので0からカウントすると一日ずれちゃうってことなんだな。

何がいいたいかというと30日以上古いファイルを検索するには +30じゃなくて+29にしないとだめってことだ。
なんでメールが来るのか悩んだよ。


2010-12-05 (Sun)

@rubyciの頻度

@rubyciは twitterfeedを使っているんだけど、
twitterfeed側の制約で30分間隔で最新の5個までしかポストしないので取りこぼしがある。
無制限だとtwitter側のlimitでポストできなくなるしねえ。
だったら30分で1個にしちゃってもいいのかもなあ。


2010-12-06 (Mon)

リプライする振りをするspam

ruby-talk MLに1.8.5の話題が出てなんだと思ったらspamだった。
直前ににHello, Everyone!とか挨拶してるメールもあった。
律儀なspammerだな。って手動かよ。これは防げないな。
spamなのでリンクしない。


2010-12-07 (Tue)

screen-session

About
screen-session is a collection of tools for GNU Screen, including session saver.
session saver currently supports saving of: layouts, scrollbacks, titles, filters and is able to restart programs run in windows. It recognizes groups and regular windows. Currently there is no support for serial and telnet window types.

2010-12-08 (Wed)

Comparing two+numbers

<, =, >の並びがASCIIコードで60, 61, 62だとは気づかなかった。1B届かなかった。

#!ruby -an
a,b=$F
puts a+" "+"=><"[a.to_i<=>b.to_i,1]+" "+b

#!ruby -apl
a,b=$F
$_=a+" "+"=><"[a.to_i<=>b.to_i,1]+" "+b

#!ruby -apl
a,b=$F.map &:to_i
$_=[a," ","=><"[a<=>b,1]," ",b]

#!ruby -apl
a,b=$F
$_=a+" "+"=><"[a.hex<=>b.hex,1]+" "+b

#!ruby -ap
a,b=$F
sub" "," "+"=><"[a.hex<=>b.hex,1]+" "

#!ruby -p
~/ /
sub" "," "+"=><"[$`.hex<=>$'.hex,1]+" "

#!ruby -p
sub(/ /){$&+"=><"[$`.hex<=>$'.hex,1]+$&}

#!ruby -ap
sub(/ /){" %c "%"=><"[eval$F*"<=>"]}

#!ruby -ap
$_[/ /]=" %c "%"=><"[eval$F*"<=>"]

#!ruby -an
puts$F*" %c "%"=><"[eval$F*"<=>"]

#!ruby -apl
$_=$F*" %c "%"=><"[eval$F*"<=>"]

番外: 逆に長くなった
#!ruby -apl
$_=$F*"=><"[eval($F*"<=>"),1].center(3)

#!ruby -apl
$_=$F*"=><"[eval$F*"<=>"].chr.center(3)

よくもまあ、こんだけ試したもんだな。


2010-12-09 (Thu)

Splitting on capital letters

なんか無駄に豪華な方法が最初に出たからか、いっぱい集まったな。
折角なので古い順に。

"BenefitsAndFeatures".split(/([[:upper:]][[:lower:]]*)/).delete_if(&:empty?).join("-")
"BenefitsAndFeatures".underscore.split('_').map(&:capitalize).join('-')
"BenefitsAndFeatures".gsub(/[A-Z]/) { |c| "-#{c}" }).reverse.chomp('-').reverse
"BenefitsAndFeatures".gsub(/\w(?=[A-Z])/){|match| "#{match}-"}
"BenefitsAndFeatures".split(/(?=[A-Z])/).join('-')
"BenefitsAndFeatures".gsub(/(?<=[[:lower:]])[[:upper:]]+/, '-\\&')
"BenefitsAndFeatures".scan(/[[:upper:]]+[[:lower:]]+/).join('-')
"BenefitsAndFeatures".gsub( /.(?=[[:upper:]])/, '\&-' )
"BenefitsAndFeatures".gsub /([a-z])([A-Z])/ , '\1-\2'

思い付いたのはこんな感じだが、ちゃんと上にも出てた。

"BenefitsAndFeatures".scan(/[A-Z][a-z]+/)*"-"

2010-12-10 (Fri)

zshでソート

zshでソートしてみたら思わぬバグが。

% a=(3 2 1 0 -1 -2 -3); echo ${(n)a}
-1 -2 -3 0 1 2 3

(n)で数値として扱うんだから、-3 -2 -1 0 1 2 3にならないと変だろう。
この問題で発覚。


<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!