遷移の制御がしたければPEAR HTML_QuickForm_Controllerだという情報により調べてみました。

hatotech::kumatch: HTML_QuickForm_Controller

(1) HTML_QuickForm Controller Page を Form page 分作成 (2) Controller に Add (3) Validate 遷移終了時の動作決定 (4) Controller run

pearコマンドからインストールしてPEAR/docsにあるexamplesを見てなんとなくわかったような気になる。 が、まだわかってないと思う。一度『登録→確認→完了』とか『編集→確認→更新完了』とかやってみないと・・・。

PEAR HTML_QuickFormをPEAR HTML_QuickForm入門ガイドを見ながらサンプルを動かしてみた。

「・・・意味がわからん」

『Formを作ってくれて、一個の記述(ruleのadd?)でクライアント側とサーバー側のValidationをやってくれる物』だと思ってたんですが・・・

「freeze() って何だよ!?」

勝手に確認画面作んなよ!っていうかこの画面はどこから来た?日本では古来から『登録 → 確認 → 完了』だろ!エラーメッセージはなんでそこに出るんだよ!HTML_QuickForm + Smartyで単純な登録確認完了のサンプルはないノアk歳栄jfshsjfhすうぇうh!!!

・・・ぁあ、どうやらおれは全然わかってないみたいです。

Debian GNU/Linux Expertデスクトップユ
技術評論社書籍編集部
技術評論社 (2004/08)
売り上げランキング: 6,101
通常3日間以内に発送します。
おすすめ度の平均: 4
4 デスクトップ環境でDebianの最新版を使おうという人は持っておくべき一冊

