にけのて
Nike+iPod と JogNote を使ってジョギング。で、Mac から Nike+ のデータをあれこれ見たくなったので、ちょこちょこっと作ってみた。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

にけのて v0.9.1
バグフィックス!
なんと、にけのて v0.9.0 は 5km/10km のスプリットタイムが間違ってた…
連絡してくれた方々ありがとうございます。
ちょっと忙しくて、修正まで時間がかかってしまってすみません。

問題点はすっごく単純。0 を忘れてたよ~。
基本なのに…駄目じゃん!


テーマ:Mac - ジャンル:コンピュータ

にてのて v0.9.0
nikenoteMainWindow090
nikenoteChartA
nikenteChartB

にけのて v0.9.0 をリリース。前のバージョン v0.8.6 との違いはこんな感じ。

・以前は iPod を接続してその中にあるワークアウトデータを表示していたが、今バージョンからは iPod 内のデータを Mac にコピーしてそのデータを表示するようにした。結果、iPod を接続しなくても既にコピーされているデータで表示ができる。(以前も Mac にコピーしたワークアウトデータをドラッグ&ドロップで表示できたけど…)

・メインの画面のワークアウトを選択する票に時間と距離も表示するようにした。

・OS の新しい機能を使ってみたかったので、MacOS X 10.5 以降でのみ動作するようになった。

・ファイルサイズが倍以上に大きくなった!(なんで???)

というわけで、1から書き直してみた。Binding と Fast Enumeration のおかげで色々な部分がかなり楽チンに。前のバージョンは一部しか Binding してなかったのだけど、今回は目一杯してみた。Fast Enumeration はもうこれ無しには回せない!って感じ。
でも、Property は思いのほか嬉しくはなかったかもしれない。使う為に記述しなきゃいけない部分が結構多く感じた。細かく指定しないでデフォルトで OK!って事にすればもっと少なくなるんだろうけど…。



テーマ:Mac - ジャンル:コンピュータ

Mac の にけのて 最初から
Visual Studio 2008 を使って C# で Windows 版のにけのてを作った時に、新しい事を知ったりちょっと UI や中の作りを変えてみたりした。というわけで、Mac もそれに合わせてまた1から作り直してみてる。Objective-C 2.0 でガベージコレクション様に全てを任せて!
nikeNoteMainWindow


XML ファイルのパース
今回は XML ファイルのパースで XPath を知った件。こんなんあったんだ~!
Mac で作ってた時は NSXML~の API リファレンスを斜め読みして、あ~だこ~だ言いながら NSXMLNode をたぐってなんとかなるじゃん!と、かなり強引にパースしてた。で、Windows の C# で XML はどうするのかな?とググってみたら思い切りたくさん情報が!そこで初めて知った、XPath。ってか、最初に XML パースする時に調べて気付けよ!って感じなんだけど…。

にけのて のメイン画面で表示している各種データは、ワークアウトデータの中にある <RunSummary> データそのまま。これはツリーの上から辿ると <sportsData><runSummary> の順になって、XPath を使ってこんな感じでゲットできる。

NSArray* runSummary = [rootNode nodesForXPath:@"/sportsData/runSummary" error:&myError];

これで の中に入っている <distance> や <duration> なんかの各ノード(NSXMLNode)が配列になって runSummary に入る。後は配列を Fast Enumeration でアクセスすれば OK!


次に 1km 毎のラップタイムだけど、これは <sportsData><snapShotList snapShotType="kmSplit"> の中に 1km 毎に <snapShot> として入ってる。でも、この snapShotType="kmSplit" の部分が kmSplit、mileSplit、userClick の3種類ある。この中から snapShotType="kmSplit" だけをゲットするには以下の XPath。

NSArray* kmSnapShotList = [rootNode nodesForXPath:@"//snapShotList[@snapShotType='kmSplit']" error:&myError];

