'볼거리, 읽을거리, 놀거리'에 해당되는 글 236건

  1. 2005.07.05 캐럿보이넷 :: pthread 버그인가?? 2
  2. 2005.06.29 캐럿보이넷 :: 데비안 패키지로 APM 설치하기
  3. 2005.06.28 캐럿보이넷 :: IT 관리자가 범하기 쉬운 오류「톱 10」
  4. 2005.06.14 캐럿보이넷 :: 여자는 왜? 오빠를 못믿는가?
  5. 2005.06.12 캐럿보이넷 :: Java 프로그램 exe 만들기, JSmooth
  6. 2005.06.08 캐럿보이넷 :: 프로포즈 잘하는 작전&프로포즈 유도하기
  7. 2005.05.28 캐럿보이넷 :: 우분투 LIVE CD 입맛대로 만들기..
  8. 2005.05.26 캐럿보이넷 :: 지금 대세는 우분투리눅스다 ! ㅎㅎ 2
  9. 2005.05.23 캐럿보이넷 :: 女子에게 少年은 부담스럽다.[by 노희경]
  10. 2005.05.14 캐럿보이넷 :: 레지스트리
  11. 2005.05.14 캐럿보이넷 :: 아스키(ASCII)코드 표
  12. 2005.05.14 캐럿보이넷 :: 하루 24시간을 두배로 사는 20가지 조언 1
  13. 2005.05.12 캐럿보이넷 :: 프로젝트 아이디어
  14. 2005.05.02 캐럿보이넷 :: 피자 떡볶이
  15. 2005.05.01 캐럿보이넷 :: make 사용하기
  16. 2005.05.01 캐럿보이넷 :: 페도라에서 한글 나오게 하기
  17. 2005.05.01 캐럿보이넷 :: .vimrc내용 (vi tip)
  18. 2005.05.01 캐럿보이넷 :: 재우기
  19. 2005.05.01 캐럿보이넷 :: 나는 가끔씩 바람을 꿈꾼다.
  20. 2005.04.21 캐럿보이넷 :: 고장나거나 못쓰는 키보드로 압정 꾸미기.. 4
  21. 2005.04.17 캐럿보이넷 :: Name Server 설정
  22. 2005.04.07 캐럿보이넷 :: 아이스스톰
  23. 2005.04.05 캐럿보이넷 :: Win32API C++버전.. 2
  24. 2005.04.04 캐럿보이넷 :: Destination..
  25. 2005.04.01 캐럿보이넷 :: 대한민국 IT에는 미래가 없다. 그런데 난 즐겁다.
  26. 2005.04.01 캐럿보이넷 :: 차인표 분노 5종세트
  27. 2005.03.31 캐럿보이넷 :: 수거하셈!
  28. 2005.03.31 캐럿보이넷 :: [UML 제대로 알기] ④ 닷넷 환경 UML 툴 활용 가이드
  29. 2005.03.30 캐럿보이넷 :: [64비트 윈도우 프로그래밍] ① 32비트 프로그램을 엄호하라
  30. 2005.03.28 캐럿보이넷 :: MFC에서 웹팝업창띄우기

[CODE]#include <stdio.h> #include <pthread.h> #include<unistd.h>[/CODE]

class CController
{
public:
        static void* Run(void *arg);
        static void* Run2(void *arg);
};
 
void* CController::Run(void *arg)
{
        printf("1\n");
        return 0;
}
 
void* CController::Run2(void *arg)
{
        printf("2");
        return 0;
}
 
int main()
{
        pthread_t t_id;
        CController *session;
        session = new CController;
        pthread_create(&t_id, NULL, session->Run, (void *)session);
        sleep(1);
        pthread_create(&t_id, NULL, session->Run2, (void *)session);
        while(1);
        return 0;
}




이렇게 하면 뭐가 출력될거라 생각하세요?
전 당연히
1
2

가 출력되고 무한루프에 들어갈줄알았는데..
1만 출력되고 무한루프에 빠지는군요.. -_-a;;

Run과 Run2의 차이는 보시는 바와 같이 \n이 있고 없고의 차이 입니다.

뭐가 문젠지 아시는분 답변해주세요-
Posted by 장안동베짱e :


보기 : http://debianusers.org/DebianWiki/wiki.php/APM
Posted by 장안동베짱e :


오류 1 : 비즈니스가 아닌, 기술에만 집중하라?
▶ 비지니스 감각을 가지라 (비용에 따른 성과의 크기를 측정해야한다)
성공적인 비즈니스 환경 구현을 위한 필수조건은 IT 관리자가 비즈니스 리더로 변신해 자신의 시각을 바꾸고, 비즈니스 이슈에 무게중심을 둬야 한다는 점이다.

오류 2 : ‘눈에서 멀어지면 마음에서도 멀어진다’는 격언을 잊지말라.
▶ 철저히 현재의 업무가 잘 진행되고있는지 체크하고 분석하라
IT 관리자들 대부분은 자신의 업무 진척 상황을 점검하지 않은 채, 무겁게 앞으로만 나아가려는 경향이 있다. IT 관리자가 할 수 있는 가장 중요한 업무는 현재의 평가 작업이다.
(평가작업실례) SWOT(강점, 약점, 기회, 위협) 분석,스코어카드분석 http://techrepublic.com.com/5138-1035_11-5670861.html

오류 3 : '나홀로' 프로젝트 팀이 업무를 수행한다는 사실을 잊지 말라.
▶ 팀으로 업무한다는 사실을 잊지말라.
과제를 수행한다는 것은 세세한 부분에 대한 관리를 의미하는 것이 아니다. 새롭게 주어진 과제를 올바르게 수행하는 것은, 프로젝트를 이끄는 여러분 자신들의 리더로서의 몫이다.

오류 4 : 자신의 기대치에 대해 면밀히 살피지 말라?
▶ 얻고자하는 목표와 가치를 리스트하고 달성되는 상태를 점검하라
자신이 속해 있는 전체 부서의 기대치에 대한 포괄적인 리스트를 작성하라. 리스트의 세부 항목으로는 중요한 프로젝트, 네트워크, 서버 성능, 고객 만족 등이 될 수 있다. 평상시에도 이런 기대치를 면밀히 살피고 있다는 사실을 각인시키기 위해 리스트를 재차 확인하라. 일일 단위로 체크해야 하는 모든 업무를 처리할 수 있도록 체크리스트나 업무 문서를 작성하라.

오류 5 : 영업 부서와는 눈도 맞추지 말라?
▶ 경영자,임원들을 설득할수있는 전략/분석/프리젠트션 능력을 가지라
필자는 수많은 IT 관리자들이 기업의 사장과 CEO가 아닌 운영부서와 재무부서에 보고서를 제출한다는 사실을 발견했다. IT가 비즈니스 측면에서 효과적이고 전략적인 요소가 될 수 있는 유일한 방법은 기업 임원들과의 협력관계를 유지하는 것이다. 여러분은 조직에서 충분한 영향력을 가질 수 있도록 보고서를 작성하고, 동료와 리더들을 이끌어야 한다. 여러분이 더 빨리 리더 그룹에 합류할수록 <오류 1> 항목의 실행 속도도 더 빨라질 것이다.

오류 6 : 쉬지 말고, 스스로를 혹사시켜라?
▶ 적절한 휴식과 재충전의 기회를 가지라
여러분이 스스로를 혹사시키면 여러분의 비즈니스 또한 살아남기 어렵다는 점을 주지하라. 여가를 갖지 못하면 생산성이 떨어지고, 결국에는 스스로를 포기하거나 불만을 품게 된다. 스스로를 돌보고, 자신의 업무와 부하직원을 관리하고, 가족의 부탁을 들어주면서 여유를 가져라.

오류 7 : '백업은 백업일 뿐', 백업 솔루션을 절대로 테스트하지 말라?
▶ 백업시스템(프로세스,SW,HW)을 정기적으로 점검하라
기술 혁신도 하드웨어 문제를 피해갈 수는 없다. 차선책으로 장애방지가 있지만 이 역시 실패할 수 있는 가능성이 존재한다. 여러분이 테입을 보관하고 있고, 또 모든 시스템이 정상적으로 작동되는 것처럼 보인다 하더라도 모든 시스템이 실제로도 제대로 돌아가고 있다고는 잠시도 생각지 말라. 백업 시스템을 정기적으로 테스트하라. 재난 테스트를 실시하고, 재난에 대비한 복구 조치에도 만전을 기하라.

오류 8 : 남에게 도움을 요청하지 말라?
▶ 전문가에게 적절하게 도움을 받으라
관리자와 엔지니어들이 문제가 발생했을 때 다른 사람에게 알리지 않고, 심지어는 매뉴얼도 읽지 않은 상태에서 혼자 문제를 해결하려다 값비싼 실수를 저지르는 것을 너무나 자주 접했다. 자신의 범위를 넘어서는 문제가 발생하면 적절히 행동하고, 도움을 요청하라.
성공적인 IT 관리자가 되기 위한 필수조건은 정확한 답안을 알고 있는 것이 아니다. 해답을 찾아낼 수 있고, 가능한 한 빠르고 비용 효율적으로 솔루션을 실행하는 능력이다. 필요한 분야에서 전문가를 초빙하는 것을 망설이지 말라.

오류 9 : 자기계발에 시간을 투자하지 마라?
▶ 자기개발에 매일 시간을 투자하라
이 실수에 대해서는 어떤 변명도 통하지 않는다. 자기계발은 자신이 속한 회사가 아니라 스스로 책임지는 것이다. 필자는 한 개인이 성공할 수 있는 잠재력은 가장 최근에 읽은 5권의 책과 세미나에 참석하는 것이라고 항상 강조한다.
IT 관리자라면 누구나 자기계발을 위해 최소한 하루 30분 정도는 투자해야 한다. 정말 성공하고 싶다면 이보다 더 많은 시간을 투자해야 하며, 심지어는 하루에 2시간 이상까지도 투자해야 한다. 필자가 가장 자주 듣는 변명은 시간과 돈이 부족하다는 것이다. 돈과 시간은 어떻게 성공적으로 관리하느냐에 따라 달라진다.

오류 10 : 조언자나 지도자를 찾지 말라?
▶ 조언자를 구하고 또 조언자가 되라...
성공으로 가는 지름길은 같은 길을 앞서간 누군가를 찾아내 그 사람을 모방하는 것이다. 관리자의 위치에 있든 그렇지 않든 간에 여러분은 언제나 조언자나 지도자를 곁에 둬야 하며, 스스로도 누군가에 대한 조언자와 지도자가 돼야 한다. 지도자는 여러분에게 지혜와 책임, 그리고 필요한 부문에 대해 조언을 해줌으로써 여러분 혼자 처리할 수 있는 것보다 더 많은 것들을 성취할 수 있도록 도와줄 것이다. 반대로 여러분이 누군가에게 조언이나 지도를 하면 그 사람도 이와 같은 성과를 얻게 된다. 그러나 이 경우는 다른 사람을 가르침으로써 여러분 자신의 개념도 다시 한 번 공고히 할 수 있도록 해준다.

→ 조이 스미스는 하이어힐의 CIO, 설립자 겸 기업임원 컨설턴트다. 그는 세계적인 권위를 자랑하는 ‘올해의 조지아 CIO 상’ 최종후보 명단에 2번씩이나 이름을 올린 유일한 인물이며, '올해의 MS 프로젝트상‘도 두 번 수상했다. 조이의 IT 관리에 대한 식견, 팁, 기술 등에 관해 더 많은 내용을 알고 싶다면 그가 저술한 ’IT 옥탄‘을 읽어볼 것을 권한다. @

원저자: Joey Smith (TechRepublic)  출처: zdnet -> http://jaewook.net/index.php?pl=501
Posted by 장안동베짱e :
'왜 여자는 왜 오빠를 믿지못하는가?'의문이 시작되었다.
나는 십수년의 연구를 거듭한끝에 역사속에서 그 해답을 찾았다.
이집트 고대벽화를 토대로 새로운 컴플렉스에 대해서 설명을 하겠다.
 
지상으로내려온 신중에 잘생긴 오빠신이 아는동생 여신에게 구라를 깠기 때문에
여자신은 '속았다'는기억이 유전자 구석에 저장되고,
그게 계속 유전되어서 자신도 모르는사이에 본능적으로 오빠를 믿지못하게 된것이다.
 
다음달 '뉴턴'지를 통해서 소개될 내용의 일부이다.
내가 발견한 이 컴플렉스를 '오빠즐-컴플렉스'(oppaKIN- complex)라고 명명한다.
 
아마도 금년 노벨상은 무난할듯하다.-_-v
아래그림은 벽화설명이다.
 

 


출처 : http://blog.naver.com/icebug58/140002923179
Posted by 장안동베짱e :
Name 황장호(2004-06-14 17:11:39, Hit: 1777)
Subject Java 프로그램 exe 만들기, JSmooth
Java는 exe가 되지않는 것이 장점이면서 어찌보면 단점이다.
엔드유저 입장에서는 여간 불편한것이 아니기 때문이다.
그래서 난.. Invoker라는 만들어 2001년부터 쓰고 있다.
이것 역시 exe를 만들어주는 것인데, 전부 c로 작성하였으며
사용자 PC의 레지스트리를 뒤져서 JRE를 찾아내고 jawt.dll 같은 것들을 위해
$(JRE)/bin을 System environment에 추가하고, JVMInit을 하여 실행하게 된다.

(보너스로 윈도우즈 서비스에 자바 프로그램을 등록하고 서비스 이벤트를
받는 부분도 있습니다! 자랑자랑~;;;)

그러나 열심히 만든 invoker라는 프로그램에는 치명적인 단점이 있다.
내가 Windows PE 파일 구조를 전혀 모르기 때문에, exe를 만들려면
Win32 Platform SDK가 설치되어야하기 때문이다 -_-;; (결국 나밖에 못쓴다)


HanIRC #gnome 채널의 fender님께서 JSmooth라는 것을 알려주셨다.

역시 자바 프로그램을 EXE로 만들어주는 것인데, sourceforge에서 찾을 수 있다.

http://jsmooth.sourceforge.net

cvs checkout 해서 전체 소스를 훑어봤더니 PE 파일 만드는 부분까지 포함되어있고,

JVM bundle feature도 적용되어있다. Icon 파일도 넣을 수 있고~

JVM 최대메모리, 최소메모리, Java Properties 설정같은것도 모두 정상작동한다.


에.. 근데 문득 한글화가 하고 싶어서 한글화를 시작했다.

Texts.properties를 열심히 Texts_ko.properties로 번역하고..

skeletons 파일 몇개 번역하고.. 랄라 이제 ant dist를 탁!

쳤더니 mingw32가 필요하단다. skeleton 컴파일하는데 필요하다며 ㅡ_ㅜ

아무튼 이것저것 다 설치하고 고치고 붕붕해서 JSmooth-ko 버젼을

빌드하는데 성공했다.

아직 docbook-xslt를 설치하지 않아 dist 파일에 doc은 설치되지 않았으니 참고!


Posted by 장안동베짱e :
프로포즈의 목적은 상대에게 감동을 주어 자신의 마음을 전하고 일생을 함께 할 배우자를 확정 짓는데 있다는
것을 명심하십시오.
당연히 특별한 장소에서 분위기를 엄청 잡아가며 상대를 사로잡아야 합니다.
자신이 세상의 전부인 것처럼 보이도록 상대를 유혹해야만 성공이라고 말할 수 있습니다.


∴세상에 공짜 싫어하는 사람 없다는데.. 투자작전이 좋겠지..

