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가 그렇게 당하여 상당히 많은 불법..
지난 기사에서 .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( ..
호출규약으로 번역되는 calling convention이라는 주제가 있다. UNIX 쪽 C를 하는 사람들에게는 그다지 많이 다가오지 않는 주제일지 모르나, Windows 에서 프로그래밍을 하다보면, WINAPI라는 매크로를 사용할 때와 사용하지 않을 때가 있는 것을 볼 수 있는데, 저것은 실상 __stdcall 이라는 방식으로 선언하라는 것을 의미한다. 여기에는 중요한 두가지 요소가 있는데, 1. 인자 전달방식 2. 스택 청소 담당자 이다. 이런 차이에 의해 주위에서 많이 볼 수 있는 것이 다음 세가지이다. 1. cdecl 2. stdcall 3. fastcall 추가적으로 C++가 도입되면서 thiscall이라는 방식이 생겼지만, 이는 기본적으로 cdecl을 근간으로 하고 있으므로 생략하겠다. 또한 고..
전형적인 못난 개발자의 전형을 말하라건데 다음과 같다. 소스를 코딩하고 빌드한 다음 실행하여 만족하는 동작을 보이는 것외에는 그 중요성을 소스만큼 소중히 생각하지 않는 것. 애를 키워본 사람으로 말하자면, 소스에 대한 집착이 너무 강해서 소스를 마치 맥도날드 장난감에 환장하는 증상을 보이는 것이다. 물론 실제 환장하는 모습은 얼굴에 안나타난다. 그 모습은 다음과 같은 방법으로 나타난다. 1. 데일리 빌드의 결과를 보지도 않고 바로 지운 편지함으로 보내버린다. 2. 소스 컨트롤 시스템에 작업한 내용을 적당할 때 한 번씩 커밋한다. 3. 빌드 및 실행에 참여하는 전처리, 컴파일러, 링커, 로더에 대한 개념보다 빌드 오류 메시지 제거에 집중한다. 4. 다른 사람이 작업한 소스는 겁나는지 미안한지 실력이 없어서..
로그 메시지는 크게 개발 도중 중간중간 값을 찍어 보는 용도로 사용되는 것과, 오류가 발생했을 때 나중에 확인하기 위해 사용하는 것으로 크게 구별된다. 전자에 있어서는 또한 릴리즈 이후까지 남겨 둘만한 것과 릴리즈가 되면 제거해야하는 것으로 구별할 수 도 있다. 프로젝트를 여럿진행하면서 가장 큰 것이 로그에 대한 것이다. 로그에 대한 체계가 제대로 잡혀있지 않은 설계에 의한 개발은 추후에 로그 때문에 카운트 펀치를 맞게 되는 경우가 많다. 로그의 중요성은 강조해도 지나치지 않지만, 여기에 제시하고자하는 것은 그 로그를 이용해서 통합 테스트를 하는데 도움이 되게 하려면, 꽤 정형화된 방식으로 남겨야한다. 테스트 관점에서 보면 출력되는 로그는 일종의 테스트의 이후 결과 판정에 대한 입력값이 된다. 이 입력값..
UI와 기능이 붙어 있다는 것은 당연한 것 아닌가라고 생각할 수 있다. 이것은 UI를 프로그래밍을 시작할 때, 보이는 것에 너무 집착한 나머지 잘못 들인 습관 때문인데, 전통적으로 보이는 것과 데이터는 분리되는 것이라 가르쳐 왔지만, 보이는 것에 대한 것에도 두 계층을 두는 것에는 신경을 못쓰기 마련이다. MFC를 생각해보라 당신은 MFC의 수많은 윈도우 개체에 대한 클래스를 보고 "많다.."라고 생각했을 수 있다. 그리고, 능숙하게 혹은 샘플을 봐가면서 정도로 그것들을 사용해 보았을 터이다. 그렇게 해서 나온 최종 산출물은 MFC 자체와 당신이 직접 만든 코드가 분리되어 화면 그리기를 완성한다. MFC 소스가 있긴하지만 그것을 수정하지는 않지않나? 웹프로그래밍에 가면 사뭇달라진다. ASP나 PHP등은 ..
외부로 노출되는 것과 그렇지 않은 것이 무엇인가? 답은 간단하다. C/C++에서는 static이 붙지 않은 모든 변수와 함수는 외부로 노출된다. 이 말은 늘 이름공간(Name space)을 더럽힌다라는 말과 같이 나오게되는데, 이 개념은 만병의 근원처럼 초보 프로그래머들에게는 쉽게 드러나지 않는 개념으로 생각된다. 그닥 중요하지 않게 취급될 수도 있고, 다른 말로도 설명이 되기 때문이다. 이름공간이라는 것이 무엇인가? 무엇에 대한 이름공간인가? 말 그대로 생각해보면, 이름이 놓여지는 공간을 말하고, 이름이란 서로 다른 두 개를 구별하기 위해 사용되는 일종의 약속이다. 모듈화 프로그램이라는 것은 하나의 프로그램을 수행하기 위해 여러 단위로 나누어 각각을 부분 컴파일한 뒤 링크할 때, 필요로 하는 모듈과 제..
테스트를 위한다면, 정말 피해야 할 것이 테스트들 간의 의존성이다. 테스트들 간의 간섭이 최소화 되려면, 테스트할 대상들의 구분이 명확해야한다. 그럴려면, 함수 안에 여러기능들이 모여 있어서는 아니 될 일이다. 내가 말하고자하는 것은 두 개 이상의 함수에서 몇 줄 동일한 루틴이 발견된다고 해서 무조건 빼어 하나의 함수를 만들라는 것이 아니다. 물론 그렇게 하는 것은 중요한 습관 중의 하나이다. 습관적으로 길어지는 함수는 분명 처음부터 그렇게 만들고 싶어서 그런 것이 아니다. 생각이 있었다면 미리 함수들을 쪼개었을 것이 분명하다. 문제는 간단한 기능을 만들고 간단한 테스트를 한 다음 그 다음 코드를 그 함수에 덧붙여서 만들게 되는 습관때문이다. 왜냐하면, 하나의 함수안에서 기능을 추가해야할 때, 다른 함수..
- Total
- Today
- Yesterday
- 대화
- Subversion
- SSO
- perl
- MySQL
- ssh
- 커피
- 킹벤자민
- 오픈소스
- SVN
- writely
- JavaScript
- nodejs
- 디버깅
- macosx
- Tattertools plugin
- 퀴즈
- 덴드롱
- OpenID
- 식물
- 벤자민
- 클레로덴드럼
- url
- tattertools
- TCP/IP
- Linux
- BlogAPI
- 수선화
- 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 | 31 |