달력

5

« 2024/5 »

  • 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
2007. 1. 16. 13:07

vim 설정 옵션 2007. 1. 16. 13:07

backup file 생성하지 않기
set nobackup
set backupcopy=no

color scheme 설정하기
~/.vimrc 파일에 아래의 라인을 추가한다.

colors slate

매번 잊어 먹는 옵션^^^
:
Posted by codetemplate
mvn deploy:deploy-file -DgroupId=<group-id> \
        -DartifactId=<artifact-id> \
        -Dversion=<version> \
        -Dpackaging=<type-of-packaging> \
        -Dfile=<path-to-file> \
        -DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \
        -Durl=<url-of-the-repositor-to-deploy>

위와 같은 명령을 이용하면 된다.

디폴트로 deploy:deploy-file 명령은 배포시 pom 파일을 생성한다. pom 파일 생성을 하지 않도록 하려면 아래 옵션을 추가하면 된다.

-DgeneratePom=false
:
Posted by codetemplate
2007. 1. 6. 00:03

유용한 맥용 프로그램들 Mac2007. 1. 6. 00:03

xslimmer
http://www.xslimmer.com

SteerMouse
http://www.macupdate.com/info.php/id/19058

영한/한영사전
http://www.wangsy.com/project/cocoadic/cocoadic.tar.bz2

한국날씨위젯

http://appletree.mine.nu:8080:widgets/WeatherOutside

CarbonCopyCloner
http://bombich.com/software/ccc.html
맥 드라이브를 외부 드라이브로 백업해주는 프로그램


Todos
http://www.dbachrach.com/opensoft/index.php?page=Todos
맥에 설치된 모든 프로그램을 한번에 볼 수 있게 해주는 프로그램


Transmission Torrent
http://transmission.m0k.org/
dock에 upload/download 프로그레스를 보여주는 프로그램


WhatSize
http://www.id-design.com/software/whatsize/index.php
맥의 모든 파일에 대해 어떤 파일(디렉토리)들이 하드 디스크를 많이 차지하고 있는지 보여주는 프로그램


VirtueDesktops
http://virtuedesktops.info/
레오파드에는 기본으로 들어갈 프로그램.
그 전까진 유용하게 사용될 만한 프로그램


Sidenote
http://www.chatelp.org/?page_id=5
화면 구석에 서랍식으로 포스트잇을 사용할 수 있도록 해주는 프로그램


URLWell
http://menu.jeweledplatypus.org/urlwell.html
임시 url을 타스크바에 저장할 수 있도록 해 주는 프로그램


Yep
http://www.yepthat.com/
pdf 파일들을 organize해 주는 프로그램


Screenshot Plus
http://www.apple.com/downloads/dashboard/business/screenshotplus.html
스크린샷을 빠르게 저장하게 해주는 프로그램


High Priority

http://www.kudurshian.net/highpriority/
타스크바에서 iCal의 to-do를 보여주는 프로그램($6짜리)


Quicksilver

http://mac.softpedia.com/get/Utilities/Quicksilver.shtml
아마 제가 하루 중 가장 빈번하게 사용하는 프로그램이 아닐까 합니다.
퀵실버는 제가 수행한 프로그램들을 쉽게 실행할 수 있게 해 줍니다.

Synergy
http://blog.masuidrive.jp/files/synergy-1.3.0-mactel.zip
시너지는 하나의 마우스. 키보드로 2개 이상의 컴퓨터를 사용할 수 있게 해 주는 프로그램이다. 사무실에서 나는 맥에 붙어 있는 키보드, 마우스로 윈도우 피씨와 맥북을 함께 사용한다. 하지만 MaxOSX에서는 synergy의 공식 배포본이 동작하지 않는다. 시너지 서버를 시작하고 나면 'bus error'가 발생합니다.
아래 사이트에서 MaxOSX를 위해 패치된 Synergy 1.3.0을 다운로드 받을 수 있습니다.

Adium
http://www.adiumx.com
OSX에서 MSN, Google Talk, Yahoo Messenger 등 다양한 메신저를 사용할 수 있게 해주는 통합 메신저 프로그램

iTerm
http://iterm.sourceforge.net
개발자인 저로서는 가장 많이 사용하는 어플리케이션이 터미널입니다.
iTerm은 터미널이 멀티 탭으로 돌아가게 해 줍니다.