전통적인 소재 장미작전
장미는 그 미색이 과연 프로포즈의 대명사라고 할만 하죠. 한 두송이는 빈약해 보이니까 많으면 많을 수록
좋은 것도 사실이고..될 수 있으면 그녀와 만나기 전까지는 장미의 존재를 들켜선는 안됩니다.
상대의 호기심 유발은 프로포즈의 기본 중의 기본.
친구의 도움을 받는 것도 생각해볼만 하죠..
유치한 작전이라고 생각될수록 잘 먹혀 들어갑니다.
검은 양복에 나비넥타이로 그녀의 웃음을 끌어낸뒤 갑작스런 프로포즈도 인상에 남겠죠^^.

서동왕자(백제무왕)도 써먹었던 광고작전..
동네방네 소문을 내는 시간이 엄청 걸리는 과거적인 발상은 절대로 꿈도 꾸어선 안됩니다.
사냥꾼이 사냥할 때는 신속 정확하게 급소를 노리는 법
서동왕자와 선화공주 이야기도 결국은 소문 자체가 프로포즈는 아니었습니다.
단지 공주와 만날 계기를 만든 것이죠..
이 작전의 포인트는 만났을 때 결혼을 기정사실로 만들었다는 점입니다.
어떤 매체를 이용하던지 집안 어른들을 모시던지 프로포즈 순간 프로포즈 사실이 대대적으로 광고가
되도록 하는 것입니다.
시간과 돈이 투자되는 정도는 각오 하셔야겠죠^^..


나는 문학도.. 편지 작전..
아무리 세대가 변한다 하더라도 지극 정성에 여자는 넘어가기 마련입니다.
젊은 시절 문학도 아닌 사람이 없다-라고 하듯이 "옛날에는 말이야"로 시작 하는 주위 사람들의 말은 결국
"나도 좀 써 보려고 했었다"로 끝나죠..
그러면 당신은 실제로 글을 쓸수 있나요?
문단에 한참 이름을 날리고 있는 작가분들도 연애편지가 동기가 되어 등단의 꿈을 펼쳤다는데..
적어도 두달 이상을 빠짐없이 다른 내용의 글(배껴도 좋습니다.)을 사랑과 관련하여 보내십시오.
그리고 어느날 만나서 "결혼하자"라는 의사를 전하면 됩니다.

∴나는 제갈공명의 남동풍을 안다.

선천적으로 여자들은 날씨에 민감하는 것을 이용하는 고난이도의 기술입니다.
여자의 날씨에 따른 심리변화는 거의 병적이라 할 수 있다.
하지만 또 대부분의 여자들은 자기가 날씨에 민감하다는 것을 모른다.
그럼, 맑은 날과 흐린날 중 프로포즈 하기에 좋은 날은 어느 쪽일까?
이 경우, 두말할 필요도 없이 흐린날이 좋다.
눈이 펑펑내리면 금상첨화, 비가 주르륵 주르륵 내려도 효과 만점이다.
참고로, 여자는 비오는 날 남자에 대한 저항력이 떨어진다는것.
봄에는 어디론가 떠나고 싶은 욕망이 생긴다는 것, 추운 날에는 누군가에게 보살핌을 받고 싶어 한다는
철칙아닌 철칙이 있다.
이것을 명심하세요!

∴행동파 남자라고 자부한다. 넌 내꺼야..

키스는 꼭 프렌치키스를 권합니다.^^
예전에는 볼 수 없었던 거리에서의 키스신이 요즈음은 통용된다는 것 아십니까?
자신도 영화의 주인공이 되보는 겁니다.
어차피 프로포즈란 단 한번에 끝나기 마련..
얼굴에 철판좀 깔고 당당하게 프렌치키스라는 것을 갑작스레 하는 것입니다.
장소는 상관 없습니다만..
될 수 있으면 엉망인 장소는 피해야 겠지요.
뭐 사람에 따라서는 큰 소리로 "나 이사람과 결혼해요"라고 외치는 사람도 있겠지만..

애교있는 협박(?)작전..
스토커가 되면 않되겠지만 자신의 마음을 증명하기 위해서라면 이 정도는 해야되죠.
결혼해 줄 때까지 매일밤 창밖에서 청혼하는 것(오랜 시간의 쪽팔림이라고들^^)
당신을 위해서라면 죽음도 불사하겠다는 의지의 표현..
(죽음이 담보라는데^^. 주로 뛰어내리는 것을 많이 선택하더라구요.)

잠적작전..
왠지 자주 만나다보면 친구인지 애인인지 애매하게 변하고, 할말도 없어지고..
권태기라는 것이 오면 위험수위죠..
그러면 그 권태기가 오기전에 보고 싶어 죽겠을 시점에서 만나지 않는 방법을 권합니다.
잠적작전..
정말 참기 힘들긴 하지만, 오랜만에 직접 만났을 때의 그 기쁨은..
이 때를 이용해 결혼하자고 하는 겁니다.
매일 매일을 함께 할 수 있다는 것을 강조해 가면서..
어쨌든 행동파 치고는 정말 점잖은 방법인것 같습니다.


∴말한마디면 천냥빚을 갚는다는데.. 나는 말한마디로 여자를 쟁취한다.

"난 신앞에서 맹세했어. 오직 너 만을 사랑한다고. 나와 함께해 주길 바래."
누구나 경건한 장소와 엄숙한 분위기 속에서는 왠지 마음이 풀리게 되어있습니다.
순간을 포착하고 이용을 해야겠죠..
당신이 신앙인이 아니어도 좋습니다.
이 때만은 신에게 모든 것을 바치는 마음이 되싶시오.
그리고 함께 온 애인에게 말하는 것입니다.
포인트는 진지해야 한다는 것입니다.
그리고 사랑이라는 말의 무게를 눈빛과 함께 전달할 수 있어야 합니다.
대사마저 똑같이 하면 센스없는 남자라는 거 당근이죠^^.

"난 너의 마지막 남자가 되고싶어. 이제는 우리의 미래가 함께하길 바래.."
남자는 여자가 첫 애인이길 바래도 여자는 마지막 남자이기를 바란답니다.
원래 우리가 받아온 교육은 어느새 여자를 모성적인 분위기로 몰고가 안락한 가정을 꿈꾸도록 만들어 놓고
있습니다.
자신이 원든 원하지 않든 여성의 의식 속에는 항상 이런 의식이 남아있는 점을 인식하십시오.
장소는 당연히 감탄사가 절로 나오는 절경에서 해가 뜨거나 지는 그 순간을 이용하는 겁니다.
그리고 만난 시간부터 프로포즈를 하는 순간까지 무게 잡는 것을 잊지 마십시오


"나 너에게 아까 전하지 못한 말이있어. 우리 결혼하자."
숙기가 많은 남자는 애인 앞에서 횡설수설만 늘어놓거나 아예 한마디도 못하고 헤이지는 경우가 허다합니다.
그래서 우리는 정보통신 수단을 맘껏 이용하게된 세상에 감사해야 합니다.
특히 문자메시지, 음성메시지 등의 시간차 공격(?)까지 가능한 세상이 되었다는 점을 이용합시다.
배경음악은 분위기에 맞추어 신중히 선택하되 결혼에 관련된 곡이며 서로에게 친숙한 곡이어야 합니다.
목소리에 자신 있다는 분께 추천하고 싶은 방법입니다.


전통적인 한국 사회에서 여자들이 프로포즈 하는 것은 왠지 꺼려져 온 것이 사실이지만 마냥
기다린다고 해결되는 문제는 없습니다.
그렇다고 프로포즈를 먼저 한다면 정말 많이 후회하게 될지도 모릅니다.
여기서 추천하는 방법은 자연스럽게 남자가 프로포즈 해오도록 유도하는 것입니다.


∴우리는 이미 부부사이(?)..

몸으로 남자를 묶는다는 그런 촌스런 방식을 상상하셨다면 정말 걱정됩니다.
같이 있는 것이 자연스러운 사이에는 이상하게도 프로포즈가 나오지 않는 법입니다.
이런때는 아예 부인인양 행동하세요.
모임회나 파티에서 항상 곁에 같이 있고, 그의 회사에도 김밥이나 샌드위치 등의 도시락을 준비해서
'맛은 없어도 많이 드세요'라고 하면 뭐 그럴듯한 프로포즈는 아니어도 결혼 이야기는 당연히 나오게 되겠죠.
.(주위에서 돕는 타입^^)

너무 익숙해져서 처음 만났을 때의 감정을 잊은 것은 아니신지요.
남자들은 그 응큼함이 시각에서 들어난다고 합니다.
즉, 본능적으로 외모를 엄청 따진다는 것이지요.
나는 요즈음 그를 만날 때 옷을 차려입고, 화장을 하고 있습니까?
말씨나 자세가 너무 경박해 지지는 않았나요?
지금이라도 늦지 않았으니 패턴에 변화를 주십시오.
그는 어떤 방식으로든 반응을 보일 것입니다.
그 때 결혼 이야기를 꺼내면 됩니다.

∴백그라운드는 뒀다가 이런 때 쓰는 법

부모에게 선을 보이는 겁니다.
수단과 방법을 가리지 말고 두 사람의 사이를 공식적으로 부모님께 알려버리는 거죠..
"자기를 우리 부모님께 소개하고 싶어" 또는 "부모님이 자기 한번 보기를 바래"하게 되면 남자들은 분명히
부담을 갖게 됩니다.
분위기를 차분히 띄워 애교있게 말해야 되는 건 당연지사.


신혼의 친구나 친지 집을 함께 방문해 행복한 모습을 경험하게 합시다.
결혼식장에 함께 가 주는 것도 효과가 있습니다.
웨딩숍을 지나면서 웨딩드레스를 같이 구경하는 것도 효과 만점이죠.
지나가는 아이를 부럽게 바라본다거나 잠깐 안아보는 것도 좋습니다.
이 정도에도 프로포즈 안하는 남자는 무뚝뚝한 바보거나 당신과의 결혼에 관심이 없을지도 모르는 일
다른 수단을 강구하심이...

∴사랑은 밀고 당겨라..

묘한 맞선작전으로 프로포즈를 망설이는 남자에게 이용하면 백발백중.
그에게 '나 내일 선봐' 라고 이야기해서 '내가 이러다가 놓치는거 아니야' 라는 생각이 들겠끔 만드는 것입니다.
이런 작전을 사용해도 효과가 없는 남성 매우 드문편.

초강수를 두는 방법도 있습니다.
처음부터 결혼 상대와 처음 데이트 시절 '결혼을 빨리 하고 싶다' 또는 '결혼할 상대로 사귀고 싶다'
라고 확실히 말해버리는 겁니다.
혼자서 앓다간 병만 나니까 아예 초강수를 두는 겁니다.
그리고 미래의 설계를 얘기하도록 유도합시다.
결혼하게 되면 이러이러하게 할 것이라는 말들로 채우고 현모양처로서 잘할 수 있다는 면을 보여주는 것입니다.
알뜰주부를 찾는 형이라며, 은행에 같이 가서 적금 붓는 액수 등이 적힌통장을 공개하는 것도 하나의 방법.

영화배우처럼 보일 필요는 없다.
남자가 풍만하고 섹시한 여자에게 본능적으로 끌리는 것은 사실입니다.
그러나 지적인 남자는 이런 본능을 충분히 무시할 수 있으며 오랫동안 사귈 수 있는 더욱
가치있는 속성을지닌 여자를 찾습니다. 애정이 이런 속성 중의 하나이죠.
만약 당신이 남자를 유혹하는데 어려움을 느끼고 있다면 더욱 애정 있게 행동하도록 노력해야 합니다.
당신이 애완동물을 사랑하는 것이 더 쉽다면 남자를 애완동물 대하듯 하는 겁니다.
그를 귀여워 해주고 음식을 주고 사랑해 주는 것이죠^^.
그는 당신에게 예쁜 얼굴을 가진 여자에 비해 10점 정도 더 높은 점수를 줄 겁니다.


즐거워할 줄 알아야 한다.
즐거움은 아름다움보다 더 중요합니다.
남자는 그들이 여자에게 원하는 것에 대해서 얘기할 때, 대부분은 좋은 성격에 대해서 언급하죠.
근본적으로 좋은 성격이란 즐거워할 줄 아는 성품을 말합니다.
남자를 유혹하는데 있어서 즐거워하는 것보다 더 중요한 것은 없죠.
육체적으로나 정신적으로 건강한 남자를 유혹하고 싶다면 당신의 인생을 즐겁게,
유쾌하게 즐길 줄 알아야 합니다.
남자는 자신의 삶에 행복해하는 여자에게 빠지는 경향이 있습니다.
당신의 연인은 심리 치료사나 변호사가 아니라는 점을 명심하십시오.

좋은 인상을 주어라.
평범한 남자는 약간 튀는 여자에게 끌립니다.
그러나 나중에 그가 아내감을 선택할 때는 평범한 여자를 고르죠.
그는 자기의 어머니에게 데려갈 수 있는 그런 여자를 원합니다.
그는 바깥일에 전념할 수 있도록 도와주는 그런 현모양처가 이상형입니다.
그는 기대어 쉴 수 있는 그런 여자를 원합니다.
당신이 신중해질 수 있는 준비가 되었을 때, 당신의 톡톡튀는 행동을 잠재우고
그에게 당신의 책임감 있는 면을 보여 주십시오.
그에게 여생을 함께 보낼 수 있는 그런 타입의 여자임을 보여주십시오.

프로포즈를 실행에 옮기는 여성을 위한 도움말
사실 프로포즈를 유도한다는 것도 쉽지 않죠^^.
그리고 기다리기만 하라니 정말 적성에 맞지 않습니다.
자신도 어쩔 수 없는 자신만을 위한 선택(어떠한 어려움에도 굴하지 않는^^;)
자!! 직접 프로포즈를 해 볼까요?

나는 돌격형 타입

말을 건다
말을 걸 때는 타이밍이 중요.
그가 혼자 있을 때 “잠깐 괜찮아?” 하며 말을 건다.
만일 그가 급한 일이 있는 것 같으면 무리하지 말고 다음 기회에.

애인의 유무를 확인한다
“지금 사귀고 있는 사람이라든지, 좋아하는 사람 있어?” 하고 물어보자.
“있는데…무슨 일?”하고 묻는다면 계속하자.

드디어 고백
간단한 것이 최고.
다음 난을 참고로 그에게 솔직한 자신의 마음을 전하자.
눈으로 말로 그를 생각하는 마음을 표현하자.
“전부터 신경쓰고 있었어”“쭉 좋아했어”가 대표적.
“처음 만났을 때부터 너만을 보고 있었어”라는 구체적인 것도 좋다.
“나 같은 사람도 괜찮다면 사귀고 싶어?”하는 조심스런 말도 잊지 말도록.

그의 반응은?
두근거리는 고백이 끝났으면 다음엔 그의 대답만 남았을 뿐.
그의 말을 놓치지 않도록!

① 대답을 기다린다면:
“음…” 하고 망설이면 대답은 나중에 듣는 편이 나을지도.
그가 “생각할 시간을 줄래?” 하고 말했을 때도 마찬가지.
단, 언제 대답을 들을 수 있을지는 확인하는 것이 좋다.
1~3일 이내로 대답을 들을 수 있도록 하자.

②친구로 지내자고 선언하면:
거절당하지 않은 것만으로도 만족하자.
이제부터는 장기전.
“다음에 전화해도 돼?”라든지, “몇 명이서 놀러 가지 않을래?”하며 부지런히 얘기를 하자.
자꾸자꾸 말을 걸어 자신에 대해 그에게 알려주자.

③거절당한다면:
거절당하면 충격이 있겠지만 “마음을 전할 수 있었던 것만으로도 다행이야”라고 말하자.
끝까지 들어주고 정확하게 대답해준 데 대해 고마워하자.
같은 사람에게 한 번 더 고백하는 것은 피하는 게 좋다.
이제부터는 보는 것만으로 참자.

