<html>
<head>
<style>
#layer1 { position:absolute; left:100; top:100; width:300; height:300 z-index:1;}
#layer2 { position:absolute; left:120; top:120; width:260; height:260 z-index:2;}
#layer3 { position:absolute; left:140; top:140; width:220; height:220z-index:3;}
</style>
</head>
<div id="layer1">
<a href="a.html"><img src="1.jpg" width=300 height=300 border=0></a>
</div>
<div id="layer2">
<a href="b.html"><img src="1.jpg" width=260 height=260 border=0></a>
</div>
<div id="layer3">
<a href="c.html"><img src="1.jpg" width=220 height=220 border=0></a>
</div>
</body>
</html>
EVC++4.0 을 설치하게되면 기본적으로 아래 PATH에 DEPENDS.EXE 파일이 존재한다.

C:\Program Files\Microsoft eMbedded C++ 4.0\Common\Tools

DEPENDS.EXE 파일을 실행하여 확인하려는 어플의 실행파일(.exe)을 열게되면,

그 어플에 dependent 걸려있는 Library들을 확인할수 있다.

어플이 실행할때 필요한 DLL과 Library를 같은 PATH에 위치한후 실행 시키면,

Library에 Symbol table과 DLL과 매칭되어 실제로 DLL에 존재하는지 확인할수 있다.

(존재하면 초록색, 링크가 깨져있다면 빨간색 으로 표시됨).
SMS sample Programming 2009.04.20 17:35
int _tmain(int argc, _TCHAR* argv[])   
{   
    HANDLE hPort =  CreateFile(TEXT("\\\\.\\COM5"),   
                               GENERIC_WRITE | GENERIC_READ,     
                               FILE_SHARE_READ,    
                               NULL,   
                               CREATE_ALWAYS,   
                               FILE_ATTRIBUTE_NORMAL,   
                               NULL);   

    // 휴대폰 USB 드라이버 설치 후 제어판에 보시면 해당 휴대폰의 포트가 나옵니다.
    // 해당 포트를 파일 이름처럼 적으면 됨.  

    if ( NULL == hPort )
    {   
        printf("%d", GetLastError());   
    }   
  
    /*  
    각 이동통신사별 접속 스트링  
    AT*SKT*MOREQ=0,%s,%s,4098,%s%c   
    AT*LGT*MOREQ=0,%s,%s,4098,%s%c   
    AT*KTF*MOREQ=0,%s,%s,4098,%s%c   
    */  
  
    char szBuff[255]={0}, szBuff2[10]={0};   
    sprintf(szBuff, "AT*SKT*MOREQ=0,%s,%s,4098,%s%c", "보내고 싶은 번호","보내는 번호", "보낼 메시지", '\r');

    // 보내는 사람과 받는 사람 이름 잘 적어서
    // 문자열 만들어서 포트로 고고 고고 ~
      
    BOOL bReturn = FALSE;   
    DWORD dwWritten = 0, dwRead = 0;   
    bReturn = WriteFile(hPort, szBuff, strlen(szBuff), &dwWritten, NULL);   
    if ( FALSE == bReturn )   
    {   
       printf("%d", GetLastError());   
    }   

    // 포트에 문자열을 쏴주는 순간, 휴대폰은 문자발송 화면으로 바뀜니다.

    bReturn = ReadFile(hPort, szBuff2, 10, &dwRead, NULL);   
    if ( FALSE == bReturn )
    {   
        printf("%d", GetLastError());   
    }   

    // 제대로 발송 되었다면 OK 가 넘어오죠.
  
    CloseHandle(hPort);   
    return 0;   
}   


SMS
trac-post-commit-hoot script를 사용하면 

Trac+SVN 연동시 SVN에서 commit 할때 Trac의 Ticket에 대한 상태 변경할수 있다.

* Subversion 저장소 : /home/svn/project
* Trac 경로 : /home/trac/project

/home/svn/project/hooks 경로에 가보면 tmpl파일들이 몇개 존재하는데,

