My Programming Life

1.

<날개셋> 한글 입력기는 동일한 입력기 커널을 공유하는 세 개의 프런트 엔드가 있다.
그 중에서 가장 존재감 있는 터줏대감은 전용 에디터인 편집기이고, 실질적으로 가장 널리 이용되는 프로그램은 윈도우용 IME인 외부 모듈이다. 한편, 편집기처럼 실행되어 마치 IME처럼 동작하는 포인팅 장치 입력 유틸리티인 입력 패드도 지난 5.3 버전에서부터 추가되어 제 3의 프런트 엔드 구실을 하고 있다.

그 중 가장 먼저 만들어진 ‘편집기’는... 프로그램을 만든 본인부터가 에디터로서 아주 유용히 사용한다.
차라리 외부 모듈은 디버깅 할 때 외에는 사용하지 않는다. 운영체제의 기본 IME로 지정되어 있으면 파일을 고칠 수가 없어서 디버깅을 못 하기도 하기 때문이다.

<날개셋> 편집기는 어떤 점에서는 아주 답답하다. 가변폭 글꼴이 지원 안 되고 글씨 크기 조절도 안 되고, ClearType 렌더링이라든가 OpenType 스펙 등 오늘날의 모든 최신 타이포그래피 기술로부터 완벽하게 소외된 외딴 섬이기 때문이다.

그러나 한편으로 <날개셋> 편집기는 아주 작고 가벼우면서도 윈도우 95 이래 어떤 OS에서나 동일하게 유니코드 5.2 옛한글을 마음대로 조합할 수 있고 한글을 내 마음대로 다룰 수 있는 우리집 안방 같은 공간이다. 내가 만든 프로그램이어서 자화자찬 차원이 아니라 정말로 그렇다.
입력 기능뿐만 아니라 다양한 텍스트 필터도 있고, 한글을 자모 단위로 찾고 입력기에다 넘겨주는 글쇠를 붙여넣는 것 같은 아기자기한 기능도 있다. 도스 시절 추억의 도깨비 한글 비트맵 글꼴을 볼 수 있는 건 덤이다.

예전에는 옛한글은 오로지 내장 글꼴로밖에 표현할 수 없었는데 5.3에서부터 임의의 조합 테이블과 추가 자모를 내장 가능한 자체 비트맵 글꼴 포맷을 제정함으로써 <날개셋> 한글 입력기의 커널은 나름대로 글꼴도 독립을 이뤘다. 아래아한글 1.x와 비슷한 글월 입력 환경을 윈도우 환경에서 재현해 낸 것이다.

완전한 텍스트 에디터 엔진을 처음부터 새로 만들었기 때문에, 앞으로 한글 표현 방식이 어떻게 바뀌든 이 구조에 맞춰 엔진을 마음대로 내가 고칠 수 있다.
리눅스나 맥 OS에서는 이런 게 언제쯤 상륙 가능할까? ㄲㄲ

2.

지금까지 <날개셋> 한글 입력기를 만드는 과정에서 그 당시엔 내가 방법을 전혀 몰라서 어려움을 겪던 고비가 몇 차례 있었다.
- 인스톨 패키지 만들기(2002~2003년): MSI 기반으로 완전히 해결
- 외부 모듈(2004~2005년): 3.x 초창기 버전 때 무수한 시행 착오를 겪으면서 결국 안정화 단계. 하지만 “아직까지도” 일부 극소수 몰상식-_-한 응용 프로그램에서 사소한 오동작 버그 신고가 올라오고 있음
- 64비트(2007년): 결국은 본인이 64비트 기계를 직접 장만하면서 지원에 성공.

3.

한 컴퓨터를 놔두고 세벌식 사용자인 본인과 두벌식 사용자인 지인이 같이 앉아 문서를 읽으면서 검토와 교정을 하고 있었다. 이때 복벌식 입력 방식을 아주 유용하게 사용했다. 글자판 전환을 할 필요 없이 서로 자기에게 익숙한 글자판으로 자기가 수정하고 싶은 곳에서 바로 글자를 입력하면 되니 이렇게 편할 수가 없었다. ^^

이거 하니까 세벌식 관련 다른 팁이 또 생각난다. 세벌식 숫자 배열이 익숙한 분이라면, numlock이 켜져 있을 때 오른손 숫자 자리가 non-shift 자리로 내려오게 하면 엑셀 같은 데서 숫자 입력을 아주 편리하게 할 수 있다. <날개셋> 한글 입력기로는 가능하다.

4.

