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

テーブルをソートできるようにした
テーブルに上向き/下向きの三角マークが出て、そこを押すとそのカラムが昇順/降順でソートされるってのを良く見かける。それをにけのてでもやってみた。

InterfaceBuilder に NSArrayControler があるからこれを使うと簡単なんだろうけど、にけのてでは使ってない。使うようにいぢるのは面倒なので、手作業でじっくり実装していこう。

まず、テーブルで表示されるデータのデータの持ち方。Apple の Cocoa のドキュメントを見ると KeyValueCodingって呼ばれてる。値を名前で呼び出すみたいな?感じ。にけのてだと各ワークアウトウインドウのテーブルでは、K、タイム、1KmSplit、5KmSplit の4つのカラムがある。これを k[]、time[]、1KmSplit[]、5KmSplit[] の様にそれぞれのデータ毎に持ったり、struct myKmData {K, time, 1KmSplit, 5KmSplit}; myKmData[];ってするんじゃない。struct でやる方は考え方は同じ?なのだけど、値を得るのに名前(key)でやりとりできるようにしなきゃいけない。というわけで、struct でなく Dictionary で myKmData を作る。今回は k, time, 1KmSplit, 2KmSplit はそれぞれ km, sec, 1KmSplit, 5KmSplit という key でアクセス。例えば sec のデータをセットするにはこんな感じ。

[myKmData setValue:[[nextNode childAtIndex:0] stringValue] forKey:@"sec"]; //Add "sec" data to dictionary

で、この myKmData を NSMutableArray に付け足していけばテーブルのデータができあがる。

NSMutableDictionary* myKmDataArray;
[myKmDataArray addObject:myKmData]; // Add myKmData to datasource array

次に InterfaceBuilder で NSTableView にソートする時の key 等を入力する。これは NSTableView の各カラムのアトリビュートに sort key を入れる。ここで入れた sort key が myData の key になってる。
NSTableColumn


最後にコードの方にちょこちょこっと。datasource になってるクラスで

-(void) tableView:(NSTableView *)tableView sortDescriptorsDidChange:(NSArray *)oldDescriptors

を実装する。これは、上向き/下向きの三角マークが変更になった時(クリックされた時)に呼び出される。
中身は簡単。データを持ってる NSMutableArray(myKmDataArrayだ)に新しい sortDescriptors をセットして、テーブルを表示し直せば(reloadData だ)OK。
とりあえず、これだけでテーブルは上向き/下向きの三角マークでソートできるようになった!

この KeyValueCodingって名前(NSString)を使って値にアクセスするから変換やら何やらの手間がかかって遅いようなイメージがあるのだけど、今時の速いマシンでそんなの気にするのは意味ないのかな? でも、にけのてでは扱うワークアウトデータが .xml ファイルなのだけど、.xml ファイルを読み込んでデータとしてあれこれするのに keyValueCoding は結構良いのかも。なんか凄く簡単にというか都合良くデータを読み込んで格納できた。
sortedGraph


スポンサーサイト

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

にけのて v0.8.3
にけのて/のバージョンを 0.8.3 に。

変更はちょっとだけ。
●不可視になっているバックアップしたワークアウトデータ(Empeds フォルダ)を可視にできるようにした
この機能は前に書いたけど Developer Tool に含まれる SetFile が必要。SetFile が無かったり、ホームディレクトリにバックアップファイル(Empeds フォルダ)が無い場合にはメニューはグレーになる

●グラフのスケールをワークアウトデータに合わせて自動的に変更するようにした。
今までは 1km のスプリットが 10分、トータルの時間が 60分で固定だった。これは自分のタイムに合わせた状態だったのだけど、友人が Nike+iPod Sports Kit を買ったので、もうちょっと幅を持たせるようにした。具体的には 1km のスプリットが 30分まで、トータルの時間が 180分までならグラフがちゃんと描ける…はず。まだ、そんなデータが無いのできちんと動作するかどうかは…???

グラフが大きくなった


テーマ:フリーソフト - ジャンル:コンピュータ

