Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
p0t: 2005年08月 Archive
[go: Go Back, main page]

« 2005年07月 | Main | 2005年09月 »

PHPカンファレンス2005のEthnaの藤本さんの発表であった、

「ウィザードなど一定のパターンのあるパーツをプラグインとしてフレームワークに組み込む」

っていう話を聞いて、なるほどそういうのがたくさんあったら便利かもと思いました。フレームワークでクラスライブラリより粒度の大きい再利用部品ができたので更に粒度を大きくしようとするとコンテンツを再利用できるようにしようとして自然とレイヤーが上がるのかもしれません。

最近PHPのフレームワークを調べていると、以前見つけたMidgardとか最近知ったBlueshoesとかCMSフレームワークというのを見かけるようになりました。
フレームワークより部品の粒度を上げてくと自然とCMSに向かっちゃうのかもと思いました。

ref: TownPortal
ref: PHPカンファレンス2005

PEAR :: Manual :: 提供するに値 しない 場合

PEAR の "A" は、"Application" を表しているのですが、 アプリケーションがサポートされていないことについては単純な理由があります。 現在のところ、完全な WEB アプリケーションのパッケージを扱えるような インフラ(PEAR インストーラなど)が開発されるに至っていないからです。

状況が変わりましたら、サイトを更新してお知らせする予定です。

PEAR 1.4とかPHP_Archiveとかがそのインフラにあたるのかな!?

[を] Google AdSense、日本円での支払い開始!

これまでドル建て小切手のみだった Google AdSense の支払いですが、 ついに日本円に換算して直接銀行口座に入金してくれるようになったよう です。

うおおおぉ

Reflection_Annotationを使ってみる。 - Paradigm Shift Design Projects

Reflection_AnnotationのAnnotation/Parser.php、微妙なので書き換えました。デモちゃんと動くかは知らない。

Sebastian(*)ウォッチャー発見!
Reflection_Annotation、疑惑のParse部のパッチを作っておられます。gj!
そういえば別アプローチとしてPhingはAnnotation拾えるのかな?

* Sebastian
sebastian.jpg

ref: Reflection_Annotation期待

PECL :: Package :: xmlwriter

This extension wraps the libxml xmlWriter API. Represents a writer that provides a non-cached, forward-only means of generating streams or files containing XML data.

libxml xmlWriteのラッパ。何気にバージョンがでかい。
XML書く方の問題は本気でやる場合はこれで安定か!?

ref: XML_FastCreate
ref: Proposal for RSSBuilder

PECL :: Package :: dbx

The dbx module is a database abstraction layer (db 'X', where 'X' is a supported database). The dbx functions allow you to access all supported databases using a single calling convention. The dbx-functions themselves do not interface directly to the databases, but interface to the modules that are used to support these databases.

DB抽象化関数dbx。
dbx_connect(), dbx_queryとかで行けるようになるようです。非PDO派はこちら!

Java魂―プログラミングを極める匠の技

毎週日曜日、ラーメン食いながらちょっとづつ読んでたJava魂やっと読了。

不変オブジェクトやコレクションの話など、地味だけど現場では大変重要なお話がためになります。ロジックエラーをコンパイラが検出できるエラーに変えてこうというテクニックが多いんですが、PHPでは関係無いわな。
最後の方の参照とかは難しくて読むのが辛かった!

Mojaviについての質問をまたもらったので回答。
内容は、 「Mojavi+SmartyでHTMLファイルを吐きたいが、Viewの中でRendererをいじってもイマイチうまくいかない」 というものです。

「ActionでSmartyRendererを使う」または「ActionChainを使う」 という方法はどうだろうか。

普通に作っておいて、ファイルに吐く必要が出たら 簡単に移行できるので後者がいいような気がする。

StaticHtml-0.1.tar.gz

[ ActionでSmartyRendererを使う ]

<?php
include_once(dirname(BASE_DIR)."/mojavi/lib/smarty/Smarty.class.php");
include_once(OPT_DIR."renderers/SmartyRenderer.class.php");