Parallels
http://www.parallels.com
맥 OSX에서 윈도우즈를 사용할 수 있도록 해 줍니다.
웹에서 ActiveX가 없어지는 세상이 언제 올라나...

Inquisitor 3: Spotlight for Web
http://www.inquisitorx.com/safari/
Inquisitor 3는 웹의 Spotlight와 같습니다. 사파리(Safari) 검색창에 검색어를 입력하면 실시간으로 결과물을 보여줍니다.
:
Posted by codetemplate
2007. 1. 4. 13:31

60초 마다 Full GC가 발생한다. Tuning2007. 1. 4. 13:31

현재 수행 중인 프로젝트가 막바지에 다다라 부하 테스트를 하고 있는데 이 넘들이 60초 마다 Full GC가 발생하는 문제를 보였다. 이 글에서는 이러한 문제의 원인 및 해결책에 대해 기록해 보고자 한다.

먼저 이상적인 Full GC 상황은 아래와 같다.
- 1일 5회 미만 발생
- 발생시 3-4초 이하 동안 수행 완료

근데 우리 어플리케이션은 60초 마다 Full GC를 수행하고, GC 수행 속도도 보통 4-5초, 최대 7초 정도가 걸리고 있었다.

먼저 60초 마다 Full GC가 발생한 이유는 웹에서 찾아 보니 아래와 같았다.
. 60초 마다 Full GC가 발생하는 이유
- http://java.sun.com/docs/hotspot/gc1.4.2/index.html#5.%20Other%20Considerations|outline 를 보면 왜 주기적으로 Full GC가 일어났는지 알 수 있다.
- RMI를 이용하고 있거나
- 특정 모듈/라이브러리에서 주기적으로 System.gc()를 호출하고 있는 경우

이외에 지속적으로 Full GC를 유발하는 다른 경우로는 Permanent 영역의 크기가 적어서 코드가  로드/언로드되는 경우가 발생한다면 Full GC를 수행해도 Permanent 영역을 확보할 수 없음에도 불구하고 Full GC가 지속적으로 수행되는 경우가 있다.

jmap -heap pid

위의 명령으로 Full GC가 빈번하게 발생하는 어플리케이션의 힙 상태를 조사해 볼 필요가 있다.

이번 문제에 대한 나의 해결책은 -XX:+DiableExplicitGC이다. 이 옵션을 지정함으로써 System.gc()에 의해 발생하는 explicit한 gc를 없애고, jvm이 수행하는 implicit한 gc만을 허용하여 Full GC로 인한 오버헤드를 없애는 것이다.

추가적으로 Full GC가 있어날 때 다음과 같은 메시지가 있었다.

Unloading class sun.reflect.Generatedxxx

이에 대한 해결칙으로는 아래와 같이 Permanent 영역의 크기/최대 크기를 동일한 값으로 설정하여 해결하고자 하였다.

CATALINA_OPTS="${CATALINA_OPTS} -XX:PermSize=128m "
CATALINA_OPTS="${CATALINA_OPTS} -XX:MaxPermSize=128m "

또 RMI가 60초 마다 GC를 수반하는 것 관계해서 아래의 옵션을 추가하였다.

CATALINA_OPTS="${CATALINA_OPTS} -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 "

아직 결과는 안 나왔지만 잘 될 것이라고 생각한다. 만일 안 좋은 결과가 지속된다면 이 글을 더 보강하도록 하겠다.
:
Posted by codetemplate
2007. 1. 1. 13:48

프로젝트 일정 관리 툴 - omni plan 관리2007. 1. 1. 13:48

이 글에서는 MS Project가 유사한 맥용 프로젝트 일정 관리 툴인 omni plan의 사용법에 대해 알아본다.
프로젝트 일정 관리 자체에 대해서는 이 좋은 책, 자료가 많고 또 그걸 설명할 만큼 내공이 되지 않으므로 이 글에서는 간단하게 omni plan을 이용하여 프로젝트 일정 계획을 수립하고 추적하는  것에 대해 알아본다.

1. 프로젝트 생성
당근 프로젝트를 생성하는 것이 가장 먼저 수행할 작업이다.
File/New 메뉴를 이용해서 프로젝트를 생성한다.


2. 프로젝트 개시일 설정
프로젝트의 Inspector에서 프로젝트의 시작일을 명시적으로 선택하거나 결정되지 않은 날짜(일명 T-day)를 선택한다.
사용자 삽입 이미지


