유럽여행, 0일차Aug 14, 2008

4학년 1학기 여름방학. 마지막 방학이다. (2학기 겨울방학이 남아있기는 하지만, 신입사원 연수를 받아야 할 테니 실질적으로는 이번이 끝이다.) 그런 고로, 마지막 방학을 맞이하여 중고등학교 동창들과 함께 여행을 가기로 했다. 사실 갑작스럽게 이야기가 나왔고, 현실에 지쳐서 어디론가 도망가고 싶었던 마음도 있었던 터라 별 생각도 없이, 준비도 없이 급히 출발하게 되었다. 짐도 전날 밤 늦게서야 부랴부랴 싸기 시작했고, 계획도 없었고, 일정도 없었다. 일단 가서 생각하자는 대책없는 마인드로 출발했다.

출발 항공편은 대한항공. 9시 예정이었으며, 나리타에서 Alitalia 로 갈아타고 로마까지 간 뒤 다시 한번 갈아타고 런던까지 가는 코스이다. 두번이나 갈아타야 하는 게 불편하지만, 항공권 예약도 출국 열흘 전쯤에 한 상태였으니 뭘 더 바라나. 좌석 있는게 감지덕지지. 그래도 나리타까지는 대한항공이니 그나마 위안이랄까. 어쨌건, 일찍 도착한 덕에 여유롭게 체크인하고 빈둥대다가, 면세점은 대충 구경하는둥 마는둥 하고 담배만 한보루씩 사들고 비행기에 탔다. 유럽은 담배가 워낙 비싸다는 소리를 하도 들어서 미리 사둔 것이다. 기내식 먹고 맥주 한잔 하고 잠깐 눈붙이니 나리타 공항이었다.

IMG_5707

Alitalia 보딩 패스로 JAL타는 센스

비행기에서 내려서 환승통로를 통해 가다 보니 어느새 한국인이 확 줄었다. 같이 여기서 환승해서 런던까지 가는 사람들 중에 한국인으로 보이는 사람은 딱 7명 뿐이었다. 우리 세명, 그리고 남자2인조, 여자2인조. 말이나 걸어볼까 했는데, 그순간 JAL 승무원이 갑자기 사람들을 불러세운다. 런던까지의 항공편이 JAL로 바뀔 예정이란다. 어라 우리가 체크인한 보딩 패스는 AZ210 인뎁쇼 했더니 괜찮단다. 뭐 잘 됐지. Alitalia 보다는 JAL 기내식이 버틸만할테니까. 땡큐감사합니다 를 속으로 외치고 변경된 비행기를 탔다. 역시나 위스키 한잔 마시고, 기내식 먹고, 맥주 한잔 마시고 뻗어 잤다. 난 버스나 지하철에서는 절대 못 자는데, 이상하게도 기차나 비행기는 타기만 하면 졸립다. 여행 막바지가 되어갈 때 쯤에는 이게 참 행복했다. -______-

눈을 떠보니 모스크바도 못왔다. 앞으로 5시간쯤 남았단다. 기내식을 또 주길래 또 먹고, 역시 위스키 한잔 청해 마시고 다시 잤다.
눈을 떠보니 아직도 바르샤바다. 앞으로 3시간쯤 남았단다. 안되겠다 싶어서 들고 온 실마릴리온을 펴서 읽기 시작했다.
퀜타 실마릴리온 파트까지 전부 읽었다. 지도를 보니 이제 겨우 아드리아해가 보인다. -_-;
요즘 말로 진짜 “쩌는” 것 같다. 가도가도 끝이 없다. 도대체 몇시간째 앉아있는건지 모르겠다.

IMG_5710

매우 심심했던 로마 공항

어찌됐건 간신히 로마 도착. 이제 또 런던행 비행기로 갈아타야한다. 환승 참 오지게 멀다. 홍콩공항처럼 터미널과 터미널 사이가 모노레일로 연결되어 있는데, 엄청나게 빙빙 돌린다. 간신히 C26 게이트를 찾고, 옆에 흡연구역이 있길래 일단 담배부터 한대 피웠다. 근 10시간만에 피우는 담배라서 다들 두대씩 줄담배를 피워댔다. 보딩타임까지는 한시간이 넘게 남았는데 로마 공항도 나리타만큼 황량하다. 홍콩공항이나 인천공항은 안에 별게 다있어서 시간때우기는 그만인데. 어쨌건 애꿎은 담배만 축내며 빈둥빈둥 시간을 보내다 다시 지겨운 비행기를 또 탔다. 이번에는 Alitalia. 단거리(그래도 로마-런던 이지만) 소형 비행기라 그런지 덜컹거리고, 시끄럽고, 기내식도 안줬다(-_-). 여기서 첫 번째 사고를 쳤다. 준환이가 면세점에서 산 담배를 보루째로 두고 타버렸다. -_-; 그나마 짱박아둔 담배가 6갑쯤 있으니 다행이긴 하지만 시작부터 조짐이 안좋다. 주변을 두리번거려보니 역시나 아까 나리타 공항에서 봤던 한국인 남자 2명이 있다. 여자 2명은 JAL로 변경될 때 없던 걸로 봐서 그냥 Alitalia 타고서 간 것 같다. 런던에 도착하고 안 사실이지만, 이사람들은 우리랑 같은 여행사를 통해(우리는 호스텔팩으로 왔다) 온 사람들었다.

