記事一覧

VSD for GPS に仮想光電管実装

ファイル 153-1.jpg

 先日公開した VSD for GPS,ありがたいことに既に何人かの人に使ってもらってるようだ.メーターとか走行軌跡表示とかは割りと反応がよさげだが,ラップタイム計測機能はいまいち不人気w たぶん計測方法がしょぼくて (全ラップでスタートラインを通過した瞬間を探し出してマークしなければならない),使い勝手が悪いんだろうな.

 というわけで,仮想光電管機能を実装した.これは,スタートラインの座標だけ与えてやれば,あとは GPS の位置情報からそこを通過した時刻を割り出して自動的に全ラップタイムを計測できる.まぁ GPS データロガーではメジャーな機能なんだけど,実装が大変なので先送りしていた.

 悩んだのは,AviUtl の GUI でどうスタートラインを座標指定するか.LAP+ の光電管ファイルをリードするのも考えたけど,LAP+ で作ってセーブして,また AviUtl でリードとかあまりいけてない.
 結局映像に一発だけマークを打つことでスタートライン位置を指定するようにした.これだとスタートラインの位置を映像で確認しながら仮想光電管を配置できるし.割と無理のない GUI にできたんじゃないかな.

 画像は,今回追加されたスタートラインの表示.微妙すぎて誰もきづかねぇよwww

ひつまぶし食べてきたよ!

 いつものメンバーで名古屋までひつまぶし食べに行くというので,「本来の使い方されてない」とひでぇ言われようの GPS ロガーでログとってみた.

ひつまぶしツアーの軌跡

・スピードが法定速度超えていると思しき記録は GPS の誤差です.
 当ブログは全力で法を遵守しています.
 実験で使用した食材は後でスタッフがおいしくいただきました.


写真は某 blog に綺麗なのが載ると思うので,ここではこんだけ↓
颯爽と雪上車に乗り込む OGK 隊員
ファイル 152-1.jpg

順調な航海に満足げな YAG 艦長
ファイル 152-2.jpg

車載動画スーパーインポーズフィルタを GPS に対応

ファイル 151-1.jpg

車載動画スーパーインポーズフィルタを GPS に対応中.

 今日は GPS ログ (NMEA-0183) を読み込んで車載動画と合成するところまで作りこんだ.といってもほとんどの部分は PSP GPS のときに実装しているので,新たに作るべきはログフォーマットの変更・スピードメーター表示・加速度計算くらい.

 で出かけついでにテストしてみたら以下の問題が見つかった.
・スピードメーターがプルプルするw
 生 GPS データはそんなに振動してないので,どうやら 5→30Hz にアップサンプリングするのに使用している Ferguson / Coons 曲線のアルゴリズムと GPS データの微妙な誤差の問題らしい.
 つうわけで当時苦労して仕込んだ当アルゴリズムは削除して単純な等比分割にしてみたけど,(GPS ログが 1Hz のデータでも) 大して差がなかったので,当初からいらんかったやんこれ.

・横 G がおかしい
 理論的には GPS のデータだけで前後左右加速度が求まるはずなので実装してみたけど,横 G のデータがおかしい.LAP+ では結構まともそうな横 G グラフが出せるので,算出方法を見直さないとな.
追記:と思ったら,360度のラップアラウンドが考慮もれしてただけだったw あと平滑化したら結構まともになった.


以下は残項目リスト
・最速ラップとのタイム差のリアルタイム表示
・仮想光電管の位置情報からラップタイムを自動計測

----
完成しました.欲しい人はここからどうぞ→VSD for GPS

新しいオモチャの予感

ファイル 150-1.jpg

 PhotoMate887 という GPS ロガーを購入.これ自体は 5Hz でログが吐けること以外は普通の GPS ロガーだが,LAP+ というフリーの解析ソフトと組み合わせることで,本格的なモータースポーツ用データロガーになる!! (たとえばラップタイムを計測できたり,各周回の走りを数値で比較できたり)

 あと,計測時は PhotoMate887 だけをどこかに固定するだけなので,カートでも使えるのが大きい.レンタルカートだと計測機器をごちゃごちゃ設置できるわけがないので.また走行会なんかでも気軽に他の人の車に載せることもできるし.

 この手のモータースポーツ用データロガーって,ちゃんとしたのは大体 5~10万円するのよね.真剣に競技やってるわけでもない自分にとって¥5万はお遊びで投入できる金額ではないので,PSP の GPS ユニットをハックして同様のものを自作しようとしてみたりしたけど,こいつは 1Hz でしかデータを取得できなかったのでデータロガーとしては役に立たなかったわけで.
 
 こんな環境が ¥8,800 で構築できるなんて,いい時代になったなぁ(゜ーÅ)ほろり
 というわけで,車載動画スーパーインポーズフィルタを PhotoMate887 に対応させる計画発動!

MBM 高速起動

 フリーのブートローダーの MBM が久々にバージョンアップしていることに気が付いた.
 このバージョンアップで,MBM をインストールするドライブが選べるようになったのは便利.今まで C: にしかインストールできなかったので,USB メモリ等からブートすると (それが C: になってしまうので) HDD にインストールできなかったのだが,その制約がなくなった.

 今回から GPL になってソースコードも付属している.なので前からやりたかった「起動待ち時間を 1秒より速くする」(標準の MBM は自動起動までの最小時間が 1秒なので) をやるため,再アセンブルしようと思った.
 でやってみたら,アセンブラは OPTASM…? そんなのもう入手できねーよ(;´д⊂)ためしに MASM32 でアセンブルしてみたけどエラーの嵐.

 というわけで,方針を変えてパッチ当てで(笑) ソースは付属してるので,パッチ当て箇所がわかりやすくてありがたい.

1460  wait_timer:     ; 起動タイマー表示(CF=set on break, clr on time out)
1461          _skip e, MainParms.MpTime, 0
1462                   call   set_csrhome
1463                  mov     bp, 10 ←**ここ**
1464           _while
1465                  push    di

wait_timer で cx(=メニューで設定した待ち時間) * bp * 100ms 待っているので,bp への代入を 1にすれば,メニューで設定した秒数 / 10 の時間でタイムアウトする.(どうせ最小時間しか設定しないので問題なし)

