PHP の unserialize() の 多言語での実装

  を見ていて,PHP の serialize() は便利だから,もしかしたら他の言語でも実装があるのでは?
  と思ったら,案の定たくさんあった.

- JavaScript
  http://www.phpguru.org/static/PHP_Unserialize.html
  http://www.phpguru.org/downloads/PHP_Unserialize/

- Perl
  http://search.cpan.org/dist/PHP-Serialization/lib/PHP/Serialization.pm
  http://hurring.com/code/perl/serialize/

- Ruby
  http://www.aagh.net/projects/ruby-php-serialize

- Java
  http://hurring.com/code/java/serialize/

- Python
  http://hurring.com/code/python/serialize/

- C#
  http://sourceforge.net/projects/csphpserial/

- Flash/ActionScript
  http://sourceforge.net/projects/serializerclass/

- via: Using Serialized PHP with Yahoo! Web Services
  http://developer.yahoo.net/common/phpserial.html#otherlangs

- ref.: Web屋のネタ帳
  http://neta.ywcafe.net/000544.html

はてなブックマーク件数を blog に貼り付けるウィジェット

  ウィジェットというほどのものではないけど,はてなブックマーク件数を簡単に blog に貼り付けることが出来る部品を作ってみました.
  はてなブックマーク件数とは以下の画像の赤枠のようなものです.

  はてなブックマーク件数


  この赤枠の中で囲まれた部品を blog に貼り付けることが出来ます.


  このウィジェットの使い方はとても簡単で

<link rel="stylesheet" type="text/css" href="./styles/hatebu-count.css" />
<script type="text/javascript" src="./js/prototype.js"></script>
<script type="text/javascript" src="./js/hatebu-count.js"></script>


  をヘッダに書いておいて

<p id="hatebu-count"></p>


  id に hatebu-count を持つ要素 (この場合は p) を一つ用意しておくだけ.あとはこれを貼り付けたページのはてなブックマーク件数が
  ここに,表示されます.

  以下,サンプル.このページ (表示されている URI) のはてなブックマーク件数.



  (Ajax を使って非同期で読み込んでいるので,そのうち表示されるはずです)

  動作確認をしたのは,Forefox 1.5.0.1,IE 6.0,Opera 8.2,Netscape 7.1 いずれも Windows 版です.


  このウィジェットを作ったきっかけは,prototype.js を読んでいたら,Ajax.Request に evalJSON なんてメソッドがあって,どうもこれは

X-JSON

  というヘッダに入っている,JSON データを処理してくれるものらしいです.これを見つけて何か作ろうかなと...


  このウィジェットの仕組みは

  まず,ページが読み込まれると Ajax で hatebu-count.cgi を呼び出しています.
  hatebu-count.cgi は何をやるかというと,はてなブックマーク件数取得 API を XML-RPC で取得して JSON で返します.
  あとは,それを表示するだけですね.

  図に示すと以下の通り.

  はてなブックマーク件数を blog に貼り付けるウィジェット

  今回は練習を兼ねて初めて Ruby で書いてみた.XML-RPC ライブラリが標準で入っていたりしてなかなか使いやすかった.
  ちなみに,Ruby 1.8.2 より前に含まれる XML-RPC には脆弱性があるらしいので注意が必要.

  CGI のソースは以下のようになっています.

続きを読む

prototype.js 1.5.0_pre0 の $$() のデモ

  prototype.js 1.5.0_pre0 から $$() という関数が使えるようになりました.
  これは,CSS のようなのセレクタを使って要素を指定できるもので,ChangeLog によると

$$('div#page p.summary img').each(Element.hide)


  これで,id が page な div の孫要素で,class が summary の p の孫要素 img が選択できます.
  早速,これを使って,フォームの入力項目の disable を切り替えるデモを作ってみました.

- prototype.js 1.5.0_pre0 の $$() のデモ
  http://pocari.org/demo/prototype-1.5.0_pre0-daller-daller/

  prototype.js 1.5.0_pre0 の $$() のデモ

  ただし,これ,Firefox 以外では動きません.Opera 8.5 でも Netscape 7.1 でも動きません.
  でも,せっかく作ったので公開しておきます.
  ちなみに Firefox 1.5.0.1 で動作確認をしています.

  JavaScript のソースは以下のようになっています.

var ToggleForm = Class.create();
ToggleForm.prototype = {
    initialize: function () {
        $('input_on').checked = true;
        // form#menu input.item にイベントハンドラを追加
        $$('form#menu input.item').each(this.addToggleEvents.bind(this));
    },
    addToggleEvents: function (value, index) {
        // value は form#menu input.item の要素 (入力可能/入力不可)
        Event.observe($(value), 'click', this.toggle.bindAsEventListener(this), false);
    },
    toggle: function (event) {
        // イベントが発生した要素
        var element = Event.element(event);
        this.disabled = $F(element) == 0 ? true : false;
        $$('form#register input').each(this.doToggle.bind(this));
    },
    doToggle: function (value, index) {
        // value は form#input input の要素 (名前,メールアドレス...)
        $(value).disabled = this.disabled;
    }
};

Event.observe(window, 'load', function () {
    new ToggleForm();
}, false);


  まず以下のように

$$('form#menu input.item').each(this.addToggleEvents.bind(this));


  で,id が menu なフォームで class が item な 孫要素 input それぞれに対して,click なイベントハンドラを追加していきます.
  デモページの [入力可能],[入力不可] の部分です.そして,

