Just another Ruby porter,

〜2013年8月上旬〜


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

2013-08-01 (Thu)

Rubyに分数と複素数リテラルが入った

夏休みの宿題がはかどるわけですね。

% 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)

2013-08-02 (Fri)

7月のspam

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秒ぐらい前に設定したほうがいいのかもしれない。


2013-08-03 (Sat)

Rubyのdefの戻り値がシンボルに

実はこの話はものすごい昔から 提案されていてる。今回ついに入ったわけだ。

% 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("_"," ")+","


2013-08-04 (Sun)

Cygwinでsetupするたびにpangoがエラーになる

setupの最後に

Package: Unknown package
        pango1.0.sh exit code 1

と言われてしまう。
ちょっと気味が悪いがのpango1.0.shも消されてしまうので、調査不能なんだよねえ。
ああ、表示してるところで探せばまだ残ってるかも。


2013-08-05 (Mon)

convertで星型

今日は判子の日なので星型の判子を作ったよ。

% 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のデータを生成している。


2013-08-06 (Tue)

丸みを帯びた星型

ちょっととんがりすぎなのでベジェ曲線命令を使ってで丸みを。

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

ここまでくると何を作っているかわかるかも。


2013-08-07 (Wed)

RubyのMLがFMLからMailmanに

つまりPerlからPythonへ。
Mailmanの設定はWebから可能だが、ちょっと凝った設定しようと思ったらハンドラを書かざるを得ない。
Pythonはやはり勝手が違い慣れない。
秘密の抜け穴を作るには最終的にはmsgdata["approved"] = 1でいける。
しかしまだエラーを起こすことがあるようで、油断ならない。
syslogで様子見るか。


2013-08-08 (Thu)

convertでさくら模様

あの丸みを帯びた星を先割れにすればさくらに。

% 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つに分割している。


2013-08-09 (Fri)

Ruby ML関連のMailmanの設定

Pythonの初歩がわからず手間取ったが、なんとか秘密の抜け穴も掘ることができた。
終わってみれば数行のhandlerを書いただけなんだけどねえ。
秘密なのでそのスクリプトは見せられない。

今回はvetteとpostとerrorのログが役に立った。3ついっぺんに見るために

% tail -f /var/log/mailman/{post,error,vette}

と実行した。更新したログがあると

==> /var/log/mailman/post <==

のようにファイル名も表示されるのでデバッグには十分。
syslogを使ってvetteあたりに情報を書いていく感じ。
ああ、ひょっとしたらdebugとか好きな名前でもいけたのかもしれない。
あと、handlerとか修正したらmailmanを再起動するのを忘れずに。


2013-08-10 (Sat)

convertで「たいへんよくできました」

内側に細い線でなぞればそれらしいものができあがる。
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

例によってちょっと傾けることで判子らしさを表現している。


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