ダメージ面接

後味の悪いやな感じの面接だったな。
天下のS社だというのに、
あとあとトラウマになりそうな面接。
近海物サンマ漁が得意な人に
遠洋に出てマグロとって来いという。
しかも燃料は片道分だけ。
そもそもそこに魚群がいるかどうかもわからない、と言われる。
サンマすらいないかも、ともいわれる。
それでも働けますか?と人事のお姉さんは
嘲笑気味に言う。
それにしてもS社の女性社員はみな同じような感じの人が多い。
業界七不思議に加えてもいい。
それにしても、まさに大地震のあと。
空爆続く被災地のような職場。
それを理由に曲がった仕事に耐え続ける人々。
てゆーかそれでも本当に人材必要なのだろうか?
そこにいる転職したてという若者にはやれない仕事なのかい?
まともに働ける人はとっくに去ってしまったの、かも。
こういう環境で働いている人は
ほんとご苦労様だと思う。
フランス帰りたくなってきた。
いやはや勉強になりました。
凹みつつ寝ます。

Night in Manchester

過去の日記。CyberGames 2007での発表は無事終了。短い時間で準備した割にはよいプレゼンだったと思う。時間も1分余らせたし英語もほぼ本番一発勝負だったのにもかかわらず特に問題なし。反応はとてもよかった。質問たくさん。プロシーディングとしてもらったUSBメモリ2GBをなくしたのは痛かったけど。よるはFish and chipsで鶴野先生と歓談。(嫁、ごめん!いつもうまいもんばかり食べて)鶴野先生とゆっくり話すのは初めてだったんだけどおかげさまで大学の先生になるうえでのココロガマエはできたと思う。思えばタイミングとしてはいいタイミングだった。

Wiimoteで学ぶ物理:角度を算出

