2009-02-13 Fri
指定フォルダ以下の画像を、一辺が指定長の正方形に加工するPerlスクリプト
縦横長がバラバラの画像集合を全部まとめて、
「50x50」とか「100x100」とかの正方形画像に加工したくなりました。
画像フォルダの指定、出力フォルダの指定、一辺の長さの指定、
をするとモリモリと正方形画像を生成します。
とりあえず自分の用途では動いたのでアップ。
#!/usr/bin/perl
use strict;
use warnings;
use App::Options(
option => {
indir => "type=string; required; default=Unknown;",
outdir => "type=string; required; default=Unknown;",
type => "type=string; required; default=Unknown;",
width => "type=integer; required; default=Unknown;",
debug => "type=boolean",
},
);
use Image::Magick;
use Path::Class;
my $image = Image::Magick->new;
my $dir = Path::Class::Dir->new($App::options{indir});
while (my $file = $dir->next) {
my $absin = $file->absolute;
my $image = Image::Magick->new;
next unless $absin =~ m|$App::options{type}$|;
$image->Read($absin);
my ($now_width, $now_height) = $image->Get('width', 'height');
my ($x_start, $y_start, $x_width, $y_height);
if ($now_width < $now_height) {
my $retio = $App::options{width} / $now_width;
my $new_height = int($now_height * $retio);
$image->Resize(
width => int($App::options{width}),
height => int($new_height),
blur => 0.9
);
($now_width, $now_height) = $image->Get('width', 'height');
if ($now_width < $now_height) {
$x_start = 0;
$x_width = 0;
my $margin = int(($new_height - $App::options{width}) / 2);
$y_start = 0;
$y_height = $margin ;
$image->Crop(geometry=> $x_start."x".$y_start."+".$x_width."+".$y_height);
$image->Crop(geometry=> $x_start."x".$y_start."+".$x_width."-".$y_height);
}
}
else {
my $retio = $App::options{width} / $now_height;
my $new_width = int($now_height * $retio);
$image->Resize(
width => int($new_width),
height => int($App::options{width}),
blur => 0.9
);
($now_width, $now_height) = $image->Get('width', 'height');
if ($now_width > $now_height) {
$y_start = 0;
$y_height = 0;
my $margin = int(($App::options{width} - $new_width) /2);
$x_start = 0;
$x_width = $margin;
$image->Crop(geometry=> $x_start."x".$y_start."+".$x_width."+".$y_height);
$image->Crop(geometry=> $x_start."x".$y_start."-".$x_width."+".$y_height);
}
}
if ($absin =~ m|^.+/(.+?)$|) {
my $filename = $1;
my $absoutdir = Path::Class::Dir->new($App::options{outdir})->absolute();
$image->Write("$absoutdir/$filename");
}
}
しばらく自分で使いながらデバッグします。
2009-01-07 Wed
これから15分で Remedie を始めるための資料
Remedieを使い始めたので、さっそく手順をまとめました。

この資料を15分くらいかけて上から下まで読み、
Mac OSX やDebian Linuxにインストールすると、
割とあっさり、Remedieが動かせると思います。
とくにMac OSX についてはサーバを用意しなくても、
Remedie Serverをインストールすれば利用準備が完了してしまいます。
また、Remedie Playerは快適なRemedie生活を助けてくれるでしょう。
Linuxサーバにインストールする場合や、
自分で全部インストールしたい場合には、
やはりコツコツとインストールする必要あります。
Remedieのインストール自体は15分で終わらない場合が多いでしょう。
# 沢山のCPANモジュールを使ってるから
Remedieとは
Remedie は Perl で書かれたプラガブルな
メディアセンターアプリケーションです。
Plaggerを生んだ、miyagawaさんによるアプリです。
- Plagger - Trac
-- http://plagger.org/trac
Remedieに、さまざまな動画ファイルの更新情報を登録することで
Remedieは、自分のお気に入り動画で埋め尽くされた
自分専用の動画閲覧インターフェイスになってくれます。
プラガブル、を簡単に言うと、
何か自分好みの機能を追加する際に、
Remedieのプラグインとして必要な
最小限のコードを書くだけで、
その機能を実現できる仕組みです。
Mac OSX で Remedie を使いたい場合
miyagawaさんが、Remedie ServerというOS Xアプリ化されていて、
アイコンをダブルクリックだけで、Remedieサーバーを起動できるバイナリを公開しています。
ですので、Mac OSX で Remedieを使う場合、必要な手順は大きく2つだけです。
1、Remedie-Server をインストール
2、Remedie-Server を起動してブラウザでアクセス
もしも、便利にRemedieを閲覧したい場合は、drikinさんが作ったRemedie Playerを使うために、
3、Remedie-Player をインストールして起動する
を行なうと良いでしょう。
1、Remedie-Server をインストール
Remedie-Serverにアクセスして、
一番新しい「Remedie-Server-xx.xx.xx-leopard.zip」をダウンロードしましょう。

