어제 아이폰을 iOS 5.1로 업그레이드를 하고 Xcode를 4.3.1로 업그레이드 하기 위해 앱스토어에서 설치를 클릭하고 퇴근을 했다. 오늘 오전에 와서 당연히 업그레이드 되어 있겠지 했는데 버전이 4.2로 그대로였다. 설치가 안되었나 해서 앱스토어로 다시 가보니 설치됨으로 나오고 설치를 할 수가 없었다. 뭐지? 터미널에서 개발툴을 삭제하고 리부팅을 했다. 그래도 역시나 설치를 할 수 없는 상태. 찾아 보니 어플리케이션 폴더에 Xcode가 있었다. 실행을 해보니 그때서야 설치가 되기 시작한다. 설치가 된 후에도 역시 어플리케이션 폴더에 있는 Xcode로 실행이 된다. 

이전에도 이렇게 설치를 했었나 하고 생각을 해봤는데 기억이 나지 않는다. 이 세상에서 나만 모르고 있었던 것 같다는 생각이 들었다. 설명을 보니 안정성이 향상되었다고 하는데 iOS 5.1 지원 외에는 눈에 띄게 달라진 점은 잘 모르겠다. 나이가 들어 그런건지 게을러서 그런건지 요즘은 업그레이드 쫓아 가기도 버겁다.
  

'이야기들 > 소소한 이야기' 카테고리의 다른 글

reCAPTCHA와 집단지성의 활용  (1) 2012.01.31
꿩 대신 닭?  (2) 2012.01.11
2012년...  (0) 2012.01.02
아이맥 구입  (8) 2010.04.25
아이폰 개발자 프로그램 갱신  (2) 2009.11.05
AND

개발 툴 2012. 2. 14. 15:55
1. 다운로드 및 설치
PhoneGap사이트 우측 상단의 DownLoad 버튼을 클릭하면 현재 버전이 1.4.1을 다운로드 받을 수 있다. 다운로드 받은 파일의 압축을 해제하면 아래와 같은 서브폴더들이 생성된다.


폴더명처럼 android, bada, blackberry, ios, symbian, webos, windows를 지원한다. ios 아래의 PhoneGap-1.4.1.dmg를 클릭하고 PhoneGap-1.4.1.pkg를 실행하면 설치된다.

2.  테스트
1) 프로젝트 생성
Xcode를 실행하고 새로운 프로젝트를 생성하면 아래와 같이 PhoneGap 템플릿이 추가되어 있다. "PhoneGap-based Application"를 선택해서 프로젝트를 생성한다.


2) 빌드 & 실행

Automatic Reference Counting를 사용하지 않고 코드에서 autorelease나 dealloc을 사용하기 때문에 빌드 옵션에서 ARC를 비활성화한다. (미리 프로젝트 생성시에 Use Automatic Reference Counting를 체크하지 않으면 된다.)


프로젝트의 Build Settings에서 위와 같이 CLANG_ENABLE_OBJC_ARC 항목을 NO로 설정한다.
 

실행하면 아래와 같이 "www/index.html" 페이지를 찾을 수 없다는 오류메시지가 출력된다. 해당 프로젝트 폴더에 가면 www 폴더는 이미 생성되어 있다.


www 폴더를 드래그 하여 Xcode 좌측의 프로젝트에 드래그&드롭으로 가져다 놓는다. 이동시 Folders 옵션에서 "Create folder references for any addes folders"를 선택한다. 이제 다시 실행하면 www/index.html의 내용이 아래와 같이 출력 된다.




HTML5를 이용한 멀티 플랫폼을 지원하는 개발툴이라는 이야기는 어디서 들었는데 오늘 PhoneGap을 설치를 해보았다. 아마 앱 개발자 보다는 웹 개발자들을 위한 툴이 아닐까 하는 생각도 든다. 기존 앱 개발자들도 다양한 플랫폼을 대상으로 한 웹 환경에서 실행될 수 있는 앱이라면 이런 솔루션들을 고려해 볼만 한 것 같다. 


PhoneGap에선 PhoneGap Build란 클라우드에서 컴파일이 가능한 서비스도 제공한다. 소스와 리소스를 업로드하면 클라이언트에서 개발환경을 구성할 필요 없이 서버에서 빌드를 하여 각각의 플랫폼을 지원하는 실행환경을 제공하는 것 같다.

 
이 서비스는 요금별로 어플 갯수에 제한을 두는 유료 서비스로 제공된다. 이외에 사이트를 둘러 보니 개발자 지원 서비스도 유료로 제공한다. 이 툴과 서비스를 당장 사용할 일은 없을 것 같지만 사용해 볼 날이 왔으면 좋겠다.

'개발 툴' 카테고리의 다른 글

OS X에서 Go 설치  (0) 2010.02.27
실버라이트2 둘러보기  (10) 2008.12.16
프로젝트 관리 도구 OpenProj  (2) 2008.03.21
적당히 참견하는 Xcode  (4) 2008.02.25
OS X의 파이썬  (0) 2008.02.20
AND

1. C 표준 라이브러리 함수

int getDayOfWeek(int year, int month, int day)
{
struct tm *pResultTime;
struct tm targetTime = { 0, 0, 0, day, month-1, year - 1900 };
time_t targetSec = mktime(&targetTime);
pResultTime = localtime(&targetSec);
return pResultTime->tm_wday;
}

 
2. Cocoa 클래스

참조: NSDateComponents Class Reference

- (int)getDayOfWeek:(int)year month:(int)month day:(int)day

{
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setYear:year];
    [dateComponents setMonth:month];
    [dateComponents setDay:day];
    
    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *date = [gregorian dateFromComponents:dateComponents];
    NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:date];
    
    return [weekdayComponents weekday] - 1;
}


3.  첼러의 공식

참조: WikiPedia - Zeller's congruence