どうしてこのエントリーでWiiremoteの話をしないといけないのか、なんとなく
微妙ですが、まあいいや。
http://ameblo.jp/akihiko/entry-10047227655.html
傾き検出は、kako.comで公開されているコードをよく読んでください。
ただし(私が過去に読んだソースですが)「ズバリ正解」ではありません。
(グラフィックス上で傾きが表示されると言う意味では正解)
X/Yなど比で、傾きに関係した値が出るのはたしかですが「これが何を意味する
のか?」を考えてみてください。
高校生でもわかる「数学1的」に考えると「CosやSinをどうやって算出するか、
それが何を意味するか」ということに直結します。
上の話が、まったく「なんだかわけが判らない」という状態であれば、勉強もか
ねて、比→傾き(の正負の極性)→角度まで算出してみるといいでしょう。
実際のプログラミングでは、アークサイン「asin」関数を使うと便利でしょう。
ただし、値はラジアンで与えなければならないので、以下のような式を使います。
Rotx = asin(RUx)*180.0f/PIE;
Roty = asin(RUy)*180.0f/PIE;
さらにZ軸については、とある理由から、こういう処理をします。
if (RUz<0.0f) {
Rotx = 180.0f – Rotx;
} if (Roty>90.0f) {
Roty = 180.0f – Roty;
}
まさに数学1!なんですけど…勉強になりましたか?
以下、私が使っている角度算出部分のソースコード抜粋です。
コメントが一杯残ってますが、ご愛嬌。
//Aki le 7 mars 2007
double Wii_Remote_Input2(void)
{
static LARGE_INTEGER last,current;
static double dt = 0.0f; //delta time (msec)
static unsigned char lAx,lAy,lAz; //last acc value for filter
ReadReport( hRsDevHandle , InputReport, &InputLength);
if ( InputReport[0]==0x30 ) {
button1=InputReport[1]; button2=InputReport[2];
}
if ( InputReport[0]==0x31 ) {
button1=InputReport[1]; button2=InputReport[2];
Wx = (Wx + InputReport[3]) /2.0f;
Wy = (Wy + InputReport[4]) /2.0f;
Wz = (Wz + InputReport[5]) /2.0f;
//get current posture (rotation)
Rx = (double)( Wx – Ox ) / 127.0f / ADXL330 ;
Ry = (double)( Wy – Oy ) / 127.0f / ADXL330 ;
Rz = (double)( Wz – Oz ) / 127.0f / ADXL330 ;
R = sqrt (Rx * Rx + Ry * Ry + Rz * Rz ) ;
double RUx,RUy,RUz; //unit vector
RUx = Rx / R;
RUy = Ry / R;
RUz = Rz / R;
// printf("(Rx,Ry,Rz) ,R , Unit(R)= (%f,%f,%f), %f, (%f,%f,%f) ", Rx, Ry
,Rz, R, RUx, RUy ,RUz);
//Get rotation degree
// Rotx = asin(Rx/Ry)*180.0f/PIE;
Rotx = asin(RUx)*180.0f/PIE;
Roty = asin(RUy)*180.0f/PIE;
if (RUz<0.0f) {
Rotx = 180.0f – Rotx;
} if (Roty>90.0f) {
Roty = 180.0f – Roty;
}
// Rotz = asin(RUy/RUx)*180.0f/PIE;
Rotz = 0.0f;
// printf("Rot(%f,%f,%f)\n", Rotx, Roty ,Rotz );
//Cancel the initial gravity
Ax = Rx – RUx * Gravity;
Ay = Ry – RUy * Gravity;
Az = Rz – RUz * Gravity;
A = sqrt (Ax * Ax + Ay * Ay + Az * Az ) ;
// printf("(Ax,Ay,Az) ,A = (%f,%f,%f), %f\n", Ax, Ay ,Az, A);
//Get delta time
last = current;
QueryPerformanceCounter( &current );
QueryPerformanceFrequency( &freq );
dt= (double)(current.QuadPart – last.QuadPart) / (double)freq.QuadPart;
//microsec
//the first time or huge delay
if ((dt==0)||(dt>100)) {
//you shouldn’t use the data in this time
dt = 0.0f; //dt=0 means the velocity also be zero.
}
//Filter, if the input is lower than the Gravity, Ignore it.
if (A>Gravity/5.0f) {
//Get a velocity in this delta time (the initial gravity canceled)
VCx = dt * Ax;
VCy = dt * Ay;
VCz = dt * Az;
VC = sqrt (VCx * VCx + VCy * VCy + VCz * VCz ) ;
// printf("(VCx,VCy,VCz), VC = (%f,%f,%f), %f\n", VCx, VCy ,VCz, VC);
} else {
VCx = VCy = VCz = VC = 0.0f;
}
}
return dt;
}

Get position from Wiimote acceleration


Wiiremoteの加速度センサから位置を割り出す

いろいろ似たような質問がきたので、エッセンスだけでも書いておきます。
—English edition—-
I created some APIs and testing functions like "Get3D", "Get2D" and "Get6D" series.
The test and scratch loops are not terminated.
[Hint1] Have you measured delta T precisely?
The delta time is not a stable frequency.
[Hint2] Have you measured the gravity?
It is very important to define the starting posture and "unit of force".
[Hint3] You shouldn’t standardize/round the values like "G=1".
Wiiremote sensors have 8 bit each, however it is not enough to detect a small movement.
Also the acceleration values are not linear (probably, relative values for forces).
[Hint4] Have you try to "cancel" the gravity?
In your mathematics, you should try to separate the input force as a combine of "gravity(=posture)" and "human movement".
[Hint5] Have you think these 4 conditions of Wiiremote?
(1) Gently movement: Gravity > Movement
(2) Radical movement: Movement > Gravity
(3) Zero gravity: Gravity=-Movement
(4) Set on the floor: Gravity=Init Posture
If your application always keep in the condition (1), it has a chance to get a better result easily.
The condition (4) should be use for calibration (in a short time).
The condition (2) and (3) are difficult to detect (without IR sensors),
however you should describe this condition in your mathematics. If your equation lack them, your magnitude of force sometime arrive to zero during a human input like a swing.
[Important]
I have tried a lot of small codes that can estimate the position from (Ax,Ay,Az) and an initial posture.
Shortly, the errors (=small movements less than sensor resolution) might be integrated.
If you prefer stable detection, small drift noises should be cut off.
"Gravity canceling" will not be a perfect. But if you need a position (X,Y) instead of (X,Y,Z). It will be much easier.
Imagine a weight that linked to a string.
Tell me if you have any good results.
best regards,
Akihiko
—-日本語版—-
"Get3D", "Get2D","Get6D"シリーズと言ったAPIやテスト関数を試しています。
実際にはテストとスクラッチのループは終わってないです。
以下ヒントになるであろう情報。
[Hint1] ⊿t(微小時間)は正確に測りましたか?
 Wiiremoteから送られてくる測定値は安定なな周波数を持っているわけではありません。
