
Windows XP 기본 시계
이 시계를 입맛에 맞게 변경시키는 아주 작은 툴이 있어서 소개한다.
바로 TClock Light 라는 툴이다.
배포판에 소스까지 포함되어 있어 간단하게 오늘이 몇주차인지 표시하도록 수정해봤다.

몇주차인지 표시하려면 TClock 설정> 서식에 표시 형식 직접 입력을 선택하고, w 문자를 사용하면 몇 주차인지 표시하도록 했다. 아래 수정된 dll파일을 이용해야한다.
마지막으로 내가 설정한 세팅은 다음과 같다

Windows XP 기본 시계
현재 로컬 PC에 모니위키를 사용중에있다. 위키에서 code syntax highlight를 하기 위해서는 VimProcessor 를 이용하면 쉽게 가능하다.
Vim 으로 Highlighting 을 위해서 아래 2가지를 추가해주면 가능하다.
1. Vim 설치
2. config.php 파일에 vim 경로 등록
Source Insight 를 사용하다보면, 나도 모르게 파일이 너무 많이 열려 있는 경우가 있다. 심지어는 50~60개 이상의 파일을 Open 한채로 소스 분석을 하는 경우게 허다하다.
파일 한개가 열릴때 마다 PC 리소스를 잡아 먹는다는 생각에 가끔 윈도우 리스트를 띄어서 모두 닫는 경우가 있다. 매크로를 사용하면 특정 Hot-Key 로 최근 몇개의 파일만 남겨두고 모두 Close 도 가능하다.
그것 외에도 파일을 새로운 창에 열때 10개 이상이 되면 가장 마지막에 봤던 소스파일 윈도우를 자동으로 close 하는 방법이 있다.
Source Insight 에서 제공하는 event handler 함수를 정의하면 된다. (event handler 를 사용하기 위해서는 Options > Preferences > General > Enable event handlers 를 check 해야 한다.)
10개 이상 열린 경우 마지막에 본 소스를 close 하는 event handler와 3개만 남겨놓고 모두 close 하는 macro를 소개한다.
event 로 시작하는 함수는 source Insight 에서 정의하는 event handler 이다. 특정 이벤트가 발생하면 수행되는 것이다.
DocumentOpen 이라는 이벤트 핸들러는 파일을 Open할때 불리는 핸들러다.
event DocumentOpen(sFile)
{
nHoldWnd = 10
winCnt = WndListCount()
if (winCnt > nHoldWnd ) {
hWnd = GetCurrentWnd()
while(nHoldWnd--!=0) {
hWnd = GetNextWnd(hWnd)
}
while (hWnd != 0) {
hTmpWnd = GetNextWnd(hWnd)
CloseWnd(hWnd)
hWnd = hTmpWnd
}
}
}
NexusFileV 스크린샷
CodeProject를 구경하다가 CxImage 라는 이미지 라이브러리를 보았다.
http://www.codeproject.com/bitmap/cximage.asp
해당링크의 소개를 간단히 요약하자면...
CxImage는 C++ 클래스이고, load, save, display, transform images 가 가능하다.
image library로는 OpenIL, FreeImage, PaintLib같은 좋은 라이브러리가 많이 있지만, 이들 라이브러리는 주로 platform independent 를 지향 하거나, C 로 만들어지는 등 사용상의 약간 불편함들이 있다.
CxImage 자체로는 BMP,GIF,ICO,TGA,PCX,WBMP,WMF 가 지원되고, 그외 JPEG, PNG, MNG, TIFF 등의 포멧들은 추가 라이브러리가 필요하다.
CxImage 배포형식이 full과 lite가 있는데 lite는 CxImage 소스만을 포함하고 있으며, full에는 다른 포멧이 요구하는 라이브러리가 (jpeg, png, zlib, 등등) 포함되어 있다.
CxImage 는 image resource, file, memory 로 생성이 가능하다.
간단한게 이미지 디코딩해서 화면에 그리는 sample code
CxImage image((BYTE*)(wi->imageData), wi->imageSize, CXIMAGE_FORMAT_UNKNOWN);
if (!image.IsValid() ) {
AfxMessageBox(image.GetLastError());
return;
}
CRect rc;
int x1,y1,w,h;
GetClientRect(&rc);
w = image.GetWidth();
h = image.GetHeight();
x1 = rc.Width() - w;
y1 = rc.Height() - h;
x1 = x1 > 0 ? x1 / 2 : 0;
y1 = y1 > 0 ? y1 / 2 : 0;
image.Stretch(pDC->GetSafeHdc(), CRect(x1,y1,x1 + w,y1 + h));
원래 생성자에 imagetype을 넣도록 되어 있는데 UNKNOWN으로 줬더니 자동으로 되는듯 보인다.
네이트 톡을 PDA 로 클리핑하여 보려고, 파이선 스크립트를 만들었다.
대부분의 게시판은 로그인을 요구하지 않았는데, 일부 게시판은 로그인을 요구하길래, 로그인이
가능한 스크립트를 만들다 보니 쿠키 핸들링이 필요하여 사용한던 내용을 정리해본다.
(A) (B)
[브라우저 Client] <---------> [클리핑 스크립트] <---------> [네이트 톡 서버]
클리핑을 위해서는 위와 같은 네트웍 구성도가 된다.
클리핑 스크립트에 아이디/비밀번호 를 넣어 놓기가 좀 그래서, 브라우저 Client에서 쿠키로 스크립트쪽으로
보내도록 했다. (폼 데이터로 보내도록 해도 상관은 없다)
일단 (A)에서 클라이언트에서 보내주는 쿠키를 꺼내 보려면, os.environ["HTTP_COOKIE"] 값을 참조하면된다.
try:(A) 에서 브라우저가 쿠키를 id=userId;passwd=userpw 이렇게 보내게 되면 id/pw 에 userid/passwd 값이
cookies = os.environ["HTTP_COOKIE"]
except KeyError:
print "cookie is not set"
else :
info = cookies.split(';')
for item in info:
if 'id' in item:
login_id = item.split('=')[1]
if 'passwd' in item:
login_pw = item.split('=')[1]
http 요청을 위해서는 urllib2 를 사용하고 Cookie 핸들링은 cookielib 를 사용한다.
cj = cookielib.CookieJar()
opner = urllib2.build_opener (urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://xso.nate.com/login.jsp")
login_postdata = {'redirect':'http:/www.nate.com', "ID":login_id,"domain":"nate.com","PASSWD":login_pw,"ssl":""} # 로그인 폼 값
params = urllib.urlencode (login_postdata)
r = opener.open("http://xso.nate.com/servlets/LoginServlet", params)
여기까지하면 id/pw 가 정확하다면 네이트에 로그인 세션이 생성되어 cj에 담기게 된다.
이 이후로 opener 를 이용하면 로그인 세션이 살아 있게 된다.