CharSyam
Tag | Location | Media | Guestbook | Admin

2010/02/01 01:46 2010/02/01 01:46
올해 마음잡고 공부할 것들

1. 머신 러닝

2. 형태소 분석기

3. 모르는 언어 하나 배우기

4. 영어 공부

5. 매쉬업 관련해서 공부하기



2010/01/29 02:36 2010/01/29 02:36
아이폰과 아이팟 터치 구분하기 [UIDevice currentDevice].model

iPod touch 와 iPhone을 구분하는 방법은

UIDevice 를 얻어와서 model 명을 보면 쉽게 알 수 있다.

iPad는 과연 모델명이 뭐로 나올지 궁금하긴 하네.



2010/01/28 01:14 2010/01/28 01:14
아이폰 개발 – NSURLConnection , NSRunLoop, NSOperation

기본적으로 NSURLConnection 은 Async 모드를 제공해 준다. 그런데 이걸 Thread 에서 동작하도록 수정을 해볼려고 하니, 삽질의 연속이다.

결국 쉽게 가기 위해서 선택한 것이(사실 NSThread 는 사용하지도 않았다는) NSOperation 이다.

그런데 이상한 현상은 NSOperation 안에서 NSURLConnection 을 사용하게 되면 NSRunLoop 를 이용해서 Message Pumping을 하게 되는데, 아직 이 부분을 완벽하게 이해하지 못한 죄로!!!

GET은 잘 되는데 POST는 이상하게 동작한다.( 이유는 아직 잘 모르겠다 –_- )

처음에는 아예 NSURLConnection 이 동작하지 않는다고 생각했는데, async의 경우에 해당 Runloop로 메시지를 보내는 것이라, 타 스레드에서 제대로 받지 못해서 발생하는 문제인듯 하다. –_- 그런데 이게 해결책으로 제시된 걸 써봐도 제대로 동작하지가 않아서 좀 더 고민을 해야 할 듯 하다.



2009/12/24 10:11 2009/12/24 10:11
iPhone library, framework 위치

  음... 중간에 삽질했던 것 중에 하나가, iPhone 개발시 추가하는 Library, framework의 위치를 잘

몰랐다는 것이다.

 

 잊지말자.

 

Developer/Platforms/iPhoneOS.platform/Developer/usr/lib

Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks

 



2009/12/16 00:59 2009/12/16 00:59
아이폰 개발자 인증 과정에서 주의할 점!!!

오래간만에 다시 아이폰에 프로그램을 올리기 위해서, 인증서를 등록하는데, 맥장비를 엎는 바람에 새로 인증서를 발급해야 했는데, 자꾸 인증서가 등록이 되지 않는 것이다. 이유를 오늘 드디어 찾았는데!!!

원인 1 : 키체인 접근 –> 인증 지원 –> 인증 기관에서 인증서 요청 시에 여기서 생성하는 키 정보가 “로그인” 으로 들어가야 한다. 이것은 로그인 키체인 위에서 “로그인”을 기본 키체인으로 만들기를 선택해야 한다. 기본적으로는 로그인이 기본 키체인 이므로 걱정하지 않아도 되지만, 이 점이 매우 중요하다.

원인 2 : 인증서 관련 정보가 바뀌면 반드시 XCode 에서 Clean All Targets 를 선택해서 관련 정보를 삭제해 줘야 한다. 단순히 XCode 를 종료하고 다시 시작하는 것만으로는 해당 정보가 남아있어서 반영되지 않는다.

원인 3 : Provisioning 관련 파일을 아이폰과 XCode 두 군데에 등록해야 한다. 등록 방법은 XCode의 Windows->Organizer 를 선택해서 등록할 수 있다.

보통 인터넷으로 기본적으로 인증서를 등록하는 방법을 따르면 잘 되지만, 혹시나, 이런 문제가 발생할 수 있기 때문에, 이에 대해서 잘 숙지하고 있는것이 꼭 필요하다.



2009/11/30 00:18 2009/11/30 00:18
Makefile Sample

그냥 내가 보통 사용하는 Makefile Sample

sample 을 잘 보면 몇 가지 안 쓰는 부분들이 있지만, Makefile 의 문법을 알기 위해서 나중에 쓸 수 있는

부분들이라서 같이 올린다.

.SUFFIXES   =   .cpp .o
AR          =   ar
CC          =   g++
CFLAGS      =
LIBS        =
INCS        =
OBJS        =   cs_socket_addr.o \
                cs_socket.o \
                cs_netutil.o \
                cs_acceptor_socket.o \
                cs_connector_socket.o
SRCS        =   $(OBJS: .o=.cpp)

TARGET      =   netlib.a
TEST1       =   client_test
TEST2       =   server_test

all     :       $(TARGET) $(TEST1) $(TEST2)

$(TARGET) :     $(OBJS)
                $(AR) rcv $(TARGET) $(OBJS)

$(TEST1)    :   $(TARGET) $(TEST1).o
                $(CC) -o $(TEST1) $(TEST1).o $(TARGET)