④OK한다면:
같은 직장에 다닌다면 함께 출퇴근 해보는 것도 좋다.
“다음에 영화 보러 안 갈래?”라든지 “내일 전화해도 돼?”하며 자꾸자꾸 유도해가며 노력하자.

나는 대화형 타입

○○라고 불러도 돼?
그를 부르는 호칭을 바꿔본다.
경칭을 붙이지 않고 이름을 부른다든지, 자신만의 애칭을 붙이면 둘 사이가 특별해지는 느낌이 든다.

전화해도 돼?
OK한다면 정말로 걸어보자.
여럿이 함께 얘기하는 사이에서 1대1로 전화하는 사이가 되는 것은 친밀해진 느낌이 든다.

우리 어울리지?
둘만의 대화 때 시도해보자.
취미나 영화, 스포츠 등의 화제로 분위기가 무르익어 한바탕 웃은 후에, 곧 툭 말한다.
그도 인식할 것이다.

나에 대해 모두 어떻게 생각하고 있을까?
자신의 평판에 대해 궁금해 하는 척하면서 사실은 그의 의견을 들으려는 수법.
그가 당신에 대해 칭찬해준다면 잘될 가능성이 있다.

○○에 데려가 줘
○○에는 장소를 넣는다.
근처의 유원지 등 편하게 갈 수 있는 곳이 좋다.
그가 OK하면, “언제?” 하고 곧장 일정을 정하자.

○○ 같은 사람이 좋아
○○에 그의 이름을 넣는다.
자신이 호의를 갖고 있음을 자연스럽게 전달하는 방법.
칭찬받고 기분 나쁠 사람은 없는 법.
그에게 그런 느낌이 들게 해주자.

친구가 우리 사귀냐고 묻더라
“저번에…” 하면서 대화 중에 자연스럽게 말해본다.
그의 반응은?
좋지 않은 표정을 짓는다면 가망이 없다.
특별히 부정도 하지 않고 웃는다면 가망이 있다.

○○의 애인이 되었으면 좋겠다
○○에 그의 호칭을 넣는다.
그 말만은 절절하게 말하는 것이 포인트.
최후의 마무리 대사이니 농담이 아닌 진실로.

나는 전화 타입 인데요^^.

우선은 이미지 트레이닝 무심코 하는 대화에서 고백 대사로 잘 이어지게.
말할 예정인 대사를 전부 적어서 예습을 충분히.

이름을 대고 시작 읽어내리듯이 하지 않도록 감정을 담아 전달한다.
다음엔 그의 대답을 기다린다.

고백의 말은 확실히 이름을 댄 후, “지금 괜찮아?” 하고 그가 얘기할 수 있는 상황인지를 확인한다.
주위의 잡음이 심하면 목소리가 들리지 않을지도 모른다.

나는 편지 타입이 더 좋더라.

편지 세트는 신중하게 너무 소녀 취향이거나 캐릭터 위주여도 생각해봐야 할 문제.
화려하거나 소박해도 안 되고, 조심스런 센스가 빛나는 것으로.
펜이나 편지를 봉하는 스티커 등도 분위기를 맞춰서.

자기다운 말로 느닷없이 “좋아해”부터 시작되면 그가 놀라고 만다.
상대의 이름→‘전하고 싶은 말이 있어’라는 등의 서두→좋아하게 된 에피소드→고백의 말→
답변 방법에 대한 언급→자신의 이름 식으로 자기다운 말로 도전!

한 번 더 읽어본다 잘못 썼거나 빼먹은 글자는 없는지, 읽기 편한 문장인지 확인한다.
쓴 다음 날에 다시 읽어보고 부끄럽게 생각되지 않으면 그것으로 OK.

그에게 직접 건네준다.
그가 당신의 이름을 몰라도 얼굴을 보면 알아줄지도.
남 앞에서는 피차 부끄럽겠죠?
둘만이 있을 때 건네는 것이 최고.

남은 건 분위기 타입 뿐..

“저와 같은 방향이네요, 우산 하나로 걸어갈까요?”
우산 속은 어쩔 수 없이 둘이 밀착할 수밖에 없는 공간.
원래 남녀가 45cm내에 함께 있으면 마음이 통하는 법이니까 이 때를 적극활용.

“○○님 힘드시죠.”
일상적인 대화로 상대의 마음을 풀어 놓는다.
두 사람이 가까이 있기 때문에 생긴 긴장을 잠시 완화하는 것이다.

“저 사실은 쭉 좋아해왔어요.”
이야기에 빠져서 목적을 잊으면 안된다.
적당한 선에서 이야기를 접자.
표정 관리에 유의하자.
심각한 얼굴로 상대의 관심을 유도하고 잠시간의 침묵을 이용한다.

상대의 반응을 살핀다.
어떤 결과가 나오건 당신은 부끄러울 것이다.
대답을 들었다면 얼른 교통수단을 이용해 자리에서 벗어나자.
Posted by 장안동베짱e :
입맛대로 만드시라-
 
Posted by 장안동베짱e :
지금 사용하고 있는 배포판은..
우분투
30%
 30% [ 74 ]
데비안 (우디,사지,시드 모두포함)
19%
 19% [ 48 ]
페도라
10%
 10% [ 26 ]
레드햇
5%
 5% [ 14 ]
국내 배포판(한소프트, 코어, 눅스원 , 안녕등..)
3%
 3% [ 9 ]
젠투
19%
 19% [ 48 ]
맨드라이브(맨드레이크)
0%
 0% [ 1 ]
FreeBSD (NetBSD,OpenBSD 등 포함..)
6%
 6% [ 15 ]
수세(Suse)
3%
 3% [ 9 ]
Slackware
0%
 0% [ 1 ]
총 투표수 : 245
 
오.. 데비안 기반에, 라이브 시디도 제공하고...
괜찮은데? 오늘 당장 깔아봐야지..흐흣..
 
 
Posted by 장안동베짱e :
 
아직도 십센티는 더 클 것 같은 소년 유지태가
이제는 사랑을 조롱할 수도 있을 만큼
농익을 대로 농익은 여자
이영애와 커플이 되어서
러브스토리를 들려준다는 것이..
처음부터 나는 억지스럽다고 생각했다.

어울리지 않을 것 같았다.
그리고 내 예상은 적중했다.
둘은 헤어졌다.
다행..이다

한때는 상우처럼..
지금은 은수처럼.

이제는 기억도 아련한 첫사랑의 열병을 앓았던 때
나는 더도 말고 덜도 말고
꼭 영화의 상우 같았었다.

그처럼 유머를 모르고
눈치없고..맹목적이고
답답했었다.

지금도 또렷이 기억나는 장면하나.
비 오는 날 추리닝에 맨발에 슬리퍼를 신고
그의 집 창문 앞에서 오기를 부리며 떨고 있던
내 모습.

그 때 내가 사랑했던 사람도
은수처럼 표독(?)했었다.
꽁꽁 언 발을 번연히 보면서도
그는 끝끝내 제 방으로 나를 이끌지 않았다.

이별에 대한 선전포고를 이미 했으니
그뒤의 감정수습은 모두 내 몫이라는 투였다.

당시엔 그 상황이 너무도 서러워
코 끝이 빨개지게 울었었는데..

이제 그 추억은 그냥...멋쩍을 뿐이다.

인생을 살면서 절대 잊혀질 것 같지 않은 장면들이

잊혀지고..

절대 용서될 것 같지 않은 일들이 용서되면서

우리는 여자로 혹은 남자로 성장한다.

누구는 그러한 성장을 성숙이라고도 하고
타락이라고도 말한다.

그러나 나는 다만 과정이라고 말하고 싶다.

하루에도 열두번씩 무조건 어른이 되고 싶던
비린 미성년 시절..

나는 찐한 사랑 한번에 여자가 될 줄 알았었고
실연은 절대로 안 당할 줄 알았었다.

이제는 그런 내 바램들이
당치않은 기대였던 것을 안다.

사람들은 언제나 당면한 입장에 서서
상황을 이해하는 생리가 있다.

상우의 나이를 지나 은수의 나이에 서니,
상우보단 은수가 이해되는 것도
그런 의미에서 순리다.

"라면이나 먹자".."자고 갈래"..라고
노골적으로 유혹하는 은수의 말을 이해 못하고
정말 라면이나 먹고, 잠이나 자는 상우는
어쩌면 처음부터..
은수에겐 버겁게 순수한 남자였는지도 모른다.

조금은 날긋하게 닳은 여자에게
순수는 반갑지 않다.

순수가 사랑을 얼마나 방해하는지
모르는 사람만이 순수를 동경한다.

사랑이 운명이나 숙명이 아닌
일상의 연장선에 있다고 믿는
대개의 경험있는 사람에겐
(사랑의 열정을 몇번씩 반복해서 느껴 본 사람)

순수는 정돈된 일상을 방해하고
그로 인해 사랑을 좀슬게 한다.

상우의 순수가 은수의 일상을 방해하고
사랑을 버겁게 느끼게 하는 요소는 곳곳에 있다.

늦잠을 자고 싶은데 상우는
제가 한 밥을 먹으라고 재촉하고..

다음날 출근을 해야 하는데
새벽녘 서울에서 강릉길을 한달음에 달려와
포옹을 요구하며..

맨정신으로 약속을 하고 찾아와도 안 만나줄 판에
술 취해 급작스레 찾아와
철문을 두드리고 소리를 지른다.
게다가 엉엉대며 울기까지...

그 대목에 이르면 은수가 아닌 제삼자의 입장에서도
은근슬쩍 짜증이 인다.
저만 아프고 저만 힘들지.

어린 남자는 그렇게 이기적이다.

사랑만 하기에 인생은 너무도 버겁다.

다수의 사람들은 은수가 상우를 선택하지 않은 것이
현실적인 가치 기준의 잣대에 의한 것이라고
생각하는 모양이다.
박봉에 초라한 개량 한옥에서 사는
홀시아버지와 매서운 시고모를 옆에 두고
치매를 앓는 할머니를 모셔야만 하는
정말 누가봐도 최악의 결혼조건을 가진 그 남자와
연애는 몰라도
결혼은 절대 할 수 없다는 계산이
은수에게 있었다고 말한다..

나는 그 이유에 반박한다.
은수는 그 남자의 처지보다
무료해지고,
생계가 치명적인 걸 이미 아는 여자에게
사랑만이 전부인 남자는 부담스러웠을 뿐이다.

이제 이 나이에

"사랑이...어떻게 변하니?"

라고

상우처럼 묻는 남자가 내게 온다면..

나 역시 은수처럼
당연히 그 남자를 피해갈 것이다.

아직도 사랑이 안 변한다고
사랑이 전부라고(직장마저 그만둘 만큼)
생각하는 남자와
격한 인생의 긴 여정을 어찌 헤쳐나가겠는가.

은수와 상우의 결별은
그런 의미에서
너무도 다행한 일이다.

- 드라마 작가 노희경-

 
 
Posted by 장안동베짱e :
invalid-file

레지스트리 예제

Posted by 장안동베짱e :

ASCII stands for American Standard Code for Information Interchange.
ASCII는 오래 전에 개발되었는데, 현재 몇몇 기계에서 항상 같은 방법으로 사용되고 있는 것은 아니다.
다음은 처음 개발된 32문자를 포함한 아스키 코드표이다.
ASCII는 처음 teletype를 위해 개발되었으므로 어떤 경우에는 모호하여, 종종 본래의 취지와 다르게 쓰이기도 한다.

ASCII Table

Dec Hx Oct Char Dec Hx Oct Char Dec Hx Oct Char Dec Hx Oct Char
--------------- --------------- --------------- ---------------
0 0 000 NUL (null) 32 20 040 SPACE 64 40 100 @ 96 60 140 `
1 1 001 SOH (start of heading) 33 21 041 ! 65 41 101 A 97 61 141 a
2 2 002 STX (start of text) 34 22 042 " 66 42 102 B 98 62 142 b
3 3 003 ETX (end of text) 35 23 043 # 67 43 103 C 99 63 143 c
4 4 004 EOT (end of transmission) 36 24 044 $ 68 44 104 D 100 64 144 d
5 5 005 ENQ (enquiry) 37 25 045 % 69 45 105 E 101 65 145 e
6 6 006 ACK (acknowledge) 38 26 046 & 70 46 106 F 102 66 146 f
7 7 007 BEL (bell) 39 27 047 ' 71 47 107 G 103 67 147 g
8 8 010 BS (backspace) 40 28 050 ( 72 48 110 H 104 68 150 h
9 9 011 TAB (horizontal tab) 41 29 051 ) 73 49 111 I 105 69 151 i
10 A 012 LF (NL line feed, new line) 42 2A 052 * 74 4A 112 J 106 6A 152 j
11 B 013 VT (vertical tab) 43 2B 053 + 75 4B 113 K 107 6B 153 k
12 C 014 FF (NP form feed, new page) 44 2C 054 , 76 4C 114 L 108 6C 154 l
13 D 015 CR (carriage return) 45 2D 055 - 77 4D 115 M 109 6D 155 m
14 E 016 SO (shift out) 46 2E 056 . 78 4E 116 N 110 6E 156 n
15 F 017 SI (shift in) 47 2F 057 / 79 4F 117 O 111 6F 157 o
16 10 020 DLE (data link escape) 48 30 060 0 80 50 120 P 112 70 160 p
17 11 021 DC1 (device control 1) 49 31 061 1 81 51 121 Q 113 71 161 q
18 12 022 DC2 (device control 2) 50 32 062 2 82 52 122 R 114 72 162 r
19 13 023 DC3 (device control 3) 51 33 063 3 83 53 123 S 115 73 163 s
20 14 024 DC4 (device control 4) 52 34 064 4 84 54 124 T 116 74 164 t
21 15 025 NAK (negative acknowledge) 53 35 065 5 85 55 125 U 117 75 165 u
22 16 026 SYN (synchronous idle) 54 36 066 6 86 56 126 V 118 76 166 v
23 17 027 ETB (end of trans. block) 55 37 067 7 87 57 127 W 119 77 167 w
24 18 030 CAN (cancel) 56 38 070 8 88 58 130 X 120 78 170 x
25 19 031 EM (end of medium) 57 39 071 9 89 59 131 Y 121 79 171 y
26 1A 032 SUB (substitute) 58 3A 072 : 90 5A 132 Z 122 7A 172 z
27 1B 033 ESC (escape) 59 3B 073 ; 91 5B 133 [ 123 7B 173 {
28 1C 034 FS (file separator) 60 3C 074 < 92 5C 134 \ 124 7C 174 |
29 1D 035 GS (group separator) 61 3D 075 = 93 5D 135 ] 125 7D 175 }
30 1E 036 RS (record separator) 62 3E 076 > 94 5E 136 ^ 126 7E 176 ~
31 1F 037 US (unit separator) 63 3F 077 ? 95 5F 137 _ 127 7F 177 DEL

 

확장 ASCII 코드

나중에 추가된 코드 중 하나를 나타내었는데, 모두 이와 같다고 할 수는 없고
다르게 세팅되는 경우도 있지만 가장 일반적으로 사용되는 코드를 나타내었다.

아스키코드

아스키코드

아스키코드

아스키코드

16진수

10진수

16진수

10진수

16진수

10진수

16진수

10진수

00

000

NULL

40

064

@

80

128

?

C0

192

À

01

001

SOH

41

065

A

81

129

?

C1

193

Á

02

002

STX

42

066

B

82

130

?

C2

194

Â

03

003

ETX

43

067

C

83

131

?

C3

195

Ã

04

004

EQT

44

068

D

84

132

?

C4

196

Ä

05

005

ENQ

45

069

E

85

133

C5

197

Å

06

006

ACK

46

070

F

86

134

C6

198

Æ

07

007

BEL

47

071

G

87

135

C7

199

Ç

08

008

BS

48

072

H

88

136

?

C8

200

È

09

009

HT

49

073

I

89

137

C9

201

É

0A

010

LF

4A

074

J

8A

138

?

CA

202

Ê

0B

011

VT

4B

075

K

8B

139

?

CB

203

Ë

0C

012

FF

4C

076

L

8C

140

Œ

CC

204

Ì

0D

013

CR

4D

077

M

8D

141

?

CD

205

Í

0E

014

SO

4E

078

N

8E

142

?

CE

206

Î

0F

015

SI

4F

079

O

8F

143

?

CF

207

Ï

10

016

DLE

50

080

P

90

144

?

D0

208

Ð

11

017

DC1

51

081

Q

91

145

D1

209

Ñ

12

018

DC2

52

082

R

92

146

D2

210

Ò

13

019

DC3

53

083

S

93

147

D3

211

Ó

14

020

DC4

54

084

T

94

148

D4

212

Ô

15

021

NAK

55

085

U

95

149

?

D5

213

Õ

16

022

SYN

56

086

V

96

150

?

D6

214

Ö

17

023

ETB

57

087

W

97

151

?

D7

215

×

18

024

CAN

58

088

X

98

152

?

D8

216

Ø

19

025

EM

59

089

Y

99

153

D9

217

Ù

1A

026

SUB

5A

090

Z

9A

154

?

EA

218

Ú

1B

027

ESC

5B

091

[

9B

155

?

EB

219

Û

1C

028

FS

5C

092

\

9C

156

œ

EC

220

Ü

1D

029

GS

5D

093

]

9D

157

?

ED

221

Ý

1E

030

RS

5E

094

^

9E

158

?

EE

222

Þ

1F

031

US

5F

095

a

9F

159

?

EF

223

ß

20

032

(space)

5F

096

b

9F

160

EF

224

à

21

033

!

5F

097

c

9F

161

¡

EF

225

á

22

034

"

5F

098

b

9F

162

EF

226

â

23

035

#

5F

099

c

9F

163

EF

227

ã

24

036

$

5F

100

d

9F

164

¤

EF

228

ä

25

037

%

5F

101

e

9F

165

EF

229

å

26

038

&

5F

102

f

9F

166

¦

EF

230

æ

27

039

'

5F

103

g

9F

167

§

EF

231

ç

28

040

(

5F

104

h

9F

168

¨

EF

232

è

29

041

)

5F

105

i

9F

169

EF

233

é

2A

042

*

5F

106

j

9F

170

ª

EF

234

ê

2B

043

+

5F

107

k

9F

171

EF

235

ë

2C

044

`