僕は「Remedie-Server-0.6.18-leopard.zip」を試しました。
ダウンロードしたらファイルを解凍します。
解凍するとできるディレクトリ内の「Remedie Server」を適当な場所に移します。
# 「アプリケーション」ディレクトリなど。

その後、Remedie Server を実行します。

こんな感じになったら起動完了です。
2、Remedie-Server を起動してブラウザでアクセス
起動できたら、http://localhost:10010/にアクセス!

おお!ばっちりですね。ばっちりです!
3、Remedie-Player をインストールして起動する
毎回 Remedie Server を起動した後ブラウザでアクセスするのが
面倒な方には、Remedie Playerをオススメいたします。
@drikin さんのRemedie-Playerをダウンロードしましょう。

僕は「Remedie_Player-0.9.zip」を試しました。
ダウンロードしたらファイルを解凍します。
解凍したらできるディレクトリ内の「Remedie Player」を適当な場所に移します。
# 「アプリケーション」ディレクトリなど。

その後、Remedie Player を実行します。
このとき、もしもRemedie Serverが起動していなければ、Remedie Serverが起動されます。

こんな感じになると、以下のようなウィンドウが表示されて、Remedieを利用することができます。

Remedie Playerは「command+F」でフルスクリーンになってるのが素敵です。
詳しくは、以下の記事をご覧下さい。
Remedie Serverを、何回起動しようとしても起動できない時は?
ときどき、Remedie Serverの終了をうまくできないときがあるのですが、
そんなときに気が使いないで Remedie Serverを起動しようとすると
起動しても起動しても起動しないということになります。
そんなときに、ターミナルで「ps ax|grep remedie」してみると、
15846 ?? Ss 0:03.85 /usr/bin/perl /XXX/XXX/Remedie Server.app/Contents/Resources/bin/remedie-server.pl
のように、終了したはずの Remedie が立ちあがっている場合があります。
このような場合は、この remedie-server.pl のプロセスを kill すれば良いでしょう。
以上で、Remedie Server と Player を使った利用の説明は終了。
Remedie を楽しんで下さい!!
Mac OSX 以外で Remedie を使いたい場合や、コードを読みたい場合
簡単に使うだけならバイナリをインストールして起動すれば良いと思います。
Mac OSX 以外でコードを読みたい・中身をいじくりたい場合や、
Remedie を自宅で起動しておいて、出先でアクセスしたいとか言う場合は、
Remedie のソースコードを取得して自分の環境に合わせて
インストールやら設定やらすることになると思います。
この資料で行なう、初回のインストールでは
ソースを追加したり、いじくらないでも、
適当な動作や結果を得ることができそうです。
Remedieのチェックアウト
最近のremedieを自分で何とかして使いたいという人はgitを使いましょう。
- miyagawa's remedie at master — GitHub
-- http://github.com/miyagawa/remedie/tree/master
git使ってないし、別にちょっと動けばいいよ、という人は
この節は飛ばしちゃってください。
さて、gitをインストールしていない人は以下のような感じで、とりあえず入れちゃいましょう。
Debian Linuxの場合はお手軽にインストールできます。
% apt-get install git % apt-get install git-core % update-alternatives --config git 2の「/usr/bin/git-scm」を選択する。
これで終了。次はMacOSX。
Mac OSXの場合は、git-osx-installerという便利そうなものもありますね。
- git-osx-installer
-- http://code.google.com/p/git-osx-installer/
もしXcodeをインストールしてあるなら、
以下を確認して、最新っぽいtar.gzファイルをもってきて
自前でコンパイル、インストールしても良さそうです。
- Index of /pub/software/scm/git
-- http://www.kernel.org/pub/software/scm/git/
今回は後者にチャレンジ。
今日の時点では、最新バージョンは1.6.4っぽかった。
% wget http://www.kernel.org/pu% b/software/scm/git/git-1.6.4.tar.gz % tar xfvz ./git-1.6.4.tar.gz % cd git-1.6.4 % ./configure prefix=/usr/local # prefixはお好みに % make % make install # make でエラーになってなかったらね
which してgitが見つかったら大丈夫。
/usr/local/bin/git
あるある。
gitのインストールって気を使うべきことが多いですが、
とりあえずRemedieが使えればいいんだ、という立場を崩さず、
とっとと先に進みます。
remedieのgithubに書いてあるClone URLを入力してgit cloneします。
- MacOSXの場合ね。
% git clone git://github.com/miyagawa/remedie.git Initialized empty Git repository in /Users/**/home/remedie/.git/ remote: Counting objects: 3836, done. remote: Compressing objects: 100% (1324/1324), done. remote: Total 3836 (delta 2298), reused 3793 (delta 2275) Receiving objects: 100% (3836/3836), 906.29 KiB | 134 KiB/s, done. Resolving deltas: 100% (2298/2298), done.
ls して、「remedie」ディレクトリを確認できましたか?
できたらOK。
もしもRemedieがアップデートしたら、
git cloneでできたディレクトリ内でgit pullしましょう。
Already up-to-date.
こうなったら、最新の状態になっている。
いきなり起動はできない。CPANモジュールをインストールしよう
起動する前に必要なことは、remedie/HACKINGに書いてある。
- remedie/HACKING
For now, run > rm -r ~/.remedie > perl -Ilib -MRemedie::DB::Schema -e 'Remedie::DB::Schema->install'
でも、大概の場合、Remedieで必要なモジュールが不足で、
この操作を完了できないと思います。
ということで、ビシビシとモジュールを入れます。
perl -MCPAN -e shell して
それから、installしまくります。
Makefile.PLを加工するのが面倒だったので、(何でだろう)
以下のエントリからモジュールのリストをコピーさせてもらい、
足りないモジュールを付け足しました。
- Remedie を試してみる #3 - Holidayworking::Diary
-- http://d.hatena.ne.jp/holidayworking/20081203/1228230236
実際のインストール時のコマンド履歴が以下。
$ perl -MCPAN -e shell 中略 install Module::Install install Feed::Find install FindBin::libs install HTTP::Engine install Image::Info install JSON::XS install Log::Log4perl install MIME::Types install MooseX::ConfigFromFile install MooseX::Getopt install Path::Class install Rose::DB install Rose::DB::Object install String::CamelCase install XML::RSS::LibXML install DBD::SQLite install Log::Dispatch install File::Find::Rule install XML::Atom install XML::Feed install Template install DateTime::Format::ISO8601 install MooseX::ClassAttribute install File::Find::Rule::Filesys::Virtual install HTML::ResolveLink install HTML::Selector::XPath install YAML::Syck install Cache::FileCache install Web::Scraper install HTML::Scrubber install Path::Class::Unicode install Text::Tags::Parser install String::ShellQuote install XML::OPML::LibXML install XML::LibXML::Simple install Encode::JavaScript::UCS install AnyEvent install AnyEvent::HTTP install Coro install EV install Devel::LeakGuard::Object install HTML::TreeBuilder::LibXML install HTTP::Parser install Net::Rendezvous::Publish install Net::SSLeay install Term::Encoding install Any::Moose install MouseX::ConfigFromFile install MouseX::Getopt install MouseX::Types::Path::Class install Mac::AppleScript install File::Spotlight install Net::Rendezvous::Publish::Backend::Apple
もしも、これでモジュールが揃っていれば、
以下のようにperl Makefile.pmしたときに
エラーもなくfinishすると思います。
最近のRemedieでは「いまMac OS Xを使っているなら、Remedie Server.app があるよ。そっちの方が開発者じゃないならかなりオススメだよ」というメッセージが出てきます。
$ perl Makefile.PL --------------------------------------------------------------- You're trying to build your own Remedie using Makefile.PL on Mac OS X. There's a binary .app package available at http://github.com/miyagawa/remedie/downloads and it is hightly recommended to install the binary unless you're a developer. --------------------------------------------------------------- include /root/remedie/inc/Module/Install.pm include inc/Module/Install/Metadata.pm include inc/Module/Install/Base.pm include inc/Module/Install/TestBase.pm include inc/Module/Install/Include.pm include inc/Test/Base.pm include inc/Test/Base/Filter.pm include inc/Spiffy.pm include inc/Test/More.pm include inc/Test/Builder.pm include inc/Test/Builder/Module.pm include inc/Module/Install/WriteAll.pm include inc/Module/Install/Makefile.pm Writing META.yml include inc/Module/Install/Win32.pm include inc/Module/Install/Can.pm include inc/Module/Install/Fetch.pm Writing Makefile for Remedie
足りないモジュールがあるときは、
以下のようにエラーがでます。
WARNING WARNING WARNING WARNING WARNING WARNING
足りないモジュールは、インストールしましょう。
ひとしきり、モジュールをインストールした後に
makeをして足りないモジュールが無いかさがします。
$ make $ make test
間違っても、make installしないようにしましょう。
DBD::SQLite を別パッケージにして上書きしよう
DBD::SQLiteに、ちょっくら不具合があるらしい。
上記のインストールだけでは、
RemedieにRSSを登録しようとしたけれど、
closing dbh with active statement handles at /usr/local/share/perl/5.8.8/Rose/DB.pm line 842.
みたいなエラーがでて、Remedieが止まってしまう。。
この解決方法は、以下のように
- DBD::SQLite で closing dbh with active statement handles になる件のまとめとその解決方法について - TokuLog 改めB日記
-- http://d.hatena.ne.jp/tokuhirom/20080727/1217140312
【現状での現実的な解法】 DBD::SQLite::Amalgamation
と書いてあるので、使う。
DBIのバージョンが低い場合があるので、
ちゃんと最新にしておく。
install DBI
そのうえで、codereposからDBD::SQLite::Amalgamationを取ってくる。
さらにインストールまでやってみる。
$ svn co http://svn.coderepos.org/share/lang/perl/DBD-YASQLite/trunk/ ./DBD-YASQLite cd DBD-YASQLite $ perl Makefile.PL $ make $ make test $ make install
はい、できたー。
とりあえず動かしてみよう。
とりあえず動かしてみます。
まず、初回なので以下をやって、
For now, run > rm -r ~/.remedie > perl -Ilib -MRemedie::DB::Schema -e 'Remedie::DB::Schema->install'
次に、以下。
perl -Ilib .bin/remedie-server.pl
エラーが起きなければ、問題ないです。
http://localhost:10010/にアクセスしましょう。
これが起動したばかり。

