2014年3月23日日曜日

H25年度卒業生、修了生を送り出して



卒業・修了おめでとうございます。週末にかけて、大学院修了式と大学の卒業式がありました。本年度は、学部9名、修士5名が巣立ちました。今年は例年になく人数が多く、細かいところまで指導がいき渡らなかったなぁ、、、という思いをもっているわけですが、とりあえず今年も、各授与式等であった各先生方の式辞の内容をネタにしながら、個人的にアレンジした贈る言葉を書いてみようかと思います。

まず、個人的に思っていることですが、、、

仕事を偽らない人であってほしい
いま、某研究の偽装疑惑がニュースに上がっていますね。このニュースの真偽はともかく、「認められたい「怒られたくない」、「悪い結果を出したくない」といった動機で、仕事や結果を偽るような人にはならないで欲しいです。学校での勉強は基本的に個人の問題です。それに嘘や偽りがあれば個人の問題の範囲で終わることが多いでしょう。しかし、仕事はそうではありません。仕事はいろんな人が絡んできます。偽ったことで生じる問題は、仕事に関わる人々や会社の信用問題につながります。仕事の偽りは他人の人生や命に関わってくることを意識してもらいたいです。

次に大学院の専攻長の先生の話のネタからは次の2点を。。。

知っていることと知らないことを区別する
言い換えれば、「仕事において問題・課題を切り分けていく」という視点。例えば、自分の仕事においてできることをできないことを明確にするだけでなく、それが自分のスキルの問題なのか技術的な問題なのか?どこまでは可能でどこからが不可能なのか?そこを見極めてフィードバックしていくことが仕事を円滑にこなしてくうえで大切なことです。また、上述の話にもつながりますが、「できないこと」を「できる」と偽らないこと。もちろん仕事の上では、「できる」と大風呂敷を広げないといけないもあるでしょうけど、何も見極めないまま「できる」と無責任に言わないようにしてほしいです。なお、その見極めには「知識」と「経験」が必要です。卒論・修論での研究過程では、少なからずともできるかどうかわからない事に取り組んだハズです。それがどのレベルだったのか?思い返しながら、今後の人生に活かしてください。

幸せは自分で掴むもの
幸せというのは自然にやってくるものではありません。そして、幸せの形も人それぞれであり、他人と比較して決めるようなものではないです。「幸せになりたい」という向上心は生きる上で大切なことですが、変に拘っていると、身の回りに存在しているいろいろな幸せに気づかなくなります。幸せを感じない人生はつまらないものですが、感じるかどうかは自分次第なのです。

学科同窓会会長の話からは次の2点。。。

受け身ではダメ、ホウレンソウを忘れずに
これは私も日々言っていることですが、残念ながら年を追う毎に守れない傾向が強いですね。卒論・修論は個人的な要素が強かったからかもしれませんが、卒業後、はやくこの重要性を気づいて欲しいですね。ホウレンソウがない部下ほど使いづらいものはないですよ。

3年間は勤める
会長さんは3年といいましたが、仕事がわかってくるのは5年はかかるんじゃないかなという気がします。というより、最初から自分がやりたい仕事をさせてもらえるのは稀だと思います。まずは、泥臭い下の仕事をやりながら、会社の仕事を理解させていくことが多いかと思います。もちろん、その際もただ淡々とこなすだけでなく、やっている仕事の位置づけとか、課題とか、全体を見据えるような意識が必要でしょう。

続いて学科長の話からは次の2点

心身ともに健康であれ
まさに、まずは健康第一だと思います。私も後輩や教え子が病気になったという話を聞くこともありますし、仕事と健康のどちらかが大切か、、、もちろん、仕事は適当でいいというわけでもないですが、「健康を害するまでするべき仕事」というものはないと思います。

他人はあなたを見ています
本当に使える人材であるかどうか、会社の人は見ていますよということ。上述の3年勤めるという話にもありましたが、最初の3年や5年というのは、仕事を覚えていく過程の中でどういう人材か見られているということですね。

最後に、学科では3名の退職される先生の式辞がありましたが、その中から1つ。。

がんばらない、心身ともに疲れていてはダメ
まさに退職されている先生ならではのアドバイス。上述の「健康であれ」という話とも共通しますが、心身ともに疲れていては仕事のパフォーマンスも上がらないでしょうし。。。ただ、がんばらないで適当にやってればいいというわけではありません。それだと仕事のパフォーマンスが上がりませんから。個人的に1つだけ付け加えるとしたら、「最初は全力でがんばれ」ということかな。例えば、はじめて水泳の練習をした時のことを思い出して下さい。最初は緊張して全身に力が入っていたかと思います。だから、25m泳いだらもうクタクタ。。。でも練習して経験を積んでいると、だんだんといい感じに力が抜けてきます。そして、いつのまにか25mが楽に泳げるようになり、次は50m、100mと泳げる距離が伸びていったかと思います。「がんばらない(がんばらなくていい)」というのは、長年経験した人だからこそ言えること。最初は、特に若い時は仕事のパフォーマンスを上げるよう頑張ってみてください。そして、徐々に手を抜く勘所を見つけていく。。。そうしれば、がんばらなくても高いパフォーマンスを発揮できる人材に慣れると思います。

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


