<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>WORKS-BB</title>
	<atom:link href="http://works-bb.net/feed" rel="self" type="application/rss+xml" />
	<link>http://works-bb.net</link>
	<description>オープンソース、PHP開発、ホームページ作成、ブログカスタマイズ</description>
	<pubDate>Tue, 16 Jun 2009 02:29:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>お知らせをプラグイン化</title>
		<link>http://works-bb.net/2009/06/09/388.html</link>
		<comments>http://works-bb.net/2009/06/09/388.html#comments</comments>
		<pubDate>Mon, 08 Jun 2009 23:01:18 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[ウィジェットプラグイン]]></category>

		<category><![CDATA[ウィジェット開発]]></category>

		<category><![CDATA[プラグイン開発]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=388</guid>
		<description><![CDATA[				WordPress2.7.1のアップデートによって、サイドバーのお知らせの日付表示が機能しなくなっていました。この機能はWordPress本体を修正して実現していたため、アップデートで該当ファイルが上書きされたことが原因でした。
				毎回アップデート後にWordPress本体に修正を加えるのは面倒なため、この機能を「最近の投稿（日時あり）」ウィジェットプラグインとして実現することにしました。基本的な機能は、既存の「最近の投稿」ウィジェットと同じで、加えて「日付フォーマット」と「タイトルの前に表示する文字」をウィジェットの管理から設定可能としています。
				「最近の投稿（日付あり）」ウィジェットプラグイン
				ダウンロードしたファイルを展開して出来たディレクトリ（widget-recent-entries-with-date）をプラグインディレクトリにコピーし、プラグイン管理から「Recent entries with date widget」を「使用する」で利用可能です。
				※本プログラムは、WordPressのウィジェット、プラグインの開発方法の学習用に作成したものです。ご利用時のトラブルの責任は負いかねますので、その点はご了承ください。
]]></description>
			<content:encoded><![CDATA[				<p>WordPress2.7.1のアップデートによって、<a href="/2009/01/09/235.html">サイドバーのお知らせの日付表示</a>が機能しなくなっていました。この機能はWordPress本体を修正して実現していたため、アップデートで該当ファイルが上書きされたことが原因でした。</p>
				<p>毎回アップデート後にWordPress本体に修正を加えるのは面倒なため、この機能を「最近の投稿（日時あり）」ウィジェットプラグインとして実現することにしました。基本的な機能は、既存の「最近の投稿」ウィジェットと同じで、加えて「日付フォーマット」と「タイトルの前に表示する文字」をウィジェットの管理から設定可能としています。</p>
				<p><a href='/wp-content/widget-recent-entries-with-date.zip'>「最近の投稿（日付あり）」ウィジェットプラグイン</a></p>
				<p>ダウンロードしたファイルを展開して出来たディレクトリ（widget-recent-entries-with-date）をプラグインディレクトリにコピーし、プラグイン管理から「Recent entries with date widget」を「使用する」で利用可能です。</p>
				<p><span class="notice_small">※本プログラムは、WordPressのウィジェット、プラグインの開発方法の学習用に作成したものです。ご利用時のトラブルの責任は負いかねますので、その点はご了承ください。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/06/09/388.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>WordPress 2.7.1アップデート</title>
		<link>http://works-bb.net/2009/05/18/381.html</link>
		<comments>http://works-bb.net/2009/05/18/381.html#comments</comments>
		<pubDate>Mon, 18 May 2009 06:56:18 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[WordPress 2.7.1]]></category>

		<category><![CDATA[アップデート]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=381</guid>
		<description><![CDATA[				WordPress 2.7.1日本語版がいつの間にかリリースされていましたので、本サイトもアップデートしてみました。とりあえず問題は発生していないようです。
]]></description>
			<content:encoded><![CDATA[				<p>WordPress 2.7.1日本語版がいつの間にかリリースされていましたので、本サイトもアップデートしてみました。とりあえず問題は発生していないようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/05/18/381.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>CakePHP 10.2 ACL 開発例の補足</title>
		<link>http://works-bb.net/2009/02/12/337.html</link>
		<comments>http://works-bb.net/2009/02/12/337.html#comments</comments>
		<pubDate>Wed, 11 Feb 2009 23:30:56 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[ACL]]></category>

		<category><![CDATA[チュートリアル]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=337</guid>
		<description><![CDATA[				CakePHPのオンラインドキュメントには、親切な開発例が２つ掲載されており、基本的な開発手順を学ぶ助けとなります。
				しかし、「10.2 ACL を制御するシンプルなアプリケーション」では、手順が若干省略されているために分かりにくい個所がいくつかあります。
				ここでは、学習の手助けとなる補足情報を記載しておきます。
				10.2.1 アプリケーションの準備
				この章では、bakeを利用した各テーブルに対するモデル、コントローラ、ビューの作成手順が省略されています。
				以下に、bakeを利用したモデル、コントローラ、ビューの作成手順を記載します。（bakeでappディレクトリの初期設定が行われている事が前提）
				1. bakeを起動すると、コマンドの一覧が表示されます。
				
				
$ cd (appディレクトリ)
$ cake bake
Welcome to CakePHP v1.2.1.8004 Console
---------------------------------------------------------------
App : (app名)
Path: (appディレクトリ)
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[ D]atabase Configuration
[ M]odel
[ V]iew
[ C]ontroller
[ P]roject
[ Q]uit
What would you like to Bake? (D/M/V/C/P/Q)

				
				2. モデルを作成するためMを選択すると、データベースの一覧が表示されます。最初にGroupのモデルを作成するために1を選択し、対話形式で設定を行います。
				Would you like to supply validation criteria for the fields in your model? (y/n)
				でyを選択すると、一部のフィールドでvalidation optionsの選択を要求されますが、全て初期設定のままリターンキーで問題ありません。
				Would you like to define model associations (hasMany, hasOne, belongsTo, [...]]]></description>
			<content:encoded><![CDATA[				<p><a href="http://book.cakephp.org/ja">CakePHPのオンラインドキュメント</a>には、親切な開発例が２つ掲載されており、基本的な開発手順を学ぶ助けとなります。<br />
				しかし、「10.2 ACL を制御するシンプルなアプリケーション」では、手順が若干省略されているために分かりにくい個所がいくつかあります。<br />
				ここでは、学習の手助けとなる補足情報を記載しておきます。</p>
				<p><a href="http://book.cakephp.org/ja/view/642/アプリケーションの準備">10.2.1 アプリケーションの準備</a><br />
				この章では、bakeを利用した各テーブルに対するモデル、コントローラ、ビューの作成手順が省略されています。<br />
				以下に、bakeを利用したモデル、コントローラ、ビューの作成手順を記載します。（bakeでappディレクトリの初期設定が行われている事が前提）</p>
				<p>1. bakeを起動すると、コマンドの一覧が表示されます。</p>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
$ cd (appディレクトリ)
$ cake bake
Welcome to CakePHP v1.2.1.8004 Console
---------------------------------------------------------------
App : (app名)
Path: (appディレクトリ)
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[ D]atabase Configuration
[ M]odel
[ V]iew
[ C]ontroller
[ P]roject
[ Q]uit
What would you like to Bake? (D/M/V/C/P/Q)
</pre>
				</div>
				<p>2. モデルを作成するためMを選択すると、データベースの一覧が表示されます。最初にGroupのモデルを作成するために1を選択し、対話形式で設定を行います。<br />
				Would you like to supply validation criteria for the fields in your model? (y/n)<br />
				でyを選択すると、一部のフィールドでvalidation optionsの選択を要求されますが、全て初期設定のままリターンキーで問題ありません。<br />
				Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n)<br />
				はnを選択し、<br />
				Cake test suite not installed.  Do you want to bake unit test files anyway? (y/n)<br />
				はyを選択します。<br />
				一通り設定が終わると初期画面に戻りますので、Groupと同様の手順でPost、User、Widgetのモデルを作成していきます。</p>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
> M
---------------------------------------------------------------
Bake Model
Path: (appディレクトリ)/models/
---------------------------------------------------------------
Possible Models based on your current database:
1. Group
2. Post
3. User
4. Widget
Enter a number from the list above, type in the name of another model, or 'q' to exit
[q] > 1
Would you like to supply validation criteria for the fields in your model? (y/n)
[y] > 

Field: id
Type: integer
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1 - alphaNumeric
2 - between
3 - blank
.
.
27 - url
28 - userDefined
29 - Do not do any validation on this field.
... or enter in a valid regex validation string.

[29] >
.
.
Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n)
[y] > n

---------------------------------------------------------------
The following Model will be created:
---------------------------------------------------------------
Name:       Group
Validation: Array
(
    [name] => notempty
)

Associations:
---------------------------------------------------------------
Look okay? (y/n)
[y] > y

Baking model class for Group...

Creating file (appディレクトリ)/models/group.php
Wrote (appディレクトリ)/models/group.php
Cake test suite not installed.  Do you want to bake unit test files anyway? (y/n)
[y] > 

You can download the Cake test suite from http://cakeforge.org/projects/testsuite/

Baking test fixture for Group...

Creating file (appディレクトリ)/tests/fixtures/group_fixture.php
Wrote (appディレクトリ)/tests/fixtures/group_fixture.php

Baking unit test for Group...

Creating file (appディレクトリ)/tests/cases/models/group.test.php
Wrote (appディレクトリ)/tests/cases/models/group.test.php
</pre>
				</div>
				<p>3. 次にコントローラを作成するためCを選択します。モデルと同様に、Group、Post、User、Widgetに対して処理を行います。<br />
				ほとんどは初期設定のままリターンキーで問題ありませんが、<br />
				Would you like to use scaffolding? (y/n)<br />
				はnを、<br />
				Would you like to include some basic class methods (index(), add(), view(), edit())? (y/n)<br />
				はyを選択します。</p>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
> C
---------------------------------------------------------------
Bake Controller
Path: (appディレクトリ)/controllers/
---------------------------------------------------------------
Possible Controllers based on your current database:
1. Groups
2. Posts
3. Users
4. Widgets
Enter a number from the list above, type in the name of another controller, or 'q' to exit
[q] > 1
---------------------------------------------------------------
Baking GroupsController
---------------------------------------------------------------
Would you like to build your controller interactively? (y/n)
[y] >
Would you like to use scaffolding? (y/n)
[n] > n
Would you like to include some basic class methods (index(), add(), view(), edit())? (y/n)
[n] > y
Would you like to create the methods for admin routing? (y/n)
[n] >
Would you like this controller to use other helpers besides HtmlHelper and FormHelper? (y/n)
[n] >
Would you like this controller to use any components? (y/n)
[n] >
Would you like to use Sessions? (y/n)
[y] > 

---------------------------------------------------------------
The following controller will be created:
---------------------------------------------------------------
Controller Name:  Groups
---------------------------------------------------------------
Look okay? (y/n)
[y] >  

Creating file (appディレクトリ)/controllers/groups_controller.php
Wrote (appディレクトリ)/controllers/groups_controller.php
Cake test suite not installed.  Do you want to bake unit test files anyway? (y/n)
[y] > 

You can download the Cake test suite from http://cakeforge.org/projects/testsuite/

Baking unit test for Groups...

Creating file (appディレクトリ)/tests/cases/controllers/groups_controller.test.php
Wrote (appディレクトリ)/tests/cases/controllers/groups_controller.test.php
</pre>
				</div>
				<p>4. 最後にビューを作成するためVを選択します。他と同様に、Group、Post、User、Widgetに対して処理を行います。<br />
				Would you like to create some scaffolded views (index, add, view, edit) for this controller?<br />
				NOTE: Before doing so, you&#8217;ll need to create your controller and model classes (including associated models). (y/n)<br />
				はyを<br />
				Would you like to create the views for admin routing? (y/n)<br />
				はnを選択します。</p>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
> V
---------------------------------------------------------------
Bake View
Path: (appディレクトリ)/views/
---------------------------------------------------------------
Possible Controllers based on your current database:
1. Groups
2. Posts
3. Users
4. Widgets
Enter a number from the list above, type in the name of another controller, or 'q' to exit
[q] > 1
Would you like to create some scaffolded views (index, add, view, edit) for this controller?
NOTE: Before doing so, you'll need to create your controller and model classes (including associated models). (y/n)
[n] > y
Would you like to create the views for admin routing? (y/n)
[y] > n

Creating file (appディレクトリ)/views/groups/index.ctp
Wrote (appディレクトリ)/views/groups/index.ctp

Creating file (appディレクトリ)/views/groups/view.ctp
Wrote (appディレクトリ)/views/groups/view.ctp

Creating file (appディレクトリ)/views/groups/add.ctp
Wrote (appディレクトリ)/views/groups/add.ctp

Creating file (appディレクトリ)/views/groups/edit.ctp
Wrote (appディレクトリ)/views/groups/edit.ctp
---------------------------------------------------------------

View Scaffolding Complete.
</pre>
				</div>
				<p><a href="http://book.cakephp.org/ja/view/643/Auth-を追加する準備">10.2.2 Auth を追加する準備</a></p>
				<p><a href="http://book.cakephp.org/ja/view/644/ACL-のデータベーステーブルの初期化">10.2.3 ACL のデータベーステーブルの初期化</a></p>
				<p><a href="http://book.cakephp.org/ja/view/645/リクエスタとして振舞う">10.2.4 リクエスタとして振舞う</a><br />
				後半にグループの追加について記載がありますが、こちらはWebブラウザで<br />
				http://(アプリケーションURL)/groups/add<br />
				にアクセスし、グループを作成することを指しています。<br />
				ユーザの追加についても同様で、<br />
				http://(アプリケーションURL)/users/add<br />
				でユーザを作成することを指しています。Groupの欄には、グループのidを指定します。</p>
				<p><a href="http://book.cakephp.org/ja/view/646/ACO-の作成">10.2.5 ACO の作成</a><br />
				ここでは、controllersという名のトップレベルのACOの作成手順が解説してありますが、作成方法として<br />
				・コマンドラインから作成する方法<br />
				・プログラムの中にACL作成用のコードを一時的に作成し、一度だけ実行後にコードを削除する方法<br />
				の２種類が解説されています。前者の方法を選ぶのが素直に思います。<br />
				尚、AuthComponent に根ノードの存在を教えるコードは、AppControllerクラスのbeforeFilter()メソッドの最後に追加します。</p>
				<div class="wb_syntax">
				<div style="position:relative;top:18px;margin-top:-18px;"><small><strong>PHP</strong></small>
				</div>
				<pre name="code" class="php:firstLine[41]" style="margin:18px 0;">
function beforeFilter() {
    // AuthComponent のコンフィギュレーション
    $this-&gt;Auth-&gt;authorize = &#039;actions&#039;;
    $this-&gt;Auth-&gt;loginAction = array(&#039;controller&#039; =&gt; &#039;users&#039;, &#039;action&#039; =&gt; &#039;login&#039;);
    $this-&gt;Auth-&gt;logoutRedirect = array(&#039;controller&#039; =&gt; &#039;users&#039;, &#039;action&#039; =&gt; &#039;login&#039;);
    $this-&gt;Auth-&gt;loginRedirect = array(&#039;controller&#039; =&gt; &#039;posts&#039;, &#039;action&#039; =&gt; &#039;add&#039;);

    $this-&gt;Auth-&gt;actionPath = &#039;controllers/&#039;;
}
</pre>
				</div>
				<p><a href="http://book.cakephp.org/ja/view/647/ACO-の作成を自動化するツール">10.2.6 ACO の作成を自動化するツール</a><br />
				ここでは、前ページで作成した controllers ACOの下に、app/controllers ディレクトリ内に準備した全てのコントローラ、及びアクションのACOを自動作成する手順が記載されています。<br />
				AppControllerクラスに、buildAcl()メソッドを作成し、beforeFilter()メソッドの最後にbuildAcl()を呼び出すコードを記述するのが素直かと思います。</p>
				<div class="wb_syntax">
				<div style="position:relative;top:18px;margin-top:-18px;"><small><strong>PHP</strong></small>
				</div>
				<pre name="code" class="php:firstLine[41]" style="margin:18px 0;">
function beforeFilter() {
    // AuthComponent のコンフィギュレーション
    $this-&gt;Auth-&gt;authorize = &#039;actions&#039;;
    $this-&gt;Auth-&gt;loginAction = array(&#039;controller&#039; =&gt; &#039;users&#039;, &#039;action&#039; =&gt; &#039;login&#039;);
    $this-&gt;Auth-&gt;logoutRedirect = array(&#039;controller&#039; =&gt; &#039;users&#039;, &#039;action&#039; =&gt; &#039;login&#039;);
    $this-&gt;Auth-&gt;loginRedirect = array(&#039;controller&#039; =&gt; &#039;posts&#039;, &#039;action&#039; =&gt; &#039;add&#039;);

    $this-&gt;Auth-&gt;actionPath = &#039;controllers/&#039;;

    $this-&gt;buildAcl();
}
</pre>
				</div>
				<p>ブラウザで、<br />
				http://(アプリケーションURL)/users<br />
				等に一回アクセスしACOの作成が確認できたら、AppControllerクラスからbuildAcl()メソッドと、beforeFilter()メソッド内のbuildAcl()の呼び出し行を削除します。<br />
				最後にAuthComponentを無効化するコードの除去の記述がありますが、これは、GroupsController、UsersControllerクラスとに追加したbeforeFilter()メソッド内の<br />
				$this->Auth->allowedActions = array(&#8217;*');<br />
				の行の削除を指しますが、これは後で行います。</p>
				<p><a href="http://book.cakephp.org/ja/view/648/パーミッションの設定">10.2.7 パーミッションの設定</a><br />
				最初にコマンドラインからパーミッションを設定する方法が記載されていますが、これはコマンド利用方法の解説であり、そのまま実行しても機能しません。<br />
				ここでも、やはり一時的なコードを使ってパーミッションを設定します。UsersControllerクラスにinitDB()メソッドを追加し、beforeFilter()メソッドの最後にinitDB()の呼び出し行を追加します。</p>
				<div class="wb_syntax">
				<div style="position:relative;top:18px;margin-top:-18px;"><small><strong>PHP</strong></small>
				</div>
				<pre name="code" class="php:firstLine[7]" style="margin:18px 0;">
function beforeFilter() {
    parent::beforeFilter();
    $this-&gt;Auth-&gt;allowedActions = array(&#039;*&#039;);
    $this-&gt;initDB();
}
</pre>
				</div>
				<p>尚、initDB()メソッドですが、次のように修正しておく必要があります。</p>
				<div class="wb_syntax">
				<div style="position:relative;top:18px;margin-top:-18px;"><small><strong>PHP</strong></small>
				</div>
				<pre name="code" class="php:firstLine[76]" style="margin:18px 0;">
function initDB() {
    //$group =&amp; $this-&gt;User-&gt;Group;
    App::import(&#039;Model&#039;, &#039;Group&#039;);
    $group = new Group();

    // 管理者グループには全てを許可する
    $group-&gt;id = 1;
    $this-&gt;Acl-&gt;allow($group, &#039;controllers&#039;);

    // マネージャグループには posts と widgets に対するアクセスを許可する
    $group-&gt;id = 2;
    $this-&gt;Acl-&gt;deny($group, &#039;controllers&#039;);
    $this-&gt;Acl-&gt;allow($group, &#039;controllers/Posts&#039;);
    $this-&gt;Acl-&gt;allow($group, &#039;controllers/Widgets&#039;);
    $this-&gt;Acl-&gt;allow($group, &#039;controllers/Users/logout&#039;);

    // ユーザグループには posts と widgets に対する追加と編集を許可する
    $group-&gt;id = 3;
    $this-&gt;Acl-&gt;deny($group, &#039;controllers&#039;);
    $this-&gt;Acl-&gt;allow($group, &#039;controllers/Posts/add&#039;);
    $this-&gt;Acl-&gt;allow($group, &#039;controllers/Posts/edit&#039;);
    $this-&gt;Acl-&gt;allow($group, &#039;controllers/Widgets/add&#039;);
    $this-&gt;Acl-&gt;allow($group, &#039;controllers/Widgets/edit&#039;);
    $this-&gt;Acl-&gt;allow($group, &#039;controllers/Users/logout&#039;);
}
</pre>
				</div>
				<p>先頭部分は、$this->User->GroupがNULLであるためにエラーが発生する問題の対応です。<br />
				あと、マネージャグループ、ユーザグループのユーザでログインするとログアウトできない問題があったため、それぞれallowパーミッションを追加しています。</p>
				<p>ブラウザで、<br />
				http://(アプリケーションURL)/users<br />
				等に一回アクセスしパーミッションの作成が確認できたら、UsersControllerクラスからinitDB()メソッドと、beforeFilter()メソッド内のinitDB()の呼び出し行を削除します。併せて、GroupsController、UsersControllerクラスのbeforeFilter()メソッドから<br />
				$this->Auth->allowedActions = array(&#8217;*');<br />
				の行を削除します。</p>
				<div class="wb_syntax">
				<div style="position:relative;top:18px;margin-top:-18px;"><small><strong>PHP</strong></small>
				</div>
				<pre name="code" class="php:firstLine[7]" style="margin:18px 0;">
function beforeFilter() {
    parent::beforeFilter();
    //$this-&gt;Auth-&gt;allowedActions = array(&#039;*&#039;);
    //$this-&gt;initDB();
}
</pre>
				</div>
				<p><a href="http://book.cakephp.org/ja/view/649/ログイン">10.2.8 ログイン</a></p>
				<p><a href="http://book.cakephp.org/ja/view/650/ログアウト">10.2.9 ログアウト</a></p>
				<p><a href="http://book.cakephp.org/ja/view/651/最後に">10.2.10 最後に</a></p>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/02/12/337.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>macportsアップグレードの注意</title>
		<link>http://works-bb.net/2009/02/09/331.html</link>
		<comments>http://works-bb.net/2009/02/09/331.html#comments</comments>
		<pubDate>Sun, 08 Feb 2009 23:30:51 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[Mac OS X開発環境]]></category>

		<category><![CDATA[installed]]></category>

		<category><![CDATA[macports]]></category>

		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=331</guid>
		<description><![CDATA[				近ごろでは、Mac OS Xの開発サーバ用のソフトウェアの殆どはmacportsを利用してインストールしています。主なものだけでも、Apache2.2.11、PostgreSQL8.3.5、MySQL5.0.75、PHP5.2.8、Subversion1.5.5と、ほぼ最新の開発環境が手に入ります。
				インストール済みのソフトウェアを最新に保つための手順は以下の通りですが、事前に各ソフトウェアの設定ファイルはバックアップした方が良いようです。特にapache2の場合、conf/extra、conf/extras-conf以下のファイルが上書きされてしまうため、注意が必要です。
				
				
sudo port selfupdate
sudo port upgrade installed

				
]]></description>
			<content:encoded><![CDATA[				<p>近ごろでは、Mac OS Xの開発サーバ用のソフトウェアの殆どはmacportsを利用してインストールしています。主なものだけでも、Apache2.2.11、PostgreSQL8.3.5、MySQL5.0.75、PHP5.2.8、Subversion1.5.5と、ほぼ最新の開発環境が手に入ります。</p>
				<p>インストール済みのソフトウェアを最新に保つための手順は以下の通りですが、事前に各ソフトウェアの設定ファイルはバックアップした方が良いようです。特にapache2の場合、conf/extra、conf/extras-conf以下のファイルが上書きされてしまうため、注意が必要です。</p>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
sudo port selfupdate
sudo port upgrade installed
</pre>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/02/09/331.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>スタイルシートの@import</title>
		<link>http://works-bb.net/2009/02/02/293.html</link>
		<comments>http://works-bb.net/2009/02/02/293.html#comments</comments>
		<pubDate>Sun, 01 Feb 2009 23:30:19 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[スタイルシート]]></category>

		<category><![CDATA[@import]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=293</guid>
		<description><![CDATA[				スタイルシートの@importの規則として、
				　スタイルシート内のどのスタイル宣言よりも前に記述しなくてはならない、
				というものがあります。
				この規則ですが、Internet Explorer 7 では、より制約が厳しいので注意が必要です。例えば、次のような記述では、category1_index.cssを組み込んだページは期待通りの結果を得られない事があります。
				base_index.cssの内容
				
				
@import url(theme.css);

// theme.css を基本とし、Webサイト全体の共通の定義を記述
body {
    background-color: #F5F5DC;
}

				
				 category1_index.cssの内容 
				
				
@import url(base_index.css);

// base_index.css から変更したい部分のみを記述
body {
    color: 555555;
}

				
				この問題の対処方法は次のようになります。
				base_index.cssの内容
				
				
// theme.css を基本とし、Webサイト全体の共通の定義を記述
body {
    background-color: #F5F5DC;
}

				
				 category1_index.cssの内容 
				
				
@import url(theme.css);
@import url(base_index.css);

// base_index.css から変更したい部分のみを記述
body {
    color: 555555;
}

				
				FireFox3、Safari3、Chrome等のブラウザでは前者の方法でも問題ありませんが、Internet Explorer 7では@importが記述されたスタイルシートの@importにうまく対応できていないようです。
]]></description>
			<content:encoded><![CDATA[				<p>スタイルシートの@importの規則として、<br />
				　スタイルシート内のどのスタイル宣言よりも前に記述しなくてはならない、<br />
				というものがあります。</p>
				<p>この規則ですが、Internet Explorer 7 では、より制約が厳しいので注意が必要です。例えば、次のような記述では、category1_index.cssを組み込んだページは期待通りの結果を得られない事があります。</p>
				<h4>base_index.cssの内容</h4>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
@import url(theme.css);

// theme.css を基本とし、Webサイト全体の共通の定義を記述
body {
    background-color: #F5F5DC;
}
</pre>
				</div>
				<h4> category1_index.cssの内容 </h4>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
@import url(base_index.css);

// base_index.css から変更したい部分のみを記述
body {
    color: 555555;
}
</pre>
				</div>
				<p>この問題の対処方法は次のようになります。</p>
				<h4>base_index.cssの内容</h4>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
// theme.css を基本とし、Webサイト全体の共通の定義を記述
body {
    background-color: #F5F5DC;
}
</pre>
				</div>
				<h4> category1_index.cssの内容 </h4>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
@import url(theme.css);
@import url(base_index.css);

// base_index.css から変更したい部分のみを記述
body {
    color: 555555;
}
</pre>
				</div>
				<p>FireFox3、Safari3、Chrome等のブラウザでは前者の方法でも問題ありませんが、Internet Explorer 7では@importが記述されたスタイルシートの@importにうまく対応できていないようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/02/02/293.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>MT4のPHPプラグイン</title>
		<link>http://works-bb.net/2009/01/28/274.html</link>
		<comments>http://works-bb.net/2009/01/28/274.html#comments</comments>
		<pubDate>Tue, 27 Jan 2009 23:30:58 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[MovableType]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[smarty]]></category>

		<category><![CDATA[ダイナミックパブリッシング]]></category>

		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=274</guid>
		<description><![CDATA[				MT4のプラグイン作成に関する情報は意外と少ないようです。
				とりあえず、本家の技術情報提供ブログにMT3.3用のサンプルがありましたので、一通り動作チェックとソースコードの確認をしてみました。
				残念なことに、サンプルプログラムには、ダイナミックパブリッシング用のPHPプラグインは含まれていません。こちらの作成方法については、こちらに記載があります。この情報を参考に、ローカライズ技術の解説のサンプルのPHP版を作成してみました。
				myplugin03_php.zip
				圧縮ファイルを展開するとMyPlugin03ディレクトリが作成されますので、このディレクトリをpluginsディレクトリの下にコピーします。
				後は、公開をダイナミックに設定してあるテンプレートの中で、を記述すると動作が確認できます。
				機能は元のサンプルプラグインと同一となっていますので、ローカライズ技術の解説の方を参照ください。
				MT4のPHPプラグインは、smartyのプラグイン機能を利用しているため、smartyに強い方は習得が早そうです。
]]></description>
			<content:encoded><![CDATA[				<p>MT4のプラグイン作成に関する情報は意外と少ないようです。<br />
				とりあえず、本家の<a href="http://www.sixapart.jp/pronet/developers/plugin/">技術情報提供ブログ</a>にMT3.3用のサンプルがありましたので、一通り動作チェックとソースコードの確認をしてみました。</p>
				<p>残念なことに、サンプルプログラムには、ダイナミックパブリッシング用のPHPプラグインは含まれていません。こちらの作成方法については、<a href="http://www.sixapart.jp/movabletype/manual/3.3/02_system_admin_guide/installation/supporting_dynamic_publishing.html">こちら</a>に記載があります。この情報を参考に、<a href="http://www.sixapart.jp/pronet/developers/plugin/l10n.html">ローカライズ技術の解説</a>のサンプルのPHP版を作成してみました。</p>
				<p><a href="/wp-content/myplugin03_php.zip">myplugin03_php.zip</a></p>
				<p>圧縮ファイルを展開するとMyPlugin03ディレクトリが作成されますので、このディレクトリをpluginsディレクトリの下にコピーします。<br />
				後は、公開をダイナミックに設定してあるテンプレートの中で、<$MTWelcome$>を記述すると動作が確認できます。</p>
				<p>機能は元のサンプルプラグインと同一となっていますので、<a href="http://www.sixapart.jp/pronet/developers/plugin/l10n.html">ローカライズ技術の解説</a>の方を参照ください。</p>
				<p>MT4のPHPプラグインは、smartyのプラグイン機能を利用しているため、smartyに強い方は習得が早そうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/01/28/274.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>MT4のカテゴリの一括変更</title>
		<link>http://works-bb.net/2009/01/21/264.html</link>
		<comments>http://works-bb.net/2009/01/21/264.html#comments</comments>
		<pubDate>Tue, 20 Jan 2009 23:29:48 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[MovableType]]></category>

		<category><![CDATA[カテゴリの一括変更]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=264</guid>
		<description><![CDATA[				身内のブログを移転する際に、MovableTypeを3.35から4.23にバージョンアップしました。
				その際に、これまでに別のカテゴリとして登録していた記事を一つに纏めたいという要望があり、その対応を行いました。
				各カテゴリに属する記事が少ない場合は、[ブログ記事の管理]で記事の絞り込みを行い、全て選択した上での一括編集ということになるのでしょうが、件数が多い場合にはこの手順ではとてもやってられません。そこで、MovableTypeが利用しているPostgreSQLのデータベースを直接変更することにしました。
				事前準備として、ブログIDと変更前、変更後のカテゴリIDを調べておきます。これらの値は、[カテゴリの編集]画面のURLから容易に知ることができます。
				例えば、変更前カテゴリのURLが、
				http://dummy/mt.cgi?__mode=view&#038;_type=category&#038;blog_id=1&#038;id=10
				変更後カテゴリのURLが、
				http://dummy/mt.cgi?__mode=view&#038;_type=category&#038;blog_id=1&#038;id=24
				の場合、それぞれの値は次の通りとなります。
				ブログID:1
				変更前カテゴリID:10
				変更後カテゴリID:24
				後は、psqlやphpPgAdminでデータベースに接続した上で、次のSQLを実行するだけとなります。
				
				
UPDATE mt_placement
SET placement_category_id = 24
WHERE placement_blog_id = 1 AND placement_category_id = 10;

				
				一度変更してしまったものは容易には元に戻せないため、事前にバックアップを取ったり、ブログIDやカテゴリIDを十分に確認した上で作業を行うことをお勧めします。
]]></description>
			<content:encoded><![CDATA[				<p>身内のブログを移転する際に、MovableTypeを3.35から4.23にバージョンアップしました。</p>
				<p>その際に、これまでに別のカテゴリとして登録していた記事を一つに纏めたいという要望があり、その対応を行いました。</p>
				<p>各カテゴリに属する記事が少ない場合は、[ブログ記事の管理]で記事の絞り込みを行い、全て選択した上での一括編集ということになるのでしょうが、件数が多い場合にはこの手順ではとてもやってられません。そこで、MovableTypeが利用しているPostgreSQLのデータベースを直接変更することにしました。</p>
				<p>事前準備として、ブログIDと変更前、変更後のカテゴリIDを調べておきます。これらの値は、[カテゴリの編集]画面のURLから容易に知ることができます。</p>
				<p>例えば、変更前カテゴリのURLが、<br />
				http://dummy/mt.cgi?__mode=view&#038;_type=category&#038;blog_id=1&#038;id=10<br />
				変更後カテゴリのURLが、<br />
				http://dummy/mt.cgi?__mode=view&#038;_type=category&#038;blog_id=1&#038;id=24<br />
				の場合、それぞれの値は次の通りとなります。</p>
				<p>ブログID:1<br />
				変更前カテゴリID:10<br />
				変更後カテゴリID:24</p>
				<p>後は、psqlやphpPgAdminでデータベースに接続した上で、次のSQLを実行するだけとなります。</p>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
UPDATE mt_placement
SET placement_category_id = 24
WHERE placement_blog_id = 1 AND placement_category_id = 10;
</pre>
				</div>
				<p>一度変更してしまったものは容易には元に戻せないため、事前にバックアップを取ったり、ブログIDやカテゴリIDを十分に確認した上で作業を行うことをお勧めします。</p>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/01/21/264.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>psqlとmysql（対話型ターミナル）</title>
		<link>http://works-bb.net/2009/01/16/261.html</link>
		<comments>http://works-bb.net/2009/01/16/261.html#comments</comments>
		<pubDate>Fri, 16 Jan 2009 09:09:45 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[PostgreSQL]]></category>

		<category><![CDATA[コマンド]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=261</guid>
		<description><![CDATA[				これまでは、PostgreSQLを扱う案件が主体でしたが、今後はMySQL案件も増やしていきたいところです。
				現状、唐突にMySQLでテーブル定義が見たいと思っても、すぐには手が動かない状態です。これでは困るので、PostgreSQLとMySQLのそれぞれの対話型ターミナルのコマンド対応表を作成しておきます。
				対話型ターミナル起動
				ユーザ名:www  データベース名:dbName  ホスト名:hostName
				
				
				
				起動方法
				PostgreSQL(psql)
				MySQL(mysql)
				
				
				ユーザ指定のみ
				$ psql -U www
				$ mysql5 -u www -p
				Enter password:
				
				
				ユーザとデータベースを指定
				$ psql -U www dbname
				$ mysql -u www -p dbname
				Enter password:
				
				
				ホスト名を指定
				$ psql -h hostname -U www dbname
				$ mysql -u www@hostname -p dbname
				Enter password:
				
				
				ポート番号を指定
				$ psql -p 5432 -U www dbname
				$ mysql -P 3306 -u www -p dbname
				Enter password:
				
				
				
				基本的なコマンド
				データベース名:dbName  テーブル名:tableName  シーケンス名:sequenceName
				
				
				
				機能
				PostgreSQL(psql)
				MySQL(mysql)
				
				
				ターミナル終了
				\q
				\q
				
				
				ヘルプ表示（コマンド）
				\?
				\?
				
				
				ヘルプ表示（SQL）
				\h
				（なし）
				
				
				データベース一覧
				\l
				show databases;
				
				
				データベース選択
				\c dbName
				use [...]]]></description>
			<content:encoded><![CDATA[				<p>これまでは、PostgreSQLを扱う案件が主体でしたが、今後はMySQL案件も増やしていきたいところです。<br />
				現状、唐突にMySQLでテーブル定義が見たいと思っても、すぐには手が動かない状態です。これでは困るので、PostgreSQLとMySQLのそれぞれの対話型ターミナルのコマンド対応表を作成しておきます。</p>
				<h2>対話型ターミナル起動</h2>
				<p>ユーザ名:www  データベース名:dbName  ホスト名:hostName</p>
				<table border="1" cellspacing="0" cellpadding="0">
				<tbody>
				<tr>
				<th width="200" scope="col">起動方法</th>
				<th scope="col">PostgreSQL(psql)</th>
				<th scope="col">MySQL(mysql)</th>
				</tr>
				<tr>
				<td align="left" valign="top">ユーザ指定のみ</td>
				<td class="wb_table_normal">$ psql -U www</td>
				<td class="wb_table_normal">$ mysql5 -u www -p<br />
				Enter password:</td>
				</tr>
				<tr>
				<td align="left" valign="top">ユーザとデータベースを指定</td>
				<td class="wb_table_normal">$ psql -U www dbname</td>
				<td class="wb_table_normal">$ mysql -u www -p dbname<br />
				Enter password:</td>
				</tr>
				<tr>
				<td align="left" valign="top">ホスト名を指定</td>
				<td class="wb_table_normal">$ psql -h hostname -U www dbname</td>
				<td class="wb_table_normal">$ mysql -u www@hostname -p dbname<br />
				Enter password:</td>
				</tr>
				<tr>
				<td align="left" valign="top">ポート番号を指定</td>
				<td class="wb_table_normal">$ psql -p 5432 -U www dbname</td>
				<td class="wb_table_normal">$ mysql -P 3306 -u www -p dbname<br />
				Enter password:</td>
				</tr>
				</tbody>
				</table>
				<h2>基本的なコマンド</h2>
				<p>データベース名:dbName  テーブル名:tableName  シーケンス名:sequenceName</p>
				<table border="1" cellspacing="0" cellpadding="0">
				<tbody>
				<tr>
				<th width="200" scope="col">機能</th>
				<th scope="col">PostgreSQL(psql)</th>
				<th scope="col">MySQL(mysql)</th>
				</tr>
				<tr>
				<td align="left" valign="top">ターミナル終了</td>
				<td class="wb_table_normal">\q</td>
				<td class="wb_table_normal">\q</td>
				</tr>
				<tr>
				<td align="left" valign="top">ヘルプ表示（コマンド）</td>
				<td class="wb_table_normal">\?</td>
				<td class="wb_table_normal">\?</td>
				</tr>
				<tr>
				<td align="left" valign="top">ヘルプ表示（SQL）</td>
				<td class="wb_table_normal">\h</td>
				<td class="wb_table_normal">（なし）</td>
				</tr>
				<tr>
				<td align="left" valign="top">データベース一覧</td>
				<td class="wb_table_normal">\l</td>
				<td class="wb_table_normal">show databases;</td>
				</tr>
				<tr>
				<td align="left" valign="top">データベース選択</td>
				<td class="wb_table_normal">\c dbName</td>
				<td class="wb_table_normal">use dbName;</td>
				</tr>
				<tr>
				<td align="left" valign="top">テーブル一覧</td>
				<td class="wb_table_normal">\dt</td>
				<td class="wb_table_normal">show tables;</td>
				</tr>
				<tr>
				<td align="left" valign="top">テーブル定義内容表示</td>
				<td class="wb_table_normal">\d tableName<br />
				インデックス情報もまとめて表示される</td>
				<td class="wb_table_normal">describe tableName;<br />
				インデックス情報の表示は<br />
				show index tableName;</td>
				</tr>
				<tr>
				<td align="left" valign="top">シーケンス一覧</td>
				<td class="wb_table_normal">\ds</td>
				<td class="wb_table_normal">（シーケンスの概念なし）</td>
				</tr>
				<tr>
				<td align="left" valign="top">シーケンス定義表示</td>
				<td class="wb_table_normal">\d sequenceName</td>
				<td class="wb_table_normal">（シーケンスの概念なし）</td>
				</tr>
				</tbody>
				</table>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/01/16/261.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>EC-CUBEインストール</title>
		<link>http://works-bb.net/2009/01/15/256.html</link>
		<comments>http://works-bb.net/2009/01/15/256.html#comments</comments>
		<pubDate>Wed, 14 Jan 2009 23:30:14 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[EC-CUBE]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=256</guid>
		<description><![CDATA[				EC-CUBEを事業所内開発サーバにインストールしてみました。
				基本的にEC-CUBEマニュアルサイトの手順でインストールは行えました。
				ブラウザによるインストーラ起動で、大量のファイルパーミッションエラーが出て驚きましたが、圧縮ファイルの解凍の際に、tar コマンドの p オプションが抜けていた事が原因でした。
				
				
$ tar xpvzf eccube-2.3.3.tar.gz

				
				基本機能クラスの派生クラスが最初から準備されており、最初からカスタマイズを意識した構造である点を好感しました。例えば、LC_Page_Cart クラスのカスタマイズをする場合には、LC_Page_Cart_Ex で各メソッドをオーバーライドします。
				基本機能のクラス：data/class/
				拡張用の派生クラス：data/class_extends/
				class ディレクトリの上位が動的な情報を扱う data ディレクトリというのは意外でしたが、パーミッションを 777 にするよう指定があるため、何か意味があるのかもしれません。
				まずは、構造の確認も兼ねて共用SSL対応（既に実現されている方がおり、需要があるかも不明ですが）について調査してみる予定です。
]]></description>
			<content:encoded><![CDATA[				<p>EC-CUBEを事業所内開発サーバにインストールしてみました。</p>
				<p>基本的に<a href="http://wiki.ec-cube.net/">EC-CUBEマニュアルサイト</a>の手順でインストールは行えました。</p>
				<p>ブラウザによるインストーラ起動で、大量のファイルパーミッションエラーが出て驚きましたが、圧縮ファイルの解凍の際に、tar コマンドの p オプションが抜けていた事が原因でした。</p>
				<div class="wb_terminal">
				<pre id="wb_terminal_inner">
$ tar xpvzf eccube-2.3.3.tar.gz
</pre>
				</div>
				<p>基本機能クラスの派生クラスが最初から準備されており、最初からカスタマイズを意識した構造である点を好感しました。例えば、LC_Page_Cart クラスのカスタマイズをする場合には、LC_Page_Cart_Ex で各メソッドをオーバーライドします。</p>
				<p>基本機能のクラス：data/class/<br />
				拡張用の派生クラス：data/class_extends/</p>
				<p>class ディレクトリの上位が動的な情報を扱う data ディレクトリというのは意外でしたが、パーミッションを 777 にするよう指定があるため、何か意味があるのかもしれません。</p>
				<p>まずは、構造の確認も兼ねて共用SSL対応（既に実現されている方がおり、需要があるかも不明ですが）について調査してみる予定です。</p>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/01/15/256.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>お知らせに日付表示追加</title>
		<link>http://works-bb.net/2009/01/09/235.html</link>
		<comments>http://works-bb.net/2009/01/09/235.html#comments</comments>
		<pubDate>Thu, 08 Jan 2009 23:30:09 +0000</pubDate>
		<dc:creator>bobby</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[the_date]]></category>

		<category><![CDATA[the_time]]></category>

		<category><![CDATA[カスタマイズ]]></category>

		<guid isPermaLink="false">http://works-bb.net/?p=235</guid>
		<description><![CDATA[				ホームページのお知らせに、日付が表示されるようWordPressを修正しました。
				wp-includes/widgets.php の wp_widget_recent_entries 関数の中のリンク表示処理の前に the_time 関数を入れ、改行などで体裁を整える。
				
				※行番号は修正なしの WordPress 2.7 でのおおよその値
				
				似た関数に the_date もありますが、こちらは同一日付の記事が複数ある場合に先頭記事にしか日付が表示されないため、今回のケースには向いていません。
				WordPressをカスタマイズする上で重要そうなファイルは、
				wp-incules/
				ディレクトリ以下にあるようです。各ファイルは、機能ごとの関数の集まりとなっています。
				機能ごとにクラス化されていないのは意外でした。
]]></description>
			<content:encoded><![CDATA[				<p>ホームページのお知らせに、日付が表示されるようWordPressを修正しました。</p>
				<p>wp-includes/widgets.php の wp_widget_recent_entries 関数の中のリンク表示処理の前に the_time 関数を入れ、改行などで体裁を整える。</p>
				<div class="wb_syntax">
				<div style="position:relative;top:18px;margin-top:-18px;"><small><strong>PHP</strong></small>
				</div>
				<pre name="code" class="php:firstLine[1314]" style="margin:18px 0;">
&lt;ul&gt;
&lt;?php  while ($r-&gt;have_posts()) : $r-&gt;the_post(); ?&gt;
&lt;li&gt;&lt;?php the_time(&#039;Y-m-d&#039;); ?&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;&lt;?php the_permalink() ?&gt;&quot;&gt;&lt;?php if ( get_the_title() ) the_title(); else the_ID(); ?&gt; &lt;/a&gt;&lt;/li&gt;
&lt;?php endwhile; ?&gt;
&lt;/ul&gt;
</pre>
				<p>※行番号は修正なしの WordPress 2.7 でのおおよその値
				</p></div>
				<p>似た関数に the_date もありますが、こちらは同一日付の記事が複数ある場合に先頭記事にしか日付が表示されないため、今回のケースには向いていません。</p>
				<p>WordPressをカスタマイズする上で重要そうなファイルは、<br />
				wp-incules/<br />
				ディレクトリ以下にあるようです。各ファイルは、機能ごとの関数の集まりとなっています。<br />
				機能ごとにクラス化されていないのは意外でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://works-bb.net/2009/01/09/235.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