int getDayOfWeek2(int year, int month, int day)
{
    if(month <= 2) {
        year--;
        month += 12;
    }
    
    int year1 = year/100;
    int year2 = year%100;
    
    int weekDay =  (day + 26*(month+1)/10 + year2 + year2/4 + year1/4 - year1*2) % 7 - 1;
    if (weekDay < 0) {
        weekDay += 7;
    }
    
    return weekDay;


참조: Determination of the day of the week # Sakamoto's method

int dow(int y, int m, int d)
{
   static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};

    y -= m < 3;   
    
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;


AND

reCAPTCHA를 웹서비스에 적용시켜 보거나 또는 적용된 웹서비스를 이용하면서 두 단어를 입력하는 것에 대해서 더 정확하게 판별을 할려나 보다 외에는 별다른 생각이 없었다. 몇일전 TED에서 reCAPCHAR를 만든 루이스 폰 안의 '대규모 온라인 협업'이란 강연을 보면서 그 이유를 알 수가 있었다.



reCAPCHA의 주목적은 내가 알고 있던 실제 인간을 판별하기 위한 것 뿐만 아니라 책들을 디지털라이징을 하는데 도움을 주기위한 것도 있었다. 스캔후 OCR로 판독하기가 어려운 상태가 좋지 않은 문자들을 reCAPTCHA에 구별을 위한 문자와 같이 보여줌으로써 인간의 도움을 빌린다는 것이다. reCAPTCHA 인증시 나오는 단어중 하나만 실제 인간인지 판별하는 용도로 사용되고 나머지 하나는 컴퓨터가 판독하기에 불분명한 단어들을 확인하기 위해 사용한다는 것이다. 참으로 기발한 아이디어인 것 같다.

다만 reCAPTCHA를 이용하는 서비스 사용자들의 책들의 디지털라이징에 도움을 주는 이러한 참여가 누구를 위한 것인지는 의문이 든다. reCAPTCHA는 구글에 인수되었는데 구글북스의 디지털라이징에 사용되는지는 모르겠다. 광고를 보고 클릭함으로써 구글의 서비스를 무료로 이용하는 것처럼 문자 판독에 작은 도움을 주고 서비스들을 무료로 사용하는 대가중 하나로 봐야 하는 것인인지...

용도와 목적이야 어찌되었던 이런 개인들의 작은 노력이 합쳐져 커다란 결과물을 낼 수 있는 도구들이 많아 진다는 것은 좋은 현상인 것 같다. 물론 그 목적이 모두가 누릴 수 있는 공익이라면 더 보람과 가치가 있을 것이다. 그동안 IT에 별로 관심이 없었더니 오래전 부터 시작된 일을 이제서야 혼자 감동 받고 뒷북을 치고 있으니 조금 난감하기는 하다.

루이스 폰 안은 위의 TED 강연에서 Duolingo란 새로운 서비스를 소개한다. 웹사이트들을 많이 사용되는 여러 언어로 번역을 하는 서비스이다. 이 역시 여러 사용자들의 자발적인 참여를 통해 번역을 하게되며 사용자들은 Duolingo 서비스를 통해 번역할려는 다른 외국어를 학습하며 번역을 한다.


사이트를 가보니 베타 테스트 중이며 아직 지원하는 언어가 많지 않은 것 같다. 어떤 방법으로 사용자에게 외국어 학습과 함께 번역에 기여할 수 있게 하는 가는 잘 모르겠지만 뭔가 재미있는 것이 나올 것 같기도 하다. 영어가 모국어인 사람들도 많지만 전체로 보면 영어를 배우고 싶어하는 사람이 더 많을 것이다. 그런데 현재 모습만 보면 왠지 외국어를 배우고 싶어하는 영어 사용자들을 위한 단방향 서비스인 것 같기도 하다. 영어에 익숙해지기 위해 많은 시간을 투자해야만 하는 한국에서 이런 비슷한 서비스가 한글 전용으로 나오는 것도 괜찮을 것 같다.

'이야기들 > 소소한 이야기' 카테고리의 다른 글

Xcode 재설치  (6) 2012.03.09
꿩 대신 닭?  (2) 2012.01.11
2012년...  (0) 2012.01.02
아이맥 구입  (8) 2010.04.25
아이폰 개발자 프로그램 갱신  (2) 2009.11.05
AND

컴퓨터, 스마트폰, 탭 각종 디스플레이 기기에 둘러 쌓여 있다보니 오히려 아날로그적인 옛것들에 관심이 많이 간다. 하지만 아마존에 나온 킨들4가 요즘 마음을 조금씩 흔들고 있다. 지름신은 왔지만 정말로 나에게 필요한가에 대해서 생각하다 보면 망설여지게 된다. 킨들과는 다르지만 갤럭시탭에 킨들 어플을 깔고 몇권 다운로드 받아서 보긴했지만 이 역시 처음에 몇 페이지만 읽다가 그만두었다. 칸들에 대한 아쉬움도 있고해서 아이폰의 iBooks에 들어가서 이것저것 둘러 보았다. 보다보니 애플에서 올린 개발관련 문서들이 있다. 


iOS Application Programming Guide
The Objective-C Programming Language
Object-Oriented Programming with Objective-C
iOS Technology Overview
Cocoa Fundamentals Guide 
iOS Human Interface Guidelines

다운로드 받아서 iBooks에서 보니 약간 색다르기는 하다. 가장 필수적인 문서들을 모아놓은 것 같은데 iOS Human Interface Guidelines는 한국앱스토어에서는 나오지가 않는다. 컴퓨터에 접근할 수 있는 상황에선 필요 없겠지만 화장실이나 지하철에서 심심할 때 마다 읽어봐야 겠다. 일단 이것으로 킨들에 대한 지름신을 퇴치했다고 믿고 싶다.

'이야기들 > 소소한 이야기' 카테고리의 다른 글

Xcode 재설치  (6) 2012.03.09
reCAPTCHA와 집단지성의 활용  (1) 2012.01.31
2012년...  (0) 2012.01.02
아이맥 구입  (8) 2010.04.25
아이폰 개발자 프로그램 갱신  (2) 2009.11.05
AND

간단한 게임을 하나 만들어 볼려고 하는데 아이폰과 안드로이드 모두 지원하는 Cocos2d-x를 사용해 보기로 했다. NDK도 기존에 사용하던 r5에서 새로운 버전으로 설치하였다. 맥 라이언에서 NDK r7과 cocos2d-1.0.1-x-0.10.0 기준이다.

1. 다운로드 및 설치
1.1 NDK
안드로이드 개발자 사이트에서 최신버전인 r7을 다운로드 받고 압축을 푼 후에 적당한 폴더로 복사한다.

1.2 Cocos2d-x
cocos2d-x의 다운로드 페이지에서 최신버전인 cocos2d-1.0.1-x-0.10.0을 다운로드 받고 압축을 푼 후에 적당한 폴더로 복사한다.

둘다 설치는 간단하다. 다운로드 받고 압축을 푼 후에 원하는 폴더로 복사하면 된다. 

2. 설정 수정
복사해 놓은 cocos2d-1.0.1-x-0.10.0 폴더로 이동한다.

2.1 create-android-project.sh

NDK_ROOT="/home/laschweinski/android/android-ndk-r5"
ANDROID_SDK_ROOT="/home/laschweinski/android/android-sdk-linux_86"

상단에 위와 같이 되어 있는 부분을 아래와 같이 실제 NDK와 안드로이드 SDK가 설치된 폴더로 변경한다.

NDK_ROOT="/Users/zzerr/android-ndk-r7"
ANDROID_SDK_ROOT="/Developer/SDKs/android"

2.2 ./cocos2dx/Android.mk

NDK r7에선 glplatform.h의 GL_GLEXT_PROTOTYPES 이 제거되어 컴파일시 오류가 발생한다. 설치된 폴더내에 cocos2d-x 폴더의 Android.mk를 열어 아래와 같이 수정한다. 

LOCAL_CFLAGS := -DUSE_FILE32API


하단의 위와같이 되어 있는 LOCAL_CFLAGS를 찾아 아래와 같이 GL_GLEXT_PROTOTYPES를 추가한다. 
 

LOCAL_CFLAGS := -DUSE_FILE32API -DGL_GLEXT_PROTOTYPES=1



3. 프로젝트 생성
3.1 create-android-project.sh 실행
안드로이드 프로젝트 생성을 위해서 cocos2d-x 폴더에서 create-android-project.sh 를 실행한다. 

 
실행후에 package path를 입력받는데 적당한 이름을 입력한다. 


다음으로 타겟 안드로이드 SDK 버전을 입력한다. 출력되는 리스트중에서 선택을 한후 'id:' 다음에 나오는 숫자를 입력한다.


그리고 프로젝트명을 입력하면 cocos2d-x 폴더 아래에 프로젝트 이름으로 프로젝트 폴더가 생성된다. 이클립스에서 새로운 프로젝트를 생성하고 위에서 생성된 프로젝트 폴더에서 android 폴더를 선택한다.

3.2 build_native.sh 실행
[프로젝트명]/android 폴더에 있는 build_native.sh를 실행하여 필요한 라이브러리들을 빌드하여 생성한다.

3.3 빌드 및 테스트
이클립스에서 빌드 후 테스트를 한다.


갤럭시탭에서 실행해서 화면에 빈공간이 많은 것 같다. 위에서 프로젝트 생성시 타겟 목록에 따로 갤럭시탭이 있기는 하다.
AND

다시 새로운 한해가 시작되었다. 겪는 횟수가 늘어 날수록 감흥과 기대는 줄어 드는 느낌이다. 늘 시작되면 지키지도 못할 계획과 목표를 세우듯이 올해는 복습과 집중이란 목표를 세웠다. 읽은지 오래된 개발 관련 서적들을 다시한번 찬찬히 읽어 보기로 했다. 다른 책들도 가능하면 충동적으로 구매하지 않고 예전에 읽었던 책 중에서 다시 보고 싶었던 것이나 사 놓고 손이 가지 않았던 책들을 읽어 볼려고 한다. 집중은 그동안 너무 여기저기 기웃기웃 거리며 수박 겉핧기 식으로 호기심만 조금 채웠지 실속은 그다지 없었다. 관심사와 노력을 집중시켜야 할 것 같다. 개발에서도 플랫폼과 언어를 줄이고 집중해서 깊이를 더해야할 것 같다.
  
(노인 Z)

가끔 검은 머리 파뿌리 될때까지 프로그래밍을 할 수 있었으면 좋겠다는 이야기를 하는데 이젠 노인 Z의 저 해커 영감들과 같이 될 날이 멀지 않았다.

'이야기들 > 소소한 이야기' 카테고리의 다른 글

reCAPTCHA와 집단지성의 활용  (1) 2012.01.31
꿩 대신 닭?  (2) 2012.01.11
아이맥 구입  (8) 2010.04.25
아이폰 개발자 프로그램 갱신  (2) 2009.11.05
급격한 Objective-C 사용자 증가  (4) 2009.08.20
AND

처음 스모킹 카운터를 올린 후에 필요에 따라 업그레이드를 해오다가 작년 2월쯤에 마지막 업그레이드를 하고는 손을 놓고 있었다. 더 추가할 것도 없는 것 같고 이정도면 대충 쓸만하다 생각하고 신경을 끊고 있었다. 후에 레티나 디스플레이가 나오면서 고해상도도 지원해야 되지 않나하는 생각이 들었지만 나중에 다른 업그레이드 할 때 같이 하자 생각하고 미루어 왔다.

한동안 인터페이스빌더를 사용하지 않다가 새로나온 스토리보드의 사용법도 익힐겸 스모킹카운터를 업그레이드 하기로 했다. 시작후 iOS5 이상만 지원한다는 사실을 알고 잠시 갈등을 했지만 '이젠 다들 업그레이드를 했을거야'란 자기최면을 걸고 그냥 그대로 만들기로 했다. 

예전 버전을 빌드 할려니 괜히 cocos2d를 쓴 부분이 있어 되지도 않고 그냥 앱스토어있는 스크린샷을 참고하기로 했다. 헌데 앱스토어에서 앱이 보이지를 않았다. '너무 오래 관리를 안하면 앱을 내리나?'하는 생각이 들었다. 그러나 한국 앱스토어를 제외하고 다른 나라의 앱스토어에서는 잘 나오고 있었다. 이상해서 애플에 메일로 문의를 해보니 몇달전 한국에 게임 카테고리가 노출된 이후로는 게임과 엔터테인먼트에 있는 17세 이상의 게임들은 한국 앱스토어에서는 출력되지 않는다는 답장이왔다. 담배와 관련이 있어 17세 이상이고 처음 올릴 때 서브카테고리를 엔터테인먼트로 선택을 해서 한국에서만 나오지 않은 것 같다. '이건 게임이 아닌데 이 어플도 영향을 받나?'라고 문의를 다시 해보았는데 '이해해 줘서 고맙다'라는 심오한 내용의 답장이 와서 포기했다. 어차피 업그레이드를 하면서 보조 카테고리를 더 적당한 곳으로 옮기면 되니...

OS X 라이언과 Xcode 4.2.1로 처음 작업을 했는데 라이언은 무겁고 Xcode는 죽는 횟수가 많고 안정적이지 않은 것 같다. 어제 앱스토어에 등록하는데 바이너리 업로드시 오류가 나면서 업로드가 되지를 않는다.

This bundle is invalid. The key UIRequiredDeviceCapabilities in the Info.plist may not contain values that would prevent this application from running on devices that were supported by previous versions. 


UIRequiredDeviceCapabilities 항목에 해당 아이템을 추가하고 이리저리 변경해서 올려도 결과는 마찬가지였다. Xcode에서 이해할 수없는 오류가 반복될 때의 가장 좋은 해결법중에 하나인 Xcode를 종료했다 다시 실행해도 오류는 사라지지 않았다. info.plist에서 UIRequiredDeviceCapabilities 항목을 삭제해 보았더니 오류없이 업로드되었다. 성공은 했지만 무엇인가 찜찜한...


이번에 변경하거나 추가한 부분은 레티나 디스플레이 지원, 통계 가로보기 추가, 디자인 변경과 함께 흡연한 지역을 보여주는 기능을 넣었다. 지도는 예전에 한 사용자가 메일로 추가해주었으면 좋겠다고 해서 넣어 보았는데 딱히 쓸모가 있는지는 모르겠다. 하긴 담배를 피면서 세는 어플도 딱히 필요한지는 모르겠다.

그외 양 캐릭터가 보기 싫다는 메일 내용도 생각이 났다. 그래서 양을 드래그 해서 옮기도록 만들었다. 정 보기 싫으면 튕겨서 화면 밖으로 나가도록 만들었다. 어디로 갔던지 제자리를 찾아 돌아 오긴한다.

혹시 다른 추가하거나 변경할 사항이 없나 해서 앱스토어의 리뷰들을 확인해 보았다. 그런데 유독 영국 앱스토어에서만 자정이 넘어가면 초기화되는 버그가 있다는 내용들이 있다. 전면은 하루 단위로 갱신이 되는데 그것을 버그로 여기는 것 같다. 다행히 최근에 '영국인 발견'이란 책을 읽어서인지 그다지 당황스럽지는 않았다. 메뉴 이름을 Today로 변경하고 타이틀바에 오늘의 날짜를 출력하여 하루단위라는 것을 강조 하도록 수정했다.

이 어플은 초기에 내가 사용하는데 의미를 두고 만들었지만 한달 쓰고 안쓰게 되었다. 몇일있으면 오는 2012년 부터는 써볼려고 하는데 얼마동안 사용할지 장담할 수는 없다. 가장 좋은 것은 금연을 하여 이런 어플을 안쓰고 안만드는 것이고 그전까지는 업그레이드를 계속 해볼려고 한다.
AND

몇일 전 등록한 앱이 스토어에 등록 되었다고 메일이 왔다. 앱스토어에서 확인해 보니 등록이 되어 있었다. 스모킹카운터 이후로 근 3년만에 내 계정으로 어플을 올려 보는 것 같다. 초기 한국 앱스토어에서 주기율표를 찾아 보고 내가 하나 만들어 올려야 겠다고 생각한지 한참을 지난 지금에서야 만들어 올렸다. 이젠 주기율표 어플도 많은데 이걸 만들어야 되나 몇번 고민이 들었지만 iOS에 적응도 할겸 만들기로 했다. 광고를 넣어 볼까 했는데 마땅히 넣을 곳이 없어 그만 두었다.


번호순, 화학상태, 상온에서의 상태등으로 볼 수 있고 상세보기에선 위키피디아울프럼알파에서 관련항목을 볼 수가 있다. 헌데 울프럼알파는 간혹 앱을 사라는 화면을 뛰우는 것 같긴한데 그냥 넣었다.


가로보기 시에는 주기율표로 보이도록했다. 뒷부분 와서는 고민하는 것이 귀찮고 해서 이미지 없이 그냥 생코딩으로 구겨 놓고 서둘러 앱스토어에 올렸다. 아무리 무료지만 어플의 용도가 어정쩡한 것 같기도 하다. 쓰는 사람이 있어 사용후기들이 올라오면 참고해서 업그레이드나 해야겠다.

이젠 레티나 지원도 무시하고 방치한 스모킹카운터를 업그레이드 해야 겠다. 과연 아직 쓰는 사람들이 있을까 하는 의문은 들지만 내가 쓸려고 만들어 놓고 나도 안쓰는 이 상황에선 업그레이드가 필요한 것 같다. 처음 아무 생각없이 스토리보드로 작업해서 어쩔 수 없이 iOS5 이상만 지원할 수밖에 없다는 것이 난감하긴하다.
AND

6개월 전쯤 오랫만에 iOS 프로젝트를 하게되어 Xcode 새 버전을 다운로드 받고 실행해 보았다. 오래 안봤더니 생소한 인터페이스빌더의 모습에 겁을 먹고 인터페이스빌더를 사용하지 않고 개발하기로 했다. 그러다 근래가 되어서야 지인으로부터 스토리보드란 것이 있다는 이야기를 들었다. 오랫동안 손을 놓고 있었던 스모킹 카운터의 업그레이드 버전은 사용법도 익힐 겸 스토리보드를 사용해서 만들기로 했다.

'신기하게 잘 만들었구나'하며 이것저것 해보면서 만들다가 오늘 문득 타겟을 iOS 4.3으로 해도 되는지 테스트 해보기 위해 아무 생각없이 타겟을 iOS 4.3으로 수정하고 빌드를 해보았다. 'Storyboards are unavailable on iOS 4.3 and prior'란 오류가 났다. 안되는 구나 하고 다시 5.0으로 변경한 후 빌드를 하는데 또 같은 오류가 난다. Xcode를 종료하고 클린을 한후에 다시 빌드를 했는데 결과는 같다. 검색을 해보니 나만 그런 것은 아닌 것 같고... 하지만 검색해서 얻은 해결법들이 나의 경우에는 해결되지 않았다. 설마 프로젝트를 다시 만들어야 하는 것은 아닌지 Xcode 초보자로서 참으로 난감한 일이다. 그러던 중 늘 그렇듯이 소발에 쥐잡기로 빌드는 되었다.

1. 프로젝트 Deployment Target이 5.0인지 확인.
2. 스토리보드 속성중 Document Versioning에서 Deployment가 iOS 5인지와 Development가 Xcode 4.2인지 확인. 
3. 파인더에서 *.storyboard 파일을 다른 곳으로 이동(언어별로 되어 있으면 모두 이동).
4. Xcode 종료
5. *.storyboard 파일을 기존의 디렉토리로 다시 이동.
6. Xcode 재실행 후 클린
7. 빌드


Xcode 버전은 4.2.1이며 용기가 없어 확인해 보기 위해 다시 재현하지는 못했다. Xcode 버그인지 아니면 일반적인 방법이 있는데 삽질인지는 모르겠다. 
AND

아이폰프로그래밍UIKIT핵심바이블
카테고리 컴퓨터/IT > 네트워크/보안 > 모바일프로그래밍 > 아이폰/아이패드
지은이 토코로 유타 (정보문화사, 2011년)
상세보기

2년여 Xcode를 사용할 일이 거의 없었다. 안드로이드 개발환경이 많았고 그외 윈도우즈 모바일, 스마트 TV등이었고 iOS와 관련된 프로젝트는 해볼 기회가 없었다. 이번달 초부터 아이폰 관련 프로젝트를 시작하면서 Xcode 4를 다운로드 받아 설치하고 실행해 보았다. 변경된 UI도 그렇지만 Objective-C, iOS SDK 모든게 낯설어 보였다.

어차피 거의 처음부터 다시 시작이고 이전 지인으로부터 메모리 사용량이 많을 시에는 인터페이스 빌더를 사용하지 않는 것이 메모리 관리가 더 편하다는 이야기를 들어 이 프로젝트에서는 인터페이스 빌더를 사용하지 않고 개발해 보기로 했다. 관련된 서적을 구입하러 서점으로 갔고 '아이폰 프로그래밍 UIKit 핵심 바이블(yes24에서 보기)'이란 책이 가장 눈에 띄여서 구입했다.

기본적인 내용으로 시작하는 1장 마지막에 '1.4 인터페이스 빌더와 완전 결별'이란 내용이 나온다. xib 파일을 삭제하고 설정파일을 편집하고 소스를 수정하여 앞으로 더이상 인터페이스 빌더를 사용하지 않고 개발하기 위한 준비다. 뒤로는 책 제목 그대로 사용자 인터페이스와 관련된 UIKit 프레임워크의 사용방법에 대해서 나온다. 툴 사용법이나 Objective-C에 대한 설명없이 바로 사용할 수 있는 소스코드와 설명 위주로 되어있어 짧은 시간에 다시 적응할 수 있게 되어 도움이 되었다.

처음 iOS에서 개발을 시작하거나 iOS에 대한 전반인 이해를 위한 분들을 위한 책은 아니다. 하지만 iOS 개발에 대해 약간의 지식이 있는 분들에게는 xib를 사용하거나 안하거나 iOS UIKit의 객체들을 사용하고 이해하는데 좋은 요약본이될 수 있다. 시간이 흐르면 그자리는 SDK의 문서들이 대체하지만 그전까지 또는 그후로도 가끔 옆에서 두고 참고할 수 있는 책인 것 같다.
AND

기타 2011. 7. 19. 17:35
블로그에 그나마 드문드문 쓰던 글도 올린지가 벌써 1년이 넘었네요. 방치해 놓고 그동안 댓글과 방명록에 글을 올려 주신 분들께 답변을 못드려 죄송하다는 말씀을 드립니다.

그동안 자주 찾아 오지 못한 것이 'OS X에서 cocoa 맛보기'란 이름에 맞는 주제의 글들을 올려야 하지 않나 하는 생각에 부담스럽고 멀게 느껴진 이유인 것 같기도 하고요. 이제는 그냥 편하게 쓸려고 합니다. 꼭 개발이나 프로그래밍에 관련된 이야기가 아니더라도 관심과 호기심이 가는 내용, 생각들과 책, 영화와 같은 일상적이고 개인적인 주제로도 글을 올려 볼려고 합니다. 너무 일기 같은 내용들은 혼자 노는 다른 블로그에 올리겠지만요.

그동안 존댓말로 글을 쓰던 것도 자신보다는 타인에게 이야기하는 느낌이 들기 때문에 조금은 부담이 되었던 것 같습니다. 그래서 그냥 혼자 생각하듯이 반말로 자유로운 주제로 글을 써보자는 생각이 들었습니다.

제 블로그이긴 하지만 오랜 시간 비워두었다가 갑자기 반말로 글을 쓰는 것이 머쓱하기도 해서 먼저 글을 올려 봅니다.

'기타' 카테고리의 다른 글

아두이노와 놀기  (4) 2010.07.01
참고할만한 좋은 아이폰 소스  (19) 2010.05.04
세계지도 앱 - World Atlas  (2) 2010.04.21
모토로이  (6) 2010.02.11
역시 그냥 껐다 키는 것이...  (8) 2009.09.24
AND

기타 2010. 7. 1. 16:24
1. 아두이노

아두이노는 마이크로 프로세스를 탑재한 보드와 개발툴을 제공하는 오픈 프로젝트입니다. 보드가 USB와 연결된 상태에서 프로세싱에 기반한 통합개발환경에서 소스코드를 작성하고 Upload 버튼을 클릭함으로써 보드로 간편하게 업로드 할 수 있습니다. 아래는 티스토리 블로그에서 댓글이 등록되면 LED가 5초동안 켜지는 간단한 샘플을 실행한 모습입니다.


아두이노는 국내에서는 플러그 하우스나 기타 하드웨어를 취급하는 쇼핑몰등에서 보드와 관련 모듈, 부품들을 구입할 수 있습니다. 전기적인 지식이 조금 있으신 분들은 아두이노 공식 사이트에 공개된 하드웨어 메뉴얼을 참조하여 직접 만드는 것도 어렵지 않습니다.

아두이노
카테고리 컴퓨터/IT > 컴퓨터공학 > 마이크로프로세서 > 마이크로프로세서일반
지은이 마시모 밴지 (인사이트, 2010년)
상세보기

아두이노와 관련된 번역서도 나와 있고 공식 사이트의 Leaning, Reference 페이지와 인터넷에 공개되어 있는 많은 자료들을 참고하면 쉽게 익숙해질 수 있습니다. 브레드보드를 이용하여 LED, 모터, 스위치, 센서와 저항들을 연결하여 사용하면 기판을 만들 필요도 없고 납땜도 필요없이 손쉽게 원하는 회로를 만들어 볼 수 있습니다.

요즘은 아이가 로봇교실에서 사용하던 각종 센서와 모터를 물려서 시간날때 마다 이것저것 만들어 보고 있는데 재미있습니다.

물론 지금 쓰고 있는 컴퓨터 보다 1,000배는 더 열등한(?) 하드웨어이고 간단한 코드들로 간단한 동작들만 하지만 직접 하드웨어를 구성하고 제어하는 물리적인 재미와 함께 어린시절 전자키트를 가지고 놀던 향수도 느낄 수 있습니다. 직접 회로를 만들 수도 있지만 판매되는 전용 이더넷 쉴드모터쉴드직비 쉴드등을 이용해 쉽게 기능을 추가할 수 있으며 로봇 교재 사이트등에서 판매하는 부품들도 대부분 사용이 가능합니다. 아두이노는 소프트웨어 개발자를 위한 저렴(?)하고 재미있는 장난감중 하나인 것 같습니다.

아두이노는 스크래치에서도 바로 인식이 가능하기 때문에 스크래치의 센서보드로도 사용할 수있습니다. 관찰 메뉴에서 하단의 센서 관련 블록에서 우클릭 후에 'ScratchBoard 감시판 보이기'를 클릭하고 다시 감시판에서 우클릭 후에 '시리얼/USB 포트 선택'을 클릭하면 아래와이 아두이노 보드가 인식됩니다.


이를 이용하면 스크래치의 리모콘, 게임 컨트롤러를 쉽게 만들 수 있으면 촉각, 광, 온도, 적외선, 소리 센서등을 이용해 실제 환경을 스크래치에 반영시키는 것이 가능합니다. 스크래치뿐만 아니라 여러 개발환경에서 아두이노와 통신할 수 있는 방법들이 많이 공개되어 있습니다.


2. 샘플

이전에 포스팅한 블로그의 새 댓글을 확인하는 스크래치를 아두이노 버젼으로 만들어 보겠습니다. 이번도 마찬가지지만 정확한 파싱없이 대충 새 댓글을 판별하는 것이기 때문에 뭔가 쓸만한게 만들어 보실려면 코드를 많이 수정하셔야 할 것 입니다.

1) 아두이노 코드
아두이노 통합개발환경은 아두이노 공식 사이트의 다운로드 페이지에서 사용하는 OS별로 다운 받으실 수 있습니다. IDE의 에디터에서 아래의 코드를 입력한 후에 상단의 Upload 버튼을 클릭하면 보드로 업로드됩니다.

  1. #define LED_PIN    13
  2. #define DELAY_SEC  5
  3.  
  4. void setup() {
  5.   Serial.begin(9600);
  6.   pinMode(LED_PIN, OUTPUT);
  7. }
  8.  
  9. void loop() {
  10.   if (Serial.available() > 0) {
  11.    
  12.     byte b = Serial.read();
  13.     if (== 'O') {
  14.       digitalWrite(LED_PIN, HIGH);
  15.       delay(1000 * DELAY_SEC);
  16.       digitalWrite(LED_PIN, LOW);
  17.     }
  18.   }
  19. }

