지금으로부터 수십 년 전에는 동네마다 컴퓨터 학원이 있었고, 꼬꼬마가 프로그래밍을 공부하겠다고 하면 으레 GWBASIC부터 시작하곤 했다. 베이직은 16비트 MS-DOS뿐만 아니라 각종 가정용 8비트 컴퓨터에도 특유의 인터프리터 환경이 내장되어 있기도 해서 접하기가 한결 쉬웠다.

그때와는 달리 오늘날의 컴퓨터 교육은 이미 만들어진 소프트웨어들을 활용만 하는 실무에만 치우친 편이다.
지금 컴퓨터 프로그래밍을 처음부터 공부하고 싶다면 무엇부터 시작하는 게 좋을까?
이 질문에 대한 답변은 그 사람이 무슨 프로그램을 작성하고 컴퓨터로 무엇을 하고 싶은지 목적에 따라 크게 달라진다.
이 글은 나의 지극히 좁은 편견만을 반영하고 있으므로, 당연히 프로그래머마다 생각이나 견해가 다를 수 있다.

1. 비전문가/비전공자로서 그냥 최소한의 시간 투자로 개인적인 컴퓨터 활용도만 높이고 싶다면(고급 계산기 + 기초 알고리즘 실습 + 파일 자동 조작 + 매크로/자동화 도구 등)

개인적으로 파이썬을 추천한다. 복잡한 자료형을 다루기가 쉬워서 여타 언어들에 비해 짧은 코드만으로 복잡한 일을 한번에 끝낼 수 있다. 방대한 크기의 파일을 읽어서 내가 원하는 처리를 한 뒤 출력을 뱉어내는 수십 줄 남짓한 프로그램만 짤 줄 알아도 인생이 굉장히 편해질 수 있다.
좀 수학 덕후 기질이 있다면, 함수형 프로그래밍 언어를 건드려 봐도 될 듯.

2. 1보다는 좀 더 나아가서 가성비가 뛰어난 개발 환경에서 최소한의 GUI까지라도 만들어 보고 싶으면

Windows 플랫폼 한정으로 C#급 언어가 가장 좋겠다.

3. 웹브라우저에서 어지간한 애니메이션이나 프레젠테이션을 다 띄우고, 글이나 그림을 계산 결과로서 출력하고 싶으면

HTML + 자바스크립트.
요즘은 HTML이 단순히 화면에 뿌려지는 글과 그림, 하이퍼텍스트 문서일 뿐이라고 생각하는 건 큰 오산이다.
문서에다 서식을 주는 건 이제 CSS라는 방대한 별도의 규격으로 독립해 나가고, HTML은 문서 반 코드 반이다. 실시간으로 내용이 업데이트되고 화면 끝까지 스크롤됐을 때 추가로 컨텐츠를 로딩하고.. 사용자의 조작에 반응하여 그림을 뿌려 주는 등, 예전에는 ActiveX나 하다못해 플래시라도 써야 했을 컨텐츠들이 지금은 저것만으로 다 된다.

웹브라우저가 거의 플랫폼 독립적인 프로그램 구동 플랫폼처럼 바뀌었으니, 이를 활용할 줄 알면 역시 컴퓨터 활용 능력이 크게 향상될 수 있다. 웹 프로그램은 다른 언어나 런타임, IDE 같은 걸 설치할 필요조차 없이, 그냥 메모장에서 코딩 후 웹브라우저에서 곧바로 돌려보면 된다.

4. 맥 OS용 응용 프로그램이나 아이폰 앱을 개발하고 싶다면

Objective C + xcode + COCOA API 등등으로 고고씽이다. 일단 맥북을 장만해야 할 것이고 Windows와는 너무 이질적인 개발 환경 때문에 처음에 고생 많이 할 것이다.

5. 안드로이드 스마트폰용 앱을 개발하고 싶다면

자바 + 이클립스 IDE에 익숙해져야 할 것이다. Java는 요즘 스마트폰 앱 개발용 언어로 입지가 확 되살아난 듯하다. 이게 완전한 웹용 언어도 아니고(자바스크립트는 자바와 전혀 다른 언어임), 자바 애플릿이 플래시/ActiveX를 완전히 대체하는 RIA (rich internet application) 프레임워크로 자리잡은 것도 아니고, 로컬에서는 느리고 성능이 안 좋다 보니 전통적인 기계어 프로그램들에 밀려서.. 예전까지는 위상이 좀 어정쩡했기 때문이다. 로컬에서는 일부 크로스플랫폼 소프트웨어의 GUI(프런트 엔드)를 돌릴 때나 좀 쓰이곤 했다.

6. 끝으로, PC + Windows 환경에서 네이티브 코드 + standalone으로 실행되는 프로그램을 개발하고 싶다면

아래아한글이나 <날개셋> 한글 입력기나 어지간한 온라인 게임과 같은 급의 기계어 실행 파일을 만들고 싶다면..
역시나 재래식 Visual C++이나 최소한 델파이 같은 툴로 가야 한다.
개발 환경, 언어 문법과 기본 라이브러리, Windows API, 그 뒤 개발 분야에 따라 추가적인 라이브러리 공부까지 산 넘어 산이다.

오늘날 프로그램 개발 환경이 결국 로컬 + 웹 + 앱이라는 세 양상으로 구분된다고 예전에 글을 쓴 적이 있는데.. 그것과도 관계가 있다.
프로그래밍, 더 나아가 소프트웨어 개발에 관심이 있는 분이라면 이런 아이템들을 참고하면 되겠다.
그런데 정작 이런 글을 쓴 본인은 6만 빼고 나머지 분야는 여전히 너무 모른다는 게 함정..ㅎㅎ

Posted by 사무엘

2013/09/17 08:37 2013/09/17 08:37
,
Response
No Trackback , 13 Comments
RSS :
http://moogi.new21.org/tc/rss/response/878

올림픽 잡설

* 스포츠는 내가 극도로 관심이 없는 분야 중 하나이다만..

1. 잘 알다시피.. 2020년 하계 올림픽의 개최지로 일본 도쿄가 선정되었다.
전쟁 범죄를 전혀 반성하지 않은 나라, 더구나 방사선 유출 사고까지 친 나라가 어째 올림픽을 또 유치해 냈는지에 대해 의아해하는 분이 적지 않다만, 아무튼 이로써 일본은 1964년 이래로 거의 반세기 만에 올림픽을 동일 도시에서 또 하게 됐다.
일본은 1988년 올림픽에서 나고야에서 올림픽을 유치하려 했으나, 잘 알다시피 52:27의 표로 우리나라 서울에 패했던 적이 있다. 이른바 바덴바덴의 기적이다.

2. 그 전까지 역사상 올림픽을 두 번 개최한 동일 도시는 그리스 아테네(1896/2004)와 프랑스 파리(1900/1924)가 있고, 세 번은 런던(1908/1948/2012)뿐이었다.
미국은 올림픽을 네 번이나 개최한 유일한 국가이지만, 전부 다 다른 지역이다(1904/1932/1984/1996).
독일은 두 번 개최하긴 했으나, 나치 독일-베를린(1936), 그리고 서독-뮌헨(1972)이어서 둘의 위상이 서로 미묘하게 다르다.
그리고 오스트레일리아도 다른 지역에서 두 번 개최한 나라이다(1956/2000).

3. 사실, 일본은 2차 세계대전이 아니었으면 20년 전인 아예 1944년에 올림픽 개최가 예정되었을 선진국이었다. 그로부터 20년 뒤, 일본은 1964년 도쿄 올림픽의 개최에 맞춰 세계 최초로 상용 최대 속도가 시속 200km를 넘는 신칸센 철도를 개통했었다. 신칸센은 표준궤일 뿐만 아니라 같은 표준궤 철도 중에서도 열차의 폭이 한국이나 유럽의 철도 차량보다 수십cm가량 더 넓게 설계되었다. 그래서 한 줄에 2-2뿐만 아니라 2-3 좌석 배치도 있다. 협궤 철도의 한계에 이골이 난 걸까.

전쟁은 일본의 올림픽 개통뿐만 아니라 지하철의 개통까지도 늦췄다.
일본은 아시아에서 최초로 긴자 선이라 불리는 도쿄 지하철을 1927년에 개통했었다.
그러나 그 다음 노선인 마루노우치 선은 그로부터 또 무려 27년이나 지난 1954년에야 개통할 수 있었다.
전쟁 때문에 물자가 부족하니, 신규 철도 건설은 고사하고 이미 있는 철도 선로도 뜯어가야 할 판이었기 때문이다.

4. 2020년 이전에 일단 요 몇 년간은 남아메리카 브라질이 꽤 주목을 받을 것 같다.
2014년 FIFA 월드컵도 브라질, 2016년 올림픽도 브라질(리우데자네이루)이기 때문이다. 특히 올림픽의 경우 역사상 최초의 남아메리카 개최이다.
월드컵은 매 경기가 서로 다른 지역의 다양한 경기장에서 개최되기 때문에, 올림픽과는 달리 개최국만 지정하지 도시 이름까지 하나로 콕 지명되지는 않는다.

5. 끝으로, 축구 얘기를 좀 한 후 글을 맺겠다.
지금이야 우리나라는 홈그라운드에서 무려 4강에까지 진출한 적이 있고 얼마 전엔 원정 16강까지도 진출한 축구 강국이다. 그러나, 대한민국 축구의 시작은 심히 미약했다는 걸 알 만한 분들은 다 알 것이다.

광복 후 최초 참가였던 1948년 런던 올림픽에서는 1라운드에서 멕시코를 5:3으로 이겼으나, 2라운드에서 우리나라는 스웨덴에게는 무려 12:0으로 패해서 올림픽 역사상 최다 실점이라는 기록을 갖고 있다.
1954년에 첫 참가한 FIFA 월드컵도 마찬가지다. 그 당시 월드컵은 스위스에서 열렸는데, 헝가리에게 9:0, 터키에게 7:0으로 졌다. 월드컵에서 9점차라는 실점 규모는 역사상 공동 1위이다.

물론 이건 부끄러워할 기록이 전혀 될 수 없다. 해방 직후에, 또 전쟁으로 전국토가 폐허가 된 직후에, 국제 스포츠 경기 참가를 위해 나라가 해 줄 수 있는 게 없다시피하던 시절이었다. 1948년 런던 올림픽 참가의 경우, 선수들은 먼저 부산까지 열차를 타고 간 뒤 일본을 거쳐서 각종 배와 경비행기를 갈아타면서 런던까지 가는 데만 무려 3주가 걸렸었다! 배 타고 갑판 위에서 축구 연습을 했다면 믿으시겠는가?

의류비(단복, 운동복 등)나 숙소 체류 비용조차 제대로 못 내서 완전 추레한 촌티를 팍팍 낸 채, 이들은 도착 직후에 시차 적응도 못 한 채 경기를 뛰어야 했다. 사정없이 쏟아지는 공격에 골키퍼는 상처투성이가 되는 투혼을 발휘하면서 온몸으로 공을 막아 냈다. 오히려 12:0으로, 9:0으로밖에 지지 않은 게 대단하다고 외신들이 골키퍼를 칭찬할 정도였으니... 눈물젖은 빵+헝그리 정신의 결정체가 아닐 수 없다.
스포츠도 나라가 부강하고 잘 살아야 제대로 육성이 가능하다는 걸 느낀다.

Posted by 사무엘

2013/09/15 08:30 2013/09/15 08:30
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/877

1. 클립보드 개론

과거에 Windows 3.x 시절에는 '클립보드 표시기'(clipbrd.exe)라는 프로그램이 있었다. 95/98 시절에도 있다가(16비트 바이너리 형태 그대로) 운영체제가 NT 계열로 바뀌면서 완전히 역사 속으로 사라진 듯하다.
그러나 지금도 그런 부류의 액세서리 프로그램이 있으면 좋겠다는 생각을 개인적으로 가끔은 한다. 번거롭게 여타 프로그램을 띄워서 '붙이기' 명령을 내리지 않고도 클립보드에 지금 무엇이 들어있는지를 확인할 수 있기 때문이다.

사실, 제3자가 개발한 클립보드 표시/관리 유틸리티는 당연히 존재한다. 이런 프로그램은 단순히 클립보드 표시 기능뿐만 아니라 클립보드 내용을 파일로 저장하거나 불러올 수도 있고, 지금 MS Office 프로그램들이 그러는 것처럼 여러 개의 클립보드 데이터를 관리하는 기능도 있어서 잘만 활용하면 대단히 편리하다.

기술적으로 봤을 때 클립보드는 여러 프로그램들이 한데 공유할 수 있는 메모리 핸들의 집합이다.
0과 1의 나열일 뿐인 데이터가 텍스트인지 이미지인지 포맷을 식별하는 정수값이 있고, 그 포맷 식별자와 메모리 핸들이 한데 대응하여 튜플을 이룬다.

클립보드에는 여러 종류의 데이터가 동시에 공존할 수 있다. 그래서 워드 프로세서라면 자신만의 고유한 포맷을 등록해서 자신이 만든 모든 정보가 완전히 보존되어 있는 데이터를 놔 둬야겠지만(예를 들어, 이 데이터가 일반 블록이 아니라 칼럼 블록이라는 표시도..), 같은 데이터에 대해서 메모장 같은 프로그램에서도 최소한 텍스트라도 붙여 넣을 수 있게 표준 텍스트 포맷으로도 데이터를 보관해 줘야 한다.

클립보드로부터 데이터를 가져오거나, 거기에다 내 데이터를 저장하려면 먼저 OpenClipbaord 함수를 호출해서 클립보드를 열면 된다. 이 함수가 왜 윈도우 핸들(HWND)을 인자로 받는지는 잘 모르겠다. 클립보드의 사용이 끝난 뒤엔 CloseClipboard를 하면 된다.

클립보드 API는 한 순간에 시스템 전체를 통틀어 단 한 프로그램/스레드만 클립보드에 접근하는 걸 가정하고 만들어졌다. 그래서 딱히 OpenClipboard 함수가 무슨 다른 핸들 같은 걸 되돌리지는 않는다.

2. 클립보드를 위한 메모리 할당 함수

클립보드에다 데이터를 지정하거나 가져오는 건 Set/GetClipboardData 함수로 하면 된다. 이때 주고받는 핸들은 GlobalAlloc 함수를 이용하여 특수하게 할당된 메모리이다.
클립보드 API는 구시대 16비트 Windows 시절의 디자인을 그대로 답습하고 있는 게 많다. 클립보드는 지금 같은 memory mapped file이나 가상 메모리 같은 게 없던 시절부터 존재했다. 그때는 운영체제에 global heap과 local heap이라는 두 종류의 메모리가 존재했고, 클립보드는 응당 global heap의 영역에 존재했다.

운영체제의 heap 함수는 고정된 메모리 주소에다 공간을 바로 할당시킬 수도 있고, 할당은 하되 당장 그 메모리를 사용하지 않을 경우 실제 위치를 운영체제가 재량껏 재배치도 하다가 응용 프로그램이 실제로 잠깐 사용을 할 때만 메모리를 고정시키는 '유동적인' 방식으로 할당할 수도 있다.

메모리를 사용하는 프로그래머의 입장에서는 무척 번거로운 일이지만, 당장 사용하지 않는 메모리를 운영체제가 필요에 따라 재배치 가능하게 할당해 놓으면, 아무래도 PC의 절대적인 메모리 공간이 충분치 않을 때 메모리의 단편화를 예방할 수 있어서 효율적이다. API 자체가 그렇게 헝그리 정신과 상호 협력 이념을 염두에 두고 설계돼 있다는 뜻이다.

GlobalAlloc 함수에는 메모리를 할당할 때 클립보드/OLE 공유가 가능하게 하는 GMEM_DDESHARE 같은 여러 플래그를 줄 수 있다. 이게 어찌 보면 16비트 시절의 VirtualAlloc 함수 같기도 하다. 하지만 32비트로 오면서 GlobalAlloc 함수의 잡다한 플래그들은 다 legacy 잉여로 전락했고, 메모리를 유동적으로 할당할지/고정적으로 할당할지, 그리고 할당된 메모리를 0으로 초기화도 할지를 설정하는 플래그만이 현재 유효하다.

이 함수는 이제 클립보드 복사나 OLE drag & drop 기능을 구현할 때밖에 쓸 일이 없다. 아니면 아주 특수한 상황에서 프로세스의 기본 heap에 의존하지 않고 메모리를 할당할 일이 있을 때나 쓰든가.
32비트 이후부터는 global heap과 local heap의 구분도 없고, 또 이 함수로 개당 몇십 바이트짜리 연결 리스트의 노드를 일일이 저장한다거나 하는 건 바보짓이다.

3. 클립보드 표시기 만들기

일반적으로는 클립보드에 접근해서 데이터를 읽고 쓰고, 클립보드를 비우는 것만 알면 된다.
그것보다 조금 더 고급으로 나가면 나만의 클립보드 포맷을 등록하고 다양한 클립보드 포맷을 조회하는 조작까지 필요해진다.
그 다음으로 클립보드와 관련된 가장 복잡한 조작은 바로, 클립보드 내용이 바뀌었을 때 통지를 실시간으로 받겠다고 운영체제에다 요청하고 실제로 그런 일이 일어났을 때 각종 뒷처리를 하는 일이다.

이렇게 클립보드의 변경 내역을 통지받는 프로그램을 개념적으로 '클립보드 표시기(viewer)'라고 부른다. 모든 프로그램들이 사용자가 누르는 Ctrl+C/X에 관심이 있는 게 아니니, 클립보드 변경 내역은 특별히 요청을 한 프로그램에게만 알려 주는 것이다. 통지가 오는 형태는 메시지이기 때문에, 클립보드 표시기는 응당 윈도우를 생성하고 메시지 loop을 돌고 있어야 한다.

자신(윈도우)을 클립보드 표시기로 등록하려면, WM_CREATE나 WM_INITDIALOG 같은 초기화 메시지에서 SetClipboardViewer 함수를 호출하여 자신의 핸들값을 전달하면 된다.
그러면 그 뒤부터는 어떤 프로그램에서든 클립보드의 내용을 건드린 뒤 CloseClipboard 함수를 호출해 주면, 내 창으로 WM_DRAWCLIPBOARD 메시지가 날아온다. 그럼 내 프로그램은 그때 클립보드 내용을 들여다보면서 적절한 출력을 해 주면 된다.

그런데 문제는 이게 전부가 아니라는 것이다.
클립보드 표시기 API는 엄청난 구시대 스타일로 굉장히 구리게 설계되어 있다. Windows API를 통틀어서 이 정도로 지저분한 물건은 흔치 않을 것 같다.

클립보드 변경 통지 요청을 한 윈도우는 우리 프로그램뿐만이 아니라 여러 개가 동시에 있을 수 있다. 그러니 운영체제는 그 윈도우들의 목록을 내부적으로 관리해야겠지만, 각각의 윈도우의 입장에서야 나 말고 다른 윈도우가 무엇이 있든 말든, 나만 통지를 곱게 받고 끝이어야 정상일 것이다.
그런데 클립보드 표시기 관련 API들은 그렇지 않다. 클립보드 표시기로 등록된 창들은 일종의 단방향 연결 리스트의 형태로 관리되는데, 운영체제는 그 리스트의 head 노드만을 갖고 있다. 그 뒤 나의 다음으로는 무슨 창이 있는지 관리를 해당 응용 프로그램이 직접 해야만 한다.. -_-;;;

SetClipboardViewer 함수는 인자로 받은 윈도우를 연결 리스트의 맨 앞 head 노드로 등록한 뒤, 예전에 head였던 윈도우 핸들을 되돌린다. 우리는 그 값을 반드시 따로 보관해 둬야 한다.

hwndNextCBViewer = SetClipboardViewer(hMyWindow);

그리고 내가 WM_DRAWCLIPBOARD 메시지를 받았다면, 우리는 자체 처리를 마친 뒤에 그 메시지를 저 창에다가 수동으로 전해 줘야 한다.

if(hwndNextCBViewer) SendMessage(hwndNextCBViewer, uMsg, wParam, lParam);
(uMsg는 어차피 WM_DRAWCLIPBOARD이고, wParam과 lParam은 쓰이지 않기 때문에 값이 모두 0임)

메시지를 DefWindowProc로 넘긴다 해도 이 일을 운영체제가 알아서 해 주지 않는다. 우리가 저렇게 메시지를 안 보내 주면 다음 클립보드 표시기들은 클립보드의 변경 내역을 전달받지 못하게 되어 동작이 죄다 꼬이고 만다!

내가 제어를 운영체제로 신속하게 돌려 주지 않으면 운영체제 전체를 다운시킬 수 있던 협력형 멀티태스킹의 암울한 냄새가 물씬 풍긴다.
훅 프로시저는 CallNextHookEx를 반드시 호출해 줘야 하는 것과 같은 스타일이기도 하고 말이다.

내 윈도우가 없어질 때(WM_DESTROY) 클립보드 표시기 지정 해제도 당연히 수동으로 해야 하는데, 이때 사용하는 함수는 ChangeClipboardChain이다. 얘에다가 내 윈도우뿐만 아니라 처음에 SetClipboardViewer의 리턴값으로 받았던 나의 다음 노드 윈도우도 같이 전해 줘야 한다. 마치 옛날에 C++에서 소멸자 함수가 존재하는 객체들의 동적 배열을 delete []연산자로 해제할 때, 배열 원소의 개수를 수동으로 전해 줘야 했던 것만큼이나 번거롭다.

ChangeClipboardChain(hMyWindow, hwndNextCBViewer);

그러면 운영체제는 자신이 내부적으로 갖고 있는 연결 리스트의 head 노드에 속하는 윈도우에다 WM_CHANGECBCHAIN 메시지를 보낸다. wParam에는 해제되는 윈도우, lParam에는 그 해제되는 윈도우의 다음 노드 윈도우가 들어있다.

클립보드 표시기 윈도우는 이 메시지도 살펴봐서 만약 내가 갖고 있는 '다음 노드' 값이 등록 해제되는 윈도우(wParam - hwRemove)라면, 나의 '다음 노드' 값을 등록 해제되는 윈도우의 다음 윈도우(lParam - hwNext)로 업데이트하면 된다. 물론, 나 자신이 등록 해제되고 있다면 저런 메시지 따위는 오지 않고 말이다. 아래의 소스 코드를 참고하라.

void On_WM_CHANGECBCHAIN(HWND hwRemove, HWND hwNext)
{
    if(hwndNextCBViewer==hwRemove) hwndNextCBViewer=hwNext;
    else if(hwndNextCBViewer) SendMessage(hwndNextCBViewer, uMsg, wParam, lParam);
}

hwRemove가 나의 다음 윈도우에 해당한다면 다음 윈도우를 그 다음 것으로 업데이트하고 처리를 종결한다.
그렇지 않으면 아까 WM_DRAWCLIPBOARD를 포워딩했던 것처럼 동일 메시지를 다음 윈도우로 전달해 준다.

연결 리스트에서 어떤 노드를 삭제하기 위해서는 그 노드의 이전 노드가 가리키는 다음 노드를 고쳐 줘야 한다. 그러나 클립보드 표시기 chain은 이전 노드 정보가 존재하는 이중 연결 리스트가 아니라, 오로지 '다음' 노드 정보만이 존재하는 단일 연결 리스트이다.
그렇기 때문에 임의의 노드를 삭제하려면 이전 노드를 파악하기 위해 리스트를 처음부터 다 조회해야 하고, 결과적으로 시간 복잡도 O(n)에 해당하는 절차가 필요해진 것이다. 그것도 운영체제가 알아서 처리해 주는 게 아니라 응용 프로그램들이 다 협조해 줘야 하는 번거로운 형태이고 말이다.

요컨대 클립보드의 내용을 실시간으로 업데이트하여 표시하는 프로그램이라면 최소한 나의 다음 윈도우 정보는 보관해야 하며, WM_DRAWCLIPBOARD와 WM_CHANGECBCHAIN 메시지를 정석대로 처리해 줘야 한다. 내가 프로그램을 잘못 짜면 다른 프로그램의 동작까지 망칠 수가 있으니 이건 운영체제의 보안 관점에서도 굉장히 안 좋은 디자인이다..

운영체제가 달랑 갖고 있는 클립보드 표시기 chain의 head 노드 윈도우를 되돌리는 GetClipboardViewer라는 함수도 있다. 얘는 가장 마지막으로 SetClipboardViewer함수를 호출한 윈도우의 핸들을 되돌리는 셈인데, 이 윈도우로부터 다음 윈도우를 알 수 있는 것도 아니고(다음 윈도우 핸들은 각 창마다 고유한 방식으로 저장하고 있을 테니), 이 함수는 사실상 아무짝에도 쓸모가 없다.

나 같으면, 표시기 윈도우 리스트의 관리를 운영체제가 전적으로 알아서 해 주고 WM_CHANGECBCHAIN 처리를 할 필요가 없는 새로운 SetClipboardViewerEx 함수라도 만들 것 같다. 새로운 응용 프로그램은 더 깔끔한 새로운 API를 쓰라고 말이다. 서브클래싱만 해도 더 깔끔하게 하라고 Windows XP부터는 종전의 SetWindowLongPtr을 대체할 SetWindowSubclass 같은 함수가 새로 추가되지 않았던가.

(* 2017. 7. 14 추가)
그렇게 생각했는데, 최신 MSDN을 우연히 뒤져 보니 역시나 AddClipboardFormatListener라고 내가 생각하는 것과 개념상 정확히 동일한 함수가 Windows Vista에서부터 추가됐구나. 저건 클립보드 내용이 변경될 때마다 내 윈도우로 통지 메시지가 오게 하는 함수로, 예전 같은 번거로운 chain 관리가 필요하지 않다. 등록이 아닌 제거는 Add 대신 Remove로 시작한다. 게다가 실제로 변경된 포맷이 무엇인지도 GetUpdatedClipboardFormats라는 함수로 알아올 수 있다.

이 새로운 listener에 등록되고 나면 클립보드가 변경되었을 때 WM_CLIPBOARDUPDATE라는 메시지가 날아온다. 안 그래도 1024개밖에 안 되는 시스템 메시지 영역은 부족해서 난리일 텐데.. WPARAM, LPARAM 아무 용도가 없는 새로운 메시지를 굳이 추가할 필요가 있나 싶은 생각이 든다. 기존의 WM_DRAWCLIPBOARD도 인자가 전혀 쓰이지 않으며, 메시지를 받는 클라이언트의 입장에서는 용도가 정확하게 동일할 텐데 말이다. 뭐 확실한 구분을 위해서 메시지도 따로 만든 것이지 싶다.
아울러, GetClipboardSequenceNumber라는 함수도 있다. 얘는 클립보드 내용이 변경될 때마다 1씩 증가하는 시퀀스 번호를 되돌리며, Vista가 아니라 2000 시절부터 존재해 온 물건이다.

이걸로도 모자라서 나만의 클립보드 포맷을 등록하여 그 내용을 화면에다 어떻게 표시할지까지 시시콜콜하게 다 지정하는 규격도 Windows API에 있긴 하다. 거기까지 가면 실생활에서 쓰이는 일은 정말 거의 없다시피한 잉여이다.

Posted by 사무엘

2013/09/12 08:29 2013/09/12 08:29
,
Response
No Trackback , 3 Comments
RSS :
http://moogi.new21.org/tc/rss/response/876

우리나라의 전방 지역에 있는 PC방, 식당, 여관 같은 업소들이 군인들을만을 상대로 굉장한 바가지 요금을 받는 게 공공연한 관행이라니, 굉장히 충격이다.
이건 휴가철 때 해수욕장이나 유원지 민박들이 바가지 요금을 받는 것보다 죄질이 훨씬 더 나쁘다.

첫째는 민간인이 휴가를 떠나는 건 전적으로 당사자의 자발적인 선택과 의지인 반면 군복무는 그렇지 않기 때문이요,
둘째는 간부들은 그나마 위수지역이 넓은 편이고 승용차라도 있지, 병들은 꼼짝없이 그 지역에서 호구로 당할 수밖에 없기 때문이다.

정말 그 지역 상인들이 도저히 먹고 살기 힘들다면, 모든 고객을 대상으로 요금을 올리면 된다.
국가에 자기 인생을 희생하여 충성하는 군인에게 할인을 해 줘도 모자랄 판에(철도 같은 일부 공공요금은 실제로 그러함) 바가지라니, 이건 정말 군납비리만큼이나 국방부나 정부 차원에서 나서서 저런 부조리를 단호하게 근절해야 하지 않나 싶다.

수 년 전에 강원도 모 지역 모 부대에서 실제로 있었던 일이라고 한다.
바가지가 해도 해도 너무한 지경에 이르자, 사단장이 특단의 조치를 취했다. 휘하의 모든 병과 간부들에게 그 지역의 상점과 숙박시설을 절대로 이용하지 말고, 휴가와 복귀 시엔 간부들 차를 타고 군부대와 시외버스 터미널 사이를 직통으로 이동하도록 명령을 내렸다. 지역 상점들에 대한 보이콧을 선언한 것이다. 헌병들은 그 지역을 순찰하면서 다른 군기 위반자가 아니라 상점을 무단으로 이용하는 군인들을 적발했다.

이 일이 있고 나자 지역 경제가 다 망하게 된 상인들이 항복(?)해서 요금을 여타 지역 수준으로 내렸다나 어쨌다나.
씁쓸한 일이 아닐 수 없다.

돈과 관련된 사항만이 전부가 아니다.
다른 사례로는, 외박 나갔던 군인들이 위수지역에 있는 불량배 고등학생 패거리한테 심하게 맞고 다쳐서 돌아온 적이 있었다. (군인들은 민간인과 얽히면 법적으로 굉장히 골치아파지기 때문에 이런 일이 생기면 그냥 피하거나 순순히 당하는 수밖에 없다.)

그러자 이 꼴을 목격한 대대장이던가 사단장이 격분했다. “어떤 놈이 감히 내 부하들을 이 모양으로 만들었나? 당장 이실직고하지 못해?”라고 다그쳐서 진상을 파악하고, 5분 대기조까지 편성해서 결국 가해자들을 잡아내고 합의 내지 처벌시켰다.

시스템 클럽에 가 보면 지 만원 박사의 회고록에도 월남전 참전 중에 겪은 비슷한 일화가 수록돼 있으니 참고하시라.

“앞으로 C-레이션(미군 전투 식량)이 필요하면 내게 전화하라. 하지만 만일 내 병사에게 손을 또 한번 대면 그 때엔 주먹과 무력으로 다스릴 것이다.” 전쟁터에서 존중돼야 할 전투병들이 옷이나 깨끗히 다려 입고 지내는 헌병 따위에게 뺨을 맞고 다닌다는 건 참을 수 없는 일이었다. 까불던 헌병들이 그날 전투병들의 맛을 톡톡히 본 것이다. 그후 그 초소를 지나는 내 부대 차량들은 언제나 기분좋게 프리패스됐다.


자, 이런 것들이 바로 윗사람이 아랫사람을 챙겨 주고, 사기를 진작시키는 방법이다.
저런 지도자 밑에서라면 내 목숨 바쳐서 국가를 위해 싸울 수 있겠다고 병사들의 마음을 사는 방법이다!

훈련할 때, 굴릴 때는 정말 가혹하게 빡세게 굴리더라도 상벌을 확실하고 공정하게 주고, 진짜 위급한 전쟁터에서야말로 진정한 전투력과 전우애가 나오게 하고..
초병은 직속상사의 명령 외에 누구의 지시도 받지 않는다는 걸 윗사람들이 솔선수범해서 실천하고..

나라가 예산이 모자라서 병사들에게 월급을 알바 최저임금 수준만치도 못 준다면, 돈 안 드는 저런 리더십이라도 발휘할 수 있지 않겠는가?
최소한 “간부, 고참들부터 죽인 뒤에 북한군 쏘겠다” 이러는 병사는 국군내에 없어야 하지 않겠나 말이다.

Posted by 사무엘

2013/09/09 08:23 2013/09/09 08:23
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/875

1. 장폐단· 단폐단

한국 철도에서 운행 중인 특대형 디젤 기관차(정확히는 디젤 전기 기관차)는 앞부분이 잘 알다시피 이렇게 생겼다. (사진들의 출처: 위키미디어)

사용자 삽입 이미지

그런데 가끔은 앞부분이 이렇게 생긴 열차가 다니기도 한다.

사용자 삽입 이미지

이미 눈치 챈 독자도 계시겠지만, 이것은 새로운 다른 기관차가 아니라, 똑같은 기관차를 방향만 달리하여 배치한 것이다.
기관차의 뒷부분이 전방을 향하게 하고, 기관차의 원래의 앞부분을 후방으로 배치하여 객차를 연결한 뒤 기관차를 전진이 아닌 후진시킴으로써 앞으로 나아간다. 본인이 예전에 몇 번이나 언급한 적이 있듯, 모든 철도 동력차들은 전진과 후진을 완전히 동일한 성능으로 자유자재로 할 수 있기 때문이다. 자동차나 비행기와는 다르다.

기관차의 운전석은 통상 앞부분과 가까이 배치되어 있으며, 전방의 시야도 넓게 확보되어 있다. 이런 직관적인 앞부분으로 기관차를 자연스럽게 운전하는 것을 '단폐단 운전'이라고 한다. 운전석과 차체의 진행 방향 끝부분이 가까이 있다는 뜻이다.
그러나 기관차의 양방향 중 운전석 방향과 먼 반대쪽으로 열차를 운전하는 것을 '장폐단 운전'이라고 한다.

철도는 신호 시스템이 아주 발달해 있고 방향 전환이 필요 없는 교통수단이긴 하지만, 그래도 장폐단 운전이 단폐단 운전보다 더 위험하고 기관사의 심신에 부담을 많이 끼치는 근무인 것은 두 말할 나위가 없다.
운전석에서 차량의 말단이 멀리 떨어져 있다 보니 그렇잖아도 눈에 안 띄는 사각지대가 많아지는데, 그나마도 양 끝의 작고 좁은 창문만을 통해서 앞을 오랫동안 내다보느라 기관사의 자세도 구부정해지기 때문이다.

