윈도 GUI 환경에서 동작하는 프로그램이 자기 창을 띄우기 위해 먼저 해야 하는 일은 바로 자기 윈도우의 클래스를 운영체제에다 등록하는 것이다. WNDCLASS 구조체와 RegisterClass함수는 그야말로 기본 중의 기본 필수 과정이다.

WNDCLASS 구조체에서 중요한 멤버는 클래스 이름(lpszClassName), 윈도우 프로시저 주소(lpfnWndProc) 정도다. 나머지 값들은 전부 0 / NULL이어도 클래스 등록이 가능하다.

우리에게 친숙한 에디트 컨트롤, 리스트박스, 콤보박스 등등은 다 고유한 클래스 이름이 존재하기 때문에 사용자 프로그램이 이를 변경하거나 없앨 수 없다. 윈도우 클래스계의 일종의 예약어라 해도 과언이 아니다. 공용 컨트롤은 내장 컨트롤 급의 붙박이는 아니지만 그래도 공용 컨트롤 매니페스트를 사용하는 요즘 프로그램들에서는 사실상 붙박이다.
대화상자, 메뉴, Alt+Tab 전환 창처럼 운영체제가 내부적으로만 사용하는 known 윈도우들도 사실은 다 고유한 클래스 이름을 갖고 있다.

한편, 각각의 윈도우 클래스 명부는 고유한 기억장소를 갖고 custom 데이터를 보관할 수 있다(cbClsExtra). 그러나 이건 거의 필요하지 않으며 쓰이지 않는다. 여러 윈도우 클래스들이 한 윈도우 프로시저를 공유하면서 그 프로시저가 클래스별로 custom 데이터를 가려서 동작하기라도 하지 않는 이상 말이다. 그런 게 아니라 윈도우 클래스별로 완전히 따로 노는 공유 데이터라면 그냥 해당 프로그램이 자체적으로 static/전역 변수의 형태로 갖고 있으면 될 일이다.

차라리 클래스가 아니라 각각의 윈도우들이 custom 데이터를 저장할 공간이라면(cbWndExtra) 이건 그래도 종종 쓰이는 경우가 있다. 그러나 굳이 이게 0이더라도 포인터 하나 정도 집어넣을 공간은 모든 윈도우들이 기본으로 갖고 있기 때문에 HWND로부터 그 창에 대응하는 C++ 객체의 포인터를 저장하는 것 정도는 이런 방식으로 하면 된다.

그 다음으로 외형 관련 부가 정보들은 나중에 클래스 차원이 아닌 윈도우 차원에서 변경 가능한 것들이다.

프로시저의 주소만 있으면 충분할 텐데 굳이 인스턴스 핸들까지 따로 받는 건 16비트 시절의 잔재이긴 하다. 요즘 같으면 윈도우 프로시저 주소가 어느 영역에 있는지만 봐도 이 윈도우 클래스의 소속 모듈은 곧바로 알 수 있으니 굳이 그 핸들을 따로 줄 필요는 없기 때문이다.
하지만 호환성 문제도 있고, 또 외형 리소스(메뉴, 마우스 포인터, 아이콘 등)를 어디서 불러올지 기준으로 삼을 모듈이 필요하기도 하니 인스턴스 핸들을 받는 란이 있는 것이다.

아이콘(hIcon)은 시스템 메뉴와 두꺼운 프레임이 갖춰진 커다란 윈도우를 만들 때에나 필요할 텐데,
여기서 지정한 뒤에도 나중에 실행 중에 WM_SETICON 메시지를 운영체제에다 보내서 변경이 가능하다. 대화상자의 아이콘을 바꿀 때 주로 쓰인다.

text를 바꾸는 것과는 달리 아이콘을 변경하는 건 함수가 전혀 존재하지 않고 메시지만 쓰인다는 게 특징이다.
또한, HICON 자체를 여러 크기의 아이템 컬렉션/패밀리로 설정한 게 아니라 특정 크기의 그림 하나만을 나타내게 설정한 바람에 WNDCLASS에 이어 WNDCLASSEX까지 등장하는 등 API가 다소 지저분해진 건 아쉬운 점이다. 지금은 이분법적인 큰 아이콘/작은 아이콘뿐만이 아니라 다양한 크기의 아이콘까지 등장해 있는데 말이다.

마우스 포인터(hCursor)는 잘 알다시피 WM_SETCURSOR 메시지가 왔을 때 동적으로 변경 가능하다.
기본 배경색(hbrBackground)으로 화면을 지우는 동작도 WM_ERASEBKGND 메시지 때 변경 가능하다.
즉, WNDCLASS에 지정된 것만이 절대적이지는 않다는 뜻이다.

그것도 모자라서 클래스 구조체에 메뉴(lpszMenuName)까지 지정 가능한 것이 굉장히 뜻밖이다.
보통 윈도우를 만들 때 메뉴 정보는 CreateWindowEx 함수에다가 따로 지정해 주기 때문이다. 그렇기 때문에 WNDCLASS 구조체에 굳이 메뉴 핸들이 공급될 필요는 없다.
본인 역시 10여 년간 Windows API로 프로그래밍을 하면서 이 멤버에다가 값을 지정해 준 적은 한 번도 없었다.

자, 그럼 이제 스타일(style)만 남는데, 다음과 같은 것들이 있다. 이 역시 굳이 이 스타일을 안 줘도 동일한 기능을 코드를 통해 얼마든지 재연할 수 있는 게 대부분이고, 오늘날에는 거의 필요하지 않거나 사용이 권장되지 않는 잉여 옵션도 있다.

1. 정말 유의미한 차이가 있음 (유일!): CS_GLOBALCLASS

원래 윈도우 클래스 명칭은 해당 클래스를 등록한 스레드도 아니고 그 등록한 코드가 들어있는 모듈(EXE든 DLL이든)에서만 쓸 수 있다. 그러나 이 옵션이 지정된 채로 등록된 윈도우 클래스는 해당 프로세스 전체에서 사용할 수 있게 된다.
어떤 특수한 윈도우--custom 컨트롤이 대표적인 예--에 대한 코드가 DLL에 들어있고 그 윈도우를 그 DLL을 불러들인 EXE에서 사용하고자 한다면, 그 클래스는 당연히 이 스타일이 지정된 채로 등록되어야 한다.

쉽게 말해 이 윈도우 클래스를 작성하지 않은 다른 EXE/DLL에서 컴포넌트처럼 생성되고 사용되고자 하는 윈도우라면 이 스타일이 반드시 필요하고, 그냥 한 프로그램 모듈 안에서 내부적으로만 사용하고 말 local 윈도우라면 지정하지 않으면 된다.

16비트 시절에는 이 스타일의 여파가 훨씬 더 강력해서 한 EXE가 등록해 놓은 윈도우 클래스를 다른 EXE가 마음대로 사용할 수도 있었다. 인스턴스 핸들로 데이터 세그먼트를 구분하는 게 오늘날로 치면 그냥 응용 프로그램의 주소 공간을 마음대로 넘나드는 거나 마찬가지였기 때문이다. 그러나 오늘날은 그렇게까지는 할 수 없으며, 일반적으로는 DLL에다가 윈도우 프로시저를 구현한 뒤, 그 윈도우를 사용하고자 하는 EXE가 DLL을 매번 불러오고 클래스 등록을 저렇게 해 줘야 한다.

2. 다른 코드를 통해 대체 가능한 동작 방식의 차이

CS_DBLCLKS
좌든 우든 한 마우스 버튼을 충분한 시간 간격 이내에 빠르게 연타했을 때, 둘째 클릭은 WM_?BUTTONDOWN이 아니라 WM_?BUTTONDBLCLK라는 메시지로 달리 알리게 한다. 이것은 실행 시간에 매번 바뀔 만한 동작 방식은 아니니 윈도우의 스타일이 아니라 클래스의 스타일로 존재하는 게 적절하긴 하다.

굳이 이 스타일이 없어도 더블클릭을 인식하는 것을 우리가 직접 구현하는 건 어렵지 않다. 그러나 타이머 체크를 해야 하고 예전 클릭 시점을 저장해 놓는 등 별도의 시간· 공간 오버헤드가 필요하기 때문에 운영체제는 이걸 원하는 윈도우에다가만 더블클릭 메시지를 전해 주고 있다. 더블로 모자라서 트리플 클릭이라도 인식하려면 역시 사용자가 상태 전환 로직을 직접 구현하는 게 필수일 게다.

메뉴의 경우 마우스의 클릭에 따라 열렸다가 닫히는 게 토글되는 물건이다. 더블클릭에 따른 동작 구분이 필요하지는 않지만, 보통은 더블클릭 때는 열렸던 메뉴가 닫히지 않게 만들어져 있다. 지금 당장 XP~7의 운영체제의 시작 메뉴를 눌러 보시기 바란다. 초보자들은 더블클릭을 할 필요가 없는 물건도 불필요하게 더블클릭하는 경향이 있기 때문에 더블클릭은 클릭+클릭으로 인식하지 않고 메뉴를 닫는 동작으로 인식하지 않는다.

물론 이런 정책은 진짜로 시도 때도 없이 짧은 간격의 클릭 연타를 인식해야 하는 게임 같은 데서는 절대로 적용해서는 안 될 것이다. 정반대의 정책을 취해야 한다.