2) 프로세싱 코드
아두이노에서는 별도의 이더넷 모듈 없이는 직접적인 인터넷 연결이 불가능하기 때문에 프로세싱과 연동하여 블로그의 내용을 가져오도록 합니다. 프로세싱 IDE에서 아래의 코드를 입력하고 실행합니다.

  1. import processing.net.*;
  2. import processing.serial.*;
  3.  
  4. final String BLOG_URL = "www.cocoadev.co.kr";
  5. final int DELAY_SEC = 5;
  6.  
  7. String prevCommentID = "";
  8. Serial port;
  9.  
  10. void setup() {
  11.   size(400, 140);
  12.   background(10);
  13.  
  14.   port = new Serial(this, Serial.list()[0], 9600);
  15. }
  16.  
  17. void draw() {
  18.   background(10);
  19.   text(String.format("* URL: %s", BLOG_URL), 10, 25);
  20.  
  21.   Client webClient = new Client(this, BLOG_URL, 80);
  22.  
  23.   webClient.write("GET / HTTP/1.1\n");
  24.   webClient.write(String.format("HOST: %s\n\n", BLOG_URL));
  25.  
  26.   delay(1000 * DELAY_SEC);
  27.  
  28.   if (webClient.available() > 0) {
  29.     String data = webClient.readString();
  30.     String[] comment = match(data, "/[0-9]*#comment[0-9]*");
  31.    
  32.     text(String.format("* Received: %02d:%02d", hour(), minute()), 10, 50);
  33.    
  34.     String statusTitle;
  35.     if (comment != null && comment.length > 0) {
  36.       String recentCommentID = comment[0];
  37.      
  38.       if (prevCommentID.equals(recentCommentID)) {
  39.         statusTitle = "None";
  40.       } else {
  41.         statusTitle = "New";  
  42.        
  43.         port.write("O");
  44.       }
  45.      
  46.       prevCommentID = recentCommentID;
  47.     } else {
  48.       statusTitle = "Error";
  49.     }
  50.      
  51.     text(String.format("* Status: %s", statusTitle), 10, 75);
  52.   }
  53. }

