Just another Ruby porter,

〜2011年2月中旬〜


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

2011-02-11 (Fri)

[ruby-list:47852] Re: ruby1.9での文字列について

タイミングを外したのでここで。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"

2011-02-12 (Sat)

ON bit fixed

これは適当に1から順番に生成してgrep的なことすると3番目でtimeoutし破綻する。
というわけで、[0,0,1,1,1]のよう配列を用意していっぱいshuffleしてsortしてuniqするのが簡単。
蓋を開けてみると見事なまでにshuffle+sort+uniqなわけで。
combinationとかpermutationとかproductionとか長すぎるのがいけない。


2011-02-13 (Sun)

ON bit fixed

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とかにしないとまずい。


2011-02-14 (Mon)

windowsで/etc/hosts

今日DNSサーバが突然死んで思い出したので書いとく。
意外に知られてないが、Windowsでも/etc/hosts的なファイルが存在する。
c:\windows\system32\drivers\etc\hostsあたりにあるので、普通に追加すればok。

FizzBuzz.rbが50B!

いやー、これはすごいことになったねえ。Perlが48Bだからほとんど追い付いてきてる。


2011-02-15 (Tue)

cppを使ってCのコメントを消す

単に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;
}

なかなかいい感じ。


2011-02-16 (Wed)

MD5

普通ならmd5sumを使うところだが、md5sumはファイル名も表示してしまうため消す処理が必要になってしまう。
そこでopenssl md5だ。GNU sedのs///eでコマンド実行できるので1行ずつばらすにはうってつけ。

crontabで第3水曜日に実行

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って何曜日だっけ?てなことになりかねない。


2011-02-17 (Thu)

lighttpdへcurlでupload

ちょっとはまったので備忘録。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でも同じらしい。


2011-02-18 (Fri)

since: Stateful Tail

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してやればいいわけだし。


2011-02-19 (Sat)

タブッターのショートカットキー

最近 タブッターをよくつかうんだけど、これのショートカットキーのj/kがviと逆で困りまくり。
というわけでgreasemonkeyで入れ替えた。

location.href = "javascript:void (" + 
  function(){
    eval('shortcutwin = ' + shortcutwin.toString().replace("kcode == 74)", "kcode == 75)"))
  } + ")()";

こんな話もあるが気にしない。自分しか使わないしね。


2011-02-20 (Sun)

Ubuntuのexim4でGmail smtp経由でメールを送る設定

ぐぐってみた結果dpkg-reconfigure exim4-configすればいいよと書いてあるが、
うまくいったのは この方法だった。
update-exim4.confもしないといけないのはちょっと面倒だな。


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