suin
XOOPSのモジュールはGPL2で配布しないといけない?
- 2010-3-7 1:44
- スイナシア in XOOPS, モジュール, ライセンス, GPL
XOOPSのモジュールでは、そのモジュールのライセンスを宣言する変数$modversion['license']があります。しかし、実質的には、XOOPSのモジュールが暗黙のうちにGPL2にライセンシングしています。
これは妙だな、と思って調べてみたら、特殊なケースを覗いて、モジュールのライセンスはXOOPS2に引っ張られてGPL2にしなければならないようです。GPL2では、「プログラム」の派生物(二次的著作物)はGPL2でなければならないと定めています。(GPL3でもだめ。)
いや、ちょっとまてよ。モジュールって別にXOOPSの派生物じゃないじゃん!と思ったのですが、これがどうもGPL2ではモジュールを派生物と捉えるのが妥当のようです。どうしてこうなるかというと、GPL2ではソースコードをつぎのように捉えているからです。
ある実行形式の著作物にとって完全なソースコード とは、それが含むモジュールすべてのソースコード全部に加え、関連するイン ターフェース定義ファイルのすべてとライブラリのコンパイルやインストール を制御するために使われるスクリプトをも加えたものを意味する。 GNU 一般公衆利用許諾契約書
どういうことかというと、「実行時に読み込んでいるライブラリもそのプログラムの一部です」ということ。XOOPSのモジュールの場合、require '../../mainfile.php';を行うので、その時点でXOOPS2のGPL汚染が始まります。現にGPLのFAQで次のようなことが述べられています。
ライブラリが(LGPLではなく)GPLの下で公開されている場合、そのライブラリを利用するプログラムにはGPLが適用されていなければならないのでしょうか?
はい。なぜなら、実際に実行されるプログラムはライブラリを含んでいるから です。
GNU GPLに関して良く聞かれる質問
GPLの下で公開されていたプログラムがプラグインを使うとして、プラグインのライセンスにはどのような条件がありますか?
それはプログラムがどのようにプラグインを呼び出すかに依ります。プログラ ムがforkやexecでプラグインを呼び出すならば、プラグインは別のプログラム であり、メインプログラムのライセンスはそれらにはなんの条件も課しません。
もしプログラムがプラグインと動的にリンクされており、お互いにファンクショ ンコールを使ってデータ構造を共有している場合、それらは単一のプログラム を形成していると見なされますので、プラグインはメインプログラムの拡張部 分として扱われなければなりません。すなわち、それらはGPLかGPLと矛盾しな いフリーソフトウェアライセンスの下で公開されなければならないということ です。
プログラムがプラグインと動的にリンクされているが、それらの間のコミュニ ケーションはいくつかのオプションとともにプラグインの「main」関数を呼び 出して返値を待つだけという場合は、境界線上で微妙なケースとなります。
GNU GPLに関して良く聞かれる質問
このFAQが意味するのは、モジュールがXOOPSのライブラリ(例えば、XoopsTpl, XoopsObject, XoopsUserなど)を使う限り、別個に配布しようが、モジュールはGPL2になるということです。動的にライブラリを使うか場合、GPLは感染しない、なんという主張もありましたが、実際にライブラリを使うのに動的か静的かでGPLの制約が変わるというのも変な話です。
しかし、まったくXOOPSのライブラリに依存せず、なおかつ、XOOPSなしでも完全な実行ができるモジュールであれば、GPL2を名乗る必要もありません。それはGPLのFAQを隅々読みつくせば、このことを暗示する記述が見られます。しかし、そのようなモジュールはXOOPSと互換するようなライブラリを独自で開発するか、単純な機能しかもたないモジュール(例えば、index.phpでphpinfo()だけを出すモジュール)に限られると考えられます。あくまで、理論上可能という話です。XOOPS専用モジュールである限り、GPL汚染からは逃れられそうにありません。
XOOPS CubeのBSDならどうか?
XOOPS Cubeは修正BSDライセンスでリリースされていると聞きます。では、縛りのゆるい修正BSD版XOOPS Cube用にモジュールをリリースすれば、GPL汚染から逃れることができるでしょうか?
そもそも、XOOPS Cubeが修正BSDライセンスだと勘違いしている人がいるように思います。
XOOPS Cube Legacy は、 Cube コアのモジュールのひとつです。当プロジェクトが新作した Cube コアと、 XOOPS2 JP の後継版として働く Legacy の二つが手を繋いで、 XOOPS Cube Legacy (以下XCL)が動作します。XCL は、 ”XOOPS Cube でもあり、 XOOPS2 JP の後継アプリケーションでもある” という、とてもユニークな CMS です。
XOOPS Cube Legacy の真実……?
では、XOOPS Cubeのどこが修正BSDライセンスかというと、XOOPS Cube Coreです。これはXCLでいうところの、XOOPS_ROOT/core/フォルダのみを差します。xoopscube.jpにはXOOPS Cube Coreのみが修正BSDライセンスとの旨を誤解なく書いています。
XOOPS Cube Core
XOOPS Cube Coreは修正BSDライセンスを採用しています。修正BSDライセンスは、元のBSDライセンスから広告条項の部分を削除したものです。
ライセンス
[修正 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というのは、ここで配布されているものです。
coreだけでモジュールを作ればライセンスはGPLに限られません。ところが、coreだけでは通常のモジュールを作れないのが現実です。つまり、XOOPS CubeであってもXCLであっても、GPL2が飛び火してしまうのは避けられないことのようです。
[補足 2010/03/07]minahitoさんによると、「XCコアモジュール(Legacy Base非依存の、コアのサブシステムを差し替えるもの)は修正BSDで出せますよ。」とのことなので、Legacyから独立したベースモジュールの場合、GPL汚染は起こりません。
テーマがCCでリリースされてる件
テーマはモジュールと異なり、CC(クリエティブ・コモンズ)で公開されていることがあります。どうも、テーマはモジュールとは事情が異なるようです。それは、ひとつの考えとして、テーマがそれだけで完結している点が挙げられると思います。
テーマはSmartyに依存していますが、Smarty自体はLGPLです。LGPLは動的にライブラリを使う場合は、GPLやLGPLの制約を受けないというライセンスです。したがって、Smartyに依存するだけでは、GPLの感染の問題はありません。
しかし、XOOPSのSmartyプラグイン(xoops_date_format, xoops_userなど)を使ったテーマを配布する場合は、テーマもGPL2ライセンスにする必要がありそうです。なぜなら、XOOPSのSmartyプラグインはGPLだからです。GPLでは、動的にプラグインを使用する場合でも、その著作物をGPLにライセンシングすることを要求します。
Smartyにもとから入っているプラグインだけで作ったテーマなら、GPLでなくてもいいといったところだと思います。ただし、Smarty変数がXOOPSなしでは定義されない点を考えると、XOOPSに依存しているということになり、GPL2適用の義務が生じるかもしれません。この点で、テーマはGPLと非互換のCCで配布するのは、グレーゾーンでもあります。
[補足 2010/03/07]minahitoさんによると、「あとテーマは、コードとみるかリソースとみるかで解釈が全く変わります。パイプラインがテーマをコンパイルし、結合可状態へ導いて初めてリンクされるので、GPLとコンフリクトしないライセンスなら(コンフリクトするとXCLで使用不可)選べると思います。」とのことです。リソース、つまり「データ」としてテーマを見る場合はGPL以外の選択肢もあるということ。(minahitoさんはGPLと互換性のあるライセンスならOKとしていますが、GPL汚染を受けていないと主張できる独立したテーマなら、非互換のライセンスで配布も可能なはずです。なぜなら、結合の制約は「複製・頒布・改変」のときだけで、実行するときにGPL非互換と結合することは制限していないはず。)ただし、コードかリソースかも解釈に依存していて、もしテーマがリソースだと判断できない場合は、GPL汚染を受けるかもしれないということです。たとえば、ひとつのテーマパッケージにXOOPS依存のPHPコードが混じっている場合など。詳しくはFAQに書いてあります。
Smarty2.0からSmarty3.0への変更点
- 2010-3-6 22:20
- スイナシア in smarty, php
Smarty3.0のパッケージに入っている、SMARTY2_BC_NOTESを和訳してみた。
分かっているSmarty2との非互換性
シンタクス
Smarty 3 APIはシンタクスが新しくなりました。Smarty2のシンタクスはサポートしますが、将来サポートが保証されない可能性があります。
PHPのバージョン
Smarty3はPHP5のみ対応します。PHP4では動きません。
{php}タグ
{php}タグはデフォルトでは無効になりました。{php}タグを使うことは非推奨です。$smarty->allow_php_tag=true;で{php}タグを有効にすることができます。
しかし、複数の{php}タグにまたがるPHPコードは、これ以上は動かないでしょう。
デリミタとホワイトスペース
ホワイトスペースに囲まれたデリミタは今後、Smartyのタグとして扱われません。したがって、{ foo }はタグとしてコンパイルされません。この場合、コンパイルするには{foo}とする必要があります。この変更により、{literal}が必要とならないので、Javascript/CSSが扱いやすくなります。なお、$smarty->auto_literal = false;でこの設定を無効化できます。
クォートされなかった文字列
Smarty2は、パラメータにクォートしていない文字列が現れたとき、大雑把で曖昧な面がありました。一方、Smarty3はより厳密です。といっても、特別な文字(A-Za-z0-9_以外)を含まない限り、今でもクォーテーションなしの文字列を使うことはできます。
例えば、ファイル名の文字列はクォートしなければなりません。
{include file='path/foo.tpl'}
Smartyクラスの拡張
Smarty3は初期化するのに、__constructメソッドを使います。Smartyクラスを拡張するとき、もし、小クラスが独自のコンストラクタを定義すると、Smartyのコンストラクタは実行されません。Smartyのコンストラクタを実行する必要があれば、小クラスのコンストラクタでparent::__construct()を実行してください。
class MySmarty extends Smarty {
function __construct() {
parent::__construct();
// your initialization code goes here
}
}
オートローダー
Smarty3はspl_autoload_registerで独自のオートローダーを登録します。もしあなたのコード中に__autoload関数が存在するのなら、 それを明示的に__autoloadスタックに登録しなければなりません。 詳しくは、http://us3.php.net/manual/en/function.spl-autoload-register.php を御覧下さい。
プラグインファイル名
Smarty3ではPHP spl_autoloaderをサポートしています。このオートローダーは、ファイル名を小文字にすることを要求しています。したがって、Smartyプラグインのファイル名は小文字である必要があります。Smarty2では、大文字小文字が混在したファイル名でも動作しました。
特別なSmarty変数のスコープ
Smarty2では特別なSmarty変数(例えば、$smarty.section...や$smarty.foreach)がグローバルスコープでした。もし、同じ名前のループがサブテンプレートにあると、親テンプレートの変数を上書きしていまします。
Smarty3では特別なSmarty変数は、ループがあるテンプレートのローカルスコープになります。もし、親テンプレートの変数をサブテンプレートに渡す場合は、パラメータにする必要があります。
{include file='path/foo.tpl' index=$smarty.section.foo.index}
SMARTY_RESOURCE_CHAR_SET
Smarty3はutf-8をデフォルトcharsetとして、定数SMARTY_RESOURCE_CHAR_SETに定義します。これは、escapeのような修飾子のデフォルトcharsetとして使われるようになります。もし、utf-8以外のcharsetをテンプレートで使う場合、適宜にSMARTY_RESOURCE_CHAR_SETを定義することに注意してください。そうしなければ、なにも出力されない可能性があります。
改行での{if}タグ
テンプレートのソースに予期される改行の出力を得るために、{if},{else},{elseif},{/if}タグのコンパイル後コードに¥nが追加されました。もし、{if}タグなどが行末にある場合、HTMLの出力結果が改行されます。
ユーザのパスワードに期限をつけるプリロード PasswordLimitter 1.2
- 2010-3-5 1:47
- スイナシア in XOOPS, プリロード, ダウンロード, PasswordLimitter
パスワードは定期的に変更するほうがより安全と言われています。PasswordLimitterは、XOOPSのユーザのパスワードに期限を設け、期限がすぎたユーザに対しては、ログイン時にパスワード変更を促すメッセージを表示します。
インストール方法
- PasswordLimitter.class.phpを/preloadにアップロード
- 管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス
- 「INSTALL」をクリックしてインストールを実行
- その後、設定ページで期限日数を設定する
アンインストール方法
- 管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス
- 「UNINSTALL」をクリックしてインストールを実行
- PasswordLimitter.class.phpを/preloadから削除
変更点 1.0 => 1.2
- ユーザ新規登録時に有効期限がセットされないバグを修正。
1.1とばしてしまった…orz
開発情報
ユーザのパスワードに期限をつけるプリロード PasswordLimitter 1.0
- 2010-2-23 5:59
- スイナシア in XOOPS, プリロード, PasswordLimitter
- この情報は古いです。新しい情報を御覧下さい。
パスワードは定期的に変更するほうがより安全と言われています。PasswordLimitterは、XOOPSのユーザのパスワードに期限を設け、期限がすぎたユーザに対しては、ログイン時にパスワード変更を促すメッセージを表示します。
インストール方法
- PasswordLimitter.class.phpを/preloadにアップロード
- 管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス
- 「INSTALL」をクリックしてインストールを実行
- その後、設定ページで期限日数を設定する
アンインストール方法
- 管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス
- 「UNINSTALL」をクリックしてインストールを実行
- PasswordLimitter.class.phpを/preloadから削除
開発情報
統合メッセンジャーPidginでNateOnを使おう
- 2010-2-17 17:01
- スイナシア in Pidgin, NateOn
PidginはWindowsで使える統合メッセンジャーです。なので、Pidginをインストールするだけで、MSNメッセンジャー・Googleトーク・Yahooメッセンジャーなどを同時に使うことができ便利です。
NateOnは韓国で最もシェアのあるインスタントメッセンジャーです。Windowsであれば、NateOnをインストールすることができます。しかし、韓国語のソフトであるためか、日本語Windowsでは文字化けを起こすことがしばしばあります。また、NateOnは基本的に韓国語のインターフェイスになるので、韓国語に不慣れな人には操作が難しい面もあります。
そこで、NateOnを日本語にきちんと対応してあるPidginで使うことをおすすめします。PidginでNateOnを使うためには、以下のファイルをダウンロードします。
- Pidgin本体
- Pidgin用NateOnプラグイン
Pidgin本体のダウンロード手順
- http://www.pidgin.im/(英語)にアクセス。
- Pidginをダウンロードする。
Pidgin用NateOnプラグインのダウンロード手順
- 配布先にアクセス。
- pidgin-nateon_svn140.zipをダウンロードする。
Pidginをインストール
ダウンロードしてきたPidgin本体をダブルクリックしてインストールします。インストールは手順にしたがって行います。
NateOnをPidginに統合する
Pidginを起動している場合は一端終了してください。pidgin-nateon_svn140.zipを解凍します。解凍すると、locale, pixmaps, pluginsの3つのフォルダが現れます。それらを、C:\Program Files\Pidginにコピーします。上書きが必要な場合は、上書きします。
これで、NateOnがPidginで使えるようになったはずです。Pidginを起動して、NateOnが使えるか確認します。NateOnのアカウントの追加は、以下の手順で行います。
- 「アカウント」→「Manage Accounts」
- 「Add」をクリック
- 「プロトコル:NateOn」「ユーザ名」「パスワード」「パスワードを保存する」を設定します。その後、「追加」をクリック。
ハングル文字化け対策
このままだと、ハングルが文字化けしています。Pidginを立ち上げてみると、「□」がたくさん並んでいるのがわかると思います。これは、Pidginのフォントがハングルに対応していないためです。
そこで、ハングル対応のフォントに置き換えます。編集するさいには、Emeditorなどのテキストエディタを使ってください。
gtk-font-name = "XXXX"となっている部分を
gtk-font-name = "Arial Unicode MS 10"に変更します。さらに、
style "user-font"
{
font_name="Arial Unicode MS 10"
}
widget_class "*" style "user-font"
を追加します。
なお、Arial Unicode MSは様々な文字に対応したユニバーサルフォントです。あまり、綺麗なフォントとは言えませんが、とりあえず読めることが重要なので、Arial Unicode MSを使います。
参考
Pidgin用プラグイン開発者さん http://blog.haz3.com/205(韓国語)
あなたのモジュール開発が加速するSuinDebugプリロード
- 2010-2-12 15:40
- スイナシア in XOOPS, プリロード, ダウンロード, SuinDebug
SuinDebugプリロードは、たったひとつのファイルで、あなたのXOOPS Cube Legacyでのデバッグをよりスムースにするためのサイトプリロードです。
HD画質なので、フルスクリーンで見るのをおすすめします。
特徴
-
サイト(開発環境)を汚さない
SuinDebugは、たったひとつのファイルからなるサイトプリロードです。{stdout_buffer}をテーマに書くことでテーマが汚れるデメリットや、デバッグ関連のファイルをいくつもアップロードすることで、開発パッケージに余分なファイルがあふれるデメリット、デバッグ関連の情報をデータベースに保存することで、データベースに不必要な情報が紛れ込むデメリットが一切ありません。 -
エラーで画面を汚さない
SuinDebugは、PHPやMySQLなどのデバッグ情報をウェブページに直接出力しません。デバッグ情報などによる、レイアウト崩れ・ソースの汚損からま逃れることができます。 -
ポップアップウィンドウを開かない
SuinDebugを使えば、デバッグのためにこれ以上ポップアップウィンドウを開く必要はありません。デバッグ情報はJavaScriptによるモーダルウィンドウで表示されます。つまり、ひとつのウィンドで完結するので、ポップアップからくるストレスを軽減できます。 -
それなりのインターフェイス
エラーSQLやDelegateのハイライト機能など、視覚的な面が考慮されています。また、デバッグモードを切り替える必要なしに、SQL, Delegate, XoopsTpl, stdout_buffer, PHP Errorsを一様に閲覧することができます。
使い方
- SuinDebugをダウンロードします。
- それを解凍して、{XOOPS_ROOT}/preload/に保存します。
- JavaScriptをONにした状態で、管理者アカウントでログインします。
- 管理画面でPHPデバッグモードをONにします。
- ウィンドウ上端から100pxくらいのところにカーソルを移動するとメニューが表示されます。
注意
SuinDebugを公開サイトにアップロードしないでください。あくまで、このプリロードは非公開の開発環境で使用することを想定しています。たとえば、VMwareやXAMPP・MAMPで構築されたローカル開発環境。なお、サイトを公開する場合は、SuinDebugを削除してください。
SuinDebug description
SuinDebug is a site preload. It will help your debugging when you develop modules in XOOPS Cube Legacy.
Features
-
SuinDebug doesn't litter your XOOPS
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. -
SuinDebug doesn't litter your webpages with errors
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. -
SuinDebug never opens popup windows any more
To show debugging informaiton, SuinDebug uses mordal window. So it never annoy you with popup windows. -
SuinDebug has good interface
Without changing debugging mode, you can browse SQL, Delegate, XoopsTpl, stdout_buffer, PHP Errors at the same time in the same window.
How to Use
- Please Download SuinDebug.
- Please Upload it to {XOOPS_ROOT}/preload/
- Please Turn on JavaScript and login as site admin.
- Please Turn on PHP debugging mode in legacy module.
- Please Move your pointer by near 100px from window top.
Notice
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.
ATOK 月額制の解約方法
- 2010-2-6 0:43
- スイナシア in ATOK
Windows付属のIMEがいやでいやでATOK(月額制)を使っていました。しかし、ATOKの必要性がそこまでなくなってきました。というのも、Google日本語入力が出てからすっかりATOKを使わなくなってきたのです。なので、ATOKを使わなのに毎月315円を払うのも勿体無い。そう思い、ATOK月額制を解約してきました。ということで、ATOK解約方法を画像を交えて説明したいと思います。
-
www.justmyshop.comにアクセスして、ログインします。
-
「お客さまカウンター」を開きます。
-
「定額利用サービス」の「契約内容の確認・解約」を開きます。
-
内容を確認して「解約する」をクリックします。/p>
-
さらに、「解約する(解約の受付)」をクリックします。
-
解約完了画面が出ます。以上です。
ATOKさん、お世話になりました。いままでありがとう。Googleさんは、アップデートもいちいち出たりしないで良い人です^-^。
jQueryの世界で最も単純なプラグインの作り方サンプル
- 2010-2-4 8:17
- スイナシア in jQuery, javascript, Tips
jQueryは要素セレクターやクロスブラウザ対応が優れたjavascriptのライブラリで、prototype.jsと並んで広く使われています。そのjQueryでは、独自に自前の関数をプラグインという形で作ることができます。jQueryプラグインの作り方は検索すれば山ほど出てきますが、その第一歩となるプラグインの基本的な書き方が見つからなかったので記事にしておこうと思います。
次のプラグインは、単に文字色を赤くするだけのものです。mypluginがプラグイン名です。$(this).css('color', 'red');の部分以外がプラグインの骨組みとなり、この部分だけ差し替えれば、全く別のプラグインを作ることができます。
(function($){
$.fn.myplugin = function() {
return this.each(function() {
$(this).css('color', 'red');
});
};
})(jQuery);
このプラグインの動作デモ
XOOPS Cube Legacy Developer's Cheat-sheet 1.2
- 2010-1-30 21:27
- スイナシア in XOOPS, ダウンロード
XOOPS Cube Legacyでの開発に便利なチートシート「XOOPS Cube Legacy Developer's Cheat-sheet」を更新しました。今回追加したのは、smartyの変数などです。1.1では、ライセンスを明確にしていなかったのですが、1.2からはライセンスをクリエイティブコモンズライセンス 表示2.1としたいと思います。ライセンスの許す範囲でお好きにお使い下さい。
日本語版
English version
この作品は、クリエイティブ・コモンズ・ライセンスの下でライセンスされています。
XOOPS 一般設定しかない管理画面は一般設定に転送する
- 2010-1-28 0:54
- スイナシア in XOOPS, Tips, PHP
モジュールを作っていると、管理画面に一般設定しかないというケースがあります。この場合、管理画面のトップ(/admin/index.php)は空白のページになってしまい、なんとも不格好です。見た目もそうですが、操作性をあげるためにも、管理画面のトップが空白の場合は一般設定に転送してあげましょう。
そして下がそのコード。
require "../../../mainfile.php";
$mid = $xoopsModule->mid();
if ( defined('XOOPS_CUBE_LEGACY') )
{
$url = sprintf('%s/modules/legacy/admin/index.php?action=PreferenceEdit&confmod_id=%u', XOOPS_URL, $mid);
}
else
{
$url = sprintf('%s/modules/system/admin.php?fct=preferences&op=showmod&mod=%u', XOOPS_URL, $mid);
}
header('Location: '.$url);
XOOPS Cube + preload でカスタムブロックを作成する方法
- 2010-1-25 17:30
- スイナシア in XOOPS, プリロード, Tips
カスタムブロックは、通常legacyモジュールやaltsysで作ることができます。ここでは、プリロードでカスタムブロックを作ることを紹介します。
その前に、ここで紹介するTipsは、管理画面でカスタムブロックを作るより、はるかに回りくどくPHPの知識が必要な点を注意しておきます。なので、特殊な機能や要件を必要としない限り、カスタムブロックは管理画面で作るべきです。
まず、XOOPS Cubeのプリロードでカスタムブロックを作るメリットはいくつかあります。
- ファイルとして配布できる
- ファイルなので、不要になれば削除するだけ
- PHPなどの複雑なロジックが書きやすい(通常のカスタムブロックでもPHPは使えます)
特にこの中でも、ファイルとして扱えるメリットは大きいです。たとえば、開発環境で一定の変数を出力したりとデバッグ用途にブロックをプリロードで実装します。あとは、公開するときにプリロードを削除するだけで、データベースを汚したりすることは一切ありません。管理画面で操作するブロックだと、ついつい消し忘れ・消し損ないなんてこともありますが、プリロードだとファイルを確実に削除すれば、消し損なうこともありません。
ダウンロード次に、プリロードのソースを紹介します。16行目の$indexが、ブロックを表示する位置になります。l, r, cl, cc, crの順に、左・右・中央左・中央中・中央右を意味します。
18行目から22行目はブロックの表示に関する設定です。nameはブロック名で、アルファベット英数ですきな名前を指定します。titleはブロックの題目で、ブロックの上部に表示されます。contentはブロックの内容で、HTMLなどで書くことができます。weightはブロックの並び順で、数値が小さいほど上に、数値が多きほど下にブロックが表示されます。
<?php
/**
* A simple description for this script
*
* PHP Version 5.2.4 or Upper version
*
* @package PreloadBlock
* @author Hidehito NOZAWA aka Suin <http://suin.asia/>
* @copyright 2009 Hidehito NOZAWA
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU GPL v2.0
*
*/
class PreloadBlock extends XCube_ActionFilter
{
protected $index = 'l';
protected $block = array(
'id' => -1,
'name' => 'preload_block',
'title' => 'プリロードブロック',
'content' => '<i>ブロックの内容</i>',
'weight' => -1, // 並び順
);
protected $indexes = array(
'l' => 0,
'r' => 1,
'cl' => 3,
'cr' => 4,
'cc' => 5
);
protected $blocks = array(
'l' => 'xoops_lblocks',
'r' => 'xoops_rblocks',
'cl' => 'xoops_clblocks',
'cr' => 'xoops_crblocks',
'cc' => 'xoops_ccblocks'
);
public function postFilter()
{
if ( $this->mController->_mStrategy->mStatusFlag != LEGACY_CONTROLLER_STATE_PUBLIC )
{
return;
}
$this->mRoot->mDelegateManager->add('Legacy_RenderSystem.BeginRender', array(&$this, 'beginRender'));
$this->mRoot->mContext->mAttributes['legacy_BlockShowFlags'][$this->indexes[$this->index]] = true;
$this->mRoot->mContext->mAttributes['legacy_BlockContents'][$this->indexes[$this->index]][] = $this->block;
}
protected function beginRender(&$tpl)
{
if ( !empty($tpl->_tpl_vars['isFileTheme']) )
{
uasort($tpl->_tpl_vars[$this->blocks[$this->index]], array(&$this, 'reOrder'));
}
}
protected function reOrder($a, $b)
{
if ($a['weight'] == $b['weight'])
{
return 0;
}
return $a['weight'] > $b['weight'] ? 1 : -1;
}
}
?>
なお、このプリロードはしゃのさんのnowプリロードを参考にさせていただきました。
Searchモジュールに転送するpreload
- 2010-1-24 16:48
- スイナシア in ダウンロード, プリロード, XOOPS, saerch
ながらくメンテナンスしていないXOOPS検索モジュールですが、XOOPS Cube Legacyでも動作するようです。このモジュールは、/search.phpの検索機能(グローバルサーチという)を乗っ取り、より充実した検索機能を実現すべくXOOPS2向けに作られたモジュールです。search.phpを乗っ取るさい、XOOPS2ではsearch.phpを直接書き換える手続きが必要でした。一方、XOOPS Cube Legacyでは、preloadを置くだけで乗っ取りが完了します。XOOPS Cube LegacyでもXOOPS検索モジュールを使っている方はどうぞpreloadをダウンロードしてお使い下さい。
ちなみに、XOOPS Cubeのグローバルサーチを乗っ取りたい人は、このプリロードが参考になるかと思います。
<?php
/**
*
* @package SearchModuleRedirecter
* @author Hidehito NOZAWA aka Suin <http://suin.asia/>
* @copyright 2009 Hidehito NOZAWA
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU GPL v2.0
*
*/
if ( !defined('XOOPS_ROOT_PATH') ) exit;
class SearchModuleRedirecter extends XCube_ActionFilter
{
var $searchDirname = 'search';
function preBlockFilter()
{
$this->mRoot->mDelegateManager->add('Legacypage.Search.Access', array($this, 'redirect'), XCUBE_DELEGATE_PRIORITY_FIRST);
}
function redirect()
{
if ( file_exists(XOOPS_ROOT_PATH.'/modules/'.$this->searchDirname.'/index.php') )
{
$moduleHandler =& xoops_gethandler('module');
$moduleObj =& $moduleHandler->getByDirname($this->searchDirname);
if ( $moduleObj->getVar('isactive') == 1 )
{
header('Location: '.XOOPS_URL.'/modules/'.$this->searchDirnam.'/index.php?'.$_SERVER['QUERY_STRING']);
die;
}
}
}
}
?> XOOPS2.0.16a-JPのダウンロードはここ (他XOOPS2旧バージョンも)
- 2010-1-19 21:12
- スイナシア in XOOPS, ダウンロード
メモ的エントリー。XOOPSCubeが出てから、XOOPS2を使うことも少なくなったが、全くないわけではない。XOOPS2の旧バージョンをダウンロードしたくて検索しても、なかなか出てこないので、ここにブログとして残しておこうと思う。
学年から年齢を調べるサービスをはじめました
- 2010-1-2 3:22
- スイナシア in サービス
なんさいナビ(http://nansai.suin.org/)
新年あけましておめでとうございます。ということで、新年は親戚と会う機会が多いのですが、子どもがいるいとこが多くなったと実感するこのごろです。子どもの学年は知ってるけど、何歳だっけ?、簡単に調べられたらなあ、と思ったのがサービス提供の切っ掛けになりました。
学年と年齢くらいなら、対応表を作っておけばよさそうですが、あえて問答式のサービスにしました。なんでそうなったかですが、なんさいナビがGoogleの検索結果に上がることで、Googleで「中1 年齢」や「小学2年生 何歳」などと直感的に検索するだけで、検索結果から年齢が分かるような仕組みにしたかったからです。やってみると分かりますが、意外と上のキーワードで年齢をすぐに知れるページは見つかりません。
検索窓に「小4」などのキーワードを入れることで、年齢を調べられます。調べた結果は、一定のURLになり、Googleボットがクロールできる形になります。
今のところ、学年情報と年齢情報が帰ってくるだけです。今後は、生まれた年(西暦・和暦)の情報を表示したり、Wikipediaに関連づけたりできたらいいかもと思ってます。
Microsoft Producer 2003のランタイムエラー
- 2009-12-2 0:00
- スイナシア in Microsoft, Office
Microsoft Producer for PowerPoint 2003はPowerPointのスライドに、動画でナレーションをつけることができるソフトです。Microsoftのサイトにて無償で提供されているので、PowerPoint 2003がインストールされた環境では、自由に使うことができます。
Producerでスライドに動画ナレーションをつける方法
- Producerを立ち上げたら、「ファイル」→「インポート」でナレーションをつけるスライドを選択します。
- インポートが完了したら、「取り込み」をクリック。
- ガイダンスに従って、ビデオの画質・ビットレートなどを設定します。
- 設定が完了し、スライドと自分が映っているウインドウがでたら、「取り込み」をクリック。
- 「次のスライド」をクリックするとスライドが変わります。
- ナレーションを終えたら取り込みを停止します。これで、スライドに合わせて、ナレーションがつきます。
動画キャプチャ中に起こるランタイムエラー
Windowsの環境によっては、上の4の直後に「ランタイムエラーが発生しました。デバッグしますか」というエラーが出ることがあります。このエラーが起こると、ステップ5で「次のスライド」をクリックしても、スライドが移り変わらなくなってしまいます。
これは、Internet Explorer 7がProducerに対応していないためです。Internet Explorer 7を一旦削除し、Internet Explorer 6を入れなすことで、ランタイムエラーを起こさないようにできます。
MacBook Air + VMware Fusion + Windows XP 実用範囲内
- 2009-11-29 15:44
- スイナシア in Mac, Windows, Tips, おすすめ
Windows 7発売で、Windows XPのCDが眠っている状況が出て来ると思う。 まだまだWindows XPは現役。眠らせておくのは勿体ない。 Macを持っている場合は、MacにWindows XP環境を完備しておくのもいいだろう。 Mac OS XでWindwos XPなどのOSを実行できるアプリにVMware Fusionというものがあるので、ここでは私がMacBook Airで使ってみた感想を書きたいと思う。
VMwareでWindows XPを使うのはどういう感じかというと、まるでWindows XPがMacのアプリの1つのように動かすというイメージだ。 したがって、次のような利点がある。
- MacとWindows XPを同時進行で使用できる。
- コピー&ペーストができる。
- ファイルの共有が簡単にできる。
- MacでダウンロードしたファイルがWindowsでしか開けない場合もすぐに開くことができる。
スペック的に大丈夫か?
気になるのはMacBook AirでVMwareが実用に堪えるかだ。 MacBook Airのスペックは次のとおりであるが、 同時に2つのOSを動かすには若干不安がのこる。
- プロセッサ : 1.6 GHz Intel Core 2 Duo
- メモリ : 2 GB 1067 MHz DDR3
- ハードディスク : 1.8 inch 80 GB
実際にVMwareにWindows XPを入れてみた感想
MacBook Air + VMware Fusionを使い始めて半年くらいになる。 結論から言うと、VMware Fusion + Windows XPは実用範囲内である。 Office Word 2003を起動して文章を作成したり、 Internet Explorerでネットサーフィンする程度はまったく問題なかった。
しかし、次のような問題点は、一工夫必要だ。
- VMwareでWindows XPを再開するまでに20秒くらいかかる。(普通にWindowsを起動するよりはいいか)
- Mac側で起動中のソフトが多いと、Windows XPも重くなる。
Windows XPを再開するまでの時間を短縮するのは、あまり効果的な方法がないと思う。 Windowsをサスペンドするときに、不要なソフトは終了しておくなどすると、若干早くなる。
Mac側で起動中のソフトはできるだけ少なくすると、VMwareも軽く動作する。 私の場合、VMwareで長時間作業する場合は、一旦Macを再起動するようにしている。 起動直後にVMwareを実行すると、すいすいと動く。
余談だが、MacBook AirにはDVDドライブがないので、Windowsをインストールする際には外付けのDVDドライブが必要になる。
Macユーザの弱点は、まわりがWindowsユーザという点だと思う。 急にWindows環境が必要になることは しばしばある。 そんなときは、VMwareをインストールしておくと便利だ。
Shiori 1.02
- 2009-11-11 2:18
- スイナシア in shiori, ダウンロード, XOOPS, モジュール
ダウンロードShioriモジュールは、ユーザが個人のブックマーク帳を所有でき、サイト内のあらゆるページをブックマークできるようにするモジュールです。読みかけのページ、毎日チェックする掲示板、いつか役立つかもしれない記事などを見失わないようにすることを目的に作られました。
機能の詳細は、Shiori 1.00のページで紹介しています。
変更点 1.01 → 1.02
- 管理画面に「ブックマーク統計」ページを追加
- jQueryがロードされていない場合は、モジュール同封のjQueryを読み込むように変更(ユーザーがテーマを編集する必要がなくなりました。)
上のように管理画面でユーザがブックマークしたページの統計を見られるようにしました。この機能は、Shiori 0.xにあった機能ですが、1.xを開発するときに削除しました。しかし、統計が便利という意見をいただいたので、復活することにしました。たぶん、ソート機能が充実したおかげで、0.xの統計より若干便利になっていると思います。(0.xの統計がどんなだったか思い出せないw)
アップデート 1.x → 1.02
サーバ上のshioriフォルダを削除したあと、1.02のshioriをアップロードしてください。その後、モジュール管理でshioriモジュールの「アップデート」を実行してください。
Koins 1.00
- 2009-11-8 20:46
- スイナシア in XOOPS, ダウンロード, モジュール
このモジュールについて

Koinsモジュールは、パーツを選んでいくとモジュールアイコンを作ることができます。 特別な画像編集ソフトがないモジュール開発者もアイコンを手軽に作ることができます。 パーツになる素材画像を追加すると、作れるアイコンのバリエーションを増やすことも可能です。
外部モジュールに反映する機能(YouTube動画)
WindowsやMacなどの書き込み権限が自由なローカル環境では、作成したアイコンを直接モジュールに反映することができます。 外部モジュール反映機能は管理者のみが使用できます。
動作環境
| PHPバージョン | 5.2.4 以上 |
| GD 必須 | |
| XOOPS | XOOPS Cube 2.1.6 / XOOPS 2.0.16a |
| 文字コード | UTF-8 / EUC-JP |
特徴
- モジュールアイコンを作成する
- モジュールアイコンをダウンロードできる
- モジュールアイコンを外部モジュールに反映できる
インストール方法
- 圧縮ファイルを解凍して、koins を html/modules/ の下にコピーしてください。
- 「モジュール管理」でインストールを実行してください。
- 「グループ管理」で使用を許可するグループにアクセス権限を与えてください。
アンインストール方法
- 「モジュール管理」でKoinsモジュールを非アクティブに変更後、アンインストールを実行してください。
- html/modules/から koins を削除してください。
素材パーツの追加方法
Koinsは素材パーツを自由に追加することができます。
パーツの保管場所
| プレート | /modules/koins/images/plates |
| マーク | /modules/koins/images/icons |
| フォント | /modules/koins/images/letters |
プレート
128x28のpng画像を追加します。左側28x28の領域にマークが合成されてもいいような画像にしてください。
マーク
28x28のpng画像を追加します。図形の色は基本的に白です。背景色は透過にしてください。
フォント
高さ7pxの画像を追加します。フォント画像はKoins_Class_IconGeneratorクラスの_setupLettersImgメソッドに対応関係をマッピングしています。
Shiori 1.01
- 2009-11-3 2:12
- スイナシア in Shiori, ダウンロード, モジュール, XOOPS
このモジュールについて
Shioriモジュールは、ユーザが個人のブックマーク帳を所有でき、サイト内のあらゆるページをブックマークできるようにするモジュールです。 読みかけのページ、毎日チェックする掲示板、いつか役立つかもしれない記事などを見失わないようにすることを目的に作られました。
特徴
- ユーザ個別にブックマーク帳を作れる
- ワンクリックでブックマーク登録できる
- サイト内外のページがブックマーク可能
ワンクリックブックマーク
ワンクリックブックマークとは、星アイコンをクリックするだけで、そのページをShioriにブックマークできる機能です。 この機能により、ユーザは少ない手間でページをブックマークすることができ、使い勝手が向上します。
解説動画も新しくしてみました。
動作環境
| PHPバージョン | 5.2.4 以上 |
| mbstring 必須 | |
| XOOPS | XOOPS Cube 2.1.6~ / XOOPS 2.0.16aJP~ |
| 文字コード | UTF-8(推奨) / EUC-JP |
変更点 1.00 → 1.01
- jQueryが読み込まれていないときJavaScriptエラーがでるのを修正(umotoさん 私信)
- UTF-8以外のときワンクリックブックマークが文字化けするのを修正(umotoさん 私信)
- XOOPS 2に部分対応(テンプレートマネージャ未対応)
Shiori 1.00からのアップデート
shioriフォルダごと上書きしてください。その後、モジュールアップデートを行ってください。
Shiori 0.51からのアップデート
/html/modules/shiori/削除し、1.01に置き換えて下さい。その後、モジュールアップデートを実行してください。
1.01は0.51とは全く違う内容になっています。互換性を完全に保証するわけではありません。サーバーにアップロード前に必ずローカルでテストしてください。
Shiori 1.00
- 2009-10-30 21:23
- スイナシア in モジュール, XOOPS, shiori
このモジュールについて
Shioriモジュールは、ユーザが個人のブックマーク帳を所有でき、サイト内のあらゆるページをブックマークできるようにするモジュールです。 読みかけのページ、毎日チェックする掲示板、いつか役立つかもしれない記事などを見失わないようにすることを目的に作られました。
特徴
- ユーザ個別にブックマーク帳を作れる
- ワンクリックでブックマーク登録できる
- サイト内外のページがブックマーク可能
ワンクリックブックマーク
ワンクリックブックマークとは、星アイコンをクリックするだけで、そのページをShioriにブックマークできる機能です。 この機能により、ユーザは少ない手間でページをブックマークすることができ、使い勝手が向上します。
動作環境
| PHPバージョン | 5.2.4 以上 |
| mbstring 必須 | |
| XOOPS | XOOPS Cube 2.1.6 以上 |
| 文字コード | UTF-8 |
Shiori 0.51からのアップデート
/html/modules/shiori/削除し、1.00に置き換えて下さい。その後、モジュールアップデートを実行してください。
1.00は0.51とは全く違う内容になっています。互換性を完全に保証するわけではありません。サーバーにアップロード前に必ずローカルでテストしてください。

