프로그래밍 중 주로 사용하는 에디터는 UltraEdit였다.
많은 개발자들이 사용하고 있는 유명한 에디터이긴 한데, 회사 노트북에 설치하긴에 상용이라는 점이
그동안 껄끄러웠던 바 공개 소프트웨어 중 쓸만 놈이 없나 찾던 중 Notepad++ 란 놈을 알게 됐다.
(회사에서 UltraEdit를 구매해서 사용중이긴 한데, 업데이트된 버전을 사용하긴 위해선 라이센스를
갱신해야 했다.)

0. 제품 홈페이지
http://notepad-plus.sourceforge.net/

1. 설치
http://sourceforge.net/projects/notepad-plus/ 에서 설치파일을 다운로드 받는다.
이 글을 작성하는 시점의 최신 버전은 5.6.7 이었다.

2. 플러그인 설치
플러그인 홈페이지: http://sourceforge.net/projects/npp-plugins/
플러그인 리스트: http://sourceforge.net/projects/npp-plugins/files/

2-1. Function List
소스 파일의 함수 목록을 볼 수 있는 플러그인 설치한다.
다운로드 받은 FunctionList_2_1_UNI_dll.zip 파일의 install.txt를 참고하면 된다.
(제품 홈페이지의 플러그인 사이트로 들어가서 2.0 버전을 설치하거나 PluginManager로 설치하면 2.0 버전이
설치되는데 2.0버전이 설치되면 Notepad++가 실행되지 않습니다. 2. 플러그인 설치에 적은 플러그인 홈페이지에서 2.1 버전을 설치하여야 합니다.)

2-2 PluginManager
Notepad++ 5.6.7 설치파일로 설치하면 0.9.3.0 버전이 설치되어 있습니다.
0.9.3.1 버전으로 업그레이드 합니다.
(업그레이드해도 별반 달라지는 건 없습니다. --; 업그레이드 안 해도 될 것 같습니다.)

윈도우 어플리케이션이 실행 중 크래쉬가 발생하는 경우 덤프를 남기로 프로그래밍 할 수 있다.
이렇게 해서 남겨진 덤프파일을 분석하려면 WinDbg를 이용해서 분석할 수 있다.

WinDbg 명령어
1. !analyze -v
읽어들인 덤프파일을 분석한다. pdb 파일들을 로딩하고 스택정보 등을 출력해준다.

2. lm
현재 로딩된 심볼파일(pdb)의 현황을 보여준다.

3. .reload -f
심볼파일을 다시 읽어들인다.

윈도우 프로그래밍 중 ntdll.dll 등의 심볼 파일이 있는 경우가 있는데 이런 때에 다음을 사용하면 된다.


1. Microsoft® Symbol Server
http://msdl.microsoft.com/download/symbols

2. 심볼파일 설치
심볼파일 설치파일을 다운로드 받아 설치하여 사용하는 방법도 있다.
http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx

IE8의 경우 기본적으로 탭 당 프로세스가 1개씩 띄도록 되어있는 구조라 ActiveX 등을 IE로 디버그하기 위해 이용할 수가 없습니다. 즉, ActiveX가 로드된  IE 프로세스가 Visual Studio와 연결된 IE 프로세스와 다르기 때문입니다.

디버그하기 위한 방법이 있는데, IE 프로세스를 1개만 띄도록 하는 것입니다.
아래와 같이 레지스트리에 IE관련 항목을 추가하면 됩니다.

1. 레지스트리 에디터를 연다.
2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main 키를 연다.
3. TabProcGrowth 라는 DWORD 값을 추가한다.
4. TabProcGrowth의 값을 0으로 설정한다.

위와 같이 설정하면, 이후부터는 IE 프로세스가 1개만 실행됩니다. Visual Studio에서 디버그도 가능하고요.
점심 먹구 웹서핑을 하던 중 MS Windows 호환 공개 OS가 있는 걸 알게 되었습니다.
이름은 ReactOS. 오픈 소스 형태로 개발되고 있으며 공식 사이트는 아래와 같습니다.