[Hint2] 重力を測りましたか?
 開始時の姿勢と「力の単位」を取得して定義するのはとても重要です。
[Hint3] 「G=1」というようにセンサーの値を正規化したり、丸めたりするべきではないです。
 Wiiremoteのセンサーは各軸8ビットです。しかし、これは小さな動きを取得するのには十分ではありません。
 また、加速度の値はリニアではありません(たぶん、力に対する相対値)。
[Hint4] 重力を「キャンセル」してみたことはありますか?
 あなたのアルゴリズムの数式において、入力された力は「重力(=姿勢)」と「人間の動作」の合力であり、分割されるよう試されるべきです。
[Hint5] 以下のWiiremoteの4つのコンディションについて考えたことがありますか?
(1) そうっと動く:重力>動作
(2) 激しく動く:動作>重力
(3) 無重力:重力=動作の逆向き
(4) 床置き中:重力=初期姿勢
 もしアプリケーションが常に(1)でいられるなら、良い結果を楽に得られるかもしれません。
 (4)は(短い瞬間に)キャリブレーションに使われるべきでしょう
 (2),(3)は赤外線なしでは検出が難しいのですが、アルゴリズムの中でこのコンディションを記述するべきです。
 この状態を含まないと、スイング動作のような人間の入力において、マグニチュード(=ベクトルの大きさのこと、√各要素の二乗和)がゼロになる瞬間があります。
【重要】
 私は加速度(Ax,Ay,Az)と初期位置から位置を推定できる、沢山のサンプルコードを試してみました。
 端的に言えば、エラー(=センサ解像度よりも低い微小な動き)は積分されます。 
 もし安定した検出をしたいなら、小さなドリフトノイズは切り捨てられるべきです。
 「重力キャンセル」は完璧ではないでしょう。でも、(x,y,z)ではなく(x,y)が必要なら、より簡単になるはず。
 「紐につながった錘」を想像してみてください。
 なんかいい成果が出たら教えてください。
あきひこ

これから××探し。

明日、最終面接です。
あんまり細かいこと書くと、どこに受けに行くのかすぐにばれそうですが、とり
あえず本決まりになるまでは秘密にしておきます。
いわゆる役員面接なので、落ちる可能性は低いでしょう。
「尊敬できる役員か」を見極めて来ます。
良い結果を楽しみにしていてください。
さて、その就職先ですが、
ヒントとしては…
・勤務地東京です
・研究者ではありません
 ある意味、「真の科学者」ですが、研究者ではありません。