IMG_5712

런던에 도착했을 때는 이미 한밤중이었다.

런던 공항에 도착하니 밤 11시. 지하철도 끊겼고, 사람도 없다. 날씨마저 제법 쌀쌀하다. 다행히 공항에서 숙소(민박)까지는 여행사 직원이 픽업을 해주기로 해서 같은 비행기 타고 온 사람들(위에서 말한)이랑 노가리좀 까면서 잠깐 기다렸다. 그런데 도착하자마자 문제가 생겼다. 민박 쪽에서, 우리가 저녁 늦게까지 안오니 빵꾸가 난 줄 알고 다른 사람을 받아버린거다. 니미..-_-; 결국 어찌어찌해서 민박집 주인이 다른 민박집을 알선해줘서, 일단 거기서 하루 묵고 다음날 들어가기로 했다. 그래서 변경된 숙소는 한인타운 근처의 민박집이었다. 학생들이나 여행객을 대상으로 하는 곳이 아니라 주로 출장나온 직장인들이 이용하는 숙소이다 보니 오히려 시설도 훨씬 깔끔했다. 주인아저씨 말로는 괜찮으면 여기서 계속 묵어도 된다고 하지만, 가격차이가 좀 나는데다가 다운타운에서 한참 떨어진 New Malden 에 붙어있는지라 하루만 자기로 했다.

이미 시간은 밤 12시가 넘었던 터라, 씻고서 바로 잠들었다. 첫날은 이렇게 비행기만 타다 끝났다. -_-;

Xournal 단축키 변경May 14, 2008

타블렛 노트북(후지쯔 P1610)을 쓰고 있는 터라, 필기장 프로그램인 Xournal 을 애용하고 있다.
윈도우의 OneNote 정도의 기능까지는 아니더라도, 타블렛XP 내장 필기장보다는 훨씬 강력하다.
무엇보다도 PDF에 끄적일 수 있는 게 강점이랄까. 윈도우에서는 Acrobat Pro나 PDF annotator 같은 상용 툴로 해야 하니까.

하나 불만인 점은, 단축키 바인딩이 컨트롤+쉬프트 조합으로 되어 있어서 누르기 불편하다는 거다.
텍스트 툴과 펜 툴을 자주 오가면서 쓰는 터라 좀 오래 쓰다 보면 새끼손가락에 쥐가 난다.
그래서 수업은 안듣고 소스를 열어봤다. -_-;

단순히 단축키만 바꿔놨더만(P, E, H, T 로) 텍스트 입력시에도 단축키를 인식해 버리는 바람에
좀 무식하게 accel_group 을 전역으로 빼버린 다음, 텍스트 입력을 시작할 때 단축키를 전부 꺼버리고
입력을 종료할 때(ESC키를 눌러도 입력이 종료되도록 변경함) 단축키를 켜게 해버렸다. -_-;;