아래는 공식 홈페이지에 있는 ReactOS 소개글입니다. 아직은 알파 버전 단계정도이라고 하니, 발전해 가는 모습을 지켜보는 것도 재미있을 듯 합니다.
ReactOS® 는 Microsoft Windows® XP와 호환성이 있는 자유 공개 소스 운영체제입니다. ReactOS는 Windows NT, XP 운영체제와의 완벽한 어플리케이션, 장치 드라이버 호환성을 제공하는 것을 목표로 하고 있습니다. 이것은 Windows와 비슷한 아키텍쳐를 사용하고, 완전하며 동등한 외부 인터페이스를 제공함으로써 이루어집니다.

ReactOS는 현존하는 Windows형 운영체제 중 가장 완전한 구동 모델입니다. 따라서, 프로그래머들은 ReactOS 소스 코드를 공부하거나 심지어 ReactOS 개발에 참여할 수도 있으며, 이를 통해 많은 것을 배울 수 있습니다.

ReactOS는 계속해서 새로운 버전의 기능들을 추가하고 있으며, 때로는 정상급의 운영체제 기술을 새로 쓰기도 합니다.

즉, ReactOS는 여러분의 어플리케이션을 실행하고 하드웨어를 사용하는 것을 목표로 하는, 여러분을 위한 무료 운영체제입니다!

ReactOS 0.3.9 은 아직 alpha 단계에 있다는 것을 기억해 주세요. 아직 기능이 완전하지 않고, 일상적으로 사용하기에는 알맞지 않습니다.

일단 구경부터 하면, 아래는 설치화면과 초기화면, 오픈 오피스 실행화면 캡쳐화면입니다.
대략적인 화면은 MS Windows 2000 UI와 비슷합니다.


여러 이유로 실행파일이 동시에 여러 개 실행되지 않도록 하는 방법은 윈도우즈에서는 MUTEX 등을 이용해서 간단히 구현해서 사용하고 있었습니다.

이번 프로젝트에서 리눅스 플랫폼도 지원해야 해서, 리눅스 쪽에서 방법을 찾고 있었는데, 네임드 세마포어로 해결했습니다.

sem_open을 이용해서 네임드 세마포어를 만들고 이걸 검사해서 이미 존재하면 종료하도록 구현했습니다.

BOOL IsRunning()
{
    BOOL ret = FALSE;

    gRunning = sem_open(MY_SEMAPHORE, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, 1);

    if(gRunning == SEM_FAILED)
    {
        if(errno == EEXIST)
        {
            ret = TRUE;
        }
    }

    return ret;
}

생성된 네임드 세마포어는 프로그램 종료시 삭제하면 됩니다.
if (gRunning != NULL)
{
    sem_close(gRunning);
    sem_unlink(MY_SEMAPHORE);
}


쓰레드 등을 생성하기 위해 CPU 갯수를 구해할 일이 있는데, 리눅스 쪽 방법을 찾느라고, 약간 시간이 걸렸다.

1. Windows
SYSTEM_INFO si;
GetSystemInfo(&si);
si.dwNumberOfProcessors;

2. Linux
#include <unistd.h>
sysconf(_SC_NPROCESSORS_CONF);
-1 이면 오류
지난 번 올린 글에는 각 계정마다 .font.conf 파일을 만들어야 하는 불편이 있었다.
이번에는 시스템 폰트 설정을 수정하여, 각 계정마다 설정파일을 만들지 않아도 되도록 한다.
사용하고자 하는 폰트는 /usr/share/fonts/truetype/ 디렉터리에 복사한다.
저는 /usr/share/fonts/truetype/nanum/ 디렉터리에 복사했다. 또한 네이버에서 받은 압축파일을 풀면
폰트 파일명이  한글로 되어있는데, UTF-8 환경으로 사용하고 있는 시스템에서는 오류가 발생하여
영어로 파일명을 변경했다.

/etc/fonts/conf.d/ 디렉터리에 시스템 폰트 설정파일을 만들어 주면 된다.
설정파일을 내용은 10 ~ 22 픽셀에서 꺼져있는 antialias, autohint 옵션을 활성화하는 것이다.
필자는 59-ttf-nanum.conf 라는 파일명으로 생생했다.

<fontconfig>

<!-- Turn off antialias and autohint for Korean fonts depending on pixelsize -->
<match target="font">
        <test name="lang" compare="contains">
                <string>ko</string>
        </test>
        <test name="pixelsize" compare="more">
                <int>10</int>
        </test>
        <test name="pixelsize" compare="less">
                <int>22</int>
        </test>
        <edit name="antialias" mode="assign">
                <bool>true</bool>
        </edit>
        <edit name="autohint" mode="assign">
                <bool>true</bool>
        </edit>
        <edit name="hintstyle" mode="assign">
                <const>hintmedium</const>
        </edit>
