自分自身のための ものづくり / 自分自身のためのものづくりメモ

* Bad Apple!! PV-FC (2) がファミコン実機で映像が乱れる。原因は黒より暗い黒

#ファミコン
※最新版では問題は修正済

発端

Bad Apple!! PVをファミコンで再現してみた。(その2)
http://www.nicovideo.jp/watch/sm9170895
に感動した。
 エミュレータでの再生では満足できず、実機で再生するためにMMC3搭載カセットのROMを剥いでEP-ROMを載せたカセットを作成した。


事象

 RF接続した赤白ファミコン(HVC-001)では映像が乱れる。RP2C03を載せたRGB出力AV仕様ファミコン+XRGB-2plusでは乱れない。

↑MTV-2000にRF接続し、キャプチャ

調査とわかった事

 後期型ファミコンの裏蓋を外し、オシロスコープでPPUの出力を眺めた。その結果、映像の黒部分に、バースト直後の黒レベルよりも低いレベルの信号が出ていた。

↑はAV仕様ファミコン(無改造)の映像出力

黒より暗い黒

http://nesdev.parodius.com/2C02%20technical%20reference.TXT
+-----------------------+
|Video signal generation|
+-----------------------+
(中略)
Luminance value 0, mixed with chrominance value 13 yield a "blacker than 
black" pixel color. This super black pixel has an output voltage level close 
to the vertical/horizontal syncronization pulses. Because of this, some 
video monitors will display warped/distorted screens for games which use 
this color for black (Game Genie is the best example of this). Essentially 
what is happening is the video monitor's horizontal timing is compromised by 
what it thinks are extra syncronization pulses in the scanline. This is not 
damaging to the monitors which are effected by it, but use of the super 
black color should be avoided, due to the graphical distortion it causes.

 パレットについての関連参考資料。
ファミコンの詳しい話
http://www.wizforest.com/OldGood/FamiCom/FamiMisc.html

 Bad Apple!! PV-FC では、黒として 'Luminance value 0, mixed with chrominance value 13' つまり 0x0D を使っているのだろう。(未確認。VirturalNESのパレットビューアでは、どのパレットを使っているかが数値では表示されない)
 作者の門真なむさんは実機で動かしているが、RP2C05-99を積んだツインファミコンで動かしたために、普通のファミコンで映像が乱れる(モニタにもよるだろう)ことに気づかなかったのかな。

追記

 問題が出る環境はかなり限られている模様。悪条件に相当弱い機器でなければ、はっきりした問題にはならないのかも。
 うちでは、MTV-2000にRF接続でノイズだらけになる。(MTV-2000はノンスタンダード信号に弱いので、blacker than black 以前の問題もあるかも)LGの安物VHSビデオデッキにチューナが死んだテレビデオ(普通のテレビ放送でも同期外れがたまに出るほど、同期周りが弱い)にて、同期外れが頻発。

* NEO GEO 用メモリカード(等)のSRAMの、FRAM化の検討

#NEOGEO #メモ
MCS48(8048)マイコンのページ(2007-05)
http://www.protom.org/micon/?date=200705
通常のSRAMのように扱えるので乗せ変えるだけと思いきや、これが全く動かず。しばしデータシートを眺めると、/CS(チップセレクト)端子を動かしてアドレスを内部にラッチさせないとダメとありました。この8048ボードは/CS線はGNDに繋がっているので原因究明。空きスペースにTTLの74LS08を置いて、8048からのPSEN,RD,WRでNegative-ORして/CS線に繋いであげると動き出しました。

  • FRAM Design Considerations
When designing with FRAM for the first time, users of SRAM will recognize a few minor differences. First, bytewide FRAM memories latch each address on the falling edge of chip enable. This allows the address bus to change after starting the memory access. Since every access latches the memory address on the falling edge of /CE, users cannot ground it as they might with SRAM.

 富士通の場合は、/CEがLにて/WEか/OEの↓でラッチアドレス?
 非同期SRAMと置き換えるだけでは、ダメか…。

* RandomNoteWiki記法 - TextFormat

* Becomebot再排除

#Web #RandomNote
 RandomeNoteの検索履歴が、またかき回された。犯人はBecomeBot。

robots.txt BecomeBot締め出し
http://baku.homeunix.net/WiKi/rnx/index.rb?1138996756.txt

deny from 64.124.85.0/24
http://baku.homeunix.net/WiKi/rnx/index.rb?1171846535.txt

…にて排除していたのに。
 サーバ変更で色々再構築して、ついでに.htaccessの使用は最小限に抑えたためだ。

 さようなら、BecomeBot。
iptables -A INPUT -j DROP -s 64.124.85.0/24

* 無神経な根こそぎGetの馬鹿やろーっ!

 RandomNoteの検索履歴をしっちゃけめっちゃかにかき回していきやがって…。
 まぁ、こっち側で対策するべきことではあるが、どうやって区別したものやら…。

 あと、根こそぎ巡回するのは別にかまわないのだが、秒間2アクセスとかは勘弁してくれ。これは問答無用でツールとその利用者が悪い。
