090331小言(2)
〇プログラマの履歴書の見方。
・テクノロジー関係の認定コースを受けている -7点
・経歴の一番上がVB。-10点
・インデントとタブが混在。-15点
プログラマは履歴書をどう見るか
How a programmer reads your resume (comic)
・・・・・・
余りにも自分の価値観と同じで笑った。
〇プログラマの履歴書の見方。
・テクノロジー関係の認定コースを受けている -7点
・経歴の一番上がVB。-10点
・インデントとタブが混在。-15点
プログラマは履歴書をどう見るか
How a programmer reads your resume (comic)
・・・・・・
余りにも自分の価値観と同じで笑った。
「 『不可能』の90%は、実際には可能で、残りの10%も時間の流れと技術革新で可能になる。」
「Kojima Productinos GDC 09 Keynote」
1
more »
今年のGDCで公開されて、各所で話題になっているOnLive。
ユーザーがゲームをやっている間、サーバー側でそのゲームに関る
計算(レンダリングやら、ゲームロジックやら、とにかく全部)をやってしまって、
その結果を”動画”としてリアルタイムにクライアントに配信して、楽しむというものらしい。
スゴイ力技だなぁ。不愉快に感じるほどの遅延はコアゲーマーでなければ、ほとんどないのかもしれない。
追記:
書いてあった/思いついたメリットを並べてみる。
・低スペックでも最低限動画が再生できて、十分な帯域があれば遊べる。
・認証さえちゃんとやれば(クライアントに物がない分)海賊版とか防ぎやすい?
・ブラウザ上で動く(?)らしいけれどブラウザさえあれば環境に依存しない。
・ゲームの起動時間が無くなる?もしくは短くなる?
Bob Quinn says, on this subject:
- “WinSock, any implementation, is thread safe if the WinSock implementation developer makes it so (it doesn’t just happen).”
- “I don’t know of any implementations from Microsoft (or any other vendors) that are not thread safe.”
- “If a WinSock application developer creates a multi-threaded application that shares sockets among the threads, it is that developer’s responsibility to synchronize activities between the threads.”
(中略)
No. Winsock does not duplicate data among threads. Note that if you do call recv() at the same time on a single socket from two different threads, havoc may result.
Winsock Programmer’s FAQ
結局知りたかったのはこれですよ。”原典”に書いているとは思わなかった。
つまり…..
・同じソケットに対してrecv(),send()を同時にしたらいかん。recv()-send()はもちろんrecv()-recv()でも不味い。
・別のソケットなら同時にやろうがかまわない。(これが、「winsockはthread-safeの実装しかないでしょ」の意らしい。)
余り頭を使いたくなかったら、結局ソケットを使うたびに排他制御させた方が賢明といったところでしょうか?
(追記:違うよ。全然違うよ。それだけだと、recvのところでブロックしちゃって、それにつられてsend()も止まっちゃう。
ioctlsocket使ってrecvをノンブロッキンに切り替えてからやるべきですね。結局、作りたいモノの構造がDirectPlayとほぼ同じ
だったので、おとなしくDirectPlayを用いることにしました。)
recv()専用スレッド、send()専用スレッドを各々持たせているわけですが、これさえ守れば「今の所問題なかった」 的なレスを
散見したのでそういうことでしょう。
・・・・・・
ちゃんとrecv()のところでクラッシュするのではなくて、STLの内部でクラッシュするもんだから訳が解らなくなって、
concurent_queueとか使ってうやむやにしてやろう と思ったけれどやっぱクラッシュして、デバッグもできない
(デバッグビルドのデバッグ実行ではなぜか再現しないため) からSetUnhandledExceptionFilterとか生まれて初めて使ったよ。
普通に、EXCEPTION_ACCESS_VIOLATIONとか出ても訳がわからないのは変わらないのですが。

