Just another Ruby porter,

〜2010年7月下旬〜


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

2010-07-21 (Wed)

[Golf] wakeの$<

shinhさんから教えてもらった。wakeの$<は何度でも参照できる。
wake golfは楽しい。sed好きな人ならはまる。


2010-07-22 (Thu)

[Git] 指定した日時でgit checkout

znzさんにman git-rev-parseせよと教えてもらった。
'master@{日付}'でいいらしいんだが、なぜかcloneした時点から先には遡れない。

% git checkout 'master@{2007-01-01}'
warning: Log for 'master' only goes back to Fri, 23 Jul 2010 00:32:02 +0900.
<後略>

どうしたもんかねえ。


2010-07-23 (Fri)

[Git] 指定した日時でgit checkout一応できた

git logで地道に探すしかないのかなと、まずはタイムスタンプの形式を変えるオプションを見始めた。
とかなんとかしてるうちに--beforeを発見。これでいけるじゃん。
最終的にはcommit hashだけわかればいいので、

% git --no-pager log --before='{2007-01-01}' -n1 --pretty=tformat:%h
e7a9936

を使ってcheckoutすればいける。


2010-07-24 (Sat)

[Golf] Roman numeral

ネタ元と同じ解がちらほら。IVとかの処理が面倒だが、%でうまいこと回避できるのがミソなんだよね。
あと このPerl goflも参考になる。


2010-07-25 (Sun)

Create an animated gif from a Youtube video

これは便利。

% mplayer video.flv -ss 00:23 -endpos 6 -vo gif89a:fps=5:output=output.gif -vf scale=400:300

でvidoe.flvの23秒目から6秒間をアニメーションGIFに変換できる。
でも画質はひどい。減色処理がひどすぎるな。
1フレームごと1枚ずつPNG画像にしてからpngquantあたりで減色したほうがよさげ。
つづく。


2010-07-26 (Mon)

[Image] もうちょっときれいなアニメーションGIF画像

mplayerには-vo pngで各フレームを指定したディレクトリに保存する機能がある。
これを使うと間にpngquantでの減色処理をはさめるのでちょっとはましな画質になる。

% ./youtube-dl -o ninja-cat.flv http://www.youtube.com/watch\?v\=v71Dtj2W7pw
% mplayer ninja-cat.flv -endpos 3 -vo gif89a:output=ninja-cat.gif

これで一応昨日のやつができあがり。

