Categories: www, b2evolution, MediaWiki, スパム対策, 検索エンジン, Google, Technorati
onclick メモ
February 11th, 2008Another HTML Lintで、HTMLの文法をチェックすると、onclick属性を指定した場合、同時にonkeypress属性を指定していないと、
onclick 属性を使うときは onkeypress 属性も指定しましょう。 → 解説 150
と怒られる。
この解説には、
スクリプトのイベント処理では、装置非依存性を確保するために、次の属性は対で使用するように、アクセス指針技術文書4.12.2(J)で薦められています。
onmousedown + onkeydown onmouseup + onkeyup onclick + onkeypress
とあり、根拠の文書にも、
- Otherwise, if you must use device-dependent attributes, provide redundant input mechanisms (i.e., specify two handlers for the same element):
- Use "onmousedown" with "onkeydown".
- Use "onmouseup" with "onkeyup"
- Use "onclick" with "onkeypress"
Note that there is no keyboard equivalent to double-clicking ("ondblclick") in HTML 4.01.
そう書いてある。
だから、今までonclick属性を指定した時、無批判に、なるべく、onkeypress属性も指定することにしていた(基本的に、PCしか閲覧環境を想定していないけど。しかし、そうすると、TABを押してフォーカスを移そうとした場合でも、KeyPressイベントが発生してしまい、特定のキーコードが押された場合には無視するようにフィルタをかける必要がある)。
しかし、先日、JavaScript 第5版を読んでいると、p.408頁に、
「mouse」や「key」という言葉が含まれるイベントは、名前からわかるように、デバイス依存イベントです。これらのイベントを使う場合は、マウスでもキーボードでも操作できるように、両方のイベントハンドラを使用するようにしてください。onclickイベントはデバイス独立イベントと考えられることに注意してください。フォームコントロールやハイパーリンクをキーボードで操作した場合でも、このイベントが発生します。したがって、マウスに依存したイベントではありません。
と書いてあった。
試しに、
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
<head>
<title>click events test</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-script-type" content="text/javascript" />
</head>
<body id="top">
<form action="#top">
<p><input tabindex="1" type="submit" onclick="alert('form clicked'); return false;" /></p>
</form>
<p><a tabindex="2" href="#top" onclick="alert('link clicked'); return false;">link</a></p>
</body>
</html>
というサンプルを書いて*1、手元の環境で実験してみたら、
| Form item | Link item | |||
|---|---|---|---|---|
| Enter | Space | Enter | Space | |
| ○はイベント発生、×は発生しない | ||||
| Firefox 2.0.0.12 | ○ | ○ | ○ | × |
| Opera 9.25 | ○ | ○ | ○ | × |
| Konqueror 3.5.8 | ○ | ○ | ○ | × |
| IE6 | ○ | ○ | ○ | × |
という結果に。
確かに、Enterキーを押した場合では、フォームコントロールでもリンクでも、クリックイベントが発生している。
(もちろん、上記サンプルは、Another HTML Lintでは減点されるんだけど)
- *1
tabindex属性をつけているのは、Operaだと、なぜかそうしないと、TABキーを押した時、リンク部分にフォーカスが移らなかったため。
Apache 2.2.6
September 23rd, 2007www/apache22のportが、Apache 2.2.6のバージョンのものにアップデートされていたので更新。
ビルド前、make configが実行されるようで、OPTIONS メニューが立ち上がるようになったらしい。
こちらの環境では、pkgtools.conf内に、
MAKE_ARGS = {
'www/apache22' => [
'WITH_MPM=worker',
],
}
といったように記述してある。
workerでは、デフォルトでONになっているmod_cgiが構築されないので、メニューの最後の方にあるmod_cgidの方を有効にしてビルドした。
b2evolution 1.10.2
August 20th, 2007久しぶりの更新。
このブログで使用しているb2evolutionというブログツールが1.10.2に更新されていたのでアップグレード。
Firefoxで見ると、ブログが文字化けする問題は、直っていなかったようなので、前回と同様に、
--- inc/MODEL/settings/_locale.funcs.php~ Sat Mar 10 23:15:16 2007
+++ inc/MODEL/settings/_locale.funcs.php Wed Apr 4 21:43:40 2007
@@ -869,7 +869,7 @@
if( ! empty($force_io_charset_if_accepted) )
{ // we want to force a specific charset:
if( ! isset($_SERVER['HTTP_ACCEPT_CHARSET']) // all allowed
- || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
+ || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~i', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
{
$req_io_charset = $force_io_charset_if_accepted; // pretend that the first one has been requested
}
の修正をした。
また、これはいつもやっていることだけど、スタブファイルに勝手に.phpのsufixを付けて欲しくないので、
--- inc/MODEL/collections/_blog.class.php~ Sat May 26 02:44:38 2007
+++ inc/MODEL/collections/_blog.class.php Thu Aug 16 17:12:06 2007
@@ -504,7 +504,7 @@
{ // We want to force the dynamic page but the URL is not explicitly dynamic
// This is needed when a static page is taking control of domain.com/stub and we want an explicit link to the LATEST content, which can only be gotten at domain.com/stub.php
// fp> This creates a small problem with empty stubs (domain.com/.php). This should be fixed by using a fourth blog_access_type: default, index.php, stub, *default_stub* . Consequence: require the stub fied on blog properties form when stub mode is selected
- $blogurl .= '.php';
+ // $blogurl .= '.php';
}
return $blogurl;
も修正。
b2evolution 1.9.3
April 4th, 2007ここのブログで利用しているb2evolutionというブログツールが
ということなので、アップグレード。
1.9.2のバージョンに更新した時、IE等のブラウザで閲覧した場合は問題なかったのだが、何故かFirefoxで閲覧した場合、ゲストユーザ(一般ユーザ)になって、ここのブログを閲覧すると文字化けして読めなくなっていた。
一応、応急措置として、conf/_locale.phpを
$force_io_charset_if_accepted = 'UTF-8';
と直して、こちらの環境では問題は解決したように見えたのだが、その後も、Firefoxだと文字化けするとのコメントをいくつか頂いていた。
こちらの環境では、FirefoxのPreferenceから、Content→Advancedのダイアログで、Default Character EncodingをUTF-8に設定していた。
これだと、
| HTTP_ACCEPT_CHARSET | UTF-8,* |
|---|
として、リクエストヘッダがサーバ側に送られるようです。
しかし、Firefoxのデフォルトの設定では、
| HTTP_ACCEPT_CHARSET | ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
|---|
となっている。
b2evolutionはクライアントに応じて出力する文字を切替えてくれるらしいのだが、どうやら、UTF-8
とutf-8
の大文字と小文字の違いを処理できずに問題が生じていた模様・・。
とりあえず、conf/_locale.phpは、
$force_io_charset_if_accepted = 'utf-8';
としておき、ケースの違いで問題が起こらないように、
--- inc/MODEL/settings/_locale.funcs.php~ Sat Mar 10 23:15:16 2007
+++ inc/MODEL/settings/_locale.funcs.php Wed Apr 4 21:43:40 2007
@@ -869,7 +869,7 @@
if( ! empty($force_io_charset_if_accepted) )
{ // we want to force a specific charset:
if( ! isset($_SERVER['HTTP_ACCEPT_CHARSET']) // all allowed
- || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
+ || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~i', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
{
$req_io_charset = $force_io_charset_if_accepted; // pretend that the first one has been requested
}
として見ることにする。
b2evolution 1.9.2
February 8th, 2007このブログを作成しているツール b2evolutionの最新バージョンがリリースされたようなので、今まで使用していた1.8.6のバージョンからアップグレードしてみた。
1.8.7 Tokyoの方は、Super Stableの品質だそうだけど、今回は、1.9.2 Kyotoのバージョンをインストール。
データベースの更新後、ブログにアクセスしてみると、ゲストユーザで閲覧すると、予想通り、日本語の部分が???のようになって正常に表示されていないので、
- conf/_locale.php
$evo_charset = 'utf-8';
$db_config['connection_charset'] = 'utf8';
のように変更。
しかし、なぜかFirefox (2.0.0.1)でアクセスしたら、なぜか、まだ???の症状は直っていない・・
(IE 7、Opera 9、w3m等では問題なかった)。
いろいろやってみたところ、上記、conf/_locale.phpを
$force_io_charset_if_accepted = 'UTF-8';
のように修正してみたら(UTF-8は大文字)、問題は納まった?模様。
サイトマップ生成ツール for b2evolution
January 7th, 2007いつぞや書いたこのブログのデータベースから動的にサイトマップを生成するスクリプトが、いつのまにか動作してなかった*1ので修正してみた。
こちらの環境(b2evolution 1.8.6)では一応、動作しています。
- *1 多分、1.8系列に切替えた辺りからだと思う。
関連情報
MediaWikiを1.7.1から1.8.2にアップグレード
December 8th, 2006www/mediawikiのportが1.7.1から、1.8.2へと更新されていたのでアップグレードしました。以下はそのメモです。
公式な情報は、
に記載されていますので、まずそちらを参照して下さい。
Security Alert: import-mt.php
December 1st, 2006Link: http://b2evolution.net/news/2006/11/30/security_alert_import_mt_php
昨日から、このブログ内の
inc/CONTROL/imports/import-mt.php
のファイルへのアクセスが異様にあると思っていたら、どうやら、
ということらしい。
どこから嗅ぎつけてくるのか不明だけど、複数のIPアドレスからアクセスがある。
b2evolution 1.6以降のバージョンでは、上記、
のファイルは削除しておいた方が良さそう。import-mt.php
なお、この問題は、1.8.6のバージョンのリリースでは、修正される模様。
b2evolution 1.8.5
November 12th, 2006ここのブログは、現在、b2evolutionというツールで生成しています。
先日、その1.8.5のバージョンがリリースされました。
私は、今まで、1.8.2のバージョンを使っていたので、更新分だけのファイルをダウンロードし、既存のものに適用して更新しました(上記URLからたどれます)。
1.8.2から1.8.5への移行で特に問題に感じた事はありません。
日本語周りの強化は、
が参考になりそうです。
301で転送したらフィードURLが変わっても購読者数は変わらなかった
August 28th, 2006前回、b2evolutionを、1.8のバージョンにアップグレードした際、XML FeedsのURLが変更されていることに気付いた。
例えば、0.9.xの古いバージョンでは、
- (A)
http://www.xdelta.net/blog/xmlsrv/atom.php?blog=2
だったのに対し、新しいものでは、
- (B)
http://www.xdelta.net/blog/FreeBSD?tempskin=_atom
となっていた。
従来通り、blog/xmlsrv/atom.phpのファイルも用意されており、(A)のURLにアクセスすると、(B)のURLにアクセスした時と、同一内容のフィードが得られる。
ただ、同じ内容のコンテンツが、別のURLでアクセスされるのは、なるべく避けたい。
それに、Bloglines等のRSSアグリゲータは、UserAgentに購読者数を含めてくるので、これだと、全く同じフィードなのに、(A)の場合は購読者数9人、(B)の場合は購読者数が1人といった具合になってややこしい。
駄目元で、.htaccessに、
RewriteCond %{QUERY_STRING} ^blog=2$
RewriteRule ^blog/xmlsrv/(atom|rss|rdf|rss2)\.php$ /blog/FreeBSD?tempskin=_$1 [R=301,L]
RewriteCond %{QUERY_STRING} ^blog=2$
RewriteRule ^blog/xmlsrv/(atom|rss|rdf|rss2)\.comments\.php$ /blog/FreeBSD?tempskin=_$1&disp=comments [R=301,L]
と記述して、(A)のURLにアクセスしてきた際、(B)のURLに301で転送して見ることにした。
しばらく期間を置いてログを見てみたところ、
65.214.44.29 - - [15/Aug/2006:17:43:46 +0900] "GET /blog/xmlsrv/atom.php?blog=2 HTTP/1.1" 301 257 "-" "Bloglines/3.1 (http://www.bloglines.com; 10 subscribers)" 65.214.44.29 - - [15/Aug/2006:17:43:46 +0900] "GET /blog/FreeBSD?tempskin=_atom HTTP/1.1" 200 8168 "-" "Bloglines/3.1 (http://www.bloglines.com; 10 subscribers)"
と購読者数が合計されている。(A)+(B)の計10になった。
(滅多に購読者数が増えないブログだから、そのように推定しています)
どうやら、当初の意図通りに事が運んだ模様(ついでに、livedoorのアグリゲータでも確認)。
その後、
65.214.44.29 - - [28/Aug/2006:16:22:11 +0900] "GET /blog/FreeBSD?tempskin=_atom HTTP/1.1" 200 8412 "-" "Bloglines/3.1 (http://www.bloglines.com; 11 subscribers)"
と、(B)のURLのみのアクセスになり、いつのまにか、旧(A)のURLではアクセスがなくなりました。
(この間、一人購読者数が増えています)
試しに、自分のアカウントのBloglinesのリーダを見てみたら、旧URLで登録してあったものが、新URLに置き換わっていました。
でも、302とかじゃ、どうなるのかは未確認です。
PHP4からPHP5に乗り換えた
July 23rd, 2006先日、www/mediawikiのportを更新して、MediaWikiを1.7のバージョンのものにしようとしたが、MediaWiki 1.7はPHP4には対応していなかったため、やむを得ず、www/mediawiki16のportに切替えた。
この間、更新したb2evolution 1.8-betaは、PHP5には対応しているようだし、そろそろ全面的にPHP5の環境に乗り換えるのも悪くないと考え、今回、思い切って、www/php4からwww/php5のportに移行してみました。
portupgrade等を使って置き換える方法もあると思うけど、今回は、一旦、全部PHP関係のportsを削除し、新しいバージョンを新たにインストールするという手法を選びました。
まず、備忘のため、一応、
# cp /var/db/pkg/php4-4.4.2_2/+REQUIRED_BY /var/tmp/
とインストール済みのPHP4に依存するportsを控えておく。
続いて、
# cat /var/db/pkg/php4-4.4.2_2/+REQUIRED_BY | xargs pkg_delete -f # pkg_delete php4-4.4.2_2
とPHP4とそれに依存するportsを削除。
そして、
# portinstall lang/php5
と、PHP5のportをインストールし*1、先ほどバックアップした情報を参考に、
# portinstall lang/php5-extensions
を利用して、(必要な)主だった拡張モジュールをインストール。
後は、先ほど削除したそれ以外のportsを、インストールし直し、サーバを再起動する*2だけです。
- *1 以前にも書いたように、PHPのportsは標準では、CLI版とCGI版がビルドされて、Apacheモジュールは標準ではコンパイルされないので注意。
- *2 その前に、
/usr/local/etc/php.iniを新たに作成するのも忘れずに(新しくインストールされた/usr/local/etc/php.ini-recommendedをテンプレートとして使った)。
ただ、従来、.htaccessなどで、
<Files "FreeBSD"> SetHandler php-script </Files>
と記述し、PHPスクリプトとしてハンドルしていたものは、
<Files "FreeBSD"> SetHandler php5-script </Files>
のように、書き直さなければ駄目でした(でないと、ソース丸見えになった)。
MediaWiki の port を www/mediawiki16 に変更
July 18th, 2006/usr/ports/UPDATINGの20060714によると、
www/mediawiki version is 1.7 now. 1.6 version was preserved on www/mediawiki16 port.
と、www/mediawikiのportは、1.7系列のバージョンのものに切り替わったらしい。
一応、このサーバにもMediaWikiはインストールしてあるんだけど、
私の環境で、更新しようとしても、
cannot install: doesn't work with PHP version : 4 (Doesn't support PHP 4)
と怒られてしまう。
どうやら、1.7系列ではPHP4は、サポートされていないらしい・・。
でも、弱ったことに、PHP4でしか動かないアプリもいくつか、このサーバには存在する。
身動きが取れないけど、そのまま放置しておくのも何なので、とりあえず、
# portupgrade -o www/mediawiki16 -f mediawiki
のように、www/mediawiki16のportに変更しておいた。
そろそろ、PHP5に乗り換える準備に取り掛からねば・・。
b2evolution 1.8にアップグレード
July 18th, 2006このブログは、b2evolutionというソフトで運営しているんだけど、今まで使用していたバージョン0.9.xの系列から、先日リリースされた
に移行してみました(今回は、portの方は使用しなかった)。
インストール自体は、単に、必要なファイルをドキュメントルート以下に展開するだけで、済むんだけど、その中のinstallディレクトリにアクセスして、データベースの更新を行う前に、前のバージョンのデータは必ずバックアップをとっておくこと。
0.9.xでのコンテンツの文字コードは、ちょっと特殊な格納の仕方をしているので、いきなり1.8に更新にすると、全部、日本語が文字化けするようになります(しかも、更新後は、元のバージョンには戻せない)。
この点クリアしてしまえば、後は微調整程度です (といっても、内部的にだいぶ変わっているので、試行錯誤中なのだが…)。
トラックバック停止
June 1st, 2006おそらく公開プロキシを利用してか、絞りこむのが困難なほど、複数のIPアドレスから、トラックバックを膨大に打ってくるスパムが激しいので、対処方を思い浮かぶまで、トラックバックを停止します。
b2evolution News - The NEW central antispam blacklistW
May 15th, 2006Link: http://b2evolution.net/news/2006/05/12/the_new_central_antispam_blacklist
b2evolutionの機能であるAntiSpam Deluxeの中央データベースがしばらくの間、停止してたけど、ようやく再開した模様。
まもなく、0.9.xブランチでの最終バージョン0.9.2がリリースされる予定だけど、現在使用してる0.9.1ではでは、上記URLの説明にあるようにconf/_advanced.phpの最後の方に
$antispamsrv_host = 'antispam.b2evolution.net'; $antispamsrv_port = 80; $antispamsrv_uri = '/evonetsrv/xmlrpc.php';
を書き加え、さらに、b2evocore/_functions_antispam.phpをこれに対応したものにに置き換える必要がある。
- 追記2006/05/19
-
0.92がリリースされましたね。
