2004.09.09

メールの管理

この半年、色々環境の変化があったので、メールの管理ができていない。
1) 1つ前のメインPC
2) ノートPC
3) @niftyのWebメール
4) 現在のメインPC
に複数のメールアカウントの受信メールが分散している。

今回引っ越し先に光ファイバー環境が導入されるまで 2) と 3) の併用があり、
光ファイバー導入後にメインPCを組んだので1月ほど 1) と 4) が併用状態。
また、 3) を長く使っていた時期があり、
(以前も書きましたが)Webメールの保存期間が最長20日間だったのを知らず、
何通かは確実にメールを紛失している。

とある人にメール出したいんですが、
そのメールアドレスが分からんのです(笑)。
多分送るべきメールアドレスから私が受け取ったメールはたった1通。
2) 3) 4)は一応チェックしたけどなさげ。
1) になければないんですが…
どないしよう。

| | Comments (0) | TrackBack (0)

2004.09.07

トラックバック論

もうこの話題について、かなりの意見がそこらじゅうのblogで述べられておりますが。

今現在の自分のスタンスを述べておこうかと。

・トラックバック元(ここでは私でない誰か)の内容が、
トラックバック先(私)の内容について一切触れられていないものは、
基本的に無視する。

ここ数日のプロ野球ネタでいただいたTBの多くはこれに該当するんですが(笑)。
単純に同じネタを元に記事書いているだけで、意見の交換になって無い場合が多い。
先の一文引用せよ、何て言いませんが、
そんなの記事読めば先の記事の意味を汲んだ上で書いてるかどうか分かるでしょうよ。
ましてや読んだ記事の末尾に、「blogランキングご協力お願いします」みたいなリンクがあれば興ざめ(笑)。
どうせ、何十とTBしてるんでしょうよ。

輪を広げるためにそういった方法論は「アリ」なんでしょうが、
今現在私はそれに賛同しません。

・トラックバックは基本的に、無条件に受け付ける。

よって、上記に該当するようなTBをいただいても特にクレーム入れたりはしません。
多分TB先(ここでは私)→TB元(ここでは私でない誰か)へは辿れるけど、
逆は明示的にTB先へのリンクを入れない限り辿れないですよね?
その辺不公平感はありますが、ここは別に超有名blogでもない、
弱小blogですからとやかく言える立場ではないですね。
あまりにムカついたときは、同じようにTB張って意味の無いネタ書きますわ(笑)。
ガキやな、そうなったら。

以上。

| | Comments (0) | TrackBack (0)

Google WebSearch(SiteSearch)設定方法

Google AdSenseに登録することでGoogle WebSearch(SiteSearch)も使えるようです。
うーん、WebSearchとSiteSearchの用語が混じっています。
まぎらわしいですね。
これで特にカテゴリ分類しなくても自分のblog内をキーワード検索できるわけです。
広告のクリック率を考えると、カテゴリ別の表示はしない方がいいのか…

以下、私の場合の設定方法です。

1)Google AdSenseにアクセスし、ログインします。
※未登録の場合は、[お申し込みはここをクリック]ボタンを押すとサインインできる?(未確認)

2)[サーチ設定]タブをクリックし、[サーチコード]が選択された状態にします。
※「[サーチコード]が選択された状態」とは、[サーチコード]キーワードにリンクが張られていないで、
その他のキーワード全て(スタイル、チャネル、URLフィルタ)にリンクが張られている状態です。

3)各設定を選択します。
※私の場合、
[サイトの言語]に[日本語]
[国]に[日本]
[サーチボックスを選択]で(o)Google SiteSearchを選択(必須)、その他任意で、[コードを更新]を押す
※Google SiteSearchを選択することで表示されるテキストボックスに、検索対象のドメイン文字列を入れます。
スラッシュ('/')を入力できないので、私の場合、[kazzya.cocolog-nifty.com]を入力しました。
別に、(o)Googleサーチを選択でもいいんですが、その場合Web全体が検索対象となります。
[検索結果ウィンドウ]は未チェック
[スタイルパレット]に[Mocha Fix]
[チャネル]を任意
[お客様のサイトのエンコード]に[Unicode(UTF-8)]
※[お客様のサイトのエンコード]について、私の環境でトラブル発生しました。
ココログの出力文字セットはUTF-8のようなので、[Unicode(UTF-8)]を選択し、
この後記述する設定を一通り行った後、
検索ボックスに[ダーツ]と入力して検索ボタンを押すと、
結果画面が真っ白になりました。
(ソースを表示すると出力自体は正常に行われている模様)

