Home

日記
PingProxy α版 (20:18)Edit

※注意書き

  • PingProxyを利用するいしだなおとさんによる「htmlによるTrackBackクライアント実装(http://www.ksky.ne.jp/~naoto/39_akiary/n3/200310.html#20031010_1065724154)」が公開されています。
  • urlsパラメータで送信するべき文字列は、TrackBack Ping URLではなく、記事URL(いわゆるPermalink)の方です。TrackBack Ping URLが送られてもそこへのPing送信は代行しませんのでご注意ください。
  • Perlのサンプルが間違っていたので修正しました。


日記やらblogやらwikiやらCMSやらの連携について議論するMLの、

あたりで書いたTrackBack送信代行サーバーPingProxyをテスト実装してみた。

概要

TrackBack、PingBackなどの送信を代行する専用サーバーを用意することによって、ユーザーの使い勝手を向上させる仕組み。TrackBack Ping URLの存在を気にすることなく、PingBackと同等の操作でTrackBackが気軽に送れるようになる。

重複チェック(同じTrackBackを複数回送ってしまう)、存在チェック(間違ったURLに送ってしまう=タイムアウトまで待つ?)、文字コードチェック(送り先の文字コードを確認して、その文字コードに変換した上で、charsetパラメータもつけて送る)などもサーバーサイドで代行する。

詳細

TrackBackを一般ユーザーとして利用する際の、私が思うところの弱点は、

  • 言及したい記事URLとTrackBack Ping URLを結びつけることを意識するのがうざい(bookmarkletを使ったところで)
  • できれば、PingBackみたいに含まれるURL一通りに対して自動的に(相手が対応していれば)Pingを送って欲しい
  • でも、PingBackはサーバー負荷&時間がかかるから、記事更新時のレスポンスが悪くなるのがうざい
  • ただのTrackBackの場合でも、相手先サーバーが重ければレスポンスが悪くてうざい

というあたりなんで、そのあたりを解消するために、

  • PingProxy I/F(http://pingproxy.ishinao.net/ping)がすべてのPing投稿をうけつける
  • PingProxyにはHTTP POSTで以下のパラメータを送信する。
    • url(必須)……送信元記事の固定URL
    • title……送信元記事のタイトル
    • blog_name……送信元記事を含むサイト名
    • excerpt……送信元記事の要約
    • charset……POSTしたパラメータの文字コード
    • urls(必須)……言及先URL文字列(複数)を含むテキスト。※ここでいう言及先URL文字列というのは、TrackBack Ping URLではなく、記事URL(いわゆるPermalink)のことです。TrackBack Ping URLを送信してもPingを送りません。
  • PingProxyは、上記のPing投稿を受け付けると、ただちに「OK」という文字列を返す。それ以外の文字列が返された場合はエラー。
  • PingProxyは、投稿されたurlsに含まれるURL文字列を抽出し、そのURL文字列に対応したPing I/Fが存在するかどうかを確認する
    • 埋め込みRDFを使ったTrackBack Ping I/Fを検索する
    • はてなダイアリーの記事URL文字列に合致する場合は、末尾にtrackbackをつけたものをPing URLと見なす
    • blogmapにそのURLに関する項目がないかを確認し、存在した場合はblogmapのTrackBack Ping URLを返す
    • PingBack I/Fを検索する(未実装)
  • Ping投稿を実際のPing処理コマンドに分解する
    • 投稿元記事URLと、その記事に含まれるターゲットURL、ターゲットURLが持つPing I/F、という組み合わせ分のPing処理コマンドを予約する
    • すでに処理が行われた組み合わせのコマンドは重複実行しない
  • 各URLに関する情報を収集する
    • そのURLは本当に存在するか
    • そのURLではどの文字コードを利用しているか
  • 実際にPing処理コマンドを実行する
    • すべての準備が整ったPing処理コマンドを順次実行していく
    • TrackBack Pingを送信する
      • 送信先のcharset(だと思われるもの)に合わせてパラメータの文字コードを変換した上で、charsetパラメータ付きで送信する
    • pingback.pingを送信する(未実装)
    • 各Ping処理コマンドの実行結果をログに記録していく

urlsには、言及先の記事URLを列挙してください。記事本文を丸ごとurlsとして投稿しても、その中に含まれるURLを自動的に抽出するので、通常は記事本文を丸ごと投稿してしまって構いません。

まだほとんどテストも行っていないので、ひとまずは概要説明ってことで。裏タスクは-[まだ自動化していません。もうちょっと試して問題なさそうならば、裏タスクを自動化しつつ、-自動化しました。表側のWebインターフェース(ログ表示とか)も用意します。

α版のURL

直接PingProxy I/Fを叩く場合は、

を。

HTMLフォームから手動で送信する場合は、

を使うと動作します。

PHPによるPingProxy送信サンプルコード

$pingproxy = 'http://pingproxy.ishinao.net/ping';
$charset = 'euc-jp';
$blog_name = 'サイト名';
$url = '記事のURL';
$title = '記事のタイトル';
$body = '記事本文';
$excerpt = '記事の要約';
$query = 'url='.urlencode($url);
$query .= '&title='.urlencode($title);
$query .= '&blog_name='.urlencode($blog_name);
$query .= '&charset='.urlencode($charset);
$query .= '&excerpt='.urlencode($excerpt);
$query .= '&urls='.urlencode($body);
$curl = curl_init($pingproxy);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $query);
ob_start();
curl_exec($curl);
ob_end_clean();
curl_close($curl);

Perl+LWPによるPingProxy送信サンプルコード

use URI::Escape;
use LWP::UserAgent;
use HTTP::Request;
my $pingproxy = 'http://pingproxy.ishinao.net/ping';
my $url = '記事URL';
my $title = '記事タイトル';
my $blog_name = 'サイト名';
my $excerpt = '記事要約';
my $body = '記事本文';
my $charset = 'euc-jp';
my $ua = new LWP::UserAgent;
my $headers = new HTTP::Headers;
$headers->header('Content-type','application/x-www-form-urlencoded');
my $query = 'url='.uri_escape($url);
$query .= '&title='.uri_escape($title);
$query .= '&blog_name='.uri_escape($blog_name);
$query .= '&charset='.uri_escape($charset);
$query .= '&excerpt='.uri_escape($excerpt);
$query .= '&urls='.uri_escape($body);
my $request = new HTTP::Request('POST', $pingproxy, $headers, $query);
my $response = $ua->request($request);

rubyによるPingProxy送信サンプルコード

require('cgi.rb');
url = '記事URL'
title = '記事タイトル'
blog_name = 'サイト名'
excerpt = '記事要約'
body = '記事本文'
charset = 'euc-jp'
query = 'url='+CGI::escape(url)
query += '&title='+CGI::escape(title);
query += '&blog_name='+CGI::escape(blog_name);
query += '&charset='+CGI::escape(charset);
query += '&excerpt='+CGI::escape(excerpt);
query += '&urls='+CGI::escape(body);
require 'net/http'
http = nil
response = nil
header = {}
header['Content-type' = 'application/x-www-form-urlencoded'
Net::HTTP.start('pingproxy.ishinao.net') {|http|
response ,= http.post('/ping', query, header)
}

※一応動いたけど、rubyはさっぱり分からないんで、そのまま使うのは危険かも

はてなダイアリーとの連携テスト用

はてなダイアリーでは、送信元URLに送信先URL文字列が含まれるかを確認するため、送る前にURLを記述しておかないといけない。

懸案事項

  • はてなダイアリーのように、送信元URLに送信先URLが含まれているかを確認した方がいいだろうか?
  • 内部EUC-JPなんで、日本語・英語以外の文字コードはサポートできないけれども、本気でやるならば内部UTF-8でやるべきなんだろうなー。
  • MovableTypeにPingProxy送信機能を組み込んでみたんだけど、MovableTypeって派生物の配布も許可していないってことは、改変コードの提示も許可されないのかな? それとも、MovableType自身のコードを含まなければいいのか? 微妙だ。
  • PingProxyって、MovableTypeでTrackBackをProxy経由で送るときの設定項目名と同じだな。ややこしくなるから変えた方がいいかな。

Published At2003-10-01 00:00Updated At2003-10-01 00:00

日記
著作権と「マルC」 (20:18)Edit

もともと結構重要なテーマだったんだけど、最近さらにその重要度を増している著作権に関する基本的な知識のページ。2chのどこぞのスレッドで、「©を使わず(c)と書いたのでは、国外では相手にされない」なんて感じの書き込みを見かけたんだけど、別にそんなこともないみたいだね。というか、「それほど話は単純じゃない」と言った方がいいのかな。

Published At2003-10-01 00:00Updated At2003-10-01 00:00

日記
ラーメン二郎にてインタビュー (20:18)Edit

ラーメン二郎(本家)店主の古いインタビュー。面白いなー。ラーメン次郎って新宿のしか食ったことがないけど、一度田町の方にも行ってみようかな。

ついでに地元ネタ。

ラーメン・アカデミーだそうな。実際のところ、これが出来たら武蔵浦和で一番メジャーな場所になってしまいそうな予感。もうちょっと発展しないかなー。

Published At2003-10-02 00:00Updated At2003-10-02 00:00

日記
Edit

_ <<a href="http://mylog.ishinao.net/id/902">HNSにTrackBackを</a> <p>HNSにTrackBackを実装する実験中。

実験用パラグラフ <p>こっちにもTrackBackを送ってみよう。

Published At2003-10-03 00:00Updated At2003-10-03 00:00

日記
「Google八分の刑」という難問 from 圏外からのひとこと (20:18)Edit

>>基本的には、「Google八分の刑」はあるURLに宣告します。そのページがグーグルランクのマイナス査定を受けることになります。

直接この話とは関係ないんだけど、ふと思ったこと。

最近TrackBackとかblogmap(被リンク数のポイント化)とか、Web上のリソースに対して、ユーザーがプラスの評価を与える方向のものばかり考えていたけれども、マイナスの評価をうまく与える方法ってのも考える価値があるよなー。

マイナスの評価というと、ワーストケースでは「2chで晒されて荒らしが集まる」みたいなろくでもないものしか思いつかないけれども、もっと薄く自然でさりげないマイナス評価の仕組みがあると、Web上のリソースの評価に関する仕組みが多様化してきそうだ。

リンクする際にさりげないマイナス(あるいはプラスからマイナスにかけての複数段階)評価を盛り込めて、それを機械的に簡単に読みとれて(評価DBを構築しやすくて)、しかもそういうリンクを(して|されて)も関係者が気にしない(これが一番難しい)、というようないい仕組みはないかなー。

Published At2003-10-04 00:00Updated At2003-10-04 00:00

日記
限界に挑戦できず (20:18)Edit

来週は草野球の大会なんで、せめてちょっとでも練習しておこうと二子新地に集合。といっても、たったの6人(しかも試合に出る人間はそのうち4人)かよ。本当に集まり悪いよなー。

グラウンドは取れなかったんで、空いている場所を探してさまよう時間が2割。グラウンドが空いていなかったんで、砂利地面で練習(になんねーよ)が3割。5割くらいがまともにグラウンドで練習できた時間か。

それでも一応それっぽいノックがちゃんと出来た。が、最初ノッカーをやっていたら50球くらい打っただけで手の皮が2カ所もむけた(グローブをしていたのに)ので交代。自分自身がノックを受けるのは、3球くらい連続で受けると、もうダッシュの一歩目が出なくなることが判明したので、手が届くところだけ処理して交代。昔(高校生の頃)だったら、血反吐を吐きそうになっても、さらにダッシュとかしていたのになー。まああれから体重が30kg近く増えているんだけど。

それにしても、先週買ったばかりのちょっと高いグローブは、比較的柔らかいと思っていたのに、全然ちゃんと閉じられずにぽろぽろこぼしてばかりだった。来週までにもうちょっとなじませておこう。

その後バッティングセンターにちょっと寄って、渋滞に巻き込まれたり、人のもらいものベッドを回収したりしながら、4時間くらいかけて帰宅。そういやほとんど何もしていないのにラーメンをおごってもらった。ラッキー。

Published At2003-10-04 00:00Updated At2003-10-04 00:00

日記
NTT-XとGoogle、インターネット検索分野で戦略的提携――国内ナンバー1を目指して from ASCII24 (20:18)Edit

>>具体的には、NTT-Xの検索サービス“goo”にグーグルのウェブデータベースを含む基本的な検索機能の提供を受け、独自の検索キーワード自動補正機能(ウィスキー/ウィスキィなどの吸収や、キーワードの修正ワード候補の表示)などを加えたうえで検索サービスを提供する。

Googleもさすがにローカライズ関連の細かい作業をいちいち自前でやるのはつらいだろうし、英語とはかけ離れた言語に関しては、現地の技術系会社と協力してやっていくってのは、まっとうな選択肢だろうな。

Published At2003-10-05 00:00Updated At2003-10-05 00:00

日記
2ちゃんねる向けフリースペース「壷かきこ」がオープン from INTERNET Watch (20:18)Edit

>>壷かきこは、2ちゃんねるの各掲示板で話題になったスレッドをまとめるサイトや、テンプレートを保存するためのフリースペースだ。

2ch専用ジオシティーズみたいな感じですか。2ch関係会社の商売の方向性ってよく分からないなー。こんな世の中に山ほど似たようなものがあるサービスを、今からわざわざ立ち上げる意味はあるんだろうか?

権利侵害とかの対応に関して、他のサービスよりも多少緩い(2ch論理が通じやすい)かもしれないけど、どうせ2ch系サービスだって昔ほど優しくない(というかふつうのプロバイダっぽい対応をするようになった)だろうし。どれだけの人がわざわざ使おうと思うんだろう。でもまあいまだに2chブランドが好きな人たちは結構いるみたいだから、そういう人たちが使うかな?

Published At2003-10-05 00:00Updated At2003-10-05 00:00

日記
日立、ソフトの動作を制限する「ソフト電池」技術の導入/運用支援サービスを発表 from CNET Japan (20:18)Edit

>>同技術を利用することで、ソフトウェアの使用期間や起動回数などに応じて仮想的な“電池”の残量が減少するよう制御でき、ソフトウェアの従量課金が可能となる。またソフトウェアを動作させるにはソフト電池の充電(購入)が必要なので、ソフトウェアの不正使用/コピーを防止できる。なおソフト電池はパソコンのハードディスクに分散して記録するので、ソフト電池自体のコピーは不可能という。

この技術に関しては、前にもどこかで見かけた覚えがあるな(多分これを利用した日立のソフトの記事で)。ソフトウェアの利用料に対して従量制課金を取り入れたいというアプローチは、確かに重要だろう。成功すれば、ソフトウェア産業の構造が大幅に変わりうる。

もっともシンプルなやり方は、ASP方式(ネット越しにソフトウェアの機能だけを提供し、ソフトウェア自体は提供しない)だろうけど、これはいろいろ制約が大きすぎるからな。

ただ、「ソフト電池はパソコンのハードディスクに分散して記録する」程度で、とてもまっとうな管理が可能とは思えないんだよなー。そういうやり方じゃ、狙われたらいずれはクラックされそう。USBキーみたいなものと組み合わせれば、なんとかなりそうな気がするんだけど。

Published At2003-10-05 00:00Updated At2003-10-05 00:00

日記
インターネット総研、ユーザー指向のITネットワーク社会実現に向けたフォーラムを設立 from CNET Japan (20:18)Edit

この記事自体はどうでもいい(というか設立するってだけじゃ評価不能)だけど、

>>コラボレーション同士をネットワークすることにより実現する次世代のコラボレーション

ってのは興味深いネタだ。複数のコラボレーション同士でコラボレーションするっていうと、要はInterWikiみたいな仕組みの発展系を考えるって感じかなー。「TrackBackのメタ情報(RSS)を利用する」なんてのも、コラボレーション同士のコラボレーションに近いかも。記事オリエンティドなP2P連携じゃなくて、サイト(あるいはCMS)レベルでのP2P連携のための統一的なインターフェースがあると楽しいかもね。

Published At2003-10-05 00:00Updated At2003-10-05 00:00