これで snapShotType="kmSplit" の中身 <snapShot> が配列でゲットできる。で、これを Fast Enumeration でアクセス!

for(NSXMLNode* snapShot in kmSnapShotList)
{
NSMutableDictionary* snapShotDictionary = [NSMutableDictionary dictionary];
for(NSXMLNode* snapShotData in snapShot)
{
[snapShotDictionary setValue:[snapShotData valueString] forKey:[snapShotData name]];
}
[snapShotArrayController addObject:snapShotDictionary];
}
(う…、インデントが…。タブ駄目なのね。)

こんな感じで 1km 毎の <snapShot> の中身 duration, distance, pace の値を、snapShotArrayController に binding されている NSTableView に表示ができる。(ちょっと日本語変?)
ってか、Fast Enumeration 凄い便利!


それにしても、今思うと最初は凄い頑張ってデータ取り出していたんだな~。本当はこんなに簡単にデータ取り出せたのに…。
XPath のこんなもあるのね。


テーマ:Mac - ジャンル:コンピュータ

にけのて for Windows を Visual Studio で作ってみた
先日 Visual Studio 2008 の DVD が手元にやってきた。というわけで、GW 中に Visual Studio 2008 を使って「にけのて」の Windows バージョンを作ってみたので、その簡単なメモ。

nikeNoteWin06


C# とインテリセンス
言語は C# を選択。なんか MS 一押しなんでしょ? せっかくだから C# でトライ。で、今回の驚きは噂には聞いていたけれどインテリセンスって凄いな~って事。C# のドットで繋げる記述とインテリセンスの組み合わせでさくさくとコードの入力ができる。API 全然知らない自分でも出てくる候補でなんとなく先に進める。簡単なリファレンスガイドにもなってくれたりして、こりゃ凄いな~。Xcode で Objective-C の時にも候補を出したりできるけど、こんなに使い勝手が良いとは言えないし。
その代わり? デザインの編集は InterfaceBuilder の方が全然使いやすい気がする。IB ならわからなくてもアレコレいぢってるとなんとかなるし。ま、自分の場合はWindows での作り方を良く知らないから使えないってのかもしれないけど、凄く一生懸命プロパティ見たりしてもなんだかどうにもわからないんだよな。結局、ウィンドウサイズを大きくしたら中のグラフが大きくなるってのはできなかった…。ばねと突っ張り棒の変更が見つからないんだよ~!

情報量が桁違い!
やっぱり Windows 環境は凄い! ググったら物凄い量の情報が出てくる! 少ない情報を、しかも英語で読むって必要が全くなかった。この辺りは Mac と全然違うな~。今回、XML をいぢる辺りで色々と勉強になった。Cocoa でももっと簡単にワークアウトのデータをあれこれできたんだな~。後で作り替えよう!

勉強不足は否めない
でも、結局やり残している事はたくさん。ListView での Binding やウィンドウのサイズに合わせてグラフ(PictureBox)のサイズも自動的に変わるとか、Xcode と IB ならサクっとできるんだけど VisualStudio だと見つからないってのが結構ある。ちゃんと勉強すれば良いのだろうけど、今回はちょこっと触ってみたって範囲でやってみようと思ったのでこんなもん。
でも、おかげで色々と新しいことを知ったりもしたので、ちょっと Mac の方もアップデートしてみようと思った。Objective-C 2.0 でプロパティや Fast Enumerator をガンガン使うと結構コード書くのが早くなりそうだし。せっかくなのでガベージコレクション様に全てを任せて最初からのびのびと?書いてみよう!



テーマ:プログラミング - ジャンル:コンピュータ

SDL のデモを Mac の Xcode でビルドしてみた
とりあえず選んだデモコレ、Bouncing Penguin。デモを上から見ていって MacOS X のマークが付いてるのがなかなか出てこなくて…。Boom と Bouncing Penguin でどちらにしようか迷って、ペンギンなのでこっちにした。
ダウンロードした bouncing.zip を展開すると…macosx フォルダに Xcode のプロジェクトファイルがあるわけじゃなく…。README には make してね!とあるけど、今回は Xcode で SDL のテンプレートを使ってビルドしたいので make はしない。

