Monthly Archives: March 2010

Tacloc Release

初めてのiPhoneアプリTaclocをリリース。無料。
時刻の遷移がちょっと変わっていて、文字がバクバクします。
iTunes Storeへのリンクはこちら

official_icon

Screenshot 2010.03.14 23.27.34
Screenshot 2010.03.14 23.28.50
Screenshot 2010.03.14 23.29.24
Screenshot 2010.03.14 23.29.52

 
スクリーンショットです。
3つまで登録可能なアラームも付いています。
アラームは曜日指定、スムーズON/OFFの設定が可能。
スムーズ設定の場合、5分毎にアラームが鳴ります。

iPhoneではdateWithCalendarFormat:timeZone:が使えないお話

初めてのiPhoneアプリとして時間遷移がちょっと面白い感じの時計のアプリを作っていて
AppStoteに初登録しようとしたところ、Rejectされてしまった。

Appleから来たメールは次のような感じ。

Thank you for submitting Tacloc to the App Store. We’ve reviewed Tacloc and determined that we cannot post this version of your application to the App Store because it is using private APIs. Use of non-public APIs, which as outlined in the iPhone Developer Program License Agreement section 3.3.1, is prohibited:

“3.3.1 Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.”

The following non-public APIs are included in your application:
dateWithCalendarFormat:timeZone:
hourOfDay
minuteOfHour
secondOfMinute

Taclocはアプリ名。
要するに、上記の関数はpublicじゃないので使っちゃいけない、と。

この辺を参考に直してみた結果は以下の通り。
iPhone OS – Don’t use dateWithCalendarFormat:timeZone
川の流れに月の影 iPhone NSDateFormatter setDateFormatの書式

■BEFORE

[cpp]
now = [NSDate date];

hour = [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];
minute = [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];
second = [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];
[/cpp]

■AFTER

[cpp]
now = [NSDate date];

[formatter setDateFormat:@"kk"];
NSString *hourStr = [formatter stringFromDate:now];
[formatter setDateFormat:@"mm"];
NSString *minuteStr = [formatter stringFromDate:now];
[formatter setDateFormat:@"ss"];
NSString *secondStr = [formatter stringFromDate:now];

hour = [hourStr intValue];
minute = [minuteStr intValue];
second = [secondStr intValue];
[/cpp]

hour、minute、secondはint型、nowはNSDate型、formatterはNSDateFormatter型の変数。
ちなみにBEFOREのソースだとビルドしたときにちゃんと警告が出る。下は出ない。
その辺をスルーしてた自分の責任です。はい。

OpenCVで任意の数のカメラを認識する

OpenCVで複数のカメラを使うときにいちいちIplImageとかcvCaptureの変数を
書くのが面倒だったので書いた。メモ。

[cpp]
#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

#define NUM_CAM 3;

int main (int argc, char * const argv[]) {

int key = 0;
int num = NUM_CAM;
int i=0;

// allocate memory
IplImage **src;
src = (IplImage**)malloc( num * sizeof(IplImage*) );

CvCapture **capture;
capture = (CvCapture**)malloc( num * sizeof(CvCapture*));

char** win_name;
win_name = (char**)malloc( num*sizeof(char*) );

for(i=0; i<num; i++){
win_name[i] = (char*)malloc( 64 * sizeof(char) );
sprintf(win_name[i], "Win%d", i);
}

// recognize cameras & make windows
for(i=0; i<num; i++){
if(NULL==(capture[i] = cvCreateCameraCapture(i))){
printf("Cannot find cameran");
return -1;
}

cvNamedWindow(win_name[i], CV_WINDOW_AUTOSIZE);
}

while(key != 0x0D && key!=0x0A){

for(i=0; i<num; i++){
if(NULL==(src[i]=cvQueryFrame(capture[i]))){
printf("Cannnot Capture image from camera1n");
break;
}

cvShowImage(win_name[i], src[i]);
}

key = cvWaitKey(1);
}

for(i=0; i<num; i++){
cvDestroyWindow(win_name[i]);
cvReleaseCapture(capture);
}

// free memory allocated first
free(src);
free(capture);
free(win_name);
return 0;
}
[/cpp]

#define NUM_CAM 3;

の値を変えれば理論的には何個のカメラでもお手軽に使えるはず。

multi_cam

表示してみると、こんな感じ。ここでは3つのカメラ認識。