아래와 같이 실행되는 모습을 확인할 수 있습니다. 급조한 소스에 나와있다시피 실행한 후 5초 후에 최초로 한번 LED가 한번 켜지고 그후에는 댓글에 변경이 있을때마다 켜집니다.
아두이노는 몇년전 마소와 같은 잡지에도 소개되고 사용하는 분들이 많으실 것 같습니다. 저야 신호등 놀이나 하는 수준이지만 인터넷을 찾아보니 기발한 아이디어로 재미있는 것들을 만드시는 분들이 많더군요. 재미있는 것을 하나 만들어봐야 겠다는 생각이 드는데 딱히 떠오르는 것은 없습니다. 그냥 이렇게 살살 가지고 놀다 끝날 수도 있을 것 같네요.

'기타' 카테고리의 다른 글

다시 글쓰기  (2) 2011.07.19
참고할만한 좋은 아이폰 소스  (19) 2010.05.04
세계지도 앱 - World Atlas  (2) 2010.04.21
모토로이  (6) 2010.02.11
역시 그냥 껐다 키는 것이...  (8) 2009.09.24
AND

정확히 언제부터인지는 모르겠지만 현 버젼(1.4)의 스크래치는 42001 포트를 이용한 소켓통신으로 양방향으로 데이터를 전송할 수 있습니다. 이를 이용해서 티스토리에 댓글이 추가되었을때 스크래치에서 알려주는 간단한 샘플을 만들어 보겠습니다.


