Compile cache라는 ccache가 있다. http://ccache.samba.org/ 내 아직까지 이놈의 존재를 의식하지 못했다는 것이 새삼 바보스럽다는 느낌까지 든다. 원리는 간단하다. ccache 를 gcc 로 symbolic link를 해둔다. 그리고 진짜 gcc 보다 먼저 발견되도록 PATH의 앞부분에 둔다. gcc -o prog.o -c prog.c 라는 명령이 오면, ccache가 그것을 받을 테고, 이놈은 gcc -E prog.c 를 수행하여 나오는 결과, 즉 전처리 결과의 MD5 값을 구하고, 이 값과 gcc -c prog.c 하여 만들어진 오브젝트 파일을 쌍으로 저장해 둔다. 만약 다음 번에 똑같은 명령이 수행되었는데, 전처리 결과가 같으면, 저장해둔 오브젝트 파일을 단지 복사만..
로그 메시지는 크게 개발 도중 중간중간 값을 찍어 보는 용도로 사용되는 것과, 오류가 발생했을 때 나중에 확인하기 위해 사용하는 것으로 크게 구별된다. 전자에 있어서는 또한 릴리즈 이후까지 남겨 둘만한 것과 릴리즈가 되면 제거해야하는 것으로 구별할 수 도 있다. 프로젝트를 여럿진행하면서 가장 큰 것이 로그에 대한 것이다. 로그에 대한 체계가 제대로 잡혀있지 않은 설계에 의한 개발은 추후에 로그 때문에 카운트 펀치를 맞게 되는 경우가 많다. 로그의 중요성은 강조해도 지나치지 않지만, 여기에 제시하고자하는 것은 그 로그를 이용해서 통합 테스트를 하는데 도움이 되게 하려면, 꽤 정형화된 방식으로 남겨야한다. 테스트 관점에서 보면 출력되는 로그는 일종의 테스트의 이후 결과 판정에 대한 입력값이 된다. 이 입력값..
UI와 기능이 붙어 있다는 것은 당연한 것 아닌가라고 생각할 수 있다. 이것은 UI를 프로그래밍을 시작할 때, 보이는 것에 너무 집착한 나머지 잘못 들인 습관 때문인데, 전통적으로 보이는 것과 데이터는 분리되는 것이라 가르쳐 왔지만, 보이는 것에 대한 것에도 두 계층을 두는 것에는 신경을 못쓰기 마련이다. MFC를 생각해보라 당신은 MFC의 수많은 윈도우 개체에 대한 클래스를 보고 "많다.."라고 생각했을 수 있다. 그리고, 능숙하게 혹은 샘플을 봐가면서 정도로 그것들을 사용해 보았을 터이다. 그렇게 해서 나온 최종 산출물은 MFC 자체와 당신이 직접 만든 코드가 분리되어 화면 그리기를 완성한다. MFC 소스가 있긴하지만 그것을 수정하지는 않지않나? 웹프로그래밍에 가면 사뭇달라진다. ASP나 PHP등은 ..
이젠, 내 가을은 초등학생때 느끼던 색감과 시간이 흘렀음에 대한 느낌이며, 20대의 마냥 시리던 가을은 입가의 미소로만 남아버렸고, 늦은밤까지 버틸 수 있던 체력도 이젠 원망의 쳐진 눈길로 날 바라보는 듯하다. 지민이도 일어나기 싫어하던 아침은 아빠도 아무 잔소리하지 않았고, 묵묵히 도시락을 준비하고 물묻힌 수건으로 고양이 세수시켜 자는 애 옷입히는 능숙한 솜씨로 들쳐 안고 선생님께 보내었다. 졸다가 뛰어내린 따뜻한 가을 전철을 뒤로 하고, 따스한 커피 한잔에 하루를 아빠처럼 시작한다. 아직은 젊은 아빠처럼... 그렇게... 언제나 젊을 아빠처럼... 이렇게... --
외부로 노출되는 것과 그렇지 않은 것이 무엇인가? 답은 간단하다. C/C++에서는 static이 붙지 않은 모든 변수와 함수는 외부로 노출된다. 이 말은 늘 이름공간(Name space)을 더럽힌다라는 말과 같이 나오게되는데, 이 개념은 만병의 근원처럼 초보 프로그래머들에게는 쉽게 드러나지 않는 개념으로 생각된다. 그닥 중요하지 않게 취급될 수도 있고, 다른 말로도 설명이 되기 때문이다. 이름공간이라는 것이 무엇인가? 무엇에 대한 이름공간인가? 말 그대로 생각해보면, 이름이 놓여지는 공간을 말하고, 이름이란 서로 다른 두 개를 구별하기 위해 사용되는 일종의 약속이다. 모듈화 프로그램이라는 것은 하나의 프로그램을 수행하기 위해 여러 단위로 나누어 각각을 부분 컴파일한 뒤 링크할 때, 필요로 하는 모듈과 제..
어제(10/25일) 케이블을 신청하여 오늘(10/26일) 밤늦게 도착하신 케이블 TV 기사님. 수고 많으셨습니다. VDSL을 그만사용하게된 계기는 1. VDSL 요금 > 케이블TV+인터넷 요금 2. 파일다운로드 같은 행위가 많지 않음 3. 공유기 사용을 합법화하고 두 대부터 5000원을 추가로 받으려는 한통의 약관 변경 요러한 배경하에 바꾸게되었다. 최고 속도 25Mbps까지 나온다는 것(VDSL)을 고작 3Mbps(케이블 인터넷)로 바꾸었으나, 나같은 텔넷, SSH 쟁이한테는 그닥 느리다는 충격이 아직은 없다. (있을리가 있나 2시간도 안되었는데..) 아파트인데도 대공사를 하고 지나갔다. 벽면에 있는 동축선은 그냥 아파트 옥상에 있는 안테나하고만 연결돼있나 보더라. 케이블TV용 동축선이 따로 벽을타고 ..
테스트를 위한다면, 정말 피해야 할 것이 테스트들 간의 의존성이다. 테스트들 간의 간섭이 최소화 되려면, 테스트할 대상들의 구분이 명확해야한다. 그럴려면, 함수 안에 여러기능들이 모여 있어서는 아니 될 일이다. 내가 말하고자하는 것은 두 개 이상의 함수에서 몇 줄 동일한 루틴이 발견된다고 해서 무조건 빼어 하나의 함수를 만들라는 것이 아니다. 물론 그렇게 하는 것은 중요한 습관 중의 하나이다. 습관적으로 길어지는 함수는 분명 처음부터 그렇게 만들고 싶어서 그런 것이 아니다. 생각이 있었다면 미리 함수들을 쪼개었을 것이 분명하다. 문제는 간단한 기능을 만들고 간단한 테스트를 한 다음 그 다음 코드를 그 함수에 덧붙여서 만들게 되는 습관때문이다. 왜냐하면, 하나의 함수안에서 기능을 추가해야할 때, 다른 함수..
2005년 가을의 뻔한 최호진 공략법. 들켜버린 그 7단계! 1 단계: 한 2 주일 정도, 아침 저녁으로 일단 싸늘한 기운을 뿜어준다. 2 단계: 그 동안 대략 눈에 보이는 반 정도의 사람들에게 긴팔을 입힌다. 3 단계: 5일정도 정신없이 치고받고 살게 만든다. 4 단계: 주말에 늦게 일어나게 만든다. 5 단계: 오후를 적당히 즐기게 만들 정도의 취미 생활을 준다. 6 단계: 장모님한테 저녁식사를 얻어 먹을 정도 게으르게 만든다. 7 단계: 밥먹고, 저녁창으로 찬바람을 한 번 쐬어준다. 이쯤되면 죽을걸?
어제 저녁의 일이다. 지민: "아빠, 아빠 방은 어디야?" 평소에 컴퓨터있는 서재를 아빠방이라고 실수(?)하면서 말하길래, 아빠: "컴퓨터있는 방이지" 라고 했다. 그랬더니, 지민: "아빠, 왜 아빠는 아빠방에서 혼자 안 자?" 이건 또 무슨 소리인가? 우리 세 식구는 모두 침대방에서 자기 때문에 멀뚱하고 얘가 뭐라나 하고 들어 봤더니. 지민: "나, 이제 내 방에서 혼자 잘래" 아빠: ".?@#$%^! 왜? 어쩌다가 그런생각을 했어?" 지민: "어, 나 어린이집에 있을 때 생각을 했어." 아빠: "뭐? 선생님께서 혼자 자라고 하셔?" 지민: "아니, 나 혼자 한 번 생각을 해 봤어." 아빠: "그래...?!?" -- 이게 무슨 말도 안되는 시츄에이션이냐, 원래 침대 사주면 자기 방에서 혼자 잔다고 약속..
더운 여름날에 바람도 없고 에어컨도 없으면 땀이 흐른다. 공기 청정기는 먼지를 인식하고 작동하다가 언젠가는 멈춘다. 체한 듯하면 배를 비우고 간단한 약을 사다 먹으면 낫는다. 그리고, 식물들을 키우면 공기도 정화를 시킨다며, 수많은 실험 자료들은 아세톤 알데히드를 없앴다느니 암모니아를 제거한다느니 구구절절하다. 배가 아프면 아버지는 수지침을 놓으신다. 장모님과 어머님은 이것저것 먹을 것을 주시면서 몸에 어떻게 좋다느니 말씀을 하신다. 난 가끔 위 두 사실을 비교할 때, 어떤 다른 영역이 있음을 인식한다. 특히 요즘 같이 내가 식물에 관심이 많을 때, 관련 서적들을 보면 생활에 도움을 준다는 "약한 설득"이 곳곳에 널려있음을 본다. 내가 지금까지 살면서 키우는 식물의 이로움을 몰랐으랴? 그런데, 요 몇달전..
- Total
- Today
- Yesterday
- 구근
- 수선화
- SSO
- 덴드롱
- writely
- nodejs
- 킹벤자민
- Subversion
- 디버깅
- tattertools
- 클레로덴드럼
- macosx
- BlogAPI
- JavaScript
- 커피
- MySQL
- TCP/IP
- SVN
- 식물
- 오픈소스
- 벤자민
- url
- VIM
- 퀴즈
- ssh
- 대화
- OpenID
- perl
- Linux
- Tattertools plugin
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |