Archive for November, 2006

ブログ深追い検索で検索語が含まれない記事を結果から排除

Nov 29 2006 Published by funaki under いじる

ブログ深追い検索 (closed)
パターンマッチングの検索エンジンであることを重視して、タイトルとサマリー内に検索語が含まれないものは検索結果から排除することにしました。
livedoorのブログ検索が特に、検索語が含まれていないのに検索結果に出てくるページが多いようです。。

一応、検索結果のURLにoriginal=1を付け加えると、すべての検索結果を含む版になります。

http://blogsearch.fukaoi.com/?q=wii&original=1

http://blogsearch.fukaoi.com/?q=wii&type=rss&original=1

No responses yet

PostgreSQLでUNIXTIMEを使うときのTIPS

Nov 28 2006 Published by funaki under いじる

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();

No responses yet

JavaScriptで画像を切り替える際に、あるコードだとIE6で動かなくなる

Nov 28 2006 Published by funaki under いじる

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

2 responses so far

カタカナでCAPTCHAをつくるPHPコード

Nov 27 2006 Published by funaki under つくる

CAPTCHAに関する記事。

CAPTCHA破りもかなりできるらしい。
アルゴリズム的には堅牢になっていませんが、生成する画像にアルファベットではなくて片仮名を使ったらどうだろう、と思ってphpspotでお勧めされていたKCAPTCHAのコードを拝見しつつつくってみました。

デモは以下。LGPLでPHPのコードごと見れます。

Japanese KATAKANA CAPTCHA test
I published source code only:

katakana_captcha_img.png

参考にした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でも動くはずです。

4 responses so far

Google Maps上に星が!

Nov 24 2006 Published by funaki under 感動する

ぴかーーん

via: digg – Seen on Google Map: A ‘Star’ over Amsterdam!!
ref: X51.ENEMA: Google Mapsでクロップ・サークルを多数発見

No responses yet

Ubuntu6.10にapache2.2.3とPHP5.2.0をソースから入れたときのメモ

Nov 23 2006 Published by funaki under いじる

普通は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

が必要だった。

No responses yet

ブログ深追い検索: ブログ検索エンジンのマッシュアップ

Nov 22 2006 Published by funaki under つくる

メディア・パブ: EZ GREEのユーザー評価,ブログ検索エンジンで調べてみる

今回の調査を始める前まで,ブログ検索エンジンはTechnoratiだけでも用が足せると思っていた。一度,TechnoratiとGoogleの検索エンジンをほぼ同時刻に走らせ,それらの検索結果を比較してみると,予想以上に結果に隔たりがあることがわかった。

と書いてあるのを読んで、そういえば昔メタサーチというのがあったなぁ、と思い出しブログ検索でつくってみました。

ブログ深追い検索 (closed)
blogsearch.gif

yahoo, google, goo, livedoor, namaan, kizasi, technorati, blogwatcherからそれぞれ最新の検索結果10件を取得して、重複を排除しつつ多くの検索エンジンでHITしたページほど上位にくるように並べ直しています。8つのマッシュアップなので検索結果が出るまでには若干時間がかかります。

各検索エンジンを比較するようなインターフェイスにはなっていませんが、じっくり見るとそれぞれ精度に差があるのがわかりますね。メディアパブの記事にあるように予想以上に違う結果が出ています。「PS3」など旬なキーワードは各エンジンの検索結果がほとんどかぶらないようです。

検索語ごとにRSSを出力しているのでリアルタイムに検索するよりは、網羅的に情報を集めたいキーワードのRSSをRSSリーダーに登録しておくのをお勧めします。

No responses yet

WindowsからUbuntuに乗り換えてみた

Nov 20 2006 Published by funaki under 感動する

追記:
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焼いてインストールはせずとも起動してみる価値はあるのではないでしょうか。

2 responses so far

DojoのCharting Engineのソースコードを眺める

Nov 17 2006 Published by funaki under いじる

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のスゴさの片鱗が見れました。

No responses yet

価格.com WEBサービスコンテストに応募してみます

Nov 16 2006 Published by funaki under いじる

【発表】価格.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

No responses yet

Next »