404 Not Found でリダイレクトの勘違い

2007/08/02 木曜日 1:43 投稿者 zon

アクセスしたページに対して、サーバサイドリダイレクトや、meta要素のrefreshを用いたページリダイレクトをオンラインで検証することができる、リダイレクト検証ツールというWebツールがあります。以下に書かれているものがそれです。

リダイレクト検証ツール

いきなり、リダイレクト検証ツールの話から入りましたが、今回は404エラーとリダイレクトの話です。

ことの始まりは、前回の宅建の試験に合格するぞぉの記事で書いた 『404エラーを返してトップページにリダイレクトするようにしている。』 の部分ですが、書かれてある通りで、header() で、『404 Not Found』 を返して、そのまま header(Location: URL) でリダイレクトしていました。

リダイレクトを正しくできていないと、検索エンジンにスパム扱いをされるとどこかで目にしたので、正常にリダイレクトされてるか、上記のツールを使って調べてみました。そしたら 『302 Found』 を返してリダイレクトしているという結果がでたのです。

で、『HTTP Status』 で検索してみると [Studying HTTP] HTTP Status Code にたどり着いたのですが、これを見た感じだと 3XX を返す時意外はリダイレクトするのはダメなのではという気がしてきました。

また、404エラーでリダイレクトするのは使いづらいというようなこと書いてる人もいました。理由は 『ブラウザのアドレスバーに直接URLを打ち込んだ時に、タイプミスでリダイレクトされたら初めから打ち直さないといけないから』 というようなことだったのですが、ごもっともです。自分はトップページにリダイレクトしたほうが、ユーザや検索エンジンにやさしいかと思っていたのですが、見当違いでした。

なので、404 エラー用のページを作って、リダイレクトするプラグインを修正して、不正なURLにアクセスした時は、404 エラーを返して、404 エラー用のページを表示するようにしました。

おかげで、Ethna の Ethna_Controller を少しだけトレースしたので、Filter、Action、View の流れが理解できてきて、スマートな構成になりました。ついでに UrlHandler の使い方も 『理解できてきたかな?』 くらいになりました。

Controller 部に関しては、メモしておかないと忘れそうなので、近いうちに書こうと思っています。

宅建の試験に合格するぞぉ

2007/07/28 土曜日 13:51 投稿者 zon

このたび宅地建物取引主任者資格試験に挑戦することになりました。

資格試験のためのお勉強は嫌いではなく、むしろ楽しかったりするのでそれほど苦ではないのですが、3日もしないうちに飽きてきました。

で、試験勉強用の過去問集を作りました。その名も 『宅建の試験に合格するぞぉ』 (なんと採点機能付)

前から興味ありつつも放置していた Ethna で作ってみました。

実は前にも、Ethna でとあるシステムを作ったのですが、色々な理由があったなかでも何よりエレガントな構成にならなかったので、公開する気になれなくて私のPCの中で眠ったままになってます。

『宅建の試験に合格するぞぉ』 を作るに当たって

今回 『宅建の試験に合格するぞぉ』 を作るに当たって決めたことは以下の通りです。

  • 二日で公開できる物を作る
  • デザインはこだわらない
  • mod_rewrite を使って、SEOを意識したサイトを作る
  • appObject を上手く活用する
  • 拡張性が高くエレガントな構成にする

『宅建の試験に合格するぞぉ』 を作ってみて

実際に『宅建の試験に合格するぞぉ』 を作ってみて、結果は以下の通りです。

二日で公開できる物を作る

何とか間に合いました。7割くらいが、DBに流し込むデータ作りに時間を注ぐことになりましたが。データ作成方法をもう少し効率のいい方法を考えたほうがいいかも。Ethna とは全然関係ないことだけど。

デザインはこだわらない

見ての通りです。トップページに至っては、Ethna のデフォルトのままです。

mod_rewrite を使って、SEOを意識したサイトを作る

mod_rewrite の連携は、UrlHandler を使って、ごにょごにょやってたら何とかなった。結果オーライって感じで出来てしまったので、もう少し理解する必要がありそうです。

時間がなかったのもあって、実際に対応するアクションがなくてもトップページが表示されるようになっているので、その辺の対応も気が向いたらやろうと思う。アクションが存在してパラメータに誤りがあるものに関しては、リダイレクトするプラグインを自作して、404エラーを返してトップページにリダイレクトするようにしている。

Net_URL_Mapper を使えば簡単にできるとありましたが、どこかで PHP4 は使えないみたいなことが書かれていたので使いませんでした。もうすぐサポートも終わることだし、本気で PHP5 に乗り換えることも考えないといけない時期かも。

