2009年1月18日日曜日

iMac上でWindows XP Professional アップグレード版をBoot Campする

  • AppleはVistaまたはXPの通常版のみをサポートしている
  • が、実際にはアップグレード版もインストールできる
  • そのままではインストールできないので、外付けDVDドライブを買ってくる必要がある
  • ディスプレイドライバを更新する際に、ツールを利用してちょっとしたが必要になる
    http://www28.atwiki.jp/2chmac/pages/59.html を参照のこと
iMac (Early 2008モデル)にWindows XP Professional アップグレード版をBoot Campを用いてインストールしたときの手順メモを公開いたします。メモなのであんまり期待しないでください。



○Boot Campする前にまず覚えておきたい基本動作
・iMacのディスクは再起動時にマウスボタン(右でも左でも)を押しっぱなしにしていれば取り出せる
・再起動時にOptionキーを押しっぱなしにしていると、MacでブートするかWindowsでブートするか選択できる


○アップグレード版Windowsをインストールする方法
・外付けのDVDドライブを用意する。接続はFireWire推奨、でも最近のiMac(Leopard以降)ならばUSBでも起動ディスクとして認識してくれると思う。
・アップグレード対象の古いWindowsを用意する。自分の場合はWindows 2000のSP4適用済みディスクを利用した。
・本体にWindows XPを入れて、外付けにWindows 2000を入れた状態でBoot Campアシスタントからインストールを開始。
 途中で例によって昔のディスクを入れてくれと言われて一度止まるが、そのまま続行すると昔のWindowsを認識してくれてインストールできた
・インストール後のユーザー登録はネットで一発だった。
・パーティションサイズは32GB以下であればFAT32になってMacから読み書きできる。
 それ以上になるとNTFSになるので単純にMacからは見えない。
・インストールするパーティションを聞かれたら、Cドライブ(BOOTCAMP)を選択すること。また、再度FAT32でフォーマットをかけること。


○ディスプレイドライバ
・Leopard付属のドライバでほとんどは事足りるが、そのままではATI Catalyst Control Centerがインストールされないため、目つぶし液晶を暗くすることができない。
(もちろんBoot Campアシスタントを利用すればある程度は暗くできるが、それでもまだ明るすぎるので)
http://www28.atwiki.jp/2chmac/pages/59.html こちらのページに記載されている、「Q ドライバをインストールしてもグラフィックの細かな設定ができません」の項目を参考にして、最新のディスプレイドライバ with Catalyst Control CenterをATIからダウンロードしインストールすると、Control Centerから明度の調整ができるようになって一件落着

iMac買っちゃいました



もうすぐiLife'09がでたり、3月ぐらいには新モデルが出たりするのはわかりきっているのですが、
それでも我慢できなかったので・・・買っちゃいましたよ。

Windowsからの移行だったので過去の資産が使えなくなって困ったりしないかと不安で仕方がなかったのですが、想像より遙かに簡単に移行ができました。
躓いたのは動画(WMVとかDivXは専用のプラグインを入れないと見られない)と、
Leopardのマウスドライバは最悪最低なので、USB Overdriveというサードパーティ製のマウスドライバを使用する必要があるところぐらいでした。

Boot Campも実行してWindows XPと2本立てです。
処理速度も現行最速とはほど遠いですが、それでも自分の用途にとっては十分すぎるぐらいです。

今回iMacにインストールしたソフトウェア一覧はこちらです。
http://osx.iusethis.com/user/akisute

2009年1月11日日曜日

iPhoneやiPhoneシミュレータ上でNSURLCacheクラスを使う

  • NSURLConnectionやNSURLDownloadを利用すると自動的にNSURLCacheにキャッシュデータを蓄える
  • iPhoneシミュレータは/private/var/folders/XX/XXXXXXXXXXXXXXXXXXXXXXX/-Caches-/iPhoneのアプリ名/Cache.dbの中にキャッシュデータを蓄えている
  • iPhone実機では、メモリ上へのキャッシュは働くがファイル上へのキャッシュは行われない。したがってアプリを終了するとキャッシュはすべて消える。
  • NSURLCacheクラスについて参考 http://episteme.arstechnica.com/eve/forums/a/tpc/f/8300945231/m/863005881931/p/5
  • [NSURLRequest setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];を使って、意図的にNSURLCacheクラスへのキャッシュを止めることもできる
  • キャッシュを停止する方法の例 http://github.com/takuma104/ntlniph/tree/master/Classes/models/NTLNHttpClient.m 76行目

HTTP通信を行う際にキャッシュを使いたい場合があると思います。
特に通信状況の良くないiPhoneプログラムでは、キャッシュを利用したいと思う機会が多いはずです。
Cocoaフレームワーク上でHTTP通信を行う場合には、NSURLConnectionクラスやNSURLDownloadクラスを利用するのが一般的だと思いますが、
これらの通信クラスを利用すると、自動的にNSURLCacheクラスのShared Instanceに通信結果がキャッシュされていくようなしくみになっています。

キャッシュされた結果は以下のようなコードで取り出せます。
  NSURL *url = [NSURL URLWithString: urlStr];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//キャッシュされたURLレスポンスを、NSURLCacheのshared instanceから取得します
NSCachedURLResponse *cachedData = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];

こうして取得されたNSCachedURLResponseは通常のNSURLResponseと同じように扱うことができます。

で、問題になってくるのはここからです。
このNSURLCacheクラスは2種類のキャッシュを内部的に持っています。メモリキャッシュとファイルキャッシュです。
メモリキャッシュの方はもはや説明不要だと思うのですが、やっかいなのはファイルキャッシュのほうです。再起動しても結果が消えないため、以前の結果が表示されると言うことが起こりえます。
iPhoneシミュレータ上で実行された場合、どこにこのURLレスポンスのキャッシュが保存されているかを調べてみたところ、
/private/var/folders/XX/XXXXXXXXXXXXXXXXXXXXXXX/-Caches-/iPhoneのアプリ名/Cache.db

の中にキャッシュが生成されていることがわかりました。(XXの部分は実行するマシンによって異なります。)
従って、キャッシュが不要になった場合はこのファイルを消してください。