NSMenuItem をグレーにするには
にけのてのバックアップ関係のメニューを、iPod が接続されていない等の使えない状態の時にグレーにしようと思った。なんとなく NSMenuItem に enable/disable な感じで設定すれば良いんじゃないかな?と思ってリファレンスを見てみた。結果、さっくりと
- (void)setEnabled:(BOOL)flag
が見つかった。flag に YES/NO を渡せばグレーになったり、元に戻ったりすると思ったんだけど…
これがそうはならなかった。う~ん、NSButton なんかは setEnabled でできるんだけど。

で、面倒くさがらずにちゃんとあれこれ読んでみると、validateMenuItem が関係しているようだ。なにやら NSMenuItem の target に
- (BOOL)validateMenuItem:(id )menuItem
を実装しなきゃいけないらしい。この中で、メニューアイテムが使えるなら YES、使えない(グレー)なら NO を返すと。機能が実装されているオブジェクトで使えるか使えないかの責任を持つのね。メニュー表示の度に問い合わせてくるので、状況によって YES/NO を変更できると。
早速リファレンスに載ってるサンプルを真似て実装。が、なぜかグレーにならない。なんで? 何もしないで NO を返せばグレーになるので、中の処理の問題。デバッガで追うとセレクタの判断ができていない様子。なぜ???

というわけで、あれこれ探して見つけた原因はセレクタのメソッド名の最後に :(コロン)が無かったのがいけなかったみたい。サンプルは : 無しになってるのに…。ま、なんとか動いたから良いけど、これってサンプルが間違ってるのか、他にもっと理由があるのか?わかると嬉しいな~。
状態によってちゃんとグレーになる!


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

Nike+iPod nano のデータ移行がうまくいった
11日の夜中(既に 12日になってるか)に今年の走り初めを終了。年末の入院騒ぎとかあって 20日ぶりのジョギング。さすがに呼吸が苦しくなったしタイムも 3分ほど遅かったりした。
で、Nike+ にデータ転送してから iPod の総計のデータが復活。Nike+ にデータ転送をした後で、iPod 本体の履歴を見ようとしたら、ログを読み込み中ですと出てきて、その後で総計を確認するとしっかり総計データが復活していた。う~ん、Nike+ にアクセスすると復活するのか~。バックアップとか必要なかったってことか…。

とりあえず、今回やったことを書き留めておく。
1. iPod 1st gen のワークアウトデータをにけのてでバックアップする
2. にけのてiPod 2nd gen へワークアウトデータをリストアする
3. この時点で iPod 2nd gen のデータの履歴の総計以外は復活
4. Nike+ にアクセスしても、総計は復活しない
5. Nike+ iPod 2nd gen でワークアウト
6. Mac に接続して Nike+ へワークアウトデータを転送
7. Mac から外して iPod 2nd gen のデータの履歴、総計を確認。データ復活!

ま、これで無事に iPod nano 1st gen から iPod nano 2nd gen へワークアウトデータが移行できたのでめでたしめでたし!
総計データ復活!


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

見えないファイルを見てみよう
iPod に入っている Nike+ のデータは iPod_Control というフォルダに入っているけど、このフォルダは Finder では見えないにけのてバックアップをとるデータは iPod_Control の中の Empeds をホームフォルダにコピーしている。この Empeds もやっぱり Finder では見えないバックアップをしてもコピーされた Empeds フォルダが見えないとちょっと気持ち悪い。そこでこのフォルダを Finder で見えるようにしようと考えた。
で、どうやったらこのフォルダは Finder で見えるようになるか? どうやら普通には見えるようにならないみたい。これをやるには Developer Tool が必要。インストールすると Developer/Tools というフォルダができてここに SetFile というコマンドがある。これを使うとファイルのアトリビュートをあれこれ変更することができる。使い方は…

Usage: SetFile [option...] file...
-a attributes # attributes (lowercase = 0, uppercase = 1)*
-c creator # file creator
-d date # creation date (mm/dd/[yy]yy [hh:mm[:ss] [AM | PM]])*
-m date # modification date (mm/dd/[yy]yy [hh:mm[:ss] [AM | PM]])*
-P # perform action on symlink instead of following it
-t type # file type

Note: The following attributes may be used with the -a option:
A Alias file
B Bundle
C Custom icon*
D Desktop*
E Hidden extension*
I Inited*
M Shared (can run multiple times)
N No INIT resources
L Locked
S System (name locked)
T Stationery
V Invisible*
Z Busy*