appObject を上手く活用する

いろいろネットを漁ってみたのですが、少々古い情報しか出てこなかったので、今のバージョンだともっとスマートな使い方があるのではと思いながらも判断することが出来ない。ただ、今のところは、appObject を上手く活用できている気がする。

拡張性が高くエレガントな構成にする

プロジェクトに影響しない Common のプラグインを作ったりもしたし、そこそこ拡張性は(今のところ)高いと思う。

今後の展望

このシステムは選択性の試験を作ろうと思えば、問題と解答をDBに流し込めばいいだけなので、色々な過去問集(採点機能付き)を作ることができます。
宅建の試験に合格したら、次は行政書士の試験に挑戦する予定なので、その頃には『行政書士の試験に合格するぞぉ』を作るかもしれません。

ミクシーラボに mixi がどう反応するか興味あり

2007/07/23 月曜日 13:39 投稿者 zon

mixilabo(ミクシーラボ)が提供しているミクシマイザーというWebサービス
に対して、mixi は何かしらの対応をするのかが興味あります。

ミクシマイザーの機能は下記のようなものです。

「mixiにログインしてあしあとページを見ると知らないヒトから足跡が。」
誰なのか気になるけど、不用意に足跡をつけたくない。
ミクシマイザーはそんな人を支援するプログラム。

ミクシーラボ

本題の前に

mixi 本体と関係ないのに ID とパスワードを入力するのは不安だとか、怪しいとかの話は他で書かれているのでとりあえずここでは触れません。気になる人は下記のページを参照してみてください。

あしあとという機能の是非の話もとりあえずなしです。mixi が持っている機能なのでこの機能に共感できないなら mixi を使わなければいい。程度にしか考えてません。

以下本題

自分はほとんどあしあとページを見ることはないし、知らない人から足あとがついていてもあまり気にならないし、たまに気まぐれであしあとを辿るときも気にせず踏むので、積極的にこのサービスを使いたいと思うことはありませんが、不用意に足あとをつけたくないと思っている人は意外と多いのではないかと思います。

だから、「このサービスって使いたいと思う人多いだろうな。」と思います。(怪しいから使わない云々はなしで。)

ただ、このサービスって、mixi から取得した情報を解析して、ミクシーラボ配下で表示され、以下のようなURLになります。

http://mixilabo.com/index.cgi?fn=get_friend_home&id=XXXXXX(ID)

これやってしまうと、mixi のアカウント持ってない人でもプロフィールを見ることができてしまいます。

『今の mixi は到底閉ざされたネットーワーク内とは言えないので騒ぐほどのことではない。プロフィールに個人情報を云々・・・』と言われれば、確かにその通りなんだけど、それは、あくまでユーザ側が意識する部分であって、それを運営者(mixi)側が認めてしまうのはまた別な話の気がするのですが。

テレビ報道なんかでも、なにかの事件の被害者や加害者の mixi の日記などを放送しているのを見て嫌悪感を持つことがあるのですが、それと似たような嫌悪感があるんですよね。報道については、mixi のプレスリリースで mixi日記の報道について という形で回答しているので、何らかの対応はしていると信じています。その後もテレビ等で報道されているようですが、どちらかと言えば、その辺はテレビ報道のモラルのなさに対する嫌悪感が強すぎて mixi に対してどうこうといった気持ちはないです。

技術情報と利用規約違反

話を戻して、ミクシマイザーの技術情報を見る感じだと、少なくとも以下に書かれてあるくらいの mixi の利用規約には引っかかりそうな気がします。

  • 他人の名誉、信用、プライバシー権、パブリシティ権、著作権、その他の権利を侵害する行為。
  • 他のユーザーの個人情報を収集・蓄積する行為。
  • mixi 内のサービスに関わる記載について、無断でそのコピー、複製、アップロード、掲示、伝送、配布等をする行為。
  • 一人のユーザーが複数のアカウントを持つ行為。
  • 同じアカウントを複数人で利用する行為。

下記の、8 → 9 → 10 の流れを見る限りは、データを DB にキャッシュしている感じはないので、蓄積かと言えばそうではない気がするけど、収集とは言えるのではないでしょうか。

8.代理ユーザー(私)がターゲットユーザーを見に行きます。
当然ですが、私が手動でやるわけではありません。行動モジュール(ロボット)が自動で見に行きます。
ここがこのプログラムの肝です。私が見に行くので、あなたの足跡はのこりません。
9.取得したHTMLファイルをデータとして扱うために解析します。
10.取得した解析後のデータをユーザーに結果ページとしてお見せしています。