class CreateHtmlAction extends Action {
	function execute(&$controller, &$request, &$user) {
		$renderer =& new SmartyRenderer($controller, $request, $user);
		$engine =& $renderer->getEngine();
		$engine->compile_dir = BASE_DIR."/templates_c";
		$engine->compile_id = $controller->currentModule."_".$controller->currentAction;
		$renderer->setTemplate("static.html");
		$renderer->setAttribute("title", "Static HTML by SmartyRenderer");
		$renderer->setMode(RENDER_VAR);
		$fp = fopen("staticHtmlBySmartyRenderer.html", "w");
		fwrite($fp, $renderer->fetchResult($controller, $request, $user));
		fclose($fp);
		header("Location: ".dirname(SCRIPT_PATH)."/staticHtmlBySmartyRenderer.html");
		return VIEW_NONE;
	}
}
?>

[ ActionChainを使う ]

<?php
class CreateHtmlAction extends Action {
	function execute(&$controller, &$request, &$user) {
		$actionChain =& new ActionChain();
		$actionChain->register("getHtml", "CreateHtmlByActionChain", "GetHtml");
		$actionChain->execute($controller, $request, $user);
		$fp = fopen("staticHtmlByActionChain.html", "w");
		fwrite($fp, $actionChain->fetchResult("getHtml"));
		fclose($fp);
		header("Location: ".dirname(SCRIPT_PATH)."/staticHtmlByActionChain.html");
		return VIEW_NONE;
	}
}
?>

ref: 本当に理解すること

【PHPウォッチ】第19回 注目集めるPHPフレームワーク,PHPカンファレンス2005で作者が自ら解説

ITProのPHPCon記事にちょっとだけ名前が。ツイてる!

PECL :: Package :: sdo

Service Data Objects (SDOs) enable PHP applications to work with data from different sources (like a database query, an XML file, or a spreadsheet) using a single interface.

IBM提供のextention、sdoがバージョンアップ。

descriptionが変わってる!
すごいなんか分かりやすくなってる!

ヘテロジーニアスなデータじゃわかりずらいものな。

ref: PECL sdo

本家フォーラムの方で少し要望が出たのでMojaviInfoを修正しました。

MojaviInfo-0.4.tar.gz

version 0.4の変更点

  • NOTICEが出る部分を修正。
  • Subversionディレクトリ、emacs, viなどのbackupファイルを一覧から除外。

ref: MojaviInfo

窓の杜 - 【NEWS】商標権侵害のためメールソフト「鶴亀メール」が「秀丸メール」に名称変更

定番テキストエディター「秀丸エディタ」を開発する(有)サイトー企画は9日、同社製メールソフト「鶴亀メール」を「秀丸メール」に名称変更することを発表した。これは、今月2日に“鶴亀”の商標権者から同社へ通知が届き、「鶴亀メール」が他社の商標権を侵害していたことが判明したため。

先にHidemarnet Explorerを改名すべき。

pharanの日記

というか、この期に及んで、会社から公式にまだ一度も音信がないのですが。こちらから書面以外で連絡を取る気はありません(口頭で変な口約束交わしたくないし、襲ってきた本人に会うなんてもってのほか)。その旨も内容証明郵便で通知済み。

すごい詳細が気になる。

オブジェクト指向JavaScript

クロージャとはブロック化されたコードの事です。その特徴はクロージャが生成されたスコープのローカル変数を取り込むことができる、というものです。

JavaScriptでのクロージャの話。PHPだと馴染み浅ですが、楽しいし便利!

やっべえこのハンドルネーム、じわじわくるよ・・・。

robots.png

プログラマー日記(2005-08-09)

なおRailsは、Rubyという言語の特徴を最大限に生かし、またJavaのフレームワークを参考にせず設計されています。PHPのフレームワークも、Javaのさるまねに陥ることなく、PHPの良さとは何かを考えながら、製作していただけたらと思います。