bouncing.c を眺めてみるとどうやら SDL_mixer の Framework が必要らしい。ググってさっくりバイナリをダウンロード。マウントして SDL_mixer.framework を /ライブラリ/Frameworks/ へコピー。これで準備は OK。
SDL_mixer


まずは Xcode を起動して SDL Application のプロジェクトを作る。
SDL-Application

名前は myBouncing にする。
SDLprojectName

出来上がったプロジェクトに Framework を加える。/ライブラリ/Frameworks/ から SDL.framework と SDL_mixer.framework を Frameworks グループへドラッグ&ドロップ。
SDLaddFramework

ダイアログには特に何もせずに[追加]をクリック。
SDLaddFrameworkDialog

次にデモの bouncing フォルダから画像データ(bouncing.bmp)と音データ(bouncing.wav)を Resources グループへドラッグ&ドロップ。これもダイアログには何もせずに [追加] をクリック。
SDLprojectAll


ソースコードは bouncing.c をそのまま main.c にコピーして、コピーした main.c の int main をオリジナルのもの

int main(int argc, char *argv[])


にしておく。

これでビルドすれば OK!と思ったのだけど、エラーが出た。

/Users/paraches/myBouncing/main.c:12:23: error: SDL_mixer.h: No such file or directory


だそうだ。う~ん、ヘッダファイルが見つかってない???
というわけで、ターゲットを選択して command+I で情報を見る。ビルドタブ?の下の方、検索パスのヘッダ検索パスに /ライブラリ/Frameworks/SDL_mixer.framework/Headers/ を加えた。
SDLaddHeader

再度ビルドすると今度は無事ビルド終了。
早速実行すると…GDB が起動。コンソールを見ると

Error: 'bouncing.bmp' could not be open: Couldn't open bouncing.bmp


だそうだ。

どうやら

s_surface = SDL_LoadBMP("bouncing.bmp");


ここで bouncing.bmp が読み込めてないらしい。リソースはどうやって読むのよ?と思ったら、どうもファイルを読むのはアプリケーションと同じフォルダにあれば読めるらしい。それじゃデータをアプリの中に入れられないじゃん?と思ったらこんな事をして読み込むんだそうな。

s_surface = SDL_LoadBMP("myBouncing.app/Contents/Resources/bouncing.bmp");


なんか格好悪い。アプリの名前をコロコロ変える事はないだろうけど、それをソース内に書いちゃうのはなぁ~。
で、SDLMain.m の方を見ると

- (void) setupWorkingDirectory:(BOOL)shouldChdir


なんてものが。アプリケーションの起動が終わった時に呼ばれてる。ここでカレント?フォルダをアプリケーションのあるフォルダにしているので、そうでなくて Contents/Resources フォルダをカレントフォルダにしてしまえば良いんじゃない?
というわけで

[[NSFileManager defaultManager] changeCurrentDirectoryPath:[[NSBundle mainBundle] resourcePath]];


を - (void) setupWorkingDirectory:(BOOL)shouldChdir の最後に入れておいた。これで必ずカレント?フォルダを Contents/Resources に変更できる。

というわけで、再度ビルドして起動!
無事エラーも出さずに bouncing penguin が起動した!

それにしても、Xcode の使い方あんまりわかってないな~。

テーマ:Mac - ジャンル:コンピュータ




プロフィール

paraches

Author:paraches
Nike+iPod で走ってお腹を…

にけのて ダウンロード

Nike+iPod

温泉旅行

宿・ホテル予約ならじゃらんnet

最近の記事

Zenback

ランキング

人気ブログランキングへ

アクセストレード

バリューコマース

最近のコメント

月別アーカイブ

RSSフィード

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。