ドミノ・ピザのクイズ

ドミノ・ピザをネットで注文し終わると、続けてクイズが始まる。
ピザが届くまでに答えを考えて、正解すると割引チケットやサイドメニューのクーポンをもらえる。
いつもイージーやノーマルを選ぶけれども、今日はハードモードに挑戦してみた。

今回の問題は、日本の歴代総理大臣の名前で、
1) 名字が1文字
2) 名前が1文字
3) 名字が3文字
4) 名前が3文字
5) 名字と名前を足して3文字以内
の条件で、多いものから順に答えよ、というもの。
見た瞬間、行ける、ピザ半額チケットはもらったと思った。
データベースに入れてSQL使おうか迷ったけれど、普通にスクリプトで解いた方が早そうだったので、Perlで解く事にした。

まずは歴代総理大臣の一覧データを入手しないといけないが、ウェブを検索しても名字と名前が分かれて書かれたページがなかなか見つからないので焦る。
結構たくさんページを見て回って、ようやく見つけた。
まず、ブラウザに表示されてる名前部分を選択してコピーし、Excelにペーストする。
HTMLのテーブルタグをExcelにペーストするといい感じにExcelの列になってくれるので、名前部分の列をコピーし、今度はvimにペーストする。
この時点で「安倍 晋三(第2次)」みたいに邪魔な文字列が混じってるので、vimの置換機能で「安倍,晋三」に変換する。さらにuniqで重複を取り除く。
ここからPerlで問題を解く。
急いだせいでタイプミスなどあったが5分程で出来た。処理を見直したが問題ない。
Perlを実行して出た答えを、ドミノ・ピザのページに戻って、入力した。

しばらくして、制限時間終了。答え合わせが始まる。
絶対問題ないはず。
問題ないはず。
…問題ないはず。
…だったが、まさかの不正解の判定。
そんな馬鹿なと再度処理を見直すと、しまった、元データが「歴代総理大臣の一覧」ではなく「戦後の歴代総理大臣の一覧」のページだった。
痛恨のミス。
やっと名字と名前が分かれて書かれたページを見つけたので、舞い上がってしまった。よく考えれば総理大臣が少なすぎた。
もうドミノ・ピザは二度と注文しない。

 #!/usr/bin/env perl
 use utf8;
 @list = qw(
     芦田,均
     安倍,晋三
     伊東正義
     宇野,宗佑
     羽田,孜
     海部,俊樹
     岸,信介
     吉田,茂
     宮沢,喜一
     橋本,龍太郎
     佐藤,栄作
     細川,護煕
     三木,武夫
     小泉,純一郎
     小渕,恵三
     森,喜朗
     菅,直人
     石橋,湛山
     村山,富市
     大平,正芳
     池田,勇人
     竹下,登
     中曽根,康弘
     田中,角栄
     東久邇宮,稔彦
     鳩山,一郎
     鳩山,由紀夫
     福田,康夫
     福田,赳夫
     幣原,喜重郎
     片山,哲
     麻生,太郎
     野田,佳彦
     鈴木,貫太郎
     鈴木,善幸
 );
 
 $hit = 0;
 foreach (@list) {
     ($sei, $mei) = split ',', $_;
     if (length($sei) == 1) {
         $hit++;
     }
 }
 print "1: $hit\n";
 $hit = 0;
 foreach (@list) {
     ($sei, $mei) = split ',', $_;
     if (length($mei) == 1) {
         $hit++;
     }
 }
 print "2: $hit\n";
 $hit = 0;
 foreach (@list) {
     ($sei, $mei) = split ',', $_;
     if (length($sei) == 3) {
         $hit++;
     }
 }
 print "3: $hit\n";
 $hit = 0;
 foreach (@list) {
     ($sei, $mei) = split ',', $_;
     if (length($mei) == 3) {
         $hit++;
     }
 }
 print "4: $hit\n";
 $hit = 0;
 foreach (@list) {
     ($sei, $mei) = split ',', $_;
     if (length($mei) + length($sei) <= 3) {
         $hit++;
     }
 }
 print "5: $hit\n";

Perl/PHP/Python/Rubyの求人数比較

求人情報サイトindeedでアメリカのPerl/PHP/Python/Rubyの求人数を比較してみた。

案外Perlが多いけど、1-2年後には他の言語に抜かれそう?
日本だとPHP>>Perl>>Ruby>Pythonという感じだろうか?
ちなみにLinkedInで同じように調べて見ると、

・Perl 1,411 jobs
・PHP 1,334 jobs
・Python 1,286 jobs
・Ruby 625 jobs

という結果に。
多分、受託開発系じゃなくて、自社コンテンツ開発系の会社だとPythonやRubyはもっとシェアが高くなるのではないかと思う。
ところで、LinkedInってもうじき日本参入するんだ。

CPANでPHPのモジュールを発見

PHPのユニットテストフレームワークを探してたら、なんとCPANでPHPのモジュールを発見。名前はズバリTest.phpという潔さ。
Test::MoreをPHPで実装したものみたいだけど、レビューに「this is CPAN not PEAR」なんて書かれて星1つの酷評されてる…(笑)。うける。

5 out of 13 found this review helpful:
Test.php (0.07)
This is some php code. Even the tests are php. I don’t think that this thing belongs to CPAN.

[edit]Note to down voters: this is CPAN not PEAR…[/edit]
Burak Gürsoy – 2007-06-08 13:13:00
Was this review helpful to you? Yes No

Imager

地震が起きてから、何事につけどうもやる気が湧かない。
このブログも全然更新してなかったので、これから怒濤のような更新をしたい。

閑話休題。
Perlで、テキストを固定幅で折り返した画像を作りたくって、最初Image::Magickで適当な所で改行させて済ませようかと思ったけど、Imagerには初めからその機能あった
というか、Image::MagickとかGDとかよりAPIがイケてる気がする。
もっと早くから使っておけば良かった。
ところで、「Imager」みたいな一般的で短い単語は検索に引っかかりづらいので避けた方が良いと思う。
E-magerとかImajorとかどうだろう?そんなのダメジャー?

Catalyst(またはPerl)のドキュメント

Catalyst(Perlで一番メジャーなウェブフレームワーク)を採用しているサイトの追加開発をしてる。
以前買ってあまり読まずにいた『モダンPerl入門』を読みながら、Catalystを学習している。
本で足りない部分を補うために、ネットで検索して、Perl開発者のブログの記事を参考にしている。
「はてなブックマーク」(http://b.hatena.ne.jp/t/catalyst?sort=)の中から、めぼしい物を適当に読んでるけれど、ブログだから内容が断片的で、古い記事だと今では非推奨な方法で書いてあったりするので注意が必要。

Perlって、Catalystに限らず(と言っても、他にメジャーなのはCGI::Appぐらいだけど)フレームワークの本ってあまりない。
PHPのCakeやZend、RubyのRoR、JavaのStruts、C#のASP.NETなどは、専門の本がたくさん出てるのに。
何でフレームワークの本がないんだろうって理由を考えると、Perlライブラリの流行が早くて、本を作ってもすぐに内容が陳腐化するからというのもその一つでは?
Perl本体は5.8のリリースからもう7年も経っていて大きな変化はないけれど、ライブラリは似た機能のライブラリがCPANに次々にリリースされる。
Perlだけ追っかけてる分にはいいだろうけど、たまにしかPerl触らないとついて行けない。系統だった学習が出来るように、もう少し整理されたドキュメントが必要じゃないかなと思う。
CPANのドキュメントは詳しいことはソースを読めみたいな感じだし。
PHPが普及した理由って、日本語のドキュメントが大量にある事が大きいと思う。