D-7 <altijd in beweging>

Day to day life of a Perl/Go/C/C++/whatever hacker. May include anything from tech, food, and family.

2010年03月

最近少女漫画ばっかり読んでる気がするな・・・ってことで最近読んだ漫画。

ちはやふるはスポ根してておもしろかったけど、絵が馴染めない感じ。我が家はもっと癖のある絵が好きらしい。

「うさぎドロップ」は原稿を書いてるとすぐ現実逃避したくなるので思いっきり読みまくってたわけですが、やっと話が回転しはじめた!と思ったらそれが今年2月に発売されてた最新刊で、まだ連載中ってことに初めて気がついた。

・・・なんてことだ。話がきになるじゃねぇか。りんちゃん!りんちゃん!っていうか、4巻から5巻でいきなり高校生になっててびっくりしたよ!

連載を読みたくなるくらいだが、これは多分まとめ読みしないとイライラする類の話だと思うので我慢する・・・
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

*追記有り。

今Markdownで紙用の原稿書いているんだけど・・・

Markdownって楽だけど、実際にフォーマッティングがどんな感じになるかを見るには1回パースして処理する必要があるじゃないですか。いちいちMarkdown.pl呼び出すのも面倒くさいからPlackでディレクトリ直下のファイルをパースしてはき出すようにした。

Plackはなにげにこういう使い方が異常に便利な気がする。まさにSwiss Army Knifeって感じ。
use strict;
use File::Spec;
use Text::MultiMarkdown 'markdown';

sub {
    my $env = shift;

    my $file = File::Spec->catfile(
         File::Spec->curdir, $env->{PATH_INFO});
    open my $fh, '<', $file or die "Failed to open $file: $!";

    [ 
        200, 
        [ "Content-Type" => 'text/html; charset=utf-8' ],
        [
            <<EOM,
<html>
<head>
    <style type="text/css">
    <!--
        body {
            font-family: Halvetica, sans-serif;
            padding-left: 2em;
        }
        pre { padding-left: 2em }
    -->
    </style>
</head>
<body>
EOM
            markdown(do { local $/; <$fh> }), 
            <<EOM,
</body>
</html>
EOM
        ]   
    ]   
};

*追記

全く持ってめんどくせぇけど、PHPのほうがいいじゃないか、ってのはすげぇ違うので一応書いておく。


まず誤解を生まないように書くと、CGI環境で動くようなのもText::MultiMarkdownさえ動く環境ならどこでもすぐできますし、Plackがあろうとなかろうとら昔からこれくらいできますね。

でもCGIだとこれをサーバーにアップロードしないといけないじゃない。俺はローカルディスクに入ってるファイルをちょこちょこ見ながら編集したいだけなんだよね。だから書いたの。というわけでPHPだから云々は話が違う。「RoRだったら・・・」だったら分かるけど。


ついでなのでPlack版も組み替えましたよ。別に汚くてもリリースするわけじゃないし、いずれにせよ5分で実用的なものがかけたからいいと思うけどね。ちなみにpsgiじゃなくてもPlack::App::WrapCGI使えばさっきのCGIファイル使えるよ!(自分もそれでテストしたのに忘れてた)

    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

先月弊社スタッフのお誕生日用にケーキを買ってくるお話をしていた前後、そういえば3月は@33rpm氏の誕生日でもあったなーと会話に登ったのです。僕は当然言いました「何かいっぱい食べさせてあげようよ。年の数の分だけとか」

前述のスタッフの方のケーキを食べている時、「@33rpmは大食いだなー」って話を振りました。そしたら「いやぁ、でもケーキは脂っこいからなかなか量は食べられないですねー」って言うから「へー、じゃあ何なら食べられると思う?例えば*大福*とか?」「ああ、いけるかもーwwww」「へーそうかーwwww」

その会話のあと、すぐさま大福を日時指定してお取り寄せできる店を探し始めました。

80077442-1cbeab632ab600e70f445702dd2cb19f.4bb02c4c-full.jpg
というわけで一ヶ月前から準備していたDFK-Dayが本日です。

とりよせたのは宮崎は日高成果のなんじゃこら大福、谷常の黒豆大福、塩瀬総本家の豆大福、たねやの大福、榮太樓の豆大福とさくら大福、上野岡埜栄泉の5種大福盛り合わせ。

しめて大福32個です!誕生日おめでとう!33rpm!

今日中に食べないと腐るよ!

追記:「会話が大分捏造されてませんか」と突っ込みがありましたが、こちらは油断している@33rpmの言質を半ばとってやろうと誘導尋問してたのでしょうがないですね!あと一部意図的に記憶からカットした部分はあるかもしれませんが(「基本的に甘い物は苦手なんで」とか)、嘘は書いてないはずです!
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