ちなみに、Remedieは、
- NHKオンライン|RSSについて
-- http://www3.nhk.or.jp/toppage/rss/
などの動画も取得できるので、割と便利。
やってみましょう。

その結果、以下のような感じになりました。

Remedieは立ち上がってしまえば、非常に簡単です。
ローカルポートに転送するプロキシ
今後は、外出先からでもRemedieを使えるように、
Webサーバから10010番ポートに転送される設定を書きます。
今回はlighttpdを使っています。
remedieはローカルホストの10010ポートに立ち上がるので、
外出先からアクセスできるように、
自宅サーバのlighttpdのproxyに設定を追加する。
lighttpdはaptで入れてしまった。
/etc/lighttpd/lighttpd.conf
server.modules = ( 任意のモジュール "mod_proxy", 任意のモジュール )
その上で、以下を追記する。
/etc/lighttpd/conf-enabled/10-proxy.conf
$HTTP["host"] == "任意のアドレス" {
proxy.server = (
"/" => (
"artofmission" => (
"host" => "127.0.0.1",
"port" => 10010
)
)
)
}
設定を変更したらlighttpdを再起動します。
/etc/init.d/lighttpd restart
エラーが表示されることなくlighttpdが起動すれば、
すれば、remedieをローカルで立ち上げたときに、
外部から参照できるようになるでしょう。。
まとめ
今回は Remedie を動かしてみました。
Remedieは、coolirisを使ったサムネイル閲覧ができるので、
動画の量が増えたときでも便利に探せます。

