タイトルほどの内容はない。

Perl6 の開発チームの人の家族の方が癌の再発で手術、入院という状態になっているそうだ。

どんなオープンソースのプロジェクトでもそうだけど、そのプロダクト以上に重要な人生の節目には当然プロダクトのほうがプロダクトじゃないほうが優先されるよね。そのときにこそそのプロダクトにまつわるコミュニティ作りの力が一番試されるんだろうなぁ。人が1人いなくなったらメンテされなくなる事の無いように運営していくのも大切な事だ。

ちなみにPerl6 のほうはすでに他の人達がどうするかを協議している模様。

追記:普通に逆のこと書いてた。間違ってた
JPAでやんなきゃいけない事、手伝って欲しいことがいっぱいあるのでとりあえずメモ

  • 2010年度マニフェスト的なものを書かないといけないかなぁ。
  • JPAの日常業務をボランティアで手伝ってもらえる人を募集したい。メールへの反応、YAPC準備、研修準備。毎回お願いしてると結局俺がボトルネックになるので、ボランティアチームがいたらすごい嬉しい。特にYAPCは俺は前線に*出てはいけない*。YAPCで目立ちたい!人が前線に出るべき。LLにならってブレストをやったら人来るかな?
  • JPA PressがGoogle 検索に表れないので、どうにかする必要あり。この間のヤツからAdobeなんちゃらに文字データを入れ込んだはずなんだけど、検索にでてこないんだよな。どうすればいいの?
  • TPF本家ともっと緊密に行動する。特にGrantは使えると思う。ドキュメンテーション回りを特にどうにかしたい。

こっから下はまだ希望の段階。

  • 希望: どこかの大学・専門学校でPerlを教えているところと連携。ツテがあまりありませんので、連絡してもらえると嬉しい。
  • 希望: 全然声を掛けてないけど、なんらかの枠でDBI/Devel::NYTProfの作者のTim Bunce氏をYAPCに呼べたらなーと思ってるんだけど、ぶっちゃけ予算がありません。旅費をスポンサーしてもいいという企業・個人の方はいませんか。
  • 希望: 北海道・東北エリアでの Perl Mongerグループの創設。MLとかそういうのは別口でやってもらうにしても、PMのページをJPAで持つのはありかなぁ。
  • 希望: JPA会員だよ!ってな感じのブログパーツを作成したい。これもぶっちゃけ今は予算がないので、できればボランティアでお願いしたい。
まだこう、細かいpros/consがわからないのでなんとも言えないんだけど、とりあえずaio_open/aio_writeと普通のopen/print/closeで同じ事した場合とでベンチマークとか取ってみた。これでいいのかなー

環境はMac OS X 10.5.8, 2.4 GHz Intel Core 2 Duo, 4GM RAM.

Comparing with buffer size 10...
         Rate normal    aio
normal 80.0/s     --   -19%
aio    99.0/s    24%     --
Comparing with buffer size 100...
         Rate normal    aio
normal 80.0/s     --   -18%
aio    97.1/s    21%     --
Comparing with buffer size 1000...
         Rate normal    aio
normal 76.9/s     --   -13%
aio    88.5/s    15%     --
Comparing with buffer size 10000...
         Rate normal    aio
normal 52.4/s     --   -27%
aio    71.9/s    37%     --
Comparing with buffer size 100000...
         Rate normal    aio
normal 15.9/s     --   -63%
aio    42.7/s   169%     --

コードはこちら、githubで。
前のエントリ書いたら宮川さんにオススメ方法を教えてもらった

http://twitter.com/miyagawa/status/10271128928
plackup \
      -L Shotgun
      -MPlack::App::WrapCGI
      -e 'Plack::App::WrapCGI->new(script => "/path/to/cgiscript.cgi")'

だそうです!これなら全ての要件を満たせるもよう!そしてapp.psgiを作る必要ありません。

今これやってみて一つだけ問題点。多分POD入りのCGIは動かない。それと、__DATA__は見てくれるけど、__END__があると動かない。__END__さっき簡単なパッチのpull requestを送っておきました!

