2009년 6월 30일 화요일

FreeBSD & Gvim

주로 사용하던 에디터는 emacs였지만, 윈도우를 한참 사용하다보니 일반적인 notepad 스타일의 에디터도 불편하지 않았다. 다시 FreeBSD를 설치하고는 적당한 에디터를 찾아봤지만 역시 emacs나 vim에 대한 강한 추억이란...

emacs를 설치하고 써보려 했지만 anti-aliasing font이 깔끔하게 표현되지 않았고, perl programming하기에는 vim이 더 편한 것 같아서 vim을 설치하기로 했다.

cd /usr/ports/editors/vim
make WITH_GTK2=YES install clean
WITH_GTK2를 하지 않으면 gvim이 GTK1을 사용하게 된다.

설치 완료 후 GTK2와 잘 조합된 모습. 컬러 스킴은 wombat을 사용했다.

2009년 6월 18일 목요일

Twitter?

Computer Science를 전공했으며 아직도 학교에 남아 같은 분야의 공부를 더 하고 있는 사람이지만 요즘의 IT 유행을 따라 가는 건 쉽지 않은 것 같다. 이제서야 비스타를 써볼 수 있는 기회가 생겼는데 윈도우 7이 나온다고 난리고, 아직도 블로그를 잘 활용하지 못하고 있는데 마이크로 블로그들이 성행하고 있다. Ubuntu의 버전은 빠르게 올라가고 있고, 잠시 FreeBSD 사용을 쉬었다 싶었더니 벌써 버전이 7.2이다.

각설하고 본론으로 들어가자. 요즘 Twitter가 난리다. 아니 난리인지 이미 오래되었다.

나는 국내 서비스 미투데이를 이용하고 있다. 미투데이라는 서비스를 처음 접했을 때 이것이 외국의 트위터라는 서비스와 유사하다는 이야기를 들었었고 그 때 찾아본 트위터는 그저 그런 서비스였다. 나름의 인기는 있었지만.

그 때와는 분위기가 달라졌다. 요즘은 트위터를 안 쓰면 뒤쳐지는 느낌이 들 정도로 주변에서 트워터에 대한 이야기를 많이 듣는다. 어쩔 수 없이 가입해보았다. 분명 쉽다는 이야기를 많이 들었는데 처음엔 뭔지 잘 모르겠더라. 검색해서 조금 찾아보니 내가 사용하던 미투데이와는 방식이 다르기 때문에 이해를 못했던 것 같다. 물론 아직 일주일도 이용해보지 않은 상황이라 서비스를 정확히 이해하고 있을리 만무하고, 따라서 글을 쓰는 것이 성급한 것이겠지만, 괜찮은 서비스인 것 같아 소개도 할 겸 글을 남긴다.

미투데이와 트위터가 어떤 서비스인지를 아직 이야기 안 했다. 둘은 모두 마이크로 블로깅을 할 수 있도록 도와주는 서비스다. 미투데이는 150자, 트위터는 140자를 남길 수 있다. 한 줄 블로그라고 생각하면 된다. 그만큼 쉽게 가벼운 이야기들을 남길 수 있다. 블로그라는 것은 갈 수록 전문화되고 있어 일반 사용자들이 쓰기에는 부담스러워져 버렸으니 이런 서비스가 인기를 얻는 것이 일리가 있다.

미투데이와 트위터 중 어느 것이 낫다는 이야기를 할 생각은 없다. 다만 미투데이를 꽤 사용해왔고 그것을 바탕으로 트위터에 대한 첫인상을 가질 수 밖에 없었기 때문에 둘의 차이점으로 이야기를 풀어가겠다.

미투데이는 가입 후 생성되는 나만의 페이지에 글을 남길 수 있다. 그리고 친구를 만들 수 있는데, 친구 신청을 하고 그 사용자가 수락하면 서로 친구가 된다. 친구로 등록되면 '친구들은'을 클릭하여 그들이 올린 글을 읽을 수 있다. 그리고 해당 글에 덧글을 달 수 있는 방식이다. 내 친구들 또한 '친구들은'을 클릭하여 자신의 수 많은 친구들이 남긴 글 중에 내가 쓴 글을 발견하게 될 것이다.

