2008/1/31 木曜日 by kouichi
どうも自分のブログからトラックバックPINGが送信されず、トラックバックが動作してないっぽかったので、調べてみました。
VersionはME2.2.3です。
2.2.3で同様な事例が挙がっていなかったのですが、こちらだけでしょうか??
不慣れなPHPでしたが、ソースを追いかけると、
wp-include/comment.php#trackback
がどうやらトラックバックPING送信のメソッドらしいので、追跡してみると、
wp-include/comment.php#trackback
↓
wp-include/post.php#trackback_url_list
↓
どこからも呼ばれていない
と
wp-include/comment.php#trackback
↓
wp-include/comment.php#do_trackbacks
↓
wp-include/comment.php#do_all_pings
↓
wp-includes/default-filters.php
↓
??
で、どうも投稿した時に呼ばれてない?
では呼んでしまえ、ということでwp-admin/post.phpの
15行目付近
case 'post':
$parent_file = 'post-new.php';
$submenu_file = 'post-new.php';
check_admin_referer('add-post');
$post_ID = 'post' == $action ? write_post() : edit_post();
do_trackbacks($post_ID); // 追加
87行目付近
case 'editpost':
$post_ID = (int) $_POST['post_ID'];
check_admin_referer('update-post_' . $post_ID);
$post_ID = edit_post();
do_trackbacks($post_ID); // 追加
の2箇所にdo_trackbacksを追加したところ、きちんとトラックバックPINGが送信されました。
本来なら設定の条件見たりとかしないといけないと思いますが、まー自分しか使わないので、とりあえずは良しとします。
Posted in WordPress | No Comments
2008/1/31 木曜日 by kouichi
Yahoo!JAPAN、OpenIDの発行をスタート
ということもあり、openidのConsumer部分の実装にチャレンジしてみました。
Javaではopenid4javaというライブラリが提供されているので(というよりそれしかない??)使ってみました。
ソースやライブラリは
http://code.sxip.com/openid4java/
からダウンロードすることができます。
今日時点の最新は0.9.4というバージョンです。
simple-openidというサンプルがついていたので、それを実行したところ
org.openid4java.message.MessageException: 256: Required parameter missing: openid.mode
at org.openid4java.message.Message.validate(Message.java:182)
at org.openid4java.message.AuthSuccess.validate(AuthSuccess.java:404)
at org.openid4java.message.AuthSuccess.createAuthSuccess(AuthSuccess.java:117)
at org.openid4java.consumer.ConsumerManager.verify(ConsumerManager.java:1078)
・・・
とエラーがでて、進みません。
ソースもダウンロードしてみてデバグしてみたのですが結局わからず、ためしに一つ前のバージョン0.9.3をこちらからダウンロードしたところばっちり動きました。
0.9.4のほうは見送って0.9.3を使うことにします。
ちなみにopenid.ne.jpとlivedoorのアカウントで試したのですが、openid.ne.jpのほうはローカル環境(http://localhost:8080など)では動作しない様子。
#HttpServletResponse#sendRedirectで404が返ってきます。
外部向けに公開したドメイン上ではきちんと動作しました。
なかなか、情報が少ないそんな中、こちらのサイトも参考になります。
PHPのほうは情報が活発ですね。うらやましい。。
ためしにPHP-openidを試してみましたが、こっちはすんなりいけました。
Posted in openid | 4 Comments
2008/1/30 水曜日 by kouichi
LuceneのAPIでCustomScoreQueryなる便利なものがありました。
いつもお世話になっている関口さんのブログで以前
自分の家から一番近いレストランを探す(地理検索、地図検索)
という記事があったのですが、これをCustomScoreQueryで実装してみました。
→サンプル
FloatFieldSourceを継承したDistanceFunctionを作成します。
DistanceFunctionではgetCachedFieldValuesをオーバーライドし、引数のFieldCacheからキャッシュ値を取得しDocValuesインスタンスを生成します。
cache.getStringsで条件にHITしたDocumentのfieldの値がすべて取得可能です。
#キャッシュするのでINDEXが大きい場合はそれなりのメモリが必要
public DocValues getCachedFieldValues (FieldCache cache, String field, IndexReader reader) throws IOException {
String[] values = cache.getStrings(reader, field);
return new DistanceDocValues(values,d_,x_,y_);
}
DocValuesを継承したDistanceDocValuesではfloatValをオーバーライドします。
ここでは2点間の距離を求めてそれをスコアにしています。
なお、範囲外のデータに関してはスコア0を返すようにします。
Query tq = new TermQuery(new Term(F_VALUE,value)); // すし検索
DistanceFunction func = new DistanceFunction(F_POS,x,y,distance);
ValueSourceQuery vq = new ValueSourceQuery(func);
Query query = new DistanceCustomScoreQuery(tq,vq); //←CustomeScoreQuery
Hits hits = searcher.search( query );
”すし”だけを検索するQueryと、DistanceFunctionを渡したValueSourceQueryとでCustomeScoreQueryインスタンスを生成し、検索すると
1.0 : すし / 3,4
0.7236068 : すし / 5,2
0.3618034 : すし / 9,5
0.19098298 : すし / 1,7
と結果が得られます。
CustomeScoreQuery#customScoreではsubQueryScoreとvalSrcScoreをかけた値がスコアになるようなので、DistanceDocValues#floatValで0スコアを返したデータに関してはヒットせず、自分の家から一番近いレストランを探す(地理検索、地図検索)の
しかし、(たとえスコアを0にしようとも)円の外の座標を持つ文書を「拒否」することはできない。そのため実行結果は次のようになり、座標(9,1)のすし屋も検索されてしまう。
の問題もクリアできました。
なお、DistanceDocValues#floatValはデータがヒットした件数分実行されるので、パフォーマンスに対してクリティカルですので要注意。
Posted in Lucene | No Comments