CDBIでCOUNTするには

まぁ、いまのところ(というか二日目なので)出来るだけset_sqlを使わないゾ週間は守られていますヨ。

いまdel.icio.us.li.keを作っているのだが、あるURLを何人がブックマークしているかカウントする必要が生じた。

CDBIってcountメソッドサポートしてなさげ、ピンチ!

でも大丈夫、しのいだ。Class::DBIのPluginにClass::DBI::Plugin::AbstractCountってのがあったからな。

catalystのModelに

use Class::DBI::Plugin::AbstractCount;

といれたら、あとは

$c->stash->{itemlist}->[$i]->{sub_users} = Publicious::Model::CDBI::Items->count_search_where( { pubmedid => $col->pubmedid});

という感じで、カウントできる。

Emacs(Meadow)のTemplate Toolkit modeは便利だ

Clouder::Blogger: html-tt - emacsのTemplate Toolkit用のmode

自作のemacsでPerlモジュールのTemplate Toolkitの文法を使うためのモードです。これはマイナーモードになっていて、html-helper-modeと一緒に使うようになっています。こちらからダウンロードできます。

Meadowで使うにはファイルを解凍後、html-tt.elをSite-lispフォルダに放り込む。その後.emacsの設定。僕は拡張子にttをつけることが多いので、ttもこのモードで開くようにちょっと追加してます。