여기서 post-commit.tmpl 파일을 post-commit 로 변경한후 실행권한을 추가한후

아래와 같이 편집한다.

#!/bin/sh
REPOS="$1"
REV="$2"
LOG=`svnlook log -r $REV $REPOS`
AUTHOR=`svnlook author -r $REV $REPOS`
TRAC_ENV='/home/trac/project'

/usr/bin/python /home/trac/project/hooks/trac-post-commit-hook \
  -p "$TRAC_ENV"  \
  -r "$REV"       \
  -u "$AUTHOR"    \
  -m "$LOG"

위에 보면 trac-post-commit-hook 이라는 파일을 참조하게 되는데, 이파일은

아래 URL서 다운받을수 있다.


다운받은파일을 /home/trac/project/hooks 의 경로에 복사하게되면 설정 끝!.

이후 SVN에 commit시 사용할 command는 trac-post-commit-hook 파일에 자세히 

comment 되어 있으므로 참조바람.
MinGW + QT Programming/Qt 2008.12.22 16:44

1 MinGW 와 Qt 라이브러리 다운

2. configure -platform win32-g++

3. 환경변수 추가
QTDIR= Qt디렉토리
PATH=  Qt디렉토리\bin, MinGW디렉토리\bin
QMAKESPEC=win32-g++

3. mingw32-make.exe 컴파일

std::string<->std::wstring convert

 std::wstring FromCodePage( unsigned int codpage , const std::string& utf8string )
 {
  
  int widesize = ::MultiByteToWideChar( codpage, 0, utf8string.c_str(), -1, NULL, 0);
  if (widesize == ERROR_NO_UNICODE_TRANSLATION)
  {
   printf("Invalid UTF-8 sequence.");
  }
  if (widesize == 0)
  {
   printf("Error in conversion.");
  }

  std::vector<wchar_t> resultstring(widesize+1);

  int convresult = ::MultiByteToWideChar(codpage, 0, utf8string.c_str(), -1, &resultstring[0], widesize+1);

  if (convresult != widesize)
  {
   printf("Utf8 - Utf16 Conversion error!");
  }

  return std::wstring(&resultstring[0]);
 }

 std::wstring FromUtf8(const std::string& utf8string)
 {
  return FromCodePage( CP_UTF8, utf8string );
 }

 std::wstring FromAsc( const std::string& ascstring  )
 {
  return  FromCodePage( CP_ACP, ascstring ) ;
 }
 

 std::string ToCodePage(unsigned int codepage, const std::wstring& widestring)
 {
  int out_size = ::WideCharToMultiByte( codepage, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL );
  if (out_size == 0)
  {
   throw GCN_EXCEPTION("Error in conversion.");
  }
  
  std::vector<char> resultstring(out_size);
  
  int convresult = ::WideCharToMultiByte(codepage, 0, widestring.c_str(), -1, &resultstring[0], out_size, NULL, NULL);
  
  if (convresult != out_size)
  {
   throw GCN_EXCEPTION("Utf16 - Codepage Conversion error!");
  }
  
  return std::string(&resultstring[0]);
 }
 
 
 std::string ToUtf8(const std::wstring& widestring)
 {  
  return ToCodePage( CP_UTF8, widestring );
 }


 std::string ToAsc(const std::wstring& widestring)
 {  
  return ToCodePage( CP_ACP, widestring );
 }


BOM (봄; Byte Order Mark)은 '바이트 순서 표시'입니다.

유니코드가, little-endian 인지 big-endian 인지 아니면 UTF-8 인지 쉽게 알 수 있도록, 유니코드 파일이 시작되는 첫부분에 보이지 않게, 2~3바이트의 문자열을 추가하는데 이것을 BOM이라고 합니다. 텍스트 에디터 화면에서는 보이지 않고, 헥사 에디터(Hex Editor)*로 열었을 때만 보입니다.



little-endian 의 BOM:
FF FE

