2008年1月30日水曜日

PixelCrew日記 - レイヤのためにその2。作りこむうちに他の機能に目移りするでござる

なんとか、1枚のレイヤと背景をブレンドする様になった。
いろいろいじり倒してるうちに対応漏れがあったミスなども直しながら、次のステップに移ろうかと考えた。
次のステップ・・・2枚以上のレイヤを重ねる。
初期段階から、画像はキャンバスという親クラスが各レイヤをリストで管理する設計にしてるんで楽勝だ。と思っていたら。

レイヤを管理するダイアログが無い。

さっくり作り、コンテキストメニューを実装。泥臭いことが手早く出来ることに軽く嫌悪するw
で、重ねると表示が真っ黒。
画像は黒で、アルファ値が1.0。追加したレイヤが手前なので奥が見えないorz
で、これは直すとして、確認をする環境が無いことに気づいた。
前後のレイヤにフリーハンドで線を描こうかと思っていたんだけど、黒しか出ない。
パレットのバンクはあるけど色が作れない。
ずいぶん前に「まだ先だからとりあえず256色画像のパレットが見れればいい」とか「減色処理の生成パレットが見れればいい」とか言って先送りにしたところだ。
他にもレイヤ単位で位置を動かせる用意があるんだけど、これもやんなきゃいけない。
むかしざっくり考えた案だと、選んでるレイヤとそれを挟んでるレイヤの3枚(奥、カレント、手前)を更にブレンドする。だったような。
更に思い出すと、フォント描画はプライベートフォントをサポートしたいと考えていた気がする。
フォント描画のためのUIは今から作るなー。
どれからやろうかとりあえず悩む状況になってしまったorz

2008年1月25日金曜日

見つけた小ネタ

猫でもわかるプログラミング Windows SDK編 第208章 タブコントロールにエディットコントロールをつける
WM_GETMINMAXINFOが返す値を自分で決めることでサイズ制限があっさり出来るなんて・・・今まで自前でやってた。
悪魔のプログラミングテクニック-SDK編 「Virtual List View (仮想リストビューコントロール)」
仮想リストビューってのも知らなかった。

PixelCrew日記 - レイヤのためにその1。フルカラーアルファブレンド

フォント描画も必要だけど、レイヤも欲しいよね。
フォントは書き込んだ後に動かすよね?
ということで、レイヤを先にはじめることに。
昔、8ビットカラー(256色)をBitBltのラスタオペレーションで透過したな。あれをマスキングじゃなくて、アルファブレンドに使えんかと寝ぼけた事を考えて、やるだけやってみたらやっぱりダメだった。
RGBの値をマスクすることはブレンドすることは違うよね、青が赤にもなるorz
ということで、GetDIBitsしてごりごりブレンドするコードを書く。
DirectDraw時代からこの構成やってるな。今の時代にこんな泥臭いことやってる人はいないだろう。
・・・GBA/NDS HomeBrew向けBMPコンバータとかでやったな。意外にいるかも。
閑話休題。
とりあえず、複数枚のレイヤを重ねるのはまだ先なんだけど、画像表示のロジックを次のように変更。

StretchBltなどAPIを駆使して比較的楽に表示

アルファ値のビットマップを作り、それと合成したものを表示
で、変更したら早速表示が重くなる。
InvalidateRect/ValidateRectをがんばって使ってみたところが原因だった。
がんばったコードをほとんど消してInvalidateRect→UpdateWindowで一発更新する形にして更に高速化。
体感的に余裕のある速度になりました。むしろ早くなったorz
それにしても、技術的なことはいっさい書いてないなー。

2008年1月24日木曜日

PixelCrew日記 - ポップアップコンテナを実装してみる、の巻き

先日、ピックアップした項目を実装し始める。
とりあえず、ポップアップウィンドウに各種ツールダイアログをしまいこむコンテナ的ダイアログを作る。
現時点でも十分邪魔なツールダイアログが多いので。コード上で位置あわせを毎回書くのにうんざりしてきたし。
といっても、プレーンなダイアログを作ってそいつをオーナウィンドウにしただけ。
Enter/ESCで閉じるし(再表示不可)、そのダイアログ内で移動できる(触れない場所まで移動すると助けられない)。
とりあえず仕舞い込めたのでよし。
なんか部屋の掃除とよく似たアバウトさを感じる・・・。気のせいだけど。

2008年1月22日火曜日

PixelCrew日記 - 次にいるのは何だろう、の巻き

