駒形電産

昨日、知合いのデスマ(ーチ)案件でポスグレが急に遅くなるトラブルが発生したという話を聞きました。(他人事)

そういえば2005年に勉強会でPostgreSQLのチューニングの話をやったなと思って、探したら資料が出てきました。

65536倍速いSQL

とてもまじめな勉強会のタイトルには見えませんが、自分自身Query Planの見方など、ポスグレを久しぶりに使うときは見直すところではあります。

内容自体はシーラカンス本などを全部読めば載っていることばかりですが、実際は業務に追われてなかなか把握する暇が無い人も多いと思います。ですがこのくらいの内容で休日出勤が無くなるならお得です。

PC UNIXユーザのためのPostgreSQL完全攻略ガイド―豊富な機能と高い信頼性を誇るオープンソースデータベース
「PHP 4」のサポートが2007年末で終了へ:ニュース – CNET Japan

「PHPの開発チームは、PHP 4のサポートを2007年末で打ち切ることをここに発表する」と、PHPプロジェクトの事務局は、米国時間7月13日にPHPのウェブサイト上に掲載した。ただし、「重大なセキュリティ上の修正については、ケースバイケースで引き続き2008年8月まで対応する」としている。

ひぃぃ、PHP4のサポートが終了!?

UbuntuもFeisty FawnからPHP4入ってねーし、Plnet.jpはPHP4で作ってるのに困ったな?。

だからみんなAwesomeFrameworkで作れとあれほど・・・。(言ってない)

awesome_framework.png

PDT Project

pdt.jpg

The PDT project is working towards providing a PHP Development Tools framework for the Eclipse platform. This project will encompass all development components necessary to develop PHP and will facilitate extensibility. It will leverage the existing Web Tools Project in providing developers with PHP capabilities.

EclipseのPluginでPDTってあるんですね。名前からしてJDT並の機能を期待してしまいます!

OPML2Twitterをつくってみた – よくきたblog

まずplnet.最近で言うとaboutmeっぽいやつですけどずいぶん前からあります. ようするに自分のいろんなCGM系コンテンツがある人がそれらのRSSなどのフィードを用いて1箇所にまとめちゃいなYO!!ってサービスです.

(中略)

- OPMLを取得する - simplexmlで解析し,フィードURL群を束ねる - XML_Feed_Parserでエントリ群の題名,URL,日付を取得する - エントリをTwitterに送る,とりあえず複数エントリある場合の送信は2分間隔でおこなう.

よくきたblogで上鍵さんがPlnetを利用して最新エントリをTwitterに送るスクリプトを公開してくださってます。

OPMLのアイコンがかわいいという理由だけでOPML出力してたんですが(言い過ぎですが)初めて使われた気がして感動しました。それと同時にバグも見付かって上鍵さんには直でPlnetのTracにわざわざTicketを入れて貰いました。

なんでRSSじゃなくてOPMLなのかというとエントリのURLが元の記事じゃなくてPlnetのパーマリンクになるからなんですな。RSSにそれっぽい語彙があったらそのURLも忍ばせたいもんです。

それとさり気なくPHP5を使ってるのがショック。PlnetはPHP4なのでUbuntuでの開発が面倒になりつつあります。(家のDebianで開発してる)simplexmlとかXML_Feed_Parserとか便利そうですね・・・。

Martin Albisetti » Blog Archive » PHP4 not available in Feisty

PHP4 is not in Feisty Fawn’s repositories at all and has been completely replaces by PHP5.

Ubuntu 7.04で遂にPHP4が消えたーーーっっっ!!

まいったなこりゃ。

はてなブックマーク – ウノウラボ Unoh Labs: MySQL5からのインデックス結合で1テーブル複数インデックスを使う

kubi

うわぁ、ショックだし理由が気になるわあ。追記:

$php→rails (rails に憧れる phper のブログ) – 複合インデックスと複数インデックス

でも、上の構造で、name, age を元に抽出するつもりだとすると、

自分の感覚では複合インデックス付ける。

こちらを見てて気づいたんですが、「あの例なら複合インデックスを使う方が良い、もしくは複合インデックスの存在を知らないのか?うちらならクビ」ってことなのかな?

plnet.jpのサーバ移行が完了しましたー。

以前はレンタルサーバーで借りていたんですが、アクトインディ株式会社さんが社内サーバー設置をすることを機に社内の片隅にPlnetのサーバーも置かせてもらえることになりました。

ハードも好きに選んでということだったのでキャンペーン中につき半額で24,800円というお買い得なHP ProLiant ML110 G4にしました。

社内にお邪魔して、リリースされたばかりのDebian etchを速攻でインスコして外から接続できる状態にしてきました。その後、家からなんだかんだ設定して先日DNSの移行も完了したとこです。

一時期はやばかったCPU負荷もアプリケーションのチューニングでかなり良い状態。24800円のサーバ1台でどのくらいいけるのか、今後も全ての情報を晒しつつ頑張ってみようと思います。

大失敗という結果情報を晒すことになるかもしれませんが、どちらにしろ個人でWebサービスをやろうと思ってる方の参考になれば幸いです。

create_functionが気になったのでもうちょっと実験。

$ cat lambda.php
<?php
$lambda = create_function('', 'echo "foo\n";');
var_dump($lambda);
var_dump('lambda_1');
call_user_func($lambda);
call_user_func('lambda_1');
$ php lambda.php
string(9) "lambda_1" 
string(8) "lambda_1" 
foo

Warning: call_user_func(lambda_1): First argument is expected to be a valid callback in /home/komagata/works/example/php/lambda.php on line 6

怪しい。その1byteは何なんだと。

create_functionは関数名に使えない名前で関数定義してるだけってのはホントっぽいっすね。

PHPでクロージャ

$ cat closure.php
<?php
function get_adder() {
    static $count = 0;
    return create_function('', 'return ++$count;');
}

$adder = get_adder();
echo call_user_func($adder);
echo call_user_func($adder);
echo call_user_func($adder);
$ php closure.php
111

・・・に、失敗!

Plnetのコード整理とバグ潰し。

ダブっちゃいけないURLをtext型の255byteのINDEXで管理してたので長いやつはダブる状態になってた。しかもINDEX長いので速度も糞。

urlのmd5を作ってそちらを見るのが常識だということを知りました・・・。これならINDEXも32byteで雲泥の差。

t-kawaduが変換して重複も消してくれるバッチを書いてくれたのでスッキリ。

コードの方はあまりにもDRYじゃない部分を2つ変更。もはやオリジナルMojaviのコードにこだわってもしょうがないので本体に手を入れました。ひとつはViewが無くてもOKにしたのと、Railsのlayoutみたいにして大枠をひとつにまとめました。

<?php
class FooAction extends Action {
    var $layout = 'Public'
    (略)
}
?>

Public.html:

ヘッダー
{$partial}
フッター

実装はどうでもいいとして、重複コードを減らすとその分細部に時間をかけられて嬉しい。テンプレの共通化が進むと、適当なCSSとかHTMLだったのを、ちゃんと書こうかな!って気になります。