트위터 역시 가입 후 바로 내 페이지에 글을 쓸 수 있고 친구를 만들 수 있는데, 이것을 follow라고 한다. 미투데이와 조금 다른 점은 '친구들은' 버튼이 없다는 것인데, follow한 사람들, 즉 친구들이 글을 쓰면 내 Home에서 바로 보인다. 그리고 해당 글에 덧글을 달 수 있는 미투데이와는 다르게 트위터는 그런 기능이 없다. Follow라는 것은 서로 나랑 친구하자~ 하는 것이 아니라 일방적으로 그 사람이 쓴 글을 내가 구독하겠다는 의미가 된다.

정리하면, 미투데이는 친구 '신청'을 하고 '수락'해야 서로 글을 보게 되지만, 트위터는 내가 그냥 가서 엿봐야지~ 하면 볼 수 있게 된다. 이게 별로 차이가 없는 것 같지만 그렇지 않다는 생각이 들더라.

우리가 잘 아는 싸이월드의 일촌도 그렇지만 신청하고 수락하는 관계가 되면 소규모의 긴밀한 네트워크가 형성된다. 이것은 아주 재밌는 소셜 커뮤니티지만 결국 그건 폐쇄적인 커뮤니티일 뿐이다. 반면 트워터는? 완전 개방이다. 다른 사람이 내 글을 볼 수 있게 없게 제어할 수가 없다.

유명인의 페이지를 예로 들면 가장 확실히 와 닿는다. 트위터에는 김연아가 있다. 김연아가 미투데이에 계정을 만들었다고 해보자. 엄청난 친구 신청을 받을 것이다. 다 수락해주기도 힘들거다. 두 가지 경우가 있을 수 있다. 일일이 골라서 수락하거나 자동으로 다 수락하거나. 전자는 힘들 것이니 후자를 택할 확률이 높다. 자, 이제 김연아가 자기 친구들의 글을 보고 싶다. 전혀 모르는 사람들이 다 내 친구다. 이런! (트위터처럼 내 Home 화면에 보이기 시작한다면?!)

트위터에서는? 일일이 친구 수락을 할 필요가 없다. 사람들은 내 글을 엿들을 테니까. 그녀는 자기가 보고 싶은 사람의 트위터만 follow하면 된다. 내 글을 누가 보고 있는지, 누가 나에 대해서 뭐라고 하는지 알 길이 없다. 현재 이 글을 쓰고 있는 시점에서 김연아의 트위터를 follow하고 있는 사람은 - 나를 포함해서 - 만오천명 정도 되지만, 정작 김연아가 follow하고 있는 사람은 고작 6명이다. 그 6명이 쓰는 글 외에는 어떤 글도 김연아의 페이지에서는 보이지 않는다.

전에도 말한 적 있지만, 나는 comment의 효용성을 아주 낮게 보고 있다. 그런 의미에서 덧글 기능을 사용하지 않는 트위터의 손을 들어주고 싶다. 이러한 방식이 더 의미있는 커뮤니케이션 네트워크를 형성할 수 있다고 생각한다.

사실 내 주변에 사람들 중 미투데이를 사용하는 사람을 찾는 것도 힘들다. 블로그를 쓰는 친구들 중에서도 꾸준히 글을 남기는 사람이 드물다. Web 2.0의 광장에 잠시 구경왔다가 다시 나올 생각을 않는 사람들이 태반이다.

뭔가 심심한데 블로그를 쓰기에는 버거운 사람들에게 트위터는 괜찮은 서비스가 아닐까 싶다. 내가 쓴 글에 덧글이 달렸나 안 달렸나 일일이 점검하지 않아도 되고 편안하게 내가 하고 싶은 말을 재잘거리면(tweet) 되니까. 그리고 멋진 사람이 보이면 follow하자. 김연아나 버락 오바마와 같은 사람들이 있다.

