Do You PHP はてな このページをアンテナに追加 RSSフィード

2010-02-09

[][][]symfony1.4勉強会

events.php.gr.jpアナウンス出てますが、symfony1.4勉強会が開催されます。会場は浜松町にある株式会社ファーストロジックさんです。

Symfony1.4の勉強会を開催します。

当日は、ファーストロジック社員が講師になりセミナー形式で進行させていただきます。またセミナー後に簡単な交流会を開きたいと思います。ぜひ、お気軽にご参加ください。

■概要

内容:

  • はじめてのSymfony1.4 〜インストールから習得のポイントまで〜
  • 実装サンプル紹介

ターゲット:

Symfony1.4勉強会 - events.php.gr.jp

今使っているのがsymfony1.0+Propelなので、そろそろsymfony1.3/1.4の感じをつかんでおきたいな、ということで参加予定です。

2010-02-03

[]TwitKitからTwitKit+ (TwitKitPlus) に乗り換えた

Twitterクライアントとして愛用しているFirefoxアドオンのTwitkitですが、リプライの際にin_reply_to_status_idを投げていないので、いつも新規twitとして扱われていたり、RTするのにいちいち"RT "とタイプしたり本文をコピぺする必要があるのが気に入らなくなってきてました。

で、たまたま知ったのが、TwitKitからforkしたTwitKit+です。まだ開発版の扱いになっています。

TwitKitにいろいろ機能を追加して独自に公開していたのを、公式サイトに登録したもののようです。

TwitKit+ :: Add-ons for Firefoxにある"Twitkitに追加された機能"は次のような感じです。うーん。すばらしい。。。

・フォロー、アンフォローボタンの追加
・ユーザ情報表示ボタンの追加
・RTに対応(非公式)
・FireFox3.6に対応
・ユーザ上表表示時に、そのユーザのコメント一覧も同時に取得
・追加メッセージ取得
・ボタンの配置変更
・ボタンの説明表示に対応
・reply-to の表示
・in-reply-to(返信元メッセージ)送信の対応
・in-reply-toリンクの修正
・返信元メッセージID 表示
・オプションの表示崩れの修正(元からあったもの)

見た目、アイコンが増えてるのがわかります。

f:id:shimooka:20100203132425p:image

いまのところ、criticalなエラーは出てないので、こちらに乗り換えます。


まあ、in_reply_to対応まで実装したあとにググッてみたら見つけちゃったので乗り換える、というのは内緒です;-)

追記(2010/02/05 22:54)

ver.0.0.5がリリースされています。レビューで書かせてもらったcriticalではない問題に対応していただいたようです。ありがとうございます:-)

2010-01-06

[]Pokenクリスマスプレゼントキャンペーンで粒谷区賞が当たった

via. Poken Japan

キャンペーン期間最終日に応募したんですが当たりました:-) 去年の運がまだ残っていたようです。で、昨日、届きました。

f:id:shimooka:20100105105200j:image

早速取り付けてみたら、こんな感じ。似合ってるのか似合ってないのか。。。

f:id:shimooka:20100106102500j:image

ま、次回参加するイベント(何)にでも持っていってみます。

2010-01-04

[][]Xdebug2.1.0beta1が出てた

via. PECL :: Package :: Xdebug