Note: Items marked with an asterisk (*) are allowed with folders
Note: Period (.) represents the current date and time.
Note: [yy]yy < 100 assumes 21th century, e.g. 20yy

だそうだ。
ここの V Invisible が Finder で見えるか見えないかのスイッチ。このスイッチは小文字の v を指定すると off で大文字の V が on だ。だからホームフォルダにある Empeds を Finder で見えるようにするにはホームフォルダで以下のようにすれば良い。

macBook:~ paraches$ /Volumes/Macintosh? HD/Developer/Tools/SetFile -a v ./Empeds/

これで Empeds フォルダが Finder で見えるようになった。
が、しかし、そのままではまだ見えない。どうやら Finder が Empeds フォルダのアトリビュートが変更された事に気付く必要があるらしい。システムの再起動、アカウントのログアウト&イン、Finder の再起動、この辺りで Finder から見えるようになる。

また、この Developer/Tools フォルダには GetFileInfo というコマンドもあって、このコマンドでファイルの色々な情報を見ることができる。

macBook:~ paraches$ /Volumes/Macintosh? HD/Developer/Tools/GetFileInfo ./Empeds/
directory: "/Users/paraches/Empeds"
attributes: avbstclinmedz
created: 11/02/2006 20:52:01
modified: 11/11/2006 17:42:30
macBook:~ paraches$

というわけで、Developer Tool がインストールされている場合にはにけのてで Empeds フォルダを見えるようにする機能もあると嬉しいな。

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

iPod nano 2nd Gen 買ってデータの移行
友人から借りている iPod nano 1st gen でジョギングを続けるのもなんなので、新旧 iPod Shuffle を持っているけれども iPod nano 2nd gen の一番安いのを購入。これで友人に iPod nano を返却できる。ほぼ2ヶ月間も借りてしまった…

で、この iPod nano 2nd gen だけど、なんていうかカッコ悪い。小さな iPod miniって形が嫌。1st gen のオリジナル iPod が小さくなった!って感じが良かったのに…。なんだかカッコ良くないんだよな~。ま、ジョギングする時だけしか使わないから良しとしよう。

さて、Nike+iPod のデータの移行はどうするんだろう? ちょっと調べてみた限りではオフィシャルな情報って無いんじゃないかと。たぶん、実際のワークアウトデータは Nike+ のサーバに転送されているから問題ないんじゃない?ってスタンスなんだと思うけど、それじゃ iPod nano 本体で個別のワークアウトデータ情報を見たりできないじゃない? (それとも、ワークアウトデータを Nike+ に登録する時に実は古いデータを iPod に落として来てくれたりもする?

というわけで、実験してみた。手順は以下の通り
1. iPod nano 1st gen のデータをにけのてでバックアップ
2. iPod nano 2nd gen へにけのてでリストア
この為に急遽にけのてにリストアコマンドを追加して 0.8.2a を作った。

結果は…各ワークアウトデータの情報は iPod nano で見られるようになった!これは嬉しい。が、しかし、1つ問題が…なぜか履歴の総計が全部リセットされてしまっている。なんでだろう? iPod nano 内の preference.xml にはちゃんとデータが入っているのに。Nike+iPod sport kit のシリアル毎にデータは管理しているから、各シリアルのフォルダ内にあるデータを使っていると思うんだけどな~。何か見落としているんだろうけど…。ま、いっか。

リセットされた総計


で、この作業をした後はまだ走っていないのだ。なぜならば、入院していたから…。なぜかクリスマス前から激しい下痢が止まらなくなってしまい、脱水症状っぽくなって動けなくなった。なんとか病院まで辿り着いて点滴でも射ってもらったら治るだろうなんて考えていたら、急遽入院になってしまった。で、大晦日になんとか退院して来たという状況。下痢、流行のノロウィルスでなくてもなめてかかっちゃいけない…

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




プロフィール

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

にけのて ダウンロード

Nike+iPod

温泉旅行

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

最近の記事

Zenback

ランキング

人気ブログランキングへ

アクセストレード

バリューコマース

最近のコメント

月別アーカイブ

RSSフィード

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