ps.
본의 아니게 미투데이가 안 좋은 듯한 뉘앙스를 풍기는 글이 되었다고 생각된다. 하지만 그렇지 않다. 덧글(comment)의 가치를 매우 낮게 생각하는 본인에게는 트위터의 방식이 더 마음에 들었을 뿐이다.

ps2.
김연아가 트위터를 쓰고 있다는 이야기만 했는데, 미투데이에도 에픽하이의 tablo가 있다. :)

2009년 6월 16일 화요일

A Big Factorial Number

책을 읽다가
What are the largest values of n for which n! has fewer then 100 decimal digits, fewer than 1000 decimal digits, and fewer than 10,000 decimal digits?
라는 질문을 보고 간단히 perl script로 결과를 구해봤다.
69!, 449!, 3248!이 각각 10진수로 99자리, 998자리, 9998자리이다.

다음은 코드와 결과이다.

use strict;
use bigint;

my $d = 10000;
my ($i, $n) = (1, 1);
while(1)
{
$n *= $i;
last if length($n * $i) >= $d;
$i++;
}
print "$i factorial: $n [", length($n), " digits]\n";

69 factorial: 171122452428141311372468338881
27283909227054489352036939364804092325
7279754140647424000000000000000 [99 digits]

449 factorial: 385193051802807257632158476912
12875548395805893534467012649055767896288
926298594457881668628676415791435136187818
72021746359685290289255601854954706967037
237815981933427173547163838273480784018675
12495830429837203000813557811307516010999
35399420025859541702588941624119769786447
979635875887987628187121141743814227340405
786877075540700136227919818634007425579126
136583156012933348747449102149815962647863
834705576714179015069575989844000509497340
761230129254648880664249707996772824842574
358558533486456993617018144080838058452833
163022395716238804463454122374136551392458
4025461354677759729187297731663124277878618
877498334677521800812698843489928636349843
038102559471536632660957843998883126988557
88258154809005327539117440908208905353330
891394428678158921052069748074205537868136
717094006764031023426591318276097353833638
375226039787340475684974328746914841262748
8289694186769477953126400000000000000000
0000000000000000000000000000000000000
0000000000000000000000000000000000000
0000000000000 [998 digits]

3248 factorial은 너무 길어서 생략.

Ulam numbers

정수론 책을 보다가 Stanislaw M. Ulam (1909-1984)라는 사람의 소개를 읽게 되었다. 폴란드 출신 학자로 물리학, 천문학 등에 관심이 있었으며 미국 여러 대학을 돌아다니며 연구하고 강의했다고 한다. 특히 핵폭탄을 만드는데 큰 공헌을 했다고.

이 사람이 만든 Ulam numbers라는 정수 수열이 있는데, 두 개의 정수(일반적으로 1,2)를 시작으로 한다. 피보나치 수열이 단순히 앞의 두 수를 더해서 다음 값을 결정하는 것에 비해 Ulam numbers는 조금 더 복잡하다.

Ulam number는 두 개의 Ulam number의 합이 되는데, 대신 정확히 한 쌍의 Ulam numbers의 합한 결과여야 하며 숫자의 중복 사용은 허가되지 않는다. 예를 들어 설명하는 것이 가장 빠르겠다.

{1, 2}가 시작 숫자였다. 1+2 = 3. 3은 Ulam number이다.
{1, 2, 3}이 얻어졌다. 1 + 3 = 4. 4도 Ulam number이다. 2 + 2 = 4이지만 중복 사용은 안 된다.
{1, 2, 3, 4}가 얻어졌다. 1 + 4 = 5 이지만 2 + 3 = 5 이기 때문에 5는 Ulam number가 아니다.

이렇게 계속 구해나가면 수열이 만들어지며 이것이 바로 Ulam numbers이다.

Ulam numbers를 구하는 perl script를 작성해보았다.

use strict;

my @seq = ulam(seed => [1, 2], max => 100);
print "@seq\n";

