ホーム > suin

suin

記事一覧 > スイナシア

WiFi電波の強度をヒートマップで可視化できる「NetSpot」を使ってみたら楽しかった

家宅兼オフィスのWiFiルータが破損したので、新しく無線ネットワークを作ることになった。やることは、WiFi中継器を強いやつに置き換える作業だったが、作業前と作業後で電波の入り具合が気になっていたのでNetSpotというWiFiマッピングツールを使って可視化してみた。特にスキャンする作業が楽しかった。

NetSpotについて

NetSpotは間取り図にWiFiの電波の強さをヒートマップで可視化してくれるツールで、macOSとWindowsで使える。単体で買うとお値段が、Homeが49ドル、Proが149ドルと高い……。なので今回は、SetApp(月額9.99ドル)のサブスクリプションで使えるPro版を使ってみた。NetSpotの機能の概要については公式の紹介ビデオを見てもらったほうが分かりやすいと思うので、そちらに丸投げする(マッピングの流れは1分20秒〜を参照):

マッピングのやりかた

間取り図を用意する

オフィスや自宅の間取り図を用意する。これが一番の難所ではある。賃貸なら募集図面があるといいが、入居時に捨ててしまっていたので、Google画像検索で探した。運良く見つかったのでそれを使った。

間取り図をNetSpotに読みこませる

NetSpotを起動し「Start a new survey」を押す。

  • 「New project name」は物件名など適当にいれる。
  • 「First zone name」は部屋番号など適当に入れる。
  • 「Zone's area type」は物件の特性に合わせて選ぶ。
  • 「Load from file」を選択し「Choose file」ボタンを押して、間取り図を読みこませる。

間取り図のスケールを決めるために、表示された間取り図に2点ピンを立て、その距離を入力する。

「Network selection」では特に何もせず「Continue」。

屋内を歩き回ってスキャンする

MacBookなどを持ち歩きながら、自分が立っている地点にピンをどんどん立てていく。これが結構楽しい。

3点以上、隣接してスキャンすると「STOP SCAN」が押せるようになる。「STOP SCAN」を押すとヒートマップが見れる。

できあがったヒートマップからレポートを作る

ヒートマップができたら、左ペインでレポートに出したいWiFiアクセスポイントを選び、「EXPORT」を押す。レポートは業務業務したPDFレポートや、PNG画像など様々な形式で出力することができる。

envchainでAWSのアクセストークン等を安全に管理する

envchainはAWSのアクセスキーのような機密情報を含む環境変数をmacOSのKeychainに保存し、コマンドを実行するときにそれを復号してくれるCLIツールだ。機密の環境変数を.bashrcなどに書いてしまうより、安全に管理することができる。

取説

❯ envchain
envchain version 1.0.1

Usage:
  Add variables
    envchain (--set|-s) [--[no-]require-passphrase|-p|-P] [--noecho|-n] NAMESPACE ENV [ENV ..]
  Execute with variables
    envchain NAMESPACE CMD [ARG ...]

Options:
  --set (-s):
    Add keychain item of environment variable +ENV+ for namespace +NAMESPACE+.

  --noecho (-n):
    Enable noecho mode when prompting values. Requires stdin to be a terminal.

  --require-passphrase (-p), --no-require-passphrase (-P):
    Replace the item's ACL list to require passphrase (or not).
    Leave as is when both options are omitted.

AWSのアクセスキー等をKeychainに登録する

envchain --set ネームスペース 環境変数名の形式でコマンドを呼び出すと、環境変数をKeychainに登録することができる。ネームスペースは好みで決める。フォルダ名のようなものだ。環境変数は複数指定することもできる。例えば、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを登録するには次のようにする:

❯ envchain --set aws AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
aws.AWS_ACCESS_KEY_ID: (アクセスキーを入力)
aws.AWS_SECRET_ACCESS_KEY: (シークレットアクセスキーを入力)

コマンドを実行すると、変数の値を聞かれるので値を入力していく。

登録した環境変数を確認する

登録した環境変数を確認するには次のようなコマンドを実行する:envchain ネームスペース env

❯ envchain aws env | grep AWS
AWS_ACCESS_KEY_ID=*******************
AWS_SECRET_ACCESS_KEY=*********************************

この状態でKeychain Accessを開いて"envchain"を検索すると、2つの変数が登録されているのが確認できる。

環境変数を復号した状態でコマンドを実行する

envchainenvchain ネームスペース 実行したいコマンドの順で引数を渡すと、環境変数を復号した状態でコマンドを実行してくれる。例えば、aws iam get-userを実行させるときは次のようになる:

❯ envchain aws aws iam get-user
{
    "User": {
        "Path": "/",
        "UserName": "suin",
        "UserId": "*************",
        "Arn": "arn:aws:iam::************:user/suin",
        "CreateDate": "2014-01-29T08:12:23Z",
        "PasswordLastUsed": "2017-01-16T00:41:34Z"
    }
}

この例のaws awsは誤植ではない。左はネームスペース、右はawscliだ。

XOOPSのモジュールはGPL2で配布しないといけない?

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への変更点

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
  • suin
  • スイナシア in XOOPS, プリロード, ダウンロード, PasswordLimitter
ダウンロード

パスワードは定期的に変更するほうがより安全と言われています。PasswordLimitterは、XOOPSのユーザのパスワードに期限を設け、期限がすぎたユーザに対しては、ログイン時にパスワード変更を促すメッセージを表示します。

インストール方法

  1. PasswordLimitter.class.phpを/preloadにアップロード
  2. 管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス
  3. 「INSTALL」をクリックしてインストールを実行
  4. その後、設定ページで期限日数を設定する

アンインストール方法

  1. 管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス
  2. 「UNINSTALL」をクリックしてインストールを実行
  3. PasswordLimitter.class.phpを/preloadから削除

変更点 1.0 => 1.2

  • ユーザ新規登録時に有効期限がセットされないバグを修正。

1.1とばしてしまった…orz

開発情報

ユーザのパスワードに期限をつけるプリロード PasswordLimitter 1.0

パスワードは定期的に変更するほうがより安全と言われています。PasswordLimitterは、XOOPSのユーザのパスワードに期限を設け、期限がすぎたユーザに対しては、ログイン時にパスワード変更を促すメッセージを表示します。

インストール方法

  1. PasswordLimitter.class.phpを/preloadにアップロード
  2. 管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス
  3. 「INSTALL」をクリックしてインストールを実行
  4. その後、設定ページで期限日数を設定する

アンインストール方法

  1. 管理アカウントで、http://あなたのXOOPS/misc.php?password_limitter=adminにアクセス
  2. 「UNINSTALL」をクリックしてインストールを実行
  3. PasswordLimitter.class.phpを/preloadから削除

開発情報

統合メッセンジャーPidginでNateOnを使おう

PidginはWindowsで使える統合メッセンジャーです。なので、Pidginをインストールするだけで、MSNメッセンジャー・Googleトーク・Yahooメッセンジャーなどを同時に使うことができ便利です。

NateOnは韓国で最もシェアのあるインスタントメッセンジャーです。Windowsであれば、NateOnをインストールすることができます。しかし、韓国語のソフトであるためか、日本語Windowsでは文字化けを起こすことがしばしばあります。また、NateOnは基本的に韓国語のインターフェイスになるので、韓国語に不慣れな人には操作が難しい面もあります。

そこで、NateOnを日本語にきちんと対応してあるPidginで使うことをおすすめします。PidginでNateOnを使うためには、以下のファイルをダウンロードします。

  • Pidgin本体
  • Pidgin用NateOnプラグイン

Pidgin本体のダウンロード手順

  1. http://www.pidgin.im/(英語)にアクセス。
  2. Pidginをダウンロードする。

Pidgin用NateOnプラグインのダウンロード手順

  1. 配布先にアクセス。
  2. 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のアカウントの追加は、以下の手順で行います。

  1. 「アカウント」→「Manage Accounts」
  2. 「Add」をクリック
  3. 「プロトコル: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
  • suin
  • スイナシア in XOOPS, プリロード, ダウンロード, SuinDebug
Download

SuinDebugプリロードは、たったひとつのファイルで、あなたのXOOPS Cube Legacyでのデバッグをよりスムースにするためのサイトプリロードです。

HD画質なので、フルスクリーンで見るのをおすすめします。

特徴

  • サイト(開発環境)を汚さない

    SuinDebugは、たったひとつのファイルからなるサイトプリロードです。{stdout_buffer}をテーマに書くことでテーマが汚れるデメリットや、デバッグ関連のファイルをいくつもアップロードすることで、開発パッケージに余分なファイルがあふれるデメリット、デバッグ関連の情報をデータベースに保存することで、データベースに不必要な情報が紛れ込むデメリットが一切ありません。
  • エラーで画面を汚さない

    SuinDebugは、PHPやMySQLなどのデバッグ情報をウェブページに直接出力しません。デバッグ情報などによる、レイアウト崩れ・ソースの汚損からま逃れることができます。
  • ポップアップウィンドウを開かない

    SuinDebugを使えば、デバッグのためにこれ以上ポップアップウィンドウを開く必要はありません。デバッグ情報はJavaScriptによるモーダルウィンドウで表示されます。つまり、ひとつのウィンドで完結するので、ポップアップからくるストレスを軽減できます。
  • それなりのインターフェイス

    エラーSQLやDelegateのハイライト機能など、視覚的な面が考慮されています。また、デバッグモードを切り替える必要なしに、SQL, Delegate, XoopsTpl, stdout_buffer, PHP Errorsを一様に閲覧することができます。

使い方

  1. SuinDebugをダウンロードします。
  2. それを解凍して、{XOOPS_ROOT}/preload/に保存します。
  3. JavaScriptをONにした状態で、管理者アカウントでログインします。
  4. 管理画面でPHPデバッグモードをONにします。
  5. ウィンドウ上端から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

  1. Please Download SuinDebug.
  2. Please Upload it to {XOOPS_ROOT}/preload/
  3. Please Turn on JavaScript and login as site admin.
  4. Please Turn on PHP debugging mode in legacy module.
  5. 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 月額制の解約方法

Windows付属のIMEがいやでいやでATOK(月額制)を使っていました。しかし、ATOKの必要性がそこまでなくなってきました。というのも、Google日本語入力が出てからすっかりATOKを使わなくなってきたのです。なので、ATOKを使わなのに毎月315円を払うのも勿体無い。そう思い、ATOK月額制を解約してきました。ということで、ATOK解約方法を画像を交えて説明したいと思います。

  • www.justmyshop.comにアクセスして、ログインします。

  • 「お客さまカウンター」を開きます。

  • 「定額利用サービス」の「契約内容の確認・解約」を開きます。

  • 内容を確認して「解約する」をクリックします。/p>

  • さらに、「解約する(解約の受付)」をクリックします。

  • 解約完了画面が出ます。以上です。

ATOKさん、お世話になりました。いままでありがとう。Googleさんは、アップデートもいちいち出たりしないで良い人です^-^。

jQueryの世界で最も単純なプラグインの作り方サンプル

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

XOOPS Cube Legacyでの開発に便利なチートシート「XOOPS Cube Legacy Developer's Cheat-sheet」を更新しました。今回追加したのは、smartyの変数などです。1.1では、ライセンスを明確にしていなかったのですが、1.2からはライセンスをクリエイティブコモンズライセンス 表示2.1としたいと思います。ライセンスの許す範囲でお好きにお使い下さい。

日本語版

English version


この作品は、クリエイティブ・コモンズ・ライセンスの下でライセンスされています。

XOOPS 一般設定しかない管理画面は一般設定に転送する

モジュールを作っていると、管理画面に一般設定しかないというケースがあります。この場合、管理画面のトップ(/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 でカスタムブロックを作成する方法

カスタムブロックは、通常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

ダウンロード

ながらくメンテナンスしていない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旧バージョンも)

メモ的エントリー。XOOPSCubeが出てから、XOOPS2を使うことも少なくなったが、全くないわけではない。XOOPS2の旧バージョンをダウンロードしたくて検索しても、なかなか出てこないので、ここにブログとして残しておこうと思う。

学年から年齢を調べるサービスをはじめました

なんさいナビ(http://nansai.suin.org/)

新年あけましておめでとうございます。ということで、新年は親戚と会う機会が多いのですが、子どもがいるいとこが多くなったと実感するこのごろです。子どもの学年は知ってるけど、何歳だっけ?、簡単に調べられたらなあ、と思ったのがサービス提供の切っ掛けになりました。

学年と年齢くらいなら、対応表を作っておけばよさそうですが、あえて問答式のサービスにしました。なんでそうなったかですが、なんさいナビがGoogleの検索結果に上がることで、Googleで「中1 年齢」や「小学2年生 何歳」などと直感的に検索するだけで、検索結果から年齢が分かるような仕組みにしたかったからです。やってみると分かりますが、意外と上のキーワードで年齢をすぐに知れるページは見つかりません。

検索窓に「小4」などのキーワードを入れることで、年齢を調べられます。調べた結果は、一定のURLになり、Googleボットがクロールできる形になります。

今のところ、学年情報と年齢情報が帰ってくるだけです。今後は、生まれた年(西暦・和暦)の情報を表示したり、Wikipediaに関連づけたりできたらいいかもと思ってます。

Microsoft Producer 2003のランタイムエラー

Microsoft Producer for PowerPoint 2003はPowerPointのスライドに、動画でナレーションをつけることができるソフトです。Microsoftのサイトにて無償で提供されているので、PowerPoint 2003がインストールされた環境では、自由に使うことができます。

Producerでスライドに動画ナレーションをつける方法

  1. Producerを立ち上げたら、「ファイル」→「インポート」でナレーションをつけるスライドを選択します。
  2. インポートが完了したら、「取り込み」をクリック。
  3. ガイダンスに従って、ビデオの画質・ビットレートなどを設定します。
  4. 設定が完了し、スライドと自分が映っているウインドウがでたら、「取り込み」をクリック。
  5. 「次のスライド」をクリックするとスライドが変わります。
  6. ナレーションを終えたら取り込みを停止します。これで、スライドに合わせて、ナレーションがつきます。

動画キャプチャ中に起こるランタイムエラー

Windowsの環境によっては、上の4の直後に「ランタイムエラーが発生しました。デバッグしますか」というエラーが出ることがあります。このエラーが起こると、ステップ5で「次のスライド」をクリックしても、スライドが移り変わらなくなってしまいます。

これは、Internet Explorer 7がProducerに対応していないためです。Internet Explorer 7を一旦削除し、Internet Explorer 6を入れなすことで、ランタイムエラーを起こさないようにできます。

MacBook Air + VMware Fusion + Windows XP 実用範囲内

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

ダウンロードShioriモジュールは、ユーザが個人のブックマーク帳を所有でき、サイト内のあらゆるページをブックマークできるようにするモジュールです。読みかけのページ、毎日チェックする掲示板、いつか役立つかもしれない記事などを見失わないようにすることを目的に作られました。

機能の詳細は、Shiori 1.00のページで紹介しています。

変更点 1.01 → 1.02

  1. 管理画面に「ブックマーク統計」ページを追加
  2. jQueryがロードされていない場合は、モジュール同封のjQueryを読み込むように変更(ユーザーがテーマを編集する必要がなくなりました。)

上のように管理画面でユーザがブックマークしたページの統計を見られるようにしました。この機能は、Shiori 0.xにあった機能ですが、1.xを開発するときに削除しました。しかし、統計が便利という意見をいただいたので、復活することにしました。たぶん、ソート機能が充実したおかげで、0.xの統計より若干便利になっていると思います。(0.xの統計がどんなだったか思い出せないw)

アップデート 1.x → 1.02

サーバ上のshioriフォルダを削除したあと、1.02のshioriをアップロードしてください。その後、モジュール管理でshioriモジュールの「アップデート」を実行してください。

Koins 1.00

ダウンロード

このモジュールについて

logo.png

Koinsモジュールは、パーツを選んでいくとモジュールアイコンを作ることができます。 特別な画像編集ソフトがないモジュール開発者もアイコンを手軽に作ることができます。 パーツになる素材画像を追加すると、作れるアイコンのバリエーションを増やすことも可能です。

外部モジュールに反映する機能(YouTube動画)

WindowsやMacなどの書き込み権限が自由なローカル環境では、作成したアイコンを直接モジュールに反映することができます。 外部モジュール反映機能は管理者のみが使用できます。

動作環境

PHPバージョン 5.2.4 以上
GD 必須
XOOPS XOOPS Cube 2.1.6 / XOOPS 2.0.16a
文字コード UTF-8 / EUC-JP

特徴

  • モジュールアイコンを作成する
  • モジュールアイコンをダウンロードできる
  • モジュールアイコンを外部モジュールに反映できる

インストール方法

  1. 圧縮ファイルを解凍して、koins を html/modules/ の下にコピーしてください。
  2. 「モジュール管理」でインストールを実行してください。
  3. 「グループ管理」で使用を許可するグループにアクセス権限を与えてください。

アンインストール方法

  1. 「モジュール管理」でKoinsモジュールを非アクティブに変更後、アンインストールを実行してください。
  2. 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メソッドに対応関係をマッピングしています。

To Top