Hatena::ブログ(Diary)

しんふぉにゃん このページをアンテナに追加 RSSフィード


主にPHPとsymfony、MySQL関連で気になったことや調査したことのメモなどを書いています。コメント・トラックバックでのツッコミはお気軽にお願いします。
PHPメンターズの方でSymfony2関連の記事等書いています。

2010-12-06

symfony 1.4向けの解説書 出版予定

この記事は、Symfony アドベントカレンダー 2010 に参加しています。


「えっ、いまさら?」

と思う方も

「おー!、やっと!」

と思う方も

どちらもお待たせしました!


現在、主に日本Symfonyユーザー会で活動しているメンバーで、symfony 1.4向けの解説書籍を執筆しています。

書籍は秀和システム様より『オープンソース徹底活用 symfony による Web アプリケーション開発』として出版される予定です!


書籍の内容は、symofny入門者〜中級者くらいを対象としたsymfony 1.4の解説書で、「日本Symfonyユーザー会公式の解説書」と銘打たれる予定です。

大まかな見出しは以下のようなものです。

・入門編

 ・symfony 1.4の特徴と基礎知識

 ・symfony 1.4のインストール

 ・サーバーへの設置

・初級編

 ・サンプルサイト作成で学ぶsymfony開発の基礎

 ・公式サイトのドキュメントナビゲーション

・中級編

 ・DoctrineとPropel

 ・symfonyを使いこなす

 ・プラグインの利用と開発

 ・symfonyライブラリ

・実践TIPS

 ・マスター、スレーブ構成のデータベース

 ・プロジェクトのソースコード管理とデプロイ

 ・大規模なソフトウェアへの応用(OpenPNE3)

今のところあまり多くを公開できずにすみません(鋭意執筆中です!)

全体としては、実際にsymfonyを使って開発をしてきたメンバーが、「symfonyのコンセプトとベストプラクティス」を伝える、ということを大きなテーマとしています。


なぜ1.4?

この出版の話を聞いて、「なぜ今更1.4なの?」という疑問が浮かんだ方もいらっしゃるんじゃないかと思います。

2.0ではなくて、1.4なんです!

なぜ1.4なのかと言うと、私が「1.4」の寿命はまだまだ長いと考えているからです。


symfony 1.4の「公式コアチームのメンテナンス期間」は2012年11月までです。

ですが、これだけ多く使われているソフトウェアなので、誰かがメンテナンスを引き継ぐという可能性は十分にあると思っています。そして、もし万が一そういう流れが出てこなければ、日本Symfonyユーザー会(または個人的なプロジェクト等)としてsymfony 1.4のForkをメンテナンスしていくことも視野にいれています。

それくらいsymfony 1.4というフレームワークの完成度は高く、まだまだ現役で使い続けられるものだと私は考えています。


このような目的と理由から、symfony 1.4の書籍を執筆しようということになり、今に至っています。


コラムの寄稿や原稿の査読にご協力頂ける方を募集しています

この書籍の執筆プロジェクトには、すでに数名の方に参加頂いて、章やコラムの執筆などをお願いして進めています。できるだけ多くの方に関わっていただいて、symfony 1のノウハウをこの1冊にできるだけまとめることができたらいいなと思っています。

ただ、執筆スケジュールにはあまり余裕がありませんので、12月・1月にある程度時間のとれる方限定となってしまいますが、興味のある方は私(hidenorigoto at gmail)宛にご連絡ください。


Symfony Advent 2010であなたの記事を公開してみませんか?

Symfony Advent 2010では12月1日から12月24日までを使って日替わりでsymfonyでイイなと思った小さなtipsから内部構造まで迫った解説などをブログ記事にし て公開していくイベントです。

参加についてはATNDで参加表明の上、Google

GroupのSymfony Advent 2010に追加リクエストを送信ください。

Symfony Advent 2010チーム一同、あなたの参加をお待ちしております。

日本Symfonyユーザー会

Symfony アドベントカレンダー2010

※Syfony Advent 2010はsymfony好きな有志で集まったチームです。

2010-11-13

自分の部下には「パーフェクトPHP」を読んでおいてもらいたい理由5つ

自分の部下には、「これ読んどけ!」と必ず渡しておきたい1冊です。


パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)


そんな私には、今は部下は1人もいませんけどね!

それに、なにより私自身のPHP知識の「弱点」を、パーフェクトPHPを読むことによって浮き彫りにされた気がします。


あと、この本の「はじめに」のページで、「謝辞」に私の名前が並んでいてビックリです。id:Fivestar が書いているフレームワークの章で、(Symfonyつながりということで)ちょっとだけ査読的なことをしただけなんです。

(将来私の部下ができたら)この本を必ず読ませます!

2010-10-22

PearのServices_TwitterでOAuth認証している場合のfriendships/show

OAuth認証してAPIリクエストを送信している場合は、friendships/showでsource_idまたはsource_screen_nameのいずれも指定しなくてもいけるはずなんだけど、PearのServices_Twitterだとパラメーターの数が足りないと言われエラーになります。

このエラー、twitter側で出しているんじゃなくて、Services_Twitter側で出してるんですね。

で、こういった引数を定義しているのがdata/api.xmlファイルで、そこに引数の最小値が「2」と書かれていたのが原因でした。