なお、-L Shotgunを使うと CGIファイルの中身は実行時までコンパイルされないのでご注意(つまり、plackup -rもいらないってことですね)
ちょっと案件で簡単なCGIスクリプトをを開発することになった。StarmanとかTwiggyでほとんど全て書いているのに今更CGIとかそういう突っ込みはとりあえずおいておいて・・・環境を作るのも面倒くさいし、簡単にサーバーを立ち上げたり落としたりしたい。

そこでPlackです!

追記:その後もらったコメントによると、こちらのほうがよさそうです







具体的にはplackupとCGI::Emulate::PSGIを使います。

何も考えずにとりあえず開発したいので、以下のようにapp.psgiにコードを書いていく。
use strict;
use CGI::Emulate::PSGI;
return CGI::Emulate::PSGI->handler(sub {
    CGI::initialize_globals(); # 重要
# ここから
#!/usr/bin/env perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

sub main {
    my $q = CGI->new();
    ....
}

main();

# ここまでがCGIのコード
});
あとで本当に単純にコピペしたいのでshebangもそのまま書いちゃうし、インデントもその部分だけファイルに書いたかのように記述していっちゃいます。

これを以下のように-rオプションをつけて起動。app.psgiのCGIコードに変更を加える度にサーバーも再起動して新しいコードを適用してくれる。
plackup -r -a app.psgi


これはいいわー。
(はいはい、まず言語論争するつもりないから、そういうコメント禁止ね)

1. 論旨

新たな就職氷河期到来が叫ばれる昨今、就職に困っている学生さんもたくさんおろう。「技術があればチャンスはあるかも」って思う人もたくさんおろう。その際にプログラミングでもいっちょやってみっか、って思う人もたくさんおろう。

そこでとりあえず言語を選ぶよね。「就職を有利にするため」という条件をクリアするためにあなたなら何を選ぶ?Java? C#? Ruby? PHP? (ちなみに自分は大学を卒業した時点で一番得意だったのはJavaですよ)

色々選択肢はあるのは当たり前なので他の言語も排除はしないけど、僕としては自分の今持っている情報と経験から、Perlは覚えておいて損は全くない!と言い切れる。それは至極単純な理由で、需要より供給が圧倒的に少ないから。

就職情報サイトで一番多く当たる言語とかはもちろんそれだけ需要があるという事でもあるのは当然だけれども、それはつまり供給もほうも当然多いのです。競争も激しいし、当然ながら1人当たりの価値は下がります(この場合の価値というのは給料という意味ではなく、採用する企業側からみたあなたの価値.... 採用するときにどれだけハングリーな目で見てもらえるか、です)

JPAの会員になってくれてる企業のうちアクティブに採用を検討している会社は(採用基準も高いところも多いけれど)、それはそれは切実にPerlエンジニアをほしがってます。今から少しでも多くPerlの知識を身につけておけば、競争が比較的少ない分野で輝くことができる可能性が高いわけですよ。

あなたのゴールはなんですか?クールな言語を覚えること?流行物やバズワードに乗ること?それとも・・・仕事を見つけること?重要なのは採用してもらい、社会に出て、そこで経験を積むことなはず。

株式相場でもそうだけれども、勝ちたいなら基本的には逆張りしないといけないですよ。そういう意味で全く持って Perlは良いオプションだと思います。

ちなみに名の通ってるPerlを使用している企業の中ではWeb系の企業が多いのでPerlを選ぶ=Web系のキャリアに就くと思っている人もいるかもしれないが、Perlはもともと面倒なシステム管理タスクなどを簡単に包括的に行うためのツールとして作られているので、Web系に限らずその後もっと広いシステム領域に自分の仕事を広げていくつもりだったとしてPerlという言語は悪いチョイスではないと思います。

2. ただし書き

・・・とここまで書いておいてなんだけど、だからと言ってPerl勉強すればいいってもんじゃない。色々なただし書きがついてきます。

ここからはまとまりにくいのだけど、とりあえず羅列してみる:

  • 今回僕はPerlを便利なツールで、覚えておいて損はない、そして今ならある程度のPerl力があれば就職できる可能性が高いよ!って言いたいだけ。
  • Perlを覚える事にしたとしても、それだけでは何にもならない。優秀なプログラマーは第1言語以外のどの言語を与えても資料さえあればそれなりのものが作れる。重要なのは言語の仕様ではなくて、プログラムを書く時の考え方だから。だから他の言語も一緒に覚えればいいと思う。
  • Perlに関してはバッシングが結構ひどいけど、少なくとも「言語仕様」を叩く人の言うことは8割ほど引いて聞いておけ。他人のコードを読めないとのたまう人は自分が得意とする言語・環境以外のデバッグができないだけだし、まずいコードを書く人はどの言語で書かせてもまずいコードを書く。

