今日はsymfonyプラグイン開発者の日です

symfony公式ブログで案内されていますが、11月8日 世界標準時15:00-21:00の間、symfony Plugin Developers Dayがオンラインで開催されます。

時間を日本時間に直すと、こうなります。

時間 セッション 場所
11/9(日) 0:00-2:00 プラグインの作成とリリース irc #symfonyチャンネル@freenode
11/9(日) 2:00-4:00 カスタマイズしやすいプラグインについて irc #symfonyチャンネル@freenode
11/9(日) 4:00-6:00 新旧プラグインをその場で改良 irc #symfonyチャンネル@freenode

最初の試みなので、実際にはその場のノリで変わるかもしれない、ということ。新作のpluginを提案したり、他のplugin作者に提案したりも期待されています。

ディスカッションを見てるだけでも歓迎、ということなので、今夜PCの前にいるsymfonyユーザのみなさん、ぜひ世界中のsymfony開発者とセッションを楽しみましょう。

僕はユーザネーム”akky”で入っています。

# 朝6時まで起きていられるかわかりませんが。

The second symfony study meeting Tokyo

The second time casual study meeting of popular PHP5 framework was held at Dino‘s seminar room, Shibuya, Tokyo.

There were three main sessions and one LT (lightening talk, flash 5 mins speech).

The first one by Kiryu Tsukimiya was about the coming version symfony 1.2, and “realistically” what version you should use for your starting project.

The second talk was on symfony 1.2 and its bundled Doctrine ORM by katsuhiro.

The third session was my talk, “symfony plugins, etc.“, where I talked about symfony plugins structures, and some useful plugins which can let you add a new functionality quickly.

The last lightening talk’s title was “how to set up symfony environment with 2 lines” by brtRiver.

There was an after-party at the same room, by almost all attendees with Dino’s-proud professional-use beer server and delivered pizzas.



Originally uploaded by Kiryu Tsukimiya


This month, the first CakePHP conference in Japan was held and one CakePHP core developer visited Japan to make speech to 150 PHP users. We spoked (with cups of beer) about the possibility if we will be able to ask people from sensiolabs and/or other experts for similar symfony conference in near future.

symfony camp 2008が始まってます

PHPフレームワークsymfonyのカンファレンスsymfony camp 2008がオランダで開催中です。

Fabienさんの初日のレポートで、さっそく面白いプレゼン資料が出てきてるので紹介します。(写真みたら、ほんとに「キャンプ」してるんですね)

この中で僕が興味を持ったのは、3番目のYahoo!でのsymfonyの使われ方の話と、4番目のチューニング話。

Yahoo!のほうは、大成功しているQ&AサイトのYahoo! Answersなどがsymfonyベースで動いていることの説明。初出じゃない話ですけど、なぜsymfonyを選定することに至ったかとか、大規模サイトの設計で考慮した点とか、symfonyから何を使って何を使わなかったかという取捨選択の話、そして最近公開されてきてますけど、Yahooが作った数々のsymfony pluginsについて(p.24)、などが語られています。

チューニングのほうは、symfony+PHP+Apache等で性能を稼ぐためのポイントがよくまとまってます。

Yahoo!のDustin Whittleさんがプレゼン資料の最後につけてくれた6冊の「オススメ本リスト」、日本語訳が出てるものが多いです。

[am]1590597869[/am]
[am]067232699X[/am]
[am]4873112095[/am]
[am]4873113113[/am]
[am]4873113644[/am]
[am]487311361X[/am]

僕は3冊読んでました。集合知プログラミングはまだ買ってないんだけど、読まなきゃなと思ってます。

symfonyについて日本語で語りあうチャットが開始

人気PHPフレームワークsymfonyの新しいチャットルームが始まりました。symfonyを使っている人、興味のある人が気軽に情報交換できる場です。既に20人ものsymfony開発者が参加しています。

Skypeのパブリックチャットルームを使っているので、Skypeが必要です。スカイプはWindows, MacOSX, Linuxで動きます。

スカイプが起動したら、 http://tinyurl.com/5ek5xg にアクセスしてください。

僕は電話はほとんど使わないけど、Skypeチャットはよく使います。複数のパソコンからつなげることができて、それぞれで過去の発言をちゃんと読めるのが、某メッセンジャーより便利ですよ。

スカイプのチャットルームがはじめての方のために、便利な設定をいくつか紹介しますね。

デフォルトでは、誰かが発言するたびに、タスクバーが光ったり音がなったりします。これは人によっては邪魔でしょう。

