TTで空白行を除く

TT使ってできたHTMLのソースを見ると、IF文の部分とかが空白行になってしまい、やたらとスカスカ全開のHTMLが気持ち悪かったりして、コードの見やすさを犠牲にして、改行を削ってJAPHみたいなあとから読んだらよくわからんようなTT作ったりたんだけど、、、

-をつければchompして空白行を消すことができるということをCatalyst::Manual::Tutorial::CatalystBasicsで知った。

[% FOREACH book IN books -%]
  <tr>
    <td>[% book.title %]</td>
    <td>[% book.rating %]</td>
    <td>
    etc,etc
    </td>
  </tr>
[% END -%]
</table>

とかやっておくと

      </tr>

    </table>

といった、いかにもな感じの空白行が

      </tr>
    </table>

まるで手術痕の残らないヨみたいな自然なソースになるわけだ。素敵!

ま、ちょっと探したらTemplate Toolkit Manualにも書いてあったので、単にマニュアル読んでないのがばればれなだけなんだけど、、、、

Template Toolkit Manualもちゃんと読んでおくべきか。

で、微妙に本も欲しくなったりするなぁ。

ProductName Perl Template Toolkit
Darren Chamberlain
Oreilly & Associates Inc / 3031円 ( 2004-03 )


とはいうものの、TTに深入りするくらいなら、HTML::Masonみたいなほうが僕にはむしろあっているのかナァと悩んだが、テンプレートはテンプレートの利便さを追求する結果、うっかり高機能化した(しすぎた)だけなんだヨって考えるほうが、MVC的には自然なのかなあと今は考えている(というか自分を納得させている)。

TTSiteがうごかねーと悩んでいたら

久々にtelnetしたマシンでcatalystをいじってたら、TTSiteがうまく動かず、おかしいなぁ~と思ってたら

Catalystのバージョンが5.6902だった

このバージョンでTask::Catalyst 1.90を入れたので、エラーメッセージを吐かずに真っ白画面を出力していた模様。

Catalyst 5.7006にバージョンあげたらちゃんと動いた。

で、TTSiteだけど、普通に使うTTのヘルパーモードだと

app_create.pl view TT TT

で、TT.pmを作ってくれるだけなのに対してTTSiteは、

app_view TT TTSite

とやってヘルパーさんを動かすと、ヘッダー、フッターとかのテンプレートの雛型も一緒に作ってくれるという、お手軽度50%増量みたいな感じらしい。さらに、コントローラのディレクトリ構成とテンプレートのディレクトリの構成が対応するっぽいのでテンプレートが増えたときに把握しやすいのかも。

っていうか、これから使おうとしているのでまだちゃんとわかってないけど。

あとは、TTSiteだと拡張子がtt2になるので、Meadowのttモードも動くように.emacsに設定を追加しておく。