3. ということで

今はPerlは戦略的に就活を行うなら、早い内から手に入れておいて役に立つスキルのひとつだと思う。ただしYMMV

4. ついでに

あくまで個人的な意見ですが、今から新たにPerlの何かを覚える目標としてはPlack/PSGIともっと進んだところでは非同期プログラミングはいい題材だと思います。技術的なレベルはちょっと高いけど、その辺りを目指すと外れはないかな〜。まぁこれは本当に個人的意見なので初心者には辛いかもしれません。

あとこれからPerlを覚えようって方には(もっと他にもあるだろうけど)とりあえずPerl関連書籍Perl関連資料のページも作りましたよ。

あと、Perlメインでなくてもいいので、Perlで開発を受注できる!という会社の方は是非こちらに書き込んでください!数が揃えばJPAサイトのほうに移します。
松濤であった爆発の件について、そういえばtwitter使ってたなーと思って探したら全然見あたらない。なにせ4年近く前のことなのでそもそもそこにたどり着くラインがないのだ。

なので、一個だけブクマされてたtweetから超ローテクな方法で残りのヤツを捜した。その方法とは・・・一個ずつIDを増やして、HTTP GETが通ったらOKというだけ。一旦書いてから走らせてそのまま放置して一晩おいておいたら大体とれてたくさい。

というわけで、松濤温泉施設爆発時の俺のtweet → ここ


use strict;
use LWP::UserAgent;

my $base = 110764722;
my $ua = LWP::UserAgent->new();
my $i = $base;
while(1) {
    my $res = $ua->head("http://twitter.com/lestrrat/statuses/$i");
    if ($res->is_success) {
        print "http://twitter.com/lestrrat/statuses/$i\n";
    }
    $i++;
}
やー、ローテクですね。あまりオススメしませんw
100305_2046~02.jpg
Yokohama Perl Mongersのみんなが関内に向かう途中で電車が止まって右往左往している間、僕は昨年 LLTVに出させてもらった縁からアスキーメディアワークスさんでPerlの権益のために声を張ろうと思ってLLふんふん2010のブレストに行ってきましたよ。

結果的には声を張るような状況ではなく、ドミノピザと景品で当てたというブラッセルズのケグからビールをぐびぐび飲みながら壁にペタペタとネタを貼っていくという2時間でありました。最後の片付けはバスの時間あやばかったのでバックれました。すみません。

というわけで今年は7/31に虎ノ門のニッショーホールで開催だそうです。内容はまだ未定。今回のブレスト内でのネタがどれだけ反映されるのでしょうね。

YAPCは多分10月ですよ(ぼそ)
Perlを使うことのできる中小企業(地方企業含む)って結構いると思うんだけど、そういうのをとりまとめたリストを作って公表するとか、もしくは弊社(endeworks)と取引のあるところと今後の仕事の際にそういう会社に仕事を流して関係を築いていくとか、そういうのって需要あるのかなぁ?

発注したい側、受注したい側、両方とも意見が聞けると嬉しい。

追記1: 見切り発車でこんなwikiページも作ってみました。よろしかったら書き込んでください!

追記2: リンク先間違ってました!直しました!
「だからどうだ」ってことですけど、(perlだとreverseあるので本来なら1オペで終わっちゃうけど)とりあえずループを使わずに与えた配列を逆にするコードの自己最短コードはこうなりました:

sub r{@_?(pop,r(@_)):()};
もう少し読みやすく展開するとこんな感じですね。ただの再帰処理です:

sub myreverse {
   if (@_ > 0) {
      return (pop @_, myreverse(@_));
   } else {
      return ();
   }
}
popで配列の最後の要素を最初に回して、残りを再帰処理してるだけー

筆者

daisuke - Perl hacker, endeworks 代表取締役, Japan Perl Association 代表理事
Powered by Movable Type 4.1