Programming」カテゴリーアーカイブ

PHPの標準タイムゾーン

PHPを5.3にアップデートしたところ、様々なアプリで以下のようなワーニングが出てしまいました。

PHP Warning: date() [<a href='function.date'>function.date</a>]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in /www/hoge.php on line 100

これはdate()関数の仕様が変わったのが原因だそうで、date()関数の実行前にデフォルトのタイムゾーンを設定しないといけないみたいです。

設定の方法は2種類あって、ひとつは各プログラムごとに、以下の関数を実行してデフォルトのタイムゾーンを設定する方法。

date_default_timezone_set('Asia/Tokyo');

もうひとつは、php.iniで以下の設定をするという方法。

date.timezone = Asia/Tokyo

一つ目の方法ではプログラム全てに修正を加えないといけないので、僕は二つ目の方法で対処しました。

Perlの気持ちよさ

C言語で次のように書くプログラムがあったとする。

int main(void) {
    int i;
    for (i = 1; i <= 10; i++) {         printf("%d", i);     }     return 0; }

1から10までの数字を表示するためのもの凄く簡単なプログラム。
これを見て、ある人は { } のムダに気付いたかもしれない。あるいはC++やC99では変数の宣言をこう書くだろう。

int main(void) {
    for (int i = 1; i <= 10; i++) printf("%d", i);     return 0; }

このようにしてプログラムを綺麗で簡潔な形に書き直すことは気持ちが良い。
(上記の書き直しが綺麗かどうかは別の議論として)

ところでPerlという言語は、このような書き直しの方法がたくさん用意されている。
例えば上のプログラムの例だと、そのまま移植すれば次のようになる。

for (my $i = 1; $i <= 10; $i++) { print "$i"; }

Perlの場合、これを更に書き換えて、次のように書ける。

foreach my $i (1 .. 10) { print "$i"; }

ここで終わりではない。
更に省略しようと思えば、次のようにまで省略できる。

print for (1 .. 10);

今回例に挙げたようなもの凄く単純なプログラムでも、どんどん書き換えや省略ができてしまうのがPerlの楽しさであり、その方法が思いついたときのささやかな喜びが、僕にPerlを好きにさせているんだと思う。

(とはいえ、PerlにはXSという難解な言語仕様が待っているんだけど)

今日の献立ガジェット

Googleが提供するiGoogleではガジェットというパーツを追加して楽しむことができますが、中でも美人時計みたいに写真が表示されるガジェットは華やかで良いですよね。そこで僕は、美味しそうな料理の写真が表示されるガジェットを作ってみました。

とはいえ、1年半くらい前によく知りもしないJavaScriptを試行錯誤して使って作ったものなので、コードは汚いと思いますが、思い切って公開します。

ctags

Debianだとctagsの仕様がちょっと違うみたいで、普通にググった方法だとtagsファイルがうまく作成できなかったので、メモ。

具体的には、-Rオプションが効かないというか、別な意味1で使われてるみたい。
なわけで、findコマンドを使ってファイル一覧をパイプで渡す必要があるみたいです。

find /usr/local/src/ -type f -name *.php|xargs ctags -a -o /home/yuuan/tags

こんな感じでコマンド打ったらできました。
/usr/local/src/以下のPHPファイルに関するタグ情報を、/home/yuuan/tagsに書き込んでいます。

  1. 正規表現関係?

マイミクのマイミク

mixiの日記などの公開範囲に、「友達の友達まで」というのがありますが、いったいどれだけの人に公開されるのかが気になったので、マイミクのマイミクまでの範囲に含まれる人を一覧表示するプログラムを作ってみました。

方法は、HTTPのGET命令でマイミク一覧のページを取得して解析。更にマイミクごとのマイミク一覧ページを順々に取得して解析。
という凄く単純な方法を取ったのですが、僕の場合マイミクが80人くらいいるので、短時間に連続アクセスしたということでお叱りのページが表示されてしまいました。

1ページ取得するごとに約1.1秒開けてアクセスしても怒られ、約2.1秒開けてアクセスしてもまだたまに怒られたので、結構間を開けてアクセスしないといけないみたいですね。
でも例えば3秒開けてアクセスするとなると、マイミク80人全員分のマイミクを取得するのに4分もかかってしまいます。

これってAPIが公開されたら解決されるのでしょうか?
なんだか面倒ですね。ε-(ーдー)ハァ

Windows Live Messengerのログ

Windows Live Messengerでは、チャットの履歴を自動的に保存することが出来ます。
初期設定では多分保存しないようになっているのですが、次の方法で自動的に保存するように設定できます。

メニューから[ツール]→[オプション]を開き、左のリストから[メッセージ]を選択すると開かれる設定項目の中の、[自動的にメッセージの履歴を保存する]にチェックを付けます。
同時に、[メッセージの履歴を保存するフォルダ]を[変更]すれば、保存先も指定できます。

僕が修士で開発しているシステムでは、コミュニケーション履歴を扱うため、ここで保存された履歴を取得する方法を模索します。

IEのキャッシュを利用する

僕は修論でコミュニケーションログを扱う研究をしておりまして、その中で過去に見たブログなんかもコミュニケーションログとして扱いたいよね、ということになり、IEのキャッシュからHTMLファイルを取ってくることになりました。
今回はその方法を記します。

と言っても、そんなに難しくないです。

mixi stationが止められた

僕は音楽再生には、自分で作ったソフトを使っているのですが、このソフトから以前紹介した方法でmixi stationに曲情報を送るために、build 20060629という古いバージョンのmixi stationを使っています。
しかしどうやらその古いバージョンが、ここ数日の間に、サーバー側で使えなくされてしまったみたいです。

タスクトレイのアイコンに×マークが付いていて、その右クリックメニューから「mixi stationを表示」を選ぶと、以下のようなエラーメッセージが出てきます。

アップデートファイルが見つかりました。楽曲の送信をおこなうにはmixi stationを再起動してアップデートをおこなう必要があります。お手数ですが一旦mixi stationを終了して再度立ち上げてください。

以下はその対策についての考察。

mixiをRSSで読みたい

mixiにログインすると、「最新情報」という欄があり、そこで「マイミクシィ最新日記」や「コミュニティ最新書き込み」などのサイト内の最新情報を確認することができます。
しかしこれが使いにくく、できればRSSリーダで他のサイトの情報と一緒に確認したいと思って調べ、見付けたのが以前紹介したmixipressというソフト
そして、その後の調べで、mixi2rssというソフトも見付けました。

しかしこれらのソフトはどちらもCGIとして動かす物であり、動かすにはウェブサーバが必要になります。
それがどうも気に入らない。
ローカルで動かすソフトで同じようなことが出来ないかなと、前から思っていたのですが、今回はC#でmixiからHTMLを持ってくるプログラムを試しに作ってみましたので、その方法を紹介します。

IEでmixiを閲覧したときに生成されたCookieを利用し、mixiからHTMLデータを取ってくるプログラムです。