駒形電産

Reflection_Annotation in CVS Sebastian Bergmann

My Proposal for ””Reflection_Annotation”” has been accepted and I committed an initial development version to the PEAR CVS Repository.

ProposalにあったReflection_Annotationが6票で通りました。
CVSに上げ始めたらしいので気になっていたParser部分を見てみました。

class Reflection_Annotation_Parser {
    public static function parseAnnotations($docComment) {
        $annotations = array();

        $lines = explode("\n", $docComment);

        foreach ($lines as $line) {
            $nameStart = strpos($line, '@');

            if ($nameStart !== FALSE) {
                $nameEnd = strpos($line, '(', $nameStart);

                if ($nameEnd !== FALSE) {
                    $name = substr($line, $nameStart + 1, $nameEnd - $nameStart - 1);
                }

                $argumentsEnd = strpos($line, ')', $nameEnd);

                if ($argumentsEnd !== FALSE) {
                    $arguments = substr($line, $nameEnd + 1, $argumentsEnd - ($nameEnd + 1));

                    $annotations[$name] = $arguments;
                }
            }
        }

        return $annotations;
    }
}

なるほど、Parserと聞いただけで拒絶反応示してしまいたが、コメント部分をパースするだけならこんな感じなんですね。
Reflection_Annotationに親近感が沸きました。

ref: PHPにアノテーション

ギャァぁあおそかったか・・・。

PEAR :: PEPr :: Details :: Services_Backpack

Interface to Backpack’s XML-API. It provides objects to communicate with Backpack projects, and models that aid in working with return values.

PHP Webアプリ開発でのXSSやSQL Injection絡みのクォートだなんだのごっちゃになってて、今まで開発やってきたくせにいまいち明確に分かっていませんでした。
が、正解がやっと分かりました!

正解言っちゃいますけどいいでしょうか?これが正解なので暗記してください。あとお子さんが生まれたら真っ先に教えておいてください。

■問題名

  • 問題
  • 解決策
  • エスケープ対象

■XSS

  • ユーザの入力をHTML内で表示すると危険なスクリプトを実行される可能性がある
  • htmlspecialchars()
  • & , < , >

■SQL Injection

  • ユーザの入力をSQL文に含める場合、危険なSQLが実行される可能性がある
  • addslashes()
  • ’, ””, \, NUL (ASCII 0)

「magic_quotes_gpcはどうした?」という意見があるかもしれません。
magic_quotes_gpcに関してはphp.ini-recommendedに下記の記述があります。

; – magic_quotes_gpc = Off [Performance]
; Input data is no longer escaped with slashes so that it can be sent into
; SQL databases without further manipulation. Instead, you should use the
; function addslashes() on each input element you wish to send to a database.

magic_quotes_gpcはSQLのためにある設定で、パフォーマンス的には切ると上がるのでオススメと。これを使わない場合は自分でaddslashes()。

どっちでもいいんですが、下記の2点からOffにして自分でaddslashes()が正解(とします)!

  • magic_quotes_gpcGet,Post,Cookieの略でその時にクォートされる。値を受け取った後プログラム内でシングルクォートなどを入れてしまう可能性はある。
  • 複数リクエストに渡る場合、そのたびにクォートされるので毎回戻す必要がある。

あーすっきりした!

チャリンコ通勤の友としてお気に入りだったFREITAGですが、
昨日、プロジェクトキックオフミーティングと称した単なる飲み会でデザイナーの人にショッキングなことを聞きました。

ジュソイチロウ日記

最近ハマりまくってるFREITAGなんですが、な、なんと!
月9のドラマ「エンジン」でキムタクが使ってるとか・・・ガーンッ

これで、キムタクの真似して持つ奴が増えまくったり、「それ、キムタクが持ってたやつでしょ?」とか言われたりするの、無茶苦茶イヤなんですけど。

だそうです!
その方も持つのを辞めたとか!

あぁ、おれの知らないところで、

「・・・だって、、、ねぇ?」
「あれってもしかして・・・・・とか・・・・・クスクス・・・・月9が・・・・いかんせん・・・」

とか言われてるんでしょうか!
いやぁぁああ!

freitag.jpg

Backpack: Backpack becomes a web service

Backpack is not just for you to love, but for machines too. The brand new Backpack API makes it possible for other programs to easily talk to your backpack.

こないだ言ってたBackpackがAPIを公開しました。
XML-RPCみたいです。RailsベースってことでサンプルのラッパもRuby。PEAR Services_Backpackとか作ったら通るかなあ

ref: Services_Backpack

Connect PHP to DB2 and Cloudscape via PDO

PHP 5.1 is set to ship with a brand-new database connectivity layer known as PHP Data Objects (PDO). While PHP has always had very good database connectivity, PDO takes PHP to the next level. Learn how to obtain, install and use PDO to connect to IBM? DB2? Universal Database? and IBM Cloudscape?

IBM developerworksのPDOでDB2/Cloudspaceの記事。

DB2ってODBC経由になるんですね。
何かおしゃれっぽいので誰か試しに業務でPDO + Cloudscapeやってみて欲しいです。

PHPのセッションIDの続編。

やはり複数WebサーバでのセッションID重複の可能性があるというのが問題になってきた(気になってきた)のでまた調べてみたところ、前回の結論には一部間違いがありました。

msessionはセッション情報を全てメモリに保持しているのでセッションID のコリージョンを検出しています。

とありますが、ちょっと考えたらリクエスト終了する毎にプロセスが終了するPHPの仕組み上、複数のリクエストが作成するセッションIDを見張ることなんて不可能。

msessionとはPHP extentionの一つでMsession – Mohawk Session Managerというセッション管理サーバへのAPIなんですね。セッション管理サーバが常駐してセッションIDを見張るので重複することが無いんだそうです。

普通はmsessionを使っておけば問題なさそうです。
ただ、msessionサーバが落ちたら困るのでその辺どうするかが悩みです。

ref: PHPのセッションID

「得ようと思ったらまず与えよ」

ゲーテ

自分が欲しかったものを公開するシリーズ。

Mojavi2.0で開発するときのUMLの雛形を作りました。(for JUDE 1.5.2)
絶対あった方が良いと思うんだけど作るの面倒臭かったです。
optのクラスについても網羅しました。特にsessionなんかは図で見た方がパッとわかると思います。

php-1.0.jude.zip

php_jude.png

仕事で10ヶ月振りにPerlの世界からPHPへ帰ってきたのでMojaviをまじめに勉強しています。

Mojavi2.0 + Smartyで

「FATAL [/path/to/input.html.php:28] Undefined index: foo」

ってエラーを良く見ないでしょうか。
何となく、「Mojavi + Smartyだとエラーちょっと厳しいような・・・」とか思ってましたが、良く考えたらなんで変数が無いぐらいがFATALエラーなんだよ!

頭にきて調べたら分かりました。
optのloggingの中にあるErrorLoggerで、E_USER_*は処理してるんだけどE_NOTICEやE_ERRORなどのシステム発のエラーを考慮して無いです。

修正。

200a201
>                 case E_NOTICE:
205,206c206,208
<                 case E_USER_ERROR:
< 
---
>                 case E_USER_WARNING:
>                 case E_WARNING;
>                 
210d211
<                 case E_USER_WARNING:

これ、デフォルトがfatalなので、考慮してないエラーは全部FATALエラーになってました。
コレ直したら急に使い易い気がしてきた!

ITmedia エンタープライズ:企業で真価を発揮するP言語――Burton Group報告

 IT調査会社のBurton Groupによれば、PHP、Perl、Pythonの「P言語」は、C 、Java、C#(G言語と呼ばれることもある)などの汎用プログラミング言語を補完できる機能のために、過去4~5年で本当に真価を発揮するようになった。P言語はエンタープライズスクリプティングのようなミッションクリティカルな作業でも十分優れた実績を上げており、G言語よりも好まれてしかるべきだと報告書は指摘している。

|∧∧
|・ω・`) そ~~・・・
|oPo
|―u’

| ∧∧
|(´・ω・`)
|o   ヾ
|―u’ P言語 <コトッ

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

| ミ  ピャッ!
|    P言語

Rubyは?
LL(Lightweight Language)の方がいいな。