2007-06-24 Sun
WebService::YahooJapan::WebMA
WebService::YahooJapan::WebMAがリリースされていた。
WebService::YahooJapan::WebMA - search.cpan.org
Japan Web MA Web Service
便利そうです。そういえばまだWebMAを試せていない。
週末はやることが多いなー。
2007-06-18 Mon
WebService::Rakutenを使ってみた
totowaで使っている楽天の検索結果を
取得するモジュールに、今まではWebService::RakuAPIを使っていました。
最近totowaが重たいと思うときに、RakuAPIが重たいことが分かったので、
楽天の公式Webサービスを利用するモジュールに入れ替えてみました。
WebService::Rakuten - A Perl interface to the Rakuten WebService API - search.cpan.org
楽天->RakuAPI->totowaだった検索の流れが、楽天->totowaになった分、
当然ですがtotowaのレスポンスが早くなりました。
$_->imageFlagが取得てきなかったので気がついたのですが、
WebService::Rakutenは楽天のAPIが返してくれるすべてのパラメタを
ハッシュに格納してくれるわけではないみたい。
最近になって仕様変更で追加されたパラメタを取得するためには
patchを当てなきゃいけないな。
とはいえ、大体の用途に使えてWebService::Rakutenは便利でした。
2007-05-26 Sat
Perlのファイル操作はFile::FinderとFile::Slurpで
探し方が下手な可能性もありますが、
僕はPerlでのファイル操作で頻繁にFile::FinderとFile::Slurpを
使っています。
# もっと便利なモジュールがあれば是非教えてください。
以下のようにして、指定ディレクトリ以下のファイル名を手に入れて、
読み書きを
とか
とかしてます。
研究室の学生さんがファイルの読み書きで面倒そうなことをしてるので、
モジュールを探して使ったほうがいいよ、というエントリーでした。
おしまい。
2007-05-21 Mon
メルマガ - 今日のCPANモジュール
冨田さんのCPANモジュールを紹介するメールマガジンをご紹介。
「CPANとか使ったことないしモジュールなんて分からんですよ」という人
は、このメルマガを読むと便利なモジュールを探したくなるのでは。
use CPAN; - 今日のCPANモジュール
メルマガを始めてみることにしました。この時代にメルマガ!?というの
も面白いかと。Perl の面白さは CPAN モジュールにあります。
PHP、Python、Java、Ruby といろいろさわって来ましたが、他の言語に比
べ Perl は言語そのもののできることが控えめで、また各モジュールの仕
事の範囲が小さい、という特徴がある気がします。
つまり、細かい部品を組み合わせてものを作るというイメージです。
その部品は CPAN に1万以上あるのですが、これだけあると最初はなかな
かとっつきにくいです。
このメルマガでは、「これはおすすめ」というものや、「最近達人たちが
注目してるのはこれ」てなモジュールを1回1個形式でお届け。
とりあえずは mfpm (マイフェイバリットPerlモジュール) がそこそこ
あるので、1日1個ペースでいける・・と思います。
このメルマガは最近はほぼ月刊なペースで更新されています。
個人的には、ほぼ週間を希望したいですが難しそうですね・・。
ざっと今のところ、大きく取り上げられているモジュールは
CPAN, strict, Fatal, Getopt::Long, Pod::Usage ,App::Options,
Module::CoreList,CPAN::Mini, WWW::Mechanizeまわり,
Template-Toolkit,DBIx::Simple, Acme::Bleach, DBIx::Class,
Imager, Image::Imlib2などなど。どれも重要ですね。
あ、Acme::Louはすぐ試さないと。
# ルー語変換モジュール
2007-05-19 Sat
NY.pmとPerlSemNY.pm - ニューヨークの2つのPerlグループ
ニューヨークには2つのPerlグループがあるよ、というお話。
Mint's log: Perl Seminar NYとNY.pm
プが二つあることになっています。ひとつがNY.pm、もうひとつが
PerlSemNY.pm(Perl Seminar NY)です。
どちらのグループも月に一回集まりがありますが、内容に大きな違いがあ
ります。Perl Seminar NYはその名のとおりセミナーを開いてテクニカル
トークを開催、NY.pmはバーで集まっておしゃべりするのが主目的。メン
バーは重なっていますし、現に今週のPerl Seminar NYにはNY.pmの主宰者
が参加していましたが、それなりに棲み分けはできているのかな、と思っ
たのは今週のこと。
2つのグループとも月に一回集まりがあるんだ。いいなー。
Perl Mongersのリストを読めばどこの都市にどんなPerlグループがあるか
分かるのかな。日本のPerlグループの総数を自分で調べたことないや。
調べよっと。
2007-05-13 Sun
エンジニアがすなる'Fizz-Buzz'といふもの
エンジニア以外はあまり気にならないはずの、
'Fizz-Buzz問題'という言葉があります。
最近良く目にしますよね。ね。ね。
どうしてプログラマに・・・プログラムが書けないのか?
れている遊び)にちなんで名付けた。Fizz-Buzz問題の例はこんな感じだ。
きは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5
両方の倍数の場合には「FizzBuzz」とプリントすること。
ちゃんとしたプログラマであれば、これを実行するプログラムを2分とか
からずに紙に書き出せるはずだ。
この問題が気になったので自分でFizz-Buzzを書いてみることにしました。
結果として、Fizz-Buzzからは、やってみることの価値を感じました。
何事も、やってみた後は他の人の技術から吸収できる量が増えます。
まだFizz-Buzzしてない人は軽くやってみると良いのでは。
Fizz-Buzz問題にPerlでとりくんでみた
最初の2分以内に書いたコード
正直ションボリ。かなり長いです。書けたけど如何なものか的な。
しかも時間に追われて、このコードが出てくるあたりが微妙です。
my $str = ;
if(0 == $i%3){
$str .= 'Fizz';
}
if(0 == $i%5){
$str .= 'Buzz';
}
unless($str){$str = $i;}
print("$str\n");
}
普段から無駄なコードを省く努力をしなくては。
まずはforを簡略化
forはPerlなら、以下のように短く書けるので書きます。
my $str = ;
if(0 eq $i%3){
$str .= 'Fizz';
}
if(0 eq $i%5){
$str .= 'Buzz';
}
unless($str){$str = $i;}
print("$str\n");
}
次にifを短くする。
次に、if文の括弧が目に付くので取ります。
ifの条件を囲む括弧も取れますが、
条件には括弧が付く方が好みなので、そのままにします。
my $str = ;
$str .= 'Fizz' if(0 == $i%3);
$str .= 'Buzz' if(0 == $i%5);
unless($str){$str = $i;}
print("$str\n");
}
unlessを取る。
単に$strが空のときに対応するだけなので、
unlessとprintの行は1行にできます。
my $str = ;
$str .= 'Fizz' if(0 eq $i%3);
$str .= 'Buzz' if(0 eq $i%5);
print $str || $i;
}
最初より断然分かりやすくなりました。
これ以上、コード量を少なくすると何をやっているのか、
混乱する気がするので、僕はこのくらいで良いかな。
Fizz-Buzz問題にとりくんだ感想
Fizz-Buzz問題の解法は無数に考えられます。
僕のコードよりも洗練されたコードを書いている人は多いです。
僕は彼らを尊敬します。
すごく簡単なコードを、さらに洗練しようと努力することが、
自分の実力を大きく引き上げることにつながることを体感できて
うれしかったです。
良くしよう、短くしようとすることが楽しくて仕方がない!
Fizz-Buzz問題に取り組まれた方の資料
- TAKESAKO @ Yet another Cybozu Labs: FizzBuzz - Golf Challenge
takesakoさんの記事が大変にまとまっているので、
この記事だけ読めば、大体のことが分かると思いました。
この手の問題は、今後もチャレンジしよっと。
最初に書いたショボいコードも隠さずに見せたいと思います。
それで、数年後に自分で見てウヒーとなる予定です。www
2007-05-10 Thu
ソースコードがUTF-8なPerlプログラムはuse utf8
ソースコードがUTF-8なPerlプログラムは冒頭で、
use warnings;
use utf8;
したほうが良いよという記事を読みました。
404 Blog Not Found:perl - use utf8;
よってソースコードがUTF-8で書かれていたら、use strict;とuse
warnings;のすぐ下でuse utf8;と宣言しておくとよいだろう。
開発環境をわざわざUTF-8化してしているので、
今後はuse utf8したほうが良いときにはつけるようにしようっと。
2007-05-10 Thu
Web::Scraper
miyagawaさんが公開した、Web::Scraperが人気です。
Web文書からデータを抽出するときにTreeを作らずに、
CSSセレクタでチチチっと読んで、該当箇所を取り出してくれます。
しかも自分でCSSセレクタを使うコードを書くよりも
単純にしてくれます。Web::Scraperいいですね。
- Journal of miyagawa (1653)
- はこべにっき# - Web::Scraper便利
- Unknown::Programming - 解析
- naoyaのはてなダイアリー - Web::Scraper
2007-04-25 Wed
YAPC::Asia 2007のセッション動画がGoogle Videoで公開
YAPC::Asia 2007のセッション動画がGoogle Videoで
見られるようになったそうです。
CodeZine:Perlの祭典「YAPC::Asia::2007」のセッションビデオ40本がWebで公開中
いるため、iPodやPSPなどにダウンロード・同期することもできる。
また、YAPC::Asia 2007サイト内のセッション詳細ページも、Flashムー
ビーが設置されており、タイムテーブル順にセッションを見ていくことが
できるようになっている。
Google VideoでYAPC::ASIA 2007を見る
動画のアップロード、おつかれさまです!
2007-04-23 Mon
SVN::TracWiki - Tracでパワポを検索できるようにするスクリプト
mizzyさんがSVN::TracWikiをリリースしました。
mizzy.org - SVN::TracWiki #0
何をするものかというと、Subversion の post-commit スクリプトとして
動作して、コミットされたファイルからテキストを抽出、そのファイルの
実体へのリンクを付加して、Trac の Wiki へ自動ポストするというもの。
File::Extractで対応しているファイル形式なら何もしなくても
テキスト抽出してくれて、Tracで検索できるそうです。
これは良いですね。
2007-04-23 Mon
Encode::find_encoding()の使い方
弾さんがEncode::find_encoding()の使い方を解説していました。
404 Blog Not Found:perl tips - Encodeを速く使う方法
Shift_JIS"も同じに扱うためには、当然なんらかの形でこれらが同じで
あることを判定しなければならない。それを担うのが、
Encode::find_encoding()だ。
実はこのEncode::find_encoding()、返すのは正規化された名前ではなく
オブジェクトである。そして、実のところこのオブジェクトこそが実際の
(en|de)codeを行うtranscoderなのである。よって最適解は、以下のとお
りとなる。
my $enc = find_encoding("Shift_JIS");
for my $i (0..0xffff) {
$enc->encode($str);
}
こんなに速いとは知らなかったです。以後使えるときは使います。
▼関連記事
[O] HTTP::Response::Encoding
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ヘッダーに文字コードとして解釈できないものが
意外と入ってくると感じるので、
文字コードとして解釈できないパターンを見つけるたびに、
正規表現パターンを拡張しています。