</match>

<!-- Turn on antialias and hinting with hintmedium for Nanum fonts -->
<match target="font">
        <test name="family" compare="contains">
                <string>Nanum</string>
        </test>
        <edit name="antialias" mode="assign">
                <bool>true</bool>
        </edit>
        <edit name="hinting" mode="assign">
                <bool>true</bool>
        </edit>
        <edit name="hintsytle" mode="assign">
                <const>hintmedium</const>
        </edit>
</match>

</fontconfig>

위와 같이 하면 나눔고딕을 좀더 깨끗하게 사용할 수 있다.

아래는 serif와 sans font family에 나눔글꼴을 등록하는 방법이다.
serif에 나눔명조를, sans에 나눔고딕을 등록하였다.
수정해야 할 파일명은 69-language-selector-ko-kr.conf

<fontconfig>

<!-- Set preferred Korean fonts -->
        <match target="pattern">
                <test qual="any" name="family">
                        <string>serif</string>
                </test>
                <edit name="family" mode="prepend" binding="strong">
                        <string>NanumMyeongjo</string>
                        <string>UnBatang</string>
                </edit>
        </match>
        <match target="pattern">
                <test qual="any" name="family">
                        <string>sans-serif</string>
                </test>
                <edit name="family" mode="prepend" binding="strong">
                        <string>NanumGothic</string>
                        <string>UnDotum</string>
                        <string>Guseul</string>
                </edit>
        </match>

