掲示板お問い合わせランダムジャンプ

トップスペース

2006年12月30日
トラックバックスパムを誤爆させる
 このブログには1年以上前からトラックバックスパムを誤爆させる仕掛けが仕込んであります。これが思いのほかホイホイと引っかかって面白いです(誘導先はこのスパムごみ箱)。この時期はアクセス数が少なくなるので、ここだけの話として、こっそりやり方を紹介しようと思います。

 やり方は、下のようなものをブログのどこかに書いておくだけです。なるべく上の方が良いと思います。
<!--
trackback:ping="http://偽トラックバック先"
-->
 なぜ誘導されるかというと、スパムのツールはブログの中からトラックバック先と思われるURLを抽出するわけでわけですが、そのとき必ずしもHTMLの文法などをちゃんと解釈しているわけでなく、単に正規表現にマッチしたものを抽出しているだけだったりします。で、その正規表現にマッチするのが上のおまじないというわけです。

 ただし、あくまでも有効なのは稚拙なツールに対してだけです。ロシアなどからのスパムはこれを簡単に回避してます。この対策をしようと思うと、オートトラックバック用の記述を削除してしまうか、トラックバックを拒否するぐらいしか方法はないと思います。

 ちなみに、1年半前にもコメントスパムのエントリーを書きましたが、今回のはその応用です。

【関連エントリー】
 ・コメントスパム対策してみた(2005/05/28)

【余談】
 誘導先をhttp://localhost/とかにしたらどうなるのかな。
[ 投稿者:うえぽん at 19:01 | ウェブ | コメント(0) | トラックバック(0) ]

2006年12月29日
ドリームキャスト2007年3月にも新作、「カラス」
 2ちゃんねるのあちこちのスレに貼られているが、楽天のあるショップによると、来年の3月、アーケードで稼働中の「カラス」がドリームキャストに移植されて発売されるそうな。

 http://www.rakuten.co.jp/edigi-game/407195/436114/1794582/

【公式サイト】
 ・MileStone INC. KAROUS

 この前は「トリガーハート エグゼリカ」の発売発表だったけど、まだまだ新作が続くんだね。これはもうどこが最後のソフトを出すのかの競争になってるね。
 少し贅沢を言わせてもらうと、同人ゲームっぽいのじゃなくて本格派のシューティングが欲しいかな。

【関連エントリー】
 ・2007年になってもドリームキャストに新作(2006/11/30)

【余談】
 注目を浴びるためなのか楽天のショップがよくフライングするけど。そういうことばかりして出荷を抑えられたりしないのか心配です。(だから直リンしない)
[ 投稿者:うえぽん at 18:36 | ゲーム | コメント(0) | トラックバック(0) ]

ProxomitronやPeercastをウェブページ側で検出する
 JavaScriptでProxomitronの動作を検出する方法を発見しました。下のボタンをクリックすると検出します。

 ↓ソースは下のようになってます。
function omitron_detector() {
  var proximg = new Image();
  proximg.onload = function (){alert('オミトロン動作!');}
  proximg.onabort = function (){alert('オミトロン中断');}
  proximg.onerror = function (){alert('オミトロンないかも');}
  proximg.src = 'http://Local.ptron/killed.gif';
}
 要は画像の読込に成功したら動作しているという仕組みです。
 検出できて何か不都合があるのか調べてみたところ、ProxomitoronにはURLコマンドというものがあり、これを使って色々弄られてしまうようです。
 URLコマンドについてはこちらのページに詳しく書かれています
 対策としては、設定の「URLペースのProxomitronコマンドを無効にする」をチェックしておくか、「URLコマンドの前に必要な接頭語」にユニークな名前をつけるかするとのことです。デフォルトの設定ではチェックが入っていると思います。

[追記:対策:2007/05/27]
 wikiからリンクを貼られているようなので、こちらで考えた対策も載せておきます。理屈は Referer で弾くというものです。一部のWebサイトで画像の直リン対策でよく使う方法ですね。