PHPの良さとは何か!

おれの考えたPHPの良さ:

  1. 関数いっぱい
  2. HTMLに埋め込める
  3. オブジェクト指向とか知らなくても作れる

それをフレームワークに生かせないかということで、一発ネタのはずだったAwesomeFrameworkをちょっと変えてみました。

AwesomeFramework-0.5.0.tar.gz

1.関数いっぱい

AwesomeFramework(以下AF)は関数のみ!(クラスとか無い)

  • forward($action) : アクションを実行する。(処理が移る)
  • redirect($action) : アクションにリダイレクトする。(別リクエストになる)
  • fetch($action) : アクションの実行結果の出力を取る。

2.HTMLに埋め込める

AF標準のRendererはPHP!
いままでは「HTMLに埋め込める機能いらねぇ」とか思ってましたが、たとえば単に

Hello World!

と書いたテキストに拡張子「.php」をつけてincludeすると全内容が勝手に出力される!
PHPタグの外側は勝手に出力される=PHPタグが無いテキストは全部が普通に出力される。

3.オブジェクト指向とか知らなくても作れる

AFのactionはただのPHPファイル。関数ですらなく、上から順番に実行されます!

Hello Worldアプリのaction:

<?php
$_REQUEST["message"] = "Hello World";
forward("view");
?>

PHPファイルにするとグローバル変数地獄になって大変だろうと思っていたんですが、全てのactionはforward関数内でincludeされるのでフィルタチェイン的構造になったforward関数のスコープになって何気にnamespaceが分かれてる!

ファイルをactionの単位として$selfというそのaction自身の情報を含んだ変数をインポートすることにしました。($thisだと混乱するのでPerl的な$self)

$selfの中身:

Array
(
    [action] => index
    [file] => index.php
    [abs_path] => D:/Program Files/eclipse-3.0.2/workspace/AwesomeFramework/actions/index.php
    [abs_uri] => http://localhost/index.php?action=index
    [resource] => Array
        (
        )
)

昨日、激しい便意に見舞われて京王新線新宿のトイレに終電6分前に駆け込みました。

そこのトイレは激しく汚いし、1個室内にGが3匹いてそれぞれが相当カオスな動きしやがるし、腹は痛いわ、終電間に合うか心配だわで最低の排泄環境でした。

11人いる!
  • 11人いる!
  • 小学館(1994-11)
  • (著)萩尾 望都
  • 定価:¥ 590
  • 新品価格:¥ 590
  • 中古価格:¥ 102
  • ASIN:4091910114

naoyaのはてなダイアリー - prototype.js でデザインパターン - Iterator

JavaScript はプロトタイプベースのオブジェクト指向言語で、C や Java のようなクラスベースのオブジェクト指向言語とはちょっと実装が異なります。

プロトタイプベースのオブジェクト指向のお話。
ソフトウェアの匠 羽生田栄一のオブジェクト論」で始めてちょろっと知ってすごい面白いと思いましたが身近なJavaScriptがプロトタイプベースのオブジェクト指向言語だってことをつい最近知りました。

プログラミングの方法論は、「どう分けたらわかりやすいか」に尽きるのでプログラム言語にとって「人間がどう考えてるのか」は大事。
上記のオブジェクト論に拠れば、人間が対象を認識するときには下記のような手順をふむそうです。

  1. 環境の中から対象を切り出す。
  2. 対象を妥当なクラスに分類する。
  3. 対象をそのクラスの実例(インスタンス)として頭の中で再認する。

これをベースにしたのがクラスベースのオブジェクト指向。
しかし、近年の認知心理学では2のとき同時に「対象とプロトタイプ・インスタンス(代表例)を比較する」ことがわかっているそうです。
こっちをベースにしたのがプロトタイプベースのオブジェクト指向。