CS_VREDRAW, CS_HREDRAW
일반적으로 창의 크기가 예전보다 커지면 커져서 새로 생긴 오른쪽 내지 아래쪽의 신규 영역에 대해서만 WM_PAINT가 날아온다. 그러나 이 옵션이 적용되면 가로 and/or 세로 크기가 바뀌었을 때 창 전체가 갱신되고 WM_PAINT가 날아온다.

화면에 문자열이 가로 내지 세로 기준으로 중앙 정렬되어 출력된다거나, 화면 폭에 따라 자동 줄바꿈이 적용되어 출력되고 있다면 화면 크기가 바뀌었을 때 화면 전체가 갱신되어야 할 것이다. 동일 배율의 2차원 비트맵을 찍는 경우가 아닌 이상, 화면 전체의 갱신이 필요한 상황은 생각보다 많다.

하지만 그럼에도 불구하고 이 옵션은 생각만치 그렇게 독창적이거나 유용하지 않다. WM_SIZE 메시지가 왔을 때 InvalidateRect를 수동으로 호출하는 것만으로도 동일한 효과를 낼 수 있기 때문이다.

CS_NOCLOSE
바로 얼마 전에 쓴 글에서 다루었듯이, 창에 [X] 버튼과 Alt+F4를 사용할 수 없게 만든다.
그러나 이것은 (1) GetSystemMenu를 이용해서 시스템 메뉴에 있는 '닫기' 명령을 없애거나 disable시키고, (2) WM_CLOSE 메시지가 왔을 때 이를 무시하여 DefWindowProc에다 전달하지 않으면 클래스 스타일 없이도 역시 거의 똑같은 효과를 얻을 수 있다.

3. 외형/성능과 관련된 마이너한 차이

CS_SAVEBITS
창이 생겼을 때 우리 창이 가리고 있는 배경 영역을 저장해 둔다. 그리고 우리 창이 사라지면 아래의 가려졌던 창에다가 WM_PAINT를 보내는 게 아니라 그냥 저장된 놈을 도로 뿌려 준다. 언제나 무조건 그렇게 하라는 뜻이 아니며 어지간한 비디오 메모리가 남아 있고 할 만하다 싶을 때만 그렇게 하라는 권장 사항이다.

이 스타일을 사용하는 윈도우는 크기가 작고 생성된 후에 이동하지 않으며, 잠깐 동안만 존재했다가 곧 없어지는 휘발성 강한 용도인 게 바람직하다. 툴팁, 메뉴 같은 윈도우의 클래스에 이 옵션이 지정돼 있다. 우리 코드의 동작 방식을 바꾸는 스타일이 아니기 때문에 존재감이 적다.

Windows Vista와 7의 Aero에서는 어차피 모든 창들의 내용이 메모리에 따로 저장되어 있고 DWM에 의해 합성되어서 출력되기 때문에 이 스타일의 존재감이 없는 거나 마찬가지다. 큼직한 창이 가려졌다가 다시 나왔는데도 예전 내용이 알아서 자동으로 출력되지 WM_PAINT가 오지 않는다니..! Vista가 출시되었을 때, Windows의 역사상 최초로 벌어지는 광경에 놀란 개발자들이 많았을 것이다.

CS_DROPSHADOW
Windows XP에서 최초로 도입된 이 스타일은 창 주변에 은은한 그림자 효과를 넣는다. Windows 2000에서는 마우스 포인터의 주변에 은은한 그림자를 넣는 효과가 추가되었는데, 동일한 알고리즘이 이제 임의의 창에도 적용된 것이다.
용도면에서 앞의 CS_SAVEBITS와 비슷한 구석이 있는지라, Windows XP부터는 툴팁과 메뉴에 이 스타일이 적용돼 있다.

시스템 메뉴와 뼈대가 갖춰진 일반적인 창에도 적용을 못 하는 건 아니지만, Aero 환경에서는 어차피 자체적으로 창 테두리 주변에 큼직한 그림자 효과가 추가되어 있기 때문에 이 클래스 스타일이 딱히 유효하지 않다.
또한 Aero 없는 모드에서는 그림자가 붙은 커다란 창은, 움직이거나 크기를 조절할 때 화면을 다시 칠하는 부담이 굉장히 커진다.

4. DC의 생성 방식과 관련된 이상한 옵션

Windows에서는 GDI API를 이용하여 화면에다 그림을 그리려면 먼저 device context라고 불리는 DC 핸들을 얻어 와야 하는 게 정석이다. 보통은 WM_PAINT 메시지가 왔을 때 BeginPaint 함수를 이용하여 얻으면 되는데, 다른 상황에서도 GetDC를 호출해서 얻을 수 있긴 하다. 그러나 BeginPaint는 딱 정확하게 칠해야 하는 영역에만 클리핑 영역이 최적화된 DC를 넘겨 주기 때문에 성능을 생각한다면 전자만을 이용하는 게 더 좋다.

윈도우와 이 DC 사이의 대응 관계는 생각보다 미묘하다. 일반적으로 시스템에 존재하는 창의 개수보다는 운영체제가 관리하는 화면용 DC의 개수가 더 적다. 솔직히 어떤 창이든 하드웨어 차원에서는 동일· 단일한 비디오 메모리에다 출력되는 것이니 동시 요청이 아닌 이상 DC가 굳이 많이 있어야 할 필요가 없다. 이 DC는 그때 그때 내부 상태가 초기화되고 클리핑 영역만 바뀐 채 재활용된다.

그런데.. CS_OWNDC가 지정되면 이 스타일이 적용된 클래스의 모든 창별로 별도의 전용 DC가 할당된다. 이는 프로그래밍 패러다임을 크게 바꿔 놓는다.
GetDC를 아무리 여러 번 호출해도, 그리고 BeginPaint를 호출해도 돌아오는 화면용 DC 핸들은 동일하며, 이 DC는 다른 윈도우에서는 쓰이지 않는다.

이 DC는 생명 주기가 자기가 소속된 윈도우와 동일하다. 그렇기 때문에 그림을 그려 준 뒤 GetDC 다음에 ReleaseDC를 하지 않아도 된다. 그리고 한 WM_PAINT 타이밍 때 지정했던 내부 상태가 다음 WM_PAINT때도 고스란히 보존되어 있다. 글자색, current positon, 선택되어 있는 GDI 개체들이 모조리..

통상적으로 해야 하는 초기화나 뒷정리가 필요하지 않으니 일면 편리한 점도 있지만, 이것은 생각보다 그리 큰 장점이 아니다.
그에 반해 윈도우 하나가 생길 때마다 수백 바이트에 달하는 전용 DC가 추가로 생성되는 것은 운영체제의 입장에서는 상당한 부담이었다. 특히나 16비트 시절에는 리소스라고 불리던 GDI 힙의 크기가 겨우 64K밖에 안 됐는데 이건 그야말로 리소스 잡아먹는 하마나 마찬가지였으며 심지어 윈도 9x에서도 상황이 크게 나아지지 않았다.

이 때문에 이 옵션은 존재는 하되 사용이 절대로 권장되지 않는 물건으로 전락했다.
CS_CLASSDC는 CS_OWNDC보다 메모리를 좀 아껴 보자는 발상에서 유래되었는데, 한 전용 DC를 동일 클래스에 소속된 모든 윈도우들이 공유하는 방식이다. 한 윈도우가 글자색을 빨간색으로 바꿔 놓으면, 다음에 그려지는 같은 윈도우는 기본적으로 글자가 빨간색으로 찍힌다. 이것도 기괴한 사고방식이긴 하다.

요건 GDI 자원을 좀 아낄 수 있을지는 모르나 '전용 DC'라는 장점이 사라지는 상태에서 멀티스레드 환경에서는 상당히 위험한 결과를 초래할 가능성이 있기 때문에 32비트 이후에서는 단점만 더욱 부각되었으며, 역시 봉인된 옵션으로 전락했다. 이런 게 있다는 것 정도만 알면 된다.

다음으로 CS_PARENTDC는 위의 두 옵션과는 성격이 약간 다르고 약간 더 실용성이 있다. 자기를 그릴 때 부모 윈도우의 기존 DC를 활용해도 좋다고 알려 준다. 좀 더 구체적으로 말하자면 굳이 클리핑 영역을 자기 윈도우로 맞추지 않아도 된다고 알려 준다.

대화상자에 아기자기한 컨트롤이 굉장히 많이 있는데 그 컨트롤들이 CS_PARENTDC 스타일이 맞춰져 있다면 대화상자의 그리기 속도가 약간이나마 향상될 수 있다. 자신이 클리핑 기능 없이도 알아서 자기 클라이언트 영역을 안 벗어나고 똑똑하게 그림을 그릴 자신이 있다면 이 스타일을 사용하는 게 나쁘지 않으며, 실제로 운영체제의 표준 컨트롤들은 다른 잉여스러운 옵션 말고 이 옵션은 사용한다고 한다.

다만, 이런 꼼수를 허용하는 스타일이 존재하는 경우, layered 윈도우나 drop shadow 같은 특수 효과와는 충돌이 발생할 수 있으니 사용 전에 MSDN 설명을 참고하는 게 좋다. 요즘 같이 메모리와 성능이 풍족한 시대엔 그냥 저런 기괴한 옵션들은 다 잊어버리고 그냥 0으로만 지정해도 무관하다.

5. Windows 1~2.x 시절에나 유효하던 완전 캐잉여: CS_BYTEALIGNCLIENT, CS_BYTEALIGNWINDOW