1. 스크래치

1) 원격 센서 연결 활성화
소켓 통신을 위해서는 스크래치의 관찰 항목 하단의 '센서의 버튼누르기' 명령어 블럭을 마우스로 우클릭합니다. 나오는 메뉴중에 '원격 센서 연결 활성화'를 클릭하고  '원격 센서 연결 켜기' 대화상자가 뜨면 확인 버튼을 클릭합니다. 이로써 스크래치가 소켓통신이 가능한 상태가 됩니다.

2) 메시지 생성
다음은 메시지를 생성합니다. 제어 메뉴의 '방송하기' 명령어 블록을 우클릭하여 '새로 만들기...'를 클릭합니다. 메시지의 이름에 new_cmt를 입력하고 확인 버튼을 클릭합니다.


3) 스크립트
아래와 같이 스크립트창에서 명령어 블럭을 배열합니다. 캡쳐 이미지는 파이썬으로 부터 enw_cmt 메시지를 수신했을 때 동작하는 모습입니다.



2. 테스트 코드

1)  코드

스크래치가 준비되었으면 파이썬을 이용하여 테스트를 해볼 수 있는 간단한 코드를 작성해 보겠습니다. 에디터에서 아래의 소스를 입력하고 scratch.py로 저장합니다. 터미널에서 'chmod +x scratch.py' 명령을 실행하여 파일이 실행 가능하도록 권한을 변경합니다.

  1. #!/usr/bin/python
  2. #  -*- coding: utf-8 -*-
  3. import socket, httplib, re, time
  4. from array import array
  5.  
  6. DELAY_SEC = 5
  7. SCRATCH_PORT = 42001
  8.  
  9. def sendToScratch():
  10.     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  11.     sock.connect(('127.0.0.1', SCRATCH_PORT))
  12.  
  13.     msg = 'broadcast "new_cmt"'
  14.     sdata = array('c', [chr(0), chr(0), chr(0), chr(len(msg)&0xFF)])
  15.  
  16.     sock.send(sdata.tostring() + msg)
  17.     sock.close()
  18.  
  19. prevComment = ""
  20. while True:
  21.     webClient = httplib.HTTPConnection("www.cocoadev.co.kr")
  22.     webClient.request("GET", "/")
  23.     response = webClient.getresponse()
  24.  
  25.     rdata = response.read()
  26.  
  27.     webClient.close()
  28.  
  29.     result = re.search("/[0-9]*#comment[0-9]*", rdata)
  30.  
  31.     curComment = result.group(0)
  32.  
  33.     if curComment != prevComment:
  34.         print ">> New comment"
  35.         prevComment = curComment
  36.         sendToScratch()
  37.     else:
  38.         print "-- No new comment"
  39.  
  40.     time.sleep(DELAY_SEC)

