June 2005アーカイブ

Musical Baton

| コメント(0)

Clouder::Blogger の yoshiki さんからBatonが回ってきていた(どもです)のと、mixiの中でもお声がかかったので Musical Baton まわしてみます。

Total volume of music files on my computer (コンピュータに入ってる音楽ファイルの容量)

2.01GB

Song playing right now (今聞いている曲)

Sleater-Kinney / Entertain

The last CD I bought (最後に買ったCD)

The Woods [Bonus DVD] いま一番自分の中の「ロック」に近い音。
The Woods [Bonus DVD]

Five songs(tunes) I listen to a lot, or that mean a lot to me (よく聞く、または特別な思い入れのある5曲)

小さいころからの音楽履歴を話すと、聖飢魔IIあたりから話さなくてはいけないので 今回は今 iTunes / iPod に入っている曲で気に入っている5曲を。

Radiohead / Paranoid Android イントロの展開の仕方とか、曲全体の構成とか大好きなんです。
O・K・コンピューター

Brad Mehldau / Paranoid Android その大好きな曲をJazzピアニストが演奏すると、これまた違う味わいがあって。
ラーゴ

Charlie Haden & Pat Metheny / Waltz For Ruth なんとも雄大な音。パット・メセニーのフォーキーな面が出てる最高のアルバムの一曲目。
Beyond The Missouri Sky (Short Stories)

サンボマスター / そのぬくもりに用がある テレビでこの曲をライブでやってるのを見て、身震いしました。
新しき日本語ロックの道と光

くるり / Birthday 歩きながら、よく歌詞を口ずさんでます。
BIRTHDAY(初回)

Five people to whom I'm passing the baton (バトンを渡す5人)

sekimura の public subscriptions on the Bloglinesから。

ま、Batonつなげるもつなげないも渡された人しだいですから、お気楽にー。

Just Blog It!

| コメント(0)

2005年6月16日より、シックス・アパート株式会社のエンジニアになりました。 今後とも、よろしくお願いします。

Blogを読み書きしたり、 Folksonomy なツール達を使っていると 情報を収集し選別することの楽しさや 情報の海の中でコミュニケーションするライブ感を味わってしまいました。 自分もフルタイムでそんなツールやサービスを作りつつ、 一緒に「次へ」転がって行きたいというのが転職の理由でした。 MovableType や TypePad といったシックス・アパート のツール、サービスを 充実させて、表現する人が表現すること、その表現によって体験することを もっともっと楽しめる環境を作っていけたらと思っています。

僕はそのむかし ApartmentStar という indies のバンドに参加していましたが。 そのバンドはハンドメイドを大事にするいわゆる宅録バンドで 自分で音楽を作ることの楽しさや 音楽を演奏できる楽しさを表現するバンドでした。 そのライブをみたり、音源を聞いてくれた人が 「バンドをやりたくなった」とか言ってくれるのが すごいうれしかったのを今思い出しています。

1月にJOINした宮川さんには3月くらいに転職相談したんですが、 そのときにGoodpicの人も4月からくるという話を聞いて ああ、これは楽しそうなことができそうだなぁと。 あと SixApart Ltd. に集まってきている PerlHackers と 一緒に仕事ができるのもとても楽しみにしています。

Catalystで、いわゆるユーザ認証してログインしたユーザのみコンテンツをみせるようなものをつくるためには、現状の Catalyst::Plugin::Authentication::CDBI では不都合が多いので、 Catalyst::Plugin::Authenticate::CDBI (名前が紛らわしい。Authenticateです。もうすぐCPANにUPするらしい)を 使った方法でやってみました。あと、Catalyst::Plugin::Session::FastMmapも /trunk にあるものを使いました(Set-Cookie の expires 属性問題回避のためですChanges参照)。

Mixie というプロジェクト名で作成し、Mixie::M::CDBI::Users を作成するまでの 作業は以下のようになります。

 % catalyst.pl Mixie
 % cd Mixie
 % cat mixie.sql
 BEGIN TRANSACTION;
 CREATE TABLE users (
   uid      int           PRIMARY KEY NOT NULL,
   username varchar(100),
   password varchar(100)
 );
 INSERT INTO "users" VALUES(1, 'Melody', 'Nelson');
 COMMIT;
 % sqlite /some/path/mixie.db < mixie.sql
 % script/mixie_create.pl model CDBI CDBI dbi:SQLite:/some/path/mixie.db

次に lib/Mixie.pm の先頭部分を以下のように変更します。 プラグインの登録とその設定を追加します。

use Catalyst qw/-Debug Session::FastMmap Authenticate::CDBI/;

our $VERSION = '0.01';

Mixie->config(
    name => 'Mixie',
    session => {
        expires => 60 * 60 * 24,
        rewrite => 0,
        storage => '/tmp/session',
    },
    authenticate => {
        cdbi => {
            class    => 'Mixie::M::CDBI::Users',
            username => 'username',
            passowrd => 'password'
        },
    },
);

1)/login でフォームが表示される。2)/do_login にフォームデータを送信し /home へリダイレクトする。3)ログインしていない人は/home以下を見ることができない。4)/logout でログアウトする。 そんなものを作ってみます。

まずは /login 。まあ、フォームを出力するだけなので以下でOKです。 本来はテンプレートを使ったほうがよいでしょう。(例なのでズルしてます)