big-endian 의 BOM:
FE FF

UTF-8 의 BOM:
EF BB BF



UTF-8에는 BOM이 없는 것이 보통인데, 오래된 프로그램은 BOM이 있는 UTF-8 파일에 오작동할 수 있습니다.

그렇지만 한국어 편집에서는 BOM이 있는 UTF-8이 더 좋습니다. 만약 'BOM이 없는 UTF-8 파일'에 영문과 숫자만 있고 한글이 없다면, 편집기가 그 파일을 유니코드가 아닌 일반 아스키 파일로 오인하기 때문입니다.

그런데 인터넷에 올릴 HTML/CSS/XML 파일을 UTF-8로 작성할 때에는 BOM이 있으면 문제가 생길 수 있습니다.


* 울트라에디트의 헥사 모드(Ctrl+H)로 UTF-8 파일을 보면, 16비트 유니코드처럼 보이고 BOM이 있든 없든 항상 FF FE 라는 엉뚱한 BOM이 나타납니다. 이것은 울트라에디터가 유니코드를 편집할 때, 내부적으로 '16비트 little-endian 유니코드 (UTF-16LE)'로 변환하여 편집하기 때문입니다. 진짜 헥사 에디터로 보아야만 UTF-8의 BOM인 EF BB BF 가 제대로 보이게 됩니다. 물론 BOM이 없는 UTF-8이라면 BOM이 없는 것으로 나옵니다.

 - 설치 프로그램
1. Visual studio 2005 + SP1
   .NET Compact Framework 2.0
   (기본적으로 설치되어 있어야함)

    VS2005 버전이 여러개 있는데 standard이상 버전이 설치되어 있어야하고 SP1이 있어야된다.
    이때 VS2005버전과 SP1의 버전이 동일해야된다. VS2005는 En버전인데 SP1은 kor 버전이면 안된다.
    설치가 완료되면 이제 SDK를 설치한다.

2.  Windows Mobile 6 Standard SDK
    Windows Mobile 6 Professional SDK
    [Download page]
     http://www.microsoft.com/downloads/details.aspx?FamilyId=06111A3A-A651-4745-88EF-3D48091A390B&displaylang=en

    여러 플렛폼에 따라 사용되는 SDK가 다른데, 내가 소유하고 있는 미라지폰은 아래 spec과 동일하므로
    Professional SDK로 설치함. 만약 미라지폰이아닌 플렛폼이 다르다면, 위의 다운로드 페이지에가서
    확인후 해당하는 SDK를 받아서 설치하면된다.
    (Windows Mobile 6 Proffesional Square QVGA(320x320 pixels - 128 dpi)

    기본적으로 위의 설치만 하면 미라지폰에서 MFC 및 win32 API를 통해서 개발이 가능하다.

  Qt Porting
   
    작년쯔음인가 Qt 개발사인 Trolltech에서 Qt-Wince 버전을 release했다.그때 소식을 들었을땐
    linux에서만 사용하여서 큰 관심없이 생각했었는데, 막상 내가 SmartPhone을 사용하니,
    제일먼저 떠오르는게 Qt-wince 포팅이였다.그래서 다른 어플 개발보다 Qt포팅을 하기로 했다.
    Qt에 관련된 내용은 아래 링크페이지에서 확인바람.
     Trolltech : http://trolltech.com
     국내 Qt programming SITE : http://korone.net

1. Qt-wince 버전 다운.
   Qt 포팅에 앞서 필요한 파일은 아래 링크사이트에서 다운로드 받는다.
   [Download page]
    http://trolltech.com/download?target=ftp://ftp.trolltech.com/qt/source/qt-embedded-wince-opensource-src-4.4.0.zip
   
    Commercial버전와 Opensource버전 두가지가 있는데 Commercial버전은 30일 동안 사용 가능하다.
    그리고 Visual studio 2005 에서 Qt-desiner과 같이 GUI 컨트롤 구성을 편하게 할수 있다.
    첨에는 Commercial버전으로 설치하려 했지만 30일 후에 재설치도 귀찮고, 내정보를 막 적어 보내야해서
    여기에서는 Opensource를 기준으로 설치함.
   
 2. 다운받은 파일을 적당한 위치에 압축을 푼다.
    (이때 주의해야할점은 Qt 디렉토리의 경로에 공백이 들어가서는안된다. 이유는 나중에 컴파일할때
     공백이들어가면 Qt디렉토리를 제대로 못찾아서 컴파일시 오류가 발생함. ex)c:\Program Files\Qt-4.4.0  X)
     C:\Qt-4.4.0 에 압축을 풀어 설치하는것을 기준으로 설명함.

 3. 시작->제어판->시스템에서 고급탭을 선택하면 아래 환경변수 버튼 클릭하여 PATH에
     c:\Qt-4.4.0\bin 를 추가해준다.

 4. 시작->프로그램->Microsoft Visual Studio 2005->Visual Stodio Tools->
     Visual Studio 2005 Command Prompt 를 선택하면 cmd 창이 뜨는데,
     vcvars32.bat 를 실행한다.