大味ながら実装した領域選択とトリミングで便利度が上がったPixelCrew。
便利度が上がったハズなんだけど、いまいち自分が乗り換え切れていない。
なんでかと考えたんだけど、まだまだ機能不足な気がする。
では、どんな機能を作れば乗り換えるようになるのか、軽く思いついたものを挙げてみた。
- レイヤ対応
- フォント描画
- アンドゥ/リドゥ
- ポップアップウィンドウを格納するコンテナポップアップ
- コンテナポップアップのドッキング
本当は全部上げようかと思ったんだけど、半ベソになりそうなのでこれぐらいにしておいたんですが、それでも辛そう。
レイヤってどうやるの? と、とぼけつつも重ね合わせの方法を暇なときに考えたりしてます。
アンドゥ/リドゥも双方向リストで実現できないかなとうっすら思っていたり。
んでもって、実装のボリュームを考えるとそれだけで疲れてしまう。
歳なのか一時的なものなのか・・・。

dsgba N-Card

NDS開発をしていて、PC→カードリーダ→マジコン→NDSというメディア移動が面倒なので、いわゆる1:1タイプを買ってみた。
とりあえずN-Card系との事なんだけど、DSGBAという表記もある。
クライアントはUFPEX(UltraFlashPass EX)のやつが対応してる。
しかし、先日作ったOgg再生テストで音が出ないorz
今まで使ってたものではちゃんと動くのに。
無印NinjaPassに変わる便利アイテムになると思ったのに・・・。

2008年1月16日水曜日

Vistaが重いのを見直す、の巻き

冬場はほとんどコタツでノートPCをメインに使っているんですが、デスクトップマシンも実は動いています。
iPodの母艦にしているのでiTunesにPodcast取りに行かせたりさせてるぐらいですが。
で、ふと思った事があります。
Aeroの中でもAeroグラスは外してもいいかな、と。
某コミュの勉強会でプロジェクターに映されていたデスクトップはAero Basic(透過なし)だったように覚えています。
というのを思いつき、設定の切り替えで動作に影響が出るかテストしてみました。

やったことその1 - AeroをGlassからBasicに
気持ち軽くなった程度? たくさんウィンドウ開くと変わるかも。

やったことその2 - ClearTypeをオフに
あまり変化なし。
これによってメイリオの見栄えががっかりするぐらい落ちる。そのままでもいい気がする。

やったことその3 - サイドバーにある時計ガジェットの秒針表示を無くす
常時15~20%ぐらいだったsidebar.exeのCPU負荷がゼロに。これが一番効果的かも。
書籍Windowsプログラミングの極意 歴史から学ぶ実践的Windowsプログラミングや原著であるblog"The Old New Thing"でも書かれています。
The Old New Thing : Why doesn't the clock in the taskbar display seconds?
この現象がまだ残っているのかは解らないけれど、秒針は出すなということか。
夏場にsidebar.exeの挙動を疑っていた時期がそういえばあったような。
というか、サイドバーも要らないか? いやいやせっかくのワイド液晶に素敵なガジェットを・・・時間の問題だorz

ちなみに、マイクロソフトのAero紹介の締め。
"Windows Aero では、グラフィック ドライバ関連のシステム障害や Stop エラーもほとんど発生しません" ... こいつは嘘だ。

2008年1月15日火曜日

ドキュメント書きを楽に出来ないかと思う愚痴

ドキュメント書いてます。
WindowsアプリのGUI部分。
呼び方は方々でまちまちですが、コントロールのレイアウト書いたり、それとクラスを結びつけるコードレベルの話を書くやつ。詳細設計書?
コントロールのレイアウトを書いて、関連付ける変数を決めるのにClassWizard(もしくはそれ相当)を使っているので、個人フェーズがプロトタイピング的な進め方になります。
そうすると仕事の流れは次のようになります。

ソース試作→ドキュメント作成→(紆余曲折)→改修→ドキュメント改修(ここがウザい)→(続く)
ドキュメントは、高い確率でWordを使います。
Wordは、手練(てだれ)が使えばそりゃあもう素敵なビジネス文書が出来るんでしょう。
書き直しがめっちゃ面倒だけど。
自分もそれなりにWordで揉まれてきた方ですが、Wordのファイルを書き直すのはとにかく大変。
エディタでテキストを直すのだって大変なのに図表まで直す必要があるときはいつ眠くなってもおかしくない。
Wordは、普段キーボードでタイピングしているところに、メニューを開いて操作しないといけない仕事が割り込みます。
呼び出すべき項目やキーボードショートカットを覚えていれば、マウスに持ち替える手数が減ると思うのですが、その域に達するのは大変です。
方々でみかける発言で、同意できる意見に「ソースが仕様書である。ここにはウソは無いし真実である」というものがあります。
この発言を盾に「ドキュメントなんてみんな書けないもの」と開き直っている人もたまにいますが、それではいけないという意見にもうなづけます。
とはいえ、書かなくていいなら書きたくないのがドキュメント。
ソースコードを放り込んだら各種コメントを抽出して引数と返り値を読み取ってくれるツールって無いですか?
変更がかかったときは、そいつに放り込んで常に最新のドキュメントの雛形ができるの。
みんなきっと思っているはずだ!!
んでもって、ツールはあるんだけどとても手が出ないような値段だったりするんだ。
検索して大概見つかるのはDoxygenとSandCastleだけという現実を否定したいんです。熱くなってしまいましたごめんなさいorz
とはいえ、無いなら作ろうと思った人だってきっといるはず。自分も妄想ぐらいした。
ソースのパースがどのぐらい面倒かを考えるあたりで断念してしまうんだけど。
ソースがパース出来たとして、それをWordのVBAにでも渡せばそこから雛形は作れると思う。
パースを外部で行ってXMLか何かに保存。
で、C#と.NET FrameworkあたりでXMLを読み込んでファイル出力できませんか?
つかSandCastleがサポートから外すほどなんですか。C/C++というのは!?
と、鼻息がまた荒くなったところでyaccを見つけましたorz
これ使えば出来るんじゃあ・・・と妄言を吐くだけにしておきます。誰か作ってください。
# 最悪の締めですよ? 当然覚悟しております

