SVX日記
2005-03-11(Fri) 呪われたPCに心霊手術成功!?
今日はカミさんの実家のPCが壊れたということで修理に向かう。なんでも、イキナリPCの画面がマックロになるという症状らしい。当然ながらカミさんの両親はPCに関してシロートなので話を聞いてもマトを得るワケもなく、それ以上に詳しくは聞かなかったが、ハードウェア的な問題であればCPUファンの停止による熱暴走、ソフトウェア的な問題であれば感染すると再起動を招くことで有名なMS.BLASTであろうとアタリをつける。替わりのCPUファンと余っていたCeleron1.1G、以前にMSが無料配布していたセキュリティパッチCDを持って現地へ向かう。
電源が入るとフツーに起動する。ヘタすると起動時にイキナリ症状が出るというコトなのだが……と、症状を聞いているそばから、突然画面がブラックアウト、マザーにジカ付けの圧電素子から断続的なアラーム音が鳴り響きだした。むぅ。CPUのヒートシンクの温度はさわれる程度だし、マザー上で特に発熱しているチップもない。一度、電源を切って時間を置いた後、なんとかBIOS設定画面に移行し、ヘルスモニタ画面で温度をチェックしていると……画面がグジャっと文字化け状態になり沈黙。アラームこそ鳴らないものの、内部的には同じようなことが起きているっぽい。なんじゃこりゃ。
ダメモトでCPUとファンを換装するが、症状は変わらず発生する。さらにダメモトでHDDとCDROMの電源コネクタを引っこ抜いてみる……と、なぜか症状が発生しなくなった。HDDが動かないとシステムが起動しないので、HDDの電源コネクタのみ元に戻すと……見た目、正常に起動している感じ。試しに30分くらいメディアプレーヤでビデオを再生しつつ、ネットサーフィンしてみるが症状は発生しない。CDROMが原因? んなことあるんかいな。これで直ったとは思わないが、このまま様子をみることにする。
しかし、このPCは故障が多い。PCってフツーそう壊れるものでもないと思うのだが、ゴミ状態でもらってきたPCにモデムボードを入れ、インターネットができるように設定したものの、原因不明のトラブルで2枚ほどモデムボードが壊れ、縁起が悪いのでマザーからCPUまで交換した経緯もある。その後もHDDはクラッシュするわ、今回は謎のブラックアウトだ。交換していないのはキーボードとマウス、PCケースくらいのモノなのだが……PCケースと電源が悪いのだろうか? なんかケースに静電気が飛びやすい気がするが、もしかすると漏電でもしているのかもしれない。次に壊れたらウチで余っているPCを持っていくことにしよう。
2006-03-11(Sat) カウンター・ザ・ノートン・ウィルス
カミさんの友人がパソコンを始めた。例によって、始めたばかりというのは右も左もわからず、パソコンで何ができるのか、何をしたらいいのか、ヘタをすると「何をしたいのか」もわからず、サポートサイトに電話しまくったりするものだが……まぁ、知人に詳しい人がいれば頼ったりするワケで、まぁ、オイラもあまり面倒でない範囲なら面倒を見るのにヤブサカではないし……まぁ、最近のオイラはサポートを仕事にしているしな……Linuxの人だけど。なんだか調子が悪いんだって? どれどれ?
で、持ってきたノートを開いてみた。HPのデスクノートnx4820/CTだ。CeleronMながら1.4GHzとなかなか高速だ……な!? なにッ!? おッ、遅いっ!! なんだこのモッサリ感は。画面のプロパティとかを開くだけで恐ろしく時間がかかる。ウチのMMX233MHzの骨董メビウスより遅いぞ。ウィンドウが上から消えていくのが見えるほどだ。
いったい何をしたのか、持ち主に聞きたいのはヤマヤマではあるが、カワいくニコニコしながら「ウィルスがだんだん近づいてきてるみたい♪」と言われたら、これはどーしよーもない。だが、どーにかして、どーにかしなければならない事態なのである。しかし、普段からLinuxのサポートでは実機を前にもせず、主観に基づくメール上での説明と、ログだけを頼りに数度のやり取りだけで問題を斬りまくっているのだ。目の前にマシンがあるんだからどうにでもなるさッ!!
しかし、なんだこの画面のウルサさは。やたらと「ノートンなんちゃら」というウィンドウが開きまくる。その都度、確認ボタンを押したりしなきゃいかんのだが、ただでさえ動作がモッサリしてるもんだから、ウィンドウが閉じるまでに平気で10秒以上かかったりする……もぅ、キレそうである。
モバイルモードになっていてCPUクロックが落ちているのか? 電源コード挿してるしなぁ……だいたい、CeleronMにはそんなに高度なクロック制御機能はなかったはず。なにはともあれ、タスクマネージャかな。CPU負荷は……ほとんどかかっていない。じゃ、なんだ? ディスクのフラグメントか? チェックしてみる。確かにグチャグチャになってはいるが、まだ使い始めて数週間である。ほとんどが空きエリアだからフラグメントでここまで遅くなることはないだろう。
……こーゆーことがあるから、ウィルス防御系のアプリは吐き気をモヨオすほどキラいなんだよッ!! とりあえず、アンインストール。これがまた時間がかかるったらない。作業の順番がマズかったのか、アンインストール中にハングアップしやがるし……。
何度か再起動しつつ「ノートン・ウィルスを駆除」した結果、起動時のコミットチャージを200Mソコソコまで減らすことができた。先日にも書いたが、Win2kなら起動時は80Mソコソコだぞ。だが、あまり強烈にカスタマイズしてしまうと、初心者の女の子には扱えなくなってしまうから、壁紙をなくして、いくつか自動起動する余計なアプリケーションを「窓の手」で駆除する程度にしておく。これで、起動時のコミットチャージを180M程度まで減らすことができた。まぁ、あまりハデに使わなければこれで十分だろう。
ついでなのでパッチを当てておいてやる。WindowsUpdateを通したら数十個のパッチが当たった。まったくもって、ウィルス対策なんてパッチ当てと「知らない人から来たメールは開かない」で十分である。パッチ当てが終わったら、一旦、仮想メモリをオフにして、再起動。デフラグをかけてから、改めて固定で512Mバイトを仮想メモリに割り当てる。これで、完了!! 見違えるようにサクサクと動くようになった。
しかし、返す返すもムカつくのが「ノートンのバカ」である。契約して欲しい気持ちはわからなくもないが、メモリを256Mしか積んでいないPC上で、まるでPCを使い物にならない状態にしながら営業活動を行うなッ!! 非常識もはなはだしい……というか、コレはもう「サイバーテロ行為」にほかならないだろう。いったい、誰が所有しているPCだと思っているんだ。腹立たしい!!
そんな状態にして出荷するHPも頭がどうかしているとしか思えない。儲かれば何でもいいのか? まぁ、このPCがオイラの手元に来るまでにどんな経緯をたどったか、詳しい経緯は知らないから、出荷時はもう少しマトモだったのかもしれないが……だが、ほとんどファイルが入っていない1.4GHzのPCである。しかも初心者の女の子の、だ。どう考えても、ガンガンとイジられた結果、こうなったとは思えない。やっぱりプレインストールの時点でこんな状態なのだろう……ったく!!
2007-03-11(Sun) USBメモリを検証ッ!!
で、購入してから気が付いた。仕様を鵜呑みにするのでなく、消費電力を実測してみたらええんやないかと。ウチにはUSB延長ケーブルなんて売るほどある。そいつを1本ひっちゃぶけば、消費電流くらいテスターで簡単に調べられる。
まずは、買ったばかりのSIRENのUSBメモリ。容量は512MB。色はシルバー。接続して、認識して、準備OK。何もせず、最初はなんてったって接続しただけの状態で計測しなければ、なんてったってアイドル……38.4mA。ふむん。仕様どおり、75mAを下回る数値。よろしな。
次は、ガンガンとファイルをコピーして書き込み。USB2.0対応だけあって速い。テスターの数値は目まぐるしく変化するが、目視で最大値を読む……55.5mA。ふむむん。やはり公約どおり、75mAを下回っている。
そんでは、問題のバッファローの赤いUSBメモリ。アイドルは……77.7mA……高い……ような、そうでもないような。SIRENの製品の倍ではあるが、5倍ということはない。続いて、ファイルコピー……92.1mA。これも、仕様の平均250mA以下には遠く及ばない。いうほど高くないやんけ。
ついでに以前に買った上海問屋のUSBジカ挿しの256MBのソリッドオーディオを試す。電源を切るたびに1曲目に戻るというスットコドッコイな仕様により、早々にオクラ入りしたアイテムだが……アイドル24.1mA、書き込み34.5mA……こ、これは低いッ!! ……というか、USB1.1なんだよね……コレ。しかし、低いコトには違いない。やはり、消費電力の大半は通信処理を行うコントローラの消費電力だというコトなのか。
idle(mA) | max(mA) | ||
---|---|---|---|
ワイヤレストラベルマウス(レシーバ) | 9.8 | 10.2 | ![]() |
上海問屋ソリッドオーディオ(USB1.1, 128MB) | 24.1 | 34.5 | ![]() ![]() |
SIREN USBメモリ(USB2.0, 512MB) | 38.4 | 55.5 | ![]() ![]() |
バッファローUSBメモリ(USB2.0, 128MB) | 77.7 | 92.1 | ![]() ![]() |
USB規格 | - | 500.0 | ![]() |
やはり、バッファローのUSBメモリの消費電力は突出しているといえるが、それでもUSBの定格には遠く及ばない。逆にSIRENのUSBメモリはかなり省電力であるといえるが、USB1.1の安物より省電力かというとそうでもない。ワイヤレストラベルマウスのレシーバは挿しっぱなしでオッケー。そんな結論だろうか。
2009-03-11(Wed) ナナメに3.3V→5V変換する
んが、ここでちょっとした問題が。XPortは3.3Vロジックであり、PICの5Vと合わないのだ。もちろん、これは当初からわかっていたことであり、PIC側を3.3Vに合わせるという考えもあった。しかし、当初の目標は液晶の汎用表示機を駆動すること。汎用表示機には、3.3Vで駆動するものもあるらしいが、手元のは5V仕様だ。仕方ない。
XPortの入力側はトランジスタで3.3Vに変換した。よく考えたら、こっちは抵抗で分圧するだけでもよかったようだが……それより問題は出力側の3.3Vを5Vに昇圧する方法である。これも、PICがTTL入力ならば3.3Vのままツッコめばいいのだが、今回はC言語で組んでみたいという都合で、タイミングにシビアでないUSART機能を使いたいトコロなのだ。USART機能を有効にすると、入力モードはシュミットトリガになり、その場合の閾値は「0.8 * Vdd」。つまり、4V以上が必要になる。
つーわけで、何となく、こっちもトランジスタで変換をカマそうとしたのだが、ハンダ付けしてから「非反転では電圧変換ができない」ことに気づいた。エミッタフォロアでは、1倍以上の電圧が得られないのである。なんつぅタコな。
ここにきて、ようやくチマタではどうしているのだろう、とググってみる。どうも、そう簡単な方法はないらしい。結局、オペアンプかバッファを使うのが一番簡単そうだ、という結論に至る。しかし、オペアンプを使うのは気が進まないし、基板スペースの問題から、TTLもキビしそう……ん? いや待て。以前にジャンク袋から入手した、ハーフピッチのTTLを使ってはどうだろう。
ハーフピッチのICをフルピッチ基板に載せるにあたっては、以前に適応した必殺のナナメ技を再び使うのである。PICにつながるはずのRXとTXをショートして、ThinkPadからXPortにtelnetしてキーを叩き、エコーバックが得られることを確認した。よっしゃ、動作確認、完了。
2011-03-11(Fri) PT2用マシン起動
電源入れてもマザーが起動しないコトがあるわ、intelロゴの画面で固まってしまうことがあるわ、Fedora14のEM64T版のインストールDVDでの起動途中でパニクるわ……でも、メモリチェックしても、特に異常が見つかるわけでもない。
まぁ、24時間稼働用途なので、別に起動がいくら不安定でも構わんのだが、インストールDVDが起動すらしないのは困る。またもやBIOSか? と思い、アップデートするも、変化なし。
2024-03-11(Mon) そんなメルカトル、補正してやるッ!!
ついに走り出したところで、次はなにを実装すべぇかなぁ、と考えなしに考えていたら、我ながら意外なところに向かってしまった。緯度補正だ。Google Map(ほかオンライン)の地図データはメルカトル図法なので、北に行くほど「より大きく」表示されるのだ。
当初、そんなもん大した違いではないから無視しよう、と思っていたのだが、実は無視していいレベルの違いではなかった。だいぶ違う。一応は、実際に遊んだときに実際のF1のラップに近いタイムが出るようにしたいと思っているのだが、そうしたければとても無視できないレベルだ。
とりあえず「鈴鹿」「シルバーストン」をテストの対象に開発を進めていたのだが、こうなれば赤道に至近なサーキットもテストの対象に加えるべきだ。最近はF1観てないんだよなぁ……なので、ググる。すると「マリーナベイ・ストリート・サーキット」がそれらしい。シンガポールGPが開催されている市街地サーキットで、北緯1度17分にある。ほぼ、赤道直下といっていい。
で、なにげなく座標データだけ入力してやると……「ちっさ」。左から「シルバーストン」「鈴鹿」「マリーナベイ」である。「シルバーストン」では気づかなかったが、こりゃ補正不可避である。幸い、開発したばかりの「BG版の回転拡大縮小機能」は、特段の負荷なしに自在に拡大縮小が可能だ。で、ここからは数学の時間である。まずは、一番直感的に書けるRubyで補正値を求めるプログラムを書いてみた。
include Math
# equ_px = (2 ** 0) * 256 # 赤道のピクセル数(ズームレベル0)
equ_px = (2 ** 20) * 256 # 赤道のピクセル数(ズームレベル20)
equ_m = 40075 * 1000.0 # 赤道の周長(m)
p equ_1px = equ_m / equ_px # 赤道下の1ピクセルの長さ(m)
#=> 0.1492910087108612
car_px = 24 # 車幅のピクセル数
car_m = 2.0 # 車幅(m)
p car_1px = car_m / car_px # 車の1ピクセルの長さ(m)
#=> 0.08333333333333333
p equ_times = car_1px / equ_1px # 赤道下の補正値
p 256 * equ_times # 回転拡大縮小機能への補正値
#=> 142.8976434518611
まずは、赤道直下を対象にした補正値だ。使用する定数は「赤道の周長(40075km)」と「F1の車幅(2.0m)」だ。どちらもWikipediaで調べた。ゲームとしての基本的な仕様はスーパーフォーミュラをパク……オマージュるつもりなので、車のサイズは24x43ピクセルだ。2.0mを24ピクセルで表現したい、ということになる。回転拡大縮小機能に与える補正値は、サンプリングベクトルで256が標準値であり、それより小さい値を与えると拡大される。計算の結果、赤道直下の場合は143を与えればいいと出た。
p [lat = 50, 'イギリス' ]
# p [lat = 35, '日本' ]
# p [lat = 0, '赤道' ]
p cos = Math.cos(lat * PI / 180)
p lat_times = car_1px / equ_1px / cos # 任意の緯度下の補正値
p 256 * lat_times # 回転拡大縮小機能への補正値
#=> 222.30926872026404 # [lat = 50, 'イギリス' ]
#=> 174.44581191992688 # [lat = 35, '日本' ]
#=> 142.8976434518611 # [lat = 0, '赤道' ]
次は、CoffeeScriptへの組み込み。ほぼ、上記のRubyのコードがそのまま動いたが、ひとつ考慮することがある。車を南北に移動した場合、補正値も変化させるべきか? ということだ。さすがに1フレームの移動毎に計算するのは過剰で、タイルをまたがったタイミング毎で十分だろうから処理は軽い。ゲーム内で使用する座標情報はWposというクラスで管理しているから、それに関数を追加するか……と実装しかけて気づいた。Wposクラスは経緯度で座標を与えられる仕様ではあるが、直後にメルカトル座標に変換して保持し、緯度情報は破棄してしまうのであった。ゲーム中の車の座標管理ならメルカトル座標のが扱いやすく、緯度を継続的に保持する必要性はないからだ。
つうわけで、今回の目的は主にサーキットを走るのがメインであって、大陸縦断をするわけではないので、サーキットを選択した時点で補正値を計算し、それ以後の補正値の更新はなしとした。結果、コードは以下のようになった。
equ_times = car_1px / equ_1px # 赤道下の補正値
@lat_index = equ_times * 65536 # 緯度の補正指数
@t = Math.round(@lat_index / Vec.v2vxy(128 - Math.round((@car.lat0 * 64) / 90.0), 1)[0])
うぉーッ!! スターティンググリッドの位置が見事に揃いましたゼ、ダンナッ!! プログラミングって、こういう感じにわかりやすく美しい結果を得られた時が、たまらなく楽しい瞬間なんだよなぁ。これも今回、調べて初めて知ったことなのだが、スターティンググリッドの間隔は8mと決められているらしい。