사용자 삽입 이미지

 5. Qt Configure
   c:
   cd Qt-4.4.0
   configure -platform win32-msvc2005 -xplatform wincewm60professional-msvc2005
   실행하게되면 라이센스 선택하는게 나오는데 Y를 누르고 Enter를 눌르면 넘어가는데, 시간이 좀 소요됨
   (약 5~10 분정도)
   -platform  : visual studio 2005 win 플랫폼(win32-msvc2005)
   -xplatform : 타겟보드 플랫폼(wincewm60professional-msvc2005)
   여기에서 내기기는 미라지폰Proffessional이여서 위와 같이 옵션을 주었는데, 만약 6.0이 아닌
   5.0 PPC버젼 이라면(-xplatform wincewm50pocket-msvc2005)
   6.0 standard이라면(-xplatform wincewm60standard-msvc2005)
   자신의 플렛폼에 맞게끔 옵션을 설정한다.
   이밖에도 옵션들이 많은데 옵션설정에 대해서는 configure --help를 통해서 확인할수 있다.
사용자 삽입 이미지


 6. INCLUDE, PATH, LIB 설정
   위의 과정이 끝나면 아래와같이 INCLUDE, PATH, LIB를 설정해준다.

  set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\ce\include;C:\Program Files\Windows Mobile 6 SDK\PocketPC\Include\Armv4i
 
  set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\armv4i;C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i  
 
  set PATH=C:\Program Files\Microsoft Visual Studio 8\VC\ce\bin\x86_arm;%PATH%

  setcepaths wincewm60professional-msvc2005
 
  Visual studio 2005 및 Windows Mobile 6 Professional SDK 설치 경로에 따라 경로가 달라질수 있으므로
  설치경로를 확인하여 맞게끔 설정해준다.
사용자 삽입 이미지

 
7. Qt 컴파일 (nmake)
  nmake
  지금부터는 시간을 굉장히 많이 소요된다. PC 사양에 따라 다르겠지만 Core2Duo 울프데일 8600에 2g 램에서
  컴파일했을때 1시간 좀 안림.

  컴파일이 완료된후 Qt디렉토리의 lib 디렉토리에 가보면 컴파일된 dll 파일들을 확인한다.
  라이브러리가 많을텐데 이것에 대한 설명은 패쑤~