Remedieはプラグインを自分で書いて、
気に入らない挙動を修正できるのが嬉しいところなので、
今後は、そういうことをやった例についても触れます。
つづきは、あとで書く。
その他の参考文献
- Remedie使いだす - otsune's SnakeOil - subtech
-- http://subtech.g.hatena.ne.jp/otsune/20081202/remedie
- remedie からコンテンツアグリゲータに必要なことを学ぶ - Future Insight
-- http://d.hatena.ne.jp/gamella/20081122/1227283917
- ブログが続かないわけ | 週末にRemedie を試してみた
-- http://en.yummy.stripper.jp/?eid=1100711
- RemedieをFedora 10にインストール - Perlメモ - perlmemoグループ
-- http://perlmemo.g.hatena.ne.jp/fedora9/20081209/p2
- MOONGIFT: » フィードを使ってブラウザ上で動画を楽しむ「Remedie」
-- http://www.moongift.jp/2009/01/remedie/
- Remedieかなりアップデート - otsune's SnakeOil - subtech
-- http://subtech.g.hatena.ne.jp/otsune/20090112/remedieChangelog
- SetupRemedie - mizzy.org - Trac
-- http://trac.mizzy.org/public/wiki/SetupRemedie
- Drift Diary13: Remedie Player
-- http://blog.drikin.com/2009/06/remedie-player.html
[2009-01-08]:追記
- インストールが15分で終わらないことを明示。
- githubからcloneする方法を追記した。
- いろいろ雑なところを、付け足し。
- 本文で触れていない参考文献を追加
[2009-01-12]:追記
- 参考文献を追加
- Remedieが更新されたときにgit pullする、の話を追加
[2009-09-11]:追記
- Remedie-ServerとRemedie-Playerの話を追記しました。
-- miyagawaさん、ありがとうございました。
- その他、最近の結果を確認して記事に反映しているとこです。
2008-10-31 Fri
目黒の大和路で開催された「TpfjPreMeeting #1」の2回目に行ってきた
「TpfjPreMeeting #1」の2回目が、目黒の大和路で開催されました。
TpfjPreMeetingは、これから5年〜10年後にPerl界を今より盛り上げるために開催されています。#1は、今日を含めて全部で4回開催されます。