2008年1月10日木曜日

2.1チャンネル ホームシアターシステム

厳密には買い物ではありません。
おさがりをもらいました。
今まで、\780-のチープなスピーカーをXbox360に繋いでいたのでこれを置き換えてみました。
エースコンバット6をやってみたら(相対差として)とんでもなく迫力ある音になった。
RCLという広範囲の敵機を攻撃できる兵装で爆破音が重なる状態になるとこっちがびっくりする。
Burnout Paradiseの体験版もやってみたらクラッシュ演出の音がリアルすぎて怖くなったw
ただ、サブウーファーの置き場所に困ってます。
こたつゲーミングだとこれがネックかも。

2008年1月7日月曜日

PixelCrew日記 - 案の定仕事に使えるレベルじゃないよ、の巻き

最低限の実装で大喜びしていたのもつかの間、まだまだ使い難い領域選択とトリミング。
選択領域の手打ち調整ダイアログを実装途中で持ってきたのが悪かった。
選んだ領域の値まで出る。スピンボタンも回せる。変更は領域に反映されないorz
領域選択がキマればトリミングは便利なので、がんばって使うけど。
ここから始まる、ここから始まる・・・と心の中で泣いてたけど。
これではダメだね。

さらにこんなものを目にしてしまうともうだめだorz
2Dスプライトアニメーションデータ作成ツール SpriteStudio
impressにもリリースのお知らせが載るツール、OPTPiX iMageStudio。
別に対抗意識とか不要なんだけど。

仕事始め

寝こけてるうちにCES2008が始まっていたり、MacWorldが間近に迫っていたり今年も楽しそうです。
CESでは、diNovoが気になったけど、指が太い人には向いていない感じがして萎えた。
Mylo(COM-2)は依然として無駄スペック。アメリカ向け端末な感じ。日本で売るときにもWiFiスポット使用権が付くのかな。
これをそのままPSP2にすればいいのに、と無責任発言をしてみる。
そんななか気になったネタ。

アップルMac Touch、MacBook Touch「流出」ギャラリー - Engadget Japanese
touchというよりもDSだろこれは。

Windows Mobile 7「流出」スクリーンショット:画像認識&マルチタッチ搭載? - Engadget Japanese
iPhoneと比べざるを得ない・・・。

そんなわけでCESで発表されたものに文句言いながらEngadgetみてます。
Xbox Liveのお詫び配信タイトルはなにかな?

2008年1月6日日曜日

PixelCrew日記 - トリミング機能実装、の巻き

NDS開発の難所だったところが解決したので、何か作ろうかと思ったんですがツール整備をさっぱりしてませんでしたorz
このツール、実は仕事場でも使っていてトリミングが欲しいなと思っていました。
が、実装方法を考える気力を欠いていてようやく実装を始めました。

トリミングを実装するためには領域選択を実装しなければいけません。
領域選択は、始点と終点を取得するところまで作ってありました。ここからを考えていませんでした。
領域の管理と作成にはリージョンを使うことにしました。
短形はCreateRectRgnでいいのですが、円弧はパスAPIを使う予定でいます(まだ実装してない)。
とりあえず短形選択だけの領域選択が準備できました。
このリージョンのサイズはGetRgnBoxを使って取得します。
このサイズにトリミングするようにします。
ツールが少し便利になりました。
カーソルキーで選択領域を移動できるようにしたり、領域を手打ちで指定できるようにしたいという、当初から思っていた昨日を作るためのスタートラインにようやくやってきました。

2008年1月5日土曜日

Red Vinesってお菓子