이런 장폐단 편성은 왜 생기는 걸까? 기관차의 방향을 돌려 주는 전차대나 루프선이 없는 노선을 운행했다가 되돌아올 때가 있기 때문이다.

대표적인 예는 바로 경인선이다.
경인선에서는 전동차뿐만이 아니라 인천항을 왕래하는 화물 열차도 비정기적으로 운행된다.
그러나 경인선의 종점인 인천 역은 인상선도, 루프선도, 전차대도 없이 열차가 있는 그대로 들어갔다가 도로 나올 수만 있는 매우 열악한 종착역이다. 그래서 인천 방면을 향하고 있던 기관차는 도로 서울 방면으로 돌아갈 때도 뒤쪽인 인천을 향한 채 주행하게 된다.

철도 차량은 아무래도 앞뒤 주행에 모두 유동적으로 대응 가능한 형태로 만드는 게 유리함을 알 수 있다. 앞으로 도입될 예정인 7600호대 디젤 전기 기관차는 앞뒤에 동일하게 운전석과 큰 창문이 달린 전후 대칭형으로 만들어질 예정이라고 한다. 이 경우 마치 동차처럼 장폐단· 단폐단이라는 구분 자체가 무의미해질 것이다.

물론, 전기 기관차는 진작부터 운전실이 앞뒤에 둘 달린 전후 대칭형으로 만들어져 있긴 했다. 기계 부품을 배치하는 데 다른 동력원 기관차보다 자유도가 더 높기 때문일 것이다.
전기나 디젤과는 달리 과거의 증기 기관차는 보일러와 탄수차, 차륜의 배치 같은 여러 문제 때문에 태생적으로 전후 대칭형으로 만들기가 사실상 불가능하다. 얘는 길쭉한 보일러가 앞으로 불쑥 돌출돼 있으니, 장폐단 형태만이 가능하다.

사용자 삽입 이미지

드물게, 중형 기관차인 4400호대 디젤 기관차는 설계상의 정방향이 장폐단 형태이다. 증기 기관차처럼 말이다.

사용자 삽입 이미지

그리고 일명 봉고 기관차라고도 불린 7000호대 디젤 기관차는 반대로 후진(=장폐단 주행)을 아예 고려하지 않은 극단적인 설계 때문에 사실상 단폐단 전진 운전밖에 못 한다. 운전석 안에서 후방 시야를 확보할 수 없기 때문이다. 얘는 작년 말에 다 퇴역했기 때문에 지금은 볼 수 없다.

사용자 삽입 이미지

2. 차륜 배치

자동차에는 엔진이 자동차의 어느 쪽에 적재되고 구동축이 어느 쪽 바퀴에 연결되는지를 나타내는 FF(전륜구동), FR(후륜구동), RR, 4WD 같은 용어가 있다. 이와 비슷한 개념이 철도 차량에도 응당 존재한다.

먼저, 동력 분산식 차량의 경우, 연결된 차량 자체가 동력차인지 아니면 단순히 끌려다니는 객차인지를 나타내는 표기가 있다. Tc(한쪽 말단에 운전실이 달린 객차), M(동력차), M'(전동차 한정. 동력차이면서 팬터그래프도 달린 차), T(단순 객차)가 그것.

그리고 다음으로 한 차량을 이루는 대차의 차륜 구성을 나타내는 표기가 있다. 연속으로 이어져 있는 바퀴의 수를 나열하는데, 동력이 연결된 바퀴는 A, B, C로 시작하는 알파벳으로 적고, 그렇지 않은 바퀴는 아라비아 숫자로 적는다.

예를 들어, 아래의 8200호대 전기 기관차의 차륜을 표기하면 Bo-Bo이다. (보다시피 전후 대칭인 것도 맞지?)

사용자 삽입 이미지

B라고 적힌 걸 보니, 한 대차당 바퀴가 두 개 있고 각 바퀴에 모두 동력이 전달된다는 뜻이다. 이 기관차 하나만을 자동차 같은 차량에다 비유한다면 진짜 4WD급인 셈이다.
B 다음에 붙은 o는 그 구동축이 동력원이 내연 기관 같은 다른 엔진이 아니라 전기 모터임을 뜻한다. 순수 전기 기관차뿐만이 아니라 디젤 전기 기관차의 구동축도 결국 전기 모터와 연결되어 있기 때문에 o가 붙는다.

사실, 8200호대 전기 기관차는 차륜이 한 레일당 총 4개로 적은 편이다. 가볍고 접지력이 낮은 것에 비해서 출력만 너무 강하다 보니, 이 기관차는 오르막에서 바퀴가 헛도는 공전 현상이 종종 발생했다고 한다.
8000호대 전기 기관차는 Bo-Bo-Bo이며, 특대형 디젤 기관차는 Co-Co로 6개이다. 최근에 도입되고 있는 8500호대 신규 전기 기관차 역시 이 추세게 맞추어 Co-Co로 돌아갔다.

오늘날의 디젤이나 전기 기관차는 차륜이 비교적 규칙적이고 배치 방식이 그렇게까지 다양하지는 않기 때문에 조합이 기껏 저 정도밖에 안 된다. 다양한 차륜의 종결자는 역시 증기 기관차였다.
얘는 엔진 내부에서 전문적인 동력비 조절 장치를 갖추고 있지 않은 원시적인 구조이기 때문에 바퀴의 개수와 크기가 기관차의 출력과 직접적으로 연결되었다. 그래서 여객용 기관차는 구동축이 걸리는 바퀴를 크게 하여 좀 더 빨리 달릴 수 있게 했고, 반대로 화물용 기관차는 작은 바퀴를 여러 개 달아서 속도 대신 토크(견인력)를 크게 했다.

19세기에 앞바퀴가 엄청 큼직한 자전거가 잠시 등장했던 것을 떠올려 보면 이해가 될 것이다. 그때는 체인이라는 개념이 도입되지 않아서 두발자전거도 세발자전거처럼 페달이 앞바퀴에 곧장 연결되어 있었으며 앞바퀴가 구동축이었다.
그리고 바퀴를 크게 하는 게 오늘날로 치면 고단 기어를 써서 페달을 조금만 밟아도 접지면의 바퀴는 더 많이 돌게 하기 때문에, 속도를 향상시킬 수 있다. 물론 그만큼 페달을 밟는 데 힘은 많이 들겠지만 말이다.

이렇듯, 철도에는 장폐단· 단폐단 같은 미처 생각도 못 했던 특성 구분이 존재한다는 걸 우리는 알 수 있었다.
비행기의 랜딩 기어 바퀴의 배치도 이런 표기법으로 기술해 보고 싶은 생각이 들지 않는지?

다만, 랜딩 기어 바퀴에는 구동축 같은 건 전혀 존재하지 않으며, 반대로 철도 차량은 비행기나 트럭의 바퀴처럼 바퀴가 안쪽으로 두 겹이 배치되는 경우는 존재하지 않는다는 게 고려할 점이다. 궤도를 구성하는 한 쌍의 레일의 안쪽에 또 차륜을 얹을 레일이 있는 건 아니기 때문이다. 무슨 복수의 궤간을 지원하도록 특수하게 설계된 선로가 아닌 이상 말이다.

Posted by 사무엘

2013/09/06 08:34 2013/09/06 08:34
, , , ,
Response
No Trackback , 3 Comments
RSS :
http://moogi.new21.org/tc/rss/response/874

신앙 관련 짧은 생각 둘

1.

“예수 천당 불신 지옥”은 기독교 교리를 딱 함축적으로 요약해 놓음과 동시에,
요즘 같은 인본주의 다원주의 상대주의가 팽배한 시대에 정말 꺼내기가 거북하고 과격한 구호이다.
또한 이것은 논리적으로 굉장히 많은 책임을 요구하는 명제이기도 하다.

책임이라는 게, 굳이 크리스천이 세상을 상대로 꼭 좋은 행실을 보여야 하고 모범생, 일류, 리더 행세를 해야 한다는 게 아니다. 문제의 본질은 선행이 아니다.

그보더 더 원론적으로...
예수쟁이들은 남에게 잘 보이기 전에 자기네끼리부터라도 잘 지내야 한다!

자기 깡으로 아무리 착하고 의롭게 살아도 예수 안 믿으면 죽어서 자기 죄 가운데 죽고 지옥 간다고 경고했는데..
그럼 역으로 예수 믿고 영원한 생명이 있는 사람들은 자기들끼리는 서로 어떻게 지내야겠는가?
좋은 간증 지키는 방법이 다른 먼 곳에 따로 있는 게 아니다.

