Media Log

마이크로소프트가 OS 업그레이드시 고의로 기존 응용 프로그램들이 동작하지 않도록 만든다는 비난을 받을 때면 나는 정말 화가 난다. 만약 어떤 프로그램이 윈도우 95에서 실행되지 않는다면 나는 이를 개인적인 실패로 받아들였다. 나는 수 많은 밤을 새어가며 윈도우 95에서 응용 프로그램들이 제대로 동작할 수 있도록 써드 파티 프로그램들의 버그까지 디버깅했다.

submit

VSColorOutput은 비주얼 스튜디오 2010 플러그인이다.

출력창에 나타나는 문자열들을 분석해서 예쁜 색깔로 구분지어 보여준다. 기본 필터 기능에 더해 사용자가 자신만의 필터를 등록할 수 있도록 정규 표현식을 추가할 수 있는 인터페이스도 갖추고 있다.


예쁘지 아니한가.

Visual Studio 이전 버전들도 모두 훌륭하다고 생각하지만 Visual Studio 2010은 좀 더 특별하다. 이런 좋은 확장 기능들이 많이 있는데다가 무엇보다 C++11을 사용할 수 있기 때문에.

submit
위대한 해커이자 이제는 소설가(?)이기도한 윈도의 대가 마크 러시노비치의 처녀작이다.
책이 처음 나왔을 때부터 재미는 있으려나, 기술적으로 배울만한 것도 있을까 관심을 가지고 있었는데, 영어로 읽기는 싫으니 번역되는 날만을 기다렸다. 그런데 오늘 드디어 떴구나! 새해 선물인가.

submit
Writing Solid Code - 10점
Steve Maguire 지음, 나윤석 외 옮김/높이깊이

몇 일전 deview 2011 행사 중 한 세션에서 재미있는 이야기를 들었다.
 NHN 김정민 이사의 세션이었는데, 이런 말을 했다.
애플, 마이크로소프트, HP 같은 회사에서 15년 동안 일했던 (지금은 NHN에서 일하고 있는) 송창현 이사가 예전에 우리회사에 면접을 보러 왔을 때 잘하는 게 뭐냐고 물어봤더니,
"저는 meticulous code reader입니다. 남의 코드를 아주 꼼꼼하게 읽어줄 수 있습니다."
대부분의 경력을 많이 가진 사람들은, 저는 유닉스를 10년을 넘게 다뤄서 커널 구석 구석까지 깊게 알고 있습니다. 오라클 전문가입니다 라고 말하지 저런 식으로 말하지는 않는데, 김정민 이사는 그게 상당히 인상적이고 멋있어 보였다고 한다.

나 또한 그 말이 멋있어 보인다는데에 완전히 동의한다.
저는 자바스크립트만큼은 누구보다 잘할 자신이 있습니다, 라는 말(또는 뻥)보다 훨씬 멋지지 않은가?

직장 생활을 하다보면 Meticulous code reader가 거의 없다는 것을 쉽게 알게 된다. - 나는 이전에 다니던 직장에서 여태껏 그런 사람을 딱 1명 만나봤다.
여러분이 후임이 있다고 치자. 어떤 기능을 구현해달라고 일을 주고 후임이 나중에 다 만들었습니다 했을 때, 또는 만들고 있는 도중에, 코드를 한줄 한줄 다 꼼꼼하게 읽어주고 피드백 해준 적이 있다면, 당신은 좋은 Meticulous code reader가 될 수 있는 가능성이 있다. 거의 대부분의 사람들은 그렇게 하지 않는다.

갑자기 이런 이야기를 하는 이유는, 최근에 Writing Solid Code라는 책을 읽으면서 이 책의 저자인 Steve Maguire가 그런 Meticulous code reader 라는 생각이 들었기 때문이다.
이런 사람들은 회사에 꼭 필요하다. 마이크로소프트가 10년 넘게 황제의 자리를 차지할 수 있었던 이유는 이런 사람들이 많이 있었기 때문일 것이다.

이 책에서는 정교하고 튼튼한 프로그램을 짜기 위한 많은 기술들을 배울 수 있으며, 또한 프로그래머가 프로그램을 만든다는 것 대해서 가져야할 바람직한 자세를 배울 수 있다.
매 챕터가 끝날 때에는 '생각할 점'이 나오는데, 여기에도 좋은 내용들이 참 많다. 부록에 답까지 있으니 모두 꼼꼼하게 읽어보도록 하자.
인터넷 어딘가에서 번역이 최악이라는 평가를 본 것 같은데, 이 책의 번역은 정말 잘 되었다고 생각한다. 부분 부분 약간 어색한 단어 선정이 보였던 것 같긴 하지만, 나는 왜 최악의 번역이라고 하는건지 이해할 수가 없다.