이것은.. 거의 20년 이상 전부터 전혀 쓸모가 없어진 옛날 잔재이다.
잘 알다시피 옛날에는 컴퓨터 화면이 흑백이던 시절이 있었고 이때는 1바이트가 8비트, 즉 8개의 가로 픽셀을 담당했었다.

그러니 이 스타일은 창의 꼭지점 위치(외곽 모서리 또는 클라이언트 모서리 기준)를 강제로 8 또는 최소한 4의 배수 위치로 맞춰서 그림을 찍는 게 바이트 경계에 딱 걸쳐지는 게 보장되게 하는 역할을 했다.
당연히 256컬러, 혹은 16컬러가 지원된 시점부터 모든 픽셀은 자동으로 이미 바이트 align이 맞춰지기 시작했으며 이 옵션은 전혀 필요가 없어졌다.

또한 Windows 3.0부터는 영문이 가변폭 글꼴로 출력되기 시작한지라 그렇잖아도 글자를 찍을 때 어차피 바이트 align이 무의미해지기도 했다.
지금쯤이면 이 스타일이 갖던 값은 그냥 다른 용도로 재사용해 버려도 되지 않나 싶다. 하지만 extended 스타일까지 존재하는 윈도우와는 달리, 클래스에는 스타일이 그렇게 다양하게 많이 추가될 여지도 별로 없긴 하다.

Windows API를 심층 연구하는 건 재미있다. ^^;;

Posted by 사무엘

2014/02/26 19:27 2014/02/26 19:27
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/935

가장 긴 교통수단

1. 마일 트레인 (mile train)

철도와 관련하여 진정한 미국의 기상을 느껴 보고 싶다면 역시나 이런 걸 직접 봐야 하지 않나 싶다.

사용자 삽입 이미지

사용자 삽입 이미지
길이가 1마일을 넘는다고 해서 마일트레인이라고 불린다만, 어디 1마일 뿐이겠는가? 2~3마일에 달하고 건널목에서 다 지나가는 데 수 분 이상이 걸리는 열차도 있다. 화차만으로 그야말로 만리장성을 쌓을 기세다.

2. 로드 트레인 (road train)

마일 트레인에 비할 바는 못 되겠지만, 땅 넓고 자원 많은 나라들은 도로 위의 트레일러도 열차처럼 운영한다. 일명 로드 트레인이라고 부르는데, 이 분야의 종주국은 미국이 아니라 오스트레일리아인 듯하다.

사용자 삽입 이미지

사용자 삽입 이미지
포스가 정말 장난이 아님을 알 수 있다.
궤도도 없이 차량을 저렇게 길게 이어 놓으면 조향(회전)을 어째 제대로 할 수 있을지가 우려된다. 그리고 감속을 하는 것도 말이다.

도로에서 가장 긴 차량(수십~100여 m)과 레일에서 가장 긴 차량(2~3km)을 한데 비교해 보니 느낌이 새롭다.

Posted by 사무엘

2014/02/24 08:29 2014/02/24 08:29
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/934

영화 <신이 보낸 사람>

난 아시다시피 개인 엔터테인먼트 분야가 철도에게 완전히 점령당해 있다. 그렇기 때문에 다른 연예, 스포츠, 드라마, 영화 같은 건 거의 관심 없으며 안 보고 지낸다.
그 흥행 대박이라는 겨울왕국조차도 안 봤다. 난 솔직히 월트 디즈니 스타일을 싫어하는 사람도 아니고 여유가 아주 많으면 저것도 보기 싶긴 한데도.

그럼에도 불구하고 최근엔 꼭 봐야 하는 영화를 발견했다. 그래서 불금 시간을 쪼개서 야밤에 혼자 차까지 몰고 영화관 갔다.
내가 본 영화는 바로 이거다.

사용자 삽입 이미지

* 이 글에는 영화 스포일러가 포함되어 있다. 영화를 깔끔한 상태에서 편견 없이 직접 감상하고 싶으신 분은 이 글을 읽지 말 것.

- 탈북자로부터 코치를 받았는지, "-했지비", "-하라우" 글로만 봤던 이런 북한 사투리를 실제로 들을 수 있다.
- 김 일성· 김 정일 사진이 벽에 걸린 집 책상 위에 놓인 성경책... 정말 살떨린다.
- 북한 주민의 실상이라 하면 마약도 빠질 수가 없을 텐데, 역시 그것까지 놓치지 않고 화면에 담았다. 훌륭하다.

1. '카타콤'이 고대 로마 제국 시절에만 있었던 게 아니다. 지금 바로 이북 윗동네에 있다. 물론, 나처럼 이미 북한 사정에 대해서 어지간한 거 다 찾아보고 이미 아는 사람에게는 그렇게 완전히 새로운 내용은 아니지만 말이다.
요즘 영화에서 크리스천은 한결같이 광신자, 위선자, 나약한 찌질이로만 묘사되고 그나마 좋게 나오는 건 죄다 천주교 쪽뿐인데, 미화는 바라지도 않고 최소한 중립적으로 묘사된 영화가 있어서 보기에 심리적으로 편했다.

2. 영화에서 지하 교회 신도들이 "나 예수쟁이요"라고 자기 명을 재촉하면서 티내는 방법은 물고기나 십자가 형상 같은 게 아니라 오로지 찬송가 흥얼거림과 성구 암송이다. <주 예수보다 더 귀한 것은 없네>가 얼마나 큰일을 냈는지가 영화 중에 나온다.

남조선에서 자유롭게 교회 다니고 계신 분들은, 앞으로 주일 예배 때 기쁜 마음으로 자기 최고의 성량과 음감을 동원해서 예배당이 떠나갈 정도로 씩씩하게 회중 찬송에 동참하시기 바란다. 이건 설교 만만찮게 예배에서 매우 중요한 절차이며, 저쪽 사람들은 그것조차도 목숨 걸고 하고 있다.

3. (스포일러) 극중에 기적은 없었다.
주인공은 너무 확신에 차서 내 손으로 우리 주민들을 다 탈출시키겠다고 그랬지만.. 때마침 김 정일이 죽으면서 국경의 경계가 매우 강화되고, 뇌물이 안 통하는 냉혈한 군 간부가 부임한다. 주민들의 신뢰와 팀웍도 와해되고 지하교회는 일망타진되어 주민들은 하나씩 잡혀 가고 죽는다. 그리고 주인공도 총살당하고, 마지막에 살아남는 교회 멤버는 어느 꼬마 소녀 한 명뿐이다.

4. 사실, 주인공은 분명 지하 교회에 소속돼 있고 지푸라기 잡는 심정으로 예수님을 믿긴 하지만, 그래도 아내만치 독실하지는 않고 마음 상태가 종종 동요도 하는 일종의 입체적인 인물이다. 주연 배우인 김 인권 씨가 대본을 보고는 “난 저런 주인공을 연기하기엔 너무 신앙이 부족하다”라고 말했다곤 하지만, 주인공이 그렇게까지 초인적인 인물은 아니다.

마약도 하고, 또 모든 게 끝장 난 결말부에서는 “아.. 혹시나 했지만 역시 신은 우리를 돌봐주지 않았다. / 아예 믿지 말자는 것도 아니고, 딱 한 번만 시치미 떼고 예수 부인하면 살 수도 있었는데 왜 내 아내는 저런 고지식한 길을 고집했을까?” 같은 인간적인 심정의 말도 한다.
기독교 신앙보다는 그냥 아내의 죽음에 감명을 받아서 마을 사람들을 전부 어떻게든 탈북시켜야겠다는 인도주의적인 신념이 더 부각되어 그려진다.

5. 설정상 주인공의 출신과 배경이 구체적으로 어떠한지는 잘 모르겠지만, 혼자 저렇게 트럭을 몰래 얻어타고 평양까지 갔다가 돌아오는 건 현실에서는 그리 가능하지 않을 것 같다.
평양 교회에 도움을 받으러 원정 가 봤는데, 거기는 알다시피 북한 정권의 하수인인 어용교회일 뿐임. “우리나라에 종교 박해 같은 건 없다” 대외적으로 이 개드립을 치던 아저씨는 잠시 후 주인공에게 분노의 린치를 당해서 피떡이 된다. 저 사람은 주인공과 원래 아는 사이였는데 뭔 일을 겪으면서 현실과 타협하고 변절한 듯.

6. 교회 동지 중 어떤 남자 하나는 도강하다가 들켜서 군인으로부터 무참한 구타와 성희롱을 당하는데.. 그 뒤 완전히 멘붕하여 미치광이로 변한다. 몰래 숨겨 둔 예수 얼굴 그림에다 눈 모양만 뚫어서 가면을 만들어 쓰고, 집 지붕 위에 올라가서 남들 보는 앞에서 헬렐레 하다가 갑자기 분신 자살한다.
이것은 극적 효과를 내기 위해 탈북자의 증언과도 관계 없이 집어넣은 창작이고 허구인 듯하다.

7. 엔딩 크레딧이 올라가는 중엔 북한에서 찍혔다는 각종 탈북자 심문· 구타 동영상과 북한 지하 교회 녹취 동영상, 육성 녹음이 흘러나온다. 이것도 지금 내가 목숨이 붙어 있는지 내 목을 손으로 만져보게 될 정도로 소름 끼치고 엄청나게 섬뜩하다.

