駒形電産

Debian Etchがそろそろリリースされるそうです。4.0って何かいいスね。

主な変更点はこんな感じです。

  • gcc4.1がデフォルトに
  • X.Orgがデフォルトに
  • APTに暗号化とパッケージの検証がサポートされる

あとはグラフィカルな新しいDebian-Installerも素敵です。

気になるパッケージのバージョンはこんな感じです。

Perl5.8.8
PHP4.4.4
PHP5.2.0
Python2.4.4
Ruby1.8.2
Apache2.2.3
MySQL5.0.30
PostgreSQL8.1.5
lv4.51

lvはどうでもいいか。

サーバ用途は断然Debianですが、最近ではデスクトップはUbuntuの方が情報を見つけやすいですね。(特にブラジル発が多くないスか?)

GUIのインストーラーはホント、様々なプラットフォームをサポートしつつよくぞ完成したなあって感じです。痛みに耐えてよく頑張った。感動し(略

アップデートするときは作法をもう一度確認しよう。

関連リンク

Blog::koyhoge – memcachedを用いた関数キャッシュ

これまでは関数キャッシュにはPEAR::Cache_Lite_Functionとかを使っていたのだけど、キャッシュ内容をディスクに書かれるのは遅い気がするし、最近はやぱしmemcachedでしょということで、Memcache extensionを使った関数キャッシュクラスを作って使っている。

関数キャッシュにmemcachedを使うというお話。

それ以前に関数キャッシュというものを知らなかった。Cache_LiteにCache_Lite_Functionというのがあるんですね。試してみました。

関数をキャッシュするって、副作用はどうなるんだろう?

$ cat func.php
<?php
foo();
foo();

function foo()
{
    static $v = 0;
    echo ++$v;
}
?>
$ php func.php
12

キャッシュ無しの場合。

$ cat cache_func.php
<?php
require_once 'Cache/Lite/Function.php';

$clf = new Cache_Lite_Function();
$clf->call('foo');
$clf->call('foo');

function foo()
{
    static $v = 0;
    echo ++$v;
}
?>
$ php cache_func.php
11

キャッシュありの場合。

デフォルトでは/tmpにできるキャッシュを見てみる。

$ cat /tmp/cache_7b181b55b55aee36ad5e7bd9d5a091ec_4109c93b3462dad44dc7bc4215c9f174
633326628a:2:{s:6:"output";s:1:"1";s:6:"result";N;}

なるほど、返り値と出力の両方をキャッシュしてくれるんですね。 色んなレベルでのキャッシング方法を覚えておくと困ったときに役に立ちそうです。

コレが面白かったのでAwesomeFrameworkに取り入れてみました。

ついでにページ用意しました

↓こういう風に書ける。

<?php
assign('hello', 'Hello World!!!');
assign('users', array('1' => 'God', '2' => 'Kain', '3' => 'Me'));
assign('user_id', 2);
<strong>return 'view';</strong>
?&gt;

configファイルもココで言ってたみたいに書ける。

includeのreturnってそもそも使ってなかったからほとんど副作用が出ないのがイイ!

ふつkell勉強会やってきました。

発表者がインストールしたことない、おとといふつkellを買ったばかり。参加者もHaskellとAsk himの違いがわかってないなど、マイナス地点からのスタート。

プロジェクタで単にふつうのHaskellのコードを一個一個入力してみて、コンパイルして、実行するというスタイルでやったんですが、グデグデになるかと思ったら、「これは何がうれしいのか」とか「ここをこう変えたらどうなる?」とか言いながら意外とちゃんと勉強になるなーという感じでした。

1章のインストール(みんな始めて)と2章のhello.hs(Hello, World!)とかtail.hsとかをやって、3章のさわりを少しやりました。

みんなの意見や疑問:

  • cs < getContentsの””<”“が良く分かんない
  • ghciのAAがかわいい
  • UNIXのコマンドが練習問題になってるのは楽しい
  • 高階関数は何がうれしいのだろう
  • PHPのarray_mapは高階関数なのかどうか

まだ全然わかってないんですが、実際に動かしてみると、

「話してみるとそんなに悪い奴じゃない。」

みたいな親近感を全員が持てたことが良かった。

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

PHP4, 5コンパチクラスのイディオム。

class Foo
{
//  var $foo;
//  var $bar;
//  var $baz;
    function foobarbaz() {}
}

だめかな・・・。

includeとかrequireでreturnが取れるなんて・・・!!!(via 上鍵さん

$ cat config.php
<?php
return array(
    'test' => array(
        'adapter'  => 'mysql',
        'database' => 'iitaidake_test',
        'username' => 'iitaidake',
        'password' => 'unk_test',
        'host'     => 'localhost',
        'socket'   => '/var/run/mysqld/mysqld.sock',
        'encoding' => 'utf8'
    ),
    'production' => array(
        'adapter'  => 'mysql',
        'database' => 'iitaidake',
        'username' => 'iitaidake',
        'password' => 'unk',
        'host'     => 'localhost',
        'socket'   => '/var/run/mysqld/mysqld.sock',
        'encoding' => 'utf8'
    )   
);

$ php -r 'print_r(include "config.php");'
Array
(
    [test] => Array
        (   
            [adapter] => mysql
            [database] => iitaidake_test
            [username] => iitaidake
            [password] => unk_test
            [host] => localhost
            [socket] => /var/run/mysqld/mysqld.sock
            [encoding] => utf8
        )

    [production] => Array
        (  
            [adapter] => mysql
            [database] => iitaidake
            [username] => iitaidake
            [password] => unk
            [host] => localhost
            [socket] => /var/run/mysqld/mysqld.sock
            [encoding] => utf8
        )
)

こういう設定ファイルとか良くない!?

・・・・・・・・・。

それじゃ、あれだ、

$ cat foo.php
<?php
class Foo {}
return new Foo;

$ php -r 'print_r(include "foo.php");'
foo Object
(
)

こういうクラスとか、すげー便利じゃない?

・・・・・・・・・・・・。

many favicon

以前に、「IEでfavicon出ない問題」をPHPはさんで解決しました。しかし、favicon一杯あるページ(ココとか)では切なくなるほど遅くなります。

普通の画像だってあるだけリクエスト飛ぶのに何が違うのかと思ったんですが、よく考えたら普通の画像はブラウザにキャッシュされるので2回目からリクエスト飛ばないんですよね。PHP挟むと毎回フレッシュな画像が表示される。(悪い意味で)

要はPHPでもブラウザにキャッシュしてもらえばいいのカー。 PHPのデフォルトではご丁寧に(今回は邪魔だけど本来超嬉しいデフォルト設定)ブラウザにキャッシュされないようにヘッダを吐いてくれてるので、(p0t: 戻るボタン対策)それを切るだけで良かった。

session_cache_limiterのパラメータの細かい説明がマニュアルに見当たらなかったんですが、

  • nocache—- ブラウザにキャッシュしないで(デフォルト)
  • private—- ブラウザにキャッシュして
  • public—- ブラウザとキャッシュサーバ(プロクシとか)にキャッシュして

だそうです。(via http://www.hizlab.net/app/portal.html)

&lt;?php
<strong>session_cache_limiter('public');</strong>
header('Content-Type:&nbsp;image/x-icon');
echo&nbsp;file_get_contents($_REQUEST['favicon']);
?&gt;

これで2回目から糞速い。

画像にPHPでアクセス制限かけてるとことか(←アクセス制限はずしてどうする)(←いや、問題ないか)、mysqlのblobから画像出してるとことかもこれやると速くなるハズ。
Kazuho@Cybozu Labs: DNS ラウンドロビンと高可用性 (High Availability)

あまり知られていないことかもしれませんが、DNS があるホスト名に対して複数の IP アドレスを返した場合、多くのウェブブラウザ注1は、その全てのアドレスに対して接続を試みます (接続に成功するまで)。つまり、DNS ラウンドロビンには高可用性 (High Availability) を実現する機能もある、ということです。

DNSラウンドロビン再評価++

Kazuho@Cybozu Labs: IPAフォーラム 2006 での講演スライド

その際に使用したスライドをアップします。よろしければごらんください。

素晴らし過ぎ。

「試す」ことができるのは、プログラマだけ
using API; 価格.comから4travel.jp、yoyaQ.com、クチコミ掲示板の各情報を取得するAPI公開

4travelのAPIは価格.comの他のAPIと違い、RESTのリクエスト先URLの拡張子がphpになっていて、出力形式にはPHPのシリアライズが選べる。

きたきたー!APIF(俺すら言ってない)の時代がー!

APIFの優位性はなんと言っても超簡単にPHPのクラスのインスタンスがやり取りできることですよ!

stdClassと__PHP_Incomplete_Classぐらいだけど・・・。

最初の行に使うクラス定義文(string)が入った別のserializedデータを用意して、それをevalしてから本文unserializeするってのはどうかな?

ダルそー!