プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Apple TVを中心としたホームシアター・オーディオ環境の一例

 何度かブログに載せていますが、過去5年ほど家庭の映像・音楽関係の視聴環境を試行錯誤してきました。その間に、結婚したり子供が産まれたりと、いろいろとメインの利用者が変わっています。一度、ここで整理してみたいと思います。

前提としての主な視聴者



 最近、家でテレビや音楽を聞くのは、3歳の息子です。見聞きする内容は、もっぱらYoutubeの電車の映像と、子供向けの童謡やジブリ・ディズニーのテーマ曲です。後は毎週テレビでやっている機関車トーマスとチャギントンです。それ以外は1歳の娘向けに、オルゴールメロディやNHKのいないいないばあをつけるくらいです。またDVDで子供向けのタイトルが幾つかあるのですが、基本操作が面倒くさいので見ていません。嫁さんについては、Huluで映画をたまに見るくらいで、私に至っては息子に強制的に見せられるYoutubeの映像を見るくらいです。

家庭内の視聴環境



 そんな我が家の視聴者のニーズを満たす環境は、次のとおりです。

  • 東芝REGZA Z7 + タイムシフト
  • SONY ホームシアターシステム HT-CT660
  • Apple TV + Hulu
  • Mac mini
  • iPad

 接続形態は、このような形です。

f:id:dkfj:20150125170526p:plain

 図を見て貰うと解るように、いろいろな機器の連携の中心にApple TVがいます。Apple TVの便利なところは、TVとオーディオのどちらでも出力できるところと、Apple系製品から画面転送やiTunesライブラリの参照ができるところ、更にHuluの機能を組み込んでいるので文句なしです。欲を言えば、メディアサーバの機能も欲しいところですが、9割の人間には不要なのでこのままで良いでしょう。
 REGZA Z7ですが、タイムシフトというか録画機能が欲しくて、先代のテレビが壊れたタイミングで買い替えました。基本的にはテレビはみないのですが、予想以上に便利です。定期予約やタイムシフトから、子供向けの番組をちょっと見せるという芸当は、子育て世代には想像以上に便利です。忘れず録画するとか、毎回同じ時間に見るということが中々できないですからね。また、ほぼ同時期に買ったSONYのホームシアターシステムですが、イメージ的にはアンプとスピーカーが一体型になっているものです。Apple TV経由で聞いていますが、iPhoneやiPadからブルートゥースで直接音楽を流し込むということも出来ます。いずれにせよ、手軽に簡単に音楽を楽しめます。
 iPadは、ほぼ子供のYouTubeリモコンになっています。AppleTV単体でもYoutubeをみれるのですが、UI的に使いにくいので子供はもっぱらiPadを使ってYoutubeを見ています。iPadでみると姿勢が悪く近いところで見がちなので、AppleTV経由でテレビに転送して見せるようにしています。最後にMac Miniです。これは、我が家のメディアサーバとして活躍しています。(それ以外にも、ホームサーバとして活躍していますが割愛。)音楽も全部これに入れているのですが、AppleTV経由で使えば、Rometeを使えばiPhoneをリモコンとして選曲できるので便利です。iPhone/iPadのを直接流すという手もありますが、子供向けの曲などは、入れてなかったりします。
f:id:dkfj:20150125205526p:plain

家庭内の視聴環境



 改めて見直すと、マニアックな構成になっております。しかし、実際のところ視聴時間という意味では、あまり無かったりするので、単なる利便性を追求する趣味なのかもしれません。これが正解というものはないですが、また面白いものを考えてみたいですね。Mac miniがホームサーバとして常時動いているので、これにIoTの機器を何かつけて近未来の家を目指してみるのも面白いかもしれません。Enjoy!!

See Also
Mac miniを買ったった! (Late 2014 MGEN2J)
Apple TVでNAS上の動画・音楽を再生する方法
AirPlayを使って、AppleTV+AVアンプでホームオーディオ・システムを構築する話
Hulu(フールー)の契約したった。或いはAppleTVとの連携について
笑える程の凄さ!未来のテレビがここに Apple TV

Apple ハイビジョン対応 Apple TV MD199J/A

Apple ハイビジョン対応 Apple TV MD199J/A

SONY ホームシアターシステム HT-CT660

SONY ホームシアターシステム HT-CT660

iPad miniとiPad 4とMacbook Pro Retina 13インチとiMac

 予想通りiPad miniが発売されました。放っておいてもどんどん売れると思うので特にコメントなしです。確実にiPadとiPhoneの隙間を埋めていくのでしょうね。それより注目は誰も予想しなかったiPadの第4世代が出たこと。特徴はiPad 3に比べてCPUの性能が2倍になったこと。iPad 3発売時から指摘されていた問題点として解像度とCPUのバランスの悪さ。iPad 2にくらべ解像度は4倍になってもCPUは2倍止まり。CPUのパワー不足の為に画像アプリ系のアプリ開発者は悲鳴をあげていました。超絶なチューニングが必要だと。これを素早く対応したのは素晴らしいと思います。買った人もアプリ開発者も結局泣くと思いますが。
 次にMacbook Pro Retina 13インチ。予想通りという感じで出てきました。意外だったのはどのモデルもメモリは8GB固定というところ。15インチ Retinaの場合は8GBと16GBの選択が出来ました。私は悩みに悩みぬいてRetina 15インチを買いました。もし夏の段階に15インチと13インチのRetinaが同時に出てきていたら、悩みすぎてハゲていたと思います。その意味では感謝です。16GB Retina使っていますが色々立ち上げていたらメモリを16GBまで使いますが、普通に使っている分には8GBで充分だと思います。バランスがとれて良い機種なのではないかと思います。
 最後にiMac。久々の新機種発売です。忘れられた子じゃなかったと安心しました。ストレージがFusion Driveを使っているのが最大の特徴っぽいです。SSDのみモデルはあるか気になるところです。私は前世代のiMac SSDを使っていますが、特に容量不足も感じないですし速くて良いですよ。後は密かにメモリが32GB。もう未知の領域ですね。


 ということで世のApple信者さん。悩みあれ!!


See Also:
Macbook Pro Retinaモデルがやってきた〜!。ファーストインプレッション
やっぱりMacbook Pro 2012の最大メモリが16GBの件について
iPhoto/iTunesを外出しにして、Macをダイエットする3つの方法
たった3千円のメモリの増設で快適なMacライフを!!モデル別Macのメモリ一覧
4,000円でMacbookのバッテリーを交換するの話。或いはMacbookの交換バッテリー一覧
古いMacBookのメモリを増設して、あと数年頑張って貰う
Mac mini(Mid 2011)とMacBook Pro(Early 2011)の最大メモリが16GBの件について
Macのメモリを増設するときに、どれを選んだらよいのか?
Mac OS X Lionでメモリを確認する方法
メモリー増設の参考に!!Dellのモデル別、最大搭載メモリー一覧
Macにメモリが16GBあると、どうなるのか?或いは、MacでWindowsを使う話
新型Macbook Proのメモリーを考える
新Macbook Proのどのモデルを買うか?

カテゴリ別 App Storeのアプリ登録数

 暇な時に、日本のApp Storeで登録されているアプリ数をカテゴリ別に調べてみました。書きだして眺めてみると、色々な気づきがあったので共有します。ちょっと眺めて見てください。

カテゴリー名 iPhone無料 iPhone有料 iPad無料 iPad有料
Newsstand - - - -
エンターテイメント 25353 26990 6978 9128
カタログ 299 130 73 345
教育 18308 28843 9513 17710
ゲーム - - - -
仕事効率化 6007 7130 2308 3253
辞書/辞典/その他 6756 11578 2347 5568
写真/ビデオ 4856 6220 1692 2978
スポーツ 7493 7417 2006 2449
ソーシャルネットワーキング 7505 2680 1335 919
天気 1077 963 305 405
ナビゲーション 3177 5342 691 2184
ニュース 10088 2337 5656 827
ビジネス 17905 5507 7874 2668
ファイナンス 6558 3565 2016 1127
ブック 10058 40432 7118 21136
ヘルスケア/フィットネス 5487 7867 1375 2552
ミュージック 12352 8832 2300 4077
メディカル 4473 5112 1871 2520
ユーティリティ 16152 16272 3828 4541
ライフスタイル 25345 17075 8077 6031
旅行 11883 16154 2674 5029
合計 201132 220446 70037 95447


 売上/ダウンロード数は、スタート時では口コミや有名サイトでの紹介がモノを言いますが、長期的にみるとApp Storeでのランキングに載りつづけるかが勝負です。となると、必然的に競争が激しくない所の方が有利になります。例えば似たようなカテゴリのビジネスと仕事効率化。iPhoneの無料版だとビジネスカテゴリは18,000弱になります。これに対して仕事効率化は6,000程。逆に有料版だとビジネスは5,500程度なのに仕事効率化は7,100強と逆転します。どちらのカテゴリでもマッチする内容であるのならば、無料版で出す時は仕事効率化でだして、有料版ならばビジネスを選ぶのも一つの手でしょう。
 カテゴリは一度出すと変更出来ないので、慎重に選びましょう。また激戦区を除けば、ランキングに載ることはそこまで難しくありません。リストを見て頂ければ解ると思いますが、iPadアプリなどは特に難易度が低いです。この辺りもコツがあるので、どこかで一度まとめようと思います。


