2008년 11월 30일 일요일

[다크 나이트] 마지막 감상 & 멋진 장면 7개

CGV에서 [다크 나이트] 재상영을 하더군요.
재상영 정보를 입수하자마자 주말 시간을 이용해서 달렸습니다.

okto님과 시간 약속을 잡아 강변 CGV를 향했습니다.


외울만큼 봤지만, 그래도 극장에서 보니 느낌이 다르더군요.
게다가 일부 재상영관에서 지적되었던 음량 문제도 그렇게 느껴지지 않아 마지막 관람으로서는 만족스러웠습니다.
(그놈의 번역 빼고 말입니다. 몰입도를 떨어뜨리는 주범이 되더군요)

[다크 나이트]를 보면서 제가 굉장히 멋진 장면들이라 느끼는 장면들을 나열해보겠습니다.

1. 조커의 첫웃음


말할 필요가 없는 멋진 장면입니다. R.I.P. 히스 레저


2. 브루스 웨인이 갱을 해치우는 장면



[배트맨] 영화 전체에서 배트맨과 브루스 웨인은 같은 사람이지만, 외적으로는 완전히 분리된 존재입니다.
복면을 쓰지 않았을 때의 그는 언제나 돈지랄 외엔 관심 없는 부잣집 도련닙인 것이죠.
하지만, 이 장면에서 딱 한 번 그는 복면을 하지 않은 상태로 막강한 전투력을 보여줍니다.

쌩얼로 갱을 조지고 샷건을 분리하는 장면에서 그의 포스는 후덜덜합니다.


3. 조커 생얼


시장을 저격하려는 장면에서 유일한 조커의 쌩얼이 나옵니다.
위의 2번과 함께 이 영화 전체에서 유일하게 두 명이 각각 쌩얼로 행동을 보이는 장면입니다.
딱 한 번씩 들어간 것 역시 의도적이라 보여집니다.

조커의 뒤쪽으로 토마스 쉬프가 보이는군요.


4. "S"LAUGHTER


놀이기구를 만드는 듯한 HYAMS 사의 트럭에 적힌 LAUGHTER는 조커가 S를 적음으로서 도살자(Slaughter)가 되어버립니다.

남들이 계획한 것을 조금만 비틀어 혼란에 빠뜨리겠다는 조커의 의지를 명확히 보여주는 장면입니다.


5. We burned the forest down


브루스가 버마의 산적들을 어떻게 잡았냐는 질문에 알프레드는 "We burned the forest down"이라고 말합니다.

이 한 마디로 그의 존재는 그저 웨인 집안에서 뒤치닥거리나 하는 집사 아저씨에서 험난… 아니, 험악한 인생을 살아온 존재로서, 배트맨의 진정한 멘토의 지위로 올라섭니다.


6. 죄수측 배에서 기폭제를 버리는 장면


선량한 시민들이 죄수들의 배를 폭파시키겠다고 투표하며 삽질하는 사이, 죄수측 배에선 죄수 한 명이 아무런 미련 없이 기폭제를 버립니다.
(덩치로 보나, 분위기로 보나 그는 죄수 중 두목급이죠)

이 장면은 볼 때마다 눈시울이 뜨거워지더군요.
진정한 인간의 조건은 어떤 것일까하는 생각이 절로 납니다.


7. "Because we have to chase him."


고든의 아들이 고든에게 "Why is he running, dad?"라고 질문하자 고든은 빨리 대답을 하지 못하고 입을 우물거립니다.
쉽게 대답할 수 있는 상황은 아닐 겁니다.
몇 분 전까지 자기 아들의 목숨을 구하기 위해 위험을 무릅썼는데, 갑자기 도망가게 되었고, 그 상황을 설명해야 하니까 말이죠.

이 순간 그가 머뭇거리며 대답하는 장면은 단연 압권입니다.
게리 올드만이란 배우의 연기력을 전 화면에서 느낄 수 있는 장면이죠.

"Because we have to chase him."



하드디스크의 근본적 문제 해결!!!

얼마전 하드 중 하나가 흐리멍텅 해지더니 결국 교환을 받고 말았습니다.
그런데, 1년밖에 되지 않은 하드가 맛이 간 이유를 알아야겠단 생각이 들었습니다.

유심히보니 종종 연결이 끊어지는 현상이 발생하더군요.
부팅된 상태에서 갑자기 연결이 끊어지는 현상이 하드디스크를 망가뜨린 주범인 것 같았습니다.

데이터 케이블을 교체해보니 이러한 현상이 없어졌습니다.

그런데, 하드 하나의 전원이 가끔씩 내려가는 것이 느껴졌지더군요.
모터 속도가 느려지는 소리가 들렸습니다.

전원 케이블을 교체해보니 역시 그 놈이 범인이 맞았습니다. (범인은 이 안에 있다니까요!!!)
하드 전원이 내려가는 소리가 안 들리더군요.

아무래도 전원과 데이터 케이블이 둘 다 불량해서 하드를 괴롭혀 하드를 망가뜨린 것 같았습니다.
근본적 문제를 해결한 것 같아 뿌듯합니다. ^^;;;


사용자 삽입 이미지

우리집 PC 장애의 주범들. 촬영 후 즉각 terminated!



블로거 명함 도착!

이정일님의 블로그 방문객 100만 달성기념, 블로거 명함 무료제작 이벤트에 4번째로 당첨되어 명함이 도착했습니다.
사실, 도착한지는 며칠 되었는데, 바쁘다는 핑계로 이제서야 포스팅합니다.

사용자 삽입 이미지

앞면은 기본적 신상만 적혀있고, 흰 배경을 충분히 배치해 여백의 미를 살렸고,
뒷면은 조선생님의 사진이 들어있어 강렬합니다.
(지금 보니 조커 사진이 조금 옆으로 갔으면 하는 생각도 드는군요. ^^;;;)

