Hatena::ブログ(Diary)

La Faïence

2011-11-08

今更だけどGDD2011で書いたコード置いておく系

GDD2011終わってからエントリを書くという変な話。結局、GDDはなぜか行けました。ありがとうGoogleさん。もらった+1ステッカーはMacBook Proに貼りましたよ〜。あとzeemoteとかいうやつ貰ったのでエロゲ捗る。

で、下のgistは例の数学クイズみたいなやつのたいしたこと無いけど回答コード。二分木つかって深さ優先でトラバースした。時間経ちすぎてコードの解説無理

https://gist.github.com/1261072#file_gdd2011quiz_tree.pl

Cf. http://d.hatena.ne.jp/famnet/20110831/1314781889

フォントをひたすら画像化しまくるPerl+Automatorを書いてみた

f:id:famnet:20111108193531p:image

フォントをアルファチャネルPNG画像に変換して、何かに使うためのスクリプトです。フォントには著作権がありますし、契約によってはこいつを使って変換した画像をWebサイトにつかっちゃったりしちゃったりすると、無料ホテルにしばらくのあいだ滞在せざるをえなくなる可能性があるので、注意してください。

MacのAutomatorに、標準入力のテキストを画像に変換するという機能がデフォでついてます。そいつとスクリプトの標準出力を利用して、PNG画像を出力しまくるソリューションを作ってみましょう。

まずはPerlのほうですが、これは何をするのかというとただひたすら文字コードをインクリメントしていって、ひたすらその数値に対応する文字を出していくものです。原理的すべての文字(改行コードやタブ等々も全部)を出すことになります。

#!/usr/bin/perl
#
use strict;
use warnings;
use utf8;
binmode (STDOUT,'utf8');

open(RFH, "</Users/keiya/Documents/perl/lastnum.txt");
my $lastnum = <RFH>;
open(WFH, ">/Users/keiya/Documents/perl/lastnum.txt");
chomp($lastnum);
print chr($lastnum+1);
print WFH ($lastnum+1)."\n";
close(RFH);
close(WFH);

汚ねぇコードだな!

とりあえず、MacのAutomatorはよくわからないし、変数のインクリメントもちょっと探したくらいじゃ見つからなかったので、最後に変換した文字コードをファイルに置きます。PerlはAutomatorのループごとに呼び出され、ステートが保存されないのでこうするしかないんです。たぶん。

次にAutomatorでコードを組むわけですが、こいつはかなり初心者向けみたいな感じ(というか言語ですらないが)です。で、ビジュアルプログラミングっぽくてコードが無いwのでスクリーンショットを載せます。

シェルスクリプトからPerlを起こし、文字コードに対応する文字をstdoutで吐きます。これをAutomatorの「テキストからバナーイメージを作成」につっこむと、PNGができます。こんなかんじ。

f:id:famnet:20111108002830p:image

できあがり --> font_gen.zip 直 (Perlコードは含まれていない;あと適当にディレクトリとか変更しないと動かない)

いい忘れていた、初期値をいれないと動かん

lastnum.txtに改行なしで「32」とかって数字書いて保存しておかないと、まずPerlが実行されないかも。これを書くとAscii code 33番目の文字からはじめるって意味になる。

このファイルはAutomatorが回るたび(厳密にはPerlコードが起動される度)にインクリメントされる。

いい忘れていた、Mac OS X Lion以降必要かも

Snow Leopardには画像に変換する機能なさそう。