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

내가 에디터를 새로 만든 이유

오늘날처럼 유니코드에 OpenType, subpixel 렌더링(ClearType 같은) 등의 최신 문자 처리 기술이 컴퓨터에 보편화해 있고 심지어 스마트폰조차 화면 해상도가 1000을 넘어서서 큼직한 윤곽선 글꼴로 글자를 찍는 세상에,

<날개셋> 한글 입력기의 편집기 프로그램은 20년 가까이 전의 유물인 구닥다리 8*16, 16*16 비트맵 글꼴을 여전히 고수하고 있다.
그 많은 시간과 노력을 들여서 에디팅 엔진을 따로 만들고, 그것도 그런 초라한 자체 한글 출력 시스템 기반으로 만들어야 할 특별한 이유가 있는 것일까?

여기에는 여러 정황상의 이유가 있다. 지금은 그 명분이 다소 약해진 것도 있지만, 큰 방향은 변하지 않았다.

첫째, <날개셋> 한글 입력기가 처음 개발되던 1999년 말~2000년 초에는 아직 PC 환경이 굉장히 열악했다.
당시의 주류 운영체제이던 윈도우 95/98은 내부적으로 아직 유니코드 기반이지 않았기 때문에, 운영체제의 기본 GUI로는 영문 윈도우에서 한글이 찍혀 나오지 못했다. 운영체제의 언어하고 다른 언어의 IME를 설치할 수도 없어서 Global IME 같은 별도의 특수한 프로토콜이 따로 있을 정도였다. 지금 생각하면 얼마나 격세지감인가?

그렇기 때문에 그 당시에 나름 한글 관련 기능으로 유명세를 탄 아래아한글, 이야기 같은 프로그램은 32비트 Windows 환경에서도 여전히 '자체 한글' 에디팅 엔진을 사용하곤 했다. 운영체제의 언어를 불문하고 한글 입출력 환경을 제공하기 위해서이다. 이 추세를 <날개셋> 한글 입력기 역시 따른 것이다.
뭐, 아래아한글만 빼면 나머지 자체 한글을 지원하던 이야기, 새롬 데이타맨, Token 2는 어차피 전통적으로 고정폭 글꼴이 강세인 터미널 접속 프로그램이기도 했고 말이다.

둘째, Windows 환경은 저런 국제화나 유니코드 이슈를 떠나서라도, 맥(TextEdit)이나 리눅스(gedit)에 비해 전통적으로 에디터 프로그램이 부실했다. 가령, 운영체제가 기본 제공하는 에디터 중에는(메모장+워드패드) syntax coloring이 제공되는 놈이 없고, 특히 MDI를 지원하는 놈도 없다.

운영체제의 에디트 컨트롤을 그대로 사용하는 메모장은 윈9x 시절엔 아예 64KB 메모리 제한이 있었다.
지금의 메모장은 비록 명목상의 메모리 제한은 없지만 내부적으로 단일 버퍼 구조인 건 변함없기 때문에, 몇백 KB 이상의 큰 파일을 여는 덴 여전히 부적합하다. 로딩 시간이 굉장히 길 뿐만 아니라 앞부분에다 글자를 삽입하거나 지우는 오버헤드가 굉장히 크다. 직접 해 보면 안다.
이런 와중에 에디터 프로그램을 하나 만들어 보는 것도 나쁘지는 않겠다는 생각이 자연스럽게 들게 된 것이다.

셋째, 글꼴 관련 문제 때문이다.
수많은 글꼴들이 범람하는 시대이지만, 영문과는 달리 한글은 화면 본문으로 쓸 만한 글꼴이 오늘날까지도 대단히 드물다.
인제 와서 맑은 고딕을 시작으로 ClearType에 최적화된 글꼴이 좀 개발되어 상황이 아주 약간 나아졌다만,
정말 15년 전이나 지금이나 화면용 글꼴은 굴림, 바탕 일색이다.

이럴 바에야, 좀 아마추어 냄새가 나긴 해도 옛날에 개발되었던 수십 종의 비트맵 글꼴들을 그대로 살려 쓸 수 있는 자체 한글 체계가 일종의 참신함과 매력을 줄 수도 있다.
하지만 이 장점은 도스 시절 비트맵 글꼴을 경험하지 못한 세대가 늘면서 점차 사라질지도 모르겠다. -_-;;

그리고 사실 이보다 더 큰 이유는 완전한 조합형 기반 세벌식 한글 표현 때문이다. <날개셋> 한글 입력기는 무려 2008년이던 과거 5.0 시절에 최초로 유니코드 5.2 옛한글을 앞서 도입했는데, 이 역시 독자적인 한글 입출력 시스템을 사용하기 때문에 가능했던 일이다.

굳이 옛한글이 아니더라도 가령 초성 ㄱ과 종성 ㄱ을 구분하고, ㄱ+종성ㄴ이나 ㅏ+종성ㅇ 같은 중간 형태 역시, 자체 한글 체계로는 아주 쉽게 표현할 수 있는 반면 Windows 제도권(?) 글꼴 시스템으로는 그럴 수 없다.
<날개셋> 한글 입력기의 특장점 중 하나가 초성만 쏙 지우고 모아치기를 하고 무한 낱자 수정을 하는 등, 그런 미완성 중간 한글을 남발하는 기능들이다! 그런데 그런 걸 화면으로 표현을 못 하면 어떡한단 말인가?

이건 프로그램의 본질적인 정체성이 달려 있는 문제이다.
극소수 옛한글 표현이 가능하게 설계된 글꼴로는 제도권으로도 저런 것들 표현이 가능하지만, 글꼴 파일 덩치가 심하게 크고 아름답다.. (한자가 같이 들어있는 경우가 많기도 하고)

글꼴이라는 게 오늘날 체계가 굉장히 복잡해져 있다. 그 이유 중 하나는 글립 인덱스 개수 한계 때문이다. 단일 글꼴만으로 유니코드 전영역의 글자를 담는 게 불가능하다. 글립 인덱스는 파일 포맷만 확장한다고 간단히 해결되는 게 아니라 이와 얽힌 각종 운영체제 API나 내부 구조체와도 연계가 되어야 해서 문제 해결이 더욱 어렵다.

그런 데에 얽매일 바에야 속 시원하게 <날개셋> 한글 입력기 같은 단순한 전· 반각 문자 체계가 유리한 점도 있다. 어차피 유니코드 영역의 대다수를 차지하는 주범은 한자이고, 한자는 전각으로 처리 가능한 아주 단순한 문자이니까 말이다. -_-;;

본인이 독자적인 에디팅 엔진과 글꼴 시스템을 개발한 마지막 이유로는, <날개셋> 한글 입력기는 단순히 입력기만을 지향하는 프로그램이 아니라는 점을 생각할 필요가 있다.

<날개셋> 한글 입력기는 '한글 IME' 계층과, 이 IME와 통신하면서 글자를 입력받고 수정하는 편집기 계층 사이의 통신 프로토콜까지 독자적으로 생각하고 구현한 시스템이다. 통신이 왜 필요하냐 하면 이미 있는 글자도 낱자 단위로 고치고 다시 조합을 재현해야 하기 때문이다. 그러니 이걸 모두 시연하려면 에디터를 직접 만들어야 한다. 이걸 만들면서 Windows 운영체제의 문자 입력과 관련된 표준 프로토콜을 모두 공부하고 구현하는 효과까지 달성했다.

<날개셋> 한글 입력기는 텍스트 필터라 하여 한글 입력 기능을 일괄 처리와 자동화하는 기능까지 제공하고 있다. 텍스트를 변형하는 기능을 제공하는 플랫폼 역시 자체적인 에디터 말고는 선택의 여지가 없다. 뭐, 텍스트 필터만 시연하는 게 목적이라면 기존 에디트 컨트롤만 끌어다 써서 만드는 것도 나쁘지는 않겠지만 말이다.

그래서 본인의 프로그램은 에디터를 제공하지만, 그렇다고 해서 전문적인 여타 프로그래머용 에디터를 표방하면서 개발되는 건 결코 아니다. 애초에 그런 부류와 경쟁하려고 만들어진 프로그램이 전혀 아니다.
오히려 <날개셋> 한글 입력기는 자체 에디터가 있고, Windows용 IME가 있고, 여타 프로그램 내부에서 IME를 훅킹하여 동작하는 입력 패드가 있어서 한글 입력기로서 존재할 수 있는 front end가 세 종류이다. 입력기가 존재할 수 있는 모든 경우를 상위 계층에서 생각하여 구현했다.

본인은 <날개셋> 한글 입력기가,
덩치 작지만 깊은 철학과 굉장한 활용 가능성이 있는 프로그램,
사람에게 휠체어가 아니라 자전거 같은 요긴한 도움을 주는 프로그램, (자동차급은 아니어도)
세벌식 기계식 타자기를 컴퓨터로 그대로 옮겨 놓은 듯한 고성능 고효율 프로그램,
한글을 마음껏 입력하고 싶은 생각이 절로 들고 한글 덕후에게 마음의 고향 같은 인상을 주는 프로그램이 될 것을 지향하며 개발하고 있다.

솔직히 내가 만들었지만 내가 생각해도 이 프로그램은 긍정적인 쪽과 부정적인 쪽 모두 좀 똘끼가 굉장히 충만한 프로그램이다. 어떻게 이런 걸 만들 생각을 했는지.. -_-

따라서 이 글의 결론을 한 줄로 요약하면,
<날개셋> 편집기는 앞으로도 글씨 크기 조절 기능을 제공할 가능성은 전혀에 가깝게 없을 것이다. ㅋㅋㅋㅋㅋ

Posted by 사무엘

2012/01/13 08:46 2012/01/13 08:46
Response
No Trackback , 8 Comments
RSS :
http://moogi.new21.org/tc/rss/response/626

날개셋 한글 입력기 6.5 공개

6.5 버전! 이 얼마 만의 버전업인가.
몇 달간 마음의 부담으로 남아 있던 작업들을 상당수 이뤄 내서 매우 기쁘다. (☞ 받으러 가기)
편집기· 변환기· 내부 엔진· 외부 모듈 등 거의 모든 분야에서 골고루 많은 발전이 있었다.
내일(1월 7일) 공개라고 계획을 잡고 문서에도 다 그렇게 썼지만, 그냥 기분상-_- 하루 당겨 버렸다. ㄲㄲ

1.
지금 윈도우 7 + <날개셋> 6.3 이하 버전 사용자라면, <날개셋> 한글 입력기를 윈도우용 IME로 지정한 후 <날개셋> 한글 입력기의 About 대화상자를 꺼내 보기 바란다. 이 About 대화상자에는 키보드 포커스를 받는 컨트롤이 개발자 홈페이지를 여는 링크 컨트롤, 그리고 대화상자를 닫는 '닫기' 버튼 이렇게 두 개가 있다. 전자는 IME 입력을 받으나(비록 IME 입력이 아무 의미가 없긴 하지만), 후자는 버튼이기 때문에 받지 않는다.

두 컨트롤을 탭을 누르면서 반복해서 왕래해 보라. 그런데 포커스가 '닫기' 버튼에 있을 때 <날개셋> IME의 버튼들이 사용 불가(disable) 모양으로 흐리게(grayed) 바뀌는가, 그렇지 않은가? (흐려져야 맞음. MS IME와 동작을 비교해 볼 것)

