날개셋 개발 10주년

올해 여름이면 <날개셋> 한글 입력기가 개발된 지 무려 10주년이 됩니다. (2000년 8월)

이 프로그램의 초기 버전(1.x)은 단순히 자체 한글 입출력 체계로 조합형 한글과 세벌식 최종 자판+모아치기를 구현해 보겠다는 아주 소박한 의지로 출발했습니다. 동기는 간단했습니다. 지금 윈도우 운영체제에서 이게 가능하지 않으니까 한번 만들어 보자는 것이었죠.

입력기의 기술 데모 정도밖에 되지 않는 정말 초라한 에디터 프로그램이었지만 2.x에서는 드디어-_- 탭과 자동 줄바꿈이 지원되면서 그럭저럭 쓸 만한 에디터의 면모를 갖추기 시작했습니다. 문자 집합의 크기가 16비트로 확장되고 간단한 옛한글 표현도 가능해졌고, 매우 불완전하긴 하지만 플러그 인이라는 개념도 이 때 처음 도입됐습니다.

이 프로그램이 널리 쓰이기 시작한 것은 3.x 시절부터입니다. 프로그램 내부 구조가 처음부터 다시 설계됐고, 글쇠와 오토마타에서 수식이 도입되어 프로그램의 활용도가 크게 올라갔습니다. 일부 미흡한 점이 있긴 하지만 유니코드를 지원하기 시작했고 표현 가능한 옛한글의 범위도 월등하게 넓어졌죠.
특히 3.x에서 드디어 외부 모듈이 도입됐습니다. 한글 입력 기능을 단순히 에디터뿐만이 아니라 진짜 운영체제 표준 입력기로 쓰는 날이 도래한 것입니다.

4.x에서는 3.x에서 닦아 놓은 기반을 토대로 하여 수많은 기능들이 마음껏 추가되고 버그가 고쳐졌으며, 말기에는 시대의 요구에 부합하여 드디어 64비트 버전도 나오기 시작했습니다. 점점 현재 버전의 형태와 일치하는 완전체가 되어 갔습니다.

그리고 5.x는 다시 한번 유니코드 5.2를 기준으로 프로그램의 한글 표현 범위가 확장되었으며, 유니코드 지원을 좀 불완전하게 하던 것을 완전히 보강했습니다.
요즘은 터치스크린 입력 방식이 대세를 이루고 있고 어지간한 IME라면 키보드 외의 여러 방식으로 문자를 입력하는 도구도 갖추고 있는 만큼, 최근에는 이쪽 분야의 기술을 적극 수용하는 연구를 해 왔습니다. 예전에 편집기가 제공하던 ‘화면 키보드’를 이런 입력 패드의 일종으로 바꾸고 문자표라든가 부수 한자 입력기 같은 것을 추가했으며, 편집기도 아니고 외부 모듈도 아니면서 입력 패드만 띄워 주는 별도의 유틸리티도 추가했습니다.

앞으로 <날개셋> 한글 입력기는 다양한 한글 입력 방식을 구현하는 가능성을 계속해서 넓혀 나갈 것입니다.
기본 입력 단위인 날개셋문자를 확장하고, <날개셋> 기본 입력기에도 뭔가 확장할 게 있습니다. <날개셋> 고급 입력기에도 고급 입력기라는 취지에 맞게 추가할 기능이 있습니다.
94개의 기본 글쇠뿐만 아니라 임의의 글쇠도 인식할 수 있는 스키마를 추가하고, 아이폰이나 휴대전화 입력 방식을 PC 상으로 흉내 내는 입력 패드도 추가할 것입니다.

이렇게 지금 생각하고 있는 큼직한 기능을 모두 잘 추가한다면 <날개셋> 한글 입력기는 곧바로 6.0으로 올라가는 데 지장이 없을 것입니다. 지금이 벌써 5.x가 꺾이기 시작했으니까요.
하지만 현실적으로 단번에 6.0으로 가기는 어려울 것이고 5.7이나 5.8 정도는 한 번 거치게 될 것입니다. 특히 7은 지금까지 <날개셋> 한글 입력기의 버전 번호에서 10년 동안 단 한 번도 등장한 적이 없는 숫자인데, 윈도우 7 유행을 따라-_- 도입될 가능성이 큽니다.

<날개셋> 한글 입력기 5.5x는 이미 구현된 기능들의 한도 내에서는 정말 윈도우용 “싸제”(=MS와 무관하게 개발된) 한글 IME로서는 그야말로 최정상의 경지에 도달해 있다고 여겨집니다. 구닥다리 윈도우 95/NT4부터 시작해 64비트 7까지, 운영체제 문자 프로토콜의 역사가 고스란히 담겨 있습니다.
5.0까지는 거의 2년에 버전이 1.0씩 올라가는 게 가능했는데 이제는 어렵네요. 버전업 속도는 점차 더뎌지고 있습니다.

한글 입력기로서 생각할 수 있는 기능이 다 들어가 버려서 이제 더 작업할 게 없으면
<날개셋> 한글 입력기는 이제 보안 패치나 미래의 OS에서 제대로 동작하는 버그가 있을 때 패치나 이따금씩 이뤄질 것입니다. 그리고 슬슬 타 운영체제 포팅이라든가, 심지어 SDK 내지 소스 공개를 생각할 수도 있죠.
그 날이 6.x나 7.x 시절이나 언제쯤 오게 될지는 모르지만 말입니다.

아무쪼록 곧 다가올 <날개셋> 한글 입력기 개발 10주년을 자축하며, 지금까지 제 프로그램을 성원해 주신 분들게 진심으로 감사합니다.

Posted by 사무엘

2010/01/11 11:01 2010/01/11 11:01
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/111