submit

_countof 매크로

2011. 3. 15. 06:48 | Programming

포스팅 이전

https://jeho.page/essay/2011/03/15/_countof-%EB%A7%A4%ED%81%AC%EB%A1%9C.html

'Programming' 카테고리의 다른 글

윈도우 드라이버를 만들 때 알아야 할 기초적인 내용들  (2) 2011.05.23
Duff's Device  (0) 2011.04.07
_countof 매크로  (0) 2011.03.15
FIELD_OFFSET 매크로  (1) 2011.03.01
PAGED_CODE 매크로  (6) 2011.02.27
디렉터리의 읽기 전용 속성  (4) 2011.02.20

submit
Windows 시스템 프로그래밍 - 9점
Johnson M.Hart 지음, 류광 옮김/정보문화사

오래전부터 이 책이 좋은 책이라는 이야기를 많이 들었었는데, 여태까지 못보고 있다가 이번에 4판이 번역되어 나온 김에 하나 구입해서 며칠동안 재미있게 읽었다.

저자는 이 책을 리차드 스티븐스의 유명한 고전인 APUE에 대응하는 윈도우 버전이라고 말했지만 책을 읽는 내내 자꾸 비슷한 주제를 다루는 제프리 리처의 Windows via C/C++과 비교가 되는 것은 어쩔수가 없었다.

책 중간의 동기화 오브젝트를 다루는 부분에서는 이 책이 Windows via C/C++보다 훨씬 구체적이고 많은 실례들을 들어 설명을 하고 있으며(제프리보다 재밌게 설명하는 것은 아니지만) 그 이후에 나오는 소켓과 파이프, 윈도우즈 서비스 그리고 오브젝트 보안에 대한 내용들은 Windows via C/C++에서는 다루지 않는 내용이다.
맨 마지막 챕터에서 보안 디스크립터로 ACL을 조작하는 내용은 제프리의 책뿐 아니라 다른 책들에서도 쉽게 다루지 않는 보기 힘든 내용이다. 윈도의 파일들을 리눅스 스타일의 권한(rwx--로 관리되는)처럼 관리할 수 있게 하는 재미있고 실용적인 예제와 함께해서 더 좋았다.

간간히 유닉스 시스템과 비교해서 설명해주는 저자의 코멘트들 또한 이 책의 큰 장점이다.
부록에서는 윈도 API의 유닉스와 CRT 대안 함수들을 표로서 제공해주기도 한다.

제프리리처 책의 모든 챕터를 이제는 2-3번씩 읽어서 윈도우 시스템 프로그래밍에 대해 꽤 많이 알게 되었다고 생각했는데, 이 책을 읽으면서 아직도 많은 부분을 제대로 이해 못하고 있구나 하고 느꼈다. 속상한 일이다.

책에서 옮긴 단어중 신호, 일꾼쓰레드, 스택 위넘침 등은 약간 부자연스럽긴 하지만 내용을 이해하는데는 아무런 문제가 없었다. 하지만 딱 한가지 단어가 나를 힘들게 했는데 그것은 '회부' 라는 단어였다. 가상 메모리를 커밋한다고 할 때 바로 그 커밋을 뜻하는데, 잘 매치가 되지 않아서 머리 속으로 계속 Replace를 했다.

부록에는 여러가지 I/O 방식들에 대한 성능 테스트가 나와 있다.
나는 블로그나 잡지 같은 곳에서 프로그램 성능 테스트를 해봤더니 결과가 어떻더라라고 하면 의심을 하고 잘 믿지 않는 편인데, 그것은 많은 사람들이 페이지 폴트나 캐시 등의 잡음을 고려하지 않고 테스트를 하기 때문이고, 또 그런 것들을 미리 알고 있다 하더라도 완벽히 잡음을 제거하기가 힘들기 때문이다.

