윈도우즈 모바일 CAB에서 한글 바로가기 만들기

 Visual Studio 에서 기본적으로 쓸 수 있는 모바일 CAB 프로젝트는 그냥 그 설정으로만 사용하면

 

바로가기를 한글로 만들 수 가 없다.

 

 이유는 내부적으로 utf-8로 변환하는 과정이 들어가는 데, 한글 값을 제대로 인식할 수 없기 때문이다.

 

 과연 그렇다면, 윈도우즈 모바일 CAB 프로젝트에서는 한글 바로가기를 만들 수 없는 것일까?

 

 꼭 그렇지는 않다.

 

 다음과 같은 xml 을 만들어서 utf-8로 저장한다. (이름은 아무거나 여기서는 link.xml 로 지정)

 

 <characteristic type=”FileOperation”>

  <characteristic type=”%CE11%” translation=”install”>

    <characteristic type=”강대명천재.lnk” translation=”install”>

      <characteristic type=”Shortcut”>

        <parm name=”Source” value=”%InstallDir%charsyam.exe” translation=”install” />

      </characteristic>

     </characteristic>

     </characteristic>

 

 그리고 cabwiz에서 만들어진 inf 와 함께

 cabwiz charsyam.inf /postxml link.xml 와 같이 사용하면 한글 바로 가기를 사용할 수 있다.

 

여기서 주의할 것 한가지, 혹시나 xml을 알기 때문에 위에 xml 헤더를 넣어야 하지 않겠느냐 라고

 

물어볼 수 있는데, 위의 내용이 그대로 들어가기 때문에 xml 헤더 라인을 넣어주면 cab 이 설치가

 

되지 않는다. 주의하자.(utf-8 이므로, 한국어뿐 아니라, 다국어 지원이 가능하다.)

 

MSDN 의 오류 – NM_INLINE_IMAGE

 MSDN 에서 NM_INLINE_IMAGE 를 살펴보면 다음과 같다.

 

NM_INLINE_IMAGE
NM_HTMLVIEW * pnmHTMLView = (NM_HTMLVIEW *)lParam;
szSRCText = pnmHTMLView->szTarget;
dwCookieValue = pnmHTMLView->szData;

그러나 이것은 오류다!!!

 

 실제로 DTM_SETIMAGE 를 위해서 dwCookie 값을 보내야 하는데!!!

MSDN 이 잘못되어있는것이다. T.T

 

 실제로 여기서 사용하는 구조체를 살펴보면

 

typedef struct tagNM_HTMLVIEWW {
  NMHDR hdr;
  LPCWSTR szTarget;
  LPCWSTR szData;
    union {
      DWORD dwCookie;
      DWORD dwFlags;
    };
  LPCWSTR szExInfo;
} NM_HTMLVIEWW;

 

 위와 같이 안에 dwCookie 라는 변수가 따로 있다!!!

그리고 dwCookie 값을 사용해야만 DTM_SETIMAGE 가 제대로 동작한다.!!! 

stdext::hash_map 과 CAtlMap 속도 비교

  같은 스터디 모임의 태권브이님이 흥미로운 자료를 올려주셨길래, 윈도우 모바일 에뮬레이터에서 속도 측정을 해보았습니다.

 

 원 글은 다음 주소에서 볼 수 있습니다.

https://sites.google.com/site/kokowiki/Home/hash_map-vs-catlmap

 

 그리고 윈도우 모바일에서 한번 돌려보았습니다.

 

결과는 매우 충격적입니다.

 

Insert Test
hash_map – Insert operation takes 696031364 count.
CAtlMap –  Insert operation takes    43837426 count.

Lookup Test
hash_map – lookup operation takes 160196572 count.
CAtlMap –  lookup operation takes      8476730 count.

Iteration Test
hash_map – Iteration operation takes 17691170 count.
CAtlMap –  Iteration operation takes    8088414 count.

보기 쉽게 숫자를 순서를 맞췄습니다.

 

대략 inset 18배 , Lookup 20배의 차이가 나고 있습니다.

일반 PC에서의 속도차가 1.8배 3.3배 인것과는 엄청난 비교를 보입니다.

 

모바일에는 그냥 CAtlMap 을 쓰는게 나을듯 합니다. 

64K Stack Memory

  열혈 버닝중이라, 점점 포스팅이 늦어지네요.

 

요 몇일(실은 하루 -_-) 프로그램이 아주 깔끔하게 죽는 버그가 있었습니다.

 

아주 깔끔하게 아무런 흔적도 없이 사라져버리는군요.

 

결국 이유는 위의 64K Stack Memory 때문입니다.

 

윈도우와 윈도우 모바일의 차이중에 하나가, 윈도우 스택은 1M 입니다.

 

그런데 윈도우 모바일은 모바일이다 보니, 64K 입니다. 물론 per thread 기반입니다.

 