sub ulam()
{
my %args = @_;
my @ulam = @{$args{seed}};
my $max = $args{max};
my ($i, $j) = (0, 1);
my @dups;
while(1)
{
my $s = $ulam[$i] + $ulam[$j];
push @ulam, $s;

if($i + 1 == $j)
{
$j++; $i = 0;
my (@dup, %seen);
foreach (@ulam) { push @dup, $_ if $seen{$_}++ } # find duplications
push @dups, @dup; # save duplications
foreach (@dups) { $seen{$_}++ } # update the duplication record
my @dup_removed;
foreach (@ulam) { push @dup_removed, $_ if $seen{$_} == 1 } # remove duplications
@ulam = sort {$a <=> $b} @dup_removed;
last if($ulam[$j] > $max);
}
else
{
$i++;
}
}
$#ulam = $j - 1;
return @ulam;
}


100까지의 Ulam numbers를 구하는 코드인데, 결과는 다음과 같다.
1 2 3 4 6 8 11 13 16 18 26 28 36 38 47 48 53 57 62 69 72 77 82 87 97 99
위키피디아에 보여지는 것과 동일한 결과를 얻을 수 있었다.

ps.
프로그램에 주석이 없어 추가 설명을 간략히 적어둔다.
i와 j는 두 수를 더하기 위한 인덱스이다. (0, 1) (0, 2) (1, 2) (0, 3) (1, 3) (2, 3) (0, 4) ... 와 같이 진행된다. 항상 i가 j보다 작으며 i가 j보다 1작은 수가 되면 j가 하나 증가하면서 i는 0가 된다.
Ulam number는 내부 숫자의 합이므로 일단 더해서 배열에 저장해둔다.
j가 증가되기 바로 전 시점에 중복으로 나타나는 값을 점검하고 제거한다.
중복 출현한 숫자는 모두 기억하고 있어야 한다. 여러 번 계산 결과로 출현할 수 있기 때문이다.

ps2.
코드를 이쁘게 보여줄 수 있는 방법이 있으면 좋으련만.

2009년 6월 9일 화요일

세벌식에 대한 이야기.

1990년 컴퓨터를 처음 접한 이후로 사용했던 한글 자판은 - 당연히 - 2벌식이었다. 당연하게 사용하던 자판을 바꿔볼까 싶었던 것은 4년전쯤이다. 그 때 문득 별로 할 일이 없던 휴일에 세벌식을 연습해보겠다고 타자 연습 프로그램을 켜두고 삽질을 했던 기억이 난다. 쉽지 않았다. 10년이 넘도록 사용하던 자판을 바꾼다는 것은.

연습했던 자판은 "세벌식 최종"이었다. 세벌식을 연습하러다 보니 자판 종류가 많았다. 뭘 해야하지? 하면서 구글링이라도 했어야 했는데 그냥 "최종"이라니까 이게 가장 좋아보였다.

얼마전에 알게 된 것이지만 공병우 박사님께서는 수 많은 최종 버전 자판을 만드셨단다. 돌아가시기 전에 만드신 것이 세벌식 391이며 이 때도 최종이라고 붙이셨는데 돌아가시고 나니 이게 그냥 최종이 되었다는 글을 본 적이 있다. (믿거나 말거나) 결론적으로 하고 싶은 말은 '최종'이라는 이름이 이 자판이 가장 좋기 때문에 최종이라고 붙은 것은 아니라는 것이다.

많은 자판이 있지만 가장 많이 이용되는 세벌식 자판은 390과 391이다. 앞에서도 말했든 391은 최종이라는 이름으로 더 많이 불린다. 390에 대해서는 뒤에 이야기하겠다.

세벌식 자판은 한글 입력에 있어서는 정말로 편리하다. 두 벌식은 초성과 종성을 모두 왼손이 담당하고 있는데 세벌식은 초성, 중성, 종성이 모두 다른 자판으로 배치되어 있어 리듬감 있는 타자가 가능함은 물론 일명 "모아치기"가 가능해진다. 무슨 말이냐 하면 피아노 치듯 동시에 3키를 눌러도 한글이 입력이 된다는 것이다.

