2010/08/30

MacBookPro13バッテリーの持ちについて

このエントリーをはてなブックマークに追加

MacBookPro13のバッテリー駆動時間


細かな計測はしてないけれど、Mac起動時では5、6時間くらい余裕で持つようです。
bootcampによるWindows7の持ちが2時間くらいで閉口してたけれど、Aeroをオフにしてみたら倍以上も持つようになりました。これで安心。サクサク動くもんだから気にしなかったけれど、グラフィックが食ってたようです。



MacBook13 バッテリー(大体の目安です)
・MacOSX10.6 → 5-6時間くらい
・Windows7(Aeroあり) → 2.5時間くらい
・Windows7(Aeroなし) → 5時間くらい

当然ながら、個々の環境や作業具合によってまちまちなので注意。
しっかり計測してません。時間は、わりと感覚で書いてますがご留意ください。嬉しいことですが、バッテリー持ちが良すぎるせいで、フル充電して空になるまで長くて検証する気がしません。ちなみに、公式には、一回の充電で最長10時間駆動と書いていますね。

駆動時間を延ばすための節電対策


バッテリーの駆動時間を延ばすためには、電力を消費しているところに注目していけばいいのです。電力を食う箇所は、液晶(モニタ)、CPU、グラフィック、HDD、その他のデバイスへのアクセスなどとして割り切ると考えやすい。
ざっくり言うと、Windowsなら「省電力モード」に切り替えればよいと思うのですが、細かなことを列挙していきます。

・不要なアプリを起動しない。
・使用しないときはスリープ/休止状態に切り替える。
・液晶を暗くする。(使用に耐えるレベルで)
・Windows、その他ソフトの自動アップデートを行わないようにする。
・無線LANを使用しない。
・スピーカーを使用しない。
・USBに不要なデバイスを接続しない。

ただし、これはあくまでおせっかいだけど、節電対策は作業効率に影響がない範囲で行うようにしましょう。真っ暗な液晶相手に、細目で作業するとか、むしろ作業が長引いてしまって意味がなくなる気がします。

2010/08/28

アートワークがダブりすぎる

このエントリーをはてなブックマークに追加

pillowsのMyFootの増殖が半端ないですね。

バグなんだと思いますが。
iPhone3.2のときからiOS4になっても変わらず。以前書いたように、最初は2つや3つに分裂するアルバムがあって、まあいいかと思ってたけれど、気が付くと育っておりました。
同期に時間掛かりすぎるので、もはや丸ごと入れなおしたりして検証する気にもならないなあ。

2010/08/25

[Objective-C]配列に数値を扱う

このエントリーをはてなブックマークに追加
Objective-C入門したてです。iOS4 SDKなんぞをいじっています。

要素数が不変の配列を生成して、その要素を逐次更新していくようなコードを書きたかったわけですが、3時間ほど手探り状態のままはまってしまいました。

C#で書くと下記3行のようなこと。

int[] list; // ①宣言
list = {1,2,3,4,5}; // ②初期化
list[2] += 1; // ③更新

Objective-Cで配列を扱うには、int[]かNSArrayかNSMutableArrayを使用する。

int[]は宣言時に要素数が固定できる場合にしか使用できない。

NSArrayは固定化された配列を扱う場合、NSMutableArrayは動的に要素数を増やしたり減らしたりできる配列。NSMutableArrayで配列を構成しておいてNSArrayに格納し直す方法を使うと、初期化の時点で要素数を固定できれば、宣言時には指定しなくてもいい。

ただしNSArrayもNSMutableArrayも、格納できるのはオブジェクトだけなので、数値を扱う場合にはそのままでは格納できません。NSNumberクラスを利用してラッピングしてあげる必要があるようです。やれやれ、この時点でもう面倒くさいです。

●NSArrayを使用する(要素の更新が不要な場合)


// ①宣言
NSArray *list; 

// ②初期化
NSMutableArray *mlist = [[NSMutableArray alloc] init];
for(int i=0;i<4;i++){
NSNumber *num = [NSNumber numberWithInteger:i];
[mlist addObject:num];
}
list = [[NSArray alloc] initWithArray:mlist];
[mlist release];

// ④解放
[list release];

●NSMutableArrayを使用する

更新が必要な場合は最初からNSMutableArrayを使用する。(NSArrayを使用して、NSNumberの値だけを変更する方法が解らなかったので)
// ①宣言
NSMutableArray *list; 

// ②初期化
list = [[NSMutableArray alloc] init];
for(int i=0;i<4;i++){
NSNumber *num = [NSNumber numberWithInteger:i];
[list addObject:num];
}

// ③更新
NSNumber *num = [list objectAtIndex:2]; // 2番目の要素を引っ張りだす
NSInteger i = [num intValue] + 1; 
[list replaceObjectAtIndex:2 withObject:[NSNumber numberWithInt:i]]; // 2番目に要素を入れ直す

// ④解放
[list release];

うわー、長いなー。こんなもんちょっとしたがっつりコードじゃないか。



ひょっとすると、何か根本的に間違っているのかもしれません。プリミティブな数値配列を更新するなんて頻繁に行うもんじゃないというコード的な思想があって、決してObjective-Cが面倒なのではないとか。そもそもWindowsプログラミングで育ってきた人とは異質な感覚があって、もっと徹底的にオブジェクトクラスを中心に設計していく分にはこんな冗長的なコードにはならないのかも。単純な数値配列とのコードの比較がそもそも不毛であるという意味で。あるいは、NSNumberクラスはもっと汎用的で使い勝手がいいクラスなのかも。

まあ、そう思わないことにはやってられないというのもあります。がんばります。