2015年3月24日火曜日

H26年度卒業生・修了生を送り出して



ちょっと日付が遅れましたが、卒業・修了おめでとうございます。先週末、昨日と、卒業式・大学院修了式があり、本年度は、学部9名、院生0名が巣立ちました。昨年度と比べるとゼミ内の人数が少なく、また研究室の方にもデスクを置いてできるだけ部屋にいるようにしたので、例年よりは指導はできたかなという気がします。また、今年は本ラボから1名学部長賞の受賞者がでました。マツイシ君おめでとうございます。

とりあえず今年も、授与式等であった各先生方の式辞の内容をネタにしながら、個人的にアレンジした贈る言葉を書いてみようかと思います。

同窓会会長の話から
(1)仕事に対して受け身でなく自らの行動で。
やらされてる感があると、よい成果物はできません。私が卒研のテーマを決めるとき、できるだけゼミ生の興味を重視していますが、それは受け身な姿勢だとよいパフォーマンスが出ないからです。そして、責任は自分にあるというプロフェッショナルな意識も大切です。
(2)ホウレンソウを忘れずに
これは、ゼミで言ってきたことですね。上述のとおり、研究室にいるようにしたので、例年に比べると学生の質問に対応することができました。これは、「ゼミ生が質問しやすい環境づくり」の一環だったわけで、そういう環境を教員が作らないといけないという気質だったという意味でもあります。なぜ、なかなか質問、相談しないのか?
・質問をするのではなく、自分でなんとかしたい
・質問して何か先生に言われるのがいや
など、、、いろいろな思いがあるでしょう。卒研は自分の問題ですが、仕事は自分だけの問題ではありません。ベストな解を見つけるために、上司や先輩にはどんどんホウレンソウしなければならない、、、その勇気を持って欲しいです。
(3)3年間は勤めよう
個人的には5年はかかると思ってますが、まずは3年ですね。1年や2年では仕事がなんたるかなどはわかるはずもないです。最近の学生は、「やりたいこと」「自分の興味」なんて言葉を意識し過ぎて(我々大人がそのように仕向けているんですが)、ヤる前から「これは自分のやりたいことじゃない」と思っちゃうんですよね。3年で適性がわかるかは不明ですし、積み重ねていくということが実績にもなります。真剣にやっていくことでできるようになるし、また楽しくなってくるはずです。

学科長の話から
(1)節目を大切にする。
年を取るたびに、「〜式」という機会はなくなってくる。。。という話。まさにそうですね。節目節目で自分を振り返るというのは、成長していく上で大切だと思います。
(2)心身ともに健康に
昨年も同様のことをおっしゃってましたが、ほんとそう思います。会社に入るといろんな価値観を持つものの集団へ入るので、ストレスというのは必ずあるでしょう。また、責任も重くなってきます。そういったストレスをうまく流せる方法、、これは個人差があると思いますが、見つけて欲しいです。

退職される中村先生の話から
学科長と同様に「身体には十分気をつけて」と言われてましたが、その他社会人としての心得として3点。
(1)失敗を恐れない(若いうちは血のなり肉となる)。同じ失敗は繰り返さない(繰り返すのはアホ)
(2)危機管理をする。想像力を欠如。仕事の危機管理。不測の事態を考えて仕事をする。
(3)目標を決めて手順を考える時に脳が活性化する。目標を決めることが、イキイキと生きる。
上記のうち(2)については、時間のマネージメントの話で私自身関心があることであり、かつ耳の痛い話です。「今日できることは明日に延ばすな」ということですね。いつも締め切り間際にしてしまう自分に反省です。ただ、小さなタスクに追われていると、大きなタスクができませんからね。これは意外と難しい問題だと思います。

大学院専攻科長の話から
(1)大学の研究成果を活かせ
企業は、意外と新しい分野には弱いらしいので、大学の研究成果をどんどん取り入れる姿勢が大切なようです。そういえば、うちのゼミの卒業生も、企業のやり方が保守的とか言ってましたね。。
(2)なんでも聞け
とりあえず1年目は許されるようです。2年目以降に初歩的なことを聞いているとダメ。。これは卒研でもそうですね。10月とか11月頃に初歩的なことを聞いてくる学生には、さすがの私も、「このタイミングでそんなこと聞くか~?」と厳しく接したと思います。ただ、2年目以降にもそのような状況になることはあるでしょう。その際、「怒られるから、、、」と、相談しないままでいるのはダメなのは言うまでもありません。上記でも書きましたが、仕事は自分だけの問題ではないのです。
(3)リーダーとしての心構え
院卒の学生は、一般的にリーダーになる機会が早いので、人の前に立つことが増えてくると思います。ただ、大学との違いは、いろんな分野、学歴、経歴、価値観の人が集まるということ。話が通じないことが多々あるので、リーダとしては平等に接してうまく力を引き出せ、、といういい話でした。

というわけで、ちょっと長くなってしまいましたが、以上、贈る言葉です。最後に重ねて、卒業・修了おめでとうございます。

2015年3月13日金曜日

byte[]に入っているRGB情報からWritableBitmapに変換する方法

byte[]に入っているピクセルのRGB情報からWriteableBitmapに変換する方法を2つ紹介します。個人的には前者がシンプルで好きですが、後者のほうが速いかもしれません(未確認)。