'글'을 입력하기 위해서는 초성 ㄱ를 담당하는 쿼티 자판 K, 모음 ㅡ를 담당하는 G, 받침 ㄹ을 담당하는 W를 동시에 눌러서 입력을 할 수 있다. 동시에 누른다는 건 사실 불가능한 것이므로 다시 말하면 세 키를 누르는 순서가 달라도 입력이 잘 된다는 것이다. 받침, 모음, 초성으로 입력해도 글자가 잘 입력된다.

당장 실험해보고 '어? 안되는데?' 하는 사람이 있을 수 있다. 마이크로소프트사가 제공하는 기본 한글 입력기는 이 모아치기가 지원되지 않는다. 따라서 '새나루'나 '날개셋' 입력기를 설치하는 것이 세벌식을 최대한 활용할 수 있는 방법이다. 새나루의 경우 XP에서 매우 잘 동작했으나 현재 내 VISTA에서 설정 저장 문제가 있어 사용이 거의 불가하고, 날개셋은 아주 잘 동작하고 있다.

세벌식을 한 번 연습해볼까? 하는 사람이 있다면 세벌식 390도 나쁘지 않다. 넘어오는데 더 편할 것으로 생각된다. 세벌식은 앞에서 말했듯 초중종성을 모두 따로 배열해두었다. 따라서 키가 모자란다. 숫자키가 더 이상 숫자키가 아니며 한글 입력에도 숫자키를 이용한다. 이것은 390이든 391(최종)이든 마찬가지이다. 최종 자판의 더 큰 문제는 기호 자판 또한 모두 다르다는 것이며, 심지어 $, %와 같은 기호는 아예 없다. 390자판은 다른 기호 자판이 영문 쿼티 자판과 거의 비슷하다. 느낌표(shift + 1)을 제외하고는 shift + 숫자를 통해 입력하는 모든 기호가 같으며 <, >등이 조금 다를 뿐 나머지도 거의 동일하다. 기호를 동일하게 만드는 대신 몇몇 이중받침을 포기했기 때문에 두벌식 입력하듯이 이중받침을 두 번 타이핑하여 입력해야 하는 문제가 발생하긴 한다.

사실 최종을 쓰다가 390을 발견하고 '아! 이게 더 좋겠구나!' 했었다. 하지만 익숙해진 자판을 바꾸는 것은 역시 쉽지 않았으며 '옳', '맑'과 같이 비교적 많이 쓰이는 단어를 입력할 때 리듬이 깨지는 것이 맘에 들지 않아 다시 최종으로 돌아왔다.

두 자판 중에 어떤 것을 선택할 것인가는 사용자의 마음인 것 같다. 어느 것이 더 우수하다라고 하기에는 각각이 장단점이 있다.

한글 타이밍을 많이 하는 사람이라면 세벌식으로 이동하는 것을 강력히 추천한다. 세벌식을 쓰다가 두벌식 타이핑을 하면 확실히 왼손이 피곤하며, 특히 한글에서 빈번하게 사용되는 ㅆ받침이 두벌식은 shift와 함께 입력해야 하는 반면 세벌식은 한 번의 타이핑으로 입력되다는 점이 내가 세벌식을 떠나지 못하는 이유다.

2009년 6월 7일 일요일

블로그를 쓰다 만 이유 그리고 다시 이 글을 쓰는 이유

- 처음 쓰기 시작한 이유

블로그라는 것은 분명 내 기억에 weB LOG라는 의미였다. 일기장에 쓰던 것을 웹에 쓴다는 느낌이었달까. 실제로 블로그 초창기에는 그냥 내가 오늘 뭘 했네, 뭘 느꼈네 그런 것을 쓰는 것이 일반적인 것이었다. 나 역시 그랬고 많은 사람들이 그랬다.

- 점점 쓰지 않게 되었지