会場で話された内容はまとめにくいですが、
- Perlに関する団体をつくることに賛成。
という雰囲気を、その場にいた全員が発していました。
僕はこれが一番の収穫だと思います。
以下はその他のログ。
- まじめモードな試合時間は30分。ロスタイム20分。よくやりました。
- 自分と異なる業種・業務の人には、常に尊敬の念をもって接しよう
- もしかして自分が嫌われていないか、と自分自身を見つめ直そう
- で、Tpfjですよ。と強引に話を戻そう
- 鳥根にしてくれよう
- 意味がわからないです、と素直を言おう。
- 地方が意外と熱いのでは?という仮定をしてみよう。
- 伝説の助っ人が自責点したような状況である。
- SuffixのCatchやQueryは便利である
何のことやらという感じですが、こんな感じでした。
まだ、4回目は人数に余裕があるので、参加していない方は是非。
- TpfjPreMeeting1 - Soozy.org
-- http://soozy.org/index.cgi?TpfjPreMeeting1
The Perl Foundation Japanに参加したい人。日本でPerl盛り上げていきたい人。「あいつだけはTPFJの理事になって(ほしい|ほしくない)」なんて意見のある人。 人数が集まりすぎると話ができないので、6人くらいずつ、最大4回くらい開催予定。
どうでも良いけど、今日は大和路店内の至る所がハロウィン仕様のカボチャだらけ。

この後、店員さんがおいしく食べるのかなぁ。
2008-10-15 Wed
日本のPerl界を盛り上げていくための 「TpfjPreMeeting #1」
id:lestrratさんが、The Perl Foundation Japanを立ち上げ、日本のPerl界を盛り上げるために動き出しました。lestrrat++。
- TPF-J 準備 - 飲み会しませんか - D-6 [相変わらず根無し]
-- http://mt.endeworks.jp/d-6/2008/10/tpfj-1.html
ということで、準備飲み会が開催されるそうです。早速申し込んでみました。
- TpfjPreMeeting1 - Soozy.org
-- http://soozy.org/index.cgi?TpfjPreMeeting1
The Perl Foundation Japanに参加したい人。日本でPerl盛り上げていきたい人。「あいつだけはTPFJの理事になって(ほしい|ほしくない)」なんて意見のある人。 人数が集まりすぎると話ができないので、6人くらいずつ、最大4回くらい開催予定。
「日本でPerl盛り上げていきたい人」という広い条件で募集してくださっているので、「行きたい!」と感じた人は申し込んでみると良いのでは。
今後も積極的にTPF-J的な動きは取り上げるようにします。
2008-09-13 Sat
UTF-8のファイルがLatin1に文字化けしてたら「Encode::DoubleEncodedUTF8」
よりによって、このChangeLogをエディタで開いたら文字化けしていました。
文字化けの具合を見ると、定番のダブルエンコード(二重エンコード)で、latin1になっていました。
そんなわけで、miyagawaさんのPerlモジュール「Encode::DoubleEncodedUTF8」で文字化けを解消しました。
《続きを読む》
2008-09-12 Fri
「HTML::Template::Pro」が「HTML::Template」より、かなり早くて助かる
なかなか、HTML::Template::Proを試すのに丁度よいタスクが見つからなかったのですが、僕が使ってるchalowが「HTML::Templeate」というPerlモジュールを使っているので、早速「HTML::Template::Pro」と入れ替えてみました。
- Igor Yu. Vlasenko / HTML-Template-Pro-0.71 - search.cpan.org
-- http://search.cpan.org/~viy/HTML-Template-Pro-0.71/
結論から言うと、僕は人生を沢山損してた、と思いました。
《続きを読む》
2008-09-10 Wed
HTTP::Engine のカンファレンス - HE conference #01
HTTP::Engineのカンファレンスが、いつ開かれるか分からないけど、そのうち開催されるみたいです。
- HE conference #01 - Soozy.org
-- http://soozy.org/?HEcon1
それにしても、参加者資格の範囲が広いです。
or
HTTP::Engine を開発している人
or
HyperEstraier を開発している人
or
HTTP::Engine をインストールしたことがある人
or
WSGI, Rack 関係者
or
HTTP::Engine とか Catalyst::Engine などに興味のある人
or
Catalyst キモいと思った人
「Catalyst キモいと思った人」とか、もはやPerlであることや、スクリプト言語好きかとかを超越した範囲指定ですね。
タイミングがあったら是非参加したいっす。
改訂新版 Cisco Catalyst LANスイッチ教科書: シスコ/Users/lrlab/Music/iTunes/Album\ Artwork/Cache/4BA29E726D82EFD4/03/03 システムズ株式会社 LANスイッチワーキンググループ


