<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>catalyst / Drkcore</title><link>http://blog.kzfmix.com/catalyst</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Thu, 31 May 2007 21:54:10 +0919</lastBuildDate><item><title>Catalyst::Controller::FormBuilder引き続き</title><link>http://blog.kzfmix.com/entry/1180616050</link><description>&lt;p&gt;引き続きCatalyst::Controller::FormBuilderをいじってるヨ。ってか&lt;a href="http://search.cpan.org/perldoc?CGI::FormBuilder"&gt;CGI::FormBuilder&lt;/a&gt;読んだ。&lt;/p&gt;
&lt;p&gt;で、昨日はこんな感じで書いてたんだけど&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;title&lt;/span&gt;            &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$form&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;content&lt;/span&gt;          &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$form&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;tag_text&lt;/span&gt;         &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$form&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tag_text&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;pubdate&lt;/span&gt;         &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$dt&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;DBIC::Entries&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;update_or_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;でも、podみてたら$form-&amp;gt;fieldってメソッド使えばハッシュのリファレンスが返ってくるので、&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$form&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;DBIC::Entries&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;update_or_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;でいいらしい。早速書き直した。フォームのパラメータとかバリデーションとかよきに計らってくれる上に、DBICとの連携も楽だ。&lt;/p&gt;
&lt;p&gt;それがDWIMmery?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://search.cpan.org/~nwiger/CGI-FormBuilder-3.0501/lib/CGI/FormBuilder.pod" title="CGI::FormBuilder - Easily generate and process stateful forms - search.cpan.org"&gt;CGI::FormBuilder - Easily generate and process stateful forms - search.cpan.org&lt;/a&gt;
&lt;blockquote&gt;The goal of CGI::FormBuilder (FormBuilder) is to provide an easy way for you to generate and process entire CGI form-based applications. Its main features are:&lt;/blockquote&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Field Abstraction&lt;/li&gt;
&lt;li&gt;DWIMmery&lt;/li&gt;
&lt;li&gt;Built-in Validation&lt;/li&gt;
&lt;li&gt;Template Support&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 31 May 2007 21:54:10 +0919</pubDate><category>perl</category><category>catalyst</category></item><item><title>CatalystのTTのレンダリング時間を計る</title><link>http://blog.kzfmix.com/entry/1177593189</link><description>&lt;p&gt;ちょっと前に作ったCatalystのアプリのView::TT-&amp;gt;processが相当遅いので、プロファイリングできんかなと調べた。&lt;/p&gt;
&lt;p&gt;DBICだと&lt;a href="http://www.onemogin.com/blog/554-profile-your-catalystdbixclass-app-with-querylog.html"&gt;こんなん&lt;/a&gt;が使えるらしいが、TTの場合は&lt;a href="http://search.cpan.org/~mramberg/Catalyst-View-TT-0.25/lib/Catalyst/View/TT.pm"&gt;configにTIMERをセット&lt;/a&gt;するとレンダリング時間を測定してソースのコメントに突っ込んでくれる。&lt;/p&gt;</description><pubDate>Thu, 26 Apr 2007 22:13:09 +0919</pubDate><category>catalyst</category></item><item><title>Catalystのマニュアルをpdfで</title><link>http://blog.kzfmix.com/entry/1176984790</link><description>&lt;p&gt;&lt;a href="http://use.perl.org/~Yanick/journal/33028" title="Journal of Yanick (3196)"&gt;Journal of Yanick (3196)&lt;/a&gt;
&lt;blockquote&gt;Catalyst manual into a cute little pdf&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;200ページ以上あるヨ&lt;/p&gt;</description><pubDate>Thu, 19 Apr 2007 21:13:10 +0919</pubDate><category>perl</category><category>catalyst</category></item><item><title>Flex2とCatalystをJSONでつないでみる</title><link>http://blog.kzfmix.com/entry/1173797189</link><description>&lt;p&gt;&lt;a href="http://www.adobe.com/devnet/flex/articles/eckel_video.html"&gt;Creating a Flex application using the TurboGears framework&lt;/a&gt;を参考に。&lt;/p&gt;
&lt;p&gt;JSONでやり取りしてるからflex2の部分はそのままでフレームワーク部分を変えるだけでいい。MVCフレームワークに小さいMVCフレームワークが乗っているという風にも取れるけど、かなり疎なので、自前でwebapiサービスを提供しつつ、サービスを受けるっていう感覚に近いかもしれん。&lt;/p&gt;
&lt;p&gt;イメージにするとこんな感じ。
ファイルは&lt;a href="/tools/MyApp.zip"&gt;ココ&lt;/a&gt;に置いておいた。&lt;/p&gt;
&lt;p&gt;&lt;img alt="flex2_Catalyst" src="http://www.kzfmix.com/images/blosxom/mvc_flex2.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;CatalystのviewはJSON。で、Flex2は受けとったJSONをmodelにしてASでロジック書いて、MXMLでUIのデザインをやればいい。
そのためすっきりとした感じはする。後は、チュートリアルみてたらFlex Builder2が欲しくなった。UIデザインするにはGUIのツールがやっぱ楽でいいと思う。&lt;/p&gt;
&lt;p&gt;flex2に関しては&lt;a href="http://www.adobe.com/devnet/flex/articles/eckel_video.html"&gt;Creating a Flex application using the TurboGears framework&lt;/a&gt;のオンラインチュートリアルを眺めてください。&lt;a href="http://code.google.com/p/as3corelib/"&gt;corelib&lt;/a&gt;を使うとJSONのシリアライズ/デシリアライズをやってくれるので必要。c:flex2extlibというフォルダをつくって放り込んでおいた。&lt;/p&gt;
&lt;p&gt;コンパイルは&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;mxmlc&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;compiler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;libraries&lt;/span&gt; &lt;span class="n"&gt;c:&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;flex2&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;extlib&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;corelib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;swc&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
&lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mxml&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;とやるとswfができるので、catalystプロジェクトの　root/staticに放り込む。&lt;/p&gt;
&lt;p&gt;flex2はこれで終了。続いて、というかメインのCatalystをいじるわけだけど、こっちも大して面倒なところはない。&lt;/p&gt;
&lt;p&gt;TGはhttp://localhost:3000/からアドレスリストをJSONで受け取って(R)、http://localhost:3000/save,http://localhost:3000/deleteでそれぞれCU,Dという実装だったので、Catalystもこれに併せて、Catalyst::View::JSONとDBIC::Schema::Loaderを使ってつくることにした。&lt;/p&gt;
&lt;p&gt;まず&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;catalyst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pl&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;でプロジェクトをつくって&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;myapp_create&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pl&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;でJSON用のviewを作成。モデルはSQLiteで。&lt;/p&gt;
&lt;h4&gt;まずSQLite&lt;/h4&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;sqlite3&lt;/span&gt; &lt;span class="n"&gt;myapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;myapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ちなみにsqlはこれ。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;INTEGER&lt;/span&gt; &lt;span class="n"&gt;PRIMARY&lt;/span&gt; &lt;span class="n"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;full_name&lt;/span&gt; &lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;phone&lt;/span&gt; &lt;span class="n"&gt;TEXT&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4&gt;続いて、DBIC::Schema::Loader&lt;/h4&gt;
&lt;p&gt;いつも、明示的に書いてるので、触るのはほとんど初めてなんだけど、スキーマクラスって自分で書かないといけないんだろうか?
こんなの。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="n"&gt;qw&lt;/span&gt;&lt;span class="sr"&gt;/DBIx::Class::Schema::Loader/&lt;/span&gt;

