2009/11/30

[gadget]どのタブが選択されたか確認する方法

前回のタブが選択されたときに関数を呼び出す方法を書きましたが、ここで問題となるのは、すべてのタブに同じ関数をセットした場合に、果たしてどのタブが選択されたのかわからないこと。

かと言って、同じ処理を持った関数をタブの個数分名前だけ変えて定義するのもソースの無駄になるので、今日は、どのタブが選択されたのか確認する方法について書いていきたいと思います。

実装としてはこんな感じ

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Test"
directory_title=""
title_url="http://widgmedia.com/"
description=""
author="maito.kuwahara"
author_location="Japan"
author_affiliation=""
author_email="mai.musicfactory+gadgetfactory@gmail.com"
author_link="http://temping-amagramer.blogspot.com/"
screenshot=""
thumbnail=""
author_photo="http://widgmedia.com/gadget/my_profile_photo.png"
height="350"
>
<Require feature="tabs" />
</ModulePrefs>
<Content type="html">
<![CDATA[
<style type="text/css">
</style>
<div id="id_meiji" style="display:none;"></div>
<div id="id_taisho" style="display:none;"></div>
<div id="id_showa" style="display:none;"></div>
<div id="id_heisei" style="display:none;"></div>


<script type="text/javascript">
gadgets.util.registerOnLoadHandler(lf_init);

function lf_init(){
var tabs = new gadgets.TabSet(__MODULE_ID__);
tabs.addTab("明治","id_meiji",lf_selected);
tabs.addTab("大正","id_taisho",lf_selected);
tabs.addTab("昭和","id_showa",lf_selected);
tabs.addTab("平成","id_heisei",lf_selected);
}

function lf_selected(atabId){
alert(atabId);
}
</script>
]]>
</Content>
</Module>

前回と違うのは、lf_selectedに引数を追加したこと。

これによって、実は、選択されたタブをidを返してくれるんですねー。

なんと便利な。

実行結果は、このような感じになります。

Photobucket
上は大正を選んだ時の模様

実は、各タブはindexも保持しており、indexで取得したい場合は、このような感じになります。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Test"
directory_title=""
title_url="http://widgmedia.com/"
description=""
author="maito.kuwahara"
author_location="Japan"
author_affiliation=""
author_email="mai.musicfactory+gadgetfactory@gmail.com"
author_link="http://temping-amagramer.blogspot.com/"
screenshot=""
thumbnail=""
author_photo="http://widgmedia.com/gadget/my_profile_photo.png"
height="350"
>
<Require feature="tabs" />
</ModulePrefs>
<Content type="html">
<![CDATA[
<style type="text/css">
</style>
<div id="id_meiji" style="display:none;"></div>
<div id="id_taisho" style="display:none;"></div>
<div id="id_showa" style="display:none;"></div>
<div id="id_heisei" style="display:none;"></div>


<script type="text/javascript">
var tabs = new gadgets.TabSet(__MODULE_ID__);

gadgets.util.registerOnLoadHandler(lf_init);

function lf_init(){
tabs.addTab("明治","id_meiji",lf_selected);
tabs.addTab("大正","id_taisho",lf_selected);
tabs.addTab("昭和","id_showa",lf_selected);
tabs.addTab("平成","id_heisei",lf_selected);
}

function lf_selected(){
var selectedtabindex = tabs.getSelectedTab();
selectedtabindex = selectedtabindex.getIndex();
alert(selectedtabindex);
}
</script>
]]>
</Content>
</Module>

実行結果はこのようになります。

Photobucket
画像は昭和を選択したときのもの。

getSelectedTab()メソッドによって、一度、gadgets.Tabオブジェクトを取得し、またgetIndex()によって、indexを取得しています。

各indexはaddTabで設定できるのですが、設定しなかった場合は、1つづ値が増えていきます。

最初は0からスタートです。
(なので、明治を選んだ場合は0と表示されます。)

これでindexとidによる取得と両方に対応できるようになりました。

次回は、選択したタブを保持する方法について。

2009/11/29

