iPhone이나 Android는 기본적으로 SQLite를 지원하기 때문에, 파일 DB를 이용해야할 경우 유용하게 사용할 수 있다. Windows Mobile에서 MDB를 사용할 수도 있을 것 같지만, 두가지를 다 써본 입장에서 기능면이나 사용면에서 SQLite가 월등히 좋기 때문에 Windows Mobile에서 SQLite를 사용하는 방법에 대해 알아보도록 하겠다.
현재 가장 최신 버전인 3.6.20 버전인데, 다운로드 페이지에서 소스 파일인 sqlite-source-3.6.20.zip 파일과, 실행 파일 및 DLL 파일인 sqlite-3.6.20.zip 파일, sqlitedll-3.6.20.zip 파일 등 3개의 파일을 다운받는다.
다운받은 파일들을 임의의 폴더에 압축을 풀어서 소스를 컴파일 할 준비를 해놓는다.
2. SQLite Library 파일 컴파일하기
2.1. 프로젝트 생성 및 소스 등록
Visual Studio 2008를 실행시킨 다음, 메뉴에서 {파일-새로 만들기-프로젝트}를 선택한다. "새 프로젝트" 창이 뜨면, 프로젝트 형식은 {Visual C++-스마트 장치}를 클릭하고, "Win32 스마트 장치 프로젝트"를 선택한 다음 프로젝트 이름을 입력하고 "확인" 버튼을 누른다. (프로젝트 명은 sqlite로 하면 된다)
아래 그림과 같이 응용 프로그램 종류는 "정적 라이브러리"를 선택하고, 추가 옵션의 "미리 컴파일된 헤더"는 끄고 "마침" 버튼을 누른다.
프로젝트가 생성되면, 소스 파일에는 *.c 파일을 등록하고 헤더 파일에는 *.h 파일을 등록한다. 그리고 sqldll-3.6.20.zip 파일을 풀어서 생기는 "sqlite3.def" 파일도 프로젝트에 등록을 해준다.
2.2. shell.c 파일 수정
shell.c 파일을 열고 다음 부분처럼 수정한다. (붉은색 부분은 주석처리, 파란색 부분은 새로 추가된 것임) 참고로, 그냥 Windows용 라이브러리로 컴파일 할 때에는 두번째 붉은 부분은 주석 처리하지 않아도 된다.
#if defined(_WIN32) || defined(WIN32) //# include <io.h> #define FILENAME_MAX 1024 #define isatty(h) _isatty(h) #define access(f,m) _access((f),(m)) #else /* Make sure isatty() has a prototype. */ extern int isatty(); #endif
#if defined(_WIN32_WCE) /* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty() * thus we always assume that we have a console. That can be * overridden with the -batch command line option. */ //#define isatty(x) 1 #endif
2.3. 컴파일 및 링크 문제 생기는 소스 파일 제거
소스 파일로 등록된 파일 중에서 컴파일 시 에러가 나는 "tclsqlite.c" 파일과 링크 시 에러가 나는 "fts3.c", "fts3_tokenizer.c" 파일을 프로젝트에서 제거한다.
이 모든 준비가 완료 되었다면, Release 모드로 프로젝트를 Build한다. 빌드가 무사히 끝나면 Release 폴더에 "sqlite.lib" 파일이 생성되어 있는 것을 확인할 수 있을 것이다.
3. SQLite Manager 설치하기
MDB 파일은 Access라는 데이터베이스 매니저가 있다면, SQLite는 SQLite Manager라는 유용한 어플리케이션이 있다. SQLite Manager는 FireFox의 부가 기능으로 제공되기 때문에, 어떤 플랫폼에서도 사용할 수 있다는 장점을 가지고 있다. 실제로 필자는 iPhone용 어플리케이션 개발을 위해 SQLite Manager를 사용하기 시작했는데, Windows Mobile용도 이것을 이용해서 개발하고 있다.
주말이 되면 꼭 하는 일 중에 하나가 주중에 지저분해진 차를 직접 세차하는 것이다. 관리가 어려운 검은색 차량을 처음 몰고다니다 보니 처음에는 꽤나 적응이 어려웠었다. 게다가 아무것도 몰랐을 때는 셀프세차의 브러쉬를 사용하거나 아무 손걸레나 사용하다보니 새차인데도 잔기스가 많아졌기에, 비싼 돈 들여 차체에 코딩과 광택을 한번 낸 이후로는 손세차를 이용하거나 직접 세차를 하는 편이다. 손세차의 경우 괜찮은 곳을 찾기가 쉽지 않고 찾았다하더라도 일부러 찾아가서 손세차를 맡기는 것도 꽤나 번거로운 일이라, 특별한 일이 없는 한 주말에 직접 세차를 하고 있다.
* 준비물 : 양동이 (여름에는 차가운 물을, 겨울에는 따듯한 물을 반쯤 채운다), 극세사 손걸레 3장, 고광택 왁스, 왁스용 극세사 손걸레
아래는 차를 닦기 전의 모습이다. 일주일 전에 세차를 해서 여기저기 더러워져 있으나 이 사진으로는 별로 안더러워 보인다. -_-;;; 비라도 맞으면 검은색 차량은 빗자국에 먼지 자국이 금방 눈에 띄어 지저분해지는 단점이 있다.
1단계. 물에 흠뻑 젖은 극세사 손걸레로 외부 닦아 내기
와이퍼를 들어올리고 외부 전체를 흠쩍 젖은 물걸레로 닦는다. 차량 외부에 더러운 것들을 물로 닦아내는 것이다. 이렇게 하면 아래 사진처럼 차량 전체에 물자국(!?)이 남지만 신경쓰지 않아도 된다. 차체를 다 닦아 내었으면 그 걸레를 이용하여 마무리로 와이퍼 날 부분과 휠도 한번 닦아 준다. 주의 할 점은 양동이 물은 끝까지 사용해야하기 때문에, 절대로 차체를 닦던 걸레를 담그면 안된다는 것이다. 닦던 도중에 물을 흠뻑 뭍히려면 걸레에 양동이 물을 손으로 뿌려주도록 한다.
2단계. 물기를 짜낸 극세사 손걸레로 외부 닦아 내기
양동이 물에 두번째 손걸레를 담갔다가 힘주어서 짜낸다. (적당히 짜서 약간 물기가 남도록 하는 것이 포인트) 그렇게 물기를 적당히 짜낸 손걸레로 물기가 남아 있는 차체를 꼼꼼히 닦아 내도록 한다. 이렇게 하면 1단계에서 지저분하게 남아있던 물자국까지 깨끗하게 닦아낼 수 있다. 차문과 트렁크도 열고 미처 보이지 않는 접촉면도 깨끗하게 닦아 준다. 닦다가 물기가 많아지면 손걸레를 적당히 짠 다음 다시 닦도록 한다. (역시 닦던 걸레를 직접 양동이 물에 담그지 말것) 이렇게까지 하고나면 아래 사진 처럼 어느 정도 깨끗해진다.
3단계. 물기를 꽉 짠 극세사 손걸레로 실내를 닦은 다음 외부를 한번 더 닦기
본인의 경우, 세번째 손걸레는 크기는 작아도 아주 부드러운 극세사 손걸레를 사용한다. 그래서 양동이 물에 한번 담갔다가 물기를 확실하게 짜낸 다음, 핸들부터 시작해서 실내 구석구석을 깨끗히 닦는다. 애들을 태우고 다니면 여기저기 여러가지 자국이 남는데 그것들을 닦아내고 먼지가 쌓여있거나 자주 사용하는 버튼의 손자국 등을 닦아준다. 실내를 모두 닦은 후에는 차체 외부를 한번더 세번째 손걸레로 꼼꼼히 닦아 준다. (물자국이나 미처 닦지 않은 곳이 있는지 확인하면서) 이렇게 세번에 걸쳐 차체를 닦으면 충분히 깨끗해져 있을 것이다.
4단계. 고광택 왁스로 차체를 닦아 주기
이제 고광택 왁스를 차체 부위를 적당한 단위로 나누에 3~4회 뿌려주고 왁스용 극세사 손걸레로 충분히 닦아 준다. (본네트, 휀다, 문, 트렁크 등의 단위로) 왁스로 차체를 모두 닦고 난 다음에는 양동이에 고스란히 남아 있는 맑은 물을 4개의 휠에 골고루 뿌려주고 양동이를 비운다. 빈 양동이에는 3개의 더러워진 손걸레를 집어넣으면 된다.
4단계로 차를 닦고 나면 약 1시간 정도의 시간이 소요된다. 대형차라서 차체 면적이 더 크기 때문이기는 하지만, 쌀쌀한 날씨에도 이렇게 차를 닦고 나면 꽤나 운동이 되어서 추위를 못느끼게 된다. (여름에는 땀을 뻘뻘 흘려가며 닦게 되는 단점은 있다) 왁스로 광을 내어 번쩍번쩍 빛이 나는 차를 보고 있으면 기분도 상쾌해져서 스트레스 해소용으로도 딱 좋은 소일거리이다.
한가지 주의할 점은... 반드시 사전에 충분히(!!) 일기 예보를 확인하고 세차에 돌입해야 한다는 것이다. 오늘도 열심히 닦고 광을 냈지만, 늘 그랬듯이 세차하는 날에는 비가 오고야 말았다. -_-;;;;
SMI SDK 2.0에서 제공하는 Accelerometer API를 사용하려고 테스트 코드를 작성해서 옴니아2에서 테스트 해보았다. 그랬더니 "SMI_ERROR_DEVICE_NOT_FOUND"라는 에러가 리턴이 되는 것이 아닌가. 혹시나 해서 Samsung Mobile Innovator 사이트에 가서 검색을 해보니, 현재 공개된 SDK의 Accelerometer API는 International Version OMNIA2 (GT-I8000)에서만 지원이 된다고 한다.
그래서 부랴부랴 예전에 옴니아 공모전 때 삼성전자에서 제공해준 옴니아(M490)용 Accelerometer 사용 방법을 참고해서 테스트를 해보았다. 에러는 나지 않았지만 첨부된 샘플을 돌려 봐도 넘어 오는 값은 X, Y, Z 모두 0이었다. 이래서는 도무지 사용할 수 없는 상황이다.
복잡한 얘기는 차치하고라도 옴니아2는 한마디로 준비가 안된 폰이라고 봅니다. 손안의 PC를 표방하는 폰이 모바일 뱅킹기능은 일부러 뺏다는 정신나간소리나 하고, 터치의 정확도 많이 떨어지는데 스크롤기능의 보완도 없고, 프로그램 엉키고 느리고... 이런걸 97만원에 내놓는 배짱은 소비자를 봉으로 여기는 우리나라 대기업의 악성 고질병중 하나가 아닐까?
iPhone이나 Android용 어플리케이션 개발 시에 투명값이 들어가 있는 PNG 파일을 사용하는 것은 무척 간단하다. 그러나 아쉽게도 Windows Mobile에서 투명값이 들어가 있는 PNG 파일의 처리는 절대로 간단하지 않다. Windows Mobile 6.5에서는 투명값이 포함된 PNG 파일을 화면에 출력하는 방법이 두 가지가 제공된다. 첫번째는 DirectDraw를 이용하여 AlphaBlt를 사용하거나, 두번째는 ImagingFactory를 이용하여 출력하는 것이다. 여기서는 ImagingFactory를 이용한 방법에 대해서 설명하도록 하겠다.
먼저 헤더 파일을 include 시킨다. 보통 imaging.h와 initguid.h 파일만 include 하면 되는 것 같은데, CLSID_ImagingFactory나 IID_IImagingFactory가 링크 시 에러가 날 경우에는 imgguids.h 파일을 추가해주면 된다.