flightというアプリを作ってみたのだがどうか
lighttpdを使用してFastCGIスクリプトのテスト(開発)サーバーを簡単に立てられるアプリです。
$ flight -p 3000 yourscript.fcgi
とかすると localhost:3000
でそのfcgiスクリプトが動くという感じ。
catalystだったら
$ flight -p 3000 ./script/myapp_fastcgi.pl
でOK。
Catalyst用にはすでに専用のヘルパーを書いていて、lighttpdでテスト(開発)サーバーを立てられるようにしていたのだけどそれをもっと汎用的にした感じ。
ネームスペースは FCGI::Server::Lighttpd
とかしちゃってるのだけどどうだろう? App::Flight
とかのがいいのかなー。
意見求む。
PDF::FromImage
とか言うのを作った。exampleディレクトリにimages2pdf.plというのがあって、これつかうと
image2pdf.pl -o output.pdf *.png
とかやることによりコマンドラインで渡した画像から一気にPDFのスライドが作れる。
install_script するかまよったけどとりあえずしなかった。うかつにやるとおこられそうだしな。。
YAPC::Asia 2008 Tokyo
去年は参加できなかったため、2年ぶりのYAPCでした。
僕のセッションの資料もアップしておきました。
やっぱり参加するとグッとモチベーションがあがりますね。
2年前うけた衝撃も大きかったですが、今年もいろいろな人からアイデアややる気をもらいました。
ところでこの2年間でひとつ大きく変わったなぁと思うのは、perlハッカーの使っているPCの種類が変わったことです。
2006年時には
こんな感じで Thinkpad が幅をきかせまくっていたと思うのですが、今回の hachathon で Thinkpad を使っていたのは僕と mizzy さんだけ!
今年はみんな Macbook。
Hackathon きてた人の9割くらいは macbook だったんじゃなかろうか。。
Google Docs にファイルアップロードするスクリプト
を書いてみた。
http://github.com/typester/www-google-docs-upload/tree/master/example/gdoc-upload.pl
muttとかサーバーサイドのメーラーを使っているとコンソールで開けない添付ファイルが来たときちょっと困るなーと思っていて、いままではsshfsとかでマウントしてあるところに一時的にファイルを保存してそこをローカルのPCから開いていたけど面倒。
いちおうimapも使えるようにしてあるので添付ファイルだけほかのメーラーで読むというのもありかなと思ったけどBeckyもThunderbirdも(imap経由だからか)重くてよけいめんどい。
で、mutt からパイプでわたすだけで google docs にアップロードされたら便利だなーと思って作ってみたというところ。
ただパイプで渡したのを File::Temp で保存してそれをアップしてるのだけど、Google Docs側が拡張子でファイルの種類を判別してるようで、File::Temp->new
しただけだと拡張子がつかなくてアップされない><
ので現状は
| gdoc-upload.pl -n ppt
とか拡張子を指定する必要がある。
convertコマンド
ImageMagickのconvertコマンドをsystem関数でたたいてた古いプログラムを動かす必要があったのだが、そのためだけにImageMagickインストールするとか面倒すぎたので、perlでconvertコマンド的なものを書いてお茶を濁した。
ファイル形式の変換とリサイズしかできない。
#!/usr/bin/env perl
use strict;
use warnings;
use Getopt::Long;
use Imager;
use Path::Class qw/file/;
GetOptions(
\my %options,
qw/geometry=s/,
);
my $in = file($ARGV[0]);
my $out = file($ARGV[1]);
my ($width, $height) = ($options{geometry} || '') =~ /(\d+)x(\d+)/;
# read
my $img = Imager->new;
$img->read( file => "$in" ) or die 'Cannot read: ', $img->errstr;
# scale if exists geometry option
if ($width and $height) {
$img = $img->scale( xpixels => $width, ypixels => $height, type => 'nonprop' );
}
# write
$img->write( file => $out ) or die 'Cannot write: ', $img->errstr;
Catalystアプリオレオレポリシー
下記camr作った時点での僕のポリシーは
- アプリ名にかかわらず設定ファイルはconfig.yamlとconfig_local.yaml
- でも変更することがないほとんどの設定はyamlには書かない。yamlがごちゃっとするときもい
- ForceUTF8系モジュールは使用しない。内部がきちんとutf8で統一されていれば必要ない。
- MyApp::UtilsとかいうのでいろいろBKなことをまとめてする。uri_forを気に入るように直したり、FillInFormの挙動変えたり
なんか抜けてる気がするけどこんな感じ。
Webカメラから直接写真をFlickrにあげる
はてなフォトライフでWebカメラから直接写真を撮影してアップロードできるようになりました - はてなフォトライフ日記 - 機能変更、お知らせなど
をみて、おもろいなーとおもったので僕も作ってみた。Flickrバージョン。
本家に比べると大分しょぼいけど、動いたので満足した。なんかこれだけで3時間くらいかかった。。
ローカル git レポジトリからあげる方法がわからなんだので、普通に svn import した><
utf8::is_utf8
miyagawaさんが#catalystでいってたことやっと理解できた、きがする。
use Data::Dumper;
my $s = "H\x{c3}\x{ab}llo";
utf8::decode($s);
warn Dumper $s; # => "H\x{eb}llo"
warn utf8::is_utf8($s) # => 1
だけれども
my $s = "H\x{eb}llo";
warn utf8::is_utf8($s) # => Warning: something's wrong
ということで、"\x{6751}\x{702c}\x{5927}\x{8f14}"
などというData::Dumper表記でかならずしも utf-8フラグがたつわけじゃない。ということがいいたかったんだと思うのだけれど、
そもそも ë が latin-1 では "\x{eb}"
だけど utf-8 では "\x{c4}\x{ab}"
であるということを僕が認識してなかったせいでおかしなことになった。すみません。
Catalyst::Controller::Resources
かっこいい。
オレオレ規約をもとに雛形を生成するヘルパースクリプトでがんばるよりこういう自分用のコントローラをつくるほうがスマートだなぁ。
Catalystユーザー的にはオールドタイプな自分としては見習おうと思った。
ユニークなランダム文字列
すでに生成したIDかどうかを気にする必要がないユニークな文字列を作成しようとした場合
use Data::UUID;
use MIME::Base64::URLSafe;
print urlsafe_b64encode( Data::UUID->new->create );
こんな感じにやるのがいいのかなぁ。これで22文字。
んー。
エントリーのURLとかにつかいたくてもう少し短くしたいけど、文字列生成したときに重複してないか調べるためにDBを引くというのがイヤダナー。