한편 재질은 플라스틱이라 구겨지거나 찢어질 염려가 없고, 고급스럽습니다.

만들어주신 이정일님께 진심으로 감사드립니다.

QAOS의 오프라인 모임에서 첫 개시를 하지 않을까 합니다.
집에 찾아오신 okto님께 처음 드림으로써 개시했습니다.
앞으로 회사와 관련된 분들이 아닌 경우엔 이 명함을 드리겠습니다. ^^;;;



notepad2 컴파일 삽질기 2 : IME 메시지를 처리하도록 수정

step2. IME 메시지를 처리하도록 수정

IME 메시지를 처리하도록 수정하는 방법은 CodeWiz님의 방법을 거의 그대로 사용했으며, 티끌만큼 수정했습니다.
그런데도, 굳이 여기에 적은 이유는 아래와 같습니다.

1. 앞뒤 포스팅과의 일관성 유지
2. CodeWiz님의 방법을 쥐꼬리만큼이라도 더 쉽게 설명
3. 제 스스로 까먹을까봐

수정과정은 역시 파일 단위로 적겠습니다.
수정 대상 파일은 3개(ScintillaWin.cxx, Editor.h, Editor.cxx)인데, 모두 Scintilla의 파일들입니다.


1. ScintillaWin.cxx

WM_IME_COMPOSITION 메시지를 처리하기 위해 관련된 메쏘드를 수정하거나 추가해야 합니다.
수정할 메쏘드와 추가할 메쏘드는 다음과 같습니다.

수정: HandleComposition(), UpdateSystemCaret(), CreateSystemCaret(), DestroySystemCaret(), HasCaretSizeChanged()
추가: GetCompositionString(), AddImeCompositionString(), MoveCompositionWindow(), GetCaretSize()


HandleComposition()은 아래와 같이 수정합니다.
sptr_t ScintillaWin::HandleComposition(uptr_t wParam, sptr_t lParam) {
#ifdef __DMC__
    // Digital Mars compiler does not include Imm library
    return 0;
#else
    if(lParam & GCS_COMPSTR)
    {
        if(inComposition)
            DelCharBack(false);

        if(AddImeCompositionString(GCS_COMPSTR) == 0)
            inComposition = FALSE;
        else
            inComposition = TRUE;
    }
    else if(lParam & GCS_RESULTSTR)
    {
        if(inComposition)
            DelCharBack(false);

        AddImeCompositionString(GCS_RESULTSTR);
        inComposition = FALSE;
    }

    MoveCompositionWindow();
    UpdateSystemCaret();
    return 0;

#endif
}


UpdateSystemCaret()은 아래와 같이 수정합니다.
void ScintillaWin::UpdateSystemCaret() 
{
    if (hasFocus)
    {
        if (HasCaretSizeChanged())
        {
            DestroySystemCaret();
            CreateSystemCaret();
        }

        if(inComposition)
        {
            Point pos = LocationFromPosition(currentPos-1);
            ::SetCaretPos(pos.x-sysCaretWidth, pos.y);
        }
        else
        {
            Point pos = LocationFromPosition(currentPos);
            ::SetCaretPos(pos.x, pos.y);
        }
    }
}


CreateSystemCaret()은 아래와 같이 수정합니다.
BOOL ScintillaWin::CreateSystemCaret() 
{

    Point cs = GetCaretSize();

    sysCaretHeight = cs.y;
    sysCaretWidth = cs.x;

    BOOL retval = ::CreateCaret(MainHWND()
        , NULL
        , sysCaretWidth
        , sysCaretHeight);

    ::ShowCaret(MainHWND());
    return retval;
}


DestroySystemCaret()은 아래와 같이 수정합니다.
BOOL ScintillaWin::DestroySystemCaret() 
{
    ::HideCaret(MainHWND());
    return ::DestroyCaret();
}


HasCaretSizeChanged()은 아래와 같이 수정합니다.
bool ScintillaWin::HasCaretSizeChanged() 
{
    Point cs = GetCaretSize();
    if(cs.x != sysCaretWidth || cs.y != sysCaretHeight)
        return true;
    return false;
}


다음, 추가해야할 메쏘드 4개를 ScintillaWin.cxx 파일 맨 마지막에 추가합니다.
LONG ScintillaWin::GetCompositionString(DWORD index, LPVOID buf, DWORD len)
{
    LONG bytes = 0;
    HIMC hIMC = ::ImmGetContext(MainHWND());
    if (hIMC)
    {
        bytes = ::ImmGetCompositionStringW(hIMC, index, buf, len);
        ::ImmReleaseContext(MainHWND(), hIMC);
    }

    return bytes;
}

LONG ScintillaWin::AddImeCompositionString(DWORD index)
{
    const int maxImeBuf = 200;
    wchar_t wcs[maxImeBuf];

    LONG bytes = GetCompositionString(index, wcs, (maxImeBuf-1)*2);
    if(bytes == 0)
        return bytes;

    LONG wides = bytes / 2;

    if (IsUnicodeMode()) {
        char utfval[maxImeBuf * 3];
        unsigned int len = UTF8Length(wcs, wides);
        UTF8FromUTF16(wcs, wides, utfval, len);
        utfval[len] = '\0';
        AddCharUTF(utfval, len);
    } else {
        char dbcsval[maxImeBuf * 2];
        int size = ::WideCharToMultiByte(InputCodePage()
            , 0
            , wcs
            , wides
            , dbcsval
            , sizeof(dbcsval) - 1
            , 0
            , 0);
        AddCharUTF(dbcsval, size);
    }

    return bytes;
}