2008-09-04 Thu
Thrift で多言語 RPC 通信を試す準備
id:naoyaさんから「Thriftいいよ」と聞いたので、使ってみることにしました。
XSやSWIGと違い、C++ でサーバアプリを書くので、実装の仕方によっては巨大なデータの読み込みや、データ構造の構築の回数を減らせるのかな、と期待しています。
でも今は、ちょっとインストール途中。
今後、暇を見つけて綺麗なメモにします。
以下が試用している資料。
WEB+DB PRESS Vol.46

Thriftのインストールメモ
Thriftのダウンロード
ダウンロードは以下から行なう。
- Facebook Developers | Thrift
-- http://developers.facebook.com/thrift/
Boost 1.33.1以上が必要なのでインストール
- SourceForge.net: Boost C++ Libraries
-- http://sourceforge.net/project/showfiles.php?group_id=7586
以下つづく。
2008-09-01 Mon
spritの挙動
高林さんが、プログラミング言語のsplit関数の挙動の違いについて言及していました。
- split の研究 - bkブログ
-- http://0xcc.net/blog/archives/000201.html
PerlとRubyはsplitの第3引数に-1を与えることで、
末尾の空要素の省略を抑制するが、PythonやJavaScriptは-1がいらない、
ということを知らなかった。
JavaScriptでも-1を付けてしまいそうだったのでメモ。
2008-08-29 Fri
MacBookにGMPと、Math::GMPと、Math::BigInt::GMPをインストールするんだ
GCC4.3をコンパイルするときにGMPが必要になって気がついたのですが、
Math::BigInt::GMPってGMPを入れたら無事にインストールできますね。
- The GNU MP Bignum Library
-- http://gmplib.org/#DOWNLOAD
GMPのバージョンは4.3.2。
GMP自体は、clouderさんの記事をみたら、すんなりインストールできました。
- MacBook AirにGMPをインストールする方法 (Clouder::Blogger)
-- http://blog.clouder.jp/archives/001049.html
でも、その先が、ぜんぜんうまくいかないのです。
そもそもMath::GMPのインストールでこけまくります。
数時間悩んで仕方がないので、portsでMath::GMPをインストール。
$ sudo port install p5-math-gmp
その後、Math::BigInt::GMPをインストールしたら入った。
$ sudo cpan 'Math::BigInt::GMP'
うーん、GMPのバージョンが良くないのでしょうか。
portsは、4.2.2でMath::GMPをテストしていたのです。
でも、僕は、4.2.3をインストールしたので。うーん。
とりあえず、パフォーマンスを計測しました。
計測プログラムはdanさんのところのを使いました。
- 404 Blog Not Found:備忘録 - Intel Mac vs. GMP
-- http://blog.livedoor.jp/dankogai/archives/50712932.html
まずは、Math::BigInt::Calc。
$perl bench.pl Calc 5000 Math::BigInt::Calc at mbibench.pl line 10. elapsed: 6.72095084190369s
次に、Math::BigInt::GMP。
perl bench.pl GMP 5000 Math::BigInt::GMP at mbibench.pl line 10. elapsed: 0.470081090927124s
おお、全然早さが違う。あまりの早さに驚きました。
MacBookのCPUがせっかくcore2なので、これも試してみました。
- gmp-4.2.3-core2
-- http://www.geocities.jp/ct35z/gmp-core2.html
インストールは無事にうまくいきました。
専用の環境を用意せずにパフォーマンスを計ってみたら、
調子が良いときは、0.01秒くらい速くなりますけど、
調子が悪いと同じくらいですから、体感速度的には誤差範囲です。
これは調子が良いとき。
$ perl bench.pl GMP 5000 Math::BigInt::GMP at bench.pl line 10. elapsed: 0.438695192337036s
まぁ、ちょい早いのか。
とりあえず、疲れたので終了。
また同じことになるだろうから、その時考えます。
2008-08-22 Fri
Yokohama.pm - Yokohama Perl Mongers Technical Talk #2
Yokohama.pmのテクニカルトークが開催されたので行ってきました。
とても暖かいイベントでした。
スタッフの方と、会場を提供をしてくれたデジハリさんに感謝。
どうもありがとうございます。
平日の夕方に横浜ってありえないなぁ、と言いつつ、通っていた高校やバイト・パート先が横浜駅周辺にあったので、楽しみにしていました。
- Conference2 - Kwiki
-- http://yokohama.pm.org/wiki/index.cgi?Conference2
2008/8/22(金) 18:00 Open 18:30 Start 20:30 End
# 開催予定会場
デジハリ横浜校
カンファレンスは最初から最後まで、全体的に暖かい雰囲気。
2時間は、本当にあっという間で、ちょっと物足りないくらい。
3時間くらいだと、満足感が出そうですね。
横浜に、やる気のあるPerlユーザーが集まる場所ができたことは、とても素晴らしいことです。
横浜で開催するから来られる人も多そう。
今後もタイミングが合ったら積極参加します。
【関連リンク】
- Yokohama.pm テクニカルトーク #2に行ってきた! - dann@webdev
-- http://dann.g.hatena.ne.jp/dann/20080822/p1
- Yokohama.pm#2でLTをさせて頂きました。 - iDeaList::Writing
-- http://d.hatena.ne.jp/acotie/20080824/1219530707
- ゆーすけべー日記: Yokohama.pm tech talk #2 に行って来た&『Perlモジュールだけで挑戦「画像の物体認識類似検索」』
-- http://yusukebe.com/archives/08/08/24/200952.html
2008-03-24 Mon
Catalystアプリを作る際のポリシー
Catalyst は Perl の Web アプリケーションフレームワーク。
そのため、
- ひな形からアプリを作る際の自由度
- Perl である故の自由度
のような自由度が絡み合って、
クールで、より多くの部分が再利用可能な、
開発、運用時にトラブルの少ない開発ポリシーは、
未だに「コレ!」というものが、あんまりないですよね。
先日というか、結構前におもしろかったのは、typesterさんの記事。
- Catalystアプリオレオレポリシー
-- http://unknownplace.org/memo/2008/02/29#e002
1. アプリ名にかかわらず設定ファイルはconfig.yamlとconfig_local.yaml
2. でも変更することがないほとんどの設定はyamlには書かない。yamlがごちゃっとするときもい
3. ForceUTF8系モジュールは使用しない。内部がきちんとutf8で統一されていれば必要ない。
4. MyApp::UtilsとかいうのでいろいろBKなことをまとめてする。uri_forを気に入るように直したり、FillInFormの挙動変えたり
この記事のブクマコメントにikebeさんが
とコメントしていたのを見ました。
Contextという単語は、僕の頭では「文脈、脈絡」みたいな感じ。
ちょっと考えると、かなりガッチリはまったモジュール名ですね。
2008-03-06 Thu
Catalyst の Model 問題
Catalyst でアプリに依存しない Model は再利用できるようにしたいです。
けれど、標準のヘルパースクリプトだと、
「MyApp::Model::*」以下に作ることになってしまいます。
そうすると、無駄に Model のパッケージ名も長くなるし、
なにより Model が Catalyst に依存することになり、
テストしにくくて死ぬってことで、良いことが無いです。
既存のモジュールを取り込むために、
Catalyst::Model::Adaptor使っても、なんかいまいちな感じ。
ということで、今日このごろの議論を眺めていると、
以下のような方向でまとまりそうです。なるほど。
- はてなブックマーク - タグ catalyst
-- http://b.hatena.ne.jp/t/catalyst?sort=eid
-- Catalyst::Model::Adaptor を使うべき?
-- いや、lib/MyApp/C/とかにモジュールを作ろう
- DB がらみは、一つのDB内で簡潔するなら、DBIC::Schemaクラスのインスタンスに書く
- 複数のDBにまたがるときはCに書いとく
- Controllerには、ロジックを書かず、ロジックを扱いたいなら、適時C以下のモジュールかDBIC::Schemaのインスタンスに投げる
- なんなら Catalyst はDispatcher用途にしか使わない
- config.ymlに頻繁に変更しない設定は書かない。基本モジュールに直書く。
2008-03-04 Tue
ファイルが更新されてたら何かするPerlスクリプト
ファイルが更新されたら何かするスクリプトを書きました。
(任意の)ロックファイルに、対象ファイルを前回処理したときの
対象ファイルのタイムスタンプを保存しておきます。
スクリプトをcronとかで回して、対象ファイルの更新時間が変わっていたら、
指定したスクリプトを走らせるという、単純なものです。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use IO::File;
my $target_file = $ARGV[0];
my $lock_file = $ARGV[1];
my $process_file = '';
unless ($ARGV[2]) {
$lock_file = $ARGV[0].'lock';
$process_file = $ARGV[1];
}
else{
$process_file = $ARGV[2];
}
unless (-e $target_file) {
die "[error : cl_auto_compile] There is not target file to auto process.";
}
my $pre_time = localtime( (stat($target_file))[9] );
# 処理する必要が無ければ止める
if (-e $lock_file) {
my $io = IO::File->new($lock_file, 'r') or die $!;
my $line = $io->getline;
$io->close;
if ($pre_time eq $line){
exit;
}
}
# 処理を書いたファイルを実行する
{
my $io = IO::File->new($lock_file, 'w');
$io->print($pre_time);
$io->close;
eval{`$process_file`};
}
exit;
# 実行方法
# ./auto_process.pl 対象ファイルのパス 処理を書いたファイルのパス
# ./auto_process.pl 対象ファイルのパス 対象ファイルのロックファイルのパス 処理を書いたファイルのパス
たぶん、こういうの他にあると思うんですが。。。
2008-01-24 Thu
Imager で JPEG ファイルを扱うときの画質レベル
少し前に、写真をブログ用に縮小する Perl スクリプトを書いたのですが、
どうも生成される画像の質がよろしくありません。
かなりストレスを感じたので、Imager のマニュアルに目を通すと、
以下のような趣旨の一文が見つかりました。
あわてて試したところ、「jpegquality = 95」くらいだと、
食べ物がおいしそうなまま画像が小さくなることが分かりました。
今後 Imager を使うときは、jpegquality くらいは設定します。
2007-04-21 Sat
HTTP::Response::Encoding
HTTP::Response::Encodingというモジュールが公開されていた。
404 Blog Not Found:CPAN - HTTP::Response::Encoding Released!
とても手軽に利用できて良いですね。
研究室には文字化けで困っている人が多いので、喜びそうです。
個人的に使っているモジュールでは、HTTP::Response::Encodingと
同様にレスポンスのヘッダーを見て文字コードを探しています。
# 駄目ならコンテンツ中のmetaタグをみたり、あきらめてGuessしたり。
取得するコンテンツの文字コードがshift-jisとeuc-jpの場合に、
Content-Typeヘッダーに文字コードとして解釈できないものが
意外と入ってくると感じるので、
文字コードとして解釈できないパターンを見つけるたびに、
正規表現パターンを拡張しています。
2007-04-08 Sun
Gangho
Xangoの牧さんが開発中の、クローラーフレームワークの
バージョン0.0.1が公開された。
現状ではXangoよりも性能が劣るみたいだけど、
将来的には良い感じになるはずです。
応援してます。
2007-04-07 Sat
Xangoは何かが変らしい
弾さんと話したときに、Xangoが何か変と言っていた。
私が今まで使っていたのは、古いXangoだったので、
今回のHackathonで最新版を見てみようと思う。
変じゃありませんように。
でも、まー、たぶんXangoはやんちゃなので、
POEがついてこないんじゃないかな??
という話をid:nagayamaとした。

