2012-05-11 (Fri)
● Accessory Development Starter kit for Android
なぜか連休明けに急遽ESECへ打ち合わせの予定が入り東京へ。お客さんとの打ち合わせも早々に終えてESECもさらっと見た後、時間があったので十数年ぶりに秋葉原へ。記憶を頼りに行ったけど、案外覚えているものですんなりと行くことができた。で、Accsssory Development Starter kit for Androidを買ってしまった。まずはnetduinoで、とか思っていて後回しにしていたけど、送料かからないなら別にいっかー、くらいの感じで買ってしまった。家に帰って、MPLAB XとPICkit3でPICベースADKを動かす{Hacking My Way ~ itogのhack日記}を参考にとりあえずサンプルを動かしてみた。当たり前なんだけどあっさりと動いてしまった。
このキット、何がいいって、Arduino互換な入出力ピンがあるんで、Arduinoのシールドがそのまんま使える。netduinoでとりあえず3VなマブチモーターとRCサーボをそれぞれ2個ずつ動かせるものは自作してるから、それを使えばAndroidでロボットを制御なんてこともできる。しかし、Arduinoに手を出す前に互換ものばかり手を出してるな……。
2012-05-06 (Sun)
● Qtでキーベント&シリアル通信クラス
先日のQt勉強会の前後で調べたり試したりしたことをまとめておく。
まずは、キーイベントにつて。フォームというか、QMainWindowクラスのprotectedなメソッドにkeyPressEventとkeyReleaseEventがあり、それぞれがキー押下時、キー解放時に呼び出されるので、オーバーライドすればそれぞれのイベント発生時の処理を定義できる。ただ、キーを押しっぱなしの場合はkeyPressEventが繰り返し呼ばれることになるので、最初の押下にのみ対応する場合は、keyPressEventメソッドの引数であるQKeyEvent変数のQKeyEvent::isAutoRepeat()でオートリピートフラグを確認して、falseの場合のみ対応するようにすればいいようだ。また、QKeyEvent::key()で得られるキーコードは、アルファベットの場合は大文字となるようで、Aキーの押下/解放を検知する場合、'a'との比較ではなく'A'との比較で検知する必要があるようだ。当初、MacBook Air内BootCamp上のWindows7 HomeにインストールしたMinGW版Qt SDKでやったところ、keyPressEventは実行されたけど、keyReleaseEventは実行されなかった。OSX LionのQt SDKのデスクトップPCのWindows7 ProfessionalにインストールしたMinGW、VS2010版のQt SDKでもkeyReleaseEventは実行された。BootCampでの確認は再度必要かも?
あと、シリアル通信について。多分、MacでもWindowsでもLinuxでも、デバイスファイルを直接オープン/クローズ、リード/ライトすれば問題ないのだと思う。けど、せっかくC++な環境で動かすのにそれではもったいないので、シリアル通信のクラスを使いたいので、調べてみたらQextSerialPortというクラスライブラリがあるらしい。Qt @福岡 第6回勉強会 で発表してきました(wikubaの忘却日記)を参考にWindowsでのライブラリを作成したら簡単に実行できた。公式サイトから最新のβ版をダウンロードして、プロジェクトを開き、buildlibプロジェクトをビルドすればライブラリは生成される。んで、ヘッダファイルと、libファイルやdllをコピーすればすぐに使えるみたい。試していないけど受信イベントをシグナル化できるので、.NETのシリアルポートクラスと同じような形で簡単に使えるのはよさそう。
● netduino plusでmicroSDカードを使う
まだ確認しなきゃいけないことが幾つかあるようだけど、忘れないうちにメモ。netduino plusにあるmicroSDカードスロットを利用するためには、ウィザードで標準的に参照されるdllだけでなくて、System.IO、および、mscorlibを参照設定に追加する必要がある。それらを追加すると、System.IO名前空間のファイルの入出力関連のクラスが利用可能になる。
例えば、microSDカードの直下にあるtest.txtを読み込む場合は次のような感じでOK。
string path = @"\SD\test.txt"; // \SDがmicroSDカードのルートパス
try
{
if (System.IO.File.Exists(path))
{
System.IO.FileStream fs = new System.IO.FileStream(
path, System.IO.FileMode.Open, System.IO.FileAccess.Read. System.IO.FileShare.None
);
StreamReader sr = new StreamReadr(fs);
While (!sr.EndOfStream)
{
Debug.Print(sr.ReadLine();
}
sr.Close();
}
else
{
Debug.Print("File is not found.");
}
}
catch (Exception e)
{
Debug.Print("Unknown Error:" + e.Message);
}
このコードは、ファイルを1行ずつ読み込んでデバッグ出力するというもの。
同様に、StreamWriterクラスを使えばファイルの書き出しができると思ったんだけど、エラーも何も発生せずに正常終了するんだけど、microSDカードをWindowsで読み込むとファイルが存在しないので、そのあたりの調査が今後の課題。
2012-04-29 (Sun)
● 転職して1ヶ月まとめ
今日からゴールデンウィークに突入。今月はもう出勤がないので新しい職場での1ヶ月目は終了。案の定、新しい職場に馴染めないストレスからいきなり体調不良で数日休むことになってしまったのは申し訳ないと感じつつ、それを咎めつつも成果は成果できちんと口に出して認めてくれる上司には助かっている。多分、組織が小さい分だけ個人に目が届くというのもあるんだろうな、とは思うけれども。
仕事はとりあえずソフトをメインとしてやっていけるのだけれど、ハードの面倒も見ることに。設計とかはする必要がないけれど、外部に発注して問題がないかの確認は必要。現在抱えているのも、いろんな製品に汎用的に利用するつもりで設計したけど、今のところは製品ごとにカスタマイズしたファームを焼いて使ってるというボードの、汎用ファームの開発管理というのが1つ。ボードを開発した回路屋さんにテスト用の冶具を発注したり、開発されたファームの仕様調整やら動作確認やら。このあたりの経験は、ハードの知識とともにあんまりないから早めに慣れんといかん。
あと、ハードの受託開発案件も。こっちは、どちらかというと学生時代の専門に近い。というか、お客さんは大学の先輩だし、そのお客さんが使おうとしてる技術は恩師の研究論文を元にしてるし、一緒に研究する大学の人は卒論の諮問担当だった人だったりして。こっちの案件では、仕事で初めてLinuxへ取り組む可能性が高い。確かに面接でもLinuxは?と訊かれていたし覚悟はしていたけれど、まさか原理主義者に近い上司だったとは……。
また、仕事とは関係無いけれど人生で初めてバスを使って通勤してる。高校生の頃に雨の日にバスを使ったりしたことはあったけど、毎日バスに乗るのは初めてだ。田舎にある会社なので道路が混雑することがあまりないので、日によって到着時間が異なるなんていうことがないので楽チン。行きは乗り換えのタイミングぴったりで、しかも始発駅なので待ち時間ないから更に。ただ、帰りは時間が読めないことが多くてちょっと面倒ではあるけれど。それでも、以前と比べると通勤時間が2/3ほどになっているから、通勤の負担はだいぶ軽くなった。あとは、自転車で通勤出来るだけの体力をつけて、自転車通勤がしたい。夏場は汗だくで迷惑だろうけども。
とりあえず、これからもできることは迅速にをモットーにてきとーにやっていこう。
2012-04-15 (Sun)
● Canvasクラスで画像描画
ウェブカメラ搭載ロボットで、どうせならカメラ画像上に進行方向とかをオーバーレイ表示できたらかっこいいなーとか思って調べてみたら簡単だったので忘れないようにメモ。
// Bitmap img = (カメラ画像オブジェクト) float center_x = (float) img.getWIdth() / 2; // ビットマップの中心座標 float height = (float) img.getHeight(); // ビットマップの高さ Canvas canvas = new Canvas(img); // 描画対象となるCanvasオブジェクト Paint paint = new Paint(); // 描画する線などのPaintオブジェクト paint.setStyle(Paint.Style.STROKE); // 実践 paint.setColor(Color.RED); // 赤 paint.setStrokeWidth(5); // 線幅5px paint.setAlpha(128); // 50%で透過(0~255) // 上向き矢印を中央に描画するためのPathを生成 Path path = new Path(); path.moveTo(center_x - 20, 30); path.lintTo(center_x, 10); path.lineTo(center_x + 20, 30); path.moveTo(center_x, 10); path.lineTo(center_x, height - 10); canvas.drawPath(path, paint);
2012-04-01 (Sun)
● 心機一転
明日から新しい職場へ移るので筆記用具を新調してみた。
ノートカバーとノートの組み合わせで、CamiAppでデジタル化できることも確認済み。なかなかいいんでなかろうか。
万年筆のサファリは前からいいとは聞いてみたので買ってみたらすごく満足!さらさらと書けるのが万年筆のイメージが変わった。
キングジム レザフェス ノ-トカバ- A5 黒 1991LFクロ
キングジム
¥ 1,200
LAMY サファリ イエロー万年筆EF L18-EF
LAMY
¥ 2,300
LAMY インクボトル ブラック 50ml LT52BK
LAMY
¥ 735
LAMY インクコンバーター(サファリ・アルスター用) LZ24
LAMY
¥ 500
ブロックロディア No.16 【方眼】(148×210mm) cf16200
Rhodia/ロディア
¥ 400
● GLAXY Nexus買ったてしまった
じゃんぱらで26800円だったのでつい。とりあえずICSで何をするか、っていうよりは、タブレットとスマートフォンを揃える意味での購入としよう。んで、ゆっくりと計画を練って、ADKなりmicro Bridgeなりをきちんと考えて開発に臨もう。
それにしても、GALAXY Tabとは比べ物にならんな。