[perldocjp-cvs 1551] CVS update: docs/articles/www.perl.com/pub/2005/06/02

Back to archive index

ktats****@users***** ktats****@users*****
2012年 9月 27日 (木) 23:17:20 JST


Index: docs/articles/www.perl.com/pub/2005/06/02/catalyst.html
diff -u /dev/null docs/articles/www.perl.com/pub/2005/06/02/catalyst.html:1.1
--- /dev/null	Thu Sep 27 23:17:20 2012
+++ docs/articles/www.perl.com/pub/2005/06/02/catalyst.html	Thu Sep 27 23:17:20 2012
@@ -0,0 +1,947 @@
+<html>
+<head><title>Catalyst - Perl.com</title>
+<link REL="STYLESHEET" HREF="../basestyle.css">
+<link REL="STYLESHEET" HREF="perl_study.css">
+</head>
+<body>
+<h1>Catalyst</h1>
+<p>
+Jesse Sheidlowerさんの許可を得て、翻訳を公開しております。なお、この翻訳は、under same terms of Perl itselfで、配布可能です。<br><br>
+原文はこちら: <a href="http://www.perl.com/pub/a/2005/06/02/catalyst.html">Catalyst</a>
+</p>
+<h2>目次</h2>
+<div class="right">
+<div class="menu">
+<strong>Perl 関連</strong>
+<br>・<a href="./Perl_variable.html">Perl 変数について</a>
+<br>・<a href="./Perl_tips.html">Perl Tips</a>
+<br>・<a href="./Perl_oo.html">Perlオブジェクト指向プログラミング</a>
+<br>・<a href="./Perl_unicode.html">Perl 5.8 Unicode 関連</a>
+<br>・<a href="./Books.html">Perl(とか)の書籍</a>
+</div>
+
+<ul>
+<li> <a href="#1">Catalyst</a></li>
+<li> <a href="#2">インスピレーションを受けたもの</a></li>
+<li> <a href="#3">特徴</a></li>
+<ul>
+<li> <a href="#4">スピード</a></li>
+<li> <a href="#5">簡易性</a></li>
+<li> <a href="#6">柔軟性</a></li>
+</ul>
+<li> <a href="#7">サンプルアプリケーション: 30行のコードで、MiniMojo, Ajax-Based Wiki</a></li>
+<ul>
+<li> <a href="#8">インストール</a></li>
+<li> <a href="#9">アプリケーションのスケルトンの作成</a></li>
+<li> <a href="#10">Application Classに基本的なメソッドを追加</a></li>
+<li> <a href="#11">Model(SQLite データベース)のセットアップとヘルパースクリプトによるModelクラスの生成</a></li>
+<li> <a href="#12">Viewのセットアップ(<code>Template::Toolkit</code>) とヘルパースクリプトによるViewクラスの作成</a></li>
+<li> <a href="#13">表示と編集のコードの追加</a></li>
+<li> <a href="#14">AjaxでWikiをセットアップする</a></li>
+</ul>
+<li> <a href="#15">リソース</a></li>
+<li> <a href="#16">翻訳について</a></li>
+</ul>
+<a name="1"> </a>
+<h2>Catalyst</h2>
+<p> Jesse Sheidlower<br>
+June 02, 2005
+</p>
+<p class="original">Web frameworks are an area of significant interest at the moment. Now that
+we've all learned the basics of web programming, we're ready to get the
+common stuff out of the way to concentrate on the task at hand; no one wants to
+spend time rewriting the same bits of glue to handle parameter processing,
+request dispatching, and the like.</p>
+
+<p>
+Web フレームワークは、目下、重要な関心を集めている分野です。現在、みんなWebプログラミングの基礎を学んでしまって、
+今は目前にある仕事に集中するやりかたではなく、共通のものを得る時期です;
+もう誰も、パラメタの処理、リクエストの振り分け、そういったものをするための、
+同じような、ちっぽけな糊のようなものを書き換えるのに時間を浪費したくありません。
+</p>
+
+<p class="original">A model currently favored for web applications is <em>MVC</em>, or
+Model-View-Controller. This design pattern, originally from Smalltalk, supports
+the separation of the three main areas of an application--handling application
+flow (Controller), processing information (Model), and outputting results
+(View)--so that it is possible to change or replace any one without affecting
+the others.</p>
+
+<p>
+現在、 Web アプリケーションで好まれているモデルは、<em>MVC</em>、Model-View-Controllerです。
+このデザインターンは、もともとはSmalltalkからきており、Mode、 View、 Controllerの3つの主要な部分
+--アプリケーションフロー(Controller)、情報の処理(Model)、結果の表示(View) --
+を分割することに対応しています。こうすることで、他への影響なしに、何にでも変更、置換することができます。
+</p>
+
+<p class="original">Catalyst is a new MVC framework for Perl. It is currently under rapid
+development, but the core API is now stable, and a growing number of projects
+use it.  Catalyst borrows from other frameworks, such as Ruby on Rails and
+Apache Struts, but its main goal is to be a flexible, powerful, and fast
+framework for developing any type of web project in Perl. This article, the
+first of a series of two, introduces Catalyst and shows a simple application; a later
+article will demonstrate how to write a more complex project.</p>
+
+<p>
+Catalyst は新しいPerlのMVCフレームワークです。現在、急速に開発されていますが、
+コアのAPIは安定しています。それに、Catalyst を使うプロジェクトの数も増えつつあります。
+Catalyst は他のフレームワーク - Ruby on RailsやApache Strutsのような - から借りています。
+ですが、Catalyst のメインゴールは、Perlで作られるどのようなタイプのWebプロジェクトの開発にも使える、
+柔軟性があり、強力な、速いフレームワークです。
+この記事は、2つのシリーズの1つ目です。Catalystの紹介と簡単なアプリケーションを見せます;
+後の記事ではもっと複雑なプロジェクトの書き方をデモするでしょう。
+</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="2"> </a>
+<h2>インスピレーションを受けたもの</h2>
+
+<p class="original">Catalyst grew out of Maypole, an MVC framework developed by Simon Cozens
+(and discussed last year on Perl.com; see "<a href="http://www.perl.com/pub/a/2004/04/15/maypole.html">Rapid Web Application
+Development with Maypole</a>," for example). Maypole works well for typical CRUD (Create, Retrieve, Update, Delete)
+databases on the Web. It includes a variety
+of useful methods and prewritten templates and template macros that make it
+very easy to set up a powerful web database.  However, it focuses so strongly
+on CRUD that it is less flexible for other tasks. One of the goals of Catalyst
+is to provide a framework well suited for any web-related project.</p>
+
+<p>
+Catalyst は、Maipole、Simon Cozensによって開発されたMVCフレームワーク、Maypole
+( Perl.comで昨年議論されました; "<a href="http://www.perl.com/pub/a/2004/04/15/maypole.html">Rapid Web Application Development with Maypole</a>," 参照)
+、から大きくなりました。Maypoleは、Webのデータベースの典型的なCRUD(Create, Retrieve, Update, Delete)で、うまく動きます。
+Maypoleは、たくさんの有益なメソッドと既存のテンプレートと強力なWebデータベースをセットアップするのをとても簡単にするテンプレートマクロがあります。
+ですが、MaypoleはCRUDに強く焦点が当てられており、他の仕事に関しては柔軟性が低くなっています。
+Catalystのゴールの1つは、どのようなWebに関連するプロジェクトにでもうまく合う、フレームワークを提供することです。
+</p>
+
+<p class="original"><a href="http://www.rubyonrails.org/">Ruby on Rails</a> was another
+inspiration; this popular system has done much to promote interest in the Ruby
+programming language. Features we borrowed from RoR are the use of helper
+scripts to generate application components and the ability to have multiple
+controllers in a single application. Both RoR and Struts allow the use of
+forwarding within applications, which also proved useful for Catalyst.</p>
+<p>
+<a href="http://www.rubyonrails.org/">Ruby on Rails</a> は、もうひとつのインスピレーションを受けたものです;
+この人気のあるシステムは、プログラミング言語Rubyに多くの関心を集めさせました。
+RoRから借りた特徴は、アプリケーションのコンポーネントを生成する、ヘルパースクリプトと
+1つのアプリケーションに複数のControllerを持つことできるところです。
+RoRとStrutsは両方とも、アプリケーション内で転送(forwarding)を使うとができます。
+転送は、Catalystにとっても有益だと分かりました。
+</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="3"> </a>
+<h2>特徴</h2>
+
+<a name="4"> </a>
+<h3>スピード</h3>
+
+<p class="original">We planned Catalyst as an enterprise-level framework, able to handle a significant
+    load. It makes heavy use of caching. Catalyst applications register their actions
+    in the dispatcher at compile time, making it possible to process runtime requests
+    quickly, without needing elaborate checks. Regex dispatches are all precompiled.
+    Catalyst builds only the structures it needs, so there are no delays to generate
+    (for example) unused database relations.</p>
+
+<p>
+Catalystはエンタープライズレベルの、かなりの負荷を扱うことができるフレームワークとして計画されています。
+エンタープライズレベルのフレームワークは、キャッシングを頻繁に使います。Catalystのアプリケーションは、
+コンパイル時にディスパッチャーにアクションを登録します。このことで実行時のリクエストを、複雑なチェックなしに素早く処理できます。
+正規表現のディスパッチは全てプリコンパイルされます。
+Catalystは必要とする構造だけを作ります。ですので、(例えば)データベース関係を使わないものを作るのに遅れはありません。
+</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="5"> </a>
+<h3>簡易性</h3>
+<p><em>コンポーネント</em></p>
+<p class="original">Catalyst has many prebuilt components and plugins for common modules and tasks.
+          For example, there are <code>View</code> classes available for Template Toolkit, HTML::Template,
+          Mason, Petal, and PSP. Plugins are available for dozens of applications and
+          functions, including <a href="http://search.cpan.org/perldoc?Data::FormValidator">Data::FormValidator</a>,
+          authentication based on LDAP or <a href="http://search.cpan.org/perldoc?Class::DBI">Class::DBI</a>, several caching
+          modules, <a href="http://search.cpan.org/perldoc?HTML::FillInForm">HTML::FillInForm</a>,
+          and XML-RPC.</p>
+
+<p>
+Catalystには、共通のモジュールと仕事用に、あらかじめコンポーネントやプラグインがあります。
+例えば、<code>View</code>クラスにはTemplate ToolkitやHTML::TemplateやMason、Petal、PSPなどを利用できます。
+プラグインで何十ものアプリケーションと機能を使えます。
+<a href="http://search.cpan.org/perldoc?Data::FormValidator">Data::FormValidator</a>、
+LDAPベースの認証とか<a href="http://search.cpan.org/perldoc?Class::DBI">Class::DBI</a>、
+複数のキャッシングモジュール, <a href="http://search.cpan.org/perldoc?HTML::FillInForm">HTML::FillInForm</a>、 
+XML-RPCなどを含みます。
+</p>
+
+<p class="original">Catalyst supports component auto-discovery; if you put a component in the
+    correct place, Catalyst will find and load it automagically. Just place a Catalog
+    controller in <em>/AppName/Controller/Catalog.pm</em> (or, in practice, in the
+    shortened <em>/AppName/C/Catalog.pm</em>); there's no need to <code>use</code> each
+    item. You can also declare plugins in the application class with short names,
+    so that:</p>
+
+<p>Catalystは、コンポーネントのオートディスカバリーをサポートします;
+コンポーネントを正しい場所に置けば、Catalystは、自動的にそれを見付けて、読み込みます。
+<em>/AppName/Controller/Catalog.pm</em>(または、実際には、略して <em>/AppName/C/Catalog.pm</em>)
+に、カタログコントローラを置けばいいだけです;
+それぞれのものを<code>use</code>する必要はありません。
+また、短い名前でアプリケーションクラスのプラグインを宣言できます。
+次のようにします:
+</p>
+
+<pre class=code><code>use Catalyst qw/Email Prototype Textile/;</code></pre>
+<p>will load <code>Catalyst::Plugin::Email</code>, <code>Catalyst::Plugin::Prototype</code>,
+    and <code>Catalyst::Plugin::Textile</code> in one shot.</p>
+
+<p><code>Catalyst::Plugin::Email</code>, <code>Catalyst::Plugin::Prototype</code>,
+    and <code>Catalyst::Plugin::Textile</code>を一回でロードします。</p>
+
+<p><em>開発</em></p>
+<p class="original">Catalyst comes with a built-in lightweight HTTP server for development purposes.
+    This runs on any platform; you can quickly restart it to reload any changes.
+    This server functions similarly to production-level servers, so you can use
+    it throughout the testing process--or longer; it's a great choice if you want
+    to deliver a self-contained desktop application. Scalability is simple, though:
+    when you want to move on, it is trivial to switch the engine to use plain CGI,
+    <code>mod_perl1</code>, <code>mod_perl2</code>, FastCGI, or even the Zeus web server.</p>
+
+<p>Catalystは開発手段にライトウェイトなHTTPサーバが組み込まれています。
+このサーバはどんなプラットフォームでも動きます; なんらかの変更をリロードするために、
+すぐにリスタートできます(訳註:最新版は変更を自動で読み取り、読み直しますので、リスタートしなくていいです)。
+このサーバの機能は製品レベルのサーバに近いです。
+これをテストのプロセスで使えますし、また、もっと長く使うこともできます;
+内蔵タイプのデスクトップアプリケーションを供給しようとしたいなら、このサーバを使うのは良い選択でしょう。
+とはいえ、拡張するのは簡単です。:
+移行したくなっても、ただのCGIを使うエンジン、<code>mod_perl1</code>、 <code>mod_perl2</code>、 FastCGI、Zeus web server でも、
+変更するのは、取るに足らないことです。</p>
+
+<p class="original">Debugging (Figure 1) and logging (Figure 2) support is also built-in. With
+    debugging enabled, Catalyst sends very detailed reports to the error log, including
+    summaries of the loaded components, fine-grained timing of each action and
+    request, argument listings for requests, and more. Logging works by using the
+    the <code>Catalyst::Log</code> class; you can log any action for debugging
+    or information purposes by adding lines like:</p>
+
+<p>デバッギング (Figure 1) と ロギング (Figure 2) サポートもまた組み込まれています。
+デバッギングを有効にすると、Catalystは、エラーログにとても詳細なレポートを送ります。
+ロードされたコンポーネントのサマリや、それぞれのアクションとリクエストのきめこまかいタイミング、
+リクエストの引数のリスト、その他多くのものを含みます。
+<code>Catalyst::Log</code> クラスでロギングを動かしています;
+デバッギングのためや目的の情報を得るために、以下のような行を追加することで、どんなアクションも記録できます。
+
+<pre class=code><code>$c-&gt;log-&gt;info("We made it past the for loop");
+$c-&gt;log-&gt;debug( $sql_query );</code></pre>
+<p><img src="http://www.perl.com/2005/06/02/graphics/log-screenshot.gif" alt="Log screenshot" height="411" width="515"><br>
+  <em>Figure 1. Logging</em></p>
+<p class="original">Crashes will display a flashy debug screen showing details of relevant data
+    structures, software and OS versions, and the line numbers of errors.</p>
+
+<p>クラッシュすると、関連するデータ構造、ソフトウェア、OSのバージョン、エラーの行数を、派手なデバッグスクリーンに表示します。</p>
+
+<p><img src="http://www.perl.com/2005/06/02/graphics/debug-screenshot.gif" alt="Debug screenshot" height="376" width="515"><br>
+  <em>Figure 2. Debugging</em></p>
+<p class="original">Helper scripts, generated with Template Toolkit, are available for the main
+    application and most components. These allow you to quickly generate starter code (including
+    basic unit tests) for the application framework. With a single line,
+    you can create a <code>Model</code> class based on <code>Class::DBI</code> that pulls in
+    the appropriate Catalyst base model class, sets up the pattern for the CDBI
+    configuration hash, and generates a <code>perldoc</code> skeleton.</p>
+
+<p>
+ヘルパースクリプト - Template Toolkitで生成された - は、メインのアプリケーションとほとんどのコンポーネントで利用できます。
+ヘルパースクリプトで、アプリケーションフレームワークの最初のコードをすぐに生成できます(基本的なユニットテストも含みます)。
+一行で、適切なCatalystのベースModelクラスを引き入れた、
+<code>Class::DBI</code> をベースとした <code>Model</code> クラスを作れます。
+CDBIの設定ハッシュをセットアップし、<code>perldoc</code>スケルトンを作ります。
+</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="6"> </a>
+<h3>柔軟性</h3>
+<p class="original">
+Catalyst allows you to use multiple models, views, and controllers--not just
+as an option when setting up an application, but as a totally flexible part of
+an application's flow. You can mix and match different elements within the same
+application or even within the same method. Want to use <code>Class::DBI</code> for
+your database storage and LDAP for authentication? You can have two models. Want
+to use Template Toolkit for web display and <a href="http://search.cpan.org/perldoc?PDF::Template">PDF::Template</a> for print
+output? No problem. Catalyst uses a simple building-block approach to its add-ins:
+if you want to use a component, you say so, and if you don't say so, Catalyst
+won't use it. With so many components and plugins available, based on CPAN modules,
+it's easy to use what you want, but you don't have to use something you don't
+need. Catalyst features advanced URL-to-action dispatching. There are multiple
+ways to map a URL to an action (that is, a Catalyst method), depending on your
+requirements. First, there is literal dispatching, which will match a specific
+path:
+</p>
+<p>
+Catalyst は複数のModel、View、 Controller を扱えます --
+アプリケーションのセットアップ時のオプションとしてだけでなく、アプリケーションのフローの全体的に柔軟な部分としても。
+同じアプリケーション内、同じメソッド内に、違った要素をミックスしマッチすることができます。
+データベースストレージに<code>Class::DBI</code>と、認証のために、LDAPを使いたい?
+両方のモデルを使えます。Webの表示にTemplate Toolkitを使い、プリント用の出力に
+<a href="http://search.cpan.org/perldoc?PDF::Template">PDF::Template</a>を使いたい?
+何の問題もありません。
+Catalystは、簡単なbuilding-blockアプローチをCatalystのアドインに使っています:
+コンポーネントを使いたければ、そう言えばいい、また、そう言わなければ、
+Catalystは使おうとしません。利用可能なたくさんのコンポーネントとプラグイン -
+CPANモジュールをベースとしている - で、簡単に望むものを使うことができます。
+ですが、必要でないものを使う必要はありません。
+
+Catalyst features advanced URL-to-action dispatching. There are multiple
+ways to map a URL to an action (that is, a Catalyst method), depending on your
+requirements. First, there is literal dispatching, which will match a specific
+path:
+
+Catalystは、先進の URL-to-action ディスパッチを備えています。
+URLとアクションのマッピングには複数のやりかたがあります(that is, a Catalyst method)。
+あなたがどうしたいかに依ります。まず、文字どおりのディスパッチ、特定のパスにマッチするものは:
+
+<pre class=code><code>package MyApp::C::Quux;
+
+# http://localhost:3000/foo/bar/yada だけにマッチ
+sub baz : Path('foo/bar/yada') { }</code></pre>
+
+<p class="original">A top-level, or global, dispatch matches the method name directly at the application
+  base:</p>
+
+<p>トップレベル、または、グローバルは、アプリケーションベースでメソッド名に直接マッチします:</p>
+
+<pre class=code><code>package MyApp::C::Foo;
+
+# http://localhost:3000/bar にのみマッチ
+sub bar : Global { }</code></pre>
+
+<p class="original">A local, or namespace-prefixed, dispatch acts only in the namespace derived
+  from the name of your Controller class:</p>
+
+<p>ローカル、または、namespace-prefixedのディスパッチは、
+Controllerクラスの名前から由来する名前空間でのみ動きます。
+</p>
+
+<pre class=code><code>package MyApp::C::Catalog::Product;
+
+# http://localhost:3000/catalog/product/buy にマッチ
+sub buy : Local { }
+
+package MyApp::C::Catalog::Order;
+
+# http://localhost:3000/catalog/order/review にマッチ
+sub review : Local { }</code></pre>
+
+<p class="original">The most flexible is a regex dispatch, which acts on a URL that matches the
+  pattern in the key. If you use capturing parentheses, the matched values are
+  available in the <code>$c-&gt;request-&gt;snippets</code> array.</p>
+
+<p>一番柔軟性が高いのは、正規表現によるディスパッチです。
+キーのパターンにマッチするURLで動きます。
+
+パーレンをキャプチャリングするのに使う(訳注: /([a-z]+)(\d+)/ から、$1, $2など を使う)なら、
+マッチした値は、<code>$c-&gt;request-&gt;snippets</code>の配列から利用できます。
+</p>
+
+<pre class=code><code>package MyApp::C::Catalog;
+
+# http://localhost:3000/item23/order189 にマッチ
+sub bar : Regex('^item(\d+)/order(\d+)$') { 
+   my ( $self, $c ) = @_;
+   my $item_number  = $c-&gt;request-&gt;snippets-&gt;[0];
+   my $order_number = $c-&gt;request-&gt;snippets-&gt;[1];
+   # ...    
+}</code></pre>
+
+<p class="original">The regex will act globally; if you want it to act only on a namespace, use
+  the name of the namespace in the body of the regex:</p>
+
+<p>正規表現はグローバルに動きます; 名前空間でのみ動かしたければ、正規表現に名前空間の名前を使ってください:</p>
+
+<pre class=code><code>sub foo : Regex('^catalog/item(\d+)$') { # ...</code></pre>
+
+<p class="original">Finally, you can have private methods, which are never available through URLs.
+  You can only reach them from within the application, with a namespace-prefixed
+  path:</p>
+
+<p>最後に、プライベートメソッドを持つことができます。これは、URLには決して使われません。
+アプリケーション内からのみ、namespace-prefixed なパスで使うことができます:
+</p>
+
+<pre class=code><code>package MyApp::C::Foo;
+# matches nothing, and is only available via $c-&gt;forward('/foo/bar').
+sub bar : Private { }</code></pre>
+
+<p class="original">A single <code>Context</code> object (<code>$context</code>, or more usually as its alias <code>$c</code>)
+  is available throughout the application, and is the primary way of interacting
+  with other elements. Through this object, you can access the request object
+  (<code>$c-&gt;request-&gt;params</code> will return or set parameters, <code>$c-&gt;request-&gt;cookies</code> will
+  return or set cookies), share data among components, and control the flow of
+  your application. A response object contains response-specific information
+  (<code>$c-&gt;response-&gt;status(404)</code>) and the <code>Catalyst::Log</code> class
+  is made directly available, as shown above. The <code>stash</code> is a universal hash
+  for sharing data among application components:</p>
+  
+<p>1つの<code>Context</code> オブジェクト(<code>$context</code>, または、 普通は <code>$c</code>)
+がアプリケーションを通して使用できます。主に他の要素に相互に作用するために使います。
+このオブジェクトを通して、リクエストオブジェクト(<code>$c-&gt;request-&gt;params</code> がパラメータを返す/セットします、 
+<code>$c-&gt;request-&gt;cookies</code> がクッキーを返す/セットします)、
+コンポーネント間でデータを共有し、アプリケーションのフローをコントロールします。
+レスポンスオブジェクトは、レスポンスに特化した情報を含みます
+(<code>$c-&gt;response-&gt;status(404)</code>)、また、既に見た、<code>Catalyst::Log</code> クラス
+が直接に利用可能です. <code>stash</code> は、ユニバーサルなハッシュで、
+アプリケーションのコンポーネントでデータを共有するためのものです:</p>
+
+<pre class=code><code>$c-&gt;stash-&gt;{error_message} = "You must select an entry";
+
+# TT のテンプレートで:
+[% IF error_message %]
+   &lt;h3&gt;[% error_message %]&lt;/h3&gt;
+[% END %]</code></pre>
+
+<p class="original">Stash values go directly into the templates, but the entire context object
+  is also available:</p>
+
+<p>Stash の値はテンプレートに直接に入ります。 ですが、全てのコンテキストオブジェクトもまた利用可能です:</p>
+
+<pre class=code><code>&lt;h1&gt;[% c.config.name %]&lt;/h1&gt;</code></pre>
+
+<p class="original">To show a Mason example, if you want to use <code>Catalyst::View::Mason</code>:</p>
+
+<p>Masonの例を見るために, <code>Catalyst::View::Mason</code>が欲しければ:</p>
+
+<pre class=code><code>% foreach my $k (keys $c-&gt;req-&gt;params) {
+  param: &lt;% $k %&gt;: value: &lt;% $c-&gt;req-&gt;params-&gt;{$k} %&gt;
+% }</code></pre>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="7"> </a>
+<h2>サンプルアプリケーション: 30行のコードで、MiniMojo, Ajax-Based Wiki</h2>
+
+<p class="original">Now that you have a sense of what Catalyst is, it's time to look at what it
+can do. The example application is MiniMojo, a wiki based on <a href="http://www.adaptivepath.com/publications/essays/archives/000385.php">Ajax</a>,
+which is a JavaScript framework that uses the <code>XMLHttpRequest</code> object to create
+highly dynamic web pages without needing to send full pages back and forth
+between the server and client.</p>
+
+<p>もう、Catalystが何かわかりましたね。何ができるかを見てみましょう。
+アプリケーション例は、MiniMojoです。<a href="http://www.adaptivepath.com/publications/essays/archives/000385.php">Ajax</a>のWikiです。
+<code>XMLHttpRequest</code>を使ったJavaScriptのフレームワークで、サーバ、クライアント間で前後にページを送る必要のない、
+高度に動的なWebページを作ります。</p>
+
+<p class="original">Remember that from the Catalyst perspective, Ajax is just a case of sending
+more text to the browser, except that this text is in the form of client-side
+JavaScript that talks to the server, rather than a boilerplate copyright notice
+or a navigation sidebar.  It makes no difference to Catalyst.</p>
+
+<p>
+Catalystの観点から、Ajaxが、国防省共通契約書版権情報とかナビゲーションサイドバーとかではなく、
+サーバと通信するクライアントサイドJavaScriptのフォームにテキストがあることを除いて、
+より多くのテキストをブラウザに送る1ケースであることを覚えていてください。 このことはCatalystに重要ではありません。
+</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="8"> </a>
+<h3>インストール</h3>
+
+<p class="original">Catalyst has a relatively large number of requirements; most, however, are
+easy to install, along with their dependencies, from CPAN. The following list
+should take care of everything you need for this project:</p>
+
+<p>Catalyst 必要なモジュールが比較的たくさんあります; ですが、
+ほとんどは簡単にCPANから依存性に沿ってインストールできます。
+下のリストで、このプロジェクトに必要なものが揃います。
+</p>
+
+<ul>
+<li><a href="http://search.cpan.org/perldoc?Catalyst">Catalyst</a></li> 
+<li><a href="http://search.cpan.org/perldoc?Catalyst::Model::CDBI">Catalyst::Model::CDBI</a></li>
+<li><a href="http://search.cpan.org/perldoc?Class::DBI::SQLite">Class::DBI::SQLite</a></li> 
+<li><a href="http://search.cpan.org/perldoc?Catalyst::View::TT">Catalyst::View::TT</a> </li>
+<li><a href="http://search.cpan.org/perldoc?Catalyst::Plugin::Textile">Catalyst::Plugin::Textile</a> </li>
+<li><a href="http://search.cpan.org/perldoc?Catalyst::Plugin::Prototype">Catalyst::Plugin::Prototype</a></li> 
+<li><a href="http://www.sqlite.org/">SQLite</a> (バイナリ、Perlモジュールではありません)</li>
+</ul>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="9"> </a>
+<h3>アプリケーションのスケルトンの作成</h3>
+
+<p class="original">Run this command:</p>
+
+<p>このコマンドを実行:</p>
+
+<pre class=code><code>$ catalyst.pl MiniMojo
+$ cd MiniMojo</code></pre>
+
+<p class="original">You've just created the skeleton for your entire application, complete with
+a helper script keyed to MiniMojo to generate individual classes, basic test
+scripts, and more.</p>
+
+<p>アプリケーション全体のスケルトンができあがりました。
+それぞれのクラスを作るための、MiniMojoをキーとするヘルパースクリプト、
+基本的なテストスクリプト、その他多くのものが揃っています。</p>
+
+<p class="original">Run the built-in server:</p>
+
+<p>ビルトインサーバの起動:</p>
+
+<pre class=code><code>$ script/minimojo_server.pl</code></pre>
+
+<p class="original">MiniMojo is already running, though it isn't doing much
+just yet. (You should have received a web page consisting solely
+of the text "Congratulations, MiniMojo is on Catalyst!")  Press
+<code>Ctrl</code>-<code>C</code> to stop the server.</p>
+
+<p>MiniMojo はもう動いています、ですが、まだ多くのことはしません。
+(単に"Congratulations, MiniMojo is on Catalyst!"というWebページだけです)
+<code>Ctrl</code>-<code>C</code>を押して、サーバを止めましょう。</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="10"> </a>
+<h3>Application Classに基本的なメソッドを追加</h3>
+
+<p class="original">Add a private <code>end</code> action to your application class,
+<em>lib/MiniMojo.pm</em>, by editing the new file:</p>
+
+<p>プライベートな<code>end</code> アクションをアプリケーションクラス、<em>lib/MiniMojo.pm</em>に追加します。
+その新しいファイルを編集します:</p>
+
+<pre class=code><code>sub end : Private {
+    my ( $self, $c ) = @_;
+    $c-&gt;forward('MiniMojo::V::TT') unless $c-&gt;res-&gt;output;
+}</code></pre>
+
+<p class="original">Catalyst automatically calls the <code>end</code> action at the end of a
+request cycle.  It's one of four built-in Private actions. It's a typical
+pattern in Catalyst to use <code>end</code> to forward the application to the
+View component for rendering, though if necessary you could do it yourself (for
+example, if you want to use different Views in the same application--perhaps
+one to generate web pages with Template Toolkit and another to generate PDFs
+with PDF::Template).</p>
+
+<p>Catalyst は、リクエストサイクルの最後に自動的に<code>end</code>を呼びます。これは、4つのビルトインアクションの1つです。
+レンダリングのためにViewコンポーネントにアプリケーションをフォーワードするのに、<code>end</code>を使うのは、Catalystの典型的なパターンです。
+ですが、必要なら、自分でそれを行うこともできます(例えば、同じアプリケーションで違うViewを使いたい--たぶん、一方で Tempalte Toolkit で Webページを生成し、
+他方でPDF::Templateで、PDFを生成するような場合)。
+</p>
+
+<p class="original">Replace the existing, helper-generated <code>default</code> action in the same class with:</p>
+
+<p>ヘルパースクリプトが作った アプリケーションクラスの<code>default</code>アクションを置き換えます:</p>
+
+<pre class=code><code>sub default : Private {
+    my ( $self, $c ) = @_;
+    $c-&gt;forward('/page/show');
+}</code></pre>
+
+<p class="original">In case the client has specified no other appropriate action, this will
+forward on to the page controller's <code>show</code> method. As Private
+actions, nothing can call these from outside the application. Any method from
+within the application can call them.  The <code>default</code> action is
+another built-in Private action, along with <code>begin</code>,
+<code>auto</code>, and <code>end</code>.  Again, Catalyst calls them
+automatically at relevant points in the request cycle.</p>
+
+<p>
+クライアントが他の適当なアクションを何も指定しなければ、
+ページコントローラの<code>show</code>メソッドにフォーワードします。
+プライベートアクションは、アプリケーションの外側から呼び出すことはできません。
+アプリケーションないの度のメソッドもこれらを呼ぶことができます。
+<code>default</code>アクションは、<code>begin</code>、<code>auto</code>、<code>end</code>と同様に、
+別のプライベートアクションです。
+Catalystは、リクエストサイクルで関連のある箇所で自動的にそれらを呼び出します。
+</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="11"> </a>
+<h3>Model(SQLite データベース)のセットアップとヘルパースクリプトによるModelクラスの生成</h3>
+
+<p class="original">Next, create a file, <em>minimojo.sql</em>, that contains the SQL for setting
+up your <code>page</code> table in SQLite.</p>
+
+<p>次に、<em>minimojo.sql</em>というファイルを作ります。
+SQLiteに<code>page</code>テーブルをセットアップするSQLです。</p>
+
+<pre class=code><code>-- minimojo.sql
+CREATE TABLE page (
+    id INTEGER PRIMARY KEY,
+    title TEXT,
+    body TEXT
+);</code></pre>
+
+<p class="original">Create a database from it, using the <code>sqlite</code> command-line
+program:</p>
+
+<p>これから、データベースを作成します。<code>sqlite</code>コマンドラインプログラムを使います:</p>
+
+<pre class=code><code>$ sqlite minimojo.db &lt; minimojo.sql</code></pre>
+
+<p class="original">Depending on your setup, it might be necessary to call this as <code>sqlite3</code>.</p>
+
+<p>セットアップによって、 <code>sqlite3</code>として、コマンドを呼び出す必要があるかもしれません.</p>
+
+<p class="original">Use the helper to create model classes and basic unit tests (Figure 3 shows the results):</p>
+
+<p>ヘルパースクリプトでModelクラスと基本のユニットテストを作ります(Figure 3に結果があります):</p>
+
+<pre class=code><code>$ script/minimojo_create.pl model CDBI CDBI dbi:SQLite:/path/to/minimojo.db</code></pre>
+
+<p><img src="http://www.perl.com/2005/06/02/graphics/model-create-screenshot.gif" alt="Model-creation screenshot" height="372" width="515"><br><em>Figure 3. Creating the model</em></p>
+
+<p class="original">The <em>minimojo_create.pl</em> script is a helper that uses Template
+Toolkit to automate the creation of particular modules. The previous command
+creates a model (in contrast to a controller or a view) called
+<em>CDBI.pm</em>, using the CDBI helper, setting the connection string to
+<code>dbi:SQLite:/path/to/minimojo.db</code>, the database you just created. (Use the appropriate path for
+your system.) The helper will write the models into <em>lib/MiniMojo/M/</em>.
+There are various options for the helper scripts; the only requirement is the
+type and the name. (You can create your own modules from scratch, without using
+the helper.)</p>
+
+<p>The <em>minimojo_create.pl</em> スクリプトはTemplate Toolkitを使ったヘルパーで、
+特定のモジュールの作成を自動化します。前のコマンドは(ControllerやViewとではなく)、<em>CDBI.pm</em>と呼ばれるModelを作ります。
+CDBIヘルパーを使い、<code>dbi:SQLite:/path/to/minimojo.db</code>の、先ほど作ったデータベースへの接続文字列をセットします。
+(自分のシステムに合ったパスを使ってください)。
+ヘルパーは、 <em>lib/MiniMojo/M/</em>にModelを書きます。
+ヘルパースクリプトにはさまざまなオプションがあります;
+必須はタイプと名前だけです。(ヘルパーを使わずに、スクラッチから自分のモジュールを作ることもできます)</p>
+
+<div class="back">
+<a href="#top">â–² to Top/a>
+</div>
+
+<a name="12"> </a>
+<h3>Viewのセットアップ(<code>Template::Toolkit</code>) とヘルパースクリプトによるViewクラスの作成</h3>
+
+<p>ヘルパースクリプトによるViewクラスの作成:</p>
+
+<pre class=code><code>$ script/minimojo_create.pl view TT TT</code></pre>
+
+<p class="original">View classes go into <em>lib/MiniMojo/V/</em>.</p>
+
+<p>Viewクラスは<em>lib/MiniMojo/V/</em>にできあがります。</p>
+
+<p>ヘルパースクリプトによるControllerクラスの作成:</p>
+
+<p class="original">Create a controller class called <code>Page</code> with the helper:</p>
+
+<p>ヘルパースクリプトにより<code>Page</code>Controllerクラスを作ります:</p>
+
+<pre class=code><code>$ script/minimojo_create.pl controller Page</code></pre>
+
+<p class="original">Controller classes live in <em>lib/MiniMojo/C/</em>.</p>
+
+<p><em>lib/MiniMojo/C/</em>にControllerクラスが入ります。</p>
+
+<p class="original">Add a <code>show</code> action to <em>lib/MiniMojo/C/Page.pm</em>:</p>
+
+<p><em>lib/MiniMojo/C/Page.pm</em>に<code>show</code>アクションを追加します:</p>
+
+<pre class=code><code>sub show : Regex('^(\w+)\.html$') {
+    my ( $self, $c ) = @_;
+    $c-&gt;stash-&gt;{template} = 'view.tt';
+    # $c-&gt;forward('page');
+}</code></pre>
+
+<p class="original">The <code>Regex</code> dispatch matches a page in <i><code>foo</code>.html</i>, where
+<code>foo</code> is any sequence of word characters. This sequence is available
+in the <code>$context-&gt;request-&gt;snippets</code> array, where the <code>page</code>
+action uses it to display an existing page or to create a new one. The rest of
+this action sets the appropriate template and sends the application to the
+<code>page</code> action. (Leave the <code>forward</code> command commented out until you have written the <code>page</code> action.)</p>
+
+<p><code>Regex</code>ディスパッチが<i><code>foo</code>.html</i>のページにマッチします
+(<code>foo</code>は、どんな順番の単語の文字列配列でも構いません)。
+この順番は<code>$context-&gt;request-&gt;snippets</code> 配列から利用できます。
+<code>page</code>アクションは存在するページを表示するか、新しいものを作るのに使われます。
+このアクションの残りでは、適当なテンプレートをセットし、アプリケーションに、
+<code>page</code>アクションを送ります。(<code>page</code>アクションを書くまで、
+<code>forward</code>をコメントしたままにしておきます)</p>
+
+<p class="original">Restart the server with <code>$ script/minimojo_server.pl</code> and point a web browser to <i>http://localhost:3000/show/</i> to see
+the debug screen (you don't yet have the template that <code>show</code> is
+trying to send people to).</p>
+
+<p>サーバを <code>$ script/minimojo_server.pl</code> で、リスタートし、<i>http://localhost:3000/show/</i>
+をWebブラウザーでみると、デバッグスクリーンが表示されます
+(<code>show</code> が使おうとしたテンプレートは、まだ用意されていないので)</p>
+
+<p><em>root/view.tt</em>を作ります:</p>
+
+<pre class=code><code>&lt;html&gt;
+    &lt;head&gt;&lt;title&gt;MiniMojo&lt;/title&gt;&lt;/head&gt;
+    &lt;body&gt;
+        &lt;h1&gt;MiniMojo is set up!&lt;/h1&gt;
+    &lt;/body&gt;
+&lt;/html&gt;</code></pre>
+
+<p class="original">Test again by killing the server with <code>Ctrl</code>-<code>C</code> and restarting it, and go to
+<i>http://localhost:3000/show/</i>. You should see the page you just
+defined.</p>
+
+<p>
+<code>Ctrl</code>-<code>C</code>でサーバを殺して、リスタートし、
+<i>http://localhost:3000/show/</i>を見てみます。今作ったページが見られるはずです。
+</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="13"> </a>
+<h3>表示と編集のコードの追加</h3>
+
+<p class="original">Modify the application class <em>lib/MiniMojo.pm</em> to include the
+<code>Prototype</code> and <code>Textile</code> plugins:</p>
+
+<p><code>Prototype</code> と <code>Textile</code> プラグインを使うために、
+アプリケーションクラスの<em>lib/MiniMojo.pm</em>を変更しましょう:</p>
+
+<pre class=code><code>use Catalyst qw/-Debug Prototype Textile/;</code></pre>
+
+<p class="original">
+Note that you can use the plugins by specifying their base names; Catalyst
+figures out what you mean without making you use <code>Catalyst::Plugin::Prototype</code>.
+</p>
+<p>
+ベースの名前を指定することで、プラグイン使うことができるのに注意してください;
+Catalystは、<code>Catalyst::Plugin::Prototype</code>を使わなくても、意図するものの見当を付けます。
+</p>
+
+<p class="original">Modify the <code>page</code> controller, <em>lib/MiniMojo/C/Page.pm</em>, to
+add page-view and editing code:</p>
+
+<p><code>page</code> Controller、 <em>lib/MiniMojo/C/Page.pm</em>を修正します。
+ページViewと、編集のコードを追加します:</p>
+
+
+<pre class=code><code>sub page : Private {
+    my ( $self, $c, $title ) = @_;
+    $title ||= $c-&gt;req-&gt;snippets-&gt;[0] || 'Frontpage';
+    my $query = { title =&gt; $title };
+    $c-&gt;stash-&gt;{page} = MiniMojo::M::CDBI::Page-&gt;find_or_create($query);
+}</code></pre>
+
+<p class="original">The private <code>page</code> method sets a title--whether passed in to it,
+taken from the <code>snippets</code> array (that matches the regex in
+<code>show</code>), or defaulting to "Frontpage." The <code>$query</code>
+variable holds a hashref used for <code>Class::DBI</code>'s
+<code>find_or_create</code> method, seeding the stash for the <code>page</code>
+variable with the result of this CDBI query. At the end of the method, control
+flow returns to the calling method.</p>
+
+<p>
+プライベートな<code>page</code> メソッドでタイトルをセットします -- 
+(<code>show</code>内の正規表現にマッチした)<code>snippets</code> 配列から取得されればそれを、
+そうでなければ、 "Frontpage"がデフォルトとしてタイトルに使われます。 
+<code>$query</code>変数は、<code>Class::DBI</code>の<code>find_or_create</code> メソッドで使われる
+ハッシュリファレンスを持ちます。CDBIクエリの結果と一緒に<code>page</code>変数を埋めます。
+メソッドの終わりに、コントロールフローは、呼び出すメソッドを返します。
+</p>
+
+<p class="original">Now uncomment the <code>$c-&gt;forward('page');</code> line in the <code>show</code> action.</p>
+
+<p><code>show</code>アクション中の<code>$c-&gt;forward('page');</code>をコメントを外します。</p>
+
+<pre class=code><code>sub edit : Local {
+    my ( $self, $c, $title ) = @_;
+    $c-&gt;forward('page');
+    $c-&gt;stash-&gt;{page}-&gt;body( $c-&gt;req-&gt;params-&gt;{body} )
+      if $c-&gt;req-&gt;params-&gt;{body};
+    my $body = $c-&gt;stash-&gt;{page}-&gt;body || 'Just type something...';
+    my $html = $c-&gt;textile-&gt;process($body);
+
+    my $base = $c-&gt;req-&gt;base;
+    $html    =~ s{(?&lt;![\?\\\/\[])(\b[A-Z][a-z]+[A-Z]\w*)}
+                 {&lt;a href="$base$1.html"&gt;$1&lt;/a&gt;}g;
+
+    $c-&gt;res-&gt;output($html);
+}</code></pre>
+
+<p class="original">The <code>edit</code> method first forwards the action off to
+<code>page</code>, so that the stash's <code>page</code> object contains the
+result of the CDBI query. If there is a value for <code>body</code>, it will
+use this; otherwise "Just type something..." is the default. The code then
+processes the body with Textile, which converts plain text to HTML, and then runs
+the body through a regex to convert camel-case text into links, with the URL
+base taken from the Catalyst request object. Finally, it outputs the HTML.</p>
+
+<p><code>edit</code> メソッドは、まず<code>page</code>にアクションをフォーワードします。
+stashの <code>page</code>オブジェクトはCDBIクエリの結果を含んでいます。
+<code>body</code>のための値があれば、それを使います;
+そうでなければ、"Just type something..." がデフォルトです。
+コードは、bodyをTextileで処理します。これは、プレインテキストをHTMLに変換します。
+Catalystリクエストオブジェクトから受け取ったURLベースで、
+camel-caseテキストをリンクに変換する正規表現をbodyに通します。
+最後に、HTMLを出力します。</p>
+
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="14"> </a>
+<h3>AjaxでWikiをセットアップする</h3>
+
+<p class="original">Modify <em>root/view.tt</em> to include Ajax code:</p>
+
+<p><em>root/view.tt</em> を変更し、Ajax codeを含めます:</p>
+
+<pre class=code><code>&lt;html&gt;
+     &lt;head&gt;&lt;title&gt;MiniMojo&lt;/title&gt;&lt;/head&gt;
+     [% c.prototype.define_javascript_functions %]
+     [% url = base _ 'page/edit/' _ page.title %]
+     &lt;body Onload="new Ajax.Updater( 'view',  '[% url %]' )"&gt;
+         &lt;h1&gt;[% page.title %]&lt;/h1&gt;
+         &lt;div id="view"&gt;&lt;/div&gt;
+         &lt;textarea id="editor" rows="24" cols="80"&gt;[% page.body %]&lt;/textarea&gt;
+         [% c.prototype.observe_field( 'editor', {
+             url =&gt; url,
+             with =&gt; "'body='+value",
+             update =&gt; 'view' }
+         ) %]
+     &lt;/body&gt;
+&lt;/html&gt;</code></pre>
+
+<p>その行:</p>
+
+<pre class=code><code>[% c.prototype.define_javascript_functions %]</code></pre>
+
+<p class="original">includes the whole <em>prototype.js</em> library in a <code>script</code>
+block. Note that the <code>prototype</code> plugin is available in the context
+object.</p>
+
+<p><code>script</code>ブロックにすべての<em>prototype.js</em> をインクルードします。
+<code>prototype</code>がコンテキストオブジェクトで使えることに注意してください。</p>
+
+<p>セクション</p>
+
+<pre class=code><code>[% url = base _ 'page/edit/' _ page.title %] 
+&lt;body Onload="new Ajax.Updater( 'view',  '[% url %]' )"&gt;
+&lt;h1&gt;[% page.title %]&lt;/h1&gt;
+&lt;div id="view"&gt;&lt;/div&gt;</code></pre>
+
+<p class="original">constructs the Ajax URL and updates the view <code>div</code> when loading
+the page.</p>
+
+<p>ページをロードするときに、Ajax URLを組み立て、view、<code>div</code>をアップデートします。</p>
+
+<p>最後に:</p>
+
+<pre class=code><code>&lt;textarea id="editor" rows="24" cols="80"&gt;[% page.body %]&lt;/textarea&gt;
+    [% c.prototype.observe_field( 'editor', {
+        url =&gt; url,
+        with =&gt; "'body='+value",
+        update =&gt; 'view' }
+    ) %]</code></pre>
+
+<p>periodically checks the <code>textarea</code> for changes and makes an Ajax
+request on demand.</p>
+
+<p>定期的に <code>textarea</code> を、変更があるかチェックし、デーモンでAjaxリクエストを作ります。</p>
+
+<p class="original">That's it! Now you can re-run the server and your wiki is up and running
+(Figure 4). To use the wiki, simply start typing in the <code>textarea</code>.
+As you type, the wiki will regularly echo your entry above, passing it through
+the formatter.  When you type something in camel case, it will automatically
+create a link you can click to go to the new page.</p>
+
+<p>これ迄! サーバを再起動すれば、Wikiは動いています(Figure 4).
+Wikiを使うためには、<code>textarea</code>にタイプするだけです。
+タイプ通りに、wikiは、定期的に上textareaの上に、フォーマッターを通して、エントリーを表示します。
+キャメルケースで何かを書けば、自動的にリンクが作られて、クリックして、新しいページへ行くことができます。</p>
+
+<p><img src="http://www.perl.com/2005/06/02/graphics/running-wiki-screenshot.gif" alt="screenshot of the running wiki" height="376" width="515"><br><em>Figure 4. The running wiki</em></p>
+
+<p class="original">Enjoy your new Catalyst-powered Ajax wiki!</p>
+
+<p>Catalyst-powered Ajax wikiを楽しんでください!</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="15"> </a>
+<h2>リソース</h2>
+
+<p class="original">For more information, see the Catalyst documentation, in particular the <a href="http://search.cpan.org/perldoc?Catalyst::Manual::Intro">Catalyst::Manual::Intro
+module</a>, which gives a thorough introduction to the framework. There are two
+<a href="http://lists.rawmode.org/mailman/listinfo">Catalyst mailing lists</a>,
+a general list and a developer list.  The best place to discuss Catalyst,
+though, is the <i>#catalyst</i> IRC channel at <a href="http://irc.perl.org/">irc.perl.org</a>. The <a href="http://catalyst.perl.org/">Catalyst home page</a> is currently just a
+collection of a few links, but we will extend it in the near future.</p>
+
+<p>
+詳しくは、Catalystのドキュメントを見てください、特に、<a href="http://search.cpan.org/perldoc?Catalyst::Manual::Intro">Catalyst::Manual::Intro module</a>は、
+フレームワークの詳細なイントロダクションです。
+メーリングリストが2つあります、<a href="http://lists.rawmode.org/mailman/listinfo">Catalyst mailing lists</a>。
+一般向けのものと、開発者向けのものです。Catalystについて議論する一番の場所は、
+<a href="http://irc.perl.org/">irc.perl.org</a>にある、IRCの<i>#catalyst</i>チャンネルです。
+<a href="http://catalyst.perl.org/">Catalyst home page</a>は現在は、少ないリンク集になっています。
+近い将来、拡張するでしょう。
+</p>
+
+<p class="original">Thanks to Catalyst lead developer Sebastian Riedel for help with this
+article and, of course, for Catalyst itself.</p>
+
+<p>Catalystのリードディベロッパーの Sebastian Riedelに、この記事を書くために助けてもらいました。感謝します。
+そして、もちろん、Catalyst自身にも。</p>
+
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+
+<a name="16"> </a>
+<h2>翻訳について</h2>
+<p>
+<p>
+翻訳者: Ktat<br>
+連絡先: ktat.****@gmail*****
+</p>
+<ul>
+<li>2005/11/23
+<ul>
+<li>誤訳修正&ちょっと原文無視
+<li>会社で<a href="http://watape.ddo.jp/">W氏</a>の指摘を受けて修正
+</ul>
+<li>2005/11/15
+<ul>
+<li>誤訳修正
+<li>未訳部分があったので追加で訳
+<li>typo修正
+<li>表現の変更
+</ul>
+</ul>
+<div class="back">
+<a href="#top">â–² to Top</a>
+</div>
+<div class="copyright">
+Copyright&copy;2002-2003, Ktat All rights reserved.
+
+</div>
+</body></html>
\ No newline at end of file



perldocjp-cvs メーリングリストの案内
Back to archive index