불신자 부부는 조금만 틀어지고 자기 이익이 침해받는다 싶으면 싸우고 이혼할지라도, 크리스천 부부는 그렇지 않아야 한다.
세상 사람들은 사람을 믿을 수 없으니 법이나 시스템의 힘으로 분쟁을 해결한다 해도 크리스천 내부의 문제는 가능한 한 더 선하고 훈훈한 방법으로 해결되어야 한다.

교회엔 공통된 신앙 빼고는 지역색이 다르고 정치 성향이 다르고 취미와 성격과 성장 배경과 가치관이 다 다른 사람들이 모여 있다.
그래도 성도들간에는 교리 문제나 반역 문제가 아닌 이상은 이해와 사랑, 희생과 헌신, 섬김이 있어야 한다. 그리고 그만치 거짓 교리, 불순분자에 대한 에러 복구 능력도 갖추고 있어야 한다. 사람의 구원 여부를 가시적인 방법으로 확인할 수가 없는 이상, 이 능력은 교회 성도에게 필수이다.

교회 안에서 성도들이 세상적인 다른 소재를 두고 끼리끼리 갈라지고 친목질에 심지어 팀킬을 벌이는 일이 없어야 한다. (바알세붑 팀킬 가설은 마태-마가-누가복음에 3콤보로 기록되어 있다)
그 대신 공통의 목표와 공통의 믿음을 대외적으로 행사할 수 있는 활동을 더 많이 해야 한다. 이건 거리 설교의 큰 유익 중의 하나이기도 하다.

하나님은 신약 시대에 기독교 정부, 기독교 국가, 기독교 기업, 기독교 학교를 만드신 게 아니라 그냥 간단히 지역 교회를 세우셨다는 사실을 명심하자. 이게 하나님이 일하시는 방법이다.
성경은 그리 호락호락 만만한 책이 아니다. 믿음으로 얻는 구원과 구원의 영원한 보장을 가르치지만 그걸로 끝이 절대로 아니며 그 뒤부터 교회를 중심으로 아주 판타스틱한 일생 여정을 가르치고 있다.

2.

세월이 흐를수록 성경 말씀이 그다지 믿어지지 않고 최소한 내 삶과 직접적인 관계가 없다는 생각이 들고..
이런 것에 몰두해 봤자 밥이 나오나 돈이 나오나 하는 생각이 들고..
“그래, 구원받은 것까지는 좋다 치는데, 그래서 어쨌다고?”라는 생각이 들고,
내 삶에서 하나님의 임재가 별로 느껴지지 않고, 주변에 복음을 전하려는 의욕이 식어 가고
성경대로 살면 오로지 호구 되고 바보 되고 손해만 본다는 생각이 들고,
구원의 기쁨과 감격이 아련한 옛날 추억 같은 생각이 든다면..

그건 그 사람이 연륜이 쌓이고 이치를 깨달은 게 전혀 절대로 아니다.
오히려 첫사랑이 식어 가고, 하나님과의 관계가 멀어지고, 크리스천의 생명력이 소멸하고, 영적으로 배도하고 타락하고 있다는 뜻이다. 이른바 '구원받은 불신자' 상태이다.

영적 엔진오일 부족 경고등이라도 켜져서 깜빡이고 있을 때, 인생이라는 자동차를 정비소에 보내서 수리를 받아야 한다. 아예 차가 퍼져 버리거나, 수리 수준을 넘어서 폐차 단계로 상태가 더 악화되기 전에 말이다.

당신의 영적 프로그램에서 debug assertion failure가 나 있을 때 어서 디버깅을 해야 한다. 커널 패닉이 뜨기 전에 말이다. 그냥 나일롱 신자로 만족하고 지내는 것은 하나님 앞에서 자랑이 아니며 겸손은 더욱 아니다.

또한, 예수 믿는 생활은.. 단순히 여타 종교나 이념이 틀렸기 때문이라는 소극적인 이유만으로 하는 게 아니다. A, B 중 A가 틀렸다고 해서 B가 자동으로 논리적으로 맞게 되는 건 당연히 아니기 때문이다.
B가 절대적으로 맞고 사랑스럽기까지 하니, B와 같지 않은 A나 C 같은 다른 건 자연스럽게 거부하는 적극적· 능동적인 구도로 가야 한다. 위조지폐를 판별하는 법은 진폐의 특성을 마스터하는 방식으로 해야지, 위폐만 만지면서 익히는 게 아닌 것과 비슷한 맥락이다.

Posted by 사무엘

2013/09/03 08:27 2013/09/03 08:27
,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/873

한글 글꼴 처리 기술의 변천사

※ 0세대

0이라는 숫자는 뒤에 나올 1~3세대와 비교했을 때 '상대적인' 관점에서 붙여졌다. 1~3에 비해 0은 기계/아날로그적인 성격이 짙다.
한글을 모아쓰기+네모꼴 형태로 표현할 여건이 도저히 안 되는 환경을 말한다. 한 낱자를 상황에 따라 여러 벌로 분간해서 처리할 수가 없고, 최소 수천 자에 달하는 한글을 글자 단위로 부호화할 수도 없다.

옛날에 전보가 한글을 풀어쓰기 형태로 찍었다고 그러고, 김 정수 교수가 고안한 한글 두벌식 기울여 풀어쓰기도 0세대 기술이다. 굳이 풀어쓰기가 아니라도, 쓰이는 한글 몇 글자만 그림처럼 다루는 것도 딱히 기술이란 게 쓰인 게 아니므로 넓게는 0세대 기술로 간주한다.

그나마 0세대 기술 중에서 한글의 원리를 가장 잘 반영한 바람직한 기술은 공 병우 한글 세벌식 타자기, 그리고 그 이념을 물려받은 직결식 글꼴이다.

※ 1세대

제한된 벌수의 자모를 조합하여 한글 글자를 정사각형에다 모아쓰기 형태로 찍을 수 있다. 16*16 크기의 화면용 조합형 한글 글꼴이 바로 1세대의 상징이다.

옛날에 자체 한글을 지원하던 국내 도스용 프로그램들은 전부 이 수준의 기술을 사용하였으며, 도스용 아래아한글 1.x는 더 나아가서 간단한 수준의 옛한글과 자체 조합 로직까지 구현했다. 1세대 기술은 작고 간결하면서도 한글의 조합 원리와 무척 잘 부합한다는 큰 장점이 있기 때문에, <날개셋> 편집기 역시 최소주의를 추구하는 차원에서 딱 이 수준의 기술만을 의도적으로 고수하고 있다.

철도역 승강장의 전광판이 0세대인 롤지나 플랩에서 LED로 바뀌면서 1세대 기술로 한글을 표현한 것들이 많다.

※ 2세대

1세대보다 많이 발전했다. 8*16, 16*16의 한계를 벗어나 글자 크기를 자유롭게 조절할 수 있고 심지어 윤곽선 글꼴을 지원한다. 영문의 경우 W와 I의 폭이 다른 가변폭 글꼴을 지원한다. Windows의 경우 트루타입 글꼴이 도입되면서 글꼴의 기술 수준이 1.x세대에서 2세대 수준으로 껑충 뛰었으며, 아래아한글도 2.x 버전으로 넘어가면서 이 수준에 도달했다.

디스플레이 소자의 기술이 발달하면서 요즘은 전광판이 청색이나 흰색을 포함한 원색도 잘 표현하고 해상도도 더욱 높아졌다. 그래서 종전의 16*16만으로는 글자의 크기가 너무 작기 때문에 2세대로의 전환은 필수이다.
그러나 2세대 기술은 구현체마다 차이는 있지만, 1세대에 비해 한글 자체만의 조합 가능성이나 옛한글 표현 능력은 오히려 퇴보한 경우가 많다. 1코드 포인트당 반드시 한 글자가 대응한다는 한계에 여전히 매여 있기 때문이다.

※ 3세대

글꼴 처리 기술의 만렙으로, PC에는 21세기 무렵부터 도입되었다. 한글까지 가변폭 글꼴의 처리가 완벽하게 지원되며, 가변폭으로도 모자라서 커닝까지 처리된다. OpenType 기술을 이용하여 아랍· 태국어 문자까지도 꼼수 없이 잘 처리할 수 있을 정도인데 하물며 옛한글쯤이야 모아쓰기 형태로 표시를 못 할 이유가 전혀 없다.

유니코드라는 건 이런 글꼴 처리 기술과 결부되지 않을 수가 없는 규격이다. 그렇기 때문에 문자의 서식을 전혀 고려하지 않는 텍스트 에디터를 만든다 해도, 이제는 유니코드를 완벽하게 지원하려면 워드 프로세서를 만들 때나 필요할 것 같은 이런 기술을 어느 정도 사용하지 않을 수 없게 되었다.

3세대에서는 글꼴의 화면 렌더링도 단순한 grayscale 수준을 넘어서서 LCD 화면의 픽셀 구조에 특화된 subpixl 방식을 지원한다.

Posted by 사무엘

2013/08/31 19:47 2013/08/31 19:47
, ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/872

마태복음 20장에 나오는 품꾼 비유는 논조가 다소 이질적이며, 누가복음 16장의 불의한 청지기 비유만큼이나 좀 어렵게 느껴질 수도 있다. 하루 종일 일한 사람도 1데나리온을 받고, 마감 한 시간 전에 와서 1시간만 달랑 일한 사람도 1데나리온을 받았기 때문이다. 하나님은 성경에다 이런 불공평한 이야기를 왜 써 놓으신 걸까?

나도 하나님의 심정을 다는 알지 못한다. 그러나 성경의 다른 부분이나 인류 역사에서 총체적으로 드러나는 하나님의 성품으로부터 짐작해 보건대, 하나님께서 그런 정책을 취하시는 것이 충분히 가능은 하다는 걸 느낀다.

저 비유는 ‘하나님의 주권’ 관점에서 접근할 필요가 있다. 사도행전을 보면, 똑같은 예수님의 사도 중에서도 야고보는 헤롯의 칼에 곧장 순교한 반면 베드로는 천사가 와서 몇 번이고 구해 줬다. 이것은 하나님이 근본 성품이 이랬다 저랬다 하는 변덕쟁이 기분파여서라거나, 야고보가 베드로보다 영적으로 열등하기 때문에 벌어진 일이 아니다. 또한, 세상에서 꼭 실력 좋은 사람만 1등을 하는 게 아니라는 자조적인 차원(전 9:11)의 이야기도 아니다.

욥은 현대인 같았으면 몇 번이고 멘붕을 거듭하다가 자살했을 정도의 최악의 고난과 시련을 경험했다. 이를 체험하고 욥이 하나님에 대해서 깨달은 것은 바로, 하나님은 무엇이든 할 수 있고 그분께서 자신에게 그 어떤 일을 허락하시든지 그분은 선하고 전지전능하신 면모가 변하지 않는다는 것이었다. 하나님께서 욥을 죽을 때까지 그 상태로 내버려 두시든, 그리고 다니엘의 세 친구들을 풀무 불에서 보호하지 않고 순교하게 내버려 두시든지 말이다(단 3:17-18).

그 정도인데 그런 하나님이 하물며 비유에서처럼 일꾼을 고용하고 품삯을 주는 정책 하나조차 마음대로 결정을 못 하시겠는가?
애초에 하루 일당을 1데나리온으로 계약했으니, 그 주인은 나중에 말을 바꾸지도, 임금을 떼먹지도 않고 품꾼에게 그 약속을 정확하고 성실하게 이행했다. 이게 바로 포인트다.

나중에 다른 일꾼이 추가 투입될 수도 있고 그들은 일당을 얼마만치 받을지에 대해서는 애당초 아무런 언급이 없었다. 그건 주인 사정이고 추가 일꾼의 사정이지, 내가 신경 쓸 필요가 없는 내용인 것이다.
그런데 그런 걸 자꾸 부각시킴으로써 사람과 하나님 사이의 신뢰를 틀어지게 만들고, 자기 처지를 불평하게 만들고 남을 탐내고 원망하게 만드는 것이 마귀의 역사이다. 공산주의도 이런 사고방식을 바탕으로 생겨났다.

주인의 이런 반응에 삐쳐서 “흥, 그럼 다음부터는 나도 문 닫을 때 다 돼서 일하러 가야지” 같은 잔머리를 굴리는 건 별 의미나 영양가가 없는 짓이다. 솔로몬의 재판을 보고는 “CCTV도, 유전자 감식도 없이 무슨 이런 허접한 재판이 다 있냐? 그럼 나도 아기를 납치한 다음엔 상대방에게 아이를 주라고 생색 내면 되겠네.” 이러는 것과 똑같다.
성경을 읽고도 그 집필 의도를 전혀 이해하지 못하고, 숲을 보지 못한 모습이라 하겠다. 그래서 성경은 하나님은 인간의 잔머리에 결코 조롱· 농락을 당하지 않는다는 힌트까지 알려 놓으셨다(갈 6:7).

이런 비논리적인 하나님 무조건 킹왕짱 정신승리법이 어디 있느냐고 비아냥거리는 분이 있을지 모르겠다. 뭐, 틀린 지적은 아니다. 그게 기독교 신앙생활을 하는 기본 원칙이며, 크리스천과 불신자의 사고방식의 큰 차이 중 하나이다. 하나님 앞에서 낮추고 엎드리고 바보 되는 것 말이다. 예수님이 먼저 우리를 구원하기 위해 낮아지셨고 킹왕짱 사랑을 베푸셨으니까!
그리고, 하나님께 나아가는 데 세상 스펙이 전혀 필요하지 않기 때문에, 이 세상에서 사람마다 물질적인 여건이나 스펙이 불균등하게 분배된 것은 사실은 불공평이 아닌 것이다.

요컨대 마태복음 20장의 품꾼 비유에서 우리가 읽어야 하는 것은 일한 시간과 관계없이 1데나리온 일당을 지급한 눈에 띄는 정책 자체보다도, 그 위에 있는 하나님의 신실함과 주권이다. 성경을 제대로 읽으면, 하나님은 진짜로 공평해야 하는 분야에는 정말 칼날같이 공평하며, 정말로 논리가 필요한 곳에서는 완전 철두철미한 논리 체계가 갖춰져 있다는 걸 알 수 있다.

물론, 그냥 영적으로 적용해서 모태신앙으로 나태하게 산 사람보다 뒤늦게 구원받고도, 알찬 인생을 살고 주님으로부터 상을 더 많이 받는 사람을 떠올리는 것 역시 나쁘지 않다. “처음 된 자가 나중 되고, 나중 된 자가 처음 될 것이다”란 교훈이 뒤에 등장하니까 말이다.

Posted by 사무엘

2013/08/29 08:23 2013/08/29 08:23
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/871

주말에 노트북 PC나 읽을 책을 챙겨 들고 한적한 전철역으로 떠나서 피서를 즐기는 건 수도권 광역전철 역세권에 사는 사람만이 누릴 수 있는 복이다.

지금까지 경의-일산선, 분당선, 과천-안산선, 서울 7호선, 공항 철도 등 여러 노선을 다녀 봤다. 하지만 1호선과 직결되는 광역전철이나 경춘선은 상대적으로 덜 탔다. 안 그래도 토요일 낮에는 지하철들이 혼잡한 편인데 거기는 특히 너무 혼잡하기 때문이었다.

경춘선은 통일호, 무궁화호를 거쳐 지금은 전동차와 ITX 청춘이라는 실로 드라마틱한 변화를 겪은 광역전철이다. 비록 혼잡하고 타러 가기가 힘들고(무려 상봉까지!) 열차가 중앙선보다도 드물게 다니긴 하지만(경의선 서강-공덕의 배차간격과 비슷함), 주변 경치가 워낙 좋기 때문에 한 번쯤은 날 잡아서 다시 시승해 봤다. 그리고 그 결과는 만족스러웠다.

경춘선 중에서도 백양리와 김유정 역에서 내려서 역 주변을 카메라에 담아 봤다.

사용자 삽입 이미지
사용자 삽입 이미지
산과 강으로 둘러싸인 백양리 역 승강장이다. 이 넓은 승강장에 사람이라곤 나밖에 없었다. 신선놀음이 따로 없었다.
사용자 삽입 이미지사용자 삽입 이미지
역의 바깥은 이렇게 생겼다.
주변이 워낙 한적하고 부지가 넉넉하니 광장도 있고 자전거 거치대도 있고,
사용자 삽입 이미지
사용자 삽입 이미지
자동차 주차장은 그냥 무료 개방이다.
사용자 삽입 이미지사용자 삽입 이미지
위의 사진은 역 쪽을 대고 바라본 풍경이다. 사진으로만 봐도 정말 운치 있어 보이지 않는가?
그나저나 경춘선은 역시 은근히 길더라. 서울-수원 정기권(거리 비례 6단계)으로도 백양리 역까지만 가도 내릴 때 추가 차감이 발생했다.

