Daily Build라는 개념을 처음 알게 된건, 아마도,
2007년 언젠가, "조엘 온 소프트웨어"라는 책을 읽으면서 였을 껍니다.

1년차 개발자로써, "조엘 테스트" 항목에 있으니까, 그저 좋은 건가 보다 하면서,
다니고 있던 회사에 도입을 극구 주장했었습니다.

지금 생각해 보면 참 우스은 일이죠. 뭐가 어떻게 좋은건지도 제대로 이해하지 못하면서,
좋은가 보다 하면서 도입하자고 했으니 말입니다.

최근에, 이 Daily Build 라는 녀석에 대해서 다시 한번 생각해봤습니다.

" 이거 정말 필요한거야 ? " 라는 생각말입니다.

결론부터 말씀드리면,

"평생 혼자서만 개발할꺼라면 필요 없다."
그러나, 그런일은 거의 없겠죠? ^^

"소프트웨어 개발" 에 "협업"이라는 키워드가 추가되면, "Daily Build"가 힘을 발휘합니다.

우리가 협업을 하고 있다고 가정해봅시다.
거기다가, 우리의 프로젝트는 "국제적인" 프로젝트라서,
내가 퇴근하고나서야, 일을 시작하는 나라에 사는 사람과 협업을 하고 있습니다.

나는 퇴근하기전에 작업물을 Commit하고 갔는데,
재수가 없게도, Build가 깨져버렸습니다. 물론 Daily Build를 하고 있지 않으니, 나는 알턱이 없죠.

저 멀리 아주 먼 나라에서 같이 일하는 개발자는 기쁜 마음으로 출근했지만,
이런 우라질, 소스 컴파일 이 안됩니다.ㅜㅜ

그 사람은 자기가 잘 알지도 못하는 코드를 분석해가며, (거기다가 욕을 해가면서 ... )
수정하고 나서야, 자기 일을 시작하게 됩니다.

다음 날 출근한 저는 내 코드를 잘 알지도 모하는 녀석이, 기괴한 방법으로 수정했음을 발견합니다.
아.. 나는 Refactoring을 해야 겠군요 ;ㅂ;

만약, 여기에 Daily Build를 하고 있었다면 어땠을까요?

나는 퇴근하기전 Daily Build가 깨진것을 확인하고,
수정을 해놓고 나서야 퇴근합니다.

그럼 외쿡인 개발자가, 잘 알지도 모르는 소스를 분석할일도, 수정할일도 없었을테고,
내 소스를 그 사람이 자기 멋대로 수정할 일도 없었겠죠.

바로 이것입니다.

Daily Build는 빌드가 깨지는 일을 방지합니다.
CI Server를 통해 자동화 된 테스트 까지 "정상적"으로 수행시키도록 프로젝트를 꾸려가면,
S/W 가 Compilable 한 상태 뿐 아니라, "Runnable"한 상태를 유지하도록 도와줍니다.

사실 Daily Build라는 말을 사용했지만,
Commit Build, Integration Build 등등 다른 말로 표현되고 있는 "Build 자동화"에 대한 이야기입니다.

약간의 극단적인 예를 들긴했지만, 같은 사무실에 동시간대에 일하는 사람들도,
이런 자동 빌드가 없는 경우 , 빈도는 조금 적을 수 있겠지만, 여전히 같은 문제가 발생합니다.

"나는 Build 자동화를 무조건 도입해야 한다 !" 라고 생각하지 않습니다.

모바일 앱 개발 같은 경우, 혼자서 작업하는 경우도 분명히 많습니다.
그런 경우 Build 자동화는 사실 큰 의미가 없습니다.

당신의 프로젝트가 혼자서 하는게 아니라면,
"나는 무조건 빌드자동화를 도입해야 한다" 고 생각합니다.




SRP


S/W 공학에서 특정 Module을 Design할때, 특정 모듈이 단 하나의 책임만을 가져야 한다는 원칙을 의미한다. 


SRP에서 말하는 책임은 "변화의 주체"이다. 


Module을 변화시킬수 있는 주체는 단 하나여야만 하는것이다.


이 원칙을 지키게 되면, Module의 분리가 일어남으로 거시적인 관점에서의 S/W Artchitecture의 복잡도가 상승하는 것처럼

보일 수도 있다. 


그러나, 특정 모듈의 Task가 단순해짐으로써, 개발효율 , 그리고 유지보수성이 증대하게 된다. 

거기다가 사실은 S/W Architecture의 복잡도 역시 줄어 들게 된다


내가 추구하는 간결함과 미니멀리즘에 잘 부합하는 내가 명심하는 원칙중 하나이다. 

Bot으로 메일 보내는 기능이 필요 해서, SMTP 서버를 돌릴 필요가 생겼습니다.

http://www.phase2technology.com/node/667/


위의 원문 블로그가 있으니, 원문 보실분은 참조 하시길 바랍니다 ㅎ

의레 그러하듯이 OSX의 LaunchDaemon에 SMTP 를 등록해야 합니다.

사실 SMTP는 이미 등록은 되어 있는데, Service로 등록되어 있아, 수정만 해주면 됩니다.

/System/Library/LaunchDaemons/org.postfix.master.plist


를 열어서, </dict> 이 닫히기 전에 

<key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/>

아래 코드를 추가합니다.

Terminal 을 통해서 launchctl cli program을 돌려서 수동으로 서비스를 실행시키거나,
재부팅을 하면 smtp 가 돌아갑니다.

$ sudo launchctl 

launchd% start org.postfix.master


SMTP server자체는 OSX에 이미 들어 가 있기 떄문에,
별로 어려운일은 아닙니다 ㅎㅎ

Tiger나 Leopard에서는 다를 수도 있지만, Snow Leopard에서 sshd를 Enable시키는건 매우 간단합니다.

System Preference -> Sharing -> Remote Login 을 활성화 시켜주면 땡!!!


GUI를 통해 쉽게 할수 있으니 편하다고나 할까,

1. http://sourceforge.net/projects/traconwindows/ 에서 최신 버전 다운로드 받기


2. TOW_HOME설정하기

기본적인으로 설치 경로가 C:\TOW로 잡혀서, 다른 폴더에 설치 할경우 에러가 난다.
set-tow.bat을 열어서 경로를 변경해주면 된다.

3. httpd.conf 에러

이러면서 에러 발생 ㅜ_ㅜ line 42에 에러님이 계시다네요
그래서 스윽 훓어 보고, 스윽 수정하고 싶었는데,

httpd.conf안에 c:\TOW이런식으로 다 패스가 잡혀 있다 ㅜㅜ

다 수정해주니..

잘 동작한다.

이제 잘 사용하는 일만 남았네요 ㅎㅎ

회사를 다니지 않다 보니, 삽질을 한게 얼마만인가 싶네요 ㅎ

얼마전에 아이폰 알바를 했는데, 게임을 하고, 서버에 점수를 등록해서, 1,2,3등에게 경품을 주는 광고용 어플을 개발했습니다.

여기서 문제가 마이크로 사이트를 작업한 곳에서, 한글 Encoding이 잘안된다고 얘길했었는데,

그런곳도 못해 하면서, 우리가 보겠다고 했다.
 
근데 이게 왠걸, iPhone쪽 소스에 문제가 있었나보다.

AppStore의 바이너리를 갈아치우는게 가장 좋은 방법이겠지만, 그럴만한 시간이 없었다.

완전 대박 사고! -_ㅜ .

문제는 Cocoa FrameWork의 NSString Class String 'UTF8String'이라는 녀석을 사용해서 Encoding 했는데, 그게 제대로 안되는 모양이다.

사실 다른 Encoding Method를 사용하려 했는데, TestCode가 그대로 남아 있었던 모양이다 ( 테스트시에도 제대로 안됐음 ㅜ_ㅜ )

그래서 제대로된 UTF8이 나오지 않았기에, Javascript로 UTF8Decode를 아무리 해도 제대로 안나온다 -_ㅜ.

그래서 든 첫번쨰 생각은,

UTF8String Method를 분석해서, Javasciprt로 구현하는것이다.

다행히 GNUStep에 Core Foundation, Foundation Framework 소스가 있기에, 보았는데 완전 대박.
이거 옮기는 시간이 Binary를 새로 올리는것 보다 더 오래 걸릴 기세였다.

이것도, 옵션이 안되고, 그래서 Proxy를 둬서 새로 Encoding을 해서 넘겨 주는것으로 하였다.

OSX에 Web Server를 올리고 ( 정말 감사하게도, apache2가 기본 설치 되어 있다 -_ㅜ )

bash shell 을 cgi 로 사용해서, objc 프로그램을 실행시켜, Core Foundation을 통해서 잘못된 Decode를 풀고,
새로 Encode 하게 하는 script를 짜고,

ASP 상의 XMLHTTPRequest를 통해서, syncronous method로 변환하게 했다.

