88171.net

RubyをかじったPerl使いの暴走 (File I/O編)

テキストファイルを読み込んで単純に変数に突っ込みたい、として、 Rubyで書くとたとえばこんな感じ。

s = open('foobar') { |f|
    f.read
}

素敵やん?一方でPerlの場合。

open(my $fh, '<', 'foobar');
my $s = join('', <$fh>);
close($fh);

ダサい!Rubyの素敵さを是非Perlにも!

my $s;
{
    open(my $fh, '<', 'foobar');
    $s = join('', <$fh>);
}

ダサい!取って付けたような my $s がダサい!もう一声!

my $s = &{sub{
    open(my $fh, '<', 'foobar');
    join('', <$fh>);
}};

キモい! 無名サブルーチンのリファレンスをその場でデリファレンスとかキモい! でも文字列の中で式展開するのに "@{[ ~ ]}" が 割と普通に使われてることを考えると、 これはこれでアリ…なの?

とまぁ、コレくらいがPerlの限界でしょうかね。 誰かもっと素敵な書き方知ってたら教えてください。

email2blosxom

いくらコマンドライン教徒といえども、 毎度毎度サーバにログインして書くのも面倒なので、 例によってメールでpostするためのスクリプト email2blosxom を書いてみた。

まぁ全体的に自分向けに書き捨てた感じなので、 もし使う場合はうまいこといじくり回してください。

以下、perldoc email2blosxom から。

NAME
       email2blosxom - A MIME message to individual file(s) converter

SYNOPSIS
       email2blosxom < mailfile

DESCRIPTION
       email2blosxom parses MIME message and splits into individual file(s).  As its name
       suggests, it's been intended to post new article for blosxom
       <http://blosxom.sourceforge.net/>.  However, it simplly behaves as, to say, MIME splitter.

CONFIGURATION
   DATA
       This script contains text template in itself, after the "__DATA__" token, in Template
       Toolkit format.  Substitutable variables are:

       title
           title text (expanded from e-mail subject)

       body
           body text (expanded from e-mail body)

       picts
           array of pictures (may be empty if no picture attached)

       pict.name
           file name of a picture

       pict.alt
           file name of a picture (identical with "pict.name", but you can overwrite by
           $cleanup_text, if you want)

   $output_file
       Points where to put text file into.  If you want some complex naming (i.e. include current
       date in file name), you can set this variable calling anonymous subroutine.

           our $output_file = &{sub{
               ... do something ...
               return $filename;
           }};

       If the file (or something) already exists, incremental number (like
       /some/path/basename-N.suffix) is automatically added.

   $picture_directory
       Points where to put attached picture(s) into.

       The original file name (included in MIME header) will be respected, but when the file
       already exists, will be treated in the same way as $output_file.

   $cleanup_text
       Reference to subroutine to be called just before writing new text file, to cleanup (i.e.
       escaping) text.

       This subroutine will be passed a hash reference.

           $ref = {
               'title' => title text,
               'body'  => body text,
               'picts' => [
                           {
                            name => file name of 1st picture,
                            alt  => identical with name,
                           },
                           .....
               ],
           };

   umask(XXXX)
       You may want set umask, especially when directories to put files into are shared by other
       users.

KNOWN BUGS
       ·   This script itself doesn't have any authentication mechanism (and I have no plan to
           implement.)

           You MUST filter e-mails using other programs, like procmail, before passing to this
           script.

       ·   This script sees 1st MIME part as text, and other parts (if exist) as attachments.  I
           know thant fixing this wouldn't be a hard work.  But because this behaviour seems to
           be OK in practical use, I won't fix it ;-)

AUTHOR
       ohkawa <http://88171.net/>

LICENSE
       This software is distributed under CC BY 3.0 license.

       <https://creativecommons.org/licenses/by/3.0/>

TokyoPromenadeとblosxomの性能比較

Muninのグラフを眺めてたら、なかなか興味深い事実に気づいた。 http_loadtime プラグインの出力から各フェーズ任意の5日間を選び、 期間中の平均値を調べた結果、

  1. Tokyo Promenade CGI版: 31.24 ms/req
  2. FastCGI化: 26.27 ms/req
  3. Google Code Prettifyをローカルに: 11.13ms/req
  4. blosxomに入れ替え後: 319.68 ms/req

笑えるくらいにTokyoPromenadeが爆速。 ちなみに http_loadtime プラグインは wget -p を叩いているので、 外部リソースのレスポンスも絡んでくる。その点で3と4はほぼ同一条件なので、 Tokyo Promenade (FastCGI版) はblosxomの28.7倍速い という結論になる。

体感で速い速いとは思ってたけど、これほどだったとはなぁ。

blosxom Disqusプラグイン

探してはみたものの(主にspam対策的な意味で) 良さげなコメントプラグインが見つからず、 でも一応コメント欄くらいは付けとくかなと思って、 Disqus用のプラグインを 書いたFacebookのComments Box も考えたんだけど、あんまりFacebookにロックインされるのもどうかなぁ、と。

いや、でもコメント欄を外出しにするなんて、 昔は考えてもみなかったけどね。 時代は変わりますわ。

なぜ今 blosxom なのか

別のVirtualHostで夜な夜なこっそり移行作業を進めて、やっと Tokyo Promenadeから blosxomに乗り換えたわけだけど、

なんでまたそんな古いCMSをわざわざ使い始めたの?懐古主義なの? ドMなの?

と詰問される可能性があるので(ないよ)、あらかじめ防衛線を 張っておこうかな、なんて。

宗教上の理由

今のところこんな宗教たちを信仰しているわけですが、

Tokyo PromenadeだとCのソースコードに抜本的に手を入れないといけなくて 泣く泣く見て見ぬふりをしてきたこれら宗教の戒律(?)たちが、プラグイン かき集め(てちょろっと手を入れ)るだけでぜーんぶ満足できる。 そう、blosxomならね。 あれ?これ、blosxom使わない理由なくね?

あ、ちなみにTokyo Promenadeさんをdisってるわけじゃないです。 堅くて爆速のCMSがチョー簡単に動かせるというのは他を圧倒してるし、 細かいところをいじりたいと思ったときにハードルが高いというのは もはや思想レイヤーの話なので、あーだこーだ言ってもしゃーない。

拡張性

拡張性最強。というかminimalな本体と徹底したプラグイン至上主義が めっちゃ素敵。API自体は質素な印象だけど、その気になればプラグインから 本体をガシガシいじれちゃうあたりも「自己責任で好きにしな!」 って感じでとっても好印象。

こんなことできたらいいのになぁっていうことはだいたい誰かが プラグイン化してくれてるし、ほとんどのプラグインがsnippetレベルなので 読むのもいじるのもラクラク。ただみんな自分の環境用にほとんど 書き捨ててるっぽくて、たまにえっと思うようなトラップが仕込んで あったりするけど、それもまた微笑ましい。同じはずのプラグインでも 派生物がわらわら見つかったりして、そういう文化なんだなぁと思う。 blosxomはMovable TypeやWordPressには太刀打ちできなかった (と思ってる)けど、そもそも土俵が違ったんだと。

将来性

現時点の最新版の2.1.2がリリースされたのがSourceForgeによれば 2008年10月2日とほぼ5年前なので、ある意味将来性なんて皆無。 しかーし逆に考えるんだ、こいつはとっくに枯れきってる! アップデートの手間もなければ仕様変更に振り回されることもない! しかも全体でこの程度の規模なら、自力でどうにでもできるぞ!!

おまけ

とまぁそんなことを考えつつblosxomに乗り換えたわけですが、 嬉しい誤算が一つ。 カテゴリごとにRSSが出力できる!

つまりリア充な皆様がたむろしていらっしゃるSNS界隈には 当たり障りのない日記だけ上げて、こういうヲタ話は気を遣わずに 書き散らせる、ということ。これ、地味に嬉しい。

SCHWINN Lavin 25

Factory Spec

Frame TJ Lavin inspired Cr-Mo HT/DT/ ST dirt jumping, w/ TT and DT gussets, integrated rotor tabs, SS mounted U-brake pivots, new 6mm plate dropout with 14mm axle slots.
Fork Hi-Ten Unicrown 31.8 blades, w/ Cr-mo 1 1/8" steer tube, new dropouts for 14mm axle
Crankset/Chainwheel Hollow forged steel 3pc 175mm w/ black ED finish w/ steel chainwheel 39T screen printed.
Bottom Bracket 8 spline 145mm axle w/ loose ball BB
Pedals Die cast alloy w/ Cr-Mo spindle, fixed pins.
Freewheel Lida, 1/2 X 1/8 X 14T
Chain KMC Z410 1/2 X 1/8 silver / black
Rims Jalco BX-316 black anodized 48H
Tyres Front 20x1.9 XS Gripper, Rear 20 X 1.95 XS Hucker
Front Hub Steel low flange 48H 14mm axle
Rear Hub Steel low flange 48H 14mm axle
Spokes 14G steel w/ UCP finish
Nipples CP Brass
Rear Brake Tektro 907A U-Brake w/ coil springs and Tektro power booster
Brake Levers Tektro 289A cast aluminum
Handlebar Schwinn 2.0mm thick Hi-ten, 610mm x 95mm x 155mm w/ knurling
Stem XS 4-bolt front load cap alloy 1 1/8 threadless
Grips XS 2-1 Grip black Kraton
Headset VP w /gyro, spring loaded adjuster cap, 5mm spacer
Saddle XS Padded Dirt Jump w/ 8mm rails
Seat Post 25.4 x 300 steel with alloy sleeve clamp
Seat Clamp Alloy w/ XS logo
Extras 1 set of pegs and chain tensioners

thanks to: http://mrdodgy.blogspot.jp/2005/06/schwinn-lavin-25-2005.html

自宅にうっかりYAMAHA RTX810を導入しちゃった話

NASを買い換えようかなぁと思い立ったものの、よくよく考えると特に不便してるわけでもないことに気づき、行き場のなくなった物欲が暴走した結果、

買っちゃった。YAMAHA RTX810。性能的にもお値段的にも我が家には完全にオーバースペックだけど、知ったことかそんなこと。

で、二日酔いでクラクラしながら

        [the Internet]
              |
      [VDSL回線終端装置]
              |
  [WHR-G301N (DD-WRT Router)]  )))  [クライアント達]
              |
       [ReadyNAS Duo v1]

これを

        [the Internet]
              |
      [VDSL回線終端装置]
              |
          [RTX810]----[WHR-G301N (DD-WRT AP)]  )))  [クライアント達]
              |
      [ReadyNAS Duo v1]

こうしたった。DD-WRTを無線AP(ブリッジ)で動かす方法はこのへん参照。

で、気になるその性能はというと、有線で

これが

こんな感じ。Bフレッツ マンションタイプの理論値が100Mbpsなので、かなり頑張ってるんじゃないでしょーか。

ただどっちかってーと性能よりも安定性に期待してるので、その期待にはまず間違いなく応えてくれるでしょう。DD-WRTはちょいちょい外に出れなくなったり、いつまでもβ版だったりするので…。

最後にReadyNAS Duo v1のベンチ結果を貼ってサヨウナラ。MTUを調整したものの無線がボトルネックなので、残念ながらリプレース前後で特に変化はなし。

路地裏

帰り道でとても心惹かれる路地裏に出会ったのだけども、その雰囲気を写し込む技量がないのが残念。

転職しました

知ってる人は、何を今更、って感じでしょうが。

先月、転職しました。で、丸7年過ごした名古屋を離れて藤沢に移り住みました。

いろいろ書こうかと思ったけど、ビール飲んだらめんどくさくなったのでこのへんで。

とにかく、元気でやってますよー。

テスト

先日豊浜で食らった海鮮丼。