참고용 동영상이다. 2분 40초대 이후부터..
“아버지여! 교회가 다 무너졌습니다. 살얼음 같은 이 땅에 지금까지 얼마나 많은 순교가 발생했는지요! ... 복원하시고 역사하시는 주의 보혜사를 보내 주옵소서” (문장 보정)

북한의 지하 교회는 가장 연약하면서도, 북한의 저 미친 체제에 가장 큰 위협이 되는 악질 반동분자들의 모임이다! (아래 그림 중 하나는 조선 혁명 박물관과 만수대 언덕 근처에 있는 어마어마한 높이의 김씨 부자 동상이고, 다른 하나는 금수산 기념 궁전 내부의 은은한 배경으로 새겨져 있는 부자 석상임.)

사용자 삽입 이미지사용자 삽입 이미지
8. (쓴소리) 끝으로, 내가 이런 자리에서 또 험악한 말은 가능한 한 하고 싶지 않다만...
여기에까지 신천지 갖다붙이는 애들은 도대체 정체가 뭔지 궁금하다. 지난번 대선 시즌 때 새누리당이 신천지하고 커넥션 있다고 괴담 퍼뜨린 놈들하고 혹시 같은 배후 아닌가?

그래, 만에 하나 신천지와 커넥션이 있다고 치자. 그래도 신천지가 과연 종북 빨갱이보다 더 사악하고 해로운 인간들일까 싶다. 신천지는 교회에나 해를 끼치지만 쟤들은 아예 나라 전체를 무너뜨리고 좀먹는 놈들인데. ㅡ,.ㅡ;;

Posted by 사무엘

2014/02/21 08:32 2014/02/21 08:32
, , , , , ,
Response
No Trackback , 3 Comments
RSS :
http://moogi.new21.org/tc/rss/response/933

우리나라가 국민의 외국 여행이 완전히 자유화된 것은 지금으로부터 25년쯤 전인 1989년 1월 1일부터다.
그 전에, 특히 1980년대 이전에는 대한민국 국민은 단순 관광 목적으로는 아예 여권을 만들 수 없었다.

대학생의 어학연수나 배낭 여행? 그런 거 없었다.
신혼여행으로 하와이나 몰디브? 푸켓? 그런 거 없었다. 단순히 돈이 없어서 밖으로 못 뜨는 게 아니었다.
지금으로서는 믿을 수 없고 상상도 못 할 일이다.

옛날에는 외교관의 관용 여권 내지 무역 회사 간부의 상용 여권 정도만이 있었다. 그런 범주에 해당되지 않는 일반인이 합법적으로 외국으로 나가려면 유학이나 해외 취업 같은 정말 특별한 사유가 있어야만 했다.
그때는 여권이 있다는 것만으로도 완전 엘리트 똘똘이 내지 심지어 정부와 커넥션이 있다는 보증처럼 여겨질 정도였다.

그러다가 1983년에는 50세 이상 중장년층만 그 당시 물가로 100~200만 원이라는 어마어마한 액수의 예치금을 낸 뒤에야 관광 해외 여행이 허가되었다. 그때는 미국 비자 받기도 지금보다 훨씬 더 힘들었을 테고 물가 대비 비행기 운임도 더욱 비쌌을 테니 해외여행은 가히 세상 살 만치 다 살고 아주 풍족한 노후를 보내고 있는 어르신들의 전유물이나 마찬가지였다.
(아무나 국제선 비행기를 탈 수 없던 시절에 대한 항공 007편, 902편, 858편 사고로 목숨을 잃은 사람들은 참 억울하긴 했을 것 같다)

그 연령이 1987년경에 40대를 거쳐 30대까지로 낮아진 뒤, 서울 올림픽까지 끝난 1989년부터 장벽이 완전히 폐지되었다. 이때는 우리나라가 소련과 수교하고 차우세스쿠 정권이 무너지고 독일이 통일하는 등 국제적으로도 격변기이긴 했다. 아 참, 대한 항공에 이어 아시아나 항공이 취항한 것도 딱 이 시기이고.

그런데 생각해 보자.
하다못해 그 전의 일제 강점기 때에도 조선인들은 '황국 신민' 자격으로 일본은 물론이고 중국, 러시아, 대만까지 별다른 제약 없이 드나들 수 있었으며 일부 용자는 미국도 갔다 왔다.

그와 대조적으로 대한민국은 자유를 표방하면서도 왜 그토록 오랫동안 국민의 해외 여행을 통제할 수밖에 없었을까?
나라에서 자국민의 외국 방문을 너무 엄하게 통제하는 게 마음에 안 들어서 외국으로 유학 갔다가 귀국 안 하고 거기서 정착해 버린 고학력자 엘리트들도 있을 정도였다.
그러나 그것은 다음과 같은 피치 못할 사정 때문이 아니었나 싶다.

1. 냉전으로 인한 불온사상 통제

옛날에는 냉전 때문에 국제 정세가 지금보다 매우 험악했다. 그 시절에 동북아시아에 공산화가 되지 않은 나라는 별로 없었다는 걸 명심하시라. 북한, 중국, 소련 같은 사상적으로 위험한 나라와 방문 금지 국가가 이웃에 즐비했다. 국민들을 호락호락 외국으로 보내 줬다간, 누가 밖에서 공산주의 물 몰래 먹고 와서 뻘짓을 할지 어떻게 아나?

사용자 삽입 이미지
(한반도의 공산화를 막은 초대 대통령을 칭송하는 사람들이 주로 제시하는 그림이긴 한데..)

그래서 1980년대에는 여권을 만들려면 예치금을 내는 것뿐만 아니라 나라에서 시키는 반공 교육도 잔뜩 받아야 했다. 거액의 예치금을 낼 수 있을 정도로 경제적으로 부유하고 안정된 사회 기반이 있으며, 나이도 충분히 먹어서 알 거 다 알고 용공사상에 낚일 우려가 없는 사람에게만 여권 발행을 허락했는데도... 그걸로도 안심이 안 돼서 반공 교육을 시켰던 것이다.

하긴, 일제 강점기 때에 한반도에 공산주의 사상이 전래되었던 것도 비교적 자유로웠던 국제 왕래 덕분이니 저러는 사정을 이해는 한다.

2. 여행을 빌미로 한 원정출산 내지 병역기피 방지

미국으로 날아가서 자기 배 속의 자식 새끼를 미국 시민으로 만들고 군대에서 빼는 약삭빠른 부유층 집안 얘기를 들으면 누구라도 열받지 않겠는가?

더구나 주민등록 전산 시스템도 없고 정부의 행정력이 지금보다 빈약하던 시절에 부유층 자제가 저런 꼼수를 써서 외국에서 잠적해 버리면... 징병제를 하는 나라에서 병역기피자를 잡아낼 길이 없었다. 부자들에 대한 서민들의 반감과 증오심은 더욱 커질 것이고.
게다가 옛날엔 지금보다 우리나라의 군사 안보가 더욱 위태로웠었다.

3. 과소비 + 외화유출 방지

1990년대 초까지만 해도 나라 분위기가 어땠던가? 외화 벌이에 목숨 걸고 완전 국산품 애용 + 양담배 추방 이러던 시절이었다. WTO(세계 무역 기구) 가입, 세계화, 개방 같은 풍조 따위는 없었다. 그러니 단순 관광 목적 해외 여행은 사치를 넘어 죄악· 금기시되는 수준이 아니었을까.
하다못해 1970년대 박 정희 시절엔 기술적으로는 이미 다 가능해졌는데도 빈부 계층간에 위화감이 조성된다는 이유로 텔레비전조차도 컬러를 도입하지 않고 흑백 시스템을 일부러 유지하고 있었다. 이런 맥락에서 외국 여행도 통제 대상이었을 것이다.

이런 여러 이유가 있으니, 과거에 있었던 이 나라의 외국 여행 통제에 대해서도 무슨 군사 정권의 산물이네 어쩌네 하면서 부정적인 면만 볼 필요는 없을 것 같다.

1970년대에 20대 나이를 보낸 본인의 부모님께 그 시절의 분위기에 대해 여쭤 봤다. 사실 그 시절엔 대다수 서민들이 지금보다 경제적으로 훨씬 더 궁핍했고, 먹고 사느라 바쁘지 해외 여행 따위는 어차피 꿈에도 생각을 전혀 안 하고 있었다고 한다. 신혼여행도 당연히 강원도나 부산 정도에, 돈 좀 보태면 제주도인 게 당연시되었고 말이다. 그러니, 나라에서 해외 여행을 막든 안 막든 그딴 거 관심 없고, 어차피 그건 나랑은 상관 없는 일이니 딱히 제약이나 억압이라고 받아들이지도 않았다는 것이다.

물론 1989년에 봉인이 풀리자마자 중산층 이상 서민들은 휴가철에 앞다퉈 해외로 나갔다. 각종 여행사 산업이 흥왕하기 시작했다. 1988년까지 흑자이던 관광 수지가 곧바로 적자로 떨어졌다. 그리고 해외 관광을 처음 하는 사람들 중에 일부 몰지각한 부류들이 벌이는 '어글리 코리안' 추태도 1990년대부터 본격적으로 부각되기 시작했다. 그들에겐 국제 매너라는 개념 자체가 지금까지 없었을 테니.. 쩝~

요즘 경제가 어렵고 서민들 살기가 힘들어 죽겠다고 징징대는 말이 많다. 하지만 휴가철만 되면 공항은 외국 여행 가려는 사람들로 넘쳐나고 성수기에 유명 관광지로 가는 비행기 표는 없어서 못 구한다. 솔직히 우리나라 정도면 서민들이 평균적으로는 정말 잘 살고 세계 상위급의 생활을 영위하고 있는 것이다. 특히 옛날과 비교했을 때는 더욱 말이다.

우리 이전 세대가 마음대로 해외 여행도 못 가고 꾹 참고 일하여 국력을 일으키고 국위를 세계에 선양한 덕분에 다음 세대들은 마음껏 지구촌을 누비는 혜택을 누리고 있다. 이 점을 우리는 잊지 말아야겠다. 대한민국 여권 정도면, 극소수 최상위 선진국을 제외하면 무비자로도 못 가는 나라가 없지 않던가.

“밤이 피는 김포 공항 비가 내리고 시간은 자꾸 가는데..”라고 바니걸스의 <김포 공항>이라는 가요가 있다. 이건 해외 여행 자유화하고는 아무 상관이 없는 1977년에 발표된 곡이다. 그때는 국제선은 정말 소수의 선택받은 사람들만 탈 수 있었을 테고 지금보다 국내 도로 인프라가 열악했을 테니, 오히려 국내선의 운영 비중이 더 높지 않았나 싶다.

Posted by 사무엘

2014/02/18 08:31 2014/02/18 08:31
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/932

1.
아래아한글의 역대 버전 중, 96과 97은 실행되면서 스플래시 화면이 나올 때 짤막한 효과음(음악 멜로디)이 나오던 전무후무한 버전이었다.
96은 경쾌한 사과나무.wav (도~~ 미파솔..로 시작하는)이었고 97은 그것 말고도 여러 종류의 음향이 더 추가되었다. 물론 워디안 이후 후대부터는 그런 것 없고. 이런 것도 다 일시적인 유행이었다.

오늘날은 아예 Windows조차도 8부터는 로그인 로그아웃 소리가 없어졌다.
먼 옛날 3.x 시절에 사운드 카드가 지원된 이래로, 시작 효과음은 그 유명한 tada.wav부터 시작해 뭐가 들어가도 들어갔는데.. 완전히 없어진 건 8이 처음이다.

응용 프로그램을 실행하는 게 옛날만치 그렇게 막 유세 떨 일이 아니게 되어서 그런 것 같다.
설치 프로그램이 원래 전체 화면을 차지하는 형태이다가 조그마한 마법사 대화상자로 바뀐 것도 비슷한 맥락일 것이고 말이다.

2.
지금이야 MS Office 제품들이 리본 UI를 사용하여 인터페이스가 여타 프로그램과는 완전히 다른 형태로 바뀌었지만..
먼 옛날, Office 95 시절이 문득 생각난다.
Windows 95의 출시에 맞춰서 완전히 32비트로 포팅된 첫 버전이었으며, 동시에 Office가 운영체제의 표준 메뉴 인터페이스를 사용하던 마지막 버전이었다.
다만, 약간의 애드립이 생각지 못한 곳에 있었는데.. 아래 스크린샷에서 프로그램 상단의 타이틀/캡션 바 영역을 보시라.

사용자 삽입 이미지

Office 95 프로그램들은 처음이자 마지막으로 캡션 바를 자체적으로 그렸다.
그래서 Microsoft는 그냥 일반 폰트가 아니라 그 당시 쓰이던 MS 로고타입 형태 그대로 그려졌으며, 검은색에서 짙은 군청으로 바뀌는 그러데이션이 적용되어 있었다.
잘 알다시피, 캡션 바에 그러데이션이 추가된 것은 윈도 98부터이지 95엔 아직 그런 게 없었다. 응용 프로그램이 WM_NCPAINT를 처리하여 직접 그렸던 것이다.

정말 일시적인 유행이었지만 그 시절에 외국 프로그램 중엔 캡션 바를 이 스타일을 따라 그렸던 프로그램도 소수 있었다.

3.
사실 Windows는 GUI 외형이 Mac OS에 비해 매우 단순한 편이었고, 그 대신 색상을 다양한 스타일로 지정할 수 있었다.
그러던 것이 XP 이후부터는 큰 변화가 생겼다. Luna 테마는 파랑-은색-황록이라는 세 색상표만 지원했고, Vista부터는 Aero 창틀의 색깔만 사용자 지정이 될 뿐 나머지 색상은 고정 불변이 됐다. 예전의 재래식 외형은 '고전 테마'라는 legacy로 전락했다.

시스템 색상을 customize할 일이 없어졌다. GetSysColor 함수는 원래 수십 가지의 색상 요소들을 제공하지만 응용 프로그램은 사실상 COLOR_WINDOW(TEXT), COLOR_HILIGHT(TEXT), COLOR_BTNFACE 같은 것밖에 사용할 일이 없어졌다. 그리고 사실은, 선택된 아이템을 표시할 때도 COLOR_HILIGHT나 반전(InvertRect)이 아니라 엷은 파랑 효과를 쓰는 게 유행이 됐다.

옛날에 Microsoft Plus! 같은 확장팩이 제공했던 '테마'들은 색상, 마우스 포인터, 효과음을 한데 모은 세트였지만.. 지금은 Windows도 맥 OS처럼 어찌 보면 사용자 선택의 폭을 좁히고 있다. 지금의 외형 자체가 곧 Windows의 정체성과 같다는 점을 더욱 내세우려는 것 같다. 색상표는 이제 사실상 시각 장애자 내지 전력 절약용으로나 의미가 있는 '고대비'밖에 안 남았다.

4.
Windows는 파일/디렉터리 목록을 이름 순으로 정렬해서 표시하더라도 디렉터리(폴더)와 파일은 따로 분류해서 보여주는 반면, Mac OS는 이들을 다 한데 섞어서 보여준다. 디렉터리도 특수한 형태의 파일로 볼 것이냐, 아니면 아무래도 파일과는 개념적으로 다른 존재로 보느냐의 차이 같다.
또한 마우스 휠을 인식하는 대상도 Windows는 키보드 포커스를 받고 있는 창이지만, Mac은 마우스 포인터가 놓여 있는 창이다.

참, 맥OS는 메뉴나 대화상자에 액셀러레이터 키가 전혀 없는 게 굉장히 뜻밖이다.

5.
유튜브나 스마트폰의 동영상 재생 앱 등... 요즘은 이게 유행인지 모르겠지만
대부분의 멀티미디어 재생 컴포넌트들은 Pause(||) 버튼만 있지, 완전 정지 Stop(■) 버튼이 없다.

파일을 열었으면 나중에 반드시 닫아야 한다는 프로그래머스러운 사고방식에 사로잡혀 있는 본인 같은 사람에겐 그런 디자인이 심리적으로 좀 불안하게 느껴지기까지 한다. 정말 Stop이 없어도 될까? 굳이 프로그래머가 아니더라도 옛날 카세트 및 비디오 테이프 재생기 역시 기계적인 특성 때문에 Pause와 Stop은 성격이 상당히 다르기도 했고 말이다.

하지만 리소스 제약 같은 걸 생각하지 말고, 사용자의 입장에서 오로지 틀고 싶을 때 틀고 끄고 싶을 때 끄는 것만 생각하면, 원론적으로야 둘을 굳이 구분할 필요가 없긴 해 보인다.

6.
top-to-bottom과 bottom-to-top이 헷갈릴 때가 종종 있다.
당장 좌표계만 해도 수학에서는 아래에서 위가 y축의 양의 방향이지만.. 컴퓨터 화면에서는 위에서 아래가 y축의 양의 방향이다.

Windows에는 spin, 혹은 up-down이라고 불리는 컨트롤이 있다.
얘는 언제나 위에 있는 ▲ 버튼 혹은 위(↑) 화살표 키를 눌렀을 때 숫자를 증가시키고, 그 반대의 조작을 하면 숫자를 감소시킨다.
안타깝게도 이 동작을 정반대로 바꾸는 방법은 없는 듯하다. 컨트롤의 동작을 교묘하게 서브클래싱하지 않는 이상 말이다.

저 컨트롤은 <날개셋> 한글 입력기의 제어판에서 입력 항목의 배열 순서를 바꾸는 용도로도 쓰이는데..
입력 항목들은 위에서 아래로 오름차순으로 배열되어 있다.
그래서 ↑가 아니라 ↓를 눌렀을 때 숫자가 증가하고 아래로 가게 하고 싶으나 그렇게는 못 하고 있다.
이건 솔직히 사용자를 굉장히 헷갈리게 만들 수도 있는 면모이다.

사용자 삽입 이미지

이 외에도, 노트북의 터치패드를 손가락으로 상하 드래그를 했는데, 위에서 아래로 그었을 때 화면을 위에서 아래로 스크롤시킬지, 반대로 아래에서 위로 스크롤시킬지도 보통은 옵션으로 존재한다.
본인이 선호하는 건 위에서 아래로 그었을 때 화면은 아래에서 위로, 즉, 아래 페이지의 내용을 표시하는 것이다. ↓ 키를 눌렀을 때와 같다. 손가락은 전체 내용에 대한 화면(view)의 상대적인 위치와 같은 것이다.