이번 <날개셋> 한글 입력기 5.5의 모든 바이너리들(EXE, DLL, IME)은 구동될 때 자기가 있는 곳과 동일한 디렉터리에서 ngsapp.ini라는 파일을 검색합니다.
메인 커널이라 할 수 있는 NGS3.DLL은 이 파일로부터 글꼴, 도움말 등 각종 부속 파일들이 있는 디렉터리 정보를 얻으며,
기타 응용 프로그램들은 NGS3.DLL 자체를 찾을 위치를 얻어 옵니다.

아래는 ngsapp.ini를 작성한 한 예입니다. [Paths]라는 섹션에다가 항목을 넣으면 됩니다.

[Paths]
Host=.
Font=..\Font
Help=..\Help
Plugin=.
Dic=..\Dic
Sample=..\Samples
CommonData=..
Applet=.
PluginX86=..\win32
AppletX86=..\win32
UserData=.

Host는 다른 응용 프로그램들이 NGS3.DLL을 찾는 경로입니다. 얘네들은 Host만 봅니다.
그 반면 ngs3.dll은 나머지 key들을 봅니다.
Font, Help, Plugin, Dic, Sample은 따로 설명이 필요 없을 것입니다. 디폴트 경로가 윈도우 비스타 기준 ProgramData\Ymsoft\Ngslib이던 바로 거기이죠.
CommonData는 현재는 언어 리소스인 *.mui 파일만 쓰는 공간입니다.
UserData는 바로 imeconf.dat가 저장되는 곳으로, 디폴트 경로는 Users\사용자 계정\AppData\Roaming\Ymsoft\Ngslib입니다.

PluginX86과 AppletX86은 64비트 프로그램이 32비트 바이너리가 있는 곳을 알아야 할 때 사용하며, 현재는 <날개셋> 입력 패드 64비트 버전만이 사용합니다.
만약 <날개셋> 한글 입력기 무설치 배포판을 만든다면, x86과 x64라는 디렉터리에다가 각각 32비트, 64비트 바이너리들을 한데 다 복사해 놓은 뒤, 두 디렉터리에다가 동일한 이 ngsapp.ini를 비치하면 됩니다.

다만 문제가 되는 것은 외부 모듈인 ngsime.ime인데요. 원래 TSF 모듈은 아무 디렉터리에나 있어도 되고 사용자가 수동으로 regsvr32로 등록만 해 주면 되지만, IME 모듈은 반드시 윈도우 시스템 디렉터리에 있어야 합니다. NgsIme.ime가 윈도우 시스템 디렉터리에 있는데 ngs3.dll은 user-defined 경로로부터 읽게 하고 싶으면 시스템 디렉터리에다가도 ngsapp.ini 파일을 만들어서 Path 섹션에다가 Host만 지정을 해 줘야 합니다.

모든 경로에는 상대 경로를 지정할 수 있어서 좋습니다. 그냥 .만 찍으면 해당 모듈이 있는 커런트 디렉터리가 지정되고, .. 를 찍으면 그 모듈이 있는 디렉터리의 부모가 지정됩니다. 그리고 비워 두면 디폴트가 됩니다.

<날개셋> 타자연습도 ngsapp.ini를 아래와 같이 지정해 주면 됩니다.

[Paths]
Host=
LocalData=
GlobalData=

Host는 ngs3.dll을 읽을 위치입니다.
(참고로, 당연한 말이지만, ngs3.dll은 자기가 있는 디렉터리의 ngsapp.ini를 읽어들이지, 타자연습이 있는 디렉터리의 파일을 읽어들이지는 않습니다.)
LocalData는 사용자 계정이 있는 디렉터리입니다.
GlobalData는 컴퓨터 기계에 관계없이 동일한 데이터인 연습글, 도움말 등이 있는 위치입니다.
셋 모두 .만 찍어 주면, 커런트 디렉터리에서 모든 작업이 이뤄지게 바꿀 수 있습니다.

이 기법을 사용함으로써 <날개셋> 한글 입력기 5.5와 타자연습 3.2부터는 굳이 정식 설치하지 않고도 플래시 메모리에서나 어디에서든 바로 간단히 실행할 수 있으며, 한 컴퓨터에 여러 버전을 충돌 없이 동시에 운용할 수가 있습니다.
이번 버전부터는 msvcr71.dll을 제거하는 데 성공한 것도, 프로그램을 더욱 수월하게 배포할 수 있게 해 줬지요.

다만 제가 말씀드리는 것은, 이 기법을 이용하여 프로그램의 무설치 복사 사용이 이론적으로 가능해졌다는 것뿐입니다.
저는 제가 공식 제공하는 msi 파일을 이용한 설치 외에 다른 방법으로 프로그램을 배포하거나 사용하는 것을 권장하거나, 지원하지는 않을 것임을 밝힙니다. 이런 식으로 프로그램 디렉터리를 변경하여 사용하는 건 전적으로 사용자의 재량이며 책임입니다.

Posted by 사무엘

2010/01/11 10:30 2010/01/11 10:30
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/95

<날개셋> 편집기는 <날개셋> 한글 입력기가 제공하는 프런트 엔드 중의 하나인 간단한 텍스트 에디터입니다.
메모장보다야 기능이 많지만, 이 프로그램의 개발 목적 자체가 외부 모듈과 입력 패드와 더불어 "<날개셋> 한글 입력기 커널의 기능 시연/제공"이기 때문에, 딱히 전문적인 텍스트 에디터나 워드 프로세서를 표방하면서 개발되지는 않는 프로그램이기도 합니다.

<날개셋> 편집기에는 컴퓨터용 언어 작성에 적합한 문법 표시(syntax highlight)라든가, 일반 자연어 작성에 적합한 맞춤법 검사/자동 교정 같은 기능은 없습니다. 하지만 프로그램의 특성상 문자 코드를 다루는 기능이 은근히 발달해 있으며, 버전업을 거치면서 지금은 텍스트 필터가 20여 종에 가깝게 추가된 덕분에 나름대로 독특한 텍스트 프로세싱 기능을 제공합니다. 숫자를 한글로 바꾸기, 한글을 소리나는 형태로 바꾸기, 풀어쓰기-모아쓰기 바꾸기 등 재미있는 기능이 많죠.