다음, 김유정 역으로 간다.
사용자 삽입 이미지
이 역은 원래 신남 역이라고 불렸으나, 근처에 소설가 김 유정 문학촌이 있다 하여 2004년에 역명이 이렇게 바뀌었다. 이 역은 역명판의 한글 서체도 다 코레일체 대신 궁서체를 사용하고 있으며, 역사가 한옥 컨셉의 특이한 형태로 지어졌다.
사용자 삽입 이미지사용자 삽입 이미지
이 역은 선로가 고가가 아닌 평지에 있다. 그리고 역사에서 승강장으로 갈 때 육교가 아니라 '지하도'를 이용한다. 그래서 전철역이 아니라 시골의 일반열차역 같은 인상이 느껴진다.
세상에 평지 선로 + 지하도 형태인 역은 매우 드물다. 반월, 대방, 구일 정도가 고작?
사용자 삽입 이미지
진짜로 전철역이 아니라 시골의 일반열차 철도역처럼 보이지 않는가?
역 주변에도 한옥 스타일의 정자와 뜰이 있다. 경춘선 탐방 때 한번쯤 들러 볼 만하다.

Posted by 사무엘

2013/08/26 08:34 2013/08/26 08:34
, , ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/870

오늘은 정치 코미디라고 해야 하나? 특이한 유튜브 동영상 몇 개를 좀 소개하겠다.

시 - 미친개 리명박패당을 무자비하게 징벌하리라 by 김 영남 (현재 북한 권력의 2인자인 그 사람을 말하는 건지?)

이것은 북한에서 만든 영상물이다.
철덕이라면 수 년 전에 <영상포엠 간이역>이라는 KBS 영상 다큐멘터리를 기억할 텐데,
그런 것과 비슷한 스타일로, 적절한 영상과 BGM을 곁들여 창작시를 낭송했다.
무슨 내용이냐 하면.. 당시의 남조선 현직 대통령을 입에 담지 못할 온갖 욕설로 비방하고 저주하는 내용.

“력사앞에 민족앞에 천추에 용납못할 대죄를 저지른 깡패 리명박역적
... 백두산 절세위인들의 최고존엄까지 감히 건드리며 도발의 한계선을 넘어섰으니
... 민족도 안중에 없고 인륜도덕도 줴버린 미친개 리명박패당무리들
... 특대형 죄악의 말로가 어떤것인지 지옥의 문어구에서야 알게 될 네놈들
... 썩은 눈깔로라도 제정신 들어 바로 보라
... 네놈들 흔적도 없이 태워 지구밖에 내던지리라”


이 명박 전대통령이 다른 건 몰라도 대북 정책 하나는 정말 잘 밀어붙였다는 걸 알 수 있는 동영상이다.
이 승만 이래로 대한민국 역대 대통령 중에 저 정도로 북한으로부터 미움받고 능멸당한 사람이 있었을까? ㅋㅋㅋ

뭐 이런 퀄리티의 시가.. 북한에서는 무슨 케이블 방송도 아니고 우리나라의 KBS뻘 되는 국영 공영 방송에서 작년 봄쯤에 버젓이 방영되었다.
진짜 딱 “개미를 죽입시다 개미는 나의 원수” 같은 느낌이니, 웃으면서 보면 된다.
한국어와 한글을 쓰는 아담의 후손, 단군의 후손이 사상이 이상하게 박히면 저렇게까지 맛탱이가 가는구나 싶은 생각이 든다.

그런데 이런 시가 한두 개가 아니다. -_-;; 도대체 무슨 약을 빨면서 저런 시를 쓰고 아무렇지도 않은 듯이 낭송을 했을까?

쥐명박의 말로를 그린다 by 김 향일

“붓을 벗으로 삼고 세상의 아름다움만을 골라 화판에 옮기는 나는 미술가
... 이 붓으로 나는 지금 이름조차 역겨운 쥐새끼를 그린다 (!!!)
... 쥐명박, 너는 아무리 뜯어봐야 볼꼴없는 늙다리 생쥐새끼” (대놓고 외모 디스 ㄲㄲㄲㄲㄲㄲ)


병사는 방아쇠에 손을 걸었다 by 송 정우

“못 참아 못 참아 더 이상 못 참아
우리의 최고존엄을 또다시 건드린 리명박역도를 향해
병사는 총구를 겨눈다 병사는 방아쇠에 손을 걸었다
... 열두번도 더 뒈졌어야 할 네놈이 더 숨을 자리는 이하늘아래 없다”


무자비하게 죽탕쳐버리리라 by 류 명호

“명박이 쥐새끼무리들이 한줌도 못되는 그 쥐새끼들이
감히 우리의 신성한 하늘에 삿대질했더니
... 최고사령관 김정은장군의 명령이 내리는 순간 리명박쥐새끼무리들을 씨도 없이 죽탕쳐버리리라”


쟤들이 왜 저렇게 이 명박 전대통령을 못 잡아먹어서 안달인지는 간단하다.
김, 노 전대통령과는 달리 이 명박은 “돈 내놔 X끼야!” “드.. 드리겠습니다!”에 휘말리지 않고 북한을 상대로 소신껏 행동했다. 그래서 북에서는 진작부터 온갖 깽판을 부리면서 남조선 대통령 디스질을 하고 천안함도 침몰시키고 연평도 포격을 저질렀다. 딱 그림이 그려지잖아.

거기에다 2012년 4월 태양절(북한 김 일성의 생일) 즈음엔 이 대통령이 북한을 상대로 이런 말까지 했었다.
그렇게 김 일성을 신격화하고 핵무기 미사일 개발하는 비용이면 주민들을 수 년치 먹여 살릴 수 있으니 폐쇄와 고립이 아니라 공존과 상생의 길을 가야 하지 않느냐고.
아니, 이 정도면 간접 디스가 아니라 돌직구를 날린 건가? ㅎㅎ 지극히 상식적으로 당연하고 건전한 말을 했을 뿐인데.

그랬더니 북한에서는 자기네 체제의 치부를 정면으로 찌른 이 명박을 부관참시하겠다고 길길이 날뛰었던 것이다.
저기서 관련 동영상들을 보면 알 수 있듯, 인민들을 시켜서 온갖 생 X랄을 떨었다. 이 명박 규탄 퍼레이드를 하고, 이 명박 인형을 만들어서 불태우고 돌팔매질을 하고 탱크로 깔아 뭉개고, 사격 훈련 과녁으로 삼고, 축시의 참배를 하고..

그런데 종북 좌좀들은 이것도 다 남북 관계 망쳐 놓은 이명박 새누리당 때문이라고 욕한다. ㅎㅎ
이 명박 대통령에 대한 호불호와는 무관하게, 난 그런 주장에는 공감 못 해 주겠다.

퍼레이드 참여자의 인터뷰를 보면 쥐명박, 쥐새끼, 지능지수가 2MB밖에 안 되는 놈... 별별 욕지거리가 다 나온다. '죽탕치다', '쏠라닥질하다/쏠라닥거리다'라는 말을 난 처음 들었다.
안 그래도 부족한 나랏돈을 저런 짓을 하는 데나 쓴 것이다.
그나저나.. 북한 로동자 계급 주민들은 컴퓨터라는 물건을 구경도 해 본 적이 없을 텐데 '메가바이트'라는 정보량 단위의 의미를 알기나 하고서 2MB 드립을 친 걸까?

이 명박 대통령이 북한에서 그림으로 얼마나 능멸을 당했는지를 예를 좀 보이겠다.

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

사용자 삽입 이미지사용자 삽입 이미지
자, 앞의 <쥐명박의 말로를 그린다>를 다시 보시라. 이건 저런 선전용 그림을 그리는 작업에 참여한 어느 화가가, 체제 충성심 경쟁에서 점수를 따기 위해 기고한 시인 것이다.
사실, 대통령뿐만 아니라 국방부 장관과 합참 의장 같은 우리나라의 고위 군 관계자들도 실명이 거론되면서 북한의 매체에 의해 반통일 반동분자로 디스당한 것은 어제오늘 일이 아닌 게 사실이다.

우리가 이런 걸 유튜브로 편하게 보면서 마음껏 비웃어 줄 수 있는 건, 우리나라가 6·25에서 패배하지 않고 선조들이 나라를 피로써 지켜 낸 덕분임을 알아야겠다.
우리민족끼리 유튜브 채널은 몇 년 전에는 국내 접속이 차단되어 있었는데 요즘은 그런 것도 없는 듯. 재미있는 자료가 많다.

여담이지만, 쟤들의 영상 자막에 등장하는 북한 서체는 우리나라로 치면 문화바탕제목과 비슷하지만 완전히 같지는 않다.
그리고 북한 사람들도 적기는 두음법칙을 적용 안 하고 적어도, 실제로 발음을 할 때는 일일이 '리 명박, 력사'라고 안 하고 그냥 '이 명박, 역사'라고 읽는 것 같다.

Posted by 사무엘

2013/08/23 08:31 2013/08/23 08:31
, ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/869

« Previous : 1 : ... 133 : 134 : 135 : 136 : 137 : 138 : 139 : 140 : 141 : ... 214 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/03   »
          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:
2633749
Today:
547
Yesterday:
1754