さらになんだかんだと理由をつけると、負荷かけられてますと言われても仕方ない気がします。(キャッシュしていないとなるとなおさら)

  • サーバーに負担をかける行為、および他のユーザーのアクセスまたは操作を妨害する行為。

『mixiのいろんな実験、フィードバックをするためのサイト』 というのは、非常に興味があるのでこれからどんなことをしてくれるのかという期待はあります。でも、作った人には申し訳ないんですが、アカウントを持っていない人が見ることができてしまうことに嫌悪感があるんです。

そして、mixi はこのサービスに対してどのような反応をするかが非常に興味があります。

LightBoxとFLASHの周辺

2007/07/20 金曜日 16:42 投稿者 zon

FlashblogとLightBoxを連携させるためにいんぐりもんぐりやってみた。
ちなみにLightbBoxのバージョンは2.0.2。

参考URLは以下

引っかかったところ

  • rel属性無しでLightbox JS v2.02のカスタム方法で line180 近辺の部分は自分のソースと違ってた。if の最後に { がないので注意。もしくは } を削除しないといけない。
  • FLASHでHTMLを読み込んだ場合 target=”_blank” が入っていると上手く動作しない。

かなり前に書いた記事なので情報が古いかもですが、これを書いてたブログを閉めようと思っているので、こっちに移しました。

Yahoo! 検索結果に表示させる方法

2007/07/19 木曜日 9:05 投稿者 zon

検索エンジン用ロボットの巡回先への推薦へのリンクをメモ代わりに張っておきたかっただけ。

毎回、Yahoo! JAPANのページから辿ることが出来なくて困るので。

ついでなので Google の方も。サイトの登録 / 削除

Yahoo! の方はよく知らないけど、Google の方は登録しただけではクローラが来ないから、リンクされないとインデックスに追加されない。みたいな事が書かれているのを見かけることがあるけど、結局リンクされることがインデックスに追加されることの条件なら、登録する意味ってあるのだろうか?と思いながらも、おまじないのような気持ちで毎回登録してしまう。

Yahoo! も Google も、書かれている内容を読む限りでは、登録してもリンクされていないとクローラが巡回しない的なことは書かれていないのですが、どこを参照しているのでしょうか?

でも実体験として、Google の方は登録しただけでは待てど暮らせど検索にかからなかったサイトが、リンクされただけであっさり検索にかかりだした経緯ありなのです。

Yahoo!ブックマークの表示をW3C XHTML1.0 validにする

2007/06/15 金曜日 2:38 投稿者 zon

Yahoo!検索結果Yahoo!ブックマークの登録数が表示されるようになってます。

Yahoo!検索 スタッフブログの記事に書かれているYahoo!検索結果にブックマーク登録人数表示を開始!の内容を読む限りでは、Yahoo!の検索結果に直接的に影響があるようなニュアンスは読み取れませんでしたが、間接的なSEOの効果は考えられるので、利用するサイト運営者は増えるのではないかと思います。

Yahoo!ブックマークでは、便利ツールのブログパーツとして「Yahoo!ブックマークに登録」リンクとブックマーク人数表示リンクが用意されていて、HTMLコードをコピーして、ソースに貼り付ければいいようになっているのですが、これがXHTML1.0に準拠していないので、そのまま貼ってしまうと The W3C Markup Validation Servic でエラーが出てしまいます。

これに手を加えて使うことにしました。

「Yahoo!ブックマークに登録」リンク

Yahoo!ブックマークに登録のコードに関しては、Yahoo!ブックマークに登録と同様に<img>タグのタグを閉じる部分に/を入れておくことと、&を&amp;に変更しておくこと。コードは下記の通りです。

<img src="http://i.yimg.jp/images/sicons/ybm16.gif" width="16" height="16" alt="Yahoo!ブックマークに登録" /> <a href="javascript:void window.open('http://bookmarks.yahoo.co.jp/bookmarklet/showpopup?t='+encodeURIComponent(document.title)+'&amp;u='+encodeURIComponent(window.location.href)+'&amp;opener=bm&amp;ei=UTF-8','popup','width=550px,height=480px,status=1,location=0,resizable=1,scrollbars=0,left=100,top=50',0);">Yahoo!ブックマークに登録</a>

ブックマーク人数表示リンク

ブックマーク人数表示のコードに関しては、<img>タグのタグを閉じる部分に/を入れておくことと、もうひとつが厄介で、リンク先と人数を表示するところまでが可変で、「人が登録」までが固定なので、<a>と人数までをJavaScriptで読み込んで、後の部分をそのまま記述していて、XHTML上では、</a>が突然出現して、<a>がない状態になっています。「人が登録</a>」の部分まで読み込んでくれるようにしてくれてもいいと思うのですが。それだけのデータ送信量すら節約したいのでしょうか?まぁ、利用者が半端な数じゃなさそうなので、膨大な量になりそうですけど。