[gadget]タブ選択時に関数をコール

タブが選択された場合に関数をコールする方法はこんな感じになります。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Test"
directory_title=""
title_url="http://widgmedia.com/"
description=""
author="maito.kuwahara"
author_location="Japan"
author_affiliation=""
author_email="mai.musicfactory+gadgetfactory@gmail.com"
author_link="http://temping-amagramer.blogspot.com/"
screenshot=""
thumbnail=""
author_photo="http://widgmedia.com/gadget/my_profile_photo.png"
height="350"
>
<Require feature="tabs" />
</ModulePrefs>
<Content type="html">
<![CDATA[
<style type="text/css">
</style>
<div id="id_meiji" style="display:none;"></div>
<div id="id_taisho" style="display:none;"></div>
<div id="id_showa" style="display:none;"></div>
<div id="id_heisei" style="display:none;"></div>


<script type="text/javascript">
gadgets.util.registerOnLoadHandler(lf_init);


function lf_init(){
var tabs = new gadgets.TabSet(__MODULE_ID__);
tabs.addTab("明治","id_meiji",lf_selected);
tabs.addTab("大正","id_taisho",lf_selected);
tabs.addTab("昭和","id_showa",lf_selected);
tabs.addTab("平成","id_heisei",lf_selected);
}

function lf_selected(){
alert("選択されました");
}
</script>
]]>
</Content>
</Module>

実際タブが選択されたときに呼び出される関数は、addTabメソッドの第三引数で設定します。

実行結果はこのような形になりました。
Photobucket

だいぶ前に、書いたタブの作成方法とは若干違うところがあり、addTabメソッドの第二引数が追加されているところ。

これは何かというと、divタグのid属性を指定すれば、そこにタブを生成しますよぉーというもの。

ただし、こちらのリファレンスにもあるようにstyle="display:none;"といちおう書いておきました。

もちろん各addTabメソッドにおいて、別々のファンクションを設定することも可能です。

これでタブが選択された場合の処理も書くことができます。

2009/11/28

[javascript]干支を(確認|取得)する

今度のガジェットで使おうかなと思い、JavaScriptで実装

の前に干支の算出方法(アルゴリズム)の確認はこちらで行いました。

同様に、西暦(あるいは皇紀)で表した値を12で割った余りを求め、下表から十二支を割り出す。

余り01234567891011
十二支

via:wikipedia:干支


というわけでプログラムはこのようになりました。
var sexagenary_cycle = ["申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"];

function lf_getSexagenary(aYear){
return sexagenary_cycle[aYear%12];
}

実際に試しにいくつか入力してうまくいったので、オッケーかなーっと。。。

2009/11/27

[Objective-C][iPhone sdk][google maps]pinを表示その3

UIViewControllerを使わなくてもピンの色を変更して表示できました。

プログラムがめちゃくちゃ長いですが、お付き合いください。

/* MapViewDelegate.h */
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MapViewDelegate : NSObject <MKMapViewDelegate>{

}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;

@end

/* MapViewDelegate.m */
@implementation MapViewDelegate

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

MKPinAnnotationView *pinannotationview = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
pinannotationview.pinColor = MKPinAnnotationColorPurple;
pinannotationview.animatesDrop = NO;
return pinannotationview;

}

@end

/* AnnotationToMap.h */
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface AnnotationToMap : NSObject <MKAnnotation>{
CLLocationCoordinate2D coordinate;
}
-(id)initWithCoordinate:(CLLocationCoordinate2D) coord;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

@end

/* AnnotationToMap.m */
#import "AnnotationToMap.h"
@implementation AnnotationToMap
@synthesize coordinate;

-(id)initWithCoordinate:(CLLocationCoordinate2D) coord{
self = [super init];
coordinate = coord;
return self;
}

@end

/* MapTestAppDelegate.m */
CLLocation *location = [[CLLocation alloc] initWithLatitude:35.660262 longitude:139.729548];
CLLocationCoordinate2D mapcenter = location.coordinate;
[location release];

