個人的メモ。 こんなコマンドを実行すれば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 が配信していると思われる広告がある。 こんな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 なりさせないと、やってられないすね。
マイクロソフトのトラックボールが生産終了とかいう話を思い出したり、キーボードもほしいかなと思ったりしたので、ヨドバシへ。 キーボードのRealforceを見ていたのですが、いまいち萌えなかったので Kensington Expert Mouse を購入。 トラックボールの玉が大きくって、玉のまわりのリングがスクロールホイールになっていたり。
買った直後にトラックボールの転がりがいまいちだったのだが、手垢が付いたせいか転がりが良くなってきた。(笑)
俺は、httpd.conf に書いたら apache 動かなくなった。<br><br>iptables で設定するのが吉だ。<br><br>しかし tdiary のブロック機能で十分だと思うけど。
この access control list なのですが、Apacheで1エントリあたり32byte 消費するとした場合、shared memory でないので prefork だと fork した数だけコピーが作られ、とかいう具合になりますが。。。 よくよく考えたら 32byte×32 processes ×1800 entires だから・・・容量的には知れているか。 そもそも apache 内で allow/deny を2千個も書けるようになっているかどうか疑問ですけど。<br>iptables も filter 処理時に iterator をあたっていく具合になっていたら同じ問題に直面するので、あまり変わりはないのですけどね。