% mplayer ninja-cat.flv -endpos 3 -vo png:outdir=cat
% cd cat
% ls
00000001.png  00000011.png  00000021.png  00000031.png	00000041.png  00000051.png  00000061.png  00000071.png
00000002.png  00000012.png  00000022.png  00000032.png	00000042.png  00000052.png  00000062.png  00000072.png
00000003.png  00000013.png  00000023.png  00000033.png	00000043.png  00000053.png  00000063.png  00000073.png
00000004.png  00000014.png  00000024.png  00000034.png	00000044.png  00000054.png  00000064.png  00000074.png
00000005.png  00000015.png  00000025.png  00000035.png	00000045.png  00000055.png  00000065.png  00000075.png
00000006.png  00000016.png  00000026.png  00000036.png	00000046.png  00000056.png  00000066.png  00000076.png
00000007.png  00000017.png  00000027.png  00000037.png	00000047.png  00000057.png  00000067.png
00000008.png  00000018.png  00000028.png  00000038.png	00000048.png  00000058.png  00000068.png
00000009.png  00000019.png  00000029.png  00000039.png	00000049.png  00000059.png  00000069.png
00000010.png  00000020.png  00000030.png  00000040.png	00000050.png  00000060.png  00000070.png
% pngquant 256 *.png
% ls
00000001-fs8.png  00000014-fs8.png  00000027-fs8.png  00000040-fs8.png	00000053-fs8.png  00000066-fs8.png
00000001.png	  00000014.png	    00000027.png      00000040.png	00000053.png	  00000066.png
00000002-fs8.png  00000015-fs8.png  00000028-fs8.png  00000041-fs8.png	00000054-fs8.png  00000067-fs8.png
00000002.png	  00000015.png	    00000028.png      00000041.png	00000054.png	  00000067.png
00000003-fs8.png  00000016-fs8.png  00000029-fs8.png  00000042-fs8.png	00000055-fs8.png  00000068-fs8.png
00000003.png	  00000016.png	    00000029.png      00000042.png	00000055.png	  00000068.png
00000004-fs8.png  00000017-fs8.png  00000030-fs8.png  00000043-fs8.png	00000056-fs8.png  00000069-fs8.png
00000004.png	  00000017.png	    00000030.png      00000043.png	00000056.png	  00000069.png
00000005-fs8.png  00000018-fs8.png  00000031-fs8.png  00000044-fs8.png	00000057-fs8.png  00000070-fs8.png
00000005.png	  00000018.png	    00000031.png      00000044.png	00000057.png	  00000070.png
00000006-fs8.png  00000019-fs8.png  00000032-fs8.png  00000045-fs8.png	00000058-fs8.png  00000071-fs8.png
00000006.png	  00000019.png	    00000032.png      00000045.png	00000058.png	  00000071.png
00000007-fs8.png  00000020-fs8.png  00000033-fs8.png  00000046-fs8.png	00000059-fs8.png  00000072-fs8.png
00000007.png	  00000020.png	    00000033.png      00000046.png	00000059.png	  00000072.png
00000008-fs8.png  00000021-fs8.png  00000034-fs8.png  00000047-fs8.png	00000060-fs8.png  00000073-fs8.png
00000008.png	  00000021.png	    00000034.png      00000047.png	00000060.png	  00000073.png
00000009-fs8.png  00000022-fs8.png  00000035-fs8.png  00000048-fs8.png	00000061-fs8.png  00000074-fs8.png
00000009.png	  00000022.png	    00000035.png      00000048.png	00000061.png	  00000074.png
00000010-fs8.png  00000023-fs8.png  00000036-fs8.png  00000049-fs8.png	00000062-fs8.png  00000075-fs8.png
00000010.png	  00000023.png	    00000036.png      00000049.png	00000062.png	  00000075.png
00000011-fs8.png  00000024-fs8.png  00000037-fs8.png  00000050-fs8.png	00000063-fs8.png  00000076-fs8.png
00000011.png	  00000024.png	    00000037.png      00000050.png	00000063.png	  00000076.png
00000012-fs8.png  00000025-fs8.png  00000038-fs8.png  00000051-fs8.png	00000064-fs8.png
00000012.png	  00000025.png	    00000038.png      00000051.png	00000064.png
00000013-fs8.png  00000026-fs8.png  00000039-fs8.png  00000052-fs8.png	00000065-fs8.png
00000013.png	  00000026.png	    00000039.png      00000052.png	00000065.png
% mkdir org
% mv <->.png org
% ls
00000001-fs8.png  00000014-fs8.png  00000027-fs8.png  00000040-fs8.png	00000053-fs8.png  00000066-fs8.png
00000002-fs8.png  00000015-fs8.png  00000028-fs8.png  00000041-fs8.png	00000054-fs8.png  00000067-fs8.png
00000003-fs8.png  00000016-fs8.png  00000029-fs8.png  00000042-fs8.png	00000055-fs8.png  00000068-fs8.png
00000004-fs8.png  00000017-fs8.png  00000030-fs8.png  00000043-fs8.png	00000056-fs8.png  00000069-fs8.png
00000005-fs8.png  00000018-fs8.png  00000031-fs8.png  00000044-fs8.png	00000057-fs8.png  00000070-fs8.png
00000006-fs8.png  00000019-fs8.png  00000032-fs8.png  00000045-fs8.png	00000058-fs8.png  00000071-fs8.png
00000007-fs8.png  00000020-fs8.png  00000033-fs8.png  00000046-fs8.png	00000059-fs8.png  00000072-fs8.png
00000008-fs8.png  00000021-fs8.png  00000034-fs8.png  00000047-fs8.png	00000060-fs8.png  00000073-fs8.png
00000009-fs8.png  00000022-fs8.png  00000035-fs8.png  00000048-fs8.png	00000061-fs8.png  00000074-fs8.png
00000010-fs8.png  00000023-fs8.png  00000036-fs8.png  00000049-fs8.png	00000062-fs8.png  00000075-fs8.png
00000011-fs8.png  00000024-fs8.png  00000037-fs8.png  00000050-fs8.png	00000063-fs8.png  00000076-fs8.png
00000012-fs8.png  00000025-fs8.png  00000038-fs8.png  00000051-fs8.png	00000064-fs8.png  org
00000013-fs8.png  00000026-fs8.png  00000039-fs8.png  00000052-fs8.png	00000065-fs8.png
% cd ..
% mplayer "mf://cat/*.png" -vo gif89a:output=ninja-cat-pngquant.gif 