그러나 손가락의 위치를 지금 표시되어 있는 텍스트의 상대적인 위치와 같은 것으로 본다면.. 소프트웨어의 동작은 저것과는 반대가 되어야 직관적일 것이다. 결국 이것은 사람마다 취향이 다른 답이 없는 문제이다.

Posted by 사무엘

2014/02/15 08:26 2014/02/15 08:26
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/931

설 연휴 고향 방문 후기

지난 설 명절 땐 고향을 방문하여 주변에서 여러 의미 있는 일들을 치렀다.

1. 변 정용 교수님 만남

고향집에서 가장 가까운 대학교에 이런 교수님이 계신 건 예전부터 알고 있었는데.. 작년 가을쯤에 드디어 개인적으로 연락이 됐고, 개인적인 만남까지 성사되었다. 오오~~!

그분도 자기와 관심분야가 가까운 젊은이가 이렇게 가까운 곳에 살고 있다니 굉장히 반가워하셨고.
짤막하게나마 그분의 한글과 훈민정음 견해, 북한의 학자들과 교류하느라 평양 시내와 금강산 실물을 진작부터 몇 번이나 구경했던 이야기, 각종 학계와 업계 사정 이야기 등등을 들었다. 국가보안법을 어기면서 몰래 갔다 온 게 아니요, 달러 엄청 뜯기면서 단순 관광객으로 갔다 온 것도 아니니 부럽다.

난 내가 14년째 만들고 있는 프로그램 하나로 이 바닥에서는 이름이 언급되지 않을 수 없는 수준의 업적을 남겼고, 확실히 전문가로 인정받고 있는 걸 알 수 있었다.

“석사도 아니고 박사 정도 되면, 뭘로 학위논문을 썼는지가 학계· 업계에서 어딜 가나... 너의 얼굴이자 자존심이자 프로필과 스펙으로서 평생 따라다닐 것이다. 그러니 그게 평생 밥줄 수준인 연구 주제가 될 수 있어야 된다”라고 충고를 하시더라. 난 물론 그걸 생각하고 있다고 말씀드렸다.

아무튼, 이쪽으로 기를 충전(?)하고 돌아오니.. 난 코레일 공채 준비하지 않아도 원래 본업으로 먹고 살 수도 있겠다는 생각이 들어서 좋았다. ^^

내가 나 자신에 대해 개인적으로 아쉬운 걸 굳이 하나 짚자면.. 남들처럼 20대가 가기 전에 박사 학위를 후딱 받지 못하고, 인제 입문해서 뒤늦게 시작했다는 것이다. 하지만 난 그 대신 그 전에 저런 걸 이뤄 놨다.
그리고, 남들은 자기가 좋아하는 것, 하고 싶은 걸 꾹~ 참고 억제하고 노력해서 목표를 성취한 것이며, 특히 이공계는 비록 인문계보다야 졸업이 이르고 취업도 더 잘 되겠지만 그 대신 군기 센 폐쇄적인 집단 안에 틀어박혀서 고생도 훨씬 더 한다.

그 반면 나는 덕업일치 형태로 전혀 힘든 것 없이 완전 널널하게 목표를 성취한 거다. 그런데도 성취 시기가 서로 똑같기를 바라는 거야말로 도둑놈 심보가 아닐까 한다.

2. 시내 간이역 답사

차 끌고 나가서 국도 7호선을 따라 동해남부선 동방, 불국사, 죽동 역을, 그리고 국도 4호선 따라 중앙선 모량, 건천 역을, 끝으로 국도 20호선과 지방도 68호선 따라 동해남부선 나원 역을 답사하여 사진을 찍고 무사히 귀환했다.
늘 이용하는 경주, 서경주, 신경주 말고 경주에 있는 다른 마이너 역들을 거의 다 답사했다. 자동차는 이런 훈훈한 일을 하는 데 쓰라고 있는 거다.

이 중 영업을 하고 여객열차가 정차까지 하는 역은 불국사와 건천뿐이고
직원은 있지만 여객 취급을 안 하는 역은 나원.
건물만 있고 주변이 폐쇄된 역은 동방, 모량.
죽동은 그냥 임시승강장만 있고 사실상 폐역 상태다. 주변에 울산-포항 고속도로(고속국도 65호선)가 건설되고 있었다.

사용자 삽입 이미지사용자 삽입 이미지
사용자 삽입 이미지사용자 삽입 이미지
사용자 삽입 이미지사용자 삽입 이미지

간이역에 도착할 때마다 뭔가.. 경건해지고 내 마음의 고향, 종교적인 성지를 방문하는 듯한 느낌이다.
일부 간이역은 이미 코레일이 매각하여 민간 상업용 건물로 전환된 경우가 있다. 동해남부선 모화 역이 대표적인 예인데..
이건 유럽에 크리스천들이 갈수록 감소해서 교회 예배당 건물이 나이트클럽이나 무슬림 예배당으로 바뀌는 것과 같은 차원의 비극이다.

아아 철도여! 이름만 들어도 가슴이 설레는 교통수단이다.

3. 1992년 세계 자동차 연감

초딩 시절 나의 자동차 수련의 잔재를 고향집에서 모처럼 발견했다.
1992년도 세계 자동차 연감. 어머니께서 20년 전 물가로 무려 39000원이나 하는 비싼 물건을 나를 위해 사 주셨다!

사용자 삽입 이미지
그도 그럴 것이 수백 페이지 분량에 달하는 자동차 화보가 올컬러로 고급 코팅지에 인쇄돼 있어서.. 비싼 게 수긍이 간다.

견출명조 + 헤드라인 서체는 정말 1990년대 광고 전단지의 클리셰다. 응4, 응7 같은 레트로 영상 매체를 만드는 분이라면 고증에 참고할 필요가 있다.
그리고 저 때는 신명 시스템 서체의 리즈 시절이기도 했다. 저 책도 페이지 번호는 SM중고딕, 본문은 SM신명조더라.
당장 저 표지의 '1992'는 악보의 번호에 즐겨 쓰이던 Bodoni라는 외국 서체이고.

쏘나타 2, 뉴 엑셀, 엘란트라, 에스페로 같은 추억의 자동차를 다시 만나 볼 수 있다. 대우는 물론이고 아시아 자동차(RV 록스타)까지 나와 있다.
어렸을 때 나는 일본 미쓰비시의 데보네어 V가 우리나라 그랜저를 베낀 거라고 아주 애국심 충만하게 생각했었다. -_-;;;

사용자 삽입 이미지사용자 삽입 이미지

부록에 우리나라 자동차 연표가 나와 있어서 이건 매 페이지를 폰 카메라로 찍었다. 철도사가 일부 실려 있기도 해서 더욱 귀중한 자료다.

사용자 삽입 이미지

4. 김 문수 목사님 만남

이분은 PC 통신 프로그래밍 동호회를 통해 거의 1990년대 중반(나의 중고딩 시절)부터 알긴 했는데, 그 뒤 소식이 끊어졌다가 먼 훗날 킹 제임스 성경 진영에서 극적으로 다시 만난 분이다.
목사가 된 뒤엔 사랑 침례 교회에 잠시 계시다가 포항을 거쳐 부산 제일 성서 침례 교회에서 자리를 잡으셨다. 내 고향에서야 1시간 남짓한 거리이니 한번 찾아뵙고 왔다. 목사님 부부도 날 아주 좋아하면서 반갑게 맞이해 주셨다.

교회가 역사가 길고 자체적인 부지와 예배당--좀 낡긴 했지만--을 갖추고 있다 보니, 건물 임대료 지출이 없는 것은 재정에 굉장한 도움이 될 것 같았다. (한국 교회가 괜히 '성전 건축'을 강조한 게 아닌 듯. ㅎㅎ)
영남의 대도시에 흠정역을 쓰는 지역 교회가 생긴 것을 기쁘게 생각한다. 부산 대학교를 포함해 금정산 기슭의 각종 학교들하고도 가까이 있는데 학생들이 많이 왔으면 좋겠다.

사랑 침례 교회와의 관계는 어찌 된 건지 궁금해하시는 분이 계실지 모르니 짤막하게만 언급하자면, 역시 좁은 바닥에 태양이 둘일 수는 없고 목회 철학과 사역 방식, 가치관의 차이 때문에 서로 독립한 것에 가깝다. 이분 역시 사랑 침례 교회에서도 담임목사직을 즉시 완전히 승계하는 게 아닌 이상, 애초에 거기서 오래 계실 걸 생각하지도 않으셨다고 하고.

큰 교회에서 재직하는 부목사들은 어김없이 가능한 한 독립과 개척을 생각하고 있다는 걸 실감했다. 다른 업종이 아니고 교육자이니 어지간히 열악해도 자기만의 살림을 차리고 싶어하는구나. 의사가 개인 병원 차리냐 그냥 페이닥터로 지내느냐, 변호사가 개인 사무실을 차리냐 아니면 대형 로펌에 취직해서 월급만 받고 사느냐를 고민하는 그런 차원과는 확실히 다르다.

이동 시간까지 포함하면 거의 4시간 가까이 얘기를 나눴지만 그래도 시간이 부족했다. 위치가 부산 북부이니 갈 때는 응당 노포동 버스 터미널을 이용했지만, 돌아올 때는 동래 역에서 동해남부선 열차를 이용했다.
서울은 시내에 있던 단선 철도가 전부 복선 전철로 바뀌거나 아니면 폐선되는 등 확실하게 정리가 되었지만, 부산은 시내를 깊숙히 파고드는 단선 비전철과 간이역이 있으니 아주 인상적이었다.