여기서는 <날개셋> 편집기의 고급 기능을 활용하여, 완성형-조합형 코드 변환 테이블을 생성하는 방법을 살펴보겠습니다. 조합형이나 유니코드는 현대 한글 11172자의 코드 번호를 계산으로 간단히 생성할 수 있지만, 완성형 코드는 테이블이 필요합니다. 사실, 윈도우 3.1의 한글 IME 프로그램도 헥사 에디터로 들여다보면 이런 테이블이 들어있는 것을 알 수 있습니다.

1. 먼저, 문자표를 이용해 완성형 한글 2350자 나열을 만듭니다.
Ctrl+I를 눌러서 '문자표'를 꺼내면, 코드번호에다 16진수를 입력하여 해당 유니코드 문자를 본문에다 삽입할 수 있습니다. 하지만 '-'를 이용해서 500-600 이런 식으로 입력하면 U+500부터 U+600까지 257자의 문자를 순서대로 한꺼번에 본문에 삽입할 수 있습니다.

그런데, 이 프로그램은 from과 to에 해당하는 문자가 모두 현재의 문자표 리스트에 있는 경우, 문자표 리스트에 등재되어 있는 문자만 본문에다 삽입합니다. 이 점이 중요합니다.
그래서 'KSC5601 문자표' 옵션을 체크하여 완성형 한글만 나오게 한 후, AC00-D79D (가~힝)을 입력해 주면 완성형 2350자 한글을 얻을 수 있습니다. 물론 2350자가 바로 삽입되는 건 아니고 처음 512자까지만 본문에 삽입되므로, 그 다음 문자부터 이 작업을 다섯 번 반복해 주면 됩니다.

  결과물: 가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골 ...

2. 이 글자들을 일단 줄을 나눠 줍니다. 블록으로 잡아서 "구분자 삽입" 필터를 고른 뒤, 설정에 들어가서 간격을 1로, 구분자는 '줄 바꿈'으로 지정하세요.

  결과물:



갇 ....

3. 결과물을 다시 블록으로 잡아서 "코드 번호로 변환" 필터를 고릅니다. 설정에 들어가서는 "문자를 기타 인코딩의 바이트 번호로"를 고르고, 기준 인코딩은 1361 조합형을, 번호 표현 형태는 "C언어 정수형"을 고릅니다.

  결과물:
0x88,0x61,
0x88,0x62,
0x88,0x65,
0x88,0x68, ...

4. 필터가 바꿔 준 숫자는 '바이트' 단위입니다. 하지만 우리는 한글 한 글자가 한 번호에 대응하도록 '워드' 단위로 바꾸고 싶습니다. 그렇기 때문에 찾기-바꾸기를 수행하여 ,0x를 없앱니다. 이걸 하고 싶어서 매 글자마다 임시로 줄을 바꾼 것입니다.

  결과물:
0x8861,
0x8862,
0x8865,
0x8868, ...

5. 이제 거의 다 됐습니다. 이제 다시 줄바꿈 문자를 없애고 모든 번호들을 한 줄로 도로 붙입시다.
결과물을 블록으로 잡은 뒤 "일괄 치환" 필터를 골라서 "\n","" 라는 문자열을 입력합니다. 줄바꿈 문자를 없앤다는 뜻입니다.

  결과물: 0x8861,0x8862,0x8865,0x8868,0x8869,0x886A, ...

6. 결과물을 블록으로 잡은 뒤 다시 "구분자 삽입"을 고른 뒤, 간격을 적당한 7의 배수로 입력하면, 2350개의 숫자가 84칼럼, 혹은 70칼럼 간격으로 가지런히 늘어서 있게 됩니다.
이 배열을 내가 짜고 있는 배열에다가 복사해서 붙여넣으면 되지요.

const unsigned short kshan[2350] = { ... };

Posted by 사무엘

2010/01/11 10:29 2010/01/11 10:29
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/94

<날개셋> 한글 입력기는 2000년에 1.0이 첫 개발된 이래로 지금까지 윈도우 플랫폼만을 고수해 왔다.
윈도우 안에서는 윈도우 95/NT4부터 시작해 64비트 비스타/7까지 운영체제가 제공하는 모든 문자 입력 프로토콜을 정복하는 경지에 도달했지만, 윈도우 이외의 운영체제 지원은 개발자의 지식과 여유 부족으로 인해 전무한 실정이다.

사실 여러 통계들만 보면 개인용 PC 시장 운영체제의 점유율이 윈도우가 이미 90%대에 달해 있고, 맥/리눅스가 각각 7, 2% 정도를 차지하고 있으니 어떤 소프트웨어에서 맥/리눅스의 지원은, 마치 윈도우 시장 내부에서 XP/비스타를 제외하고 인제 와서 NT/2000이나 심지어 9x 계열을 지원하려 애쓰는 것처럼 아주 사소한 일일 수도 있다.

하지만 문제는 <날개셋> 한글 입력기의 사용자 집단은, 일반 PC 사용자 집단과는 그 비중이 같지 않다는 것이다.
비록 내 프로그램의 용도가 세벌식 자판에 국한된 것은 아니지만, 주 목적이 세벌식 관련 지원 기능이고 그쪽으로 실제로 기능이 풍부하기도 하기 때문에 프로그램 사용자 중에는 세벌식 사용자가 많다.

그런데 본인이 파악하고 있기로는, 세벌식을 쓸 정도의 매니아급 파워 유저 중에는 리눅/맥 사용자가 상대적으로 굉장히 많다. 전체 PC 사용자 중에는 리눅/맥 사용자가 10%도 채 안 될지 몰라도, <날개셋> 사용자 중에는 리눅/맥 사용자의 비율이 30%대에 달할 수도 있다는 뜻이다.
마치 본인이 글자판도 극소수 글자판을 쓰는 데다 성경까지 극소수만이 진가를 아는 성경을 읽는 것처럼, 소수 집단은 뭔가 소수 집단끼리 통하는 게 있기라도 한 것 같다.

