ニッキ

ターミナルに赤魔道士

[] ターミナルに赤魔道士

こちらの記事を見てデータを増やしたくなったので作りました

ターミナルに黒魔道士

http://valvallow.blogspot.jp/2013/03/blog-post.html

赤魔道士 & ナイト

f:id:ywatase:20130405232537p:image

変換用のワンライナー(perl)

perl -pe 's{ }{  }g;s{(\d)}{\e[4\1m  \e[0m}g;' akamadoushi.dat

データはこちら

https://gist.github.com/ywatase/5328985

plenvのzsh補完書いた

[]plenvのzsh補完書いた

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


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


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

追記

versionとversionsが抜けていたので追加しました。

YAPC::Asia 2012行ってきた

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

今回の会場は東京大学の新しい施設。

全体的にちょっと狭かった。。。

二日とも英語のセッションをたくさん聞いたがあんまり聞き取れなかった。。。

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

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

IOをとにかく減らす

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

Profile

* upstream response time

  • -d:NYTProf
  • SIG{ALERM} でスナップショット取る
  • CloudForecast
  • GrowthForecast

Test/CI

サーバ

[] 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 --

その他感想

YAPCお祭り感があっていいね!

f:id:ywatase:20120928195918j:image

minicpanを工夫してみた

[]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の補完対象に追加しておけば、補完も効く。

cobblerのdebian用パッケージのコンパイル

[]cobblerdebian用パッケージのコンパイル

https://fedorahosted.org/cobbler/wiki/DownloadInstructions

ここに書いてある通りなんだけど、認証プロキシの下だったので、pdebuildのときにパッケージが取ってこれなくて若干工夫が必要だった。

解決方法としては、apt-cacherを入れて、プロキシ認証apt-cacherにお任せした。

apt-cacherの環境づくり

sudo aptitude install apt-cacher
sudo vim /etc/apt-cacher/apt-cacher.conf

  http_proxy=proxy_host:proxy_port
  use_proxy=1
  http_proxy_auth=id:password
  use_proxy_auth=1

sudo vim /etc/default/apt-cacher

  AUTOSTART=1

sudo /etc/init.d/apt-cacher start

0.0.0.0:3142 でapt-cacherが動きます。

pbuilderの環境づくり

sudo aptitude install pbuilder
sudo vim /etc/pbuilderrc

  MIRRORSITE=http://host_ip:3142/ftp.jp.debian.org/debian/

sudo pbuilder --create --distribution wheezy  --http-proxy http://proxy_host:proxy_port/

cobblerコンパイル

git clone git://git.fedorahosted.org/cobbler
sudo pdebuild
dpkg -i /var/cache/pbuilder/result/cobbler_1.5.0-1_all.deb

ちなみに、koanはcobblerサーバがxmlrpcを127.0.0.1:25151でlistenしていて、外から叩けなかった。

apacheからproxyして、koan --port=80 で叩いた。