BitmapFrame.Create編
Marshal.Copy編


Kinect v2でBodyIndexFrameを利用して人物画像(RGB)を抜き出す

Kinect v2 にて人物画像のみを表示するという初歩的なプログラムを、v1でもやっていたので練習がてらに試してみたのだが、初歩的なところで躓いたところとか、ネットをいろいろググってみて気づいたポイントをピックアップします。

解像度の違いに注意
v1では、Color画像とDepth画像の解像度が同じ(640 x 480)でしたから、Depthで人物領域に対応するColor画像のピクセルを描画するだけで表示できました。しかし、v2 では、Color画像の解像度が(1980×1080)、Depthが(512×424)と大幅に異なるため、描画サイズを気をつけないとおかしなことになります。

抜き出しサイズは512×424
人物領域のサイズが小さいわけですから、基本的にそれにあわせる必要があります。サンプルプログラムでクロマキー処理みたいなことをしてるのがあり、それは横長に写ってるんですが、実際に人物を特定できる領域は512×424と考えたほうがいいです。もちろん、アップスケーリングな処理を自前で実装できるのであればその限りではありません。

座標合わせにDepthFrameが必要
v2では、BodyIndexFrameという人物領域のマスク情報を持った新しいフレームが用意されました。しかし、座標合わせとして、CordinateMapperクラスにBodyIndexFrameに対応するメソッドが用意されていません。
coordinateMapper.MapDepthFrameToColorSpaceメソッド
を利用する必要があります。 つまり、座標合わせにDepthFrameを呼び出しておく必要があります。この辺りのAPIがまだ中途半端ですね。

上記以外はv1と特に変わらない
ネットでいろいろサンプルを調べてみると、ポインターの利用やunsafeな処理をするなど、何やら難しげなのを見かけましたが、基本的にv1でやっていたやり方でOKです(別にポインターの利用やunsafeな処理がダメと言うわけではありません)。v2に変わって何か特別な処理をしなければいけないというわけではないので、安心してください。

下記にサンプルを一部抜粋します。BodyIndexFrameのデータを走査しながら、ColorFrameの内容をコピーしているのがポイントです。


2015年3月12日木曜日

Eclipseを起動させるJava VMのバージョンを指定する

GWTやGAE対応のアプリ開発をするときは、EclipseにGPE(Google Plugin for Eclipse)をインストールするのが普通ですが、現段階でのGPEの動作条件は
Java 7(JRE 7) かつ最新のEclipse
となっています。Javaを利用するのがEclipseだけならまだいいですが、すでにJava8がインストールされていた場合、、、わざわざ新しい方を消すというのも勧められません。共存するためには、EclipseだけJava7で動かす必要があります。で、その方法ですが、eclipse.iniファイルにおいて、
-vm
C:\Program Files\Java\jre7\bin\javaw.exe
という記述を追加すればOKです。ここの書き方の注意点は、オプション名と値を必ず2行に分けて記述することです。 また、-vmargsよりも前に書かないとダメです。


2015年3月9日月曜日

VBAにてPDF形式で保存する

VBAを利用してExcelのシートをPDF形式で保存する処理は下記のようになります。下記ではファイル保存ダイアログを呼び出してますが、別名でファイル保存を使ってファイル形式を指定させる手間が省けます。

2015年3月4日水曜日

WPFでDoEventsを実現する

WindowsプログラミングというかVisualBasicの古くからあるおまじない的なメソッドとしてDoEventsがあります。これはOS側に処理を一旦渡す処理を行ってくれるので、ループ処理で重くなったUI描画を軽くしたい(実行させたい)ときに使う常套手段でした。昔のWindowsは擬似マルチタスクでしたからこのような処理が有効でしたが、現在はマルチスレッド化で対応するのが奨励されています。
ただ、マルチスレッド化するまでもない処理もあるわけで、.Net Frameworkに移行してからも「Application.DoEvents」というメソッドが残っており利用されてきましたが、WPFのフレームワークではそれがなくなってしまいました。
で、その代替手段が下記のコードになります。DispacherFrameというWPFのUIキューを呼び出してそれをInvokerにより実行させることで、UIの描画処理を行わせてます。



2015年3月1日日曜日

Arduino:Bluetooth Shield(SLD63030P)をSlaveモードで動かす


前記事にてBluetooth4.0BLEが接続できないという問題に遭遇したので、それなら古い Bluetoothで、、、ということで、旧式のBluetooth Shield(SLD63030P)を入手して接続に成功しました。成功しましたといっても、それまでにいろいろ四苦八苦しており、とりあえず現状できていることは
  • ノートPC側から接続(シリアルポートとして)
  • ArduinoからデータをBluetooth経由でノートPCに送信
  • プログラム側は前記事のようにシリアルとして認識
という感じです。で、正直、Bluetoothのことが全くわかっておらず、電源入れたらすぐに繋がるんだろう、、とか思ってたのがそもそもの間違いでした。Arudino側のスケッチの書き方次第で接続が失敗したりするようで、接続できなかった場合の問題の切り分けに注意が必要ですね。もしかするとBluetooth4.0が繋がらないのもそういう問題かもしれません。
下記は、Arduino側のスケッチです。公式のサンプルの一部を抜粋してますが、アナログポートの出力をそのまま送ってます。