良い対処方法が思い浮かばず、仕方がないので自分で「人が登録</a>」を読み込むJavaScriptを用意しました。

jsファイルに以下のコードを記述してください。

document.write('人が登録</a>');

上記のjsファイルをサーバの任意の場所に設置して、下記のコードを貼り付ければOKです。

<img src="http://i.yimg.jp/images/ybm/icons/view_url.gif" width="16" height="16" alt="Yahoo!ブックマークでこのサイトを登録している人数" /> <script type="text/javascript" src="http://num.bookmarks.yahoo.co.jp/ybmno.php"></script><script type="text/javascript" src="jsファイルのパス"></script>

Yahoo!に限らず、ブログパーツ等で用意されているコードはXHTMLに準拠していないものが多いので困ります。
HTMLの方が需要は多いかもしれないけど、W3Cに準拠してるかどうか気にしている人はXHTMLでコーディングしている人の方が多いと思うので、XHTMLにあわせて提供したほうがいいと思うのですが。

XHMTL valid でなくなるので、(Yahoo!に限らず)ブログパーツやAPIを使うのをやめたという人って結構多いと思うのですがどうですか?

Google AJAX Search API のJSONデータを取得する

2007/06/06 水曜日 17:42 投稿者 zon

Google Code で提供されている API で Google検索結果を取得できる Google AJAX Search API ですが、検索結果をDBにキャッシュすれば、Google のサーバにも余計な負荷がかからないし、1日あたりのクエリ発行回数に制限があるはず(※)なので、その辺の問題を解消するためにも、どのようにすれば実装可能か考えていました。

※クエリ発行回数に制限については、2005年あたりの書かれている記事は1000回/1日とあるのですが、最近の記事の解説では見つけれないし、公式の利用規約にもそれらしい記述が見つけれませんでした。

正直、AJAX は用意されているAPIをそのまま実装する程度のことしかしたことがないので、なにをどこまで出来るとか突っ込んだことはよく分からないのですが以下の記事の見た感じ、JSONPというのを使えば簡単に出来るのではないかと気がしました。

次の様なURLをリクエストすればよいみたいです。詳しい解説は上記のリンク先を参照してください。

http://www.google.com/uds/GwebSearch?callback=handleWebResults&context=0&lstkp=0&rsz=10&hl=ja&q=%E4%BB%8A%E6%B2%BB%E5%B8%82&key=ABQIAAAA8sIaWMGpb7cFeAQjzNmTQhSgxx03qR9JK3UItoDYsuRdbT1gGBQC--KhlY0sbIlKGaHsZnC8e2m57A&v=1.0

JSONP というのはよく分かっていないけど、JSONは要求したデータを配列で返してくれるってイメージで、実際に参考サイトの通りのURLを叩いたら配列風のデータが返ってきたので問題ないでしょう。

使えれば問題ないのであまり突っ込んで調べないけど、JSONPは以下の記事に「JSONデータを括弧でくくった上でこっちが指定した文字列を頭につけて返してね?」と書かれているので多分間違いない。と思う。

_blankを使わないで別ウィンドウを開く

2007/05/28 月曜日 19:10 投稿者 zon

個人的に別ウィンドウを開かせるようなリンクの張り方はほとんどしないのですが、たまにどうしても別ウィンドウで開いて貰いたい場合があります(PDFデータのダウンロードページとか、そのページからリンクが張れなくて、行き止まりになってしまう場合とか)。

でも、_blankは XHTML 1.1 では廃止されたとか、HTML4.01とXHTML1.0で非推奨だとか、そういった感じのイメージだけはなんとなくあって、今は基本的にほとんどが XHTML1.0 で書いているので良くはなくてもダメではないという感じなので、使ってもいいかとも思うのですが、将来的に XHTML 1.1 とかにしていくときに修正するのが大変なので、軽く調べて以下を参考にすることにしました。

_blankを使わないで別ウィンドウを開くにはrel=”external”を使うのが美しいと思う。

_blank 使わない別ウィンドウを開く方法

コメント欄を見るといろいろと議論されていて、この記事の内容から修正されている点もありますが、特にガチガチに XHTML に準拠した形にしたいわけでもないので、とりあえずは、a タグに class="extarnal" を指定して、JavaScriptで anchor.target = "_blank"; にすることにしました。

rel="extarnal" にしなかった理由は、WordPress のコア部分の auther 関連が既に class="extarnal" を指定していたからです。コア部分に手をつけるのはあまりしたくないし。