Posted by 사무엘

2014/02/12 08:23 2014/02/12 08:23
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/930

자, 오늘은 아주 간단한 Windows API 프로그래밍 퀴즈를 하나 내겠다.
다음과 같은 창을 만들려면 어떻게 해야 할까? (닫기 X 버튼이 사용 불가)

사용자 삽입 이미지

닫기 버튼 말고 최소화 및 최대화 버튼이야 윈도우의 스타일이라는 형태로 지정 가능하다.
WS_MINIMIZE/WS_MAXIMIZE와 WS_MINIMIZEBOX/WS_MAXIMIZEBOX가 있는데, BOX가 붙은 비트는 이 창에 해당 버튼과 기능을 제공하라는 뜻이다. 그리고 BOX가 없는 비트는 이 창이 현재 실제로 최소화됐거나 최대화돼 있음을 나타낸다.

즉, 프로그램이 지정하는 속성 정보와, 사용자가 변경하는 상태 정보가 비트값만 달리하여 동일 스타일에 한데 담겨 있다. 이건 개인적으로는 좀 이상한 설계라고 생각한다. 뭐 그건 그렇고...

그런데 닫기 버튼은 이런 스타일의 형태로 존재하지 않는다.
사실, UI 디자인 상으로도 응용 프로그램은 사용자에게 뭔가 강압적인 요소를 가능한 한 만들지 않아야 하며, 모든 창은 사용자가 언제라도 닫을 수 있어야 한다. [X] 버튼이 없는 창을 접할 일은 극히 드물다. 이는 오늘날처럼 언제라도 task switch가 가능한 선점형 멀티태스킹 환경에서는 더욱 그러하다.

창에 시스템 메뉴 자체를 완전히 없애서 [X]버튼을 없애는 것 말고 저렇게 [X] 버튼을 disable만 시키는 간단한 방법은 시스템 메뉴에서 SC_CLOSE를 없애거나 disable시키는 것이다. 창의 WM_CREATE 메시지에서 이렇게 해 주면 된다.

HMENU h = ::GetSystemMenu(hWnd, FALSE);
::RemoveMenu(h, SC_CLOSE, MF_BYCOMMAND);

요렇게 해 주면 캡션에 달린 [X]버튼도 같이 영향을 받게 된다. [X]버튼뿐만 아니라 시스템 메뉴를 더블클릭해도 창이 닫히지 않는다.

그런데, 외형상 닫기 버튼을 없애는 것은 마우스를 통한 닫기 동작을 차단해 주는 반면, 키보드 Alt+F4를 차단하지는 못한다.
물론, 이런 메시지가 왔을 때 닫는 반응을 안 하도록 WM_CLOSE 메시지나 IDCANCEL을 차단하는 식으로 별도의 처리를 할 수도 있지만, 운영체제 차원에서 창을 닫으려는 시도를 원천차단하는 방법은 따로 있다.

이것은 윈도우의 스타일에 있는 게 아니라, 윈도우 클래스의 스타일에 있다.
바로 CS_NOCLOSE 되시겠다.
아무 창에나 쉽게 쓰이는 속성이 아니라고 판단되었는지 윈도우의 스타일이 아니라 클래스의 스타일로 분류되었다. 뭐, 역사적으로는 [X] 버튼 자체가 윈도 95/NT에서 처음 등장한 것이기 때문에 최소화/최대화 버튼하고는 API가 들어갈 위치가 다르기도 했고 말이다.

윈도우 클래스를 등록할 때 저 스타일을 준 윈도우는 윈도우 프로시저에서 WM_CREATE 때 시스템 메뉴 조작 같은 걸 하지 않아도 시스템 메뉴에 '닫기' 명령이 등재되지 않으며, [X] 버튼이 자동으로 흐리게 표시된다. 그리고 Alt+F4를 눌러도 자동으로 닫히지 않는다.
응용 프로그램이 직접 제공하는 '종료' 명령으로 WM_CLOSE 메시지를 날려 줘야만 닫을 수 있다. 아니면 프로세스를 강제로 죽이든가.

MDI 차일드 윈도우도 이런 스타일이 지정된 클래스에 소속된 놈으로 지정할 수 있다. 그렇기 때문에 MDI 창들 중에도 절대로 닫히지 않고 언제나 떠 있어야 하는 고정 붙박이 윈도우는 요렇게 따로 배치하는 게 가능하다.

화면을 다 차지한 채 Z-순서가 바뀌지도 않고(WS_EX_TOPMOST) 닫히지도 않는 창이 떠 있다면, 거기에다 키보드/마우스/메시지 훅만 추가해서 다른 프로그램으로 작업 전환도 되지 않게 해서 포커스를 특정 프로그램이 사실상 독점할 수도 있다. 특정 프로그램만 뜬 채로 통제를 벗어나지 않아야 하는 공공장소의 특수 목적 PC에서 돌아가는 프로그램은 이런 기능을 활용하면 만들 수 있을 듯하다.

16비트 윈도 시절에는 특정 프로그램이 시스템의 자원을 독점하기가 훨씬 더 쉬웠고 그때는 그냥 modal이 아니라 system modal이라는 기능이 버젓이 존재했다. 이 창을 닫기 전에는 아예 다른 프로그램으로 Alt+Tab 작업 전환도 안 되는 거다.

물론 이런 강압적인 기능은 32비트 이후부터는 공식적으로 삭제되었지만 이것의 영향을 받았는지 윈도 NT 계열과는 달리 9x 계열은 메시지 대화상자에도 그 잔재가 여전히 남아 있었다. 취소 버튼이 없이 '확인'만 있는 메시지 박스는 시스템 메뉴에 '닫기'가 존재하지 않았으며 [X] 버튼이 클릭 가능하지 않았다. 단, 그래도 키보드의 ESC나 Alt+F4는 동작한다.

사용자 삽입 이미지


Posted by 사무엘

2014/02/07 08:38 2014/02/07 08:38
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/928

다음 버전 개발 근황

2014년에 처음으로 나올 <날개셋> 한글 입력기의 다음 버전은 7.4로 정해졌으며 한창 개발 중이다. 지금까지 작업이 완료된 변화 내역은 다음과 같다.

1. 현재 MS 한글 IME의 사전을 이용하여 단어 단위로 한자를 변환하는 기능이 제공되고 있는데, 원래 있는 사전뿐만 아니라 MS IME에다 사용자가 등록해 놓은 custom 사전의 내용도 목록에 같이 뜨게 했다.

2. 제어판의 '편집기 계층'에서 옵션을 바꾼 뒤 '확인' 종료를 하면, 제4후보 설정들이 날아가 버리는 약간 중대한 버그가 있었다. 이것을 고쳤다. 사용자 정의 후보가 첫 추가된 7.0 이래로 존재했던 버그이며, 7.11에 존재하던 사실상 유일한 버그였다. 게다가 이것은 7.11만의 버그도 아니니 이번 7.11은 딱히 고쳐져야 할 게 없이 정말 완성도 높게 잘 만들어지긴 했다.

3. 낱자 수정 모드로 진입했을 때 전체 반전이 아니라 사각형 테두리 모양의 cursor가 거의 10년 만에 부활했다. 물론 이건 외부 모듈 말고 <날개셋> 편집기만으로 한정이다.

사용자 삽입 이미지

아마 아시는 분이 많지 않겠지만... <날개셋> 한글 입력기에는 낱자 수정 모드라는 게 있다. 삽입/겹침이 '겹침'에 맞춰져 있고(Ins 키), 낱자/글자가 '낱자'로 맞춰져 있는 경우(Shift+Ins), '가'를 '개'나 '나'로 곧바로 고친다거나 '강'으로 한 타 만에 고칠 수 있다. 글자를 처음부터 다시 입력해야 할 필요가 없다. 이것은 무려 1.0 첫 버전부터 긴 역사를 자랑하며 지원되어 온 기능이다.

낱자 수정 모드도 엄밀히 말하면 한글 조합 상태이긴 하지만 여느 상태와는 다르다. <날개셋> 편집기는 삽입/겹침이나 한글/영문이 아니라 낱자 수정 상태만을 별도의 cursor 모양으로 표시해 주고 있었는데.. 이건 까마득한 옛 버전인 1.x와 2.x까지만으로 한정되었다.

에디팅 엔진이 완전히 교체되고 운영체제의 표준 cursor를 사용하기 시작한 3.0부터는 낱자 수정 모드 자체는 존재하지만 다른 시각 피드백 구분이 없어졌으며, 그 관행이 2004년 이래로 10년째 지속되어 왔었다. 테두리 cursor는 10년 가까이 봉인되었다가 드디어 이번 버전에서 부활할 예정이다.

4. 외부 모듈에서 '빈 입력 스키마' 내지 '빈 입력 스키마 호환 옵션이 지정된 영문 쿼티'를 없앤 상태로 '확인'을 누르면 아예 경고문이 나타나게 했다. 링크를 클릭하면 더 자세한 도움말 설명도 나타난다.
쿼티를 없애고 드보락만 지정했는데 '빈 입력 스키마'가 자꾸 자동으로 추가돼서 이상하다는 문의가 지금까지 하도 많이 들어와서 말이다.