sub login : Global {
    my ( $self, $c ) = @_;
    $c->res->headers->content_type('text/html; charset=utf-8');
    $c->res->output('
        <form action="/do_login" method ="POST">
        <input name="username" />
        <input name="password" type="password" />
        <input type="submit" />
        </form>
       ');
}

次に /login 。実際にユーザ名、パスワードをチェックする部分ですが、 処理自体は C::P::Authenticate::CDBI で定義されている authenticate_cdbi() で行います。 認証に通った場合は session->{user} にユーザ名を入れて/home へリダイレクトします。認証に失敗すれば再度フォームを表示します。

sub do_login : Global {
    my ( $self, $c ) = @_;
    my $username = $c->req->param('username');
    my $password = $c->req->param('password');
    if ( $c->authenticate_cdbi( $username, $password ) ) {
        $c->session->{user} = $username;
        $c->res->redirect('/home');
    } else {
        $c->res->redirect('/login');
    }
}

そして /logout。/do_loginで設定した session->{user} を消して、フォームへ戻ります。

sub logout : Global {
    my ( $self, $c ) = @_;
    undef $c->session->{user};
    $c->res->redirect('/login');
}

最後に/home ですが、別のコントローラにしたほうが何かと便利なので 作成してしまいます。

  % script/mixie_create.pl controller Home

そして、Mixie::C::Home の begin でログインしているのかどうかのチェックするようにします。(注意 lib/Mixie.pm の begin ではなく lib/Mixie/C/Home.pm の begin です。)

sub begin : Private {
    my ( $self, $c ) = @_;
    unless ( $c->session->{user} ) {
        $c->req->action(undef);
        $c->res->redirect('/login');
    }
}

begin で /do_login で登録した session->{user} がなければ /loginへリダイレクトするようにします。 /home/show_friends /home/show_logs とか直接アクセスされても、認証に通ったユーザのみが 閲覧できるようになり、そうでないユーザはログインページに逆戻りします。

Home.pm の default には、とりあえず以下のようにしておきました。

sub default : Private {
    my ( $self, $c ) = @_;
    $c->res->headers->content_type('text/html; charset=utf-8');
    $c->res->output('Hi, '.$c->session->{user}
                     .' you can <a href="/logout">logout</a>.');
}

では script/mixie_server.pl して動作を試してみてください。

C::P::Authenticate::CDBI は C::P::Authentication::CDBI と違って ユーザ名、パスワードのチェック部分に特化しています。 Authentication::CDBI は $c->login というメソッドを使うこともあって /login というURLが使えない(いや、抜け道はあるのだが)という不便さから開放されます。 まだまだ、Catalystは実例が少ないので「やり方」を見つけるのには 一苦労かかりますが 何かあったら trunk を覗きにいくというのが解決策かなぁとは思います。

遅ればせながら、Movable Type 3.17にアップグレードしてみました。

特に問題はないんですが、Main Index をリビルドしているときに以下のようなWarningが出ました。

Use of uninitialized value in join or string at /home/sekimura/mt/lib/MT/Util.pm line 110.

MT::Util の substr_wref() は &amp;とかの文字実体参照も一文字として扱いつつ substringする関数のようですが、 指定したwidthよりstrが短い時を想定していない? ともかく、以下のようなパッチでWarningは出なくなります。 (undef のときに undef を返したり、m///gをm///gsにして改行とかもマッチするようにしているのが正しいか自信ないので、そこはお好みで)

--- lib/MT/Util.pm.orig Wed May 18 18:02:19 2005
+++ lib/MT/Util.pm      Tue Jun 14 12:17:20 2005
@@ -106,7 +106,9 @@
 # substring treating HTML character-entity references as single characters
 sub substr_wref {
     my ($str, $start, $width) = @_;
-    my @character_entities = $str =~ /(&[^;]*;|.)/g;
+    return undef unless defined $str;
+    my @character_entities = $str =~ /(&[^;]*;|.)/gs;
+    $width = @character_entities if $width > @character_entities;
     join '', @character_entities[$start..$start+$width-1];
 }

追記: 2005年7月14日

Movable Type 3.171日本語版の提供を開始 には、この "Use of uninitialized value in join or string at lib/MT/Util.pm line 110." 問題の修正が含まれますので、アップデートをお勧めします。

sub substr_wref {
    my ($str, $start, $width) = @_;
    my @character_entities = $str =~ /(&[^;]*;|.)/g;
    return $str if ($#character_entities < $start+$width);
    join '', @character_entities[$start..$start+$width-1];
}

del.icio.us のサーバが新しくなり、以前の引っかかる すこしレスポンスが改善したようです。 (体感速度はあまり変わらないけど) 作業のアナウンス、実況中継は blog.del.icio.usmoving to new servers にあります。

tag の入力時に suggestions として、いままで入力したタグが 表示されるようになりました。左から使用頻度順に並んで表示されます。 入力途中で tab キーで補完してくれるのが便利。 この動作をWink というツールを使ってFlashにしてみましたので、暇な方は Flash で suggestions の例を見てください。

あと、http://del.icio.us/new/USERNAME で見ることのできた tag cloud は無くなって画面右下の options で list にするのか cloud を設定できるようになりました。表示順もアルファベット順か使用頻度か設定できますね。

ちなみに、サーバの更新当初は search や inbox が使えなかったのですが、 index を再構築していたようで、現在は使えています。

About Me

このブログは Masayoshi Sekimura によって書かれています。現在はサンフランシスコ市内に在住し Six Apart, Ltd. でエンジニアをしています。 このブログ以外にオンラインでやっている事は qootas.org/sekimura/ で見ることができます。 メールは sekimura+blog@gmail.com までどうぞ。

このアーカイブについて

このページには、June 2005に書かれたブログ記事が新しい順に公開されています。

前のアーカイブはMay 2005です。

次のアーカイブはJuly 2005です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.26