5F

108

l

9F

172

EF

236

ì

2D

045

-

5F

109

m

9F

173

­

EF

237

í

2E

046

.

5F

110

n

9F

174

®

EF

238

î

2F

047

/

5F

111

o

9F

175

&hibar;

EF

239

ï

30

048

0

5F

112

p

9F

176

°

EF

240

ð

31

049

1

5F

113

q

9F

177

±

EF

241

ñ

32

050

2

5F

114

r

9F

178

²

EF

242

ò

33

051

3

5F

115

s

9F

179

³

EF

243

ó

34

052

4

5F

116

t

9F

180

´

EF

244

ô

35

053

5

5F

117

u

9F

181

μ

EF

245

õ

36

054

6

5F

118

v

9F

182

EF

246

ö

37

055

7

5F

119

w

9F

183

·

EF

247

÷

38

056

8

5F

120

x

9F

184

¸

EF

248

ø

39

057

9

5F

121

y

9F

185

¹

EF

249

ù

3A

058

:

5F

122

z

9F

186

º

EF

250

ú

3B

059

;

5F

123

{

9F

187

EF

251

û

3C

060

<

5F

124

|

9F

189

½

EF

252

ü

3D

061

=

5F

125

}

9F

190

¾

EF

253

ý

3E

062

>

5F

126

~

9F

191

¿

EF

254

þ

3F

063

?

5F

127

?

9F

192

À

EF

255

ÿ

 
 
Posted by 장안동베짱e :
출처: http://www.jihyeon.net/blog/?no=21

1. 그날의 기분을 중요시한다.
2. 아침 일찍 일어난다.
3. 자는 시간에 관계없이 일어나는 시간을 일정하게 맞춘다.
4. 아침 일찍 일어나기 힘들다면 차 한잔 마시는 습관으로 시작한다.
5. 일어나서 맨 처음 할 일은 찬물로 세수하는 일이다.
6. 허둥대는 아침이 아닌 5분의 명상으로 아침을 시작한다.
7. 다음날의 계획은 전날 밤에 세운다.
8. 다음날 입을 옷은 미리 챙겨둔다.
9. 자정 전에 무조건 잘 수 있도록 노력한다.
10. 머리를 베개에 묻는 순간 모든 것을 잊어라.
11. 잠 안 오는 밤에 취할 수 있는 가장 좋은 방법은 독서다.
12. 일에 있어서나 사람에 있어서나 범위를 좁혀 선별하되 정해진 것에 집중 투자한다.
13. 10분의 낮잠은 밤잠 한시간의 차이가 있다.
14. 필요한 일과 필요치 않는 일을 구분한다.
15. 통근시간이 매우 생산적인 시간이 될 수 있음을 명심한다.
16. 여유 있는 계획을 세운다.
17. 모든 일에는 데드라인이 있다.
18. 모든 일에는 때가 있다.
19. 모든 계획은 시작시간과 끝시간을 명시한다.
20. 항상 최상의 선택으로 시간을 낭비하지 않는다.

아놀드 베네트의 "아침의 차 한잔이 인생을 결정한다"에서
Posted by 장안동베짱e :
첫번째
 
- Remote Develop Tool
- FTP를 이용해서 해당되는 소스파일과 헤더파일들을 자동으로 읽어와서 프로젝트형식으로 편집할수 있게 한다.
- 이왕이면 오른쪽에 클래스뷰나 파일뷰같은것을 만들어 주는것도 좋을듯..
 
두번째
 
- 네이트온에 싸이월드 바로가기 기능만 뗀거..
- 물론 네이트온을 사용해도 되지만..
- 나중에 메신져 만들때 집어 넣을 기능이기에 미리 구현필요 있음
- 아이디, 비밀번호 인증과정을 거치고 나면, 리스트컨트롤에 친구리스트가 뿌려짐
- 친구중하나를 더블클릭하면 해당 친구의 싸이미니홈피(아님개인홈페이지)로 이동함..
- BUT 자동로긴은 어떻게 할지 알수 없음..
- 추후 메신져로 변형 혹은 메신져와 통합여지있음
 
*메신저 만들때 각자 파일방같은거 제공하면 좋을듯..
(네이트온방식의 자기컴퓨터에 저장하는 방식말고, ftp서버가 있고 거기에 자기 자료를 저장하는 식의...)
- 주로 자료 저장할때 자기가 자기메일로 보내고 이러는 사람 많은데..
- 개인 파일방 만들어 주면 편하게 사용할듯..
 
 
 
 그나저나.. 메신져는 언제 만드노
 
 
 
Posted by 장안동베짱e :




ㅡ☆ㅡ★ㅡ☆ㅡ★ㅡ☆ㅡ★ㅡ☆ㅡ★ㅡ☆ㅡ★ㅡ☆ㅡ★ㅡ☆ㅡ★ㅡ
1. 볶을 재료 준비 : 피망, 양파, 양송이버섯, 미니소세지, 베이컨 썰은 것
2. 떡에 베이컨을 말아서 2개를 1개의 이쑤시개에 꼽아줍니다.
(시중에파는 베이컨을 반 잘라서 사용하세요~)
3. 볶을 재료들을 버터에 볶아줍니다. (소금+후추 조금 뿌려주세요.)
4. 적당히 볶은 후 피자소스(슈퍼에서파는 케찹용기 같은것에 들어있는것)를 뿌려줍니다.
5. 물은 넣지 마시구요. 그 후에 베이컨을 말아논 떡을 넣고 살살 양념을 뭍혀주세요.
중간불에 뚜껑을 덮고 조금 익혀주고~
6. 캔 옥수수를 조금 넣어줍니다.
7. 마지막으로 치즈가루를 살살 뿌려준 후에 뚜껑을 닫고, 작은 불에 조금 둡니다.
8. 치즈가 늘어지면, 맛있게 드시면되요~ ^-^;
 
 
 
아- 베이컨 무쟈게 좋아 하는데=
햄이랑 치즈= 샤르르- 꿀꺽!
먹으면 살살 녹을것 같다!
아- 배고파
Posted by 장안동베짱e :
 
 



make 사용방법 메뉴얼
http://database.sarang.net/study/make/GNU-Make.html


제가 만든 예제인데요 -_-흠;;
대충 쓰셈;


EXEFILE = start
OBJECTS = Entry.o Sniffer.o
SOURCE = Entry.cpp Sniffer.cpp
CC = g++
LIB = -lpcap

run:
$(CC) -c $(SOURCE)

$(CC) -o $(EXEFILE) $(OBJECTS) $(LIB)

rm -rf $(OBJECTS)

Posted by 장안동베짱e :
레드햇 녀석들이 페도라라는 깜찍한 녀석을 만들어 내면서
한글 인코딩을 UTF-8로 바꿔 버렸다 -_-젠장젠장젠장
자기딴엔 비장한 이유가 있었겠지만서도;
지금껏 써왔던 프로그램들은 받아 들이긴 수줍어 해서(?)..
암튼..

먼저 ssh에서 부터 까뒤집자 -_-;


/etc/sysconfig/i18n 화일을 다음과 같이 수정

LANG="en_US"
SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"
SYSFONTACM="iso01"
LC_CTYPE="ko_KR"

참고로 위와같이 하면 영문이 상위고 한글을 쓸수 있는 모드가 됩니다.
한글상위로 할려면

LANG="ko_KR.eucKR"
SUPPORTED="ko_KR.eucKR"
SYSFONT="ko_KR.eucKR"



다음은 vi편집기-!

자신의 Home Directory에 있는 .profile 을 vi 를 이용하여 열어보세요..

그리고 대문자 G를 사용하여 제일 마지막으로 가신 후

LANG=ko
export LANG
Posted by 장안동베짱e :
set vb
set nu
set ai
set ts=4
map <F1> K
map <F2> :20vs ./<CR>:set nonu<CR>
map <F3> :only<CR>
map <F4> =
map <F5> :! ./%<<CR>
map <F6> :w!<CR>
map <F7> :! gcc % -o %<<CR>
map <F8> [i map <F11> ^]
map <F12> ^T

 
F1 도움말보기
F2 탐색기열기
F3 현재 커서가 있는 창 최대화
F4 자동줄맞춤
F5 실행
F6 저장하기
F7 컴파일
F8 함수원형보기
F9
F10
F11 전역변수/구조체/정의상수/함수정의를 추적
F12 전역변수/구조체/정의상수/함수정의를 추적한후 원래 위치로 돌아오기
 
그밖에 알아둬야 할사항
- 프레임이 나눠진 상태에서 ^ww(Ctrl+ww)를 누르면 포커스가 이동된다.
-
Posted by 장안동베짱e :

  HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL );
 
  if( hEvent )
     WaitForSingleObject( hEvent, 86400*1000 ); // 영원히 재울땐 INFINITE
 
  if( hEvent )  {
    CloseHandle( hEvent );
    hEvent = NULL;
  }
 
 
 
아.. 피곤하다..
86400*1000 밀리초 만큼만 자고 싶다..
 
 
 
Posted by 장안동베짱e :
바람둥이는 많은 애인을 잘 만나는 사람이 아니라 잘 헤어지는 사람! 만남도 헤어짐도 깔끔하게 이어가는 방법, 수줍은 당신을 위한 바로 이 책!
---
한국 남자를 위한 사랑 매니지먼트
이정숙 지음  |  청년정신  |  
짝짓기 회사는 있지만 사랑을 컨트롤 해주는 매니지먼트는 없다! 한국 남자들의 사랑과 결혼에 대한 가치관을 바꿔줄 제대로 된 사랑 매니지먼트 교과서! 사랑이 우리를 행복하게 하기보다 아프게 한다고 믿는 것..
가정/생활/요리 > 결혼/출산/성 > 사랑과 성
실용연애전서 여(女) (당신이 연애에 대해 알고 싶어했던 그러나 아무도 가르쳐 주지 않았던 모든 것)
론 루이스, 데이비드 코플랜드 지음  |  서현정 옮김  |  만물상자  |  
행복하고 뜨겁게 연애하는 법, 그리고 반대로 우아하게 이별하는 법 여자가 알고 싶어하는 남자의 모든 것이 남자들의 솔직한 언어로 공개된다. 딱 잘라 말해 선수가 되는 법을 가르쳐주는 아주 실용적인 ..
가정/생활/요리 > 결혼/출산/성 > 사랑과 성
실용연애전서 남(男) (당신이 연애에 대해 알고 싶어했던 그러나 아무도 가르쳐 주지 않았던 모든 것)
론 루이스, 데이비드 코플랜드 지음  |  서현정 옮김  |  만물상자  |  
행복하고 뜨겁게 연애하는 법, 그리고 반대로 우아하게 이별하는 법 남자가 알고 싶어하는 여자의 모든 것이 남자들의 솔직한 언어로 공개된다. 딱 잘라 말해 선수가 되는 법을 가르쳐주는 아주 실용적인 ..
가정/생활/요리 > 결혼/출산/성 > 사랑과 성
리스크 없이 바람 피우기 (바람남녀 실전 노하우)
자비네 에르트만, 불프 슈라이버, 김재화 지음  |  이명희 옮김  |  만물상자  |  
외도는 인류의 역사와 궤를 같이 해온 인간사의 불가피한 현상이다. 그리고 의도했든, 그렇지 않았든 당신이 외도의 길에 들어섰다면, 그때부터는 그 사실을 신(神)말고는 아무도 알 수 없게 해야 하는 것이 제1의 ..
가정/생활/요리 > 결혼/출산/성 > 사랑과 성
마음을 사로잡는 데이트 심리학
크리스 라반, 쥬디 윌리암스 지음  |  김문성 옮김  |  휘닉스  |  
사람들은 누구나 진정한 사랑과 멋진 데이트를 꿈꾼다. 그러나 그 사랑과 데이트를 위해서는 그에 상응하는 연구와 노력, 정열과 용기가 필요하다는 것은 아는지. 저자는 그간 많은 젊은이들과의 상담과 토론을 통해..
가정/생활/요리 > 결혼/출산/성 > 사랑과 성
내 여자와 내 남자를 사로잡는 작업기술
야마토 마야 지음  |  김성기 옮김  |  아라크네  |  
그날이 그날인 당신, 연애의 열정으로 일상을 바꾸자! 하루를 보내면서 ‘아휴, 학교 가기 싫어!’ ‘퇴근하려면 멀었나’ ‘인생이 심심한데 뭐 재미있는 일 없을까’를 입버릇처럼 내뱉는 이유는 무엇일까? 이..
가정/생활/요리 > 결혼/출산/성 > 사랑과 성
Posted by 장안동베짱e :
 
Posted by 장안동베짱e :
Posted by 장안동베짱e :

 

 

 

아이스 스톰 보러가기

 

음.. 역시 자연의 힘은 대단 한것 같다..

사진 보다 보면 스포츠카 몇대가 꽁꽁 얼어 있던데..

차주인 진짜 불쌍하다.. 쯧쯧..

 
 
 
 
Posted by 장안동베짱e :
좀 이상한 부분 있으면 지적해주시고,
혹시 이소스를 사용하실려면,
리플달아주시고 가져가세요~ ^^흣





