« Previous : 1 : ... 105 : 106 : 107 : 108 : 109 : 110 : 111 : 112 : 113 : ... 230 : Next »

지난 3월 초에 본인은 1년 전에 한번 오른 적이 있는 불암산을 다시 찾았다. 단, 북쪽의 당고개 역 인근에서 출발했던 그때와는 달리, 이번에는 태릉 방면의 남쪽 구간만 잠깐 오르다가 곧장 하산했다. 여기를 답사하게 된 계기는 다음과 같다.

사용자 삽입 이미지

인터넷으로 지도를 만지작거리던 중, '공릉산 백세문'이라는 이름이 붙은 이 문과 산책로가 눈에 들어왔다. 여기 근처에는 서울 과학 기술 대학교와 원자력 병원이 있고, 산기슭에는 서울여대, 육사, 태릉 선수촌 등이 있다. 예전에 불암산을 올랐다가 돌아오면서 이 도로(화랑로)를 버스 타고 지난 적은 있지만, 정작 근처의 불암산 구간을 답사한 적은 없었다. 그래서 여기를 다녀와야겠다고 마음먹었다.

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

아파트 뒤로 난 언덕길의 좌우로는 처음엔 평범한 울타리가 있다가 나중엔 살벌한 철책으로 바뀌기도 했다. 왼쪽엔 한전 인재 개발원은 고압 전기 시설 때문에 경비가 삼엄하며, 오른쪽에는 문화재인 태릉에다가 태릉 사격장이 있으니 아무래도 아무나 못 들어가게 통제를 해야 한다.
불암산이 남쪽엔 요주의 문화재와 보안 시설이 많이 자리잡아 있다. 그래서 이런 것들 말고 참호 같은 군사 시설도 있었고 거기에는 '촬영 금지 - xxxx부대장 백' 이런 표시가 붙어 있었다.

사용자 삽입 이미지

등산로는 철책을 따라 이런 식으로 계속 이어졌다.

사용자 삽입 이미지

그나마 딱 한 군데 전망이 트인 곳에서는 육사 캠퍼스가 희미하게 보였다. 지인용(智仁勇) 탑과 근처의 동그란 육군 박물관이 보인다. 봉화산에서는 육사를 전혀 볼 수 없었는데 산에서 저기를 이렇게 보는 건 처음이다.

사용자 삽입 이미지

한전 인재 개발원에서는 한참 멀어졌다고 생각하지만 바닥에는 한전에서 매설한 듯한 무슨 표지석이 눈에 띄었다. 3 말고 4라고 적힌 것도 봤다.

사용자 삽입 이미지

이제 불암산 남부의 등산로에서 중요한 분기점이 나타났다. 서울 둘레길을 선택하면 인서울에 속한 산중턱 능선만 계속 타면서 북쪽의 당고개· 수락산 방면으로 갈 수 있다. 사실, 공릉산 백세문에서 시작해서 본인이 지금까지 걸은 길도 서울 둘레길이다.

아니면 다른 길로 가서 봉우리를 갈아탈 수 있다. 그러면 거기서 또 다른 갈림길이 나타나는데, 거기서 불암산의 정상으로 가거나 아니면 이 상태로 삼육 대학교 방면으로 하산할 수 있다.
본인은 오랜 고민 끝에 서울 둘레길은 더 가지 않고 정상· 삼육대 방면을 선택했다.

사용자 삽입 이미지

이제는 철책이고 울타리고 뭐고 다 없어지고 산행을 하는 것 같았다. 그러나 그것도 잠깐이고 본인은 삼육대 방면으로 하산했다. 그러자 여기부터는 삼육대 사유지임을 알리는 표지판과 각종 울타리가 나타나기 시작했다.

사용자 삽입 이미지

불암산 정상은 바로 저기이다. 북한· 수락산처럼 얘도 꼭대기 부근은 온통 바위이다.

사용자 삽입 이미지

이것은 삼육대 캠퍼스 안에 있는 그 유명한 '제명호'라는 인공 호수이다.
종교 계열 학교 아니랄까봐, 곳곳에서 금주 금연 강조하고 성경 말씀이 걸려 있고 "거룩한 안식일에 드리는 예배에 등산객 여러분도 초대합니다" 이런 표지판이 보였다.

사용자 삽입 이미지

삼육 대학교 백주년 기념관의 모습. 삼육 대학교 캠퍼스를 구경한 건 이번이 난생 처음이었다.
비록 불암산 자체는 별로 높게 오르지 않고 등산을 짤막하게 마쳤지만 작년에 갔던 곳과 중복되지 않는 구간만 다닌다는 목표는 달성했다.

천장산 기슭에 의릉이 있는 것처럼 여기 근처에는 태릉과 강릉(?)으로 들어가는 입구가 있었다. 하지만 거기에 가 보지는 않았다. 그 대신 본인은 여기 근처에 있는 또 다른 낮은 산인 초안산을 찾아갔다.

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

초안산은 전철 1호선 녹천 역에서 내리면 코앞에 있다.
옆에 중랑천을 흐르는 동부 간선 도로가 원래는 강의 양 옆으로 상행과 하행이 달리는데, 여기 초안산 구간만은 부지가 없어서 전철 선로가 중랑천의 바로 옆을 지난다. 이 때문에 이곳은 동부 간선 도로도 폭이 좁아지기 때문에 병목과 정체가 발생하곤 했다.

도로의 확장을 위해 철도 선로를 이설하겠다는 계획이 거의 2000년대부터 나온 걸로 기억하는데 아직도 진행은 지지부진한가 보다. 그래도 여기 주변의 풍경이 가까운 미래에 바뀌기는 할 것으로 보인다.

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

초안산은 워낙 작고 낮은 산이며, 비슷한 체급인 봉화산처럼 등산로도 여기저기 많이 뚫려 있었다. 여느 산들처럼 어디에서 어디 지점까지가 수 km 거리가 아니다. 그냥 몇백 m만 설렁설렁 걸으면 된다.
원래는 산의 규모가 더 큰데 덕흥로라는 길을 내느라 둘로 쪼개진 듯하다(창동 주공 4단지 아파트, 생태 다리).

사용자 삽입 이미지

낮은 산치고는 정상 주변에 헬리패드도 있고 정자와 심지어 태극기 등, 메이저급 산의 정상에 있을 만한 시설은 다 놓여 있었다.

사용자 삽입 이미지

그리고 내가 초안산을 찾은 또 다른 이유는 바로 이것.
초안산에는 조선 시대 궁궐 내시, 양반, 서민 등의 무덤이 1000여 개 가까이 있다고 한다. 정상 근처를 보니 웬 묘비와 석상들이 여럿 보였다. 내가 지금까지 올랐던 다른 산에서는 볼 수 없는 광경이었다.

사용자 삽입 이미지

녹천 역에서 /자 모양으로 산을 남서쪽으로 가로질러서 하산했다. 역시 빽빽한 아파트와 빌라들이 나를 반겨 주었다.

Posted by 사무엘

2017/05/25 08:31 2017/05/25 08:31
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1363

1. 트리플

  • 저그 해처리 레어 하이브 : 학사 석사 박사
  • 워드 엑셀 파워포인트 : 서울 지하철 1호선 2호선 3호선 (힌트: 색깔의 유사성)
  • 크레용-크레파스-파스텔 : 짜장면-짜파게티-스파게티
  • 레코드 SP EP LP : 그래픽 카드 CGA EGA VGA =_=;;

세상에는 3개로 이뤄진 진영이 속성이 서로 다 동일하거나 제각기 다 다른 경우가 있다.
스타크래프트의 플토, 테란, 저그가 좋은 예이다. 미네랄과 가스, 서플라이를 사용하며 기본적인 공방 업그레이드가 3단계씩 있는 건 공통이지만, 건물을 짓는 방식이나 각종 스킬 같은 건 전부 제각기 다르다. 두 종족은 완전 공통인데 한 종족만 다른 경우는... 일단 없다.

요런 체계를 모델링한 세트(Set)라는 아주 재미있는 머리 싸움 보드 게임도 있다. 4가지 속성(색깔, 도형 개수, 채움 패턴, 도형 모양)이 전부 같거나 전부 다른 카드 트리플을 빨리 찾는 게 목적이다. n개의 카드가 있을 때 세트가 하나라도 존재할 확률 내지 전혀 존재하지 않을 확률도 구할 수 있을 텐데 내 수학 지식으로는 모르겠다.

필기 내지 그리기 도구로서 색연필-크레용-크레파스-파스텔-콩테로 갈수록 특성이 어떻게 달라지나 모르겠다. 파스텔은 그냥 딱딱한 분필 같고, 크레파스는 왁스가 들어가서 그런지 좀 끈적거렸던 것 같다.
콩테나 목탄 같은 건 본 적 없다. 목탄화는 <플란다스의 개>의 주인공이 화가 지망생이라 쓰던 물건이라는 것 정도만 알고 있다.

2. 트윈

  • 지하철역 중에서 종로3가와 종로5가는 영락없이 삼겹살과 오겹살을 떠올리게 한다. -_-
  • 농사에 비닐하우스가 있다면, 야구에는 돔구장이 있는 듯..
  • 서울 강북에 청와대 뒷산인 북악산이 있다면 강남에는 국정원 뒷산인 대모산이 있다. 그리고 강북에 거대한 군사 시설인 용산 미군 기지가 있다면, 강남에는 국군정보사가 있어서 서초대로에 길이 끊겨 있고 gap이 존재한다. 서로 비슷한 심상이 느껴지는데, 얘들은 가까운 미래에 서울 밖으로 이전할 계획이 잡혀 있다.
  • 스타크래프트에나 있어야 할 옵티컬 플레어의 실사판: 공중으로 쏘는 레이저 포인터(특히 녹색), 육지 자동차에는 HID 불법 개조.

크리스천들이 하나님에 대해서는 그분이 우리가 원하는 것을 주시는 게 아니라 우리에게 "필요한" 것, 우리에게 유익한 것을 주신다고 믿는다.
허나, 사람에 대해서는 능력껏 벌어서 "필요한" 만큼 가져가는 세상은 필연적으로 다같이 망하고 거지 되는 세상을 부른다.
이것이 신과 인간에 대해서 '필요'라는 개념이 작용하는 방식의 차이점이다. 이건 성악설이 성립하는 한 반박 불가능할 것이다.

그리고 한편, 컴퓨터와 관련해서는..

  • 옛날에 컴퓨터를 다루던 사람들은 디스크의 배드 섹터를 걱정했지만 요즘 사람들은 모니터의 불량 화소를 신경 쓰는 듯하다.
  • 옛날 사람들은 컴퓨터를 오래 쓰면 Windows 3.x 내지 9x의 리소스 퍼센티지가 줄어드는 걸 보고 바싹 긴장했지만, 요즘 사람들은 스마트폰의 배터리 퍼센티지가 줄어드는 걸 보고 바싹 긴장한다.

3. 부정적인 예

  • C++ 템플릿의 문제(소스 코드가 노출된 채 모든 번역 단위에 매번 인클루드 돼야 함)를 해결하려고 고민했는데 기껏 나온 게 export
  • 남북이 통일하랬더니 기껏 나온 게 고려연방제 (1국가 2체제.. 그냥 전쟁만 없는 반쯤 적화통일)
  • ActiveX를 없애라고 하자 나온 게 EXE 프로그램

이들이 무슨 공통점이 있는지는 설명이 필요하지 않을 것이다. 본질적인 문제는 전혀 해결하지 않은 채 그냥 눈 가리고 아웅일 뿐이다.

4. 긍정적인 예

  • 건축업계· 학계에서는 '철근 + 콘크리트'가 신이 건축· 재료공학계에 내린 천혜의 재료 궁합이라고 그런다. 열팽창 계수가 거의 같아서 혼합 가능하면서도 서로 장점을 부각시키고 단점은 보완하면서 최고의 건축 자재 역할을 하기 때문이다.
  • 항공업계에서는 하필 여객기의 최적 순항 고도에 제트 기류라는 게 존재하는 게 기적적인 행운이라고 한다.
  • 1970년대에 인류가 우주 개발을 하고 있을 때 마침 태양계 행성들이 가까이 일렬로 배열돼 있어서 보이저 2호는 단독으로 천왕성과 해왕성을 동시에 탐사하는 대박을 경험할 수 있었다. 이것도 못해도 백수십 년 만에 한 번 찾아오는 기회였다고 그런다.

이런 예가 더 있을지 궁금하다. 혹시 반도체를 만드는 데에도 무슨 천혜의 자연 광물 특성이 활용되는 게 있지 않을까?

5. 예상치 못한 대박

예전에 교통수단 관련 글을 쓰면서 한 번씩 언급한 적이 있는 내용이긴 하지만 복습 차원에서..

  • 서울 지하철 9호선은 잠재적 수요를 인정받은 덕분에 서울 3기 지하철 중 거의 유일하게 얘 혼자만 노선 계획이 온전히 살아남아서 건설되고 개통되었다. 그런데 한편으로는 국가에서는 이거 만들어 봤자 지상의 올림픽대로를 달리는 자동차들의 적수가 못 될 것이고 공기수송 적자이면 어쩌나 지금의 입장에서는 참 쓸데없는 걱정을 했다. 그래서 전동차도 달랑 4량으로 편성하고, 최대한 메리트를 끌어올리려고 급행도 만들었다. 그랬는데, 실제로 뚜껑을 열어 보니 9호선은 초대박을 쳐서 최악의 가축수송 혼잡도를 보이는 노선이 됐다.
  • 지난 1960년대 말, 보잉 사에서는 유럽에서 초음속 여객기 콩코드가 개발되는 걸 예의주시하면서 "이거 초음속 여객기가 대박을 치면 어쩌나" 생각을 했다. 그래서 자기들도 초음속기인 보잉 2707을 개발 준비만 하면서 간을 보는 한편으로, 이미 개발 중이던 보잉 747 아음속 여객기는 주류에서 밀려날 경우 화물기로 언제든지 개조 가능하게 만반의 대비를 해 놓았다. 그러나 뚜껑을 열어 보니 초음속기는 가성비가 심각하게 부족했고 오일 쇼크와도 맞물려 영 재미를 못 봤다. 그 대신 747은 대형 여객기로 수십 년간 엄청난 성공을 거뒀다.

6. 2단계 계층

컴퓨터 프로그램 내지 알고리즘을 보면 작업을 수행하는 양상이 명백하게 독립된 두 phase로 나뉘는 것이 있다.

  • 힙 정렬: 정렬 알고리즘 중에는 얘가 꽤 독특하다. 배열을 기반으로 heap을 생성하는 단계와, 그 heap으로부터 최종적으로 정렬된 리스트를 하나씩 뽑아내는 단계로 나뉜다.
  • 컴파일러: 소스 코드를 구문 분석을 해서 내부 representation으로 변환하는 프런트 엔드, 그리고 이를 토대로 최적화와 기계어 코드 생성을 하는 백 엔드로 단계가 분명하게 나뉜다.
  • 일본어 IME: 일본 문자 자체를 입력하는 방식과, 그 일본어 문자열을 NLP 관점에서 분석해서 어절을 나누고 한자 변환 후보를 제시하는 것은 서로 완전히 별개의 단계이다. 그러니 전자와 후자를 분리해서 일부 파트만 서로 다른 알고리즘 내지 DB 제품으로 교체해서 사용할 수 있지 않나 싶다.

그리고 데이터 압축이 있다. 흔히 간과하기 쉬운데, 압축이라는 절차도 두 단계로 나뉜다. 먼저, 원소나열법을 간단한 조건제시법으로 바꿀 만한 규칙성, 반복 패턴을 찾아서 더 간결한 방식으로 표현 방식을 바꾸는 것이 전자이다. 전자를 수행하는 방법은 그야말로 무궁무진하며, 손실 압축과 비손실 압축도 이걸 수행하는 방식의 차이에 지나지 않는다. 압축된 데이터는 데이터 + 탈출문자 + 약어에 대한 번문 명령(expansion instruction) + 사전 참조 오프셋 같은 게 뒤죽박죽 섞여 있다.

그 다음으로, 이런 인코딩 결과를 정보 이론 관점에서 빈틈 없는 아주 compact한 형태로 물리적인 표현 방식을 바꿔서 최종 출력하는 것이 후자이다. 후자는 이론적인 압축률의 한계도 다 증명돼 있고 전자에 비해 더 발전할 게 별로 없는 상태이다.
압축 알고리즘이라 하면 이 둘을 싸잡아서 한데 일컫는 경향이 있으나, 이 두 단계는 엄연히 용도와 성격이 다르다. 가령, jpg 이미지 포맷의 경우 이산 코싸인 변환은 전자요, 결과를 허프만 코딩으로 출력하는 것은 후자에 대응한다.

요즘은 보기 힘든데 1990년대에 Windows Installer가 아직 없던 시절에는 마소에서는 확장자가 cab이던가? 독자적인 압축 파일 포맷을 써서 프로그램을 배포했다. 더 옛날에는 원본 디스크를 보면 설치되는 파일들이 확장자만 다 _xe, _ll 혹은 ex_, dl_ 이런 식으로 바뀌고 안에 내용은 어설프게 압축되어 있곤 했다. Lempel-Ziv 같은 알고리즘으로 압축되긴 했는데, 코딩 방식을 조밀화하는 '후처리'는 하지 않아서 가끔씩 원본 파일에 들어있는 문자열이 드문드문 보이곤 했다.

파일을 압축하면 기본적으로 전자 과정을 거쳐서 크기가 줄어드는데, 후처리까지 거치면서 크기가 좀 더 감소할 뿐만 아니라 이때 진짜 난수표 같은 뒤죽박죽 비트 나열로 바뀐다. 둘은 마치 사이다에서 (1) 단 맛을 내는 향신료와 (2) 탄산, 에어컨에서 (1) 온도를 낮추는 압축기와 (2) 송풍기하고 얼추 비슷한 관계가 아닌가 싶다.

7. 혈액형과 상속 개념

코딩 하니까 드는 생각인데..
중등학교 때 혈액형과 수혈 가능성에 대해 배울 때 우리는 객체지향 프로그래밍에서 말하는 상속이라는 개념을 어렴풋이 접했다고 볼 수 있을 듯하다. 수혈 가능성은 형변환 가능성이고.

O형이 베이스 클래스이고 A, B형은 O형으로부터 상속이며 AB는 A와 B 다중 상속이다.
A형과 B형이 O형을 가상 상속을 한 건지는 잘 모르겠다.
하지만 현실은 그렇게 매끄럽지가 않기 때문에 어지간해서는 반드시 같은 유형끼리만 수혈을 하지, A/B계열형에다가 O형 피를 수혈하고 AB형에다가 A나 B형 피를 수혈한다거나 하지는 않는다고 한다. 이런 얘기는 어렸을 때 과학 책이나 교과서에서 접하지 못했다.

아무쪼록 다중 상속은 포인터의 형변환이 이뤄질 때 오프셋 보정이 필요하게 하며, pointer-to-member도 포인터 하나 형태로 간단하게 구현할 수 없게 만드는 주범이다.
다중상속 받은 한 클래스의 포인터를 다른 상속 파생 클래스의 포인터로 바꾸는 건 굉장히 조심해서 해야 한다. 이럴 때 C-style cast는 reinterpret_cast와 개념적으로 다를 바 없어지기 때문에 반드시 static_cast를 써야 실수를 예방할 수 있다.
그러니 혈액형간 typecast도 가능한 한 안 하는 게 좋아 보인다. 아무래도 위험해 보인다.

Posted by 사무엘

2017/05/22 08:27 2017/05/22 08:27
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1362

1. 애산과 한글 학회

본인은 몇 년 전 한글 학회 관계자로부터 메일을 한 통 받았다. '애산 이 인 선생(1896-1979) 추모 학술대회' 초청장이었다.
저 사람은 도대체 누구? 약력을 보니 해방 초기에 우리나라에서 활동한 법조인이긴 한데, 본인은 그 당시 아는 게 전혀 없었다. 그 시절의 관련 분야 인물로는 초대 제헌 헌법 초안을 작성한 유 진오 박사 같은 사람밖에 못 들어 본 상태였다. 저분은 진짜로 문학과 법학에 모두 통달하여 공부의 신이요 문과 먹물 계열의 가히 천재 완전체였다.

그러니 처음 보는 인물에 대해서는 "국어학자도 아닌 사람이 한글 학회와는 무슨 상관?" 이런 의문이 들었으며, 그 당시에 또 시간대도 안 맞아서 그 행사에 가 보지는 못했다. 그래도 저 분야에서 저렇게 언급된 인물이 있다는 사실 자체는 본인의 머릿속 기억 한 구석에 각인되었다.
그 뒤 나중에 차츰 알고 보니 애산 이 인이라는 분 역시 생각보다 굉장히 대단한 사람이었다. 호머 헐버트와 더불어 한글 학회를 계기로 알게 된 위인 중 한 분이다.

이분은 메이지 대학 법학부를 졸업한 후 일제 강점기 때 피식민지 조선인으로서 변호사가 되었다. 인도의 마하트마 간디가 영국 식민지 치하에서 변호사가 된 것처럼 말이다.
그리고 이 선생은 일제 강점기 동안 의열단, 안 창호 사건 등 여러 항일 운동에서 자진해서 독립 운동가들을 변호했으며, 그것도 국선이 아닌 민간 변호사임에도 불구하고 변호를 무료로 해 줬다. 일본의 국익을 대변하지 않는(?) 변호가 너무 잦고 일제 말기엔 창씨 개명조차 거부하니 조선 총독부로부터 요주의 인물로 찍혔으며 변호사 면허 정지를 당하기도 했다. 조선의 독립을 지지했던 '일본인 변호사' 후세 다쓰지처럼 말이다.

이런 민족 인권 변호사가 이 인 말고 전국적으로 몇 명 더 있긴 했지만(허 헌, 김 병로) 그래도 손가락으로 꼽을 정도의 수였다.
그리고 이 인 선생은 여느 변호사와는 달리 한글 학회와도 각별한 인연이 있었다. 역시 문과 전문직답게 자기 나라 말과 글의 소중함을 알고서 조선어 사전 편찬을 위해 후원회를 조직했으며, 1942년엔 조선어 학회 사건에 연루되어서 구속되기까지 했다. 다만, 이분은 옥고를 치른 다른 국어학자들과는 달리 집행유예로 끝났다.

해방 후에 이분은 엘리트 지식인으로서 건국 초기부터 우리나라에서 관련 분야 요직을 두루 역임했다. 초대 법무부 장관을 맡았으며 제헌 국회의원을 지내기도 했다. 그 와중에 한글 학회가 장소가 협소하고 재정 부족으로 어려움을 겪고 있다는 소식을 듣자 1976년에는 지금의 붉은 벽돌 건물인 한글 회관을 짓는 기금 3천만 원을 쾌척했다. 40년 전 물가로 3천만 원... 이건 마침 비슷한 시기에 막 출시되었던 현대 자동차 포니를 10대가 넘게 살 수 있던 금액이었다(대당 약 230만 원).

그리고 이분은 그걸로도 모자라서 임종 전, 유언을 통해 자기 전재산을 한글 학회에 기증했다! 이 정도이니 한글 학회에서 두고두고 칭송할 수밖에 없겠다.
이분은 일제 강점기와 해방 후에 두루 우리나라에 끼친 업적이 워낙 출중하기 때문에 사후에 건국훈장이 추서되었다. 그런데 정확한 수훈 등급이 뭔지 문헌에 따라 국민장과 독립장이 서로 난립해 있는 건 이해가 되지 않는 점이다.

한글 학회는 전신이던 조선어 학회 시절에 최초의 국어사전을 편찬했으며, 이것을 오늘날까지 굉장히 큰 자랑거리와 자부심, 긍지로 여긴다. 특히 조선어 학회 사건을 사건이 아니라 '수난'이라고 자체적으로 의미를 더욱 부여해서 부른다.
국립 국어원의 표준 국어 대사전이 국어사전계를 평정해 버린 오늘날의 눈으로 보면 격세지감이 느껴진다. 그런데 오늘날은 그 표준 국어 대사전조차도 이해타산 문제로 인해 종이책으로는 더 출간되지 않으니 참 아이러니다. (유니코드 전 영역 차트도 종이책 출간이 이미 진작부터 중단됐고..)

한글 회관의 건립과 관련해서는 그 당시 박 정희 대통령도 큰 기여를 했다.
노산 이 은상 선생이 박통을 직접 찾아가서 한글 회관 건립을 위한 재정 지원을 호소했다고 한다. 그 당시에는 대통령이 "국방 성금은 1원도 안 낸 양반이 무슨 한글 회관 같은 데에 모금 요청을?" 식으로 씨크하게 반응했으나, 다음 날엔 1억 원이라는 돈을 금일봉 형태로 당시 영애이던 박 근혜 씨를 통해 전해 줬다고 한다. (한글 학회 김 종택 회장의 증언)
박통은 이것 말고도 한글 관련 단체 지원이나 어문 정책 쪽으로도 칭송 받을 행적을 여럿 남겼다. 광화문 현판조차도 한자가 아닌 한글로 친필을 남겼을 정도이니..

사용자 삽입 이미지

오늘날 한글 학회는 학술적인 성향이 절반, 한글 문화 연대처럼 운동 및 계몽적인 성향도 절반 정도 덤으로 갖추고 있다. 애국 단체라고 국내외로 후원하는 분도 적지 않다. 그리고 저런 사연을 거쳐서 1970년대에 건립된 한글 회관 건물 덕분에 서울 도심 금싸라기 지대에 좋은 부동산도 보유하고 있고, 그걸로 임대업 하면서 직원 월급도 준다.
그러나 지은 지 40년 된 건물은 딱 봐도 주변 건물들에 비해 외관이 낡았으며, 온통 임대를 주느라 정작 학회 자체의 문헌과 자료를 쌓아 둘 공간이 부족한 실정이라고 한다.

(오늘날의 업무용 건물의 건축 트렌드인 유리궁전과는 달리, 혼자 떡 버티고 있는 붉은 벽돌 건물은 한눈에 봐도 완전 옛날스럽다. 부산에서 봤던 동아 대학교 석당 박물관, 부산 임시 수도 청사도 다 같은 붉은 벽돌이지 않던가?
인테리어로 가면 옛날에는 가구나 복도 바닥, 문 같은 것도 요즘처럼 금속, 플라스틱, 콘크리트가 아니라 목재가 훨씬 더 많이 쓰였다.
옛날에는 금연에 대한 경각심도 지금보다 훨씬 덜했으니 저런 건물은 안에 들어가면 담배 냄새가 쩔어 있기도 할 것 같다. 거기에다가 각종 간판이나 표지판 글꼴까지 어설픈 둥근고딕 내지 붓글씨 부류로 넣으면 완벽한 옛날 고증 완성이다.)

2. 애산과 반민특위, 영화 <암살>

그럼 이번에는 한글 학회 말고 법조인으로서 애산 선생이 관계가 있는 다른 이야기를 꺼내 보겠다.
이분은 명백히 변절 없는 항일 독립 운동 노선을 갔으며, 사후에 건국훈장이 무난하게 추서되었을 정도이다. 그런 한편으로 해방 후에는 반공 우파를 표방하면서 이 승만 정권을 지지했다. 이것도 내가 보기엔 정상적이고 건전하다.

그런데 이런 사람이 반민특위(반민족 행위 특별 조사 위원회)의 위원장까지 돼서는 이 위원회를 완전히 해체시켜 버린 것은 언뜻 보기에 고개를 갸웃거리게 만든다. 이것 때문에 이 승만 정권은 친일 청산을 안 한 정권이라고 후대로 욕을 두고두고 쳐먹게 되었다. 일이 왜 이렇게 된 것일까?

이 사건에 대한 이해를 돕는 관련 장면이 영화 <암살>의 결말부에 묘사돼 있다.
염 석진은 해방 후에 반민특위에 의해 기소되었지만 증인을 비열하게 미리 죽여 버린 덕분에 증거 불충분 → 공소권 없음 → 불기소 처분으로 끝난다. 이 꼴을 보니 판사조차 속으로 부글부글 끓었는지, 원래 주려고 했던 벌은 못 주고 "단, 법정모독죄로 벌금 2만원에 처한다"와 함께 재판봉을 부서져라 내리치고는 나가 버린다.

물론, 이 영화에 대해서 좌익 공산주의 계열 독립운동가인 김 원봉을 띄우고, 남조선은 친일 청산 못/안 한 나라라는 왜곡된 시각'만' 주입한다는 이른바 '좌편향' 비판이 있었다. 하지만 이 글에서 그 얘기를 더 논하지는 않겠다. 우리나라가 북괴나 구소련처럼 기록말살형이 존재하는 속좁고 옹졸한 나라는 아니며, 훗날 일제에게 변절했거나 월북한 사람이라도 흑화 전의 행적 중에 선한 게 있다면, 훈장은 안 줄지언정 팩트를 객관적으로 평가할 필요는 있으니 말이다.

사실, <암살>의 원래 대본에는 재판 중에 이런 장면도 있었다고 한다. 그런데 그게 최종적으로는 짤렸다.

- 검사: (와~ 재산 목록 보소~) 피고는 지금까지 도대체 독립운동을 하셨습니까 사업을 하셨습니까? 얼마나 많은 사람들을 팔아서 번 겁니까 이거?
- 염 석진: (개빡침. 검사의 멱살을 붙잡고 흔들다가 손찌검~) 이 친일파 아들놈의 새X가 지금 와세다 법대 나와서 꽃방석에 앉았다고 내 앞에서 떵떵거려? 니 애비도 우리 암살 리스트에 있었어 이 X꺄. 어딜 감히 조국을 위해 목숨을 바친 내 인생을 부정축재자로 몰아?


사용자 삽입 이미지

사용자 삽입 이미지

염 석진이 처음엔 독립운동을 하다가 종로 경찰서 지하 고문실에서 끔찍한 생명의 위협을 겪고서야 밀정으로 변절했듯, 심지어 민족정기 바로 세우기 반민특위 재판을 진행하는 법조인들조차도 사실 친일파 가문의 금수저 출신이었다는 반전이 숨어 있다. 이 지경이라면 이놈의 나라는 참 꿈도 희망도 없다.;;

영화의 작품성을 위해서는 선악 구도가 일관된 게 더 보기가 좋으며 저 장면이 없는 게 더 낫다. 그러니 편집은 적절하게 한 거라고 여겨진다.
하지만 저 장면이 있는 것이 1940년대 말의 완전 시궁창이던 현실의 선악 구도를 사실적으로 묘사하는 데는 도움이 됐을지 모른다.

일제만 물러갔다고 해서 군· 경 간부가 필요하지 않은 게 아니고, 판· 검· 변호사 같은 법조인이 필요하지 않은 것도 아니다. 나라가 혼란하던 시절에는 그렇게 사회 질서를 유지시키는 사람들이 특별히 노련한 경력자 위주로 더욱 필요했다. 친일 경력 없다고 해서 일자무식한테 법률 자문과 재판 판결을 맡길 수는 없는 노릇이니까.

그런데 단순 생산· 기술직이 아니라 저런 전문직은 아무나 될 수 있는 게 아니고 결국은 유복한 환경에서 공부 많이 한 사람 차지가 되는데, 유복한 환경이 아무래도 항일보다는 친일 쪽 집안에 더 많이 조성돼 있었음은 자명하다. 이게 참 불편하다면 불편한 진실이다.

그러니 일본 경찰· 헌병 출신 조선인이 훗날 반공투사로 깃발 바꿔 단 것만큼이나, 일제 치하에서 법조인으로 편하게 살았던 사람이 역설적으로 반민특위 조사관으로 변신했다 해도 이상할 게 없다(실제로 그런 사례가 있었는지는 모르겠지만). 법조인 중에 저런 민족 인권 변호사만 있었던 게 아니니까 말이다.

그럼 애산 선생을 생각해 보자. 그는 영화에 나온 것처럼 친일파 집안 출신도 아니었고 독립 운동가 출신의 법조인이요, 한글 학회의 제일 든든한 후원자였음에도 불구하고 왜 반민특위 활동을 통한 친일 청산을 반대하는 소신이었을까? 정확하게는 모르겠지만 legal mind 관점에서 봤을 때 다른 이유가 있었으니 해체시킨 게 아닐까 싶다.

당장 몇몇 악질 부역자들을 망신 주고 응징해서 감정적인 만족을 얻는 것보다 부작용이 더 커지고 있었다거나, 정확한 진상 규명과 재판이 현실적으로 도저히 곤란했다거나, 불순분자들이 반민특위 조사관을 사칭하면서(문화혁명 당시의 가짜 홍위병 같은!) 생사람 잡는 일이 늘었다거나...

그 당시 이 승만 대통령이나 애산 선생이 반민특위에 대해 무슨 생각을 하고 있었겠는지는 본인이 기회가 되고 자료를 더 접하는 대로 공부를 더 해 볼 생각이다. 다만, 결과가 무엇으로 귀착되건 그 당시에 나라가 일제 부역자 전문직들을 불가피하게 재등용할 수밖에 없는 상황이었다는 것은 인정한다.

Windows 9x가 그 당시의 가정용 똥컴에서 돌아가고 도스 호환성을 보장하기 위해 16비트 코드를 불가피하게 재등용할 수밖에 없던 것과 정확하게 동일한 맥락의 한계이다. 우리나라의 친일파 청산을 제일 방해한 것은 사회 혼란과 체제 전복을 조장하던 북괴 공산주의자들이라는 게 절대적인 사실이다. 어떤 경우든 누가 선동하는 것처럼 친일 청산이라는 걸 악의적으로 일부러 안 한 건 아니다.

끝으로, 다시 영화 <암살> 얘기로 돌아오면,
원래 의도했던 것처럼 염 석진이 검사와 싸우는 장면이 들어가 있어야 "법정모독죄로 벌금 2만원형"이 논리적으로 개연성이 성립하겠다.
겨우 웃통 벗고 "내 몸엔 일본놈들의 총알이 6개나 박혀 있소!" 쇼 한 게 왜 지금 물가로 수백만 원 이상의 벌금을 내야 할 법정모독죄인지 본인은 지금까지 이해를 못 하고 있었다. 그런데 이 역시 짤린 장면을 보니까 납득이 된다. 검사랑 현피 주먹다짐 정도는 해야 법정모독죄가 성립하지 않겠는가?

Posted by 사무엘

2017/05/19 08:34 2017/05/19 08:34
, , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1361

다음 버전 개발 근황

날개셋 한글 입력기 8.9는 지난 8.8과는 달리 딱히 치명적인 버그가 발견된 게 없고 잘 만들어져 있다. 한편으로 다음 버전인 9.0은 현재 이렇게 순조롭게 개발되고 있다.

0. 한글 공식 명칭에서 <> 제거

이 시간부터 내 프로그램의 공식 명칭은 그냥 '날개셋 한글 입력기'임을 밝힌다. 날개셋이라는 단어를 감싸는 화살괄호(angle bracket)를 쓰지 않기로 했다. 프로그램의 모든 UI와 도움말, 각종 예제 파일, 홈페이지에서 이걸 이미 제거했다. 프로그램이 완성되는 날, 웹에다가도 업로드해서 반영만 하면 된다.

몇 년 전에 한번 얘기한 적이 있지 싶은데 검색하기가 귀찮다.
세벌식 최종은 타 한글 글쇠배열과는 달리 가운뎃점이 있으며, 화살괄호(컴퓨터에서는 그냥 부등호일 뿐이지만..)가 아랫글쇠(non-shift)에 있다. 하지만 날개셋 한글 입력기 1.0이 최초로 개발되던 시절에 여전히 많이 쓰이던 Windows 95는 비록 공식적으로 최종을 지원했음에도 불구하고 마소 직원의 무지(?)로 인해 기호의 배열에 틀린 게 굉장히 많았다. 그래서 화살괄호조차도 원래 의도했던 방식으로 입력할 수 없었다.

그래서 결국 허접하게나마 내가 입력기를 직접 만들고 나니 가운뎃점이고 참고표고 화살괄호고 다 제대로 입력이 가능했다. 그 당시엔 그것 하나만으로도 참 감격스러워서 뒷일을 별로 생각 안 하고 프로그램 브랜드명에다가도 화살괄호를 쌌다. 아래아한글이 고유명사에다가 옛한글을 쓴 것처럼 뭔가 튀어 보이는 효과는 덤이고 말이다. 그게 사건의 전말의 전부이다.

하지만 고유명사의 내부에 문장 부호가, 그것도 dash 정도의 작은 물건도 아니고 아예 여닫는 pair가 존재하는 놈이 끼어들어 있는게 그리 보기 좋지는 않다. 아래아한글도 옛한글을 표현할 수 없는 환경에서는 '한/글'이라는 대체 표기가 쓰이는데, slash는 그 자체가 디렉터리 같은 토큰 구분용으로 쓰이는 문자이기도 하니 이 역시 그리 보기 좋은 표기는 아니다.

또한 화살괄호는 컴퓨터 키보드로 칠 때는 의미가 완전히 다른 부등호가 돼 버리며, 명령 프롬프트에서는 도스와 유닉스를 막론하고 redirection 기호로 쓰여서 파일명에 들어갈 수 없고.. HTML 태그를 여닫는 기호이기도 해서 본문에 간단히 삽입할 수도 없다. 이 때문에 지금처럼 공식적으로 화살괄호를 제거하기로 결심하기 전부터도 내 프로그램의 명칭은 화살괄호가 빠진 형태로도 암묵적으로 많이 쓰이고 있었다. 이제 본인은 그렇게 간소화된 명칭만을 사용하기로 했다.

지난 7.0에서는 프로그램의 얼굴이라 할 수 있는 아이콘이 대거 바뀌어서 지금에 이르고 있는데, 그로부터 4년 뒤인 9.0에서는 프로그램의 이름 표기가 바뀌는 큰 변화를 겪게 되었다. 나름 의미 있는 변화이다.

1. 복합 낱자 입력 로직 생성기: 허용 한글 범위 제약 기능 + 오토마타 연동

복합 낱자 입력 로직 생성기는 날개셋 한글 입력기 8.x대 후반, 그리고 본인의 박사과정 연구 기간의 대미를 장식한 그야말로 엄청난 핵심 기능이다. 나로서는 정말 엄청난 시간과 노력을 들여서 구현해 냈고 논문도 썼다. 그래서 주요 기능들이 잘 완성됐으며 동작에 딱히 심각한 버그도 없긴 하지만, 이번 9.0에서는 '허용 한글 범위 제약' 기능과 연계하는 기능들이 또 추가되었다. 허용/금지 등 등급별로 분류된 글자들을 날개셋 한글 입력기의 오토마타와 연계하여 재미있는 오덕질을 하는 옵션인데, 다음과 같은 것이 있다.

(1) 먼저, 허용되는 글자 중에서 더 결합의 여지가 없는 단말(terminal) 글자에 도달한 경우 자동으로 조합을 종료하는 옵션이다.
예를 들어 '고'라는 글자는 ㅏ를 결합해서 '과'가 될 수 있고 종성과 결합해서 '곡', '공' 같은 글자가 될 수도 있다. '안'이라는 글자도 '앉'이나 '않' 같은 글자로 추가 결합이 가능하다. 그러나 '엌', '같' 같은 글자는 더 결합이 이뤄질 게 없다. '판'이라는 글자도 KS X 1001 하에서는 '안'과는 달리 겹받침이 붙을 수 있는 게 없다.

이런 글자를 terminal로 간주하며, 이게 만들어지는 순간 조합을 종료하는 것이 이 기능의 핵심이다. 조합을 미리 끊든 말든 사용자의 타자 행동이 달라지는 건 없지만, 이것이 지금 입력 체계 하에서 더 결합의 여지가 없는 단말 글자였다는 시각· 심리적인 피드백을 준다. 이런 것도 날개셋 한글 입력기로 구현 가능하다는 데모 차원에서 옵션을 구현했다.

'허용 한글 범위 제약' 기능을 사용하면 이 프로그램은 일단 입력 가능한 글자들을 받아서 입력을 위해 추가로 허용해야 하는 글자를 수집하고, 글자가 완성된 뒤에 연속 입력을 위해 다단계 분리 처리를 해야 하는 글자도 제3 그룹에다 수집해 준다. 이 글자들은 기존 허용 글자들의 밖에 존재하는 것들이다. (1은 무조건 허용되는 글자, 2는 무조건 실패하는 글자로 용도가 예약됨)

그런데 이 옵션을 사용하면, 기존 입력 가능 글자들 "중"에서 terminal에 속하는 글자들을 제4 그룹에다가 따로 모은다. 그래서 지금까지 오토마타에서 T==3에 대해 다단계 분리 -12를 적용하듯이 T==4에 대해서는 이미 있는 기능인 -3 (결합 후 조합 중단)만 지정하면 일이 깔끔하게 끝난다.

terminal 감지는 두벌식에서는 그렇게 의미 있는 기능이 아니다. 종성이 있는 글자는 그 종성의 일부나 전부가 다음 글자의 초성이 될 수도 있으니 도중에 조합을 끊어서는 절대로 안 된다. 하지만 종성이 없는 글자 중에서도 '긔, 꾜, 뀨, 눼, 댜, 듸, 쮸, 켸, 쿄' 등 terminal이 20여 자 있다. 이 글자들 이후에는 종성이 이어지는 게 전혀 없으니 두벌식에서도 조합을 바로 끊어 버려도 안전하다.

얘들은 '쌰, 쓔, 뢔, 쬬' 같은 고아 글자와는 성격이 정반대이다. 고아 글자들은 받침이 붙은 '썅, 쓩, 뢨, 쭁'은 KS X 1001에 있는데 받침이 빠진 형태가 빠진 경우이고, 모음 terminal 글자는 자신 이후로 아무 받침이 붙지 않는 경우이니 말이다. 어쨌든, 고아 글자를 찾는 기능이 있으니 terminal을 찾는 기능도 있어야 한다는 생각이 들어서 잠시 시간을 내어 이 기능을 구현하게 됐다.

세벌식으로는 terminal 감지 기능이 제 기능을 발휘할 수 있다. 그 극단적인 경우는 현대 한글 기준으로 모든 받침을 1타 만에 입력 가능한 최종(391) 글쇠배열이다. 받침을 찍는 순간 글자가 완성됨과 동시에 그냥 조합이 종료돼 버린다. 물론 이렇게 테이블을 참조할 필요조차 없는 일방적인 경우라면 아예 오토마타 수식을 고쳐 버려도 되지만 '안'일 때만 조합이 유지되고 '판'일 때는 조합이 끊어지게 하려면 이 기능을 사용하면 된다.

(2) 그 다음으로, 허용되지 않는 글자를 만드는 낱자는 다음 글자로 보내는 게 아니라 그냥 무시하는 옵션이 있다. '또+ㅁ'의 경우 ㅁ을 다음 글자로 보내는 게 아니라 그냥 무시한다는 뜻이다. 이 역시 두벌식에서는 종성에 대해서는 적용할 수 없고, 중성에 대해서만 적용 가능하다. T==2에 대해서 -1 (무시)을 되돌리게만 하면 간단히 구현 가능하다.

날개셋 한글 입력기의 완성도를 더욱 끌어올릴 아이디어가 하나 떠올라서 성공적으로 구현되니 좋다. 이제야 '복합 낱자 입력 로직 생성기는' 진짜로 더 만들 게 (현재로서는) 안 떠오르고 작업이 완전히 종결된 것 같다.
이 옵션이 추가됨으로써 '복합 낱자 입력 로직 생성기' 마법사의 2단계 대화상자는 너무 큼직하고 복잡해졌다. 사실, '허용 한글 범위 제약'은 통상적인 로직 생성 옵션과는 성격이 좀 다른 액세서리에 가깝다. 그렇기도 하니 이건 마법사의 별도의 단계로 분리해 버렸다.

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

복합 낱자 입력 로직 생성기가 쓰라는 의도로, "오토마타에 '0번 상태에서 모든 실패 상황을 처리"라는 옵션을 추가했다.
정상적인 한글 입력에 따른 상태 분기와는 달리, 실패 상황의 상태 분기 방식은 지금 오토마타 상태와 무관하게 언제나 동일한 경우가 많다. T가 3이면 -12, T가 4이면 -1 이렇게 T라든가 I~K의 값에 따라 달라질 뿐, 성공 상황처럼 매번 처리 방식이 들쭉날쭉해지는 건 매우 드물다.

이 점에서 착안하여, T==3 ? -12 : T==4 ? -1: 0 같은 수식은 초기 상태에서 A ? 1: B ? 2: C: 3 : (!!) 다음에 한 번만 추가하면 모든 오토마타 상태에서 동작하게 했다.

  • 8.8: 복합 낱자 입력 로직 생성기 첫 도입
  • 8.9: 그 기능에다 '한글 허용 범위 제약' 기능 연계 추가
  • 9.0: '한글 허용 범위 제약' 연계 기능에다가 '오토마타'와의 연계를 또 추가. 이제 진짜 끝?

2. 그 밖에 복합 낱자 입력 로직 생성기의 사소한 개선 사항

  • '낱자 최적화' 알고리즘이 좀 더 개선되어서 글쇠에 등장하지 않고 쓰이지 않는 낱자 결합 군더더기를 더 잘 걸러내게 했다.
  • 매우 드문 상황이겠지만, 로직 생성 작업이 아무 메시지 없이 깔끔하게 끝났다면 "작업을 완료했습니다"라는 말 한 마디라도 출력해서 사용자가 심리적으로 혼동하지 않게 했다. PC용 세벌식+현대 한글처럼 복잡한 처리가 필요하지 않은 설정에서는 드물게 이런 일이 있을 수 있다.
  • 초성 문맥이 전혀 존재하지 않는 종성 두벌식 날개셋문자를 사용하더라도 초성에 등장하는 것 자체는 가능하니 이를 감안하여 동작하게 했다. 물론 원래 소속이 종성이니 이 낱자들은 초성 '대결합'은 전혀 처리하지 못한다는 걸 사용자가 염두에 둬야 한다.

그리고, 입력 데이터를 검증할 때 현재는 대결합의 결과값이 소결합의 시작과 결과값에 또 등장하는 것을 금지시키고 에러로 처리하는데, 9.0은 여기에 덧붙여 대결합의 결과값이 자신이나 다른 대결합의 과정값에도 등장하지 못하게 조건을 강화했다. ㅂ+ㅅ → ㅄ이 있다고 해서 ㅄ+ㄷ → ㅵ를 줘서는 안 되고 반드시 매번 ㅂ+ㅅ+ㄷ → ㅵ로 해야 한다는 뜻이다. 그렇게 해야 대결합을 실제로 expand할 때 동일 input으로부터 a+b → x와 a+b → y가 동시에 등장하는 식의 논리 오류를 방지할 수 있다.

이런 제약을 가한 대신, ㅂ+ㅅ+ㄷ → ㅵ에서 ㅅ+ㄷ → ㅼ이라는 다른 대결합이 존재하고 ㅼ이 글쇠에 존재해서 한 타 만에 입력 가능한 경우, 이 프로그램이 ㅂ+ㅼ → ㅵ이라는 결합도 자동으로 찾아서 생성하게 했다.

3. 기본 글자판 설정에 두벌식 관련 고급 옵션 추가

날개셋 한글 입력기가 제공하는 빠른설정들 중에 '기본 글자판 설정'은 대중적이고 기본적인 입력 기능만 사용하는 분들이 가장 자주 사용할 만한 빠른설정이다. 처음으로 개발된 이래로 별다른 변화 없이 10년이 넘게 존속해 왔다.

본인은 다른 대화상자들이라면 몰라도 얘만은 프로그램 내부 구조 지향이 아니라 사용자 지향· 사용자 친화적으로 만들려 애썼다. 복잡한 각종 옵션들을 어지럽게 한 화면에 몽땅 노출하지 않고 새끈하게(?) 보이게 하려고 단계별 마법사 UI를 쓸까 생각도 했다. 대화상자를 보면 좀 마법사 UI처럼 생겼지 않는가?

그런데 실제로 개발을 해 보니 기본 글자판 설정이란 게 굳이 몇 단계짜리 마법사까지 동원할 정도로 구조가 복잡하지는 않아서 '다음' 단계 대신 그냥 '고급' 버튼만 넣는 걸로 퉁쳤다.
마법사 UI는 먼 훗날에 '복합 낱자 입력 로직 생성기' 빠른설정이 대신 찜했다. '기본 글자판 설정'보다 기능이 훨씬 더 많고 복잡하니 처음에 3단계 마법사로 시작했고 이번 9.0부터는 4단계로 더 늘었다.

이런 사정을 거쳐, 기본 글자판 설정엔 현재까지 '고급' 옵션이라는 게 세벌식 자판과 관련된 것 네 종류만 있었다. 그러나 이제는 표준 두벌식을 골랐을 때도 '고급' 옵션을 사용할 수 있으며, 여기에는 두벌식에만 적용되는 고유한 고급 옵션이 몇 가지 들어갔다.

사용자 삽입 이미지

먼저, '자음의 처리 방식'이다. '초성과 종성 따로'는 일반적인 동작 방식이고, '초성 지향'은 '날 - 나라' 대신 '나ㄹ - 날'이 되는 동작을 말한다. '종성 지향'은 초성도 일단 종성 문맥으로 입력되었다가 나중에 중성을 받았을 때에야 초성으로 바뀌는 동작이다.

기술적으로야 초성 지향은 '고급 입력기'의 옵션을 사용해서 동작하고 종성 지향은 '종성 두벌식'이라는 별도의 날개셋문자를 사용해서 동작한다. 구현 방식이 서로 완전히 다르지만 이 빠른설정에서는 한데 선택할 수 있다는 것에 의의가 있다.

그리고 표준 두벌식은 오로지 알파벳 26개 자리에만 한글 글쇠가 있고 숫자와 기호를 사용하지 않는다는 특성상, 숫자와 기호는 굳이 입력기가 가로채지 않고 응용 프로그램으로 보내도록 하는 옵션을 빠른설정에서 곧장 선택할 수 있게 했다.

이로써 두벌식과 세벌식 모두 빠른설정에서 오로지 자신만의 고유한 고급 옵션을 갖게 됐다. 단지 세벌식의 고급 옵션들은 3.x 완전 초창기 때부터 존재했지만, 두벌식의 고급 옵션들은 다 6~7.x에 가서야 도입됐고 빠른설정에 반영은 훨씬 늦었다는 것이 차이점이다.

4. 토씨 자동 교정

한글 입력과 직접적인 관계가 있지 않고 평생 다시 볼 일이 없을 거라고 생각했는데, 토씨 자동 교정 알고리즘을 우연한 계기로 재검토해서 정확도를 조금 올렸다.

토씨 자동 교정 기능은 동작이 은근히 복잡하다. 은/는, 을/를, 과/와 같은 거야 아주 쉬운 케이스이다. 그러나 (으)로는 유일하게 ㄹ 받침도 무받침과 동급으로 간주해야 한다는 예외가 있으며, '이'는 처리하기가 훨씬 더 어렵다. '이나마, 이랑, 이라'처럼 받침 유무에 따라 '이'를 넣거나 생략해야 하는 것들이 많기 때문이다. '이다'의 경우는 받침이 없더라도 반드시 생략할 필요는 없다.

이것들부터 먼저 검토한 뒤, 한글이 또 등장하지 않아서 명백하게 주/보격 조사인 '이'에 한해서 '이/가' 처리를 해야 한다. 하긴 중세 국어에서는 조사 '가'가 없었다고 하더라만..
'이'만 처리가 이렇게 복잡한 이유는 한국어의 매우 독특한 단어 '이다'의 정체성과 밀접한 관계가 있다.

한국어의 어절(띄어 쓰는 단위)에서 관형어나 부사· 감탄사, 기능어 등등 잡다한 거 빼고 내용어를 구성하는 것은
딱 (1) '체언+조사' 계열, 아니면 활용을 하는 (2) '용언+어미'라는 두 계열로 나뉜다.
그런데 '이다'라는 단어는 정말 요물이다. 얘는 문법적으로 무엇으로 분류해야 할지 쟁쟁한 국어학자 문법학자들 사이에서도 의견이 오랫동안 일치하지 않았다.

마치 영어에서 be 동사가 여느 다른 동사들과는 문법적으로 다르게 취급되는 동사이듯, 쟤도 평범한 용언은 아니다.
오늘날 표준 국어 대사전 + 학교 문법에서는 '이다'를 서술격조사로 본다. '이었다' 등 영락없이 용언처럼 생긴 물건이 조사라니.

그래서 '이니', '이고', '이면'처럼 '이다'의 활용형도 다 별개의 접속조사이고, 일단 사전에 일일이 단독으로 등재돼 있다.
이것도 많은 고민 끝에 내린 결론이겠지만 이게 합리적인 결정이라고 볼 수 있는지는 모르겠다.
하긴, '귀신이다', '불이야'처럼 체언에 잘도 척척 달라붙는 동사나 형용사가 다른 예가 없긴 하다. (공부하다 이런 건 논외. 그때의 '-하다'는 접사임.)

체언과 용언을 파동과 입자에다 비유하자면, '이다'는 진짜 빛처럼 두 성질을 모두 지닌 이상한 물건이다.
그리고 이 '-이' 때문에 '찾기/바꾸기'에서 한글 토씨 자동 교정 기능도 구현하기 꽤 복잡하고 어려워져 있다.

끝으로, '야'의 경우 호격조사 '아' 또는 보조사 '이야'가 모두 가능한데, 이것은 용례 domain이 겹치기 때문에 글자만 보고 구분하기가 불가능하다. 토씨 자동 교정 알고리즘의 구조적인 한계가 될 수밖에 없는 점이다.

5. 기타 사소한 것들

(1) 도움말 부록의 자음 참조표에서 ㅁㅂㅅ의 순서가 잘못 기재되었던 오타를 지적해 주신 분이 있어서 고쳤다. 78이 빠지고 79가 두 번 들어가 있었다. 이 오타는 굉장히 오랫동안 발견되지 않고 지금까지 잘도 숨어 있었다. 오죽했으면 5년 전, 2012년에 발행된 본인의 석사 학위논문의 부록에도 동일한 오타가 그대로 들어갔다!

(2) 편집기에는 프로그램의 중복 실행이 감지된 경우 인스턴스를 또 생성하지 않고 기존 인스턴스에다 새 문서창을 열게 하는 기능이 있다. 그런데 기존 인스턴스가 어떤 이유로 인해 응답이 없고 뻗은 상태라면 그 옵션이 지정되어 있더라도 예외로 그냥 새 인스턴스에서 실행되게 하여 동작에 융통성을 더했다.

(3) 날개셋 편집기를 비롯해 내 프로그램이 내부에서 자체적으로 사용하는 빨랫줄 모양 옛한글 비트맵 글꼴의 중성 자형을 일부 수정했다. 그래서 ㅣㅛ, ㅓㅛ, ㅕㅗ 등, ㅗ/ㅛ가 포함돼 있는 겹모음들이 위의 초성과 더 잘 포개져서 조화롭게 보이게 했다.

(4) 두벌식 옛한글의 Shift+H(ㅗ) 자리에 지금까지 ㅗㅜ가 배당돼 있던 것을 ㅗㅗ로 변경했다. 기왕 내 프로그램은 Shift 자리에는 다른 자모와 겹치지 않는 한 아랫자리에 있는 낱자의 double(쌍) 버전을 넣는 것으로 컨셉을 잡았으니 저렇게 하는 게 더 일관성이 있을 것 같다. 아래아한글의 영향을 받아서 내 프로그램도 까마득한 2.x 옛날 버전부터 ㅗㅜ이긴 했는데, 그냥 breaking change(하위 호환성이 깨지는 단절적인 변화)를 만들었다.
ㅜ와 ㅡ도 double 버전이 있긴 하지만 쟤들은 Shift 자리에 다른 글쇠가 정해져 있기 때문에 double 버전을 넣을 수 없다. 두벌식은 옛한글 배열이라 해도 숫자· 기호 자리를 침범하지 않는 게 일종의 불문율이긴 하다.

Posted by 사무엘

2017/05/16 08:31 2017/05/16 08:31
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1360

일본 생각

1. 첫인상

우리나라의 바다 건너 이웃에 있는 일본이라는 나라는 예로부터 가깝고도 먼 이웃이라고 불리고 있다. 무작정 좋아할 수도 미워할 수도 없고, 존재감을 무시할 수도 없는 그런 복잡한 나라이다. 정치적으로 하도 민감한 주제이다 보니 "일본은 없다" "일본은 있다" 이런 책이 나온 것도 벌써 20년 가까이 전의 일이다. 본인이 블로그에서 이 나라 자체에 대해서 심층 취재를 하는 건 이번이 처음인 것 같다.

그럼 비정치적인 얘기부터 가볍고 부담 없게 먼저 시작하겠다. 본인은 일본이라 하면 떠오르는 건 다음과 같은 것들이다. (무순)

  • 벚꽃이 만발한 오사카 성
  • 후지 산 아래로 달리는 신칸센
  • 지멘스 옥타브를 울리면서 달리는 게이큐 쾌특 전철
  • 앞발 들고 있는 복고양이
  • 게다짝, 기모노, 일본도, 정수리를 민 그 특이한 헤어스타일의 사무라이 (조선 선비들은 머리를 기르는 편이었는데 여기는 정반대)
  • 어두운 복장에 표창 던지는 닌자 (뭐, 후대에 만들어진 컨셉에 가까우며, 정작 옛날에 일본엔 저런 차림의 자객이 없었다고 하던데)
  • 스시, 일본 돈까스와 라멘, 심야식당
  • 학교 수영복 (저기에는 공립 학교에 수영장도 있으니)
  • 도라에몽, 슈퍼마리오, 짱구는 못 말려, 드래곤볼 캐릭터와 그와 비슷한 화풍의 일본 애니들
  • 개그만화 보기 좋은 날, 킬 빌, 자토이치 같은 평범하거나 병맛· 개그스러운 영상물. 토스트 소녀-_- 게임
  • 파이널 판타지 같은 너무 심오하고 도무지 배경이고 스토리고 설정을 이해할 수 없는 안드로메다 영상물
  • 감각의 제국, 쇼군의 사디즘 같은 개막장 영상물

사용자 삽입 이미지

사용자 삽입 이미지

참고로 난 일본에 한 번도 가 본 적 없고, 일본어는 열차 안내방송 외운 것밖에 모른다. 글자만이라도 작정하고 읽는 법을 틈틈이 외워 놓고 싶지만, 잘 안 된다.

하긴, 작년에 브라질 올림픽 폐막식 때 그 유명한 2020 도쿄 올림픽 홍보 영상이 상영되었는데 그거 정말 강렬했다. 반도에서 병맛스러운 김치 전사 내지 허접한 평창 동계 올림픽 홍보 영상이나 만들던 동안, 재패니메이션의 원조인 저 동네에서는 제한된 시간 동안 자기 나라의 발전된 면모를 저렇게 쭉 소개하면서 아베 총리까지 슈퍼마리오로 변장시켜서 찬조 출연시켰다니.. 쟤네들의 저력이 놀랍다는 생각이 들었다.

2. 교통

일본은 근대화 산업화가 아시아에서 가장 앞섰으며 경제, 산업, 과학· 기술, 예능 등 거의 모든 분야가 우리나라보다 훨씬 앞서 있고, 현대 사회의 각종 시행착오들도 먼저 겪은 선진국이다. 그 중 교통 분야만 살펴보더라도, 일본은 세계구급 자동차 제조사를 보유한 자동차 왕국인 동시에 신칸센 고속철까지 개발한 철도 왕국이다.

그런데 얘들은 자동차와 철도뿐만 아니라 '자전거 왕국'이기도 하다. 우리나라에서 이륜차는 보행자와 자동차 사이에 껴서 만년 콩나물 신세를 면치 못하는 중인 반면, 일본은 이륜차를 더 많이 볼 수 있으며 도로나 주차 시설이 자전거를 더욱 배려하는 형태로 갖춰져 있다.

이건 일면 수긍이 가는 얘기이다. 일본은 우리나라보다 훨씬 더 소득 높고 잘 사는 국력· 경제력에 '비해서' 서민이 자동차 굴리기는 훨씬 더 힘들게 돼 있다. 고배기량에 덩치 큰 차는 더욱 제약이 심하다. 우리나라는 법적으로 배려와 혜택을 받는 경차의 배기량이 1000cc 이하로 정해져 있지만 저기는 800도 아니고 겨우 660cc이다. 그것도 21세기에..;; 일본도 한국 만만찮게 산과 험지가 많은 동네인데 저건 세계 자동차들 평균 덩치를 생각해도 너무 가혹한 제약이 아닌가 싶다.

또한 저기는 불법주차 단속이 이곳 반도보다 넘사벽급으로 더 자비심이 없으며, 애초에 1960년대에 마이카 시대가 시작되던 시절부터 차고지 증명제가 딱 시행되어 잘 정착된 걸로 유명하다. 차고든 유료 공영 주차장이든 주차 공간이 법적으로 확보돼 있지 않으면 자가용 구입을 아예 못 한다.
마치 컴퓨터에서 하드웨어뿐만 아니라 소프트웨어도 돈 주고 사야 하며, 눈에 보이는 원자재뿐만 아니라 무형의 기술 지원과 서비스에도 비용을 지불해야 하듯.. 차를 샀으면 굴리는 것뿐만 아니라 세워 놓는 공간을 확보하는 것에도 주거비만큼이나 돈이 든다는 관념이 박힌 것이다.

우리나라야 지금처럼 건물과 주차장들이 완공돼 버린 와중에 차고지 증명제를 도입하기에는 대략 곤란한 지경이 됐다. 자동차의 판매 실적에 부정적인 영향을 주는 정책이니 자동차 회사 영업 사원들이 절대 가만히 있지 않을 것이다. 미국으로 치면 총기 규제 정책 vs 총기 제작사들의 로비와도 얼추 비슷한 구도처럼 됐다.
할 거면 1980년대에부터 했어야지. 옛날 석유 파동 때 외화 아끼려고 차량의 배기량과 엔진 기통수에다는 온갖 규제를 걸었으면서, 정작 차고지 확보 관련 규제는 시행을 왜 안 했나 모르겠다.

우리나라가 전기는 1970년대부터 승압을 잘 끝낸 반면에 자동차 쪽으로는 정치인들이 상대적으로 선견지명 안목이 없었던 셈이다. 반대로 일본은 철도 궤간과 전기 규격은 낭패 봤지만 자동차 주차 문화는 잘 정착시킨 경우에 속한다.

아무튼 일본은 경제력 대비 한국이나 미국보다 차 굴리기가 더 비싸고 빡센 나라이다.
그럼 자가용 말고 대중교통은? 대도시엔 물론 잘 구축돼 있고 속도 빠르고 정시성도 높다.

일본은 철도 왕국이라고 해서 우리나라처럼 지하철 역마다 온통 스크린도어들이 갖춰져 있지는 않다. 허나, 누군가가 선로에 투신 자살이라도 하면 고인이 불특정 다수에게 심한 민폐를 끼쳤다고 국가에서 유족에게 도리어 벌금을 매긴다. "자살을 하게 만든 사회 탓 국가 탓? 힐링힐링?" 그런 거 없다.
과거에 중국에서는 총살형을 집행하고 나서 총알값을 사형수 유족에게서 받아 챙기기까지 했는데, 마치 그와 비슷한 급으로 잔인하다면 잔인한 조치 같기도 하다.

허나 일본은 국민성이 민폐 끼치는 걸 극도로 싫어하는 성향이며, 거기는 철도 업계가 분초 단위로 열차 정시성에 목숨을 걸고 기관사까지 죽도록 갈구고 압박하는 곳이다. 평범한 전철도 몇 분 지연되면 역 직원들이 지연 증명서를 알아서 뿌리면서 승객들에게 너무 죄송하다고 굽신거린다. 그런 와중에 누가 자살해서 열차가 줄줄이 지연을 먹었다면 이거 얼마나 큰 민폐이고 피해인지 수긍할 수 있을 것이다.

지난 2005년 4월에 JR서일본 관할의 후쿠치야마 선에서 전철이 과속 탈선 사고가 나서 기관사 포함 107명이나 되는 사람이 죽었는데, JR서일본에서는 그로부터 무려 12년이 지난 오늘날까지도 홈페이지 첫 화면에 그 날 사고에 대한 사과문을 게재해 놓고 있다. 그걸 두고두고 곱씹으면서 다시는 그런 사고를 내지 않겠다고 다짐한다.
이런 게 정상적인 추모이고 이성적인 재발 방지 다짐이다. 그에 반해 우리나라의 세월호 노란 리본 타령은 가해자 당사자의 사죄도 아니고 시스템적인 안전 개선과도 상관 없이 그저 감성팔이 반정부 광기 폭동일 뿐이었다.

아무튼.. 이렇게 일본의 대중교통은 서비스 좋고 시간 관념도 투철하고 다 좋은데.. 비싸다.
우리나라 식 운임과 임률을 생각했다가는 놀라서 턱 빠질 거다. 정말 왕창 비싸며, 사철 간에 통합 환승 할인 같은 것도 없다. 하물며 장거리 간선인 신칸센 운임은 국내선 비행기보다도 더 비쌀 정도이다.

그러니 일본이 비록 중국이나 베트남 같은 나라는 아니겠지만 미국 같은 나라도 아니니, 가까운 거리는 그냥 걷거나 자전거 타는 문화가 형성될 수밖에 없다.
북한만 그런 줄 알았는데 일본도 자전거는 등록하고 번호를 받아야 될 정도라고 한다. 굉장히 뜻밖이다. 물론 북한처럼 주민들을 억압하고 통제하기 위해서가 아니라 적극적인 질서 유지가 필요할 정도로 자전거가 많이 돌아다니기 때문이다.

저기서는 학생들, 특히 여자애들도 등하교나 알바 하러 출퇴근 할 때 자전거 많이 타는 거 같다.
어쩐지 일본의 사건사고 같은 이야기들을 봐도 가해자나 피해자들이 그 당시나 직전에 자전거 탔다는 얘기가 많이 나온다. 극단적인 예로는 콘크리트 살인 사건(1989)에서도 그렇다.
또한 철권 시리즈에 나오는 '카자마 아스카'자전거 끌고 다니는 여고생 컨셉이다.
이제야 그 바닥 문화가 좀 이해가 되고 퍼즐 조각이 짜맞춰지는 것 같다.

사용자 삽입 이미지

3. 권위주의

그럼 이제 민감한 주제들에 대한 본인의 생각을 조금씩 논해 보겠다.
일본에는 덴노라는 국가 상징 겸 정치· 종교 복합체 중심 구심점이 있으며, 여기 한국보다 뭔가 전체주의스러운 분위기가 더 강하다. 일제의 패망 후에야 덴노가 인간 선언을 하고 젊은 세대들이 많이 자유분방 개인주의스러워졌지만, 과거에는 그렇지 않았다.

이런 영향 때문인지 일본의 다른 분야는 몰라도 정치계나 법조계는 오늘날까지도 우리나라보다 권위주의가 훨씬 더 심하고 경직돼 있다. 실수나 잘못· 착오가 생겨도, 누굴 억울하게 누명 씌워서 몇십 년 옥살이 시키고 나서도 그걸 시인해서 직접적인 표현으로 사죄 따위는 거의 안 하다시피한다. 잘못을 순순히 인정하면 자기 권위와 위신이 깎인다고 생각한다. '엔자이'(원죄) 사건이라고 검색해 보면 이런 예가 여럿 나온다.

사고방식이 원래부터 저렇고 '자국민'한테조차 저러는데, 하물며 쟤들이 자기보다 (엄밀히 말해) 국력이 딸리는 외국을 상대로 위안부 피해 문제 같은 거는 절대로 대놓고 사죄할 일은 없다고 봐야 한다. 오히려 지금까지 이만치 간접적으로나마 유감 표현했고 돈 이만치 줬고, 이 주제 얘기 더 안 꺼내기로 지도자들끼리 서로 퉁쳤으면 나름 "걔네 입장"에서는 많이 양보하고 챙겨 준 것에 가깝다. -_-;;

뭐, 일본이 저 따구로 나오는 건 이스라엘 앞에서 가히 '도게자' 급으로 굽신굽신 사죄하는 독일과는 참 비교되는 모습이며 본인이라고 해서 보기 좋을 리 없다. 그럼 쟤네들은 원래 저런 놈들인가 보다 하고 우리로서는 과학 기술과 경제와 힘으로 극일을 이루는 것밖에 현실적인 답이 없다. 그 신사적인 독일조차도 이스라엘 급의 국력과 국제 위상이 있는 나라 앞에서나 굽신굽신이지, 다른 듣보잡 소수 민족이 나치에게 피해를 입은 건 상대적으로 모르쇠인 걸로 비판받는 건 변함없다.

이런 넓은 맥락에서의 이해 없이 그저 소녀상에다 반일 반일거리고, 일본하고는 뭘 하고 오든지간에 무조건 굴욕 매국 협상이라고 헛소리 하는 애들.. 정말 지겹다. 백 날 그렇게 설쳐 봐라, 일본의 태도가 바뀌는 게 있겠나?
그리고 또 내가 늘 하는 말이지만 북괴와 중국한테 그만치 부당하게 당해 온 걸 반의 반만치라도 따지고서 일본에 집착하는 거라면 또 내가 말도 안 한다. 북괴 김 정은이 6· 25 전쟁이나 연평도 포격에 대해서 남조선을 향해 사죄를 할 것 같아 보이냐? 그와 똑같은 맥락이다.

4. 그나마 중국· 북한보다는 더 가까이해야 할 대상

동북아시아 한중일 CJK 국가들을 생각해 보면..
우리로서는 일본은 비교적 가까운 과거사의 앙금 트라우마 때문에, 중국은 지금 당장 국가 프레임과 이념 차이 때문에 현실에서는 서로 마냥 손잡고 친하게 뭉치기가 불가능에 가까운 게 사실이다.

북괴? 걔들은 국가 프레임· 이념 차이를 넘어서 그냥 묻지 마 남조선을 체제 전복+적화시키려고 눈에 시뻘겋게 불 켠 쌩 양아치에 광신도+노예 집단일 뿐이고. 통상적인 경제력 군사력으로는 그걸 이룰 수 없으니 역사왜곡, 간첩질, 사이버전 선동질 등 방법도 갈수록 교묘하고 추잡해지고 있다.

통일 후에도 김돼지 동상이랑 주체사상 같이 껴안고 살 게 아니라면, 화해네 경제 협력이네 하는 개수작에 절대 응하지 말고 그냥 왕따 고립만이 답이고 진리이다. 굳이 먼저 북폭 하고 쳐들어갈 필요도 없으니, 굶겨 죽이기만 하면 된다.
일부 미사일 발사체 기술이나 소프트웨어 기술이 우리보다 앞서 있을지는 모르겠지만, 그런 예외를 빼면 배울 것 선한 것이라곤 아무것도 없다.

이런 현실 속에서 동북아 이웃 나라들 중에 남조선이 제일 가깝고 친하게 지내야 하는 상대는.. 나도 인정하고 싶지 않지만 일본이다.
그리고 제일 본받고 배워야 할 상대를 꼽자면 그건 친하게 지낼 대상보다도 더욱 단호하게 일본이다.

물론 구 일본군의 흉악한 전쟁 범죄라든가 그 스타일의 병신 같은 조직 문화와 똥군기 따위를 본받자는 얘기는 아니다. 하지만 걔네들은 그런 지랄맞은 시스템 하에서도, 우리의 입장에서는 척결해야 할 소위 '일제 잔재'라는 것들의 본거지임에도 불구하고, 그리고 내 관심 분야도 보태자면 한자 같은 불편한 문자를 쓰고도 어쨌든 근대화를 이루고 과학 기술 강국 선진국이 됐다는 점이 중요하다. 우리가 그렇게도 컴플랙스를 갖고 있는 과학 분야 노벨 상도 도대체 몇 개를 탔냐 말이다.

일본이 겉으로는 화해 유감 사죄 운운하면서 한편으로는 윗선에서는 모르는 척 망언 씨부리고 독도는 일본땅이다 교육을 해?
괘씸하긴 하지만 그렇게까지 걱정은 안 해도 된다. 그래 봤자 군사적으로 같은 친미 동맹이고 동일한 자유 진영 이념 프레임을 공유하는 국가끼리 대놓고 군사 충돌이 일어날 확률은 중국· 북한보다야 훨씬 낮다.

저 정도 앙금과 마찰이 있으면 우리도 겉으로는 웃으면서 얻어낼 거 얻어내면서 한편으로는 "일부" 극렬 민간단체를 모르는 척 묵인하면서 소녀상 한두 개쯤 놓고 시위든 하면서 맞불 놓으면 된다.
딱 그 정도까지만. 그건 나도 전략상 인정한다. 뭐 아무 티 안 내고 묵묵히 실력만으로.. 현대차· 삼성 전자가 일본 기업들 쳐발랐던 것 같은 방식으로 일본 이기는 게 제일 좋고 이상적이겠지만, 그럴 수만은 없고 현실에서는 감정상의 카타르시스도 약간은 필요하지.

필요 이상으로 반일 반일 거리는 애들이 진짜로 애국심? 민족 정기? 그런 순진한 이유로 일본 비판하는 경우는 생각보다 매우 드물다. 오로지 자국 비하와 북괴의 범죄 물타기라는 매우 불순한 목적인 경우가 훨씬 더 많다. 이런 비굴한 사고방식으로 일제의 식민사관 내지 조센징 엽전 비하는 어째 비판하고, 무장 항일 독립투사는 어째 칭송할 수 있는지 내 판단력으로는 이해가 안 된다.

