Jeans & Development:2008年 03月の記事

PHPで動的OOPもどき [プログラミング]

2008年3月26日

PHP5では、クラスで__call()メソッドが使えるので、JavaScriptみたいな動的オブジェクトが作れそう。

<?php

$obj=(object)$obj;
$obj->testfunc=create_function('$i','return $i+1;');
//echo $obj->testfunc(2);// Fatal Error
$f=&$obj->testfunc;
echo $f(2);// 3

$obj=new dynamic_obj;
$obj->testfunc=create_function('$i','return $i+1;');
$obj->testfunc2=create_function('$i','return $i+2;');
echo $obj->testfunc(2);// 3
echo $obj->testfunc2(2);// 4

$obj->__destruct=create_function('','echo "__destruct!";');//__destruct!

class dynamic_obj{
    public function __call($methodname,$args){
        return call_user_func_array($this->$methodname,$args);
    }
    public function __destruct(){
        if (isset($this->__destruct)) call_user_func($this->__destruct);
    }
}

実行結果

334__destruct!

どんなときに便利か、今は思いつかないけれど。

PHPでクロージャもどき [プログラミング]

2008年3月25日

クロージャとは何かと言う話。

これを知るため、Googleで『クローじゃ』もとい『クロージャ』で検索すると、最上位に出るのがこれ。

クロージャ - Wikipedia

これによると、

クロージャ (Closure) は、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。

とのこと。ちなみに、『クローじゃ』で検索すると、次のものが出る。

PHPでクローじゃもどき - odz buffer

JScriptでinputBoxを使う [プログラミング]

2008年3月25日

マイクロソフトの新しいシェル、PowerShellについて色々と見ていて、私自身が一番分かりやすい説明だと思ったのが、次の記事。

Windowsスクリプティング環境比較:PowerShell vs WSH

PowerShell自身について何か書くのは別の機会に譲るとして、これを読んで面白いことに気がついたので、メモ。この記事の中から、マイクロソフトの次のページにリンクされている。

Converting VBScript Commands to Windows PowerShell Commands

VBScriptでできることは一通りPowerShellでできるらしい。で、思い出したのが、inputBox。これは、WSHにおいてはVBScriptにだけ実装されている機能で、JScriptでは使えない。PowerShellではどうかと、調べてみた。

SFC miniのインストールがWindows Vistaで失敗する件について [プログラミング]

2008年3月21日

現在配布中のSFC mini ver 1.0.1をWindows Vistaにインストールしようとすると、次のようなエラーが出てインストールできません。

the call to DLLRegisterServer failed with error code 0x80004005

このエラーを回避するためには、次に述べるいずれかの方法を用いてください。

1)管理者としてコマンドプロンプトを開き、SFC mini ディレクトリに移動した後に、install-AMD.vbsもしくはinstall-INTEL.vbsを実行する。
2)MakeExeを用いてinstall-AMD.vbsもしくはinstall-INTEL.vbsをexeファイルに変換した後、このexeファイルを管理者として実行する。

いずれの方法でもインストール可能なはずです。

また、Windows Vistaのバグだと思われること(下記参照)が原因で、サンプルプログラムのいくつかが動きません。VBSファイルを少し改変することで、この不具合を回避することができます。例えば、WinSockClient.vbsの場合だと、2行目あたりを次のように変更してください。

dim code
code=CreateObject("SfcMini.tools").Include("<Winsock.vbs>")
Execute code

WinForm等のライブラリを用いているスクリプトについては、ライブラリ自身のVBSファイルを変更する必要があります。これについては、時期配布バージョンで対応する予定です。

(参考)

1)この不具合についてですが、COMからの戻り値である文字列を直接Executeした場合に、Execute自体は成功するけれども、その直後に不具合が発生するという状況です。ガベージコレクタ周りの不具合では無いかと考えています。WSHのこのような利用の仕方はまれなケースなので、Windows側でこのことについて改善されるかどうかは分かりません。

2)Windows Vistaでは、wscript.exeに対してDEPを無効にすることはできないようです。WinForm等を利用するスクリプトを実行する場合は、install-AMD.vbsを利用してください。

スパム対策ロードマップ [Nucleus]

2008年3月16日

スパム対策ロードマップを少し変更することを考えている。

Googleで『CAPTCHA』というキーで検索した場合に上位に出てくる記事に以下のものが有る。

CAPTCHAは愚策

CAPTCHAが人間に一手間とらせるのが嫌いと考えるのは私も同じで、だからこのサイトではProtectByMD5を採用している(JavaScriptを利用)のだが、この方法は上記サイトで提案している方法の一つである。ただ、心配されているとおり、ブラウザの機能をそのままスパムロボットが持ってしまった場合(実際には、これはそれほど難しくない)、そういったロボットにはJavaScriptの難しい計算は何の問題にもならなくなる。