CODE:
  1. diff -urN xournal-0.4.1.orig/src/main.c xournal-0.4.1/src/main.c
  2. --- xournal-0.4.1.orig/src/main.c   2007-09-16 10:17:27.000000000 +0900
  3. +++ xournal-0.4.1/src/main.c    2008-05-15 13:16:08.000000000 +0900
  4. @@ -14,6 +14,7 @@
  5.  #include "xo-file.h"
  6.  
  7.  GtkWidget *winMain;
  8. +GtkAccelGroup *accel_group;
  9.  GnomeCanvas *canvas;
  10.  
  11.  struct Journal journal; // the journal
  12. diff -urN xournal-0.4.1.orig/src/xo-callbacks.c xournal-0.4.1/src/xo-callbacks.c
  13. --- xournal-0.4.1.orig/src/xo-callbacks.c   2007-09-16 10:17:27.000000000 +0900
  14. +++ xournal-0.4.1/src/xo-callbacks.c    2008-05-15 13:16:08.000000000 +0900
  15. @@ -2505,6 +2505,9 @@
  16.                                          GdkEventKey     *event,
  17.                                          gpointer         user_data)
  18.  {
  19. +  if (event->keyval == 65307) {
  20. +    end_text();
  21. }
  22.    return FALSE;
  23.  }
  24.  
  25. diff -urN xournal-0.4.1.orig/src/xo-interface.c xournal-0.4.1/src/xo-interface.c
  26. --- xournal-0.4.1.orig/src/xo-interface.c   2007-09-16 10:17:27.000000000 +0900
  27. +++ xournal-0.4.1/src/xo-interface.c    2008-05-15 13:16:43.000000000 +0900
  28. @@ -334,7 +334,7 @@
  29.    GtkWidget *labelLayer;
  30.    GtkWidget *comboLayer;
  31.    GtkWidget *statusbar;
  32. -  GtkAccelGroup *accel_group;
  33. +  extern GtkAccelGroup *accel_group;
  34.    GtkTooltips *tooltips;
  35.  
  36.    tooltips = gtk_tooltips_new ();
  37. @@ -555,7 +555,7 @@
  38.    gtk_widget_show (viewZoomIn);
  39.    gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewZoomIn);
  40.    gtk_widget_add_accelerator (viewZoomIn, "activate", accel_group,
  41. -                              GDK_plus, (GdkModifierType) GDK_CONTROL_MASK,
  42. +                              GDK_equal, (GdkModifierType) GDK_CONTROL_MASK,
  43.                                GTK_ACCEL_VISIBLE);
  44.  
  45.    viewZoomOut = gtk_image_menu_item_new_from_stock ("gtk-zoom-out", accel_group);
  46. @@ -576,7 +576,7 @@
  47.    gtk_widget_show (viewPageWidth);
  48.    gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewPageWidth);
  49.    gtk_widget_add_accelerator (viewPageWidth, "activate", accel_group,
  50. -                              GDK_equal, (GdkModifierType) GDK_CONTROL_MASK,
  51. +                              GDK_plus, (GdkModifierType) GDK_CONTROL_MASK,
  52.                                GTK_ACCEL_VISIBLE);
  53.  
  54.    image625 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU);
  55. @@ -842,7 +842,7 @@
  56.    gtk_widget_show (toolsPen);
  57.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsPen);
  58.    gtk_widget_add_accelerator (toolsPen, "activate", accel_group,
  59. -                              GDK_P, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  60. +                              GDK_P, (GdkModifierType) NULL,
  61.                                GTK_ACCEL_VISIBLE);
  62.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsPen), TRUE);
  63.  
  64. @@ -851,7 +851,7 @@
  65.    gtk_widget_show (toolsEraser);
  66.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsEraser);
  67.    gtk_widget_add_accelerator (toolsEraser, "activate", accel_group,
  68. -                              GDK_E, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  69. +                              GDK_E, (GdkModifierType) NULL,
  70.                                GTK_ACCEL_VISIBLE);
  71.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsEraser), TRUE);
  72.  
  73. @@ -860,7 +860,7 @@
  74.    gtk_widget_show (toolsHighlighter);
  75.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHighlighter);
  76.    gtk_widget_add_accelerator (toolsHighlighter, "activate", accel_group,
  77. -                              GDK_H, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  78. +                              GDK_H, (GdkModifierType) NULL,
  79.                                GTK_ACCEL_VISIBLE);
  80.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsHighlighter), TRUE);
  81.  
  82. @@ -869,7 +869,7 @@
  83.    gtk_widget_show (toolsText);
  84.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsText);
  85.    gtk_widget_add_accelerator (toolsText, "activate", accel_group,
  86. -                              GDK_T, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  87. +                              GDK_T, (GdkModifierType) NULL,
  88.                                GTK_ACCEL_VISIBLE);
  89.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsText), TRUE);
  90.  
  91. @@ -892,7 +892,7 @@
  92.    gtk_widget_show (toolsSelectRectangle);
  93.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsSelectRectangle);
  94.    gtk_widget_add_accelerator (toolsSelectRectangle, "activate", accel_group,
  95. -                              GDK_R, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  96. +                              GDK_R, (GdkModifierType) NULL,
  97.                                GTK_ACCEL_VISIBLE);
  98.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsSelectRectangle), TRUE);
  99.  
  100. @@ -901,7 +901,7 @@
  101.    gtk_widget_show (toolsVerticalSpace);
  102.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsVerticalSpace);
  103.    gtk_widget_add_accelerator (toolsVerticalSpace, "activate", accel_group,
  104. -                              GDK_V, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  105. +                              GDK_V, (GdkModifierType) NULL,
  106.                                GTK_ACCEL_VISIBLE);
  107.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsVerticalSpace), TRUE);
  108.  
  109. @@ -910,7 +910,7 @@
  110.    gtk_widget_show (toolsHand);
  111.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHand);
  112.    gtk_widget_add_accelerator (toolsHand, "activate", accel_group,
  113. -                              GDK_A, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  114. +                              GDK_A, (GdkModifierType) NULL,
  115.                                GTK_ACCEL_VISIBLE);
  116.  
  117.    separator16 = gtk_separator_menu_item_new ();
  118. diff -urN xournal-0.4.1.orig/src/xo-paint.c xournal-0.4.1/src/xo-paint.c
  119. --- xournal-0.4.1.orig/src/xo-paint.c   2007-09-16 10:17:27.000000000 +0900
  120. +++ xournal-0.4.1/src/xo-paint.c    2008-05-15 13:16:08.000000000 +0900
  121. @@ -989,6 +989,9 @@
  122.    GnomeCanvasItem *canvas_item;
  123.    PangoFontDescription *font_desc;
  124.    GdkColor color;
  125. +  extern GtkWidget *winMain;
  126. +  extern GtkAccelGroup *accel_group;
  127. +  gtk_window_remove_accel_group (GTK_WINDOW (winMain), accel_group);
  128.    
  129.    get_pointer_coords(event, pt);
  130.    ui.cur_item_type = ITEM_TEXT;
  131. @@ -1053,6 +1056,9 @@
  132.    gchar *new_text;
  133.    struct UndoErasureData *erasure;
  134.    GnomeCanvasItem *tmpitem;
  135. +  extern GtkWidget *winMain;
  136. +  extern GtkAccelGroup *accel_group;
  137. +  gtk_window_add_accel_group (GTK_WINDOW (winMain), accel_group);
  138.  
  139.    if (ui.cur_item_type!=ITEM_TEXT) return; // nothing for us to do!