전국 방방곡곡에 무슨 몇백 개씩 소녀상 세우자고 유세를 떨거나, 특히 아직까지도 우리나라가 친일 청산을 못 했네 웃기는 소리 하는 애들은 우리나라에 발을 못 붙이게 해야 된다. 누구 때문에 왜 친일 부역자 군경을 활용해야 했는지만이라도 정확하게 가르치면 아무 문제될 거 없고 거짓을 팩트로 격퇴할 수 있다.

지금으로부터 15~20년 전부터 본인을 봐 온 분들은 잘 알 거다. 난 예나 지금이나 주된 연구 개발 분야가 한글 입력이고, 전통적으로 얼마나 열혈 반일 민족주의자였는지를 말이다.
그랬는데 내가 이렇게 돌아섰을 정도면, 저쪽에 있는 애들이 정말 일관성 없고 주적 구분을 못 하고 필요악과 절대악을 분간 못 하는 거다. 나이가 들수록 "어 저건 아닌데..;; 왜 중국 북한에다가는 단 한 마디도 말이 없지?" 하는 거부감이 들면서 갈라서게 됐다. 요즘 같은 시대에 누구든 일본에 대한 바른 인식이 필요해 보인다.

Posted by 사무엘

2017/05/13 08:34 2017/05/13 08:34
, , , , ,
Response
No Trackback , 7 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1359

* 3년 전에 썼던 글을 내용을 보충하여 리메이크 한 것이다.

Windows 운영체제에서 생성하는 윈도우들은 그 본질이 크게 overlapped, popup, 그리고 child 이렇게 셋으로 나뉜다. 이해를 돕기 위해 아래의 Windows 1.0 사진을 한번 살펴보도록 하자. 그때는 이 세 종류의 구분이 지금보다 훨씬 더 명확했기 때문이다.

사용자 삽입 이미지

1. overlapped

1985년에 발표된 Windows 1.0 첫 버전은 기술적인 한계 때문..은 아니고, 애플 사와의 이상한 특허 분쟁에 얽히는 바람에 응용 프로그램 창들이 서로 겹치지를 못하고 타일 형태의 배치만 가능한 정말 괴상한 형태로 개발되었던 걸로 유명하다.
그러다 Windows 2.0에서는 타일 제약 봉인이 풀렸기 때문에 이 윈도우들은 겹쳐지는 게 가능해졌으며 Z-order라는 개념도 생겼다. 그게 워낙 뜻깊은 일이었던지라 명칭에까지 OVERLAPPED가 붙은 것이다.

그리고 저렇게, 타일 형태의 배치가 가능한 응용 프로그램의 최상단 껍데기 윈도우가 바로 오늘날의 개념으로 치면 overlapped 윈도우이다. 캡션이라고 불리는 제목 표시줄이 달려 있고 크기가 언제든지 유동적으로 바뀔 수 있으며, CreateWindow(Ex) 함수에다 위치와 크기를 지정할 때 CW_USEDEFAULT(대충 적당히 알아서)를 줄 수 있는 유일한 타입의 윈도우이다.

사실, WS_OVERLAPPED의 값은 그냥 0이다. popup이나 child 같은 속성이 따로 지정되지 않은 윈도우는 기본적으로 overlapped 속성이 지정된다. 여기에다가 최소화/최대화(WS_M??MIZEBOX)/닫기(시스템 메뉴 WS_SYSMENU) 버튼, 크기 조절 가능한 굵은 껍데기(WS_THICKBORDER) 비트들이 합쳐진 것이 바로 WS_OVERLAPPEDWINDOW 스타일이다.

2. popup

그럼 popup은 무엇이냐 하면 저 위의 About 대화상자처럼, overlapped window의 위에 겹쳐져서 배치될 수 있는 윈도우이다.
그런데 당장 Windows 2.0부터 오버랩은 말 그대로 overlapped window에서도 다 가능해졌으니, 둘의 실질적인 차이가 없어졌다고 볼 수도 있다. 하지만 둘은 여전히 완전히 동일하지는 않다.

popup 윈도우는 기본적으로 캡션이 없는 형태이며, WS_CAPTION 같은 별도의 옵션을 줘야만 캡션이 달린다. 그러나 overlapped 윈도우는 옵션을 주지 않아도 캡션이 무조건 달려 나온다. Windows 2~3 시절까지만 해도 응용 프로그램에서 캡션이 없고 제목이 없는 대화상자는 지금보다 훨씬 더 흔하게 볼 수 있었다.

지금은 대화상자들도 다 캡션이 달려 있으며 일반적인 응용 프로그램처럼 아이콘에다 최소· 최대화 버튼과 두꺼운 프레임까지 별도로 스타일로 주고 나면.. popup 형태의 대화상자 프로그램과, overlapped 형태의 일반 프로그램 창과 외형상의 구분은 사실상 다 사라지는 건 사실이다.

그럼에도 불구하고 popup과 overlapped의 구분이 원래 저런 데서 시작되었다는 것을 알면 되겠다. 다른 창의 내부에 종속되지 않고 독자적으로 화면에 떠 있으면서 캡션 같은 외형이 없거나 취사선택 가능한 모든 custom 윈도우라면, 묻지도 따지지도 말고 그냥 WS_POPUP을 주면 된다.

대화상자 리소스 편집기에서도 이 대화상자의 초기 스타일을 지정해 줄 수 있다. 프로퍼티 페이지처럼 다른 대화상자의 내부에 들어가는 대화상자이면 WS_CHILD를 주면 되고, 나머지 경우에는 WS_OVERLAPPED는 신경 쓸 필요 없고 그냥 WS_POPUP을 지정하면 된다.
여담이지만, 인터넷을 하면서 수시로 튀어나오는 웹브라우저 팝업창은 명칭과는 달리 사실은 overlapped 윈도우라고 생각하면 된다. 팝업창에도 웹브라우저 창 고유의 캡션과 프레임은 그대로 남아 있기 때문에 overlapped 윈도우의 정의에 훨씬 더 부합하는 걸 알 수 있다.

3. child

끝으로, WS_CHILD는 동작 방식이 위의 둘과는 굉장히 다르니 이해하기 쉽다.
자기의 위상이 독자적이지 않고 외형상 부모 윈도우의 내부에 종속된 모든 윈도우들은 child 윈도우이다. 대화상자의 내부 컨트롤들이 대표적인 예임.

얘는 컨트롤 ID라는 정보도 갖는다. HWND는 운영체제가 창들을 식별하기 위해 부여하는 가변적인 번호인 반면, ID는 창을 생성하는(= 운영체제에다 생성을 요청하는) 주체 측에서 고정붙박이로 부여하는 번호라는 차이가 있다. GetDlgItem은 이름처럼 굳이 대화상자의 자식 컨트롤뿐만 아니라 부모-자식 관계를 갖는 아무 윈도우에서나 ID값으로부터 자식 창을 얻을 때 사용 가능하다.

popup이나 overlapped 윈도우에는 저런 ID라는 개념이 존재하지 않으며, 그 대신 메뉴를 표시하는 기능이 있다.
뭐, child 윈도우도 비록 메뉴는 태생적으로 없을지언정 마치 overlapped 윈도우처럼 캡션과 프레임, 그리고 시스템 메뉴를 갖는 건 불가능하지 않다. 그 대표적인 예는 MDI 프레임 윈도우이긴 한데.. 그래도 그걸 빼면 캡션과 프레임을 갖춘 child 윈도우는 매우 드물다. 캡션과 프레임 자체가 최상위 윈도우의 상징과도 같으니 말이다.

이렇게 보면 overlapped와 popup이 한 묶음이고, 성격이 다른 child가 혼자 좀 따로 노는 것처럼 보인다. 하지만 동일한 클래스의 윈도우가 상황에 따라서 popup과 child 속성을 취사선택해서 동작하는 경우도 의외로 있다. 콤보 박스에서 내부적으로 쓰이는 ComboLBox라는 리스트 박스가 대표적인 예이다.

콤보 박스의 타입이 Simple이어서(대표적인 예는 글꼴 선택 대화상자) 리스트가 언제나 표시되어 보일 때는 얘는 콤보 박스에 딸려 있는 child 윈도우이다.
그러나 콤보 박스를 클릭하거나 F4를 눌렀을 때만 리스트가 표시되는 drop list 상태일 때는 그 리스트는 대화상자의 위에 별도로 표시되는 popup 윈도우 형태로 생성된다. 이해가 되시겠는가?

차일드 윈도우의 표시 위치는 자기 부모 윈도우의 클라이언트 위치를 기준으로 상대적으로 산정된다. 그런데 자기가 현재 부모 윈도우의 클라이언트 위치 기준으로 어디에 있는지를 한 번에 얻는 게 은근히 힘들다. 대화상자 크기에 따라 차일드 컨트롤들을 적절하게 재배치하는 코드를 작성해 보았다면 이 말이 무슨 뜻인지 잘 알 것이다.

이 경우 GetWindowRect를 한 후에 부모 윈도우를 기준으로 ScreenToClient를 하여 화면 좌표를 한번 거쳐야 하거나, 아니면 번거로운 구조체 초기화를 해야 하는 GetWindowPlacement 함수를 호출해야 한다. 후자 함수의 경우, 최대화된 윈도우라도 원래 있던 위치와 크기까지.. 그 윈도우의 위치와 관련된 모든 정보를 되돌려 주기 때문에 유용하다. 응용 프로그램이 종료 후 나중에 재실행될 때 원래 위치를 100% 그대로 실행되기를 원할 때 이 구조체 값을 백업해 두면 된다.

4. 윈도우 간의 부모/자식 관계

child 윈도우야 그 정의상 태생적으로 부모 자식 관계가 명백하게 존재할 수밖에 없다. 하지만 popup 윈도우도 비록 child처럼 표시되는 위치와 영역이 부모 윈도우 내부로 한정되는 급까지는 아니더라도, 부모 자식 관계 비스무리한 개념이 물론 존재한다.

popup 윈도우는 Z-order상으로 자기 부모 윈도우를 가리고 언제나 더 앞에 출력되며, 부모 윈도우가 소멸될 때 자기도 같이 없어진다. 요렇게 child가 아닌 popup 윈도우의 부모 역할을 하는 윈도우를 개념상으로 owner 윈도우라고 따로 부르기도 한다.

그럼 popup 말고 overlapped 윈도우는? 지금까지 살펴보았듯이 쟤는 애초에 주 용도가 응용 프로그램의 최상단 프레임 껍데기이다. 그러니 태생적으로 부모 윈도우 같은 걸 지정하지 않고 생성되며 부모 자식 관계를 따지는 건 딱히 의미가 없다고 봐야 할 것이다.

그런데, 여기서 유의해야 할 점이 있다. EnumChildWindow나 GetWindow(GW_CHILD) 함수에서 찾아 주는 건 순수하게 child 윈도우들뿐이다. Spy++를 실행하면 계층 구조로 표시된 윈도우 트리를 볼 수 있는데, 이것도 child 윈도우들의 관계만 볼 수 있다.
쉽게 말해 어떤 대화상자 내부의 대화상자(프로퍼티 페이지)라든가 각종 컨트롤들은 계층 구조로 표시되지만, 대화상자에서 얘를 owner로 삼아서 또 다른 modal 대화상자를 꺼내 놓은것을 계층 구조로 보여주지는 않는다는 뜻이다.

자신을 부모(정확히는 owner)로 갖는 서열상 하위의 popup 윈도우들을 한번에 찾아 주는 API는 의외로 존재하지 않는다. 난 이게 당연히 있을 줄 알았는데 없는 걸 발견하고는 개인적으로 굉장히 놀랐다.
일단 top-level 윈도우들을 다 enumerate 한 뒤, 얘들의 owner가 일치하는 놈을 일일이 뒤져 봐야 한다. 그래서 Spy++가 표시해 준 윈도우 리스트가 생각보다 직관적이지 않고 top-level 윈도우가 많은 것이었구나.

이상이다. Windows 프로그래밍을 15년 가까이나 판 본인도 몇 년 전까지만 해도 child는 그렇다 치더라도 popup과 overlapped는 도대체 왜 존재하는 구분인지를 잘 몰랐다. 그리고 parent 윈도우와 owner 윈도우의 관계도 정확하게 모르고 있었고 owned 윈도우는 child 윈도우 조회하듯이 곧장 조회가 가능하지 않다는 것도 미처 생각을 못 하고 있었다. 그러다가 요 근래에야 어렴풋이 이해하게 된 것들을 이렇게 정리해 보았다.

Posted by 사무엘

2017/05/10 08:35 2017/05/10 08:35
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1358

1. 내로남불 이중잣대

내가 하면 로맨스, 남이 하면 불륜 이중잣대.
이래도 X랄, 저래도 지X. 어떻게 대답을 하든 꼬투리 잡아 불평불만 욕하기.
이건 성경에도 정확하게 묘사되어 있는 호모 사피엔스의 종특이다. 정말 무릎을 치지 않을 수 없다. 나 역시 이런 오류를 범하지 않도록 노력한다.

요한이 와서 먹지도 아니하고 마시지도 아니하매 그들이 말하기를, 그가 마귀 들렸다, 하더니
사람의 아들이 와서 먹고 마시매 그들이 말하기를, 보라, 음식을 탐하는 자요, 포도즙을 많이 마시는 자요, 세리들과 죄인들의 친구로다, 하는도다. ... (마 11:18,19; 눅 7:33,34)

이솝 우화에 아주 비슷한 예가 있다. 나귀를 끌고 가는 부자 이야기 말이다. 아버지와 아들 두 사람이 각각 나귀를 타거나 타지 않는 2*2 = 4가지 경우를 어떻게 조합하건 주변 사람들은 욕을 했다. 이건 뭐 답이 없다.

마녀사냥이 괜히 천하의 개쌍놈 짓이라고 지탄받는 게 아니다. 멀쩡한 여성을 물에 쳐박아 넣었는데 안 죽고 버티면 레알 마녀 괴물이니 화형에 처한다. 꼬르륵 익사해 버렸으면 사람이니 마녀 누명은 벗지만, 당사자는 이미 죽고 없다. 뭘 해도 걸린다. 뭐 이런 식의 논리이니까.. -_-;;
destructive testing을 무슨 양산형 제품 중 하나를 무작위로 추출해서 시행하는 게 아니라 사람한테 시행하는 거다.

“난 이 승만은 보도연맹 학살과 국민방위군 사건 때문에 극혐하지만, 마오 쩌둥은 아무래도 좋고 대약진운동이건 제사해 운동이건 상관 안해요.” 같은 부류도 넓은 의미에서는 이런 범주에 속한다.
김씨 부자는 말할 것도 없고 어지간한 흉악 범죄자, 음주운전 교통사고 가해자, 731 부대장,히틀러나 도조 히데키 같은 전쟁광 인간 쓰레기들 한테도 안 쓸 욕과 저주와 악담을.. 좀 희생과 부작용 감수하고라도 정말 수단과 방법을 가리지 않고 남조선이 적화되지 않게 막은 잘못밖에 없는 자국 초대 대통령에게 도대체 무슨 의도로 퍼붓는지 난 잘 모르겠다.

그 시절에 그 욕 안 쳐먹고 곧이곧대로 신사적으로만 일 추진했으면 그냥 대한민국 간판 내리고 김 일성에게 정권 갖다바치는 수밖에 없었을 것이다.
뭐, 자기도 김 일성 싫어는 한댄다. 그러나 눈빛만 보면 안다. 똑같이 싫어한대도 이 승만을 욕할 때와 같은 혼과 진심은 절대 담겨 있지 않다. 이건 정상적인 분별력과 판단력에서 나온 행동이 아니다. 남조선 일부 대통령의 독재랑 북괴의 독재가 아무 차이가 없다는 망발도 사상에 이상한 데에 지독하게 오염된 중증 정신병이다.

그러니 이 정도면.. 그냥 “난 논리고 팩트고 뭐고 아무 필요 없고 특정 정치인은 그냥 괜히 아무 이유 없이 싫어요”가 차라리 솔직하고 정직하고 양심적인 대답이다. 그건 최소한 거짓말은 아니거든. 그러면 나라도 “아~ 그러세요?” 하면서 그 사람 앞에서는 정치 얘기 더 안 꺼낸다. 취향이야 존중해 줘야지?

그렇게 개인적으로 생각하는 건 얼마든지 자유이고, 심지어 그 주장을 자기 개인 사이버 공간에다 올리는 것 역시 자유다. 단지 그 따위 논리 체계를 갖고서 남의 사이버 공간을 더럽히고 오지랖을 놓는다거나, 남에게 적극적으로 영향을 끼치려고 하지만 않으면 된다. 자기와 생각이 다른 사람을 공격하거나 설득하려고 하지만 않으면 된다. (그리고 더 나아가서는 다른 직업은 몰라도 정치인, 외교관, 법조인, 문과 계열 교사 같은 직업은 안 갖고 살면 된다 -_-;; )

애초에 저런 성향의 사람들은 미국 같은 인권과 민주주의(?)를 요구하면서 자기 나라를 욕하고 비관하지만, 정작 추종하고 모델로 삼고 친해지려는 나라는 북한이나 중국처럼 인권이나 민주 따윈 있지도 않은 나라들이다. 똑같이 외국이고 비슷한 잘못을 저질렀을 때에도 비판하는 잣대가 같지가 않다. 쟤들은 원래 저렇다. 그러니 종북 빨갱이라고 백 날 욕 먹어도 할 말 없다.

2. 악마의 편집, 기레기 기질

그때에 그 제자는 죽지 아니하리라는 이 말씀이 형제들 가운데 널리 퍼졌으나 예수님은 그에게, 그가 죽지 아니하리라, 하지 아니하시고 다만, 내가 올 때까지 그가 머물 것을 내가 원할지라도 그것이 너와 무슨 상관이 있느냐? 하셨더라. (요 21:23)

이것도 완전 대박이다.
본문이 무슨 말이냐 하면, 예수님은 “요한은 설령 순교하지 않는다고 해도 그게 너(베드로)랑은 무슨 상관이니? 오지랖 부리지 마라”라고만, 즉 “안알랴줌” 노코멘트라고 대답을 하셨다. 그런데 그게 곧장 “요한은 순교 안 하고 천수를 누릴 거래!”라는 루머로 변한 채로 커뮤니티에 쫙 퍼졌다.