・土日休みではありません
…これでわかる人は同業者かもしれませんね。
(といっても本当の意味での同業者は滅多に居ませんが)
まあ、いずれにせよ、私の将来を案ずる人々には「ああ、なるほど」というポス
トにつけると思います。
もちろん不安はまったくないかというとそんなことはまったくありませんが、民
間企業や今日日の大学ポストと同程度。
いずれにせよ「日本の未来を変えていく職業」であることは間違いないです。
期待で胸が高なります。
それはそうとして、これからいろんなものを探さなければなりません。
・住居
・通勤経路
・ナルの幼稚園
・嫁の就職先?
どれも複雑に絡み合っていますので「安ければいい」というものではなさそうで
す(「近ければいい」という要素はある)。
ひとつ気になっているのが「ナルの幼稚園」です。
彼は物心ついたときからフランスの教育を受けてきました。
日本語とフランス語で生活しています。
日本には1度だけ帰ったことがありますが、日本語を喋る友達はいませんので、
一人遊びをしているときはフランス語を喋っています。
加えて、最近の日本の子供たちの文化との違いに驚いています。
おそらく、ナルは友達から、以下のような行為を受けたり見たりしたことがあり
ません。
・汚い言葉を吐かれる
・いきなり殴られる
・殴られたら殴りかえす子供
・大人に反抗したり暴力を振るう子供
・いたずらをして逃げる子供
・テレビゲームの話題全般
・テレビの登場人物に関する話題
・テレビの芸能人がやっているジョーク、ものまね
・「アンパンマン」関係
・「正義の味方」関係
バイオレンス、キャラクターマーチャンダイジング、不道徳…加えてフランスと
違って学校ではないから「自由遊び」だけ、10時から14時という短い保育時間、
さらに無料ではない日本の幼稚園・保育園。
そのまま日本の幼稚園・保育園に入ったら、言葉が通じないだけでも虐められる
要素たっぷりなのに、物理的・精神的ダメージはとても大きいと思います。
だからといってアメリカンスクールに入ったからといって解決する問題は少ない
ようにも思いますし。
せめて、善悪の判断がすこしでもついて、野生児化しない環境においてあげたい
と思います。
そうでなければ、家で保育していたほうがまだマシかもしれない。「虐められる
社会性」が身につくだけですから。
いずれにせよ、親の財布には痛いのですが、多くの場合、子供の幼稚園のために
職場や住居を変えることは難しいでしょうから、これはチャンスなのではないか
と考えています。
そう考えなければやってられませんし、
何よりナルの今までの苦労が無になってしまいます。
(もちろんフランスでも3年間苦労し続けてきたので)

これから動物園

動物園に就職活動しに行くわけではありません。
(近からずも遠からず、ですが)
高校のときの友人とその子供らで横浜ズーラシアに行ってきます。
子供(0~4歳)の行動観察という研究です。
ええ、オフではないです、研究です、楽しい研究(笑)。
…といいつつJSPSは「私的活動による一時帰国」と申請してあるので休暇扱いで
すが。
しかし
0歳 あかりちゃん
1歳 わたるくん
2歳 だいちくん
3歳 ゆきのすけくん
4歳 たかやくん
きれいに0-4歳がそろったなあ。
1月にはナル(5歳)も入る予定?
天気もいいし、楽しみでございます。

これから本命2面接

明日朝10時から、某財団法人で面接なんだけど。
…どうやら"時差ぼけモード"に突入してしまったらしい。
0時過ぎに崩れるように布団に入って、ぐっすり寝たー、もう起きなきゃ、と
思ってパチリと目が覚めたらまだ朝の2時だった。
しょうがないので(?)、学生のコンテスト応募書類をすすめることにしよう。そ
れから面接準備。
逆にやると時間がなくなりそうだし。
ところで、木曜日の朝の段階で事態が「大きく動いて」しまったので、なんだか
いろいろ忙しくなってきた感じ。
年末までの予定をガシガシ決めなきゃならない。
それはそれでいいことなんだけどね。
帰国日も可能であれば前側につめる予定。

これから本命1面接

日本のネットカフェすげー。
シャワーあるの知ってたらここで浴びたよ!
「ネットカフェ難民」なんて難民に失礼だよ。
と思うぐらい日本のネットカフェはお洒落で装備充実
お値段控えめ。
てゆーかくつろいでる場合じゃない!!
これから本命(その1)面接です!!