이런 시대 흐름에 부합하여 본인 역시, 최근에는 평생 안 들여다볼 것 같던 맥 OS와 리눅스 쪽 자료를 틈틈이 살펴보고 있다. 물론 여기에는 회사에서 내 개인용 컴퓨터보다 더 다양한 플랫폼을 접할 기회를 얻은 것도 한몫 작용했다.
(사실 본인이 회사가 아니라 전산학과 대학원에 갔다면 맥은 몰라도 리눅스 지원은 확실히 빨라졌을지도 모른다.)

새로운 운영체제에 완전히 적응하고, 더구나 단순 응용 프로그램이 아니라 운영체제 쉘과 밀접한 관련이 있는 저수준 프로그램인 IME를 포팅하는 것은 쉬운 일이 아닐 것이다.
해당 운영체제의 프로세스/스레드/DLL 구조부터 시작해 GUI API, 도움말 및 배포 패키지를 만드는 요령, known directory 구조부터 당장 알아야 한다. 제아무리 크로스 플랫폼 GUI 툴킷의 도움을 받는다고 하더라도, 일단 그 툴킷 자체도 공부해야 하고 해당 운영체제에 맞는 개발툴 내지 에디터, 그리고 심지어 프로젝트(메이크파일) 세팅 요령도 익혀야 할 것이다. 헤쳐 나가야 할 건 아직 참으로 많다.

다음은 현재 본인이 생각하고 있는 프로그램 개발 및 포팅의 원칙이다.

1. 타자연습보다는 입력기가 우선순위가 더 높다.
적어도 본인에게는 입력기는 main이고 타자연습은 sub이다. 지금까지도 그래 왔고 앞으로도 그럴 것이다.
타자연습은 MFC를 사용했지만, 입력기는 WinMain함수부터 뼈대부터 완전히 100% 윈도우 API만 써서 내 손으로 만든 프로그램이다. 애착도 더 높다.

타자연습을 한동안 소스를 공개해 오다가 현재는 다시 닫았는데, 사실, 책임감 있고 믿음직한 후임이 나타난다면 그 사람에게 타자연습 소스 코드를 인계하고(단순한 코드뿐만 아니라 구조 설명까지) 개발을 전적으로 위임할 생각도 있다.

타자연습은 지금까지 버그 수정이나 입력기에서 먼저 개발된 신기능/기술의 동반 적용 같은 걸 빼면, 이렇다할 기능 추가나 구조적인 변화는 거의 없이 정체 상태였다. 타자연습도 만들고 싶은 게 많다. 연습글 관리 방식 개선이라든가 게임 리모델링, 네트워크 지원만 해도 굵직한 주제가 벌써 여러 개 나온다. 하지만 내가 도저히 그것까지 신경쓸 시간이 없다.

2. 윈도우용이 여전히 우선순위가 더 높다.
분배보다는 성장이라고 해야 할까? 타 운영체제를 살펴보기에는, 아직 당장 윈도우용 오리지널 프로그램에도 더 넣고 싶은 기능과 보강해야 할 것들이 훨씬 더 많다. 현실적으로 여기에 시간 할애 가중치가 더 실릴 수밖에 없다.

3. 리눅스보다는 맥이 선호도가 더 높다.
본인의 개인적인 바람은, 리눅스보다 점유율이 더 높고 여러 배포판 혼잡 같은 게 없이 일관성도 있는 맥 OS 쪽 포팅을 리눅스보다 먼저 해 보고 싶다.
하지만 현실적으로는 본인에게는 일단 맥북이 없으며, 오로지 이 포팅 작업만을 위해서 맥북을 구입하고 관리할 만한 여건도 못 된다. 현실적으로는 당장 VMware로 손쉽게 띄울 수 있고 한글 IME를 돌려 볼 수도 있는 리눅스를 먼저 살펴보게 되겠다.

4. 외부 모듈보다는 편집기가 우선순위가 더 높다.
윈도우용이 그랬던 것처럼 프로그램 개발 내지 포팅은 입력기 커널(플랫폼 독립적인) -> 제어판 GUI -> 편집기 -> 외부 모듈 -> 플러그 인의 순으로 진행될 것이다. 전용 에디터인 편집기부터 먼저 포팅한 후 외부 모듈은 나중에 등장할 것이다. 쉬운 것부터 진행하겠다는 원칙은 두말할 나위가 없다.

5. 소스 코드와 버전 관리
<날개셋> 한글 입력기의 코드는 크게 윈도우용과 리눅/맥용으로 나뉜다. 이미 윈도우 API만으로 지극히 가볍고 잘 튜닝되어 있는 기존 윈도우용 소스를 건드릴 필요는 없겠고 리눅스와 맥은 가능한 크로스 플랫폼 GUI 툴킷을 이용하여 한 코드 베이스로 관리할 것이다. 그 이유는 물론 본인이 각 OS의 native API를 익힐 시간이 없기 때문이다. 현재로는 그 툴킷으로 Qt를 고려하고 있는 중이다.

버전은 처음엔 1.0부터 시작해서(비록, 윈도우용 기준으로는 최소 미래의 5.x~6.x 엔진을 사용하더라도)
나중에 리눅/맥용도 윈도우용과 완전히 대등하게 포팅이 완료됐고 세 에디션 개발을 동시에 할 수 있게 됐을 때 윈도우용 버전으로 번호를 일괄 상향 조정할 생각이다.

전부 생각만 이렇게 해 놓은 것이다. 실제로 이게 실현되는 건 한참 먼 미래가 될 수도 있다. -_-

Posted by 사무엘

2010/01/11 10:28 2010/01/11 10:28
Response
No Trackback , a comment
RSS :
http://moogi.new21.org/tc/rss/response/93

가는달, 굵은달, 버금달, 둥근모, 뻗음, 짧은둥근모, 짧은뻗음 (도깨비):
  모두 90년대 김 중태 님의 작품이다. 도스용 PC 통신 프로그램 이야기에도 이런 계보의 글꼴을 다수 볼 수 있었다.