ちなみに、弾さんの家に来てみたら昨日帰ったはずの
id:nagayamaとid:yappoがいてビックリ。
夜中に楽しいことがあったらしい。いいなー。
2007-04-06 Fri
libusbとDevice::USBのインストール
YAPC::ASIA 2007で大盛り上がりした、Yappoさんの
Device::USB::MissileLunchersをインストールしようとした。
必要なものは、libusbとlibusbを叩くDevice::USB、
あとは、Device::USB::MissileLunchers(CPANにない)。
libusb
% wget http://prdownloads.sourceforge.net/libusb/libusb-0.1.12.tar.gz % ./confiure % ./make % ./make install
Device::USB
cpanシェルで、install Device::USBするだけ。
・・と、ここまで来たところで、竹迫さんがミサイルを発射したので、
情熱がどこかへ行ってしまった。なので作業終了。
とりあえず、libusbを使うとUSBデバイスの認識や操作を
できるということが頭に刻み付けられたのでおk。
2007-04-06 Fri
CPANモジュールのアップは1回目はノリで
川崎さんにCPANモジュールのアップについて聞いてみたら、
「1回目はノリでアップしちゃえば?」と言われた。
本当にノリでアップして失敗しないようにだけ、気をつけよう。
なんでCPANモジュールのアップを考えるかというと、
自分が研究で使うモジュールを、頻繁にコピーしてるうえに、
そのモジュールを配布することが多くなったから。
自前のモジュールもたまにアップデートするし、
何よりコピーして渡すのは面倒。
「Install hogehoge」すれば、インストールできるよって
言ってあげることで、面倒な作業から開放される人を
何人か見捨ててきたので、そろそろ助けられる人になりたい。
そのためには、まずはアップロードだよね。
実際には、自前のモジュールの置換可能な部分は
極力、既存のモジュールを使うようにしたり、
メソッド名を整備したりとか、いろいろやることは多い。
何事も順番にやろう。

