plenvのzsh補完書いた

perlbrewでもrbenvみたいに.perl-versionとかサポートしないかなーって思っていたらtokuhiromさんがplenvというrbenvインスパイアなツールを作っていた (http://blog.64p.org/entry/2013/01/21/134639) ので早速インストールしてみた。


zshで補完できる出来るように補完スクリプト書いたので公開しておきます。


plenv exec|which で補完するのは.plenv/shims以下の実行権限のあるファイルだけにしているけどこれで合ってるのかな?

Plack::Middleware::InteractiveDebuggerがすごい

plackup -e 'enable "InteractiveDebugger"' -a app.psgi で使える。

stacktraceを差し替えるモジュールなんだけど、stacktrace中で変数のdumpとかできる

StackTrace (most recent call first)
File "local/lib/perl5/Plack/Middleware/InteractiveDebugger.pm", line 108, in Plack::Middleware::InteractiveDebugger::__ANON__
$self->app->($env);
[console ready]
perl> use Data::Dumper
perl> Dumper $env
$VAR1 = {
          'psgi.multiprocess' => '',
          'SCRIPT_NAME' => '',
          'SERVER_NAME' => 0,
          'HTTP_ACCEPT_ENCODING' => 'gzip,deflate,sdch',
          'HTTP_CONNECTION' => 'keep-alive',
          'PATH_INFO' => '/die',
          -- snip --

平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用

基本的にはWeb+DB Press Vol70に書いているものの補足

IOをとにかく減らす

  • SSDを使う
  • DNS, RDBへの問い合わせをなくす
  • 極力/etc/hostsに書く

Profile

  • nginx

* upstream response time

  • -d:NYTProf
  • SIG{ALERM} でスナップショット取る
  • CloudForecast
  • GrowthForecast
    • ビジネス指標の取得

Test/CI

  • Mockオブジェクトでやってる
  • CI は Ukigumo::Server
  • コードレビューは自分でメンテできるかどうかが基準

サーバ

  • 自作サーバメイン
    • Sound Houseのシャーシ
    • Core i7
    • RAM 32MB
    • SSD 300GB?? x 2
    • 25万以下
  • バナーやFlashの配信
    • CDN
  • DNS
    • 社外に
  • 海外

YAPC::Asia 2012行ってきた

ブログに書くまでがYAPCということで(スターマンのぬいぐるみ欲しい)

今回の会場は東京大学の新しい施設。
全体的にちょっと狭かった。。。
二日とも英語のセッションをたくさん聞いたがあんまり聞き取れなかった。。。

minicpanを工夫してみた

外出時にcpanモジュール入れるのにminicpanを使っていますが、いちいちminicpanを起動して、オプション指定して、使い終わったら落とすという流れがめんどくさかったので、一連の流れをコマンドにしてみた。

(minicpan用のhttpdを常時起動しておいて、PERL_CPANM_OPTを指定しておけばいいだけですけど)

minicpanの保存先を予め決めておいて

minicpan -l ~/perl5/minicpan -r http://mirror/

こんな感じでcpanm_minicpanとして作成した。

#!/usr/bin/env perl
use strict;
use warnings;
use Plack::Builder;
use Plack::Middleware::Static;
use Plack::Runner;
use Test::TCP;

my $server = Test::TCP->new (
    code => sub {
        my $port = shift;
        my $app = builder {
            enable "Plack::Middleware::Static",
            path => qr{^/},
            root => $ENV{HOME} . '/perl5/minicpan';
        };
        my @args = ("--port=$port");
        unless ( $ENV{DEBUG} ) {
            push @args, '--access-log=/dev/null';
            open STDERR, '>', '/dev/null' or die $!;
            open STDOUT, '>', '/dev/null' or die $!;
        }
        my $runner = Plack::Runner->new;
        $runner->parse_options(@args);
        $runner->run($app);
    },
);

printf STDERR "Start minicpan server: 0.0.0.0:%s (pid: %d)\n\n", $server->port, $server->pid;
my $port = $server->port;
system 'cpanm', '--mirror-only', "--mirror=http://localhost:$port/", @ARGV;

printf STDERR "\nStopping minicpan server: 0.0.0.0:%s (pid: %d)", $server->port, $server->pid;
undef $server;

zsh functionの_cpanmの補完対象に追加しておけば、補完も効く。