특히 둥근모와 뻗음 류의 글꼴은 개인적으로도 무척 좋아하며, 심지어 전철 전광판에서도 볼 수 있다.

바탕, 가는돋움, 가는샘물, 필기 (custom):
  도스용 아래아한글 1.x가 제공하던 화면용 글꼴의 명조, 고딕, 샘물, 필기에 각각 해당한다. 고정된 도깨비 식 조합 테이블이 아니라 <날개셋> 5.3에서 첫 도입된 custom 조합 테이블을 사용했으며, 바탕과 샘물은 아래아한글 1.x 수준의 간단한 옛한글도 표현할 수 있다.
글꼴에 맞게 튜닝된 조합 테이블을 내장하고 있을 뿐더러 상업용 프로그램에서 사용되기도 한 만큼 글꼴의 품질은 무척 좋은 편이다. 다만, 다음에 나올 5.31에서 가는돋움은 아래아한글의 그 고딕체과 유사한 느낌이면서 더 깔끔하고 보기 좋은 다른 글꼴로 대체될 예정이다.

이야기체 (도깨비):
  한메 타자교사와 이야기 5.3이 사용하여 아주 널리 알려진 그 글꼴이다. 식상한 명조 고딕 류에서 탈피했고 나름 가독성도 좋아서 무척 잘 만든 글꼴이란 생각이 든다.

한솔바탕 (도깨비):
  도스용 수채화 2.x에서 유일하게 본 걸로 기억한다. 이것도 꽤 참신한 디자인이고 그럭저럭 쓸 만하다.

파도, 가는파도, 흘린둥근고딕 (도깨비):
  이 글꼴들은 화면용 16*16뿐만 아니라 출력용 자형도 있어서 아래아한글 HFT로도 변환되어 쓰였던 것 같다.

마소바탕 (custom):
  과거 MSHBIOS가 내부적으로 사용하던 글꼴을 완벽하게 재현한 것으로, 윈도우 3.1의 완성형 바탕체 글꼴의 짝퉁이라 할 수 있다. 조합 규칙이 도깨비와 살짝 다른 면이 있다. 미려한 것 같으면서도 철저하게 테스트를 안 하고 대충 어설프게 디자인을 끝냈다는 느낌을 지울 수 없다. 뭔가 2% 부족한 게 느껴지는 글꼴이다.

샘물2 (custom):
  박 정만 님이 제작한 2*1*2벌 샘물 계열 글꼴로, 도깨비 조합 규칙도 너무 널널하기 때문에 자체 조합 테이블을 내장시켜 글꼴 파일의 크기를 4KB가 채 안 되게 줄였다. 정사각형 안에서 공간을 최대한 활용하다 보니 다른 샘물 계열 글꼴에 비해 글자가 좀 납작하다는 인상은 받는다. 현재 <날개셋> 한글 입력기의 내장 글꼴은 정 재민 님이 이 글꼴을 다듬어 굵기를 줄이고 옛한글 자모를 추가한 것이다.

굽은샘물 (custom):
  도깨비 조합 규칙을 쓰는 공개 글꼴인데 실제로 사용되는 벌수는 3*1*2벌밖에 되지 않기 때문에 자체 조합 테이블 방식으로 파일 구조를 대체했다. 글자의 전반적인 느낌은 무척 깔끔하고 참신하지만 ㅔ, ㅐ, ㅗ 같은 모음과 자음을 변별하기 어려운 점이 좀 아쉽다.

타자기 (custom):
  무려 2*1*1벌로, <날개셋> 한글 입력기가 제공하는 글꼴 중 구조가 가장 초단순하다. 아래아한글 1.x 수준의 옛한글 자모까지 일부 있음에도 불구하고 크기는 겨우 4KB밖에 되지 않는다.

굴림옛한글 (custom):
  트루타입 글꼴의 내부에 있는 옛한글 비트맵 자형을 추출한 것으로, <날개셋> 5.x가 지원하는 유니코드 5.2 옛한글을 거의 다 그것도 네모꼴 글꼴로 표현할 수 있는 유일한 글꼴이다. 물론 초중종 벌수는 6*2*4벌로, 도깨비보다도 벌 수가 적으며 글자가 전반적으로 좀 엉성하긴 하다.

유사굴림 (custom):
  다음 5.31 버전에서 추가될 예정인 글꼴로, "굴림체" 16픽셀을 얼추 조합형 글꼴로 본뜬 짝퉁이다. 현대 한글 11172자밖에 표현할 수 없지만 크기는 무려 40KB를 넘어서 "굴림 옛한글" 수준에 육박하는데, 이는 조합 테이블의 크기가 굉장히 크며 초성 하나, 모음 하나가 10여 벌, 20여 벌에 달하는 경우도 있기 때문이다. 가장 정교하고 복잡한 조합 테이블을 사용하는 글꼴이다.
다른 글꼴들은 초성은 겨우 ㄱㅋ, 종성은 ㄴ 정도만 따로 분리하여 그룹을 나누는 반면 이 글꼴은 거의 모든 자소들이 분할되어 있으며 자형 활용의 폭이 가장 크다. 가령 다른 글꼴들은 농과 논, 통과 톤에서 ㅗ의 위치가 다 같지만, 이 글꼴은 다 다르다. 그렇기 때문에 글자 하나의 완성도 하나는 이 글꼴이 가장 뛰어나다.

도깨비 방식,
그리고 도깨비보다 간단한 글꼴 내지 더 복잡한 글꼴.
<날개셋> 편집기는 한글 입력 방식뿐만 아니라 출력 방식도 과거와 현재의 만남의 장이 되고 있다.

Posted by 사무엘

2010/01/11 09:56 2010/01/11 09:56
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/77

<날개셋> 한글 입력기가 기본 제공하는 텍스트 필터도 벌써 10 종류를 넘어섰군요.