XcodeでMissing fileのWarningが発生した場合の対処法

 iPhoneアプリやiPadアプリの開発でXcode使っていて、大幅にソースの改廃やディレクトリの改変をすると、WarningでMissing fileが出る時があります。これは何かというと、svnやgitの管理ファイル上に残っているのが問題のようです。
 解決方法については色々議論されていますが、XCodeからではなくコンソールから消してしまう方が簡単じゃないかという結論のようです。
 だいぶ改善されたとはいえ、どうもXCodeとソース管理の連携はイマイチな部分が残っていますね。


SVNの場合

svn delete missingFile

Gitの場合

git rm missingFile


参考:
Missing file warnings showing up after upgrade to XCode 4

リリース済みのiPhone/iPadアプリのDBの変更の仕方 或いはCoreDataを使ってスキーマの自動マイグレーション

 リリース済みのiPhone/iPadアプリのDBのテーブル定義を変更したい。こんなことって、ありますよね?しかし、サーバサイドのアプリと違って、クライアントサイドで動くiPhone/iPadアプリはどうやってデータの移行をすれば良いのでしょうか?リリース後に気がついて、私は小一時間途方にくれました。
 でも、iPhoneなら出来るんです。簡単に!!
正確に言うとApple謹製のDBのフレームワーク、CoreDataを使っていた場合は簡単に移行(マイグレーション)が実現出来ます。


詳しい情報は、次のリンクをご参照ください。
Core Data Model Versioning and Data Migration
Lightweight Migration


 簡単な手順としては、次のような形になります。

  • 新しいバージョンのモデルを追加する。

  Editor -> Add Model Version
  

  • 追加したモデルに、属性(カラム)を追加する。

  必要なだけ、追加します。

  • マッピングファイルを作成する。

  File -> New File -> Core Data -> Mapping Model
  マッピングファイルは、Source Data Model(移行元)とTarget Data Model(移行先)を指定します。
  注意点としては、どのバージョンからどのバージョンに移行するのかする解るようにすることです。
  どういうことかというと、Version1 -> Version2 -> Version3とこちらの期待通りに移行してくれるとは
  限らないということです。 Version1 -> Version3といった人もいます。
  なので、Version3まである場合は、 ver1->ver3とver2->ver3と2ファイルの用意が必要です。
  ファイル名もV1toV2.xcmappingmodel等、一目でわかる形が良いのではないでしょうか?
  

  • 自動マイグレーションコードを追加する。

  詳細は、下の方に書いておきます。

  • 現在のバージョンを変更する

  該当の.xcdatamodeldを選択して、File InspecterのVersioned Core Data ModelのCurrentを変更します。

自動マイグレーションのコード記述

 自動マイグレーションで、変換(マイグレーション)が起きるタイミングは、NSpersistentCoordinatorでオプションで変換を付けた時になります。データアクセスクラスみたいなので一元化しておけば、そこの部分にオプション追加するだけで対応が可能になります。
 私の場合は、DataManagerという基底クラスを作って、そこで 永続ストアコーディネータの作成やDBファイルの作成を一手に行なっているので、ここだけの修正で済みました。CoreDataを使った開発の詳細は、こちらのエントリーで書いています。
DataManager.m

NSError *error = nil;
NSURL *storeURL = <#The URL of a persistent store#>;
NSPersistentStoreCoordinator *psc = <#The coordinator#>;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
 
BOOL success = [psc addPersistentStoreWithType:<#Store type#>
                    configuration:<#Configuration or nil#> URL:storeURL
                    options:options error:&error];
if (!success) {
    // Handle the error.
}

 ただ大量データの変換が必要な場合、注意が必要となります。数十件程度のデータであれば、すぐに終わります。が、それが数千件レベルのデータとなりますと、それ相応の時間が必要となります。その場合にアプリ起動時にいきなりマイグレーションが起こると、アプリの起動タイムアウトが発生する可能性があります。またそうではなくても、ユーザは壊れたかと思って中断することも考えられます。その点を考慮した上で、マイグレーションをどこで行うかの設計が必要になります。


 最初にiPhoneアプリでDB(SQLite)を使う時に、CoreDataを使うかサードパーティのFMDBを使うか悩みました。FMDBは慣れ親しんだSQL文で操作出来るし、記述量も少なめとかなり魅力的にみえました。一方、Appleのフレームワークの上という所でバージョンアップ時の対応等で継続性の懸念がありました。悩んだ末に、一度はちゃんとCoreDataを使ってみないとダメだろうと思い、CoreDataを採用した経緯があります。今となっては、良かったなぁと思います。正直、開発している段階ではここまで気が回らなかったので、助かりました。これから開発される方は、是非CoreDataをお使いください。


 あと、iPhone/iPadアプリを効率的にかつ保守性の高いコードで書くには、是非、木下さんのiOS開発におけるパターンによるオートマティズムをお読みください。CoreDataのサンプルコード等も入手出来て、本当に参考になります。


enjoy!!

XcodeでGitのリモートリポジトリ(remote repository)を追加する方法

 Xcode4.2系になって、文句なくよくなったのがバージョン管理ツールとの連携。今までが酷すぎたのですが、4.2になって随分と改善されています。まずデフォルトのバージョン管理ツールがGitになっています。GJ!! そして、それ以上に素晴らしいのが、Xcodeからリポジトリを自動で生成出来るようになっていることです。iOSアプリの開発者は、昔からバリバリやってましたという人以上にプログラミングってよく解らないけど挑戦してみましたという人の方が多いんじゃないかなと思います。そんな人達にじゃぁGitのサーバ用意してってのは酷な話です。でも、Appleなら大丈夫。ローカルリポジトリならすぐ作れてバージョン管理が出来ますよという形にXcodeはなっています。素晴らしい!!(ただ、バージョン管理の概念があるのかは難しいところですが。)
 ということで、Xcode4.2ならプロジェクト始めたその瞬間からローカルレポジトリを作成出来てバージョン管理が出来ます。ただ残念ながら、リモートリポジトリを作るところまではサポートしてくれていません。なので、同一PC内でリモートレポジトリを作る為のチップスを紹介します。ググッてみたら、一度リポジトリを作ってからcloneする例が多かったので、一助になればと思います。ちなみに今回の例は、既にgitのモジュールを入れていること前提です。


コマンドラインで、空のリポジトリを作成

$ mkdir REPOSITORY_NAME
$ cd REPOSITORY_NAME
$ sudo git init --bare --shared=true


こっからが肝です。
Xcodeでプロジェクトの作成
File -> Source Control-> Commit
File -> Soruce Control-> Repositoriesを選択。プロジェクト名を選んで、Remotesを選択状態でAdd Remote
Remote Nameを適当につける。 Masterとかが一般的。
次にLocationで先程作成したPathを指定します。(もちろん別サーバのURLも指定出来ます。)
そして、プロジェクトをアクティブにした上で、File -> Source Control -> Push
これだけです。


簡単ですよね。ちなみにリモートリポジトリの保管先をDropBoxやS3にすると更に便利です。
詳しくは、このあたりも読んでください。
-- 週末プログラマにお薦め!!Subversion+DropBoxで似非分散型バージョン管理
Enjoy!!


カバーがキーボードに早変わり。iPad2カバーの決定品


 かなりクールなiPad2用のカバーを発見しました。"【全2色】iPad 2用ブルートゥースキーボード スタンド機能付き ホワイト Mobile Bluetooth keyboard for iPad 2 (1592-2)"
カバーであるものの、開いた後はキーボードに早変わり。さらに台座にもなるので、かなり使い勝手はよいです。また驚くことに、値段はたったの3,980円。カバーだけでもこの値段がザラにあることを考えれば、コストパフォーマンスはかなり良いと思います。またコンセプトとして良いのは、よくあるBlueToothキーボードのように色々な機種に想定せず、iPad2だけに絞って最適化してる点です。そのお陰でムダのないサイズ、最適なデザインとなっています。

 装着するとこんな感じです。持ち運びに便利。完全に一体化しています。

 外すとこんな感じです。キーボードの感触はゴムゴムしててイマイチですが、良とします。



ロジクールのも話題になっている模様ですが、こちらも中々良いですよ。
【レビュー】iPad 2をノートパソコンに進化させるキーボード『Logicool Keyboard Case For iPad 2』