Quick Look
ファイルの中身をちょっと確認したいと思った時、中身の確認のためだけに対応ソフトを起動してファイルの中身をみるというのは煩わしくありませんか?特にWordやPhotoShopなど動作が重いソフトだとなおさらです。
そこでサクッとフィアルの中身を素早く確認できる機能というのがQuick Lookです。
Finderで任意のファイルを選択した状態でスペースーキーまたはFinder上部の瞳の形をしたボタンを押せばソフトを起動せずにファイルの中身を表示する事が出来ます。
PagesデータのQuickLook表示例。スクロールも可能
さらに中央下部の「フルスクリーン」ボタンを押せばフルスクリーン表示で閲覧する事もできます。
画像フィアルだけではなくテキスト、PDF、動画、およびMicrosoft Officeのファイルにも対応しています。
非対応ファイル形式はファイル名/形式名/容量/最終変更日が表示されます。
Quick Lookで画像を表示している場合は拡大縮小表示も可能です。
「option」キーを押すとカーソルの形が虫メガネの形に変わるのでクリックすると拡大表示できます。
「shift」+「option」キーを押しながらクリックすれば縮小表示できます。
MSでのCustomer Developmentの事例紹介
Steve Gray Blankの著書、The Four Steps to the Epiphanyについてはこのブログでも既に数回言及していますが、そのタイトルをちなんだブログポスティングを紹介します。
My four steps to the epiphany:Lessons learned from creating a minimally viable research product
著者のブローガーがMSにインターンとして採用され、何の課題も付与されず、自ら問題の発掘からそのソリューションを出すまでの過程が4つのステップとして記述されております。各ステップでどのような教訓を得たかもちゃんと記述されており、分かりやすくなっています。物語としても十分面白いし、問題発掘からその解決策に至るまでCD(Customer Development)がどう適用されているかを見る事ができます。
時間的な制約によって翻訳まではできませんが、CDに興味がある方にはぜひ読んで頂きたい内容です。
Spotlight
Macではファイルの検索等はどうすれば良いのでしょうか?
Mac OS XのSportlightはファイルはもちろんテキストやメールの内容も検索してくれます。また、検索だけではなくアプリの起動や計算などもできてしまうインテリジェンスな機能を備えています。
SpotlightではGoogle検索のようにAND検索やNOT検索が可能です。
AND検索の例
Mac Image
(MacとImageを含むファイルを検索します)
NOT検索の例
Mac -Image
(Macを含むがImageは含まないファイルを検索します)
ファイル形式別に検索が可能です。
jpg形式のファイルを検索する例
kind:jpg
(kind:の後にファイル形式を入力すれば、そのファイル形式のみを検索します)
辞書検索
辞書として使うことも可能です。分からない単語等を入力すると「定義」項目に辞書の検索結果が表示されます。
計算機機能
数式を入力すれば計算結果が表示されます。
Finder内のSpotlightではさらに高度な条件を設定して検索する事が可能です。
検索条件の保存
検索キーワードを入力すると表示される検索バーの「保存」ボタンを押せば良く使う検索キーワードを保存して置く事もできます。
絞り込み検索
検索バーのさらに右側にある「+」ボタンを押してより高度な絞り込み検索が可能です。
iPadに雑誌が入ったらこうなる!!
あの有名な雑誌、WIREDのコンテンツをiPadで見たらこうなるよ〜というデモです。
びっくりする方もいるでしょうが、これがiPadがもたらす雑誌の未来の姿です。
元の記事はWired Magazine Demos its iPad Appから参照できます。
Micro-ISVはハイリスク、ハイリターン?
昨日、知り合いの人々とMicro-ISVについて話をしました。参考として彼らはみんな今でこそ私と同じく、外資系IT企業のプリンシパルコンサルタントの役職を持っていますがそこまでの経歴はSIer、コンサルティングファーム、研究所など、様々です。彼らと今後のキャリアのことを議論し、その際にMicro-ISVの話も出た訳です。
結論からすると彼らはMicro-ISVはハイリスク・ハイリターンだと思っているらしいです。これは私には結構以外でしたね。私はMicro-ISVはローリスク・ローリターンかなと思っていたからです。それで彼らに「ハイリターンはさておき、なぜハイリスクと考えてんの?」と聞いてみました。彼らは色んなことを話しましたが、要約すると下記の2つになります。
・Micro-ISVをやって当たりを出す、つまり売れるソフトを作るのが難しそうだ。
・運良く売れるソフトが作れたとしても他の人や会社が同じものを作って顧客を横取りされる可能性が高い。
ふーむ、なるほど。
彼らの意見にももちろん一理はあります。十分あり得る話です。でも私の観点からは、彼らは実はMicro-ISVなど、自分で事業を興すことについてはあまり考えたことのない、言わば典型的なサラリーマンです。彼らが持っているMicro-ISVに対するイメージはイメージにしかありません。私もMicro-ISVを考えるまでには色々調べたり勉強したりしている訳です。それにここ1年間の経験から得たものもあります。これから上記の二つの懸念事項について私の考えを書いてみます。
・Micro-ISVをやって当たりを出す、つまり売れるソフトを作るのが難しそうだ。
これはもちろん事実です。ただし、これは製品をリリースする数を増やしていけば当たりが出る確率は上がって行きます。しかも毎回の失敗から着実に学習をし、方向修正、改善を重なって行くと成功する確率はより高くなる筈です。大事なのは成功するまでのイテレーションの数、そして各イテレーションにかかる時間を如何にに短縮するか、つまりいくら早いタイミングで成功するかだけだと思います。(なお、この考え方については既にProduct DevelopmentからCustomer Developmentに事業活動の重みを移行すべきだとの理論が出ています。以前のポスティングでも言及したEric Ries、Steven Gary Blankなどがその理論の代表者であり、彼らの主張するリーンスタートアップの活動にはあのKent Beckなども参加しています。これについては後でより詳しく書きます。)
・運良く売れるソフトが作れたとしても他の人や会社が同じものを作って顧客を横取りされる可能性が高い。
まあ、これはマーケット進入へのハードルについての話だと思います。でも彼らはマーケティングやブランドについては考慮していません。もし私が自分のMicro-ISV、或は自分自信のブランドを築く事さえできれば、製品だけが価値のすべてではなくなります。その場合は単純に製品をパクることで私のマーケットを奪う事は難しくなります。
また、製品自体は簡単にコーピーできてもその中の思想やサポートなどの付加サービス、将来の更なる拡張・改善に対する信頼など、容易にコーピーできないものもあります。つまり、既存製品の劣化コーピーは簡単に作れるけど、それはその時のスナップショットのコーピーでしかありません。
そしてもう一つ、自分のマーケットを取られることがあり得るなら、逆に人のマーケットを取ってしまうこともあり得ることです。既存のいい製品に若干の改善を行い、自分が他の製品の顧客を横取りすることも十分価値のある一つの戦略だと言えます。(実は、歴史的な、そして統計的な観点からするとファストムーヴァー(First Mover)よりはベストイグジェキューター(Best Executor)がいつもほとんどのマーケットを勝ち取ります。)
私からすると、彼らは起業を既存のウォーターフォール形式の、すべてを掛けた、一か八かの賭けとして思っているように見えます。でも私が思う起業はよりアジャイルなものです。ヴィジョンは持ちながらもそこまでのアプローチは状況に応じて柔軟に変えるもの、そして一回性ではなく、成功するまで何回も学習・改善しながら繰り返すこと、これが私の考える起業です。(Steven Gray Blankの定義による、成功するスタートアップとは、持っているリソースを使い切るまでにできるだけ多くのイテレーションを行い、その中で成功を収める企業です。)
Micro-ISVは更に、本業を持ちながらサイドジョブとしても始められます。そしてMicro-ISVから得られる収入が既存の仕事をやめてもいい位に十分になった時にMicro-ISVに専念するという、より時間はかかるけどより安全なアプローチを取る事もできます。この場合ローリスクと言えますが、だからといってローリターンに限られる事もありません。つまり私の観点からはMicro-ISVはローリスク・アンノウンリターン(Low Risk Unknown Return)です。そして今のサラリーマン生活を何の将来に対する対策もなく続ける事こそがハイリスク・ローリターンだと思います。(ここではリスクを自分では制御・予測できないこととして使っています。)
まとめると、起業(ここではMicro-ISVを指していますが、他の起業も基本的には同様の性質を持つと思います。)とは一回の勝負ではなく、一つの旅程だと考えることが大事だとの事です。誰もが最初に経験することに成功することは難しいです。でも経験と学習を続けると成功する確率は必ず上がります。じゃあ、残った課題は成功するまで諦めず継続することだけです。
どうですか?このような考え方はおかしんでしょうか?
今でもMicro-ISVはハイリスク・ハイリターンに見えますか?
Core Dataと(R)DBMSとは何が違うか?
例のCocoa With Loveに面白い記事が新しく追加されました。
The differences between Core Data and a Database
みんなのかゆいところをかいてくれるいい文章だと思います。私自身も最初にCore Dataを使い始めた時にまるでRDBMSを使うような感覚でオブジェクトグラフを設計していたのを今でも覚えています。
詳細は上記のリンクを読んで頂ければいいと思いますが、同記事を読んで私なりに理解したものを要約すると下記の通りです。
・DBMSはディスクにあるデータを最新の状態に保つためのものであるが、Core Dataはメモリ上のオブジェクトグラフを操作するためのものである。もちろん、Core Dataもデータのディスクへの保存やデータの取得、無欠性の保証をするが、それらはあくまでもサポート的な機能であり、そもそもの目的はオブジェクトグラフの管理と永続化である。
・DBMSは複数の使用者(プログラム)から共有されることを前提にしているがCore Dataは一つの使用者(プログラム)からの使用を前提にしている。(Core Dataは基本マルチスレッドに対応していない。ただし、マルチスレッドに対応させる方法もある。マルチスレッド対応については上記リンクの本文のコメントを参照すること)
・DBMSはトランザクションの概念があり常にディスクのデータを最新の状態に保つ。(DBMSの実装によって詳細は異なるが、少なくともプログラマにはそう意識される。)Core Dataはメモリ上のオブジェクトに対して行った変更を必要なタイミングでディスクに書き込む処理を行う必要がある。
・上記の特徴により、DBMSで大量の新しいデータを作成するよりCore Dataでする方が格段に早い。ただし、新しいデータ生成のタイミングでDBMSでは既にディスク上にもデータが存在し、システムのトラブルなどによる異常終了の際にもそのデータはちゃんと残るが、Core Dataでは新しいデータはメモリ上に存在しているだけなので異常終了の際にはそのデータは失われることとなる。これはデータの安全性とパフォーマンスからどちらをより大事にする設計思想なのかに起因すること。(ただし、Core Dataでメモリ上に生成した新しいデータを永続化する(SQLite, XML, FIleなどに書き込む処理)際にはCore Dataから永続化ツールに対する変換+永続化ツールの永続化処理の二重の処理負荷がかかり、DBMSのみを使う場合より遅くなる。)
・DBMSはテーブルの削除、WHERE句を使った絞り込みを行いその結果セットに対する操作など、個々のデータをメモリにロードせずに処理する、或は最小のデータセットのみに絞ってから処理することができる。Core Dataはメモリにロードしているデータ(オブジェクト)のみを操作できる。すべてのデータを削除したいのであれば対象データを先ずはすべてメモリにロードしないといけない。Core Dataで大量のデータを処理する際には常にメモリ使用量に対する考慮を必要とする。
・DBMSにはuniqueキーなど、データに対する制約をかけることができるがCore Dataではそのような仕組みはない。Core Dataで扱うオブジェクトは継承しオーバーライドすることができるのでそのような制約は無意味である。Core Dataを使うプログラムではデータに対する制約はプログラム側で責任を取る必要がある。
以上です。
残念なのは、私が最初にCore Dataを勉強した時にこのような文書があったらかなりの試行錯誤を防げたのになぜいまさら?ってことですが、まあ、それはさておき。
※上記は私の理解と思いが反映されたものなので、正しい内容は必ず本文を参考にしてください。
MoneyViewのGoogle PPC及びVectorさんへの登録完了
思ったより長くかかりましたが、MoneyViewのマーケティング活動の一環としてGoogle PPC(Pay Per Click)やVectorさんへの登録がやっと完了し、この時間を持って公開されることとなりました。
MoneyViewは今までサイトは公開していたものの、まだサイトのページ数も少なく、SEO対策などもちゃんとされていなかったため、今まではGoogleで検索してもなかなか見付かりにくかったのが事実でした。でもこれからはVectorさんへの登録やGoogle PPCの開始によって少しでもアクセス数が増え、サイトのランクが上がり、その結果として、更に多くの方々に訪問して頂きたいと思っています。
以下はその記念として、「マック 家計簿」というキーワードでGoogleで検索した場合の結果画面です。見事に、MoneyViewの広告が表示されています。
ちなみに、アップルのダウンドードページにも登録の申し込みは既に済んでいますが、そこからの反応が全くございません。状況を把握しようとしてもそのための窓口が分からなく、ただ待っている状態が1週間以上続いています。
Vectorさんへの登録も2週間弱時間がかかりました。Google PPCはそれほどでもないですが、Googleからの確認メールがなぜかスパムとして分類されてしまい(しかもGMailなのに・・・。)、余計な時間を費やしてしまいました。
取りあえず、Vectorさんへの登録・公開とGoogle PPCの公開が同日にできてしまいました。明日からサイトの統計情報を見るのが楽しみです。
以上、ご参考までに。
cocoaでのSingletons、Global values
私は最近iPhone用アプリ開発に励んでいますが、開発中によく直面する課題の一つは
各Controllerで共通に使う変数をどうやって実装するかということです。
今まではAppDelegateから各controllerの生成時に変数を渡す形にしていましたが、
必要な変数が増えるとその度入れないと行けないので冗長なパターンですね。
で、今回開発中に見つけたのがこれ
http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html
いつも有難いcocoa with loveさんのブログですが
ここに良い方法がありました。
どんなApplicationでもAppDelegateは一つだけなので
そのAppDelegateを呼ぶことが出来ればまるでsingleton見たいに
利用することも出来ます。
AppDelegateを取得する方法は
cocoa
[NSApp delegate]
iPhone SDK [UIApplication sharedApplication].delegate
です。
例えば
iPhoneのUI ControllerにmanagedObjectContextを入れたい場合
下記のようにAppDelegateから直接入れるしかないため
AppDelegate.m UINavigationController *navController = [[tabBarController viewControllers] objectAtIndex:1]; [secondController setManagedObjectContext:self.managedObjectContext];
UIViewControllerが増える度にその作業をしないといけなくなります。
でもController側からAppDelegateの変数をゲットすることが出来たら
SecondViewController.m self.managedObjectContext = [(AppDelegate*)[UIApplication sharedApplication].delegate managedObjectContext];
上記のように自分が必要な時にObjectを取得する事も可能になります。
Singletonというのは便利な割には危ない所もありObject間の結合性を
高めることがありますが上手に使ったらシンプルなデザインにもなる両端の刃です。
cocoa with loveのブログにも書いてある通り、singletonはなるべく使わない方が良いものです。
使うときは本当に必要な所だけ限定的に使って下さい。
iPhone カレンダーライブラリの設置- TapkuLibrary
今日はiPhoneで有名なカレンダーライブラリ、TapkuLibraryのインストール方法を紹介します。
iPhone SDKではカレンダー機能を提供しないのでカレンダーは自分で手動で実装しなければなりません。
しかしゼロからカレンダーを作るという事はかなりの時間を要しデザイン及び機能追加など一筋縄では行かないと思います。
そこでネット上で公開されているTapkuLibrary というナイスなフレームワークを紹介します。
かなりキレイなUIを提供しています。
しかしインストール説明文が英語になっており間違っている所もありインストール手順も複雑だったため自分の経験を皆様と共有したいと思います。
インストール手順
1. TapkuLibraryをローカルに落とす。
まずダウンロードするにはGITクライアントが必要です。
$mkdir TapkuLibrary
$cd TapkuLibrary
$git clone git://github.com/devinross/tapkulibrary.git
2. TapkuLibraryを現在のプロジェクトにimportする。
srcの下にあるTapkuLibrary.xcodeprojファイルを現在のプロジェクトの最上端にDrag&Dropします。
オプションは
デスティネーショングループのフォルダに項目をコピーする : チェックなし
参照タイプ : プロジェクト基準
追加したフォルダに再帰的にグルプを作成する : チェック
で追加します
3. targetに追加
先ほど追加したプロジェクトの中に "libTapkuLibrary.a"があります。
右のディテールウインドウから'◎'項目にチェックを入れます。
4. 依存関係(dependency)追加

プロジェクトの下にあるTargetを開いて下さい。
下にある現在のプロジェクト名をダブルクリックして一般タブの直接依存関係画面に
'+'ボタンを押してTapkuLibraryを追加します。
5. TapkuLibrary.bundle追加
srcの下にあるTapkuLibrary.bundleを現在のプロジェクトに追加します。
オプションは
デスティネーショングループのフォルダに項目をコピーする : チェックなし
参照タイプ : プロジェクト基準
追加したフォルダにフォルダ参照を作成する : チェック
で追加します。
6. 既存フレームワーク追加
プロジェクトの下のFrameworksを右クリックして既存のフレームワークを選択します。
追加するフレームワークはQuartzCore.frameworkとMapKit.frameworkです。
7. 7. 最後にTapkuLibraryヘッダの追加

-プロジェクトの設定を開いてビルドタブをクリックします。
検索パスのヘッダ検索パスをダブルクリックしてTapkuLibraryのsrcディレクトリを指定します。

-リンクのリンカフラグをダブルクリックして"-ObjC"、"-all_load"を追加します。
8. 今後ソースコードの上で
#import <tapkulibrary /TapkuLibrary.h>
を追加することで簡単にTapkuLibraryのクラスを利用出来ます。
サンプルとして簡易実装してみました。
#import <UIKit/UIKit.h>;
#import <TapkuLibrary/TapkuLibrary.h>;
@interface TestViewController : UIViewController {
//カレンダービュー追加
TKCalendarMonthView *monthView;
}
@property (retain,nonatomic) TKCalendarMonthView
*monthView;
@end
------------------------------------------
実装クラス
#import "TestViewController.h"
@implementation TestViewController
@synthesize monthView;
- (void)loadView {
[super loadView];
//カレンダービュー初期化
monthView = [[TKCalendarMonthView alloc] init];
[self.view addSubview:monthView];
[monthView reload];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
}
- (void)dealloc {
if(monthView != nil) [monthView release];
[super dealloc];
}
@end
インストールに手間がかかりますがそれ以上の機能を提供してくれるので
カレンダーが必要な方は是非試して見て下さい。
Micro-ISVを目指して1年が経ちました!
去年の2009年1月10日。「MacでISVをやってみませんか?」という私の呼びかけに応じてくれた他の2人と一緒に初めてのミーティングを行ってから、今までMicro-ISVを目指して様々な活動をしてきました。3人とも本職があるので使える時間は週末か夕方くらいで、当然その進捗は思うほど早くはありませんでした。そして、2010年2月14日、バレンタインデーである今日、MoneyViewという名前で初めての製品はリリースしたものの、販売まではいたっていないのが1年が経った今の現状です。それでも、初製品をリリースするまで、またリリースして1ヶ月位経った今までの経験から得たもの、そして後悔しているものなど、1年間の経験から得たことについて書かせていただきます。
先ず、何より思ったのはやっぱり、ISVをやるためには色んな知識が必要であるってことです。我ら3人は今ITコンサルタント、セールスエンジニア、プログラマの職業についている、みんなエンジニアのバックグラウンドを持つものです。最初はObjective-CやCocoaという慣れていない開発環境に試行錯誤したりもしましたがさすがエンジニア集団らしく、今や技術的な部分はある程度カーバーできるところまで来ています。が、今になって考えるのは、ISVをするために必要ないろんな知識やスキルの中で一番簡単なのが実は製品の開発かも知らないということです。
他に必要なのはいくらでもあります。いわば一般企業をやっていく上で必要なこと全てがそのままISVをやるために必要なものです。それらはある程度規模のある企業であれば独自の専任部署がある立派な企業活動の一つ一つです。それらをISVは一人、あるいは少人数のチームでこなせないといけません。しかも、多くの場合、何の事前経験や知識もないままでです。一つ一つ、コツコツ勉強して、自分で考えてやって行くのです。これらは、企画、デザイン、マーケットリサーチ、顧客発掘、顧客管理、製品管理、マーケティング、セールス、ブランディング、価格戦略、プロジェクト管理、法律的な対処など、数え切れないほどあります。
これらは苦でもありますが、楽しい学びのチャンスでもあります。私的にはこれらについて考えられるチャンスが与えられる、勉強する、そして実際に自分の考えたものを実践してその反応を試すことができるってことはすごくありがたい経験だと思います。実際にこれらの経験が本業であるコンサルティング活動にも役に立ってくれたりもしています。ISVは絶えない学習の道でもあると思います。
上と同じ延長線上での話となりますが、製品の開発より、それのマーケティングとセールスがいくら大事であるかを実感しました。私達は最初からマーケティングの大事さは知っているつもりで比較的に初期段階からマーケティングの戦略を立てたりもしていました。が、一旦製品開発の段階に入るとみんなエンジニアであるだけあって、すべての力は製品の開発に注がれてしまったのです。ふとそれに気付いた時には既に製品の開発はほぼ終わっており、リリースを目前にした時期でした。
そしてウェブサイトも、何の知名度もないまま、簡単なサイトを急造し製品だけリリースしても、そこには誰も来てくれないものです。Googleで私達が想定している検索語で検索したら13ページ目にやっと私達のサイトが登場するという、惨めな状況を確認してからこそ、できるだけ早い時期でのマーケティング活動の必要性を再び思い知らせることになる愚かな自分がそこにいました。自分のブランド構築やマーケティング活動は早ければ早いほどいいです。
でもマーケティングやブランディングのみが大事なことではありません。それらは正しい顧客の発見と顧客のニーズに対する正確な理解を前提にします。これらについては最近何かと有名になっている、Eric Riesのブログや講演、Steven Gary Blankの本を読みながら痛感していることでもあります。彼らのうたっているLean StartupやCustomer Development Processは、それらが私が今やっているISVに対してどれくらい直接そのまま適用できるかは別にして、一読の価値は十分あります。これらの知識を1年前に知っていたら去年の1年間の成果は少し異なるものになっていたかも知りません。ISVの道は絶えない学びの道であることを再び痛感している今時です。でも、これらの痛い経験は今年の活動には有効に生かされることと期待しています。
この1年間の経験はチームワークやリーダシップについても色々考えるようにしてくれました。お互いに平等な関係であるチームでのコミュニケーションや意思決定の難しさ、長いサラリーマン生活から身に付いてしまった受け身的な思考をどうやって変えていくかについて悩まされました。今でもそれらしき答えは見付かっていませんが最適解をみつけるために頑張っています。
今私達はフェーズ1を終え、フェーズ2を迎えようとしています。これから始まるもう一つの1年をもってまたどこまで成長できるか、楽しみです。私達が願っているのは下記の通りです。
・MacやiPhone/iPad向けのすばらしいアプリケーションを作成し、販売することでユーザのライフをより快適で効率的なものにする
・Micro-ISVと言うキーワードでコミュニティを作り、私達がMicro-ISVをやりながら得た経験や知識をシェアすることで、日本中の人々にもう一つのライフスタイルを提案する
・上記の二つの活動を通して、私達が願っているライフスタイルを手に入れる。
上記の個々の知識について、私達が得たもの、考えたものはこれからも一つずつここに書いていきます。それらが他にMicro-ISVに興味をお持ちの方々に少しでも役に立ってくれれば何よりです。
では、次回の書き込みをお楽しみに!










