'전체 글'에 해당되는 글 215건

  1. 2008.07.11 firefox 단축키 설정 3
  2. 2008.07.11 .Xdefaults 파일을 조작해서 xterm 에서 meta 키 사용하기
  3. 2008.07.07 iPhoto 실행시 가져오지 않은 사진이 있다는 메세지가 자꾸 나올 경우
  4. 2008.07.06 Unintended / Muse
  5. 2008.07.01 vim tips - 1. ctags 를 이용한 source navigation 1
  6. 2008.06.30 firefox 가운데 버튼 붙여넣기가 동작 안할 때
  7. 2008.06.29 vimrc
  8. 2008.06.25 MTP 진행자로 Tom Brokaw 결정. 1

firefox 단축키 설정

Computing 2008. 7. 11. 19:03
사파리에서처럼 shift-cmd-{, shift-cmd-} 로 next tab, previous tab 을 선택할 수 있도록 리눅스 파이어폭스에서 단축키를 설정할 수 있나 알아 보다가 다른 방법이 없어서

keyconfig
functions for keyconfig

플러그인을 깔았다.

(( Mac 용 firefox 는 플러그인 안 깔아도 된다.
:

.Xdefaults 파일을 조작해서 xterm 에서 meta 키 사용하기

Computing 2008. 7. 11. 14:36
ubuntu 를 쓰면서 한가지 아쉬운 것이 있다면 apple terminal 같은 터미널 프로그램이 마음에 들지 않는다는 것이다. 특히나 기본 터미널인 gnome-terminal 은 그 느리기 그지없는 속도와 쓸데없는 기능들, 그리고, 마음에 드는 폰트가 없다는 사실 때문에 특히나 더 쓰기 싫어서 그나마 좀 나은 xterm 을 (!!!) 사용하고 있다.

사용자 삽입 이미지

그런데, xterm 을 쓰면서 한가지 아쉬운 것이 바로 meta 키가 애매하게 먹는다는 것이다.
<meta><BS> 를 눌러서 단어 단위로 삭제를 하는 것이 동작하지 않는다.
그러나, man xterm 을 해 보자. 아래와 같은 내용이 나온다 :

metaSendsEscape (class MetaSendsEscape)
        If ``true'', Meta characters (a  character  combined  with  the
        Meta  modifier key) are converted into a two-character sequence
        with the character itself preceded by  ESC.   This  applies  as
        well  to function key control sequences, unless xterm sees that
        Meta is used in your  key  translations.   If  ``false'',  Meta
        characters input from the keyboard are handled according to the
        eightBitInput resource.  The default is ``false.''

대략 감이 잡힌다. 이 리소스를 true 로 세팅하면 될지도 모른다는 생각이 든다.
manpage 를 위로 스크롤해 보면, 이 속성이 vt100 widget 에 속한다는 것을 확인할 수 있다.

그럼 이제, 홈 디렉토리의 .Xdefaults 파일에 XTerm.vt100.metaSendsEscape: true 라는 라인을 추가하도록 하자 :



이제 xterm 을 실행시켜서 meta-BS 를 눌러 보자. 아주 쾌적하게 동작한다.

:

iPhoto 실행시 가져오지 않은 사진이 있다는 메세지가 자꾸 나올 경우

Computing 2008. 7. 7. 22:29
카메라에 동영상 등 iPhoto 가 처리할 수 없는 데이터가 있을 경우 iPhoto 를 실행하면 열심히 뭔가 하다가 돌아가신다.

이처럼 crash 가 있은 이후 iPhoto 를 실행하면 가져오지 않은 사진이 몇장 있다며 가져올까? 라고 묻는다.
가져오라고 버튼을 눌러 주면 역시나 사망하신다.
그래서 가져오지 말라는 버튼을 눌러 주면 실행은 되지만, 매번 실행할 때마다 저런 메세지가 뜬다.
귀찮고 짜증난다.

간단히 iPhoto Library 디렉토리로 가서

import 디렉토리와
recovered photoes 던가 하는 디렉토리를

지우지는 말고, 데스크탑으로 옮겨 놓고 iPhoto 를 다시 실행하면 된다.
없어진 사진이 있는지 확인하고,
이상 없으면 데스크탑에 옮겨 두었던 두개의 디렉토리를 삭제하면 되겠다.

iLife 08 로 업그레이드 할려고 하니까 -_- 무려 9만원이나 해서 차마 업그레이드를 못하고 있다 -_-;;;
많이 쓰지도 않는데...
iPhoto 만 쓰는데....;;;;


:

Unintended / Muse

Music/Others 2008. 7. 6. 04:18
왕년에 음악깨나 들었다는 사람이 아니더라도 많은 수의 사람들이 아마도 muse 라는 밴드를 기억할 것이다.
매튜 벨라미라는 정말 천재적인특이한 멜로디 메이커가 있는 밴드.
(( 이 사람, 노래 부를 때 웬만해선 느끼지 못하는데, 자세히 들어 보면 호흡을
(( 매우 거칠게(!) 한다. 쓰읍 쓰읍 하고 숨 들이마시는 소리가, 일단 신경을 쓰기 시작하면 그렇게
(( 귀에 거슬릴 수 없다. ㅋㅋㅋ
참으로 독특한 분위기를 전 곡에서 느낄 수 있는 밴드.
이번에 함께 들어 볼 곡은 이 곡이 muse 의 곡인지 잠시 의아해 할 만한 곡.
그들의 "showbiz" (( 아마 첫 공식 앨범이지 싶다 )) 앨범의 백미라고 할 만한 곡이다.


사용자 삽입 이미지


내가 한참 이 밴드의 음악을 들을 때 당시의 여자 친구에게 이어폰을 넘겨 주며 이 곡을 들려 줬더니 닭똥같은 눈물을 줄줄줄 쏟더라.......;;; 어찌나 감정이 풍부하시던지,,,, 그렇지만, 나조차 한밤중에 문득 이 곡을 듣게 되면 미간이 저려오더라.

문득 생각나는 ㄱ**양. 지금은 결혼해서 잘 살고 있겠지.....



You could be my unintended,
Choice to live my life extended,
You could be the one I'll always love.
You could be the one who listens,
To my deepest inquisitions,
You could be the one I'll always love.

I'll be there as soon as I can,
But I'm busy mending broken,
Pieces of the life I had before.

First there was the one who challenged,
All my dreams and all my balance,
She could never be as good as you.
You could be my unintended,
Choice to live my life extended,
You should be the one I'll always love.

I'll be there as soon as I can,
But I'm busy mending broken,
Pieces of the life I had before.

I'll be there as soon as I can,
But I'm busy mending broken,
Pieces of the life I had before.
Before you.
:

vim tips - 1. ctags 를 이용한 source navigation

Computing/vim tips 2008. 7. 1. 00:07
처음 vim 을 접했을 때가 version 4 였을 것이다. 그 후로 많은 시간이 흘러서 7.1 까지 오게 되었는데,
처음 내가 남성현님의 홈페이지에서 vim 을 개발용 에디터로 쓰는 팁을 배웠을 때가 생각난다.

유닉스 환경에서 개발을 하면서 vim 을 어떻게 효과적으로 (emacs 부럽지 않게 [각주:1] ) 쓸 수 있는가에 대해서 몇가지 팁을 이 페이지에서 정리하도록 하겠다.

우선, 내가 설명하는 거의 모든 것은 vimrc 설정을 올린 포스팅에 있는 설정들에 다 담겨 있는 내용이다.


1. TAGS 사용하기
1-1. tag 프로그램들
tag 파일은 어떤 함수/변수/상수가 어느 파일에 정의되어 있나를 미리 분석해서 인덱스로 만들어 둔 파일을 일컫는다. 여러가지 태깅 툴이 있는데, 잘 알려진 것으로, ctags, etags, GNU global, exuberant-ctags 가 있다.

ctags 는 tagging 을 하는 매우 오래된 유닉스 툴인데, 오래된 시스템들에는 아마 이것이 깔려 있을 것이다.
기능은 많이 별로다.

etags 는 emacs distribution 의 일부로써 배포되는 tagging tool 이다.

GNU global 은 GNU 프로젝트라는 점이 매력적이지만, 아쉽게도 vim 과는 궁합이 잘 맞지 않는다. 쓸 수 없는 것은 아닌데, tag-stack 이 지원되지 않아서 마치 웹 브라우징을 하듯 소스를 왔다갔다 할 수가 없다. 그러기 위해서는 몇가지 트릭이 필요하긴 한데, 이 글의 주제가 아니므로 넘어가자.

exuberant-ctags. 이것이 내가 vim 사용자들에게 추천하고 싶은 tagging 프로그램이다. 지원하는 언어도 상당히 많다. 자세한 것은 홈페이지를 방문해서 알아 보도록 하자.
http://ctags.sourceforge.net

1-2. Exuberant ctags 설치
가장 간편한 방법은 자신의 리눅스 배포판이 제공하는 패키지를 이용하는 것이다. 우분투를 사용한다면, 간단하게

   sudo apt-get install exuberant-ctags

혹은 위의 url 을 따라 가서 소스를 받은 후 압축을 풀고,

  ./configure
  make
  sudo make install

하면 /usr/local/ 에 설치가 된다. 경로만 설정해주면 OK.

OSX 를 사용하고 있어도 마찬가지로 하면 된다.

1-3. tags 파일 만들기
exuberant-ctags 가 준비 되었고, 분석할 소스가 준비되었다면 이제, tags 파일을 만들 차례이다.
가장 간단한 방법으로, 소스 트리의 루트에서 아래와 같이 입력하면 된다.

  ctags -R .

그러면 디렉토리 . 에서부터 하위 디렉토리를 모두 훑으면서 c/c++ 의 소스, 헤더파일들을 훑으면서 함수/변수/상수들이 어디에 정의되어 있는지를 정리한 tags 파일을 . 디렉토리에 만들어 준다.

여러분의 소스가 약간 복잡해서 태깅 프로그램이 거의 컴파일러 수준의 파싱이나 preprocessing 이 있어야 분석이 가능한 수준의 복잡한 소스라면 모든 definition 들을 다 잡지 못할 지도 모른다.
그러나 몇가지 힌트를 주면 다 분석해 내긴 하는데 그렇게까지 해야 할 일은 잘 없을 것이다.

참고삼아 내가 tag 를 만들 때 쓰는 Makefile 을 올린다. 아, 이것은 GNU find 최신버젼 (내가 쓰는 것은 4.2.32) 이 지원하는 옵션을 쓰므로 오래된 find 에서는 실행되지 않을 것이다. GNU find 도 가져다 컴파일해서 깔도록 하자. 어렵지 않다. ./configure, make, make install 이면 대부분 끝이다.



1-4. vim 에게 tags 파일의 위치 알려 주기
이제, tags 파일도 만들었으므로, vim 이 이 파일을 읽어 올 수 있도록 위치를 알려 주어야 한다.

  :set tags=./tags,~/tags,~/work/tags 블라블라블라

위와 같은 식으로 tags 파일이 있는 위치를 알려 주면 된다. 여러개를 콤마로 구분해서 사용할 수 있다.
vim 은 우선, 가장 처음에 나오는 tags 파일에서 사용자가 지정한 키워드를 찾고, 없으면 그 다음 파일에서, 없으면 그 다음 파일에서... 이런 식으로 검색해 나갈 것이다.

위의 명령은 .vimrc 같은 파일에 넣어 두면 편리하겠다.

1-5. 소스 분석
실제로 ctags 를 쓰는 법을 살펴 보자.
사용되는 키는 두 개이다. ^] (<CTRL> ]) 과 ^T (<CTRL> T) 이다.
소스에서 커서를 definition 을 보고자 하는 identifier 위로 올려 둔 후 ^] 을 누르면 그 identifier 가 정의되어 있는 위치로 점프해 간다. 마치 웹 브라우저에서 링크를 눌렀을 때 처럼. 다시 이전 위치로 가고 싶다면 ^T 를 누르면 된다. 마치 웹 브라우저의 back 버튼을 눌렀을때 처럼 말이다.

시험삼아 아래의 간단한 소스파일을 만들어서 테스트 해 보자.



먼저, tags 파일을 만들고 (ctags -R .) vim 으로 파일을 열고 (vim a.c) tags 파일의 위치를 알려 준 다음 (:set tags=./tags) 커서를 14라인의 mul 위로 옮겨서 ^] 을 누르자 (물론, normal 모드에서). 그럼 커서는 mul() 함수가 정의되어 있는 곳으로 점프해 갈 것이다. 다시 여기서 mul 함수의 argument 의 타입인 mytype 위로 커서를 옮긴 후 ^] 를 누르면 typedef 로 뛰어 간다. ^T 를 눌러 보자. 바로 이전의 위치인 mytype 위로 돌아가고 한번 더 ^T 를 누르면 14번 라인으로 돌아간다.

1-6. 같은 이름의 identifier 가 두개 이상 있을 때
이 때는 먼저 발견되는 identifier 가 정의된 곳으로 뛰어간다. 그리고, vim 화면 아랫쪽에 tag 1 of 2 or more 등과 같이 태그가 더 있다고 알려 준다.

아래의 b.c 를 다시 입력하고, ctags a.c b.c 로 태그를 만든 후 테스트 해 보자.



처음과 마찬가지로 a.c 의 14번 줄에 있는 mul 위에서 ^] 를 누르면, 커서는 a.c 에 정의되어 있는 mul() 로 점프하고, 아래의 스크린샷에서 볼 수 있듯이 vim 화면 아래에 tag 1 of 2 or more 라고 나온다.


이 때, a.c 에 정의된 mul() 외에 다른 mul() 함수를 보고 싶다면, 아래의 명령을 이용해서 매치되는 태그 목록들 사이를 왔다갔다 할 수 있다 :

  :tp   ---> 이전 매치(match)로
  :tn   ---> 다음 매치(match)로

나는 이것을 아래와 같이 매핑해서 쓰고 있다 :

  $ grep :t[pn] .vimrc
  nnoremap <silent> <S-F1> :tp<cr>            " Go to the previous tag
  nnoremap <silent> <S-F2> :tn<cr>            " Go to the next tag

즉, Shift-F1 을 누르면 이전 매치로, Shift-F2 를 누르면 다음 매치로 가는 것이다. 방금 시연해 본 a.c b.c 의 경우에는 Shift-F2 를 누르면 b.c 에 정의된 mul() 함수로 이동하게 되겠다.

가끔 매우 큰 소스 (100만 라인 이상) 를 다룰 때에는 이같은 매치가 몇십개씩 발견되기도 한다. 그럴 때, 일일이 하나씩 옮겨다니면서 매치를 찾아 보기는 어려운 법.

  :ts

를 입력하면 매치되는 정의의 목록이 나온다. 원하는 번호를 입력하면 그리로 곧장 점프하게 된다.

만약 gvim 을 사용한다면 마우스로도 가능하다. 컨트롤-마우스 왼쪽 버튼은 ^] 와 같은 일을 하며, 컨트롤-마우스 오른쪽 버튼은 ^T 와 같은 일을 한다.

이쯤 하니까, 피곤하다. 나머지는 다음 기회에 생각나면 쓰도록 하겠다.


2. Playing with make

http://orchistro.tistory.com/entry/vim-tips-2-make


3. Playing with grep

http://orchistro.tistory.com/entry/vim-tips-3-Playing-with-grep


4. quickfix window

5. navigating through source file(s)


6. help


  1. 사무실의 존경하는 프로그래머 한 분이 이맥스를 매우 잘 사용하신다. 실제로 그 소스에 기여도 하신 분인데, 리챠드 스톨만과 이메일을 주고 받기도 하신 분이다. 그 분이 수 차에 걸쳐서 나로 하여금 이맥스를 사용하도록 설득하려 하셨는데, 자신이 emacs 로 하는 걸 vim 으로 다 하면서 잘 사용하고 있는 걸 보더니 더 이상 권유하지 않으신다. 사실, 딴건 부럽지 않지만 - 오히려 vi 가 더 적은 키 스트로크로 동일한 일을 해 내기도 하지만 - emacs 의 gdb 연결과 shell 모드 (? 용어가 정확한지 모르겠다) 는 좀 많이 부럽다. [본문으로]
:

firefox 가운데 버튼 붙여넣기가 동작 안할 때

Computing 2008. 6. 30. 17:23
마우스 제스쳐 플러그인을 깔았다가 그다지 마음에 들지 않아서 지웠다.
그런데, 이녀석이 뭔가를 손댔는지 가운데 버튼으로 X clipboard 의 내용을 paste 하는 기능이 막혀버렸다 -_-

원상태로 돌리려면,

주소창에 about:config 를 타이핑해서 나오는 페이지에서

middlemouse.paste 속성을 true 로 세팅해 주면 원상 복구된다.

참고로,

스크롤바에서 가운데 버튼을 누르면 그 위치로 페이지가 바로 이동한다.
왼쪽 버튼을 누르면 한페이지씩 내려가는 것과는 동작이 다르다.


:

vimrc

Computing/vim tips 2008. 6. 29. 01:15
내가 쓰는 vim 설정이다.

${HOME}/.vimrc

${HOME}/.gvimrc

${HOME}/.vim/after/syntax/c.vim

${HOME}/.vim/after/syntax/syncolor.vim

${HOME}/.vim/after/indent/c.vim
:

MTP 진행자로 Tom Brokaw 결정.

English/NBC Meet the Press 2008. 6. 25. 23:54
6월 22일, Brian Williams 가 진행을 맡은 MTP 에서 공식적으로 Tom Brokaw 가 선거 기간동안 interim moderator 로서 방송할 것이라고 발표했다. (잘 모르시는 분들을 위해서, Tom Brokaw 는 현재 NBC Nightly News 의 앵커인 Brian Williams 가 진행을 맡기 전에 굉장히 오랜 기간동안 Nightly News 의 앵커였다. 그 기간만큼이나 유명하기도 한데, 프렌즈에도 Rachel 이 Chandler 의 결혼 예복으로 Tux 를 골라 주면서 "톰 브로코가 입었던 옷" 이라고 이야기하는 부분이 등장하기도 한다. 물론, Chandler 는 007 을 택했지만 말이다.)

역시... Tim Russert 만한 사람은 잘 없는 것이다.

Brian Williams 가 진행하는 한시간 내내 많이 답답했다. Tim Russert 처럼 dynamic 하고도, 뭐라 말 할 수 없는 "그 무언가" 가 보고 싶었지만, Brian Williams 는 많이 모자랐다.

Tom Brawkaw 가 진행하는 MTP 도 글쎄다, ...
거기다 나같은 영어가 모국어가 아닌 사람이 듣기에는 Tom Brokaw 는 발음이 너무 둔탁하고 빠른 데다가, 말도 어렵게 한다 ㅠ_ㅠ 주의깊이 듣지 않으면, 아니 매우 주의를 기울여서 들어도 어렵다...;;;

내심 David Gregory 정도면 괜찮지 않을까 생각했는데, 아직 그는 좀 모자란 것인가? 그래도 White House Correspondent 인데...

큰 즐거움 하나가 사라져 버려서 매우 아쉬운 밤이다.

좀 늦은 감이 없지 않지만, MTP special edition 을 embed 한다.
In memory of Tim Russert,




: