MEMO
1999/05 -

1999/05/30 - Movie Player

AMIが動かなくて同じようなものを作ってやろうかどうか困っていたんですが,後輩のDon(月華2斬鉄で31連,ダメージ495はやりすぎ<ゲージ約4本分)がなんとそれ以上に凄いプレイヤを見つけてくれました.その名はMeimi
■各種エフェクトをDLLで提供もうかなりの数のエフェクトが開発されています.インターフェースも結構使いやすい.
■で,どうも少しX68臭い(?)なあ,と思いつつヘルプを眺めていると,やっぱそれ臭い記述が(だって (ぉ とか ^H とか まj波動った用語(死語)を頻繁に使ってるんだもん)
■蜂の巣再生とかもろX68のmmvp(特殊再生を可能にした画期的な動画プレイヤ)意識してるとしか思えないし.あとエフェクトの組み合わせとか複数Movie同時再生+VJプレイをやられると,完全に作る気力が萎えますが,まだそういう予定ないみたいなので,プログラムの開発は続行するのだった(とか言いながらなんもやってないやん(涙>自分)


1999/05/24 - about VJ softwave

gridmanさんが2次元DCTの俺MotionJPEGをVJソフトに発展させて面白いソフトを作っています.
■だけど独自フォーマットを使わなくてもDirectShowを使えばある程度までは似たような事は簡単にできます(とりあえず2つのムービー再生+合成は試した).しかし逆転再生だとか特殊なことをやろうとすると途端につまずきます.
AMIなんかだと変速再生とかをやっているのでもしかしたらDirectShowでも気合で何とかなるのかもしれませんが.あまりいじってないのでよく分からん(せっかくの日曜だったのに友達が来て月華2して潰れた.しかも初プレイ相手にやられまくる僕って一体何者?)
■それとαブレンディングとかってDirect3D使ってやるとかなりやりたい放題なのでは?という素朴な疑問があるんですが一体どうなんだろう.
■Direct3Dってあまり好きじゃなかったんだけど,IM(直接モード)の仕様とサンプルソース見てたら案外面白そうで最近興味が出てきてしまってハードに頼りまくるのも悪くはないかなあ,なんて思い始める始末.
■って,3Dアクセラ使いまくるとChannel3的な奴になりそうだな,それって(^^;;
■それはともかく暇があったら僕も似非VJソフトもどきを作るぞ,コンチクショー.ってなんか今度の高専プロコンはそれで行こう,って話があるので下手すると強制的に作る羽目になるんですが(爆(にしても「若きブレインによる新世紀への序章」ってサブタイトルは勘弁して欲しいなりよ>プロコン)
■しかし先駆者がたくさんいるので全然独創性がないよな>VJソフト.予選落ち決定か(ぉ(あ,だけどサンプルの料理データベースの方がありきたり過ぎるし問題なしか?--;)
■それはともかくやっぱ作るなら9finger(AMIGAの古典的名作DEMO)みたいにリズムに乗った勢いの有る展開ができて,それでいて「ラララ無人君(あんま商品名を連呼するとまずいんで,スクラッチして規制を逃れていたらしい.ホンマかいな)の如くノリノリ(なのか!?)なムービーが作成できる奴がいいなあ〜(120%無理+胡散臭い事言ってます)


1999/05/20 - SC-55mk2

■ここ1年ほどコンポの上で放置されていたSC-55mk2を最近PCに繋げました.
■確か買ったのは6年くらい前,中学生のときだったと思いますが,はっきり言ってSC-55mk2程度の音色の数とエフェクタでは1年も聴きつづけると流石に飽きます.
■買って半年くらいは馬鹿みたいに聴きまくったりしましたが,結局最終的には音に飽きてX68の内蔵音源(FM8ch+ADPCM)ばっかり聴くようになっちゃいました.
■しかし,久しぶりにそのSC-55mk2(とX68)で当時良く聴いていたRCPとかを聴くと,飽きた音とは感じず,そこはかとなく懐かしい音を感じて,じーんとしてしまいました(音源モジュールでもやっぱ楽器は楽器なんですねえ)
かみき君とかBrotherNaoさんとか子龍さんとか染之介さんとかDirty Hayarさんとか(だんだんマイナーになっていくのは気にしてはいけない),飽きるのを通り越すぐらいまで聴いたのが懐かしいです.
■だけど最近はあまりMIDI聴かないなあ.僕の所有しているSC55mk2+YMF724+SB16(OPL)の48part(?)を極限まで使ったデータとか(一体どんなデータだよ)があれば喜んで聴くんですがねえ.
SC-8850でも買え,とか言われそうだけど,しょぼサウンドカードでもそれなりの音源を積み,ソフトシンセでもそこそこ聴けるようになった時代に聴くためだけには外部音源は勿体無さ過ぎるのでやだし.
■ということでこれからの標準MIDI音源はYMF724にしよう友の会をここに結成いたします(嘘)


1999/05/15 - 同窓会

■2ヶ月前ほど中学の同窓会があったけど合宿に行っていたので行けなかった(別に行きたいとも思わないんだけど)
■当分もう無いだろうと思っていたらなんと今日何故か同窓会をやることになった.一体どこの世界に2ヶ月ごとに同窓会やる馬鹿がいるんじゃい.と思いつつも参加.
■高校卒業して大学行っているやつやら会社勤めているやつやら,皆変わったなあと思いつつ,最初の印象は「柄悪くなりすぎ〜」(それに加えてあまり関わりの無かった女子は顔は何となく分かっても名前が全然思い出せなくて死んだ)
■喫煙率8割以上行くし(男に至っては禁煙なのは自分以外には一人しか居なかった),あの頃は可憐だった女の子も今やタバコを片手に生大を飲む時代.うーーん,同窓会って怖いですね.
■こんな村 で3,4時間ほど潰した後2次会が待っているのだが金欠の僕はリタイア.寒いとか言われつつも他にも4,5人は帰ったのでつられて帰ってしまう.
■帰る途中仕事があるからと先に帰った某T君とついさっき帰った某?さん(名前忘れた)が一緒に○Xへ入るのを目撃....
■...........................。
■いや,まあ,別にいいですけど.いや,いいんだけど.だけどねえ.


1999/05/11 - Windows98インストール

■今更ながらWin98を入れました.理由はFAT32が使いたいから(いや,ホントそれだけしか理由が無い)
■しかし入れようとしたら空き容量が足りません攻撃.よく見るとCドラの残りは40MB程だった(いつものことですが)
■仕方ないので1GBしかないCドライブをフォーマットしてDOSからインストール.DOSのくせになかなか頑張っているのにちょっと感動している間にインストールが終わる.ドライバの組み込みもスムーズに終わる.あまりにもすんなり行き過ぎているので怖くなる.
■調子に乗って,2GBのDドライブにVC6を入れるための空きを増やすべくFAT32化.難なく成功!70MBの空きが500MBくらいに増えてびっくり!FAT32関係の技術者に感謝(本気で偉大な人だと思った.だけど欲を言えば1クラスタ=1KBモードとか用意してくれるともっと有難いのに<いつの時代のことやら)
■でVC6も入れてあとは環境再構築のみ!とLiteStepを,退避しておいたはずのMOから復帰しようとしたらなんと消えているではないか!大ダメーーージ!
■というわけでカスタマイズをやり直すことに...とほほ,最悪〜
■しかもカスタマイズするのが久しぶりなのでなかなか上手くいかない.特にPopupに新しいフォルダを追加してもなぜか表示されない現象にノイローゼ気味になり,その上なぜかNEOGEOのROMを詰め込んだCDROMが行方不明に.今日は厄日だよ,全く.
■ところでVC6なんですが,なかなか凄いです.実行途中でコンパイルして再開とかのアクロバットやら,関数の型やクラスのメンバを随時教えてくれる機能(なんとユーザ定義のクラスまでちゃんと管理してくれている)とか,プログラムデバッグ/入力環境としてはかなり無敵なのでは.
■ただ結構コンパイラにバグがあるとか聞くので少し怖いかも.最適化するとちょっとまずいことが起きることがあるようです.しかも致命的らしい(ぉ<参考
■そういや最近注目しているのがgridmanさんの俺peg.この人いつもアツイことやってるんですが,また面白いことを始めたようです.ああ,いいなあ2次元DCT.
■僕も環境整備がうまくいったらその辺のプログラムで遊ぶぞ,こんちくしょー


1999/05/09 - 激打 タイピング奥義 北斗の拳

■春休み,秋葉原に遊びに行ったときに釘付けになったのが激打というタイピングソフトの宣伝VTR(秋葉じゃなくてもどこでもやってましたが).北斗の拳のストーリに沿ってタイピング練習をすると言う馬鹿馬鹿しさに加え,「おまえはもう打てている」(うろ覚えなので少し違うかも)の決め台詞のどうしようも無さといい,十分マッドビデオとして通用するそのセンス.
■というわけで友達がDLして焼いたのが回ってきたので(1度やって終わりなので買う気には...)僕もやってみる.
■まずストーリーが凄い.ここを見よう.
■そして,内容.ホームポジションだとかその辺の初心者向け説明から始まり,もぐら叩き的練習,単語を打つ練習,と続いて最後は短文を打つ練習.
■基本的に敵が出てきて制限時間内に上手く打てれば敵にダメージ.ミスったり手間取るとこっちがダメージを食らう構成.連続で正解していくと奥義ゲージが溜まっていき,奥義が使えるようになります(一撃で敵を倒せる).ちなみにラストの拳王は奥義でしか倒せないのでミスるとかなり痛い.
■難易度は普通にブラインドタッチが出来る人はストレートでクリアできるはず.
■と思うけど,このソフト "F" でハ行打てないとか "J" が使えないとかかなり融通が利かなくて普通に文章を打つつもりでやると僕みたいなひねくれた打ち方をする人は素直にクリアは出来ません(多分)
■少なくとも僕はH使わずにF使うし(ホームポジションのFを使ったほうが理に適っていると思う),「じ」を出すときは "JI" だし,なぜか「つ」を"TSU"とヘボン式で打ったりするので,下に表示されるローマ字を日本語として認識しないで打たないといけない.
■しかし,ラストの短文を日本語を見ないで打つのってかなり苦痛.2文字連続で間違えると誤答になるんだけど連続で打ってるんだから結局1つ間違えたら大抵アウト.やってられねーー.と,死にそうになりながら,3回目のトライでようやくクリア.ぐはあ.
■ああ,やっぱ「じ」は"JI"で打つべきだよ."ZI"だと小指が痛くなる.
■といっても初めてやる人にはこういう基本の打ち方で覚えないとIME/FEPの違いでハマることになるので,これはこれでいいのかもしれませんが.

■ところで僕がブラインドタッチをしようと決心(?)したのは,テレビでアメリカの職業訓練所で黒人のおっさんがスゲースピードでブラインドタッチしていたのを見たのが切っ掛け(中学生のとき)
■単に「なに〜,こんなおっさんでも当たり前の如くできるのか!?」と危機感を抱いただけなんですが,それから一体何をすればいいのか図書館で本を借りてきて見て,練習してみたりしました(何て健気なんだ!)
■独学なので数字打ちとか右手小指上方面(?)とか弱いし速くはないとか弱点が有るので,今のうちにまともな打ち方を覚えておいたほうが良いかもしれないな.

■ところでタイピング関係で変なソフト発見!なんと常駐して日々日常のタイピング状況を記録/分析すると言うタイピング観測ソフト きみどり.指別の速度が分かったりなかなか面白いです.いや,見てて楽しいので是非ダウンロードしてください.自分の指の特性が分かります(僕は右より左の方がタイプが平均すると遅いみたい.やっぱ利き手に関係するのかな)
■これ使えばレポートなんかも結構楽しんで書けるかも!(あ,今日提出だよ.残り6時間)
■タイピングソフトよりもこういうソフトで常日頃鍛えたほうが楽しいし役に立ちますね,きっと.ま,所詮タイピング練習ソフトなんて表向きは実用でも実はただのゲームに過ぎないと僕は思うし(これで完璧にマスターできた!なんてソフトは有るんでしょうかね).そういう意味では激打はその点を正しく理解していると言えるでしょう(そ,そうなのかッ!?)


1999/05/05 - 驚異の40バイトサインジェネレータ

■小さいデモプログラムを作るときに困るのがサインテーブルの生成です.
■Cで一般的なのはmath.hのsin関数を使うと言う手ですが(一般的というよりそのままやん),無駄なコードを一切含みたくないときは外部ライブラリには一切頼りたくありません.という訳で,最近なかなか粋な方法を見つけました(実はずっと昔見つけたのを掘り起こしただけだったりする)
■なんとたったの40byteでコサインテーブルを生成するアセンブラコード(もちx86ですが)があるのです!
■作者はあのNoooNのKarl.Starsで度肝を抜いてくれた人です.
■で,どんなコードなのかと言うと...

 --(sin.txt)-------------------------------------------------------

  ここに、ACE BBSの広告の中のサインテーブルジェネレータに関しての
  説明があります.
  使用される方法は再帰的なサインsythesisです.nが1周期の値の数であ
  る場合、前の2つとcos(2a/N)の値だけで、すべてのサインの値を計算す
  ることができます.
  Here's some  explanation about the  sinus table generator in the
  ACE BBS advert.
  The method used is a recursive sinus sythesis.  It's possible to
  compute all sinus values with only the two previous ones and the
  value  of  cos(2a/N) , where  n  is the number of values for one
  period.

  It's as follow:

  Sin(K)=2.Cos(2a/N).Sin(K-1)-Sin(K-2)

  or

  Cos(K)=2.Cos(2a/N).Cos(K-1)-Cos(K-2)

 cosテーブルのはじめの二つの値が1とcos(2a/n)で、この二つの値で
  続く全ての値を計算できるので、後者を使った方が最も簡単です.
  The last one is easiest to use , because the two first values of
  the cos table are 1 & cos(2a/n) and with this two values you are
  able to build all the following...

  Some simple code:

  the cos table has 1024 values & ranges from -2^24 to 2^24


  build_table:          lea    DI,cos_table
                        mov    CX,1022
                        mov    EBX,cos_table[4]
                        mov    EAX,EBX
  @@calc:
                        imul   EBX
                        shrd   EAX,EDX,23
                        sub    EAX,[DI-8]
                        stosd
                        loop   @@caslc


  cos_table             dd     16777216     ; 2^24
                        dd     16776900     ; 2 ^24*cos(2a/1024)
                        dd     1022 dup (?)




                               Enjoy  KarL/NoooN

---(sin.txt)------------------------------------------------------
技術的/プログラミング情報: Technical/Programming Infoを参照.思いっきり直訳ソフト使ってて笑えますが,絶対読んで損はない内容です.

■いやあ,数学って凄いですね.というより不思議ですね.なぜこれで良いんだろう.なんとなく正しい値が出てきそうな気はしますが,うーん不思議.
■しかし,このソース少し怪しいですね.
build_table: lea DI,cos_table
って
build_table: lea DI,[cos_table+8] ;[]はどうでもいいとして
が正しいのでは??(このままだと変なアドレス参照しそうなんで)
■ついでに mov EBX,cos_table[4]mov EBX,cos_table[-4]が正しいと思うんですが.まいっか.気にしないでおこう.
■で,精度を調べるため,ちょっと修正してこのルーチンを使ってテーブルを生成して画像の回転をさせてみました.
■demoで使用するには完璧な精度と言えます.これを使わずに32bit整数(16:16固定小数点)でsinをマクローリン展開させたのよりは遥かに精度が高いです(そりゃそーだ).というより自作マクローリン展開はへぼすぎてただの回転でさえも不自然でした,ええ(笑えねー,展開間違えてたかも<ってホントに理系の学生かよ...sinくらい中学生でも展開しそうだぞ)
■じゃあ最近のIntroDemoはどうやってんの?って話ですが,案外素直にfsin(cos)+fistを使っている場合が多いみたいですね(ガビーン,私の苦労は?).あまり調べてないので曖昧にしか言えませんが.だけどこのKarlに似たコードを使用している雰囲気が漂うdemoもありました(4kIntroでさえ解析は困難を極めていたりする,って素人なだけじゃん)
■というわけでですね,sinテーブル作るとき,あなたならどうします? と唐突に街角で聞かれたときに(聞かれないって),この公式を使うと「むむ,おぬしできるなッ!」てな感じで良いかもしれません(わけねー)



■ちょっとこの式を考えてみたんですが,よく見ると微妙にどこかで見た事の有るような公式なのです.そこでキュピーンと分かりました.

  cos(a-b)+cos(a+b) = {cos(a).cos(b)+sin(a).sin(b)} + {cos(a).cos(b)-sin(a).sin(b)}
                    = 2.cos(a).cos(b)
  cos(a+b) = 2.cos(a).cos(b) - cos(a-b)

  ここで a+b を Kと置きます.

  cos(K) = 2.cos(K-b).cos(b) - cos(K-2b)

  b を 2a/N (Δθ)と置きます.cos(K+xb)を配列Cos[K+x]と考えます.

  ∴ Cos[K] = 2.cos(2a/N).Cos[K-1] - Cos[K-2]

■sinの方も全く同様に求められますね.
■そういやaっていうのはπの事ですかね?それなら辻褄合うし(今更何を)
■証明してみれば実は簡単な高専1年生程度の問題ですねえ.しかしこれを思い付いてcos生成ルーチンに結び付けたKarlはやっぱり凄いなあ.
■加法定理を習ったときに「なんじゃこんな公式.ゲームにも何にも使えないじゃないか」と馬鹿にしたものですが,やっぱり頭の良い奴は考える事が違う!意外なところで意外な公式が必要なもんなんだねえ,とWin 4kb Introを見つけてからやってる事が3年程溯(さかのぼ)ってしまった事に気づいたのであった.


1999/05/01 - Windowsとアセンブラ

■最近,オツなdemoを見つけました.なんと windowsの4KBintro !
■もしかしたら結構昔から有るのかもしれませんが僕は初めて見ました.
■その名もAnatyda. Mekka99 PC 4K INTRO 部門で見事に8位(ドベ^^;;;;)
■やってる内容はトンネル(視点移動,フォグ有)と適当な拡縮,2Dメタ+置き換え(なんて言えば良いのかな)くらいなんですが,最近友達が何故かトンネルの最適化にハマってた事も有って結構興味深く見れました(トンネルも高速化しようとするとなかなか奥が深い...らしい)

Anatyda トンネル(視点移動+フォグ有)
■Windowsプログラムを組んだ事がある人なら分かると思うのですが,何もしない WinMain(){} 的なソースだってコンパイルすると20KBくらいになってしまいます(VCでの経験).それなのに何故ここまで小さく出来る?
■じゃあ,何もしないくせに20KBも何をしてるのかと言うと,ランタイムなどの初期化をしているのです.
■VCを持っているなら適当なプロジェクトをDebugビルドして実行して,コールスタックを見てみましょう. WinMainの前にWinMainCRTStartupなんてのが呼び出されているのが分かります.
■というわけでそれを殺せば見事に2KBくらいに縮みます.詳しくはGoto-Ta HomePageProgramming Tipsを参照(^^;;
■で,その2KBを見てもまだまだ,スカスカ.これはPEヘッダのせいも有るのですが,セグメントの境界がやたら空いているように思えるので,そこはアセンブラでガシガシ,アコギな手を使って最適化するんでしょうね.

■というわけで,僕もWin32 Asmに挑戦.無一文でもNASM(フリーのアセンブラ)でWin32を使うキットを落としてこれば今すぐにでも始めれます.
■なんか凄く無駄な事をしている気もしますが,人生なんて無駄の連続!無駄こそ美なのだ.と勝手に納得してプログラムを作ります.APIレベルのWindowsプログラムと片言のx86アセンブラが分かればサンプルも付いてくるので案外簡単に(簡単なプログラムなら^^;)作れてしまいます.
■じゃ,早速簡単なデモでも作ろっと.と意気込みますが,windowにvramデータを書き出す部分まで作ってこれから作るルーチンの予想される面倒臭さに力尽き,デモ部だけCに変更(おいおい).デモと言っても出力テストが目的なので適当に画面をぐちゃぐちゃにしておしまい(だんだん妥協が酷くなってくる).nasmで出力したobjとvc(cc)で出力したobjをalinkでくっ付けていっちょ上がり!
■と,たったそれだけの事なのにEXEは6KB近くまで太ってる!!中を見るとかなりスカスカ.
■リンカがぼけてるのか,複数のobjをリンクしたのが不味かったのか,テストプログラムで4KBを軽々越える大失態.果たしてmitsumanに明日は有るのか!?(とりあえずLoadLibrary+GetProcAdress+エントリナンバでimportするべきだったのは反省)
■続かない