(setq auto-mode-alist
     (cons
       '("\\.tt2$" . html-helper-mode) auto-mode-alist))

Catalyst::Manual::Tutorialが充実してた

あれ、ちょっと見ない間に、チュートリアルが充実してた。

Catalyst::Manual::Tutorial

色々新しいことが書いてた。

  • DefaultEndはやめてCatalyst::Action::RenderView使うべし
  • TTSiteの使い方
  • CRUDをDBICで
  • AuthenticationとAuthorizationのやり方
  • デバッグとテスト
  • HTML::Widgetの使い方
  • flash featureの説明というか使いどころ

あたりは読んだけど、実際に何か作ってみないとちゃんと理解してるのかわからん。というわけで、DBICで多対多のdb使ってpubmed用のsbsを作り直してみることにした。Wikiに少しずつ書いてく予定。

The Black Paradeの最初のほうが好き

数寄屋橋のHMVで視聴してたら、妙に心にぐっと来たので衝動買いしてしまった。

ProductName ザ・ブラック・パレード(初回限定盤)
マイ・ケミカル・ロマンス
ワーナーミュージック・ジャパン / ?円 ( 2006-12-06 )


帰ってきてからbounce.comのインタビューなどみて妙に納得。

My Chemical Romance - bounce.com インタビュー

アイアン・メイデンやハロウィンなんかのヘヴィメタル・バンドが大好きだったんだ。その後パンク、そしてブリット・ポップにハマったのさ。その3つのまったく違う要素が、俺たちのサウンドのベースにあるんだ

The Sharpest Livesなどがベタっぽいけどかなりお気に入り。Welcome To The Black ParadeはQueenみたいで壮大だっていうレビューが多かったけどQueenな世代ではないからなぁ。

  • The Sharpest Lives
  • Famous Last Words

こっちだと視聴できるみたいですな

ProductName The Black Parade
My Chemical Romance
Wea / 909円 ( 2006-10-24 )


コンセプチュアルっぷり対決だったらIII Sides to Every Storyのほうが、、、

ProductName III Sides to Every Story (Jewel Box)
Extreme
Universal I.S. / 1763円 ( 1995-09-19 )


今年はアライで滑れないのね

こんな雲海も見ることができないのね。

ARAI MOUNTAIN & SPA

結構行っただけにちょっと寂しいかも。

tarのエラーメッセージが

エラーメッセージの日本語が。

Fedoracore 5

$ tar cvf fake.tar
tar: 空の書庫作成はご容赦願います
Try `tar --help' or `tar --usage' for more information.

ちなみにFC1はこんなエラーだった。

Fedoracore 1

$ tar cvf xxx
tar: どうしても空の書庫を作ろうとしません
もっと詳しい情報は `tar --help' と入力すれば得られます.

山崎精肉店の馬刺し

職場から結構近いにも関わらず未だ寄ったことのない山崎精肉店へ初馬刺しを買いに。

馬刺し

前に五反田で呑んでた時に、醤油の話でプチ盛り上がって、後日一本頂いたのだが、どうも魚の刺身には合わず放ってあったのを出してきて、御殿場甘露醤油と食べ比べ。

馬刺しは甘い醤油のほうが馬がよくあじわえて旨かった。(九州の)甘い醤油も侮れないな。兵六(芋焼酎)と一緒に。

山崎精肉店

chemicho2png

chemichoの出力をpngにしたのでPioglitazone で試してみた。

設定はこんな感じで。

Generation: 10
Cycle: 1
Prefix: Piogli

Plugins:
  - module: AddCarbon
    weight: 1
  - module: Aromatize
    weight: 0.8
  - module: Bulky
    weight: 1
  - module: DeAromatize
    weight: 0.2
  - module: DecreaseBondOrder
    weight: 1
  - module: GenerateRing
    weight: 0.5
  - module: Halogenize
    weight: 1
  - module: Hydroxylation
    weight: 2
  - module: HeteroCyclization
    weight: 2
  - module: IncreaseBondOrder
    weight: 2
  - module: IntroduceAcid
    weight: 1

6番目の出力から10番目の出力はこんな感じ。

piogli5 piogli6

piogli7 piogli8

piogli9 piogli10

あんまバルキーな変異はよくないな。もうちょいヘテロを導入したりとか、ヘテロ原子増やさずに自由度を減らすような変異をいれたほうがいいかも。芳香環を壊しちゃうのも気になるナァ。

soulfuricのDJmixをiTunesで

soulfuricのDJmixをrssにするのをplaggerで作ってみたのだけど、作リ終えてから、すっかり更新されてないことに気付いて凹んだ。

コレを詳細->podcastに登録で登録すればiTunesに取り込めます。

まぁ、ちょっと手軽になっただけだけど、全部DLすると結構楽しめる。30時間ぐらいハウス漬けだ。

僕はどっちかっていうとこういう華やかめのハウスでなくて、音響ドープ気味のハウスが好きです。

ProductName Love Moderne
Unai
Force Tracks / ?円 ( 2006-05-16 )


最近だとUNAIのI Like Your StyleとかModerne Loveが良かった。

DBICを使ってみる

最近はmysqlでデータベースを作ることが多かったんだけど、ちょっとしたもの作るのにmysqlはでかすぎるなあとSQLite+DBICをさわり始めてる。

サンプルはPerl/DBIC - Nekokak's core dumpが、よくまとまっていて非常にわかりやすかったので、これの流れで書いた。が、二箇所ほど悩んだのでメモ。ちなみに、SQLiteのせいかどうかはわかりません。

ちなみに、

  • DBIx::Class 0.07003
  • SQLite version 3.3.5

というバージョン。

last_insert_id

1:多の関係を試す をSQLiteで試す。

まずsqlはこんな感じ

create table user (
    id     integer PRIMARY KEY not null,
    name   varchar(256) not null,
    time   date
);

create table bookmark (
    id      integer NOT NULL PRIMARY KEY,
    user_id integer NOT NULL,
    url     text NOT NULL,
    FOREIGN KEY (user_id) REFERENCES user(id)
);

CREATE INDEX user_id_idx ON bookmark (user_id);

で、データベース作成

sqlite3 kzfm.db < test.sql

Schema,User,Bookmarkモジュールはほとんど同じだがload_componentsにPK::Auto::SQLiteを使う。

use strict;
use warnings;
use base 'DBIx::Class';

__PACKAGE__->load_components(qw/ PK::Auto::SQLite Core/);
__PACKAGE__->table('user');
__PACKAGE__->add_columns(qw/id name/);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many(bookmark => 'Kzfm::Schema::Bookmark', 'user_id');
1;

こんな感じ。

で、実行してみると、、、

my $i = $schema->resultset('User')->create({name => 'kzfm'});
$schema->resultset('Bookmark')->create({
    user_id => $i->last_insert_id ,
    url => 'http://test.com/'}
);

last_insert_idがないと言われた。単にidだけでよいのか

might_have

loginテーブルにマッピングさせるモジュール

のとこでUser,Loginお互いにmight_haveを指定すると->idでIDがゲットできなかった。

use strict;
use warnings;
use base 'DBIx::Class';

__PACKAGE__->load_components(qw/ PK::Auto::SQLite Core/);
__PACKAGE__->table('user');
__PACKAGE__->add_columns(qw/id name/);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many(bookmark => 'Kzfm::Schema::Bookmark', 'user_id');
#__PACKAGE__->might_have(id => 'Kzfm::Schema::Login');
1;

package Kzfm::Schema::Login;

use strict;
use warnings;
use base 'DBIx::Class';
use DateTime::Format::MySQL;

__PACKAGE__->load_components(qw/PK::Auto::SQLite Core/);
__PACKAGE__->table('login');
__PACKAGE__->add_columns(qw/id login_time/);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->might_have(id => 'Kzfm::Schema::User');
__PACKAGE__->inflate_column('login_time', {
    inflate => sub { DateTime::Format::MySQL->parse_datetime(shift); },
    deflate => sub { DateTime::Format::MySQL->format_datetime(shift); },
});

幾つかのパターンを試した結果、参照するほうにmight_haveをつけるらしい。あと、SQLiteの場合日付まわりをどう処理すればいいのかよくわかってない。とりあえずMySQLのフォーマットでも動くような気がするんだけど。

というわけで、時間のあるうち(気力のあるうち?)に、多対多まではいっときたい。