깜짝 놀랐고 내 눈을 의심했다.
윈도우 7이 출시된 지가 2년이 넘었는데 이런 버그가 아직까지 있는 줄은 꿈에도 몰랐다.
혹시 예전에는 없었다가 새 버전에서 추가되고 바뀐 기능 때문에 새로 갑작스럽게 생긴 버그이진 않은가 해서, 5.3대의 엄청 옛날 버전을 깔아서 이걸로도 확인해 봤다. 그러나 동일 증상이 여전히 발견됐다.

이 정도면 고질적인 버그를 하나 찾아내서 잡은 것이기 때문에 readme에다가도 적지 않을 수가 없다. 후대 버전에서 몰래 생긴 버그라면 문서 기록 따위는 남기지도 않았을 텐데. 비스타는 해당사항 없고 오로지 7에만 존재하는 문제이다. (이번 6.5에서 해결됨)

그 많고 많은 윈도우 7 사용자 중에 왜 이 기본적인 버그를 지적하는 사람은 지금까지 없었을까?
윈도우 7은 IME 쪽이 생각보다 굉장히 많이 바뀌어서, 예전에는 이 정도까지만 적당히 짜 주면 됐던 게 거기서만 이상하게 까탈스럽게 구는 게 많다. 전반적으로는 좀 엄격하게 바뀐 것 같다. 이것 때문에 <날개셋> 한글 입력기도 5.5 때는 5.51, 5.52 같은 자질구레한 패치가 나와야만 했다..

2.
개인적으로는 근래에 패턴 치환 필터를 정말 유용하게 썼다.
엑셀에서 복사하여 탭으로 구분되어 있는

A B C D E

형태의 데이터를

insert into Table1 values('A', 'B', 'C', 'D', 'E');

형태의 SQL 쿼리로 직통으로 바꾼다거나,

제목
1 문장A
2 문장B

이런 텍스트에서 제목은 삭제하고 숫자와 탭으로 구분된 문장만 다 뽑아내는 것,

그리고 심지어

0xAC, 0x50, 0xB7

같은 숫자 배열을

"\xAC\x50\xB7"

처럼 문자열 상수 형태로 바꾸는 것도 패턴 치환으로 다 가능하다. 패턴 치환과 더불어, 일괄 치환 기능도 익혀 놓으면 아주 유용하다.

<날개셋> 편집기가 겉보기로는 정말 허름한 에디터 같아도, 한글 입력 기능뿐만 아니라 보조 입력 도구와 텍스트 필터를 생각하면 결코 만만하지 않을 것이다. 비록 저런 기능이 <날개셋> 한글 입력기의 주 개발 목표는 아니며, 편집기가 매크로 기능을 직접 제공하지는 않지만, 저런 게 매크로 자동화 기능이나 마찬가지이다.

3.
다음 버전은, 이젠 진짜로 한자 관련 시스템을 제발 업그레이드 좀 해야겠다. 번호는 6.7로 계획했다. <날개셋> 한글 입력기 개발 역사상 최초로 버전 번호에 7이 들어갈 예정.

일대일로만 가능하던 한자 후보 변환을 다대다로 확장하여 단어 단위 한자 변환 기능을 넣고, BMP 영역만 취급 가능하던 각종 한자 처리 시스템을 surrogate까지 지원하도록 확장한다.
지금 옵션이 달랑 3개밖에 없어서 황량한 '편집기 계층' 제어판 대화상자에는, '가능하면 글자 대신 단어 단위로 한자 변환', 그리고 'BMP뿐만 아니라 surrogate 영역 한자도 사용' 이라는 한자 관련 옵션이 최소한 두 개 더 추가될 예정이다.

그리고 다중 candidate를 도입한다. 이건 이번 6.5에서도 터닦기 작업은 해 놨다.
특수글쇠를 보면 한자 후보 기능 글쇠가 예전처럼 하나만 있는 게 아니라 4개가 존재하는데,
1번 default candidate은 전통적인 한자나 초성 특수문자인 반면, 2번부터 4번까지는 customize 가능한 다른 후보 변환을 할 수 있게 하는 것이다. 가령, 한자 변환 대신 구결 변환을 넣는다거나 하는 식으로 활용이 가능하다.

'<날개셋> 고급 입력기'뿐만이 아니라 기본 입력기도 후보 데이터의 사용자 정의의 폭이 크게 넓어진다는 뜻이다. 물론 이미 후보 데이터 편집 기능을 갖추고 있는 '고급 입력기' 역시 늘어난 후보 개수에 맞게 그 구조가 확장되어야겠지만 말이다.

한자 키는 예전과 같은 1번 candidate이지만, Shift+한자는 2번 candidate를 배당하면 된다. 아직 터닦기만 해 놓고 그 기능이 실제로 구현되지는 않은 6.5에서는, 여전히 1번 candidate만 사용 가능하다.

끝으로, 장기적으로는 <날개셋> 편집기의 한자 변환 대화상자도 지금의 외부 모듈과 같은 UI로 바꾸려는 계획이 세워져 있기도 하다.

이런 식으로 한자 시스템 업그레이드는 여러 대규모 작업들이 한데 얽혀 있는 '군'(group; family)을 이루고 있다. 작업의 일부만 해내도 프로그램 버전이 최하 0.1 이상은 충분히 올라갈 수 있다.
치밀한 계획을 세워야 하고, 프로그램 API가 크게 바뀔 수도 있는 장기전을 감수해야 할 수도 있기 때문에, 이걸 지금까지 선뜻 추진하지 못한 것이다. 이제 6.5 다음 버전에서는 할 수 있겠지.

그리고 부가적으로는 보조 입력 도구 쪽도 편의 기능을 강화할 예정.
예를 들어, 화면 키보드에서 마우스 클릭만으로 Shift 윗글쇠를 입력할 수 있게 하는 것 말이다.
다음 버전인 6.7(가칭)의 개발 방향· 테마는 이런 식으로 이미 다 잡혀 있다.

Posted by 사무엘

2012/01/06 08:18 2012/01/06 08:18
Response
No Trackback , 12 Comments
RSS :
http://moogi.new21.org/tc/rss/response/623

1. 정렬 기능

컴퓨터에서 문자열 정렬은 아주 중요한 작업이다.
문자라는 게 디지털 컴퓨터에서는 0과 1의 조합인 숫자로 표현되는 만큼, 코드 번호 값의 대소로 문자를 비교하는 게 가장 직관적이고 당연하고 가장 합당하긴 하지만... 현실은 시궁창.

유니코드의 역사가 워낙 길어지면서 빈 영역 여기저기에 온갖 잡다한 문자들이 추가되었고, 이 때문에 단순 코드값 비교에 따른 정렬은 옛날에 비해 의미가 상당수 퇴색했다. 결국은 비교를 위한 별도의 테이블이나 알고리즘을 또 가지고 있어야 할 지경이 됐으니 말이다.
한글도 옛한글 자모가 몇 차례 나뉘어 추가되어서 좀 지저분해졌다. 그래도 유니코드 5.2 이후로 또 변화가 있을 것 같지는 않으니, 그 이상은 내 관심사 밖이다.

정렬을 할 때는 대소문자 구분을 하지 않는 게 보통이다.
그런데 <날개셋> 한글 입력기가 제공하는 정렬 필터는 한 걸음 더 나아가, 대소문자를 구분하지 않은 두 문자열이 동일하다면, 원래 형태대로 비교를 다시 해서 대소를 가리도록 로직이 다음 버전부터 수정될 예정이다. 경우에 따라서는 이렇게 해 주는 게 유용할 수도 있을 것 같아서이다.

정렬 전 그냥 대소문자 무시 정렬 대소문자 무시+2순위 고려
Base
CASE
SAFE
Vase
base
safe
vase
Safe
BASE
Case
case
Base
base
BASE
CASE
Case
case
SAFE
safe
Safe
Vase
vase
BASE
Base
base
CASE
Case
case
SAFE
Safe
safe
Vase
vase
그래서 WORD, Word, word라는 단어가 모두 존재하면, 똑같은 word라 해도 오름차순에서는 언제나 저 순서가 유지되게 된다. 대소문자뿐만 아니라 전/반각, 한자 독음 비교 같은 다른 옵션에 대해서도 동일한 원칙이 적용된다.

하지만 본인이 아는 유명 프로그램들 중 저걸 배려하는 프로그램은 전혀 없다. 아래아한글, MS 워드, 엑셀, EditPlus, AcroEdit 등... 대소문자 구분을 안 시키면 그 내부에서는 word, WORD, Word 순서는 전혀 지켜지지 않는다.

그뿐만이 아니라 다음 버전에서는 문자열 중의 숫자를 natural order로 비교하는 옵션이 추가된다. 쉽게 말해, A100을 A9보다 나중에 오게 하는 것 말이다. 1은 9보다 먼저 오지만, 100은 9보다 더 큰 수이기 때문.

구현해 놓고 써 보니, 이거 생각보다 굉장히 유용한 기능이다. 왜 진작에 이런 기능을 안 넣었는지 모르겠다. “작은 코딩, 큰 만족”이 프로그래밍 덕질의 아드레날린이며 중독성의 원천이다.

숫자 비교는 자릿수가 더 많은 놈부터 먼저 쳐 주는 로직만 넣으면 끝날 것 같지만, 00100과 101 같은 훼이크도 조심해야 하고, 마이너스와 소숫점까지 생각하면 알고리즘이 의외로 복잡해진다.

현재 정렬 필터는 내부적으로 Quick sort를 사용하지만(unstable 알고리즘), 각 아이템들의 원래 배열 순서도 비교할 때 고려해 주기 때문에, 동일한 아이템끼리도 안정성(stability)이 보장된다. 유니코드 5.2 기준 모든 옛한글의 순서를 정확하게 비교해 내고 아래아한글처럼 종성부터 비교하는 옵션이 있을 뿐만 아니라, 저런 면까지 나름 꼼꼼하게 고려해서 구현되어 있다. ^^;;

2. 아이콘

다음 버전부터는 <날개셋> 변환기와 입력 패드의 아이콘이 바뀔 예정이다.
변환기는 뭔가 변환 메커니즘을 나타내는 회전 화살표가 담긴 아이콘이며,
입력 패드는 그 용도답게 태플릿+스타일러스가 그려진 아이콘이다.

요즘은 인터넷에 예쁜 아이콘들 갤러리가 넘쳐나니, 아이콘도 직접 그리는 것보다는, 이미 그려진 걸 찾아서 찜하고 필요하다면 구입하는 게 나은 세상인 듯하다. 맞춤복보다는 기성복 구도?
물론 아이콘의 출처는 프로그램 도움말의 '일러두기' 란에 명시될 예정이다.

<날개셋> 편집기의 아이콘인 빨간 수첩^^;;은 과거 비주얼 C++이 예제로 제공하던 아이콘이 그 전신이다. EditPlus도 동일 컨셉이긴 하나, 수첩을 펼친 방향이 <날개셋> 편집기의 그것과는 정반대이다.

이 컨셉으로 큼직한 트루컬러+알파 채널 아이콘까지 그려 주신 분은 옛날 인터넷 세벌식 사랑 모임의 운영자이던 이 정민 님이다. 그게 벌써 2003년의 일인데 3.0 시절부터 8년이 넘게 동일 아이콘을 쓰고 있는 셈.

