〜2013年8月上旬〜
夏休みの宿題がはかどるわけですね。
% ruby -e 'p 1/2' 0 % ruby -e 'p 1/2r' (1/2) % ruby -e 'p 18/12r' (3/2) % ruby -e 'p 1/2r-1/3r' (1/6) % ruby -e 'p (2+3i)*(1+2i)' (-4+7i)
虚数部にも分数を使いたいときはriとすればいいようだ。
% ruby -e 'p 1+2/3ri' ((1/1)-(2/3)*i)
317通。例のあれがなくなったのでまあ元に戻った。
23:22:45との情報を得たので
% echo 'sleep 45;echo バルス|tw --pipe'|at 23:22
を仕掛けておいたが、実際は23:21:50だった。
まあ1分あるからatrm効くかと実行したが、間に合わず
% atq 130 Fri Aug 2 23:22:00 2013 = eban % atrm 130 Warning: deleting running job
と警告が出るのであった。この時点で消せてないと気づかず実行されちゃったけど、そうだよなあ。
45秒はsleepだし。でこれも50秒に実行されてたので自動実行するにしても、
5秒ぐらい前に設定したほうがいいのかもしれない。
実はこの話はものすごい昔から 提案されていてる。今回ついに入ったわけだ。
% ruby -ve 'p def foo()end' ruby 2.1.0dev (2013-08-03 trunk 42352) [x86_64-linux] :foo
print def Just_another_Ruby_hacker()end.to_s.gsub("_"," ")+","
setupの最後に
Package: Unknown package pango1.0.sh exit code 1
と言われてしまう。
ちょっと気味が悪いがのpango1.0.shも消されてしまうので、調査不能なんだよねえ。
ああ、表示してるところで探せばまだ残ってるかも。
今日は判子の日なので星型の判子を作ったよ。
% ruby -e 'include Math;r=100;puts "path \""+11.times.map{|i|s=i%2==0?1:0.4;th=(90+i*36)*PI/180.0;"%s%d,%d" % [i==0 ? "M" : "L", 100.5+r*s*cos(th), 100.5-r*s*sin(th)]}.join(" ")+" Z\""'|\ convert -size 200x200 xc:white -fill white -stroke red -strokewidth 4 -draw @- star.png
ちょっと長いが、Rubyで星型のデータを作ってconvertの-drawに食わせている。 実際には
path "M100,0 L76,68 L5,69 L62,112 L41,181 L100,140 L159,181 L138,112 L195,69 L124,68 L100,0 Z"
のようなSVGのデータを生成している。
ちょっととんがりすぎなのでベジェ曲線命令を使ってで丸みを。
ruby -e 'include Math;r=100;puts "path \"M"+11.times.map{|i|s=i%2==0?0.4:1;th=(126+i*36)*PI/180.0;"%s%d,%d" % [i==1 ? "Q" : "", 100.5+r*s*cos(th), 100.5-r*s*sin(th)]}.join(" ")+" Z\""'|\ convert -size 200x200 xc:white -fill white -stroke red -strokewidth 4 -draw @- -trim star2.png
ここまでくると何を作っているかわかるかも。
つまりPerlからPythonへ。
Mailmanの設定はWebから可能だが、ちょっと凝った設定しようと思ったらハンドラを書かざるを得ない。
Pythonはやはり勝手が違い慣れない。
秘密の抜け穴を作るには最終的にはmsgdata["approved"] = 1でいける。
しかしまだエラーを起こすことがあるようで、油断ならない。
syslogで様子見るか。
あの丸みを帯びた星を先割れにすればさくらに。
% cat sakura.rb include Math R=100 def circle(th, s) [R+0.5+R*s*cos(th), R+0.5-R*s*sin(th)] end puts "path \"M"+11.times.map{|i| if i % 2 == 0 s = 0.5 th=(126+i*36)*PI/180.0 "%d,%d" % circle(th, s) else s = 1 thm=(116+i*36)*PI/180.0 th=(126+i*36)*PI/180.0 thp=(136+i*36)*PI/180.0 "%s%d,%d %d,%d %d,%d" % [i == 1 ? "Q" : "", *circle(thm, s*0.90), *circle(th, s*0.7), *circle(thp, s*0.90)] end }.join(" ")+" Z\"" % ruby sakura.rb |convert -size 200x200 xc:white -fill white -stroke red -strokewidth 4 -draw @- -trim sakura.png
とがってる頂点を10度きざみで3つに分割している。
Pythonの初歩がわからず手間取ったが、なんとか秘密の抜け穴も掘ることができた。
終わってみれば数行のhandlerを書いただけなんだけどねえ。
秘密なのでそのスクリプトは見せられない。
今回はvetteとpostとerrorのログが役に立った。3ついっぺんに見るために
% tail -f /var/log/mailman/{post,error,vette}
と実行した。更新したログがあると
==> /var/log/mailman/post <==
のようにファイル名も表示されるのでデバッグには十分。
syslogを使ってvetteあたりに情報を書いていく感じ。
ああ、ひょっとしたらdebugとか好きな名前でもいけたのかもしれない。
あと、handlerとか修正したらmailmanを再起動するのを忘れずに。
内側に細い線でなぞればそれらしいものができあがる。
sakura.rbも微妙にいじられてるが気にしない。
% cat sakura.rb include Math R = 100 def circle(th, r) [R+0.5+r*cos(th), R+0.5-r*sin(th)] end def sakura ratio r = R * ratio "path \"M"+11.times.map{|i| th=(54+i*36)*PI/180.0 if i % 2 == 0 "%d,%d" % circle(th, r - R * 0.4) else thm=(44+i*36)*PI/180.0 thp=(64+i*36)*PI/180.0 "%s%d,%d %d,%d %d,%d" % [i == 1 ? "Q" : "", *circle(thm, r), *circle(th, r*0.8), *circle(thp, r)] end }.join(" ")+" Z\"" end puts sakura ARGV[0].to_f % convert -size 200x200 xc:white -fill white -stroke red \ -strokewidth 4 -draw @<(ruby sakura.rb 1) \ -strokewidth 1 -draw @<(ruby sakura.rb 0.9) \ -rotate 36 -trim sakura36.png
なぜ36度回転しているかというともう1個重ねるため。
% convert -size 200x200 xc:white -fill white -stroke red \ -strokewidth 4 -draw @<(ruby sakura.rb 1) \ -strokewidth 1 -draw @<(ruby sakura.rb 0.9) -rotate 36 png:- | \ convert - \( -size 200x200 xc:none -fill white -stroke red \ -strokewidth 4 -draw @<(ruby sakura.rb 1) \ -strokewidth 1 -draw @<(ruby sakura.rb 0.9) \) \ -gravity center -composite -trim tyd.png
ガワのできあがり。xc:noneにすることで背景を透明にしている。
重ねるとその外側だけ顔を出すことになる。
あとは縦書きで書ければ完璧だったんだけど、一応の完成。
% convert tyd.png \ \( -size 200x200 xc:none -stroke red -strokewidth 2 \ -font /usr/share/fonts/opentype/ipafont-mincho/ipam.ttf \ -pointsize 24 -gravity center \ -draw $'text 0,0 "たいへん\nよくねて\nました"' \ \) -gravity center -composite -rotate 10 tyd10.png
例によってちょっと傾けることで判子らしさを表現している。