Monthly Archives: June 2007

FreeBSD 쉘에서 색 사용

사용환경: FreeBSD 6.x, tcsh 또는 bash, 윈도우용 putty 터미널.

리눅스에 비해 FreeBSD를 사용하면 기본적으로 쉘상에서 색상이 거의 안나오는데, 몇가지 설정을 하면 리눅스 부럽지 않게 화려(?)해집니다.

tcsh 사용자는 .cshrc에 아래를 적당한 위치에 추가합니다.

setenv CLICOLOR
setenv LSCOLORS Exfxcxdxbxegedabagacad

set mch = `hostname -s`
alias prompt ‘set prompt = “%{\033[1;33m%}$mch%{\033[0m%}:%{\033[1;34m%}$cwd%{\033[0m%}> “‘

첫줄은 ls에서 기본적으로 색이 출력되도록 합니다. 두번째 줄은 폴더에 할당된 색이 기본적으로 파랑색인데 putty에서 파랑색이 눈에 잘 띄지 않아서 밝은 파랑으로 바꿔주었습니다. 자세한 것은 man ls

밑에서는 쉘 prompt에 색상이 출력되도록 했습니다. 색 지정은 이 페이지를 참조했습니다.

bash 사용자라면 .profile에 아래를 등록하세요.

export CLICOLOR=1
export LSCOLORS=Exfxcxdxbxegedabagacad
export PS1=”\[\033[1;33m\]\h\033[0m\]:\[\033[1;34m\]\w\]\033[0m\]> “

이렇게 하고 이전글에서 설명했던대로 .screenrc를 설정하면 아래와 같은 화면이 나옵니다:

플래시로 만든 마인드맵 서비스 comapping.com

개인적으로 mind mapping 프로그램을 유용하게 쓰고 있는데, 웹에서 플래시로 이렇게 잘 구현된 서비스가 있었다니 놀랍습니다. 한가지 아주 치명적인 문제를 빼면 돈을 내고 써도 아깝지 않을 서비스라는 생각이 드네요. 6개월에 $12 이라는 저렴한 가격 정책도 좋고, 협업툴로 활용할수 있어서 활용도도 높을것으로 생각됩니다. 치명적인 단점은 한글입력이 안된다는겁니다! 한글이 입력도 안되고, 복사해서 붙이기해도 안되네요.

요즘 플래시/FLEX/AIR 의 가능성에 대해서 흥미있게 지켜보고 있습니다. comapping 서비스가 플래시의 화려한 기능들을 잘 이용하고, UI도 너무 직관적으로 잘 만들었네요. “New Topic” 등에 마우스를 올리면 단순한 툴팁만 뜨는게 아니라 어디 항목이 생기는지까지 애니메이션으로 보여주는데 상당히 놀랐습니다. Tab을 누르면 포커스를 현재 선택된것으로 가져가주고 키보드만으로도 불편없이 사용할수 있도록 되어있습니다. 단축키는 FreeMind와 거의 똑같네요.

http://comapping.com
에 들어가시면, 가입 안하셔도 직접 사용해볼수 있습니다.

현재 회사에서는 CVS 디렉토리에 freemind .mm 파일을 올려서 일정을 관리를 하고 있습니다. 모든 사람이 마인드맵을 사용하는 것이 아니므로, 다른 사람들은 텍스트 파일로 작업관리를 하기도 합니다. 개인적으로 마인드맵과 버전 관리가 원활히 되면 정말 유용할거라 생각하는데, 아직 이런 기능을 제공하는 프로그램은 없는거 같네요. 제가 원하는 건 시간 돌리면서 변화를 눈으로 볼수 있으면 정말 좋을거 같습니다. CVS에서 옛날거 확인할수 있지만 그 과정이 귀찮아서 확인안하게 되더군요. 혹시 이런 기능 제공하는 프로그램 아시면 알려주세요 TT.

GNU screen

Linux Reality에서 screen에 대한 Podcast를 듣고 screen에 대해서 모르던걸 알게됐네요. GNU screen은 하나의 물리적인 터미널 안에서 여러 터미널을 사용할수 있도록 해주는 프로그램입니다. 한 터미널에서 여러 작업을 할때 매우 유용합니다. 또한, 작업하던 세션을 종료하지 않고 빠져나온 다음에 다른 곳에서 세션을 이어서 작업할수 있기 때문에 회사와 집 등 여러곳에서 작업할때 같은 환경에서 그대로 작업을 할수 있습니다. Podcast 들으면서 새롭게 안 기능은 여러 터미널에서 같은 screen 세션에 동시에 접속해서 작업할수 있다는 내용인데, 직접 해보니 Pair Programming할 때 아주 유용할거 같습니다. 그래서 검색을 해보니 위키(한글)에도 이러한 내용이 소개되어 있네요.

약 5년전에 하이텔(?)에 올렸던 글이 있어서 약간 내용 보충해서 올립니다.

—–

원격에서 작업하다 보면 여러창을 보고 싶을때가 많지만, 따로 로그인 하기도 귀찮고, 여러창 왔다갔다 할때도 어느 터미널이 어느 기계인지 많아지면 관리가 안되죠 –; 이럴때 사용하면 편리한 것이 screen입니다.

screen은 한 터미널 화면에서 여러 쉘과 프로그램을 띄울수 있으며, 또한 세션 관리 기능도 지원해서 터미널을 종료해도 나중에 다시 그 세션으로 복귀할수 있기 때문에 정말 편리합니다. 저는 이제 로컬에서도 screen을 애용하고 있네요.

먼저 시작은

% screen

또는

% screen -S 세션명

으로 시작하고, screen 실행후 모든 명령은 Ctrl-a로 시작합니다:

Ctrl-a, c : (create) 새로운 쉘이 생기면서 그 쉘로 이동
Ctrl-a, a : 바로 전 창으로 이동
Ctrl-a, n : (next) 다음 창으로 이동
Ctrl-a, p : (previous) 이전 창으로 이동
Ctrl-a, 숫자 : 숫자에 해당하는 창으로 이동
Ctrl-a, d : (detach) screen 세션에서 빠져나옴
Ctrl-a, x : lock screen

Ctrl-a, [ : 화면에서 텍스트 선택하여 클립보드로 복사 (화면 스크롤 가능)
            이때 vi와 동일하게 커서 이동할수 있고, space로 영역을 선택
Ctrl-a, ] : 클릭보드 텍스트 붙이기

Ctrl-a, S : (split) 창을 나눔 (region)
Ctrl-a, Tab : 다른 region으로 이동
Ctrl-a, Q : 현재 region을 제외한 나머지 숨기기

Ctrl-a, : : 명령모드로 들어갑니다.

위 명령 정도를 알고있으면, 불편하지 않게 사용할수 있으며, detach 시 세션이 종료되는 것은 아니고

% screen -r 세션명

으로 그전 세션을 다시 불러들일수 있습니다. 여러 창을 쓴다는 장점도 있지만, 세션 관리가 되는것도 아주 큰 장점입니다.

세션이 여러개 있으면 screen -list 하면 세션명이 쭉 나오고 (-S로 지정하지 않았으면 자동으로 이름이 할당됩니다)

세션을 완전히 종료하기 위해서는 모든 창에서 빠져나오면(exit 등으로) screen을 빠져나옵니다. 한번에 종료할려면 Ctrl-a : quit 하면 전체 창이 종료됩니다. 하지만 창을 하나씩 확인하면서 종료하는게 안전하겠죠.

split으로 화면을 나누면, 나눠진 공간(region) 별로 다른 창으로 전환할 수 있습니다.

% screen -x 세션명

-x는 -r과 동일하지만 그 전에 연결된 터미널을 끊지않고 세션에 동시에 연결합니다. 같은 세션을 여러명이 공유할수 있고, 세션에서 같은 화면을 보고 있으면 작업하는 내용이 실시간으로 보입니다.

스크린 사용하면 원래 사용하는 터미널의 히스토리 버퍼가 정상적으로 동작하지 않는데, 이때 Ctrl-a, [ 또는 Ctrl-a, ESC 를 이용하면 지나간 텍스트를 볼수 있습니다. 버퍼 크기는 .screenrc에서 “defscrollback 라인수”로 정할수 있으며 디폴트 값은 약간 작은 100 라인 입니다.

다음은 제 .screenrc 파일입니다. hardstatus는 여기를 참고했습니다.

vbell off
defscrollback 500
hardstatus alwayslastline
hardstatus string ‘%{gk}[%{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}]%{=b C}[%H]%{W}’

hardstatus를 설정해서 맨 아래줄에 화면 리스트와 load average, 호스트명 등을 표시해줍니다.

CLucene CJK 분석기 (win32)

전에 CLucene CJK 분석기 리눅스용 소스를 공개하고 윈도우용도 공개하기로 했었는데, 계속 작업 안하고 있다가 마침 요청이 들어와서 정리했습니다.

압축파일에는 clucene-core-0.9.16a가 포함되어 있지 않으며, 압축을 풀고 아래와 같은 폴더 구조로 만들어주시면 됩니다. clucene 소스는 직접 받으셔야 합니다.


CLuceneTest 폴더에 프로젝트(dsw) 파일이 포함되어 있으며, Release에 실행파일을 포함했습니다.

실행을 하면 아래와 같이 간단한 창이 뜨며, 위쪽 텍스트를 라인별로 인덱싱하며, 가운데 검색창에서 쿼리를 입력하고 검색하면 아래 검색 결과가 나타납니다. 검색 버튼을 누를때 위쪽 텍스트에 변경 사항이 있으면 인덱싱을 한후 검색이 됩니다.

윈도우즈에서 CLucene 예제를 만들면서 몇가지 문제점이 있었습니다.

Visual Studio에서 위저드 통해서 MFC 프로젝트 만들면 Preprocessor에서  _MBCS가 정의되어 있는데, 이게 있으면 CLucene이 잘 컴파일이 안됩니다. 두가지 해결방법을 찾긴 했는데 둘다 근본적인 해결책은 아닌거 같네요.

첫번째 방법은 프로젝트 전체에서 _MBCS 정의를 빼버리는 방법이고, 두번째 방법은 CLucene의 “StdHeader.h” 에서 #undef _MBCS 하는 방법입니다. 두번째 방법은 clucene 소스를 한줄 고쳐야하기 때문에 제가 올리는 샘플 프로젝트에서는 첫번째 방법을 사용했습니다.

컴파일 할때 주의 사항은 CLucene에 해당하는 C++ 소스는 “CLucene/StdHeader.h” 파일을 precompiled header로 사용하도록 해야합니다. UI 부분과 Lucene 부분을 분리하여서 UI 쪽에서 Lucene 함수에 직접 접근하지 않도록 했습니다.

컴파일중에 다음 경고가 뜨긴 하는데 실험해본결과 퍼포먼스에 큰 문제는 없었습니다. (제가 사용한 응용 프로그램 기준)

==================Hashing not available or is disabled! CLucene may run slower than optimal ==================

그리고 디버그로 컴파일할때 internal compiler 오류가 납니다.

Fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit

아래처럼 프로젝트 C++ 옵션에서 맨 아래 수동으로 /Zm400 옵션을 추가해주면 문제가 해결됩니다.

소스입니다.

1302547880.zip