Posted by 장안동베짱e :
Posted by 장안동베짱e :
출처 : ♡GlitterSpring♡( http://blog.naver.com/skjykd/80011536999 )

사회에 존재하는 이런저런 산업를 크게 둘로 나누어보면 이렇게 나뉜다.

1. 제로섬 산업.
2. 논제로섬 산업.

제로섬 사업은 간단히 증권시장을 연상하면 된다. 누군가 웃는다면 누군가는 우는 체제이다. 새로운 부가가치를 생산해 판매하는 산업이 아니라 기존의 부가가치를 운용해 더 많은 부가가치를 자신에게 이동시키는 산업이다. 때문에 이 산업의 종사자는 아무리 돈을 많이 벌어도 국가의 부에는 영향을 주지 않는다. 상자안의 빵이 옮겨다닐뿐 빵 자체를 만들어내지는 못하는 것이다.

논제로섬 산업은 반대이다. 이 산업의 목표는 새로운 부가가치를 창출하거나 생산해 그것을 판매하여 이익을 보는 것이다. 이 업계 종사자의 부는 곧 국가의 부다. 논제로섬 산업이 발달하면 그것은 곧 국가의 부로 연결된다. 흔히 말하는 IT업계가 바로 이쪽이다. 언론에서 툭하면 '대한민국의 미래는 IT에 있다'라고 하는 것도 다 이런 이유에서이다.

그런데 생각해 보자. 대한민국에서 우대받는 직업에는 어떤 것이 있을까? 주로 끝에 '사'가 붙는 의사, 약사, 변호사, 판사, 회계사, 변리사 등등은 물론 딜러, 펀드매니저 등의 금융이나 대기업의 간부, 전문직 정도일 것이다. 여기서 찾아보자. 이중에 제로섬 직업은 몇이고 논제로섬 직업은 몇일까?

대한민국의 일그러진 엘리트 주의에서는 논제로섬 직업은 대우받지 못한다.

관념적인 말이 아니다. 내 주위의 일이다. 흔히 말하는 그 잘난 일류대의 공학, 과학인들이 과연 얼마나 논제로섬 직업에 종사하고 있을것 같은가? 명색이 대한민국에서 제일 우수한 IT교육을 받은 인재들이 죄다 제로섬 게임에 미쳐(혹은 떠밀려) 아무생각없이 달려가고 있다.

서울대 공대 나와 대기업에 입사하면 실무로 뭘하는지 아나? 전화받는다. AS부서에서. 대기업 기술개발 관련은 해외파가 아니면 명함도 못내밀고 실무생산은 눈높은 신입사원들이 기피한다. 지금 대한민국 IT가 대단하다 떠들고 있지만 실제 업계 종사자들은 다 안다. 현재의 강세는 대한민국의 지식적 힘이 아닌 해외의 힘이며 대한민국의 자본이 아닌 해외 자본의 이익이다. 그나마도 위험하다는 사실을 말이다.

알기쉽게 예를 들어보자. 가장 IT스러운 프로그래머의 세계를 까발려본다.

대한민국 프로그래머중 40 넘어서까지 현역(코딩활동)을 유지하는 사람이 얼마나 될 것 같은가? 거의 제로라 보면 된다. 일반적인 업계에서는 보통 40을 업무의 전성기라고 한다. 경험과 패기와 능력이 조화를 이룬 시기라는 말이다. 그런데 대한민국의 프로그래머들은 모두 40 이전에 어떻게 해서는 발을 빼려 아우성친다. 아니면 해외로 나가든가. 도대체 왜그럴까.

프로그래머는 전문직이다. 그런데 대우는 단순노무직 대우를 받는다. 하루 10시간 근무, 주 6일출근하는 2년차 프로그래머 연봉이 얼마일것 같나? 업계에 따라 조금씩 다른데 가장 열악하다는 게임업계를 들자면 보통 연봉 2000이 안된다. 1800~2000사이를 넘나든다. 세칭 대기업 생산직 근로자들의 딱 반이다.

문제는 인센티브다. 실리콘밸리에서는 뛰어난 아이디어와 실력으로 좋은 소프트웨어를 개발해 부자가 된 프로그래머들이 널리고 널렸다. 거기가면 50대 프로그래머들도 발에 채인다. 왜냐고? 부자가 될 기회가 많으니까.

그런대 한국은 웃기게도 대박이 나오면 그 열매는 경영진들이 다 가져간다. 개발직 중에서는 기획자만이 그 단맛을 볼 뿐, 그래픽이나 프로그래밍 파트는 손가락만 빨고 있어야 한다. 인센티브? 허황된 꿈이다. 한국에서는.

해외 프로그래머들과 이야기를 해보면 그쪽에서는 이런 한국의 IT문화를 신기하게 여기는 분위기다. 어느 업계에서건, 어느 분야에서건 스타는 있다. 그 스타의 모습을 통해 신입들은 의욕을 다지게 되는데... 생각해보라. 한국에 스타 프로그래머가 있는가? 유일(말 그대로 유일)한 이름이 안철수다. 그러나 그분도 얼마전 부패청산 어쩌고 협의에 맞아 쓴소리를 남기셨다. 얼마나 한스러우시면 그럴까. 명색이 IT강국이라는 대한민국, 그중에서도 가장 IT스러운 프로그램 분야에서 한국은 스타가 없다. 즉 새로 업계에 발을 붙히는 사람들이 꿈을 둘 곳이 없는 것이다. 전문지식과 실력과 막중한 근무는 요구하면서도 그 결과를 돌려주는데는 인색하다. 이것이 바로 현실이다.

대한민국에서 실제 기술개발하고 코딩하는 사람들중 과연 세칭 일류대 출신이라 하는 사람들은 거의 없다. 대기업 연구소라면 모를까. 그 외는 전멸에 가깝다. 엘리트라 자부하는 사람들은 대부분 '사'자가 붙는 직업이나 대기업으로 가 실무와 관계없는 관리쪽에 들어간다. 물론 학력이 실력과 정비례하는 것은 아니지만 일반적인 기준에 맞추어 생각한다면 참으로 암울한 현실이 아닐 수 없다. 이는 모든 IT 산업의 전반적인 특징이다. 실무진은 업계의 허리다. 그런데 그 허리가 너무나 부실하다는 점이 문제다. 대한민국은 모래위에 남의 돈 빌려 대궐같은 IT집을 지어놓고 '나좀봐라' 떵떵거리는 모습이다. 웃음이 절로 나온다.

지금이야 몇몇 대기업의 약진이라는 화려한 포장지가 있지만 이것이 과연 얼마나 갈까. 그 대기업의 약진도 따지고 보면 해외의 기술력과 자본에 반이상 종속된 상태이다. 눈가리고 아웅하는 꼴이다. 그런데 어떻게든 경영진과 정치인들은 이것을 자신의 치적으로 삼고자 취약점은 외면한채 과대포장시켜 홍보하기에만 들떠 있다.
더불어 대기업의 횡포도 끝이 없다. 이미 대기업 노조의 밥벌이를 하청업체가 책임진다는 사실은 공공연한 사실이다. 더불어 하청업체의 영업이익이 조금이라도 우수하면 바로 대기업의 감찰단이 들이닥친다는 사실도 안철수님의 인터뷰로 까발려졌다. 중소업체가 대기업에 제안서 하나 넣어볼라치면 전 사원의 학력, 경력등은 기본적으로 첨부해야 한다. 해외에서는 웃기는 비상식이 대한민국에선 상식으로 통한다. 가장 국제화되었다는 IT업계에서 말이다.

얼마안가 망할 것이다. 거품이 빠지고 그나마 버텨주던 기술개발인들이 못보티고 은퇴하는 순간이 대한민국의 IT가 끝장나는 순간이다. 정부와 기업들도 한몫하기로 했다. 그나마 경쟁력의 근원중 하나이던 인터넷을 종량제로 바꾼다고 하니 않는가. 정보와 이익의 독점이 미덕이라는 제로섬 산업의 마인드가 이제 논제로섬 산업을 뒤흔들고 있다.

솔직히, 나는 즐겁다. 업계의 인력부족이 심각해지고 질적, 양적인 공백이 심화될수록 나는 즐겁다. 세칭 일류대 공대 나와 동기들과는 달리 돈키호테처럼 벤처로 뛰어들때만 해도 상황이 이럴줄은 상상도 못했으니까. 물론 일하기 시작한 몇개월간은 그 암울함에 어려워했지만 지금 생각해보면 오히려 좋은 기회라고 느껴진다. 의욕이 현실앞에 무너지나 걱정도 했지만 점점 늘어나는 스카웃 제의에 근심은 사라졌다. 어디든 그렇지만 희소성은 늘 각광받기 마련이니까.

대한민국의 영재들이여, 부디 나를 위해 계속 IT를 기피하고 경영이나 '사'자로 가주시길.
Posted by 장안동베짱e :
분노의 전화기
 
 
 
 
분노의 푸쉬업
 
 
 
  
분노의 양치질
 
 
 
분노의 댄스
 
 
 
분노의 달리기
 
 
Posted by 장안동베짱e :
출처 : 아침은 먹고 담배는 안묵는다. ( http://www.cyworld.com/microstrong )
Posted by 장안동베짱e :
케이스 도구는 양날의 검이다. 활용도에 따라서 소프트웨어를 죽일 수 도 있다. 래쇼날 로즈(이하 로즈) 같은 케이스 도구는 능숙하게 다룰 수 있어야 되기까지 많은 학습 곡선을 필요로 한다. 능숙해진 다음에도 여전히 불편하다.

하지만 IDE와 통합된 케이스 도구는 코드의 자동 생성 등의 많은 편리한 도구를 제공한다. IDE와 통합된 케이스 도구는 UML이라는 것에 너무 얽매이지만 않고 자유롭게만 사용한다면 아주 훌륭한 프로젝트 도우미가 될 수 있다.

전통적으로 MS의 개발 플랫폼에서 사용하는 개발 도구는 MS가 100% 독점하다시피 해 왔다. STL이나 MFC를 개발하거나 사용하는 도구는 거의 비주얼 C++가 독점적이었고, COM 기반의 개발을 위해 사용되는 도구는 거의가 비주얼 베이직이었다(COM 개발을 위해 비주얼 C++를 사용하는 경우도 많이 봤지만 그 당시 이슈가 되던 RAD와는 거리가 먼 환경이었다). 물론 볼랜드의 델파이 등을 많이 사용하기도 했지만 MS의 막강한 개발 도구 비주얼 스튜디오를 넘기에는 벅차 보였다.

닷넷 환경이 발표되고, 닷넷이 산업계에서 서서히 자리를 잡아가자 닷넷 개발 도구의 필요성이 절실해 졌고, 당연히 MS의 비주얼 스튜디오 닷넷이 닷넷 개발 도구의 최강자 자리를 당연히(!) 차지했다. 사실, 비주얼 스튜디오 닷넷이 없으면 닷넷 개발이 불가능하다고 생각하는 사람들도 많다.

볼랜드가 C# 빌더 등의 닷넷 환경을 지원하는 도구를 내 놓았고, 기타 여러 벤더들이 제품을 출시했지만 MS의 아성을 무너트리기에는 역부족이다. 비주얼 스튜디오 닷넷은 닷넷 환경이 존재하는 한 닷넷 기반 IDE의 최강자로서 그 자리를 내놓지는 않을 듯 하다.

그렇다면 비주얼 스튜디오 닷넷에는 약점이 없을까? 아니다, 분명히 약점은 존재한다. 그것도 아주 커다란, 치명적인 약점이 있다. MS는 닷넷 환경을 분명한 객체지향 개발 환경(닷넷 환경에서의 CBD는 객체지향이 없이는 존재할 수 없다)이라고 했다. 객체지향 개발 환경이라면 객체지향 설계 도구가 없다면 그 활용 범위가 반감될 수밖에 없는데, 비주얼 스튜디오 닷넷 엔터프라이즈 아키텍트 버전에 포함된 비지오가 어느 정도 그런 기능을 해 주긴 하지만, 다른 객체지향 개발 도구인 로즈나 볼랜드 투게더(이하 투게더) 등의 편리함과 기능성에는 결코 미치지 못한다.

설계 도구와 개발 도구의 진정한 결합. 이상적인 환경이지만 사실 구현하기 어려운 개발 환경임에 틀림없다. 비주얼 스튜디오 닷넷은 분명 막강한 개발 환경이고, 비주얼 스튜디오 닷넷을 사용하면서 투게더 또는 로즈 같은 개발 도구를 같이 사용할 수는 없을까 하는 생각을 누구나 한번쯤은 해 보았을 것이다. 정말 그럴 수 있을까? 대답은 "물론 있다"이다. 로즈와 투게더는 비주얼 스튜디오 닷넷 XDE를 제공한다(물론 구입해야 한다).

래쇼날 로즈 2000 XDE
객체지향 모델링 도구 중 가장 유명하며, 많이 사용되는 도구인 로즈는 2002년 MS의 비주얼 스튜디오 닷넷에 애드인되어 사용될 수 있는 ‘래쇼날 로즈 2000 XDE for 비주얼 스튜디오 닷넷’을 발표했다(어찌된 일인지 아는 사람도 별로 없고 사용하는 사람은 더더욱 없다). 로즈 XDE를 가지고 있다면 그 자리에서 설치해 보기를 바란다. 물론 설치하는 시스템에 비주얼 스튜디오 닷넷이 설치되어 있어야 한다.

<화면 1> 로즈가 설치된 비주얼 스튜디오 닷넷 2003

로즈를 처음 설치하고 나면 처음엔 아무것도 없다. 도구상자에 뭔가 추가된 것도 아니고, 특별히 뭔가가 설치되었다는 느낌을 받을 수가 없는데(굳이 뭔가 설치되었다는 느낌이라면 아마 비주얼 스튜디오 닷넷의 실행 속도가 눈에 띄게 느려졌다는 느낌이 될 것이다) 솔루션 탐색기를 눈여겨 보면 평소에 볼 수 없던 아이콘이 하나 생겨있음을 알 수 있다. 그 아이콘을 주저 없이 클릭해 보자.

<화면 2> 추가된 동기화 아이콘

동기화 아이콘을 클릭하면 로즈와 비주얼 스튜디오 닷넷이 동기화되어 mdx 파일을 생성한다. 그리고 Model Explorer 창이 새로 생기고 프로젝트에 포함되어 있는 개체들을 탐색할 수 있게 해준다.

<화면 3> 로즈 XDE를 이용하여 Iterator 패턴을 디자인한 모습

로즈를 사용하여 모델링을 어느 정도 마쳤으면, 다시 동기화 버튼을 눌러 순 공학할 수 있다.

<화면 4> 로즈가 생성한 C# 코드

감동의 기능

[1] 너무 깔끔한 코드를 생성하고 닷넷 환경에서 권장하는 주석 내용들을 그대로 생성해준다. 다른 도구들은 생성한 코드의 indentation이 잘 되지 않거나 참조한 라이브러리의 네임 스페이스를 제대로 표시하지 않는 경우가 많은데, 그런 단점이 사라졌다.

[2] 참조한 라이브러리의 개체들을 모두 설계에 사용할 수 있게 해준다. 다른 모델링 도구들은 기본으로 포함되거나 직접 작성한 개체들만이 사용가능 한 경우가 대부분인데, 최상의 도구다운 기능을 보여준다.

[3] 깔끔하고 예쁜 출력을 지원한다. 다른 설계 도구의 경우 한 페이지 또는 두 페이지에 깔끔하게 출력할 수 있는 기능에 대한 지원이 부족한데, 깔끔하고 예쁘장한 산출물을 만들 수 있도록 도와준다.

[4] ASP.NET/ASP/Service Page 들에 대한 설계를 지원한다. Web Presentation Pattern을 응용한 설계가 필요할 때 아주 유용하다.

단점이라면, C#으로 작성한 메쏘드의 수정이 아주 불편하다. 또한, RUP를 너무 강조하는 경향이 있어 닷넷의 빠른 개발과는 어울리지 않는 부분이 엿보이고, 일일이 동기화를 해 주어야 코드와 설계가 연동이 되는데, 에러를 자주 발생하여 동기화가 되지 않는 경우가 빈번히 발생한다.

볼랜드 투게더
비주얼 스튜디오 닷넷에서 다른 유명한 설계 도구인 투게더를 사용할 수 있다. 투게더 역시 로즈와 마찬가지로 비주얼 스튜디오 닷넷에 애드인되어 설치된다. ‘볼랜드 투게더 for 비주얼 스튜디오 닷넷 2.0’을 설치하면 비주얼 스튜디오 닷넷에 투게더 VS.NET Model View라는 창이 생성된다.

<화면 5> 투게더 for 비주얼 스튜디오 닷넷 Model View

또한 솔루션 탐색기에 ModelSupport라는 폴더가 생성되고 폴더 내부에는 .txvpak이라는 확장자를 가지는 모델 파일이 생성된다. 이 파일을 더블클릭하여 모델링 도구를 사용하여 설계할 수 있는 설계 창을 열 수 있다.

<화면 6> 투게더를 사용해서 Iterator 패턴을 디자인 한 모습

투게더는 로즈와 달리, 코드의 실시간 생성을 지원한다. <화면 6>에서 보이는 클래스 아이콘을 더블클릭하면 코드를 곧 바로 생성하게 된다. 코드를 수정하건, 설계를 수정하건 간에 설계 또는 코드의 수정 사항이 즉시 상호간에 적용되게 되어있다.

감동의 기능


[1] 필자가 투게더를 사용해 보고 가장 감동적이었던 기능은 시퀀스 다이어그램을 실시간으로 생성해 주는 기능이었다. 메쏘드가 특정 객체들을 사용하도록 구성되었으면, 투게더는 그 메쏘드의 시퀀스 다이어그램을 아주 믿을만한 수준으로 자동 생성해 준다. <화면 7>은 Petshop 3.0의 AccountController 클래스의 CreateAccount 메쏘드의 시퀀스를 자동 생성한 것이다.

<화면 7> 자동 생성한 시퀀스 다이어그램


[2] 여러 디자인 패턴에 기반한 설계를 지원한다(로즈 역시 이 기능을 지원한다). GOF 디자인 패턴에 기반하여 설계를 하고자 하면 투게더는 디자인 패턴에서 각 객체들의 역할을 보여주며 각 역할을 하는 객체를 추가하고 삭제하는 Node by Pattern 도구를 지원한다. 투게더는 디자인패턴에 기반한 설계를 쉽고 오류 없이 할 수 있도록 도와주며 특히 디자인 패턴을 공부하는 사람에게 아주 유용한 도구가 될 수 있다.

단점이라면 생성된 코드가 그다지 깔끔하지 않아 재 정렬을 해줘야 한다는 점 등이다. 앞에서 설명한 두 가지 도구의 치명적인 단점이 하나 있다. 닷넷 환경에서는 실행할 때 참조되는 라이브러리를 복사하고 실행시 참조하므로 개발 중 라이브러리를 수정하고 다시 컴파일하여도 누군가 파일을 사용 중이기 때문에 덮어쓸 수 없다는 메시지를 절대로 보여주지 않는다. 하지만 앞의 두 도구는 모델링에 사용하고 있는 참조되는 라이브러리를 ‘물고’있기 때문에 참조하는 프로젝트를 종료하고 컴파일한 후 다시 비주얼 스튜디오 닷넷을 실행하여 계속 진행해야 한다.

그리고 전통적으로 닷넷 개발에서는 RUP 같은 개발 방법론이 사용되지 않아, 만약 UML을 그렇게 많이 사용하지 않는 개발자라거나 다른 개발 방법론을 준수하는(MSF 등의) 프로젝트라면 사용할 수 있는 다이어그램은 클래스 다이어그램뿐이고, 너무 많은 도구를 제공함으로서 개발에 혼란이 오며, 비주얼 스튜디오 닷넷 자체가 너무 느려져서 개발자의 '성질'에 나쁜 영향을 끼칠 수 있다는 것이다.

비주얼 스튜디오 닷넷 2005에 포함된 모델링 도구
MS도 닷넷 환경이 객체지향 환경이고, 객체를 모델링 할 수 있는 통합된 개발 도구가 필요하다는 것을 모를 리가 없다. 그래서 MS는 비주얼 스튜디오 닷넷의 차기 버전인 비주얼 스튜디오 닷넷 2005에 그런 모델링 도구를 추가했다(전체적으로는 투게더와 비슷한 모습이고, 필자가 현재 기사를 작성하고 있는 시점에서는 클래스 다이어그램 기능 이외의 기능은 들어있지 않다).

비주얼 스튜디오 닷넷 2005의 클래스 다이어그램 기능을 알아보자. 비주얼 스튜디오 닷넷 2005는 특별히 이전 버전과 비교해서 달라진 기능이 없다. 웹 프로젝트를 다른 프로젝트와 구분해서 생성하는 정도가 외관상으로 볼 때 달라진 기능이라 할 것이다. 비주얼 스튜디오 닷넷에서 클래스 다이어그램을 그리고 실시간으로 변경될 수 있는 기능을 사용하려 한다면 이전 버전에서 새 항목 추가 메뉴를 선택하는 것과 같이 한다. 새 항목 추가 다이얼로그 박스를 유심히 살펴보면 클래스 다이어그램이라는 항목 아이콘이 보이고 그 항목을 사용하여 클래스 다이어그램을 작성할 수 있다.

<화면 8> 비주얼 스튜디오 닷넷 2005의 새 항목 추가 다이얼로그 박스

<화면 9> 비주얼 스튜디오 닷넷 2005를 사용해서 Iterator 패턴을 디자인 한 모습

장점

[1] 아무래도 비주얼 스튜디오 닷넷에 애드인된 것이 아닌 빌트인된 모델링 도구이다 보니 애드인된 도구보다는 강한 결합성을 가진다. 빌트인되었을 때의 가장 큰 기대점은 아무래도 성능적인 측면인데 아직 베타 버전이기에 평가 내리기가 이른 듯 하다. 하지만 꽤 만족할만한 성능을 보여주고 있으며, C# 또는 비주얼 베이직 닷넷에 종속적인 멤버들만을 포함하므로 닷넷 개발에 어울리는 도구가 될 듯 하다.

[2] 비주얼 스튜디오 닷넷에 포함된 도구이다 보니 닷넷 개발에 가장 어울리는 코드를 생성하고 다른 도구들과 통합하여 사용할 수 있다. 닷넷에 추가된 수많은 새로운 개념들과 도구들을 사용할 수 있다.

[3] 비주얼 스튜디오 닷넷에는 지면 관계상 다 소개할 수는 없지만 모델링에 관계된 많은 새로운 도구들이 추가되었다. XML 디자인이나 데이터베이스 디자인, 배포 디자인까지 비주얼 스튜디오 닷넷에서 할 수 있다. 이런 기능들은 평소 비주얼 스튜디오를 사용하던 개발자들에게 아주 친숙한 환경을 제공해 줄 수 있다.

단점이라면, 그 외에 아무것도 없다는 것이다. 또한, 현재 베타 버전에서는 다른 라이브러리에 포함된 개체들을 클래스 다이어그램에 포함하는 인터페이스가 상당히 불편하다. 이는 개선되어야 할 점이다. 사실 투게더나 로즈같은 훌륭한 도구들을 사용하던 입장에서 비주얼 스튜디오 닷넷 2005의 설계 도구를 테스트 하는 입장에서는 전혀 새로울 것도 없고 감동적일 것도 없다.

또한 MS가 자사의 객체지향 개발 방법론을 연구하고 있다는 소문이 풍문에 들려오는 것을 보면, 정식 제품에는 다른 도구가 추가될 지도 모르고, 로즈나 투게더 같은 도구 정도의 많은 기능은 아니더라도 다른 많은 도구들이 추가될 것으로 보인다.

독이 될 수도 갈라드리엘의 별이 될수도
UML은 좋은 도구다. 하지만 대부분의 개발 팀에는 도움이 되기보다는 방해가 되기 일쑤다. UML에는 너무나 많은 것이 있고, 다 활용하기는 벅차고, 그렇다고 사용하지 않기에는 또 뭔가 빠진 듯한 느낌이 드는 것이 그것이다. 늘 절제하는 마음으로 UML을 사용한다면, UML은 아주 좋은 도구가 된다.

필자는 항상 이런 얘기를 한다. "로즈가 설치되어 있는 책상 위에는 항상 연필과 지우개, 그리고 종이가 있어야 한다" 특히 개발자의 입장에서는 UML이라는 도구는 독이 될 때는 한 모금에 사람을 죽일 수도 있는 치명적이 독이 될 수도, 또는 길을 안내해주는 갈라드리엘의 별이 될 수도 있다.@

* 이 기사는 ZDNet Korea의 제휴매체인 마이크로소프트웨어에 게재된 내용입니다.
Posted by 장안동베짱e :
88년은 필자가 한창 8비트 컴퓨터였던 MSX2에 빠져있던 시기였다. 그 당시 교육용 컴퓨터로 16비트 컴퓨터가 채택되어 8비트 컴퓨터의 열렬한 지지자였던 필자의 가슴에 상처(?)가 되었던 기억이 난다.

10여년이 지난 지금 컴퓨터는 발전에 발전을 거듭해 64비트 CPU와 64비트 운영체제가 등장했다. 본 연재에서는 3회에 걸쳐 이제 곧 대중화될 64비트 윈도우에서 프로그래밍을 하기 위한 가이드를 제공한다. 부디 필자의 8비트 시절과 같은 실수를 범하지 말고 좀 더 넓어진 64비트 메트릭스에서 네오를 찾을 수 있기를 바란다.

연재 가이드

운영체제 : 윈도우 XP 64비트 에디션, 윈도우 2003 64비트 에디션
개발도구 : 에디터, 32/64비트 C/C++ 컴파일러
기초지식 : C/C++ 프로그래밍, 윈도우 구조 이해
응용분야 : 64비트 윈도우에서 동작하는 모든 프로그램
얼마 전 미국 시애틀 근교 레드몬드에 위치한 MS 본사에서는 인텔과 AMD 및 MS 개발자들이 주제 발표자로 나와 다양한 64비트 컴퓨팅 관련 주제를 다룬 64비트 개발자 세미나를 개최했다. 세미나에 참석한 MS 개발자들은 “64비트 컴퓨터에서 프로그래밍을 구현하는 것이 그렇게 어려운 일이 아니다”라고 설명했다.

16비트에서 32비트로 바뀔 때에 비해 32비트에서 64비트로 가기 위해 필요한 일의 양은 상당히 적을 것이라고 예상하고 있었다. 하지만 쉽다고 해서 아주 할일이 없다는 이야기는 아니다. 현재 32비트 윈도우에서 사용되는 가장 대중적인 CPU는 인텔 호환의 32비트 CPU(AMD도 인텔 호환이었다)이다. 32비트 프로그램을 제작할 때 기존 개발자는 하나의 소스를 작성하고 단 하나의 바이너리만을 생성하면 되었다.

그러나 64비트 윈도우에서 대중화된 64비트 CPU는 크게 두 가지 종류로 구분된다. IA64과 x64이다. IA64는 인텔에서 만든 아이태니엄을 기반으로 하며 개인 사용자보다는 기업 환경과 고성능 컴퓨팅을 목표로 하고 있다. x64는 AMD64를 기반으로 하고 있으며 32비트의 호환성과 64비트의 높은 성능을 목표로 하고 있다.

현재는 인텔에서 EM64T라는 AMD64 CPU의 클론을 제작할 만큼 x64가 대중적인 선호 측면에서 조금 더 앞서 있는 상황이다. 인텔의 시장 예측의 실패라고 할 수도 있는데, MS는 인텔이 주도한 IA64 시스템 대신 미래에는 <그림 1>과 같이 x64 시스템이 주류가 될 것으로 예상하고 있다.

<그림 1> 64비트 시스템의 현재와 미래 동향

IA64 또는 x64가 인기를 얼마나 더 많이 끄는가는 사실 개발자에게 그렇게 큰 관심사는 아니다. 단지 이렇게 두 부류의 64비트 시스템으로 나누어진 상황은 사용자 입장에서야 CPU의 종류가 다양해진 만큼 선택의 폭이 넓어져서 좋을 수 있지만 개발자 입장에서는 조금은 곤혹스러운 일이다.

왜냐하면 생성해내야 할 바이너리의 수가 두 가지 더 증가하기 때문이다. 기존의 32비트 시절에는 하나의 소스로 하나의 바이너리만 생성하면 되지만 앞으로 다가올 가까운 미래에는 하나의 소스로 32비트 바이너리, IA64 바이너리, x64 바이너리를 모두 생성해야 하기 때문에 개발자들의 부담은 더 커지게 된다.

64비트 CPU 정보 얻어오기
64비트 윈도우에서 내 시스템의 CPU가 인텔의 IA64인지 x64인지를 알고 싶다면 어떻게 해야 할까? GetNativeSystemInfo() 함수를 이용하면 CPU의 종류를 알아 낼 수 있다. 한 가지 주의할 점은 64비트 윈도우에서수행되는 32비트 프로세스는 GetNativeSystemInfo() 함수를 이용해야만 정확한 CPU 종류를 얻어 올수 있고, 64비트 프로세스라면 GetSystemInfo() 함수를 사용해도 무방하다. 64비트 프로세스에서 GetNativeSystemInfo() 함수를 사용하면 내부적으로 GetSystemInfo() 함수를 호출해 결과를 리턴한다.

<표 1> 64비트 윈도우에서 CPU 종류를 얻어올 수 있는 함수

이 밖에도 32비트 윈도우에서는 CPU를 32개까지 지원했지만 64비트 윈도우에서는 최대 64개까지 지원한다. 윈도우에서 내부적으로 CPU 정보를 유지할 때 각 비트별로 한 CPU씩 할당하기 때문에 64비트 윈도우에서는 더 많은 64개의 CPU를 지원할 수 있는 것이다.

주의할 점은 64비트 윈도우에서 실행되는 32비트 프로세스는 뒤에 설명할 WOW64가 CPU에 대한 정보를 32비트로 제한하기 때문에 32개의 CPU만 사용할 수 있다. 예를 들어 64비트 윈도우에 64개의 CPU가 있어도 32비트 프로세스에서 GetProcessAffinityMask() 함수나 SetThreadAffinityMask() 같은 함수를 이용하면 32개의 CPU에 대해서만 값을 얻어오거나 설정할 수 있다.

윈도우 안의 또 하나의 윈도우 WOW64
우리는 아직 32비트의 시대에 살고 있으며 가장 많이 사용하는 워드프로세서, 게임, 인터넷 메신저 모두 32비트 프로그램이다. 한때 스티븐 잡스가 만든 혁신적인 워크스테이션과 운영체제였던 넥스트와 넥스트스텝이 컴퓨터 업계에 큰 충격으로 다가온 적이 있었다.

그러나 그것들이 실패할 수밖에 없었던 가장 큰 이유 중 하나가 실제 소비가가 쓸 수 있는 응용 소프트웨어가 극히 적었다는 점이다. 이와 같이 무언가 새로운 것을 만들 때 이상적인 개념을 실체화하는 것도 중요하지만 이전 것에 대한 호환성을 제공하지 못한다면 결국 실패할 수밖에 없다.

호환성이 기술과 시장에 큰 영향을 끼친다는 것은 아이태니엄과 아이태니엄2로 64비트 CPU의 독자 노선을 걷던 독불장군 인텔이 결국 호환성을 중시한 AMD64 진영의 인기 앞에 승복하고 오히려 EM64T라는 클론 CPU를 만들어야 했다는 것에서도 알 수 있다. 즉, 사용자에게 사용되지 않고 팔리지 않는 기술은 사장되기 쉽다. MS는 이런 사실을 예전부터 너무나 잘 알고 있었다. MS-DOS에서 윈도우로 넘어갈 때도 새로운 기술보다는 이전 버전의 하위 호환성을 선택했고 결국 완전한 개인 사용자용 32비트 운영체제는 윈도우 2000에 와서야 빛을 볼 수 있었다.

이렇듯 호환성을 중시하는 MS는 새로운 64비트 윈도우에서 기존의 32비트 프로그램이 동작하도록 하기 위해 WOW(Windows On Windows)64를 탑재하고 있다. 64비트 윈도우는 대다수의 응용 프로그램이 완전한 64비트로 포팅되기 전까지 WOW를 통해 32비트 응용 프로그램을 사용할 수 있도록 하고 있다.

그러나 모든 경우에 호환성이 우선시되는 것은 아니다. 64비트 윈도우에서는 16비트 프로세스는 더 이상 동작할 수 없으며 커널모드 드라이버는 WOW64와 같은 에뮬레이션 레이어가 존재하지 않아서 반드시 64비트로 포팅해야 한다. 결론적으로 64비트 윈도우에서는 WOW64를 통해 수행되는 32비트 프로세스와 64비트 윈도우 상에서 곧바로 수행되는 64비트 프로세스가 모두 동작할 수 있다.

WOW64의 구성과 동작 방식
WOW64는 커널모드가 아닌 사용자모드에서 동작하며, 커널모드와 기존의 x86 버전의 Ntdll.dll 사이에 위치해서 32비트 응용 프로그램의 API 호출을 중간에서 가로챈 후 64비트 API 호출로 변환한다. WOW64를 구성하는 DLL과 각각의 기능은 <표 2>와 같다.

<표 2> WOW64를 구성하는 DLL

좀 더 자세히 설명하면 32비트 프로세스가 시작할 때 wow64.dll은 32비트 버전의 Ntdll.dll을 로드한다. 이때 Ntdll.dll은 프로세스 실행에 필요한 32비트 DLL들을 로드한다.

알아 두어야 할 점은 WOW64에서 사용하는 대부분의 32비트 DLL들은 별다른 수정 없이 설치되어 있지만 64비트 프로세스와 메모리를 공유해야 하는 몇 개의 32비트 DLL들은 WOW64에서도 정상적으로 동작할 수 있도록 조금 수정되었다는 사실이다. 그리고 64비트 Ntdll.dll은 32비트 프로세스에서 로드할 수 있는 유일한 DLL인데, wow64.dll은 64비트 ntdll.dll과 32비트 ntdll.dll 사이에서 썽킹을 수행해서 32비트 프로세스의 실행환경을 만들어 준다.

썽킹을 커널모드가 아닌 사용자모드에서 수행하는 이유는 썽킹 과정의 버그로 인해 BSOD(Blue Screen Of Death)가 발생하는 것을 방지하기 위해서이다. WOW64를 구성하는 모듈간의 관계는 <그림 2>를 살펴보면 쉽게 이해할 수 있다.

<그림 2> WOW64의 아키텍처

그렇다면 WOW64 환경에서 수행되는 32비트 프로세스의 성능은 어떨까? 여러 가지 요인에 의해 수행 성능이 결정될 수 있는데 첫 번째로 어떤 CPU에 의해 수행되느냐가 중요하다. 아이태니엄과 같은 IA64 계열의 CPU는 wow64cpu.dll이 32비트 명령어를 에뮬레이션하기 때문에 아무래도 성능이 낮을 수밖에 없다.

그러나 AMD64나 EM64T같은 x64 계열에서 수행되는 32비트 프로세스는 32비트 명령어를 CPU에서 직접 수행하기 때문에 32비트 윈도우에서 수행하는 것과 거의 동일한 성능으로 수행할 수 있다. WOW64에서 메모리를 다루는 것도 이 두 계열의 CPU에 따라 조금 다르다. IA64 계열은 기본적으로 8K 페이지를 사용하게 때문에 AWE(Address Windowing Extention)를 사용할 수 없고 GetWriteWatch(), ResetWriteWatch(), ReadFileScatter(), WriteFileGather() 함수를 사용할 수 없다.

반면에 x64 계열은 기존의 32비트 시스템과 동일한 4K 페이지를 사용하기 때문에 AWE를 사용할 수 있을 뿐만 아니라 사용자 주소 공간도 기존의 2GB가 아닌 4GB의 가상 주소 공간을 사용할 수 있다. 일반적인 가이드는 WOW64를 이용해 기존의 수많은 32비트 응용 프로그램을 수행할 수 있지만 WOW64에서 수행하려는 프로그램이 높은 성능을 요구하는 서버 응용 프로그램이라면 빠른 시일 내에 완전한 64비트 응용 프로그램으로 제작하길 바란다. MS는 WOW64 상에서 서버 응용 프로그램을 구동하는 것을 권장하지 않는다고 한다.

64비트와 32비트 프로세스/메시지 구분하기
현재 MS에서는 하나의 소스로 32비트 바이너리와 64비트 바이너리를 개발할 것을 권장하고 있다. 이 가이드에 맞추어 프로그램을 개발하다 보면 자신이 32비트 프로세스인지 또는 64비트 프로세스인지 판별해야 할 경우가 생기는데 IsWow64Process() 함수를 사용하면 쉽게 판별할 수 있다. 이 함수는 프로세스 핸들을 인자로 받아들이므로 다른 프로세스의 32비트 프로세스 여부를 판단하는 데 유용하게 사용될 수 있다.

그렇다면 64비트 프로세스에서 현재 받은 윈도우 메시지가 32비트에서 발생한 것인지 64비트에서 발생한 것인지를 구분해야 할 때는 어떻게 해야 할까? 64비트 윈도우에서는 IsWow64Message() 함수를 이용해 현재 쓰레드에서 마지막으로 받은 윈도우 메시지가 32비트에서 발생한 것인지 판별할 수 있다. 예를 들어 윈도우 메시지 안에 포인터 타입을 포함하는 데이터가 있고 그 포인터가 32비트 포인터일 경우 주의해야 하는데 이런 경우 IsWow64Message() 함수를 이용해 판별할 수 있다.

<표3> 32비트/64비트 프로세스와 메시지를 구분하는데 사용되는 함수

레지스트리 접근하기
앞서 보았듯이 64비트 윈도우에는 32비트 프로세스와 64비트 프로세스가 공존한다. 64비트 윈도우에서는 이 두 종류의 프로세스가 접근하는 두 가지 관점의 레지스트리가 존재하게 된다. 하나는 WOW64를 통해 수행되는 32비트 프로세스가 접근하는 레지스트리이고 다른 하나는 순수한 64비트 프로세스가 접근하는 레지스트리이다.

32비트와 64비트 프로세스 간에 서로 다른 관점을 유지하는 이유는 크게 두 가지가 있다. 첫 번째는 32비트 프로세스와 64비트 프로세스가 사용하는 레지스트리 상태를 분리하고 각각 저장하는 설정 값들을 중복되지 않게 구분하기 위해서이다. 두 번째는 서로 같은 위치의 레지스트리를 사용할 경우 상호간에 관리하는 값들을 훼손할 수 있기 때문에 안전한 수행환경을 제공하기 위해서 32비트 응용 프로그램과 64비트 응용 프로그램 레지스트리를 분리시켰다.

<화면 1>을 보면 32비트 프로세스가 사용하는 Wow6432Node 밑의 Microsoft 키와 64비트 프로세스가 사용하는 Microsoft 키가 나누어져 있음을 알 수 있다.

<화면 1> 64비트 윈도우에 존재하는 두 가지 레지스트리 뷰

너는 너대로 나는 나대로 - 레지스트리 접근경로 변경
WOW64는 32비트 프로세스가 레지스트리를 생성하거나 오픈하려고 할 때 몇 개의 키들에 대해서는 레지스트리 키 경로에 Wow6432Node를 덧붙인다. 이렇게 해서 64비트 프로세스가 접근하는 레지스트리 경로와 32비트 프로세스가 접근하는 레지스트리 경로가 변경된다. 모든 레지스트리 키가 이렇게 접근경로 변경(Redirection)이 되는 것은 아닌데 주로 다음과 같은 키들이 분리되며 이 키들을 제외한 다른 키들은 일반적으로 32비트와 64비트 프로세스가 같은 레지스트리 위치에 접근한다.

◆ HKEY_LOCAL_MACHINE\Software
◆ HKEY_LOCAL_MACHINE\Software\Classes
◆ HKEY_USER\*\Software\Classes
◆ HKEY_USERS\*_Classes
◆ *는 각 사용자의 SID 이다.

레지스트리 키 접근경로 변경은 로컬 시스템과 원격 시스템에 따라 다르게 일어나는데 윈도우 서버 2003 SP1 이전에는 로컬시스템 레지스트리에 접근할 때만 키 경로의 변경이 발생하고 RegConnectRegistry 함수를 사용해 원격 시스템에서 레지스트리에 접근할 때는 키 경로의 변경 없이 64비트 레지스트리에만 접근할 수 있다. 그러나 윈도우 서버 2003 SP1를 포함한 이후 버전의 64비트 윈도우에서는 원격 레지스트리에 접근하는 시스템이 32비트 윈도우라면 32비트 레지스트리를 접근할 수 있고 64비트 시스템이라면 64비트 레지스트리를 접근할 수 있다.

너와 나는 하나 - 레지스트리 복사·공유
다음과 같은 시나리오를 생각해보자. 먼저 깨끗한 상태의 64비트 윈도우를 설치하면 .doc 파일에 대한 기본 응용 프로그램으로 Wordpad.exe가 64비트 레지스트리에 등록되어 있다. 이 정보는 32비트 레지스트리에도 복사가 된다. 만약 이 운영체제에 32비트 버전의 MS 오피스를 설치한다면 .doc 파일에 대한 기본 응용 프로그램으로 32비트 레지스트리에 winword.exe가 등록된다. 그리고 이 정보는 64비트 레지스트리에도 복사가 된다. 이 경우 32비트와 64비트에 상관없이 .doc 파일에 대한 기본 응용 프로그램은 32비트 버전의 winword.exe가 된다.

여기에 64비트 버전의 마이크로소프트 오피스를 설치한다면 어떻게 될까? 64비트 레지스트리에 64비트 버전의 winword.exe 경로가 등록되고 이 값은 32비트 레지스트리에도 복사된다. 최종적으로는 .doc 파일에 대한 기본 응용 프로그램으로 64비트 버전의 winword.exe가 등록된 것이고 32비트나 64비트 상관없이 같은 경로의 winword.exe를 사용하게 된다. 결론적으로 32비트와 64비트 레지스트리 중 어떤 키들은 변경이 발생하면 서로 복사함으로서 32비트와 64비트의 설정을 동기화하고 64비트 윈도우에서 응용 프로그램이 유연하게 동작할 수 있도록 해준다.

COM의 경우를 생각해 보면 별도의 프로세스로 수행되는 Out-of-Process COM 등록의 경우 앞서 설명한 것처럼 32비트와 64비트 레지스트리 간에 복사가 일어나서 최종적으로 기록한 값이 동기화되게 된다. 반면에 같은 프로세스 주소 공간 안에서 동작하는 In-Process COM의 경우는 복사가 이루어지지 않고 32비트는 COM은 32비트 레지스트리에 64비트 COM은 64비트 레지스트리에 등록이 된다.

이런 현상은 어쩌면 너무나 당연할 결과인데 32비트와 64비트 간에 IPC나 RPC는 허용되는 반면 32비트 모듈이 64비트 프로세스 주소공간 안에서 동작할 수 없고 64비트 모듈이 32비트 프로세스 주소공간 안에서 동작할 수 없기 때문이다. 다음 키들은 32비트와 64비트 레지스트리에 별도로 존재하지만 변경이 발생할 경우 32비트와 64비트 키 간에 복사를 수행해 내용을 일치 시킨다.

◆ HKEY_LOCAL_MACHINE\Software\Classes 일부
◆ HKEY_LOCAL_MACHINE\Software\Microsoft\COM3
◆ HKEY_LOCAL_MACHINE\Software\Microsoft\Ole
◆ HKEY_LOCAL_MACHINE\Software\Microsoft\EventSystem
◆ HKEY_LOCAL_MACHINE\Software\Microsoft\RPC

다음 키들은 32비트와 64비트 레지스트리가 별도로 존재하지 않고 32비트와 64비트 프로세스가 공유해서 사용한다.

◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ SystemCertificates
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Cryptography\ Services
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Classes\ HCP
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ EnterpriseCertificates
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ MSMQ
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ NetworkCards
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ ProfileList
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Perflib
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Print
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Ports
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Telephony\ Locations
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Policies
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Group Policy
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Policies
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Setup\ OC Manager
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Software\ Microsoft\ Shared Tools\ MSInfo
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Setup
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ CTF\ TIP
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ CTF\ SystemShared
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Fonts
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ RAS
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Driver Signing
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Non-Driver Signing
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Cryptography\ Calais\ Current
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Cryptography\ Calais\ Readers
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Time Zones
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Transaction Server
◆ HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Control Panel\ Cursors\ Schemes

다음 키들은 32비트 레지스트리 키에 변경이 발생하면 64비트 레지스트리로 복사를 하고 32비트 레지스트리 키 값은 삭제된다. 이 키들이 특별하게 동작하는 이유는 주로 사용자가 로그온될 때 사용되는 키여서 32비트와 64비트 레지스트리 양쪽에 값이 기록된다면 하나의 프로그램을 두 번씩 수행하게 될 수도 있기 때문이다. 그래서 64비트 레지스트리에만 값을 유지하는 것이다.

◆ HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows\ CurrentVersion\ Run
◆ HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows\ CurrentVersion\ RunOnce
◆ HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows\ CurrentVersion\ RunOnceEx

32비트와 64비트 레지스트리 넘나들기
64비트 윈도우에서는 특별한 작업을 하지 않는다면 32비트 프로세스는 32비트 레지스트리에 접근하게 되고 64비트 프로세스는 64비트 레지스트리에만 접근할 수 있다. 만일 32비트 프로세스가 64비트 프로세스를 접근하는 것을 원하거나 64비트 프로세스가 32비트 프로세스를 접근하는 것을 원한다면 RegOpenKeyEx / RegCreateKeyEx / RegDeleteKeyEx와 같은 레지스트리 관련 API를 사용할 때 특별한 플래그를 부여하면 양쪽 모두의 레지스트리를 접근할 수 있다. 그 플래그는 <표 4>와 같다.

<표 4> 32비트/64비트 레지스트리를 접근하는 함수에서 사용되는 인자

파일시스템 접근하기
조금 먼저 생각해본 독자라면 앞서 레지스트리를 통해 보았듯이 64비트 윈도우에서 WOW64를 통해 수행되는 32비트 프로세스와 일반적인 64비트 프로세스는 서로 다른 파일시스템 뷰를 가지고 있다는 것을 예상할 수 있다. 64비트 윈도우에서는 두 종류의 프로세스가 서로 다른 파일시스템 뷰를 가지게 되는 것은 서로 참조하는 파일을 분리해서 64비트 프로세스는 64비트 DLL을 사용하고 32비트 프로세스는 32비트 DLL을 사용하게 하기 위해서이다. 그래서 64비트 윈도우를 설치하게 되면 <화면 2>와 같이 시스템 디렉토리가 각각 존재하는 것을 볼 수 있다.

<화면 2> 64비트 윈도우의 시스템 디렉토리

더 풀어서 설명하면 64비트 프로세스의 경우 파일 I/O 함수를 이용해 %systemroot%\System32 디렉토리를 접근하게 될 경우 C:\WINDOWS\system32 디렉토리에 접근하게 되겠지만, 32비트 프로세스가 파일 I/O 함수를 통해 %systemroot%\System32 디렉토리를 접근하게 될 경우 WOW64는 자동으로 C:\WINDOWS\SysWOW64 디렉토리로 접근경로를 변경한다. 그러나 다음 디렉토리들과 그 하위 디렉토리들은 접근경로 변경에서 제외된다.

◆ %windir%\System32\Drivers\Etc
◆ %windir%\System32\spool
◆ %windir%\System32\catroot2

파일시스템의 접근경로 변경은 GetSystemDirectiry()를 사용해 보면 분명하게 나타나는데, 32비트 프로세스에서 이 함수를 사용하면 시스템 디렉토리 밑의 SysWOW64를 얻어오게 되고 64비트 프로세스는 시스템 디렉토리 밑의 System32를 얻어오게 된다. 그렇다면 64비트 프로세스에서 32비트 프로세스가 사용하는 시스템 디렉토리를 얻어오려면 어떻게 해야 할까? 64비트 윈도우에서는 GetSystemWow64Directory() 함수를 이용해 이 답을 구할 수 있다.

또한 64비트 윈도우에서는 프로그램 설치 디렉토리인 %Program Files%에 대해서도 조금은 특별하게 관리하는데 시스템 디렉토리와는 달리 WOW64가 직접 접근경로 변경을 수행하지는 않는다. 대신 32비트 프로세스가 %Program Files% 문자열이 포함된 REG_EXPAND_SZ 형식의 데이터를 레지스트리에 기록하려고 할 때 WOW64는 이 데이터를 가로채서 %ProgramFiles(X86)%으로 바꾸어 레지스트리에 기록하며 마찬가지로 레지스트리를 읽을 때도 데이터를 가로채서 %ProgramFiles(X86)%으로 변경한다.

그러므로 프로그램 설치 디렉토리를 얻어와야 한다면 CSIDL_PROGRAM_FILES를 인자로 사용해서 SHGetSpecialFolderPath() 함수로 %Program Files%의 경로를 얻어오기를 권장한다.

이 함수를 이용하면 32비트 프로세스에서는 C:\Program Files(X86)를 얻어올 것이고 64비트 프로세스에서는 C:\Program Files를 얻어올 것이다. 이와 같이 64비트 윈도우에서 프로그래밍을 할 경우 접근경로 변경이 되는 디렉토리들은 소스 상에 하드코딩하지 말고, 반드시 지정한 종류의 디렉토리를 얻어오는 함수들을 이용해서 프로그램을 작성해야 한다.

이 밖에도 64비트 윈도우에서는 윈도우세션메니저(smss.exe)가 관리하는 KnwonDLL 리스트를 32비트와 64비트 두종류로 관리하고, 32비트 프로세스가 KnownDLLs에 접근할 경우 WOW64는 KnownsDLLs32로 접근경로 변경을 수행해 준다. KnwonDLLs 리스트는 레지스트리의 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Session Manager 밑에서 확인할 수 있다. <표 5>는 64비트 윈도우에서 파일시스템에 접근할 때 유용하게 사용되는 함수 리스트이다.

<표5> 64비트 윈도우 파일시스템에 관련된 유용한 함수

실제 64비트 윈도우에서 동작하는 32비트 응용 프로그램을 개발하다 보면 앞서 설명한 64비트 윈도우에서 제공하는 파일시스템 접근경로 변경 방식이 문제가 될 경우가 있다. 예를 들어 필자가 개발하는 안티바이러스 프로그램의 경우 악성코드가 시스템 디렉토리에 감염되어 치료를 시도하는데 원하는 경로가 아닌 접근경로 변경이 된 SysWOW64 밑을 접근하게 된다면 원하는 파일에 접근을 할 수 없기 때문에 문제가 된다.

즉, 전체적인 파일시스템을 접근경로 변경이 되지 않는 일반적인 상태로 접근하고 싶을 때는 Wow64EnableWow64FsRedirection() 함수를 사용해서 파일시스템 접근경로 변경을 끄면 된다. <리스트 1>을 참조하면, 32비트 프로세스에서 파일시스템 접근경로 변경을 끄고 notepad.exe를 접근하면 32비트 시스템 디렉토리에 있는 notepad.exe가 아닌 64비트 시스템 디렉토리에 있는 notepad.exe를 접근하게 된다.

 <리스트 1> 파일시스템 접근경로 변경

그러나 접근경로 변경을 끈 상태에서 32비트 응용 프로그램을 동작시키기 위해선 조심해야 할 것이 있는데 참조하게 되는 DLL이 32비트가 아닌 64비트 DLL을 사용하게 될 수도 있다는 것이다. 이 경우 64비트 DLL이 32비트 프로세스에 로드가 되지도 않을 뿐더러 응용 프로그램의 구동에 심각한 문제를 발생시킬 수도 있다.

예를 들어 psapi.dll이나 advapi32.dll 같은 시스템 DLL의 경우 같은 이름으로 32비트와 64비트가 각각의 시스템 디렉토리에 별도로 존재하기 때문에 잘못 참조하게 될 수도 있다. 그러므로 필요한 부분에서만 접근경로 변경을 끄고 다시 켜주는 방법을 사용해야 한다.

WOW64로의 여행 CWowUtil
개발자라면 누구나 간단하고 쉽게 프로그래밍하기를 원한다. 어떤 사람들은 게으른 사람들이 개발을 가장 잘한다고도 하는데, 힘들고 귀찮을 일을 효율적으로 만들고 자동화하려는 노력을 가장 많이 하기 때문이라고 한다. 마찬가지로 필자도 그런 성향이 다분하다고 할 수 있는데 그래서 64비트 윈도우에서 32비트 호환 프로그램을 작성할 때 사용될만한 몇 가지 함수를 모아 다음과 같은 CWowUItil 클래스를 만들어 보았다.

이 클래스는 내부적으로 사용하는 시스템 DLL을 동적으로 로딩해서 시스템 함수들을 사용하기 때문에 64비트 윈도우가 아니어도 예외(Exception)가 발생하지는 않는다. 사족이지만 이런 클래스가 필요한 이유는 윈도우95부터 윈도우XP 및 윈도우2003까지 광범위한 운영체제에서 동작하는 프로그램을 하나의 소스로 작성할 때 편리하기 때문이다.

실제로 많은 패키지 소프트웨어가 시스템 함수들을 사용할 경우에 이와 유사한 클래스들을 작성해 사용한다. <리스트 2>는 클래스의 헤더이며 전체 소스는 이달의 디스켓을 참조하기 바란다.

 <리스트 2> 클래스의 헤더

상부상조해야 하는 32비트와 64비트
앞서 언급했듯이 64비트 윈도우에는 두 가지 종류의 프로세스가 동작할 수 있다. 하나는 32비트 프로세스이고 다른 하나는 64비트 프로세스이다. 64비트 윈도우에서는 WOW64를 통해 32비트 프로세스가 별다른 어려움 없이 동작할 수 있도록 지원한다. 하지만 32비트 프로세스가 64비트 DLL을 사용하거나 64비트 프로세스가 32비트 DLL을 사용하는 것은 몇 가지 이유 때문에 허용되지는 않는다. 자세히 언급하겠지만 64비트 윈도우의 원칙은 <그림 3>과 같이 하나의 프로세스 주소 공간 안에 64비트와 32비트 코드가 공존하는 것을 허용하지 않는다.

<그림 3> 64비트 윈도우의 원칙

그렇다면 왜 하나의 프로세스 주소 공간 안에 32비트와 64비트 코드가 공존하는 것을 허용하지 않았을까? 크게 세가지 이유가 있는데 첫째는 32비트 DLL은 2G를 넘는 주소공간을 처리할 수 없기 때문이다. 예를 들어 64비트 프로세스에 32비트 DLL이 로드되고 이 DLL로 64비트 포인터가 넘어 간다면 32비트 DLL은 심각한 예외(Exception)가 발생할 것이다.

둘째는 32비트 DLL은 4K 페이지를 사용하고 x86 스타일의 예외처리(Exception Handling)를 수행하지만 IA64 계열은 8K 페이지를 사용하고 예외처리 방식도 다르기 때문이다. 셋째로 Kernel32.dll, User32.dll, Gdi32.dll 같은 시스템 DLL들은 하나의 프로세스에 32비트 또는 64비트 중의 단 한 종류만 로드되어야 하기 때문이다.

예를 들어 프로세스가 생성되면서 PEB(Process Environment Block)에 User32.dll이 제공하는 함수 포인터 배열이 저장되고 커널모드 윈도우 서브시스템인 Win32k.sys가 사용자모드 APC를 통해 함수 포인터 배열에 저장되어 있는 User32.dll 함수들을 사용하는 상황을 생각해 보자. 만일 64비트 버전의 User32.dll과 32비트 버전의 Use32.dll을 하나의 프로세스 안에서 동시에 로드해 놓고 있다면 어떤 함수를 호출해야 할지 결정할 수 없을 것이다.

대신 IPC(Inter Process Communication)나 RPC는 모두 32비트/64비트에 상관없이 동작하며 뮤텍스, 세마포, 파일핸들, 이벤트 등의 이름을 가진 커널 객체 및 윈도우 핸들(HWND)은 두 종류의 프로세스에서 공유해 사용할 수 있다.

COM의 경우에는 DLL과 같은 형태의 In-Process COM은 32비트와 64비트 프로세스끼리 공유할 수 없지만 실행파일 형태인 Out-Of-Process COM의 경우에는 32비트와 64비트 프로세스가 모두 사용가능하다. 액티브X의 경우는 DLL형식은 같은 종류의 인터넷 익스플로러에서만 사용가능하지만 실행파일 형식은 다른 종류 간에도 사용가능하다.

참고로 64비트 윈도우에는 32비트 인터넷 익스플로러와 64비트 인터넷 익스플로러가 모두 설치되어 있고 기본 웹 브라우저는 64비트 인터넷 익스플로러이다. 공유 메모리도 32비트와 64비트 프로세스 간에 공유 가능한데, 주의할 점은 공유 메모리 안의 데이터 중에 포인터가 있다면 32비트 프로세스와 64비트 프로세스 포인터 사이즈가 다르기 때문에 주의해야 한다.

이 밖에도 CreateProcess(), ShellExecute()와 같은 함수는 32비트와 64비트 프로세스에서 모두 사용하고 실행할 수 있다. 또한 일반적으로 디버거를 구현하는 데 사용되는 함수인 CreateRemoteThread() 함수는 64비트 프로세스에서 32비트 프로세스에 사용할 수 있다.

언젠간 가야하는 길, 64비트 컴퓨팅
현재까지는 고성능 컴퓨팅이나 엔터프라이즈 환경을 제외한다면 64비트 컴퓨팅이 개인 사용자에게 줄 수 있는 것이 무엇인지 와 닿지 않는 게 현실이다. 필자의 생각에는 모든 지형데이터를 메모리에 맵핑시켜놓고 게임을 즐길 수 있는 WOW(World Of Warcraft. 공교롭게도 Windows On Windows와 약자가 같다)의 64비트 버전이 나온다면 중간 중간 지형을 읽느라 뚝뚝 끊기는 화면 없이 와이번을 타고 멋진 경치를 즐길 수 있지 않을까 라고 상상하는 것 외에는 아직은 별다른 사용처를 찾지 못했다.

필자와 비슷한 생각을 아직은 많은 사람들이 하고 있고 수많은 사용자를 갖고 있는 대부분의 프로그램들조차 64비트 버전 발표 계획을 갖고 있지 않다. 아직은 32비트 응용 프로그램으로도 충분히 만족을 느끼기 때문이다.

그러나 그렇다고 해서 64비트 컴퓨팅으로 가야 하지 않아야 된다는 것은 아니다. 세상은 복잡해지고 있고 고객의 절실한 요구이건 기업의 이윤추구를 위한 허풍이건 간에 언젠간 가야 하는 길이 64비트 컴퓨팅이다.

그러므로 좀 더 넓은 시야를 가진 개발자라면 현재 16비트 응용 프로그램에 대한 지원이 종료되었듯이 윈도우의 32비트 프로그램에 대한 엄호는 언젠가 사라질 것을 예측하고 64비트 컴퓨팅을 대비해야 한다. 다음 글에서는 64비트 윈도우에서 달라진 점들을 개발자의 관점에서 살펴보도록 하겠다.@

* 이 기사는 ZDNet Korea의 제휴매체인 마이크로소프트웨어에 게재된 내용입니다.
Posted by 장안동베짱e :
#include "comdef.h"
#include "mshtml.h"
#include "mshtmcid.h"
#include "mshtmhst.h"
#include "exdisp.h"
#include "objbase.h"


void CMercuryFormView::OnHomepage()
{
// TODO: Add your command handler code here
//ShellExecute(0, _T("open"), _T("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE"), _T("http://CarrotBoy.Net"), 0, SW_SHOWNORMAL);



HRESULT hr;
IWebBrowser2 *pWebBrowser = NULL;
VARIANT vtHeader2={0};
VARIANT vtTarget2={0};
VARIANT vtEmpty2={0};

vtHeader2.vt = VT_BSTR;
vtHeader2.bstrVal = SysAllocString(L"Content-Type: application/x-www-form-urlencoded\r\n");

vtTarget2.vt = VT_BSTR;
vtTarget2.bstrVal = SysAllocString(L"_top");

VariantInit(&vtEmpty2);

CoInitialize(NULL);
CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pWebBrowser);

pWebBrowser->put_Width(800); // 가로 폭
pWebBrowser->put_Height(600); // 세로 폭
pWebBrowser->put_Left(0); // 외쪽 포인트
pWebBrowser->put_Top(0); // 오른쪽 포인트
pWebBrowser->put_ToolBar(VARIANT_FALSE); // 익스플로어 툴바 없앰
pWebBrowser->put_MenuBar(VARIANT_FALSE); // 메뉴바 없앰
pWebBrowser->put_AddressBar(VARIANT_FALSE); // 주소창 없앰
pWebBrowser->put_StatusBar(VARIANT_FALSE); // 상태바 없앰
pWebBrowser->put_Visible(VARIANT_TRUE);
HWND exh;
pWebBrowser->get_HWND((long*)&exh);
SetForegroundWindow();

hr = pWebBrowser->Navigate(SysAllocString(L"http://CarrotBoy.Net"), &vtEmpty2, &vtTarget2, &vtEmpty2, &vtHeader2);
//hr = pWebBrowser->Navigate(SysAllocString(L"www.daum.net"), &vtEmpty2, &vtTarget2, &vtEmpty2, &vtHeader2);
if(SUCCEEDED(hr))
{
//SetVisited(); // 제대로 갔다면 링크를 방문한 색깔로 바꿈
}
else // 오류시 메시지
{
/*
CString msg="HyperLink Error";
if(E_INVALIDARG == hr) msg+=": Invalid Parameters.";
else if(E_OUTOFMEMORY == hr) msg+=": Out of memory.";
MessageBeep(MB_ICONEXCLAMATION); // Unable to follow link
AfxMessageBox(msg, MB_ICONEXCLAMATION | MB_OK);
*/
}

SysFreeString(vtHeader2.bstrVal);
SysFreeString(vtTarget2.bstrVal);
pWebBrowser->Release();

CoUninitialize();

}
Posted by 장안동베짱e :