2003년 5,6,7에 걸쳐 마이크로소프트웨어에 연재했던 "디버깅 다시 보기"라는 글인데, 마지막 7월에 아래와 같은 맺음말을 썼더구만, 디버깅=프로그래밍 수련 과정 이번 호에서는 서로 관련 없는 사항이긴 하나 세 가지 정도를 들어 디버깅을 하면서 내부에서 돌아가는 원리를 알게 되는 일에 중점을 두어 설명하였습니다. 디버깅은 해킹과 같은 고도의 입체적인 접근과 연결되어 있는 개발 행위(?)입니다. 따라서 디버깅은 단순한 문제 해결 관점보다는 좀더 테스트 코드를 만들어 보게 하고, 언어와 환경에 대한 깊은 이해를 돕는 프로그래밍 수련회와 같은 것이라고나 할까요? 세 번에 걸쳐 디버깅에 대한 감각이 잡히려는 사람들을 대상으로 어떤 관점을 가져야 될지 주제를 골라 나열하였습니다만, 아는 것을 말로 표현하는 것..
지식공과 숙련공 대화 관리자: "이 기능이 가능한지 알아보려하니 간단하게 작성해 주겠나?" 지식공: "네, 그 분야에 대해 알고있으니 이틀이면 가능할 것 같습니다." 숙련공: "네, 이틀이면 가능할 것 같군요." 이틀 뒤, 관리자: "어디 작성한 코드를 좀 검토해 보세나." 양공: (주저리, 주저리 설명을 한다.) 관리자: "저 부분은 에러처리가 잘 되어 있지 않군. 또한 로그를 남기는 것에 일관성이 없는 것 같애. 메모리를 할당받지 못하는 경우는 어떻게 처리할텐가" 지식공: "제가 집중한 분야는 이틀전에 말씀하신 그 기능이 제대로 동작하는가입니다. 따라서 에러처리나 로그를 남기는 것은 일관성이 없을 수 있는 것 아닌가요? 그리고, 그 부분은 최호진씨의 조언에 따라 구현이된 것입니다." 숙련공: "로직을..
공상과학만화영화류의 재미있는 비판을 보거나, 공룡이 왜 느리게 움직이는지에 대한 얘기들을 보거나, 외계인이 왜 인간 크기만할까에 대한 얘기들을 대충 설명한 것을 보면, 몸집이 커지면, 활동하는데 들어가는 에너지의 소모량이 크고, 에너지가 모두 운동에너지로 변환이 불가능하므로 나머지는 열로서 방출이 되는데, 이 방출되는 양은 운동체의 표면적에 비례하는 것의 영향을 받는다. 라는 설명이 있다. 이 말은 곧, 몸집이 커지면 발열을 줄이기 위해 동작이 둔해진다는 것이고, 몸집이 작을 수록 보다 움직이면서 발열하는 양이 작고, 따라서 민첩하게 움직인다는 것인데.. 주사위의 비유 이 말을 쉽게 설명하기 위한 비유가 무엇이 있을까를 고민하다가, 어제 운전하다가 갑자기 떠오른 것이 주사위였다. 운전할 때는 깊이 생각하..
회사에 오래된 친구가 있다. 참으로 오래된 친구인데, 고등학교 때 친구이다. 간만에 신나게 웃고, 말장난으로 왁자한 밤을 보냈다. 그 친구의 신혼집 집들이에 초대된 회사사람 사람들과 그런 시간을 보냈다. 그 중 한 명은 이 오래된 친구보다 더 오래전에 만난 초등학교 친구인데, 이 둘은 서로 대학 친구이다. 나나 이 고등학교 때 친구나 초등학교 친구나 말장난 하는 게 비슷한데 오랜만에 상당히 오래도록 이야기를 주고 받았으니, 옹기종기 모여 앉은 푸짐한 식탁에 집들이 다운 모습으로 즐거운 시간을 보냈다. 밥먹고 한 컷. 임옥희, 최호진, 김주생, 인턴사원, 그리고 서있는 양용철 부부.
subversion의 현재 릴리즈는 1.3.x이다. 다른 많은 추가사항이 1.2에 대해 이루어졌지만, 그 중에서 --xml 이라는 옵션이 기존에는 svn log에만 있던것이 다음과 같이 추가 되었다. svn blame --xml [--incremental] svn status --xml [--incremental] svn info --xml [--incremental] Display output in XML. If --incremental is also used, then output XML suitable for concatenation. CLI(Command Line Interface) 환경에서 XML 포맷 출력은 분명 이 명령을 사용하여, 다른 용도로 사용하기 위한 데이터를 출력하는데 사용하리라 기..
파일 찾아 돌아다니는 사람들이 처음 만나게 되는 것 중 하나가 쓰기 권한이 있는 IIS 기반 ftp 서버에 모아져 있는 불법 파일들인데, 그 간단한 원리는 이러하다. Windows의 가상 파일 시스템은 파일이나 디렉토리명에 ".", "CON" 등의 디렉토리명이나 디바이스 명이 들어갈 수 없다고 되어 있다. 그러나 FTP Server로 생성할 수 있는 버그(?)가 있는데, 자세한 것은 찾아봐야알겠으나 곧바로 생성은 불가능하고, 이름을 바꾸는 것으로 가능한 것으로 알고 있다. 알고 싶은 사람은 ftp directory tagging 이라는 검색어로 찾아보시라. 당한 사람은 왠만해서는 그 안에 뭐가 있는지도 알 수 없을 뿐더러, 지워지지도 않는다. 우리 부서의 한 직원의 PC가 그렇게 당하여 상당히 많은 불법..
버스나 지하철을 남들보다 빨리 들어갈 수 있다면 좋은 자리에 앉거나, 좋은 자리에 서 있을 수 있다. A. 버스. 버스는 서있는 사람들에게 다가와서 멈추는 교통수단이다. 어떻게 하면 내 앞에 멈추게할 지가 생각의 요점이다. 버스 기사 아저씨는 될 수 있으면, 빨리태우고 신호등이 바뀌기 전에 가려고 하는 습성을 가지고 있다. 따라서, 될 수 있으면 자신이 태울 사람의 맨 앞 사람에게 멈추는 경향이 있는 것이다. 다음과 같이 해보자. 0. 사람들의 무리중 맨 오른쪽에 서 있는다. 대부분의 사람들이 도로를 보고 있을 것이므로 오른쪽이 버스가 가장 나중에 도착하는 곳이다. 1. 버스가 저 멀리서 오고 있다. 2. 사람들이 움직인다. 3. 기사는 이 모든 상황을 슬쩍 파악하면서 멈출 준비를 한다. 4. 최대한 기..
지난 기사에서 .ctor 섹션에 있는 코드들이 어떻게 실행되는지에 대한 호기심만 자극한 채 벌써 일주일이 지났다. 오래 참으시었다. 지난번의 코드를 다시 인용해 보자면, $ more c.c #ifdef STRIP_ATTR #define __attribute__(x) #endif void __attribute__((constructor)) before_main( void ) { printf("I miss you Lorthlorien ever beauty.\n"); } void __attribute__((constructor)) before_main_2nd( void ) { printf("Bombadil, where have you been in the morning?\n"); } void __attribu..
C++ 언어는 그 특성상, 전역 개체의 초기화가 main 보다 먼저 이루어지므로 전역 개체의 생성자에 들어 있는 코드는 main 보다 먼저 호출된다. 이것은 여러가지 트릭으로 사용될 수 있는데, C에는 과연 그런 것이 없을까? 표준 명세에는 없다. 하지만, gcc의 __attribute__에는 그러한 일을 가능하게 해주는 지시자가 있는데, 바로 다음과 같이 사용된다. void __attribute__((constructor)) before_main( void ) { /* Things to do before main function */ } 또한 main 뒤에 호출되는 전형적인 방식은 atexit에 등록하는 것인데, 이것또한 void __attribute__((destructor)) after_main( ..
- Total
- Today
- Yesterday
- 벤자민
- BlogAPI
- 디버깅
- 대화
- macosx
- 클레로덴드럼
- SVN
- nodejs
- perl
- TCP/IP
- Linux
- 덴드롱
- Subversion
- 오픈소스
- 퀴즈
- url
- 식물
- Tattertools plugin
- 수선화
- 구근
- ssh
- MySQL
- OpenID
- 킹벤자민
- writely
- JavaScript
- SSO
- 커피
- tattertools
- VIM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |