加速度センサやジャイロを復習しよう

なんとなく勢いで参加したiOS Advent Calendarも今日で16日目。
そうそうたる面々が参加しているし、
もうそろそろネタとかかぶりそうな気がするけどそんなことは気にもせず1週間ほど前から準備しとりました。
時間とれなくてやっつけになったのは秘密。

今回紹介するのは加速度センサを使ったサンプル。
githubにうpしました
MasahiroSakoda / Humanizer

コードは至って簡単。
CoreMotion.frameworkを使うだけ。
とは言ってもなかなか使わないものだからコードを追ってみよう。
まずは加速度センサ。

- (void)startMeasure {
	if (motionManager.accelerometerActive) {
		NSOperationQueue *opQueue = [[[NSOperationQueue alloc] init] autorelease];
		[motionManager startAccelerometerUpdatesToQueue:opQueue withHandler:^(CMAccelerometerData *data, NSError *error) {
			dispatch_async(dispatch_get_main_queue(), ^ {
				NSLog(@"%@", data);
				CMAcceleration acceleration = data.acceleration;
				[self countSquat:acceleration];
				[logString appendFormat:@"x: %f, y: %f, z: %f\n", acceleration.x, acceleration.y, acceleration.z];
				textView.text = logString;
			});
		}];
	}
 
}

特記事項として留意すべき点はupdateIntervalとセンサの制御範囲。
これに関しては各々の感覚になってしまうため、一番難しいところかもしれない。。
Block構文の書き方とかも慣れないと気持ち悪いかも。

次にジャイロスコープ。

- (void)startMeasure {
	if (motionManager.isGyroActive) {
        NSOperationQueue *opQueue = [[[NSOperationQueue alloc] init] autorelease];
		[motionManager startGyroUpdatesToQueue:opQueue withHandler:^(CMGyroData *data, NSError *error) {
			dispatch_async(dispatch_get_main_queue(),^ {
				NSLog(@"%@", data);
				CMRotationRate gyroRotationRate = data.rotationRate;
				[logString appendFormat:@"x: %f, y: %f, z: %f\n", gyroRotationRate.x, gyroRotationRate.y, gyroRotationRate.z];
				textView.text = logString;
			});
		}];
	}
}

こちらも加速度と同じくupdateTimeと制御範囲がキモかも。
GCD(Grand Central Dispatch)で逐次解析を走らせたりってのもアリですな。

今更だけど、ぶん回してデバッグ中にiPhone壊さないようにしてね。
壊れても責任は持てませんので。

1週間前から書いてるって言いましたが、実はこれを書く前は「加速度/ジャイロでiPhoneを空に持ちながら字を書けたらなー」なんて思ってたけどこれの制御が難しい&時間が取れないことに気づいて断念。。。

これを書きながら考えていたんだけど、
紹介したこいつらを使ってどういうことが出来るか考えてみました。

・WiiリモコンみたいにiPhoneを振り回して字や絵を書いたり。

・iPhoneやiPadを落としたら音が出てなくさないようにする、とか、

・腹筋, 背筋等筋トレのジェスチャを定義したり、

・万歩計だったり、

・ランニング中に揺れを検知して適したリズム(BPM)を流したり、

あと、GestureRecognizer系と組み合わせるのもアリですね。
(UIViewのサブクラス上でしか動作しませんが…)

開発者によって色んな可能性が広がると思うのでこれをみている皆さんも是非試してみてください!!
(まだちょっと未完成っぽいので後々追記します)

「Advent Calendarに参加してみる」の巻

時の流れは早いものでもう12月。
クリスマスソングが流れる気まずい季節。
Advent Calendarの季節。

プログラミング界隈ではかなり盛り上がっているところもあれば、
人が足りなくて困っているところもあるようですね。

まとめてくれている人がいるようです。
http://d.hatena.ne.jp/tt_clown/20111110/advent_calendar_2011_jp

また、全部俺のAdvent Calendarとかかなり気合いがあるイベントももあったり。

私個人では「iOS Advent Calendar」の12/16日担当になりました。
多分テーマはUXあたりになりそう。

http://atnd.org/events/22792

Macのターミナル環境をハックする!(その3;bash編)

書ける時に書いておく。というわけで。
どうもどうも〜環境構築ヲタです。

今回はbashについてですが、
Macの標準のシェルがbashなので殆どの方はそのままbashをお使いだとお思います。
Linuxの多くのディストリビューションでもbash派が多数なのかな?

今回紹介する設定ファイルは
相当昔に書いたものなので変なところがあれば突っ込んで頂けると幸いです。

https://gist.github.com/1390423

今回の設定項目は、

・プロンプト(PS1)
・パス
・ページャー(バッファを読み込んで全体のどの辺を見ているかを表示)
・lsの色設定
・アホみたいなエイリアスの数々
・自前アホシェルスクリプトにエイリアス

など。

この頃は以下にキー操作を少なくすることを目的に書いていたのでエイリアスの嵐でカオスになっています。
これを呼んでいるみなさんの参考になれば。

Macのターミナル環境をハックする!(その2;.vimrc編)

Emacs好きだと・・・?ならば戦争だ

こんなこと言うとどこかしらで戦争が勃発しそうなのでもう過激なことを言うのは避けようと思いますが、
私はVim(≠MacVim)が好きなので色々と試行錯誤しながら設定やらプラグインやらを入れているのですが、その一部を紹介。

https://gist.github.com/1390420

設定してる項目は以下の通り。

・タブ幅の設定
・補完
・モード表示
・行番号の表示
・全角スペースのハイライト化
・タブ文字の可視化
・検索時に小文字の場合は大文字も含めた検索をする
・検索時に大文字の場合は大文字のみの検索をする
・インクリメンタル検索
・文字コード設定
・ファイルタイプ、インデントの設定

などなど。

「Vimテクニックバイブル ~作業効率をカイゼンする150の技」の一部をアレンジしてみるのもありだと思います。
向上心のあるVimerなら必携の一冊。
http://www.amazon.co.jp/Vimテクニックバイブル-~作業効率をカイゼンする150の技-Vimサポーターズ/dp/4774147958/ref=sr_1_1?ie=UTF8&qid=1322149067&sr=8-1″

Macのターミナル環境をハックする!(その1;zsh編)

どうもどうも〜環境構築マニアです。
今回はターミナル周りの環境を備忘録程度に晒しておきたいと思います。

まずターミナルと言えばシェル。
シェルと言えばzsh(こう思うのは私だけでしょうか)
bashももちろん公開しますが、まずは私のメインの環境がzshなのでzshから紹介します。

ここでは以下の機能を設定しています。

・プロンプトの色を対話ごとに設定
・lsの色を設定
・エイリアス
・補完周り
・パス設定

などなど。

gistにupしているので随時更新するかも。
https://gist.github.com/1390415
リポジトリ: git://gist.github.com/1390415.git

iOS5のTwitterライブラリをいじってみた。

まぁ、タイトルの通りなんですけど。

↓githubにうpしました。
FastTweet

 
迷いながら書いたからちゃんと動作しないかも。

流れとしては
1. 設定アプリに設定されているのTwitterアカウントを取得する
→ACAccount系クラス

2. 取得したアカウントでリクエストを送信する
→TWRequestクラス

この2つだけ。すんごくシンプル。
でもブロック構文が少し分かりにくいかも。

以下が重要なメソッド。

// アカウントオブジェクトを作成.
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
 
// Twitterのアカウントを取得
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
 
// Twitterにリクエストを投げる
TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.twitter.com/1/statuses/user_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET];

Xcode4.2で新規テンプレートを実行すると起動しない件

前の記事からの続きです。

Xcode4.2で新規プロジェクトを立ち上げた方はもうご存知だとは思いますが、
私がハマった点を紹介します。

今回はView-Based Applicationのテンプレートに的を絞っていこうと思います。

まず、AppDelegateクラスと(プロジェクト名)AppDelegateクラスがある件。
新規テンプレで自動生成後に実行すると「applications are expected to have a root view controller at the end of application launch」て怒られる。

これをどう解決するかというと…

AppDelegate.h

#import
#import "EchoStreamViewController.h"
 
@interface AppDelegate : UIResponder
 
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) SampleViewController *sampleViewController;
 
@end

AppDelegate.m

#import "AppDelegate.h"
 
@implementation AppDelegate
 
@synthesize window = _window;
@synthesize sampleViewController = _sampleViewController;
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
	self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
	self.window.backgroundColor = [UIColor whiteColor];
	_sampleViewController = [[SampleViewController alloc] init];
	self.window.rootViewController = self.sampleViewController;
	[_sampleViewController release];
 
	[self.window makeKeyAndVisible];
	return YES;
}
 
@end

AppDelegateクラスはUIApplicationDelegateプロトコルを採用しているのになぜかdidFinishLaunchingWithOptionsメソッドがいらっしゃらないので自前で記述する必要があるみたいです。

Xcode4.2/iOS5のハマりどころ対策委員会

Xcode4.2とiOS5のGM Seed入れて人柱をやっててハマったところを紹介します。

Xcode4.2でドラスティックに変わった点

Automatic Reference Counting(ARC)

→コンパイラがメモリ管理を開発者の代わりにやってくれる機能。
Javaをやっていた人にとってはGC(Gabage Collection)と言った方がわかりやすいかも。

参考:
Friday Q&A 2011-09-30: Automatic Reference Counting

AppDelegateクラスと(プロジェクト名)AppDelegateが分割された
→新規プロジェクトでテンプレートを選択すると自動生成されるファイルが結構変わってる。

テンプレートからビルドしても設定がまだ足りないので起動直後にコンソールで怒られる。

参考:
applications are expected to have a root view controller at the end of application launch

標準アーキテクチャがarmv7になった

→今までは標準Architectureがarmv6とarmv7両方だったが、
Xcode4.2ではarmv7のみになっているのでiPhone3G/3GS向けにビルドする際には必ずカスタムでアーキテクチャを追加する必要がある。

参考:
How To: Cross compiling libraries for iOS (armv6/armv7/i386)

※1 iPhone3G/3GSで搭載されているCPU
※2 iPhone4/iPad/iPad2に搭載されているApple A4/A5プロセッサ

Hello, WordPress World

以前サーバに残していたWordPressが消えてしまったので再び1からのスタートを切ることになりました。

出来るだけ更新していこうと思うので宜しくお願い致します。