슬픔에 대한 용기 (Mut zur Trauer) – 에리히 케스트너 (Erich Kästner)

요즘 SBS 에서 방영중인 그여자가무서워라는 드라마가 있다. 시청자 게시판에는 혹평 일색인듯 하지만, 나는 미우나고우나와 함께 아주 재미있게 보고 있다. 지난 110회에서는 비주얼 노벨의 한 장면처럼 시를 흘려 보내는 신선한 시도가 이루어졌는데, 그 시의 아름다움과 배경에 뿌려지는 최영림의 시선에 대해서는 누구라도 섣불리 혹평할 수 없을 듯 하다:

슬플 때는 거리낌 없이 울어라.
마음을 너무 감시하지 마라!
눈물이 흐르는 대로 슬퍼해도
죽는 일은 없다.

이렇게 되리라는 걸 첨부터 알았다.
아무래도 내일 아침까지 유쾌해질 까닭이 없다.
아무리 술독에 빠져 보아도
목구멍의 쓰디쓴 맛을 씻을 수 없다.

아무런 원인도 없이 왔다 가는 슬픔.
맘속은 텅 빈 허공뿐이다.
병은 아니나, 건강한 것도 아니다.
영혼이 매끈하지 못한 느낌.

외톨이가 되고 싶다.
닥치는 대로 사람들과 섞이고 싶다.
별안간 손을 올려 코를 꼬집어본다.
거울을 꼼꼼히 들여다본다.
이게 내 얼굴이야?

아기를 바라보며 느끼는 것들

밤이 깊었다. 오래 전 사진에서 느껴지는 조금씩 늙어 가는 나와 내 아내의 모습은 빠르게 흐르는 시간을 실감케 한다. 빠르게 흐르는 시간과는 대조적으로 나의 머리는 가끔씩 무엇을 해야 할 지 쉽게 잊고 만다. 이런 상황을 맞딱뜨리고 있자면 왠지 모를 불안이 엄습한다.

불안.

불안 장애로 신경 정신과 치료를 받아 온 지도 6개월이 넘었다. 치료를 받기 전 몇 달 간은 장염, 망막 열공, 이명 등으로 인해 극도로 예민한 상태가 지속되었었다. 하지만 지금은 많은 일들을 좀 더 편안한 마음으로 바라보고 다양한 타협의 방법들을 배워가고 있다. 치료가 언제 끝날지는 모르겠지만 특별히 악화되지도 않으니 지금 이 상태로도 만족스럽다.

하지만 반사적으로 스스로에 대해 초조한 마음을 갖게 되는 것은 어쩔 수가 없다. 더 전진해야 한다는 강박과 의지 사이에 위치한 미묘한 무언가가 나를 그 곳으로 몰고 간다. 극도의 집중력과 자제력을 잃기 직전까지 감내할 수 있는 참을성에는 다 이런 댓가가 있는 것 아니겠냐고 스스로를 위안해 본다.

그런데 이런 복잡할 뿐 도움이 크게 되지 않는 생각들을 잠재우는 새로운 친구가 하나 생겼는데, 바로 지난 2월 9일에 태어난 내 딸 채은이다. 채은이를 바라본다고 해서 생각들이 사라지는 것은 아니지만 조금 다른 성격의 생각을 하게 된다.

요즘 자주 생각나는 것은 ‘아기’라는 존재의 위대함이다. 아기가 위대한 이유는 무엇보다도 앞으로 될 무언인가에 대한 가능성 그 자체에 있다고 생각한다. 서서히 만들어져가는 존재, 그 존재의 시작은 보는 이로 하여금 하염없이 바라보아도 질리지 않는 즐거움을 선사한다. 이미 늙어버린 내가 될 수 없는 어떤 것이 될 수 있는 존재란 그렇게 경이롭다. 끝없는 상상력을 자극한다.

다른 한 편으로는 아빠의 역할은 무엇일까 고민스럽다. 딱히 떠오르는 것은 없다. 지금까지의 나와 마찬가지로, 그리고 다른 과거의 많은 아빠들처럼 실수를 거듭하며 한 사람의 아빠가 되어 가지 않을까? 항상 그렇지만은 않을 것임을 너무나 잘 알지만, 즐거운 무엇인가가 나를 기다리고 있지 않을까 막연히 기대해 본다.

Fujitsu S6510 + MTRON 30GB SSD = Cool!

I purchased a new laptop. I wanted something very light and high-performing one, which means I have few candidates. The candidates were Lenovo ThinkPad X61(s), Toshiba Portage R500 and Fujitsu S6510. Toshiba was excluded because of its infamous customer support in Korea. I almost chose X61, but I leaned toward S6510 finally because it has wider screen and is based on the Penryn processor which has 6MB L2 cache. One issue is that I can’t use the ‘red bean’ (i.e. TrackPoint) anymore, but I can live with that.

Another cool gear that filled my need was MTRON 30GB SSD. 30GB is very enough for Linux laptop users because installing most packages just takes several gigabytes. I still have plenty of free space for me as a developer. If I were going to install Windows Vista, I couldn’t make it. The performance of the SSD is pretty cool, especially when it comes down to random access due to its 0.1ms access time. Moreover, it is very shock-resistant, silent and durable.

In overall, I am really satisfied with my purchase both in terms of performance and silence. I’d recommend this setting to every developer:

  • Fujitsu S6510 – be careful; only one sub-model (VP2520BZ) comes with the Penryn processor, which might be available only in Korea and Japan.
  • MTRON 30GB SSD
  • Fedora 8

새 랩탑을 구입했습니다. 아주 가볍고 성능이 좋은 걸 원했기 때문에 선택의 폭이 좁았습니다. 후보로 레노보 씽크패드 X61(s)와 도시바 포티지 R500, 후지쯔 S6510을 꼽았습니다. 도시바는 한국에서 애프터 서비스가 나쁘다고 소문이 자자해 제외했습니다. 거의 X61을 고를 뻔 했지만 결국에는 S6510으로 기울었습니다. 스크린도 더 넓고 L2 캐쉬가 6메가나 되는 펜린 프로세서를 탑재하고 있었으니까요. 한 가지 문제는 더이상 소위 빨콩으로 불리는 트랙포인트를 못쓰게 되었다는 건데, 없어도 큰 지장은 없네요.

제 요구를 채워준 또다른 멋진 장치는 MTRON 30GB SSD입니다. 리눅스 사용자들은 각종 패키지를 대부분 깔아도 몇 기가밖에 공간을 차지하지 않기 때문에 30GB는 아주 충분한 용량입니다. 개발자로서도 아직 남은 공간이 많습니다. 만약 윈도우즈 비스타를 설치하려고 했다면 불가능했겠죠. SSD의 성능은 끝내줍니다. 특히 0.1ms 접근 시간 덕택에 랜덤 액세스 성능이 탁월합니다. 더군다나 충격에도 강하고 조용하면서 고장률도 낮습니다.

전반적으로 성능과 정숙성 면에서 이번 구매에 상당히 만족해 하고 있습니다. 모든 개발자에게 이 세팅을 추천하고 싶습니다:

  • Fujitsu S6510 – VP2520BZ 서브 모델에만 펜린 프로세서가 탑재되어 있으니 주의하세요.
  • MTRON 30GB SSD
  • Fedora 8

'Donate' button created

‘Donate (기부하기)’ 버튼을 만들었습니다.

I know I will never become a millionare by adding a single button to this very personal blog, but I’ve just added the PayPal ‘Donate’ button on the right side of this page. Please feel free to donate for whatever I did for your goodness. BTW, I didn’t hurt anyone, right? 🙂

이런 개인 용도의 블로그에 버튼 하나 달았다고 떼부자가 되는 건 아니겠지만 그래도 한 번 PayPal ‘Donate (기부하기)’ 버튼을 이 페이지 오른쪽에 달아 보았습니다. 제가 당신께 도움드린 게 뭔가 있다면 한 번 기부해 보는 것은 어떨까요? 그런데, 제가 설마 해를 끼치진 않았겠죠? 🙂

Turning off Radeon LCD backlight when GNOME screensaver is activated

I wrote a quick and dirty script that turns on and off ATI Radeon LCD backlight by monitoring DBUS events to detect the activation and deactivation of GNOME screensaver. It requires the radeontool package to be installed and it needs to be set with suid flag (i.e. chmod u+s /usr/sbin/radeontool). Please feel free to launch the following script when your GNOME session starts:

#!/bin/sh
if [ "x`pgrep -of 'radeon-watch'`" != "x$$" ]; then
exit 1
fi
radeontool dac on
radeontool light on
{
dbus-monitor --session --monitor "type='signal',path='/org/gnome/ScreenSaver',interface='org.gnome.ScreenSaver'" | while read -r EVT; do
echo "$EVT" | grep -qi "SessionIdleChanged"
if [ "$?" = '0' ]; then
read -r EVT_VAL
echo "$EVT_VAL" | grep -qi "true"
if [ "$?" = '0' ]; then
radeontool dac off
radeontool light off
else
radeontool dac on
radeontool light on
fi
fi

echo "$EVT" | grep -qi "AuthenticationRequestBegin"
if [ "$?" = '0' ]; then
radeontool dac on
radeontool light on
fi

echo "$EVT" | grep -qi "AuthenticationRequestEnd"
if [ "$?" = '0' ]; then
radeontool dac off
radeontool light off
fi
done
} &

Please note that I tested this script with my old ThinkPad X31, so you might not need this script if you have the recent laptop or you are using other video chipset.

Introduction to Open Source at Winter of Code Boot Camp, 2008

The following movie is the recording of my speech in the Winter of Code boot camp, 2008. I explain what open source is and what motivation lies behind the open source movement.

다음 영상은 2008년 윈터 오브 코드에서 제가 발표한 것을 녹화한 것입니다. 오픈 소스란 무엇이고 그를 뒷받침하는 동기에 대해 설명하고 있습니다.

ant2eclipse – Converts Ant build.xml into Eclipse .classpath

Update: ant2eclipse has been deprecated by Ant2IDE. Please use Ant2IDE instead.
I wrote a simple shell script called ‘ant2eclipse‘. It runs your ant build file with -v switch, gathers essential information such as source path, its output patch and the JAR path that the project depends on, and generates or updates Eclipse .classpath file.
More graceful solution would be to inject some byte code to key Ant tasks such as javac to gather various path information. It shouldn’t be that difficult, but I’m just OK with this simple script. Please feel free to download and modify to meet your need.
This script was tested against the JBoss Remoting, version 3, so there’s no guarantee that it will work for other projects. Use at your own risk. 😉

rpmdepclean – Uninstalling unnecessary RPMs

I spent a couple of sleepless nights to switch from Gentoo Linux to Fedora Core, since I became a Red Hat employee. Although Fedora Core is really a nice Linux distribution, I still miss the concept of ‘world’ in Gentoo.
When a user installs a Gentoo package, the name of the installed package is appended the ‘world’ file. What’s interesting is that the dependencies of the installed package are not added to the ‘world’ file. What happens when you uninstall the package registered in the world file is that the name of the package is removed. It’s very simple, but it’s powerful when you don’t want unnecessary packages take up disk space. (Yeah, I am a paranoid. 🙂
Now, from the world file, we know what packages were installed by our own request and what were installed just as dependencies, so Gentoo can identify the unnecessary packages that is safe to be removed. Consequently, running ‘emerge --depclean‘ cleans up all the unnecessary packages.
Can’t we do this in Fedora Core or any RPM-based Linux distribution? The answer is yes.
First off, you have to install ‘rpmorphan‘. rpmorphan has the ‘keep’ file which does the same role with the ‘world’ file. It’s located at /var/lib/rpmorphan/keep, which should be empty initially.
Let’s try to find what packages are unnecessary:

$ rpmorphan -all

Unfortunately, you will see so many essential packages that you want to keep. It’s just because you didn’t add them to the ‘keep’ file yet. For example, you can add ‘gnome-terminal’ to the keep file like the following:

$ rpmorphan -add-keep gnome-terminal

Once you finished adding all the packages that you want to keep to the keep file, now you are ready to run the following shell script file (rpmdepclean).

#!/bin/sh
# rpmdepclean
while true; do
    ORPHANS1="`rpmorphan --all | xargs echo`"
    if [ -n "$ORPHANS1" ]; then
        echo -n "$ORPHANS1 "
        yum -q -y remove $ORPHANS1 > /dev/null 2>&1 || exit 1
    fi
    ORPHANS2="`rpmorphan --guess-all | xargs echo`"
    if [ -n "$ORPHANS2" ]; then
        echo -n "$ORPHANS2 "
        yum -q -y remove $ORPHANS2 > /dev/null 2>&1 || exit 1
    fi
    if [ -z "$ORPHANS1" ] && [ -z "$ORPHANS2" ]; then
        echo
        exit 0
    fi
done

Please double-check you added required packages to the keep file. Otherwise, things can go screwed up. You have been warned. If you are in doubt, you can always run yum remove manually, which is safer.

My Favorite Text Editor – SciTE

Finally, I’ve found the text editor that fits exactly to me, highly-customizable, feature-rich and fast-launching. It’s called ‘SciTE‘. Because the command is not so comfortable to type, I created two symbolic links after uninstalling gedit.

$ ln -s /usr/bin/scite notepad
$ ln -s /usr/bin/scite gedit

The following is my ~/.SciTEUser.properties:

code.page=65001
output.code.page=65001
LC_CTYPE=ko_KR.UTF-8
position.width=850
position.height=700
check.if.already.open=1
buffered.draw=1
tabbar.visible=1
tqabbar.multiline=1
toolbar.visible=1
toolbar.usestockicons=1
statusbar.visible=1
caret.fore=#FF0000
caret.width=2
caret.line.back=#00FF00
caret.line.back.alpha=20
line.margin.visible=1
line.margin.width=4
margin.width=16
blank.margin.left=4
blank.margin.right=4
wrap=1
wrap.style=2
cache.layout=3
output.wrap=1
output.cache.layout=3
wrap.visual.flags=1
wrap.visual.flags.location=0
wrap.visual.startindent=0
edge.column=79
edge.mode=1
edge.colour=#C0DCC0
selection.fore=#006000
braces.check=1
braces.sloppy=1
# Brace highlight
style.*.34=fore:#0000FF,back:#C0DCC0,bold
tabsize=4
indent.size=4
use.tabs=0
tab.indents=1
quit.on.close.last=1
default.file.ext=.txt
strip.trailing.spaces=1
ensure.consistent.line.ends=1
find.replace.advanced=1
find.files=*.java *.xml *.txt *.c *.h *.cpp *.hpp
font.base=font:!Liberation Mono,size:11
font.small=${font.base}
font.comment=${font.base}
font.code.comment.box=$(font.comment)
font.code.comment.line=$(font.comment)
font.code.comment.doc=$(font.comment)
font.code.comment.nested=$(font.comment)
font.text=${font.base}
font.text.comment=${font.comment}
font.embedded.base=${font.base}
font.embedded.comment=${font.base}
font.monospace=${font.base}
font.vbs=${font.base}
# Printing
command.print.*=paps --font="Monospace 10" "$(FileNameExt)" | lpr

Please note that I chose Liberation Mono as the default font. You might want to use other alternatives like DejaVu Sans Mono, Monaco, and Consolas.