addToggleEvents: function (value, index)


  ここで,実際にイベントハンドラを追加しています.

  イベントが発生した場合は

toggle: function (event)


  が実行されてこの中では,

$$('form#register input').each(this.doToggle.bind(this));


  このように,id が register な form の 孫要素 input に対して処理が行われるようになっています.

  流れとしては単純なのですが,前述のように Firefox 以外では動きませんね……
  とりあえず,ここまでとして,いったん公開しておきます.

壁紙になる prototype.js の Cheat Sheet

- Prototype Dissected
  http://www.snook.ca/archives/000531.php

  prototype.js Cheat Sheet

  おなじみ prototype.js の Cheat Sheet を壁紙サイズで.
  ただし,サイズは 1280x960 か 1440x900 の 2 種類.

  試しに壁紙にはってみたけど,目障りでかなわない.

JavaScript と CSS によるクロスフェードの実現

- Image Cross Fader Redux
  http://slayeroffice.com/code/imageCrossFade/xfade2.html

  面白いんだけど,かなり CPU をつかうなぁ.

Ajax と OpenSearch と はてなダイアリーキーワード連想語 API を使ったはてな検索のデモ

  http://pocari.org/tools/ajax/opensearch/

  はてなダイアリーキーワード連想語 API が面白かったのと,PHP から使える PEAR::OpenSearch を発見したので
  Ajax と OpenSearch と はてなダイアリーキーワード連想語 API を使ったはてな検索というものを作ってみました.

  

  OpenSearch には PEAR::OpenSearch を,はてなダイアリーキーワード連想語 API には PEAR::XML_RPC を使っています.
  また,JavaScript のライブラリは prototype.js と script.aculo.us (effects.js のみ) を使っています.

  やっていることは簡単で,入力された検索語の関連語を XML RPC で はてなダイアリーキーワード連想語 API を使って呼び出してきます.
  また,検索語を OpenSearch のはてな検索から検索してくるということだけです.
  検索結果は,上位 10 件を表示しています.10 件以上あってもそれ以上は検索結果には表示できません.

  それを prototype.js の Ajax クラスで呼び出して,effects.js でアニメーションしながら表示しています.

  使い方は,検索語を入れて [Search] ボタンを押すだけ.
  はてなダイアリーキーワード連想語がある場合は,検索結果といっしょに表示されるので,さらに連想語のリンクを選択すれば
  その連想語で再検索をします.

  動作確認は Forefox 1.5,IE 6.0 (ともに Windows 版) で行いました.それ以外のブラウザで動作するかは不明です.

  ソース一式も置いておきます.ライセンスは Creative Commons 帰属 とします.

- ソース一式 (tar.bz2)
  http://pocari.org/tools/ajax/opensearch/ajax-opensearch.tar.bz2

- Creative Commons Deed
  http://creativecommons.org/licenses/by/2.1/jp/

- ref.: PEAR :: Package :: Services_OpenSearch
  http://pear.php.net/package/Services_OpenSearch/

- ref.: はてなダイアリー - はてなダイアリーキーワード連想語APIとは
  http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%c0%a5%a4%a5%a2%a5%ea%a ...

  また,本デモを作る際に下記のサイトを大いに参考にしています

- HOWTO: Animated Live Search // Ordered List by Steve Smith
  http://orderedlist.com/articles/howto-animated-live-search/

Web アプリケーションテストツール Selenium のテスト記述から開放してくれる Firefox 拡張 Selenium IDE

  http://www.openqa.org/selenium-ide/

  JavaScript を使ってブラウザを介して Web アプリケーションのテストをしてくれる
  とても便利な Selenium.

  Selenium のテストを書くのが結構めんどくさかった.
  このテスト記述から開放してくれる Firefox の拡張があった!

  Selenium IDE

- Selenium
  http://selenium.thoughtworks.com/

続きを読む

Ajax と Google Toolbar Spell Check API を使ったスペルチェッカー

- GoogieSpell - Gmail like spell checker
  http://amix.dk/googiespell

  GoogieSpell

  Google Toolbar にスペルチェックをする機能があるらしくて,どうも Google と XML でやり取りしているみたい.
  その API を使ったスペルチェッカー.

テストを楽にするための Auto Fill Bookmarklet

  http://memo.xight.org/2006-02-10-3

  なかなか便利.ただ,id を全部に設定していない場合が多いと思う.
  その場合は getElementById を getElementsByName に変更すればいい.
  ただ,この場合も name が一意でないといけないけど.

<form>
<p>
    <input name="name" />
    <input name="mail" />
    <input name="company" />
    <input name="position" />
    <input name="post" />
    <input name="zip" />
    <input name="address" />
    <input name="tel" />
    <input name="fax" />
    <textarea name="contents"></textarea>
</p>
</form>

javascript:(function(){
    function set(name,val){
        document.getElementsByName(name).item(0).value=val;
    }
    set('name','User Name');
    set('mail','user@example.com');
    set('company','Xight Inc.');
    set('position','Web Solution Group');
    set('post','Sub Leader');
    set('zip','000-0000');
    set('address','Tokyo');
    set('tel','00-1111-2222');
    set('fax','00-1111-3333');
    set('contents','This is test.\nThis is test.');
})()

わずか 3K の軽量 JavaScript エフェクトライブラリ moo.fx

  http://moofx.mad4milk.net/

  わずか 3K しかない JavaScript のエフェクトライブラリ.
  アニメーションしながら要素を閉じたり開いたりくらいなら,script.aculo.us はいらないかも.
  prototype.js 必須.MIT ライセンス.