이것 말고도, 마치 지금의 상명 대학교의 로고타입처럼 한글 자모를 세로로 풀어 써서 <날개셋> 자체를 형상화한 '기본 아이콘'도 있는데, 이건 외부 모듈이 사용하고 있다.

사용자 삽입 이미지사용자 삽입 이미지
외부 모듈은 편집기나 입력 패드처럼 다른 여러 응용 프로그램들하고 비교되는 게 아니라, Microsoft IME처럼 이미 같은 입력기들과 비교된다. 그러니 이 프로그램이 IME라는 건 누구나 다 알고 있고 <날개셋>이라는 브랜드가 중요하므로, 프로그램의 기본 아이콘으로 이걸 그냥 쓰는 것이다.

<날개셋> 기본 아이콘의 컨셉은 1.0 만들 때 본인이 구상한 것이다. (당연히 상명 대학교의 로고타입을 모르는 상태에서 디자인한 것임. 우연의 일치. ㄲㄲ) 이를 트루컬러 이미지로 각색하신 분 역시 이 정민 님이다.
참고로, 외부 모듈은 파란 기본 아이콘이고, <날개셋> 타자연습은 여러분도 다 잘 알다시피 초록색 기본 아이콘을 쓰고 있다.

프로그램의 아이콘에 이어 도구모음줄의 각종 아이콘도 트루컬러나 256색화할 때가 되긴 했다만, 흠.. 귀찮다.;;
이렇게 프로그램 UI에 들어가는 각종 이미지들의 기술 수준이 상승했건만, 비주얼 C++의 자체 IDE가 제공하는 아이콘 편집기는 트루컬러+알파 채널, 심지어 요즘 같은 PNG 이미지가 embed된 아이콘을 제대로 열지 못한다. 그런 거 하나 만들려면 이제 별도의 '싸제' 그래픽 에디터를 써야 하니 불편하다.

VC++ 6.0 시절에는 트루컬러 이미지 자체를 열질 못했다. 그런데 256색까지밖에 읽어들이질 못하는 주제에, 내 기억이 맞다면 VC6의 IDE는 JPG 파일을 열 수는 있었다. 그리고는 JPG 사진을 256색으로 '디더링'-_-해서 표시해 줬다. 흠좀 많이 무섭죠? -_-

3. 찾기/바꾸기 대화상자

<날개셋> 편집기의 다음 버전은 찾기/바꾸기 대화상자의 디자인이 살짝 바뀔 예정이다.
'뒤로 검색'은 별도의 옵션으로 존재하지 않으며 버튼 자체가 '다음 찾기'와 '이전 찾기'로 따로 존재함으로써 탐색 방향을 결정하게 된다.

그리고 '처음부터 찾기' 옵션이 별도로 추가되며('이전 찾기'를 하면 문서 끝부분부터 찾게 됨), F3/Shift+F3으로 찾기를 계속하다가 문서의 끝부분에 도달했을 때는 자동으로 첫 부분으로 돌아가서 다시 찾게 할 수 있다.
'처음부터 찾기' 옵션을 지정하고서 '모두 바꾸기'를 누르면 지금 커서 위치에 상관없이 문서 전체에서 찾기/바꾸기를 일괄적으로 수행할 수 있다.

예전에는 '뒤로 검색'을 선택하면 F3이 역방향 검색, Shift+F3이 그 반대인 순방향 검색이었으나,
이제는 F3은 언제나 순방향 검색, Shift+F3이 역방향 검색이 된다..

4. 기본 IME로 지정 옵션

마치 웹브라우저에 자신을 운영체제의 기본 브라우저로 지정하는 옵션이 있듯,
드디어 추가되었다.
'TSF A급 확장 옵션'만 달랑 남아있던 '고급 시스템 옵션'에 이게 들어갔다.

사용자 삽입 이미지

사실 원래 의도했던 건, 프로그램을 설치할 때 “<날개셋> 한글 입력기를 기본 IME로 지정” 옵션을 추가하는 것이었다. 이게 아주 자연스럽지 않은가?
하지만 Windows Installer가 도대체 프로그램을 어떤 환경에서 구동하는지, 그때는 기본 IME 지정이 죽어라고 되지 않아서 어쩔 수 없이 설치 후에 사용자가 이렇게 하는 걸로 디자인을 바꿨다.
이것만으로도 운영체제 제어판을 일일이 꺼내는 것보다 마우스 클릭질을 상당히 줄일 수 있다.

물론, 이미 기본 IME로 지정이 된 상태라면, 버튼은 disable된다.

5. 이 외에도 이번 6.5에서는 드디어 기본 입력 스키마의 '글쇠 인식 옵션'에, 기존 47개 글쇠 94개 자리뿐만이 아니라 임의의 단축글쇠에다가 글쇠를 배당하는 기능이 추가되어 Shift+Capslock을 모아치기/이어치기/풀어쓰기 변환을 한다거나, Numlock 상태의 키패드에다가 한글 입력 방식을 구현한다거나 하는 활용이 가능해진다. 이것도 지금까지 꽤 오랜 숙원이었다. 쉽게 말해 지금 편집기 계층에 있는 '단축글쇠 테이블'이 입력기 계층으로도 일부 내려온 거라고 생각하면 된다.

단타를 하나 인식하는 것까지가 '기본 입력 스키마'가 하는 일이고, 그 이상 더 변칙적인 입력... 가령 동시치기라든가 한 글쇠를 눌렀다가 떼거나 오래 누르거나 하는 것은 '동시입력' 같은 별도의 스키마가 담당하게 될 것이다.

또한, 임의의 글쇠를 인식하는 것과는 반대로 이미 인식하는 글쇠도 인식을 하지 않게 할 수 있다.
예를 들어 표준 두벌식 글자판은 A~Z까지 알파벳 26개 글쇠만 영문과 다를 뿐 나머지 숫자와 기호는 영문과 동일하다. 그래서 MS IME가 동작하는 걸 보면, 두벌식에서는 숫자와 기호는 IME가 아예 가로채지 않으며, 응용 프로그램에는 IME 메시지가 아니라 일반적인 키보드 메시지가 전달된다. 세벌식일 때만 모든 글쇠를 가로챈다.
이것을 <날개셋> 한글 입력기도 이제 사용자가 지정함으로써 구현 가능해진다는 뜻이다. 숫자나 기호 글쇠를 등록한 뒤, '글쇠 독점하지 않기' 옵션을 지정하면 된다.

6. <날개셋> 한글 입력기의 외부 모듈은 TSF A급 환경에서는 전용 편집기와 비슷한 독자적인 텍스트 조작을 지원했다. 이미 조합이 끝난 한글도 낱자 단위로 지우고, 앞 글자에 조합 상태로 달라붙는 기능 말이다. 하지만 현대 한글과는 달리, 2글자 이상의 조합으로 표현되는 옛한글에 대해서는 그런 기능을 제공하지 않았다(못했다). 글꼴과 코드, 운영체제 차원에서 프로토콜 지원 미비, 응용 프로그램마다 동작 방식의 차이 등 여러가지 기술적인 이유 때문이다. 이는 앞으로 Windows 운영체제가 개선되어야 할 사항이다.

하지만 이번 6.5 버전에서는 비스타/7의 TSF 확장 모드에 한해서... 다시 말해 확장 옵션이 켜진 상태에서 웹브라우저의 입력란과 메모장(일반 에디트 컨트롤)에서 유니코드 옛한글의 고급 조작을 시범적으로 enable해 보았다.
TSF 확장 모드 자체가 아직 상당히 불안정하고 오동작이 많은 모드이긴 하지만, MS 워드나 워드패드 같은 원조 TSF A급 환경에서는 고급 조작이 “아예 불가능했다”.

제한적이나마 이제 옛한글도 낱자 단위로 지우고 달라붙어지는 게 신기하다.
사실, <날개셋> 편집기도 이론적으로는 <날개셋> 외부 모듈의 고급 조작을 완벽하게 지원한다. 하지만 그건 어차피 홈그라운드이고, 외부 모듈 말고 자체 입력기도 쓸 수 있는 환경이니, 별 의미는 없다.

이것 말고도 이번 6.5는 내부적으로 프로그램 완성도가 강화되고 각종 버그가 수정된 게 엄청 많다.
2012년의 첫 글은 아주 희망적인 글로 시작했다. 새 버전이 몹시 기대된다.

Posted by 사무엘

2012/01/01 19:11 2012/01/01 19:11
Response
No Trackback , 14 Comments
RSS :
http://moogi.new21.org/tc/rss/response/621

날개셋 변환기의 리팩터링

우리나라가 인구의 1/4이 서울에 있고, 경기도의 수도권까지 치면 무려 절반이 바둥바둥 몰려 있다고 그런다. 그래서 서울만 지나치게 팽창함으로써 야기되는 각종 사회적 문제가 심각한 수준이며, 이는 이제 어제오늘 일이 아니다.

이와 비슷한 맥락으로, <날개셋> 한글 입력기도 6만여 줄이 좀 넘는 소스 코드의 절반 가까이를 커널인 Ngs3.dll이 차지한다.
그도 그럴 것이 커널에는 문자와 문자열을 처리하는 기초 루틴부터 시작해서 모든 프런트 엔드들이 공유하는 한글 입력 오토마타가 들어있고, 방대한 제어판 GUI를 담당하는 코드도 있다. 수식과 XML parser 역시 거기에 있다. 그러니 덩치가 월등히 크지 않을 수가 없다. 앞으로 한글 입력과 관련된 기능이 또 추가된다면 커널은 더욱 커질 것이다.

그럼에도 불구하고 본인은 Ngs3.dll만이 지나치게 팽창하는 걸 방지하고, <날개셋> 한글 입력기의 코드가 소프트웨어 공학적으로 최대한 바람직하고 보기 좋게(?) 분포하게 하려 노력하고 있다.

그 일환으로 가장 먼저 도입한 개념은 바로 플러그 인이다. <날개셋> 한글 입력기가 제공하는 동일한 성격의 여러 액세서리 기능들을 이미 플러그 인이 분담해 오고 있다.
가령, 20여 종류에 달하는 텍스트 필터들과, <날개셋> 한글 입력기를 처음 접한 사용자가 유용하게 사용하는 빠른설정들은 모두 NgsX.nip라는 플러그 인이 제공하고 있다. <날개셋> 커널은 텍스트 필터와 빠른설정의 프로토콜만을 제시하고, 그 프로토콜대로 구현된 추가 기능들은 플러그 인으로부터 얻어 오는 것이다.

더 나아가, 한글뿐만이 아니라 임의의 상태와 임의의 조합 문자· 변환 후보를 지원하는 ‘<날개셋> 고급 입력기’라든가 ‘동시 입력 스키마’ 역시 플러그 인 담당이다. 커널이 직통으로 제공하는 기능이 아니다. Ngs3.dll의 과포화를 방지함과 동시에, 기반 클래스로부터 이런 확장까지 가능하다는 것을 시연할 목적으로, 이 확장 입력 기능들은 의도적으로 플러그 인으로 구현되었다.