책을 읽는 동안 이 책의 저자가 상당히 부지런하고 꼼꼼한 사람이라는 느낌을 받아서 벤치마크 결과에 대해 믿음도 가고 기대를 많이 하고 있었는데, 이 저자 역시 실수를 범해 누군가가 이미 벤치마크의 오류를 지적했었나보다.
아래 페이지에서 저자의 코멘트를 볼 수 있다.
http://jmhartsoftware.com/comments_updates.html
램이 1.5기가가 달린 윈도 XP가 페이지 폴트의 영향 때문에 성능이 몹시 떨어져서 나왔는데,  나중에 다시 테스트해서 올리겠다고 한다. 이런, XP하고 비스타의 I/O 성능 비교가 가장 궁금했는데.
어쨌거나 이것들을 다시 테스트 해보는 일은 엄청 귀찮을텐데 5판을 낼 때쯤에나 다시 해보지 않을까 걱정이 되기도 한다.

제프리 리처의 책이 더 이상 새 버전이 안나오는 것은 정말 아쉬운 일인데, 이 책은 5판도 6판도 계속 해서 쓰여졌으면 좋겠다.

submit

아래 주소로 이전했습니다.

https://jeho.page/essay/2011/01/14/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%AA%A8%EB%8B%88%ED%84%B0-%EC%82%AC%EC%9A%A9%EB%B2%95.html

'Softwares' 카테고리의 다른 글