BOOL ScintillaWin::MoveCompositionWindow()
{
    HIMC hIMC = ::ImmGetContext(MainHWND());
    if(!hIMC)
        return FALSE;

    Point pos = LocationFromPosition(currentPos);
    COMPOSITIONFORM CompForm;
    CompForm.dwStyle = CFS_POINT;
    CompForm.ptCurrentPos.x = pos.x;
    CompForm.ptCurrentPos.y = pos.y;
    ::ImmSetCompositionWindow(hIMC, &CompForm);
    ::ImmReleaseContext(MainHWND(), hIMC);
    return TRUE;
}

Point ScintillaWin::GetCaretSize()
{
    Point cs;

    if(inComposition)
    {
        Point end = LocationFromPosition(currentPos);
        Point start = LocationFromPosition(currentPos-2);
        cs.x = end.x - start.x;
        cs.y = vs.lineHeight;

    }
    else if(inOverstrike)
    {
        cs.y = vs.lineHeight;
        Point end = LocationFromPosition(currentPos+1);
        Point start = LocationFromPosition(currentPos);
        cs.x = end.x - start.x;
        if(cs.x <= 0)
        {
            cs.x = vs.aveCharWidth;
        }
    }
    else
    {
        cs.y = vs.lineHeight;
        cs.x = vs.caretWidth;
        if (cs.x == 0)
            cs.x = 1;
    }

    return cs;
}