2) 테스트
스크래치가 실행된 상태에서 위의 파이썬 코드를 실행합니다. 처음 한번은 새로운 메시지가 왔다는 이벤트를 보냅니다. 파이썬 시작후에 스크래치에서 'new_cmt' 메시지를 수신하고 해당 블럭이 실행되는 것을 확인하실 수 있습니다.


간단한 테스트 코드를 만들어 보았는데 위와 반대로 스크래치에서 보내는 메시지를 파이썬에서 수신도 가능합니다. 이를 이용하면 스크래치에서 트위터에 글을 내보내는 등 다른 어플리케이션들과 연동하여 다양한 방법으로 스크래치의 활용이 가능합니다. 아래의 파일을 클릭하여 위의 스크래치와 파이썬의 소스를 다운로드 받으실 수 있습니다.




AND

지인의 소개로 구입해서 얼마전까지 읽은 책입니다. 초창기 애플에서 맥용 소프트웨어를 개발했던 앤디 허츠펠드가 당시 매킨토시를 개발하면서 겪었던 재미있는 사건들을 Folklore 사이트에 정리해 놓은 것을 책으로 출판한 것입니다. 앤디 허츠펠드는 2005년부터 구글에서 소프트웨어 엔지니어로 근무하며 주로 JavaScript를 사용하는 일을 한다고 합니다. 한 인터뷰에서 애플과 구글은 비슷한 점이 많지만 몇가지 다른점도 있는데 구글은 애플 보다 더 직원을 신뢰한다고 이야기 했습니다. 스티브 잡스가 들으라고 한 소리일까요?

미래를 만든 GEEKS
카테고리 경제/경영
지은이 앤디 허츠펠드 (인사이트, 2010년)
상세보기

스티브 잡스에 관한 책들은 많지만 이렇게 직접 만든 실무자가 이야기를 쓴 책은 처음 본 것 같습니다. 그래서인지 공감가는 이야기들도 많고 여느 애플에 관한 책보다 재미있게 읽었습니다. 소프트웨어 개발자가 쓴 책이다 보니 다소 기술적인 이야기들이 많이 나오지만 오히려 개발자들한테는 더 큰 재미를 주는 것 같습니다. 내용은 80년대 초반 매킨토시를 개발하고 있던 팀에서 허츠펠드가 겪었던 혹은 들었던 일들을 회고하는 형식으로 되어 있습니다. 

재미있었던 부분은 MS의 빌게이츠가 1983년 컴덱스에서 윈도를 발표하자 격노한 스티브 잡스가 애플로 빌 게이츠를 불러 들였을 때 나눈 이야기들입니다. 잡스가 먼저 "나는 당신을 믿었는데 당신은 지금 우리 것을 훔치고 있어"라며 소리치자 빌 게이츠는 아래와 같이 침착하게 대답했습니다.

