Archive for October, 2006

symfonyチュートリアル実践【第1~2日目】

Oct 31 2006 Published by funaki under いじる

24日分に分かれたチュートリアルの1~2日目3日目は非公式?)は日本語訳もありますがあきらめて英語のチュートリアル参照。

1日目

用意した環境は、FedoraCore5にRPMでPHP5.1.6、apache2.2.2、MySQL5.0.22。

最初に悩んだのが

$ pear install symfony/symfony-beta

βの方がいいのか?うーん。stable(0.6.3)でいくことにした。

$ pear install symfony/symfony

httpd.confの設定でAllowOverride Allとしているのも速度的にどうなんだろう、とこの辺りは本番環境で変える必要がありそうです。
ローカルだけで動かしているマシンではないのでServerName askeetとなっている箇所は削除。

Subversionの設定の箇所は飛ばしました。

Congraturations!が表示されるまでは無事終了。

2日目

リアルに1日ずつやっていたら飽きること間違いなしなので勢いでやりつつブログ書いて自分にプレッシャーかける戦法で。

最初のsvn renameはSubversionを使っていないので単にmv。InnoDBの設定は無視。で、

$ symfony propel-build-model

のところで早速、

PHP Fatal error:  Class 'DomDocument' not found in ~

というエラー。

PHP: DOM XML Functions – Manual
これがPHP5にはついているそうですがFedora5のPHPは–disable-domになっていたので

# yum install php-dom

としてphp-xmlをインストール。これで解決。

最初はそのまますんなりいき、ブラウザで

http://askeet/question

にアクセス!

が、Oops!と怒られ500エラー。apacheのエラーログには何も出てこないので、デバッグの仕方がわからずとりあえずフォーラムで検索

1日目にちゃんと書いてあったのを読め、という話ですが

http://askeet/frontend_dev.php/question

にアクセスするとデバッグモードになり、Syntax errorが発生していることが判明。エラー箇所のコードを眺めると

$database = new Array();

とここでエラーになっていてこんな構文あったっけ、とひとしきり悩む。
同じエラーに悩まされている方がフォーラムにいらっしゃり、config/databases.ymlの記述がどうもおかしい、と判明。new Array()の部分は、コードが自動生成されたときに値がなくてArrayとechoされたのかな、と推測されます。

僕のコピペ時の凡ミスでしたが、YAMLはインデントに要注意です。

気を取り直して

$ symfony propel-build-schema

から再度コマンドを打っていくと

$ mysql -u youruser -p askeet < data/sql/schema.sql

今度はここでエラー。最初はうまくいったのになぜ。。

ERROR 1064 (42000) at line 32: You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL,
        `user_id` INTEGER default  NOT NULL,
        `created_at` DATETIME,
        PRIMARY' at line 3

“default”を消すとうまくいくわけですが、config/schema.xmlの記述がおかしいのでしょうか。フォーラムにも同じエラーが報告されていますがレスがついていないので詳細は不明。

手動でschema.sqlを編集して先へ進み、

$ symfony cc frontend config

を忘れずに実行して再びブラウザでアクセスすると今度はうまくいきました。

続く。

No responses yet

PHP5のフレームワーク、Symfonyの24チュートリアルを実践してみることにした

Oct 31 2006 Published by funaki under いじる