리눅스 3.0 시대  (0) 2011.05.25
ACE 6.0 static build  (2) 2011.03.06
프로세스 모니터 사용법  (6) 2011.01.14
2010년 분야별 최고의 오픈소스들  (5) 2011.01.09
파일 조작 테스트를 위한 훌륭한 도구 소개  (4) 2010.12.27
VirtualBox 4.0 베타  (0) 2010.12.07
  1. Favicon of http://nyolong.egloos.com BlogIcon 뇨릉 at 2011.01.19 14:04 [edit/del]

    얼마전에 FileMon을 받으려더 Process Monitor와 통합이 되어서 저도 이툴 한번 써봤었는데요. ㅋ
    전 간단히 파일모니터하는데만 썼었는데 참 괜찮은 툴 같습니다 ^^

    Reply
  2. BlogIcon tack at 2011.01.24 16:08 [edit/del]

    전 크롬을 사용중인데 이상하게 Highlight 기능 역시... 아래 그림이 안나오네요 :(
    헌데 Explorer.exe에 대한 내용이 원래 이렇게 많나요? ㅎㅎ

    Reply
    • Favicon of https://www.benjaminlog.com BlogIcon 김재호 at 2011.01.24 17:14 신고 [edit/del]

      에 정말요? 저도 크롬쓰는데 잘 나오는데.
      다른 장소에서도 잘 나오고요. 용량이 조금 크긴 한데 다른 문제가 있는건지 모르겠네요.

  3. Favicon of http://cchelf.tistory.com BlogIcon 휘릿즈 at 2012.06.26 20:18 [edit/del]

    잘보고갑니다^^

    Reply
  4. ㄱㄳㄳ at 2014.12.17 17:31 [edit/del]

    ㄳㄳ

    Reply

submit
마크 루시노비치가 그의 블로그에 레드스크린이나 핑크 스크린을 만드는 쓸데없는(?) 포스팅을 하면서 곁다리로 윈도 인터날 6판을 언급하였다.

윈도 인터날 6판은 모두 예상하던대로 윈도7과 윈도2008 R2의 내용이 메인으로 다루어지게 되며 올해 여름(!)에 나올 예정이라 한다. -윈도 인터날 5 한글판을 산지 얼마 되지도 않았는데.

5판이 번역서가 나올때 까지는 1년이 걸렸다. 원서를 찔끔 찔끔 보면서 번역서가 나오기를 목이 빠지도록 기다렸었다.
어떤 출판사에서 번역하더라도 상관없으니 이번에는 좀 빨리 번역서가 나왔으면 좋겠다. @.@

  1. Favicon of http://nyolong.egloos.com BlogIcon 뇨릉 at 2011.01.19 14:07 [edit/del]

    Windows Internals 5판 사놓고 못보고 있는데.. 6판 빨리도 나오는군요 ㅋ

    Reply

submit

submit
이제는 마이크로소프트에 흡수된 구 Sysinternals가 만든 여러 유용한 툴 중 Process Monitor는 내가 가장 좋아하는 툴이다.
많은 사람들이 Process Explorer만을 사용하는데, 아마도 Process Explorer의 직관적인 사용자 인터페이스 덕분이리라.
Process Monitor는 잘 사용하려면, 툴에도 익숙해져야 하지만 Windows API를 많이 알고 있어야 하기 때문에 개발자가 아닌 QA팀 같은 곳에서는 사용하기 힘들다.
하지만 프로세스가 수행하는 모든 동작들을 잡아채서 보여주기 때문에 어떤 응용프로그램을 분석할 때 유용한 많은 정보들을 얻어 낼 수 있다.

DbgView 또한 우리 개발자들이 디버깅 할 때 많이 사용하는 애플리케이션 중 하나다. 응용프로그램이나 디바이스 드라이버에서는 OutputDebugString이나 DbgPrint 같은 함수로 로그를 작성한 후 이 툴을 통해서 프로그램의 상태를 추적하고는 한다.

파일 시스템 필터드라이버를 만들게 되면 이 두가지를 같이 병행하고 싶은 경우들이 생길 수 있다.
응용프로그램들이 어떤 Irp를 보내는지를 모니터하고, 내 필터 드라이버는 어떤 동작을 하는지를 함께 보고 싶은 것이다.

두가지 툴을 번갈아 가면서 쳐다보는 일은 순서를 제대로 예측하기가 어렵기 때문에 정말 열받는 일인데, 이번에 프로세스 모니터에서 이런 기능을 해결하기 위한 인터페이스가 하나 추가되었다.

이 아이디어는 디버깅 애플리케이션으로 유명한 존 로빈스생각해내고 제안했는데, 현재 MS 최고의 프로그래머 중 하나인 마크 루시노비치를 자신의 꼬붕 프로그래머라고 농을 치는 것이 너무 웃긴다.

What I really wanted was for my trace statements to be part of the Process Monitor viewing so that way it would be trivial mapping the I/O activity to operations in my code. Fortunately, I have a personal developer at my disposal that is keen to tackle these kinds of challenges. He’s a very nice guy named Mark Russinovich who happens to be the author of Process Monitor. Mark is always eager to hear feature requests for his tools and I think he’s implemented at least 30 features in Sysinternals tools over the years that I thought would be great to have. Don’t hesitate to email Mark with feature ideas so he can be your personal developer as well.

존 로빈스의 유머 감각은 정말 끝내주는데 그의 디버깅 애플리케이션만큼 웃기는 컴퓨터 책을 아직도 만나보지 못했다.
이런 멋진 해커이자 명저자가 다시는 책을 안쓰기로 결정한 것은 정말 슬픈 일이다.

어쨌거나 마크는 콘트롤 코드를 하나 추가해서 DeviceIoControl 함수를 통해 인터페이스 할 수 있도록 기능을 제공해주었고, 최신버전의 프로세스 모니터를 보면 도움말에서 아래 코드를 찾아볼 수 있다.

#define FILE_DEVICE_PROCMON_LOG 0x00009535
#define IOCTL_EXTERNAL_LOG_DEBUGOUT (ULONG) CTL_CODE( FILE_DEVICE_PROCMON_LOG, 0x81, METHOD_BUFFERED, FILE_WRITE_ACCESS )

int main( int argc, char * argv[] )
{
  HANDLE hDevice = CreateFile( L"\\\\.\\Global\\ProcmonDebugLogger", 
                       GENERIC_READ|GENERIC_WRITE,
                       FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                       NULL,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL,
                       NULL );

  if ( hDevice != INVALID_HANDLE_VALUE ) {
    WCHAR text[] = L"Debug out";
    DWORD textlen = (_wcslen(text)+1) *sizeof(WCHAR)
    DWORD nb = 0;

    BOOL ok = DeviceIoControl( hDevice,
               IOCTL_EXTERNAL_LOG_DEBUGOUT, text, textlen, NULL, 0, &nb, NULL );

    if ( ok ) {
      printf( "wrote %d\n", i );
    } else {
      printf( "error 0x%x\n", GetLastError() );
    }
  } else {
    printf( "error %d opening Process Monitor\n", GetLastError() );
  }
  return 0;
}
존 로빈스는 .NET과 C/C++에서 좀 더 편하게 사용할 수 있는 Wrapper 코드를 만들어서 올려놓았다.
커널 드라이버에서 사용하고 싶다면,
ZwDeviceIoControl
ZwDeviceIoControlFile 함수를 통해서 직접 Wrapper를 작성해야 한다. 존도 이제는 늙어서 커널 코드는 만들어주기가 귀찮은가보다.


이런 식으로 애플리케이션이나 드라이버에서 프로세스 모니터에게 직접 디버그 메세지를 보낼수가 있다.

기존에 OutputDebugString이나 DbgPrint로 찍은 함수를 Process Monitor가 잡아채서 찍어주는 것이 아니고, 우리가 직접 커스텀 함수를 호출해야만 로그 메세지를 보낼 수 있는 것에 주의하자.
즉, 꽁짜로 얻을 수 있는 것은 아니고 기존에 사용하던 애플리케이션이나 드라이버의코드를 고쳐야 한다는 것.(래퍼 함수를 작성하고, 필요한 곳에서 호출하는 만큼의 비용은 지불해야 한다.)

submit
레이몬드 첸의 윈도우 개발 282 스토리 - 10점
레이몬드 첸 지음, 손광수 옮김/ITC(아이티씨)
윈도우즈 프로그래머라면 꼭 구독해야 할 블로그로 하나를 꼽으라면 단연 레이몬드 첸의 The Old New Thing 일 것이다.

그의 블로그는 포스팅이 꽤나 자주 올라오는데, 보통 한번에 2개씩 올라오고 하나는 기술적인 이야기 다른 하나는 잡소리이다.

윈도우즈 프로그래머가 관심있어 할만한, 그리고 얻어갈만한 주제들로 글을 쓰는데다가 유머감각도 꽤 있기 때문에 그의 블로그는 재미있다.


이 책은 2006년에 그의 블로그의 글들을 모아서 발행되었으며, 2007년에 번역서가 출간되었다.
처음 이 책이 나왔을 때 나는 UI 프로그래밍에 관심이 많아서 그 쪽으로 많이 읽었는데, 이번에 다시 읽을 때는 파일 시스템이나 윈도우 시스템 내부의 이야기를 중심으로 읽었다.

물론 재밌기도 할 뿐더러, 그의 놀라운 지식과 통찰력들을 많이 배울 수 있어서 좋은 주말이었다.

기술적으로만 보면 NTFS의 터널링이나 디렉터리의 읽기 전용 속성에 대한 내용이 가장 기억에 남지만, 그보다도 더 인상 깊었던 것은 쉽게 지나칠뻔 했던 어떤 챕터에서 나온 다음 문장이었다.

만약 어떤 애플리케이션이 윈도우 95에서 실행되지 않는다면(애플리케이션의 버그로 인하여) 필자는 이를 개인적인 실패로 받아들였다. 그리고 수많은 밤을 새면서 이들이 윈도우 95에서 실행될 수 있도록 하기 위해 서드파티 프로그램들의 버그를 수정했다.

얼마나 많은 개발자들이 버그를 남의 탓으로 돌리는지를 잠깐만 생각해보면, 왜 마이크로소프트의 윈도우가 이렇게 성공할 수 있었는지, 그리고 그가 왜 세계 최고의 프로그래머라는 소리를 듣는지를 조금이나마 이해할 수 있다.

2007년 이후 그의 블로그에 엄청난 양의 포스팅이 쌓였는데, 이제 2권을 낼 때가 되지 않았나 싶기도 하다. 2권을 낸다는 글을 얼마전에 어디선가 본거 같기도 한데(그게 이 책을 다시 찾은 이유였지만) 꿈에서 봤는지 아무리 찾아봐도 찾을 수가 없었다.

이렇게 얻어갈 것도 많으면서 재밌게 읽히는 책은 많지 않다.
빨리 2권이 나와서 내게 또 하나의 즐거움을 줬으면 좋겠다.

  1. Favicon of http://blogs.technet.com/sankim BlogIcon sankim at 2010.08.01 22:33 [edit/del]

    제 블로그 방문해 주셔서 가사합니다.
    근데 허헉.. 한글번역본이 있군요? 번역 상태는 어떤가요?

    Reply
    • Favicon of http://www.petabytes.org BlogIcon 김재호 at 2010.08.01 22:50 [edit/del]

      음 글쎄요. 다른 블로그들에는 번역이 엉망이라고 많이 쓰여있던데 저는 그렇게 나쁘지는 않았습니다. 단지 용어의 선택이 아쉬운 부분들이 많기는 했는데, 주의 깊게 읽으면 괜찮아요^^;

  2. fullc0de at 2011.06.18 16:16 [edit/del]

    저도 번역본 읽다가 원서 사본 1인 ㅋㅋ

    Reply

submit