Monthly Archives: January 2008

2008년 1월 OCaml Meeting 프리젠테이션 & mp3

2008년 1월 26일 파리에서 OCaml 미팅이 있었나봅니다.

프리젠테이션과 mp3 파일이 올라왔네요. 평소에 관심만 있고 실제적으로는 활용을 아직 못하고 있는 언어인데… (LISP도 마찬가지) 여러가지로 관심이 가는 언어입니다. 요즘은 다이나믹 언어가 추세이긴 하지만, static type checking도 프로그램 안정성에 많은 기여를 하죠. Ocaml에서는 type inference 지원으로 자바처럼 열심히 type 선언을 안해줘도 됩니다. static type checking을 위해서 프로그래머가 노가다할 필요도 없고, 안전하면서도 유연한 소스가 나오죠… 언어적인 측면도 좋고, 컴파일러도 구현도 아주 잘 되어있지만, 라이브러리(특히 윈도우 관련 라이브러리)가 풍성하지 못해서 아직 활용을 못하고 있습니다.

아래 페이지에서 프리젠테이션과 mp3를 구할수 있습니다.
http://wiki.cocan.org/events/europe/ocamlmeetingparis2008

프랑스 파리에서 했는데, 모두 영어로 되어있는거 같긴 하네요. 다만 mp3가 너무 작게 녹음됐네요. mp3gain으로 볼륨 조절하시면 됩니다.

제가 요즘 실제로 사용하는 언어는:
   C++
   Python
   PHP
   Javascript
   Actionscript

관심있는 언어는:
   LISP
   Objective Caml
   D언어
   Smalltalk

입니다.

옛날 밀림 인터뷰를 찾았습니다.

어제 예전 자료를 찾다가 백업 CD에서 생각지도 않은걸 찾았습니다.

2001년 밀림에 열심히 음악을 올리던 시절 순위권(?)에도 올라가고 해서… 인터뷰를 하게 됐었습니다. 동영상도 찍고, 글도 올라왔었죠. 현재 밀림 사이트에는 흔적이 없어진듯하여 www.waybackmachine.org 를 통해서 찾았습니다.

아래가 메인에 걸렸던 링크고,


백업 CD에서 동영상을 찾긴했는데, 동영상보다 글이 더 잘 정리되었네요. 동영상은 공개안하지만, 동영상에서 배경으로 Take me to the shore 음악이 나왔었습니다.

      mix1009-take_me_to_the_shore.mp3

 

오랜시간 지났지만 인터뷰 하신 분이 너무 친절하셨었고, 정리도 정말 잘해주셨네요.

nikto 웹서버 보안 점검툴

pauldotcom.com podcast에서 소개된 툴인데, 직접 돌려보니 생각지도 않게 많은 이슈들이 나오네요. 먼저 홈페이지 소스를 CVS로 관리하는데 CVS/Entries 파일에 접근해 php 이외의 다른 파일들을 확인할수 있던 문제가 발견되었습니다. php 외에도 내부적으로 py나 c 파일들도 CVS에 편의상 등록해서 썼었는데, CVS 하위 디렉토리에 접근하지 못하도록 모두 막았습니다.

그리고, CentOS에서 lighttpd 1.4.13 src rpm을 컴파일해서 사용했었는데, amd x64 머신에서 이유는 모르겠지만 스캔하면 웹서버가 죽는 일이 발생했습니다. 모든 x64 서버에서 그런건 아니고, 중요한 서비스를 하는 두대에서 발생했습니다. 원격에서 lighttpd를 그냥 죽일 수 있더군요. 재빨리 업그레이드 하려고 하는데, src rpm도 찾기 힘들고 (찾긴 찾았느데 의존성 문제때문에…) 해서 소스를 가져다 컴파일해서 make install하고 (/usr/local 밑에).. /etc/init.d/lighttpd에서 실행파일을 /usr/sbin/lighttpd에서 /usr/local/sbin/lighttpd로 변경하고 재시작하니 문제없이 업그레이드가 되었습니다. 정확히 문제가 뭐였는지는 파악하지 못했지만 업그레이드해서 해결은 됐습니다.

또 lighttpd에서 /server-status 를 편의상 열어놨었는데, 이거도 경고가 나와서 접근제한 걸었습니다.