MKMapView *mapview = [[MKMapView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
MKCoordinateSpan CoordinateSpan = MKCoordinateSpanMake(0.005,0.005);
MKCoordinateRegion CoordinateRegion = MKCoordinateRegionMake(mapcenter,CoordinateSpan);
[mapview setRegion:CoordinateRegion animated:YES];

MapViewDelegate *mapviewdelegate = [[MapViewDelegate alloc] init];
mapview.delegate = mapviewdelegate;

AnnotationToMap *annotationtomap = [[AnnotationToMap alloc] initWithCoordinate:mapcenter];
[mapview addAnnotation:annotationtomap];
[annotationtomap release];

[window addSubview:mapview];
[mapview release];
[window makeKeyAndVisible];

で、実行結果はこのような形になりました。

Photobucket
ピンの色が変わらなかった原因として、mapviewのdelegateプロパティを設定していなかったために引き起こされたバグでした。

色々と記事を読んでみると、UIViewControllerにdelegate対象となるmapviewdelegateを継承しているのが多かったのですが、いまいち納得がいかなく、今回、あえて外だしにしてみました。

割と納得いってるのですが、どうでしょうか?

ここまできちんと書くとオープンソースとして配信したくなってしまう。
Interface Builderを使わないサンプルプログラムとしてばんばん公開しようかなーって思うのですが、時間すごく喰いそうなので、う〜〜〜ん、どうしようぉ〜〜〜。

やりたいことが多すぎるぅ。。。

参考したサイト|ブログ(多くてすみません)
MKMapView上にアノテーションを追加する
How to add a pin to embedded map
Using iPhone SDK MapKit Framework – A tutorial
iPhoneアプリで地図を取り扱う、MapKit Framework
iPhoneのGPSとMapKitを使った地図を連動させる方法CommentsAdd Star

2009/11/26

[gadget]onloadを行なう

iPhoneアプリの年齢早見というアプリがあって、ものすごく重宝しているのですが、業務中に使うことに躊躇してしまい(さぼっていると思われてしまうので)、でもものすごく便利なので使いたいなーっとなんとかならないものかと考えていたら、iGoogle gadgetにしてしまえばいいじゃーんと思い、急遽gadgetを作成しようかなと。

guiも似ているし、そもそもアイデア自体も作者さんのものなので、KS Planning Inc.さんのブログできちんとgadgetの作成の許可を申請し、きちんとオッケーを頂いたので問題なく作ることができます。

そこで、iPhoneのアプリと同時並行でガジェットの作成も進行します。

で、今日は、久々のガジェットネタ。

gadgetのパフォーマンスアップの一環として、loadしきってから、中のコンテンツを色々とセットしていきたい場合があります。

webサイトなどを作っている場合などは、JavaScriptのonloadをコールすればいいのですが、gadgetの場合、それに相当するものは、gadgets.util.registerOnLoadHandlerとなります。

実装としてこんな感じ

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Test"
directory_title=""
title_url="http://widgmedia.com/"
description=""
author="maito.kuwahara"
author_location="Japan"
author_affiliation=""
author_email="mai.musicfactory+gadgetfactory@gmail.com"
author_link="http://temping-amagramer.blogspot.com/"
screenshot=""
thumbnail=""
author_photo="http://widgmedia.com/gadget/my_profile_photo.png"
height="350"
>
</ModulePrefs>
<Content type="html">
<![CDATA[
<style type="text/css">
</style>
<div id="hoge">カレー</div>

<script type="text/javascript">
gadgets.util.registerOnLoadHandler(lf_init);

/* onload時コールされる */
function lf_init(){
document.getElementById("hoge").innerHTML = "シチュー";
}
</script>
]]>
</Content>
</Module>

実行結果はこのような形となりました

Photobucket

きちんと「シチュー」という単語が挿入されています。

ちなみに、lambdaも使うことができます。

その場合は、こんな感じになります。(firefox 3で確認)

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Test"
directory_title=""
title_url="http://widgmedia.com/"
description=""
author="maito.kuwahara"
author_location="Japan"
author_affiliation=""
author_email="mai.musicfactory+gadgetfactory@gmail.com"
author_link="http://temping-amagramer.blogspot.com/"
screenshot=""
thumbnail=""
author_photo="http://widgmedia.com/gadget/my_profile_photo.png"
height="350"
>
</ModulePrefs>
<Content type="html">
<![CDATA[
<style type="text/css">
</style>
<div id="hoge">カレー</div>

<script type="text/javascript">
gadgets.util.registerOnLoadHandler(function(){alert('hoge');});
</script>
]]>
</Content>
</Module>

今回、igoogle上だけしか確認していないのですが、mixi上でも動作すると思います。

2009/11/25

[coldfusion]9がリリースされてました。

まだ何が新しくなっているのか確認できていませんが。。。
こちらで正式にアナウンスされています。

[igoogle gadget]social機能がリリースされました

昼寝している間に、ものすごいことが起きていました。

既に海外では確かリリースされていたのですが、いよいよ日本版が上陸しました。

この日をどのぐらい待ち望んでいたか!!

詳しいことは、こちらに譲りますが、mixi並みにリッチでパワフルなアプリケーションを開発することができます。

最近、iPhoneの開発とかiGoogle gadgetの開発などがあって、猛烈に大変です。

2009/11/24

[Objective-C][iPhone sdk][google maps]pinを表示その2

おとといぐらいから調査を続行しているpinを表示する方法ですが、やはりぐぐってみるとかなり多くの記事においてUIViewControllerにMKMapViewDelegateを継承しています。

なぜじゃー??

あまり考えることなく実装したほうがいいのかなと。

2009/11/23

27に

なりました

2009/11/22

[Objective-C][iPhone sdk][google maps]pinを表示その1

まだ完全にできていないので、その1として

地図上にピンを表示させます。
プログラムは下記をご覧ください。

/* MapTestAppDelegate.m */
CLLocation *location = [[CLLocation alloc] initWithLatitude:35.660262 longitude:139.729548];
CLLocationCoordinate2D mapcenter = location.coordinate;
[location release];

AnnotationToMap *annotationtomap = [[[AnnotationToMap alloc] initWithCoordinate:mapcenter] retain];

MapView *mapview = [[MapView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
MKCoordinateSpan CoordinateSpan = MKCoordinateSpanMake(0.005,0.005);
MKCoordinateRegion CoordinateRegion = MKCoordinateRegionMake(mapcenter,CoordinateSpan);
[mapview setRegion:CoordinateRegion animated:YES];

[mapview addAnnotation:annotationtomap];
// Override point for customization after application launch
[window addSubview:mapview];
[window makeKeyAndVisible];

/* MapView.h */
#import <MapKit/MapKit.h>

@interface MapView : MKMapView <MKMapViewDelegate> {

}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;

@end

/* MapView.m */
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

MKPinAnnotationView *pinannotationview = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
pinannotationview.pinColor = MKPinAnnotationColorPurple;
pinannotationview.animatesDrop = YES;
return pinannotationview;

}

/* AnnotationToMap.h */
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface AnnotationToMap : NSObject <MKAnnotation>{
CLLocationCoordinate2D coordinate;
}
-(id)initWithCoordinate:(CLLocationCoordinate2D) coord;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

@end

#import "AnnotationToMap.h"


/* AnnotationToMap.m */
@implementation AnnotationToMap
@synthesize coordinate;

-(id)initWithCoordinate:(CLLocationCoordinate2D) coord{
self = [super init];
coordinate = coord;
return self;
}

@end

実行結果はこのようになりました。
Photobucket
ピンは表示できたけど、ピンの色が紫色になっていないので、バグが発生しています。

今、調査中ですが、おそらくViewControllerを使わないといけないのかもしれません。

2009/11/21

[Objective-C][iPhone sdk]iPhoneでsqliteを使用について

ColorMakerの次期バージョンでは、いくつかの案があるのですが、その中で、sqliteを使ってデータを保存したいなーと思い、保存方法及びsqliteの使用方法について調べてみることにしました。

が、

ぐぐってみると、

SQLite and CoreData - iPhone SDK Articles

に、OSのバージョン3からはsqliteではなく、Core Dataが推奨されているみたいなのですが、実際、iPhone OS Technology OverviewのSQLiteを読むと、やはりサポートされているのでできればこちらを使いたいです。

というのもCore Dataのマニュアルが膨大すぎて、sqlの方が工数がかからなさそうだと思ったので。。。
(先々にちょっとやりたいなーっと考えているgoogle app engineのことを考えるとやった方がいいのかなと思ったりもするのですが)

なわけで、sqliteで突撃~~~♪

2009/11/20

[Objective-C][iPhone sdk][google maps]特定の住所を地図上に表示する

ちょっとぐぐってみてわかったのですが、ほとんどの記事は、現在位置を地図上に表示する方法について書いてありましたが、任意の場所(所定の好きな場所)を地図上に表示する方法はなかったので、実装してみることにしました。

この場合、重要となるのは表示したい場所の経度と緯度がわかること。

今回の例として、「六本木ヒルズ」を地図上で表示するとします。

すっげー前の記事に住所から経度と緯度を取得するサイトを紹介したので、そこで、「六本木ヒルズ」と打ち込んで検索を行います。

すると、経度と緯度が表示されるので、それをどこかにメモしておきます。
(検索したときは、緯度:35.455006、経度:139.729548と表示されました。)

そこで、メモした内容をふまえて以下のように実装します。


/* googleの地図をコールするクラスを作成し初期化を行う(インスタンス変数) *
MKMapView *mapview = [[MKMapView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];

/*
地図をどのぐらい拡大させるか設定を行う(MKCoordinateSpanは構造体で、
MKCoordinateSpanMakeをコールすればオッケー♪)
*/
MKCoordinateSpan CoordinateSpan = MKCoordinateSpanMake(0.005,0.005);
/* ど真ん中の座標を設定(35.660262と139.729548はさっきメモしたもの) */
CLLocation *location = [[CLLocation alloc] initWithLatitude:35.660262 longitude:139.729548];

/* CLLocationCoordinate2Dも構造体なんだけど、こちらはプロパティを使えば楽勝 */
CLLocationCoordinate2D mapCenter = location.coordinate;

/*
CLLocationCoordinate2DとMKCoordinateSpanを
MKCoordinateRegionMakeでMKCoordinateRegionとしてドッキング
*/
MKCoordinateRegion CoordinateRegion = MKCoordinateRegionMake(mapCenter,CoordinateSpan);

/* 地図を表示しまーす(アニメーションも、もちろんYES) */
[mapview setRegion:CoordinateRegion animated:YES];

/* だけど大本のwindowに貼付けないと表示されないので、お約束で追加 */
[window addSubview:mapview];
[window makeKeyAndVisible];

で、この実行結果は、、、
Photobucket
キター表示できたぞ!!

これでどこでも好きな場所をしょっぱなから表示することができます。

なんて便利なんだ♪

2009/11/19

[Objective-C][iPhone sdk][google maps]地図を表示

ついにキター!!

念願のgoogle map表示

iPhone Application Programming GuideのDisplaying Maps and Annotationsを読んで、下記のように実装しました。

- (void)applicationDidFinishLaunching:(UIApplication *)application {
MKMapView *mapview = [[MKMapView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[window addSubview:mapview];
[window makeKeyAndVisible];
}

ソースの中身自体はたったの、3行で、できちゃいました。

実行結果はこのような形です。
Photobucket
しかも、ダブルクリックしたら地図がでかくなりました。
(うれしい誤算です。)
Photobucket
この調子で今度は、座標を指定して特定の位置を表示する方法に着手したいと思います。

2009/11/18

[javascript]aタグのonclickについて

aタグのhref属性ではなくて、onclickでページのリンクを実現するために下記のようなプログラムを作成しました。

<a href="void(0)" onclick="(function(){location.href='http://yahoo.co.jp';}());">
Test
</a>

実際にクリックしてみると、どういうわけか、リンク先に画面が遷移しません。

ちょっと調べてみると、IE6の仕様っぽくて、return falseを入れないと画面が遷移しないみたいなのです。

というわけで、return falseを入れた最終的なプログラムはこちらになります。
<a href="void(0)"
onclick="(function(){location.href='http://yahoo.co.jp';}());return false;">
Test
</a>

動かしてみると、無事にリンク先に遷移しました。

めでたし、めでたし

参考サイト:location.href

2009/11/17

[mac][objective-c]frameworkの追加方法

mapkitフレームワークを追加したいなーっと思い方法を調べてみることにしました。

Xcode Project Management GuideのLinking Libraries and Frameworksを見たのですが、ちょっとやり方が気にくわなかったので、Spotlightからmapkitと検索をして、いくつかヒットしたうちのiPhone sdk ver 3.0の中にあるmapkitを追加しました。

追加方法は、frameworksと書かれたフォルダを「Control+クリック」を行い、追加→既存のワークフレームを選択するとファイル選択画面がオープンするので、そこから指定し追加を行いました。

無事にframeworksフォルダには、mapkitフレームワークが追加されているのでいいのかなと。

ただし、sdkのバージョンそのものをあげてしまった場合、同様に、このフレームワークのバージョンもあげないといけないのかなーっと。

そこは注意したいですね。

これで先に進める。。。

2009/11/16

[mac]ファイル比較ソフト

最近、iPhoneのアプリ開発でファイルがものすごい数になってきたので、ファイル同士の比較を行うソフトを探してみる事に。

まず、WindowsだとDFというソフトを使っているのですが、Macのファイル比較ツールを読むと、cwDiffとDiffMargeというソフトがあるらしく、さっそくcwDiffをダウンロードして使ったのですが、イマイチ、わかりにくいです。

今度は、DiffMargeを試してみようかなと。

引越

しました。やっとこさ、家のネットが開通しました。

2009/11/13

[Objective-C][iPhone sdk]UIWebViewを使ってpdfを表示

次回のアプリは、google mapを使うアプリを考えていたのですが、その前に、pdfファイルを表示する方法について調査。

というか、そもそもpdfって表示できるのか?

という素朴な疑問がありました。

でちょっと調べてみると、意外なクラスによってpdfファイルを表示することができるみたいなのです。

それはなんと、

UIWebViewクラス

だったのです。(なんでまた、webViewクラスなの??)

理由を考えても仕方ないので先にすすみます。

UIWebViewで、簡単にドキュメントビューアが作れるというエントリーで知りました。

そこには、リファレンスのTechnical Q&A QA1630: Using UIWebView to display select document typesに、iPhoneがpdfも表示できるという風に解説してありましたが、実際に参照先を読んでみると確かに対応していました。
(しかも、ソースまであった。)

で、ちょっとプログラムを組んでみる事に

- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSURL *path = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"hoge.pdf" ofType:nil]];
NSURLRequest *urlrequest = [NSURLRequest requestWithURL:path];
UIWebView *webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
webView.scalesPageToFit = YES;
[webView loadRequest:urlrequest];
[window addSubview:webView];
[window makeKeyAndVisible];

実行結果はこんな感じになります。
Photobucket

うん、確かに表示されました。

しかも、ページもきちんと動くし、今、何ページ目にいるかも表示してくれます。
(画像は2ページ目までマウスで動かした時のもの)

ただ、ちょっと難点なのは、ページ数を指定して、そこをダイレクトに表示できないこと。

ここは、もう一つレイヤーの低いQuartzを使うしかないのかなと。
(サンプルソースもありました。)

うーーーん、表示はできたけど、まだ全然納得いかない。

2009/11/12

[iPhone sdk]2個目のアプリリリースから学んだこと

今回、島村楽器アプリをリリースしたのですが、リリースするに当たって学習したことを書きたいと思います。

リファレンスを読むまで、全然、意識していなかったのですが、ネットワークが利用できるかどうか、つまりiPod touchの場合は無線LAN(wifi)に接続しているか、iPhoneの場合は普通にネットに接続しているかどうか確認するための方法が記載されていたのですが、その確認を今回しなかったんですね。

で、これ、appleに審査中に読んで、ひょっとしたら、ネットワークに接続しているかどうかの確認を行なっていないので、審査に通らないと思ったのですが、無事に通りました。

接続しているかどうか確認していない代わりに、xmlのパースがミスった場合、ネットに接続している最中になにかトラブルが発生した場合、そのほか予想されるエラーが発生した時にアラートを表示する処理を組んだので、それで通ったのかもしれないと勝手に解釈しました。

そこから学べることとして、

ネットワークに接続しているかどうかの確認を強制的にする必要はない



その代わり何かエラーが発生した都度、ユーザーにそのエラー内容をお知らせする作りが必要
(説明は細かい方がいいが、細かすぎるとユーザーにうざがられる可能性がある)

2009/11/11

体調を崩しました。。。

本当は、もう一個エントリーを書こうと思ったのですが、引越しのためにエピソンのプリンターを片付けている最中に急に気持ち悪くなり、そのまま体調が悪くなってしまいました。

症状としては、

気持ち悪い(目がまわっているような感じ)

吐き気あり

食欲はある

性欲は??

睡眠欲もある

3大欲求が活発なので、基本的に大丈夫だと思うのですが。。。

メニエール病かもしれない

アインシュタインの名言

Did You Know? 2.0で紹介されていて動画をみて、久しぶりにアインシュタインの台詞を見ました。

下記の動画で一瞬だけ表示されます。



いつも開発をする時に、心に留めてる言葉です。

是非。

2009/11/10

テレビは爆発に売れているのにテレビって見てます?(テレビから考察するビジネスその2)

昨日もヤマダ電機に行ったのですが、ちょうど一階がテレビ売り場になっていて、平日なのにものすごい人だかり。

新装オープンなのかもしれませんが、やはりテレビは人気あるのかなーっと。

そこでちょっと気になったのは、ものすごい勢いでテレビが売れているのに。なぜ視聴率低下が叫ばれているのか?
(現にTBS、赤字転落へとのこと。)

だって、みんなテレビを買っているので、当然、テレビを見まくっていると思うのに、なぜこのような問題が発生するのか??

ちなみに、普段見ているテレビ番組をちょっと想像すると、まっさきにでてきたのが下の二つでした。

1:ロンドンハーツ
2:アメトーク(DVDがものすごい勢いで売れているらしいです。)


全部テレビ朝日系列だった。

話を元に戻して、テレビがあるのに視聴率の低下を改めて考察すると。

1:ケータイやPCなどのほかの端末で遊んでいる(←ながらで見ている)
2:wiiやPS3などのゲーム用に使っている
3:DVD観賞用(ものすごい画質が綺麗でびっくりしました。。。)
4:テレビがおもしろくないから見なくなった。(←周りの人はこのパターンが多いです。あるけど見ないってパターン)

と、こんな感じに落ち着いちゃうのかなと。
(他にあれば教えてください。)

映画も大人一人1800円を考えると確かにDVDを借りたほうがいいし、下手な映画館よりも高画質でみることができるので、そのための投資と思えば、いい買い物なのかもしれません。
(ちなみに、映画に関して追加して言えば、1日は1000円、水曜日はレディースdayで1000円、8時以降はレイトショーで1200円ぐらいで見れたような。ただし、レイトショーは実施していないところもある。)

ハードが売れて中のソフトが売れないという現象は、パソコン業界と比べるとおもしろい現象だなーっと思ってしまったので、ちょっとこのようなことを考えてしまいました。

TOSHIBA REGZA 37V型 37H8000を購入

とうとう、テレビにもHDDを搭載する日が来るとは。。。



300GBも搭載しちゃっているよ。。。

実家にあるwindows98内蔵のvaioよりもすごいし。

世の中変わるもんなんだなーっと。

つくづく