Folksonomy : del.icio.usとFlickrを支える情報アーキテクチャ:Goodpic

階層構造を持たない、完全にフラットなネームスペース。XMLでおなじみの、Parent(親)・Child(子)・Siblingといった構造を持たない情報アーキテクチャ

Rails-Ajaxのデモを見て階層構造を持たない分類ってシンプルでいいなと思いました。
整合性もあまり気にしなくていいし、悩まずサッと付けれられるのでそれほど分類してる感が無いのがいい。何よりタグって呼んでるがいい。だって普通にカテゴリーだったら流行らなかったよ?

JavaScript面白い!
目標はPrototypeが読めるようになること。(=現状、読めない・・・)

今日びのJS事情に追いつくために基本的なところから勉強していきます!
まずはHTMLとイベントを分離する方法。

<button id="push">push</button>

こんなHTMLに、

<script type="text/javascript">
<!--
window.onload = function() {
    document.getElementById("push").onclick = function() {
        alert("push!");
    }
}
//-->
</script>

イベントをHTMLに書かずに直接入れます。HTML拾うには読み込みが終わってる必要があるのでonloadに設定。 Webアプリをやっていると馴染み薄いですが、無名インナークラスをリスナに登録する感じでしょうか。(Geckoエンジンだと正にaddEventListenerメソッドが使えるようです)
ああ、これは気持ちいいわ。

ref: イベントハンドラをHTMLから分離する

ml_dbobject.png

PEAR MLより。
DataObjectはある意味話題が尽きません・・・。

Mojavi + Smartyでコンポーネント化されたテンプレートはどうやって作るんだろうか・・・。

コンポーネント化されたテンプレートとは要するに

form1.png

こんな奴を

{$loginForm}

って感じで埋め込みたいってこと。
Filterでやろうにも特定のいくつかのページにだけ埋め込みたいし、Actionとテンプレが一緒になったものとしてほしいのでforwardやActionChainもどうもうまくない。それっぽいのがあった気がするブタさんとことももう見れなくなってるし。
たぶん仕事で使ってる人がみんなやってる方法っていうのがあると思うんですが・・・

神の子どもたちはみな腕を磨く: PHP

現在開発中のMojavi 2.0.0を使っている案件で$controller->forward()を実行しているアクションの挙動がおかしいので調べたところ、この事実を知ることになり驚愕しました。超ショック。

まさに、「ここはforward()のためにあったのね」でした。ためんなるわあ。

FreePAN: blog.bulknews.net

CPAN を補完しつつ、Perl 以外の言語でも使えるようにしようというプロジェクト FreePAN がスタート。Free Programming Archive Network の略で、Subversion レポジトリのミラーリングと、開発者の追加などが簡単に行えるような感じ。

言語問わないCPAN?こりゃ速攻でなんか上げたろ思いましたが、

FAQ Kwiki

How can I get a FreePAN account?

FreePAN accounts are initially being distributed manually. Join the FreepanIrc channel and ask for an account.

まだサイト上からアカウント発行とかはできないみたいです。

アレのやり方がわかったのでコレを作りました。

<?php
require_once("AllSession.php");
$allSession =& new AllSession();

echo "<pre>";
// セッションIDの配列
print_r($allSession->sessionId);
// $sessions["セッションID"] = セッションの中身
print_r($allSession->sessions);
echo "<pre>";
?>

session.save_pathからsess~というファイルを復元しています。
共有サーバなんかはsafe mode or CGI&SuEXECが必須かもしれないですね。

AllSession.php

ref: セパレータとして ””|”” を使ってるんですよ
ref: PHPのセッション自力復元

Mojavi + DB_DataObject使ってるとやっぱり、

$Member =& DB_DataObject::factory('Member');
$Member->get("userName", $request->getParameter("userName"));
if ($Member->password == md5($request->getParameter("password"))) {
    $user->setAuthenticated(true);
    $user->setAttribute("Member", $Member);
}

こんな感じで$userに$Memberを突っ込んだりしたくなるわけですよ。
でも悲しいことにPHPのセッションはリクエスト毎にファイルにserialize ⇒ ファイルからunserializeをしてるだけなのでunserializeするとき(session_start時)にクラスが宣言されて無いとPHP_Incomplete_Classという謎オブジェクトが。
Mojaviでsession_startはSessionContainer#loadでやっているのでFilterでは遅いようです。しょうがないので
PHP_Incomplete_Classが現れた時に動くコールバック関数を指定するunserialize_callback_funcを使って無理やり読み込むことにしました。

<?php
ini_set("unserialize_callback_func", "findIncompleteClass");

function findIncompleteClass($className) {
    $config = parse_ini_file(BASE_DIR."configs/DB_DataObject.ini", true);
    $name = str_replace(strtolower($config["DB_DataObject"]["class_prefix"]), "", $className);
    include_once($config["DB_DataObject"]["require_prefix"]."/".$name.".php");
}
?>

これもっといい方法無いのかな。

PEAR :: PEPr :: Details :: RSSBuilder

This is an RSS (Reach Site Summary) PHP Class, which make use of PHP DOM extension to produce valid RSS Feeds in one of the most common RSS formats such as ‘RSS 0.91’, ‘RSS 0.92’, ‘RSS 1.0’, ‘RSS 2.0’, ‘Atom’, ‘JavaScript’. The output maybe cached in a file. For more info take a look at ’./RSSBuilder/example.php’.

正しいRSSを作ってくれそうなRSSBuilderがPEAR proposalに。

書く方は普通に書いてもそんなに大変じゃないですが、コレ使ったら気持ちよさそう。

PEAR :: Package :: XML_FastCreate

Description

- Easy way to make valid XML :
$x->div(
$x->h1(””Example”“),
$x->p(””Hello”“),
$x->p(array(‘class’=>‘example’), ””World !”“)
)

おれの求めてたのはコレか?と思わせるXML_FastCreate 1.0.0がリリース。

XML_Treeとコレで4系でも扱いが簡単になるのかも。今度使ってみたい。