待望のDebian本ということで購入しました! ・・・が、内容の方は・・・(´・ω・`) 2chのDebianスレでも「内容が微妙でも買っておけば次があるかもしれんじゃないか。お布施ってやつだ。」とか「ムトゥ期待sage」とか言われてます。

Debian GNU/Linux 徹底入門の著者の武藤健志氏。近々ムトゥ神のDebian本が出ると噂されている。Blogで言えばのようなものか。

社内の開発方法標準化に取り組んでいます。

基本的にPHPでもオブジェクト指向開発&標準的なツール・ライブラリを使おうよってことで進めてるんですが穏やかに民主的に進めようとすると全然決まりませんな。

今更なにあたりまえのこと言ってんの?と思う人もいるかもしれませんが、結構多いんですよ、 「ファンクションベースで一から全部書くべきだ!」 とか 「オブジェクト指向開発は導入コストがかかりすぎる!」 といった反論に出会うことが。

そんな議論に付き合って半年ほど様子を見てきましたが、俺が責任者になったからにはそんなことを言う奴はフライス盤で右腕を切り落としてやる!

とりあえずPHPに関するところはこんな感じで行くことにします。(守らない奴はRS232Cケーブルで首を(略))

・フレームワーク(検証中)  ・Mojavi ・データベースコネクション  ・PEAR DB ・テンプレートエンジン  ・Smarty ・エラーハンドリング  ・PEAR PEAR ・O/Rマッパー  ・PEAR DB_DataObject ・Unitテスト  ・PEAR PHPUnit ・ユーザー認証(検証中)  ・PEAR LiveUser or PEAR Auth ・入力検証(検証中)  ・PEAR HTML_QuickForm ・ロギング(検証中)  ・PEAR Log or syslog ・データベース  ・MySQL4.0.20

そして2つのプロジェクトで試してみて良い感じだったのでPHPUnitによるテストファーストも必須にしました。 プロジェクトを成功させるにはこんな決めれば済むことはさっさと決めてしまって、メンバーのモチベーション管理や顧客とのコミュニケーションに時間を使いたいものです。

今後、この案が本当に通るのか、とか実際にやってみたら糞駄目で逆に左腕を切り落とされたとか、見守りつつ書いていこうと思います。PHPで開発をしている人は普通この辺の標準化をどうやって行っているか知りたいもんです。

PHP小ネタ。

PATH_SEPARATORという定数がある。これはWindowsだと””;”“、UNIXだと””:”“になっている。 何に使うかというとinclude_pathのセパレータとかに使う。

ini_set("include_path", ini_get("include_path").PATH_SEPARATOR."lib/");

IRCでariaが「Amazonで検索すると価格だけ出るようようなものができないか」という話をしていて、興味があったのでAmazonのWebサービスについて調べてみました。

PEAR XML_RPCを使ってみようと思ったんですが、よく見たらAmazonが提供するAPIはSOAPとRESTでした。AmazonのREST APIはパラメーターにxslも指定できるのでxslを用意するだけでいい感じの表示を得られるんですがやはりPHPで受け取ってパースすることに。

しかし作ろうと思ったとき何故かPEARのサイトが落ちてたのでリクエストの結果のXMLはxml関数でパースしました。(後日試したところPEAR XML_Treeは日本語文字化けした。みんな普通は何でパースしてるんだろう?)

少し面白げだったのでSmartyのキャッシュ機能とPEAR Pager_Slidingを使って価格調べ専用検索を作ってみました。

AmazonPriceSearch

Smartyのキャッシュ機能、強力でした。この場合、カテゴリー名・検索ワード・ページ番号を繋げてキャッシュIDにしてあります。キャッシュがある場合はバックエンドのWebサービスやDBにアクセスしないで表示するので相当パフォーマンスに影響あると思います。

Amazon Hacks 世界最大のショッピングサイト完全活用テクニック100選
ポール・ボシュ 篠原 稔和 ウェブ・ユーザビリティ研究会
オライリー・ジャパン (2004/04/24)
売り上げランキング: 2,320
通常24時間以内に発送します。
おすすめ度の平均: 3.2
4 Amazon を使いこなすために
5 アマゾンをもっと使いこなすための1冊
1 翻訳する価値があったかどうか疑問

ここ2日ほど料金未払いでNTTにアカウント止められてました。すみません。

最高に強まっていることで有名なタブブラウザーSleipnir(スレイプニル)を愛用する人をプニラーと呼ぶらしいです。(?)

これを聞いたときに思い浮かんだ光景。

新入社員の世話を焼くのが好きな教えたがりのめがねをかけた社員。人のマウスをすぐ奪って教えたがります。そのとき画面に表示されていた有名タブブラウザーを見て、

「きみっ プニラー?」

うぜぇええええええ

PostgreSQL(以下ポスグレ)のVACUUM(バキューム)について調べてみました。

■VACUUMとは

ポスグレ独自のSQLコマンド。ポスグレではUPDATE、DELETE文では物理データの削除は行われず削除フラグをたてるだけで追記していくためどんどんディスクを消費していってしまう。そのため定期的に不要になった領域を回収する必要がある。そのコマンドがVACUUM。■VACUUMとConcurrent VACUUM

VACUUMの処理は削除フラグの立ったデータを物理的に削除するので、その間対象テーブルに全てのアクセスを禁止するロックをかけます。「おいおいそりゃありえないよ」ということでVersion 7.2からはテーブルをロックしない方式に変わりました。(Concurrent VACUUM)

Concurrent VACUUMは共有メモリ上の空き領域マップ(Free Space Map)に削除フラグの立ったデータの位置を記録します。ポスグレはデータを追加する必要が発生した時にこの空き領域マップを参照し、その場所にデータを書き込むためにデータ領域が再利用されます。

そんな方法で領域を再利用するだけなのでCuncurrent VACUUMでは一度大きくなった物理データ量はそれ以上小さくなりません。物理的に使っていない領域を一度削除するにはVersion 7.1以前のVACUUM(VACUUM FULL)を行います。

■なんでこんなことしなきゃいけないんだ

他のRDBMSを使っていると「なんで追記すんの?普通に消してくれよ!」と思うかもしれません。(おれも思いました)しかし、追記型であることの利点も結構あるみたいです。

ポスグレは内部的にはレコードのデータにデータを識別するOID(オブジェクトID)とトランザクションを制御するXID(トランザクションID)をくっ付けて管理しています。新しいトランザクションが発生すると元のデータはそのままにして、OIDはそのままでXIDを一個増やしたデータを追記しようとします。元のデータは放置です。この方法だと同時に来たトランザクションの隔離や制御などがいかにも簡単に実装できそうな気がします。(常にスナップショットを残しているようなものだから)

具体的にユーザー側のメリットとしては”“読み込みロックと書き込みロックが競合しない””というのがあります。「常に追記なんだからたしかに出来そう」という気がします。ポスグレはこの辺をMVCC(Multi Version Concurrency Control:多版型同時実行制御)という方式で実装しているらしいです。

リアル嗜好スパルタンX

sparutanx.gif

しかし実際「スパルタンX」が映画を忠実に再現していたらどうなっていたのか?

ファミコン(元アーケード)の名作スパルタンX原作とはかけ離れた内容だった。真のスパルタンXとは・・・。