"이봐, 그 일을 보는데는 여러가지 시각이 있다고 생각해. 우리에게는 둘다 제록스라는 부자이웃이 있었고 내가 TV를 훔치러 그 집에 몰래 들어 갔다가 당신이 이미 TV를 훔친 사실을 안 것과 비슷하거든."

험한 분위기에서 많은 애플 직원들속에 홀로 둘러 쌓여 저렇게 응대할 수 있다니 대단한 사람인 것은 틀림 없는 것 같습니다. 여지껏 애플에 관해 나온 책들이 일반 보통 사람들과 마케팅, 경영에 관심이 있는 사람들이 좋아할 책이었다면 이 책은 제목처럼 개발자들을 위해 나온 애플에 관련된 책인 것 같습니다.

'책 이야기 > IT 일반' 카테고리의 다른 글

번역서의 표지 디자인  (8) 2009.08.31
소프트웨어 크리에이티비티 2.0  (0) 2009.07.21
드리밍 인 코드  (2) 2009.05.20
레이몬드 첸의 윈도우 개발 282 스토리  (0) 2008.01.18
스티브 워즈니악  (4) 2007.12.31
AND

재미로 만들었다가 몇몇분들과 만나게되어 이런저런 이야기나 하면서 노는 커뮤니티 사이트가 하나 있습니다. 이번에 서버쪽에서는 제가 api를 제공하고 아이폰 클라이언트 어플리케이션은 장대훈(사진중독)님이 만들고 소스까지 공개해 주셨습니다. 어플리케이션의 용도는 특정 커뮤니티에 특화되었고 일반적으로는 사용할 수 없습니다. 하지만 아이폰 어플리케이션 개발시 필요한 왠만한 UI와 구현들이 포함되어 있어 한번 살펴 보시면 많은 도움이 되실 것 같습니다.


코드에 포함된 중요 구현들은 아래와 같습니다. 그외에도 탭바, 네비게이션바, 이미지피커뷰, 검색, 키보드 입력등 다양한 구현 코드가 있습니다.

  • 다양한 UI 구현
  • 테이블뷰셀 커스터마이징
  • HTTP GET/POST 요청
  • XML 파싱
  • 사진 앨범, 카메라, 지도 이미지 접근
  • 맵뷰 및 위치정보
  • 푸시 노티피케이션


※ 서버쪽은 현재 폐쇠되어 있습니다. 소스코드의 라이센스는 GNU GPL을 따르고 있으며 소스코드와 관련된 질문과 데모 사이트의 구현과 API에 관련된 질문과 소스요청은 받지않습니다.

좋은 소스를 공개해주신 장대훈님께 감사의 말씀 드립니다.


'기타' 카테고리의 다른 글

다시 글쓰기  (2) 2011.07.19
아두이노와 놀기  (4) 2010.07.01
세계지도 앱 - World Atlas  (2) 2010.04.21
모토로이  (6) 2010.02.11
역시 그냥 껐다 키는 것이...  (8) 2009.09.24
AND

몇일전 아이맥 27인치를 구입했습니다. 그동안 맥북을 쓰다가 2년만에 다시 아이맥으로 돌아 왔습니다.


Xcode를 사용하기에는 맥북으로도 무리가 없었는데 이클립스에서 리소스가 큰 안드로이드 프로젝트 몇개를 열어 놓으면 사용하기 힘들정도로 느려져 큰마음 먹고 구입했습니다. 사고 보니 화면도 밝고 선명하고 속도도 빠르고 확실히 아이맥이 일반적으로 사용하기에는 좋다라는 생각이 들었습니다. 그래봐야 한달만 쓰면 다시 익숙해져 좋은지도 모르겠지만요. 덕분에 스노우 레오파드도 처음 써보았는데 대충 사용하는 하급 맥 사용자라 그런지 뭐가 달라지고 좋아졌는지는 잘 모르겠습니다. 오히려 겨우 0.1의 버젼이 올라간 Xcode 3.2가 편리해진 부분이 많고 추가되고 변경된 부분이 많더군요. 아이패드 시뮬레이터를 보니 나오면 바로 살 것 같은 불길한 예감이 들었습니다.

그나저나 새 제품을 쓰니 기분은 좋은데 언제 일해서 언제 본전을 뽑을 수 있을지 모르겠습니다.

'이야기들 > 소소한 이야기' 카테고리의 다른 글

꿩 대신 닭?  (2) 2012.01.11
2012년...  (0) 2012.01.02
아이폰 개발자 프로그램 갱신  (2) 2009.11.05
급격한 Objective-C 사용자 증가  (4) 2009.08.20
WWDC 2009  (4) 2009.06.11
AND

터치부터 아이폰까지 구매한 유료 어플이 2개인데 그중에 하나입니다. 다른 것은 아이에게 보여주기 위해 구입했으니 제가 쓰기 위해 구입한 유일한 유료 어플이네요. 네셔널지오그래픽에서 나오 세계지도를 볼 수 잇는 World Atlas란 어플입니다.

 가격은 1.99달러이며 책을 볼때 지명등이 나오면 바로 찾아 볼 수가 있어 좋습니다. 심심할때도 슬금 슬금 세계 구석구석을 구경하는 재미도 괜찮습니다. 지도와 컨텐츠도 괜찮을뿐 아니라 런칭속도와 어플리케이션 실행 속도도 빠르기 때문에 아주 만족스러운 어플인 것 같습니다.


기본인 Executive 모드와 Political, Satellite 모드가 있고 확대/축소를 지원하고 있습니다.  지도들은 보기 편하게 잘 만들어져 있는 것 같습니다. Executive 모드에선 각 모서리 부분에서 극지방 상세지도와 인구밀도, 식생, 인구밀도, 면적과 인구가 많은 나라들 등의 정보가 있습니다.



확대를 해서 볼 수 있으며 상세하게 확대해서 볼려면 네트워크에 연결하여 마이크로소프트의 Bing에서 지도를 가지고 와서 보여줍니다. 이 상태가 되면 하단 네셔널지오그래픽 로고가 Bing으로 변경됩니다. Nation 버튼을 클릭하면 국기와 함께 각 나라들의 목록이 나옵니다. 해당 국가를 클릭하면 그나라의 수도, 인구, 면적, 언어, 종교, 문해율, 회망수명, GDP등과 함께 간단한 설명을 볼 수 있습니다.



상세지도를 다운로드 받으면 네트워크 연결을 줄일 수 있습니다. 앱 설치후에 Index / Map Library에서 다운로드 받을 수 있습니다. Index에서 Major Cities of the World란 메뉴를 클릭하면 주요도시들의 목록을 볼 수 있습니다. 클릭하면 지도상의 해당위치로 이동하면 북마크를 할 수 있습니다.

어플의 단점이라기 보다는 아이폰의 디스플레이 크기로 인해 세계지도를 보는데는 답답한 부분이 있습니다. 이럴때 가장 생각나는 것이 아이패드인 것 같습니다. 네셔널지오그래픽에서도 이미 아이패드용 앱을 올려놓았고 아이폰과는 달리 HD라고 되어 있는 것을 보니 해상도도 더 좋아진 것 같습니다. 아이패드가 더욱 기다려 집니다.

'기타' 카테고리의 다른 글

아두이노와 놀기  (4) 2010.07.01
참고할만한 좋은 아이폰 소스  (19) 2010.05.04
모토로이  (6) 2010.02.11
역시 그냥 껐다 키는 것이...  (8) 2009.09.24
아이폰 3GS  (2) 2009.09.17
AND