&lt;span class="n"&gt;__PACKAGE__&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;loader_options&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;
   &lt;span class="n"&gt;relationships&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ヘルパーあんのかな?あとで調べる。こういう細かい部分はTGのSQLObjectはあんま考えないでいいので楽。データもcatwalkからブラウザでちょこちょこ入れられるし。&lt;/p&gt;
&lt;h4&gt;Root.pm,save.pm,delete.pm&lt;/h4&gt;
&lt;p&gt;Root.pmはアクセスするとアドレスリストのJSONを返す。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;default&lt;/span&gt; &lt;span class="p"&gt;: Private {&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;@_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;@result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;DBIC::Address&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;stash&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;addresses&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;
     &lt;span class="nb"&gt;map&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="n"&gt;fullName&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;full_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;phone&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="nv"&gt;@result&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;forward&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;MyApp::View::JSON&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;save,deleteは普通にDBIC操作なので省略。&lt;/p&gt;
&lt;p&gt;やるべきことをやったら動かしてみる。、&lt;/p&gt;
&lt;p&gt;&lt;img alt="swf" src="http://www.kzfmix.com/images/blosxom/address_swf.png" /&gt;&lt;/p&gt;
&lt;p&gt;こんな感じでflashが、、、なんかきもちいい。&lt;/p&gt;
&lt;p&gt;あと今回手を動かしていく過程で以下の本がマイウィッシュリストに投入された。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0596526954/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41xcLWo7HqL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Actionscript 3.0 Cookbook&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Joey Lott&lt;br /&gt;
    Oreilly &amp; Associates Inc / 3034円 ( 2006-10 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/059652689X/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51QqPYN3h7L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Programming Flex 2: The Comprehensive Guide to Creating Rich Internet Applications With Adobe Flex&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Chafic Kazoun&lt;br /&gt;
    Oreilly &amp; Associates Inc / 7044円 ( 2007-04 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0132433885/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/5180voAeK2L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Rapid Web Applications with TurboGears: Using Python to Create Ajax-Powered Sites (Prentice Hall Open Source Software Development Series)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Mark Ramm&lt;br /&gt;
    Prentice Hall / 4172円 ( 2006-11-17 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;この時期頻発する送別会を2,3見送ればこの中の2冊は確実にゲットできるのになぁとちょこっと思ったヨ。っていうかかなり本気で悩む。&lt;/p&gt;
&lt;p&gt;とりあえずTurboGearsの本は欲しいなぁ。買いかなぁ、見送りかなぁ？もし読んだヒトがいたらアドバイスなどください。&lt;/p&gt;</description><pubDate>Tue, 13 Mar 2007 23:46:29 +0919</pubDate><category>catalyst</category><category>flex2</category><category>TurboGears</category></item><item><title>WWW::CloudCreatorがいい感じ</title><link>http://blog.kzfmix.com/entry/1172670260</link><description>&lt;p&gt;いつもタグクラウド作るのに&lt;a href="http://search.cpan.org/perldoc?HTML::TagCloud"&gt;HTML::TagCloud&lt;/a&gt;とか&lt;a href="http://search.cpan.org/perldoc?HTML::TagCloud::Extended"&gt;HTML::TagCloud::Extended&lt;/a&gt;を使っていたのだが、&lt;a href="http://search.cpan.org/perldoc?WWW::CloudCreator"&gt;WWW::CloudCreator&lt;/a&gt;というモジュールを教えてもらったのでいじってみた。&lt;/p&gt;
&lt;p&gt;おおまかな違いはHTML::TagCloudはhtml(とcss)をそのまま吐くのに対し、WWW::CloudCreatorはタグ名とカウントとスタイル要素を戻してくる。&lt;/p&gt;
&lt;p&gt;だから、TTと組み合わせるにはWWW::CloudCreatorのほうが良い感じ。&lt;/p&gt;
&lt;p&gt;ただし、配列で戻してくるのでTTが&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;[% FOREACH tag = tagcloud %]&lt;/span&gt;
&lt;span class="na"&gt;&amp;lt;span style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;[% tag.2 %]&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class="na"&gt;&amp;lt;a href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;[% Catalyst.uri_for(&amp;#39;/bookmarks/&amp;#39;) %]/[% tag.0 %]&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class="err"&gt;[%&lt;/span&gt; &lt;span class="err"&gt;tag.0&lt;/span&gt; &lt;span class="err"&gt;%]([%&lt;/span&gt; &lt;span class="err"&gt;tag.1&lt;/span&gt; &lt;span class="err"&gt;%])&lt;/span&gt;
&lt;span class="err"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="err"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;[% END %]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;となってちょっとわかりにくい気が。&lt;/p&gt;
&lt;p&gt;あと、WWW::CloudCreatorはサイズだけじゃなくて色も変化させることができるんだが、こっちはちょっとバグってた。&lt;/p&gt;
&lt;p&gt;81行目あたりをhexdecでレンジを揃えて82行目でdechex二度がけ。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$ihex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hexdec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$coldarray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$colorstep&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;$fraction&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$decihex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dechex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dechex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$ihex&lt;/span&gt; &lt;span class="p"&gt;));&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;dechex関数も直す。負の方向にグラデーションがかかる場合にa-fがdechexに渡ったら無視するように。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;dechex&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=~&lt;/span&gt;&lt;span class="sr"&gt; /\d+/&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
           &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;sprintf&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;%x&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;これでうまくいってるような気がするけど。&lt;/p&gt;
&lt;p&gt;&lt;img alt="wcc" src="http://www.kzfmix.com/images/blosxom/tagc070228.png" /&gt;&lt;/p&gt;
&lt;p&gt;色のグラデーションはタグの頻度ではなくて、タグ間の関連性とかの違う軸ででかけるようにしたいなぁ。&lt;/p&gt;</description><pubDate>Wed, 28 Feb 2007 22:44:20 +0919</pubDate><category>catalyst</category></item><item><title>Catalystのデバッグ</title><link>http://blog.kzfmix.com/entry/1170936405</link><description>&lt;p&gt;僕は、最近はDBIC_TRACE=1でsqlを常に出力させつつ&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;でプリントデバッグっぽいやり方をするのが、デフォルトなんだが、&lt;a href="http://search.cpan.org/~jrockway/Catalyst-Manual-5.700501/lib/Catalyst/Manual/Tutorial/Debugging.pod"&gt;Catalyst::Manual::Tutorial::Debugging&lt;/a&gt;だと、$DB::single=1でブレークポイントを設定しといて、&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;perl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;myapp_server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pl&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;でデバッグすると吉とか書いてあった。&lt;/p&gt;
&lt;p&gt;xで自由に式実行できるし、普通にコード書くときにはよくやるけど、Catalystでデバッグモード使ったことなかった。&lt;/p&gt;
&lt;p&gt;っていうかどういうときに使うと便利なんだろうか？。DBICのデバッグだと、ログに出力されたsqlをsqlのプロンプトで直接打ってデバッグしたりするからなぁ。コントローラーで複雑な処理をするときに使うといい感じなのかも。&lt;/p&gt;</description><pubDate>Thu, 08 Feb 2007 21:06:45 +0919</pubDate><category>catalyst</category></item><item><title>Catalyst::Helper::Prototype</title><link>http://blog.kzfmix.com/entry/1170852490</link><description>&lt;p&gt;javascriptを勉強している流れで、&lt;a href="http://www.prototypejs.org/"&gt;prototype.js&lt;/a&gt;もさわったりとか、ググって色々みたりしてる。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mizzy.org/program/htmlPrototype.html"&gt;mizzy.org - Catalystでajax (HTML::Prototypeモジュールの使い方)&lt;/a&gt;みてたら、Catalystのヘルパーでjs吐くって書いてたので、やってみた。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="err"&gt;./&lt;/span&gt;&lt;span class="nv"&gt;script&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;pbl_create&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pl&lt;/span&gt; &lt;span class="n"&gt;Prototype&lt;/span&gt;
&lt;span class="n"&gt;created&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/home/kzfm/catalyst/Pbl/script/../root/prototype.js&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;created&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/home/kzfm/catalyst/Pbl/script/../root/controls.js&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;created&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/home/kzfm/catalyst/Pbl/script/../root/dragdrop.js&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;created&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/home/kzfm/catalyst/Pbl/script/../root/effects.js&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;おー吐いた、っていうか色々作成された。controls,dragdrop,effectsは&lt;a href="http://script.aculo.us/"&gt;script.aculo.us&lt;/a&gt;由来らしい。&lt;/p&gt;
&lt;p&gt;これから、&lt;a href="http://www.prototypejs.org/api"&gt;Prototype API Documentation&lt;/a&gt;とか参考にソースでも読んでいくことにした。&lt;/p&gt;</description><pubDate>Wed, 07 Feb 2007 21:48:10 +0919</pubDate><category>catalyst</category><category>prototype</category></item><item><title>uri_with()って素敵</title><link>http://blog.kzfmix.com/entry/1170767684</link><description>&lt;p&gt;いまさらというか、よくわからない順番で発見または再発見があるのでCatalsytは素敵。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://use.perl.org/~LTjake/journal/31056?from=rss" title="Journal of LTjake (4001)"&gt;Journal of LTjake (4001)&lt;/a&gt;
&lt;blockquote&gt;uri_with lets you add new (or replace existing) key-value pairs in the current request's URL. The following Template Toolkit code shows you how to take a URL (eg. http://example.com/search/?q=foo) and append next and previous page numbers (eg. http://example.com/search/?q=foo&amp;amp;page=2). It assumes that you have a Data::Page object in a stash variable called "pager".&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;というわけで、uri_with()を使うと、現在のURIに新たなキー値を付加することができるということなんだそうだ(知らなかった)。&lt;/p&gt;
&lt;p&gt;ページ処理とかはこれですっきりしそう。&lt;/p&gt;</description><pubDate>Tue, 06 Feb 2007 22:14:44 +0919</pubDate><category>catalyst</category></item><item><title>HTML::Widgetを使ってみた。</title><link>http://blog.kzfmix.com/entry/1169646427</link><description>&lt;p&gt;&lt;a href="http://search.cpan.org/~cfranks/HTML-Widget-1.10/lib/HTML/Widget.pm"&gt;HTML::Widget&lt;/a&gt;で改行の入れ方が分からん。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;%&lt;/span&gt; &lt;span class="nv"&gt;widget_result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;as_xml&lt;/span&gt; &lt;span class="nv"&gt;%&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;とやると、一行でずらずら出力されてしまふ。&lt;/p&gt;
&lt;p&gt;あと、&lt;a href="http://www.catalystframework.org/calendar/2006/19"&gt;Day 19 - HTML::Widget tricks&lt;/a&gt;などを参考にいじってみたりしているが、イマイチよさが伝わってこない。&lt;/p&gt;
&lt;p&gt;というわけで、明日も引き続き調べてみることにする。&lt;/p&gt;</description><pubDate>Wed, 24 Jan 2007 22:47:07 +0919</pubDate><category>catalyst</category></item><item><title>Catalyst::Plugin::Text::Tags</title><link>http://blog.kzfmix.com/entry/1169551373</link><description>&lt;p&gt;&lt;a href="http://search.cpan.org/~glasser/Text-Tags-0.04/lib/Text/Tags.pm"&gt;Text::Tags&lt;/a&gt;
のCatalystプラグイン書いた。&lt;/p&gt;
&lt;p&gt;&lt;a href="/tools/Catalyst-Plugin-Text-Tags-0.01.tar.gz"&gt;Catalyst::Plugin::Text::Tags&lt;/a&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;@parse_tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;texttags&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;parse_tags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sx"&gt;q{ foo  bar  &amp;quot;baz bap&amp;quot; jenny&amp;#39;s &amp;#39;beep beep&amp;#39;}&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$joined_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;texttags&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;join_tags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;@tags&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;こんな感じで。&lt;/p&gt;</description><pubDate>Tue, 23 Jan 2007 20:22:53 +0919</pubDate><category>catalyst</category></item></channel></rss>