対象・クラス・プロトタイプとは、トノサマガエルを認識する場合で考えると、まず対象はトノサマガエル。クラスはカエル。プロトタイプは自分の考える代表例なのでおれの場合は緑色のアマガエルです。

たしかにカエル、犬、ジュースなどといったクラスを考えるとき無意識に代表例で考えてしまいます。プログラミングでもまず代表例のオブジェクトがあって、そこに違う部分のプロパティを追加していくというやり方がわかりやすいのかもしれません。

JavaScript以外にどんなプロトタイプベースの言語があるのかとか気になります!

ソフトウェアの匠
  • ソフトウェアの匠
  • 日経BP社(2004-10)
  • (著)まつもと ゆきひろ
  • (著)萩原正義
  • (著)高林 哲
  • (著)羽生田栄一
  • (著)八田真行
  • (編集)日経バイト
  • 定価:¥ 2,480
  • 新品価格:¥ 2,480
  • 中古価格:¥ 1,500
  • ASIN:4822206653

ref: ソフトウェアの匠

質問されたので答えたついでにのせるシリーズ。

Q: 「ログアウト後の戻るボタン対策はどうすればいいのか?」

A: 「PHPデフォルト設定(php.ini-dist)なら正しくログアウト(session_destroy)してればそれで良い。」

「ログアウト後の戻るボタン問題」とは何か。

ログアウトしてもブラウザの戻るボタンで戻るとキャッシュ上のページが表示されてそこから「購入」とか都合の悪い処理をされちゃう問題。

要はブラウザがキャッシュしないで、戻るボタンを押されても必ずサーバに問い合わせてくれれば大丈夫。
ブラウザに「キャッシュ使うな」と言うにはHTTPヘッダに下記を書けば良い。

Expires: 0
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache

Expiresは過去の日付とかなら良い。no-storeとno-cacheは、「ファイルとかにキャッシュするな」と「メモリ上とかにもキャッシュするな」、must-revalidateは「必ずサーバ見に行け」、PragmaはHTTP 1.0用らしいです。
ヘッダを自分で書いてもいいですが、PHPではphp.iniでsession.cache_limiternocache(デフォルト)に設定されていると上記のヘッダを自動的に出してくれます。
必ずサーバに問い合わせてくれれば、ログアウトされてるので「ログインしてください」画面に飛ばすことができます。

via: Hypertext Transfer Protocol HTTP/1.1 - 13 Caching in HTTP

pharanの日記

どうも、「どうせ崩すのだからとか、経験的にそこまできっちりやる必要はない」とか、「正規化は勘で」とかいうのは、単なる神話っぽいです。「正規化を崩す場合がある」という話が、RDBというモデルをよく判っていない人達によって勘違いされ、勝手に一人歩きをして「正規化は崩しても良い」「正規化は真面目にやらなくても良い」に変質してしまった、と。風の噂で「JOIN使用一切不可」な企業があると聞きましたが、そういうとこが発端なんじゃないかなとか(笑)。

RDBのモデリングは噂や迷信が幅利かせすぎ!
JOINは遅いのではなく、「遅くすることができる」ってだけで、エンティティが意味的に正しく抜き出せてれば(Index使って)何個JOINしても一瞬で返ってくるっつーの!

迷信モデリングしたRDBをフツーに再設計すると8倍とかそういうレベルじゃなく4096倍ぐらい速くなることが良くあります。

2ちゃんねるベストヒット: 小説・ありえないハワイ旅行

俺「どうしました?どなたかご病気ですか?」
スチュワーデス「ええ。実は機長が先ほど19リットル程度の血を吐いて、寝込んだままなのです。」
なんということだ。19リットルとは....。16リットルの間違いではないのか?19リッターは多すぎる。

125が面白すぎる。

Mojavi Japan - フォーラム Smarty-Lightについて

SmartyRendererではSmarty-Lightって使えないんですよね?(頓珍漢な質問であればすいません)使えなかったら使えるようなプラグインがあったらいいかなぁ…と。

という話題があったのでSmartyLightRenderer作りました。

