Korea Evangelist

Developer & Platform Evangelism, Microsoft Korea

  • Korea Evangelist

    Windows 7 애플리케이션 호환성

    • 3 Comments

    Windows에서 동작하는 소프트웨어를 개발하는 분들이 Windows 7, Windows Server 2008 R2 호환을 고민할 때 볼만한 문서가 있어 나누고자 합니다. 문서 목적은 애플리케이션이 Windows 7 혹은 Windows Server 2008 R2에 문제없이 동작하는데 필요한 호환성 관련 사항을 전달하려는 것입니다. 문서 이름은 “Windows Application Quality Cookbook”입니다. 문서는 http://code.msdn.microsoft.com/Windows7AppQuality에서 내려받을 수 있습니다. 지속적으로 수정될 예정이고, 버전 1.1 문서는 이 포스트에 첨부했습니다. 이 문서에는 Windows XP에서 Windows 7으로 바로 옮겨가는 것은 고려되지 않았습니다. 애플리케이션을 Windows XP에서 Windows Vista 옮기는 것은 http://msdn.microsoft.com/en-us/library/bb757005.aspx를 참조하시기 바랍니다.

     

    1. 운영체제 버전

      운영체제 버전이 올라가면 언제나 달라지는 것 중의 하나입니다. GetVersion 함수의 반환 값이 변화되었습니다.

    2. Windows Mail 삭제

      이후에 Windows Mail 도구는 지원되지 않을 것을 명시했습니다. CoStartOutlookExpress API는 동작하지 않으며, 다른 메일 API deprecating 정보를 포함했습니다. 앞으로 지원 중단을 선언하지 않은 API는 전과 같이 동작합니다.

    3. Internet Explorer 8 – 사용자 에이전트 문자열

      Windows 7에 포함된 Internet Explorer 버전은 8입니다. 웹 개발자가 개발하는 웹 애플리케이션이 사용자 브라우저 버전 혹은 정보에 따라 행동을 달리하는 경우에 사용자 에이전트 문자열 (User Agent String) 값을 다시 검토해야 합니다. 그리고, Internet Explorer 8은 Internet Explorer 7 compatibility view를 지원하기 때문에, 웹 개발자는 필요한 경우 Internet Explorer 7 compatibility view 상태를 판단할 수 있는 메타 정보도 확인해야 합니다.

    4. 윈도우 휴대용 장치를 위한 WPDUSB.SYS 삭제

      커널 모드로 Windows Vista USB 드라이버 스택에서 동작한 WPDUSB.SYS WINUSB.SYS 드라이버로 교체되었습니다.

    5. Microsoft Message Queuing (MSMQ) – SHA-2 사용

    Windows 7에 포함된 MSMQ는 보안 강화를 목적으로 메시지를 보낼 때, SHA-2를 기본으로 이용합니다. 다른 설정에 변화가 없다면 Windows 7 MSMQ에서 만들어진 메시지는 하위 버전에서 받아볼 수 없습니다. 반대도 마찬가지입니다.

    6. 바이너리 간의 기능 이동

    이후의 기능 효율성과 구조 향상을 위해 Windows 핵심 바이너리 사이에 기능 이동을 했습니다. 예를 들어, kernel32.dll advapi32.dll에서 동작하던 기능을 kernelbase.dll로 옮긴 것입니다. 백신/백업 소프트웨어 같이 하층의 API를 직접 다루는 개발자 분들은 주의 깊게 보실 필요가 있습니다.

    7. (Windows Server 2008 R2에만 적용) Microsoft Message Queuing (MSMQ) – Windows 2000 클라이언트 지원 삭제

    Windows 2003, 2008 도메인에서 Windows 2000 클라이언트 지원은 선택 사항이지만, Windows 7 도메인에서는 Windows 2000 클라이언트를 지원하지 않습니다.

    8. (Windows Server 2008 R2에만 적용) 64-bit 지원

    Windows Server 2008 R2 64-bit 제품만 지원합니다. 32-bit 드라이버, 32-bit 플러그-, 16 bit 실행 바이너리만 지원하는 제품을 개발하시는 분들은 미리 준비를 하셔야 합니다. WoW64, x86 emulator가 있기는 하지만, 모든 32 bit 애플리케이션이 동작하는 것은 아니므로 개발자 분들은 세부적인 요건을 조사해서 어떻게 대처할지를 결정해야 합니다.

    9. (Windows Server 2008 R2에만 적용) Server Core에서 Wow64 지원은 선택 사항

    Windows Server 2008 R2에서 Server Core를 설치하는 경우 Wow64는 디폴트에 포함되지 않습니다.

     

    [새로운 기능과 개선 사항]

    1. 파일 라이브러리

      라이브러리는 여러 군데로 흩어져 있는 폴더를 묶어 하나로 보일 수 있도록 하고, 인덱싱을 통한 빠른 검색과 원격 접속 방법을 제공합니다. Windows 7에서 달라진 것은 파일 다이얼로그에서 열기, 저장하기를 수행할 때 디폴트로 나타나는 곳이 문서 폴더에서 문서 라이브러리로 바뀐 점입니다. 그리고 라이브러리의 성질은 폴더가 아니라 파일이기 때문에, IFiledialog를 이용하는 경우 GetFolder, GetFilename을 이용하는 대신에 GetResult를 사용해야 합니다. 애플리케이션 개발자는 IShellLibrary 인터페이스를 이용해 필요에 따라 특정 폴더를 라이브러리에 추가할 수 있습니다.

    2. 사용자 인터페이스 높은 DPI 인식

     목적은 텍스트와 이미지 크기를 변경하고자 화면 해상도 (screen resolution)을 이용하는 것보다 DPI를 사용하는 것을 권장하려는 것입니다. 추가된 기능은 사용자 단위의 DPI 설정과 로그-온만으로 변경된 DPI를 적용하는 것입니다. 사용자 인터페이스 측면에서 글자, 폰트, 이미지를 다루어야 하는 경우에 유심해 볼 필요가 있습니다.

    3. Internet Explorer 8 – Data Execution Protection/NX

      이 기능 변화는 Windows 7만이 아니라 Internet Explorer 8이 설치되는 모든 곳에 공통으로 적용되는 것입니다. Internet Explorer에 추가 기능으로 설치되는 모듈 중에 금융권에서 사용하고 있는 ActiveX처럼 하단의 운영체제를 직접 다루는 ActiveX와 같은 것을 개발하는 분들이 반드시 확인하셔야 할 사항입니다. 기본 개념은 Internet Explorer 8의 추가 기능으로 설치된 모듈이 메모리에 올라가서 실행될 때, 운영체제가 판단해서 heap, stack과 같은 영역에서 코드가 수행되는 것은 디폴트로 막겠다는 것입니다. 목적은 buffer overflow와 같은 보안 침해를 예방하는 것입니다. 일반 개발자 분들은 이런 코드가 있는 지도 갸우뚱하실 것입니다. 생각할 수 있는 대처 방안은 Internet Explorer 추가 기능 모듈을 DEP/NX 호환 ATL 프레임워크 같은 것을 이용해서 재작성하거나, Internet Explorer를 관리자 권한에서 실행해서 DEP/NX를 동작하지 않게 하는 것입니다.

    4. 사용자 인터페이스 – UAC (User Account Control) 다이얼로그

      UAC (User Account Control) 기초 구조는 변경되지 않았습니다. 크게 달라진 점은 UAC 다이얼로그 상자에서 선택할 수 있는 선택이 “Yes”, “No”로 줄어든 것과 같은 단순화입니다좀 더 세부적인 설명은 Windows 7 engineering blog 또는 Koalra 추천합니다.

    5. ChooseFont() win32 공통 다이얼로그

      영향도가 크지는 않습니다. 애플리케이션에서 폰트를 선택하는 다이얼로그에서 WYSIWYG 개념에 따라 폰트 특성을 볼 수 있도록 바뀐 것과 Windows 지역 설정에 따라 필요 없다고 추정되는 ���트는 보이지 않도록 한 것입니다.

    6. 애플리케이션 매니페스트 호환성

    Windows 7에서는 애플리케이션 매니페스트에 “CompatiblityInfo.”을 넣었습니다. Windows 7에서 실행되지만 동작 방식을 Windows XP 혹은 Windows Vista처럼 하게 하는 것입니다. 모든 동작을 이전 환경으로 하는 것은 아니고 아래와 같은 컴포넌트가 대상입니다.

    Desktop Windows Manager: Fail/Lock bit blitting

    RPC exception handling

    API: ReadFileEx

    RPC: Thread pool management

  • Korea Evangelist

    재미있는 프로그래밍, SmallBasic 0.2

    • 0 Comments

    간혹 초등학생이 프로그래밍을 쉽게 배울 수 있는 도구가 없느냐는 질문을 받습니다. 질문하시는 분들은 1980년대에 BASIC을 배울 때처럼 컴퓨터를 켜고 한두 번의 명령 혹은 클릭으로 프로그램을 실행시키고, 몇 줄 코딩을 하면 그 결과를 바로 볼 수 있는 개발 도구를 원하십니다. 그 질문에 답할 수 있는 것이 SmallBasic입니다. 언어 특성은 BASIC에 매우 유사하고, 15개 내외의 키워드만을 가지고 프로그래밍 기초를 배울 수 있습니다. Intelisense와 문맥 기반 도움말 기능도 지원하고, 플러그-인도 가능합니다. 학생용 보조 교육 자료 사업을 고민하시는 분들은 찬찬히 살펴보시기를 추천합니다. 버전은 이제 겨우 0.2에 불과하지만, 그래픽 예제도 만들 수 있습니다. 프로그램은 http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx에서 내려 받을 수 있습니다.

    clip_image002

    clip_image004

    오늘 한국에서 개발자라는 직업은 많은 어려움의 한가운데 있지만, 적절한 시간을 준 상태에서 프로그래밍만 전념할 수 있다면 개발은 재미있고 매혹적인 일이라 생각합니다. 수천만 번을 종이 위에 써서 찾아내는 답을 단 몇 줄의 언어로 처리하기도 하고, 아무리 큰 장비라도 프로그램으로 움직일 수 있고, 눈에 보이는 큰 물건을 만들지 않아도 새로운 사업의 가능성을 열어 주는 것이 프로그래밍의 세계입니다. 프로그램에 대한 가치를 사회적으로 인정해 준다면 더할 나위가 없을 것입니다. 지금은 개발자가 힘들게 그려지지만, 그래도 많은 사람이 어릴 때부터 프로그래밍 진수를 SmallBasic과 같은 도구를 통해 느끼기를 바랍니다. 미래학자들의 예측처럼 배움과 생산을 동시에 해야 하는 시대가 오면 한국만큼 경쟁력이 있는 나라가 어디에 있을까요? 프로그래밍처럼 꼭 필요한 것이 어디에 있을까요?

  • Korea Evangelist

    부산에서 서울까지 Windows7 전원 관리

    • 2 Comments

     
    설 명절에 고향으로 가면서도 노트북을 가져가야 마음이 편한 분들이 계시다면 저와 비슷한 부류의 분이지 않을까 합니다. 사용 여부와 상관없이 어디서든지 컴퓨팅을 할 수 있어야 마음이 놓이는 것은 신인류가 가지고 있는 새로운 강박 관념일지도 모르지만 이런 강박관념 보다 더 큰 것은 바로 배터리에 대한 집착입니다.

    노트북, MP3, 핸드폰 등등 가장 큰 문제는 바로 배터리의 사용시간입니다. 메모리 용량이나 CPU 파워는 나날이 증가하는데 비해서  상대적으로 배터리의 용량증가는 아주 조금씩 이루어지고 있기 때문에 전원관리는 모두가 느끼는 불편함 중에 하나 입니다. 심지어는 혹자는 배터리 문제만 비약적으로 향상 시켜도 노벨 물리학상을 받을 수 있을 것이라고 이야기 하시는 분도 있습니다.

    일반적으로 배터리의 용량을 증가시키기 위해서 새로운 소재를 이용하는 방법이나 전극을 개선하기도 하고 혹은 배터리의 셀 수를 늘리기도 하는 등 많은 노력을 하고 있습니다만 물리적인 노력의 결과는 아주 조금씩 개선되어가고 있습니다. 배터리 문제를 접근하는 방법은 배터리 자체의 용량을 늘리는 방법도 있지만 또 다른 방법으로는 전력 소비를 최소화 시키는 방법도 있습니다.또 저전력 CPU나 LCD와 같은 것을 개발하는 방법 일반화 되어 있습니다. 이 와 함께 사용하는 방법이 소프트웨어를 이용하는 방법입니다. 소프트웨어는 펌웨어나 혹은 PC 운영체계등의 레벨에서 많은 시도를 하고 있습니다.
    즉 휴대용 전자기기의 사용지속 시간을 늘리기 위해서는 아래와 같이 3가지 요소의 삼박자가 맞아야 됩니다.

    • 배터리의 용량 확대
    • 저전력 하드웨어의 개발
    • 저전력을 고려한 소프트웨어의 개발

    전력관리가 중요한 이유는 PC시장만 봐도 알 수 있습니다. 최근의 PC시장은 고정형 데스크탑에서 노트북 시장으로 넘어가고 있습니다. 2006년 국내 노트북 판매량은 116만 8천대로 2005년 대비 29.9% 성장해서 최초로 100만대 판매를 넘어섰습니다. 또 지난해 노트북의 시장 점유율은 전체 PC시장의 27.1%를 차지 했는데 2007년 23.9%에 비해서도 지속적으로 성장하고 있는 모습을 보여주고 있습니다.

    저전력을 고려한 하드웨어와 소프트웨어 개발이 시장에서 중요한 화두가 되고 있는 것도 사실 이상할 게 없어진 상황입니다. 소프트웨어에서 저전력을 고려할 때 개별적인 응용프로그램 단위로 접근하는 것은 많은 낭비적인 요소가 포함되어 있습니다. 즉 저전력 문제는 기본적으로 PC의 운영체계가 기본적으로 해결해 주어야 하는 필수적인 요소중에 하나가 되어 있습니다.

    이런 면에서는 Windows7은 저전력 운영체계로써 좋은 평가를 듣고 있는 중입니다.
    Windows7 Logo

    대체로 Windows7을 사용하고 있는 분들의 의견을 들어보면 “성능이 좋아졌다.” 혹은 “부팅시간이 빨라졌다.” 그리고 “배터리 사용시간이 길어졌다.” 이런 이야기들이 많습니다. 저는 정말 얼마나 길어졌는지 확인해 보고 싶었습니다. 그래서 우리나라에서 기차로 갈 수 있는 제일 긴 거리인 부산에서 서울을 한 번 충전으로 풀 타임으로 사용해 보기로 마음을 먹었습니다.

    image

    세미나 혹은 기타 등등의 이유로 부산에 가다 보면 꼭 중간에 대구정도면 배터리가 바닥나서 많이 아쉬웠습니다.  참고로 제가 사용하는 노트북은 Lenovo T60p 모델입니다.

    base_media

    모델명: ThinkPad T60p [2623-QRK]
    모니터크기: 14.1
    CPU: Intel Core Duo T7600 2.33GHz
    메모리 : 4 GB
    FSB: 667 MHz

    실험을 했던 ��은 설날 연휴 마지막 날이었던 2009년 1월 27일 부산에 갔다가 올라오는 길이었습니다.

     

     

    IMG_1557
    오른쪽 사람은 부산에서 설 연휴 동안 얼마나 잘먹었는지 번들번들 합니다. (접니다. ^^) 그리고 그 옆에 있는 이쁜이가 제 첫째 딸 민주 입니다.

    IMG_1558IMG_1564 
    <그림1>출발 부산역 7:59 잔량97%            <그림2>동대구역 9:00 잔량 61%

    출발시간은 08:00 이었고 노트북은 완충상태에서 07:57분에 부팅을 했습니다. 이동하는 동안 작업했던 내용은 T-Login을 사용해서 인터넷 웹서핑과 미투데이, 그리고 Visual Studio를 사용한 소프트웨어 개발등의 작업 등등을 했습니다.
    1시간이 지나서 동대구역에 도착했을 때  배터리는 61%가 남아 있었습니다. 서울까지는 앞으로 더 많은 길이 남아 있는데 갑자기 미션이 불가능할 것 같은 생각에 전원 모드를 Balanced에서 Power Saver 모드로 전환했습니다. 
    화면이 다소 어두워 지긴 했지만 사용하는 데는 크게 불편함이 없기 때문에 대구부터는 Power Saver 모두로 쭉 가기로 했습니다.

    IMG_1561 
    문서 작업을 하고 있는 동안 민주가 심심해 하고 있습니다. 명절 연휴 그것도 집에 가는 길에도 노트북을 끼고 사는 아빠.. 조만간 휴가라도 내서 눈설매장이라도 데리고 가야 할 것 같습니다. 물론 눈설매장에는 노트북을 가져가지 않을 생각이구요 ^^

      IMG_1577 IMG_1579
    T-Login으로 인터넷을 연결해서 열심히 자료를 찾고 있습니다. 화면에는 현재 속도가 305Km라고 알려주고 있습니다. 살아 생전에 시속 300Km를 지상에서 누리지 못할 것으로 생각했는데 이제는 너무도 익숙한 일상 중에 하나가 되었습니다.

     IMG_1581 
    영동 지역을 지나 추풍령을 넘어가다 보니 몇 일전 내린 눈이 그대로 쌓여 있습니다. 적당한 눈과 비닐 하우스가 있는 풍경은 묘하게 잘 어울립니다.
    IMG_1573IMG_1582 
    IMG_1584IMG_1585
    시간은 09:56 대전에 도착했습니다. 이제 남은 배터리는 27%가 남았습니다. 잘 하면 미션을 성공할 수 있을 것 같기도 합니다. 보통 차를  타면 꼭 자는 애들인데 아직까지 생생합니다. 이제 KTX는 천안/아산역으로 열심히 달리고 있습니다.
       IMG_1586IMG_1588
    천안/아산역 근처까지 달려왔습니다. 여전히 눈이 쌓여 있는 평야지대가 잘 보입니다. 이때 민주가 에너지가 떨어져서 슬립모드(?)로 들어갔습니다. Windows7이 설치된 노트북과 민주의 파워게임에서 노트북이 민주를 이겨버렸습니다. ^^
    민주는 서울역까지 계속 잠들어 있었습니다. 

     IMG_1591IMG_1596 IMG_1593IMG_1592
    Visual Studio 2008에서 Silverlight 코딩을 하다 보니 생각보다 시간이 잘 갔습니다. 터널을 몇 개 지나는가 싶더니 어느새 서울에 진입해 있었습니다. 나란히 달리는 국철 너머로 남산타워가 보이기 시작할 무렵 곧 서울역에 도착한다는 안내 방송이 나오기 시작했습니다.
    최대한 아껴서 쓴 탓인지는 몰라도 배터리는 아직 10%가 남아 있습니다. 배터리 상태를 나타내는 LED가 녹색에서 주황색으로 변했고 Low battery 경고가 나오기 시작합니다. 마지막으로 노트북을 닫을 때 최종 배터리는 7%가 남아 있었습니다.

    부산에서 서울까지 한 번 충전으로 노트북을 계속 켜 놓고 올 수 있었습니다. 배터리의 개선이나 하드웨어의 개선이 다소 더딘 반면 소프트웨어를 이용한 방법은 빠르고 효율성 있게 전원관리에 대한 방향을 제시해 주었습니다. 화면을 어둡게 하고 사용량에 따라서 CPU를 관리하고 사용하지 않는 하드웨어의 전력을 차단하고 이런 것들이 전원관리의 기본이겠지만 실제로 사용자들이 불편하지 않은 절전모드가 되기까지는 많은 자료들을 분석하고 사용자들의 패턴을 추적하고 하드웨어 업체들과의 긴밀한 협조가 없으면 가능하지 않은 일인 것 같습니다. 

    아무튼 앞으로 지방 갈 때는 맘 편히 컴퓨팅 하면서 갈 수 있을 것 같습니다.
    마지막으로 KTX안에서 진행했던 실시간 미투데이 입니다. ^^

    image

  • Korea Evangelist

    .NET White Box Testing 도구, PEX (Program EXploration)

    • 0 Comments

    Visual Studio 2005에서 단위 테스팅 기능을 선보였을 때, 대표적인 고객 요구 사항 중의 하나가 테스트 함수 입력 값을 자동으로 만드는 기능이었습니다. 이제 DevLabs (http://msdn.microsoft.com/en-us/devlabs/default.aspx) 프로젝트, PEX (Program Exploration)가 어느 정도 그 요구 사항을 만족할 수 있을 것 같습니다. 개발자에게 적용할 수 있는 시나리오는 이렇습니다.

    1. Test-Driven Development에 충실하게 검증 규정, 함수, 입력 값을 먼저 만들어두면 좋겠지만, 그렇지 않고 기능 구현을 먼저 했는데 단위 테스팅이 필요한 상황이 된다면,

    2. 사용하고 있는 Visual Studio 버전이 2008인 것을 확인하고,

    3. http://msdn.microsoft.com/en-us/devlabs/cc950525.aspx 에서 PEX를 내려받기해서 설치하고,

    4. Visual Studio에서 단위 테스팅을 할 함수의 코드로 이동합니다.

    5. 목표 함수에 마우스를 위치한 다음, 반대편 클릭을 하고, “Run Pex Explorations”를 선택합니다.

    6. 그러면 아래와 같이 자동으로 입력 값을 만들고, 입력 값에 대한 출력 값도 보여줍니다. 이 과정에서 PEX는 함수 입력 값의 유형에 따라 입력 값을 자동으로 생성하고, Visual Studio에서 테스팅 프로젝트를 만들어 줍니다.

    7. 이다음부터는 Code Coverage를 수행하거나, 단위 테스팅 프로젝트를 다루듯이 이용하시면 됩니다.

    clip_image002

    이 기능은 테스트할 코드를 아는 상태에서 각종 테스트를 수행하는 White Box Testing 범주에 들어갑니다.

    실전 프로젝트에서 단위 테스팅을 개발 프로세스의 한 단계로 만드는 것은 매우 어려운 일입니다. 많은 프로젝트를 대상으로 많은 함수를 포괄해서 단위 테스팅을 적용하는 것보다는 파사드 (façade) 유형의 함수에 먼저 적용을 하고 이를 통해 최소한의 품질 관리 기준을 마련한 다음 점차 확대하는 것이 성공 확률이 높습니다. PEX 기능이 궁금하신 분에게는 20분 분량의 비디오를 - http://channel9.msdn.com/posts/Peli/Getting-started-with-Pex-in-Visual-Studio-2008/ - 추천합니다. 영어로 되어 있기는 하지만 이해하시는데 어려움은 없을 것입니다.

  • Korea Evangelist

    WPF 기반으로 사진을 다루는 애플리케이션 예제, PhotoSuru

    • 0 Comments

    RSS를 이용해 웹에서 사진을 가져온 다음, WPF 기술을 이용해 편리하게 사진을 볼 수 있는 애플리케이션 예제가 PhotoSuru 입니다. Syndicated Client Experience (SCE) Starter Kit & Reader Beta SDK에 포함되어 있고, 소스코드는 http://windowsclient.net/appfeeds/SubscriptionCenter/Gallery/photosuru.aspx 에서 내려받기할 수 있습니다. 주요 기능은 아래와 같습니다.

    clip_image002

    1. 동기화: RSS Feed를 제공하는 웹 사이트에서 사진을 주기적으로 가져와서 로컬에 저장하는 역할을 합니다. “Subscription Center” 관련 모듈에 세부 기능이 구현되어 있습니다.

    2. 동적인 화면 구성: WPF가 가진 기능을 이용해서 각 화면 크기에 맞는 동적인 배치를 구현했습니다.

    3. 탐색: 애플리케이션 내에서 이동 방법을 구현한 것입니다.

    4. 검색이나 꼬리표를 이용한 탐색

    5. 효과: 확대, 그레이스케일, 리본 등의 효과

    6. 텍스트 읽기: WPF 텍스트 객체를 이용해서 다양한 조건에서 글자를 쉽게 읽을 수 있도록 구현한 것입니다.

    7. 설치

Page 110 of 125 (624 items) «108109110111112»