매뉴얼에 나와 있는 대로, 텍스트 필터란, 일정한 텍스트 A가 있을 때 이것을 적당한 규칙대로 변형해서 B라는 텍스트를 만들어 주는 기능의 총칭입니다.
기본 제공되는 필터들은 기능의 성격에 따라 다음과 같은 다섯 그룹으로 분류됩니다.

※ 한글 입력과 관련된 것: 동작 방식이, 현재 사용 중인 한글 입력기 설정에 따라 달라집니다. 사실 텍스트 필터라는 개념 자체가 처음에 한글 입력기 기능의 자동화를 위해 도입된 것이기도 합니다.

  - 문자열을 글자판 입력으로: '한글'을 mfskgw(세벌식) 또는 gksrmf(두벌식)으로 바꿔 줍니다. 한글을 입력하는 데 필요한 영타를 재현하는 기능을 이렇게 필터라는 자동화 기능에다가 접목시켰습니다. 한글을 암호화(?)를 비롯해 다양한 형태로 가공하는 데 이 필터를 활용할 수 있습니다.
한글 로마자 입력 방식을 쓰고 있다면 이 기능은 한글을 얼추 로마자 표기법 형태로 바꿔 줄 수도 있습니다. 두벌식의 경우, 모호성이 발생하여 연속 입력이 안 되는 지점을 찾아내는 기능도 갖추고 있습니다.

  - 글자판 입력을 문자열로: 위 기능의 역변환입니다.
  - 한글 낱자 재결합: 한글을 현 입력기의 오토마타 설정대로 재결합하는 기능으로, 현재 오토마타 설정에 따라 한글을 모아쓰기와 풀어쓰기(또는 반풀어쓰기) 등 다양한 형태로 변환할 수 있습니다. 또한 한글에서 초성, 중성 같은 특정 성분만 남길 수도 있지요. 한글 입력 오토마타 알고리즘을 키보드를 일일이 두들길 때뿐만 아니라 자동화, 일괄 처리 용도로도 활용할 수 있습니다.

※ 한글 형태 변환과 관련된 것: 컴퓨터에서 한글은 여러 가지 형태로 표현될 수 있습니다. 호환용 낱자도 있고, 글자마디도 있고, 소위 첫가끝 영역도 있습니다. 이것은 어떤 점에서는 번거롭지만 어떤 점에서는 마치 memory hierarchy처럼 각 계층별로 장단점이 있으며 어쩔 수 없이 필요한 귀결이기도 합니다. 한글의 표현 형태를 변환하는 것도 텍스트 필터가 해야 하는 중요한 임무 중 하나입니다.

  - 한글 낱자 종류 바꾸기: <날개셋> 한글 입력기가 사용하는 첫가끝 낱자와(초-종성 구분도 되는), 일반적으로 운영체제에서 통용되는 호환용 낱자 사이를 변환합니다.
  - 한글 형태 정규화: 한글을 표현 가능한 가장 상위 계층으로 최적화하거나, 무조건 다 첫가끝 낱자로 풀어 써 줍니다. U+AC00 하나로 표현 가능한 '가'도 U+1100, U+1161로 풀어 주는 식이죠. 풀어 쓴 형태는 모든 한글에서 ㅏ를 ㅓ로 바꾸는 식으로 낱자 단위의 정밀한 일괄 처리를 할 때 필요할 것입니다.

※ 한국어 관련: 한글뿐만 아니라 한국어의 특성까지 가미하여 간단한 자동화 처리가 가능한 기능을 필터로 엮었습니다.

  - 한글을 소리나는 대로: "국밥"을 "국빱"으로, "국력"을 "궁녁"으로 바꿔 주는 매우 흥미로운 기능입니다. 한글 표기에는 반영되어 있지 않은 음운 현상을 표현하기 위해 별도의 hint 부호도 4종류 도입했습니다.
  - 숫자를 한글로: 300을 "삼백"으로, 45를 "사십오"로 바꿔 줍니다.
  - 한자를 한글로: 한자를 한글 독음으로 일괄 치환합니다. 아래아한글에도 있는 기능이죠.
  - 정렬: 한글의 모든 표현 계층을 감안하여 sorting 기능을 제공합니다. 아래아한글처럼 초-중-종 순이 아닌 역순 비교도 가능하며, 중복 항목을 제거하는 기능도 있어서 유용할 것입니다.

※ 문자 단순 기계 치환 관련: 여기부터는 이제 한글, 한국어하고는 그다지 관련이 없는 단순 편의 기능입니다.

  - 대소문자 바꾸기, 전각/반각 바꾸기: 에디터가 제공하는 제일 고전적인 필터 기능이고 self-explanatory하므로 더 이상의 자세한 설명은 생략.
  - 빈 줄 제거: 공란밖에 없는 빈 줄을 제거하고 줄 끝의 공란도 제거해 줍니다. 개인적으로 무척 빈번하게 유용하게 쓰는 필터.
  - 일괄 치환: 주어진 텍스트 블록 내에서 여러 "바꾸기" 작업을 일괄 수행합니다. 에디터의 기존 "찾기-바꾸기" 기능으로는 수행하기 힘든 A <-> B 맞바꾸기도 한번에 할 수 있으며, 특히 줄바꿈 문자도 찾거나 바꾸는 문자열의 일부로 지정할 수 있기 때문에 줄 앞뒤로 문자를 추가하거나 줄 삭제, 탭을 줄바꿈으로 바꾸는 기능도 수행할 수 있게 됩니다.