‘부수로 한자 입력’, ‘한손 입력기’ 같은 보조 입력 도구들은 PadUI.nip라는 제2의 플러그 인을 통해 제공되고 있다. <날개셋> 편집기가 아니라 외부 모듈에서 제어판을 호출해 보면 시스템 계층에 ‘한글 표현 방식’ 탭이 있는데, 이 탭도 저 플러그 인이 제공하는 기능이다. 외부 모듈뿐만이 아니라 입력 패드(NgsPad.exe)에서 호출한 제어판도 동일한 탭 UI를 공유하고 있다.
플러그 인은 자신만의 제어판 탭을 갖출 수도 있으며, ‘시스템 계층’은 그런 확장을 하라고 존재하는 계층인 것이다.

이뿐만이 아니다.
제어판의 ‘시스템 계층’에 가면 글꼴 본뜨기를 다시 하는 명령을 찾을 수 있는데, 이때 글꼴 본뜨기를 <날개셋> 편집기 프로그램을 특수한 옵션을 주어 실행하는 형태로 구현된다. 본뜨는 코드는 Ngs3.dll에 있는 게 아니라 NgsEdit.exe의 내부에 있다. 딱히 컴포넌트화할 필요도 없이 <날개셋> 프로그램이 내부적으로만 잠깐 쓰는 보조 기능이니까 말이다.
이런 추세에 따라, 최근에 본인은 이런 리팩터링 작업을 했다.

<날개셋> 한글 입력기 제어판의 글쇠배열 편집기는 글쇠배열과 관련된 굉장히 다양한 종류의 파일을 열 수 있다.
자체 포맷은 말할 것도 없고, 윈도우 운영체제의 키보드 드라이버(NT 계열과 9x 계열 모두)와 아래아한글의 역대 글쇠배열 파일을 모두 지원한다. 그래서 <날개셋> 한글 입력기는 한글 입력 자체도 강력한 기능을 제공하지만, 여타 외국어 글자판과 한글 글자판을 손쉽게 병행해서 쓸 수 있다는 점에서도 매우 유용하고 편리하다.

지금까지는 해당 포맷들의 변환 코드가 모두 Ngs3.dll에 있었다.
그러나 그러던 것을 NgsConv.exe로 옮겼다. 그런 파일 포맷을 불러올 때는 잠시 <날개셋> 변환기를 호출한 후, 그 결과를 가져오게 바꿨다는 뜻이다. 이동한 코드의 양은 대략 8~900줄 정도.

이건 컴퓨터의 입장에서 성능이 향상된 변화라고 볼 수는 없다.
서로 다른 프로세스끼리 데이터를 주고받기 위해 오버헤드가 예전보다 훨씬 더 커지고, 사실 Ngs3.dll의 크기가 감소한 것보다 NgsConv.exe의 크기는 더 증가했기 때문이다(당연한 말이지만).
그러나 외부 파일 변환이 수천· 수만 번 반복되어야 하는 프로세스는 아니고 자주 쓰이는 기능도 아니며, 창의적인 기능이라기보다는 호환성 유지에 가까운 기능인 만큼, NgsConv로 기능이 이동한 것은 바람직한 조치임이 틀림없다.

<날개셋> 변환기는 지난 5.0 버전에서 첫 도입된 후로 그 중요성이 야금야금 커져 왔다.
초창기에는 진짜 기본적인 한글 코드 변환과, <날개셋> 3~4.x 데이터 파일을 변환하는 기능밖에 없었다가 한컴 2바이트 코드 변환 기능이 커널에서 이곳으로 완전히 이동했으며, 이번에 또 대규모 기능 이동이 이뤄졌다. 한글 입력기가 한글 입력과 관련된 데이터나 한글 코드를 변환하는 유틸리티를 제공하는 것은 completeness 차원에서 매우 의미 있는 일이며, 이번 리팩터링은 프로그램의 디자인 관점에서도 바람직한 개편임이 틀림없다.

Posted by 사무엘

2011/12/26 08:21 2011/12/26 08:21
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/618

엄청 옛날, 제로보드 홈페이지 시절에 올렸던 글이긴 한데, 살짝 고쳐서 재탕한다.
이런 글이 아직까지 블로그에는 올라간 적이 없었구나.

※ <날개셋> 한글 입력기 내력 퀴즈
퀴즈의 출제 의도는, <날개셋> 한글 입력기가 지금과 같은 수준으로 발전하기까지 어마어마하게 긴 세월과 그에 따른 찔끔찔끔 점진적인 발전이 쌓이고 쌓여 왔음을 일깨우는 것이다.
출제 범위는 전부 readme.txt임. 관심 있는 분은 풀어 보시라.

1. 입력기 설정을 xml로 저장하거나 불러올 수 있게 된 첫 버전은?

2. msi 기반으로 배포되기 시작한 첫 버전은?

3. 편집기에서 undo/redo 기능이 최초로 구현된 버전은?

4. 편집기에서 지금은 너무나 당연시되고 있는 자동 줄바꿈 기능이 추가되고 탭 처리가 제대로 되기 시작한 첫 버전은?

5. 초성+한자로 특수문자를 입력할 수 있게 된 첫 버전은?

6. 아래아한글 200x의 사용자 글쇠배열 파일과 윈도우 운영체제의 글쇠배열 드라이버를 import할 수 있게 된 첫 버전은?

7. 지금과 같은 계층구조 <날개셋> 제어판 UI가 갖춰진 첫 버전은?

8. 특수 도깨비불 규칙이 도입된 첫 버전은 무엇이며, 이 개념으로 기술할 수 있는 한글 입력 방식은 무엇이 있는가?

9. 편집기에 '전체 화면' 기능이 추가된 첫 버전은?

10. 지금처럼 2만 7천여 자의 유니코드 한자 독음 정보가 모두 사용 가능해진 첫 버전은?

11. 편집기에서 ctrl+드래그로 불연속 다중 블록을 잡을 수 있게 된 첫 버전은?

12. 가상 낱자 규칙이 도입된 첫 버전은 무엇이며, 이 개념으로 기술할 수 있는 한글 입력 방식은 무엇이 있는가?

13. 단일 바이너리만으로 윈도우 9x와 XP 계열에서 모두 실행되고 유니코드 API도 지원하게 된 첫 버전은?

14. 100% 정확한 세벌식 최종 자판과 모아치기, 무한 낱자 수정 같은 기능은 언제부터 지원되기 시작했는가?

15. 지금 글쇠배열, 오토마타 등에서 보편적으로 쓰이고 있는 수식이라는 개념이 첫 도입된 버전은?

16. 64비트 플랫폼이 정식 지원되기 시작한 첫 버전은?

17. 지금과 같은 형태의 프로그램 도움말(4th edition)이 들어간 첫 버전은?

18. 편집기에 영문에 대해서 빠른교정 기능이 존재했던 전무후무한 버전은?

19. 조합 자동 종료 타이머란 무슨 개념을 가리키며 이 기능이 필요한 한글 입력 방식은 무엇이 있는가? 그리고 <날개셋> 한글 입력기는 어느 버전부터 이것을 지원하기 시작했는가?

20. 편집기에서 내장 글꼴 이외의 글꼴로도 옛한글을 찍을 수 있게 된 최초의 버전은?

※ <날개셋> 한글 입력기 사용자 설문
(☞)는 답안 예시이고, 다음 본문은 개발자 본인의 응답임.

1. 날개셋 편집기과 외부모듈(IME)의 사용 비중은?
(☞ 편집기는 지금껏 거들떠보지도 않고 MS IME 대체용으로 외부모듈만 써 왔다,
편집기만 메모장 대용으로 애용 중이고 운영체제에서는 여전히 MS IME나 새나루를 쓴다,
둘 다 잘 쓰고 있다 등)

편집기를 코드 말고 일반적인 텍스트의 편집용으로 아주 요긴하게 사용하고 있다. 이 프로그램은 100% 내가 만든 코드로만 이뤄져 있다 보니 내부 메커니즘을 잘 알고 있고, 따라서 심리적으로 마치 우리집에 온 것 같은 가볍고 편안한 느낌이 든다. 세상에 윈도우 환경에서 16*16 비트맵 글꼴로 조합형 한글을 찍는 프로그램이 또 어디 있겠는가? 마치 세벌식 기계식 타자기를 컴퓨터로 그대로 옮겨 놓은 것 같은 느낌을 주는 게 프로그램의 개발 의도였다.

2. 편집기 또는 타자연습에서 여러분이 선호하는 내장 글꼴은?
(☞ 바탕, 둥근모, 가는달, 또는 윈도우 3.1 바탕체나 굴림 같은 완성형 글꼴 등)

위에서 썼듯이 '바탕'과 '둥근모' 이 둘이 정말 짱이다. 오래 써도 질리지 않고 획의 모양이 좋아서 수 년째 사랑하고 있다. 둘을 거의 교대로 쓰는 중.
특히 퀴즈의 20번 문제의 답에 해당하는 그 버전부터는 조합 테이블이 좀 더 정교해진 아래아한글 1.x의 바탕체가 도입되어서 품질이 더욱 향상됐다.

3. 당신이 날개셋에서 한글 입력용으로 주로 사용하는 입력 환경은?
(☞ 두벌식, 세벌식 390, 최종 또는 나만의 글자판, 안마태, 복벌식/신세벌식 등등)

세벌식 최종 + 모아치기 콜. 완전 FM 방식을 즐겨 쓴다. 즉, 이중모음 정석이 존재하고 겹받침은 Shift로만 입력 가능한 그 방식 말이다.

4. 날개셋 타자 게임을 해 보셨는가? 어느 주인공을 사용하며, 처음부터 시작해서 몇 탄까지 가는지?
(☞ 오타 보정 기능이 있는 미르가 좋고 얘로 8단계까지 간다)

게임을 설계하고 만든 사람으로서, 어렵지만 맷집이 좋은 한별을 선호하며 대부분의 경우 끝 탄을 깬다. 다만 지옥 훈련 단계에서 바이러스가 더럽게 나오면 가끔 12단계에서 죽기도 함.

5. 혹시 Windows 말고 타 운영체제를 사용 중인가? <날개셋>이 윈도우 이외의 운영체제로 포팅되기를 가장 원하고 있는 운영체제는 맥과 리눅스 중 무엇인가?
(☞ 회사/연구실에서 리눅스를 쓰고 있는데 리눅스용이 나오면 좋겠다. / 맥북 쓰고 있는데 맥용이 꼭 나왔으면 좋겠다)

개인적으로 접근하기가 더 쉬운 운영체제는 리눅스이지만, 맥이 더 뽀대-_-가 나 보이고 사용자가 더 많기도 하니 개인적으로는 맥용이 먼저 만들어지면 좋겠다. IME를 못 만들면 편집기부터라도 말이다.
그 새끈한 맥OS에서 <날개셋> 편집기의 16*16 비트맵 글꼴이 나올 걸 상상하면 훈훈하다.

Posted by 사무엘

2011/12/16 19:37 2011/12/16 19:37
Response
No Trackback , 20 Comments
RSS :
http://moogi.new21.org/tc/rss/response/614

여타 소프트웨어들이 다 그렇듯이, 본인의 <날개셋> 한글 입력기에도 자기 정체성을 소개하는 고유한 About 대화상자가 있다. 타자연습은 그냥 별도의 About 탭이 대화상자를 대신하고 있고..;;