$(TEST2)    :   $(TARGET) $(TEST2).o
                $(CC) -o $(TEST2) $(TEST2).o $(TARGET)
.cpp.o      :
                $(CC) -c $(CFLAGS) $*.cpp

dep         :
                    gccmakedepend $(SRCS)
clean       :
                    rm -rf $(OBJS) $(TARGET) $(TEST1) $(TEST2) core



2009/11/24 01:06 2009/11/24 01:06
Haskell IO 관련해서 삽질하기 getChar, putChar

시간이 나면 조금씩 함수형 언어를 해볼려고 생각중인데, 생각만 하고, 노력은 안한다는…

사실 노력을 안한 이유 중에, 이거 haskell Sample을 아무리 따라해봐도 제대로 동작하지가 않는다.

-_-;; 그런데 엄청난 반전이 있었으니…

나를 괴롭히던 샘플 IO관련 인데

main :: IO()
main = do c <- getChar
                        putChar a

라는 함수가 있었다.

글자를 한자 stdin 으로 받아서 stdout 으로 뿌려주는 아주 단순한 예제인데 자꾸…

“The last statement in a 'do' construct must be an expression” 라는 에러가 나면서 샘플을 돌려볼 수가없는 것이었다.

그런데 –_-

위의 예제를 다음과 같이 하면 돌아간다.

main :: IO()
main = do
                        c <- getChar
                        putChar a

이런 젠장, do 와 같은 라인에 뭔가가 있으면 안되는 것이었다. T.T 왜 그런지는 나두 잘 모르겠지만, 계속 위의 에러가 나면서 T.T 모두들 이런 실수 안하시길…



2009/11/21 11:54 2009/11/21 11:54
재미나고 유용한 VC 옵션 한가지

한방빌드를 만들어서 쓰다보면, 다음과 같은 경우가 생깁니다.

1. 소스 트리는 하나로 유지하고 싶다.

2. 나가는 대상에 따라서 서로 다른 기능이 동작해야 한다.(바이너리에서 완전히 빠져있게)

사실 결론은 하나입니다. #ifdef 등으로 기능이 다르게 동작하게 하는 것.

그럼 여기에 적용할 수 있는 간단한 방법은 다음과 같습니다.

1. 소스 트리를 따로 유지한다. –> 1번에 위배되고, 유지보수에 손이 많이 갑니다.

2. 프로젝트 속성을 여러개 만들어서, 사용한다. 하지만, 이것도, 한 솔루션에 프로젝트가 여러 개 있다면, 굉장히 번거로운 작업이 생깁니다.

3. 하나의 프로젝트 속성을 쓰데, 매번, 빌드 할 때, #define 속성을 변경해준다.

4. 빌드 시, 자동으로 소스 코드에 설정에 맞는 #define 이 들어가도록 빌드 스크립트를 작성한다.

위에 것들을 보면 4번이 그래도 가장 나아보입니다. 그리고, 설정 작업이 복잡해 진다면, 4번 형태로 가는게 좋을듯 합니다.

그런데, 지금부터 알려드릴(이미 공개된 ㅋㅋ) 옵션을 사용하게 되면, 한방에 처리가 됩니다.

뭐냐 하면,  CL 이라는 환경 변수입니다.

먼저 자세한 건 다음 사이트에서 알 수 있습니다.

http://msdn.microsoft.com/en-us/library/kezkeayy.aspx

간단하게 설명하자면 set CL=-D_TEST_A_

이런식으로 지정하면 빌드시에 자동으로 _TEST_A_ 옵션이 적용됩니다. –D 뿐만 아니라 다른 것들도 쉽게 바뀌게 됩니다. 즉, 같은 빌드 프로세스를 타면서 앞쪽에 CL옵션을 설정해서 #define 한것과 같은 효과를 낼 수 있습니다.

간단한 빌드 프로세스에서는 위의 4번과 같은 방법을 쓰지 않고도 효과적으로 사용할 수 있습니다.



2009/11/21 03:02 2009/11/21 03:02
실수를 줄이는 방법은?

아, 오늘도 또 대형사고를 쳐버렸습니다. 신규 서비스를 배포했는데, 바로 버그가 발견되서, 롤백해야 되는 아픈 순간이…

더더욱 문제는, 버그의 원인이, 어려운 것도 아니고, 아주 간단한 것을 실수해 버렸기 때문입니다. 그것도  두가지나!!!

첫번째는, 코드의 문제입니다. 아주 간단한 룰을 꺼꾸로 써버려놓고, 대충 테스트를 하고(딱 버그가 일어나기 직전까지만…) 아 문제없다라고 생각하고 넘어가버렸습니다. 반대로, 그 제대로 테스트를 했을 경우에는 해당 버그가 발생하지 않는 케이스 였다라는게 더더욱 문제였습니다.

QA 기간에 QA에서 버그를 발견하지 못하는 것은 QA의 책임은 아니라고 생각합니다. 개발자가 변경 사항에 대해서 더 자세히 알려주고, 테스트케이스에 대해서 고민했다면… 아마도 쉽게 발견했을지도 모르겠습니다. 일단, 저는 이번에 그러지 못했습니다.