덤으로 확대 단축키도 변경. 이제 좀 편하구먼.
패키지는 xournal_041-0ubuntu1_i386.deb.

덧붙임.
패키지 버전을 hold 할 때는 echo "packagename hold" | dpkg --set-selections

파이어폭스 검색창에서 레포트 사이트 제외하기May 07, 2008

어떠한 전문적인 자료를 찾을 때는 대부분 구글을 사용한다.
네이버를 비롯한 국내 포탈은 대부분 자사의 DB에 담긴 내용을 검색할 때에 한해서만 유용하고,
그 외의 웹 문서에 대한 검색에 대해서는 0점에 가까운 결과를 보여주기 때문에 주로 구글을 쓰게 된다.

그런데 언제부터인가, 구글에서 자료를 찾으면 가장 많이 보이는 사이트들이 레포트 판매 사이트들이 되었다.
특히나 이공계가 아닌 인문/사회계열의 자료에 대해서는 더 심각하다. 그러다보니 -site 검색 옵션으로 몇몇 레포트 판매
사이트들은 아예 제외시키고 검색을 하는 경우가 많은데, 그런 경우에는 또 원하는 자료를 찾기가 힘들다.

검색이라는 얕은 노력만으로 지식을 얻으려는 나도 문제이지만, 학생들의 지식마저 돈벌이의 대상으로 생각하고
상품화시켜 판매하는 각종 레포트 사이트들은 더욱 문제가 있다고 생각한다. 거기에 몇 푼 안되는 돈을 위해
그것을 판매하는 자와, 돈으로 과제를 해결하려 하는 자. 하여튼 이 미친 대한민국의 대학교는 모든 것이 엉망진창이다.

어찌되었건 이런 작태가 짜증나서 파이어폭스의 구글 검색 플러그인을 약간 고쳐서 레포트 관련 사이트는 검색되지 않게 고쳐서 쓰고 있다.
/usr/lib/firefox-addons/searchplugins/google.xml 의 아래 라인을

CODE:
  1. <param name="q" value="{searchTerms}"/>

이렇게 고치면 된다.

CODE:
  1. <param name="q" value="{searchTerms}+-inurl:report+-site:reportnet.co.kr+-site:reportshop.co.kr+-site:happycampus.com+-site:refee.com+-site:campusmon.com"/>

윈도우에서는 뭐... 같은 이름의 파일이 어딘가 처박혀 있을 테니 재주껏 고치면 될듯.

※ -inurl:report 만으로는 몇몇 사이트는 필터링되지 않는 터라 -site 로 좀 더 추가해주는 수고를 들여야 한다.