이게 참 재미있는 게, 원래 도스 시절에 풀다운 메뉴를 갖춘 각종 응용 프로그램들은 About 표시 기능이 맨 첫째 메뉴의 첫째 항목에 있었다.
하지만 윈도우 운영체제의 관행은 정반대로 맨 마지막 도움말 메뉴의 맨 마지막 항목에 About을 놓는 것인지라, 위치가 그렇게 바뀌어 버렸다.
과거 도스용 아래아한글과 윈도우용 아래아한글을 비교해 보면 차이가 명확하다.

사용자 삽입 이미지

뭐, 아래아한글은 아래아한글이고, 이제 내 프로그램의 경우를 살펴보자.

사용자 삽입 이미지

일단 이 프로그램이 <날개셋> 한글 입력기의 어느 부속품이며(편집기, 외부 모듈, 변환기 등등) 부속품의 버전이 무엇인지를 명시한 후, 이 프로그램이 <날개셋> 한글 입력기라는 제품의 구성 요소임을 밝힌다.
(이 글은 최신 6.3버전이 완성되기 한참 전에 작성된 글이어서 스크린샷은 6.2 기준. -_-)

모든 부속 프로그램들은 About 대화상자를 표시하는 명령이 어떤 형태로든 존재한다. 편집기는 도움말 메뉴에, 외부 모듈은 language bar의 도움말 메뉴에, 변환기는 대화상자의 시스템 메뉴에, 입력 패드는 트레이 우클릭 메뉴에 등.

그 다음으로 나오는 것은 한글 입력기 전체의 버전과 구동하는 CPU 비트수이며, 이 프로그램의 간단한 용도와 저작권, 날짜, 라이센스, 제작자 홈페이지 주소처럼 갖출 건 다 갖추고 있다. ^^

거기에다 간략한 운영체제 버전과 메모리 양 정보는 액세서리. 윈도우 9x에서는 리소스 퍼센티지도 나온다. -_-
개인적으로는 홈 에디션, 프로페셔널 에디션, 서버 에디션 같은 정보도 표시해 주는 기능이 있으면 좋겠지만, 귀찮아서-_- 생략.

<날개셋> 한글 입력기의 버전과 함께 나타나는 비트수는, 현재 돌아가고 있는 모듈의 비트수이다.
그러므로 64비트 OS에서 64비트 에디션을 설치했더라도, 현재 <날개셋> 한글 입력기를 사용하는 프로그램이 32비트라면 이 수치는 32비트로 나타난다. 따라서 이걸 보면, 굳이 작업 관리자를 열지 않더라도 이 프로그램의 비트수를 바로 알 수 있다.

그 대신, 64비트 OS에서 32비트 프로그램을 사용하고 있다면, 운영체제 버전 다음에 '64 bit'라는 숫자가 따로 명시된다. 이 점 착오 없기 바란다.
32이든 64이든 운영체제와 프로그램의 비트수가 일치하면 이런 말이 따로 뜨지 않는다.

외부 모듈은 이것 말고도 유용한 정보가 About 대화상자에 또 뜨는 게 있다.
바로, 스크린샷에서 보다시피 현재 구동 중인 응용 프로그램이 TSF / IME중 어느 기술 계층을 사용하는가이다.
비스타부터는 무조전 TSF이니까 이게 큰 의미는 없다만, TSF A급인지 B급인지도 가르쳐 주고, 게다가 비스타 이상에서는 TSF 확장 모드를 사용 중인지도 알려 준다. (TSF A*라고 별표가 추가됨)

한글 입력기로서, 특히 사용자가 버그 신고를 할 일이 있을 때 무척 유용한 정보를 덩달아 제공해 주는 셈이므로 참고하기 바란다.

또한, 오늘날의 사용자가 볼 일은 없겠으나,
윈도우 9x에서 윈도우 3.x용 16비트 프로세스 밑에서 <날개셋> 한글 입력기 IME를 돌려서 About 대화상자를 띄웠다면,
무려 16 bit IME mode라는 말까지도 뜬다. -_-;;
무조건 NTVDM을 돌리는 NT 계열은 해당사항 없음.

IME라든가 훅 DLL 같은 걸 만드는 게 아니라면, 32비트 DLL이 16비트 EXE 밑에 붙을 일은 없을 텐데, 무척 신기한 경우이다. 16비트 EXE는 32비트 EXE처럼 자신만의 주소 공간을 갖고 있지 않고 굉장히 이상한 방법으로 실행된다.
그 상태를 판단함으로써 지금 EXE가 16비트인지 32비트인지를 알 수 있다.

그 반면, 32비트와 64비트끼리는 과거처럼 호환성이고 썽킹(thunking)이고 나발이고 없이 코드가 서로 상종을 안 하기 때문에, 둘을 완전히 따로 만들어야 하지만 말이다.
그러고 보니 32비트와 64비트는 이렇게 서로 따로 노는데도 불구하고, 비주얼 C++ IDE는 32비트 프로그램임에도 64비트 OS에서 64비트 프로세스를 잘도 디버깅을 할 수 있는지 무척 신기하다. 제아무리 커널 오브젝트 핸들을 32비트와 64비트 프로세스끼리 공유가 가능하다 해도, 이건 보통일이 아닌 것 같다.

이상, <날개셋> 한글 입력기의 about 대화상자에 대한 설명이었다.

Posted by 사무엘

2011/10/07 08:17 2011/10/07 08:17
Response
No Trackback , a comment
RSS :
http://moogi.new21.org/tc/rss/response/580

<날개셋> 한글 입력기가 받아들이는 입력 단위는 여러 종류가 있다.

가장 먼저, 딱히 내부적인 메카니즘 없이 유니코드 문자를 있는 그대로 받아들이는 '일반 문자'가 있어서 심지어 한글 자모도 그냥 일반 문자처럼 입력시킬 수 있다.
오토마타를 거쳐 조합되는 한글은 입력 단위 차원에서 세벌식과 두벌식으로 종류가 나뉘어 있다. 그래서 한 글자판 안에 세벌식 자모 글쇠와 두벌식 자모 글쇠가 따로 존재할 수 있다.

이 외에 한글 입력기 내부의 상태를 다양하게 바꾸는 특수글쇠가 존재하며, Bksp라든가 한자 키는 그런 특수글쇠의 일종으로 처리된다. 다만 Bksp는 한자 키와는 달리, 한글 입력기가 처리할 때도 있고 그렇지 않고 응용 프로그램이 자체적으로 처리할 때도 있기 때문에, 키 위치를 한글 입력기가 마음대로 옮길 수 없다는 차이가 존재한다.

<날개셋> 한글 입력기는 흠좀무스럽게도 여러 자모를 한꺼번에 배당해서 중성과 종성을 한번에 입력한다든가, 심지어 지금 글자의 종성과 다음 글자의 초성을 한번에 입력할 수 있으며, 숫자 키패드처럼 '000'(UTF16 기준 최대 6바이트) 같은 문자열을 한 글쇠에 배당할 수도 있다. 이건 지난 5.65버전부터 가능해졌는데, 예전에는 그런 두세 글자를 한꺼번에 입력하려면 "<날개셋> 고급 입력기"의 사용자 정의 조합을 써야만 했었다.

이렇듯, 이 프로그램은 내부 구조가 대인배스러우며, 사용자 정의 가능성의 폭이 매우 크다.
그런데 '상태 전이'는 도대체 뭘 하는 놈일까?
이건 나름 무려 <날개셋> 한글 입력기 3.0 시절부터 있었던 기능이다. (2004년.. 그 엄청난 옛날!)
얘는 이름으로부터 알 수 있듯이, 오토마타의 내부 상태 번호를 지정된 코드값으로 바꿔 준다.

보통 오토마타 상태는 한글 자모를 입력하면서 그 입력값에 따라서 바뀌는 법인데,
그렇게 하지 않고 오토마타 상태만 바꿈으로써 그 이후의 한글 입력기의 동작 방식을 바꾸는 일종의 특수글쇠와 비슷한 효과를 낸다.
상태 전이 글쇠는 한글을 조합하고 있는 중에만 사용할 수 있으며, 0번 상태로 가게 해서 조합을 중단시키게 할 수도 없다. 다시 말해 상태 전이는 언제나 nonzero끼리만 가능하다.

가령, 평소에는 이어치기 방식으로 한글을 입력하다가 어쩌다가 가끔 모아치기나 무한 낱자 수정 같은 걸 일시적으로 쓰고 싶을 때, 두 방식의 오토마타를 모두 설계해 놓은 뒤 두 상태를 전환하는 기능을 배당하면 된다.
그 메카니즘은 다음과 같다.

초-중-종성 순서대로 들어온 입력만 허용하는 이어치기 오토마타는 다음과 같다. 수식을 해석하여 표로 나타낸 것이다.

현상태 비고
0 1 2 3  
1 1 2 3
2 0 2 3 중, 초중
3 0 0 3 중, 중종, 초중종, 초종

그 반면, 모아치기 오토마타는 다음과 같다.

현상태 비고
0 1 2 2  
1 1 3 3
2 3 2 2 중, 종, 중종
3 0 3 3 초중, 초중종, 초종

결국, 이어치기든 모아치기든 처음에 초성만 입력되었을 때는 공통으로 1번 상태이지만, 2번과 3번 상태는 각 성분이 입력된 상태가 서로 다를 수 있다.

두 오토마타를 합쳐야 하기 때문에, 서로 공유하는 한글 상태별로 오토마타 상태를 더 늘리도록 하겠다. 즉,

이어치기: 초 / 중,초중 / 종,중종,초중종,초종
모아치기: 초 / 중,종,중종 / 초중,초중종,초종

이었으니까 이들의 공통분모는

초 / 중 / 초중 / 종,중종 / 초중종,초종

으로 더욱 세분화할 수 있다. 중-중종과 초중종-초종만이 모아치기와 이어치기 모두에서 한 묶음으로 따라다니기 때문이다.
이렇게 상태 수만 늘린 채 모아치기 오토마타를 재구성하면 다음과 같다.

현상태 비고
0 1 2 4  
1 1 3 5
2 3 2 4
3 0 3 5 초중
4 5 4 4 종, 중종
5 0 5 5 초중종, 초종

그리고 동일한 상태에 따라 이어치기 오토마타를 expand하되, 1~5라는 상태 번호에다가 10을 더하여 11~15를 만들면 다음과 같다.

현상태 비고
0 11 12 14  
11 11 13 15
12 0 12 14
13 0 13 15 초중
14 0 0 14 종, 중종
15 0 0 15 초중종, 초종

이 오토마타들을 한데 집어넣어 주면 이렇게 된다.

0 → A ? 1 : B ? 2 : C ? 4 : 0
1 → A ? 1 : B ? 3 : C ? 5 : 0
2 → A ? 3 : B ? 2 : C ? 4 : 0
3 → B ? 3 : C ? 5 : 0
4 → A ? 5 : B|C ? 4 : 0
5 → B|C ? 5 : 0
11 → A ? 11 : B ? 13 : 15
12 → B ? 12 : C ? 14 : 0
13 → B ? 13 : C ? 15 : 0
14 → C ? 14 : 0
15 → C ? 15 : 0

그리고 적당한 글쇠에다가 다음 수식을 넣어 준다.

C1|T+(T>=10 ? -10 : 10)

C1은 '상태 전이'를 나타내는 접두사이다. T는 오토마타 상태 번호를 나타내는데, 이게 10보다 큰 상태이면 10을 빼 주고, 그렇지 않으면 10을 더한다. 따라서 1 ↔ 11, 13 ↔ 3 같은 오토마타 상태를 왔다갔다 할 수 있다. 초성과 중성만 입력된 상태의 모아치기 상태(3) 혹은 이어치기 상태(13)처럼 말이다.

지금까지 설명한 것처럼 오토마타를 짜면, 기본적으로 모아치기가 시작하는데 상태 전이를 해 주면 이어치기가 되게 할 수 있다.
그러나 0번 상태에 대한 수식을 A ? 1 : B ? 2 : C ? 4 : 0 대신, A ? 11 : B ? 12 : C ? 14 : 0 로 지정해서 이어치기 상태로 먼저 가게 하면, 기본적으로 이어치기인데 상태 전이를 해 주면 잠깐 모아치기가 되게 할 수도 있다.

즉, ㅏ를 입력했는데 평소 같으면 초성 ㄱ을 누르면 ㅏㄱ가 따로 갈라져 버릴 것이다. 이때 상태 전이 키를 잠시 누르면, 그 상태에서 '아'나 '악'을 어느 순서대로든 입력할 수 있는 상태가 된다. 상태 전이 기능은 바로 이런 식으로 활용할 수가 있다. 글자판을 바꿀 때와는 달리, 한글 조합 상태가 그대로 유지된다!

오랜만에 <날개셋> 한글 입력기의 레어템 테크닉에 대한 글을 썼는데 전달이 잘 됐으려나 모르겠다.
주어진 유한한 요소만 고침으로써 컴퓨터에서 한글을 내가 원하는 어떤 창의적인 형태로든 다룰 수 있게 하고, 그 과정에서 세벌식 글자판의 우수성을 부각시키는 것이 이 프로그램의 개발 목적이다.

IME도 개발돼 있긴 하지만 <날개셋> 한글 입력기의 대표 프로그램은 역시 편집기라는 전용 프로그램이다. 그야말로 윈도우 95 스타일의 기본 GUI를 그대로 답습하고 있는 소박한 프로그램이지만 이 작은 에디터가 본인에게는 마치 내 정신의 고향 같다. ^^;;

Posted by 사무엘

2011/09/21 08:28 2011/09/21 08:28
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/572

날개셋 한글 입력기 6.3

추석 연휴가 끝나자마자 <날개셋> 한글 입력기의 따끈한 새 버전 소식이 기다리고 있다. (만세 ㄲㄲ)
본인의 사정으로 인해, 6.2가 나온 지 한 달이 채 되지 않아 6.21도 아니고 이례적으로 6.3이 나오게 됐다. 원래는 10월쯤에 내놓으려고 했는데.

그 대신 이게 올해의 마지막 버전업이 되지 싶다.
이번 학기를 마친 뒤엔 드디어 종합 시험(논자시;;)을 봐야 하고, 또 이번에 듣는 과목은 지난 학기의 과목과는 달리, 국어학 배경이 빈약한 본인에게는 만만찮은 것들이다.
그래서 프로그램 개발부터 좀 마무리를 짓고 나서 그런 일들에 전념하고자 한다.

6.3은 +0.1 이상에 해당하는 기능 추가와 개선이 충분히 이뤄졌다.
외부 모듈이 TSF 환경에서 옛한글 같은 2글자 이상의 조합을 표현할 때 조합이 끊어지던 문제를 완전히 해결했고,
한글 표현 체계와 에디팅 엔진이 크게 바뀌었던 직전 버전에만 자잘하게 존재하던 여러 버그들도 잡았다. 편집기의 경우 화면 잔상이 남던 것부터 시작해 심하면 프로그램이 죽던 문제까지도 있었다. 더 구체적인 내역은 모방 범죄 예방을 위해 알리지 않겠다. ㄲㄲ

정 재민 님께서 보내 주신 글꼴 데이터를 반영하였으며, 유용한 텍스트 필터도 세 종류나 추가했다.
- 호환용 영역의 한자를 본디 형태로 바꾸는 필터 (정 재민 님 제안)
- 본문 중의 수식을 계산하고 숫자의 경우 진법을 싹 바꿔 주는 필터
- 패턴 치환 필터. 이건 프로그램 설치해서 도움말을 읽어 보기 바란다. 일괄 치환과 더불어 아주 유용한 기능으로, 이걸 쓰면 칼럼 단위의 데이터를 다루기 위해 엑셀 같은 별도의 프로그램을 쓸 일이 크게 줄어든다. <날개셋> 편집기는 키매크로나 칼럼 블록 기능을 제공하지 않지만, 대체 기능을 텍스트 필터의 형태로 꾸준히 제공하고 있다.

그리고 뭐니뭐니해도 6.3 버전의 가장 큰 특징은 Bksp 키를 다루는 체계를 싹 바꿨다는 점.
<날개셋> 한글 입력기는 1.0 시절부터 Bksp에 여타 한글 입력기에서는 찾을 수 없는 특수한 기능들을 제공해 왔다. 즉,

- Bksp와 Shift+Bksp의 용도를 구분하고,
- 조합 여부와 상관없이 한글을 낱자나 글자 단위 중 원하는 형태로 얼마든지 지울 수 있다.
- 그리고 한글이든 비한글이든 지금 글자가 다 지워진 후 그 앞에 또 한글이 있으면 그 한글에 달라붙어서 조합 상태가 재연된다. 앞 글자도 seamless하게 계속 낱자 단위로 지우거나 고치거나 빠진 낱자의 추가 입력이 가능하다.
- 게다가 이걸로도 모자라서, 두벌식 글자판의 경우 도깨비불 현상까지 고려해서 이전 상태를 복원해 준다. 일명 역도깨비불인데,

안해 → 않 (≠ 안해 → 안ㅎ → 안)
보끼 → 볶 (≠ 보ㄲ → 보ㄱ)

같은 동작도 지원된다는 뜻이다.

그리고 그 후 10여 년 뒤, 6.3 버전에서는, <날개셋> 한글 입력기의 간판 기능으로 손색이 없는 이 기능을 지정하는 방식이, 예전보다 훨씬 더 깔끔하고 체계적이고 전문적으로 바뀌었다.

사용자 삽입 이미지

스크린샷을 보면, 예전에 Bksp 동작 방식에 있던 서너 개의 체크 옵션이, 자주 쓰는 predefined configuration을 바로 가져오는 콤보 상자로 대체되었음을 알 수 있다. 자세한 설정은 말 그대로 '자세히' 버튼을 눌러서 나타나는 별도의 대화상자에서 해야 한다.

스크린샷에서 알 수 있듯, Bksp와 Bksp, 그리고 한글을 조합 중일 때와 그렇지 않을 때, 각 상황별로 한글을 무슨 순서대로 지울 것이며 이 글자가 다 지워졌을 때 앞의 한글에 달라붙을지를 일일이 사용자가 설정할 수 있다. 예전 버전에서는 기능 자체만 제공되었지 이 정도로 세밀한 설정은 가능하지 않았다.

또한 두벌식 역도깨비불 재현도 별도의 옵션으로 바뀌었다. 따라서 두벌식 자판을 쓴다고 하더라도 그냥 달라붙기 기능만 쓰지, 역도깨비불까지 원하지는 않는 사용자라면 해당 옵션을 끄면 된다. 이런 취사선택도 예전 버전에서는 가능하지 않았다.

과거의 3.0부터는 자그마한 옵션이 하나 추가되었는데, 입력 순서와 상관없이 하위 낱자부터 한 타씩 지우는 옵션이 그것이다.
ㅇ+ㅜ+ㅣ+ㄴ 순으로 입력했든 ㅇ+ㅜ+ㄴ+ㅣ 내지 ㅜ+ㅇ+ㅣ+ㄴ 순으로 입력했든, '윈'은 무조건 종성부터 역순으로 지워서 위-우-ㅇ이 되게 하는 기능인데, 이것이 바로 위의 스크린샷에서는 '최하위 낱자의 직전 한 타'이다. 이런 차이는, 당연한 말이지만 동일한 글자를 여러 가지 순서로 입력할 수 있는 모아치기가 가능한 세벌식 체계에서만 의미가 있다.

그에 덧붙여 이 새 버전에서는 '최하위 낱자 전체'라는 옵션도 추가됐다. 말 그대로 낱자 단위로 한꺼번에 지워 버리는 옵션으로, 아무리 복잡한 한글이라도 초· 중· 종성이 모두 갖춰져 있다면 세 타 만에 다 지워진다. '윈'을 지울 때 '위' 다음에 '우'를 안 거치고 바로 'ㅇ'이 된다는 뜻. 사실, PC용이 아닌 휴대전화용 한글 입력기의 Backspace는 다들 이런 방식으로 구현되어 있다.
여담이지만, 내부적인 구현 오버헤드는 최하위 낱자를 따지는 방식이, 고전적인 '직전에 입력된 한 타'보다 더 크다.

이쪽 기능을 대대적으로 손을 좀 봐야겠다고 거의 6.0 개발 초창기 시절부터 생각은 하고 있었는데 드디어 해내게 되어 무척 기쁘다. 진작부터 지원돼야 했을 기능들이다.
물론, 주변 글자를 자유자재로 다룰 수 없고 write-only만 가능한 TSF B급 이하 환경에서는 '달라붙음' 같은 기능은 전혀 쓸 수 없고, '조합 상태가 아닌 한글을 지우는 단위' 역시 오로지 글자 전체 단위로 제약을 받게 된다.

기능을 구현하는 과정에서 <날개셋> 한글 입력기의 내부 구조도 제법 바뀌었다. 하지만 더 합리적으로 바뀌었다. 그 내막을 살펴보면 이렇다.

지난 3.0 버전 이래로 Bksp 키는 입력 스키마가 '낱자 단위 지우기' 아니면 '글자 단위 지우기'라는 특수글쇠를 생성하는 형태로 내부적으로 처리되었다. 그리고 전자와 후자를 Bksp와 Shift+Bksp에다 각각 대응시킬지, 아니면 반대로 Shift+Bksp와 Bksp에다 대응시킬지를 '입력 스키마'의 옵션으로 지정 가능했다. 그게 끝이었다.

그러나 이제부터는 입력 스키마는 Bksp일 때 Bksp1, 그리고 Shift+Bksp일 때 Bksp2라고 언제나 고정적인 특수글쇠만을 생성한다. 이런 특수글쇠는 1부터 4까지 현재 네 종류가 예약되어 있는데, 이들 자체에는 어떤 특정 동작 방식이 규정되어 있지는 않다. 각 특수글쇠의 해석은 전적으로 그 아래의 '문자 생성기'만이 담당하게 된다. 그것이 바로 저 'Bksp 동작 방식' 옵션인 것이다.

그리고 그 추상적인 Bksp와는 별개로, 특정 방식대로 한글 낱자를 지워 주는 특수글쇠가 또 존재한다. 즉, 진짜배기 Bksp는 입력기의 옵션이 어떻게 지정됐냐에 따라서 낱자/글자 단위로 지우고 필요하다면 달라붙기나 역도깨비불까지 제공하는 반면, 그냥 낱자 단위, 입력 역순, 글자 전체(위의 스크린샷에 있는 네 옵션 중 하나) 삭제라는 고정불변 단편적인 Bksp 기능도 임의의 글쇠에다가 특수글쇠의 형태로 배당해서 쓸 수 있다는 뜻이다.

아시는 분이 있으려나 모르겠는데, <날개셋> 한글 입력기에는 0x10과 0x11에 '뒷글자 삭제'라고 해서 Del과 유사한 기능을 하는 특수글쇠가 이미 있다. 그것처럼 Bksp와 유사한 기능을 하는 네 가지 특수글쇠도 일관성 차원에서 추가된다고 이해하면 정확하다.

이들 특수글쇠는, 편집 환경만 지원된다면(TSF A급 같은), 이미 완성된 한글도 물론 낱자 단위로 자기 방식대로 지울 수 있다. 하지만 그런 이상적인 환경이 아니라면, 이미 완성된 글자는 건드리지 못한다. 사실 Bksp 키 자체가, 한글 입력기가 조종하는 것과 에디터 응용 프로그램이 조종하는 것이 공존하는 체계이다. 완성된 글자는 한글 입력기가 아니라 응용 프로그램이 지워 주며, 응용 프로그램은 일반적으로 '진짜' Bksp 키가 들어왔을 때만 그런 동작을 하기 때문이다.

이런 식으로 시스템 개편을 했는데, 솔직히 내가 생각했지만 내가 봐도 너무 멋있다..;; 이 맛에 프로그래밍 하는 거다.
이것저것 생각해 놓은 게 많아서 당분간은 새 버전의 Readme엔 '※ 한글 입력 체계' 카테고리가 쭉 있을 것으로 보인다. 한글 입력기 본분에 충실한 기능이 계속 강화되고 개선되고 있기 때문이다.

6.3 버전은 6.2와 API가 완전히 호환된다.
다음 버전은 내년 초에 6.5 정도가 목표이다. 버그 없이 프로그램을 잘 만들어서 가능하면 0.0x대로 내려가지는 말고 버전을 쑥쑥 크게 올려야겠다.

Posted by 사무엘

2011/09/14 08:29 2011/09/14 08:29
Response
No Trackback , 9 Comments
RSS :
http://moogi.new21.org/tc/rss/response/569

1.

이 블로그는 좀 특이한 구석이 있다.
보통, 덕력이 좀 높은 블로거는 전문 분야 블로그와 일상 잡담 블로그를 분리해서 운영한다.
하지만 본인은 그렇게 하지 않으며 모든 관심 분야에 대한 글을 한 블로그에다 몰아서 올린다.
블로그를 따로 운영해야 할 정도로 덕력이 아주 높은 것도 아니어서 말이다..... 어? ㄲㄲㄲㄲ

난 사람들이 자기 관심 분야 블로그에만 가는 걸 원하지 않는다.
내 근황이 궁금하고 나에 대해 알고 싶어서 내 블로그에 온 사람이라면, 좋든 싫든 프로그래밍 관련 글도 보고, 철-_-도 관련 글도 보고, 한글 관련 글, 기독교 관련 글도 보길 원한다.
독자 여러분은 어떻게 생각하실지 모르겠지만 어쨌든 본인은 내 식대로 이런 식으로 블로그를 운영해 나갈 것이다. ㅋㅋ
<날개셋> 한글 입력기 카테고리가 몇 달째 글이 없으니 오늘은 또 오랜만에 개발 근황을 전하도록 하겠다.

2.

<날개셋> 한글 입력기의 다음 버전은 6.2로 확정했다. 나흘 뒤인 8월 21일 아침에 나올 예정이다. 현재 코딩은 거의 마쳤고 테스트와 도움말 작성 중이다.
편집기를 안 쓰는 분에게는 그리 큰 해당 사항이 없겠지만, 6.2에 대해서는 지금까지 오랜 숙원이었던 에디팅 엔진의 최적화 소식부터 먼저 전해야겠다.
무려 7년 전, 3.0 시절 이래로 변함없이 남아 있던 에디팅 엔진을 뒤집어엎었다. 옛날 코드의 로직을 재구성하여 더 정교하게 다시 만드는 게 쉬운 일이 아니었다.

예전 버전이 얼마나 비효율적이었는지를 단적으로 설명하자면 이렇다.
수십만 줄에 달하는 텍스트를 불러와서 맨 앞줄에서 엔터를 눌러서 줄을 삽입하거나 텍스트를 붙여넣으면 그 줄부터 문서 끝까지 내부적으로는 행번호가 다 renumbering된다. -_-;;
그리고 undo 한번 할 때마다 그 텍스트 레이아웃이 전부 다시 짜진다.

이제는 아무리 큰 문서를 불러와도 텍스트 레이아웃과 재배치는 영향을 받은 문단에서만 일어나며, renumbering도 없어졌다. Ctrl+Z를 마음껏 눌러도 된다.
다른 작업 우선순위에 밀리고 또 밀려서 7년 동안 못 하고 있던 일을 이제야 해냈다.
3.0을 만들던 당시는 세벌식 모아치기와 새로운 한글 입력 오토마타에 치중하느라, 에디팅 엔진은 비록 구닥다리 2.x에 비해서야 혁신이었지만 그래도 시간 관계상 대충 발로 짠 부분이 있었던 것이다.

이번 버전은 파일 저장도 매 줄마다 디스크에 쓰는 게 아니라, 수 MB 단위로 버퍼에다 미리 저장한 후 한꺼번에 디스크에 쓰게 함으로써 속도를 크게 향상시켰다. 이렇게 하는 게 이 정도로 큰 차이를 만들 줄은 몰랐다.
<날개셋> 변환기의 파일 변환 속도도 훨씬 더 빨라졌다.
학교에서 실제로 수~수십 MB에 달하는 옛한글 말뭉치 파일을 다뤄 보고서야 성능을 개선할 필요를 느꼈다.

3.

그리고 <날개셋> 편집기는 이제 legacy format(한컴 2바이트 코드 및 한양 PUA)으로 클립보드를 읽고 쓰는 기능이 없어지고, 편집 메뉴에 '선택하여 붙여넣기'(Paste special) 기능도 없어진다. Paste special은 무려 <날개셋> 한글 입력기 2.0때부터 있었던 기능이지만, 이 프로그램이 텍스트에다 서식을 넣을 수 있는 워드 프로세서도 아니고 사실 필요 없는 기능이다. 유니코드 하나만 신경 쓰면 되니까 말이다.

그 대신 이 기능들은 <날개셋> 변환기로 이동한다. 다만, 지금까지 한컴 2바이트 코드를 읽는 것 말고 '쓰는' 기능은 제2수준 한자를 지원하지 않았었는데, '쓰는' 것도 가능해진다. 클립보드 변환 기능까지 그대로 지원되긴 하지만, 아래아한글 97이나 <날개셋> 무려 2.x와 텍스트 데이터를 변환하는 상황이 아니라면 이제 쓸 일은 없을 것이다. 그러니 호환성 유틸리티인 변환기로 기능 이전.
하지만 유니코드가 등장하기 전에 아래아한글이 국어 정보 처리에 끼친 영향력을 감안하면, 한컴 2바이트 코드 지원을 완전히 없애 버릴 수는 없다.;;

또한, 옛한글을 한양 PUA <-> 유니코드 5.2 형식으로 변환하는 기능은 '텍스트 필터'로도 들어가서 편집기나 외부 모듈이 즉석에서 사용 가능하게 된다. 한양 PUA의 인지도는 아직까지도 무시할 수 없기 때문에..;;
이걸 감안하면, 비록 편집기의 한양 PUA 지원 기능은 겉으로는 일관성 차원에서 사라지지만, 동일 기능이 더 유용한 다른 형태로 대체되는 셈이다.

덤으로, <날개셋> 변환기는 옛한글 변환은 지금까지 UTF16 방식의 파일밖에 지원하지 않았다가 이제 드디어 UTF8도 지원할 예정이다. 그리고 명령줄에서는 하위 디렉터리의 모든 파일을 재귀적으로 찾아서 변환하는 /S 옵션이 추가된다.

4.

이렇듯, <날개셋> 한글 입력기의 다음 버전은 편집기와 변환기가 바뀐 게 많고 외부 모듈은 변화 사항이 상대적으로 적다고 볼 수 있다. 그래도 외부 모듈이 바뀐 걸 나열하자면,

첫째, 한글 글자판을 찾을 때 무조건 맨 위의 0번부터 그 아래가 아니라, 6.0에서 추가된 개념인 '기본 입력 항목'부터 먼저 고려하기 시작했다. (진작에 이렇게 했어야지..)
둘째, 편집기와 외부 모듈을 같이 쓰는 경우, 편집기에서 프로그램의 UI 언어를 바꾸면 외부 모듈도 아쉬운 대로 그걸 따라가게 했다.

이 외에, 프로그램 전반적으로는
수식에서 ? : 연산자와 콤마 연산자가 변수를 되돌리면 거기에 바로 대입이 가능하게 문법이 확장되었으며,
정 재민 님의 제안과 도움 덕분에 몇몇 글꼴들이 최신 유니코드 규격대로 업데이트되었다.
그리고 천지인· 나랏글과 더불어 스마트폰의 3대 복수 표준 입력 방식 중 하나가 된 팬텍 SKY 방식도 예제 입력 설정 파일을 만들어서 추가했다.

텍스트 필터 중에 '일괄 치환 필터'라고, 여러 건의 바꾸기 작업을 한꺼번에 수행하고 심지어 줄바꿈 문자까지 찾기-바꾸기 문자열에 포함할 수 있는 강력한 필터가 있는데,
여기에 있던 사소한 버그를 잡고, 이 필터에 '반복 적용' 옵션을 추가했다.
이걸 잘 활용하면 [   a   ], [ b  ] 같은 문자열도 싹 다 [a], [b] 같은 식으로 일괄적으로 공백 정리를 할 수도 있다. 이런 기능을 넣을 생각을 지금까지 왜 안 했는지 모르겠다.
적은 노력에 비해서 무척 유용할 수 있는 기능을 찾아내서 구현하는 건 참 즐거운 일이다.

끝으로, 타자연습은,
문장 연습 중에 오타를 내고서 Ctrl+Z를 눌렀을 때, 텍스트가 없어진 뒤에도 텍스트 위의 오타 마크가 사라지지 않던 버그를 잡았다.
그리고 게임은 이제 레벨이 올라갔을 때 자동 저장을 해 주지 않는다. 게임 중에 사용자가 단축키를 눌렀을 때만 해당 단계의 점수, 방어력, 주인공으로 나중에 게임을 이어서 할 수 있게 그 상태가 저장된다. 따라서 해당 단계의 초반에 저장을 하든, 끝날 때가 다 돼서 저장을 하든 그건 상관없다.

<날개셋> 타자연습의 게임 저장 체계는 어찌 보면 페르시아의 왕자 1의 그것과 비슷해졌다고 볼 수 있다.
(레벨의 첫 시작 시점만 저장할 수 있고, 한 시점만 저장 가능하다는 점에서)