보안 점검툴 돌릴때는 본인이 관리하는 서버나 서버 관리자에게 미리 허락을 맡고 하세요. 흔적이 다 남습니다. 스캔 패턴이 항상 일정한지 응답에 따라 달라지는지 모르겠지만, nikto로 한번 스캔하면 3151번의 요청이 로그에 찍히네요.

Incredibuild 분산 컴파일

전에 Visual Studio에서 precompiled header 설정을 바꿔서 컴파일 시간을 대폭 줄인 글을 올렸었습니다. 그때 여러가지 컴파일 속도를 향상할수 있는 방법을 찾다가 발견한게 Incredibuild인데 평가판(30일)을 설치해서 회사에서 적용해 보았습니다.

최근 접한 프로그램 중에 개념도 신선하고, 구현도 아주 잘 된 소프트웨어네요.

Coordinator와 Agent로 설치할수 있는데, Coordinator는 빌드를 전체적으로 관리해주는 서버 프로그램으로 네트워크에 하나만 설치하면 되고, Agent는 Coordinator 서버에 연결해 있다가 작업을 할당 받아 처리하는 프로그램입니다. Agent를 많이 깔아주면 속도 향상이 그만큼 되죠.

신기한거는 Agent 설치하는 피씨에 개발툴이 없어도 된다는 겁니다. 컴파일러까지 전송해서 실행하는 방법으로, 처음 빌드를 요청한 컴퓨터의 빌드시스템을 그대로 받아서 실행하기 때문에 시스템간의 버전 차이, 헤더파일 차이 문제 때문에 빌드가 이상하게 되는거를 방지할수 있습니다. PC에 Agent만 설치하면 되기 때문에, 개발툴을 설치하지않고 쉽게 여러 컴퓨터에 설치할수 있는것도 큰 장점입니다.

또한, Visual Studio 6.0이 Multi CPU를 전혀 활용하지 않기 때문에 하나의 피씨에만 깔아도 속도 향상을 시킬수 있습니다.

아래는 coordinator 상황을 볼수 있는 모니터 프로그램입니다. 8개의 PC가 등록되어 있으며, 현재 온라인이 4개입니다. 요즘은 거의 Dual Core이기 때문에 CPU는 16개 입니다.

아래는 빌드했을때 모습입니다. 빌드는 Visual Studio안에 Incredibuild 메뉴에서 Rebuild로 할수 있습니다. 6개의 PC가 사용되었고, 사용한 CPU는 12개 입니다.

아주 비주얼하게 보여주기 때문에 눈도 즐겁죠^^ 설치하고 몇번을 rebuild all하면서 빌드 속도에 만족하고 있습니다. Visual Studio안에 창이 나타나며, 별도로 창을 띄워서 볼수도 있습니다. 원래 네모 상자안에 소스 파일명이 나왔지만 회사 보안상(?) 지웠습니다. 초록색이 이상없이 컴파일 된거고, 오류가 나면 빨간색, 경고가 있으면 노란색으로 표시됩니다. 하늘색은 초기에 종속성 분석과정과 링크 과정입니다. 위에 그래프는 여러가지 중에 선택해서 보여줄수 있도록 되어있는데, 파란색이 실제로 사용한 CPU 사용량(GHz 단위), 빨간색이 유효하게 사용한 CPU 사용량입니다. 차이가 나는 이유는 일을 시키고 늦게 처리되는거나 종속성 때문에 따로 돌릴수 있는 작업이 없을때는 중복적으로 일을 시키고 그중 빨리 처리되는 결과를 받아서 처리하기 때문입니다. 위 그래프 상에서 최대값이 27.5GHz입니다 ^^.

원래 5:21.9 초 걸리던 빌드 시간이, precompiled header 설정 오류를 고치고 1:32.8 초로 incredibuild를 도입하고 나서는 23.5 초로 줄었습니다. 원래보다 13.7배, precompiled header 설정 오류를 고치고 나서 기준으로 보면 3.9배 빨라졌습니다. 사용한 CPU에 비해서 아주 많이 빨라진건 아니지만 컴파일하고 기다리는 시간이 즐겁고 짧아졌네요.

