トップ «前の日記(Tue May 29 2007) 最新 次の日記(Thu May 31 2007)» 編集

よこいまさる日記



Wed May 30 2007 [長年日記]

PDF を JPEG に変換するには。

個人的メモ。 こんなコマンドを実行すればOK。

for infile in *.pdf ; do 
  outfile=$(echo $infile|sed -e s/.pdf/.jpg/)
  gs -dBATCH -dNOPAUSE -sDEVICE=jpeg -sOutputFile=out/$outfile $infile
done

(2007/6/5 追記) 「PDFをJPGに変換」とかいう検索ワードで検索して、この日記にたどり着く人が多いので、もうちょっと書きます。

このコマンドでは、カレントディレクトリにある pdf のファイルを ディレクトリ ./out/ に jpg に変換して保存する、という具合の動作をします。

上のコマンドでは GhostScript をつかっています。 Windowsでしたら Cygwin をインストール するときに、インストールするパッケージを選択するときに ghostscript を選択することで、利用できます。 Linux ならばそのままコマンド実行していただいて大丈夫かと思います。 上のコマンドですが、Unixなどのbashでのコマンドになります。 また、PDFファイルにフォントが埋め込まれていない場合、Ghostscript のフォントの設定が必要になるかとおもいます。(特に日本語フォント)

Linuxや Cygwin などのUnix環境を使われていない方の、PDFをJPGに変換する方法は… 知りませんw

AllAbout の記事を見ていたら、Overtureのクリック測定サーバのホスト名にYPNなる文字列が。

プクプクとインターネットしていたら、たとえばAllAboutのあるページ に Overture が配信していると思われる広告がある。 こんなJavaScriptが埋め込まれていて。

<!--//
(function(){
var pid = 'about_jp_cat_ctxt_bottom';if(pid.match(/_test/)){alert('testOvtID :'+pid);}
var maxCount = 3;
if(maxCount==0){zSr=new Array();}else{
document.write('<scr'+'ipt type="text/javascript" src="http://cm.jp.about.overture.com/js_flat_1_0/?config=2841970080&source='+pid+'&mkt=jp&ctxtId=cancer&maxCount=3&mkt=jp&keywordCharEnc=shiftjis&outputCharEnc=shiftjis&ctxtUrl='+aa.u.encodeURL(location.href)+'"><\/scr'+'ipt>');}
})();
//-->

ここにある http://cm.jp.about.overture.com/というURLを開いてみたところ、 favicon.ico が Yahoo! のもの となっていた。 このホストに当てられているIPアドレスを whois してみたところ Inktomi だし。

この部分で差し込まれている広告のリンク先URLを見ると、下記のようなホスト名になっている。

http://ypn-c101.overture.com/d/sr/?xargs=......

YPN って Yahoo! Publisher Network のことか? YPNは日本では overture が Yahoo!JAPAN と関係なく、US の overture や Yahoo! Inc. (US) とやっているのかなぁ。 いろいろと妄想。

[追記]ヤフーの天気を見ていたら、ヤフーの天気でもコンテントマッチ開始しているみたいですね。 こんなURLで広告掲載しているみたいで。

http://yjaxc.yahoo.co.jp/oi?t=j&s=weather_oj_cm_lmdl&i=2077740051&u=http%3a//weather.yahoo.co.jp/weather/jp/13/4410/13113.html

ページURLをここにも入れるのかよ、とかO塚くんに突っ込みたいところだけど、抑えておくw

業者ホイホイ掲示板を開設しましたを見てふと思った

はてなブックマーク経由。 悪徳商法マニアックスさんのところで、WebサイトなどでコメントSPAMをするロボットのIPアドレスを集めるために、いわゆるハニーポットを設置したんだそうで。 このホイホイに引っかかったIPアドレスのリストをみてみたところ、およそ1800ぐらいのホストが引っかかっていますね。 このリストのメンテナンスがどのようにされているのか分からないので、すぐさま使うってことはしないですけど。

ちなみにこのリストの書式が「deny from xxx.xxx.xxx.xx」と、Apacheの mod_access や mod_authz_host の deny from を使って設定することを想定しているのかとおもうのですが、mod_access や mod_authz_host って blacklist が1800もある状況でうまく動くんだっけ?っていうのが疑問に思えたので、さらっとコードを見直してみた。