SmartyLightRenderer-0.1

Mojavi 2.0 Tutorials, Updates and Docs

Downloads

I have recently been working on a bug-fixed release of Mojavi 2.0. I've comp leted the changes, and would love to have some people test against it before I c onsider it an official release. The highlights of this release include PHP 4.4. 0 support, and several bug fixes and enhancements.

MojaviProjectのやる気の無さに2.0.3βを勝手に出しちゃってる人が。
PHP 4.4.0対応とか良さそうだけどこれありなの?
Tanner BursonはPHP5で動くMojavi2プロジェクトYumaの人でもあります。(どんだけMojavi2好きなんだって話だよ)

Yuma Project Page

What is it?

The Yuma project is a custom build of the Mojavi project. More specifically it is aimed to be a PHP5 compatible build of Mojavi 2.0. Mojavi 2.0 is an excellent framework for building PHP applications. It is efficient in both execution speed, and development time.

Catalystのデモムービーを見る。(Ruby判らないので)

さっぱりわからない。

あ~何かこの感じ覚えがある、、、
HTML_QuickForm_Controllerがわかんなかったときと同じだ。

Webアプリケーションフレームワークでやってほしいこととして話されてるポイントを「目的 → 実装」の形で考えをまとめてみる。

  • わかりやすく分けたい(MVC) → Front Controller、いろんなテンプレ
  • 再利用性向上(横断的関心減らしたい) → DIコンテナ
  • DB楽したい → O/Rマッパー、ActiveRecord
  • 入力値検証楽したい → Validator
  • AJAX楽したい → Prototype.jsとか絡めた機能
  • テスト楽したい → テストコード吐いてくれる機能

大まかに、「再利用性の向上」と「とにかく楽したい」という2つの方向で機能が求められてるようです。

「楽したい」という意味ではテスト系の機能がもっと充実してくる気がする。
それ以外ではアプリの構造とか作成の進行状況とかを視覚的に見れる何かが充実してくると楽しい気がする!

みなさまのゴルフ

シンプルなゴルフゲームです。

吹いた。

(名前だけじゃなく、「会社でコソコソやる」などコンセプトが明確で素晴らしいです。)

hail2u.net - Weblog - あるフォルダをフォルダ・ツリーのルートとしてエクスプローラを起動

ツリー付きでフォルダを開く/eというオプションと共に/rootというオプションつきで起動すると、引数に与えたフォルダのパスをツリーのルートにしてくれます。

む、便利!

PHPeclipse 1.1.7 available at update site

The update site (for use with the Eclipse configuration manager) now contains version 1.1.7 for Eclipse 3.1: http://pipestonegroup.com/eclipse/updates

There are still several annoying bugs with the debugger:

  • Debugger view initialization fails at the beginning (appears harmless)
  • Variables view doesn't work (Eclipse 3.1 event handling differs from 3.0)
  • Source locator doesn't work automatically (have to click the call stack to go to the current line)

Eclipse 3.1対応のPHPEclipse1.1.7がリリース。
Debugger周りでまだバグが少しあるようですが、Eclipse 3.1は速度面でも機能面でも何かと素晴らしいので嬉しいです。
そんな中でもおれが地味に一番嬉しかったのがCVS commitにキーボードショートカットの割り当てが可能になったこと!

PHP 観測所日誌 - phpcon_quebec_cd*[PHP] PHPConference Quebec 2004 の CD が到着。

もう注文した事も忘れていたですよ。面白そうなコンテンツがあれば PHP-Stady のネタになるかと思ったんだけど、今更 Introduction to SQLite や Introduction to PHP5 ってのも。

さすが 2004 だぜ!

笑った。

kunitの日記

(2)で特定したファイルをAspectをかませるように書き換えて、「components_c」に出力する。この際、「Zoo」クラスとなっている場合には「Foo_Bar_Zoo」に書き換えてしまう。

Aspectかませて書き換え!

X *ole.net : 動的にクラス生成