마지막으로, ScintillaWin.cxx에서 추가할 메쏘드를 선언해줍니다.
class ScintillaWin :
    public ScintillaBase {
public:
    LONG GetCompositionString(DWORD index, LPVOID buf, DWORD len);
    LONG AddImeCompositionString(DWORD index);
    BOOL MoveCompositionWindow();
    Point GetCaretSize();


2. Editor.h

IME 조합중인지 여부를 저장하는 변수를 선언합니다.
class Editor : public DocWatcher {
public:
    bool inComposition;



3. Editor.cxx

IME 조합여부를 처리하는 부분을 추가합니다.
Editor의 선언부AddCharUTF()에 조금의 코드를 추가하면 됩니다.

선언부에서는 아래와 같이 초기화 작업만 해주면 됩니다.
Editor::Editor() {
    inComposition = false;


다음, void AddCharUTF(char *s, unsigned int len, bool treatAsDBCS) 메쏘드에서
if (inOverstrike && !wasSelection && !RangeContainsProtected(currentPos, currentPos + 1)) {
를 찾아서
if (!inComposition && inOverstrike && !wasSelection && !RangeContainsProtected(currentPos, currentPos + 1)) {
로 수정하면 됩니다.


마지막으로, void Paint(Surface *surfaceWindow, PRectangle rcArea) 메쏘드에서 캐럿을 그려주는 부분을 찾아 주석처리합니다.
아래의
        // Draw the Caret
        if (lineDoc == lineCaret) {
를 찾아서
        // Draw the Caret
        if (false && lineDoc == lineCaret) {
로 바꿔주면 됩니다.


여기까지 수정된 것만으로 자연스러운 한글 입출력은 가능합니다.
하지만, undo/redo에서 문제가 발생합니다.
(Scintilla/Notepad2의 undo/redo 구조때문입니다)

다음 포스팅에서는 undo/redo를 자연스럽게 수정하는 방법을 소개하겠습니다.

notepad2 컴파일 삽질기 1 : 기본적인 오류 수정

윈도우의 메모장을 대치할 수 있는 간단한 텍스트 편집기 중에 notepad2가 있습니다.
이 프로그램의 장점은 무엇보다 실행파일 하나로 구성되어 있어 언제나 갖고다니기 편하단 점입니다.
또한 널리 쓰이는 Scintilla를 기반으로 되어있어 안정성도 어느정도 검증되었다는 장점도 있습니다.

사용자 삽입 이미지

하지만, notepad2에는 다소의 문제점이 있습니다.

1. 한글 IME를 제대로 인식하지 않아 한글 입력 화면이 부자연스러움
2. 원 소스 자체에 약간의 에러 및 버그가 있음 (실행파일을 다운받을 땐 상관 없습니다)

이 외에도 VS.Net(7.0)으로 개발되어 이후 버전의 컴파일러로 컴파일시 약간 불편하단 점도 있더군요.


그래서, Visual Studio 8.0 Express Edition에서 notepad2의 소스를 수정하고 컴파일 해봤습니다.
기본적인 IME 부분 수정은 codewiz님의 방법을 참고했으며, 나머지 부분들은 사용 중에 문제가 있는 부분들 중심으로 수정했습니다.

사전 준비

1. Visual Studio 준비

Visual Studio 8.0 Express Edition에서 다운받을 수 있습니다.
※ 다른 버전(VS.Net 2003, VS 2005 등)에서는 일부 수정 방법이 아주 조금씩 다를 수 있습니다.


2. 소스 다운로드 및 적절한 폴더 설정

Notepad2, Scintilla 에서 각각 소스 파일을 다운로드 받습니다.
이 글을 쓰는 현재 기준으로 notepad2는 3.0.20이, Scintilla는 1.77이 최신버전입니다
일단 Notepad2의 소스의 압축을 풉니다.
다음으로, Scintilla의 소스를 notepad2의 소스 폴더 내에 압축을 풉니다.

사용자 삽입 이미지

이런 구성으로 폴더를 구성하면 됩니다


3. 솔루션 파일 변환

notepad2 소스의 루트 폴더에 Notepad2.sln이라는 솔루션 파일이 있습니다.
이 파일을 VS2008에서 읽어주면 변환은 끝납니다.
여기서 작업이 시작합니다.


step1. 각종 오류/버그 수정

오류/버그 수정은 파일 단위로 적겠습니다.

1. Dlapi.h

Dlapi.h 파일의 맨 마지막 부분에 아래의 3줄을 추가합니다.
#ifndef LPSHELLICON
typedef struct IShellIcon IShellIcon, *LPSHELLICON;
#endif


2. Edit.c

void EditTitleCase(HWND hwnd) 메쏘드에서
if (!IsCharAlphaNumericW(pszTextW[i]) && !StrChr(L"'?,pszTextW[i])) {
라는 행을 찾아
if (!IsCharAlphaNumericW(pszTextW[i]) && !StrChr(L"'",pszTextW[i])) {
로 바꿔줍니다.
이건 소스 쪽 오타입니다. ㅠ.ㅠ


3. Helpers.c

void FormatBytes(LPWSTR lpOutput,int nOutput,DWORD dwBytes)에서
int i;
라는 행을 찾아
int i, iLen;
로 바꿔줍니다.

다음으로
swprintf(tch,L"%.2f",dBytes);
라는 행을 찾아
iLen = wsprintf(tch,L" %i",(DWORD)(dBytes*100));
memcpy(tch, tch+1, (iLen-3)*sizeof(WCHAR));
tch[iLen-3] = L'.';
의 세 줄로 수정합니다.


4. Notepad2.rc

"afxres.h"가 들어간 두 행을 찾습니다.
#include "afxres.h"

"#include ""afxres.h""\0"
입니다.


이 두 줄을 각각
#include "windows.h"
#ifndef IDC_STATIC
#define IDC_STATIC              (-1)
#endif

"#include ""windows.h""\0"
으로 바꿔줍니다.
Express Edition에는 afxres.h 파일이 없기 때문입니다.
(VS2005/VS2008의 리테일 버전에서는 이 작업은 필요없습니다)


다음으로,
IDR_RT_MANIFEST         RT_MANIFEST             "..\\res\\Notepad2.exe.manifest"
라는 manifest 지정행이 있는데, 이것을
//IDR_RT_MANIFEST         RT_MANIFEST             "..\\res\\Notepad2.exe.manifest"
과 같이 주석처리합니다.


5. Notepad2.h

VS2008에선 앞의 4번의 아랫부분과 같이 주석처리해도 이상없이 마니페스트 파일을 링크하던데, VS2005는 좀 다르더군요.
VS2005에서 제대로 마니페스트 파일을 링크하려면 Notepad2.h의 맨앞에
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
를 추가해야 합니다.


6. KeyWords.cxx
#define LINK_LEXER(lexer) extern LexerModule lexer; forcer += lexer.GetLanguage();
를 찾아서 다음과 같이 수정합니다.
//#define LINK_LEXER(lexer) extern LexerModule lexer; forcer += lexer.GetLanguage();
#define LINK_LEXER(lexer)

LINK_LEXETR에서 링크하는 외부모듈의 역할은 정확히 모르겠지만,
링크를 원천적으로 차단해버려야 제대로 링크가 되더군요... ㅡㅡ;;;


7. Styles.c

Notepad2/Scintilla에는 약간 이상한 버그가 하나 있습니다.
글꼴을 지정하는 과정에서 charset이 0으로 기록되면 다른 프로그램으로의 복사/붙이기가 정확하게 이루어지지 않는다는 점입니다.
(okto님께서 Notepad2 제작자에게 문의를 하셨지만, Scintilla 쪽 버그라 손을 안 대겠단 답을 하셨답니다)

이 문제를 간단히 해결하기 위해 charset이 0인 경우는 기록하지 않도록 수정하겠습니다.

BOOL Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle,BOOL bDefaultStyle) 메쏘드의 두 군데를 수정하면 됩니다.
우선, 아래와 같은 부분을 찾습니다.
if (bDefaultStyle &&
    lf.lfCharSet != DEFAULT_CHARSET &&
    lf.lfCharSet != iDefaultCharSet) {
  lstrcat(szNewStyle,L"; charset:");
  wsprintf(tch,L"%i",lf.lfCharSet);
  lstrcat(szNewStyle,tch);
}
이곳을 아래와 같이 고쳐줍니다.
if (bDefaultStyle &&
    lf.lfCharSet != DEFAULT_CHARSET &&
    lf.lfCharSet != iDefaultCharSet &&
    lf.lfCharSet) {
  lstrcat(szNewStyle,L"; charset:");
  wsprintf(tch,L"%i",lf.lfCharSet);
  lstrcat(szNewStyle,tch);
}


다음으로 이렇게 생긴 부분을 찾습니다.
if (Style_StrGetCharSet(lpszStyle,&iValue))
{
  if (lstrlen(szNewStyle))
    lstrcat(szNewStyle,L"; ");
  wsprintf(tch,L"charset:%i",iValue);
  lstrcat(szNewStyle,tch);
}
이곳은 이렇게 고칩니다.
if (Style_StrGetCharSet(lpszStyle,&iValue) && iValue)
{
  if (lstrlen(szNewStyle))
    lstrcat(szNewStyle,L"; ");
  wsprintf(tch,L"charset:%i",iValue);
  lstrcat(szNewStyle,tch);
}


2008년 11월 18일 화요일

[렛미인]: 엄청난 여운에 뒷통수가 얼얼한 성장영화

뜬금없이 okto님께 연락을 받았습니다. 영화나 같이 보자고...
그래서 별 생각도, 정보도 없이 [렛미인]을 보게 되었습니다. 그런데...



이 영화는 분명히 흡혈귀 영화입니다.
흡혈귀인 이엘리는 인간의 피를 먹으며, 초인적인 능력을 보여주고, 햇빛에 약한 등 전통적인 흡혈귀의 성능(?)을 충실히 보여줍니다.
약간 특이한 점으로 허락받아야만 남의 집에 들어갈 수 있다는 설정이 있지만, 이 역시 일부 흡혈귀 전설에서는 등장하는 설정입니다.

피가 흐르지만, 고어씬이 전혀 아닙니다.


하지만, 이 영화에는 피가 튀기는 고어씬이나 절대악인 흡혈귀를 잡으러 다니는 절대선 반 헬싱 교수 따위는 나오지 않습니다. 오히려 최근의 많은 영화들이 그러하듯이 이 영화의 큰 줄기는 '진짜 흡혈귀가 우리 주변에 있고, 그 흡혈귀가 누군가와 사랑에 빠진다면...'입니다.


1. 이 영화의 미덕

a. 말로 사랑을 표현하지 않더라


Wall-E~ / E-va~ (번역 불필요)
[Wall.E] 중에서

이 영화는 구차하게 말로 사랑을 표현하지 않고, 행동으로 사랑하는 마음을 표현합니다.

사랑한다는 말 따위는 전혀 하지 않지만 이 영화에서 흡혈귀 이엘리와 왕따소년 오스칼은 사랑하는 사이입니다.
서로를 믿고, 의지하고, 지켜주는 모습을 보면 사랑한다는 것을 분명히 느낄 수 있습니다.

이 점은 [Wall.E]에서 보여주는 Wall.E와 Eve의 모습과 유사한 느낌을 느끼게 해줍니다.


b. 영화 자체보다 여운이 더 크더라


He's a silent guardian, a watchful protector.
A dark knight.

그는 소리 없는 수호자이며, 주의 깊은 보호자이자...
"어둠의 기사"니까.
[다크 나이트] 중에서

또한, 이 영화는 영화 자체의 줄거리보다 끝난 뒤의 여운이 더 큰 영화입니다.
마치 [다크 나이트]에서 그러했듯이 말이죠.

이 영화는 영화 자체가 잔잔한 만큼 여운은 엄청나게 거대합니다.
(리뷰를 쓰는 이 시점에도 정신이 없을 지경입니다)


c. 마음으로 보는 영화더라

루빅스 큐브... [Wall.E]에 이어 [렛미인]에서도 비슷하게 사용됩니다.


기존 전통의 흡혈귀 영화([드라큘라], [노스페라투] 등등)와 변형 블럭버스터 흡혈귀 영화([드라큘라 2000], [반 헬싱], [언더월드], [블레이드] 등등)들에 비한 장점들을 일일이 나열하는 것이 우스울 정도의 영화입니다.
다 나열하려면 끝이 없겠지만, 가장 큰 점은 머리로 보는 것이 아니라 마음으로 느낄 수 있는 영화란 점이 가장 큰 미덕입니다.


d. 두 주인공의 연기력은 먼치킨이요, 넘사벽이더라

정말로 특이한 구도: 여자가 뒤에 있습니다. ^^;;;


흡혈소녀 이엘리는 (기존 헐리우드 흡혈귀 영화에서 보여주던) 아름다운 얼굴이 결코 아닙니다.
하지만, 영화를 볼수록 흡혈귀로 보일 뿐더러, 얼굴에 사랑, 슬픔, 연민 등의 감정에다 수십, 수백년을 산 듯한, 모든 느낌이 스며있습니다.
(저의 경우 영화가 끝날 무렵엔 영화라는 사실을 잊을 지경이었습니다)

왕따계의 제왕 오스칼 역시 마지막까지 어설픈 왕따의 모습을 완벽하게 소화해냅니다.

두 주연배우의 열연 역시 몰입감을 무한대로 끌어올리는 원동력 중 하나입니다.



2. 그 외의 사실들...

a. 영화는 스웨덴 영화이며, 원작 소설 역시 스웨덴 소설입니다

b. 원작 소설에서는 이엘리의 아버지는 소아 성도착증 환자이며, 이엘리는 100여년전에 거세당한 남자입니다
    (이엘리에 대해서는 영화에서 슬쩍 묘사되기도 합니다)

c. 병원에서 흡혈귀(버지니아)가 햇빛에 타죽는 장면은 [미녀 드라큘라](1992)의 한 장면과 같습니다

햇빛에 노출되면 타버리는 흡혈귀


d. 이 영화는 2009년 개봉을 목표로 헐리우드에서 리메이크가 진행중입니다
    (휴~ 걱정일 뿐입니다)

2008년 11월 17일 월요일

티스토리에서 텍스트큐브닷컴으로 이전 완료!

그동안 메인 블로그(BLUEnLIVE's diary++)와 세컨 블로그(Why So Serious?)를 모두 티스토리에서 운영했습니다.

티스토리에서 운영하던 세컨 블로그 Why So Serious?


그러다보니 몇 가지 문제가 발생하더군요.
가장 큰 문제는 티스토리는 멀티 블로그를 운영할 경우 자연스럽지 못하단 것입니다.
즉, 세컨에서 로그인한 뒤 다른 블로그에 글을 올리면 메인의 블로그 주소가 찍힌다는 거죠.
그 외에도 몇 가지 문제가 있어 둘을 분리하고 싶었습니다.

그래서... 이번에 세컨 블로그를 텍스트 큐브 닷컴(이하 텍큐닷컴)으로 이전하기로 했습니다.
텍큐닷컴은 아직 closed-beta 운영중이지만, 조만간 정상화될 것이라 믿고 있습니다.

지금까지 올린 글은 모두 이전했으며, 이전하는 동안 양쪽에 올려주신 댓글도 모두 합쳤습니다.
앞으로는 여기서 열심히 운영하도록 하겠습니다. 홧팅!


2008년 11월 11일 화요일

11월 11일이 무슨 날인지 아시나요?

11월 11일은 흔히 빼빼로 데이로만 알고 계십니다.

초콜렛 장사들이 띄운 발렌타이 데이와 사탕 장사들이 띄운 화이트 데이만으로는 모자란 것 같더군요.
무척 부유하신 과자 회사 사장님이 가난해(?) 보였는지 서민들이 괜히 기념일(?)을 더 만들어 도와도리는 것을 보면 진정한 사랑이 무엇인가를 보여주는 것 같습니다. (ㅠ.ㅠ)

하지만, 11월 11일은 여러모로 뜻깊은 기념일입니다.

1. 농업인의 날


농업인의 날은 우리나라의 공식 기념일입니다.
1996년에 정부에서 공식 기념일로 지정했는데, 11월 11일의 숫자 11(十一)을 합치면 흙 토(土) 두 번이 되기 때문입니다.

안철수연구소에서는 2003년부터 이 날을 가래떡을 먹는 가래떡데이로 자체지정했는데, 이후 농림부에서도 농업인의 날 행사 중 가래떡을 먹는 행사를 함께 하고 있습니다.


2. 지체장애인의 날


장애인의 날(4월 20일)과 별도로 한국 지체장애인협회에서 지체장애인의 날 행사를 열고 있습니다.
21세기의 첫 해인 2001년에 처음 지정되었는데, 11월 11일이 1이 가장 많이 들어가는 날로 지체장애인이 당당하고 힘차게 일어날 수 있기를 바라는 뜻에서 지정된 것입니다.


3. 해군창설 기념일

진수식을 하고 있는 손원일함

해군의 모체라고 할 수 있는 해방병단을 창설한 1954년 11월 11일을 기념하는 날이며 해군에서 해군창설기념일로 기념하고 있습니다.
해방병단을 창설한 고(故) 손원일 제독이 11(十一)을 합치면 선비 사(士)가 되며, 대한민국 해군은 선비 중의 선비가 되어야 된다는 뜻으로 이 날 창설하셨습니다.


4. 제 1차 세계대전 종전일

1918년 종전을 기념하며 촬영된 사진

1918년 11월 11일 제 1차 세계대전이 끝났습니다.
보통 이 날을 Armistice Day라고 기념하고 있으며, 미국에서는 1954년 Veteran's Day로, 영국에서는 1946년 Remembrence Sunday로 각각 개칭해서 기념하고 있습니다.


11월 11일은 과자를 사랑하는 사람에게 주는 것도 좋지만, 좀 더 큰 의미의 사랑을 생각해볼 수 있는 날이 아닐까합니다.

 

2008년 11월 7일 금요일

[혐짤경고] 리만 브라더스로 만들어본 아기

도아님의 블로그김혜수와 강호동을 짬뽕한 아이 생김새는?이란 글이 포스팅되었습니다.

엄마, 아빠의 얼굴을 합성해서 아이의 얼굴을 유추해주는 RoutanBabymaker3000이란 사이트를 소개하는 글이었습니다.

그냥 일반적인 사진 합성보단 약간 엽기적인 짓을 해보는 것이 더 재미있을 것 같더군요.
그래서, 가난한 사람에겐 칼을 꽂을 수 있어도 부자들에게 칼을 꽂을 수 없다고 꽥꽥대는 리만 브라더스(리MB-만soo)를 합성해봤습니다.
(국민 여러분 보이십니까? 국민들의 손으로 직접 뽑은 놈들입니다!!!)

사용자 삽입 이미지

오늘의 요리재료: 리만 브라더스


결과는 의외로 밉살스럽게 생기지 않았더군요.
사이트(및 프로그램)의 신뢰성이 그낙 높아보이지 않습니다.

Create Your OwnMake a Routan Baby

사용자 삽입 이미지

플래쉬가 빨리 안 뜬다면 이 그림을 보시길...



  

[퀀텀 오브 솔러스]: 소설에 다가가려 노력한 007 영화

스포일러가 조금 있는 리뷰입니다.
아직 관람을 하지 않으신 분들은 참고하시기 바랍니다


1. 제목

영화와 주제곡 모두 처음부터 이상한 점이 있는데, 제목의 의미를 알 수 없다는 점입니다.
일단, 퀀텀 오브 솔러스(Quantum of Solace)라는 제목은 조직의 이름이 퀀텀이란 점을 제외하곤 영화에서는 아무런 의미를 보여주지 않습니다.
또한, 주제곡 Another Way To Die라는 제목 역시 이 영화의 주제곡 제목이란 생각이 전혀 들지 않을 정도로 생뚱맞습니다.

굳이 끼워맞춘다면 도미닉 그린이 본드가 생각하지 않는 방법으로 죽었다는 뜻일까 몰라도 말이죠.



2. 건배럴씬


처음부터 당황을 한 것이 [퀀텀 오브 솔러스]의 오프닝에서 [카지노 로얄]과 마찬가지로 건배럴 씬으로 시작하지 않았다는 점입니다.
이 부분은 [카지노 로얄]은 아직 제임스 본드가 00 요원으로서의 자격을 갖추자 마자 즉, 2명을 제거하자마자 건배럴 씬을 보여주어, 건배럴 씬은 007 제임스 본드의 상징이란 의미를 부여한 직후라 다소 모호합니다.

아마도 사적인 복수나 마음의 짐을 덜어내는 등 성격 형성 과정이 완료되고 나서야 진정한 제임스 본드라는 뜻을 품고 있는 것 같습니다.


3. 주제곡


이번 [퀀텀 오브 솔러스]의 주제곡은 역대 007 영화의 주제곡 중에서 뒤에서 순위권이란 생각이 많이 듭니다.
멜로디도 그렇게 몰입감을 느끼게 해주는 것도 아니었지만, 특히, "워어어어~"하는 부분은 "가사 쓰기 귀찮아서" 그렇게 구성했단 생각이 절로 듭니다.

게다가, 클래식한 느낌의 영화의 방향전혀 맞지 않은 느낌이란 점까지 보면 음악이 좋은 평을 받을래야 받을 수 없다는 것은 명확합니다.


4. 악당


이 영화에서 정말 문제는 악당이 누구인지 모르겠단 점입니다.
화이트는 "We have people everywhere"라고 빈정대긴 하지만, 정작 퀀텀의 사람들은 화이트 한 명을 제외하고는 악당다운 뚝심과 끈기라곤 찾아볼 수 없습니다.

내가 좀 깡다구가 있긴 하쥐


어떠한 고문에도 불지 않고 버티려는 모습의 "쫄따구" 화이트와 달리 주적인 도미닉 그린은 그저 본드랑 차 한 번 탔을 뿐인데 술술 불어댑니다.
(뭐, 이 부분 역시 너무 생략해서 어떤 일이 있었는지 알 수 없지만요...)

앞부분엔 마치 그린이 퀀텀의 두목인 듯한 인상을 살짝 풍기려하지만, 다른 사람들에게 제거되는 모습을 보면 그 역시 까불어대는 악당 중 하나란 생각도 듭니다.

결국 화이트는 본드와 마주치지도 않고 지나가는데, 다음편엔 꼭 다시 만나서 끝장을 보면 좋겠습니다.


5. 구성

영화의 구성에서 좋지 않은 평가를 받는 부분이 전체적으로 뭘 말하는지 모르겠다는 점입니다.
즉, 화이트를 족쳐 퀀텀이 뭔지 알아냈는데, 막상 퀀텀과의 관계는 사업 하나를 방해한 것이 전부입니다.

게다가 퀀텀이란 조직의 정체를 관객들에겐 전혀 얘기해주지 않아 오히려 드라마 쪽으론 한쪽이 비어있는 느낌도 줍니다.

그런데, 다른 관점에서 보면 퀀텀을 3부작으로 만들고 이 중 2편이라는 생각도 듭니다.
이는 이미 007 소설에서 등장했지만 영화세계에선 묻혀버린 3부작을 복귀시키려는 것 같습니다.

블로펠드 트릴로지를 이루는 <썬더볼> - <여왕폐하의 007> - <두번산다>의 구조를 보면,
1. 조직의 큰 사업을 막아내며 조직의 정체를 발견
2. 조직을 궤멸수준으로 파괴시키나, 아내가 피살당함
3. 마지막 끄나풀을 찾아내서 피튀기는 싸움을 통해 복수
의 탄탄한 구성을 갖췄습니다.

그런데, [카지노 로얄]과 [퀀텀 오브 솔러스]를 퀀텀 3부작이라는 관점에서 보면
1. 조직의 이름도 전혀 모르고 이용만 실컷 당하다가 마지막에 겨우 살아남
2. 조직의 큰 사업을 막아내며 조직의 정체를 발견
3. 조직을 궤멸수준으로 파괴시킴
의 구성을 위해 만들어진 플롯이 아닐까 합니다.

하지만, 일부 캐릭터나 구성이 낭비된 모습이 보였다는 점은 아무리 생각해도 아쉽습니다.
특히, 영국 수상 보좌관의 비서를 제거했는데, 알고 보니 요원이더라는 내용이나, 사무직인 필즈 요원이 괜히 본드와 숙면을 취한 다음 그린에게 까불다가 기름 뒤집어쓰고 죽는 내용 등은 안 들어감만 못한 장면인 것 같습니다.


6. 액션


관객분들 중에는 [퀀텀 오브 솔러스]의 액션이 지루했다는 평도 있더군요.

하지만, 그렇지는 않다고 봅니다.
댄 브래들리가 촬영한 아날로그 액션은 스피디하고, 초반부 액션들은 숨쉴 틈을 주지 않고 배치되어 몰입감을 최대한 높여줬습니다.

[본 슈프리머시]와 [본 얼티메이텀]의 스턴트를 감독하며 보여준 그의 실력을 유감없이 발휘합니다.
(흔히 최근 007 두 편과 본 시리즈의 액션을 비교하는데, 스턴트 감독이 같은 분입니다. ^^;;;)

하지만, 문제는 전체적으로 드라마와 조화가 잘 되지 못한다는 점입니다.
앞부분에 쉴새 없이 액션을 몰아치다 다시 드라마로 넘어간 뒤에도 가끔씩 액션을 보여주어 긴장감을 늦추지 않게 배치했으면 더 좋지 않았을까 싶습니다.

엔딩 직전에 베니스 액션 씬을 집어넣는 등 끝까지 긴장의 끈을 놓지 못하게 했던 전작 [카지노 로얄]과 비교되게, 불탄 건물에서 탈출하는 본드의 모습을 보여주었습니다.
사실 이 장면은 [뷰투어킬]불난 시청 건물 탈출씬의 오마주인데, 그 장면이 무어 할아버지가 다찌마리를 소화하지 못해 삽입되었다는 점을 생각해보면 후반부에 힘이 빠진 원인 중 하나라고 판단됩니다.


7. 클래식 및 소설의 귀환



전술했던 강력한 악당 트릴로지 외에도 본드의 아이콘인 월터 PPK, 친구의 죽음에 대한 복수 등 이번에도 많은 부분에서 클래식한 모습으로 돌아가기 위한 흔적이 보입니다.
특히, 르네 마티즈는 원작에서의 필릭스 라이터를 대신하여 희생됨으로서 복수에 더욱 민감해지는 제임스 본드의 캐릭터 완성에 일조하리라 봅니다.

또한 영화 속에서 계속 등장하지만, 직책이나 근무지를 도통 알 수 없었던 필릭스 라이터가 적절한 근무지와 직책을 부여받는 것은 핵심 캐릭터의 입체감과 현실감을 키우는데 일조합니다.
(소설에서는 2번째 작품인 <죽느냐 사느냐>에서 상어에게 물어뜯깁니다. ㅡㅡ;;;)

한편으로, 약간이나마 정치적 이슈를 끌어들인 점 역시 소설 속의 제임스 본드와 비슷해지려는 노력입니다.
(걸작 007 소설 <위기일발>은 사실 영국 MI6와 소련 KGB의 피튀기는 한판 승부였습니다. 정치적 중립 따위는 존재하지 않았고 말이죠.)


8. 오마쥬

[퀀텀 오브 솔러스]는 여러 007 영화의 장면을 오마주했는데, [어나더데이]삽질 패러디와는 달리 적절히 품위있는 오마주를 보여줍니다.
뭐, 전술했던 [뷰투어킬]의 오마주는 좀 실망이긴 했지만 말이죠.

대략 [위기일발], [골드핑거], [나를 사랑한 스파이], [문레이커], [뷰투어킬], [리빙데이라이트], [살인면허]의 7편의 흔적을 발견할 수 있었습니다.

[문레이커]의 오페라장 대결, [뷰투어킬]의 화재건물 탈출, [위기일발]의 보트신 오마주 장면들



2008년 11월 3일 월요일

아이들에게 갈치를 발라주다 느낀 소회

You will see my life through your eyes,
As your life is seen by mine.
The son becomes the father,
and, the father becomes the son.

내가 내 눈으로 너의 삶을 보듯이,
너는 네 눈으로 나의 삶을 볼 것이다.
(그리하여) 아들은 아버지가 되고,
아버지는 아들이 된다.

[수퍼맨], [수퍼맨2]: 도너컷, [수퍼맨 리턴즈]



장모님 생신이라 처가에 갔습니다.

갈치 반찬이 나와서 애들을 옆에 앉히고 갈치 몸통을 발라서 먹여주고 지느러미쪽 고기를 먹는데, 문득 어린 시절 기억이 떠올랐습니다.

다섯 살이었던 저는 갈치를 발라주시던 아버지께 이런 질문(?)을 드렸더랍니다.

"아빠. 아빤 왜 옆에 붙은 것만 드세요?"
"애비는 이게 더 맛있다. 허허허"

그러던 제가 어느덧 시간이 흘러 제가 애들에게 갈치를 발라주고 있더군요.
이젠 제가 그런 얘기를 애들에게 할 나이가 된 것 같습니다.

아버지. 사랑합니다!

덧. 워너에서는 [수퍼맨 리턴즈]의 부자관계 설정을 재부팅한다고 합니다.
[수퍼맨], [수퍼맨2]: 도너컷, [수퍼맨 리턴즈]를 보면서 부자관계에 대해 남다른 감동을 느꼈던 저로선 수퍼맨은 [수퍼맨 리턴즈]와 함께 돌아왔지만, 이후 다신 볼 수 없었다고 생각할 것 같습니다.


 

빗자루로 라면을 만드는 농심!

농심 큰사발면 튀김우동을 먹는데... 거의 다 먹은 상태에서 플라스틱 빗자루 가닥이 나오더군요.
그것도 깨끗한 새 빗자루가 아니라 바닥을 한 달 이상 쓸었던 연륜이 느껴지는 빗자루 가닥이 나왔습니다.

아마도 이 빗자루는 라면 만드는 기계 내부를 청소하면서 들어간 것 같습니다.
즉, 농심은 기계 내부를 빗자루로 청소한단 얘기겠죠?

나름 기계를 깨끗하게 청소한답시고 한 것 같은데, 먹거리 자체도 좀 깨끗하게 만들기 바랍니다.

우리집엔 이런 빗자루 안 키움


 

팀블로깅에 대한 기본 개념이 없는 TiStory!

이웃 블로거인 페니웨이™님과 가끔 팀블로깅을 합니다.
전속 팀블로깅은 아니고, 이벤트가 있을 때 하기로 했고, 지금까지 2번 글을 올렸습니다.

괴작열전 - 카지노 로얄(1967) : 페니웨이™, Why So Serious
퀀텀 오브 솔러스 - 소설 vs 영화의 차이점 : 페니웨이™, Why So Serious

전속이 아니기 때문에 글을 올릴 때만 권한을 부여하고, 이후 다시 권한을 차단하는 방식으로 하기로 했습니다.
그런데… 글을 올린 뒤에 권한을 차단하면 비회원으로 변경되는군요.

내가


그래도, 태터데스크(첫화면)엔 흔적이 남았더군요.
여긴 대화명이 제대로 나옵니다.
없애려면 아예 흔적을 없애던지!!!

티스토리에게 버림받은 팀블로거의 마지막 흔적




2008년 11월 2일 일요일

제임스 본드의 생일은 언제일까?

제임스 본드의 생일은 언제일까요?

소설 <두번산다>에서 본드와 타나카의 대화에서 본드가 쥐띠 해에 태어났다는 얘기가 나옵니다.
(음력은 고려하지 말기로 하고) 쥐띠 해는 12로 나누어 떨어지는 해이니 제임스 본드는 1924, 1936, 1948, 1960, 1972년 생 정도임을 알 수 있습니다.

그런데, 존 피어슨이란 작가는 제임스 본드의 가상 전기에서 생일이 1920년 11월 11일생이라고 기록했는데, 1920년은 쥐띠 해가 아니라 원숭이띠 해입니다
(11월 11일은 세계 제 1차대전이 종료일입니다)
문제는 이 작가는 이언 플레밍 생전에 가장 친한 작가였으며 1966년엔 플레밍의 전기를 썼고, 한동안 제임스 본드 소설의 작가로도 활동할 만큼 공신력이 있는 작가란 점입니다.

본드가 1920년생인데, 아내가 1943년생이면 정말로 도둑입니다!!!


이 애매한 얘기는 [카지노 로얄]과 함께 리부팅되었습니다.

007.com의 dossier에서 그의 생일을 1968년 4월 13일로 재설정한 것입니다.

13 April, 1968


사실, 1968년다니엘 크레이그의 생년에서 차용한 것이며, (1968년 3월 2일생)
4월 13일소설 <카지노 로얄>의 초판 출판일자입니다. (1953년 4월 13일 출판)

그럼 쥐띠 해 얘기는요? 물론 다 없어졌습니다. 본드는 1968년생 원숭이 띠입니다.