apache httpd-2.2.4 では allow/deny の実装が modules/aaa/mod_authz_host.c にある。 directory directive ごとの allow/deny を保持する変数は、下記のような構造体になっている。

     65 typedef struct {
     66     int order[METHODS];
     67     apr_array_header_t *allows;
     68     apr_array_header_t *denys;
     69 } authz_host_dir_conf;

この段階で、denys は array なのね(´・ω・`)ってところでいやな予感がする。

つぎに deny from .. の部分で実際に動く部分を追いかけたら、たぶんこの辺だろう

    109 static const char *allow_cmd(cmd_parms *cmd, void *dv, const char *from,
    110                              const char *where_c)
    111 {
    112     authz_host_dir_conf *d = (authz_host_dir_conf *) dv;
    113     allowdeny *a;
    114     char *where = apr_pstrdup(cmd->pool, where_c);
    115     char *s;
    116     char msgbuf[120];
    117     apr_status_t rv;
    118
    119     if (strcasecmp(from, "from"))
    120         return "allow and deny must be followed by 'from'";
    121
    122     a = (allowdeny *) apr_array_push(cmd->info ? d->allows : d->denys);
    123     a->x.from = where;
    124     a->limited = cmd->limited;

やっぱり arrayか。

実際に各ディレクトリで allow,deny をチェックしているのはこの部分だろう。

    263 static int check_dir_access(request_rec *r)
    264 {
    265     int method = r->method_number;
    266     int ret = OK;
    267     authz_host_dir_conf *a = (authz_host_dir_conf *)
    268         ap_get_module_config(r->per_dir_config, &authz_host_module);
    269
    270     if (a->order[method] == ALLOW_THEN_DENY) {
    271         ret = HTTP_FORBIDDEN;
    272         if (find_allowdeny(r, a->allows, method)) {
    273             ret = OK;
    274         }
    275         if (find_allowdeny(r, a->denys, method)) {
    276             ret = HTTP_FORBIDDEN;
    277         }
    278     }
  ..... あとは省略 .....

よぉし、find_allowdeny 関数でも見てみるかとおもってみてみたところ、

    202 static int find_allowdeny(request_rec *r, apr_array_header_t *a, int method)
    203 {
    204
    205     allowdeny *ap = (allowdeny *) a->elts;
    206     apr_int64_t mmask = (AP_METHOD_BIT << method);
    207     int i;
    208     int gothost = 0;
    209     const char *remotehost = NULL;
    210
    211     for (i = 0; i < a->nelts; ++i) {
    212         if (!(mmask & ap[i].limited)) {
    213             continue;
    214         }
    215
    216         switch (ap[i].type) {
    217         case T_ENV:
    218             if (apr_table_get(r->subprocess_env, ap[i].x.from)) {
    219                 return 1;
    220             }
    221             break;

conf->denys はイテレーター処理されているのね。

このままだと、各リクエストごとに 1800 のイテレーターあたっていってしまうので、何らかの形で IP アドレスの binary search なりさせないと、やってられないすね。

Kensington Expert Mouse

Kensington Expert Mouse マイクロソフトのトラックボールが生産終了とかいう話を思い出したり、キーボードもほしいかなと思ったりしたので、ヨドバシへ。 キーボードのRealforceを見ていたのですが、いまいち萌えなかったので Kensington Expert Mouse を購入。 トラックボールの玉が大きくって、玉のまわりのリングがスクロールホイールになっていたり。

買った直後にトラックボールの転がりがいまいちだったのだが、手垢が付いたせいか転がりが良くなってきた。(笑)

本日のツッコミ(全2件) [ツッコミを入れる]
tsuyoshi (Wed May 30 2007 19:40)

俺は、httpd.conf に書いたら apache 動かなくなった。<br><br>iptables で設定するのが吉だ。<br><br>しかし tdiary のブロック機能で十分だと思うけど。

まさる (Wed May 30 2007 21:41)

この access control list なのですが、Apacheで1エントリあたり32byte 消費するとした場合、shared memory でないので prefork だと fork した数だけコピーが作られ、とかいう具合になりますが。。。 よくよく考えたら 32byte×32 processes ×1800 entires だから・・・容量的には知れているか。 そもそも apache 内で allow/deny を2千個も書けるようになっているかどうか疑問ですけど。<br>iptables も filter 処理時に iterator をあたっていく具合になっていたら同じ問題に直面するので、あまり変わりはないのですけどね。


2000|10|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|
あわせて読みたいブログパーツ