とこんな感じでできあがり。zshでは<->は数字だけを意味するので簡単に仕分けることが可能。
mplayerで減色処理 pngquantで減色処理


2010-07-27 (Tue)

[Gif] convertでアニメーションGIF

ImageMagickのconvertを使う方法もある。
各フレームをばらばらにPNGへmplayerで落とし込むとこまでは同じ。
まずはdelayの計算。3秒を枚数で割って100すると10msec単位のdelayが出る。

% echo $[3.0 / `ls | wc -l` * 100]
3.9473684210526314

これを使って一気にGIFに変換。

% convert -delay 4 *.png ninja-cat-convert.gif
% ls -o ninja-cat*.gif   
-rw-r--r-- 1 eban 3947147 2010-07-28 00:36 ninja-cat-convert.gif
-rw-r--r-- 1 eban  587975 2010-07-27 00:15 ninja-cat-pngquant.gif
-rw-r--r-- 1 eban  457208 2010-07-27 00:12 ninja-cat.gif

できあがりがなんかでかいな。その分きれいだけど。 convertで減色処理


2010-07-28 (Wed)

[Gif] mplayerとconvertで作ったアニメーションGIFの違い

昨日サイズがやけに違うなで終わったが一応調べてみた。
ImageMagickのidentifyで見てみるとmplayerで作った画像は

% identify ninja-cat.gif        
ninja-cat.gif[0] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[1] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[2] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[3] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[4] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[5] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[6] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[7] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[8] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[9] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[10] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[11] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[12] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[13] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000
ninja-cat.gif[14] GIF 320x240 320x240+0+0 8-bit PseudoClass 256c 446KiB 0.000u 0:00.000

のように3秒間で15枚。一方convertのほうは76枚。単にこの違いだった。
mplayerのdefaultは5fpsなんだな、ってman mplayerに書いてあった。
だからきれいに見えたのか。


2010-07-29 (Thu)

[Gmail] spamを監視して1ヶ月

やっとGmailのspam問題も落ち着いてきた。もうspamフォルダを監視しなくてもよさげだ。

[Golf] delete duplicate linesの秘密

sort | uniq -cしてみたら利用できそうな規則性が。 wakeで使ってみた。

してみたらなどと他人事のように書いているが、おれが出した問題なんだよなあ。


2010-07-30 (Fri)

[Perl6] Rakudo star

起動するまでが遅い。parrotがそういうもんなんだっけ?

% time ./perl6 -v              

This is Rakudo Perl 6, version 2010.07-47-g9fd5eaa built on parrot 2.6.0

Copyright 2008-2010, The Perl Foundation

./perl6 -v  0.55s user 0.04s system 100% cpu 0.588 total

Rubyと同じ書き方もできる。

% ./perl6 -e 'print "a b c".split(" ").join(":"), "\n"'     
a:b:c
% ruby -e 'print "a b c".split(" ").join(":"), "\n"'
a:b:c

というかもうまったく別の言語だよね。
s///とかy///もチェーンできればなあ。


2010-07-31 (Sat)

[Ubuntu] Ubuntu Tweak

パッケージクリーナーが便利。なるほど。PPAってのがあるんだな。


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