2006年5月の投稿

2006-05-09
雨

本文も DB に入れるか

ゆりこ による 22:16:00 の投稿
カテゴリー: 更新履歴

Yuriko.Net へのコメント機能・トラックバック機能の実装ですが、真剣に作っていくと、本文自体もデーターベース (DB) に入れて、そこから HTML ファイルを構築する方がすっきりするように思えてきました。

当初の構想では、HTML ファイルはエディタでの手書きで、コメントとトラックバックは PHP で DB から読み出して逐次表示させる方式の予定でした。こうしておくと、手元で HTML を編集できるので自由度が高いのです。しかし、サイトの閲覧ごとに DB アクセスが発生するのでサーバーの負荷が高く、HTML を手書きするのは楽しい反面、手間に思うときもあります。どうせ DB へのアクセスをするなら、日記本文も DB に入れてしまった方が柔軟性が高くなります。たとえば、カテゴリごとに日記を抽出することも可能になります。

DB に入れるとしたら 2004年8月のリニューアル後の日記すべてですが、いきなりそれをするのは大仕事なので、2006年5月以降だけ入れてみて、残りはあとでちょっとずつ入れることのが楽そう。

しかしながら、そういうシステムを作ると、本当にウェブログツールを作ることになってしまうわけで、車輪の再発明になりそうで、ちょっと嫌な気もします:-)

回数券消化旅行

ゆりこ による 22:36:00 の投稿
カテゴリー: 旅行

次回のカフェ玖伊屋が6月24日に決まったことで、それまでに飛行機の回数券消化旅行をする必要が出てきました。手元の4回回数券は2月11日に発券したもので、6月11日が有効期限です。そのときの帰りに1枚、連休に2枚使ったので1枚残っていますが、6月のカフェ玖伊屋には使えないわけです。4回回数券は記名式なので金券屋で売るのも困難です。

といって、今週末のJ2関西に行くのはさすがにしんどい。6月上旬で大阪方面のイベントを探して、それに参加するという方向を考えないと……。

2006-05-10
くもり

ウェブログツールをお試し

ゆりこ による 23:35:00 の投稿
カテゴリー: WordPressハック,ソフトウェア
タグ: , ,

車輪の再発明は避けたいので、とりあえず既存のウェブログツールがどんな感じか試してみることにしました。Movable Typeは、無償ライセンスに制限が多いことと、使っている人が多いというのでパス:-) その他で、日本語対応がしっかりしててカスタマイズがやりやすいものとして、P_BLOG, WordPress ME, Nucleus CMS を試しました。

結論から言うと、WordPress がわたしの要求に一番近いですが、それでも現行の Yuriko.Net の URI を維持できないので導入不可です。クールな URI は変わらないと考えているので、ツールを導入したからといって URI が変わってしまうのは問題です。むしろ、ツール側の工夫で URI を維持できるようにしてもらいたいものです。

さらに、投稿日時と掲載日時をずらすことができないのが難点です。わたしは、ある日 (xx月yy日) の出来事を後日投稿することがありますが、この場合、エントリの収容される日付は xx月yy日とするかわり、記事末尾の投稿日時は実際に書いた日 (xx月yy日より後の日付) にしています。しかし、今回テストしたツールはどれも、そういう技は使えません。ウェブログという仕組みが、そういう使い方を想定してないんでしょう……。あと、プラグインやモジュールで機能追加できるとしても、日付ごとに天気を入れるプラグインは存在しないので自作しないといけないし……。

まず、P_BLOG のサンプルの評価。デフォルトのスキンは非常におしゃれなんですが、これ以外のスキンを使うのはちょっと難しい。マニュアルは整備されているんですが、サイドバーを両側に置くとかできるかどうか不明。あと、Permalink (永久リンク) の URL が動的 URL っぽくてダサいこと。開発者は、「最近の Google は動的 URL でも拾ってくれる」という理由で、URL をかっこよくする予定はないそうです。開発者は「クールな URI」の概念を分かってないんでしょう。

一番困ったのが、管理画面の設定項目はヘルプ文書がないこと!! 「ページャースタイル: ◎ Link ○ Form」というラジオボタンは、どの部品をどう設定するのかちんぷんかんぷん。

次は WordPress のサンプルの評価。スキンはいろいろあって、差し替えも簡単です。ただし、有効にしたスキンに問題があると、サイト全体が画面真っ白になってしまう場合があります。この場合、動作させようとしたスキンをサーバーから削除させないと復活できません。しかし、管理画面も使いやすく、ウェブログじゃないコンテンツとの融合もしやすそうです。

最後は Nucleus のサンプルの評価。「ニュークレアス」と読むらしいこのツールは、プラグインとスキンがめちゃめちゃ充実しています。しかし、管理画面がいまいち分かりにくいです。複数 Blog を編集することに最適化されていて、Blog ごとの個別設定が少し奥深いところにあるからです。あと、トラックバックは標準機能ではなく、プラグインで実現されているのは少し難点です。

他にも細かい問題点などあって、どれも一長一短という気がします。どれか1つ選べと言われたら WordPress にするでしょうが……。とりあえず、これらのサンプルサイトは、当面は公開しますが、しばらくしたら削除してしまう予定です。以前の iWeb お試しのように移設するつもりはありません。コメントやトラックバックをしてもいいですが、いたずらは遠慮願いますです。

[追記 2006-05-11 23:48] これらのツールを使えない理由として「クールな URI」の概念をもとに加筆訂正しました。

[追記 2006-08-10 22:33:48] サンプルを静的HTMLファイルに変換して Yuriko.Net 内に移設しました。

2006-05-11
雨

モバイル Suica チャージ失敗

ゆりこ による 23:36:00 の投稿
カテゴリー: 鉄道

きょうは午前中に病院ゆきでしたが、モバイル Suica の残高がないのでオンラインチャージしようとすると「クレジットカードの認証ができません」となりました。あれ? と思ってモバイル Suica の他のメニューを試してみると「サーバーが混みあっております」という表示が出ます。

てっきり、2月18日の「えきねっと混雑」と同じ状況かと思ってしまいましたが、11時すぎという、混むとは思えない時間帯なので、モバイル Suica コールセンターに電話してみると、カードに不具合が出ているとのこと。ビューカードセンターに問い合わせると、5月8日の引き落しが残高不足なので止められているという話でした。ううう。自分の責任でした。サーバー混雑表示は、たまたま通信が失敗したのが理由だったようです。

あわてて別口座からお金を下して VIEW ALTTE で入金したら使えるようになりました……。

ドコモも防水電話

ゆりこ による 23:44:00 の投稿
カテゴリー: モバイル・携帯電話
タグ: ,

孤高の防水電話である G’zOne type-R にライバルが出るようです。なんと、ドコモが防水端末を復活させるのです。きょう発表された 902iS シリーズの1つ、SO902iWP+ は、小型で IPX7 等級の防水性能を持った端末だそうです。当然おサイフケータイです。

うーむ。個人的には、SONY 製品は「メモリースティックをあきらめるまで買わない」ことにしているので興味がありませんが、ソニエリ好きな人は世間にそこそこいるので、けっこう売れるかもしれませんね。あ、G’zOne と違って、耐衝撃性はないようです。落とすと壊れるってことか……。

2006-05-15
くもり

PHP + MySQL のお勉強

ゆりこ による 12:42:00 の投稿
カテゴリー: ソフトウェア

自前でコメント・トラックバック機能を実装しようとしていますが、PHP から MySQL データーベースにアクセスするプログラムは作ったことがない(!)ので、まずはお勉強がてらに簡単なスクリプトを作ってみることにしました。対象は、カフェ玖伊屋の参加表明掲示板 (現在は休止中) で、従来は Perl + テキストファイルという構成だったのを、PHP + MySQL バージョンにリニューアルしてみました。

サーバーは PHP 5.1.x が動いているので、PHP の MySQL 関数とか PEAR::DB は使わず、PDO で DB アクセスしてみました。最初は、データーベースに入れたサンプルデーターが読めなかったり、うまくデーターベースに書き込めなかったりしましたが、悪戦苦闘した末、動くようになりました。

そして、次の段階として、携帯電話表示機能も組み込みました。従来は、PC 向けと携帯向けはスクリプトが別で、PC 向けスクリプトを複製して、表示部分を携帯用に改造するという手抜き作成でしたが、今回は1つのスクリプトファイルに PC 向けと携帯向けの表示機能を組み込みました。せっかく PHP5 なので、表示機能をクラス化し、PC 表示と携帯表示をサブクラスとします。これで、スクリプトの最初で PC か携帯かを判別して、それぞれに対応したクラスのインスタンスを作っておけば、あとは表示メソッドを呼ぶだけで適切な表示ができます。

確かに PHP は簡便でとっつきやすいんですが、Perl よりは少し繁雑な記法になります。Perl だと、

next if /^\s*$/;

なんて記法ができますが、同じものは PHP では、

if (preg_match("/^\s*$/", $line)) {
	continue;
}

となってしまいます。if 文は独立して書かないといけなかったり、$_ のようなデフォルト変数がないのでこうなってしまいます。逆に、セッション管理やクッキーの作成・読み出しは標準でサポートされているので楽ちんです。

とりあえず、だいたいコツがつかめてきたので、いよいよコメント・トラックバックの実装を始めてみます。

2006-05-16
雨

大バグ発覚

ゆりこ による 21:12:00 の投稿
カテゴリー: ソフトウェア

試しに作ってみた参加表明掲示板 (未公開) ですが、大バグが発覚しました。ほぼ同時に参加表明を投稿するとダブってしまうという問題です。