하지만, 실제적으로 개발할때 rebuild all하지 않고 바뀐 부분만 컴파일하기 때문에 incredibuild 도입효과는 생각보다 크지 않습니다. 링크과정 자체는 분산해서 처리하기가 애매하기도 하고, 컴파일된 결과를 모두 받아와서 링크하는 과정을 거쳐야하기 때문에 그런거 같습니다. 그리고 Agent를 추가한다고 지속적으로 속도가 비례해서 증가하지 않습니다. 네트워크 Bandwidth의 영향도 있고, 소스간 종속성 때문에 분산해서 한꺼번에 처리할수 있는 일의 수가 어느정도 정해져 있기 때문입니다. 소스간 종속성을 줄이면 개선이 가능하겠지만, 중소규모의 소프트웨어 프로젝트에서는 도입 효과가 크지 않을거라 생각합니다. 단, 빌드 서버를 구축한다면 아주 좋은 방법이 될거 같네요. 그런데, 가격이 문제입니다! 카피당 $350.

30일간 평가판을 사용해볼수 있으니, 빌드시간이 문제가 된다면 한번 사용해보시기 바랍니다.
http://www.xoreax.com/download.htm

Trac report

2008년 들어서 회사 개발팀에서 모든 일을 Trac의 티켓으로 관리하기로 했습니다.

Trac이 한글화 되어있지 않은거 같아서 몇가지 간단한거는 한글로 바꿨습니다.

현재 0.10.4 버전을 사용중인데, 설정 변경은 TracWebAdmin 플러그인을 통해서 했습니다. 새버전에는 Admin 기능이 Trac에 통합된다고 하는데, 정말 없으면 안되는 필수 기능입니다.

Priority를 영어에서 1,2,3,4,5로 바꾸고,
Type은 버그수정, 기능개선, 새로운기능으로 변경했습니다.

개발팀 밖에서 티켓 등록 및 모니터링을 할수 있도록, Permission을 바꿨습니다.
먼저 개발자(developers) 그룹을 생성하고, TIMELINE_VIEW와 BROWSER_VIEW 액션을 anonymous에서 developers로 옮겼습니다. (삭제하고 다시 등록)

Trac의 사용자 인증은 htpasswd를 사용하며, 웹서버는 lighttpd를 사용하고 있습니다.

View Tickets 페이지 보면 report를 편집할수 있는데,  편집해서 TODO와 최근변경사항을 만들었습니다. TODO는 아직 완료되지 않은 일(티켓)을 내거와 다른사람거로 나누어 보여주며, 우선도에 따라 정렬해 보여줍니다. 바탕색도 우선도에 따라서 보여줍니다. 아래는 report를 위한 SQL Query입니다.

[CODE]
SELECT p.value AS __color__,
  (CASE owner
    WHEN ‘$USER’ THEN ‘My Tickets’
    ELSE ‘Active Tickets’
   END) AS __group__,
  id AS ticket,
  (CASE status WHEN ‘assigned’ THEN owner||’ *’ ELSE owner END) AS owner,
  summary, component, priority, t.type AS type,
  time AS created,
  changetime AS _changetime, description AS _description,
  reporter AS _reporter
  FROM ticket t, enum p
  WHERE status IN (‘new’, ‘assigned’, ‘reopened’)
AND p.name = t.priority AND p.type = ‘priority’
  ORDER BY (owner = ‘$USER’) DESC, p.value, milestone, t.type, time
[/CODE]

최근변경사항은 티켓에 일어난 최근 변경 사항을 20개 보여줍니다. 물론 Timeline에서도 볼수 있지만, Timeline을 개발자만 볼수 있고, 소스 커밋과는 별도로 볼수 있도록 하는게 편리할것 같아서 따로 report를 생성했습니다.

[CODE]
SELECT
  id AS ticket,
  summary,
  changetime AS modified,
  status,
  component,
  t.type AS type,
  (CASE status WHEN ‘assigned’ THEN owner||’ *’ ELSE owner END) AS owner,
  time AS created,
  description AS description,
  reporter AS _reporter
  FROM ticket t
  ORDER BY changetime desc limit 0,20
[/CODE]

trac report 만드는데 참고할 문서가 별로 없어서 좀 헤맸는데… 위에서 reporter as _reporter식으로 “as _*”로 하면 테이블에서 항목이 표시가 안됩니다. 기본 예제들을 자세히 보면 항목이 뭐가 있는지 볼수 있으므로 기본 예제들을 참고하시고 조금씩 바꾸면 원하는 출력을 얻을수 있습니다.

TODO와 최근변경사항 링크를 메뉴로 쉽게 접근할 수 있도록, http://trac-hacks.org/wiki/NavAddPlugin를 설치했습니다.