일기장은 남에게 보여주는 것이 아니다. 아주 개인적인 일은 블로그에 쓰기 애매했다. 그러다보니 남이 알아도 상관없는 이야기들을 쓰는데, 일반적으로 이런 건 별로 흥미가 없다. 정말 친한 친구들이 아니면 읽을 일이 없겠지. 게다가 반복적인 일상에서 다이나믹하게 사건 사고가 발생할리 만무하다. 쓰는 사람도, 읽는 사람도 슬슬 지겹다. 가까운 사람들조차 덧글 하나 남길 생각이 들지 않는 글들이 올라온다. 공간은 황폐해져 간다. 소통의 느낌은 없다. 블로그 쓰는 것을 멈췄다.
(한 때는 매우 개인적인 이야기까지 올렸던 기억이 난다. 웃음이 난다.)

- 블로그에 대한 불만

블로그를 쓰다보니 불만이 생겼었다. 나는 덧글 시스템이 싫다. 어떤 사람이 글을 쓰면 RSS를 통해 쉽게 새 글이 등장했음을 알 수 있다. RSS가 처음에 나왔을 때 정보가 나를 찾아오네 어쩌네 하면서 난리를 쳤는데 (기술적으로는 별 거 아니지만) 나도 그 아이디어에 박수를 보낸다. 덕분에 매우 편리하게 지인들이나 좋아하는 사람들의 글을 빠르고 편하게 읽을 수 있다. 하지만 덧글은 뭔가 부족하다. 블로그에 올라오는 좋은 글은 분명 신명나는 토론을 일으킬 수 있는 공간이며 많은 정보와 의견이 오고 갈 수 있는 장이 된다. 하지만 그러기에는 너무 불편하다. 모든 덧글을 RSS처럼 받나? 그것은 깔끔한 솔루션이 아니다.

위키는 어떤가? 위키는 좋은 글이 사라지는 것을 막고 중복을 줄일 수 있는 좋은 수단이다. 그러나 "새 글"이라는 느낌이 없다보니 새로운 콘텐츠를 원하는 사람들의 입맛에 맞지 않는 것 같다. 위키파디아가 그런 것처럼 지식 창고를 만들고자할 때는 분명 용이하지만 개인적인 이야기를 담기에는 프레임이 너무 크다. 지멋대로의 백과사전을 만들던 베르베르정도의 배짱이 있지 않다면.

뭐가 있을까? Web 2.0이라는 용어가 나온지도 꽤 오랜 시간이 지났다. 하지만 나는 아직도 블로그가 웹 2.0의 철학에 맞아떨어지는 어플리케이션은 아니라고 생각한다. 도대체 어떤 방식이 있을 수 있을까?

- 그동안 안 쓰면서 뭘 했나

그래도 뭔가 사람들과 소통하고 싶어서인지 아니면 뭔가 주절대고 싶었던 것인지 미투데이도 해보고, 스프링노트에 뭘 끄적이기도 했다. 뭔가 정리를 하고 싶은 것이 있으면 구글 독스에 써두기도 했다.

블로그라는 것은 어느덧 전문적인 지식을 가진 사람들이 글 쓰는 공간이 되어버린 느낌이 들었다. 별다른 주제도 없이 글을 쓰는 것은 의미 없다고 생각했고, 특정 주제를 잡아보려 했지만 나는 그만큼의 글을 쓸 수 있는 전문가도 아님을 알게 되었다.


- 그래도 다시 글을 쓰는 이유

다시 글을 쓰는 이유라고 하니까, 절필했던 대작가가 다시 붓을 잡는 것마냥 거창하다. 미안.
이유를 대보자면, 아니 변명을 해보자면,
아직 블로그를 대체할 만한 것을 생각해내지 못했으니까.
혼자 문서를 쓰고 정리하는 것보다는 공개하고 집단 지성으로부터 따끔한 지적을 받는 것이 더 좋을 것 같다는 생각이 들었으니까.
그리고 심심하니까.