※ 시스템 인코딩 관련: 운영체제가 제공하는 다국어 쪽 API를 사용해서 문자 종류나 인코딩 관련 변환을 수행합니다.

  - 인코딩 변환: 인코딩이 잘못 지정되어 깨진 문자를 변환합니다. 컴컴컴컴 -> ────────, ´eCN¹I±¹ -> 대한민국 등.
  - 시스템 언어별 변환: 히라가나 <-> 카타카나 변환, 번체 <-> 간체 한자 변환 등을 수행할 수 있습니다. 대소문자 변환도 A~Z뿐만 아니라 유럽어 추가 알파벳에 대해서도 수행 가능하며, 알파벳의 쓰임이 다른 터키어 같은 언어에 맞는 변환을 할 수도 있습니다.
  - 코드 번호로 변환: 글자를 가 -> ACO0 같은 유니코드 번호 또는 B0A1 같은 특정 인코딩의 코드 번호로 풀어 주거나 역변환을 합니다. C언어 내지 HTML과 호환되는 접두사를 붙일 수 있으며, 이 기능을 이용하여 %AC%BD 같은 URL의 의미를 해독할 수도 있게 됩니다.

Posted by 사무엘

2010/01/11 09:51 2010/01/11 09:51
Response
A trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/72

날개셋 모듈 설명

※ ngs3.dll (since 1.0, 2000)

<날개셋> 한글 입력기 커널이다. 문자열 처리, 옛한글 코드 변환, 한글 입력 오토마타 같은 본연의 임무부터 시작해서 자체 한글 비트맵 폰트 출력, 에디트 컨트롤, 심지어 제어판 UI도 들어있고 3.0부터 추가된 수식 해석과 XML 해석까지 다 담당하고 있다. <날개셋> 전체 소스 코드의 절반이 약간 넘는 분량을 이 모듈이 차지한다. 이제 UI 엔진까지 얹으면 커널의 덩치는 더욱 커질 것으로 보인다.

※ ngsedit.exe (편집기. since 1.0, 2000)

<날개셋> 한글 입력기는 처음엔 이런 자체 한글 MDI 에디터로 출발했다. <날개셋>이라는 커널의 기능을 가장 이상적으로 활용할 수 있는 전용 환경이자 가장 기초적인 프런트 엔드가 이 프로그램인 셈이다.

※ ngsx.nip (기본 플러그 인. since 2.x, 2002)

플러그 인이라는 개념은 본인이 거의 2.0을 개발하던 시절부터 생각하고 있었다. ngs3이라는 호스트가 기능을 확장할 수 있는 여러 프로토타입을 제시하면 플러그 인은 그 프로토타입대로 다양한 기능을 구현하여 호스트가 이를 끌어다 쓰는 것이다. 처음엔 텍스트 필터 정도만 액세서리 정도로 플러그 인이 담당하다가 이제는 빠른설정 도우미, 동시입력 스키마 등 다양한 분야에서 이 기본 플러그 인이 기능을 제공하고 있다.

※ ngsime.ime (외부 모듈. since 3.0x, 2004)

그저 편집기에만 머물러 있던 <날개셋> 한글 입력기는 3.0 버전대에서 외부 모듈이 개발되면서부터 진짜 활로를 텄다고 해도 과언이 아니다. 완전 생소한 분야이다 보니 초창기에는 온갖 불안정 문제, 버그에 시달렸으나 경험과 노하우가 쌓이면서 그런 문제들은 차츰 해결돼 갔다. 이 모듈은 단일 바이너리로 윈도우 95의 IME부터 비스타의 TSF 프로토콜까지 가장 세밀하고 탄탄하게 잘 지원하고 있다.

※ uniapi9x.dll (since 3.41, 2005)

윈도우 9x에서 윈도우 유니코드 API 호출을 받아 주는 자그마한 호환성 레이어로, 21세기 초에 MS에서 개발한 unicows (MSLU) 라이브러리와 동일한 역할을 하는 모듈이다. <날개셋> 3.0 개발 당시에 그 MS 솔루션의 사용을 검토했다가 뭔가 문제에 부딪쳐 도입을 포기하고, 대신 잠시 NT 계열 에디션과 9x 계열 에디션을 따로 배포했던 적이 있다. (배포 패키지 만들기가 무지하게 번거롭고 불편했음.-_-)

그러다가 3.41에서는 해당 기능을 자체 구현에 성공함으로써 <날개셋> 한글 입력기, 특히 외부 모듈은 플랫폼 계열을 완전 정복한 무지막지한 프로그램으로 거듭날 수 있었다. 이 모듈은 32비트 PE 포맷에 특화된 루틴이 들어있으며(x86 어셈블리까지는 아니지만-_-), 64비트 에디션에는 당연히 들어가지 않는다.

※ ngsconv.exe (since 5.0, 2008)

뭔가 변환과 관련된 모든 뒷바라지를 담당할 유틸리티로서, 5.0에서 첫 도입되었다. <날개셋> 3, 4 방식으로 저장된 입력 설정(유형, 글쇠배열 등 포함)을 새로운 5.0 방식으로 변환하는 것이 가장 기본적인 용도이며, 이 외에도 <날개셋> 3, 4 방식으로 저장된 변종 옛한글, 한양 PUA, 유니코드 1.x 방식 옛한글과 5.2 방식 옛한글 사이의 변환도 파일과 클립보드 모두 지원한다. 유니코드 상에서 현존하는 모든 옛한글 표현 방식을 중재하는 역할을 한다는 뜻이다.
시간이 흐르고 앞으로 한글 코드, <날개셋> 프로그램 체계가 또 바뀐다면 이 변환 유틸리티의 역할도 더욱 커질 것이다.

※ ngspad.exe / padspyxx.dll (since 5.3, 2009)

실행은 편집기 실행하듯이 EXE로 하지만, 기능은 외부 모듈처럼 여타 환경에서의 한글 입력 역할을 하는 제 3의 중간 계층에 속하는 프런트 엔드이다. 이 역시 거의 3, 4.x 버전 시절부터 상상을 하고 있었으나 여건이 안 되어 추진하지 못했다가 5.0에서 드디어 한글 코드 체계까지 정립에 성공한 뒤 추진하기 시작했다. 문자 입력 솔루션으로서 <날개셋> 한글 입력기의 위상을 완전히 새롭게 자리매김할 아이템으로 기대 중이다.