GDCにて発表されたらしい新しいコンソール。その名もZeebo。(なんて読むんだろ。じーぼ?ぜーぼ?)
筐体はPS3に、インスパイアされ気味のような気がしますが……
紹介記事には結構、酷いことが書いてある。
ゲームがダウンロード専用である利点を生かし、海賊版ソフトの流通が盛んだと言われるブラジル、中国、インド、ロシアなどの地域をメインターゲットに、およそ10億人規模の新しいユーザー層獲得を計画。
GDC 09: 新型ゲーム機『Zeebo』のローンチ発表。コンソールマーケットに参戦 – Game*Spark
距離的に遠いからあんまり意識されないけれど、ブラジルって確かにパクリインスパイアしたりするのが好きなのかな?
とは数年前から感じていたけれど、(そのようなお国柄の他の国がそうなように)海賊版が出回り易いんだね。
肝心のスペックはというと、
the Zeebo will apparently run on a BREW-based OS and house an ARM CPU running at 528MHz, with a Qualcomm Adreno 130 graphics core (?), 1GB NAND flash memory, 160MB RAM, 128MB DDR SDRAM and 32MB stacked DDR SDRAM.
More details of Tectoy’s Zeebo 3G gaming console emerge
と一世代前の代物(?)になるようです。日本で売るのかな?買わんけど。
#HDは付けんでフラッシュですか。と思った。
09WBC,日本二度目の優勝おめでとう!!!
日本って本当に野球強いんだ。前回のはフロックか何かだと思ってた。
野球は滅多に見ないから、そこら辺がよくわからなかったよ。
とにかくおめでとう!!!

※画像はイメージ
やっとこさオレオレコリジョン(Flow2Dのほうじゃなくて、ゲームの方)
が出来たんだけれども、どれだけ速くなっているのか検証してみました。
と、その前にどんな感じで実装したかについて。
目的:
ポリゴンの集まりの中に球体を配置し、そのコリジョン情報(衝突している面情報、衝突点、そららの総数)を取得する。
実装1:
BruteForce的に全ポリゴンと判定。
実装2:
いい感じに空間分割。BSPとかハイソなことはせずに、単純に直方体のセルを作成。
この直方体は、判定する球かポリゴンのAABBの中で一番大きなものよりも少なくとも大きなものを利用。
ポリゴンを格納するときは、まずその面のAABBの最小点が含まれるセルにそのポリゴンを格納。
また単にセル分だけコンテナを作成するのはセル数が膨大になる今回のようなケースでは
大変不経済なので、multimapを使い、位置(セル内の位置をDWORDにパックしたもの)をキーに、
ポリゴンをその値にする。
実際に衝突判定を取るときはその球のAABBの最大点と最小点の関係からぶつかる可能性がある
セルに対して全てチェック。(そのセルの数は最小ケースで8つ、最悪ケースで1527)
小手先の最適化として、ポリゴンごとにセルからの飛び出し状況をマークして
球が存在しないセルから球があるセルに伸びてきているかをフィルタリングして落とします。
で、重要なのはポリ対球の判定部分は1,2共に同じになっているところ。
純粋にどれだけのプリミティブ同士の判定を事前に省いているかがそのまま速度になります。
実験内容
内容は、△100000を、空間内に乱雑に配置。
その中に球体を適当に配置してコリジョン情報を取る。
これを100回ほど繰り返しそのタイムを取る。
結果
| Brute | セル分割 | |
| 1*1*1分割 | 1625 | 1640 |
| 10*10*10分割 | - | 325 |
| 100*100*100分割 | - | 29 |
| 200*200*200分割 | - | 15 |
※単位はms
これは気持ちがいい。
目に見えて速くなりました。
というか、分割数が増えるほど、つまりフィールドが大きければ大きいほど
有利になっていく一方だから、フェアな戦いではないかもしれませんが。
これは、広大なマップを作るフラグが立ったかな。
結局、全部物理演算でやらずに結構な部分を自前でコリジョン取るようにしたわけで。
今、作っているわけですが、他人のモノを見ると、実際のコードレベルに落として行く段階の、
optimizeが半端じゃないなと。もうここら辺は、自分で考えないでいかにちゃんとしたマテリアルから
パクってくるかという問題になってしまいますね。
http://www.geometrictools.com/はいいリファレンスかもです。