두번째는, 배포직전에 백업을 조금 잘못해서, 롤백하는데 대략 1~20분 정도 시간이 걸렸습니다. 사실 이 부분도 큰 문제라고 생각합니다. 1번의 실수는 그래도 단지 실수일 뿐이지만… 두번째는 잘못된 행동이기 때문입니다.

물론, 어떻게 보면, 변명의 여지도 있습니다. 아주 바뻐서, 모두 다 제대로 챙기기에는 힘들었을 수도 있습니다. 하지만… 제대로 해야 하는 것들을 제대로 하지 못한 것을 단지 실수로 여기기 보다는, 여기서 개선점을 찾아내야 한다고 생각합니다.

그래서 “회고” 가 있는 것이겠죠.

이제부터는 기능을 구현하기 전에, 이것을 어떻게 테스트 해야 잘 할 수 있는가 부터, 고민을 해야겠습니다. 그리고,  할 수 있는한, 점검표를 만들어서 실제로 점검하면서 할 수 있도록 해야겠습니다.(단순 반복 작업)

그리고 귀찮다고 대충하는 것은 정말정말 피해야겠습니다.



2009/11/16 01:32 2009/11/16 01:32
아이폰 프로그래밍 시작하기-2 Nib 와 loadView의 관계

필자, 역시, 아이폰 프로그래밍은 이제 막 시작하는 거라, 완전 밑바닥 부터 공부를 하는 중이다.

(과연 공부를 하고 있냐고 물으신다면, 아니라고 쿨럭…)

사실, 몇달전에 간단한 아이폰 어플을 만든 적은 있지만, 그 때는, 내부 구조를 전부 C++로 만들고, UI만 아이폰 컨트롤을 조금 써서 만들었었다. 그 때의 목표는 Windows Mobile 어플과 아이폰 어플의 로직을 같은 코드로 공유하는 것이었다.

그런데, 그 때도 잘 이해하지 못하고 넘어갔던 것들이 nib 와 각 컨트롤러의 동작들이었는데, 이번에 그 부분을 공부할려고 하니 완전히, 삽질의 바다에서 헤메이는 것이었다. 이래서 물어봐야 하는데, 안 물어본 쿨럭…(혼자서 할 수 있을꺼라고 생각하다니 T.T 주변에 아이폰 프로그래밍 잘하는 사람들이 수두룩 한데 쿨럭…)

그러나, 책을 보고, 예제를 고쳐보고 곰곰히 생각해보니 다음과 같은 관계가 간단하게 성립한다.

image

이 부분을 잘 몰라서, NIB를 안 쓸려고 하니, 화면이 나오지 않는다든지, 또는 원하는 동작이 일어나지 않는다든지 한 것이다. 그렇다면 NIB를 안쓰고 할려면 위의 Nib 가 해주는 역할을 개발자가 대신 해줘야 하는 것이다.

1) NIB를 사용할 경우

- (void)applicationDidFinishLaunching:(UIApplication *)application {   
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}

2) NIB를 사용하지 않을 경우 – MainWindow.xib 는 쓸 경우

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    HelloController *viewController= [[HelloController alloc] init];
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}

2) NIB를 사용하지 않을 경우 – 전체 사용 안함

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    HelloController *viewController= [[HelloController alloc] init];
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}

다른 부분들도 바뀌어야 하는 부분들이 있지만, nib를 안쓰면 다음과 같이 코드 부분들이 늘어나는 것을 알수 있다.



BLOG main image
CharSyam
 Notice
 Category
전체 (69)
(9)
(2)
프로그래밍 (54)
게임 (1)
Server Setting (1)
 TAGS
구글테스트 포팅 구본형 윈도우즈 모바일 CAB 지식인의 책임 촘스키 리눅스 커널 삽질운하 여론 조작 더블버퍼링 CeRegSetValueEx DTM_SETIMAGE 도전 임베디드 OS 만들기 Haskell MACOSX google test SetUp Bundle Identifier C&C 뷰타입 스타일 WindowsMobile 디자인패턴 VFS 버전관리 세월이 젊음에게 회계 부정 WindowMobile 뷰패킷 모듈 사용 뷰 TDD
 Calendar
«   2010/02   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            
 Recent Entries
올해 마음잡고 공부할 것들
아이폰과 아이팟 터치...
아이폰 개발 &ndash; NS...
iPhone library, framew...
아이폰 개발자 인증 과...
 Recent Comments
네, 저도 동감합니다....
CharSyam - 2009
http://www.thisisgame....
ParkPD - 2009
준이는 이제 소집해제...
CharSyam - 2009
F모사의 프로그램이 C:\...
준 - 2009
크크 대명이형을 google...
준 - 2009
 Recent Trackbacks
플래닝 포커 카드
Pell's seer Blog
 Archive
2010/01
2009/12
2009/11
2009/10
2009/09
 Link Site
 Visitor Statistics
Total : 19747
Today : 98
Yesterday : 216
rss
Powered by Tistory & Designed by webnoon.net