일단 동작은 하는데 겁나 찜찜하다 ㅜ_ㅜ.

우선 Review Path하면 Patch 해서 App Store에 다시 등록해야 할듯 -_ㅜ

아.. 오래간만에 shell script도 짜고, 간만의 삽질 ㅎㅎ


iPad라는 녀석 떄문에, 세상이 꽤나 떠들썩합니다.

미국에서는 이미 Wifi모델이 출시되었고, 곧 3G모델이 출시합니다.

한국에서는 iPad가 아직 정식출시되지 않아서 구매대행이 성행하게 되었는데,

정부에서 구매대행은 불법 엄벌하겠다고 한것 까지 모자라, 무선기기를 인증없이 쓰는 사람들을 단속하겠다는 말까지 나돌고 있으니,

iPad라는 녀석이 세간의 관심을 확 끌어 당기고 있는 녀석임에는 분명한가 봅니다.


iPad라는 녀석의 첫 인상은 말보다 제가 좋아하는 유머로 대체 해볼까 합니다.


ㅎㅎ 그냥 커진 아이폰이잖아 ! 라는게 제 첫 인상이었습니다.

왠지 iPad 출시 발표가 있기전 아마도 아이폰 3GS가 발매가 확정된 이후로 기억합니다만,

애플 커뮤니티등에서 엄청나게 많은 iPad에 대한 루머가 발생했습니다.

저는 사실 iPad가 iPhone 처럼 철저한 기획을 통해 출시한 제품이라기보다 워낙에 루머도 많고, 스티브잡스가 테블렛 PC에 대한 꿈도 있고 해서 만들어진 제품이 아닐까 조심스레 추측합니다.


그럼 여전히 제 첫인상을 이어가고 있을까요? 만약 그렇다면 이런 글을 쓰는데 시간을 낭비하는 일따윈 없었을것입니다 ㅎ

크기가 큰 아이폰 혹은 아이팟 터치라는 생각에는 변함이 없습니다만, 크기가 커졌다는 것에 맹정이 있다고 생각합니다.



요새 이슈가 되고 있는 'Alice for iPad' 동영상을 한번 보시죠 ^^



이 녀석이 아이폰에 있다고 생각하면, 제대로 읽을수도 사용할수도 없었겠지만,

단순히 '크기가커진' 아이패드에 있기 떄문에 'Interactive' eBook이라는게 성립됩니다.

제가 아이패드의 강점으로 생각하는것중 하나가 바로 이 '인터랙티브' 입니다.

이런 'Interactive'를 통한 교육용 어플 시장이 진지하게 펼쳐 지지 않을까 생각합니다.


사실, 제가 iPad에 큰 관심을 갖게 된 계기는 전문성을 가진 어플들에 있습니다.

Photoshop for iPhone 을 생각해보도록 하죠

아이폰에서 하는 포토샵은 솔직히 말해 장난감입니다. 아무도 아이폰에 있는 포토샵으로 자신의 사진을 진지하게 리터칭하지 않습니다.

하지만 아이패드에 있다고 생각해볼까요 ?

사진을 불러드리는게 좀 짜증나게 되어 있어서 사용성은 떨어지겠지만, 사진 편집용도만 생각해본다면 꽤 쓸만할꺼라 생각됩니다.

드로잉 프로그램은 어떨까요? 아이폰용 드로잉 프로그램이 화가들의 아이디어 스케치 용도로 국한되었다면,

아이패드용 드로잉프로그램을 통해서 충분한 작품활동도 할수 있을것 같습니다.

특히나 만화작가들에게 유용할꺼라 생각합니다.


특화된 어플들이 아이폰에 있을때는 장난감같이 보였다면, 아이패드 속에 들어 감으로써 꽤 쓸만해졌다는거죠.

시장이라는것은 흘러가봐야 하는것이라 두고 봐야겠지만,

아이폰 앱스토어의 키워드가 '게임' 과 'SNS' 였다면, 아이패드에선 '특화된 어플'이라는 단어를 추가 하고 싶습니다.
Keyboard
Keyboard / cc by i_yuda



저는 이름만 들어 도 즐거운 해피해킹 키보드를 2년째 사용하고 있습니다.

제가 살때만해도 20만원 초반대 였던것 같은데..

미친 환율 덕에 40만원에 육박한다는 소문을 들은적 있는것 같네요 ㅜ.ㅜ


회사 내의 다른 개발자 분들이 간혹 키보드에 너무 큰돈들이는거 아니냐고 그러시는데..