303	        <endpoint name="show" method="GET" auth_required="false" min_args="2">
304	            <formats>xml,json</formats>
305	            <param name="source_id" type="id_or_screenname" required="false"/>
306	            <param name="source_screen_name" type="id_or_screenname" required="false"/>
307	            <param name="target_id" type="id_or_screenname" required="false"/>
308	            <param name="target_screen_name" type="id_or_screenname" required="false"/>
309	        </endpoint>

OAuth認証している場合とそうでない場合とで必須かどうかが変わるので、これをバグと言うべきかどうかは判断できませんが・・・。

とりあえず手元で直接1に変更して対処。

2010-10-03

PHP Matsuriに参加しました&やったことなどまとめ #phpmatsuri

PHP Matsuri 2010に参加しました。

いろいろやったことなど

  • Symfony2のドキュメント翻訳をこっそりやった→ symfony-docs-ja/contributing/documentation at master ? symfony-japan/symfony-docs-ja ? GitHub
  • @brtriver@cakephperとの秘密プロジェクト? sukonv のコードを少しいじった。
    • Lithiumのコードを実際に書いた&コアのコードをいくつか読んだ
    • GitHub のリポジトリでの共同作業をした
  • Symfony2をいじった
    • Doctrine2関連を少しだけ触った程度(コマンドの意味を調べたりw)
  • @kriswallsmithのワークショップで苦し紛れな英語で質問した
    • 自分の言いたいことが言えないことと、発音をもう少し練習しないといけないことを痛感
  • @mackstarさんと、Doctrine2のことや他のフレームワークのことなどを話した
  • 口約束レベルですが、sflive 2011へ参加する! と @yandoさんと話した

英語で言いたいことを言えるレベルになることが、緊急の課題でしょうか・・・。



filter_var()でURLのフォーマットチェック(とバグ)

PHPにはfilter_var()という関数があって、この関数を使うとURLのフォーマットチェックができます。(PHP 5.2.0以降)

ですが、この関数のURLフォーマットチェックにはバグがあって、ドメイン部分にハイフンがあると「URLではない」と判定されてしまうようです。

  • PHP 5.3.2環境で確認(5.3.3でも修正されていない?)

正常:

<?php
$value = 'http://example.com/test.html';
$ret = filter_var($value, FILTER_VALIDATE_URL);
var_dump($ret);
$ php test.php
string(28) "http://example.com/test.html"

なんかおかしい:

<?php
$value = 'http://exam-ple.com/test.html';
$ret = filter_var($value, FILTER_VALIDATE_URL);
var_dump($ret);
$ php test.php  
bool(false)

ちなみに

LithiumのValidationでisUrl()を使うと、上のfilter_var()を使って検証が行われるため、ドメイン部分にハイフンが入ったURLはバリデーションエラーになってしまいます。

CakePHPでは、URLのバリデーションは自前の正規表現で行っているのでこの問題はないようです。

2010-03-18

メモ Warning: range() [function.range]: step exceeds the specified range in sfYamlDumper.php on line 43

突然表題のようなWarningが出るようになったのでメモ。

Warningの箇所はsymfonyライブラリのsfYamlDumper内のコードで、range関数を使っている箇所です。

が、以下のような状況なので、なぜここでWarningが出るのかさっぱり分かりません。

  • sfYamlDumperへ渡る値とはほぼ無関係の場所(例えばProjectConfigurationのsetup()の先頭など)で、以下のようなコードを追加するとWarning
<?php
$date1 = new DateTime();
$date2 = new DateTime('2010-03-18 01:30:28');
$diff = $date1->diff($date2)->format('%d');
  • 上記コードで、3行目のformatメソッドの実行部分を削ると、Warningは出ない
  • (今のところ)Windows版でのみ現象を確認(PHP 5.3.1)
  • Apacheを再起動すると、再起動後の初回、2回目のアクセスではWarningは出ないが、3回目以降はずっと出る。
  • apcを無効にしても有効にしても同じ。
  • xdebugを無効にしても有効にしても同じ。
  • 現象が再現するようになった場合、プログラム内の適当な箇所に「range(0,1,1);」と入れるだけでその箇所でWarning
  • 以下の単純なコード(symfony外の単純なPHPスクリプト)では、Warningは出ない
<?php
$date1 = new DateTime();
$date2 = new DateTime('2010-03-18 01:30:28');
$diff = $date1->diff($date2)->format('%d');
print_r(range(0,1,1));
  • 上記テストコードをタスクの中で実行してもWarningは出ない
  • サラのプロジェクト(generate:project、generate:app frontend、generate:module frontend testのみ)で、上記コードをProjectConfigurationの先頭に記述すると、Warningが出る
    • このWarningが出るプロジェクトにブラウザでアクセスした後、Warningが出ないように修正(formatを使わない)したプロジェクトにアクセスすると、なぜかWarningが出た。リロードするとWarningは消える。

同じ現象に遭遇した方がチケットを投げていました


Apacheのプロセスのメモリ内に何か変なデータが残っているような挙動でしょうか・・・・。


環境:

  • Apache/2.2.14 (Win32)
  • PHP Version 5.3.1
  • symfony 1.4.4-DEV