Spatial インデックス貼れるKVMってことで、おー!と思ったんだが、ぶっちゃけどうしたらいいものか迷う結果に。

自分の作った非同期アプリの中で、AnyEvent::DBI風味(ブロッキングする可能性のあるDBアクセスを別プロセスにわけて順番にクエリを処理しつつ、プロセス間でデータのやりとりを行う)なアクセス方法で試したみたところ、主キーによるデータ取得はMySQLベースのものより30%ほど高速だったものの( 700+ qps -> 900+qps)、Spatialインデックスによる検索が30%ほど逆に落ちてしまった(540 qps -> 380 qps )。MongoDBのspatialインデックス貧弱だなぁと脊髄反射で思ったんだけど、よく考えるとMongoDBのPerlバインディングかもしれん。APIはオブジェクトっぽく洗練されてるんだけどムダが多すぎ。もっと速くできるだろ!この辺りはもう少し調査が必要。

あと、データが無くなる可能性が高い事も様々な文献でみてわかった。どのデータベースも結局のところハードディスクに確実に書き込まれるかなんて時と場合によってわからないんだけど、MongoDBの場合は「そこはちゃんと対応しようとするとパフォーマンスヒットがあるからとりあえずレプリケーションとスナップショットを取るようにして回避してよ」というポリシーがありきで、ディスクに書き込めたかどうかをなるたけ追求する、という事ではないらしい。まぁそれはポリシーの問題だから良しとしよう。しかしそれなら自分は「使い方としてはMemcachedと同じくらいに考えておけ」という事だと受け取った。つまり揮発性のあるデータストレージだということ。

そうなると話は全然変わってくる。MongoDBをプライマリストレージにするわけにはいかない。MySQL等でマスターデータを持っておいて、それを定期的にMongoDBにデプロイする形になるんだろうな。

レプリケーション設定は比較的簡単だと認識。

インストールも超絶簡単。起動も超絶簡単。

ふーむ。色々微妙だな。


    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

週末したこと備忘録。

初めて都電荒川線に乗った。世田谷線よりバスっぽかった。

王子→西日暮里まで歩いた。もっと歩かないといかんな。

突然思い立って広尾のPlatesでランチした。大盛りパスタを頼みたい欲求に駆られたが、やっぱり理性が勝ち、そしてその判断は後のおなかいっぱい具合から考えても正しかった。

キーマカレーを作った。鶏胸肉、豚肉の挽肉、生姜、ニンニク、タマネギにトマト。味付けはカレー粉、ブイヨン、塩胡椒、それに辛みのために作った辛み油。すげぇうまかった。たっぷり作って冷凍しておいたので今週のどこかで弁当に登場するだろう。

家族と三軒茶屋の「とりビアー」で夕飯した。となりで中学生?の娘さんがぎゃーぎゃー泣きながら説教されてて、ぶち切れて店員を呼ぼうとしたら子供だけ先に返されてた。なんだったんだ。あ、ハリセンボンのロケに出会った。春菜思っていたよりはるかにちっちぇえ。

伊集院光のでぃーぶいでぃー、見た。田代さやかを久しぶりに見た。芸なのかもしれんが、一部の出演者の酔っぱらいかたがひどすぎて引いた。あれが演技なら、きっと体勢するんじゃないだろうか。

Data::Localizeのパッチをもらえたと思ったら怒濤のフィックス祭りが始まってしまい、かなりの時間を費やしてしまった。


    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

Test::More 0.94からsubtest()ってのが使えるので、Any::Mooseみたいな根本的な切り替えが入っちゃうコードの検証に、こんなテストが書けることに今日気づいた。

use strict;
use Test::More;

local $ENV{ANY_MOOSE} = 'Moose';

my @files = ;
plan tests => scalar @files + 1;

while (my $file = shift @files) {
    subtest $file => sub { do $file };
}

ok( Any::Moose::moose_is_preferred() );

Data::Localize 0.00013 に入れた。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

まだちゃんと使ってないから問題点とかわからないけど、とりあえずStarmanを使うとかで結構スケールできる気がする。そのあたりを自由に変えられるのもPlack++だね。

使用想定としては、これをplackupしておいて、クライアント AnyEvent::HTTPで http_postして非同期で応答待ちする感じ。

package Lyra::Server::Worker;
use Moose;
use Router::Simple;
use JSON::XS;
use namespace::autoclean;

use constant NO_SUCH_WORKER =>
    [ 404, [ "Content-Type" => "application/json" ],
        [ q|{ "status" => 0, "message" => "no such worker" }| ] ];