チャットメッセージが来たときの音の通知を消す

メインウィンドウの[ツール]-[設定]-[サウンド]で、[チャットメッセージが着信したとき]のチェックをはずします

チャットルームからの通知を抑制する

チャットウィンドウの[オプション]-[チャット通知設定]で、[通知機能無効]をチェックします。

または、こっちのほうがオススメですが、同じ画面で[以下の単語が現れた時のみ通知]を選び、スペース区切りで「この単語が出てきたら通知してほしい」という単語を並べます。たとえば、

akky akimoto 秋元

とか。こうすると自分が呼ばれたときだけ通知が来ます。

チャットルームを閉じるとき、後で開きやすいように

チャットルームを閉じても、チャットには参加し続けていて、その間の会話も後で読むことができます。ただ、閉じたときに元のチャットルームを探して開くのがたいへんな場合もあるので、チャットウィンドウから[ブックマーク]-[このチャットをブックマーク]で、今いるチャットルームをブックマーク保存できます。

[関連]

#symfony-ja Skype Public Chatが出来ました

[メモ] symfony/sfPayloadFilterChainPluginによる文字列のフィルタ保存

sfPayloadFilterChainPlugin

掲示板とかで、表示時にフィルタをかけるんじゃなくて、保存時にまずい文字列とかを見つけて伏字にしたりするためのsymfony プラグイン。

インストール方法

> symfony plugin-install http://plugins.symfony-project.com/sfPayloadFilterChainPlugin

設定ファイル

$ cd frontend/config/pfc
$ edit frontend/config/pfc/profiles.yml
post_comment: [censor_bad_words, hide_phone_number]

$ edit frontend/config/pfc/filters.yml

  censor_bad_words:
    enabled: on
    class:   myCensorshipFilter
    params:
      bad_words:        [死ね, 死ねばいいのに, 氏ね]
      replacement_word: "王大人に死亡確認されればいいのに"
  hide_phone_number:
    enabled: on
    class:   akkyHidePhoneNumberFilter
    params:
      replacement_word: "***-****-****"

payloadでフィルタするテキストを受け渡す作りで、説明にあるように単純なpayloadクラスを作っておく

lib/payload/myTextPayload.class.php

[code lang=”php”]
class myTextPayload
{
public function getText()
{
return $this->text;
}
public function setText($text)
{
$this->text = $text;
}
}
[/code]

あとはフィルタクラスを実装して配置。autoloadさせるので置いたら”symfony cc”を呼ぶこと

lib/filter/akkyHidePhoneNumberFilter.class.php

[code lang=”php”]
/**
* hide Japan’s phone number from text
*
*/
class akkyHidePhoneNumberFilter extends sfFilter
{
// not a perfect solution
// see http://blog.livedoor.jp/nipotan/archives/17526053.html
const PATTERN = ‘/(?:0\d{1,4}[-.]?)?\d{1,4}[-.]?\d{4}/’;
/**
* Make phone number unreadable.
*
* @param string $text
* @return string
*/
public function execute($chain, $payload)
{
$replacementWord
= $this->getParameter(‘replacement_word’, ‘xxx-xxxx-xxxx’);

// Retrieve text from payload
$text = $payload->getText();

$censoredText = preg_replace(self::PATTERN, $replacementWord, $text);

// Replace payload text
$payload->setText($censoredText);

// Execute next filter in chain
$chain->execute($payload);
}
}
[/code]

あとは、実際に書き込みの発生するところで、手動(アクション側)または自動(モデル側)でこのfilterを呼び出すことで、まずい単語にマスクをかけるフィルタなどを、フィールド毎に適用させることができます。

[code lang=”php”]
class messageActions extends sfActions
{
public function executePost()
{
$payloadComment = new myTextPayload();
$payloadComment->setText($this->getRequestParameter(‘comment’));
// Filter payload
$chain = new pfcPayloadFilterChain();
$chain->loadProfile(‘post_comment’);
$chain->setPayload($payloadComment);
$chain->execute();
$this->comment = $payloadComment->getText();

(このあとpropelオブジェクトにセットして保存とか)
[/code]

で、入力フィールドのこういうのが

秋元(030-5555-5555)死ね

こうなる

秋元(***-****-****)王大人に死亡確認されればいいのに

アクションごとに適用できるフィルタをきめ細かく変更できるところと、適用するfilterをyamlで調整したり、可変のパラメータを設定できたりするところが利点なんでしょうか。もうちょっと使ってみようかと思っています。