2014年3月7日金曜日

BackGroundWorkerを利用してKinectのイベントを別スレッドで実装する

~ 一部間違いがありましたので訂正します(2014/3/7) ~

Kinectのプログラミングが進んでくると、データ処理部分が肥大化してきます。それは仕方がないことですが、システム全体のパフォーマンスが落ちることになるので、マルチスレッドにより処理する必要が出てきます。この際のマルチスレッド化ですが、具体的には
  • Kinectから得たデータの処理を別スレッドに回す
  • KinectのReady系イベントを別スレッドに回す
という2つのアプローチがあります。前者はよくされていると思いますが、後者は意外に知られてないかもしれません。確かに、普通はKinectの各種イベントはFormスレッド内に記述することが多いと思いますが、UI周りの処理が複雑化するとシステム全体のパフォーマンスが落ちる可能性があるのでしょう。

BackgroudWorkerを利用してみる
某サイト(最下部参照)にそのことが書かれていたのですが、そのサイトはThreadクラスを使って検証していたようなので、今回はBackgroudWorkerとの合わせ技で別プロセスでの処理が可能かどうか検証してみました。BackgroundWorkerの利便性は前記事で述べたとおりです(C#:BackGroundWorkerコンポーネントを利用したマルチスレッド処理)。

で、結論から言えば成功です。実装のポイントは
  • DoWorkイベント内で初期設定からstart()までを記述する(EventHandlerの登録処理は必須)
  • スレッドを維持する必要はなし(ループ処理は不要)
  • UIコンポーネントへの操作も普通にできる(ProgressChangedイベントさえ不要)
  • ColorFrameReadyでのPictureBoxへの描画は普通に可能
という感じです。UIコンポーネントへの操作はいつものようにFrameReady系のメソッドで書けばいいので、従来との互換性も高いです。 

(訂正です)UIへの操作について、Labelの値を変えようとしたらエラーになってしまいました。すべてのUIが操作可能というわけではないようですね。とりあえずInvokerで操作はできます。

本当に別スレッドなのか?
しかし、本当に別スレッドになってるのかどうか、すこし心配になったので、
  • System.Threading.Thread.CurrentThread.ManagedThreadId
を各イベント内でコールして確認してみました。具体的には
  • Form_Load()
  • backgroundWorker1_DoWork()
  • kinect_ColorFrameReady()
  • kinect_SkeltonFrameReady()
  • Button_Click()
の4つのイベント系関数でコールして、従来の手法と今回の手法で、IDに違いがでてくるのかを確認しました。結論を言うと上記イベントでの各IDを横に並べてみると
  • 従来: 9,10,9,9,9
  • 今回:9,10,11,11,9
という感じになりました(数字はIDの例で、数字自体に意味はありません)。つまり、従来の方法だとFormのスレッドとKinectのスレッドは同じスレッドで動いていたことがわかります。今回の手法だと、Formのスレッドとは異なり、またBackgroundWorkerのスレッドとも異なるスレッドで処理されているようです。
このことから言えるのは、従来の方法だとFormの描画もUIのイベント(例えばボタンクリック)もKinectの処理もすべてシングルスレッドで処理していたことになりますので、本手法の効果は大きいと思います。

Ready系イベントをそれぞれ独立にスレッド化はできない
もしかして、Ready系の各イベントを別スレッド化するってこともできるんじゃないか?と思い、BackgroundWorkerを増やして試してましたが、残念ながらそれは無理でした。これらのイベントは1つのスレッドで処理されるようです。

以上、プログラムが肥大化した人は参考にしてください。

参考サイト
Kinect SDK C# FrameReady系イベントの実行スレッドについて



2014年3月5日水曜日

AWS SDK2.0 からのSimpleDBクライアントの呼び出し変更について

AWSのSDKのバージョンを上げたら動かなくなったので、、、、過去のソースが動かなくなるので注意です。



2014年3月1日土曜日

GitHub:authentication failed のメッセージが出てsyncできなくなった場合の対処法




ちょっと躓いたのでメモ書きです。普段、GitHub for Windowsを利用してGitHubにコードをアップするのですが、数日前より冒頭の図のようなメッセージが出てsyncができなくなりました。特にネットで話題になっているわけでもなく、バグとかサーバートラブルではない模様。調べてみて、
  • GitHub for Windowsを入れなおす
  • パスワードを変える
  • SSHKeyを作り直す(これは GitHub for Windowsなら不要?)
と試行錯誤をしつつも動かず。。。で、結局、
  • <ホームディレクト>\Appdata\Local\Temp
にあるファイルを全て消すということで、解決しました。メッセージを見る限り、認証関係のファイルが古くなっているので、それを最新にすればいいのですが、上述3つの方法では反映されないようで、であれば、どこかの古いファイルを見にいってるんだから。。。ということで、この方法をとりました。根本的な原因はわかりませんけど、とりあえずこれでよしとします。