…って、ログを調べるとUAを色々変えつつ(詐称?)766回のクエリかよ…。悪意はないんだろうけどその無神経さは許容範囲の外だな…。

 ま、ここまで無神経なアクセスは滅多にないので、対策はべつにいいか。


2008年1月12日追記
 zia-httpmirrorの作者と利用者のばかやろーっ!!!
 上に書いたのよりはマシだけど、履歴が滅茶苦茶になるのは同じだ。せっかく、「超整理法」的に出番が多いのが上になっていたのに。
 とりあえず、.htaccess をいじって、/から閉め出すことにした。

 上に書いたようにこーゆーのは滅多にない、けど、時々は確実にあるんだよな…。

#RandomNote #Web

* RandomNoteの検索用クローラ対策

#RandomNote #Web #掲示板spam対策
 googleやらyahooやらmsnやらが、入れ替わり立ち替わり、smode=sumやらsmode=countやらcmd=editやらのついたページを、別々のものと見なしてGETしていく。
 こっちにもあっちにも無駄な負荷がかかる、とても不幸なことだ。

とりあえずの対策として、それらへのリンクをformにしてみた。

 検索エンジンは、いくらなんでもsubmitしないだろうから、無駄にリンクを辿らなくなると期待。

 ただし、spam投稿用クローラが心配。textもtextareaもないのにPOSTする馬鹿がいるかもしれない、と危惧している。

ロボットの類相手では、cmd=editとかsmode=hogeとかあったら、404を返すようにした

 既にsmode=hogeとかのページのurlが記録されていて、リンクが無くなっても読みに来る。だから、ロボットの類相手にそれらのページは404を返すようにした。
 ロボットか?の判断は、user_agentにhttp:が入っているかどうか。

ロボットなどに対して、サイドバーを渡さないようにした

 検索の邪魔だよね。本文にないキーワードがあるのは。
 さらに、ロボットに送るデータ量が減るという恩恵もあった。無駄なデータが減るのは、互いにとって有益だ。

* GETでspamを投稿する奴への対策

#RandomNote #掲示板spam対策

 後述のように、GETでspamを投稿を試みるロボットがある。
 そのようなリクエストにより、OR検索が行われ、最近の検索ワードがめちゃくちゃになる。
…というわけで、とりあえず、超やっつけで対策。

def do_search
  @word = @param['word']

  if @word.size > 32
    print_header
    print_footer
    return
  end
 検索用の文字列が32文字以上なら、何も処理を行わずに終了する。
(ヘッダとフッタは返す)

(ReadMore...)

* RandomNoteの敵はspam投稿用クローラ

#RandomNote #掲示板spam対策 #Web

2007/09/23

 久々に、RandomNotespam投稿ロボットが引っかき回していった。
 対策が必要とは思ってるのだけど、たまにしかないし、投稿その物はBASIC認証で弾かれるしで、面倒なので1年以上放置してる。

 後述のような感じで、2時間半にわたり、GETとPOST合わせて800回以上のアクセスを行う酷いロボットだった。
 401で弾かれているのに延々と試行するのは無駄で、馬鹿なプログラムだと思う。ふつー、エラーが出たらとっととあきらめて他の無防備なBBSとかblogとかWikiを探すよう組むと思う。

(ReadMore...)

* deny from 64.124.85.0/24

#Web
 再び、BecomeBotに検索履歴をかき回されたので、.htaccessにて排除することにした。
robots.txt BecomeBot締め出し
http://baku.homeunix.net/WiKi/rnx/index.rb?1138996756.txt
にてのけ者にしたはずなのだが、BecomeJPBotは別物というわけか。え゛ー。
 ちなみに、robots.txtは最初にちゃんと読んでる。

 20秒に一度のアクセスだったり、UAの項に載っている http://www.become.co.jp/site_owners.htmlは「お客様が指定されたページは見つかりませんでした。」だったり、かなり感じ悪い。