5.
끝으로 여담,
<날개셋> 편집기처럼 텍스트 에디터를 처음부터 새로 만든다는 건 결코 쉬운 일이 아니다.
특히 유니코드의 complex script를 완벽하게 지원하려면 이미 거의 워드 프로세서 수준에 도달한다. 커서 이동, 마우스 포인터 위치로부터 문자열 위치 판단, 문단 정렬 같은 기본 중의 기본 작업들조차 완전 어려운 작업이 되기 때문이다. 내 프로그램은 그런 자질구레한 건 개발의 주목적이 아니기 때문에 죄다 깔끔하게 무시하고 개발되는데도 이 작업만으로도 코드의 양이 만만찮다.

WinAPI.co.kr의 운영자로 유명한 김 상형 님은 이런 텍스트 에디터를 개발하는 튜토리얼을 제공하고 있으니 초보 개발자들에게 무척 유익하다. 요즘 세상에 저 정도 프로젝트를 대인배스럽게 공개하는 분은 정말 드문데... 관심 있으신 분은 참고하기 바란다.

<날개셋> 입력기와 타자연습의 다음 버전도 어김없이 예전 버전과의 API 호환성은 깨질 예정이다. =_=;;; 따라서 둘을 원활히 같이 쓰려면 둘을 모두 업데이트해야 한다.
이제는 좀 바꿀 일이 없겠지 싶은 요소들도 계속 바뀐다. 그만큼 <날개셋> 한글 입력기는 여전히 활발하게 개발이 진행 중이고 살아 있는 프로젝트라는 뜻이기도 하다.

당초 계획했던 한자 관련 기능을 추가 못 하고, 입력기 커널에 내가 원하는 기능을 여건상 못 넣었는데, 이건 올해 하반기에 나올 또 다음 버전에서 기약을 해야겠다.

Posted by 사무엘

2011/08/17 08:11 2011/08/17 08:11
,
Response
No Trackback , 11 Comments
RSS :
http://moogi.new21.org/tc/rss/response/556

날개셋 한글 입력기 6.0

※ 드디어 6.0 시대

5.8 이후 거의 5개월에 가까운 기간 동안 <날개셋> 한글 입력기가 발전한 결과물을 드디어 이렇게 선보이게 되어 대단히 기쁩니다. 무려 6.0!! 5.x에서 6.0이라는 이름이 전혀 아깝지 않을만치 변했습니다. 5.8 이후 소스 커밋은 약 60여 회(change set 개수)가 있었군요. 9개 모듈과 공용 라이브러리의 소스 코드 총합은 현재 약 6만 1천 줄.

초· 종성 공유 낱자 결합 규칙이 추가된 덕분에, 프로그램의 핵심이라 할 수 있는 한글 입력 오토마타 부분이 오랜만에 크게 바뀌었습니다. 아직 100% 완전체가 구현된 건 아니지만 이걸 쓰면 복잡한 두벌식 한글 입력 방식을 구현하는 게 눈물나게 수월해집니다. 그 구체적인 메카니즘은 도움말에 자세히 설명되어 있습니다. 진작부터 추가되어야 했을 기능인데 이제야 도입됐고요.

조합 자동 종료 타이머는 제어판에서 ‘입력 일반’ 항목에 수식의 형태로 깔~끔하게 추가됐습니다. 예제로 제공되는 삼성 천지인 입력 방식이 당장 이걸 사용합니다. A==3 ? 1000: 0 즉, 오토마타 상태가 3번(종성 입력)일 때 1초간 제한을 둬서 사용자가 다음 타를 입력하지 않으면 음절을 끊게 됩니다. 그냥 1000이라고만 입력하면 모든 조합 상태에서 1초 제한이 걸리겠죠.
한글 입력 상태는 A, 그리고 <날개셋> 고급 입력기의 사용자 조합 상태 번호는 B이므로 이들 변수에 대한 수식을 자유롭게 지정할 수 있습니다.

현재 사용할 입력 항목과, 프로그램이 시작될 때 처음으로 지정할 입력 항목을 따로 지정할 수 있게 되고, 입력 항목의 배열 순서를 숫자 직접 입력 및 up-down 컨트롤로 손쉽게 바꿀 수 있게 된 것도 개인적으로는 정말 멋진 변화 사항이라 생각합니다. 제어판 화면을 직접 보시면 압니다.

이 외에도 바뀐 것 많습니다.
외부 모듈의 안정성 관련 이슈는 MS IME의 소스를 직접 참고하지 않는 한 앞으로 6.x 시대에도 계속 나올 것 같고..

※ 타자연습

타자연습은 명목상으로는 바뀐 API 구조대로 프로그램을 재컴파일하고 연습글을 일부 고친 것 말고는 변화 사항이 없습니다. 그래서 버전을 올리지 않았습니다. 그러나 기능 변화가 없다고 입력기만 6.0으로 업그레이드하고 타자연습을 업그레이드하지 않으면, 타자연습 내부에서는 <날개셋> 한글 입력기 6.0 외부 모듈을 사용할 수 없게 됩니다. 자체 입력란 말고 일반 입력란에서는 한글을 입력할 수 없고 MS IME 같은 다른 IME를 써야 한다는 뜻입니다.

그러므로 <날개셋>을 윈도우용 IME로 사용하면서 타자연습도 동시에 사용하시는 분이라면 타자연습 프로그램을 반드시 업그레이드해야 합니다. 가능한 한 API 수준의 바이너리 호환성을 안 깨뜨리려고 노력하지만, 6.0은 한글 입력과 타자 재현 루틴 쪽이 많이 바뀌다 보니(타자연습도 핵심적으로 자주 사용하는 기능인데!) 어쩔 수 없이 호환성이 깨지게 됐습니다.

그래도 변화가 너무 없으면 재미없으니까..
연습글의 변화로는,
헌법 연습글에서 헌법 전문(preface)만 있던 걸 1장과 2장도 추가했습니다.
그리고 ‘재미있는 이야기에’ 주옥같은 김 성모 어록을 단문 연습글로 추가했습니다! “미안하다. 똥 싸느라 늦었다”, “더 이상의 자세한 설명은 생략한다”, “하지만 드라군이 출동하면 어떨까?” 등으로 세벌식 타자 연습을 즐겨 보세요!! ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

연습글의 패치 정도는 정말로 자동 업데이트 시스템이라도 있으면 편하긴 하겠죠. 저도 그런 것의 필요성을 느끼고는 있습니다.

※ 몇몇 표기법 변경

프로그램의 모든 UI와 도움말, 그리고 타자연습의 경우 연습글에서 한국 인명의 1-2자 성명은 성과 이름을 붙여 쓰는 것으로 표기를 바꿨습니다. (공병우, 김용묵) 제 프로그램을 처음 접하는 사람에게 이질감을 줄이기 위해서 취한 조치입니다.
하지만 여타 길이의 인명은 여전히 띄어 씁니다. (김 구, 남궁 억, 김 에스더 등~)

한 10년 동안 일부러 표준 표기법을 안 지키다가 관행을 되돌렸으나, 제 느낌상 다시 생각해 봐도 성과 이름은 일관성 있게 띄어 쓰는 게 더 합리적입니다.
제 블로그는 저의 개인 공간이기 때문에 앞으로도 둘을 여전히 띄어 쓸 것입니다.

※ 안 마태 글자판

안 마태 한글 소리글판이 업데이트됐다는 소식을 들었습니다. 그런데 공식 홈페이지에 제대로 홍보가 안 돼 있고, 키보드 드라이버를 개발하시는 분이 블로그에 게시해 놓은 배열과 공식 홈페이지의 배열이 일치하지 않으며, 심지어 레이아웃이 일반 키보드의 모양과도 일치하지 않는 부분 등 여러 문제로 인해, 제 프로그램의 예제 데이터에는 아직 업데이트를 안 했습니다.

※ 다음 버전은?

이제 6.0 이후의 입력기의 다음 버전은 현재로서는 6.1이나 6.2 정도로 생각 중입니다. 시기는 올해 가을쯤? 이번에는 한글이 아닌 ‘한자 기능 강화판’ 컨셉이라는 생각이 들기에 충분할 겁니다.
단어 단위 한자 변환 기능이 드디어 추가되고,
자료가 확보되는 대로 surrogate(확장 B 이상) 영역의 한자에 대한 독음· 부수 입력 지원 등이 계획되어 있습니다.

아주 옛날스러운-_- 글쓰기를 좋아하는 분 중에, 단어 단위 한자 변환 기능이 있다는 이유로 새나루 입력기를 아주 좋아하는 분이 있죠. 참고로 제 편집기는 세로쓰기도 지원한다만... -_-;;;

뭐, 제가 한자 혼용론자의 수요를 의식하는 건 아니고요. 저런 쪽의 연구는 단순히 MS IME와의 기능 격차를 줄이고 제 프로그램의 기술 데모를 만든다는 성격이 더 강합니다. 단어 단위 한자 변환은 MS IME가 그런 것처럼 TSF A급 프로그램에서만 제공될 것입니다.

지금은 옵션이 달랑 3개밖에 없는 편집기 계층에 한자를 단어 단위로 변환할지 글자 단위로 변환할 지 선택을 할 수 있게 되며, surrogate 영역의 확장 한자까지 후보로 출력할지 설정하는 옵션도 추가됩니다. 솔직히 일반 사용자가 BMP 이외의 한자를 쓸 일은 거의 없고, 그런 것까지 그냥 추가해 버리면 한자 후보가 이제 너무 많아지기 때문이죠.
부수+독음(ㄱ~ㅎ이니셜 정도) 연동 한자 검색 기능 추가도 검토 중입니다. 꽤 유용할 것입니다.
물론 한자 관련 기능만 계획되어 있는 건 아니고요.

※ 잡설

이번 6.0은 제발 잔버그가(특히 새로 추가된 기능에서) 발견되지 않았으면 하는 바람이 간절합니다.
작업 완료에 앞서 도움말을 쭉 읽고 검토를 했는데, 좋은 의미로든 비아냥거리는 의미로든 이게 정녕 내가 내 머리로 만든 프로그램과 설명서가 맞나 하는 생각이 들더군요. 내가 지금까지 참 어지간히도 또라이 같은 짓을 했구나 하는 생각.. -_-;;

맥/리눅스로의 포팅, 프로그램 아이콘, 그리고 다국어 UI 번역 등 역할 분담의 필요성이 느껴집니다. 타자연습은 이미 도저히 내 혼자 개발을 할 수 없는 경지에 간 지가 오래이고..;; 저도 슬슬 개발자 마인드에서 벗어나 사장-_- 컨셉으로 가야 하지 않나 싶습니다.

타자연습의 경우, 생각 같아서는 10년 가까이 묵은 연습글들 대부분을 이제 좀 갈아엎어 버리고 싶답니다. -_-;; 그런데 그것도 제가 할 시간과 능력이 안 되고. 게임은? ‘더 이상의 자세한 설명은 생략한다’ 수준. 어쨌든 결론은 돈인데..;;
“내가 나루토를 보면서 느낀 건데, 사람을 쓰려면 돈이 존나 필요할 거 같아. 그런데 날개셋은 수익이 없잖아? 그러니까 우린 안 될 거야 아마..” ㅋㅋㅋㅋㅋ 뼈 있는 농담. -_-

뭐 그렇습니다.
유용하게 사용하시기 바랍니다. ^^

Posted by 사무엘

2011/04/28 11:24 2011/04/28 11:24
Response
No Trackback , 34 Comments
RSS :
http://moogi.new21.org/tc/rss/response/503

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

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/05   »
      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:
2695463
Today:
1494
Yesterday:
2005