;;tt
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist
      (cons
       '("\\.html$" . html-helper-mode) auto-mode-alist))
(setq auto-mode-alist
      (cons
       '("\\.tt$" . html-helper-mode) auto-mode-alist))
(require 'html-tt)
(add-hook 'html-helper-mode-hook 'html-tt-load-hook)

== キーバインディング一覧 ==

  • C-cs
  • [% %]が挿入される。
  • C-cd
  • [% etc %]が挿入される。一番良く使うかも
  • C-ch
  • [% INCLUDE "" %]
  • C-ci
  • [% IF %][% END %] これも良く使う
  • C-cl
  • [% ELSIF %]
  • C-ce
  • [% ELSE %]
  • C-cf
  • [% FOREACH %][% END %]
  • C-cw
  • [% WHILE %][% END %]
  • C-cm
  • [% SWITCH %][% CASE %][% END %]

すごく便利で手放せなくなったゾ。

Mighty Girl - Lindstrom and Prins Thomas

軽いテケテケ感とバックで流れるピアノがメランコリック感を誘う。ディープだけどドープではなく軽い高揚感に苛まれる感じか。

MightyGirl

ビニョ-ンなシンセが途中から入ってきて、ヲヲ~!ってな具合に盛り上がる。

シスコで試聴

CDBIでORDER BYとかLIMITとか

CDBI使っていると、ORDER BYとかLIMITとか副問い合わせなんかで、ついつい安易なset_sqlに走りがちになったりしませんか?

僕はなるヨ。

コレじゃいかんというわけで、今週を出来るだけset_sqlを使わないゾ週間に認定した。

で、ORDER BYに関しては、search のあたりに書いてあるようにorder_byというキーのハッシュを加えてやればいいらしい。

じゃぁ、DESCはどうすればいいんじゃと思ったら、後ろにつければいいみたい

{order_by => 'id DESC'}

みたいに。

ん、もしや文字列連結か?LIMITもそのまま後ろにつければOKなんではなかろうか?

OKだった。

$c->stash->{itemlist} = Publicious::Model::CDBI::Items->search_like( tags => '%test%', uid =>$c->stash->{uname}, {order_by => 'id DESC LIMIT 10'});

こんなんでバチッと動きました。

でも、こんなんやるなら素直にsql書いたほうがいいのかな?

$c->stash->{itemlist} = Publicious::Model::CDBI::Items->retrieve_from_sql(        qq( 1 ORDER BY id DESC LIMIT 10) );

set_sqlは使ってナイゾと。

玄庵

富士のあたりにも幾つか気になる店があるので行きますゾ。 富士ICで降りたら、139を富士宮方面へ。厚原西の交差点を右折して最初の信号を更に右折。

玄庵

外から見ると、ガチャガチャしてるのかな?と思うが、店内は照明暗めで、落ち着いてます。せいろを注文。

せいろ せいろアップ

切りと、水の切れ具合、辛汁のバランスといい好み。特に蕎麦の歯応えというか喉越しがいい。二枚目頼もうかと思ったくらい。

蕎麦湯も白濁していてうまかった。普段薬味を使わないので、蕎麦湯を飲むときに、わさびをつまみながら蕎麦湯を飲むんだけど、これって変かね?

玄庵

支那そば家 毎度!

開店すぐに行ったのに、もう埋まっているとはこれ如何に!?

毎度

醤油です、もうそれオンリーかも。

醤油

周りを見渡すと年配の夫婦とか近所の婆さんとか家族連れとか、こだわってます的なラーメン屋とは客層が異なるネ。というか、包含しているのか?

地元密着型という感じでもないんだろうが、雰囲気が馴染んでいるんだよね。まろやかです。

シンプルに旨いというラーメンだが、何をもってシンプルと定義したいのか、なんとも言えないが、、、、

隣の婆さんもスープまで飲み干してたしなぁ。

支那そば家 毎度!

Catalystのアクションの優先度

del.icio.usはhttp://del.icio.us/ユーザー名でそのユーザー名のブックマークを表示できるようになっているが、その他にpostとかtagとかユーザー名以外の情報も存在してます。

そんなわけで、ユーザー名(pathの第一引数?)みて処理を分ける必要がある。

CatalystはPath,Regex.TopLevelというアクションがサポートされていて、

普通PathのほうがRegexより優先度高いだろという認識でコード書いたら、うまく動かなかった、というか職場で使っていたCatalystはRegexのほうが優先度が高かったので、結局Regexのサブルーチンの中でユーザー名が"tag"とか"post"だったらそういう処理にforwardするみたいな条件分岐を書いたのだ。

なんかif文ぐりぐり地獄になっちゃった。

納得いかないので、家のCatalyst(5.65)で次のコードを書いて確認してみた。

sub default : Private { # Private
    my ( $self, $c ) = @_;
    $c->response->body( $c->welcome_message );
}
sub tag : Path('tag') { # Path
    my ( $self, $c ) = @_;
    $c->response->body( "Taggggg" );
}
sub pop_path : Path('popular') { # Path
    my ( $self, $c ) = @_;
    $c->response->body( "Popular" );
}
sub popular : Global {# Top Level
    my ( $self, $c ) = @_; 
    $c->response->body( "!top level!" );
}
sub user : Regex('^(\w+)$') { # Regex
    my ( $self, $c ) = @_; 
    my $user = $c->req->snippets->[0];
    $c->response->body( "Tag list: $user" );
}

結果は

TopLevel > Path > Regex > Default

と納得のいく優先度が得られたヨ。職場のCatalystのバージョン古かったせいなのか、書き方に問題あったのかナァ。来週確かめよう。

イントラでの認証

イントラdel.icio.us欲しいアンドCatalyst覚えたい

ってことで、書き書きしたぞ。CRUDくらいまで終わった。次はTag周りを書けばいい感じ。結局やる気を出すのに2,3日かかって、コードは今日の午後の数時間で書けた。Catalystすごくラクチンだ。

で、認証。認証はいつも悩ム。そもそも、企業ってMSな認証入れてるから、それを使わないで別の認証いれると利用率がくっと落ちるのだ。だからIIS使えばいいのかも知れないけど、アレあんま好きじゃないしナァ。

というわけで、IISを用意してrequest.servervariables("Auth_User")を0秒後にgetかpostで返すaspを書いた。それはcatalystの動いているサーバーのURLに返す。だからあとはクッキーでセッション管理すればいいって寸法。

まぁ、駄目なのわかってるんだけど、、、、イントラは識別ぐらいの意味合いで使わざるを得ない状況が多いし、それでまぁ十分なことのほうが多いですニャぁってのが実感だ。

他にWindowsの認証情報をApacheで受け取るいい方法ってあるのだろうか?イントラ内でのユーザーを一意に識別したいってことなんですが、、、、、

poderosaがたまに落ちる

Catalystとか大きいものをCPANで入れている最中に落ちるとちょっと困る。

poderosa

今夜も、Plaggerインストールしてたら突然落っこちた。

なので、もう一度。

Plaggerずっと気になってたんだけど、週末はちょっと試してみる時間がありそう!

Hospital Mix 3 Mixed by NU:TONE

Hospital Mix 4よりもこっちの方が良かった。

ProductName Hospital Mix 3
Various Artists
Hospital / 1225円 ( 2007-07-10 )


Hospitalなリキッドファンクはどうしても爽快感優先で聴いててそのうち疲れてきちゃうんだけど、NU:TONEによりmixされたこのMix 3はシャカシャカ感が控えめで、ドープさと切なさ多め。

DIfferent Drumのphotek remixとDillinja Remixのつなぎが何故つなげるのかが今ひとつ理解出来なかったんだけど。NU:TONEのチューンはどれもカッコよい。

あと、Cyantificの曲気に入った。