3. 마일스톤 생성
마일스톤(Milestone)은
  • 프로젝트의 중요한 시점이다.
  • 타스크처럼 소요 시간을 갖지 않는다.
  • 단지 프로젝트 사이클에서의 특정 지점을 표시한다.


4. 타스크 생성
타스크(Task)는
  • 프로젝트가 완료되기 위해 진행되어야 할 무엇
  • 시작일/종료일/완료율/할당된 자원을 갖는다.
  • 타스크들은 그룹핑될 수 있다.
  • 타스크는 다른 타스크들에 종속(Dependent on)될 수 있다.

5. 작업일 수정
캘린더 뷰에서 작업일에 대한 작업 시간을 설정한다.
사용자 삽입 이미지

하루 작업 시간이 8시간이 아니라면 Project Formatter Inspector에서 hours per day 설정을 변경한다.
사용자 삽입 이미지
6. 일정 예외상황 설정
캘린더 뷰에서 Work Schedule for Project를 선택한다.
사용자 삽입 이미지
그리고 나타난 캘린더에서 일정 예외상황이 있는 주(week)를 선택한다.
그리고 휴일 등을 등록한다.
특정 리소스를 선택하면 해당 리소스에 대한 예외상황도 설정 가능하다.


7. 타스크 기간 설정
각 타스크는 완료에 필요한 일정한 소요 시간을 갖는다. 타스크 뷰의 Effort 컬럼에서 타스크 소요 기간을 설정한다.

8. 타스크 그룹핑
관련된 타스크들을 그룹핑할 수 있다.
타스크들을 선택하고 액션 메뉴를 사용하여 그룹핑한다.
이렇게 그룹핑된 타스크들은 모두 보이게 할 수도 혹은 그룹만 보이게도 할 수 있다.

9. 타스크들 간의 종속관계 설정
종속관계를 갖는 2개의 타스크를 선택하고, 툴바에서 Connection 버튼을 클릭하여 종속 관계를 설정한다.
사용자 삽입 이미지
10. 리소스 생성
리소스 뷰에서 리소스를 생성한다.
사용자 삽입 이미지

11. 자원 할당
타스크 뷰에서 타스크를 선택하고 Task Assignments Inspector를 이용해서 리소스를 할당할 수 있다.
사용자 삽입 이미지
혹은 툴바의 Assignment 버튼을 이용하여 자원을 할당할 수 있다.
사용자 삽입 이미지
또 리소스 뷰의 오른쪽 가장 아래쪽에 있는 Unassinged timeline에서 타스크를 드래그하여 리소스의 timeline에 끌어다 놓음으로서도 자원에 타스크를 할당할 수 있다.
사용자 삽입 이미지


12. 자원 레벨링(Level Resources)
이 기능은 프로젝트를 분석하여 효율적인 일정 수립을 제공한다. 이때 타스크 간의 종속성, 자원의 가용성 여부 등이 고려된다.
미완료된 타스크를 재스케쥴링하거나 종속성을 설정하거나 자원 할당을 변경하거나 등과 같이 스케쥴에 변경을 가하는 경우 자원 사용이 균형적으로 이뤄졌는지를 확인하기 위해 자원 레벨링을 수행해야 한다.
툴바의 Level 버튼을 누르고 Don't schedule any task before date 체크 박스 선택을 해제하고 OK 버튼을 클릭한다.

13. 베이스 라인 설정
스케쥴을 설정하고 적절하게 밸런스가 잡혔다면 프로젝트는 시작될 준비가 된 것이다.
Project 메뉴에서 Set Baseline을 선택하여 베이스 라인을 설정한다.
베이스 라인을 설정하게 되면 지금까지 생성한 프로젝트 계획을 베이스라인 스케쥴로 복사한다. 베이스라인 스케쥴은 실제 스케쥴을 갱신하더라도 변경되지 않은채 유지된다. 프로젝트 진행 중에 실제 스케쥴을 베이스라인과 비교함으로서 본래의 계획과 현재의 상태가 얼마나 차이가 나는지를 추적할 수 있다.

14. Violations 해결
스케쥴에 논리적인 불일치가 있으면 타스크 아웃 라인에 붉은색 손바닥 모양으로 표시된다.
violation 윈도우에 자세한 문제와 해결 방법을 알아 낼 수 있다.