컴퓨터를 새로 구입하고 리더기에 구독할만한 RSS 피드들을 찾아 다니다 인터넷 서점인 YES24RSS 서비스 목록에서 재미있는 것을 보았습니다. 연령별 관심도서 목록인데 연령대별로 한달동안 가장 많이 구매한 도서의 순위입니다. 컴퓨터와 인터넷 분야를 보았는데 재미있기도 하고 약간은 의외의 결과를 보았습니다. 아래는 20대 초반과 50대 이상의 구매순위 목록 링크입니다.


20대가 부모님 명의로 가입을 했을 수도 있고 인터넷 쇼핑에 익숙하지 않은 부모님 대신 구입한 20대들도 있을 수는 있습니다. 1위는 양쪽 다 상품권이긴 합니다만 20대 초반은 주로 자격증 수험서를 구입했고, 50대 이상은 주로 컴퓨터 활용등이고 OpenCV 같은 다소 전문적인 서적들도 눈에 띄입니다. 취업을 준비해야할 20대 초반과 그에 비해 여유가 있고 실무에 도움이 되는 정보를 원하는 50대이기 때문에 나타나는 차인인 것 같습니다.

요즘같이 청년실업률이 놓은 시기에 자격증 수험서가 많이 팔린다는 것은 당연한 결과이기는 하지만 왠지모를 씁쓸함이 들기도 합니다.

'책 이야기' 카테고리의 다른 글

스크래치 책 출간  (20) 2009.09.05
AND

iOS 2010. 4. 9. 15:56
어제 애플에서 아이폰 OS 4에 관련된 내용들을 발표했습니다. 직접 보지는 못하고 애플 사이트에서 iPhone OS 4 Event 키노트를 보았습니다.

예전 같으면 SDK 베타부터 다운로드 받아 설치했을 것 같은데 이제는 업무로 Xcode를 사용하다 보니 베타 버젼은 설치를 기피하게 되네요. 그런 변명도 있고 제가 가진 OS X가 10.5라 더이상 업그레이드를 할 수 없는 상태이기도 합니다. 맥북이라 느리기도 하고 조만간 아이맥을 구입해야 할 것 같습니다. 이젠 더 이상 손을 놓고 기다리기 힘들게 되었습니다.

맥의 OS X도 마찬가지지만 이번 아이폰 OS의 업그레이드 내용을 보면 'OS 업그레이드는 이렇게 하는 것이다'라는 전형적인 모범답안을 보여주고 있는 것 같습니다. 1.0부터 모든 버젼의  업그레이드를 이미 다 계획해 놓은 듯이 보여질 정도로 단계적으로 업그레이드를 해갈때 마다 완성형에 가까운 모습으로 가고 있는 것 같습니다.

이번 업그레이드도 많은 변경이 있지만 키노트에서는 아래와 같이 7가지 주요 기능을 위주로 설명하고 있습니다. 간단한 내용은 아래와 같습니다.

1. 멀티태스킹
오랫동안 논란이 되어왔던 멀티태스킹이 드디어 아이폰에서도 가능하게 되었습니다. 멀티태스킹은 하드웨어의 성능때문에 아이폰 3GS와 3세대 터치에서만 가능합니다.

2. 폴더
폴더를 만들어 비슷한 어플을 그룹화시켜 저장할 수 있습니다. 이로인해 기존 180개에서 2,160개까지 어플을 저장할 수 있게 되었습니다. 배경화면도 사용자가 지정한 이미지로 설정할 수 있게되었습니다.

3. 메일
메일함이 통합되고 메일을 스레드로 볼 수 있게 되었습니다. 또한 성능이 개선되고 첨부파일을 서드파티 어플에서 열어 볼 수 있습니다.

4. 아이북
아이패드에서 보았던 아이북이 아이폰에도 추가되었습니다.

5. 엔터프라이즈
데이터 보안이 강화되고 SSL VPN을 지원합니다. 데이터 보안 API는 일반 개발자들도 사용할 수 있습니다.  그리고 인하우스 앱들은 네트워크를 사용해 설치할 수 있습니다.

6. 게임센터
게임센터가 추가되었습니다. 친구를 초대하고 대전상대를 찾고 스코어가 기록됩니다.

7. 아이애드
iAd란 어플리케이션에서의 광고를 지원합니다. 이익의 60%가 어플리케이션 개발자에게 지급됩니다.

가장 큰 변경사항은 멀티태스킹입니다. 이로인해 어플리케이션이 백그라운드로 실행될 수 있기때문에 이와 관련된 메소드들이 많이 추가되었습니다. 백그라운드로 전환되어 대기상태가 될때는 OpenGL ES 메소드를 호출한다거나 네트워크을 사용하지 말아야하며 주소록 같은 시스템 리소스도 해제해야합니다. 많은 메모리를 사용하고 있다면 이역시 해제해야합니다.

만약 메모리와 같은 시스템 리소스가 부족하면 백그라운드에서 실행중인 어플리케이션이 먼저 제거대상이됩니다. 또한 시스템이 어플리케이션이 백그라운드로 전환될 때 메인윈도우를 캡쳐해 놓고 전환시 사용하기 때문에 패스워드같이 민감한 정보는 해당윈도우에서 삭제하길 권장하고 있습니다. 그리고 사용자 설정이 변경될 때 어플이 대응할 수 있도록 필요하다면 관련 통보 메시지를 처리해야 합니다. 이와함께 백그라운드에서 실행되는 어플들이 알려야할 내용이 있을때 사용할 수 있도록 위해 로컬 노티피케이션도 추가되었습니다.

Game Kit에는 게임센터를 지원하는 메소드들이 추가되었습니다. 애플에서 제공하는 서버와 서비스를 이용하여 사용자들의 점수를 저장할 수 있고 사용자들은 특정 사용자를 초대하거나 다른 사용자들을 선택할 수 있습니다.

이외에 어플리케이션에서도 SMS를 보내고 파일을 공유하고 PDF를 생성하고 사용자 폰트를 사용할 수 있는등 많은 기능과 서비스들이 추가되고 변경되었습니다. 애플에서 제공하는 iPhone OS 4 beta API Diffs란 문서를 참조하시면 4.0 SDK에서 추가된 내용들을 확인하실 수있습니다.

현재 애플의 기세는 MS, 구글, 아도비, 닌텐도, 소니등 모든 IT 업체들과 적이되어 홀홀 단신으로 싸울려는 모습으로 보여지기도 합니다. 이런 자신감은 수많은 어플리케이션을 올리며 든든히 뒤에는 바쳐주는 개발사와 개발자가 있기 때문이 아닌가라는 생각도 듭니다.

이번 SDK 4.0에서 추가된 많은 서비스와 API를 이용하여 지금과는 또다른 독특하고 재미있는 어플들이 많이 나올 것 같다는 생각이 듭니다.

'iOS' 카테고리의 다른 글

NSXMLParser로 RSS 읽어오기  (21) 2009.08.05
인터페이스빌더 Table View Cell 사용하기  (0) 2009.06.25
cocos2d 개발환경 설정  (24) 2009.04.13
iPhone SDK 3.0 beta 2  (4) 2009.04.05
UITableView의 메모리 누수 현상  (4) 2009.02.05
AND