Windows Phoneアプリ開発のはじめ方
Kinect SDK動作確認専用マシンにしていたThinkpadにWP開発環境を整えて勉強中。忘れがちなのでセットアップ手順をまとめた。実機と仮想環境の両方でやってみたけどどちらも問題無く開発はできる。
APP HUBに開発者登録をする
年間サブスクリプション 9,800 円 (税込) 也。シミュレーターを使って開発するだけなら必要無い、実機転送に必要。
開発ツールのインストール
Visual Studio 2010 Service Pack 1
Windows Phone SDK 7.1 RC版
現在の最新版が7.1RCなのでそれを入れる
ダウンロード詳細 Windows Phone SDK 7.1 RC (リリース候補)
http://www.microsoft.com/downloads/ja-jp/details.aspx?familyid=14700b35-30c3-47f3-9e67-7701a06fde00
Zune
端末のアンロックに必要なのでインストールする
端末のアンロック
Zuneを起動して端末の接続を行なう。
スタートメニュー > Windows Phone SDK 7.1 > Windows Phone Developer Registration を起動してAPP HUBに登録したWindows Live IDで端末をアンロックする。ZUNEは起動したままにしておく。
アプリケーションの作成
スタートメニューからMicrosoft Visual Studio 2010 Express for Windowsを起動する。
デバイスの選択でWindows Phone Deviceを選ぶと実機で動作する。この時はZuneを起動しておくのと、端末のロックを解除しておく。
情報源
Windows Phoneハッカソンを開催しました
auのWindows Phone端末IS12Tを発売直後に購入したものの、アプリ開発に着手できていなかったのでハッカソンをやる事にしました。
主催者の私が端末のアンロックはおろかC#を一行も書いた事がないという状態でしたが、既にバリバリにWP開発をされている経験豊富な猛者達に加えてエヴァンジェリストの高橋忍さんが急遽本の宣伝にやってきたりと、非常に濃い時間となりました。
個人的にはC#の進化に目から鱗だったのと、WPのアーキテクチャ、Windows8でWeb開発者を取りこもうとするMSの思惑あたりの話が聴けたのも大きな収穫。端末のアンロックから実機転送のやり方まで教えてもらいC#の勉強もできた。
@sasaoさんが持ってきたWindows8の動いてる端末
@shinoblogaviさんに貰ったWP用UIデザインキット
肝心の開発というと私はGoogle LatitudeのAPIを叩くアプリを作ろうとしていたのですが、GoogleのLatitude用C#ライブラリがWindows Phoneに載せられない事が判明して頓挫。続きは自宅で完成させる事に。しばらくは月に一回のペースでやっていこうと思います。
参加者の皆様ありがとうございました!!
「キネクトハッカーズマニュアル」のサポートページ
Sphinxで生成したドキュメントをgithub:pagesにアップする
github;pagesはアンダースコアから始まるディレクトリを無視するらしく、sphinxが生成する_staticディレクトリの中のcss, jsファイルが参照できずに404になってしまう。一体どうしたものかと調べたら、それ用のsphinxのエクステンションがあった。
とりあえずアップできた。
Welcome to Kinect Book Support’s documentation! ― Kinect Book Support v1.0 documentation
http://hagino3000.github.com/kinectbook/gen/html/index.html
github:pages便利ですね。コメント欄はfacebookの奴にしてしまえばサポートページもこれだけでいける気がする。
第3回Kinect勉強会を開催します
会場が変わって今回は品川の日本マイクロソフト本社での開催です。なんでかと言うとShibuya.NIはマイクロソフトのコミュニティ支援サービス(UGSS)公認のグループになったからですね。
既に定員に近くなっていますが登録はこちらから。
内容
KINECT for Windows SDKによる開発と応用
担当: 日本マイクロソフト 太田氏
時間: 25分
本セッションでは、KINECT for Windows SDKとSDKが提供する機能、及び、その使い方を解説します。
色々と夢広がるKINECTですが、KINECT自体は単なるセンサーに過ぎません。本セッションでは、KINECTとWindowsの諸機能やWindows Phone 7との組合せによる応用方法についても解説します。
NUI x Business
担当: @kaorun55氏
時間: 25分
KINECT関連をビジネスにするときの経験談。ライセンス関連や必要な知識などについて。 技術的な要素よりも、KINECTを含めたソフトウェア開発全般的なお話になる予定
NUIみたいななにか(仮)
担当: @nekonomics氏
時間: 25分
今作っている、「NUIみたいな何か」について話をしたり、デモをしたりする予定です。時間の長いLTみたいになるかなと思います。詳細はまた後ほど追記します。
Kinect本を執筆しました
Amazonのページができたので詳細告知します。
- 書名
- キネクトハッカーズマニュアル
- 著者
- @hagino3000 + 小野 憲史
- 発売日
- 2011-08-26
- 価格
- 2,604 JPY (256ページ)
対象読者
- Kinectハックに手を出してみたい人
- Kinectのドライバに何を使おうか悩んでいる人
- プログラムは書けるけど画像処理はさっぱりという人
- プログラムは書けるけどネイティブアプリはさっぱりという人
- エンジニアじゃないけどKinectで何ができるか知りたい人
解説コードは主にC++、あとJavaScriptを少し使っています。C++といってもKinectをマシンに繋いでから初めてC++のHello Worldをやった人間が書いているので難しいコードは出てきません。
内容
私が書いた範囲だとこんな感じです。
- Kinectの各パーツの解説
- 深度センサ、ビデオカメラ、チルトモーター、アレイマイク、加速度センサ、LEDについて。各センサーのスペックや特許技術について書きました。
- Kinectのドライバについて
- libfreenect, Kinect SDK for Windows, OpenNIについてそれぞれの特徴と差異の解説。どのドライバ使えばいいの、みたいな話とか。Kinect SDKが出るのがもうちょっと遅かったら載せられない所だった……。姿勢認識技術の違いも。
- openFrameworks
- C++のメディアインタラクション製作環境のopenFrameworksについて。openFrameworksの使い方、Kinectを扱うためのアドオン(ofxKinect, ofxOpenNI)の使い方。
サイボウズのスケジュールをGrowl通知する
Nodeで取ってきて、growlnotifiyに突っ込んでみた。サイボウズガルーンのAPIはSOAP(xmlをHTTP POSTで叩けばいい)だけど、ドキュメントが見つからなかったので元々あったライブラリをNodeで動く様に改造して使った。
cybozu-connect - Cybozu API JavaScript Library - Google Project Hosting
http://code.google.com/p/cybozu-connect/
cybozu-connectがjQueryを使っていたので、jsdomでWindowオブジェクトを作ってjQueryをロードした。
直近30分のスケジュールを取得してGrowlするコードはこんな感じ。
あとは更新のあった掲示板の内容を全てFastladderにぶち込んだりしたい。
#!/opt/local/bin/node var Cybozu = require('./thirdparty/cybozu-connect.js'), growl = require('growl'), SETTINGS = require('./settings.js'); Cybozu.init(SETTINGS.JQUERY_PATH, function(API) { if (API) { growl.notify('Cheking Cybozu schedules.......'); var con = new API.CybozuConnect.App(SETTINGS.URL, SETTINGS.LOGIN_NAME, SETTINGS.PASSWORD); //console.info('Login info ----------------'); //console.info(con.user); // 直近60分のスケジュールを取得する var now = new Date(); var offset = 1000*60*60; var end = new Date(+now + offset); var schedule = new API.CybozuConnect.Schedule(con); var events = schedule.getEvents({ start : now, end : end, userIdList : [con.user.id] }, true); if (events.users && events.users[con.user.id]) { console.info(events.users); events.users[con.user.id].forEach(function(s) { if (!s.allDay) { glowlEvent(s); } }); } } else { console.info('failed to init cybozu api'); } }); function glowlEvent(e) { var start = new Date(e.start); growl.notify(e.title, { title: 'Cybozu: ' + start.toLocaleTimeString(), sticky: true }); }