(ちなみに、正しくは、http://www.become.co.jp/site_owner.html だそうだ。その辺の食い違いも感じ悪いぞ)
 また、他の多くのクローラの挙動と違ってリファラを送る点で、RandomeNoteの敵。

↓はた迷惑なアクセスの記録
(ReadMore...)

* 人とロボットを区別したい

 またRandomNoteの検索キーワードがかき回された。
 今度の犯人は、おそらく先読みプログラムの一種。UAはIEを名乗っているので、種類は不明。

(ReadMore...)

* GetHTMLWにお引き取り願う

 ログを見たら、"Pockey-GetHTML/4.12.0 (Win32; GUI; ix86)"を名乗るUAがものすごい勢い(秒間数アクセス)で根こそぎ(RandomNoteの項目まで)さらっていった形跡があった。

 検索してみたところ、GetHTMLWとのこと。
 あ゛ー、俺、昔使っていたよ…。ダイヤルアップ時代ならともかく、数メガbps当たり前の今日日動かすと恐ろしいことになるのだな。
★★ GetHTML Ver.4.13, GetHTMLW Ver.7.13 より、★★

(1) 同一サーバ(ホスト)への同時取得数が 1 に固定されました
(2) 同一サーバ(ホスト)への連続取得に対し、1秒の wait をデフォルトで入れました

上記は、ブロードバンド化に伴う Web サーバへの負荷を軽減する為の措置です。
とのことだけど、使用者は古いのを使っていたようだな。

 プロキシモードで一度見た記事をため込んで使う分にはとても便利で有用なソフトだと思うのだけど、まるごと取得は勘弁。

というわけで、ちゃんとrobots.txtは読むので、一部動的ページからお引き取り願うことにした。
 4.12以前は丸ごとお引き取り願うべきかなー。


参考:
先読みソフトについて [Archive] - XREA SUPPORT BOARD
http://sb.xrea.com/archive/index.php/t-1388.html
#Web

* PC-9821Nr300, Nw150 ニコイチ

 中古屋でバックライト切れのジャンク扱いのNr300と動作保証ありのNw150を入手。
 ニコイチで修理しようと思ってたのだが、Nr300のLCD部をばらすと部品が落ちてきた。どうやら、コイルがはんだ剥離で外れていたらしい。半田付けしたら無事にバックライトが点灯した。
 でも、Nr300についていたLCDには目立たないとはいえ常時点灯画素があった。Nw150のには無かったのでこっちをNr300に移植。

 Nw150系筐体の持病のヒンジ部のネジのゆるみと、それに伴う取り付け部の破損があり、どのみちニコイチでの修理が必要だ。
 運がいいのか悪いのか、Nw150の方は本体側のヒンジの根元が破損していて、Nr300の方はLCD側が破損していた。

Nr300, Nw150の分解修理には以下のサイトが大層参考になる。
Maintenance PC-98 Notebokk PC
http://pc.ni-land.com/bunshitsu/note/note.htm

Nr150/S20CDROM内蔵化
http://redsiren.homeip.net/~redsiren/pc98/nr150/cdrom.html

 ヒンジ部の補強には以下のサイトが参考になりそう。
シグマリオン2のヒンジ補強
http://nagoya.cool.ne.jp/saramisu/pc/sig2hinge/sig2hinge.htm

 以前にシグマリオン2のヒンジを直したときにはエポキシパテを使ったけど、今回はプラリペアを使ってみるか。近間のホームセンターで売っているだろうか…。

#PC-98 #ジャンク

* RandomNote 作成日を表示+年月日のみで時分秒は非表示

def print_leaf(fname, view=nil, anchor=1)
内を改造
      s = "%s\n\n%s\n%s" % [mes.chomp, Time.at(fname.gsub(/\D/,'').to_i).strfti\
me('create : %Y/%m/%d (%a)'), File.mtime(fname).strftime('update : %Y/%m/%d (%a\
)')] # modified by bakuchikujuu

#RandomNote #Web

* mixi外からmixiへのアクセスを防ぐ

Proxomitorn用フィルタ
[Patterns]
Name = "Block mixi form not mixi (IP)"
Active = TRUE
URL = "(^mixi.jp)"
Limit = 512
Match = "59.106.41."

Name = "Block mixi form not mixi"
Active = TRUE
URL = "(^mixi.jp)"
Limit = 512
Match = "mixi.jp"
Replace = "mixotron.jp"
mixi.jp以外のサイトではmixi.jpという文字列を片っ端から書き換えてしまうという力業。
※単純に文字列の置換を行うだけなので、Javascriptで難読化されたりすると通用しない。
#悪用のヒントを出すのはどうかとも思うが、どーせ悪用するような人はそれぐらい思いつくだろう。
(ReadMore...)

* RandomNoteのrefererを検索エンジン(等)に登録させない

 アクセスログを眺めてたら、RandomNoteのrefererページに検索エンジン経由でのアクセスがあった。

 Webページでの披検索語の表示は迷惑極まりない。その単語が更にCGIに登録されて、それを検索エンジンが拾って、その単語で検索した人がアクセスして…。
 俺自身が大嫌いな要素なのに自分がやらかしていたとは…なんてこった…。

 というわけで、ざくざくとRandomNoteをいじった。
 もともとのコードにヘッダにロボット避けを入れる機能があるので、refererの表示の際にはそのようにするように変更。
def do_referer内
#  print_header(' - referer')
print_header(' - referer', true) # 検索エンジンにリンク元が登録されると邪魔

 あと、cahge_logも検索エンジンにインデックスされるべきじゃない。
def do_change_log
#  print_header
print_header(' - change log', true)

#RandomNote#Web