ブログ深追い検索 (closed)
パターンマッチングの検索エンジンであることを重視して、タイトルとサマリー内に検索語が含まれないものは検索結果から排除することにしました。
livedoorのブログ検索が特に、検索語が含まれていないのに検索結果に出てくるページが多いようです。。
一応、検索結果のURLにoriginal=1を付け加えると、すべての検索結果を含む版になります。
http://blogsearch.fukaoi.com/?q=wii&original=1
http://blogsearch.fukaoi.com/?q=wii&type=rss&original=1
PostgreSQLで時刻を扱うとき、PHPのdate()で出力しやすいようにUNIXTIME(int型)で保存しています。SQL内での扱いが逆に面倒になるのですが、UNIXTIMEからtimestamp型に戻すTIPS。
create table test (
accesstime integer not null
);
select to_char('1970-01-01'::date + (accesstime || 's')::interval, 'YYYY-MM') from test;
直接intからintervalに変更できないので(ERROR: cannot cast type integer to intervalが出る)secondsのsを文字列としてつなげてやるとうまくCASTできます。to_charはmktimeみたいな具合に書けます。
月の一覧を出すときはPHPで書くよりもSQLでgroup byした方が速いのでこんな感じ。
select to_char('1970-01-01'::date + (accesstime || 's')::interval, 'YYYY-MM') as m from test group by m order by m;
逆の操作は以下に載っています。
Converting a date to unix timestamp (epoch seconds)
select extract('epoch' from now()) as unixtime;
ただこれだと少なくともPostgreSQL8.1.4では小数点以下までついて面倒なので自分は関数を定義してしまっています。
unixtime.c:
#include "/usr/include/pgsql/server/postgres.h"
#include "/usr/include/pgsql/server/fmgr.h"
#include <time.h>
PG_FUNCTION_INFO_V1(unixtime);
Datum
unixtime(PG_FUNCTION_ARGS)
{
PG_RETURN_INT32(time(NULL));
}
コンパイル:
cc -I/usr/include/pgsql/server -fpic -c unixtime.c
cc -shared -o unixtime.so unixtime.o
関数の定義:
CREATE FUNCTION unixtime() RETURNS INTEGER
AS '/path/to/unixtime.so', 'unixtime' LANGUAGE C STRICT;
実行:
select unixtime();
IEでのJavaScriptの動作確認は悪夢を見ること多々ですが、また謎仕様に遭遇。かなり長時間はまりました。。
動作例(PHPのソース)
先日作ったCAPTCHAを人間が見ても読めなかったときに画像を新しく生成し直す仕組みを考えていました。単純に、リンクをクリックするとJavaScriptが呼び出され、img要素のsrcを書き換える、という仕組み。上の動作例では?以降の引数にどんどん「a」を加えていく実装になっています。なおこのCAPTCHAはリロードすれば同じファイル名でも再生成されます。
hrefにはjavascript:void(0)を指定してonClickの方にコードを書く癖がついているので、今回もそれでやってFirefoxでは問題なく動いていたのですがIE6でなぜか動かず。onClickの中は実行されていますが、srcを書き換えても画像ファイルへのリクエストがなされません。ですので、画像の部分が空白になってしまいます。
キャッシュ等の問題を真っ先に疑いましたが、最終的にはhrefにvoid(0)を指定してonClickでJavaScriptを実行する組み合わせがよくないらしく、hrefで実行させたり、hrefの指定を#にしたりすれば動くようになりました。
原因がわかれば、Googleにどう聞けばいいかわかるのであっさり同じ問題の解決策が見つかりました。
ここで解説されているreturn false;をonClickに書き加える方がスマートですね。
Proxyとか :: javascript:void(0); で gifアニメ が動かないバク
僕が使った検索語の屍。もっと「バグ」方面で探した方が良かったかも。
javascript IE 画像の表示
javascript IE 画像 切り替え
javascript IE 画像 再読み込み
javascript img src reload
CAPTCHAに関する記事。
CAPTCHA破りもかなりできるらしい。
アルゴリズム的には堅牢になっていませんが、生成する画像にアルファベットではなくて片仮名を使ったらどうだろう、と思ってphpspotでお勧めされていたKCAPTCHAのコードを拝見しつつつくってみました。
デモは以下。LGPLでPHPのコードごと見れます。
Japanese KATAKANA CAPTCHA test
I published source code only:

参考にしたKCAPTCHAのコードはphpclasses.orgでユーザ登録しないとダウンロードできません。思ったより短いコードで、コアはたったの200行。
- アルファベットをPNGから切り出している
- o=0, 1=lなど似た文字はあらかじめ排除している
- rnとrmのように隣り合うと識別しにくくなる文字列を排除している
- 文字を歪めるアルゴリズムはsinカーブを描くようにごりごりimagesetpixelでやっている模様
カタカナにするにあたって、特にアルファベットと変わる点はなく同じようにツとシのように識別しづらいものは排除しました。ただ、隣り合うと識別しづらくなる文字の組み合わせがあまり思い付かなかったのでそちらは実装していません。ノとレとか?あとユーザ入力と生成された文字列の比較時に小さいャとヤの区別を付けない方がいいかもしれません。
また、昔から好きなGrayGraphicsのフリーフォントを使わせていただきました。CAPTCHAに使っていいかライセンス的によくわからないので商用利用の際は注意が必要かもしれません。
今回は1つのフォントしか使っていませんが、破られないように強化するならKCAPTCHAのように複数のフォントをランダムに使った方がベターでしょう。文字数も固定長にしない方がいい。ただそれもCAPTCHA破りの汎用性によっては無意味なのかもしれません。現在ある最強のCAPTCHA破りアルゴリズムだとカタカナに対応するためのデータを学習すれば簡単に破れるんでしょうか。
なおPNGではなくTTFを使ったので動作環境にはGDとfreetypeが必要になります。一応PHP5用。ちょっと変えればPHP4でも動くはずです。
普通はapt-getで入れてしまった方が楽ですがPHP5.2.0を試したかったのでソースから。apacheもついでに最新版。
ちなみにapt-cache show php5で見るとUbuntu6.10にはapt-getだとPHP5.1.6が入る。
まずはapache。
$ ./configure --enable-so
checking for C compiler default output file name... configure: error: C compiler cannot create executables
See `config.log' for more details.
configure failed for srclib/apr
gccは入っていたのとconfig.logにはそれらしいエラーが見当たらなかったのとで最初なんのエラーかもわからず。ググってもちゃんとした解答がすぐには見付からなかった。
まぁ、原因はg++が入っていなかっただけで、解決しました。
$ sudo apt-get install g++
$ ./configure --enable-so
$ make
$ sudo make install
続いてPHP。
$ ./configure --enable-mbstring --with-apxs2=/usr/local/apache2/bin/apxs
...
checking lex output file root... ./configure: 1: lex: not found
configure: error: cannot find output from lex; giving up
エラーメッセージとapt-getのパッケージ名が一致しないのでapt-cache searchで探したりいろいろ。
$ sudo apt-get install flex
...
configure: error: xml2-config not found. Please check your libxml2 installation.
$ sudo apt-get install libxml2-dev
あとはmake && make install。/usr/local/apache2/conf/httpd.confに
AddType application/x-httpd-php .php
を書き加えれば動く。自分は割とCLIで動かすことの方が多いですが。
JSONとか新機能を試したい。
追記:
PostgreSQL8.1.5も入れた。
sudo apt-get install libreadline5-dev
が必要だった。
メディア・パブ: EZ GREEのユーザー評価,ブログ検索エンジンで調べてみる
今回の調査を始める前まで,ブログ検索エンジンはTechnoratiだけでも用が足せると思っていた。一度,TechnoratiとGoogleの検索エンジンをほぼ同時刻に走らせ,それらの検索結果を比較してみると,予想以上に結果に隔たりがあることがわかった。
と書いてあるのを読んで、そういえば昔メタサーチというのがあったなぁ、と思い出しブログ検索でつくってみました。
ブログ深追い検索 (closed)

yahoo, google, goo, livedoor, namaan, kizasi, technorati, blogwatcherからそれぞれ最新の検索結果10件を取得して、重複を排除しつつ多くの検索エンジンでHITしたページほど上位にくるように並べ直しています。8つのマッシュアップなので検索結果が出るまでには若干時間がかかります。
各検索エンジンを比較するようなインターフェイスにはなっていませんが、じっくり見るとそれぞれ精度に差があるのがわかりますね。メディアパブの記事にあるように予想以上に違う結果が出ています。「PS3」など旬なキーワードは各エンジンの検索結果がほとんどかぶらないようです。
検索語ごとにRSSを出力しているのでリアルタイムに検索するよりは、網羅的に情報を集めたいキーワードのRSSをRSSリーダーに登録しておくのをお勧めします。
追記:
zuzara : Ubuntu 7.10をデスクトップクライアントとして使ってみた
2年以上、LinuxをクライアントOSとしては使ってこなかったのですが、Ubuntuに惚れてしまいました。入れたのはUbuntu-ja-6.10。マシンはVAIOのtypeF。
感動した点。
- LiveCDからOSが起動して、インストールするので最初にデモ的なものが見れていい。
- 入れるアプリの選択はできないがCD1枚で済むのは楽。
- 1680×1050の解像度自動認識(FedoraCore5ではできなかった)
- デフォルトの日本語フォントがきれい。
- 昔と比べると日本語入力もほとんど不便を感じなくなった。半角全角キーを押せばON。
- 外付けHDDは問題なく認識、デュアルブートにしたがWindowsのパーティションも自動認識。ファイル名が文字化けない。
- 僕の経験上初めてUSBマウスとタッチパッドを同時認識しつつタッチパッドのスクロールも動いた。スクロールはできないときもある。不安定?
- ブートローダのインストール場所を正しく認識し、デュアルブートにするのがFedoraCore5に比べて簡単だった。
- 後述するいくつかの問題をすべてUbuntuのフォーラムで解決策を発見できた。
クライアントOSとしてLinuxを使おうと一番気合いを入れていたのはRedHat8が出た頃。そのとき内蔵無線LANを自動認識して感動したものですが、今となってはずいぶん使いやすくなったものです。FedoraCore6をはじめ他の最新ディストリビューションを試していないですが、日本語環境はしっかり整っているしデバイス回りと最後に挙げた、問題が比較的短時間ですべて解決した点(現時点ではバグですが今後直される確率が高そうという意味で)はUbuntuならではのすごいところでは、と思います。
ちょっと調べる必要があった点。
- 別マシンのSambaにつなぐ(参考: How to access network folders without mounting、ただしフォルダから右クリックでgvimを開くとパスを誤認識するらしく2つファイルを開いてしまうので同じページの1つ下で解説されているmountする方法にした
- CapsをCtrlにするのは簡単だったが、さすがにその他のキー配置の変更は手動
$cat ~/.Xmodmap
keycode 129 = Escape # スペースキーの右はEscなんです
remove Lock = Caps_Lock # 両方Ctrl派
remove Control = Control_L
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
$ xmodmap ~/.Xmodmap
次回ログイン時にメッセージが出るのでOKすればそれ以降設定が反映される。
- apt-getでuniverseに分類されるアプリをインストールしたいときは/etc/apt/sources.listを編集
最初クラッシュしたが解決した問題。
- FirefoxですべてのFlashが表示されないどころかアクセスした瞬間Firefoxが落ちる(export XLIB_SKIP_ARGB_VISUALS=1で解決)
- Firefoxでstrongやb内の日本語がbold、太字にならない(.mozilla/のuserContent.cssに無理矢理書いて解決
strong, b {
font-weight: bold !important;
}
- デュアルモニタ環境にしたとき、スクリーンセイバーやOpenOffice、glxinfoというコマンドを打ってもXが落ちてログアウトする(現象はここで報告されている内容と全く同じ。xorg.confはひげぽんさんの記事を参考にしました。なお記事の中の”6″でCUIになるとあるがAlt-1を押さないとログイン画面にならなかった。で、
Option "Xinerama" "true"
がないと落ちることが判明。ちなみにこの記述がないと、デュアルモニタではあるものの、Alt-Tabを含め2つのモニタがマウス以外共有しない状態になり、外部モニタを外しても問題なく動く状態になる。ドラッグしてウィンドウを隣に持っていけない点以外は、よかったのですが落ちるのは困るので。。
未解決の不満点。
- Firefoxが時々落ちる、でもRestore Sessionが強力なのでまぁいいか
- 起動がWindowsXPより遅い気がする。upstartの効果はないのか??
気分転換にもなるので、isoファイルをダウンロードしてかんべか何かで1枚CD焼いてインストールはせずとも起動してみる価値はあるのではないでしょうか。
1週間ほど前にAjaxianで知ったDojoのCharting Engine。
Ajaxian » Dojo Charting Engine Released
デモは以下。
http://archive.dojotoolkit.org/nightly/tests/charting/test_engine.html
折れ線グラフが描かれていて、画像ではないのですごいなぁ、と思ったので何で動いているのかちょっと調べてみました。
Dojoのサイトから0.4をダウンロード。解凍してディレクトリ名をdojoにすると
dojo/tests/charting/test_engine.html
に先ほどのデモと同じファイルがある。HTMLのソースを見るとdojo/dojo.jsが呼ばれている。このdojo.jsのソースは何やら変数名等が読みづらくなっている。
dojo.require(“dojo.charting.Chart”);
などで別ファイルのソースが呼び出されている。dojo.hostenv.getTextの中でdojo.hostenv.getXmlhttpObjectが呼び出されているので外部ファイルを呼び出す仕組みはAjax。で、取得したテキストをevalしている。
dojo/src/charting/Chart.js辺りが呼び出されていて、Firefoxの場合はdojo/src/charting/svg/がメインになる模様。これらのソースはコメントもインデントもあって読める。
JavaScript Cake Tutorials and Scripts
Firefoxのこれを使うとSVGのソースがHTMLの中で出力されているのがわかる。
<svg height="170" width="700" id="dojo-charting-plotarea-0">
<defs>
<clipPath id="dojo-charting-plotarea-0-clip">
<rect height="120" width="630" y="20" x="50">
</rect>
</clipPath>
</defs>
...
さしあたって用途はないのですが、Dojoのスゴさの片鱗が見れました。
【発表】価格.com WEBサービスコンテスト開催(Mozilla Japan協賛)のお知らせ
作品募集期間:2006年11月15日(水)~2007年1月15日(月)
最優秀賞(1作品のみ) 賞金30万円
優秀賞(1作品のみ) 賞金20万円
部門賞(サイト毎に1作品) 賞金10万円
価格.com賞/ 4travel賞/ 食べログ賞/ yoyaQ賞
価格.comが出しているAPIを使えば、あとは割と何でもありのコンテストのようなので気軽に出してみようと思います。賞金を皮算用するなら、、VAIO typeGが欲しい。
概要に書いてなかったことで2点、価格.comの方に聞いてみたところ、
- 1人で複数応募してもOK
- コンテスト前に公開してもOK
だそうです。回答ありがとうございました。
using API;の方で公開されているAPIについては書いています。マッシュアップするAPIも数が増えてきたのでいろいろできそう。
using API; 価格.com