WWW::CloudCreatorがいい感じ

いつもタグクラウド作るのにHTML::TagCloudとかHTML::TagCloud::Extendedを使っていたのだが、WWW::CloudCreatorというモジュールを教えてもらったのでいじってみた。

おおまかな違いはHTML::TagCloudはhtml(とcss)をそのまま吐くのに対し、WWW::CloudCreatorはタグ名とカウントとスタイル要素を戻してくる。

だから、TTと組み合わせるにはWWW::CloudCreatorのほうが良い感じ。

ただし、配列で戻してくるのでTTが

[% FOREACH tag = tagcloud %]
<span style="[% tag.2 %]">
<a href="[% Catalyst.uri_for('/bookmarks/') %]/[% tag.0 %]">
[% tag.0 %]([% tag.1 %])
</a>
</span>
[% END %]

となってちょっとわかりにくい気が。

あと、WWW::CloudCreatorはサイズだけじゃなくて色も変化させることができるんだが、こっちはちょっとバグってた。

81行目あたりをhexdecでレンジを揃えて82行目でdechex二度がけ。

my $ihex = hexdec($coldarray[$i]) + ($colorstep[$i] * $fraction);
my $decihex = dechex(dechex( $ihex ));

dechex関数も直す。負の方向にグラデーションがかかる場合にa-fがdechexに渡ったら無視するように。

sub dechex {
   if($_[0] =~ /\d+/){
           return sprintf '%x', $_[0];
   } else {
           return $_[0];
   }
}

これでうまくいってるような気がするけど。

wcc

色のグラデーションはタグの頻度ではなくて、タグ間の関連性とかの違う軸ででかけるようにしたいなぁ。

ヤマボクトリップ2007

今シーズンはまるで滑ってないわけだが、苗場、赤倉温泉に続いていつのも山田牧場に行ってきた(ヤマボクトリップ)

到着して一言、

ウワー、雪がねー。

正直、一昨年の年末のヤマボクよりも雪が少ない。

前日降ったにも関わらず、上級コースは笹が見えまくりで滑れそうなかんじではニャイ(でも滑ったけど)。しかもところどころガードレール見えてるし(擦ったけど)。後で宿の人に聞いたら、今シーズンは上級コースがまともに滑れる日が一日もなかったそうだ。

初日は吹雪いてたが、スコップ担いで、ビデオ持ってキッカー作って飛びまくり。例年より雪が少ないのでキッカーポイント探すのに苦労した。カメラは持って行ってなかったので写真は撮ってないが、吹雪いていると微妙に視界が悪く、樹氷が綺麗で、一人乗りリフトなんか乗ると幻想的で綺麗だ。一度は薦めたい。

二日目は前日とは違い快晴。しかも少しだけ積もったので、スピード出すと雪が舞うのできもちいい。右側のリフト降りたとこで撮影したらこんな感じ。

山田牧場 山田牧場

ちょっと厳しいそうな林間とか怪しそうな新雪を隠れキャラに気をつけながら滑りまくり。数少ない今シーズンのトリップの中で一番。

昼は、二日ともコンパス。前日はチーズとベーコンの焼きカレーを食べたので、二日目はベーコンと杏のピザ(蕎麦粉)とカフェオレ。

ベーコンと杏のピザ

ベーコンに杏はどうかなと思ったけど、鴨肉にフルーツソースかけた感じでかなりいい。やっぱ、キッチンコンパスうめー。

山田牧場

ヤマボクサイコー!

でも、今シーズン滑り納めな気がする。

TTでサブルーチン

TTにクロージャを渡せるということを知らなかったので、ドキュメントを読んだ

Catalystだとコントローラーでクロージャ作ってTTに渡せばプラグイン化するまでもないちょっとした処理はOKっぽい。

Virtual Methodsはpythonみたいだ。メソッドとして使いたいものはこっちで書いたほうがいい気がするが、プラグイン化するのが前提っぽいのでお手軽感がちょっと減る。

というわけで、上記のどちらかを使えば、PERLブロックはあまり使わなくてもいいような気がしてきた。この前のPERLブロックは後で書き直す。

TTで-fを評価する方法

pdfみたいに、あるファイルが存在するかどうかをTTで調べてファイルが存在する場合にアイコンなんかを表示させたい、

つまりTTで-fを評価したかったのだが、いいやり方が思い浮かばなかった(みつからなかった)のでPERLブロックで評価してしまった。

[% PERL %]
  my $pdf = "/static/PDFs/". [% some %] . ".pdf";
if(-f "root$pdf"){
  print '<img src="http://www.kzfmix.com/static/images/png/PDF_icon.gif" /></a>';
}
[% END %]

むむむな感じなんだけど。

DBICで集約関数を使ってTTに送る場合に

タグのテーブルなんかでタグをカウントしてtagname(count)とか出力したいときにDBICだとどうやんのかな?と。

とasを指定しておけば、TTのほうで

t.get_column('posts_count')

でカウントが表示できる。