이게 인간의 심성이다. 다른 예로, 구약의 십일조에 대해서 생각해 보자. 신약에서는 성경에 약속된 보상 자체가 영적인 것이지 물질적인 것이 아니다. 그렇기 때문에 십일조는 그 취지나 정신을 빼면 교리적으로 신약 교회와 무관하긴 한데, 그 얘기를 하면 "어 그럼 아예 헌금을 안 내도 되네, 내 물질 안 바쳐도 되네"처럼 원문이 의도하지 않은 내용까지 자기에게 유리한 쪽으로 슬그머니 넘겨짚는 사람이 꼭 있다.

성경 얘기 말고 더 선정적인 예로는, 15년도 더 전에 우리나라에서는 “결혼하고 나서도 너무 바빠서 자녀계획 같은 거 생각할 겨를이 없네요”라는 인터뷰가 어느 찌라시에서 “최 진실 임신 못 한다”라는 제목으로 한 줄 요약되기도 했다. ㅠㅠㅠㅠ 저건 거짓말은 안 한 건가..?? -_-

그러니 예수님이 다시 이 땅에 온대도 언론은 얼마든지 천하에 죽일놈 개쌍놈으로 조작할 수 있다. 전혀 이상한 일도, 놀랄 일도 아니다. 바라바를 풀어 주고 예수님을 처형하라고 날뛰던 백성들 하나도 욕할 자격 없음. 오늘날까지 괴벨스의 후예들이 워낙 많이 날뛰고 있으니 말이다. 여기에 앞에서 언급한 내로남불 이중잣대 테크닉이 합해지면 삼인성호 같은 건 일도 아니다.

성경을 보면 “카이사르에게 세금을 바치는 것은 옳습니까?”(마 22:17), “간음하다 붙잡힌 이 여인을 어떻게 하는 게 좋을까요?”(요 8:4-5)처럼 겉으로는 평범한 정치· 종교 질문 같지만 결국은 Yes/No 뭐라고 대답하든 앞뒤 문맥 짤라서 사람을 매장하려는 의도가 다분한 불순한 함정 질문도 있다.

그러니, 하물며 “성전 헐고 사흘 만에 재건” 운운은 기레기· 선동꾼들이 앞뒤 문맥 떼어내고 집어물기에 이보다 더 좋을 수 없는 선정적이고 자극적인 떡밥이었다.
원전은 요한복음(요 2:19)에 있는데 사람들이 나중에 써먹는 건 다른 책인 마태복음(마 26:61)에서 나온다는 게 흥미롭다.

3. 극단적인 것, 예외적인 것만 부각시켜서 큰 진실 왜곡

(1) 큰 그림: 남자는 여자보다 힘이 세다.
작은 그림: 그런데 장 미란은 어지간한 남자들보다 훨씬 더 힘이 세다.

(2) 큰 그림: 미국은 한국을 군사적으로 정~말 많이 도와줬고 물자 원조도 하고 고아들도 왕창 많이 받아줬다.
작은 그림: 근래에 주한미군에 그렇게 질 좋은 사람이 오질 않다 보니 윤 금이 살해 사건에, 이태원 살인 사건 같은 범죄가 가끔 발생했다. 장갑차 교통사고 때는 가해자가 실실 쪼개고 앉아 있었다.

(3) 큰 그림: 88 서울 올림픽을 우리 민족의 저력으로 아주 성공적으로 개최했다.
작은 그림: 그런데 개막식 때 성화 점화와 비둘기 날리기가 서로 아귀가 안 맞아서 "세계가 지켜보던" 중에 비둘기 몇 마리가 산 채로 통구이가 돼 버리긴 했다. 그리고 미관에 안 좋다고 동선상의 판잣집들이 강제로 철거당하고 개고기는 더욱 음지화하게 됐다.

(4) 큰 그림: 북괴는 끊임없이 남한에 무력 도발을 하고 테러 저지르고 간첩 보내고 땅굴도 팠다. 악랄함의 수위로 따지자면 일제를 능가한다.
작은 그림: 그렇게도 반공 강조하던 박 정희도 김 일성으로부터 선물 받은 적 있고, 그 딸은 한때 평양 가서 김 정일한테 공손히 인사도 하고 온 적 있다.

(5) 큰 그림: 일제는 조선 땅의 물자를 가혹히 수탈했으며, 말기로 갈수록 전쟁 준비와 민족 말살 정책으로 조선인들을 매우 괴롭혔다.
작은 그림: 그런데 조선 말기가 워낙 너무 막장이었기 때문에 일제는 본이 아니게 한반도에다 철도 도로 전기 등 각종 인프라를 설치하고 근대화(?)를 시켜 주기도 했다. 초기엔 일제 순사가 마을 집집마다 파리채를 나눠주기도 했을 정도였다.


이 모든 정황에도 불구하고 남자는 여전히 대체로 여자보다 힘이 더 세며,
미국은 한국의 매우 고마운 우방국이다. 다른 나라라면 몰라도 반도는 반미 할 자격 천하에 없는 나라다.
88 서울 올림픽은 전반적으로 매우 잘 치러서 한국의 리즈 시절 추억을 남겼고,
북괴는 오히려 그렇게 화해하는 척하면서도 호박씨 까면서 더욱 비열하게 도발을 했을 뿐이다.

일제 역시 조선을 조금 근대화시켜 준 건 돼지를 잡아먹기 직전까지 잘 먹이고 살찌우는 것과 같은 목적으로 한 것일 뿐이다. 쟤들이 말기엔 단군의 후손이라는 정체성을 아예 싹 없애려고 창씨개명, 한국어 사용 금지, 신사 참배와 궁성요배 강요 짓거리를 한 걸 생각해 보아라.
이건 사람을 대놓고 독가스실로 보낸 것만 아닐 뿐이지 몸이 아닌 정신에 대해서는 거의 나치 유대인 학살 급의 죄질이다. 이 엄청난 만행이 겨우 1920년대 리즈 시절에 알량한 인구 증가와 식량 생산 증가, 철도와 공장 건설 산업화 따위로 실드 쳐지겠는가?

작은 그림을 의도적으로 부정하고 은폐할 필요는 없다.
그러나 작은 그림에 "만" 꽂혀서 큰 그림을 부정하려 하는 외눈박이 이단들로부터는 반드시 도망쳐 나와라. 그런 애들은 순진하고 멍청하기보다는 사악하고 불순한 경우가 더 많더라.

기독교계에 이런 방식으로 넘어진 이단들은 일일이 열거하기도 어려울 정도로 수두룩하다.
진리의 성경 말씀을 올바로 나눠야 하지만(딤후 2:15), 한편으로 역사 팩트도 올바로 나눌 줄 알아야 한다. 여기서 divide란 분할, 구분, 분간..을 의미한다.

4. 결론

이것 말고 또 무슨 예가 더 있을까?
성경에는 마태복음의 끝부분처럼 로마 정부가 “예수 시체 도난”이라고 여론 조작과 매수를 시도하는 장면도 나오고,
또 고라 일당처럼 자기가 권력욕 대통령병에 걸려 있으면서 말은 “성직 계급 반대, 만민 제사장론” 드립을 치면서 모세를 상대로 반역을 부추기는 장면이 나온다. 사회· 공산주의가 주장하는 “능력껏 벌어서 필요한 만큼 쓰는 세상, 노동자가 주인 되는 세상” 이런 것도 다~ 저런 케케묵은 전략의 후신일 것이다.

아무리 과학기술이 발전해도 인간의 본성이 바뀌지는 않겠지만, 인간이 그래도 뇌가 있고 일말의 지능이 있다면 최소한 옛날 사람들이 겪었던 시행착오를 또 겪는 일은 없어야 할 것이다. 실수를 하더라도 주토피아 OST 가사처럼 새로운 실수를 계속 만들면서 발전이나 변화를 해야지 뻔히 실패가 검증된 길을 또 가서는 꿈도 희망도 없다.

내가 늘 말하듯이 성경은 신약 크리스천의 행실 차원에서는 정교 분리를 명시하며, 기본적으로 정치 중립적인 책이다. 예수님이 재림해서 지구를 직접 다스리기 전까지는 인간이 만드는 완벽한 세상 정부와 지상락원 유토피아 같은 건 있을 수 없다.
성경은 "위의 권위와 주인과 갑에게 순종하라" 같은 보수적인 이념 위주이지만, 누가복음이나 야고보서 같은 매우 좌파스러운 책도 있다. 결정적으로 예수님을 십자가에 매다는 데는 유대인, 로마인, 백성과 지도자와 외세가 공평하게 똑같이 기여했다.

이런 기본적인 균형이 잡혀 있음에도 불구하고 지금 우리나라 현실에서는 소위 좌와 우 중에서 누가 더 크게 잘못하고 있고 더 반역적이고, 더 반성경적인 방법론을 즐겨 사용하는지는 정말 답이 이미 나와 있는 문제인 것 같다. 모두가 공평하게 잘사는 세상 따위야 인간의 힘으로 결코 이룩할 수 없지만 북괴에 안 퍼 주는 세상 정도는 인간의 힘으로 이룩할 수 있으며, 반드시 이룩해야만 한다!

물론 사람이란 게 성장 배경과 관심분야가 제각각이고, 보고 듣고 정보를 입수하는 경로가 제한돼 있다 보니 삼라만상을 보는 관점이 편파적이 될 수는 있다.
누구는 일본이 더 싫지만 누구는 북한이 더 싫고.. 누구는 경제와 안보에 더 관심이 많지만 누구는 약자 인권과 복지에 더 관심이 많을 수는 있다. 혼자만 그렇게 생각하고 자기 일기장이나 SNS에다가만 끄적거리는 거면 그건 아무 문제될 게 없다.

그러나 감히 대통령을 물러나라고 요구할 정도의 강한 결론이 담긴 주장을 하거나, 남의 주장을 반박하고 남의 SNS에다가 오지랖을 부리거나 남을 설득해서 논쟁에서 이기고 내 편을 만들려면 논리가 편파적이어서는 결코 안 된다. 아예 법조인, 정치인, 또는 문과 계열의 교사· 교수처럼 나라의 미래를 좌지우지 하고 남에게 적극적으로 영향을 끼치는 처지의 사람이 사상 체계가 그따구여서는 절대 안 된다.

일관성이 없으려면 차라리 일관성 없게, 랜덤하게 일관성이 없어야(?) 그건 비교적 자연스러운 모습일 것이다. 정말로 그 사람이 생각이 짧거나 식견이 부족했거나, 하나만 알고 둘은 몰라서 편파적으로 생각한 것일 수 있다. 그건 개선의 여지가 있다.
그러나 인권을 얘기하고 나라의 비극과 흑역사를 얘기하면서 오로지 북괴에 대해서만 절~~~대 침묵하고, 꼭 그쪽으로만 "일관되게 일관성이 없는 것"은 우연일 수 없다. 일부러 작정하고 그러는 것이며 매우 불순하고 사악한 태도이다.

그래 가지고는 나 같은 사람은 절~대로 설득을 못 할 것이고 내가 쓰는 글의 논조를 바꿀 수 없을 것이다.
"얻다대고 비겁하게 팩트나 끄집어오다니? 인권 민주 복지 평화 통일 팔아서 거짓 날조와 선동으로 정정당당하게 승부하자!" 이러려는 것 같은데, 그런 속 뻔히 보이는 전술은 나한테는 절대로 안 통할 거다.

Posted by 사무엘

2017/05/07 08:32 2017/05/07 08:32
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1357

박 정희 대통령의 자녀들

1. 박 근혜(1952)

* 주의: 오늘은 시기가 시기이다 보니 오랜만에 정치 얘기 좀 꺼낼 것이고 글 중간에 필터링하지 않은 진지한 욕설도 늘어놓을 것이다. 독자들에게 미리 양해 구함.
나하고 정치 성향이 맞지 않고 북괴는 같은 '우리민족'이니 남조선의 존립에 전혀 위협이나 해가 되지 않는다고 태평스럽게 생각하는 분, 내 글을 팩트와 논리로 반박· 저격할 의향이 없는 분은 박 근혜 얘기는 그냥 건너뛰기 바란다. 난 분명히 미리 주의를 줬다.

서강대 전자공학과를 나온 나름 이공계 출신이고, 잘 알다시피 그냥 독신이다.
이 사람은 바로 얼마 전까지 제18대 대통령을 역임하여 우리나라 최초의 여성 대통령, 과반 당선 등의 기록을 달성했다. 그러나 헌법을 고치면서 18년씩이나 대통령을 한 부친과는 달리, 딸은 예정되었던 임기도 못 마치고 탄핵 인용 파면으로 대통령 생활을 마감했다. 하긴, 만기 퇴임을 못 한 건 부녀가 동일하네..;;

글쎄, 내 소신을 말하자면 본인은 박통이 재임했던 4년 동안 약간이나마 행복했다. 지금은 그 행복이 중대한 위협을 받게 되어 마음이 착잡할 따름이다.
박통을 개인적으로 좋아하거나 싫어한다는 의견에 대해서야 개인 자유이며 내가 더 시비를 걸 여지가 없다. 그러나 이 사람이 무능했다거나, 한 게 아무것도 없다는 주장에는 본인이 결코 동의할 수 없다. 한 게 없긴 왜 없냐? 두 눈 똑바로 뜨고 봐라.

  • 통합진보당 해산
  • 전교조 법외노조화
  • 한미 연합사 전시작전권 전환 무기연기, 전쟁 위협 시 선제 타격 가능
  • UN 북한 인권 결의안 채택
  • 개성공단 폐쇄 및 대북지원 (명목상) 0원

야당 후보가 죽었다 깨어도 절대로 안 하거나 못 할 일을 얼마나 많이 해냈냐? 박 근혜는 애초부터 DO보다 BE의 업적이 더 뛰어난 대통령이었다. 우리나라 적화통일을 한 4년쯤 늦춰서 최소한 시간은 벌어 줬다.

이 정도로 퍼 주고 시행착오를 겪었으면, 이제는 북괴에 대해서 "시키는 대로 할 테니 주민들 해치지 마라"가 아니라
네일건 쏘면서 "두 번 협상은 없어. 한 시간 내로 핵무기 포기해" 이래도 모자랄 판 아닌가?
전쟁? 얼어죽을 북폭 선제공격 같은 건 할 필요도 없다. 그냥 모든 돈줄을 차단하고 가만히 내버려두기만 해도 된다. 급한 건 북괴이지 우리가 아니다. 모든 정황이 우리에게 유리하다.

그런데도 아직까지 대화나 협력으로 북핵을 해결하자 나불대는 인간말종 개새끼들은 정말 대놓고 종북 개빨갱이들 아닌가? (너무 화가 치밀어서 욕설을 가리지도 않았다) 그야말로 Let's make North Korea great again이다.
꼭 저러는 놈들이 일제에게 비굴하게 평화를 구걸했던 구한말 매국노 친일파는 같은 입으로 어째 저렇게 욕을 해 대나 모르겠다.

다시 말하지만 박통 레카는 행적이 분명히 있다. 단지 종북좌빨들이 좋아하는 행적이 아니었을 뿐이다. 레카가 훌륭한 대통령이었던 이유는.. 적들의 평가가 말해 준다. 이 이상 더 말이 필요하지 않다.

사용자 삽입 이미지

로동신문 2016년 3월 16일자라고 함. 그로부터 딱 1년 뒤에 북괴의 "꿈은 이루어졌다."

바보 멍청이들이 꼭 "위수김동 장군님 만세"만 외쳐야 종북인 줄 알어.. 사탄 마귀가 빛의 천사로 나타나지 그럼 반공 포스터에 그려진 것처럼 뿔 달리고 꼬리 달린 흉측한 괴물로 나타날 줄 아냐?

박 근혜가 아들이 비리 저지른 전직 대통령, 부인이 뇌물 받은 전직 대통령 등 온갖 친인척 비리가 얽히고 설켜 있는 다른 사람들보다는 훨씬 더 청렴했다는 건 주지의 사실이다. 저런 거 다 지켜봐 온 사람으로서 지금의 뇌물 수사네 구속이네 하는 거.. 정말 정의를 위해서 하는 건 1도 아니라는 것쯤은 진영논리로 양심과 지능이 마비되지 않은 한 삼척동자라도 알지 싶다. 개돼지가 아니라 과거에 대한 기억이 시퍼렇게 살아있고 학습효과가 있는 사람을 속이고 선동할 순 없지!

레카가 탄핵돼야 하는 이유는 내가 보기에 거의 전부가 탄핵까지 당할 잘못도 아니고 그냥 지가 닭그네가 싫은 이유들(= 좀 심하게 말하면 적화통일에 걸림돌이 되니까) 그 이상도 그 이하도 아니더라.

  • "북괴한테 물어 보는 건 괜찮고 최 순실한테 물어 보는 것만 그렇게까지 죽을 죄냐?" (다른 비정치적인 주제도 아니고 인권 결의안 같은 아주 크리티컬한 것을)
  • "지금이 어느 시댄데 빨갱이 타령이냐고? 그럼 더 오래된 친일파· 위안부 타령은 뭐냐?"
  • "그 무개념녀는 그래도 허접하게나마 승마 단체전 메달이라도 땄지, 수많은 고시낭인 취준생들을 농락하고 아무 스펙 없이 특혜만으로 공기업 합격부터 한 뒤에, 대충 쓴 이력서 달랑 제출한 누구 아들은 그럼 뭐냐? 게다가 뭐 저런 놈이 서민 타령이냐?"

등, 저격할 아이템들은 한도 끝도 없다.

판결문 어딘가에 있던 문장인데.. 헌법 수호 의지가 없다고? 나 참 기도 안 차서.. 외국까지 나가서 북핵 열심히 옹호하고 실드 치던 모 대통령의 짓거리는 씨발 그럼 자국 헌법 수호 의지가 있는 행동이더냐? 사람들이 진짜 큰 위험한 죄가 뭔지 우선순위 분간을 못 한다.
자 그럼.. 흥분은 가라앉히고, 다음 얘기로..

2. 박 근령(1954)

이분은 박 근영, 박 서영을 거쳐서 지금의 이름으로 개명을 어찌 된 일인지 두 번이나 했다. 서울대 음대 나왔으며, 그 이름도 유명한 "새벽종이 울렸네 새 아침이 밝았네" '새마을 노래'의 실질적인 작곡자로 알려져 있다.

이 글을 쓰는 본인은 1980년대생으로 박통은커녕 전대갈 시절을 경험한 기억조차 없다. 서울 올림픽 이전 시기는 직접체험의 기억이 없는 선사시대의 영역이다. 민주화 운동 같은 것도 모름.
허나, 새마을 노래를 동요 테이프에서 들은 적이 있고 엄청 옛날 음악 교과서에서 악보를 보기도 했다.

