先日の投稿で書いた通りにやると、うまくいかなくなってしまった。gdata-objectivec-clientにSBJSonが入らない状態でダウンロードされるためと思われる。
で。こんな感じで回避。
1. svn checkout http://gdata-objectivec-client.googlecode.com/svn/trunk/ gdata-objectivec-client-read-only
これでSBJSonの入っていないgdata-objectivec-clientが取得できる。
2.ここからさらにダウンロード。
2に入っているJSONフォルダを1のSourceにコピー。
そのあとはここで紹介されている手順で作業。
もしかしたら2つめにダウンロードしたやつだけでうまくいくのかもしれない....と後で思った。
2012年4月3日火曜日
2012年2月10日金曜日
iPhoneのPush
とりあえず、SandBox使用の場合
1) App IDではちゃんと開発用のPushの設定をしておく
2) Pushが使えるProvisioningで署名をする
3) 1. で取得した証明書とか秘密鍵でp12ファイルを作って、サーバーにおいておく
3を忘れてひどい目にあったので、めもめも。
1) App IDではちゃんと開発用のPushの設定をしておく
2) Pushが使えるProvisioningで署名をする
3) 1. で取得した証明書とか秘密鍵でp12ファイルを作って、サーバーにおいておく
3を忘れてひどい目にあったので、めもめも。
2012年2月8日水曜日
YouTube API for Objective-C(iPhone)
設定はここを見れば、大体問題なし(YouTube APIになっていないところは、適宜直す)。
xxx.hでは
#import "Headers/GDataYouTube.h"
#import "Headers/GDataServiceGoogleYouTube.h"
を記述した上で、プロパティにGDatFeedYouTubeVideo*を設定しておく。
特定ユーザのフィードを検索するにはviewDidLoadあたりで
GDataServiceGoogleYouTube *service = [self youTubeService];
NSURL *feedURL = [GDataServiceGoogleYouTube youTubeURLForFeedID:nil];
GDataQueryYouTube* query = [GDataQueryYouTube
youTubeQueryWithFeedURL:feedURL];
[query setStartIndex:1];
[query setMaxResults:5];
[query setAuthor:@"ユーザ名"];
[query setOrderBy:@"published"];
[service fetchFeedWithQuery:query delegate:self
didFinishSelector:@selector(request:finishedWithFeed:error:)];
[super viewDidLoad];
とやっておく。
youTubeServiceは
- (GDataServiceGoogleYouTube *)youTubeService {
static GDataServiceGoogleYouTube* _service = nil;
if (!_service) {
_service = [[GDataServiceGoogleYouTube alloc] init];
[_service setUserAgent:@"てきとうに"];
}
// fetch unauthenticated
[_service setUserCredentialsWithUsername:nil password:nil];
return _service;
}
検索が終わったら
- (void)request:(GDataServiceTicket *)ticket
finishedWithFeed:(GDataFeedBase *)aFeed
error:(NSError *)error {
if (!error) {
[self setFeed:(GDataFeedYouTubeVideo *)aFeed];
[self.listView reloadData];
}
}
みたいにして、検索結果をプロパティに設定して、UITableViewを更新する。
タイトル文字列なんかは
GDataEntryBase *entry = [[feed entries] objectAtIndex:indexPath.row];
NSString *title = [[entry title] stringValue];
NSString *descriotion =
[[[(GDataEntryYouTubeVideo *)entry mediaGroup]
mediaDescription] contentStringValue];
NSArray *thumbnails =
[[(GDataEntryYouTubeVideo *)entry mediaGroup] mediaThumbnails];
こんな感じでとれる。
ここから基本的なコードは取得できる。
xxx.hでは
#import "Headers/GDataYouTube.h"
#import "Headers/GDataServiceGoogleYouTube.h"
を記述した上で、プロパティにGDatFeedYouTubeVideo*を設定しておく。
特定ユーザのフィードを検索するにはviewDidLoadあたりで
GDataServiceGoogleYouTube *service = [self youTubeService];
NSURL *feedURL = [GDataServiceGoogleYouTube youTubeURLForFeedID:nil];
GDataQueryYouTube* query = [GDataQueryYouTube
youTubeQueryWithFeedURL:feedURL];
[query setStartIndex:1];
[query setMaxResults:5];
[query setAuthor:@"ユーザ名"];
[query setOrderBy:@"published"];
[service fetchFeedWithQuery:query delegate:self
didFinishSelector:@selector(request:finishedWithFeed:error:)];
[super viewDidLoad];
とやっておく。
youTubeServiceは
- (GDataServiceGoogleYouTube *)youTubeService {
static GDataServiceGoogleYouTube* _service = nil;
if (!_service) {
_service = [[GDataServiceGoogleYouTube alloc] init];
[_service setUserAgent:@"てきとうに"];
}
// fetch unauthenticated
[_service setUserCredentialsWithUsername:nil password:nil];
return _service;
}
検索が終わったら
- (void)request:(GDataServiceTicket *)ticket
finishedWithFeed:(GDataFeedBase *)aFeed
error:(NSError *)error {
if (!error) {
[self setFeed:(GDataFeedYouTubeVideo *)aFeed];
[self.listView reloadData];
}
}
みたいにして、検索結果をプロパティに設定して、UITableViewを更新する。
タイトル文字列なんかは
GDataEntryBase *entry = [[feed entries] objectAtIndex:indexPath.row];
NSString *title = [[entry title] stringValue];
NSString *descriotion =
[[[(GDataEntryYouTubeVideo *)entry mediaGroup]
mediaDescription] contentStringValue];
NSArray *thumbnails =
[[(GDataEntryYouTubeVideo *)entry mediaGroup] mediaThumbnails];
こんな感じでとれる。
ここから基本的なコードは取得できる。
2011年10月28日金曜日
階乗のプログラム
Lipsで書くと、こんな感じ。
カッコの数があっているのか心配になる。
Prologで書くとこんな感じ。
分かりやすい。ステキ☆
Haskellで書いてみる。
やっぱりこのあたりはHaskellが一番きれいかも。分かりやすいし。
Javaで書いてみる。
この程度のことでも色々書かなくちゃ行けない辺りが面倒。
カッコの数があっているのか心配になる。
Prologで書くとこんな感じ。
分かりやすい。ステキ☆
Haskellで書いてみる。
やっぱりこのあたりはHaskellが一番きれいかも。分かりやすいし。
Javaで書いてみる。
この程度のことでも色々書かなくちゃ行けない辺りが面倒。
2011年10月27日木曜日
Objective-C... メモリ管理
| 処理 | iOSのフレームワーク | Mac OS Xのフレームワーク |
|---|---|---|
| データ処理 | Foundation | Foundation |
| グラフィック処理 ユーザインタフェース処理 | UIKit | AppKit |
| マルチメディア処理 | AV Foundation, Media Player | AppKitの一部、QTKitなど |
オブジェクトの生成と削除
オブジェクトはRetain Countが0になった時に削除される。オブジェクトの作成時には、Retain Countは1で初期化されている。
<普通のオブジェクト>
通常のオブジェクトは、メソッド終了時に自動的に破棄される。
イベントの発生によりメソッドが実行される場合、メソッド実行の直前にAutorelease Poolが作られ、メソッドが実行されている間に作成されたオブジェクトの管理を行う。メソッドが終了する直前にAutorelease Poolは削除されるが、その中で管理されていたオブジェクトに対して一斉にreleaseメソッドが送られる。これによりRetain Countが0になるため、オブジェクトは削除され、メモリが解放される。
<明示的に管理する場合>
retainをオブジェクトに対して実行すると、保持カウントが+1される。
この場合は、Autorelease Poolで管理されていても、Autorelease Pool削除時のreleaseにより保持カウントが0にならないので、オブジェクトは削除されない。
イベント処理が終了した後でも使用したいオブジェクトに対しては、retainを呼び出しておく。
この場合は、オブジェクトが不要になった時点で明示的にreleaseを送り、保持カウントを減らす必要がある。
< Autorelease Poolで管理されないオブジェクト >
- alloc, newという文字列を名前の先頭にもつメソッド
- copyという文字列を名前に含むメソッド
- 明示的にreleaseする
- autoreleaseメッセージを送っておく(AutoreleasePoolの管理に入る)
< allocの注意 >
allocでオブジェクトを作る時は、initから始まる初期化メソッドを呼び出すことが必要。
オブジェクトの生成(メモリの確保)は行うが、初期化を行わないため。
ラベル:
Objective-C,
SoftwareDesign
2011年10月5日水曜日
Linuxキーマップの設定
ThinkPadのキー配列がUSな関係で、キーマップの設定が必要になることがある。
VMWare上のCentOSでキーマップが違ったので直した。
よく忘れるのでメモ。
RedHat系:ファイルは/etc/sysconfig/keyboard
JPの場合
debian
JPの場合
VMWare上のCentOSでキーマップが違ったので直した。
よく忘れるのでメモ。
JPの場合
KEYBOARDTYPE="pc" KEYTABLE="jp106"USの場合
KEYBOARDTYPE="pc" KEYTABLE="us"
JPの場合
# cp /usr/share/keymap/i386/qwerty/jp106.kmap.gz /etc/console/boottime.kmap.gzUSの場合
# cp /usr/share/keymap/i386/qwerty/us.kmap.gz /etc/console/boottime.kmap.gz
2011年8月29日月曜日
OCJ-P
バウチャーを買って、早くも1年。期限切れしてしまうということで、焦ってOCJ-Pを受験してきました。
対策は黒本(教科書と問題集両方)のみ。
黒本と殆ど同じ問題が何問か出題されて、ちょっと驚きました。全体的には黒本よりも簡単な問題が多かったです。
問題運があったのか、あまり難しい問題も無く。10年くらい前に「引っ掛け問題が多い」という噂を聞いていたので、警戒していたのですがそういうことも無く。割と素直な問題が多かった印象。
・コレクションはそれぞれの特徴と代表的なメソッドは覚えた方が良い
・スレッドは排他制御(synchronizedあたり)
・javac/javaコマンドのオプションもちゃんと出た
最初はサンプル問題から始まり、ほいほいと解いていると知らない間に本試験になっていました。「ここから本番ですよ〜」ともっと主張して欲しい...
正解率は93%で合格。60問なので4問くらい間違えたのか...多分、コレクションのあたりかなぁと思う。
黒本は、正誤表もあるけど「え?これおかしくない?」という解説や解答例があり、ちょっと悩ましい。
ところで、Bloggerって読者がつくシステムなんですね。知りませんでした。
こんな放置気味のブログにも読者がついていると....申し訳ないっ
対策は黒本(教科書と問題集両方)のみ。
黒本と殆ど同じ問題が何問か出題されて、ちょっと驚きました。全体的には黒本よりも簡単な問題が多かったです。
問題運があったのか、あまり難しい問題も無く。10年くらい前に「引っ掛け問題が多い」という噂を聞いていたので、警戒していたのですがそういうことも無く。割と素直な問題が多かった印象。
・コレクションはそれぞれの特徴と代表的なメソッドは覚えた方が良い
・スレッドは排他制御(synchronizedあたり)
・javac/javaコマンドのオプションもちゃんと出た
最初はサンプル問題から始まり、ほいほいと解いていると知らない間に本試験になっていました。「ここから本番ですよ〜」ともっと主張して欲しい...
正解率は93%で合格。60問なので4問くらい間違えたのか...多分、コレクションのあたりかなぁと思う。
黒本は、正誤表もあるけど「え?これおかしくない?」という解説や解答例があり、ちょっと悩ましい。
ところで、Bloggerって読者がつくシステムなんですね。知りませんでした。
こんな放置気味のブログにも読者がついていると....申し訳ないっ
登録:
投稿 (Atom)