CyberGames2007 part1

CyberGames2007 memo
9:49 2007/09/10

Game Design and Development using JOGL (Java + OpenGL)
Andrew Davison
Department of Computer Engineering, Prince of Songkla University

JOGLについての基本的な話。まるで大学の講義を聴いているかのようだ。
(本人は、全部説明したら数週間かかるよ!と言ってるが)
講演は地味な地球儀とシンプルな宇宙空間もので、この先生が執筆した以下の書
籍を読んだらいいと思う内容。
「Killer Game Programming in Java」(2005)
http://fivedots.coe.psu.ac.th/~ad/jg/
「Pro Java 6 3D Game Development」(2007)
http://fivedots.coe.psu.ac.th/~ad/jg2/

Introducing XNA Game Studio Express
Andrew Sithers
Developer and Platform Group , Microsoft Ltd. (UKとParis?)
http://blogs.msdn.com/sithers

さっきの発表と対照的に、こっちはもろコンシューマプラットフォーム寄りの発表。
2画面のプロジェクタを上手に使ってXBOX360開発機?に直接接続してXbox 360
Dashboardをつかったプレゼン。
発表アジェンダは「Who am I?, Why XNA?, XNA Game Studio – the role of
community, XNA2.0 – What's new?, Creators Club Online」
彼はエバンジェリストで大学などに出向いてこういう話をすることもあるらしい。
「The Power of Creator Communities」
"Country Club"→YouTube,GrageBand,MySpaceに行き、そのあとCountry Clubに
フィードバックがかかる。
「How did this happen?」
 10年前はホームビデオは高価でしかなかったが、いまはContent,Communitiy,
Technologyのループがエクスペリエンスとして高速に構成されていく。
"2400万ビュー"なんてちょっと前では考えられない数字だった。
「What about Games?」
 さて、ゲームはエクスペリエンスを構成しているのは確かだが、どうだろう?
Content,TechnologyはあるがCommunityはない。
「XNA in UK」
 RARE,Lionhead studio他多数のユーザ。大学もパートナーにリストされている。
(skip, demoなど)
「XNA Framework – networking」
Goal:ネットワークマルチプレイヤーを可能にする、使いやすく、Xbox360と
Windowsで。
 マッチメーキング、プレイヤー管理、セッション管理
「New for 2.0」
 VS2005のすべてのバージョンをサポート!
  ソースコードコントロール、デバッグ、Windows上の単体テスト
 Windowsと366はともに簡単に
 管理とコンテンツ構築は一貫性を持つ
「XNA Creators Club Online」
 2007年3月にWebsiteラウンチ
 Forums, Articles, Tutorials, Videos
 月間コンテンツリリース(26サンプル、4ミニゲーム、2スターターキット)
 プレミアムコンテント
  TorqueXゲームエンジン、2スターターキット
 DVDによるビギナーズガイド
「XNA 2.0 wrap up」
  Gamer Services、2007年末に提供開始予定
「Q&A」
 オンライン配信システムについて質問してみた。もちろん計画はあるが、マー
ケットプレイスはまだ。現在でもFlash経由で配ったり、.ccgame ファイルを
ネットで配ることは出来る、ということ。ご質問はasithers@microsoft,comまで。

眠れない/CyberGames発表者

隣の部屋のイビキがうるさくて眠れない。
上の部屋で誰か起きているらしく眠れない。
…てゆーか、準備おわらないので眠れない。
あ、でもオチがまとまったら一旦寝よう…。
明日の発表は午後だし。
スケジュール
http://www.coetechweek.com/cybergames/cybergames_schedule.pdf
発表者略歴
http://www.coetechweek.com/cybergames/cybergames_speakers_biography.pdf
なんかみんなすごい面白そうなんだよね。
英国人多いから、英語通じるか不安。
やはり脳内英語は米語なので、簡単には発音の癖が切り替わらない…。
何日も居るなら対応できるとは思うんだけどね。