8. 미라지폰에서 확인!!!
  Qt 컴파일하게되면 Qt디렉토리의 examples를 보면 여러가지 예제프로그램들이 있다.
  이프로그램들은 이미 다 컴파일이 완료된것입니다. Visual Studio 2005를 실행시킨후 Project Open하여
  예제프로그램들을 실행시켜 제대로 동작되는지 확인할수 있음.

  하지만 내가 원하는건 에뮬이 아닌 실제 미라지폰에 올리는것이므로 미라지폰에서 동작시키는 방법에 대해서
  설명하겠다.
 
  ㅁ ㅓ 설명이라고 할것도없다.
  플랫폼마다 다를수 있지만 미라지폰은 armv4i(아래 PATH) 폴더안의 dll들을 사용하게 되므로 이폴더안에
  있는 dll 들과  Qt디렉토리의 lib폴더에 있는 dll들 그리고 실행파일만 있으면 실행 가능하다.
   C:\Program Files\Microsoft Visual Studio 8\VC\ce\Dll\armv4i

  Wince는 기본적으로 C:\window 에 PATH가 걸려있어 이폴더에 위의 dll 파일들을 복사해넣으면 된다.
  그렇지 않으면 실행파일과 같은 디렉토리에 dll 파일들을 복사해도 실행 가능하다.

  아래 이미지는 미라지폰에 올린 Qt 예제 프로그램들이다.

사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지

  PXA310(624 MHz) 성능이 좋아서 그런지..실제로 실행시켜본결과 속도는 느리지 않고 빨랐다.
  • Ie 2008.07.31 06:41

    블랙잭카페에서 보고 왔습니다..
    혹시... qt-wince용에 browser모듈도 포함된걸로 알고있는데.. 그것도 되던가요???? webkit엔진을 쓰고있어서...pie나 opera보다 좋을것 같은데..

  • punbear 2008.07.31 10:26 신고

    확인해보니 browser demo 소스가 있네용..컴파일해서 올려봐야겠네용..

  • ingee 2008.11.12 14:09 신고

    좋은 글 잘 보고 갑니다. 제가 하는 일에 큰 도움되었습니다.

  • 미래소년 2009.02.12 14:35

    Qt-WinCE용에 관련된 사항을 검색하다. 이곳까지 왔습니다.
    위에 자세히 기술 되어 있는 과정에서 5번과정에서 에레가 발생됩니다.
    ..\..\..\bin\moc.exe 파일을 열 수 없다는 에러가 발생합니다.
    Qt버전은 4.4.0과 4.4.3으로 했는데, 모두 동일하게 에러가 발생합니다.
    혹시 이런 에러에 대해서 알고 계신것이 있는지요?

    • punbear 2009.03.31 00:07 신고

      확인해봐야지 했는데, 다른 일들때문에 계속 미루게 되었네요
      우선 답변 늦은거 죄송합니다.
      얼마전 4.5.0 버전으로 다시 컴파일 했었는데 위의 문제는 없었습니다.
      먼저 c:\Qt-4.4.0\bin 디렉토리내에 moc.exe파일이 있는지 확인해보세요~
      만약 존재한다면..PATH설정에 c:\Qt-4.4.0\bin 가 누락된것 같습니다.
      qt 컴파일하게되면 먼저 MOC(Meta Object Compiler) 가 먼저 컴파일 되는데,
      이때 c:\Qt-4.4.0\bin 디렉토안에 moc.exe 파일이 생성됩니다.
      그후 qt source를 컴파일할때 moc.exe 를 필요로하는데, PATH설정이 누락되어
      moc.exe 를 찾지못해서 발생되는 문제인듯 싶네요~

Source Insight Programming 2008.07.02 13:49

사용자 삽입 이미지

 리눅스 콘솔환경에서 vi 에디터로만 코딩을 하다보니, 너무 익숙해져서 그런지

다른 에디터가 더 불편하고 답답했었는데, 여러 사람의 권유??로 Source Insight를 한번 접하게 되었다.

첨에는 익숙치 않아서 답답했었는데, 조금 사용을 하다보니 코딩할때 편리한 기능들과 한눈에 들어오는

화려한 색상의 표시(함수명, 메크로, ...), 글자 몇자를 입력하면 그에 해당하는 메크로도 표시등..

그 밖에 유용한 기능들이 많다는걸 알게되었다. 그리고 결정적으로 2 Mb도 안되는 사이즈!!!

Download link :