버전 5.53 내지 5.65쯤부터 추가되었지 싶은데, <날개셋> 편집기로 프로그램이 아닌 문서 창(MDI)의 시스템 메뉴를 보면 해당 문서 파일의 ‘속성’ 창을 바로 꺼내거나, 탐색기를 꺼내거나 전체 경로를 복사하는 명령이 있다. ‘파일 경로 복사’를 고르면 되는데, 지금까지는 진짜 말 그대로 파일의 경로가 텍스트 형태로 복사되어 메모장에서만 그걸 붙여넣을 수 있었다.

그런데 탐색기에서 Ctrl+V를 누르면 해당 파일 자체가 실제로 복사도 되게끔 프로그램을 고쳐 봤다. 메모장과 탐색기는 클립보드를 사용하는 방식이 완전히 다르기 때문에 이 기능은 서로 충돌을 일으키지 않으며, 이렇게 하니까 아주 편하다. 5.8 버전에 이 기능이 반영되지 못해서 아쉽다.

5.8을 릴리즈한 후 현재까지 도움말의 오타 내지 로그인 화면· 아웃룩· vim 등에서의 사소하지만 쉽지 않은 외부 모듈 관련 버그가 몇 개 보고되어 있다. 하지만 다들 프로그램의 성능이나 안정성(죽는다거나-_-)과 관련된 건 아니다. MS IME의 소스를 직접 보지 않는 이상 이런 것까지 다 완벽하게 처리하는 버그 없는 IME란 제작 불가능하다. -_-

5.

다음은 <날개셋> 타자연습 이야기. 지금부터는 그림도 좀 곁들이겠다.

사용자 삽입 이미지
요즘도 실력 유지를 위해 타자 연습을 안 하는 건 아닌데,
주옥같은 연습글을 만들었다. 다음 버전에 추가할지 진지하게 고민 중이다. ^^;;

공 병우 세벌식은 10년을 넘게 써도 한글의 위상을 끌어올린 정말 위대한 발명품임이 느껴진다. 그 반면 저 불편한 현행 두벌식 글자판은 어떻게 쓰는지 그걸로 빨리 치는 사람들이 대단하기 그지없다. 세벌식의 단점--기껏해야 글쇠 수 좀 많고 4단 쓰는 것--에 비해 두벌식의 단점은 훨씬 더 치명적이다.

사용자 삽입 이미지
2008년부터 2010년까지 존재하는 본인의 게임 점수판은 전부 ‘승리’(12단계 깨고 엔딩)이다. 본인이 사무엘이라는 이름을 쓰기 시작한 건 2008년 말부터임.
<날개셋> 타자 게임은 과거의 한메 타자 베네치아보다 훨~씬 더 어렵지만 요즘은 한글 타자가 워낙 일상화했기 때문에 본인 말고도 엔딩 보는 사람이 꽤 있을 것이다.

6.

끝으로, 10년 전에 만들었던 WordTech 엔진(컴퓨터 자동 대국 기능)을 요즘 완전히 새로 다시 짜고 있다. 스크린샷은 기존 WordTech와, 새 엔진(GUI를 갖다붙이지 않은 콘솔 프로그램)끼리 서로 검증 대국을 시키는 모습이다.

사용자 삽입 이미지
본인은 <날개셋> 한글 입력기를 만들기 전엔 국내에서 거의 최초로 크로스워드 게임 엔진을 만든 바 있으나... 그 당시의 작품은 지금의 관점에서 보면 기술적으로 개허접.. ㄲㄲㄲㄲ

요즘은 워낙 컴퓨터가 똑똑해진 덕분에, 굳이 이것보다 더 빠르고 메모리를 덜 쓰는 크로스워드 게임 엔진을 만든다는 게 큰 의미는 없지만... 이번에 새로 짠 코드는 메모리 사용량, 계산량, lexicon의 자료구조와 알고리즘, 코드의 깔끔함과 재사용성 등 모든 면에서 10년 전의 구닥다리 코드와는 비교가 되지 않는다. 참으로 아름답다. ^^;;

사실, 이렇게 만들면 된다는 이론적 기반은 이미 수 년 전에 완성되었지만 <날개셋> 개발 때문에 뒷전으로 밀려서 지금까지 작업을 못 하고 있었을 뿐이다.
WordTech도 버전업 좀 하고 싶은데.. ㅠㅠ 컴퓨터과학과 대학원 수업에서 무슨 과목으로든 프로젝트로 좀 할 기회라도 있었으면 좋겠다. 이 엔진 얹으면 버전 4.0으로 가는 건데.;;

콘솔은 만국의 공통 인터페이스이다 보니(표준 입출력 스트림^^), 엔진을 비주얼 C++뿐만이 아니라 오랜만에 DJGPP로도 컴파일해서 도스에서 돌려 봤다. 똑같이 32비트이기 때문에 별 어려움 없이 돌아간다. 지금도 DJGPP가 버전업이 되고 있는지는 모르겠지만 내가 보유하고 있는 건 무려 1997년에 설치한 버전. 혹시 bool 키워드가 지원되지 않나 확인해 봤는데 다행히 지원한다.

10년 전에는 DJGPP의 그 느린 빌드 속도가 무척 거슬렸으나 지금은 그마저도 전광석화. 별도의 도스박스 같은 에뮬뿐만이 아니라 그냥 윈도우 운영체제의 NTVDM에서도 잘 돌아간다.
단, printf의 포맷 지정자로 %c만 인식하고 %C는 인식하지 않는다. 대문자를 찍는다는 생각에 %X와 %x(16진수 숫자)를 구분하듯 습관적으로 %C를 지정해 줬는데 인식이 안 되더라. 뭐, 어차피 찍을 때 chCode+'A' 식으로 대문자를 지정하기 때문에 %c와 %C는 전혀 구분할 필요가 없고 %c만 지원해도 충분하긴 하다.

이상으로 본인의 programming life 잡설 끗.

Posted by 사무엘

2010/12/29 16:46 2010/12/29 16:46
, , , , , ,
Response
No Trackback , 12 Comments
RSS :
http://moogi.new21.org/tc/rss/response/440

Trackback URL : http://moogi.new21.org/tc/trackback/440

Comments List

  1. 처음 알았음..; 2010/12/29 17:50 # M/D Reply Permalink

    으음.... 날개셋 입력기가 "외부 모듈"이었군요....

    1. 사무엘 2010/12/30 00:56 # M/D Permalink

      ‘외부 모듈’이라는 게 뭐 정확한 용어는 아니지만 제가 편의상 붙인 것입니다.
      <날개셋> 한글 입력기는 실질적으로 외부 모듈, 즉 IME의 형태로 제일 널리 쓰이고 있죠.ㅋㅋ
      하지만 외부 모듈이 개발된 건 버전 3.x대에 와서이고, 그 전에 제 프로그램은 편집기 형태로만 존재했습니다.

  2. 김기윤 2010/12/29 20:37 # M/D Reply Permalink

    1. 외부 모듈을 디버깅 하려면 오히려 기본 IME 로 지정하면 디버깅을 못하는 아이러니..
    그래도 날편은 작고 가벼우면서 서식 없는 간단한 텍스트 편집하기에 괜찮아서 메모장 대용으로 즐겨 사용하는 편입니다. 한자 읽고 싶을때도 사용하구요. (...)

    2. -인스톨 패키지-저는 아직 만들어 본 적이 없습니다 ㅋㅋㅋ
    -외부 모듈-몇몇 몰상식한 응용 프로그램에서 아직도 버그가 발생하고 있죠 -_- 어찌 된 일일까요. MS제 응용 프로그램에서도 발생하니..
    -64비트-제가 64비트 컴퓨터를 장만하고 있지만 x64 타깃으로 배포용 프로그램은 만든 적 없습니다. 테스트용으로만 간단하게 몇몇개만 돌려보고..

    3. 패스

    4. ... 관련 메뉴를.. 못찾겠음.. orz.. 꼭꼭 숨어라, 머리카락 보일라 -.-

    5. 저는 엔딩을 지금까지 한번 밖에 못 보았죠. 언젠가 승리로 꽉 채워야 할텐데 말이죠

    6. 저번에 펜타고 AI 인터페이스를 좀 만져서 AI vs AI 를 시켜보았는데 참 재밌더군요-_-; 랜덤요소도 조금 있어서 선이 이기기도 하고, 선이 지기도 하고 비기기도 하고.. 분명히 같은 AI 인데 말이죠.

    1. 사무엘 2010/12/30 00:56 # M/D Permalink

      오랜만에 댓글로 뵙네요. ^^

      1. MS도 내부에 개발부가 워낙 많기 때문에 동일 회사 프로그램끼리의 충돌이 당연히 존재합니다. 대표적인 예가 MSI와 AppLocale 사이의 충돌이었죠.
      2. 특별히 탐색기 쉘 확장처럼 64비트 DLL을 꼭 지원해야 하는 경우를 제외하고, 딱히 64비트 ‘EXE’만을 만들어야 할 일은 거의 없지요. 비주얼 스튜디오의 익스프레스 에디션이 괜히 x64 플랫폼을 기본 제공 안 하는 게 아닐 겁니다.

      4. 문서 창을 최대화했을 때, 파일 메뉴 왼쪽에 있는 그 ‘문서 창의 시스템 메뉴’입니다. ^^
      5. 이미 상당한 세벌 고수가 되어 계신 겁니다. 곧 엔딩을 여러 번 하는 날이 오겠죠~
      6. 음.. 그러고 보니 오목 AI도 다시 손보고 싶고..;; AI뿐만이 아니라 삼삼 판단, 렌주 룰 등 오목에도 신경쓸 것 많습니다. ^^
      옛날에는 PC 통신으로 자작 오목 게임 프로그램들이 여럿 나돌았는데 요즘은 그런 건 다 스마트폰 앱으로 만들어야 장사가 되겠죠?
      저는 스마트폰은 PC처럼 컴 내부의 모든 걸 내 마음대로 다루질 못하고, 타자를 빨리 못 치는 게 불편해서 영 신기하게 와닿지가 않더군요.

    2. 김기윤 2010/12/30 19:43 # M/D Permalink

      아.... 왜 안보이나 했더니 저장하지 않은 "글월1" 상태로 그 메뉴를 찾았으니 안보였지-_-;; 처음에 누른 메뉴가 맞았었습니다. 파일을 연 상태로 보니 제대로 보이네요.. (덜덜..

  3. 주의사신 2010/12/30 10:38 # M/D Reply Permalink

    1. 제가 MS 내부끼리 충돌하는 것을 본 가장 황당한 경우가 다음 글입니다.

    http://sainthkh.codex.kr/xe/?document_srl=2177&vid=prog

    DirectX 팀이 IE팀을 많이 싫어하지 않고서야 어떻게 이런 걸 만들 수 있는지부터가 의문인 희안한 일이었습니다. 도대체가 이런 버그는 어떻게 만드는 건지 싶었습니다.

    2. 세벌식은 언제나 배워 볼까요?

    1. 사무엘 2010/12/30 11:29 # M/D Permalink

      우와 저건 AppLocale 버그보다 더하네요. ㅋㅋ
      (게임 개발 하시는 듯? 주의사신 님의 주 개발 분야는 처음 봅니다. ^^)
      일부러 버그를 만들지 않고서야 있을 수 없는 현상이라.. 제 전공인 한글 IME 분야에서도 여럿 목격했죠.
      윈도우 7 콘솔에서의 세벌식 버그, 스타크래프트 2 초창기 버전 내지 오페라 9.x에서의 오동작..
      특히 스타2와 오페라 문제는 한글 IME를 일일이 가려가면서 동작해야만 저런 버그가 발생할 수가 있을 겁니다. 버그를 만들어 넣기가 더 힘들 텐데.. 도대체 프로그램을 어떻게 만들었는지 따지고 싶은 심정이더군요.
      세벌식은 지금 당장이라도 꼭 시작해 보세요.

    2. 주의사신 2010/12/30 15:47 # M/D Permalink

      1. 졸업 작품 차 게임을 만들어 보고 있습니다.

      동화들 스토리가 꼬여서, 주인공이 그 꼬인 스토리를 정상적으로 돌아가게 하기 위해 노력한다 뭐 그런 내용을 다룰 생각입니다.

      계속 게임계에 남을지 아니면 다른 곳에 가게 될 지는 아직 잘 모르겠습니다. 이것저것 만들어 보는 것 자체가 즐겁네요. 게임 쪽을 그만한다면, 아마 개발툴쪽이나 문서 검색 쪽을 하게 될 것 같습니다.

      2. 이것저것 해 보다 보면 해보고 싶은 것이 많아져서, 만들고 싶은 것 다 만들어 볼려면, 아마 노아 할아버지만큼(...^^;;) 살아야 할 것 같습니다.

  4. Spica 2011/01/28 22:29 # M/D Reply Permalink

    메일을 보내도 답장이 없던데.. 혹시 제가 제가 틀리게 보낸 건가요? 달리 남길 데가 없어서 가장 가까운 날개셋 카테고리의 최신 글에 댓글로 남겨 봐요.

    1. 사무엘 2011/01/29 09:26 # M/D Permalink

      음? 그러셨습니까?
      근래에 낯선 분에게서 메일이 온 적이 없었거든요.
      주소가 정확한지 확인해 주세요. (sebulsik 골뱅이 드림위즈.컴)
      저는 특히 <날개셋> 프로그램 관련 메일은 24시간 안으로 늘 반드시 답장을 드렸습니다.

    2. Spica 2011/01/31 22:53 # M/D Permalink

      다시 보내 봤습니다. 이번에도 안 가면 제가 주소 이해를 잘못 하고 있는 거겠군요..;

    3. 사무엘 2011/02/01 09:48 # M/D Permalink

      네, 이번에는 제대로 간 듯합니다. 어제 이미 답장을 드렸습니다.

Leave a comment
« Previous : 1 : ... 1825 : 1826 : 1827 : 1828 : 1829 : 1830 : 1831 : 1832 : 1833 : ... 2204 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/12   »
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:
3050293
Today:
1313
Yesterday:
2142