훅킹 기반으로 IME/TSF 동작 방식을 흉내내어 응용 프로그램에다 한글 조합을 전달하거나 키 입력을 속인다. 가령, 단축키까지 드보락 같은 다른 영문 글자판으로 완전히 바꾸는 것 역시 이 새로운 프로그램으로 가능한 것 중 일부가 될 것이다. 또한 <날개셋> 한글 입력기의 UI 엔진으로 구현한 각종 포인팅 장비 입력이나 화상 키보드, 문자표 등을 일반 프로그램에서 꺼내서 사용할 수도 있게 된다.

윈도우 95 이래 모든 운영체제에서 실행 가능한 다른 모듈과는 달리, 이 새로운 모듈은 동작 방식의 특성상 윈도우 2000 이상 전용으로 설계될 예정이다. 물론 이것도 사실상 아무 제약도 아니다.

※ padui.nip (since 5.3, 2009)

ngsX에 이어 드디어 두 번째로 개발되는 플러그 인이다.
현재 ngsime.ime의 내부에 들어있는 “후보 선택 UI”와 “화상 키보드” UI가 여기로 옮겨져서 외부 모듈과 ngsPad(가칭)가 공유하게 될 것이다. 그리고 한자 부수 입력, 문자표 같은 다른 액세서리가 추후 개발된다면 이 역시 이 모듈에 들어가서 편집기, 외부 모듈, ngsPad가 모두 공유하게 될 것이다.

※ NgsType.exe (타자연습 프로그램. since 2001)

<날개셋> 한글 입력기 1.x 버전대부터 개발되어 온 이 프로그램은 세벌식 자판의 보급과 저변 확대에 지금까지 큰 기여를 했다. 특히 90년대 말~00년대 초에 개발되었다가 지금 더 버전업이 되지 않고 있는 많은 타자연습 프로그램과는 달리 <날개셋>은 기능상 큰 변화는 없을지언정 꾸준히 버그 수정과 유지 보수가 돼 왔다. (비록 개발 우선 순위는 입력기 개발보다 언제나 뒷전이지만)

이 프로그램은 <날개셋> 한글 입력기에 포함되어 있는 애플릿이 아니라 입력기를 사용하여 따로 개발된 정식 애플리케이션(응용 프로그램)이다. 입력기와는 달리 MFC를 사용해서 개발되었고 재컴파일 가능한 소스가 공개되어 있다.

여타 프로그램에 비해 특히 주목할 만한 점은 정확도가 융통성 있게 계산된다는 것, 자체적인 문단 정렬 기능 덕분에 다양한 형태로 연습글을 배치할 수 있다는 것, 세벌식에 특화되어 제작된 게임 정도가 되겠다. 개인적으로 게임 그래픽 개선과 네트워크 연동이라는 두 숙제가 남았다고 본다.
세벌식 외에 다른 글자판의 ‘익힘’ 기능을 추가할 계획은 없다.

Posted by 사무엘

2010/01/10 23:43 2010/01/10 23:43
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/39

내게 맞는 한글 입력기

1. 그냥 기종에 상관없이 세벌식 자판만 평범하게 쓰고 싶으면

이미 설치되어 있는 MS IME만으로 충분하고 거기에 제가 개발한 '세벌식 파워업'을 덧붙이면 더욱 편리합니다.
오피스 2007이나 윈도우 비스타와 함께 설치되는 IME는 세벌식 최종 글쇠배열 오류도 고쳐져 있습니다.

2. 거기에 좀더 강화해서 모아치기도 쓰고 싶고 Shift+Space로도 한영 전환하고 싶고 동시치기, 영문 드보락, 세벌식 순아래, 안 마태 같은 마이너 글쇠배열이나 타자 기법을 써 보고 싶으면

새나루가 딱 좋습니다. <날개셋>보다 훨씬 덩치도 작고 UI도 간단해서 내게 필요한 기능만 바로 지정해서 쓰면 됩니다.
특히 새나루는 IME 차원보다 더 낮은 키보드 드라이버 후킹 차원에서 드보락 자판도 제공해서 한글과 같이 쓸 수 있습니다.

3. 하지만, 다음 조건에 하나라도 해당되면 <날개셋> 한글 입력기가 필요합니다.

- 2를 윈도우 9x 옛날 기종이나 아니면 아예 64비트 환경에서 쓰고 싶은 경우
- 옛한글을 쓰고 싶은 경우 (특히 세벌식으로.)
- 운영체제나 아래아한글의 각종 글쇠배열 드라이버를 불러와서 특수문자/외국어와 한글을 같이 입력하고 싶은 경우
- 한글 글쇠배열부터 시작해서 오토마타와 글자 결합 조건을 완전히 마음대로 고치고 싶은 경우
- 글자판 전환이나 한자 글쇠를 완전히 다른 걸로 지정하고 싶은 경우 (특히 윈도우 키 조합)
- 입력기 커널을 완전히 공유하는 유니코드 기반 자체한글 전용 에디터도 필요한 경우
- 한글 로마자 입력, 복벌식, 세벌식 이중모음 정석 강요 같은 여러 특화된 입력 환경을 쓰고 싶은 경우
- Bksp 다 지우고 앞 글자에 자동 달라붙기, 무한 낱자 수정, 특정 낱자 바로 변형 특수 키 같은, 세벌식에 특화된 전문적인 입력 기능을 쓰고 싶은 경우

전문적이고 기능 많으면서도 초심을 잃지 않고 쓰기 쉽고 친숙한 프로그램을 만들고 싶습니다.
모든 개발자, UI 디자이너들의 고민거리겠지요?

Posted by 사무엘

2010/01/10 22:41 2010/01/10 22:41
,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/17

« Previous : 1 : ... 8 : 9 : 10 : 11 : 12 : Next »

블로그 이미지

철도를 명절 때에나 떠오르는 4대 교통수단 중 하나로만 아는 것은, 예수님을 사대성인· 성인군자 중 하나로만 아는 것과 같다.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2019/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:
1293969
Today:
620
Yesterday:
499