그렇게 IME가 인위로 글쇠를 생성하는 글자판은 비록 영문을 입력하는 방식이라 할지라도 기술적으로는 한글 모드일 뿐이다. IME가 아무 글쇠도 처리하지 않고 한국어 키보드 드라이버에 배당되어 있는 쿼티 방식 그대로 글쇠를 보내는 모드가 아예 없을 수는 없다.

5. 또한 이와 비슷한 매락에서, 단축글쇠 배당 대화상자에서는 Ctrl/Alt의 경우 오른쪽 방향은 인식되지 않을 수 있다는 경고문도 간단히 추가했다. 한국어 키보드 드라이버는 이들 글쇠를 한영/한자 키로 인식하기 때문이다.
<날개셋> 편집기야 자체 한글 기반이기 때문에 한국어가 아닌 여타 외국어 글쇠배열을 사용하다가 자체 한글 입력 모드로 들어가면 오른쪽 Ctrl/Alt를 인식 가능할 수도 있다. 그러나 외부 모듈은 그 자체가 한글 IME이고 무조건 한국어 키보드 드라이버와만 연결되기 때문에 그런 선택의 여지가 없다.

6. <날개셋> 한글 입력기는 MS IME와 마찬가지로 유니코드 BMP 영역에 있는 모든 한자들을 독음으로 입력할 수 있다. 그러나 현실에서 상용 한자 이외의 한자가 쓰이는 일은 매우 드물다. 그렇기 때문에, 좀 잉여스러워 보이긴 하지만 MS IME와 마찬가지로 '확장 한자 사용' 옵션을 켰을 때만 모든 한자들이 다 보이고 평소에는 상용 한자 4888자만 나타나게 했다. 이렇게 하는 게 처리 속도도 더 빠르고 말이다.
물론 이것은 사용자 후보나 단어 단위 한자 변환 동작에는 전혀 영향을 주지 않는다. 한글 하나만을 제1 후보 방식으로 기본 변환할 때에 한해서이다.

7. 편집기는 문서를 저장할 때 이미 있던 파일에다 덮어쓰는 경우, 임시 파일을 생성하여 저장한 뒤 임시 파일의 저장이 완전히 성공한 뒤에야 기존 파일을 지우고 임시 파일을 개명하는 방식으로 동작하게 했다. 저장 중에 프로그램이 뻗더라도 파일 내용이 송두리째 날아가는 일은 발생하지 않게 조치를 취했다. 어찌 보면 안전을 위한 기본 조치인데 <날개셋> 편집기는 지금까지 그런 정책을 채택하지 않고 있었다.
디스크의 용량이 극도로 부족할 때는 예외적으로 그렇게 복사본을 만들지 않게 하는 알고리즘도 필요할 듯도 하지만 일단은 거기까지 고려는 하지 않게 했다.

그리고 안전한 저장이라 하니까 생각하는데, <날개셋> 편집기는 자동 저장 기능은 여전히 지원하지 않으며 개발 계획에도 없다.

8. 다음으로 아주 잉여로운 GUI 변화 사항으로는...
TSF 시스템이 없는 운영체제에서는(Windows XP 미만의 초 구닥다리) 편집기의 'TSF 지원' 옵션이 흐리게 나오고, 자체 한자어 사전이 없는 운영체제에서는(Vista 미만) '단어 단위 한자 변환' 옵션이 흐리게 나오는 당연한 조치를 취했다. 물론 오늘날 운영체제에서는 아무 의미 없는 조치이지만, <날개셋> 한글 입력기는 공식적으로는 32비트 에디션 기준으로 윈도 95에서도 완벽하게 실행되는 거의 변태 같은 프로그램이기 때문에.. ㅎㅎ

- 블로그에 공지했던 입력 방식 유료 컨설팅 관련 설명은 도움말의 '일러두기'에도 당연히 짤막하게 추가되었다.

- UTF-8, UTF-16LE 같은 몇몇 용어를 표준 표기에 맞게 수정했으며,
- 빠른설정을 선택하는 목록 메뉴에서 '한글 로마자 입력기'가 신세벌식이나 복벌식보다 더 앞에, '기본 입력 설정' 바로 다음으로 나오게 순서를 변경했다. 이유는 두 말할 나위 없이 로마자 입력 방식이 두벌식/세벌식 다음으로 가장 널리 쓰인다고 판단되기 때문이다.

메이저한 굵직한 기능을 추가하기도 전에 사소한 변화 사항도 벌써 이만치 나왔다. 재미있다.
이런 경험들이 하나씩 쌓이면서 프로그램의 완성도는 갈수록 상승한다.

이미 보신 분도 계시겠지만, 사실 지난 1월에는 <날개셋> 한글 입력기 소개 페이지도 싹 갈아엎었다. 문서 만드는 게 코딩 이상으로 더 힘들 수 있다는 걸 실감한 시간이었다.

첫 화면에는 이 프로그램이 무엇인지 그 본질을 최대한 단순· 간단하게 소개한 뒤, 다운로드 페이지는 별도로 마련하고
프로그램에 대한 자랑질은 (1) 입력 아키텍처 쪽, (2) 세벌식 위주의 고급 활용 기능, (3) 편집기 및 외부 모듈 같은 구현체 소개
이렇게 세 단계로 완전히 세분화를 했다.

특히 (2)번의 경우.. 팔자에도 없던 움짤(gif)까지 최초로 만들어서..
기존 입력기에서는 이렇게 불편하게 고쳐야 하는 것을 이 프로그램으로 세벌식 + 관련 설정을 바꾸면 저렇게 곧바로 가능하다는 걸 바로 알 수 있게 했다. 왜 지금까지 이렇게 만들 생각을 안 했나 모르겠다.

마지막 '간단한 사용법'은 이 프로그램을 받아 놓고 도대체 무슨 기능부터 써 봐야 할지를 모를 사용자를 위한 팁 모음 같은 페이지이다.
내가 왜 코레일로 이직을 못 하고 있는지 궁금하신 분들은 한번 구경해 보시길~~ ㅎㅎ

다음으로 <날개셋> 타자연습이다.
타자연습의 경우 지난 2013년 한 해 동안은 새 버전 소식이 없었다.
그러다가 올해 초에는 입력기 7.4와 더불어 타자연습도 3.4가 나올 예정이다.

사용자 삽입 이미지
큰 기능 변화는 없고 아기자기한 외형 변경, 고해상도(high DPI) 모드에서의 일부 외형 glitch 수정 등이 이뤄졌다.
작은 크기에서 기존 32*32 아이콘을 줄인 밍밍한 아이콘이 아니라, 깔끔한 소형 전용 아이콘이 나오는 것을 주목할 것.
그리고 이번 기회에 연습글을 상당수 교체할 예정이다.

단문 연습용으로 너무 식상한 속담· 격언을 넘어서서 김성모 화백 어록이 제공된 게 지금까지 반응이 무척 좋았다. "내가 무릎을 꿇었던 건 추진력을 얻기 위함이었다" 같은 드립이 타자 연습글로 나오니까..ㅎㅎ
이번에는 일반 인터넷 유행어도 추가되어 "저 새는 해로운 새다" "찰지구나" "안녕하신가 힘세고 강한 아침" "병시나 산소" 등이 연습글로 제공될 예정이다.

그리고 허 성도 교수의 <우리 역사 다시 보기> 강연 녹취록을 적당히 편집하여 새 연습글로 추가했다. 분량도 적당히 많고, 내용 역시 매우 건전하고 훈훈하고 이념스러운 것 없고, 전국민에게 알릴 필요가 있는 좋은 내용이기에 즉시 추가했음.

이것 외에도 혹시 추가할 만한 좋은 연습글 있으면 추천받는다.
잘 알려지지 않은 인물의 선행/성공 일대기, 특정 사회 시스템을 돌아가게 하는 내부 사정 이야기, 언어 특성을 잘 살린 탁월한 운문이나 수필 등등이 좋을 것 같다..
아울러, <방망이 깎던 노인> 내지 <은전 한 닢>의 패러디 중 하나가 "재미있는 이야기" 카테고리에 들어갈 가능성이 있다.

끝으로, 세벌식 파워업도 2013년 한 해 동안 버전업이 없다가 최근에 간단한 업데이트가 행해졌다.
다른 프로그램을 사용하다가 파워업의 꼬마 윈도우를 클릭했을 때, "x벌식으로 바꿨습니다"와 함께 키보드 포커스가 잠깐 밖으로 나갔다가 다시 돌아와야 하는데..
지금까지 그렇지가 않아서 IE 11 같은 프로그램에서 글자판 전환이 곧장 반영되지 않던 문제가 있었다.
이번 패치는 이 문제를 해결했다.

IE 9와 IE 10에서 모두 원래 관찮았는데 하필 Windows 8.1 + IE 11에만 문제가 있는 걸 사용자의 제보를 통해 확인했다.

이상, 입력기, 입력기 소개 페이지, 타자연습에 파워업까지.. 오랜만에 본인의 본업 관련 소식을 쭉 전했다. 새해에는 세벌식 글자판이 더욱 널리 알려지고 쓰였으면 좋겠다.

Posted by 사무엘

2014/02/04 08:22 2014/02/04 08:22
Response
No Trackback , 8 Comments
RSS :
http://moogi.new21.org/tc/rss/response/927


블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2014/02   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  

Site Stats

Total hits:
3937548
Today:
334
Yesterday:
1630