タグの名前とカウント数を表示させたい場合にはこのままTTでいいと思うが、タグクラウドにしたい場合は、コントローラーでHTML::TagCloud::ExtendedとかHTML::TagCloud を使ったほうがいいのかもと。

あとYAPCのチケットとった。DBICネタが密かに楽しみだったり。

Kwikiが新しくなってた

Kwiki2.0ってなってた。早速svn coしたRevision 162はKwiki::Configあたりでエラーが出てて動かないっぽいので、downloadsのを動かして遊んでみた。

kwiki -start

でスタンドアロンサーバーで動くぜ!みたいに書いてあるんだけど、オプションがなくて悩んだ。どうもダウンロード版は

とやって、サーバー用のモジュールを組み込まないと

kwiki -start

できないような。svn coしたやつはpluginもゴソゴソって落としてくるので問題ないのかな?Kwiki::Configのエラーでaddもinstallも出来なかったのでわからん。

生まれ変わったkwikiはかなり速くなって快適度が増してる。後でソース読んでみよう。

凸型の滑り台付きジム買った。

ユッキーが、ちょうど一歳なので先週末に買ってきた。

まだ自分で階段登れないので、滑り降りるたびに滑り台の上まで持ち上げてやらなあかんのだけど。

最近は、HDDレコーダーに撮り溜めたお母さんと一緒になんかを一緒にみるようになってきたんだけど、スプーがやっとつながった。

あとwiiなんかもいい感じで、Rimoのアニマルチャンネル効果絶大!。風呂から上がってパジャマ着せるときに釘付けになってるので、超楽。

kidってなかなかいいかも

TurboGearsのテンプレートエンジンのKidって使いやすい感じだなぁ思ったので、週末何でかなーってジムの自転車漕ぎながら考えてた。

TurboGears: Kid Template System — nagosui.org

多くのテンプレートシステムでは、タグをミスマッチな状態にしておくことが可能になっています。KidにおいてはあなたのテンプレートはvalidなXMLになります。つまりあなたは、ミスマッチなタグが存在しないことを保証されているのです。

CatalystのTTなんかはブロックでくみ上げるイメージになるのでブロック内でif-elseとかごちゃごちゃやりだすと手が付けられなくなってくるけど、KidはXMLだからDOMTreeみたいな思考パターンになって処理のイメージがしやすいのかナァってのが今の結論。つまり、TTは面構造(PROCESSとか)なのに対し、Kidは木構造(defとか)だと。

Kidも使い込んでいくと、嫌なとことか目についてくるだろうからまた変わるかもしれんけど。

プレコンペティティブって産官学連携用語だったのね

イノベーターとアーリーアダプターなんかはプレコンペティティブっぽいと思ってたので、オープンソースなんかでも使われてんのかなって思ってググってみたけど、アレなのしかヒットしないな。

よくよく考えると、イノベーターとアーリーアダプターどんだけ抱えるかってあたりがコンペティティブネスだと思うんだけど。

という当たり前の事をふと再認識。

イノベーターとアーリーアダプターっぽいことをどこでやるかは重要な気がするなぁと。

Plagger初挑戦

インストールはしてあったのだけど、なかなか暇を見つけられなくてさわれなかったPlaggerを(やっと)いじる機会ができた。

とりあえず、今入ってる0.5.4から最新の0.5.7にアップデート。

で、基本のbloglines2gmailをhack通りに

ん?うごかねぇ。

っていうかTimezoneがとか出るんですけど、、、、

PerlDocみると環境変数がとかあるので、JST-9をセットしておく

$ export TZ=JST-9

これでOK。再度Plagger実行。今度は違うエラーが、gmail_notify.ttがないと出てますゾ。

$ ./plagger Plagger [info] plugin Plagger::Plugin::Subscription::Bloglines loaded. Plagger [info] plugin Plagger::Plugin::Publish::Gmail loaded. Plagger::Plugin::Subscription::Bloglines [info] You have 11 unread item(s) on Bloglines. Plagger::Plugin::Subscription::Bloglines [info] 12 feed(s) updated. Plagger::Plugin::Publish::Gmail [fatal] file error - gmail_notify.tt: not found at line 92

hackに書いてないのでググってみるとビンゴなエントリ発見。 しかも、タイムゾーンってGlobalで設定すればいいのか、、、、なるほど。

07.02.19追記

下のやり方はダメ。 こっちとかのようにsvnで。 ここまで追記

assets_path設定して、その下にcommonっていうディレクトリ掘ったら、その中にgmail_notify.ttっていう空ファイルをtouchしてもう一度Plagger実行したら今度はうまくいったヨ。

bloglines2gmail

あとでTTいじるか。

まだこんな感じで、ほんのさわりしかいじってないけど、なかなか面白そうな感じですな。

個人的にはPipeline PilotみたいなGUIで直感的にわかりやすいソフトにぶち込むのも素敵な感じがしてますが。

Pipeline Pilotクローンってオープンソースのプロジェクトでないのかなぁ。