윈도우 개발하던 사람이 윈모로 오다보면 젤 실수하기 쉬운 부분이 그렇습니다.

 

살짝 리커즌 도는 함수안에 TCHAR path[4096] 이런거 있습니다. 곧 죽습니다. -_- 

 

Windows Atomic 계열 함수를 대체하는 MACOSX 계열 함수들

 윈도우 계열과 MACOS 계열에서 공용으로 사용하는 라이브러리를 만들다던지, 아니면 비슷한 기능을

필요할 때가 생긴다.

 

 대표적으로 위와 같은 함수들이 있는데,

  1. InterlockedCompareExchange
  2. InterlockedDecrement
  3. InterlockedExchange
  4. InterlockedIncrement

 

 원래는 해당 OS에 맞게 인라인 어셈으로 작성해야 하나 싶었는데, 이미 다 있다. -_-

두둥 다음은 apple.com 에 있는 atomic 계열 함수들 -_-, 역시 검색이 짱이다.

 

http://developer.apple.com/documenta…/atomic.3.html

Head First Software Development

 Head First Software Development – 훌륭한 소프트웨어 개발을 위한 핵심 가이드

 

 아무생각 없이 이책을 처음 봤을 때(읽었다는 의미가 아니고 처음 접했을 때, Just See -_-), 헤드 퍼스트 시리즈가 대대적으로 나쁜 책이 없다는 걸 알고는 있었지만, 그렇게까지 좋은 책은 아닐꺼라고 생각을 했다.

 왜냐하면, 소프트웨어 개발 프로세서는 좀 복잡하고 깊은 내용이 필요해서, 이렇게 적은 페이지의 책으로 얼마나 충실히 표현했을 까 하는 의문이 들었기 때문이었다. 먼저 평점부터 매기자면 초보자에게는 꼭 읽어볼 것을 권하고 대략 80점 이상, 중급 이상에게도, Agile 이라는 프로세서를 맛본다는 점에서는 70점 이상을 주고 싶다.

 

 책을 보면서 느꼈던 것중에 하나가, 처음에 목차의 순서가 조금 맘에 안들었다.

 왜냐하면 이 책의 기본적인 흐름은 크게 다음과 같다.

 

  • 애자일 프로세스

    • 이터레이션
    • 사용자스토리
    • 스탠드업 미팅
  • 충분히 훌륭한 설계(완벽한이 아님)
  • 버전관리
  • 일일빌드
  • 지속적인 통합
  • TDD
  • 프로세스 정착하기

 

 훌륭하게 보이지만, 사실 개인적으로는 애자일 프로세스 윗단에

 버전관리, 일일빌드, 지속적인 통합 등은 기본적으로 들어가야 하지 않을까 하고 생각했다.

 

 그런데 책을 읽다 보니, 웬지 왜 저런식으로 목차를 잡아놓았는지 조금 이해가 갔다.(만구 내 생각)

 이유는, 모든 프로세스 중에서 가장 중요한 것은, 고객을 만족시키는 것이기 때문이다. 위에서 애자일

프로세스 라고 적었지만, 저것의 핵심은, “고객이 진정으로 원하는 프로젝트 성공시키기” 이기 때문이다.

 

 그래서, 최초에, 더 핵심에 가까운 부분을 배치시키고, 중요한 나머지는 뒷부분에 배치시킨 것이다.

 

개인적으로 이 책이 각 부분에 대한 깊은 지식을 전해주지는 못한다고 생각한다. 하지만, 입문서로는 꽤 훌륭하다고 생각한다. 왜냐하며, 위의 애자일 프로세스나, TDD 등은, 단순히 이론적으로 이해해서는 안되고, 스스로 익숙해지기 전까지는 제대로 되기 어렵기 때문이다. 나 역시 TDD를 조금씩 해볼려고 깔짝거리지만, 주화입마로 퍽퍽 떨어져 나가고 있다.

 

 진정으로 이해했다는 말은 스스로 행할 수 있다는 것이다. 단지 “지식” 만이 전부가 아니므로, 도전, 도전 도전이 필요하다.  

윈도우즈 모바일 관련 주의 사항 몇가지

  1. 윈도우즈 모바일에는 A계열 함수가 없을 수 있다. W계열만 존재한다.

    1. 예를 들어 CreateProcess 같은 경우, CreateFile의 경우 A 계열이 선언은 되어있으나 Body가 없다
  2. 윈도우즈 모바일에는 Time 관련 함수가 없을 수 있다.

    1. gmtime
    2. localtime 등등등, 시간관련 함수가 없다.
  3. 윈속 라이브러리는 ws2.lib 이다.

    1. 일반 어플에서는 윈속라이브러리는 ws2_32.lib 이다. 하지만 윈도우즈 모바일에서는 -_- ws2.lib 다
  4. 파일명등은 “”로 시작한다. C,D,E 같은 드라이브 개념이 없다.