15. 중요 패스(Critical Path) 조사
툴바의 Critical Path 버튼을 클릭하면 프로젝트의 종료일을 결정하는 주요 타스크들을 보여준다. Critical Path에 보여지는 타스크 중에 하나라도 일정보다 늦게 끝나면 프로젝트 종료일이 변경된다.
사용자 삽입 이미지

16. 종료된 타스크 반영
프로젝트가 진행됨에 따라 타스크 뷰의 Completed 컬럼에 완성율을 입력함으로써 종료된 타스크들을 관리한다.
사용자 삽입 이미지

17. 재스케쥴/일정 만회(Catch up)
모든 것이 계획대로 수행되었다면 툴바의 Catch up 버튼을 클릭하여 각 타스크(혹은 선택된 타스크)의 완료율을 오늘까지 정상 수행된 것으로 설정할 수 있다.
만일 오늘까지 완료하기로 되어 있던 타스크가 아직 완료되지 않았다면 Reschedule 버튼을 클릭하고 일정을 연기할 수 있다.

이상에서 omni-plan을 이용해서 프로젝트 일정을 수립하는 방법에 대해 알아보았다.
일정 수립은 여러가지 이유로 참 어려운 작업이다. 특히 타스크가 얼마만큼의 시간을 소요할 지 예측해야 하는 부분이 있어 어려워진다. 그럼에도 불구하고 일정 수립은 필요하다. 일정 수립의 목표는 정확한 예측을 통해 종료일에 맞추는 것에 있는 것이 아니라 여러가지 수행해야 할 작업들을 여러 자원에 잘 분배하고 추적을 통해 일정 지연이 필요할 경우 이를 일정에 반영하여 프로젝트를 관리하기 위함이다.
작심삼일이라는 말이 있다. 계획을 세웠지만 3일만에 계획을 못 지키게 된다는 말로 알고 있다. 그럼에도 불구하고 계획을 세우는 것은 중요하다고 생각한다. 3일 후에 또 계획을 수정하거나 새로 세우면 적어도 3일은 계획적인 삶을 살 수 있기 때문이다~~~
:
Posted by codetemplate
2006. 11. 15. 17:19

mysql row level lock DB2006. 11. 15. 17:19

4.1.3 innodb나 5.1 이상에서 가능

SELECT * FROM t WHERE i = 1 LOCK IN SHARE MODE;

Rows are locked during updates using indexes. For example,
update tab set col1=3 where col2=17;

will lock the entire table unless col2 is indexed (in which case, only rows where col2=17 will be locked).

:
Posted by codetemplate
2006. 11. 15. 17:02

statcvs 2006. 11. 15. 17:02

고재현님 블로그(http://cbiscuit.info)에서 좋은 정보를 하나 얻었다.
cvs에 있는 소스에 대한 통계를 웹 페이지로 만들어주는 statcvs(http://statcvs.sourceforge.net/)라는 것이다.

현재 수행하고 있는 프로젝트에 간단하게 적용해 보았다.
아래는 통계 정보 생성을 위한 2개의 스크립트이다.

1. cvs log 생성 스크립트
#!/bin/bash
cvs -d :pserver:msbaek@cvs_hostname:/repository_directory login
prjs="xxx yyy"
for prj in $prjs; do
  echo $prj
  cvs -d :pserver:msbaek@ cvs_hostname:/repository_directory checkout $prj
  cd $prj
  cvs log > logfile.log
  cd ..
done

2. statcvs 수행 스크립트
#!/bin/bash
prjs="xxx yyy" # cvsmodule name
for prj in $prjs; do
  echo $prj
  rm -rf $prjmkdir $prj
  cd $prj
  java -jar statcvs.jar project_dir/$prj/logfile.log html_root/$prj
  cd ..
done
:
Posted by codetemplate
2006. 11. 5. 23:33

MacBook Hot Keys Mac2006. 11. 5. 23:33

cmd+~ 윈도우 순환
shift+cmd+g 폴더로 이동
:
Posted by codetemplate
2006. 11. 5. 19:02

Ruby Eclipse Plugin Ruby2006. 11. 5. 19:02

ruby eclipse plugin
http://sourceforge.net/projects/rubyeclipse

IBM Developer's works의 Eclipse용 Ruby Development Tools (RDT) 사용법
http://www-128.ibm.com/developerworks/kr/library/os-rubyeclipse/index.html
:
Posted by codetemplate
:
Posted by codetemplate