私はPHPをいじったりしてIEの[表示]→[エンコード]で文字コードを頻繁にいじるので、
それが原因かもしれませんが、そこの値を[Unicode(UTF-8)]に一旦設定し、
再度検索すると正常に表示されました。

また、その他の文字セット日本語(Shift_JIS)、日本語(EUC-JP)などを選択すると、
マルチバイトのキーワード検索結果で文字化けしました。
(これも多分エンコードの設定をし直せば表示されるんでしょうが)

上記を設定後、[お客様のWebSearchコード]のテキストエリアの文字列をコピーします。

4)ココログトップにアクセスし、ログインします。

5)[マイリスト]タブをクリックし、
[マイリストの新規作成]で[1]リストのタイプに[リンク]、
[2]リストの名前を任意(私は[Search])に入力し、[リストの新規作成]を押します。

6) 5)で作成した新規リストの[便利メニュー]の[項目の追加]をクリックします。

7)ポップアップしたウインドウで、
[タイトル]を任意(私は未入力)
[URL]を任意(私は未入力)
[メモ]に3)でコピーした文字列をペーストし、下の[追加]を押します。
※前回AdSense設定の際に説明したように、
事前に5)で追加したマイリストで[便利メニュー]の[設定の変更]をクリックし、
[[2]高度な設定]の[メモの表示]を[(o)テキスト表示]に設定し、[変更を保存]を押します。
※ここでペーストした文字列を修正する場合は、
[ログイン]→[マイリスト]→(対象のマイリストの)[項目の編集]で修正します。

8)[サイトを表示]をクリックして検索ボックスが表示されているか確認し、
何かキーワードを入力して動作するか確認します。
※キーワードはマルチバイト文字列(日本語)がいいでしょう。

| | Comments (0) | TrackBack (1)

2004.08.30

MPEG-4 part10 AVC(TB)

ココログに記事を書く時などは、ログイン前になるべく他の方のblogも見るようにしている。
(直近に更新された一覧が出てくるので)

結構いいもんですよね、一期一会な感じで。
たまに「オッ」と気になる情報があったりしますし。

で、その私の気になった情報へのTB。

MPEG-4 part10 AVC

実はもうかなり前になりますが、自分のとりだめビデオをディスクメディアに移行するために、
「何となく」MPEG4がいいなぁと思ってQuickTimeのライセンスを購入したんです。
しかしながら、結局その頃はまだ家電系のプレイヤーなんぞ存在せず、放置プレー状態でした。

詳しい状況分かりませんが、その「次期QuickTime」がリリースされて、ライセンスがまだ有効なら、
実行に移そうかなぁなんて考えてみたり。
きっとAppleならそれに合わせてiPod風マルチメディアプレーヤー出してくるでしょう!?
あぁ、楽しみ、楽しみ。

| | Comments (0) | TrackBack (1)

2004.08.25

DBMSメモ(数値型 or 文字型)

[Oracleのテーブル定義にて]
同じテーブルの中に、同じ範囲、(ほぼ)同じコンテキストのデータが入る複数のカラムの定義で、
片方はCHAR(1)、もう片方はNUMBER(1,0)で定義されている。

これって何かポリシーがあって定義してるんでしょうか?
「同じ範囲、(ほぼ)同じコンテキスト」というのは、(せいぜい)0から9しか入らないデータ項目という意味です。
桁が増えてしまうと他の部分で致命的な問題が発生します。
あえて言うなら、CHAR(1)で定義されている方は10種類(0-9)以上の種類のデータが発生する可能性がある、
ということなんですけどね。'a'-'z'、'A'-'Z'で逃げられるから、ということでしょうかね。
それならNUMBER(1,0)の方も「より取りうる範囲の広い」CHAR(1)に合わせればいいのに。
仕様書には「長さ」共に1(バイト)と書いてありますけど、本当にNUMBER(1,0)も1バイトなんですかね?
いくら0-9しか取らない数値といっても、精度指定やら何やらで結構大きくなりそうな気がするんですけど。
で、なぜか両方ともDEFAULT('0')って定義しているんですけどね。

このシステム、Oracle奢っている割に、CHECK制約とか全く定義していないし、ビューもほとんどなし、ストアドプロシジャも使ってないし、もう何でもかんでもアプリケーションで制御せよ、なシステムなんですけど、未だに(正式稼動してるんですよ!奥さん)仕様がコロコロ変わってうんざりクンなんですよねぇ。
「文句言うならオマエがDB設計せえよ」って言われちゃうとギャフンなので、
今の私の最重点課題はDBMSの知識を深く知って理論武装することなんです。

で、このblogでグチグチ言う、と。

| | Comments (0) | TrackBack (0)

