Image::MagickからImagerへ

FC6のこんな構成で

  • httpd-2.2.4-2.fc6
  • mod_perl-2.0.2-6.1
  • mod_fcgid-2.1-1.fc6
  • Catalyst 5.7007
  • ImageMagick-perl-6.2.8.0-4.fc6
  • ImageMagick-6.2.8.0-4.fc6

CatalystからImage::Magickが動かない。Catalyst組み込みのサーバーだとOKなんだけど、mod_perl,fcgidでは動かない。

どうも、アップロードしたファイルが読めてないようで、

my $i = Imager->new;
$i->read(file => $upload->tempname);

のところでコケテル。あーselinuxの設定か?と思って見直したんだけど、全然違った。単順にアップロードするだけならできてるし、readできてないみたい。

もうちょっと追ってみたら、

Exception 420: no decode delegate for this image format

とあってどうもImage::Magickがファイルの形式判別できてないみたいな感じ。

うーん、全然わからんなぁと悩んでたら、use Imager; という記事がナイスなタイミングで。

ナイスすぎる。早速乗り換え。

っていうかちょっと書き直しただけですぐ動いた。

my $i = Imager->new;
$i->read(file => $photo_data->tempname);
my $w = $i->getwidth();
my $h = $i->getheight();
my ($width,$height,$top,$left);
if($w > $h){
$width = $h;
$height = $h;
$top = 0;
$left = int(($w - $h)/2);
}elsif($h > $w){
$width = $w;
$height = $w;
$top = int(($h - $w)/2);
$left = 0;
}

画像を正方形にして36pxのアイコンにするという処理なので、とりあえずちょっと書き直したら動いたけど、

use Imager

例えば scale() の項目を見ると、200x200に「収まるように」小さくするには、type => 'min'、縦横比を無視してそのサイズに引き伸ばしたい場合は type => 'nonprop' というオプションをつければいいことがわかります。

minっていうオプション付けれぼ綺麗にかけそう。

そういえば、ImagerとかImage::Magick,imlib2なんかのリサイズを比較したエントリあったなと、livedoorclip探した。タグつけしないと探しづらくてあかんなぁ。

支那そば家 毎度!

どうしてもにぼにぼが食べてみたいと言い続けて2ヶ月。やっと行く機会ができた。にぼにぼは夜限定なのでなかなかいけなかったのですよ。

早めに会社を切り上げて家族を拾ったら裏道走って毎度へ。工事のおかげでちょっと入りやすくなった駐車場に車をとめたら、歩いて数分毎度の暖簾をくぐる。

子供用椅子も完備なので子供連れでも安心。

U隊長がにぼにぼを頼むと主張するので、ぼくはつけ麺を。

ちょっとわけてもらったけど、にぼにぼ。煮干の出汁が香る逸品。うまい、旨すぎですよ。たまらん。

そして僕のつけ麺。

つけ鴨食べてるみたいな。ざる蕎麦のようにつるつると。

正直甲乙付けがたい。

支那そば家 毎度!

次はつけ麺潮味で。

WikiにXML-RPC

FSWikiにXML-RPCのインターフェースつけた。

Gamessとかの科学計算にはありがちな、長々とした実行結果をパースして、Wikiに突っ込むとかするとよいかもと思ってる。解釈を書き込めるし、編集も簡単だし、pdfに出力できるし。

moinmoinにはデフォルトでついてた。

TheSchwartz

TheSchwartzで分散ジョブ実行環境が順調に立ち上がったのだけどWorkerのプロセスってのは普通どうしておくんだろうか?

nohupで動かしておくんだろうか?

それともデーモン化させたほうがいいんだろうか?

と、コンソールで立ち上がってるWorker眺めながらふと考えた。

HTML::Widgetでgoogle suggestっぽいことをやるとき

HTML::Widgetをつかってるフォームでタグ入力の部分をgoogle suggestっぽくやりたかったので、widgetに空のdivタグを突っ込むひつようがあった。

が、結局fieldsetタグの外側に押し出されてしまって思ったようにdivを突っ込めなかった。

my $w = $c->widget('bookmark_form')->method('post');
$w->element_container_class('Cheer::Container');

my $com_area = $w->element('Textarea', 'comment' )
    ->label('comment: ');
$com_area->cols(60)
    ->rows(5)        ->value($comment);
my $t = $w->element('Textfield', 'tag' )->size(50)->label('tag(word): ');
$t->value($joined_tag) if $joined_tag;
$t->attributes( autocomplete => "off" );
my $e = $w->element( 'Upload', 'pdf' )->size(20)->label('pdf_file  : ');
$e->accept('text/html');
$e->maxlength(1000);
$w->element('Submit',    'submit' )->value('submit');
$w->element('Block')->attributes( id => "suggest" );

しょうがないので最後にBlockを突っ込んでからmargin指定してDivの位置をそれっぽく合わせた。

TMCrawler

あらー、昨晩サーバーにつながらなくて更新できなかったヨ。

ってわけで、早く寝て早く起きる。起きたら、アクセスログ見て原因っぽいTMCrawlerを弾くようにした。

TTでRFC822 Date Format

CatalystでTT使ってRSS2.0のフィードを吐き出したかったんだけど、datetimeのあたりでRFC822のフォーマットで時刻を出力しないといけないらしい。

都合のいいプラグインがみつからなかったので、Template::Plugin::DtFormatterを使って。

[% USE DtFormatter(patterns => { 
    'rfc822' => '%a, %d %b %Y %H:%M:%S %z',
     time_zone => 'Asia/Tokyo' }) -%]
...
<pubDate>[% DtFormatter.format(ub.clip_time, 'rfc822') %]</pubDate>

フォーマットはDateTime::Format::Mailを参考に。

TT使わないでXML::Feedを使ったほうが良いのかな?

わからん。

久々に椎名林檎

iTunesでシャッフルしてたら、突然かかったので、そのままアルバムに突入。

ProductName 無罪モラトリアム
椎名林檎
EMIミュージック・ジャパン / 2425円 ( 1999-02-24 )


友達は「茜さす 帰路照らされど・・・」が一番って言ってたけど、某はやっぱ「丸の内サディスティック」かな。あと「同じ夜」。

Snoopyでno_proxy

tiny tiny rssをイントラにインストールして使おうとしたんだけど、lwpでいうno_proxyみたいな設定がないので困った。

結局Snoopyの_connectメソッドに、正規表現をこんな感じで追加して、イントラのサイトのRSSはプロキシーを介さないようにしてみた。

function _connect(&$fp,$URI)    {
    if(!empty($this->proxy_host) && 
       !empty($this->proxy_port) &&
       !preg_match('/mywork.co.jp/', $URI))

..............

if($this->_connect($fp,$URI))

ちゃんと動いているっぽい。

vecteezyが楽しげ

vecteezyってサイトはフリーのベクターグラフィックスが手に入る いい感じなサービスなわけです。

Free Vectors by Vecteezy!

これをGimpで扱うためにはghostscriptをインストールしてpathきっておくだけ。

gs

むふふな感じ。