背景:

  • サーバでFedoraCore5を使っているため、PHP5を本格的に使うようになった
  • やや複雑なウェブアプリを作ろうと思っているが自作フレームワークでは役不足
  • Yahoo!が自社サービスの構築にSymfonyを使ったという記事が目に入った(symfony PHP5 framework » Yahoo! bookmarks uses symfony

検討材料:

フレームワークの数自体、以前比較した時よりずいぶん増えています。実行速度の比較は気になるところですが、悩んでも仕方ないのでPHP5用で一番ホットなSymfonyを試してみることにしました。

Yahoo!のエンジニアがSymfonyを採用した理由の最初に「Great documentation」を挙げていたのでsymfony advent calendarの24日分のチュートリアルを頭からいきます。

One response so far

ブログのレイアウトをちょっと変更&かっこいいサイト紹介

Oct 26 2006 Published by funaki under 感動する

11月1日のCSS Rebootにあわせてリニューアルしてもよかったのですが、まぁ。

今回使わせていただいた素材。

Lido STF font family : MyFonts
famfamfam.com: Silk Icons

Google AJAX Search APIをGblogSearchをCo-opに変更。GblogSearchだと古い記事がヒットしなかったので。

参考:
ブログのサイト内検索は、Google Co-op のカスタム・サーチエンジンできまり:Goodpic

IE7では動かないらしいですが、、とりあえずいいでしょう。

あとリニューアルに直接関係はないですが、インスパイアされたかっこいいサイトをいくつか。

http://www.coreywecler.com/
見た目もかっこいいですが何がすごいって、下のURLにアクセスしてみてください。
http://www.coreywecler.com/#corey

Flashでちゃんと実装しているサイトを初めて見たような気がする。

[Self Titled] [Copyright © 2006 John Iacoviello]
こちらはインタラクティブデザインが心地いい。

No responses yet

100shikilicious: 百式徹底解剖&開発合宿レポート

Oct 24 2006 Published by funaki under つくる

開発合宿に誘われて行ってきました。
開発合宿レポート10月版 今回は御殿場で! | i d e a * i d e a

僕が写ってる写真の後ろの部屋が青く光っていて怪しげですがプロジェクターの光です。
メインで作っていたものはまだお披露目できないのですが、開発マシンのCPUがうなりをあげている暇に作ったチョイアプリが以下。

100shikilicious: 百式徹底解剖

100shikilicious_thumb.gif

夕食前後にあれこれしゃべっている中で百式のデータで何かしよう、というシーズから生まれたアイディア。
百式の2005年から昨日までの記事で紹介されたサイトを、del.icio.usのブックマーク数でランキングしてみました。隣にはてなブックマーク数も載せています。

海外と日本とでだいぶ反応に違いがあることが見てとれます。はてブの方は、百式に影響されてブックマーク数を伸ばしたサイトも多いかもしれません。

合宿自体は、かなり開発が進んだので大満足。アルゴリズムをうんうん唸って考えるのには向いていませんが、コーディングするには程よい緊張感が普段より集中力を増してくれた感じ。
また行きたいですね。

僕的なポイント。

  • あらかじめ、やることをだいたいリストアップしておく(以前の開発合宿のレポートにそう書いてあったので実践したのがよかったっぽい)
  • スゴイ人と一緒だと細かい会話の中にもスゴイTIPSが潜んでいるので聞き逃せない!
  • 他の人に合わせないでちゃんと寝る(睡眠時間短いとダメな性質なので。スタンドアローンに開発している4人なのでOKでした)

合宿中、天気はかなり荒れていましたが晴れ間の見えた隙に撮った写真をいくつか。

dsc00138.JPG

dsc00137.JPG

dsc00141.JPG

dsc00140.JPG

One response so far

PostgreSQLで巨大データを扱うときのTIPS

Oct 22 2006 Published by funaki under いじる

1つ目が「indexは後からつける

create table test (
 id integer,
 title varchar(255)
);

こんなテーブルにCOPYでインポートするとき、

create index test_idx on test(title);

こういったindexを先につけてから実行すると30万行のデータで10分程度。6000万行あると72時間程度経っても終わらず。
indexなしなら10分で6000万行いけました。データが入った後のcreate indexには1~2時間。

動作環境はCPU 2.80GHz、Memory 1GでFedoraCore5にPostgreSQL8.1.4。

2つ目が「テーブルごとにデータをエクスポートするときはpg_dumpではなくてCOPY
バックアップ用のpg_dumpを使うと簡単ですが、-tでテーブルを指定するとCOPY文にならずにINSERT文で出力される。オプションで指定しなくてもそうなってしまうのでちょっと謎。COPY TO~でエクスポートすれば確実にCOPY用のタブ区切りテキストで出力される。

3つ目が「pg_ctl kill TERM [PID]で無理矢理止める
長時間かかるSQLをnohupなどで実行した時はpsでプロセスIDを確認したあと

pg_ctl kill TERM 10190

などとして止める。ちなみにMySQLのときは

mysqladmin processlist(idのリストが表示される)
mysqladmin kill id

巨大データ関係では、MLでも質問が出ていました。
[pgsql-jp: 35499] 巨大なテーブルの移行

PowerGresは速いらしい。
第 3 回 高速 COPY コマンドの活用 – 性能チューニングのポイント

3 responses so far

eAccelerator 0.9.5 PHP5.1, 5.2に対応してリリース

Oct 13 2006 Published by funaki under いじる

Release-0.9.5 – eAccelerator – Trac

PHP5.1系及びもうすぐ登場するであろう5.2に対応してくれました!

No responses yet

Wordpressの便利なプラグイン(英語圏向け)

Oct 12 2006 Published by funaki under いじる

My Top 10 Best Wordpress Plugins « John Chow dot Com

Wordpressのステキなプラグイン10個が紹介されています。

  • Sidebar Widget
  • AdSense Deluxe
  • Digg This
  • Feedburner Feed Replacement
  • Related Posts
  • Recent Comments
  • Optimal Title
  • Google Sitemap Generator
  • Akismet Comment Spam Killer
  • Wordpress Database Backup

それぞれのリンクは上記ブログから辿ってください。
この中で自分も使っているのはAkismetと改造したRecent Commentsだけですが、ちょっと気になったのはRelated Posts。プラグインの作者がMr.WASABI。

WASABI » Blog Archive » WordPress Related Entries 2.0

MySQLの全文検索を使っている。
MySQL 4.1 リファレンスマニュアル :: 6.8 MySQL 全文検索

SELECT句でMATCH AGAINSTを使うと、関連性が高いものから順に返されるらしい。知らなかった。。
explodeとimplodeで簡単に単語を操作できる英語ならでは。

あとはDigg Thisも短いコードですが賢い。
リファラーを見てdigg.comからのアクセスがあるとduggされたよ、とメールが来て自動的に黄色い”digg it”のアイコンがエントリに書き加えられる、という仕組み。若干重いような気もしますが。

No responses yet

はてブカウンタのXML-RPC API用のシンプルなPHPコード

Oct 06 2006 Published by funaki under いじる

引数にホスト名、返り値がブックマーク数だけなので何十kもあるXML-RPCのライブラリをインクルードするのが無駄に思えて、HTTPの通信ごと自前で書いてみました。富豪的プログラミングにあるまじき汎用性のない行為ですが。

<?php
function getHatenaBookmarkCount($query)
{
    $host = 'b.hatena.ne.jp';
    $fp = fsockopen($host, 80);
    if (!$fp) {
        die("cannot connect b.hatena.ne.jp\\n");
    }
    $xml = '<?xml version="1.0"?><methodCall><methodName>bookmark.getTotalCount</methodName><params><param><value><string>'.$query.'</string></value></param></params></methodCall>';
    $len = strlen($xml);
    $request  = "POST /xmlrpc HTTP/1.0\\r\\nHost: $host\\r\\nUser-Agent: zuzara-http-client\\r\\nContent-Type: text/xml\\r\\nContent-Length: $len\\r\\n\\r\\n";
    $request .= $xml."\\r\\n\\r\\n";
    fwrite($fp, $request);
    $res = '';
    while (!feof($fp)) {
        $buf = fgets($fp);
        $res .= $buf;
    }
    fclose($fp);
    if (preg_match("'<int>(\\d+)</int>'", $res, $match)) {
        return $match[1];
    } else {
        return 0;
    }
}

echo getHatenaBookmarkCount('http://blog.zuzara.com/');
echo "\\n";

HTTPのheaderは案外、必須な項目があるようでContent-Type: text/xmlやContent-Lengthをつけずに通信したらエラーが返ってきました。

No responses yet

Google Code Search来たる

Oct 05 2006 Published by funaki under 感動する

Google Code Search

待ってました!

No responses yet

忘れた頃にDukeマウスが届いた

Oct 05 2006 Published by funaki under 感動する

7月に出したSun×RECRUIT Mash up Awardは全然ダメでしたが早めに出したのが功を奏して、先着30名の参加賞のDukeマウスがもらえました。滑り心地がよくて案外悪くない。

Duke mouse

ちなみにマウスはここ5年程、ELECOMのM-FG2UP2RBKを愛用しています。

No responses yet

Next »