〜2011年2月中旬〜
タイミングを外したのでここで。packなら1.8でも1.9でもいけるはずだ。
% /usr/bin/ruby -rnkf -ve 'p [s1="あ", NKF.nkf("-j",s1)].pack("A*A*")' ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux] "\343\201\202\e$B$\"\e(B" % ruby -rnkf -ve 'p [s1="あ", NKF.nkf("-j",s1)].pack("A*A*")' ruby 1.9.3dev (2011-02-11 trunk 30836) [x86_64-linux] "\xE3\x81\x82\e$B$\"\e(B"
これは適当に1から順番に生成してgrep的なことすると3番目でtimeoutし破綻する。
というわけで、[0,0,1,1,1]のよう配列を用意していっぱいshuffleしてsortしてuniqするのが簡単。
蓋を開けてみると見事なまでにshuffle+sort+uniqなわけで。
combinationとかpermutationとかproductionとか長すぎるのがいけない。
s/01(1*)(0*)$/10$2$1/ これでいけるのか。空白のありなしで判断してるのは賢いな。
Rubyで書くとこんな感じだ。
a,b=gets.split.map(&:to_i) puts $_='0'*(a-b)+'1'*b+"\n" print while sub!(/01(1*)(0*)$/,'10\2\1')
単純にRubyに置き換えようと思って
print while gets=~/ /?$_="0"*($`.to_i-a=$'.to_i)+"1"*a+$/:sub!(/01(1*)(0*)$/,'10\2\1')
のようにしてしまうとgetsが$_を書き換えてしまうので$<.readとかにしないとまずい。
今日DNSサーバが突然死んで思い出したので書いとく。
意外に知られてないが、Windowsでも/etc/hosts的なファイルが存在する。
c:\windows\system32\drivers\etc\hostsあたりにあるので、普通に追加すればok。
いやー、これはすごいことになったねえ。Perlが48Bだからほとんど追い付いてきてる。
単にcppだけだとヘッダファイルを展開してしまってうざい。
と思ったら、gccには-fpreprocessedなんてオプションがあった。
% cat x.c #include <stdio.h> // hoge /* foo */ ///* //*/ // /* foo */ /* // */ main() { /* hoge */ int /* bar */ foo; } % cpp -fpreprocessed x.c | grep . #include <stdio.h> main() { int foo; }
なかなかいい感じ。
普通ならmd5sumを使うところだが、md5sumはファイル名も表示してしまうため消す処理が必要になってしまう。
そこでopenssl md5だ。GNU sedのs///eでコマンド実行できるので1行ずつばらすにはうってつけ。
N日が第何曜日なのかはint((N+6)/7)でわかる。つまり第3なら15日から21日になる。
あとは水曜日という条件をつければ
0 0 15-21 * Wed command
でいけそうな気がするが、ここに落とし穴がある。日付と曜日を同時に書くとなぜかorになるのだ。
これだと毎月15日から21日または水曜日に実行される。なんでこんな仕様になっているんだ。
というわけで、
0 0 15-21 * * test $(LANG=C date +\%a) = Wed && command
のように書く必要がある。%aはlocaleの影響を受けるのでLANG=Cを入れたほうが無難。
0 0 15-21 * * test $(date +\%w) = 3 && command
でもいいんだけど、3って何曜日だっけ?てなことになりかねない。
ちょっとはまったので備忘録。man curlを見ると
curl -s -F 'filename=@foo.txt' URL
てな感じでお手軽にfoo.txtをuploadできると書いてあったので、
試してみたら
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>417 - Expectation Failed</title> </head> <body> <h1>417 - Expectation Failed</h1> </body> </html>
と言われてしまった。ぐぐってみるとlighttpdがcurlの出すExpect: 100-Continueに対応してないということらしい。
というわけで、
curl -s -H "Expect:" -F 'filename=@foo.txt' URL
のようにExpect:ヘッダを消せばいけるようだ。
なんか、ぐぐった結果を見るとtwitter.comでも同じらしい。
cygwin-announceで見つけた。
仕組みは各ファイルのdevice,i-node番号とサイズを覚えておいて、
増分だけ表示してるようだ。ってことはtail -F的には使えないな。
% cat ~/.since 0000000000000801:0000000003220669:000000000003173b % printf "%016x:%016x:%016x\n" `stat -c "%d %i %s" saitama-temp.log` 0000000000000801:0000000003220669:000000000003173b
あ、ここまで書けるならシェルスクリプトでもいけそうな気がする。
ddでskipしてやればいいわけだし。
最近
タブッターをよくつかうんだけど、これのショートカットキーのj/kがviと逆で困りまくり。
というわけでgreasemonkeyで入れ替えた。
location.href = "javascript:void (" + function(){ eval('shortcutwin = ' + shortcutwin.toString().replace("kcode == 74)", "kcode == 75)")) } + ")()";
こんな話もあるが気にしない。自分しか使わないしね。
ぐぐってみた結果dpkg-reconfigure exim4-configすればいいよと書いてあるが、
うまくいったのは
この方法だった。
update-exim4.confもしないといけないのはちょっと面倒だな。