새마을 노래는 가사 내용대로 "일하면서 싸우고 싸우면서 일하기 좋게", 노동요처럼 참 흥겨운 곡이라는 생각이 들었다. 물론 여기서 싸우는 건 같은 편끼리 치고 받고 싸우는 게 아니라 적군(=북괴)과 싸운다는 얘기다. 성경에서 느헤미야서에 완벽한 예시가 있다. (느 4:15-18)

이 새마을 노래는 공식적으로 박 정희 대통령의 작사 작곡으로 등재되어 있다.
일단 작사는 아랫사람을 시킨 뒤 대통령 이름만 올린 게 아니라 정말로 박통 당사자가 한 것으로 보인다. 저 사람은 젊은 시절부터 교사와 장교를 모두 역임했고 그림과 글씨, 음악 등 예체능에도 두루 조예가 깊은 똑똑한 사람이었다.

작곡에 대해서는 사실은 세월 간격을 두고 조금 상이한 증언이 존재한다. 2004년경 굿데이 인터뷰에서는 작곡을 딸이 다 했다고 나오지만 더 최근 인터뷰에서는 작곡까지 아버지가 했는데 딸은 그걸 악보로 받아 적고 편곡만 한 것으로 나온다(2008년 11월자 인터뷰, 그 뒤 2015년에도). 어떤 형태로든 그 당시 대통령의 영애가 개입을 했다.

박 근령은 훗날 1982년에 대기업 회장 가문 아들과 결혼했으나 6개월 만에 이혼하고 오랫동안 언니처럼 솔로로 지냈다. 그러다 그로부터 30년이 넘은 2007년에 50이 넘은 나이로 무려 13살 연하의 전문대 교수와 재혼했다. 자녀는 없음.

3. 박 지만(1958)

육사까지 나오긴 했지만 잘 알다시피 젊은 시절에 방황 많이 했고, 40대 중반 나이가 된 2004년에야 16살 연하의 변호사와 결혼했다. 그 이듬해에 득남했다가 2014년에 9살 터울의 둘째 아들을 얻었고, 그 다음 2015년에는 쌍둥이 아들을 얻어서 자식은 아들만 넷이다. 부인이 젊다지만, 그래도 58세의 나이에 얻은 아들이니 정말 엄청난 늦둥이이다. 박 정희가 1917년생인데 증손자도 아닌 막내 손자가 2015년생이라니...

박 지만이 학교에 들어가던 1970년대 초중반엔 이제 막 고등학교 평준화가 시행되었으며, 학교 배당에 컴퓨터 추첨이 동원되었다.
KIST가 정부로부터 이거 뺑뺑이를 의뢰받아서 실시했는데, "추첨을 살짝 조작해서 대통령의 아들인 박 지만 군을 그래도 명문 K고에다가 배정하라"라는 외압이 있었다고 한다.

그러나 그 당시 KIST 전산실 실장이던 성 기수 박사가 이에 소신껏 응하지 않고 아무 조작 없이 추첨을 돌려서 그는 J고에 진학하게 됐다... 고 성 박사의 회고록이 전해진다. K와 J가 어디인지는 알 만한 사람들은 다 알 것이다.

이렇듯, 이쪽 가문은 결혼 여부와 시기, 자녀 유무나 시기 같은 가정사가 다들 평범하지 않아 보인다.
사실은 박 정희는 어렸을 때 억지로 떠밀려서 결혼한 전 부인 김 호남에게서 얻은 딸도 하나 있다. 박 재옥(1937)이라고 박 근혜 전대통령의 입장에서는 15살이나 더 많은 이복 언니이다. 이분은 그나마 평범하게 산 듯하며, 친부에게서 그렇게 아주 버림받지는 않고 특혜도 종종 받으며 지냈다.

Posted by 사무엘

2017/05/04 08:30 2017/05/04 08:30
, , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1356

1. 외부 모듈 핵심부의 EXE 분리

오래 전부터 조금씩 풀었던 썰이긴 한데, 마침 최근에 회사에서 유사 개발 업무를 한 적도 있고 해서 다시 얘기를 꺼내 보겠다.
Windows는 타 OS들과는 달리 IME가 EXE가 아닌 DLL 형태이다. 한 프로세스의 주소 공간에 완전히 속해 있는 덕분에 성능이 좋다는 장점이 있겠지만, 한영 상태가 스레드들마다 제각각 따로 놀고 거기에다 memory-mapped 방식으로 로딩된다는 특성까지 겹쳐서 IME의 on-the-fly 업데이트가 몹시 난감하다.

EXE라면 업데이터 하나 띄워서 자신을 종료한 뒤 업데이트 된 놈으로 재시작만 하면 간단하게 끝났을 일인데 Windows용 IME는 업데이트 하려면 자신을 사용하는 프로그램들을 몽땅 종료해야 하고, 그게 여의치 않으면 그냥 운영체제를 재시작/로그오프 해야 한다. 거기에다 32/64비트까지 모두 신경 써야 한다.

그래서 <날개셋> 한글 입력기 외부 모듈도 인제 와서 처음부터 다시 만드는 건 무리이겠지만, 앞으로 덩치 큰 IME를 만들 일이 있으면 DLL은 거의 업데이트 할 일 없는 껍데기만 남겨 놓고 실질적인 문자 조합은 EXE 기반의 '서버'에 담당시키면 어떨까 생각을 해 왔다. 업데이트도 IME가 통신하는 EXE만 하고 말이다.

이렇게 하면 모든 IME들의 설정과 상태 동기화는 자동으로 이뤄진다. 서버와는 함수 호출이 아니라 메시지와 memory-mapped file 같은 간접적인 방법으로 통신을 하니 서버는 굳이 바이너리 구분을 할 필요 없다. 64비트 OS에서는 64비트 서버 하나만 띄워 놓으면 32비트와 64비트 IME가 모두 통신이 가능하니 더욱 좋다.

실제로 실험용 IME를 만들어 본 결과는 흥미로웠다. 서로 다른 프로세스끼리 메시지를 주고받을 때는 단일 스레드끼리 메시지를 주고받을 때에 비해 고려해야 할 점이 더 많았다. 받는 쪽에서 자체적으로 대화상자 같은 걸 출력하고 그 상태로도 자체 메시지를 처리하지 못하는 block 상태가 되지 않으려면 대화상자는 modal이 아니라 반드시 modeless 형태로 만들어야 했다.

SendMessage와 PostMessage를 조심해서 가려 써야 하며, 리턴값을 꼭 받기 위해 Send를 하면서도 신속한 반응성을 보장하기 위해서는 지금까지 머리로만 알고 있던 ReplyMessage 같은 함수를 난생 처음으로 써 보기도 했다. 특히 호스트가 클라이언트로부터 Send된 메시지를 받은 뒤에 대화상자 같은 modal UI를 띄운다면 말이다.

여기까지 생각을 하긴 했으나.. IPC 기법들은 근본적으로 IME들이 쓰라고 만들어진 메커니즘이 아니다 보니 한계도 많다.
가장 먼저 권한 문제가 걸리니, IME 서버는 번거롭게 관리자 권한으로 실행하거나 아니면 애초에 운영체제의 서비스 같은 급으로 만들어야 한다. 메트로와 데스크톱 앱 사이의 소통도 문제이고..
IME가 글쇠 입력을 받은 것을 서버로 요청을 보내는 건 그럭저럭 할 만하나, 반대로 서버가 IME로 문자 입력 요청을 하는 것은.. IME가 제각각 스레드 동기화 오브젝트나 윈도우를 만들어야 가능할 것이다.

서버는 자신과 접속하거나 종료하는 클라이언트들을 파악하고 있어야 하는데 자고로 프로세스라는 건 강제 내지 비정상 종료될 때도 있다. 그렇기 때문에 모든 프로그램들의 근황을 언제나 정확하게 파악하고 있는 것도 훅킹이라도 동원하지 않으면 의외로 쉽지 않더라.

이것저것 가성비를 생각해 보니 서로 장단점이 있고 근본적으로 한 방식이 다른 방식을 완전히 대체 가능해 보이지는 않았다. 안 그래도 날개셋의 경우 EXE 기반의 입력기 개발 실험은 입력 패드를 만들면서 이미 그럭저럭 하기도 했다. Windows에서 어떤 DLL이 타 프로세스에 합법적으로 침투할 수 있는 양대 통로는 미우나 고우나 훅킹 아니면 IME이다.

다만, 지금 MS 일본어 IME가 이미 그런 것처럼 제어판 대화상자만은 EXE로 분리하는 게 나은 점도 있다.
실행되는 응용 프로그램에 따라서는 공용 컨트롤.. 특히 6.0 이상에서만 지원되는 syslink나 split button, 에디트 컨트롤의 풍선 도움말(cue banner) 같은 게 초기화되지 않은 경우가 종종 있어서 내 날개셋 제어판도 그거 영향을 받아 제약을 받기도 하기 때문이다.

뭐 그건 그렇고..
기존 데스크톱 앱인 '제어판' 말고 메트로 앱인 '설정'에서 돌아가는 환경설정은 어떻게 만드는지 모르겠다. MS 한글 IME에는 그런 게 있던데..;;

2. 설치 시스템 개편

예전에도 여러 번 언급한 바와 같이, <날개셋> 한글 입력기는 Visual Studio가 기본 제공하는 Windows Installer 기반 msi 패키지 형태로 배포되고 있다. 이 솔루션은 MS 본가에서 만든 만큼, 프로그램을 설치하거나 제거하는 본연의 성능은 일정 수준 이상의 퀄리티가 보장된다. 프로그램 디렉터리 어딘가에 uninstall stub 프로그램 같은 게 덕지덕지 붙어 있을 필요도 없고 아주 seamless + 깔끔하다. 하지만 개발툴이 제공하는 GUI 템플릿은 customize가 매우 제한적이고 불만족스러운 점이 많기 때문에 다른 솔루션을 써 볼까 생각도 자주 해 왔다.

이상적인 설치/배포 솔루션은 다음과 같은 조건을 만족해야 한다. 다른 프로그램이라면 몰라도 <날개셋> 한글 입력기에 대해서는 내가 보다시피 욕심이 좀 많다.

  1. CPU 통합: 한 exe 파일 단독으로 32비트와 64비트 OS에서 잘 동작하고, 32비트에서는 당연히 64비트 바이너리를 설치하지 않아야 한다. EXE처럼 32/64비트 중 사용 가능한 상위 바이너리 하나만 설치하면 되는 파일은 선별이 옳게 돼야 한다. 필요한 디스크 공간 계산도 이 모든 변수를 감안해서 돼야 한다.
  2. 언어 통합: 한 exe 단독으로 운영체제의 기본 언어가 한국어이면 한국어, 그렇지 않으면 자동으로 영어로 설치 프로그램의 UI가 출력되어야 한다.
  3. 유니코드 통합: 평상시에 유니코드 API를 사용하는 건 너무 당연한 얘기이고, 그럼에도 불구하고 구닥다리 Windows 9x에서도 유니코드만 포기하고 기본적인 실행이 돼야 한다. 이것도 물론 단일 파일로 말이다. <날개셋> 한글 입력기 본제품이 Windows 95/NT4부터 꼬박꼬박 다 지원하는 프로그램이기 때문이다.
  4. known 폴더: 또한 아무 액세서리 없는 깡통 Windows 95 RTM에서 실행되더라도 IE 4~5 이상에서 첫 도입된 ProgramData (Application Data)같은 known 디렉터리를 인식해서 파일을 제 위치에 설치해야 한다.
  5. 원활한 제거: Windows용 IME는 그 특성상 on-the-fly로 업데이트나 제거가 꽤 난감한 물건인데, 당일 제거를 못 했으면 재부팅 요청 같은 후처리를 적절히 수행해야 한다.
  6. 그 밖에: 관리자 권한 드립 치는 UAC 화면은 setup을 실행하자마자 뜨는 게 아니라, 실제로 설치가 시작되어 관리자 권한이 정말로 필요해졌을 때 직전에 뜨는 게 바람직함.

진짜 유명한 세계구급 소프트웨어인 경우, 설치 프로그램이 언어를 선택받는 대화상자부터 띄우는 경우가 있다. 하지만 날개셋의 경우 그렇게 유명한 물건은 아니니 그냥 운영체제의 기본 GUI 언어가 한국어가 아닐 때에만 영어로 동작하는 걸로도 충분할 듯하다. 날개셋은 GetSystemDefaultLangID() 함수를 써서 판별하는데, 이게 GetUserDefaultLangID와 차이가 무엇이 있는지는 개인적으로 궁금하다.

msi는 (1)과 (2)는 전혀 만족하지 않는 것으로 보여서 문제다.
그러나 (3)과 (4)는 Windows installer runtime (non-Unicode 9x용 에디션)자체만 미리 설치하면 그럭저럭 어렵지 않게 충족된다. 2.0 런타임은 의외로 깡통 Windows 95에서도 깔끔하게 설치 가능하다. 이것 때문에 <날개셋> 한글 입력기가 MSI 외에 다른 배포 솔루션으로 갈아타기가 어렵다.

"HKCU 또는 HKLM"\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders라는 레지스트리를 참조하면 known 폴더 위치를 얻을 수 있다. MSI가 이런 것까지도 생성해 준다. 이렇게 레지스트리를 수동으로 뒤지는 방법은 오늘날에는 마소에서 권장하지 않는 방법이지만, The old new thing 블로그의 설명에 따르면 아직도 여기를 참조하는 고집쟁이 옛날 어플 때문에 어쩔 수 없이 호환성 차원에서 레지스트리를 계속 지원해 주는 거라고 한다. 사실, IE 4~5가 없고 SHGetSpecialFolderPath 함수가 존재하지 않는 골동품 Windows 95 환경에서는 여기를 뒤지는 것밖에 선택의 여지가 없기도 하다.

다음으로 (5)의 경우 msi는 딱 기본만 수행한다. "다음 프로그램들이 요 DLL을 사용하고 있습니다" 대화상자도 찍어 주고, 뭔가 못 건드린 파일이 있으면 "재부팅 하시겠습니까?"라는 여운을 남기기도 하는데, 가끔은 안 그럴 때도 있는 듯하다.

msi 말고 3rd party installer 중에서는 오픈소스이기도 한 NSIS가 세계적으로 제일 유명하다. WinAmp는 역사 속으로 사라졌고 개발사인 Nullsoft도 없어졌지만, 그래도 NSIS만은 유용성 덕분에 오픈소스 진영에서 살아남아 있다. Nullsoft의 개발자들이 왕년에 불멸의 작품 하나로 이름을 남겼다.

얘는 어떤가 하면..
(1)과 (2)는 기술적으로 일단 가능하다. msi보다 분명 우월한 점이다. 그러나 그냥 '가능하다'에서 끝일 뿐, 막~ 적극적으로 지원되고 깔끔하고 편한 형태로 가능하지는 않아 보인다.

단적인 예로, 생성되는 installer에 붙는 런타임 바이너리가 기본적으로 32비트 기반이다 보니, 거기 스크립트 언어에서 기본 제공하는 등록 명령만 이용해서는 64비트 DLL에 대해서 DllRegisterServer(시스템 등록) 호출을 할 수 없다. 뭐, 운영체제가 제공하는 regsvr32 /s를 이용하면 되긴 하지만, 사용자가 직접 저렇게 외부 유틸리티나 플러그 인을 끌어들일 필요 없이 NSIS가 내장 명령어 차원에서 저걸 지원하면 더 좋을 것이다.
홈그라운드 운영체제의 지원빨이 있는 msi에서는 반대로 DLL의 등록쯤은 전혀 걱정할 것 없는 사항이다. 64비트용 msi라면 64비트 DLL이건 32비트 DLL이건 불문하고 등록이 깔끔하게 잘 처리되기 때문이다.

(3)은 NSIS가 한동안 정식으로 지원하지 않아서 Unicode NSIS라는 별도의 프로젝트 브랜치가 나돌 정도이다가 비교적 최근에 NSIS가 3.x 버전에 진입하고 나서야 유니코드를 정식으로 수용하게 됐다.
그러나 NSIS는 기술 수준이 그냥 이미 있는 Windows API를 감싸는 정도를 벗어나지 않기 때문에 유니코드와 Windows 9x를 동시에 지원한다거나, 구버전 OS에서 신버전의 known 디렉터리를 만들어 주는 정도의 과잉 친절을 베풀지는 않는다.
(5)의 경우는 NSIS가 어디까지 자비롭게 대처하는지 아직 제대로 확인을 못 해 봤다.

요약하면, 완전한 스크립트 기반인 NSIS가 당장 자유도가 뛰어나 보이기는 하지만, 그래도 레거시 운영체제 지원이나 시스템 차원에서의 융통성은 그래도 msi가 나은 게 있어서 한 솔루션이 다른 솔루션을 완벽하게 대체하지는 못하는 실정이다.
NSIS의 스크립트는 무슨 파이썬이나 Lua 급으로 복잡한 연산식이나 복합 자료구조를 지원하는 본격적인 고급 언어가 아니다. 스크립트의 문법은 반쯤 어셈블리어에다가 C언어의 전처리기를 얹은 것 같은 구조이며 생각보다 제약이 많다.

어셈블리어 같은 문법인데 CPU 인스트럭션이 들어가는 게 아니라 Windows API의 함수와 각종 속성 명칭이나 상수들이 들어간다는 점만 다르다. if-then-else, switch 같은 조건 판단과 분기조차도 언어의 키워드가 아니라 그냥 분기문을 표현하는 매크로 형태로 구현되었을 정도이다.
그나저나, 파일 경로를 많이 다루고 역슬래시를 필연적으로 많이 쓴다는 특성상 \ 자체는 탈출문자로 쓰지 않고 $를 붙여서 $\n으로 개행문자를 표현하는 건 인상적이었다.

