Refactoring 책에서 인상 깊은 구절
3장 코드 속의 나쁜 냄새 중 주석(Comments)에 있는 부분이다.
주석을 써야 할 것 같은 생각이 들면, 먼저 코드를 리팩토링 하여 주석이 불필요하도록 하라.
사실 주석을 다는 것이 귀찮긴 하지만, 소스 그 자체로 술술 읽혀진다면 정말 잘 짜여진 코드가 아닐까? 그래서 언제나 주석을 달지 않는다. 대신 함수 이름을 더욱 더 잘 지을려고 노력할 뿐.
3장 코드 속의 나쁜 냄새 중 주석(Comments)에 있는 부분이다.
주석을 써야 할 것 같은 생각이 들면, 먼저 코드를 리팩토링 하여 주석이 불필요하도록 하라.
사실 주석을 다는 것이 귀찮긴 하지만, 소스 그 자체로 술술 읽혀진다면 정말 잘 짜여진 코드가 아닐까? 그래서 언제나 주석을 달지 않는다. 대신 함수 이름을 더욱 더 잘 지을려고 노력할 뿐.
회사 내 진행하고 있는 프로젝트에서 매주 회의를 하고 해야 할 일을 간단히 말로 하거나 서로 적어간 후 일을 진행하니 계속 잊어 버리게 되고 비효율적이라 bug tracking system을 사용하기로 하였다.
현재 해당 프로젝트가 Java 기반의 stand alone 프로그램이기 때문에 eclipse를 이용하여 개발을 하고 있다. Eclipse에는 Mylyn이라는 task 관리 plug-in이 존재하며, 현재 존재하는 많은 bug tracking system과 연동이 되고 있다.
그리하여 bug tracking system 중에 mylyn과 가장 잘 연동되는 web application을 선택하여 부서 내 Ubuntu 서버에 설치하기로 하였다.
가장 먼저 Bugzilla를 설치 하였지만 설치 및 Mylyn과 task sync는 되었으나, task 추가가 잘 되지 않아서 포기 하였다. 다음은 Mantis를 설치하고 Mantis-connector를 사용하여 task sync를 하려고 했지만 connector에서 error로 인해 포기 하였다. 마지막으로 trac를 설치하였지만, Mylyn과 연동이 멋지게 되지 않아 다시 원점으로 돌아오게 되었다.
3가지 system 모두 실패 후, php로 만들어진 Mantis를 집중적으로 분석하였다. 현재 Mylyn과 Mantis의 연동의 문제는 Mantis-connector였다. Mantis가 깔려있는 directory에 mc폴더를 생성하고 Mantis-connector를 압축을 풀어 복사하면 설치가 완료된다.
테스트하기 위해서는 http://mantis주소/mc/mantisconnect.php 에 접속을 하면 특정페이지가 나타나야 하지만
Fatal error: Cannot redeclare class soapclient in /blahblah/mc/nusoap/nusoap.php on line 7240
php error가 나는 것이었다. 구글링한 결과 mc 폴더 안에 nusoap안에 nusoap.php의 6407 줄을 다음과 같이 수정하니 문제는 해결 되었다.
class soapclient_ extends nusoap_base {
하지만 Mylyn에서 Task를 불러오기 위해서 query를 하나 이상 만들어야 하는데 query만드는 부분에서 마지막 filter 부분을 선택할 수 없었다. 하지만 이때는 거의 3일 동안 매달린 후라 이미 사용한 시간이 아까워서 마지막 최선의 노력을 다했다.
해결방법은 Mantis내에서 view issue에서 저장된 filter가 없어서 query 만드는 대화창에서 filter를 선택할 수 없었다. 간단히 filter를 하나 만들어 저장하면 해결된다.
Mylyn에서 한글로 된 issue가 깨어질 경우는 다음과 같이 수정하면 된다. mantisconnect.php 파일의 30라인 아래에 다음과 같이
$l_oServer->xml_encoding = “UTF-8″;
$l_oServer->soap_defencoding = “UTF-8″;
$l_oServer->decode_utf8 = false;
수정하면 된다.
sprintf는 숫자(int, double)등을 문자열로 바꿀때 쓰이는 함수로, 이외에도 서식화를 위한 용도로도 C 또는 C++ 프로그래밍 시 많이 쓰인다. 하지만 C++를 프로그래밍 한다면 sprintf 대신에 stream 관련 클래스를 사용하는 것은 어떨까? 그리고 C 프로그래밍에서는 보안과 관련해서 snprintf으로 바꾸는 것이 좋다.
많은 사람들이 C++ 언어로 프로그래밍 할때 C 언어 방식으로 많이 한다. 예를 들면 type casting, 문자열 관련, 표준 입출력 등에서 말이다. 이 중 문자열 부분에서 여러 타입이나 클래스에서 문자열로 변환할 때 아래와 같이 사용한다.
char buf[50];
sprintf(buf,”%d”,i);
하지만 ostringstream를 쓴다면 아래와 같이 쓸수 있다.
std::ostringstream o;
o<<x;
o.str().c_str();
만약에 소수점 자리가 정해져 있다면
o2<<setprecision(4)<<Qs[i]*60000.*0.0314;
이런 식으로 처리할 수 있다.
C++를 C++ 답게!! ![]()
F#을 공부를 하면서 TDD를 이용하기 위해 구글링을 하다가 찾은 사이트에서 배운 내용이다. NUnit은 .net 프레임 워크 언어(C#, Basic)에서 많이 쓰이는 테스트 프레임 워크 중 하나로 자바의 JUnit과 비슷하다. F#은 OCaml에서 파생된 .net 프레임워크 ML 언어로 순수 함수형 언어는 아니지만 C나 C++ 등 {과 }로 묶은 프로그래밍 언어에 익숙한 사람에게 재미있는 충격이 될 것이다.
일단 NUnit 최신 버젼과 F# 최신 버젼을 받는다. 그리고 설치를 한다.
프로젝트를 생성하고 프로젝트 속성에서 아래와 같이 수정을 한다. 혹시 폴더가 다른 경우 적당히 알맞은 폴더로 고치면 된다.
* WPG2 Plugin Not Validated *
c#의 using과 비슷한 역할을 하는 open을 사용하고 아래와 같이 테스트 코드를 작성한다.
1 open NUnit.Framework
2
3 let sum xs =
4 0
5
6 type [<TestFixture>] MyProjects =
7 class
8 new () = {}
9
10 [<Test>] member this.TestSumEmptyList () =
11 Assert.AreEqual(0, sum [])
12 end
그후 NUnit GUI에서 exe 파일을 불러오면 아래와 같이 테스트를 해볼수 있고 테스트는 당연하지만 성공한다.
* WPG2 Plugin Not Validated *
만약에 아래와 같은 에러가 발생하면 exe 파일이 있는 폴더에 NUnit.Framework.dll 와 NUnit.Core.dll 파일을 복사해주면 된다.
* WPG2 Plugin Not Validated *

Digg는 기술과 과학 주제에 특화된 커뮤니티 베이스의 인기 웹사이트이다. 요즈음에 정치나 엔터테이먼트등으로 카테고리를 확장을 하고 있다.
Digg는 2004년 11월 Kevin Rose, Owen Byrne, Ron Gorodetzky 그리고 Jay Adelson에 의해 실험적으로 시작하였다. 그들 모두 현재 활발하게 자신의 역할을 맡고 있다. 사이트는 2004년 12월 5일에 첫 선을 보였다. 그당시 홈페이지는 광고가 없는 Dan Ries가 디자인한 형태였지만 2005년 7월에 AdSense가 추가되고 2.0으로 버젼이 올라섰다. 그리고 2006년 6월 26일 월요일 3번째 버젼 Digg을 선보인다.
AACS 암호화키는 HD DVD와 Blu-ray Disc에서 디지털 저작권 관리 보호를 목적으로 쓰인다. 2007년 5월 1일에 해당 키가 해킹된 상태로 Digg에 나타나고 Digg는 변호사들의 조언에 따라 해당 게시물을 지우고 관련된 회원들을 탈퇴 시켰다. 하지만 많은 회원들의 요구로 Kevin Rose는 해당 글을 제목에 해킹된 키를 그대로 붙여 게시를 했다. 그때 당시 나도 Digg를 들락날락 거렸는데 해당 암호키가 엄청한 Digg 수와 함께 덩그러니 올라와 있는 것을 보고 많이 의아했다. 그로 인해 해외 미디어들 입에 오르락 내리릭하는 큰 사건이 일어 났었다.

인 터넷에서 기사, 비디오, 팟캐스팅을 찾아서 Digg.com에 올리면 Upcoming Stories에 나타난다. 그러면 다른 맴버들이 이것을 찾을수 있고, 만약에 그들이 맘에 든다 Digg it 할것이다. 해당 게시물이 유명해지면 홈페이지내에 카테고리안으로 옮겨 가고 정말로 유명해지면 Top 10에 들어 간다. 그리고 Upcoming에 들러서 다른 사람들이 올린 자료들을 보고 Digg 할수도 있다.
특정 게시물이 마음에 든다면 Digg를 하여 카운트를 증가시킬수 있다. 너의 다른 친구들이 해당 아이템을 너의 프로필을 통해 알수도 있다. 하지만 만약에 그 스토리가 재미없고, 주제에 벗어나고, 복사된 것이라면 Bury를 클릭해라. 많은 사람들이 Bury를 하면 Digg는 해당 게시물을 없애게 된다.
너의 친구들이 네가 찾고 Digg한 것을 메일로 보내주며 친구 리스트를 만들고 Digg한 것을 둘러 볼수도 있다.
너의 의견을 댓글로 달고 다른 사람들의 의견을 보고 토론을 할 수도 있다.
길것만 같았던 두렵기만 하던 복학 첫 학기가 거의 끝나가고 있다. 아직 다음주 월요일 확률 통계 시험이 남아서 방학은 아니다. 텀프로젝트 한다고 학교에서 밤을 세보기도 하고 학기 초 뮤즈 본다고 수업에 안 들어간 적도 있지만 3년전 1학년때에 비해 공부도 열심히하고 정리도 열심히한거 같아서 한학기 총 정리를 이렇게 해본다.
월, 수요일 9시부터 75분 동안 김종덕 교수님께서 강의를 해주셨다. 주로 Random variables에 대해 배웠으며 과제로 Matlab 프로그래밍을 하였다. 내용은 수학이며 어려웠지만 교수님께서 젊으시고 열심히 가르쳐 주셔서 재미있었다. 특히 성능 체크를 할때 random을 특정 distribute로 모델링해서 simulation하는 것이 생각에 남는다.
월, 수요일 10시 30분부터 75분 동안 우균 교수님께서 강의를 해주셨다. 2주마다 퀴즈를 치는 수업으로 Set, Counting, Relation, Function, Mathematical induction 등에 대해 배웠다. 논리쪽을 배울때에는 다 맞는 말같아서 아리송했다. 특히 Big Oh에 대해 배울때 흥미 있었다.
월, 수요일 13시부터 75분 동안 이도훈 교수님께서 강의를 해주셨다. 공대생, 엔지니어가 가장 부족하다고 듣는 글쓰기와 발표에 대한 수업이다. 영문 메일, 영문 이력서, 제안서, LATEX에 대해 배웠으며 특히 지원군과 함께한 성공적인 테크니컬 세미나 발표가 있다. 이 발표를 위해 Keynote 자료를 만드는데 Takahashi, Lessig, Dick 등의 자료를 보고 참고 하였다.
화, 목요일 9시에 마찬가지로 75분 동안 유영환 교수님께서 강의를 해주셨다. 현재 회사에서 많이 쓰고 있고, 앞으로도 많이 쓰일 언어인 C++에 대해 다시 처음부터 배우고 많이 느낀 수업이다. type casting을 할때 C 스타일의 괄호 대신 static_cast 등으로 하는 것에 놀랬고, template과 friend에서 많은 것을 배웠다. Java나 C#만 진정한 OOP를 할 수 있다는 편견을 버릴수 있었던 수업이었다. 하지만 실습을 많이 하지 못해 아쉬웠다. 수업시간에 배우고 찾은 자료를 위키에 정리하였다.
화, 목요일 10시 30분부터 75분 동안 김정구 교수님께서 강의를 해주셨다. 다이오드와 MOSFET 트랜지스터에 대해 배웠다. 전자과 수업에 비하면 정말 쉽게 수업을 해주셨고 이런게 있다. 라는 느낌으로 수업을 진행하셨다. 참 유익한 수업중 하나였다.
화, 목요일 13시부터 75분 동안 김성민 교수님께서 강의를 해주셨다. Unix 시스템에 대한 것 뿐만이 아니라 windows 프로그래밍 하는데에도 도움이 되었다. 파일과 디렉토리의 구조, 구현 원리 그리고 socket 등이 가장 기억에 남는다. 그리고 밤을 세게한 텀 프로젝트가 있는 과목이기도 하다. 수업시간에 배우고 찾은 자료를 위키에 정리하였다.
화요일 3시 30분 부터 100분 수업을 하였다. 한 학기의 반은 한국인 강사가 수업을 하고 나머지 반은 외국인과 수업을 하였다. 한국인 수업은 매주 외국 유명한 news 웹 사이트에서 한 기사를 번역하고 제출한다. 그리고 강사는 2개의 기사를 뽑아서 제출한 학생이 수업을 진행하는 방식이다. 그리고 중간 고사때 해당 기사로 시험을 치루었다. 그리고 외국인 강사와의 수업은 회화식 수업이었지만 너무 수업시간이 부족해서 아쉬웠다.
화요일 18시부터 실험 끝날 때까지 수업이 진행되는 실습 시간이다. 과목 이름과 정보 컴퓨터 학부 수업인 것을 감안하면 컴퓨터 실에서 프로그래밍 하는 것 처럼 보일지도 모르나 실제는 회로 실험이었다. 어려운 실험들은 아니고 이것 역시 전자과 수업을 맛보는 시간이라고 볼수 있다. 처음에는 10시 넘어서 11시까지 실험을 하였지만 요령도 생기고 결과 레포트를 수업시간에 바로 제출하는 방식이 바뀌어서 학기 후반에는 8시 전후에 수업이 끝났다.
열심히 학교 생활을 하였고 재미있게 한학기를 보낸것 같다. 친구들을 많이 못사귀어서 아쉽지만 난 친구들을 믿는다. 기말 고사때 헤이해져서 공부를 열심히 못한게 가장 아쉽고, 친구들과 study를 따로 못한것도 아쉽다. 다음 학기때에는 더욱더 보람찬 알찬 학기가 되도록 노력해야겠다.
오랫동안 블로그를 방치를 해두었고 요즘들어 슬슬 바빠지기 시작하니.. 갑자기 블로깅을 하고 싶어졌다.
최근 나에게 가장 큰 일은 학교 Unix Systems Programming 과목의 Unix Term 과제이다. 과내 같은 학년 고등학교 때부터 친구인 로뽕군과 지원군과 같은 팀을 이루어 공을 피하는 쫑기 마우스라는 게임을 개발하고 있다. IPC, 소켓 프로그래밍, Curses, 쓰레드등 여러가지 기술들을 접목시키면서 개발을 하고 있다.
서버는 C로 짜고 있으며 Client는 C++과 ncurses를 이용하여 개발하고 있다. 다같이 학교 전산실에 모여서 재미있게 개발하면 좋겠지만 이런 저런 개인의 사정으로 이제 과제 제출일 일주일 남겨두고 서버와 클라이언트는 통합도 되지 않고 클라이언트만 쪽만 봐도 게임이 제대로 이루어 지고 있지 않는다. 현재 서버와 클라이언트 상황이다. FreeBSD 서버에서 개발하다가 Ubuntu에서 빌드를 하는데 union semun 이 놈 때문에 애를 먹었다.
* WPG2 Plugin Not Validated *
* WPG2 Plugin Not Validated *
현재 소스코드는 subversion으로 버젼 컨트롤이 되고 있으며 여기에서 누구든지 checkout 할수 있다. 현재 개발 상황은 이 페이지에 UnixTerm에 들어가면 웹으로 로그나 리버젼을 볼수 있다. 그리고 TortoiseSVN을 이용하면 재미난 통계를 뽑아 낼수 있는데 아래와 같다.
* WPG2 Plugin Not Validated *
* WPG2 Plugin Not Validated *
Doxygen을 이용한 자동 문서화도 현재 하고 있다. 전부 다 된것은 아니지만 이렇게 멋진 것들이 자동으로 뽑아지니 참 좋은거 같다.
어찌하다보니 학교와 회사생활을 동시에 하게 되었다. 학교 수업을 최대한 타이트하게 짜고 남은 시간을 회사에서 최대한 오래 보내는 것이다. 일단 한달동안 해본 결과 썩 나쁘지는 않았다. 일단 화요일이 아침 아홉시부터 저녁 열시까지 수업이 빡빡하게 차있고, 금요일은 수업이 하나도 없기때문에 월, 화는 학교에서 최대한 오랫동안 있고 목, 금은 회사에서 최대한 오래 있는 구조이다. 수요일은 유동적으로 할 생각인데 주로 회사로 출근 할 것같다. 남은 토요일과 일요일은 만약에 일하는 토요일이면 회사에 출근하고 그렇지 않은 토요일이거나 일요일은 최대한 학교 공부를 할 생각이다.
이렇다보니 일단 시간가는줄 모르겠다. 그리고 이동 시간을 줄이기 위해 자가용을 운용하고 있는데 그 덕택에 술도 줄이고(거의 못먹고) 늦게까지 버스 끊길 걱정없이 공부와 일을 할수 있게 되었다. 언제까지 이 생활을 할수 있을지는 모르겠지만 나태한 것보다야 정신없이 바쁜게 더 낫지 않을까?
사실 이 포스트 쓴지는 거의 1달이 넘어간다. 이제야 Publish함. 중간고사 잘치자!!