<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>スイナシア</title>
<link>http://suin.asia</link>
<description>PHPを中心としたウェブ技術や韓国語などの外国語についてとりとめもなくのらりくらりと書き綴るXOOPSで構築されたsuinのブログ</description>
<language>ja</language>
<lastBuildDate>Fri, 12 Mar 2010 05:44:24 +0900</lastBuildDate>
<docs>http://backend.userland.com/rss/</docs>
<item>
<title>WhiteoutRescue 真っ白画面解決支援プリロード</title>
<link>http://suin.asia/2010/03/12/whiteoutrescue_preload</link>
<description><![CDATA[<p>
<a href="http://dl.dropbox.com/u/949822/Downloads/WhiteoutRescue_1.0.zip" class="download">WhiteoutRescue_1.0.zip</a>
ホワイトデイ(3月14日)は、一般には男子が女子にクッキーをあげる日ですが、XOOPSユーザにとっては厄日だそうです。XOOPSオーナーが最も嫌うのは、エラーなどでXOOPSの画面が「真っ白」になることです。ホワイトデイの「ホワイト」が「真っ白」を連想させることもあり、ホワイトデイに「真っ白」画面が出ると、その年のXOOPS運が大殺界であることを意味するそうで、縁担ぎのために3月14日の1日だけXOOPSを止めたり、熱心なXOOPS関係のデベロッパーの中にはこの日だけ開発を休んだりするそうです。</p>

<p>WhiteoutRescueプリロードは、ホワイトデイに「真っ白」画面を出さないためのプリロードです。ホワイトデイに真っ白画面に出くわしたサイトオーナーがこのプリロードをアップロードします。そして、真っ白画面のページにアクセスすると、黒背景を基調としたデバッグページが現れます。サイトオーナーはそのデバッグ情報をたよりに真っ白画面を解消します。このように、真っ白画面を直すことで、厄払いの意味になり、その年のXOOPS運が大安になると言われています。</p>

<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/8WxTNouyTtprVY2q8vpKJQ?feat=embedwebsite"><img src="http://lh5.ggpht.com/_dG0BBWAhWis/S5kJmrP1wtI/AAAAAAAABJ8/5_DyGvIV9vM/s400/%E3%83%94%E3%82%AF%E3%83%81%E3%83%A3%201.png" /></a></p>

<h3>動作要件</h3>
<ul>
<li>XOOPS Cube Legacy 2.x</li>
<li>PHP 5.1 (5.2からかも)</li>
<li>UTF-8環境(EUC-JPでも動くことは動く)</li>
</ul>

<h3>WhiteoutRescueプリロードの使い方</h3>

<p>XOOPSオーナーに伝わるWhiteoutRescueプリロードの使い方は以下のようです。</p>

<ol>
<li>WhiteoutRescue.class.phpを/preloadにアップロードする</li>
<li>真っ白のページにアクセスする</li>
<li>表示されたデバッグ情報をもとに問題を解決する</li>
<li>使い終わったら、WhiteoutRescue.class.phpを削除する</li>
</ol>

<p>なお、使い終わってもWhiteoutRescueプリロードを削除しないでいると、XOOPSのセキュリティやパフォーマンスが低下し、XOOPSが白い悪魔に取り憑かれるそうなので、必ず削除するようにしましょう。</p>

<p>WhiteoutRescueを使っても真っ白のままの場合、以下のことが考えられます。</p>
<ul>
<li>プリロード読み込み以前にXOOPSがこけてる</li>
<li>PHPのパースエラー（セミコロンがダブルコロンだ、など）この場合はPHPのエラーログを参照</li>
<li>サーバーの問題 (.htaccessの設定ミスなど)</li>
<li>そもそもXOOPS Cube Legacyじゃない</li>
<li>しかるべくして真っ白なページ</li>
</ul>

<h3>ライセンス</h3>
<p>GNU GPL2ライセンスです。動作無保証です。あなたは、GPL2の条件をみたせばこのプログラムを改変・頒布することができます。</p>

<h3>リポジトリ</h3>
<code>
svn checkout http://suin-xoops.googlecode.com/svn/trunk/WhiteoutRescue suin-xoops-read-only
</code>

<h3>[訂正 2010/03/12]</h3>
<p>XOOPSオーナーの間で、3月14日が厄日などの記述がありましたが、実際にはそんな習慣はないそうです。教えてくれたwhite_devilさんありがとうございます。</p>]]></description>
<pubDate>Fri, 12 Mar 2010 00:19:16 +0900</pubDate>
<guid>http://suin.asia/2010/03/12/whiteoutrescue_preload</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">ダウンロード</category>
<category domain="http://suin.asia/tag/%E3%83%97%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%89">プリロード</category>
</item>
<item>
<title>SubversionでのPreloadの管理方法</title>
<link>http://suin.asia/2010/03/11/how_to_manage_preloads_with_subversion</link>
<description><![CDATA[<p>Preloadをバージョン管理する便利な方法を紹介しようと思います。ディレクトリごとにバージョン管理する場合、開発中のプリロードを/preloadディレクトリにおいてしまうと、他のプリロードまでバージョンされてしまいます。こういう場合では、/preloadにサブディレクトリを作って、そこでバージョン管理したほうが管理性が向上します。</p>
<p xml:lang="en">I will introduce you how to develop preloads with Subversion. If you put your preloads under /preload directory, it is difficult to manage the versions of its. Because, Subversion treats not only your preload but also the other ones. In such a case, you can make subdirectories under /preload. This way helps you to increase your manageability.</p>
<p>配布することを考えれば、サブディレクトリにLicense.txtやReadme.txtを置くといいでしょう。そうしておくと、svn -exportでプリロードの配布パッケージが簡単に生成できます。</p>
<p xml:lang="en">If you plan to distribute your preload, you may put License.txt or Readme.txt under the subdirectory. It is a smart way. You only have to command "svn -export" at the subdirectory when you distribute it.</p>

<h3>ディレクトリの構成方法</h3>

<pre>
/XOOPS_ROOT_PATH
	/preload
		/VersionedPreload.class.php (a)
		/VersionedPreload
			/.svn
			/VersionedPrelaod.class.php (b)
			/License.txt
			/Readme.txt
</pre>

<h3>VersionedPreload.class.php (a)のソース</h3>

<pre class="php" name="code">
&lt;?php

$file = basename(__FILE__);
$dir  = str_replace('.class.php', '', $file);

require $dir.'/'.$file;

?&gt;
</pre>

<p>(a)はただ、requireするだけです。（プロキシと言ったラインだろうか。）このサンプルソースはどんなプリロードにもそのまま流用できます。なぜなら、ファイル名を動的に取得しているからです。/preloadディレクトリに(a)をひとつ作っておけば、新しくプリロードを作る度に、コピーして名前を変更するだけでいいので便利です。</p>
<p xml:lang="en">The (a) only includes your preload. You can apply this sample to your any other preloads. Because, this sample get the file name dynamically. If you create the (a) once, you only have to copy and rename it, when you create a new preload. It is useful.</p>

<h3>VersionedPreload.class.php (b)のソース</h3>

<pre class="php" name="code">
&lt;?php
/**
 *
 * @package    Versioned Preload
 * @author     Foo Bar &lt;http://example.com/&gt;
 * @copyright  2010 Foo Bar
 * @license    http://www.gnu.org/licenses/gpl-2.0.html GNU GPL v2 or later
 *
 */

if ( !defined('XOOPS_ROOT_PATH') ) exit;

class VersionedPreload extends XCube_ActionFilter
{
	public function preBlockFilter()
	{
		$this-&gt;mRoot-&gt;mDelegateManager-&gt;add('Delegate.Name', array(__CLASS__, 'doSomething'));
	}

	public static funciton doSomething(&amp;$param)
	{
		// Do something here.
	}
}
?&gt;
</pre>

<p>(b)では、プリロードを作るときの普段どおりの書き方をするだけです。とくに変わったことをする必要もありません。</p>]]></description>
<pubDate>Thu, 11 Mar 2010 17:14:45 +0900</pubDate>
<guid>http://suin.asia/2010/03/11/how_to_manage_preloads_with_subversion</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/%E3%83%97%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%89">プリロード</category>
<category domain="http://suin.asia/tag/%E9%96%8B%E7%99%BA">開発</category>
</item>
<item>
<title>XOOPS Cubeと他のCMSの用語対比</title>
<link>http://suin.asia/2010/03/09/xoops_cube_terms_vs_other_cms</link>
<description><![CDATA[<table>
<tr>
<th>XOOPS Cube</th>
<th>Drupal</th>
<th>Joolma!</th>
</tr>
<tr>
<td>モジュール</td>
<td>モジュール</td>
<td>コンポーネント</td>
</tr>
<tr>
<td>ブロック</td>
<td>ブロック</td>
<td>モジュール</td>
</tr>
<tr>
<td>プリロード</td>
<td>?</td>
<td>プラグイン</td>
</tr>
<tr>
<td>言語</td>
<td>言語</td>
<td>言語</td>
</tr>
<tr>
<td>テーマ</td>
<td>テーマ</td>
<td>テンプレート</td>
</tr>
</table>

<p>XOOPS Cube Legacyでは、ブロックでPHPがかけるけど、Joolma!のモジュールのように配布はできない。XOOPS系では言語パッチは特に拡張機能というノリではない。</p>]]></description>
<pubDate>Tue, 09 Mar 2010 00:22:40 +0900</pubDate>
<guid>http://suin.asia/2010/03/09/xoops_cube_terms_vs_other_cms</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/CMS">CMS</category>
</item>
<item>
<title>XOOPSのモジュールはGPL2で配布しないといけない？</title>
<link>http://suin.asia/2010/03/07/xoops_module_must_be_gpl2</link>
<description><![CDATA[<p>XOOPSのモジュールでは、そのモジュールのライセンスを宣言する変数<code>$modversion['license']</code>があります。しかし、実質的には、XOOPSのモジュールが暗黙のうちにGPL2にライセンシングしています。</p>
<p>これは妙だな、と思って調べてみたら、特殊なケースを覗いて、モジュールのライセンスはXOOPS2に引っ張られてGPL2にしなければならないようです。GPL2では、「プログラム」の派生物（二次的著作物）はGPL2でなければならないと定めています。（GPL3でもだめ。）</p>
<p>いや、ちょっとまてよ。モジュールって別にXOOPSの派生物じゃないじゃん！と思ったのですが、これがどうもGPL2ではモジュールを派生物と捉えるのが妥当のようです。どうしてこうなるかというと、GPL2ではソースコードをつぎのように捉えているからです。</p>

<blockquote>
ある実行形式の著作物にとって完全なソースコード とは、それが含むモジュールすべてのソースコード全部に加え、関連するイン ターフェース定義ファイルのすべてとライブラリのコンパイルやインストール を制御するために使われるスクリプトをも加えたものを意味する。
<a href="http://www.opensource.jp/gpl/gpl.ja.html.euc-jp">GNU 一般公衆利用許諾契約書</a>
</blockquote>

<p>どういうことかというと、「実行時に読み込んでいるライブラリもそのプログラムの一部です」ということ。XOOPSのモジュールの場合、<code>require '../../mainfile.php';</code>を行うので、その時点でXOOPS2のGPL汚染が始まります。現にGPLのFAQで次のようなことが述べられています。</p>

<blockquote>
<p>ライブラリが(LGPLではなく)GPLの下で公開されている場合、そのライブラリを利用するプログラムにはGPLが適用されていなければならないのでしょうか?</p>

<p>はい。なぜなら、実際に実行されるプログラムはライブラリを含んでいるから です。</p>
<a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.ja.html#IfLibraryIsGPL">GNU GPLに関して良く聞かれる質問</a>
</blockquote>

<blockquote>
<p>GPLの下で公開されていたプログラムがプラグインを使うとして、プラグインのライセンスにはどのような条件がありますか?</p>
<p>それはプログラムがどのようにプラグインを呼び出すかに依ります。プログラ ムがforkやexecでプラグインを呼び出すならば、プラグインは別のプログラム であり、メインプログラムのライセンスはそれらにはなんの条件も課しません。</p>
<p>もしプログラムがプラグインと動的にリンクされており、お互いにファンクショ ンコールを使ってデータ構造を共有している場合、それらは単一のプログラム を形成していると見なされますので、プラグインはメインプログラムの拡張部 分として扱われなければなりません。すなわち、それらはGPLかGPLと矛盾しな いフリーソフトウェアライセンスの下で公開されなければならないということ です。</p>
<p>プログラムがプラグインと動的にリンクされているが、それらの間のコミュニ ケーションはいくつかのオプションとともにプラグインの「main」関数を呼び 出して返値を待つだけという場合は、境界線上で微妙なケースとなります。</p>
<a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.ja.html#GPLAndPlugins">GNU GPLに関して良く聞かれる質問</a>
</blockquote>

<p>このFAQが意味するのは、モジュールがXOOPSのライブラリ（例えば、XoopsTpl, XoopsObject, XoopsUserなど）を使う限り、別個に配布しようが、モジュールはGPL2になるということです。動的にライブラリを使うか場合、GPLは感染しない、なんという主張もありましたが、実際にライブラリを使うのに動的か静的かでGPLの制約が変わるというのも変な話です。</p>

<p>しかし、まったくXOOPSのライブラリに依存せず、なおかつ、XOOPSなしでも完全な実行ができるモジュールであれば、GPL2を名乗る必要もありません。それはGPLのFAQを隅々読みつくせば、このことを暗示する記述が見られます。しかし、そのようなモジュールはXOOPSと互換するようなライブラリを独自で開発するか、単純な機能しかもたないモジュール（例えば、index.phpでphpinfo()だけを出すモジュール）に限られると考えられます。あくまで、理論上可能という話です。XOOPS専用モジュールである限り、GPL汚染からは逃れられそうにありません。</p>

<h3>XOOPS CubeのBSDならどうか？</h3>

<p>XOOPS Cubeは修正BSDライセンスでリリースされていると聞きます。では、縛りのゆるい修正BSD版XOOPS Cube用にモジュールをリリースすれば、GPL汚染から逃れることができるでしょうか？</p>

<p><s>そもそも、XOOPS Cubeが修正BSDライセンスだと勘違いしている人がいるように思います。<XOOPS CubeはXOOPS Cube LegacyとXOOPS Cube Coreの内包関係があって、プログラムとしてもどこがどこなのか混沌としています（OSCでもCubeとLegacyの違いを聞かれたなあ〜）。おそらくこれが、XOOPS Cubeが修正BSDライセンスという誤解を招いたのだと思われます。「XOOPS Cube」の解釈をめぐっては、公式サイトでも、曖昧性を残しています。</s></p>

<blockquote>
XOOPS Cube Legacy は、 Cube コアのモジュールのひとつです。当プロジェクトが新作した Cube コアと、 XOOPS2 JP の後継版として働く Legacy の二つが手を繋いで、 XOOPS Cube Legacy （以下XCL）が動作します。<strong>XCL は、 ”XOOPS Cube でもあり</strong>、 XOOPS2 JP の後継アプリケーションでもある” という、とてもユニークな CMS です。<br />
<a href="http://xoopscube.sourceforge.net/ja/legacy/index.html">XOOPS Cube Legacy の真実……？
</a>
</blockquote>

<p><s>では、XOOPS Cubeのどこが修正BSDライセンスかというと、XOOPS Cube Coreです。これはXCLでいうところの、XOOPS_ROOT/core/フォルダのみを差します。xoopscube.jpにはXOOPS Cube Coreのみが修正BSDライセンスとの旨を誤解なく書いています。</s></p>

<blockquote>
XOOPS Cube Core<br />
XOOPS Cube Coreは修正BSDライセンスを採用しています。修正BSDライセンスは、元のBSDライセンスから広告条項の部分を削除したものです。<br />
<a href="http://xoopscube.jp/page/5"> ライセンス </a>
</blockquote>

<p>[修正 2010/03/07]正確には、XOOPS CubeとXOOPS Cube Coreは同じものを差します。したがって、XOOPS Cubeは修正BSDライセンスということになります。なお、XOOPS CubeとXOOPS Cube Legacyはライセンスが異なります。XOOPS Cubeは修正BSDライセンス、XOOPS Cube LegacyはGPL2ライセンスです。修正BSDライセンスのXOOPS Cubeというのは、<a href="http://sourceforge.net/projects/xoopscube/files/xoopscube/snapshot_20071208/Core_XCube_20071208.zip/download
">ここ</a>で配布されているものです。</p>

<p>coreだけでモジュールを作ればライセンスはGPLに限られません。ところが、coreだけでは通常のモジュールを作れないのが現実です。つまり、XOOPS CubeであってもXCLであっても、GPL2が飛び火してしまうのは避けられないことのようです。</p>

<p>[補足 2010/03/07]minahitoさんによると、「XCコアモジュール（Legacy Base非依存の、コアのサブシステムを差し替えるもの）は修正BSDで出せますよ。」とのことなので、Legacyから独立したベースモジュールの場合、GPL汚染は起こりません。</p>

<h3>テーマがCCでリリースされてる件</h3>

<p>テーマはモジュールと異なり、CC(クリエティブ・コモンズ)で公開されていることがあります。どうも、テーマはモジュールとは事情が異なるようです。それは、ひとつの考えとして、テーマがそれだけで完結している点が挙げられると思います。</p>

<p>テーマはSmartyに依存していますが、Smarty自体はLGPLです。LGPLは動的にライブラリを使う場合は、GPLやLGPLの制約を受けないというライセンスです。したがって、Smartyに依存するだけでは、GPLの感染の問題はありません。</p>

<p>しかし、XOOPSのSmartyプラグイン(xoops_date_format, xoops_userなど)を使ったテーマを配布する場合は、テーマもGPL2ライセンスにする必要がありそうです。なぜなら、XOOPSのSmartyプラグインはGPLだからです。GPLでは、動的にプラグインを使用する場合でも、その著作物をGPLにライセンシングすることを要求します。</p>

<p>Smartyにもとから入っているプラグインだけで作ったテーマなら、GPLでなくてもいいといったところだと思います。ただし、Smarty変数がXOOPSなしでは定義されない点を考えると、XOOPSに依存しているということになり、GPL2適用の義務が生じるかもしれません。この点で、テーマはGPLと非互換のCCで配布するのは、グレーゾーンでもあります。</p>

<p>[補足 2010/03/07]minahitoさんによると、「あとテーマは、コードとみるかリソースとみるかで解釈が全く変わります。パイプラインがテーマをコンパイルし、結合可状態へ導いて初めてリンクされるので、GPLとコンフリクトしないライセンスなら(コンフリクトするとXCLで使用不可)選べると思います。」とのことです。リソース、つまり「データ」としてテーマを見る場合はGPL以外の選択肢もあるということ。（minahitoさんはGPLと互換性のあるライセンスならOKとしていますが、GPL汚染を受けていないと主張できる独立したテーマなら、非互換のライセンスで配布も可能なはずです。なぜなら、結合の制約は「複製・頒布・改変」のときだけで、実行するときにGPL非互換と結合することは制限していないはず。）ただし、コードかリソースかも解釈に依存していて、もしテーマがリソースだと判断できない場合は、GPL汚染を受けるかもしれないということです。たとえば、ひとつのテーマパッケージにXOOPS依存のPHPコードが混じっている場合など。詳しくは<a href="http://www.gnu.org/licenses/gpl-faq.ja.html#IfInterpreterIsGPL">FAQ</a>に書いてあります。</p>]]></description>
<pubDate>Sun, 07 Mar 2010 01:44:23 +0900</pubDate>
<guid>http://suin.asia/2010/03/07/xoops_module_must_be_gpl2</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB">モジュール</category>
<category domain="http://suin.asia/tag/%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9">ライセンス</category>
<category domain="http://suin.asia/tag/GPL">GPL</category>
</item>
<item>
<title>Smarty2.0からSmarty3.0への変更点</title>
<link>http://suin.asia/2010/03/06/smarty_3.0</link>
<description><![CDATA[<p>Smarty3.0のパッケージに入っている、SMARTY2_BC_NOTESを和訳してみた。</p>

<h3>分かっているSmarty2との非互換性</h3>

<h4>シンタクス</h4>

<p>Smarty 3 APIはシンタクスが新しくなりました。Smarty2のシンタクスはサポートしますが、将来サポートが保証されない可能性があります。</p>

<h4>PHPのバージョン</h4>

<p>Smarty3はPHP5のみ対応します。PHP4では動きません。</p>

<h4>{php}タグ</h4>

<p><code>{php}</code>タグはデフォルトでは無効になりました。<code>{php}</code>タグを使うことは非推奨です。<code>$smarty->allow_php_tag=true;</code>で<code>{php}</code>タグを有効にすることができます。</p>
<p>しかし、複数の<code>{php}</code>タグにまたがるPHPコードは、これ以上は動かないでしょう。</p>

<h4>デリミタとホワイトスペース</h4>

<p>ホワイトスペースに囲まれたデリミタは今後、Smartyのタグとして扱われません。したがって、<code>{ foo }</code>はタグとしてコンパイルされません。この場合、コンパイルするには<code>{foo}</code>とする必要があります。この変更により、<code>{literal}</code>が必要とならないので、Javascript/CSSが扱いやすくなります。なお、<code>$smarty->auto_literal = false;</code>でこの設定を無効化できます。</p>

<h4>クォートされなかった文字列</h4>

<p>Smarty2は、パラメータにクォートしていない文字列が現れたとき、大雑把で曖昧な面がありました。一方、Smarty3はより厳密です。といっても、特別な文字(A-Za-z0-9_以外)を含まない限り、今でもクォーテーションなしの文字列を使うことはできます。</p>

<p>例えば、ファイル名の文字列はクォートしなければなりません。</p>

<pre class="smarty" name="code">
{include file='path/foo.tpl'}
</pre>

<h4>Smartyクラスの拡張</h4>

<p>Smarty3は初期化するのに、<code>__construct</code>メソッドを使います。Smartyクラスを拡張するとき、もし、小クラスが独自のコンストラクタを定義すると、Smartyのコンストラクタは実行されません。Smartyのコンストラクタを実行する必要があれば、小クラスのコンストラクタで<code>parent::__construct()</code>を実行してください。</p>

<pre class="php" name="code">
class MySmarty extends Smarty {
   function __construct() {
       parent::__construct();
    
       // your initialization code goes here

   }
}
</pre>

<h4>オートローダー</h4>

<p>Smarty3は<code>spl_autoload_register</code>で独自のオートローダーを登録します。もしあなたのコード中に<code>__autoload</code>関数が存在するのなら、 それを明示的に<code>__autoload</code>スタックに登録しなければなりません。 詳しくは、http://us3.php.net/manual/en/function.spl-autoload-register.php を御覧下さい。</p>

<h4>プラグインファイル名</h4>

<p>Smarty3ではPHP <code>spl_autoloader</code>をサポートしています。このオートローダーは、ファイル名を小文字にすることを要求しています。したがって、Smartyプラグインのファイル名は小文字である必要があります。Smarty2では、大文字小文字が混在したファイル名でも動作しました。</p>

<h4>特別なSmarty変数のスコープ</h4>

<p>Smarty2では特別なSmarty変数(例えば、<code>$smarty.section...</code>や<code>$smarty.foreach</code>)がグローバルスコープでした。もし、同じ名前のループがサブテンプレートにあると、親テンプレートの変数を上書きしていまします。<p>

<p>Smarty3では特別なSmarty変数は、ループがあるテンプレートのローカルスコープになります。もし、親テンプレートの変数をサブテンプレートに渡す場合は、パラメータにする必要があります。</p>

<pre class="smarty" name="code">
{include file='path/foo.tpl' index=$smarty.section.foo.index}
</pre>

<h4>SMARTY_RESOURCE_CHAR_SET</h4>

<p>Smarty3はutf-8をデフォルトcharsetとして、定数<code>SMARTY_RESOURCE_CHAR_SET</code>に定義します。これは、escapeのような修飾子のデフォルトcharsetとして使われるようになります。もし、utf-8以外のcharsetをテンプレートで使う場合、適宜に<code>SMARTY_RESOURCE_CHAR_SET</code>を定義することに注意してください。そうしなければ、なにも出力されない可能性があります。</p>

<h4>改行での{if}タグ</h4>

<p>テンプレートのソースに予期される改行の出力を得るために、<code>{if}</code>,<code>{else}</code>,<code>{elseif}</code>,<code>{/if}</code>タグのコンパイル後コードに¥nが追加されました。もし、<code>{if}</code>タグなどが行末にある場合、HTMLの出力結果が改行されます。</p>]]></description>
<pubDate>Sat, 06 Mar 2010 22:20:42 +0900</pubDate>
<guid>http://suin.asia/2010/03/06/smarty_3.0</guid>
<category domain="http://suin.asia/tag/smarty">smarty</category>
<category domain="http://suin.asia/tag/php">php</category>
</item>
<item>
<title>ユーザのパスワードに期限をつけるプリロード PasswordLimitter 1.2</title>
<link>http://suin.asia/2010/03/05/passwordlimitter</link>
<description><![CDATA[<a href="http://dl.dropbox.com/u/949822/Downloads/PasswordLimitter_1.2.zip" class="download">ダウンロード</a>

<p>パスワードは定期的に変更するほうがより安全と言われています。PasswordLimitterは、XOOPSのユーザのパスワードに期限を設け、期限がすぎたユーザに対しては、ログイン時にパスワード変更を促すメッセージを表示します。</p>

<h3>インストール方法</h3>
<ol>
<li>PasswordLimitter.class.phpを/preloadにアップロード</li>
<li>管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス</li>
<li>「INSTALL」をクリックしてインストールを実行</li>
<li>その後、設定ページで期限日数を設定する</li>
</ol>

<h3>アンインストール方法</h3>
<ol>
<li>管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス</li>
<li>「UNINSTALL」をクリックしてインストールを実行</li>
<li>PasswordLimitter.class.phpを/preloadから削除</li>
</ol>

<h3>変更点 1.0 =&gt; 1.2</h3>
<ul>
<li>ユーザ新規登録時に有効期限がセットされないバグを修正。</li>
</ul>
<p>1.1とばしてしまった…orz</p>

<h3>開発情報</h3>

<ul>
<li><a href="http://code.google.com/p/suin-xoops/source/browse/#svn/trunk/PasswordLimitter">リポジトリ</a></li>
</ul>]]></description>
<pubDate>Fri, 05 Mar 2010 01:47:43 +0900</pubDate>
<guid>http://suin.asia/2010/03/05/passwordlimitter</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/%E3%83%97%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%89">プリロード</category>
<category domain="http://suin.asia/tag/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">ダウンロード</category>
<category domain="http://suin.asia/tag/PasswordLimitter">PasswordLimitter</category>
</item>
<item>
<title>ユーザのパスワードに期限をつけるプリロード PasswordLimitter 1.0</title>
<link>http://suin.asia/2010/02/23/passwordlimitter_1.0</link>
<description><![CDATA[<div class="errorMsg">
<ul>
<li>この情報は古いです。<a href="http://suin.asia/2010/03/05/passwordlimitter">新しい情報</a>を御覧下さい。</li>
</ul>
</div>

<p>パスワードは定期的に変更するほうがより安全と言われています。PasswordLimitterは、XOOPSのユーザのパスワードに期限を設け、期限がすぎたユーザに対しては、ログイン時にパスワード変更を促すメッセージを表示します。</p>

<h3>インストール方法</h3>
<ol>
<li>PasswordLimitter.class.phpを/preloadにアップロード</li>
<li>管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス</li>
<li>「INSTALL」をクリックしてインストールを実行</li>
<li>その後、設定ページで期限日数を設定する</li>
</ol>

<h3>アンインストール方法</h3>
<ol>
<li>管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス</li>
<li>「UNINSTALL」をクリックしてインストールを実行</li>
<li>PasswordLimitter.class.phpを/preloadから削除</li>
</ol>

<h3>開発情報</h3>

<ul>
<li><a href="http://code.google.com/p/suin-xoops/source/browse/#svn/trunk/PasswordLimitter">リポジトリ</a></li>
</ul>]]></description>
<pubDate>Tue, 23 Feb 2010 05:59:19 +0900</pubDate>
<guid>http://suin.asia/2010/02/23/passwordlimitter_1.0</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/%E3%83%97%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%89">プリロード</category>
<category domain="http://suin.asia/tag/PasswordLimitter">PasswordLimitter</category>
</item>
<item>
<title>統合メッセンジャーPidginでNateOnを使おう</title>
<link>http://suin.asia/2010/02/17/pidgin_with_nateon</link>
<description><![CDATA[<p class="center"><a href="http://picasaweb.google.co.jp/lh/photo/-pKL2UTKNjaZwviCErNWHg?feat=embedwebsite"><img src="http://lh6.ggpht.com/_dG0BBWAhWis/S3un15hrUuI/AAAAAAAABF8/pdzKJNkh-Cc/s800/PidginxNateon.png" /></a></p>

<p>PidginはWindowsで使える統合メッセンジャーです。なので、Pidginをインストールするだけで、MSNメッセンジャー・Googleトーク・Yahooメッセンジャーなどを同時に使うことができ便利です。</p>
<p><a href="http://nateonweb.nate.com/download/messenger/windows/4.0/">NateOn</a>は韓国で最もシェアのあるインスタントメッセンジャーです。Windowsであれば、NateOnをインストールすることができます。しかし、韓国語のソフトであるためか、日本語Windowsでは文字化けを起こすことがしばしばあります。また、NateOnは基本的に韓国語のインターフェイスになるので、韓国語に不慣れな人には操作が難しい面もあります。</p>
<p>そこで、NateOnを日本語にきちんと対応してあるPidginで使うことをおすすめします。PidginでNateOnを使うためには、以下のファイルをダウンロードします。</p>

<ul>
<li>Pidgin本体</li>
<li>Pidgin用NateOnプラグイン</li>
</ul>

<h3>Pidgin本体のダウンロード手順</h3>

<ol>
<li><a href="http://www.pidgin.im/">http://www.pidgin.im/(英語)</a>にアクセス。</li>
<li>Pidginをダウンロードする。
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/QndrF1MlshHexJ6uVOMuaQ?feat=embedwebsite"><img src="http://lh4.ggpht.com/_dG0BBWAhWis/S3us0CgcZKI/AAAAAAAABGE/YXAVraT-skw/s400/PidginxNateon2.png" /></a></p>
</li>
</ol>

<h3>Pidgin用NateOnプラグインのダウンロード手順</h3>

<ol>
<li><a href="http://byulroo.com/bbs/board.php?bo_table=pidgin_pds&wr_id=3">配布先</a>にアクセス。</li>
<li>pidgin-nateon_svn140.zipをダウンロードする。
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/x2WH56qMgNNaCV1-h6xRxw?feat=embedwebsite"><img src="http://lh6.ggpht.com/_dG0BBWAhWis/S3us0ar5HgI/AAAAAAAABGI/uj8gYyPe1hk/s400/PidginxNateon3.png" /></a></p>
</li>
</ol>

<h3>Pidginをインストール</h3>

<p>ダウンロードしてきたPidgin本体をダブルクリックしてインストールします。インストールは手順にしたがって行います。</p>

<h3>NateOnをPidginに統合する</h3>

<p>Pidginを起動している場合は一端終了してください。pidgin-nateon_svn140.zipを解凍します。解凍すると、locale, pixmaps, pluginsの3つのフォルダが現れます。それらを、C:\Program Files\Pidginにコピーします。上書きが必要な場合は、上書きします。</p>

<p>これで、NateOnがPidginで使えるようになったはずです。Pidginを起動して、NateOnが使えるか確認します。NateOnのアカウントの追加は、以下の手順で行います。</p>

<ol>
<li>「アカウント」→「Manage Accounts」
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/y-exB9_GSrqkN26gapyX7g?feat=embedwebsite"><img src="http://lh3.ggpht.com/_dG0BBWAhWis/S3uvzgDJk0I/AAAAAAAABGQ/YMpTeYgA8tU/s400/PidginxNateon4.png" /></a></p>
</li>
<li>「Add」をクリック
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/O3hg8Yt2WNhvUItg81NqHQ?feat=embedwebsite"><img src="http://lh6.ggpht.com/_dG0BBWAhWis/S3uvzxO3YNI/AAAAAAAABGU/KzzQtpeqmDg/s400/PidginxNateon5.png" /></a></p>
</li>
<li>「プロトコル：NateOn」「ユーザ名」「パスワード」「パスワードを保存する」を設定します。その後、「追加」をクリック。
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/1iu-JXO0zsngk58rw2WB7Q?feat=embedwebsite"><img src="http://lh4.ggpht.com/_dG0BBWAhWis/S3uvz4jpviI/AAAAAAAABGY/23Qyd_n8RAQ/s400/PidginxNateon6.png" /></a></p>
</li>
</ol>

<h3>ハングル文字化け対策</h3>

<p>このままだと、ハングルが文字化けしています。Pidginを立ち上げてみると、「□」がたくさん並んでいるのがわかると思います。これは、Pidginのフォントがハングルに対応していないためです。</p>

<p>そこで、ハングル対応のフォントに置き換えます。編集するさいには、Emeditorなどのテキストエディタを使ってください。

<pre>
gtk-font-name = "XXXX"
</pre>

となっている部分を

<pre>
gtk-font-name = "Arial Unicode MS 10"
</pre>

に変更します。さらに、

<pre>
style "user-font"
{
    font_name="Arial Unicode MS 10"
}
widget_class "*" style "user-font"
</pre>

を追加します。</p>

<p>なお、Arial Unicode MSは様々な文字に対応したユニバーサルフォントです。あまり、綺麗なフォントとは言えませんが、とりあえず読めることが重要なので、Arial Unicode MSを使います。</p>

<h3>参考</h3>

<p>Pidgin用プラグイン開発者さん <a href="http://blog.haz3.com/205">http://blog.haz3.com/205(韓国語)</a></p>]]></description>
<pubDate>Wed, 17 Feb 2010 17:01:52 +0900</pubDate>
<guid>http://suin.asia/2010/02/17/pidgin_with_nateon</guid>
<category domain="http://suin.asia/tag/Pidgin">Pidgin</category>
<category domain="http://suin.asia/tag/NateOn">NateOn</category>
</item>
<item>
<title>あなたのモジュール開発が加速するSuinDebugプリロード</title>
<link>http://suin.asia/2010/02/12/suin_debug_preload</link>
<description><![CDATA[<a href="http://dl.dropbox.com/u/949822/Downloads/SuinDebug_1.0.zip" class="download">Download</a>

<p>SuinDebugプリロードは、たったひとつのファイルで、あなたのXOOPS Cube Legacyでのデバッグをよりスムースにするためのサイトプリロードです。</p>

<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/n_XczAn4_8A&hl=ja_JP&fs=1&hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/n_XczAn4_8A&hl=ja_JP&fs=1&hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>

<p>HD画質なので、フルスクリーンで見るのをおすすめします。</p>

<h3>特徴</h3>

<ul>
<li>
<h4>サイト(開発環境)を汚さない</h4>
SuinDebugは、たったひとつのファイルからなるサイトプリロードです。{stdout_buffer}をテーマに書くことでテーマが汚れるデメリットや、デバッグ関連のファイルをいくつもアップロードすることで、開発パッケージに余分なファイルがあふれるデメリット、デバッグ関連の情報をデータベースに保存することで、データベースに不必要な情報が紛れ込むデメリットが一切ありません。
</li>
<li>
<h4>エラーで画面を汚さない</h4>
SuinDebugは、PHPやMySQLなどのデバッグ情報をウェブページに直接出力しません。デバッグ情報などによる、レイアウト崩れ・ソースの汚損からま逃れることができます。
</li>
<li>
<h4>ポップアップウィンドウを開かない</h4>
SuinDebugを使えば、デバッグのためにこれ以上ポップアップウィンドウを開く必要はありません。デバッグ情報はJavaScriptによるモーダルウィンドウで表示されます。つまり、ひとつのウィンドで完結するので、ポップアップからくるストレスを軽減できます。
</li>
<li>
<h4>それなりのインターフェイス</h4>
エラーSQLやDelegateのハイライト機能など、視覚的な面が考慮されています。また、デバッグモードを切り替える必要なしに、SQL, Delegate, XoopsTpl, stdout_buffer, PHP Errorsを一様に閲覧することができます。
</li>
</ul>

<h3>使い方</h3>

<ol>
<li>SuinDebugをダウンロードします。</li>
<li>それを解凍して、{XOOPS_ROOT}/preload/に保存します。</li>
<li>JavaScriptをONにした状態で、管理者アカウントでログインします。</li>
<li>管理画面でPHPデバッグモードをONにします。</li>
<li>ウィンドウ上端から100pxくらいのところにカーソルを移動するとメニューが表示されます。</li>
<ol>

<h3>注意</h3>

<p>SuinDebugを公開サイトにアップロードしないでください。あくまで、このプリロードは非公開の開発環境で使用することを想定しています。たとえば、VMwareやXAMPP・MAMPで構築されたローカル開発環境。なお、サイトを公開する場合は、SuinDebugを削除してください。</p>


<h3>SuinDebug description</h3>

<p>SuinDebug is a site preload. It will help your debugging when you develop modules in XOOPS Cube Legacy.</p>

<h3>Features</h3>

<ul>
<li>
<h4>SuinDebug doesn't litter your XOOPS</h4>
SuinDebug consists of only one site preload file. You never have to write {stdout_buffer} in your theme. You never have to upload too many files for debugging. You never have to add any information into your database. You only have to upload SuinDebug preload.
</li>
<li>
<h4>SuinDebug doesn't litter your webpages with errors</h4>
SuinDebug doesn't directory output debugging information into your webpages such as PHP or MySQL. So, it doesn't break webpage layout with debugginf information.
</li>
<li>
<h4>SuinDebug never opens popup windows any more</h4>
To show debugging informaiton, SuinDebug uses mordal window. So it never annoy you with popup windows.
</li>
<li>
<h4>SuinDebug has good interface</h4>
Without changing debugging mode, you can browse SQL, Delegate, XoopsTpl, stdout_buffer, PHP Errors at the same time in the same window.
</li>
</ul>

<h3>How to Use</h3>

<ol>
<li>Please Download SuinDebug.</li>
<li>Please Upload it to {XOOPS_ROOT}/preload/</li>
<li>Please Turn on JavaScript and login as site admin.</li>
<li>Please Turn on PHP debugging mode in legacy module.</li>
<li>Please Move your pointer by near 100px from window top.</li>
<ol>

<h3>Notice</h3>

<p>Please DO NOT upload SuinDebug to public website. SuinDebug should be used only in local developing envenment; for example, VMware, XAMMP, MAMP and so on. When you public your website, please remove SuinDebug.</p>]]></description>
<pubDate>Fri, 12 Feb 2010 15:40:56 +0900</pubDate>
<guid>http://suin.asia/2010/02/12/suin_debug_preload</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/%E3%83%97%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%89">プリロード</category>
<category domain="http://suin.asia/tag/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">ダウンロード</category>
<category domain="http://suin.asia/tag/SuinDebug">SuinDebug</category>
</item>
<item>
<title>ATOK 月額制の解約方法</title>
<link>http://suin.asia/2010/02/06/how_to_cancel_atok</link>
<description><![CDATA[<p>Windows付属のIMEがいやでいやでATOK(月額制)を使っていました。しかし、ATOKの必要性がそこまでなくなってきました。というのも、Google日本語入力が出てからすっかりATOKを使わなくなってきたのです。なので、ATOKを使わなのに毎月315円を払うのも勿体無い。そう思い、ATOK月額制を解約してきました。ということで、ATOK解約方法を画像を交えて説明したいと思います。</p>

<ul>

<li>
<p><a href="https://www.justmyshop.com/">www.justmyshop.com</a>にアクセスして、ログインします。</p>
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/deGKfAmecrd_Y2FVVe8WWw?feat=embedwebsite"><img src="http://lh6.ggpht.com/_dG0BBWAhWis/S2w7fRcQ36I/AAAAAAAABEs/fgJVBGVmcYw/s400/ATOK%E6%9C%88%E9%A1%8D%E8%A7%A3%E7%B4%84%E6%96%B9%E6%B3%951.png" /></a></p>
</li>

<li>
<p>「お客さまカウンター」を開きます。</p>
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/1XJhTBuIIK67UHzebMQWRw?feat=embedwebsite"><img src="http://lh5.ggpht.com/_dG0BBWAhWis/S2w7fk86xWI/AAAAAAAABEw/_pBrfpqbiQc/s400/ATOK%E6%9C%88%E9%A1%8D%E8%A7%A3%E7%B4%84%E6%96%B9%E6%B3%952.png" /></a></p>
</li>

<li>
<p>「定額利用サービス」の「契約内容の確認・解約」を開きます。</p>
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/z9XT53HTWe8MYdH3QI3bJA?feat=embedwebsite"><img src="http://lh4.ggpht.com/_dG0BBWAhWis/S2w7fodhapI/AAAAAAAABE0/wq0TosfV6DE/s400/ATOK%E6%9C%88%E9%A1%8D%E8%A7%A3%E7%B4%84%E6%96%B9%E6%B3%953.png" /></a></p>
</li>

<li>
<p>内容を確認して「解約する」をクリックします。/p>
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/Ho492d1CrlGvWhQyAEocMw?feat=embedwebsite"><img src="http://lh4.ggpht.com/_dG0BBWAhWis/S2w7f-VM2AI/AAAAAAAABE4/gIxnxr_nZoQ/s400/ATOK%E6%9C%88%E9%A1%8D%E8%A7%A3%E7%B4%84%E6%96%B9%E6%B3%954.png" /></a></p>
</li>

<li>
<p>さらに、「解約する（解約の受付）」をクリックします。</p>
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/BfupwQCcY2O5U8pz8lKbDQ?feat=embedwebsite"><img src="http://lh3.ggpht.com/_dG0BBWAhWis/S2w7f7XnH6I/AAAAAAAABE8/mww-X1rhzI8/s400/ATOK%E6%9C%88%E9%A1%8D%E8%A7%A3%E7%B4%84%E6%96%B9%E6%B3%955.png" /></a></p>
</li>

<li>
<p>解約完了画面が出ます。以上です。</p>
<p class="photo"><a href="http://picasaweb.google.co.jp/lh/photo/CaoKBOgibdFgzlIg92nxVw?feat=embedwebsite"><img src="http://lh5.ggpht.com/_dG0BBWAhWis/S2w8WcgnYSI/AAAAAAAABFE/e-VxhAEFYVM/s400/ATOK%E6%9C%88%E9%A1%8D%E8%A7%A3%E7%B4%84%E6%96%B9%E6%B3%956.png" /></a></p>
</li>

</ul>

<p>ATOKさん、お世話になりました。いままでありがとう。Googleさんは、アップデートもいちいち出たりしないで良い人です^-^。</p>]]></description>
<pubDate>Sat, 06 Feb 2010 00:43:18 +0900</pubDate>
<guid>http://suin.asia/2010/02/06/how_to_cancel_atok</guid>
<category domain="http://suin.asia/tag/ATOK">ATOK</category>
</item>
<item>
<title>jQueryの世界で最も単純なプラグインの作り方サンプル</title>
<link>http://suin.asia/2010/02/04/the_simplest_plugin_for_jquery</link>
<description><![CDATA[<p>jQueryは要素セレクターやクロスブラウザ対応が優れたjavascriptのライブラリで、prototype.jsと並んで広く使われています。そのjQueryでは、独自に自前の関数をプラグインという形で作ることができます。jQueryプラグインの作り方は検索すれば山ほど出てきますが、その第一歩となるプラグインの基本的な書き方が見つからなかったので記事にしておこうと思います。</p>
<p>次のプラグインは、単に文字色を赤くするだけのものです。<code>myplugin</code>がプラグイン名です。<code>$(this).css('color', 'red');</code>の部分以外がプラグインの骨組みとなり、この部分だけ差し替えれば、全く別のプラグインを作ることができます。</p>
<pre name="code" class="js">
(function($){
	$.fn.myplugin = function() {
		return this.each(function() {
			$(this).css('color', 'red');
		});
	};
})(jQuery);
</pre>
<p>このプラグインの<a href="http://suin.org/jquery/jquery_the_simplest_plugin.html">動作デモ</a></p>]]></description>
<pubDate>Thu, 04 Feb 2010 08:17:00 +0900</pubDate>
<guid>http://suin.asia/2010/02/04/the_simplest_plugin_for_jquery</guid>
<category domain="http://suin.asia/tag/jQuery">jQuery</category>
<category domain="http://suin.asia/tag/javascript">javascript</category>
<category domain="http://suin.asia/tag/Tips">Tips</category>
</item>
<item>
<title>XOOPS Cube Legacy Developer&apos;s Cheat-sheet 1.2</title>
<link>http://suin.asia/2010/01/30/xoops_cube_legacy_developer_s_cheat-sheet_1.2</link>
<description><![CDATA[<p>XOOPS Cube Legacyでの開発に便利なチートシート「XOOPS Cube Legacy Developer's Cheat-sheet」を更新しました。今回追加したのは、smartyの変数などです。1.1では、ライセンスを明確にしていなかったのですが、1.2からはライセンスを<a href="http://creativecommons.org/licenses/by/2.1/jp/">クリエイティブコモンズライセンス 表示2.1</a>としたいと思います。ライセンスの許す範囲でお好きにお使い下さい。</p>

<h3>日本語版</h3>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,47,0" width="560" height="420">
<param name="MOVIE" value="http://dl.dropbox.com/u/949822/XoopsCubeLegacyCheatSheet/XoopsCubeLegacy2.xDevelopersCheatSheet1.2-ja.swf?INITIAL_VIEW=100" />
<param name="PLAY" value="true" />
<param name="LOOP" value="true" />
<param name="QUALITY" value="high" />
<param name="WMODE" value="transparent" />
<embed src="http://dl.dropbox.com/u/949822/XoopsCubeLegacyCheatSheet/XoopsCubeLegacy2.xDevelopersCheatSheet1.2-ja.swf" width="560" height="420" wmode="transparent" type="application/x-shockwave-flash"></embed></object></p>

<ul>
<li><a href="http://dl.dropbox.com/u/949822/XoopsCubeLegacyCheatSheet/XoopsCubeLegacy2.xDevelopersCheatSheet1.2-ja.pdf">PDF版ダウンロード</a></li>
<li><a href="http://dl.dropbox.com/u/949822/XoopsCubeLegacyCheatSheet/XoopsCubeLegacy2.xDevelopersCheatSheet1.2-ja.docx">Word2007版ダウンロード</a></li>
</ul>

<h3>English version</h3>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,47,0" width="560" height="420">
<param name="MOVIE" value="http://dl.dropbox.com/u/949822/XoopsCubeLegacyCheatSheet/XoopsCubeLegacy2.xDevelopersCheatSheet1.2-en.swf?INITIAL_VIEW=100" />
<param name="PLAY" value="true" />
<param name="LOOP" value="true" />
<param name="QUALITY" value="high" />
<param name="WMODE" value="transparent" />
<embed src="http://dl.dropbox.com/u/949822/XoopsCubeLegacyCheatSheet/XoopsCubeLegacy2.xDevelopersCheatSheet1.2-en.swf" width="560" height="420" wmode="transparent" type="application/x-shockwave-flash"></embed></object></p>

<ul>
<li><a href="http://dl.dropbox.com/u/949822/XoopsCubeLegacyCheatSheet/XoopsCubeLegacy2.xDevelopersCheatSheet1.2-en.pdf">Download PDF version</a></li>
<li><a href="http://dl.dropbox.com/u/949822/XoopsCubeLegacyCheatSheet/XoopsCubeLegacy2.xDevelopersCheatSheet1.2-en.docx">Download Office Word 2007 version</a></li>
</ul>

<p><a rel="license" href="http://creativecommons.org/licenses/by/2.1/jp/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by/2.1/jp/88x31.png" /></a><br />&#12371;&#12398;&#20316;&#21697;&#12399;&#12289;<a rel="license" href="http://creativecommons.org/licenses/by/2.1/jp/">&#12463;&#12522;&#12456;&#12452;&#12486;&#12451;&#12502;&#12539;&#12467;&#12514;&#12531;&#12474;&#12539;&#12521;&#12452;&#12475;&#12531;&#12473;</a>&#12398;&#19979;&#12391;&#12521;&#12452;&#12475;&#12531;&#12473;&#12373;&#12428;&#12390;&#12356;&#12414;&#12377;&#12290;</p>]]></description>
<pubDate>Sat, 30 Jan 2010 21:27:16 +0900</pubDate>
<guid>http://suin.asia/2010/01/30/xoops_cube_legacy_developer_s_cheat-sheet_1.2</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">ダウンロード</category>
</item>
</channel>
</rss>