use constant BAD_PAYLOAD =>
    [ 500, [ "Content-Type" => "application/json" ],
        [ q|{ "status" => 0, "message" => "bad payload" }| ] ];
use constant WORKER_ERROR =>
    [ 500, [ "Content-Type" => "application/json" ],
        [ q|{ "status" => 0, "message" => "worker error" }| ] ];
use constant WORKER_SUCCESS =>
    [ 200, [ "Content-Type" => "application/json" ],
        [ q|{ "status" => 1 }| ] ];

has router => (
    is => 'ro',
    isa => 'Router::Simple',
    default => sub { Router::Simple->new() }
);

sub register {
    my ($self, $path, $worker, $method) = @_;
    $method ||= 'process';
    $self->router->connect( $path, { controller => $worker, action => $method } );
}

sub psgi_app {
    my $self = shift;
    return sub {
        $self->process(@_);
    }
}

sub process {
    my ($self, $env) = @_;

    my $matched = $self->router->match( $env );
    if (! $matched) {
        return NO_SUCH_WORKER;
    }

    my $payload;
    eval {
        $payload = $self->fetch_payload( $env );
    };
    if ($@) {
        warn $@;
        return BAD_PAYLOAD;
    }

    my $response;
    eval {
        my $worker = $matched->{controller};
        my $method = $matched->{action};
        $response = $worker->$method( $payload );
    };
    if ($@) {
        warn $@;
        return WORKER_ERROR;
    }

    if (! $response ) {
        $response = WORKER_SUCCESS;
    }

    return $response;
}

sub fetch_payload {
    my ($self, $env) = @_;

    if ($env->{REQUEST_METHOD} ne 'POST') {
        return;
    }

    my $cl = $env->{ CONTENT_LENGTH };
    my $ct = $env->{ CONTENT_TYPE };

    # $ct should be application/json, but we're not checking this right now

    my $input = $env->{ 'psgi.input' };

    # Just in case if input is read by middleware/apps beforehand
    $input->seek(0, 0);

    my $buffer = '';
    my $spin = 0;
    while ($cl > 0) {
        $input->read(my $chunk, $cl < 8192 ? $cl : 8192);
        my $read = length $chunk;
        $cl -= $read;
        $buffer .= $chunk;
        if ($read == 0 && $spin++ > 2000) {
            Carp::croak "Bad Content-Length: maybe client disconnect? ($cl bytes remaining)";
        }
    }

    decode_json $buffer;
}

__PACKAGE__->meta->make_immutable();

1;
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

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

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

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

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

追記:普通に逆のこと書いてた。間違ってた
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

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会員だよ!ってな感じのブログパーツを作成したい。これもぶっちゃけ今は予算がないので、できればボランティアでお願いしたい。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

新宿駅→新宿御苑→千駄ヶ谷→四ッ谷→上智大学のあたり→皇居→刀削麺→有楽町駅
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

まだこう、細かい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で。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

前のエントリ書いたら宮川さんにオススメ方法を教えてもらった

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もいらないってことですね)
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

ちょっと案件で簡単な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


これはいいわー。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

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

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サイトのほうに移します。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

松濤であった爆発の件について、そういえば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
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

100305_2046~02.jpg
Yokohama Perl Mongersのみんなが関内に向かう途中で電車が止まって右往左往している間、僕は昨年 LLTVに出させてもらった縁からアスキーメディアワークスさんでPerlの権益のために声を張ろうと思ってLLふんふん2010のブレストに行ってきましたよ。

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

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

YAPCは多分10月ですよ(ぼそ)
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

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

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

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

追記2: リンク先間違ってました!直しました!
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

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

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

sub myreverse {
   if (@_ > 0) {
      return (pop @_, myreverse(@_));
   } else {
      return ();
   }
}
popで配列の最後の要素を最初に回して、残りを再帰処理してるだけー
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

今日家に帰ってきたら相方は豚キムチを作ってたのだけど、横でお手伝いにジャガイモをむきがてらそのキムチをつまんでみたところ・・・うまい!うまいじゃないか!スーパーで買ってきたキムチにしては格段にうまいぞ、これ!

本場のキムチに関して特にうんちくは持ってないので比べてみてどうなのかはわからんけど、この「王道キムチ」っていう商品は浅漬けでしっかり辛くて甘みもあり、俺の好みにバッチリ。思わず残ってたものを全部食ってしまい、その後ネットを調べたら検索にヒットする結果がかなりべた褒めしているではないか。みんなも好きなんだね!

というわけで王道キムチ、オススメです。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

このページのトップヘ