설치 스크립트도 당장 필요한 기능만 주먹구구식으로 구현하는 게 아니라 치밀하게 잘 만들려면 끝이 없겠다.

  • 한 스크립트로 몇몇 스위치만 달리하여 동일 제품의 여러 파생형이나 변형 에디션(가령, 셰어웨어 데모/정식 같은)을 조건부 컴파일로 간단히 감당 가능
  • 한 제품에서는 아까 말한 언어와 아키텍처를 단일 출력 바이너리만으로 모두 커버 가능
  • 모든 문자열 값들은 언어 중립적인 값과 언어 종속적인 값으로 나눠서 관리 가능하고, 제품 이름 같은 건 한 곳에서 값을 바꾸면 등장하는 모든 곳에서 값이 알아서 바뀌어야 함
  • 컴퓨터의 상태 파악을 알아서 해야 함. 처음 실행됐을 때 지금이 첫 실행인지, 동일 버전, 구 버전, 또는 동일 버전의 바리에이션이 이미 설치돼 있는지, 이전에 설치를 하다가 만 상태인지, 심지어 자신이 중복 실행됐는지 같은 걸 사용자가 수동으로 파일이나 레지스트리 삽질 안 해도 알아서 감지해야 함
  • 설치할 파일과 삭제할 파일을 NSIS는 수동으로 일일이 써야 하는 것 같던데, 마치 C++ 개체 선언하듯이(생성자, 소멸자) 설치하는 파일, 추가하는 레지스트리 같은 걸 한 곳에다만 명시하면 역순의 제거 작업 역시 자동으로 파악돼야 하며, 작업을 실제로 수행하기 전에 예상 디스크 공간 계산 같은 것도 알아서 돼야 함.
  • 서로 다른 소프트웨어 제품이 동일한 파일을 설치하고 사용하는 경우, 그런 공용 파일은 reference counting을 해서 그 제품들이 모두 제거되었을 때에만 최종적으로 삭제되게 해야 함.
  • 그리고 uninstall 시엔 사용자가 생성한 데이터처럼 이 프로그램이 초기에 설치하지 않은 파일이나 레지스트리도 필요하다면 싹 제거하는 메커니즘이 제공돼야 함. (조건 범위 지정)
  • 최종 생성된 msi 내지 exe 파일에 대한 디지털 서명 후처리도 언어 내지 툴 차원에서 명시해서 자동 처리하기.

오픈소스 프로젝트에 기여한 것도 없는 주제에 불평만 길게 늘어놓은 것 같다만.. 이게 NSIS를 좀 써 보고 개인적으로 느꼈던 아쉬운 점이다. 오죽했으면 반디소프트에서 개발하고 있는 유명 파일 압축 유틸리티인 반디집도 6.0부터는 NSIS 대신 자체 개발한 인스톨러로 갈아탔다. 다만, NSIS는 저 정도 꽤 적지 않은 기능을 제공하고도 exe에 붙는 자기 런타임 stub 크기가 겨우 몇만 바이트에 불과할 정도로 작은 건 굉장히 인상적이었다.

그냥 간단한 파일 몇 개만 복사하고 끝나는 게 아니라 컴퓨터를 좀 깊게 제어하는 설치/제거 패키지를 만든다면 이걸 만드는 툴도 GUI 위주의 가벼운 툴이 아니라 그냥 핵심 기능만 SDK 형태로 만들고, 자주 쓰는 프로그램 패턴은 Visual C++의 프로젝트 마법사 형태로 구축하는 것도 나쁘지 않을 것 같다. 배포 패키지 자체를 그냥 C/C++로 만들라고 말이다. 그러면서 파일 압축 풀어서 복사하거나 지우는 등의 정말 핵심적인 공통 기능만 라이브러리를 쓰라고..

근데 생각해 보니 애시당초 그러라고 만들어진 라이브러리가 Windows Installer이긴 하다. 쟤도 사실은 단순 GUI 껍데기가 아니라 라이브러리가 본질이니까. 하지만 저 라이브러리도 구조가 워낙 복잡하고 설치, 제거, 롤백이 어떻고 알아야 할 사전 배경지식이 많다 보니 그 저수준 함수를 직통으로 쓰면서 배포 패키지를 만들 일이라곤 없을 듯하다.

Posted by 사무엘

2017/05/01 08:30 2017/05/01 08:30
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1355

1. 레거시 부동소수점 MBF

컴퓨터에서 쓰이는 2진법 기반의 부동소수점이라는 개념이야 컴공· 전산에서 기본 중의 기본에 속하는 내용이며 본인 역시 이에 대해서 거의 7년 전에 글을 한번 쓴 적이 있다.
본인은 GWBASIC으로 프로그래밍에 처음 발을 내디딘 세대이다. 그런데 베이직이 PC와는 따로 노는 고유한 부동소수점 체계를 갖춘 언어였다는 사실을 30대 나이가 될 때까지 전혀 모르고 있었다.

쉽게 말해 같은 컴퓨터에서 실행한 다음 프로그램의 실행 결과가 GWBASIC과 QuickBasic이 서로 동일하지 않다는 것이다. 참고로 MKS$, MKI$는 해당 숫자들의 binary representation을 문자열 형태로 되돌리는 저수준 함수이다. C++라면 reinterpret_cast<char *>(&num) 한 방이면 끝났을 일이다.

10 INPUT A!
20 IF ABS(A!)<.01 THEN END
30 C$ = MKS$(A!)
40 FOR I = 1 TO 4: PRINT ASC(MID$(C$, I, 1)): NEXT
50 GOTO 10

사용자 삽입 이미지

하긴, 옛날에 베이직은 DEFINT A-Z 같은 걸 하지 않으면 변수의 기본 자료형이 정수가 아니라 실수였다. 언어를 설계할 때 성능보다 인간적인 면모를 더 추구해서 그렇다. (5/3을 구하면 매정하게 1이 아니라 알아서 1.6666..이 나오게..) 그러니 구조적으로 실수를 지원하는 건 필수였다.

때는 무려 1975년, 빌 게이츠가 폴 앨런과 함께 알테어 베이직을 개발하던 시절에 동료들과 함께 뚝딱 해서 2진법 기반의 부동소수점 표기 방식을 만든 게 Microsoft Binary Format, 일명 MBF라는 스펙이 됐다. 32비트와 64비트 두 형태로 말이다.
이 부동소수점은 알테어뿐만 아니라 BASICA, GWBASIC 등 온갖 플랫폼에서 돌아가는 베이직 인터프리터에 두루 쓰이기 시작했다. 지금도 인터넷에 굴러다니는 GWBASIC은 IEEE754가 아닌 MBF 고유 방식으로 부동소수점을 처리한다.

그랬는데 훗날 1984년경에 IEEE754라고 공신력이 더 높은 표준이 등장하면서 판도가 급격히 그쪽으로 기울었다. 게다가 PC에서는 인텔 80x87이라고 오늘날로 치면 하드웨어 가속에 해당하는 수치 연산 보조 프로세서(코프로세서)도 응당 IEEE754를 기반으로 만들어졌다.

마소는 일찍부터 자체적인 부동소수점 포맷을 먼저 제정해서 이를 퍼뜨려 왔지만 이런 시국에서는 자기도 대세를 거스를 수 없게 되었다. GWBASIC의 후신인 QuickBasic도 80년대 중반에 나왔던 1, 2까지는 MBF를 사용했지만 3.0부터는 IEEE 방식으로 갈아탔다. 그 대신 기존 MBF 방식은 별도의 옵션을 줬을 때에만 지원하게 동작이 바뀌었다. (/MBF) MBF 형태로 저장된 부동소수점을 읽어들이는 레거시 프로그램들과의 호환성도 중요하니까 말이다.

그럼 IEEE와 MBF는 어떤 차이가 있었는가? 몇 가지가 있다.
똑같은 32비트 또는 64비트 공간에다 지수와 유효숫자와 부호 비트를 어느 순서대로 어떻게 분배할지 문제는 한 마디로 그냥 정하기 나름이고 대동소이하다. 마치 철도 궤간을 정하는 문제와 비슷하다.

수 전체의 부호 1비트는 IEEE나 MBF든 공통일 수밖에 없고, 32비트의 경우는 지수 8비트, 유효숫자(mantissa) 23비트라는 비율 역시 동일했다. 다만,

(1) IEEE는 2의 보수 기반인 정수의 관행을 존중해서 부호 비트가 수 전체의 최상위 비트에 있는 반면, MBF는 지수와 유효숫자 사이에 존재했다. 다시 말해 mantissa의 최상위 비트에 있는 셈이다. 이렇게 배치를 함으로써 MBF는 IEEE와는 달리 지수와 유효숫자가 딱 8비트와 24비트로 byte padding이 맞춰지게 했다.

(2) 64비트 실수의 경우 이 비율도 달라진다. IEEE는 지수의 공간도 딱 3비트 더 늘어서 11비트이지만, MBF는 여전히 8비트이다. 그래서 32비트 single 실수를 쓰다가 64비트 double 실수를 쓰면 정밀도는 왕창 심지어 IEEE보다도 더 올라가지만 수의 표현 가능 자리수가 늘어나지는 않는다. 그 대신 바이트 경계는 여전히 1:7 비율로 지켜진다.

(3) 다음으로, MBF는 IEEE처럼 denormal number나 NaN, 무한대/무한소 같은 개념도 없다. denormal이야 숫자 표현과 관련된 내부 디테일이니 그렇다 치더라도 베이직 언어로 수학 함수를 사용하면서 NaN이나 무한대/무한소 같은 걸 접한 경험은 없다. 그런 숫자가 생성될 상황이라면 그냥 "Illegal function call" 에러가 나고 말지.
어쩐지 이런 것들은 본인이 훗날 C/C++로 갈아타면서 처음으로 접했다. 이게 엄밀히 말하면 언어 차이가 아니라 이런 부동소수점 표현 방식 때문에 생긴 차이점이다.

세계적으로 문자들은 언어와 문화권마다 제각각이지만 아라비아 숫자만은 세계 공통이다. 컴퓨터 세계도 사정이 얼추 비슷했는데 그나마 유니코드라는 규격 덕분에 동일한 문자는 세계 어디서나 동일한 방식으로 통용 가능해졌다. 그에 반해 숫자가 부동소수점 한정으로 표현 방식이 파편화돼 있었다는 건 개인적으로 무척 흥미롭게 와 닿는다.

C, 파스칼 같은 언어 이름은 함수 호출 규약 명칭에 등장하는데 베이직은 MBF라는 레거시를 보유하고 있구나. IEEE754의 등장 이전에는 MBF 말고 다른 부동소수점 표현 방식은 존재하지 않았나 하는 의문이 남으며, 파스칼에만 있던 6바이트 실수가 규격이 어떠했는지도 다시 보게 된다. 스펙을 검색해 보니 파스칼도 지수부는 8비트이고 나머지가 부호부(1비트)와 가수부(39비트)이다.

2. MOTOR의 정체는?

이 블로그에서 GWBASIC에 대한 추억들 중에서 지금까지 이걸 거론한 적은 없었던 것 같다.
GWBASIC의 대화식 환경에는 코딩 중에 자주 사용하는 키워드들을 곧바로 입력하는 일종의 키매크로가 있었다. F1부터 F10까지 기능키에 배당된 매크로는 LIST, RUN, LOAD...의 순으로 화면 밑줄에 표시되었으며 KEY라는 키워드(?)를 이용해 사용자가 재정의도 할 수 있었다. 후대의 QuickBasic 계열에서는 없어지기도 할 법도 한 키워드인데 KEY에 그 기능만 있는 건 아니기 때문에 없어지지 않고 남아 있긴 하다.

그리고 매크로가 거기에만 있는 게 아니라 Alt+알파벳에도 있었다. A부터 Z 중 J, Q, Y, Z를 제외한 나머지 22개 알파벳에는 AUTO, BSAVE, COLOR ... WIDTH, XOR까지.. 키워드가 즉시 입력되었다. 이 키워드들은 딱히 재정의 가능하지 않았다. RUN과 SCREEN은 Alt에도 있고 F 기능키에도 있었다. (후자는 엔터까지 자동으로 입력된다는 차이가 있음)

그런데 본인이 주목한 것은 M 자리에 배당되어 있던 MOTOR라는 단어였다. 이거 도대체 뭘까? 경험상 숫자 인자를 하나 받는 것 같던데 도대체 하는 일이 뭘까? 두툼한 GWBASIC 매뉴얼/키워드 레퍼런스를 뒤져봐도 의외로 딱히 제대로 설명돼 있지 않았다. 그러니 궁금증은 더욱 커질 수밖에 없었다.

이 역시 전세계에 존재하거나 존재했던 모든 것들에 대한 정보가 손끝 하나로 검색되는 세상이 온 뒤에야 그게 그런 용도였다는 것을 뒤늦게 알 수 있었다.
MOTOR는 카세트 테이프 장치의 헤더를 올리거나 내리는 명령문이었다. 0부터 255 사이의 숫자를 인자로 받긴 하는데 실질적인 의미는 그냥 zero냐 non-zero냐, 쉽게 말해 그냥 bool이었다. 카세트 테이프가 퇴출된 16비트 이상의 IBM-PC급용 베이직에서는 이 명령은 구현되지 않고 아무 동작도 안 하는 레거시 잉여가 되었다.

옛날에 카세트 테이프에다 소스 코드 저장을 SAVE"FILE" 한 뒤 '녹음' 버튼을 눌러서 쭈루룩 하고, 불러오려면 저장되었던 위치로 정확하게 되감기를 하고 LOAD"FILE"한 뒤, '재생' 버튼을 눌러서 했다던데.. MOTOR는 그런 호랑이 담배 피우던 시절에나 유의미한 기능을 했다는 뜻 되겠다.

그런데 왜 이런 잉여가 한때에는 그 시절에는 자주 쓰이기라도 했는지 Alt+M 매크로에 떡 등재돼 있었다. 현실에서는 모터 따위보다는 MOD 연산자 또는 부분문자열을 구하는 MID$ 함수가 훨씬 더 자주 쓰일 텐데 말이다. 그러고 보니 실제로 Alt+M에 MOTOR 대신 쿨하게 MID$가 배당돼 있던 GWBASIC 구현체가 있기도 했던 것 같다. 베이직은 바리에이션 구현체가 워낙 많으니.. 아니면 그건 그냥 내 기억력의 한계로 인한 착각이었는지는 모르겠다.

※ 기타

(1)
이 외에도 GWBASIC은 그러고 보니 소스 코드의 저장도 고유 방식으로 했고 심지어 후대의 QuickBasic에도 비슷한 관행이 있었다(디폴트 옵션). 베이직 언어들은 그 옛날에도 일종의 가상 기계나 독자적인 개발 환경까지 다 짬뽕으로 추구했던 것 같다.
비주얼 베이직의 중후반대(4정도?) 넘어가서 COM 기반의 BSTR 방식으로 갈아타기 전에는 베이직은 문자열도 자기만의 독자적인 이중 포인터 참조 방식으로 구현돼 있었다. 일단 null-terminate 방식이 아니기 때문에 C와는 다름. 이것도 아마 MBF만큼이나 역사가 왕창 오래 된 독자적인 관행이 아닐까 싶다. (문자열에 대해서도 옛날에 한번 글을 쓴 적이 있다.)

(2)
난 C/C++ 파스칼 같은 타 언어로는 도스에서 텍스트 모드에서 색깔을 바꾸고 표준 VGA 그래픽, 특히 mode 13h를 바꾸는 코드를 작성해 본 적이 없다. 베이직에서는 COLOR 내지 SCREEN으로 곧장 됐을 일이 타 언어에서는 표준 라이브러리에서 지원해 주지 않았기 때문이다.
GWBASIC에서 Q(uick)Basic 계열로 바뀌면서 정말 좋은 것 중 하나가 본격적인 VGA 그래픽이 지원된다는 것이었는데, 16진수를 10진수로 바꿔 버릴 생각을 어째 했나 모르겠다. 실제로는 0x13인데 그걸 그냥 13만 써도 되게..;; 그것까지 초보자를 배려한 것이었나 궁금해진다. 그 초보자가 숙련자로 등급이 바뀌는 순간부터 문화 충격을 경험할지도 모르는데..

(3)
베이직이라는 언어 자체는 다트머스 대학의 컴공 교수가 고안한 것이지만, 저런 구현체는 빌 게이츠 같은 괴짜가 아니면 생각해 낼 사람이 별로 없을 물건이다.마소에서는 처음에는 다양한 8/16비트 컴퓨터를 대상으로 베이직 인터프리터를 개발했지만, 사실 IBM PC용으로는 베이직 컴파일러도 DOS 1980년대부터 만들어 오고 있었다.
그래서 Quick이라는 브랜드를 붙여서 QuickBasic 1.0을 1985년에 내놓았다. 이때 퀵베이직은 지원하는 문법은 GWBASIC과 별 차이가 없지만 대화식 환경이 아닌 명령줄에서 컴파일 + EXE 생성만 가능한 베이직일 뿐이었다.

그러다가 1년 주기로 버전 2와 3을 내놓으면서 기존의 구닥다리 행번호 위주가 아닌 구조화 문법이 차근차근 도입되었다. 베이직이라는 언어가 이때(1980년대 중반) 1차로 마개조된 셈이다. 그리고 4.0에 와서야 비로소 함수의 재귀호출이 가능해지고, 즉석 문법 체크와 실행이 지원되는 IDE가 추가되었다. 사실, IDE 자체는 2에서부터 도입됐고 그때 이미 퀵라이브러리도 도입됐다고 하지만, 그때는 지금과 같은 IDE가 아니었다.

그 뒤 1988년 가을에 출시된 QB 4.5가 장수만세 안정판이 되었다. 퀵베이직은 1990년에 어쩐 일인지 버전 5와 6을 건너뛰고 QuickBasic Extended 내지 MS Basic PDS (전문 개발 시스템)이라는 이름으로 7과 7.1 버전까지 개발된 뒤, Visual이라는 브랜드로 바뀌었으며 이때부터 플랫폼도 Window로 바뀌었다. 5, 6을 건너뛴 이유는 퀵베보다 먼저 개발되어 온 그 전신 컴파일러의 버전 번호를 맞췄기 때문이다. (참고로 Visual C++도 IDE의 버전보다 컴파일러의 버전이 더 높음. 전신인 MS C 의 버전을 계승하기 때문이다.)

이 와중에 1991년에 출시된 MS-DOS 5.0에서는 QuickBasic에서 컴파일 기능을 떼어낸 QBasic이라는 물건을 만들고, 이 엔진으로 MS-DOS 4.0까지 내장하고 있던 GWBASIC과, EDLIN 텍스트 에디터를 동시에 대체했다. 무척 흥미로운 점이다. MS-DOS가 전체 화면 형태로 제공하던 유틸리티는 4.0에서 도입됐던 DOS Shell 이후로 이게 둘째가 아닌가 싶다.

Posted by 사무엘

2017/04/28 08:38 2017/04/28 08:38
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1354

« Previous : 1 : ... 105 : 106 : 107 : 108 : 109 : 110 : 111 : 112 : 113 : ... 230 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2026/07   »
      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 29 30 31  

Site Stats

Total hits:
3942365
Today:
1348
Yesterday:
1685