その後、生成したファイルをunlink()すれば、メモリ上(?)にクラスファイルが読み込まれたされた状態になって、いつでも new できるって状態になってます。(詳しくはソース読んで :p)

includeして削除しちゃうって考えが面白い!

PHPでもコードインジェクションやコードジェネレーションの波が。
厭な感じを持たれる方もいるかもしれませんが、どんどんやっていーんです!

p0t: 軽快なPHP

軽快なJavaに感化される。特にためになったのが、透明性を確保するための方法について。つまりアプリケーションの各ドメインがそれぞれ独立して他に依存しないようにする方法。ぱっと考えてそんなことできるのかと思いましたが、現在主流になってる方法は

  • リフレクション
     (きたオブジェクトに動的に対応)
  • コードインジェクション
     (Build時にAntで自動的にコードを付け加える)
  • コードジェネレーション
     (コード自体を生成する)

いま気づいたんですけど、www.linux.or.jpのfavicon、超かわいくないですか!!??

↓こんなヤツ

pengun.png

・・・疲れ、か。。。

ゼンドジャパンとユヒーロが障害対策のソリューションで提携 - HotPHPPER News

ITmediaにてゼンドジャパンとユヒーロという会社が提携がし、PHP+MySQL/PostgreSQL環境の障害対策のソリューションの実現について掲載されています。

ユヒーロってまさか、あの・・・?

最近よく見るJSONの意味がわからなかったので調べてみました。

Introducing JSON

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C , C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.

JSONとは軽量のデータ交換用のフォーマットだそうです。 というかJavaScriptのオブジェクトの形式でデータをやり取りしたら楽だよねってことみたいです。
↓たとえばこんな感じだそうです。(via XMLをJSONデータに変換するJavascriptライブラリ - スピリッツオブゼロ@blog)

  ListingInfo: {
    Request: {
      Parameters: {
        Parameter: [
          { value: "あいうえお",
            name: "keyword" },
          { value: "Shift_JIS",
            name: "enc" },
          { value: "xml_lite4",
            name: "tf" },
          { value: "FP",
            name: "at" },
          { value: "10",
            name: "ipp" },
          { value: "777",
            name: "categ_id" }
        ]
      }
    }
  }
}

PHPの配列をJavaScriptの配列に変換する処理なんかはやってる人も結構いるかもしれませんが、ちゃんと名前付けて仕様化してるところがすごくいい。

よく見たらPEARにもServices_JSONがProposalに上がってます。

JSON/READ-ME-JSON.php:

// create a new instance of JSON
require_once('JSON.php');
$json = new JSON();

// convert a complexe value to JSON notation, and send it to the browser
$value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
$output = $json->encode($value);

print($output);
// prints: ["foo","bar",[1,2,"baz"],[3,[4]]]

// accept incoming POST data, assumed to be in JSON notation
$input = $GLOBALS['HTTP_RAW_POST_DATA'];
$value = $json->decode($input);

こんな感じで使えるなら便利そう。

既にXMLでやり取りしてるサービスもコレ(Amazon Web サービス ブログ: XML→JSON展開クラス)とか使ったらもっと便利になるかも!

レンタルサーバーへ移行+Blogのリニューアルを計画中です。 少物主義

サーバ(にせマック)も容赦無く捨てます。
昔からの願望なんですが、急に家が全焼しても気にならない程度に身軽になりたいんですよね!
パソコンはノートだけになるのでできればAirH"とかにして家の回線も解約したい。

いやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C

Ruby, Python, JavaScript, Perl, C の配列操作の比較表を作りました。

言語ごとの配列操作の一覧。

array_push($a, $x)

って何かヘボさが漂って嫌ですな。組み込みクラスが多いのって大事かも。
PHP4で組み込みクラスといえば、、、

stdClass!、dir!、そして・・・__PHP_Incomplete_Class

・・・なんて貧弱なラインナップなんだ。

レティスに殺される。

2点