Red Vines- THE premium quality licorice - Home
マイクロソフトの技術者がこれを食べながらWindowsとかを作っていたらしいお菓子。
アメリカの珍菓子「REDVINES」ってナニ? | エキサイトニュース
紹介記事はこれぐらいなんだけどマイクロソフトとのつながりを書いているところが皆無。
本当にそうなのか? そして日本でこれは買えるのか?
4ポンドは要らんけどwww

2008年1月4日金曜日

メタルスラッグ3(XBLA)

Xbox陣営は1月2日からタイトル配信する。すごい。
# 毎週火曜日がバーチャルコンソール配信日なんですが、1月1日は配信なしでした
そんなわけで、メタルスラッグ3が配信されました。
アーケードでたまに見かけたらやるんですけど、最初のボスが倒せれば好成績だったりします。
半ば勢いで買ったんですが、転んでも泣かない人は待ったほうがいいかも。
自分の場合、難易度のことをさっぱり忘れていて完全版にして数ゲーム遊んだところで決断が早すぎたかなと思いはじめました。

・・・その割にハイスコア300万点を目指してます。
難易度落として無限クレジットにして店で出来ない連コインを心行くまでするのが、このタイトルの遊び方のような気がします。
あと、気になった点として「バルカンFIX」に関する説明が無いです。
SNKのタイトルは細かいところが抜けてるなー・・・こんな便利機能の説明をしないなんて。

バーチャファイター5(Xbox360版)

去年の暮れからアケ版を始めたこともあって買いました。
とりあえずデュラル出しました。
アケ版をそれほど熱心にやっていたわけではないので、オンラインでラグが出るぐらいのアラしか気になりません。
逆に言うと、オンライン対戦を期待して買うと不満が出そう。
コントローラによるコマンド入力は、ショートカットキー(LB、LT、RB、RT)を併用すれば困らないと思います。
dojo(トレーニングモード)で選んだキャラの持ち技をすべて出すタイムアタックがあるのですが、5人のキャラで完走できました(できると実績)。
他にも実績がオフラインだけでもすべて解除できるところなど、地味に工夫されています。
# そのかわり、ものすごい作業になるけど
そんなわけで、悪い買い物ではないと思います。

彼が・・・神のグラス。漫画「バーテンダー」

久々に古本屋で本を買いました。
サイバースペースカウボーイ(以下、CSC)で一時期話題にあがった漫画「バーテンダー」の1巻と2巻です。
詳しい話はwikipediaとかで探してもらうとして、それなりに楽しめました。
なんというか、料理漫画的な薀蓄とそれを通じて描かれるドラマ、みたいな感じの漫画です。
CSCの番組内ではカクテルのレシピをiPodのプレイリストに例えたりGeekだったら笑わずにはいられない引用をしていました。
もちろん他のシーンでも使える"ネタ"です。
「世の中には、絶対にお客様(*1)を裏切ってはいけない仕事がふたつあります。
ひとつは、医師・薬剤師。では、もうひとつは・・・バーテンダー(*2)。
どちらも処方(レシピ)ひとつで、毒にも薬にもなるものを売っていますから」
*1と*2を入れ替えるだけで転用できそうです。
で、Webではどんな風に紹介されているのか調べてみたら、意外にもgoogleの上位がアニメ化したときのニュースで埋まってました。
最初にヒットした個人blogでは「深夜のアニメでお洒落なのがやってます」的な紹介で、漫画の紹介をしていたところはあらすじをなめているだけ。
茶化す人はいないですね。CSCがやりすぎに思えてきました。
でも、CSC聴かなかったら読むまで至らなかったしなー。
とりあえず知る人ぞ知る漫画的なポジションの作品ですが、楽しめます。
各話で語られるカクテルの名前のルーツに関する薀蓄は面白いですしね。

年末年始にやったこと

- NDSプログラミング(過去にうまくいかなかったtremor(libtremor)によるogg再生)
- 久しぶりに漫画読んだ(サイバースペースカウボーイでネタになってた「バーテンダー」)
- Xbox360「バーチャファイター5」
- XBLA「メタルスラッグ5」
- 部屋が寒くて風邪を引く
正月らしいことは一切やってないorz

2008年1月3日木曜日

長樂萬年2008

遅ればせながら2008年になりました。おめでとうございます。
スラドがめずらしい挨拶でスタートを切っていたので、自分もよい挨拶が無いか探してみました。
てことで、"ちょうらくまんねん"。
「楽しいことの、久しく限りなきこと」を表す言葉だそうです。
去年まで(複数年)は仕事方面でどうにもならない待遇に縛られていました。
ただ、それから脱する方向に進みだしたのでいろいろ楽しくなるはず、と思っています。
・・・たぶん、楽しくなるよ。あ、じゃなかった。楽しくしていこう。
そんなわけでよろしくお願いします。