それなら external じゃなくて、別の名前にすればよかったのですがもう一つ理由があって、上記の記事のコメント欄を読んでいると、rel="external" は非準拠だどうだといった議論があったりして、詳しく調べるのも面倒なので、無難に class にしておくことにしました。ついでに rel属性の準拠、非準拠の話の中で、(X)HTML仕様に定められていないリンクタイプを記述するときは、プロファイルをhead要素で指定しないといけないといったことが書かれていました。

headタグの profile要素の指定について

プロファイルとか言われても、あまり意味が分からないので、とにかく参考にされている以下のリンク先などをざっと読んで rel="nofollow" を使う場合もプロファイルを指定しておく必要があるとありました。

rel="nofollow" ほかメタデータのプロファイル

WordPress のプロファイルは既に、XFNを使っていますが、このプロファイルが、どうも複数指定は出来ないようで、XFN をとるか XHTML metainformation profile 二者択一になってしまうので、XHTML metainformation profile を採用することにしました。幸い XFN は、指定するのが面倒で、全く使っていなかったし。

ソースコードは、<head profile="http://gmpg.org/xfn/11"> を <head profile="http://purl.org/net/ns/metaprof"> に変更すればOKのはず。

WP 未来投稿(予約投稿)のテスト・続

2007/05/15 火曜日 10:30 投稿者 zon

この件はWP 未来投稿(予約投稿)の注意点で、問題なかったのでいったんクローズしたんですが、このブログの環境では問題なかったものの、実際に問題が発生したブログの方では、やはり未来投稿(予約投稿)が出来ない症状が続いています。ここのところ忙しかったので見てみぬフリをしていたのですが、やはり不便なのでもう一度調査します。

症状が発生している方との違いを調査するのにこのブログのデータを取るための記事なので、内容のある記事ではありません。原因が特定できた場合は追記を書くと思います。

調査結果追記(2007/05/15)

未来投稿が反映されない原因はソケット接続オープン時のタイムアウトでした。
/wp-includes/cron.php の 87行目(Ver 2.1.3)の fsockopen タイムアウトが 0.01 に設定されていて、$errstr に Connection timed out を返していました。タイムアウト時間を長めにとれば大丈夫かと思います。

未来投稿が反映されなくて困っているけど、難しいことが分からないという人は、下記の部分の 0.01 の部分を 0.1 にしてみると問題が解決する場合があるかもしれません。

$argyle = @ fsockopen( $parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01 );

一応、他にも短すぎるタイムアウトが設定されていないか fsockopen で水平展開してみましたが問題になりそうなところはありませんでした。

確か、以前もVer 2.0系でタイムアウトが原因の問題で悩んだことがありました。(詳しく覚えてないけどトラックバック関連だったような気がします。)メモしておいたんですが、サーバトラブルでバックアップデータを復旧せずそのままに状態で放置してたのですっかり忘れてました。これからはちゃんとメモをしておこう。

WP 未来投稿(予約投稿)の注意点

2007/04/29 日曜日 19:00 投稿者 zon

WrodPressで未来投稿(予約投稿)の投稿を行う場合に引っかかりそうなことを書いておきます。

未来投稿(予約投稿)のやり方

管理画面の投稿画面でタイムスタンプを未来の投稿したい時間に設定します。

未来投稿(予約投稿)の注意点

  • 管理画面の投稿画面の『投稿ステータス』の公開にチェックを入れておきます。

通常の投稿を行う際には記事を書き上げた後に、『公開』のボタンを押せば、投稿画面の右側のメニューの投稿ステータスに関係なく公開されますが、未来投稿を行う際には『投稿ステータス』を公開に設定しておかないと自動で投稿されないようです。

注意
この記事はタイムスタンプを 2007/04/29 19:00、投稿ステータスを草稿に設定した状態で2007/04/29 13:20 に公開ボタンを押して投稿しました。
つまりこの記事が 2007年2007/04/29 19:00 で表示されていれば、『未来投稿(予約投稿)の注意点』に書かれてある内容はウソ情報と言うことになります。

詳しい考察は下記の記事を参照してください。
WP 未来投稿(予約投稿)のテスト

追記

問題なく未来投稿(予約投稿)されていました。前回はなぜ未来投稿(予約投稿)が出来なかったのか気になりますが、原因を調べるにももう再現さすことが出来ないし、問題なく表示されればそれでいいので、この件は終了。

さらに追記

問題が解消されていなかったので再度検証しました。
検証結果はWP 未来投稿(予約投稿)のテスト・続を参照してください。

zontheworld
うまい焼肉が喰いたい。
HTML convert time: 0.427 sec. ( Login )