참고) 현재 필자는 터미널의 글꼴은 기본설치 설정의 monospace 대신 terminus 글꼴로 설정해 사용하고 있다.
설치방법은  apt-get install xfonts-terminus
출처: IDG(http://www.idg.co.kr/newscenter/common/newCommonView.do?newsId=53080)

비스타가 기업으로부터 외면 당한 가장 큰 이유는 바로 기존의 애플리케이션과 호환되지 않는다는 것이었다. 마이크로소프트는 바로 이 문제를 해결할 수 있는 툴의 공개 베타 버전을 처음으로 공개했다.

MED-V(Microsoft's Enterprise Desktop Virtualization)는 가상화 기술을 이용해 윈도우 2000이나 윈도우 XP용으로 개발된 기존 윈도우 애플리케이션을 윈도우 비스타 상에서 실행할 수 있다.

MED-V 수석 제품 관리자인 랜 오엘가이저는 “우리의 최우선 목표는 IT 부서가 새로운 운영체제로의 마이그레이션 과정에서 부딪히게 되는 애플리케이션 호환성 문제를 해결할 수 있는 기업용 가상화 솔루션을 제공하는 것”이라며, “MED-V 1.0을 사용하면, 가상 윈도우 2000/XP 환경을 쉽게 생성해 배포할 수 있으며, 이를 통해 최종 사용자가 윈도우 비스타 데스크톱에서 기존 애플리케이션을 구동할 수 있다”고 설명했다.

이런 식으로 사용자가 굳이 새로운 운영체제를 도입하기 전에 호환성을 테스트하거나 애플리케이션을 마이그레이션하지 않아도 된다는 것이 장점이다. MED-V 베타는 현재 마이크로소프트 커넥트 사이트에서 배포하고 있다.

MED-V의 최종 버전은 올해 후반기에 발표될 예정이다. 마이크로소프트는 MED-V 관련 기술을 지난 해 5월 키다로(Kidaro) 인수를 통해 확보한 것으로 알려졌다. 실제로 MED-V는 마이크로소프트의 데스크톱 최적화 팩이란 더 큰 소프트웨어 패키지에 포함되어 있으며, 이들 대부분은 마이크로소프트가 가상화 부문 전문업체의 인수를 통해 확보한 것이다. 키다로 외에도 소프트리시티(Softricity), 어셋매트릭스(AssetMetrix), 윈터널 소프트웨어(Winternals Software), 데스크톱스탠더드(DesktopStandard) 등이 대표적이다.

마이크로소프트는 비스타 출시 이후 크게 불거진 호환성 문제를 해결하기 위해 데스크톱/애플리케이션 가상화 기술에 적지 않은 투자를 하고 있다. 실제로 많은 기업에서 윈도우 비스타를 건너뛰고, 윈도우 XP를 끝까지 사용하다 윈도우 7으로 옮겨가려는 데에도 애플리케이션 호환성 문제가 가장 큰 영향을 미친 것으로 분석된다.  elizabeth_montalbano@idg.com


Ubuntu가 기반으로 하고 있는 Debian을 설치해 보았다.
설치과정은 다른 리눅스 배포판을 설치해 본 사람이라면 무난히 설치할 수 있다.
헌데... VMWare의 VGA 드라이버 등이 기본적으로 없기 때문에 VMWare Tools를 설치해주어야 한다.
다음은 Debian 4.0 R6를 VMWare에 설치한 후 VMWare Tools를 설치한 로그이다.

  1. 커널 버전 알기
    # uname -a
  2. 컴파일 설치
    # apt-get gcc
  3. 커널 헤더 설치
    # apt-get install linux-headers-2.6.18-6-amd64
  4. VMWare Tools 설치(설치 과정시 물어보는 질문에는 기본값으로 그냥 엔터키만 쳐주면 된다.)
    # cd /usr/local/src
    # tar xzvf VMwareTools-7.8.4-126130.tar.gz
    # cd vmware-tools-distrib
    # ./vmware-install.pl
이후 재부팅을 하거나 startx를 실행하면 X Windows 볼 수 있다. ^^v

오늘(크리스마스)도 출근했다가 좀전에 퇴근해서 집에 오니 10시 30분.
크리스마스라서 우울했던 것이 아니라 휴일인데 쉬지 못해서 우울했다. 요새 기쁜일은 하나도 없다.
요새 같이 살다가는 얼마 안 가 폭발할 지도 모르는데, 지나온 시간 중 요새가 가장 힘들 듯하다.
일도 힘들고, 되는 일고 없고, 집에 우환도 있고, 3년 동안 아무 일 없었던 차관련 각종 일도 생기고,
하여간 요새 몇년 동안 생길 안 좋은 일이 12월에 몽땅 생기는 느낌이다.... 휴우~
집에 와서 설겆이 하고 이것저것 정리하고, 라면 끊여 저녁으로 먹으면서 TV를 켰는데
콩고 내전으로 우간다의 나키발레로 피난을 간 난민 이야기가 방송으로 나와 무심코 보게 되었다.
KBS '현장르포 동행'이라는 프로그램이었다.
(내가 이런 프로그램을 좋아하는 것은 아니고, 볼 프로그램이 없다. 다른 방송사에서는 농담따먹기가 진행중임)
난민 생활이 당연히 힘들텐데, 직접 보니 마음이 심난해진다.
하루 800원으로 생활하는 사람들.
물론 물가가 다르겠지만, 800원은 그 사람들에게도 많은 돈이 아니며 절대 부족한 돈인 것으로 보인다.
주로 나탈리라는 17살 소녀의 생활이 비춰주었는데, 아버지와 언니 부부는 콩코 내전 반군에 죽임을 당했으며,
어머니와는 피난 중 헤어졌다고 한다. 현재 조카 셋을 키우며, 난민촌에서 빨래일로 생활하고 있다.
세 조카들의 유치원 장면이 나올때는, 티없이 맑은 눈의 아이들의 안쓰러운 모습을 보면서(점심 급식으로 콩죽 한컶이 전부)
우리나라 전쟁 후에도 저렇지 않았을까 하는 생각이 든다.

내가 요새 힘들다고 생각하고 사는데, 어찌보면 그 사람들에게는 사치스러운 모습인지도 모르겠다.
사람이 항상 높은 곳을 보며, 그렇게 되기 위해 열심히 달려가야 겠지만, 가끔은 아래를 보면서
위안이 아니라, 나보다 못한 사람들이 있으니 혼자만 살겠다고 아둥바둥하기만 할게 아니라
사람 생각도 하면서 살아가야 한다는 생각이 든다. 물론 그 사람들에게 도움이 될 행돌을 실천하면 더욱
좋을테고...

암튼 대학 때 북쪽 사람이 얘기한 말이기도 하고, 책 제목이기도 했던 말이 생각나다.
"더디 가도 사람 생각하지요"

P.S. 하도 요새 우울해서 라면 먹다가 소주 한잔 들이켜서 그런지 감상적이었나보다.
참! 참이슬 병뚜껑 1만원 당첨됐다. ^^v

+ Recent posts