[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer: global to locallhost access kill (out)"
URL = "/|local.ptron/|localhost/|(127|0x0+80|00+177)(.0x[0-9a-f]+|.[0-9]+)+{3}/"
Match = "http(s|)://(^(local.ptron/|(localhost|127.0.0.1)[:/]))"
Replace = "$JUMP(http://0.0.0.0/)"
 ただしこの対策は完璧ではありません。Refererを消してしまうヘッダフィルタのせいで動作しない場合があります。また、ブラウザにキャッシュされていても動作しないようです。


 さて、画像のURLを変更すれば他のローカルで動作するアプリケーションの検出ができます。例えば、Peercastの場合は以下の画像にすれば検出できるはずです。
 http://localhost:7144/html/en/images/small-logo.png

 さらに画像でなくてもiframe要素でもできます。おそらくこちらの方が確実です。GoogleデスクトップやWinnyの動作もJavaScriptで検出できるかもしれません(これらのソフトを使っていないので検証していません)。まあ、存在しないものにアクセスしようとするとタイムアウトまで待たされるので検出は結構困難だったりしますが。

 「ポート番号4663で○○が動作しているのを検出しました。…(略)…。以下の銀行口座に振り込んで下さい」なんてのが登場したりね。

【余談】
 localhostのIPは「127.0.0.1」だけでなく「127.*.*.*」の全部。
[ 投稿者:うえぽん at 18:30 | proxomitron | コメント(4) | トラックバック(0) ]

2006年12月19日
高いIQの子供は、将来ベジタリアンになるかもしれない…イギリス研究
 イギリスのサウサンプトン大学の研究チームが、知性が高い子供は将来ベジタリアンになるかもしれないという調査報告を出したそうな。

 30歳の男女8179人のデータを集めたところ、自分はベジタリアン(菜食主義者)であると答えた人は366人で、その人達が10歳だったときのIQを調べたら、他の人よりも高かったんだとか。
 ただし、ベジタリアンと答えた366人のうち100人以上は、魚やチキンは食べると答えたため厳格なベジタリアンではなかったが、厳格なベジタリアンとの違いはなかったとのこと。

 ベジタリアンは社会階級が高くて良い教育を受けた女性に多い、といった要因もあるかもしれないとのことだが、その辺の考察は英語のニュースソースを読んで下さい。(僕の英語力ではこれが限界です)

【ニュースソース】
 ・[HealthDay]Kids With High IQs Grow Up to Be Vegetarians
 ・[BBC NEWS]High IQ link to being vegetarian

 肉食が良くないとされる理由は、家畜を飼育するときに与えた薬が蓄積されているかもしれないからなんだよね。本当に蓄積されているか分からないけど、中国産とかアメリカ産はやばそうな気はする。
 で結局、安全な動物性タンパク質は「魚」ということになって、世界中でマグロが食べられるようになってしまうと。

【余談】
 カカロットの名前の由来がキャロット(ニンジン)だということを、先程ググッて知った。カカロットという品種の野菜があるものとばかり思ってた。
[ 投稿者:うえぽん at 19:31 | 特命リサーチ200Xっぽいの | コメント(0) | トラックバック(0) ]

2006年12月17日
天和・九蓮宝燈が出ないバグがあっても誰も気づかない
 少し古いですが、「カルドセプトサーガ」でダイスの目が偶数と奇数を繰り返すバグが発見されて大騒ぎになっているようです。

 ・スラッシュドット ジャパン | 「カルドセプトサーガ」にダイス目が偶数と奇数を繰り返すバグ
 ・痛いニュース(ノ∀`):【Xbox360】「カルドセプトサーガ」で、プログラマーがランダムなサイコロを作れなかったことが発覚

 このバグの原因は、疑似乱数の下位ビットを使ったことに尽きると思います。中途半端な線形合同法だったとしても、上位ビットを使用してたのならこれほど酷くならなかったはずです。

 ところで、標準関数のrand()関数を使ったとしても上位ビットの使用が推奨されていますが、なぜ上位ビットなのか? その辺を簡単なデモンストレーションで検証してみたいと思います。

 検証では「コインを投げて何回連続で表が出るか」というコイントスゲームをやります。
 一方の乱数は、rand() % 2(下位ビットの乱数)を使用。
 もう一方は、 rand() / (RAND_MAX / 2 + 1)(上位ビットの乱数)を使用します。
 使用コンパイラーはBorland C++Compiler 5.5で、試行回数は21億4千万回です。

.1/n の 分母
連続数理論値下位ビット乱数上位ビット乱数
0022.02.0
0144.04.0
0288.08.0
031616.016.0
043232.032.0
056463.564.0
06128198.6128.0
07256138.3256.0
08512528.5512.0
091024963.81023.8
1020485041.22048.9
11409613107.24098.8
12819232768.38188.3
131638465535.616372.7
14327680.032851.8
15655360.063467.6
161310720.0136175.6
172621440.0280508.6
1852428865535.6526574.8
1910485760.01006111.9
2020971520.02028436.0
2141943040.03525535.4
2283886080.07697841.7
23167772160.014965035.0
24335544320.028157894.7
25671088640.041153846.2
261342177280.0118888888.9
272684354560.0107000000.0
285368709120.0267500000.0
2910737418240.00.0
3021474836480.00.0
31~21474836480.00.0

 下位ビットでは 6回連続あたりから理論値とのズレが発生しています。そして、14連続以上という事象がほとんど発生していません。
 ここで注目すべきは、上位ビットの場合でも、29連続以上でコインの表が出ることは一度もないことです。おそらくもっとやったとしても発生しないでしょう。標準関数ではこの程度です。

 さて、タイトルの件ですが、麻雀ゲームで標準関数のrand()を使ったらどうでしょうか。麻雀における牌山の牌の組合せは、
 136! / 4!34 [通り]
≒ 4.327 × 10185
≒ 2616.67
 と、なっています。コイントスゲームですら精一杯なのですから標準関数で全組み合わせを再現するのは無理です。メルセンヌ・ツイスタならなんとかなるでしょうが、もしメルセンヌ・ツイスタよりも質の悪い疑似乱数を使っていたとしたら、「天和で九蓮宝燈」というアガリ役は未来永劫お目にかかる事はないです。

 発生しないアガリ役がある、そういうバグを抱えた麻雀ゲームは世の中にたくさんあるような気がします。(だからイカサマのある麻雀ゲームが多いのかも)

【参考】
 ・麻雀の数学

 任天堂は麻雀牌も出してる。
 

【余談】
 もちろんPS3なら物理演算でサイコロの挙動を完全シミュレートするんだよね。
[ 投稿者:うえぽん at 20:04 | ゲーム | コメント(2) | トラックバック(0) ]