バイナリ上のパッチ当て箇所は以下のとおり(ver.0.39).黄色で示した箇所を 0x0A→0x01 に書き換える.
ファイル 149-1.png
 これで MBM のメニューが一瞬でタイムアウトするようになったヽ(´ー`)ノ もちろんキーをあらかじめ押しておけばタイムアウトがキャンセルされるので,使い勝手的にも問題なし.

民族大移動

ファイル 148-1.jpg

 HDD の WESTERN DIGITAL WD15EADS 1.5TB を購入.ついでに 120GB と 250GB の HDD を売却するためにデータ移動中.
 HDD のアクセスが速くなったとはいえ,さすがにこの容量のデータ移動は時間がかかるわ.帰宅してから寝るまでの時間では 1日でおわんねぇ.

 で,最近の HDD なら静かさはどれもかわんねぇだろ,と思って WESTERN DIGITAL を買ってみたけど,失敗だった orz 今まで使ってた日立の HDP725050GLA360 との比較になるけど,アイドル音は (5400rpm だけあって) 静か.ただしシーク音がうるさいよ… 日立のは「シャリシャリ」って感じで耳を澄ませば聞こえる程度だったが,WD は「コリコリ」ってうるさい.しかも,HDD にアクセスしていないはず (HDD アクセスランプが点灯していない) なのにシーク音が聞こえるよ…(HDD にアクセスするはずのない BIOS 画面ですら音がする) 静かさでは日立の方が上だな.
 まぁ,WD は 5400rpm だけあって,発熱は少なかった.

----
後日追記: アイドル時のヘッドシーク音(?),しばらく使っているうちに症状はなくなった.おそらく購入直後は,HDD が自発的に何らかのアクセス (初期設定とか?) を行ってたのだろう.まぁシーク音がうるさいことに変わりはないけど.

口減らし

ファイル 147-1.jpg

 気がつけば,PC の数がデスクトップ 3台,ノート PC 3台になってた…
 明らかに戦力外のノート PC 2台・デスクトップ 1台は売却,しかしネットブックの価格破壊の影響で中古ノート PC はジャンク品並みの値段でしか売れんなぁ… Pen3 866MHz のデスクトップ PC なんかさらに悲惨で,昼食 1回分の値段以下で売るくらいなら,IDE HDD のサーバーにしたほうがましだ.

 とか思ってたら,また ASPIRE ONE AOA150-Bk1 を \21,500 で衝動買いw
 工人舎から mbook が販売されると知ったときはかなりぐらっときたけど,所詮室内でしか使わないことを考えると安さ優先でいいかなぁと.
 で,リファビッシュ品ということでキズの具合が気になっていたのだが,結構ひどいwww 天板はピアノのように光沢のある黒なのだが,磨き傷のような細かいキズが全面に.あと角にぶつけたような結構深い傷が 1cm ほど.筐体が黒だと結構目立つ.これなら白買っとけばよかったかなぁ.

 まぁこの値段ならあきらめも作ってもんよ.実際に使ってみた感想だが,一番の目的であった,デスクトップ PC で録画した HD ビデオを LAN 経由で再生するのに特に問題はなかった.ただし CPU パワーはぎりぎりらしく,たまにコマ落ちする.あと CPU フルパワーだと結構熱を持つ.冬場は布団にもぐりながらビデオ見てカイロ代わりになりそうだw
 あと,この記事も ASPIRE で書いてるけど,キーボードは快適でサイズの小ささは特に感じない.画面の大きさも,横に広にせいか特に狭いとは感じなかった.

 今のところの不満点は,
・タッチパッドのクリックボタンが硬い.結構力を入れて押し込まないとクリックできないので,右ボタンドラッグとか,片手だけでやろうとすると指がつりそう.
・タッチパッドのすべりが悪い

 質感も安っぽさを余り感じることもなく,まぁこれが 2万円ちょっとなら,いい買い物をしたかな.

WMWare 上の WindowXP の時計が進む

 ホスト OS = WindwosXP の VMWare 上で,得体の知れない実行ファイルなどを実行させるための仮想 WindowsXP 環境を立ち上げていたのだが,なぜか W クリックを認識しないという問題があった.なんでかなー? と思っていたら,なんと時計が 2倍近い速度で進んでいるではないか(汗

 で,ググッてみたら,原因は
・ゲスト OS = Linux 時に,Linux の時計の実装に起因するもの
・ホストマシンが可変クロック周波数であることに起因するもの
の 2種類があることがわかった.

 前者は今回は関係ない.後者の解決方法はここに載ってた.

 ホストマシンが,Cool'n Quiet かつ AMD のデュアルコアの場合に起こるなんて情報もあったが,ウチの場合関係なかったみたい.

中華的スペック詐称

ファイル 145-1.jpg

 WT-SVP-16 ガム型小型ビデオカメラ なるものを購入.(型番が違うものが複数あるが,おそらく中身は同一と思われる)
 何でかというと,カートでちょっとショット + 延長ケーブルでヘルメットカメラにしていたのだが,「ケーブルがカートに絡むと危ない」と禁止命令が出たので.

 で,カタログ上のスペックは,映像解像度640×480/フレーム数→16-19fps,静止画1600×1200 とのことだが,実際に撮影してみると…確かに生成されたデータとしてはカタログ通りなのだが,どう見ても解像度が荒くね? 圧縮が荒いというよりは,CMOS の解像度が少ないように見える.(特に静止画なんかは,もっと解像度が少ない画像を 1600×1200 に拡大してる感じ.)
 これって,下位機種の 352×288 の CMOS はそのままで,映像を 640×480 に伸張してるだけなんじゃね? これならソフトウェアの変更だけで (あくまでもカタログ上は) スペックアップしてるように見せられるし.
 なんか中国のやりそうなことだなぁ…

 意外だったのは,fps はほぼ 30fps 出てたこと.たまにフレームドロップを起こすが,この程度なら許容範囲.

 あと時間設定のやり方がマニュアルと違っていたので覚え書き.
 time.txt というテキストファイルの中身を「2008-05-18 10:08:28」というフォーマットで作成し,SD カードを挿した状態でカメラと PC を接続し,ドライブとして認識されたカメラのルートディレクトリに time.txt をコピー.あとは説明書の手順どおり.

っ【撮影した動画

バトルフィールド1943

ファイル 144-1.jpg

 バトルフィールド 1943 を購入.
 といってもオンラインストア専用だから,初めて PSN のオンラインストアを使用してみたけど,こりゃ楽だわ.一歩も外に出ずにゲーム購入できるなんて,こりゃヒキコモリが加速するわwww

 でやってみた感想.今まで自分はオンラインゲームはまったくやってなかったのだけど,おもろいw 仲間と共闘するのは,まさにマーセナリーズでやりたかったことそのもの (マーセは NPC だけど).もうちょっと意思疎通が出来てチームプレイが出来るともっとおもろいんだろうけど.
 あとは,マップが 3つしかなくてマンネリ化してきたので,BF1942 のヨーロッパのマップが追加されたらいいなぁ.

HP Photosmart C4480 購入

ファイル 143-1.jpg

 プリンタを新調.

 プリンタを選ぶに当たって考慮したのは,(画質とか印刷速度とか付加機能とかは無視で) とにかくトータルコスト (本体価格・インク代・故障対応に必要な金) を下げること.
 インクジェットプリンタはヘッド目詰まりという宿命があるので,ページプリンタにしようかとも思ったが,ページプリンタはトナーが高すぎるので却下.
 そうこう考えるうちに,やっすいインクジェットプリンタ買ってインク切れたら本体ごと捨てるのが一番いいのでは? と思うようになった.

 それはさすがにやりすぎなので,インクは切れたら社外品の補充インク (ボトル式のやつ) を使う事が前提.そうすると,非純正だと回復不可能なヘッド目詰まりの危険性が多少なりとも上がってしまうという事で,インクタンクとヘッドが一体型の HP Photosmart C4480 を ¥4,866 で購入.これならインクタンク交換でヘッドも新品になるから,怪しい補充インクでも気兼ねなく使える.
 スキャナは別にいらんかったけど,スキャナついてなくてもこの値段なら買うわ.

----
しばらく使ってみた感想
○黒インクだけで印字できる
○前面給紙・前面排紙なので設置しやすい
×本体のボタン一発でスキャン・コピーできない(?)
×ドライバだけ入れたいのに,やたらソフトをインストールされる

あんま印刷には無頓着なので,気づいたのはこんなもん(笑)

----
 以下愚痴.
 PM-930C 分解して思ったけど,あんなステッピングモーター? とかいっぱい使ってる機械が \1万 とかおかしいだろ.でプリンタ本体は赤字だからインクで稼ごうとしてインク代がメチャ高くなる.で社外品の安いインクが出現したら,わざわざインクタンクに IC チップ埋め込んで社外品は使えないようにするとか,もう意味わかんない.

 こんなアホなビジネスモデルしてるから,インク切れたら本体ごと捨てるとか言う運用がまかり通ってしまう.新機種が安く手に入るからユーザー的にはメリットがあるのかもしれない (インク代も含めたトータルコストでメリットかどうかは怪しい) が,少なくともメーカーの企業倫理がまったく感じられない…

SDカードアクセス (その後)

ファイル 142-1.png

 かなり放置状態だったデータロガー 2号機計画,とりあえず単体で G を計測するやつを作ろう (これだと追加の半田付けはなんもいらんから) と思った.
 で svn に葬ったソースファイルをチェックアウトしてきて,コンパイルしてみたらコンパイルが通らねぇ(爆) 原因を追っていったらなんかいろいろとコンパイルオプションとかがおかしくね? なんでこんなとこいじったんだろう…?

 まぁめでたくコンパイルも通り,SD カードの初期化コマンドを CMD1→ACMD41 に変更したら,前回使えなかった 8MB ゴミカードも無事初期化できるようになった.

 で,前回は SD カードリードでとまっていたので,SD カードライトに挑戦.ライト速度も見るためにいろいろデバッグメッセージ出力を削ってやってみたら,

 fatfs に「ファイルシステムがねぇ」って怒られる orz

なんかデバッグメッセージを消したことにより wait が減って,動作が変になってるっぽい.まれにライトまでたどり着けたとしても,FAT エントリをめちゃくちゃに破壊してくれるんですが…(笑)

もう窓から投げ捨てていいかな?

Linux は軽い

ファイル 141-1.jpg

…という夢を見たんだ.

いやね,いま Libretto30 (Am5x86-100MHz, Mem 20MB) を,単体で Web & メールクライアントに仕立てて復活させようとしているんだけど,
・Windows95 をサポートする Web ブラウザは古いものばかりで,今日日の Web ページは表示が崩れてまともに見れない
・Win98 は既にきつい

 それなら,一般的に Windows よりも軽いといわれている Linux はどうなのよ? とチラッと調べてみたけど,Mem 128MB 以上でないと動かんとか.全然軽くないじゃん.Win95 世代のマシンはすでに切り捨てられたってことね…
 と思ったら見つけたのが以下の 2つ.
・Damn Small Linux
・Tiny Core Linx
特に TCL の方は,iso サイズが 10MB なのに GUI が使えるということで期待していたが,Out Of Memory とかで起動中にカーネルパニックを起こしたwww

ならばと DSL のほうを入れてみたら,無事動いたよ…(゜ーÅ)ほろり
ただし,プリインストールの FireFox 起動してみたら,5分たっても帰ってこねぇw より軽いナントカってブラウザ (写真) はスタイルシートを無視するし,日本語が表示できないのが痛いw rdesktop でリモートデスクトップクライアントにはなるが,これなら Win95 とかわんねぇし.

 (安定性とか置いといて) まともな GUI が使えるという条件において,Win95 より軽い Linux は無いという結論に達した.
 Lib 単体でがんばるなら,Windows 版 w3m を入れるのが落としどころかもしれん.

UMID mbook ごっこ

ファイル 140-1.jpg

 UMID の mbook が凄く欲しくなってきた.個人的には VAIO P よりもほしいくらい (VAIO P 意外とでかいし).ただし,今のところ品質が安定しないのと,韓国語キーボードだけは絶対に嫌だw
 日本メーカーも,ありきたりなネットブックじゃなくてこういう尖った魅力のある製品を作ってくれんかねぇ.個人的には,電子辞書サイズの PC-9801 互換機とか作ったらレトロブームに乗っかって微妙に売れるんじゃなかろうか? とか思ってたりして.
 で,mbook 買えない欲求不満を解消すべく,Libretto30 引っ張り出してきたw Lib に無線 LAN カード挿してナンチャッテ mbook 構築完了.さすがに Lib 単体ではできる事は限られているので,リモートデスクトップでメインマシンに入って色々作業してみる.

 …使いにくうw

 テキスト入力ツールとして使うためには,キーボードの大きさは重要だと理解した.少なくともこれでソースコード書こうとかは思わんなぁ.でも web ブラウジング程度なら,しょぼくても「キーボードがある」だけでかなり使い物になることも分かった.PSP でブラウジングするのとは使いやすさがダンチだ.

 てかリモートデスクトップクライアントとしてなら,Lib もそこそこ使えるじゃん.音が出ないのが非常に惜しい.

プリンタヘッド洗浄

タダでもらってきた EPSON PM-930C.
印字してみると目詰まりがひどく,プリンタ機能のヘッドクリーニングでも改善しなかったので,分解洗浄を敢行.

ファイル 139-1.jpg
ココまでばらさないとヘッドは取り出せなかった.

ファイル 139-2.jpg
何が写ってるかわからんと思うけどw ヘッダをアルコール漬けにしてサランラップで包んで,ガンコな汚れを分解洗浄中 (のつもり)

で,再組み立てして試してみたら…まったく改善してないやん.

オレの工数を返せ(;´д⊂)

zlib にハマる

 とある Windows プログラムで,.gz 圧縮されたログファイル (テキスト) を直接読めるように,zlib を組み込んでみた.下がその一部

if(( fp = gzopen(( char *)szFileName, "r" )) == NULL ) return FALSE;
while( gzgets( fp, szBuf, BUF_SIZE ) != Z_NULL ){
    ....
}
gzclose( fp );

なんのことはない,fopen/fgets/fclose を gz なんちゃらに置き換えただけ.こんなん余裕っすよ.と思って実行してみたら,「invalid distances set」やら「invalid distance too far back」やらで全然リードできねぇ.たったこれだけのコードのどこに間違う余地があるのか_| ̄|○

 と,ふと目にとまったのが gzopen( ... , "r" ) の "r".Windows 上のテキストファイルだから何も考えずに "r" にしていたのだが,"rb" にしてみたら直ったヽ(´ー`)ノ "r" だと,0x0D 0x0A が 0x0A に変換されたりして .gz が壊れたのと同じ状態になってたんだろうな.
 てか,gz から解凍後のデータに対してテキストモードを適用すると思うでしょ普通.gz ファイル自体にテキストモードを適用してどうする (--# むか

Icarus Verilog vs. CVer

 ちょっくら,家で Verilog-HDL シミュレーションをやる必要が出てきたので,sim 環境を構築しようとしてみた.かつては Silos-III 評価版を魔改造してw 使っていたのだが,ちょっと大き目の回路だと落ちるようになってしまったので…
 フリーの Verilog-HDL シミュレータとしては,Icarus Verilog と cver が代表的だと思う.cver はどっかのベンダーが商用ツールをフリーとしてリリースしたもののようで,vcs とかになじんでいるとコマンドラインオプションとかが似ているので使いやすい.iverilog は 0.7 時代は使い物にならなかった印象かあるのだが,0.9 になって System Verilog とかにも対応したのか.すげぇな.

 で,SystemVerilg は使う予定がないので,普通の Verilog で,どっちが速いか試してみた.

お題: 16bit RISC CPU で 256個の数値クイックソート

GPLCVER_2.12a of 05/16/07 (Cygwin32).
9.108u 0.061s 0:10.27 89.1% 0+0k 0+0io 1607pf+0w

Icarus Verilog version 0.9.1 (v0_9_1)
37.327u 0.046s 0:40.57 92.0% 0+0k 0+0io 1842pf+0w

cver の圧勝.こんだけ差があると,iverilog を選ぶのはきついな.System Verilog を覚えてみるのもいいかとも思ってたのだが…(゜ーÅ)ほろり

----
 んー,ここの結果だと Icarus Verilog のほうがはやいなぁ.Cygwin 上でテストしたのが間違いだったんだろうか?
 てか,Verilator ってナニ!? VCS より速いフリーのシミュレータ!? おら,すっげぇわくわくしてきたぞwwww

AviSynth プラグインフィルタ自作(2)

ファイル 136-1.jpg

 ほぼ移植完了.AviUtl と AviSynth の差分は,画像データに点を打つ関数と,画像のプロパティ (縦横サイズとか) 取得部分のみなので割とすんなりと実装は済んだ.
 …と思ったら,MediaPlayerClassic で映像と音声とメーターがズレてるよ_| ̄|○ MediaPlayerClassic で動画のプロパティ見るとなぜか 25fps になってた.ffdshow のオンスリーンディスプレイでは 29.970fps になってるのに,いみがわからん.
 調べてみたら,.mp4 が 25fps になってしまうのは ffdshow のけっこう有名な問題らしい.そういや,AviUtl で ffdshow 経由で .MP4 開いたときもおかしくて,mp4input.aui 経由で読むように変えた過去があったし.でも ffdshow の新しいバージョンでは改善されたとかの記述もあるし,よくわからん.
 でとりあえず Haali Media Splitter 入れたら直ったヽ(´ー`)ノ そういや昔はこれ入れてた気もするが,ffdshow が新しくなってから入れなくても .mp4 見れるようになった(?) ので,入れてなかった.Haali Media Splitter 入れてない状態で,ffdshow 再インストしたら .mp4 見れなくなったので,何らかの .mp4 スプリッタが入ってたらしく,25fps 化はこの謎スプリッタが原因みたい.

 で,いろいろ使ってみたのだが,AviSynth 対応は自分ですら予想しなかったほど便利であること発覚.例えば 320*240 で撮影した動画は,640*480 に拡大してからメーターを重ねるなんてことが簡単にできるし,↓のようなスクリプトで 2つの車載動画を並べて同時再生とかもできるし.

c1 = DirectShowSource("SANY0001.MP4").ConvertToYUY2(). \
    VSDFilter( \
        "vsd20090123_095934.log", \
        video_start=8324, \
        video_end=68034, \
        log_start=4522, \
        log_end=34980, \
        map_length=240, \
        map_size=460, \
        map_angle=3406, \
        lap_time=1, \
        g_snake=1 \
    ). \
    BilinearResize( 320, 240 )

c2 = DirectShowSource("SANY0002.MP4").ConvertToYUY2(). \
    VSDFilter( \
        "vsd20090123_111455.log", \
        video_start=221, \
        video_end=52536, \
        log_start=8611, \
        log_end=35296, \
        map_length=240, \
        map_size=460, \
        map_angle=3406, \
        lap_time=1, \
        g_snake=1 \
    ). \
    BilinearResize( 320, 240 )

StackHorizontal(c1, c2)

こりゃ便利だわヽ(´ー`)ノ

AviSynth プラグインフィルタ自作

 車載動画スーパーインポーズフィルタ (vsd_filter) を,AviSynth プラグインフィルタに改造中.なんでそんなことしてるかというと,
・AviUtl で合成した動画は,.avi に書き出さなくても AviUtl で再生することはできるが,プレーヤーとしていけてないので,DirectShow 経由で普通のプレイヤーで見たい.
・Adobe Premiere とかで合成した動画を編集したいとき,いったん .avi に書き出さないといけない.AviSynth 経由なら,いちいち .avi に書き出さなくても直に読み込める
と,それなりに利点はあるので.かつて DScaler フィルタで作ろうと思ったけど,DScaler のプラグイン SDK は有料(?) みたいなので断念していた.
 というわけでここを見ながら AviSynth のプラグインフィルタについて勉強中.

移植に当たっての問題点は,
・AviUtl でダイアログで設定してるパラメータを,AviSynth では GUI で設定できない.なので,AviUtl の設定パラメータをファイルにライト・リードする機能を付加した.これで AviUtl の GUI でパラメータ調整→パラメータ書き出し→AviSynth のスクリプト内でパラメータファイルを指定,のようにすればパラメータを読み込めるはず.
・YUY2 のオペレーション.線とか円を書くとかの関数はクラス化してるので移植は容易で,これらの関数は最終的に 1ピクセルの点を打つ関数を呼んでいるので,アプリに依存しているのはこの 1ピクセルの点を打つ処理だけ.問題は YUY2 フォーマットでは U/V が横 2ピクセルで 1データを共有しているので,1ピクセルだけ打つというのが (画質を追求すると) めんどくさいよなぁ…

カート動画分析

ファイル 134-1.png

先日 YouTube にカートのヘルメットカメラ動画を up したのだけれど,知らない誰かが同じような動画を up していて,しかもその人のほうが早かったので,自分の弱点を知るべく素人なりにそれぞれの動画を分析してみた.

まず,コースを適当に 4つのセクターに分けてそれぞれの区間タイムを計る.(セクター分けやコーナー No. などは自分が勝手に割り振ったものなので…)
セクター1: スタートライン~3コーナー
セクター2: 4~8コーナー
セクター3: 8コーナー脱出~バックストレート
セクター4: 10コーナー~スタートライン

その結果:

セクター自分参考動画Diff
18.778.53+0.23
29.809.44+0.36
37.007.28-0.28
48.278.15+0.12

さらに,動画から走行ラインをなんとなく割り出してみて図に起こしたのが上の図.

セクター1 はそんなに差がないだろうと思っていたのに,0.2秒も差がついている.おそらく 1コーナーでブレーキを踏みすぎているのが原因かと思う.参考動画のほうが大回り傾向にあるが,大回りして速度を上げたほうがいいのだろうか?

セクター2 は自分でも苦手と思っていたが,やはりここで一番大差がついている.たぶん 4コーナーの進入がすべてではないかと.自分では 4コーナーで突っ込みすぎて 5, 6 コーナーが苦しくなってロスしていると思うが,参考動画では 4コーナの CP が割と奥にあった.
7, 8は,コンパクトに回って距離を稼ぐか,大回りして速度を稼ぐかいつも悩んでいる.結局 7-8 間はコンパクトに回って,8-9 間は大回りして速度を稼いでいたつもりだが,参考動画では逆で,7-8 間で速度を速めに立ち上げて,8は思いっきりショートカットして距離を稼いでいるんだろうか?

唯一勝っているセクター3,自分のカートが当たりだっただけかもしれないが,これまで何回か走った経験からここで前走と距離が詰まると感じたことが多かったので,セクター3 が速いってのはあながち間違いでないのかもしれない.というのも自分は体重が軽いので,加速だけはよいのだろう.

セクター4 は,ライン的には参考動画と変わらない気がしたのだけど,それでも 0.1 秒の差.ここもブレーキングの差なのかなぁ? 気になったのは,参考動画はあまりカウンターを当ててなかったこと.ライン以外に何か考慮すべき点があるのかもしれない (体重の乗せ方とか???)

とりあえず,優先順位的に,
・4 コーナーの CP を奥にとる
・8 コーナーはショートカット,8-9 は大回りせず距離を稼ぐ
・1 コーナーでなるべく速度を殺さない
・10 コーナーでなるべく速度を殺さない
でがんばってみようと思う.

簡易ラップタイム計測機能だけ使用

ファイル 133-1.jpg

データロガーネタなんだけど,もはや PSP とは関係ないな…

めでたくカートでのヘルメットカメラ動画撮影に成功したので,これにラップタイムを合成表示させてみたくなった.ラップタイムのスーパーインポーズ機能自体はこのとき仕込んではあるのだが,あくまでも副次的な機能だったので,データロガーのログファイルを読み込まないとラップタイム計測機能は使えないようになっていた.

なので,さくっとメーター表示せずにラップタイム計測機能だけ使えるように改造.

ほしいひとはここからどうぞー.

1807年のブログ

Web クローラに色々な情報を与えるために robots.txt の仕組みが用意されているが,自分がサーバ管理者なら .htaccess でアクセス制限できるので,今まで robots.txt のありがたみがイマイチ分からなかった.

が,ふと Apache ログを眺めていたら,Googlebot が 1807年~2206年の日記をクロールしている事に気づいたw いやいや,そんな世紀の日記とか書けないからwww

今ご覧のブログ,Web Diary Professionalというフリーの blog スクリプトを使わせてもらってるのだが,「先月」「来月」のリンクが (記事が無くても) 常に張られ,記事は無くても 404 にはならずに「記事がありません」と書かれたページが生成されるので,「記事がありません」だけのページが上の年月×12ヶ月分キャッシュされているという状態.

これじゃ Google にもアクセスを受けるうちのサーバにもムダなので,日付指定が含まれている URL を robots.txt でクロール対象外にした.

なるほど,こういう風に使うのか.

現実とゲームの区別があいまいに…なるわけねーだろ

 グランツーリスモ4 が発表されたとき,「日産のトップテストドライバーを例に挙げ、同一車種で実車と「GT4」で走行した場合、5秒以内(1%程度)のラップ差が実現できている」と書かれた記事を見てから,GT4 の再現度ってそんなに高いの? と常々疑問に思っていた.大体,タイムが近い=再現性が高い つうわけでもないだろうに.
 これを確かめる一番手っ取り早い方法は,自分で同じコース・同じ車で走ってみて,挙動の違いを確かめればいいのだが,GT4 に収録されているコースを走る機会がなかなかなかった.だがついに鈴鹿サーキット西コースを破格で走れる機会があったので,かねてからの疑問を晴らすべく突撃!!

 で,その結果↓ (ニコ動アカウントがない人はこちら)

まずタイムは…GT4 が 1'40.900,リアルが 1'47.703.リアルが 7秒落ちwww (ちなみにゲーム中の車は,フルノーマル・N1 タイヤ・アシスト類全 OFF という,考えうる最低の設定)
 もちろんリアルの腕がしょぼいのが一番の原因だとは思うが (130R の突入速度が 30km/h も違うw),挙動に関しての大きな違いは,ゲーム中の車が安定しすぎてるんじゃないかな.
・フルブレーキでハンドル切ってもなんともない→ブレーキを遅らせられる
・スプーン出口とかでアクセルがばっと開けてもなんともない→立ち上がり速度が稼げる
現実でそんなことしたら (少なくとも俺の腕では) スピン死確定だよ.

 ちなみに,一緒に走った S1 STD・ライトチューン・NEOVA・鈴鹿経験あり のそこそこ熟練者が 1'40 で走ってたことからも,GT4 の 1'40 は眉唾ものと言えよう.

 まぁ走行会前に事前に GT4 で練習したけど,コース覚えるのとかライン取りとか,ブレーキングポイントとか,事前に予習するのには役立ったかな.

MAPLUS の あしあと を GoogleMaps に表示

 前に,GoogleMaps を内部的に使用してる「轍」ってソフトにMAPLUS の あしあと を表示する方法を載せたんだけど,ダイレクトに GoogleMaps に足跡を載せる方法があることがわかった.

1. まず,あしあとを kmz に変換する.その方法は,…拙作の nme2kml.bat でも使ってくださいw
2. (この作業は別にしなくてもいいんだけど,しないと GoogleMaps がめちゃ重くなるので) できた *.kmz を GoogleEarth で開いて,Path を右クリック→名前をつけて保存.
ファイル 130-1.png
3. で,ここが一番の壁になると思うんだけど,どこでもいいので web ページを公開できる場所に,2. で保存した *.kmz を置いて誰でもダウンロードできるようにしておく.
4. GoogleMaps を開いて,検索窓に先ほど置いた *.kmz の URL を入力する.

実際にやるとこんな感じになる.轍よりさくさく動くし,仲間内でツーリング軌跡を共有できるので便利.

ちなみに,*.kmz ならなんでも表示できるみたいで,実際,maplus_conv でお気に入りを kml に変換したものも表示することができた.

Linux サーバを coLinux 化

ファイル 129-1.jpg

 ウチの Linux サーバ (Celeron@300MHz のノーパソ),かつては VMWare 上の Linux で動かしていたのだが,あまりの遅さに耐えかねてネイティブな Linux で動かしていた.
 が,どうやっても手持ちの USB LAN アダプタを WEP でしか動かせなかったのと,トラブル時の復旧の容易性 (ディスクイメージファイル 1個をコピるだけで別のホストマシンで復旧できる.メールサーバが動いているのでダウン時間は最小に抑えたい) を考えると,やはりバーチャルマシンで Linux 動かしたほうが便利.

 というわけで,coLinux 入れてみた.VMWare に比べてメモリ消費量が格段に減ったので廃スペックマシンでの動作も快適.素の Linux と変わんないっす.ヽ(´ー`)ノ

 で,本格運用しようと思ったら,無線 LAN アダプタと仮想マシンの LAN アダプタが Bridge できねぇ_| ̄|○
 WPA で接続しようと思ってたのに,いみねーじゃん.

-----
追記:

・無線 LAN アダプタを含めたブリッジができた.情報はここ↓
http://d.hatena.ne.jp/cnaos/20081102/1225628170
ただし,リンク先では無線 LAN アダプタだけ enable にすればよいみたいに読めるが,ウチの環境,無線 LAN・有線 LAN・TAP-Win32 Adapter をブリッジする環境では,有線・無線 LAN を enable にしないとだめだった.

C:>netsh bridge show a

----------------------------------------------------------------------
 ID AdapterFriendlyName         ForceCompatibilityMode
----------------------------------------------------------------------
  1 ローカル エリア接続 2                disabled ← TAP-Win32 Adapter
  2 ワイヤレス ネットワーク接続          enabled  ← 無線 LAN アダプタ
  3 ローカル エリア接続                  enabled  ← 有線 LAN
----------------------------------------------------------------------

Layer3 互換モードってなんだろうねぇ? 自身の MAC アドレス以外の MAC アドレスを持つパケットを送出できない LAN アダプタ用の設定かな? (てきとう)

・実は WMWare でもホストマシンとゲストマシンとのファイル共有・Samba ファイル共有ができないという現象があって困っていたのだが,WinPCap を使ったブリッジ構成の coLinux でも同じ現象が出て困っていた.(ゲスト OS と,LAN に繋がった他のマシンとなら問題なし) その解決法がここに載っていた↓
http://scratchpad.fc2web.com/colinux/winpcap.html

どっちも重要な割りにすげーマニアックな設定方法なんですけどwww
ググってもなかなか引っかからなくて苦労したよ…

stone を DD-WRT で動かす

 Linux サーバ (11b 無線 LAN で繋がっているので遅い) で動かしていた ssh サーバ + http プロキシサーバ を DD-WRT にやらせてみる計画発動.
 ssh はすでに動いているので,問題は proxy サーバ.すでにコンパイル済みの tiny proxy なるものがあるらしいが,色々と考えて DD-WRT で stone を動かしてみたくなった.

 というわけで,クロスコンパイル環境の構築から入る.最初は DD-WRT のクロスコンパイル環境を構築しようと思ったが,情報があまりないので断念.やりたいのは stone のクロスコンパイルだけだから,OpenWRT のクロスコンパイル環境でもいいのでは? ということで,楽なほうの OpenWRT の環境を構築.

http://downloads.openwrt.org/docs/buildroot-documentation.html
http://blog.gcd.org/archives/50849644.html
ここらへんの情報を元に Vine Linux 4.2 でやってみたら,make が古いだの autoconf の build に失敗しただの,わけがわからんので,CentOS の最新版を VMWare 上にインストールしてやっと構築できた.

 環境ができたところで stone のコンパイル.stone の Makefile にはすでに fon のコンパイルの設定があるので,それを参考に WNDR3300 用の make ターゲットを追加.

mipsel:
    $(MAKE) CC="mipsel-linux-uclibc-gcc" FLAGS="-O -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL $(FLAGS) -I/home/hoge/openwrt/staging_dir/mipsel/usr/include/" LIBS="-lpthread $(LIBS)" stone
    mipsel-linux-uclibc-strip stone

mipsel-pop:
    $(MAKE) CC="mipsel-linux-uclibc-gcc" TARGET=mipsel pop_stone

mipsel-ssl:
    $(MAKE) CC="mipsel-linux-uclibc-gcc" SSL_LIBS="-lssl -lcrypto -L/home/hoge/openwrt/staging_dir/mipsel/usr/lib" TARGET=mipsel ssl_stone

 基本的に s/fon/mipsel/g s/mips-/mipsel-/g しただけ.-I とか -L オプションはもっとスマートなやり方があるはずだが,よくわかんないので安易な方法で逃げた (^^; この状態で,

[mirage ~/stone]# set path = ( $path /home/hoge/openwrt/staging_dir/toolchain-mipsel_gcc3.4.6/bin/ )
[mirage ~/stone]# make mipsel
make CC="mipsel-linux-uclibc-gcc" FLAGS="-O -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL  -I/home/hoge/openwrt/staging_dir/mipsel/usr/include/" LIBS="-lpthread " stone
make[1]: Entering directory `/home/hoge/stone'
mipsel-linux-uclibc-gcc  -O -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL  -I/home/hoge/openwrt/staging_dir/mipsel/usr/include/ -o stone stone.c -lpthread
make[1]: Leaving directory `/home/hoge/stone'
mipsel-linux-uclibc-strip stone
[mirage ~/stone]#

 (文字にすると) あっさりとコンパイル完了.
 出来上がったバイナリを /jffs/ にほり込んでやると,WNDR3300 で無事動作したヽ(´ー`)ノ

2台目 DD-WRT @ WNDR3300

ファイル 126-1.jpg

 ウチの自宅 LAN ネットワークは,有線 BB ルータ + La Fonera (無線 LAN AP) になっているが,そろそろ 11n MIMO + Gb Ether の 無線 LAN ルータを物色中.
 この条件に合うものはいくつかあるが,やはり DD-WRT が入れられるやつがいい.というのも,ルータがフリーズするのを避けるために定期的にリブートをかける,なんて事が簡単に出来るし,中身は素の Linux に近いだけにそのほかにも色々融通が効く.が,この条件がついたとたん,今のところ条件に合うやつがない.

 と,ふと目にとまったのが Netgear WNDR3300 の特売品 (\5,980).まさかね…と思って DD-WRT の対応機器リストを見てみたら,対応してるじゃん! 速攻でぽちっとな(笑) Gb Ether じゃないけど,11n MIMO だし,この値段なら万が一壊しても被害は最小で済む.

 というわけで,今日届いた.まずざっと正規 FW の設定項目を眺めてみる… 特に試すべき機能もないな.というわけで一度もネットに繋げることなく DD-WRT 化決行!
 最初は,筐体あけてシリアル線引っ張り出して,みたいなことを覚悟していたのだが,なんと標準の FW アップデート操作で DD-WRT が入った.箱から出してからわずか 10分足らずで DD-WRT 化完了www こりゃらくでいいわ.

 で,いろいろいじってみる.WNDR3300 は FLASH が 4MB と,LaFonera の半分なので,いくつかの機能が削られているらしいのだが,何が削られているのかわからなかった.あ,そういや CIFS マウントとかの項目がないなぁ.

 で,早速今のルータと置き換えて速度計測しようと思ったら… 外に出れねぇ_| ̄|○ DD-WRT の ssh コンソールでは外が見れるのだが,WNDR3300 の LAN ポートにつないだ PC とかから外に出れない.明日 iptables の設定でも見てみるか.

 仕方がないので,今は単なる AP と化している.

----
追記:
 iptables じゃなくて,DNS サーバの設定がまずかっただけだった orz 今のところ,何の問題もなく動いている模様.さすが,「標準 FW より安定している」と言われているだけあるw

 あんまり意味ないかもしれないけど,有線でスピードテストやってみた.(11n の LAN アダプタ持ってないので,無線はテストできないの(゜ーÅ)ほろり↓のほうで計測しました) PC対PC は,WAN・LAN にそれぞれつないだ PC 同士で iperf で計測,PC対WAN は,普通のブロードバンド速度計測サイトでの計測.

ルータPC対PCPC対WAN
Buffalo BBR-4HG53.4Mbps45Mbps
Netgear WNDR330040.9Mbps40.0Mbps
FON220113.63Mbps12.9Mbps

 素の状態 (セキュリティ関係を全部 OFF にした状態) で実測 90Mbps 出るといわれた 4HG と比べて,WAN アクセスする限りそんなに遅くはないのでまあまあ満足.
 しっかし,FON の遅さは際立ってるなぁw

 WNDR3300 の DD-WRT 化によって,FON2201 は完全に引退.SD カードでもくっつけて Web & メールサーバにでもしようかなぁ? そうしたら今の Linux サーバを引退させられるし.

----
4/5追記:
GW-US300MiniS を入手したので,こんな構成↓で 11n の速度計測してみた.
PC<--11g / 11n / 有線 -->WNDR-3300<--有線-->PC

有線11g (54Mbps)11n (135Mbps)
91.9Mbps9.5Mbps22.0Mbps

 無線 LAN の距離は 1m ほど離して.11n がなぜか 135Mbps でしかリンクできなかった.Buffalo だと「倍速リンク」なる項目があるらしいが,DD-WRT だとどの項目に相当するんだ? たぶんチャンネル帯域: 40MHz だと思うんだけど,それ設定しても 300Mbps にならなかった(´・ω・`) まぁ 20MHz に設定したら 65Mbps でリンクしたから,倍速っちゃ倍速なんだけどw
 で,実際測った見たら,意外とショボイねー.たとえ 300MHz でリンクできたとしても有線にはかなわねぇなぁ.無線 LAN で DLNA 環境構築しようとか思ってたけど,こりゃ無理かも知れんなぁ orz

気分はジョン・ランボー

ファイル 125-1.jpg

 マーセナリーズ2,発売日に買ってきてもう 2回くらいクリアしたw ので軽く感想などを…

●よくなった点・よい点
・さすがに最新ゲーム機用だけあって,破壊モーションが半端なくすごい.特に海上油田基地や橋などの破壊描写は感動ものw
・ある勢力の兵士を殺害しても,即座に友好度が下がらなくなった.本部に連絡されるまで 8秒ほど猶予があるので,その間に連絡者を殺せば OK.つまり,友好度を気にせず殲滅できるようになったw
・ヘリをハイジャックしやすくなった.
・最強ヘリが買えるようになった.もっとも,これはこれでゲームの難易度が著しく落ちてしまうのだが…

●悪くなった点・悪い点
・乗り物から「自分だけ降りる」「同乗者だけ降りる」コマンドがなくなった.そこらへんの兵士を満載した装甲車をヘリで敵地のど真ん中に投入するのがおもろかったのに…w
・エース捕獲専用 MAP がなくなった
・プレイヤーキャラが,ぶっちゃけ誰使っても同じ.
・クリア後,なにもやる事がない.金・武器そのままで 2周目とかできたらいいのに…
・少し距離をとっただけで人物・オブジェクトが消えてしまうので狙撃しにくい.対物ライフルでの超ロングレンジ狙撃とかしたかった.
・主にビーコン系の支援爆撃が,ビーコン投げる→爆弾投下 まで早すぎるっす.車にビーコン貼り付けて特攻とか,むずい.


 最後に,ネットで見つけたおもろいプレイ方法をいくつか.
・燃料タンク爆撃.ヘリで燃料タンクを吊ってターゲットの上に置く→機関砲で点火→逃走 で,きわめて安全かつ安価に建物を破壊できるw たまに置いてあるタンクローリー車のタンクなら落とすだけで大爆発するので,まさに燃料気化爆弾w
・例えば,ゲリラの拠点制圧依頼を受けてから,HVT (標的は UP 等) のところに行ってゲリラの増援をスモークで呼びまくる.まさに共闘気分が味わえるw またそのときにアナコンダを置いておくと勝手に乗り込んで敵を殲滅してくれるので,ハインド飛び交う戦場で戦う様はランボーそのものw

こんないろんな遊び方が出来るのもマーセナリーズの魅力だねぇ.

本気でゴミを作ってしまった

ファイル 124-1.jpg

 GA-MA78G-DS3H はどのように省電力設定しても,USB に常に電源が入る.例えば電源を切っていても光学マウスの LED が光りっぱなし.で,PCI スロット用 USB2.0 カードがあったのでこれにキーボードとか挿してみたら,BIOS でキーがきかねぇ…_| ̄|○

 なので,マザボ上の USB ピンヘッダをリアの PCI ブラケットに引き出すパーツを上の PCI カードを破壊して(笑) 作ってみた.ただし電源部分は残して PCI バスからとるので,PC 電源 OFF 時は USB 電源も落ちるのがミソ.

 で,早速使ってみたら,キーボートとかマウスとか接続がプチプチ切れる…_| ̄|○ やっぱノイズとかまったく考慮してないからかなぁ…

 久々にゴミを作ってしまった.しかも USB PCI カードを破壊してまで_| ̄|○

USB シリアルポート番号を増やさないようにする

 USB シリアル変換ケーブルは,以前に挿した USB ポートと違うところに挿すと,以前と違う COM 番号が割り当てられるので,ほっとくと COM 番号がだんだん増えていってしかも元に戻せない.デバイスマネージャの以下の設定で
ファイル 123-1.jpg
COM ポート番号自体は変えられるのだが,以前のポート番号は「使用中」になっていて選べない.

 なんだかなぁと思って久々に WWatch を引っ張ってきて,COM ポートが増えてしまったときの差分を調べてみたら,以下のキーが見つかった.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter の
ComDB で,32バイトのバイナリ値で構成されていて,1バイト目が COM1~8 の使用状況を示しており,例えば COM1,3,4,5,6 が使用中なら,1バイト目の値は 0x3D になる.

 で,使用したい COM 番号の bit を 0 に落とすことで,上のダイアログボックスで COM ポート番号を元に戻すことができた.

ページ移動