우리 밥줄인데.. 이정도는 투자 해야죠 ㅎ

물론 저렴한건 아니지만 술 몇번 혹은 한번 안먹으면 구입할 수 있으니 꼭 비싼것만은 아니라고 생각합니다.
( 제가 구매 했을떄 기준으로 ㅎㅎ )


저는 임베디드 리눅스 위에서 STB Application ( C Language )를 개발하면서 밥 벌어 먹고 살고 있습니다.


우리 회사에서는 Eclipse 등의 IDE 툴 대신 고전적인 vim + Makefile 시스템을 이용하고 있습니다.

누군가 'vim' 을 제대로 습득하고 나면.. 어떤 Editor 혹은 IDE 보다 편하다고 하는데.. 맞는 말인것 같습니다.

vim 을 editor 로 사용하면 키보드에서 손을 떌일이 없습니다..

Web 서핑이나 이메일을 사용할때를 제외하고는 거의 키보드에 손을 떌일이 없습니다.


저같이 키보드가 마우스 보다 더 편하고, 키보드에서 마우스로 손을 옮기는것조차 귀찮아 하는 사람에게는 더할나이 없이 좋은 툴이죠.

여기서 키보드를 HHKB 로 교체 하게 되면 키보드위에서 움직임도 최소화가 됩니다.

Function Key 들이나 기타 키들이 Fn 키와의 조합으로 되어 있고, 모든키가 손목을 움직이지 않고 사용이 가능합니다.

(여담이지만 19인치 모니터 2개를 듀얼로 쓰다가 머리를 움직이는게 싫어서 24인치를 구입했습니다 ㅎㅎ )


단점이라면 PageUp/PageDown, Home 키를 사용하는게 직관적이지 않다는것과, 방향키마져도 Fn키와의 조합을 사용해야 하기 때문에
매우 불편하다는 점입니다.
사실 생각해보면 방향키가 있는 HHKB lite 의 경우 방향키를 위해 손목을 움직여야 할것 같으니, 또 귀찮아 할지도 모르겠근여ㅎㅎ


저처럼 vim 을 주력 EDITOR로 삼는 분들께는 꼭 추천하고 싶은 키보드라고 생각합니다.



여담으로 이글을 읽으시면 이자식 완전 게으름 뱅이구나 라고 생각하실지도 모르겠는데 ;ㅁ;,
전 개발자는 좀 게을름을 가지고 있어야 한다고 생각합니다 ㅎㅎ
여기서 게으르다는건 무조건 일은 안한다가 아니라 같은 일은 하더라도 얼마나 효율적으로 할수 있는가를 고민하는 자세라고 생각합니다.
제가 너무 부지런하면 비효율적이고 불편하지만 그냥 묵묵히 쓰지 않았을까요 ?
게으르다는건 효율을 추구한다는것과 동의어가 아닐까 하고 우겨봅니다 ㅋㅋㅋ











1. Trac 을 통해서 새 프로젝트 생성하기

trac-admin [projectpath] initenv



2. Admin 계정 설정하기

milestone이나 component 등을 설정하기 위해서는 admin 권한이 필요하다.
TRAC에 접속해서 wiki 페이지를 잘 찾아 보면 추가하는 방법이 나와있다.
(http://localhost:8000/my-project/wiki/TracAdmin 문서에 설명이 되어있다.)

방법은 아래 구문과 같다.
trac-admin <my-project pth> add <id> <권한> [<권한>]

예는 아래와 같다.
trac-admin c:\projects\trac\my-project permission add alones TRAC_ADMIN

※ 추가 가능한 권한은 아래와 같은 명령으로 알 수 있다.
trac-admin c:\projects\trac\my-project permission list alones


3. Web에서 Admin 활성화 시키기

{$TRAC_HOME}/conf/trac.ini 파일을 수정해야한다

[components] 옵션에

webadmin.* = enabled 를 추가 해주고 접속 하면 된다 :)

[components] 옵션이라는 항목이 없으면 직접 추가해주면 된다 :)


3. Trac Backup

$ cd /var/lib/trac
$ ls
angelos production test
$ sudo trac-admin angelos hotcopy /media/외장\ 디스크/백업/trac/angelos
Hotcopying /var/lib/trac/angelos to /media/외장 디스크/백업/trac/angelos ...
Hotcopy done.
$ sudo trac-admin production hotcopy /media/외장\ 디스크/백업/trac/production
Hotcopying /var/lib/trac/production to /media/외장 디스크/백업/trac/production ...
Hotcopy done.


+ Recent posts