PHP5 で MySQL が動いた(TB)

今日からカウンター付けてみたんですが、
数時間で30カウントくらいされて結構世の中に晒されている感を実感。
粗相の無いようにしないと…

TBいただいたので、TB返しを。

今時のPHP(私は昔(PHP4)を知りませんし、特に知ろうとも思いません…)のインストール方法は、
あまりどこそこにコピー、とかしなくてもいいようですよ。
php.iniもphp5ts.dllもインストールディレクトリに置いたままで、
・そのインストールディレクトリにPATHを通す
(PHPRC環境変数を定義しろ、なんて書いていますがやってません)
・(Apache2のモジュールインストールなら)httpd.confにPHPIniDirを定義
で大丈夫らしいです。
私はPHP5.0.1にした時にトレンド!?インストール方法に変えてみました。

で、今SQLiteにハマって(ダブルミーニング)いるのですが、
PHP5に組み込まれているSQLiteのバージョンが2.8.xとかなんですよね。
これ、バージョン3にしたいんですがやり方が分からないのです。
(Windowsではコンパイルしないので難しいのかもしれませんが)

一応、最新版といわれるphp_sqlite.dllをダウンロードしてきて、
php.iniにextension=php_sqlite.dllを追加して、
PHP_ROOT/ext/にコピーしてApache2再起動すると、
MySQLの時と同じようにphp_sqlite.dllが無いって言われるんですよ。
って言うか、あるやん(ダイアログに表示されるフルパスで判断)、と思うのですが…
解決方法分からないのでもうSQLiteはペンディングしています。

今ふと自分の過去ログ見返して思ったこと。
MySQLの場合はlibmysql.dllなんてのがあって初めてロードできているようなので、
SQLiteにもそれ相当のlibsqlite.dllが必要、でも組み込みなんでアリマセン、ってことなのだろうか?

PHP4の頃まではMySQLとPHPはベッタリと聞いているので、
ひょっとしてPHP4の場合はlibmysql.dllなんて無かったとか?

| | Comments (0) | TrackBack (0)

2004.08.23

PHPメモ(ヒアドキュメント)

ヒアドキュメントの文字列内では、
ダブルクォーテーションで囲んだ文字列と同様変数を展開しますが、
定数は展開できないですね…

define("HATE", "LOVE");
$msg = <<<MSG
I {HATE} YOU!!!
MSG;
print($msg);

の結果は、「嫌いっていいながら実は好きやで」と言いたいのに、
I {HATE} YOU!!!
とまるで本気で嫌いじゃ、ボケと言っているようになります。

仕方が無いのでヒアドキュメント記述の前に変数を宣言し、そこに定数を代入して、
定数を展開したい箇所にその変数を記述することで逃げています。

define("HATE", "LOVE");
$HATE = HATE;
$msg = <<<MSG
I $HATE YOU!!!
MSG;
print($msg);

の結果は、
I LOVE YOU!!!

確かに定数は先頭に$がつかないので(厳密に)パースできないっぽいのは理解するのですが、
何とかならないもんでしょうかね?

| | Comments (0) | TrackBack (0)

2004.08.20

XOOPSメモ(XoopsForm関連)

自作モジュール作成中なんですが、
標準モジュールなんかを色々触っていると、
Smartyのhtml_select_dateなんかよりよっぽど cool な!?
XoopsFormTextDateSelectクラスなんていうのを発見。

キモの機能がJavaScriptで実装されているわけですが、
自分のモジュールにも入れてみようとテストしてみると…
<!DOCTYPE... タグよりも前にJavaScriptが出力されてしまってレイアウトが崩れてしまいます。
理由は、多分、XoopsFormTextDateSelect->render()の中の、
include_once XOOPS_ROOT_PATH.'/include/calendarjs.php';
だと思います。

このcalendarjs.phpって、ほぼHTMLモードでJavaScriptコードそのまま吐いているだけのPHPファイルなんですが、
なぜrender()の内部でクライアントに出力するんでしょうか?
XoopsFormにはrender()とdisplay()が定義されていてrender()はabstract扱いなんですが、
render()はオブジェクトの文字列表現を関数の呼び出し元に文字列として返す。
display()はオブジェクトの文字列表現をクライアントに出力する。

という意味合いですよね?きっと。
display()の定義が、

function display(){
echo $this->render();
}

ですから。
で、主にSmarty使う場合は$xoopsTpl->assign()するためにrender()を呼んで、
クライアントに対する出力を保留してるんですよね?
(XoopsFormのサブクラスを使う場合、$xoopsForm->assign($xoopsTpl)と、
逆になってしまうのがちょっと気色悪い…)
でもrender()の内部で勝手にクライアントに出力しちゃってるもんやから、
結果として一番最初に出力される、と。