今日で年始休みは終りです。休みは何でこんなに早いんでしょうねぇ:-(

で、正月にたまったFeedを消化していると、Xdebug2.1.0beta1がリリースされた模様。PHP5.3にも対応したようです。とりあえず、新たに追加された機能を試してみました。

xdebug_get_headers関数の追加

header関数やsetcookie関数で出力されたHTTPヘッダ情報を配列で取得できる関数です。サンプルコードはこんな感じ。

<?php
header("Content-Type: text/plain");
header("X-Test: Testing");
setcookie("TestCookie", "test-value");
var_dump(xdebug_get_headers());

これを実行すると、次のようになります。

$ php xdebug_get_headers.php
array(3) {
  [0]=>
  string(24) "Content-Type: text/plain"
  [1]=>
  string(15) "X-Test: Testing"
  [2]=>
  string(33) "Set-Cookie: TestCookie=test-value"
}
$

なんてことないような感じですが、出力のテストに使えそう。

xdebug.collect_assignmentsディレクティブ

xdebug.collect_assignmentsディレクティブを有効にすると、関数やメソッド内部の変数の値もtraceできるようになります。たとえば、次のようなスクリプト

<?php
function calc($a, $b) {
    $val1 = $a;
    $val1 *= 2;
    $val2 = $b;
    $result =  $val1 + $val2;
    return $result;
}
$a = 4;
$b = 7;
$c = calc($a, $b);

をxdebug.collect_assignmentsディレクティブ付きで実行すると、以下のようになります。

$ php -d xdebug.auto_trace=1 -d xdebug.collect_params=4 -d xdebug.collect_return=1 -d xdebug.collect_assignments=1 calc.php
$ cat /tmp/trace.1209371132.xt
TRACE START [2010-01-04 00:07:37]
    0.0006      48344   -> {main}() /home/shimooka/public_html/pecl/xdebug/calc.php:0
                         => $a = 4 /home/shimooka/public_html/pecl/xdebug/calc.php:9
                         => $b = 7 /home/shimooka/public_html/pecl/xdebug/calc.php:10
    0.0006      48576     -> calc($a = 4, $b = 7) /home/shimooka/public_html/pecl/xdebug/calc.php:11
                           => $val1 = 4 /home/shimooka/public_html/pecl/xdebug/calc.php:3
                           => $val1 *= 2 /home/shimooka/public_html/pecl/xdebug/calc.php:4
                           => $val2 = 7 /home/shimooka/public_html/pecl/xdebug/calc.php:5
                           => $result = 15 /home/shimooka/public_html/pecl/xdebug/calc.php:6
                           >=> 15
                         => $c = 15 /home/shimooka/public_html/pecl/xdebug/calc.php:11
                         >=> 1
    0.0006       8268
TRACE END   [2010-01-04 00:07:37]

$ 

メソッドの場合も同様です。

$ cat class.php
<?php
class Foo
{
    private $name;
    public function __construct($name, $value = 1) {
        $this->name = $name;
        $values = array();
        $values[] = $value;
    }
    public function execute() {
        $str = "name is {$this->name}";
        print $str;
    }
}

$obj = new Foo('bar');
$obj->execute();
$ php -d xdebug.auto_trace=1 -d xdebug.collect_params=4 -d xdebug.collect_assignments=1 class.php
name is bar[shimooka@centocat /tmp/trace.1209371132.xt
TRACE START [2010-01-04 00:15:27]
    0.0011      50788   -> {main}() /home/shimooka/public_html/pecl/xdebug/class.php:0
    0.0015      51104     -> Foo->__construct($name = 'bar', $value = ???) /home/shimooka/public_html/pecl/xdebug/class.php:16
                           => $this->name = 'bar' /home/shimooka/public_html/pecl/xdebug/class.php:6
                           => $values = array () /home/shimooka/public_html/pecl/xdebug/class.php:7
                           => $values[] = 1 /home/shimooka/public_html/pecl/xdebug/class.php:8
                         => $obj = class Foo { private $name = 'bar' } /home/shimooka/public_html/pecl/xdebug/class.php:16
    0.0020      51152     -> Foo->execute() /home/shimooka/public_html/pecl/xdebug/class.php:17
                           => $str = 'name is bar' /home/shimooka/public_html/pecl/xdebug/class.php:11
    0.0034       8268
TRACE END   [2010-01-04 00:15:27]

$ 

xdebug.screamディレクティブ

以前、scream拡張モジュールについてエントリしましたが、機能的にXdebugに組み込まれたようです。要は、エラー制御演算子(”@”演算子)を無効にして、エラー時にメッセージを出力するようになります。

<?php
$handle = @fopen('not_exist_file.txt', 'r');

通常は、これを実行すると、

$ php xdebug_scream.php
$ 

のようにエラーが出力されませんが、xdebug.screamを有効にすると、

$ php -d xdebug.scream=1 xdebug_scream.php
PHP Warning:  fopen(not_exist_file.txt): failed to open stream: No such file or directory in /path/to/xdebug_scream.php on line 5
PHP Stack trace:
PHP   1. {main}() /path/to/xdebug_scream.php:0
PHP   2. fopen() /path/to/xdebug_scream.php:5

Warning: fopen(not_exist_file.txt): failed to open stream: No such file or directory in /path/to/xdebug_scream.php on line 5

Call Stack:
    0.0001      46456   1. {main}() /path/to/xdebug_scream.php:0
    0.0001      46572   2. fopen() /path/to/xdebug_scream.php:5

$

となります。古〜いコードをメンテナンスする際には有効かも知れません。

2009-12-31

[]2009年ふりかえり

あと2時間ほどで2009年も終りますので、この辺で観る予定じゃなかった紅白をチラ見しながら2009年をまとめておきます。

Do You PHPはてな

基本統計はこんな感じ。直帰率高ぇw まあ、1エントリ完結ですから。

  • ページビュー:61,655
  • ページ別セッション:138,514
  • 直帰率:81.98%

f:id:shimooka:20091231221224p:image

アクセスTOP10は以下のとおり。

  1. Firefox3.5と(個人的)アドオン対応状況のまとめ - Do You PHP はてな
  2. Paros使ってみた - Do You PHP はてな
  3. 出力バッファとflush()・ob_flush() - Do You PHP はてな
  4. CF-R4のメモリを増設 - Do You PHP はてな
  5. 「multipart/form-data使ってアップロード」で助けて〜 - Do You PHP はてな
  6. mixiのAPIが増えていたので、Services_MixiAPI作ってみた - Do You PHP はてな
  7. TokyoTyrantをざっくり使ってみた - Do You PHP はてな
  8. sqlite絡みのアドオンをインストールしてみた - Do You PHP はてな
  9. date.timezoneを設定するとdate()が早くなる - Do You PHP はてな
  10. Yahoo!がPHPエンジニアを雇う時に聞く質問 - Do You PHP はてな

Do You PHPはてなの非はてブ

TopHatenarのグラフから。全然PHPと関係ないエントリがよくブクマされてるのがいい感じ。

f:id:shimooka:20091231221223p:image

イベント

今年は2Q以降、仕事の関係で、ほとんどイベント系に出られなかったです。。。

また、間が開いてしまいましたが、第3回設計勉強会を開催しました。いつもと違うメンバー・違う開催場所とあって、なかなか楽しかったです。

執筆関連

2008年から技術評論社さんのWEB+DB PRESSに1年間連載させていただき、2月発売のVol.49で無事終了。

公私

今の会社に移って丸2年経ちました。ことしは、大型メジャーバージョンアップとPHP4からPHP5への移行、フレームワークとしてsymfonyの採用、"がっつり"テストを書いたりで、かなりてんやわんやでした。おかげで夏〜秋までは全然動けずでした。秋以降も久しぶりにJSTL作ったりPerlモジュール作ったりしてました。

私的な方では、少年サッカーのパパコーチを始めました。。。ということで、4級サッカー審判員の資格を取りました。週末はほとんどサッカー漬けですw

f:id:shimooka:20091231221222j:image

去年末の目標達成状況

去年はこんなことを書いてましたが、

  • もうちょっとまともにコードを書く
  • テストを現在のペースで進めてみる

はできたかな、と。やっぱり、イベント出席はきつかったなー。。。

来年は。。。

仕事の方は、年明けすぐにリリースが控えていて、春ぐらいにもマイナーバージョンアップを予定しているので、その頃までは今と変わらない感じですねーorz また、最近新しいことに全然手を出せていないので、少しずつでもやっておきたいです。仕事に反映できれば、よりベター。


今年も1年間ありがとうございました。

2010年もよろしくお願いします:-)

2009-12-24

[]メリークリスマスイブ!

皆さん、良いクリスマスイブ&クリスマスを!

f:id:shimooka:20091224111810p:image

って、去年も同じような画像を上げた気が。。。ということで、別のも。

f:id:shimooka:20091224111809p:image

2009-12-18

[][]Services_ShortURL_Googl作った

先日、GoogleがGoogleツールバーなどから利用するURL短縮サービス(Google URL Shortener)をリリースしたわけですが、Perl界隈では早速Yappoさんがモジュールを書かれた模様。

http://goo.gl/ ってのが巷では始まっていますが、まだ勝手に tinyurl を作れないようなので

簡単に http://goo.gl/hoge な tinyurl を作る WWW::Shorten::Google ってモジュールを書きました。

http://github.com/yappo/p5-WWW-Shorten-Google

CPAN には、各種 tinyurl を使って url を短くするための統一インタフェイスとして WWW::Shorten ってのがあるので、それの流儀にしたがって作りました。

YappoLogs: goo.gl の API を叩いて goo.gl のショートURLを作る WWW::Shorten::Google ってモジュールかいた

GitHubのソースを見てみると、何じゃこの演算は。。。で、調べてみると、

goo.gl短縮URLを作るための、APIは公開されていないのだが、Google Toolbarのxpiファイルをunzipし、lib/toolbar.js というファイルを読むと getUrlShorteningRequestParams_ という関数が見付かる。これが、Google URL Shortenerに投げるPOSTデータを生成している。

Google URL Shortener APIを利用する - DiaryException

あーなるほどー。ということで、

$ wget http://dl.google.com/firefox/google-toolbar-beta-win.xpi
$ unzip google-toolbar-beta-win.xpi
$ grep em:version install.rdf
    <em:version>7.0.20091214Wb1</em:version>
$ cd lib
$ 

して、toolbar,jsを確認。おお。。。なるほどなるほど。この部分を他の言語に置き換えれば、Perl版だろうがPHP版だろうが作れそうな感じ。


ということで、Services_ShortURL_Googl作りました。"Google"じゃなくて"Googl"です。モノはopenpear.orgに上げてあります。

インストール

$ sudo pear channel-discover openpear.org
$ sudo pear install -a openpear/Services_ShortURL_Googl-alpha
$ 

な感じで。PEAR::Services_ShortURLパッケージのサブパッケージ的な位置づけで作ってますので、当然PEAR::Services_ShortURLは必須です。また、goo.glのレスポンスがjson形式のため、これを処理するためにjson拡張に依存しています。ということで、PHP5.2.0以上に対応ということで;-)

使い方は、SVNリポジトリにあるsample.phpのような感じ。

<?php
require_once "Services/ShortURL/Googl.php";

/**
 * Services_ShortURLパッケージに組み込まれれば、
 * Services_ShortURL::factoryメソッドを使うように
 * なるハズ
 *
 * $obj = Services_ShortURL::factory('Googl');
 */
$obj = new Services_ShortURL_Googl();
try {
    $result = $obj->shorten('http://d.hatena.ne.jp/shimooka/');
    echo $result . PHP_EOL;
    echo $obj->expand($result) . PHP_EOL;
} catch (Exception $e) {
    echo $e->getMessage() . PHP_EOL;
    exit;
}

このスクリプトの出力は、

$ php sample.php
http://goo.gl/BuQj
http://d.hatena.ne.jp/shimooka/
$ 

のようになります。

折角なので、Date_Holidays_Japanの時のようにPEAR本家に提案してみる予定。


このパッケージを作るに当たり、Yappoさんの公開されたコードを参考にさせてもらいました。ありがとうございました:-)