従来バージョンは、データーファイルには重複を許して追記させておき、表示のときに重複を除去していました。しかし、PHP + MySQL バージョンでは、データーベースへの追加のとき、新規登録 (INSERT) か、更新 (UPDATE) かを判断させました。しかし、新規登録であると判断してから INSERT クエリを発行する間に、同じ名前・メールアドレスでの投稿処理をすると、そちらでも新規登録と判断されてしまってダブってしまいます。つまり、新規か更新かの判断と、INSERT は、アトミックな処理 (分割できない処理) なのに、そうなっていないのが問題なのです。

これを修正するには、プログラムの流れ自体をいじらないといけないので、けっこうやっかいです。LOCK TABLES クエリを使う手もありますが、今回は、名前に UNIQUE 制約を付与しておき、いきなり INSERT IGNORE を発行させることにしました。これだと、新規登録であれば1行追加され、すでに同じ名前があれば 0 行追加 (追加されない) となります。追加された行数を調べて、0 行であれば改めて UPDATE を発行すればいいわけです。

ところが、すでに同じ名前があるとき PHP が異常終了 (Segmentation Fault) してしまいます。同じ名前がない場合は INSERT が成功するのにーー。うーん。弱った。

GAORA 放送事故

ゆりこ による 22:08:00 の投稿
カテゴリー: テレビ・メディア

プロ野球はセ・パ交流戦が始まっていますが、ファイターズ vs タイガースの試合中継で、GAORA が中継回線切断をやってしまいました。

それは息もつまる延長11回表。トラの守護神・久保田が投球しているとき、突然ピーという音と共にカラーバーが表示されてしまいました。カラーバーには「NTT 大阪」の文字が……。どうやら、倉敷とのマイクロ波回線が切れてしまったようです。すぐに「しばらくお待ちください」の表示になり、5分後にはサーフィンをしている環境映像になってしまいました……。

仕方なくラジオを取り出して中継を聞こうとすると、ファイターズの投手の顔が出てきました。中継が復活したようで、試合は11回ウラに進んでいたようです。試合が大きく動いた場面は見逃さなかったのでよかったですが、いきなり回線が切れるとは、えらいこっちゃ。

そして、試合は12回ウラ、シーツが3塁線を抜けるタイムリーを放ってサヨナラ勝ちを収めました。めでたしめでたし。

コメント・トラバ仕様策定

ゆりこ による 22:17:00 の投稿
カテゴリー: ソフトウェア

自前で実装しようとしているコメント・トラックバック機能の仕様について書いてみます。せっかくですから、既存のツールとは一線を画すような斬新な仕様にしたいものです:-)

まず、スパム対策のため、トラックバック用 URL は記事 ID から推測できるものとせず、ハッシュを使ったランダム文字列とします。こうすると、記事 ID とトラックバック URL を関連付けるためのテーブルが必要になりますが、テーブルからハッシュ文字列を削除してしまえばトラックバックの受付中止ができます。記事の URL は永続性が求められますが、トラックバック URL は永続性がなくてもいいでしょう。

あと、記事 ID をどうテーブルに格納するかが悩みます。現行の Yuriko.Net では現在 yyyymmddxx (yyyy, mm, dd は日付の数字、xx は連番としてアルファベット) という形式の記事 ID を採用していますが、それを上手に管理するのは難問です。この形式でユニークな記事 ID を生成するにはどうすればいいか。

yyyymmdd の部分 (日付) と xx 部分 (連番) に分離して、双方を PRIMARY KEY として、後者を auto_increment とするとよさそうです。複数の PRIMARY KEY があるので、日付ごとに auto_increment が行なわれます。違う日付に対しては同じ連番を付与できる反面、同じ日付ではユニークな番号になることが保証されます。そして、後者を後でアルファベットに変換させれば一丁上がり。生成した記事 ID もテーブルに記録しておきましょう。

コメントやトラックバックは、それぞれ専用テーブルで一括して管理しておきます。連番 ID、対応する記事 ID、コメント内容またはトラックバック内容、投稿元 IP アドレスなどを入れればいいでしょう。IP アドレスを記録するなら、拒否 IP アドレスのテーブルも作っておかないと。

とりあえず、コメント・トラックバックを作り込むだけならこれぐらいでよさそうな感じ。

MacBook でた〜〜

ゆりこ による 23:07:00 の投稿
カテゴリー: アップル・Macintosh
タグ:

噂サイトではそろそろ出るという話だった MacBook が出ました〜〜。PowerPC 搭載の iBook の後継です。大きさは、12インチ/14インチを統合して13インチのワイドスクリーン1つになりましたが、色は白と黒の2モデルに分かれました。

基本的には MacBook Pro の小型・簾価版ですが、スペックは見劣りしません。これは売れるやろなーー。