どうもこの辺のクラスは共通の部品として提供されているというよりは、
各自勝手にカスタマイズしてね、と言われているような気がするのは私だけ?

それにしても、PHPのincludeとかrequireって私には馴染めません。
(Perlで懲りたってのが主な理由なんですが)
クラス定義読み込むためだけに使用したい(Javaのimportに相当)のですが、
現状そんなことしているスクリプトってほとんどないですよね。
ほぼサブルーチンの感覚ですし、
クラス定義を読んでいるだけか?と思わせておいて、
思いっきりそのクラスのインスタンス生成するロジック入っていたり…
結構変数のスコープがワケワカメで苦戦中です。

| | Comments (0) | TrackBack (0)

2004.08.17

SQLiteメモ(CREATE TRIGGER)

PHP5に標準で含まれる組み込み型?DBMSのSQLiteですが、
いじればいじるほどちょっと面白い感じですね。
(興味をそそるという意味です。)

SQLite Introductionに書かれている内容を見ると、SQLiteDatabaseなんていうクラスがどこかで?定義されているようですが、ソースコードを見れないのであまり深く知ることができません。
サーバーにメモリをたくさん載せて、sqlite_popen(":memory:");でデータベースをオープンすると結構早くなるのでは?などと思ってみたりするのですが。

さて、本題。
XOOPSをSQLiteで動かそう作戦、お盆期間中いじり倒してそこそこ動くようにしたのですが、修正箇所を見ていくと、全てのモジュールについて修正が必要になってくるかもしれません。
それは避けたいということで、別の回避方法がないかと調査していました。
修正が必要な原因は、主に新規登録(INSERT)時、MySQLのauto_incrementのカラムに'0'を指定しているのですが、SQLiteのオートインクリメント(INTEGER PRIMARY KEY)ではエラー(0のレコードが無い場合のみ1度だけ成功するんですが、以降ユニーク制約違反になります)になってしまいます。
指定方法は、
1)オートインクリメントのカラムに値を指定しない
あるいは、
2)オートインクリメントのカラムにNULLを指定する
なんですが、
前者の方は全般的にINSERTの書き方が、カラム指定なしのVALUESの全カラム値指定になっており修正が必要。
後者の方はクエリー投げる前の文字列生成のところでsprintf()を使っているのですが、auto_incrementのカラムの場所は%dとなっており、'NULL'を指定しても結局0になってしまう状況で修正が必要です。
(Xoops'Hoge'Handler::insert()のI/Fをもっと抽象度上げてもらえれば一番いいんですけどね…)
これ、全て修正したら数十箇所になり、モジュールを追加した場合その都度修正しなければいけない可能性があるので、この修正方法は諦めました。
そこで、SQLiteはCREATE TRIGGERをサポートしているということなので、以下のようなトリガーを定義すると、
一応うまく動いているようです。

CREATE TRIGGER auto_increment AFTER INSERT ON test
FOR EACH ROW WHEN NEW.id = 0
BEGIN
DELETE FROM test WHERE id=0;
INSERT INTO test VALUES (NULL, NEW.data);
END;

この書き方も、ドキュメント見ながらやっとこさ動きました…
PostgreSQLはCで書いた関数?しか呼べないようですし、MySQLはそもそもトリガー未対応?のようですね。
さて、動いたはいいですが、このトリガーをほぼ全てのテーブルに定義しないといけないような気がします。
インストール時のsql/sqlite.sqlで定義してしまえばアプリケーション内のI/Fは変更なしでいけると読んでいるのですが…

| | Comments (0) | TrackBack (0)

2004.08.13

PHP 5.0.1 Released!

PHP 5.0.1 Released!
昨日リリースですか。
少しはこなれて来ますかね。
XOOPSをSQLiteで動かしてみよう作戦、
ようやくインストール完了、メニューもちゃんと表示できたんですが、
標準モジュールなんかもSQLite用のSQL書くだけでなく、
結構中をいじらないと無理そう。
とりあえずMySQLとSQLiteの併用で、自作モジュールをSQLiteで動作するようにしようかと思っています。
(そんなことしても意味ないっちゃぁ意味ないんですが)

その中で気になっていたバグが5.0.1で修正されています。
Fixed bug #29395 (sqlite_escape_string() returns bogus data on empty strings). (Ilia, Tony)
不定値が返ってきていたようで、インストールがたまにこけていました。
空文字ならこの関数を呼ばないように実装していたのですが、不要になったようです。

| | Comments (0) | TrackBack (0)