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

<날개셋> 한글 입력기 7.1

1.

자, 내일 지구가 멸망하더라도 <날개셋> 한글 입력기의 개발은 개발할 거리가 있는 한 계속된다.
7.0 버전이 나온 지 약 100일 만에,
그리고 공휴일이 된 한글날을 전후하여 프로그램의 새 버전 소식을 전하도록 하겠다. 새 버전은 7.1이다. 이번에도 내 맘에 쏙 드는 새로운 버전이 잘 완성됐다.

7.1은 기본적으로는 역시 7.0의 버그를 고친 게 많다.
예전에 개발 근황글에서 먼저 언급했던 것처럼 Windows 8 Metro에서 옛한글이 입력되지 않는 문제, Visual Studio 2012의 일부 입력란에서 한글 연속 입력 시 한 타가 씹히던 문제를 해결했다.
7.0에서 처음으로 도입된 사용자 정의 후보 기능 자체에도 버그가 좀 있던 걸 고쳤다.
그리고..

2.

운영체제의 리치 에디트 컨트롤에 TSF 지원 확장과 관련된 오동작이 있다는 걸 도움말에 '알려진 문제'라고 추가 수록했다.

<날개셋> 한글 입력기의 외부 모듈은 꽤 옛날 버전부터 “TSF 지원 확장” 옵션이 있으며, 이걸 알고 실제로 쓰는 분들이 많은 줄로 본인은 안다. 이것은 한글 IME가 운영체제에다 요청할 경우, 운영체제의 표준 에디트 컨트롤과 Internet Explorer 브라우저 내부의 입력 폼을 TSF A급으로 실험적으로 바꿔 준다. 물론 XP에는 이런 기능이 없고 Vista 이상부터만 지원된다.

이렇게 TSF A급으로 임시 승격되고 나면 잘 알다시피 표준 에디트 컨트롤(가령, 메모장)에서도 단어 단위로 한자 변환이 가능하며 이미 완성된 글자도 낱자 단위로 지우고 역도깨비불 현상 같은 것도 <날개셋> 편집기를 쓸 때처럼 자유자재로 가능해진다.

다만, 이것은 마소에서 100% 지원은 해 주지 않는 비공식 실험적인 기능에 가깝다. 한글 IME 중에서 이런 요청을 하는 물건 자체가 날개셋밖에 없고 MS 한글 IME조차도 이런 짓은 안 한다. 그러니 동작의 기준으로 삼을 여타 프로그램 자체가 없고 내 프로그램에서 제대로 안 되면 다른 어디에도 해답이 없다. 그냥 사용자가 알아서 조심해서 쓰는 수밖에 없다.

그런데 사실은 이 옵션을 켤 경우, 표준 에디트 컨트롤과 IE뿐만 아니라, 리치 에디트 컨트롤도 영향을 받아서 TSF A급으로 바뀐다는 것을 모 사용자의 피드백을 통해 우연히 알게 되었다.
표준 에디트 컨트롤이 메모장이라면 리치는 '워드패드'와 같다. 전자와는 달리 후자는 글자별로 서체와 속성(진하게, 밑줄, 이탤릭 등)을 다르게 지정할 수 있고 글자의 크기도 조정할 수 있으며 문단 정렬이 가능하고 표나 그림도 삽입할 수 있다.

리치 에디트 컨트롤도 TSF A급으로 승격된다니 이것은 일면 바람직한 현상이지만...
참 안타깝게도, 지원하려면 좀 제대로 지원하지 여기에는 버그가 좀 있다.
cursor의 위치가 0 또는 1일 때.. 다시 말해서 문자열의 맨 처음 아니면 바로 그 다음 위치에서 한글 조합을 시작하면 두 글자가 조합으로 잡히고 깨진 문자가 삽입되는 등 온갖 오동작이 발생한다. 위치가 2 이상일 때부터는 이상이 없다.

카카오톡 PC 버전이나 스카이프(Skype) 같은 메신저 프로그램들의 대화창은 리치 에디트 컨트롤을 사용하는 대표적인 예다.
그렇기 때문에 이들 프로그램에서는 공통적으로 이런 문제가 발생할 수 있음을 밝힌다. 따라서 이런 데서는 먼저 '..'(마침표 두 개) 같은 문자를 먼저 찍어서 cursor의 위치를 2 이상으로 만든 뒤 한글을 입력하고 나중에 ..를 지우고 보내든가 해야 한다. 그게 싫으면 TSF A급 확장을 사용하지 말고.

다만, 리치 에디트 컨트롤을 사용하는 대표적인 기본 프로그램인 워드패드는 이런 확장 옵션이 필요 없이 진작부터 자체적으로 TSF A급으로 동작하기 때문에 저런 문제가 없다.

운영체제의 확장 지원을 통해서 TSF A급이 된 입력란은 한글을 조합할 때 종래의 검게 깜빡이는 사각형 cursor 대신, 조합 전체가 파란 블록으로 잡힌다는 차이가 있다. 그러나 워드패드나 MS Word처럼 원래부터 TSF A급인 환경은 한글 조합 중일 때 여전히 검게 깜빡이는 사각형 cursor가 나온다. 이런 외형으로 동작 방식을 구분할 수도 있다.

3.

그리고 덧붙여,
예전에는 어떤 에디트 컨트롤에다가 TSF 지원 확장 옵션을 켜거나 끈 걸 적용하려면, 제어판 대화상자를 닫은 뒤에 프로그램의 키보드 포커스를 다른 프로그램으로 옮겼다가 되돌아와야 했다. 그래야만 새 설정이 적용되었다.
하지만 이번 7.1은 창 포커스를 수동으로 바꾸지 않아도 제어판만 '확인'으로 닫으면 설정 변경이 바로 적용되게 개선했다.

4.

bksp 키의 동작 방식에 "연타 시 한번 정해진 동작을 계속 적용"이라는 옵션을 추가했다.
bksp 키의 동작 방식은 기본적으로 현재 한글을 조합 중이냐 그렇지 않느냐에 따라서 동작이 매번 달라지는데,
이 옵션이 켜지면, bksp든 Shift+bksp든 그 글쇠가 처음으로 누르던 순간에 결정된 동작 방식(조합 중이냐 아니냐)을 해당 글쇠를 연타하는 중에 계속 적용하게 한다. 즉, bksp로 인해서 한글 조합 여부가 달라지더라도 계속 낱자 단위 아니면 글자 단위로 지우게 한다는 뜻이다.

보통 한글을 조합 중일 때는 bksp는 낱자 단위로 지우고 Shift+bksp는 글자 단위로 한꺼번에 지운다.
그런데 반대로 한글을 조합 중이지 않을 때 평소에는 bksp는 언제나 글자 단위로 지우다가 Shift+bksp를 눌렀을 때만 예외적으로 낱자 단위로 지우게 하고 싶을 때가 있다.
그리고 bksp든 Shift+bksp든 글쇠를 연타하면, 그 다음부터는 한글 조합 상태이든 아니든 한번 결정된 단위로 계속 지우는 게 자연스러울 것이다.

이때 이 옵션을 사용하면 된다. 지금까지 제공되던 bksp 동작 옵션은.. 뭔가 2% 부족한 면모가 있었는데 이 옵션을 도입함으로써 드디어 완전체를 이뤘다.

5.

Windows 운영체제 내지 많은 응용 프로그램들은 여전히 한글은 조합이 오로지 한 글자 단위로만 만들어진다고 가정하고 동작하는 부분이 많다. 이 가정이 오랜 시간 동안은 참이었다. 그러나 이제 글꼴 처리 기술이 발달하고 옛한글을 여러 글자를 모아서 하나로 표현하는 게 가능해지면서 그 가정은 문제를 일으키고 있다.

프로그램에 따라서는 옛한글 내지 호환용 자모로 표현되지 않은 한글 자모는 조합 과정이 제대로 표시되지 않다가 조합이 끝나야 글자 전체가 표시된다. 최악의 경우는, 한글 조합을 호환용 한글 자모 한 글자로 시작하지 않으면, 조합이 되지 않고 그냥 튕기기도 한다. 이런 동작 때문에 <날개셋> 외부 모듈은 근본적으로 자체 구현체인 <날개셋> 편집기와 100% 동일하게 동작할 수가 없다.

이 점을 감안하여 이번 새 버전의 외부 모듈은, '한글 표현 방식' 옵션에서 '호환용 한글 자모 사용'을 체크하지 않을 경우 더 강한 경고 메시지가 아래에 표시되게 했다.

그리고 버그 신고 요령도 도움말에다 추가했다.
외부 모듈은 MS IME의 소스를 직접 보지 않는 이상 애시당초 100% 완벽하게 만드는 게 불가능하기 때문에, 오동작이 의심될 경우, (1) 프로그램이 최신 버전인지, (2) 도움말의 FAQ는 미리 읽어 보셨는지, (3) TSF 확장 지원 옵션을 끄고 한글 표현 방식을 원상복귀해 봤는지, (4) MS IME는 문제 없는데 이 프로그램만 그러는 게 확실한지 등등을 먼저 확인하고..

버그 신고시 운영체제의 버전과 언어, 비트수, 그리고 프로그램이나 웹사이트를 연 직후부터 모든 재연 과정을 일일이 설명할 것을 당부했다.

에필로그:
이렇듯, 7.1은 프로그램의 완성도를 강화한 여러 아기자기한 개선 사항들이 많으니, 7.0 포함 구버전을 사용하고 계신 분은 프로그램을 업데이트하시길 권한다.
앞으로 7.x 중반까지는, 내년 정도까지는 한글 입력 쪽으로 집중적인 기능 추가가 있을 예정이다.

Posted by 사무엘

2013/10/14 08:35 2013/10/14 08:35
Response
No Trackback , 6 Comments
RSS :
http://moogi.new21.org/tc/rss/response/887

1.

잘 알다시피 올해 하반기부터 드디어 <날개셋> 한글 입력기가 7.x 시대로 진입했다. 1.0이 개발된 지 13년 만의 일이다.
수없이 많은 소프트웨어들이 넘쳐나는 시대에 딱 하나 정도는 내 손으로 직접 만든 프로그램을 나 자신이 유용하게 쓰고 있다는 게 뿌듯하다. 그것도 우리나라의 고유 문자인 한글을 전문적으로 다루는 독특한 프로그램이고, 사람이 다루는 수많은 정보들 중 가장 기본적이고 원천적인 것에 속하는 텍스트 데이터를 취급하는 프로그램이니 말이다.

7.0은 공개된 지 40일이 넘게 지난 현재까지 다음과 같은 몇몇 버그들이 발견되어 고쳐졌다.

편집기

(1) 한 줄당 200칼럼이 넘는 1920급의 가로 해상도에서, 그리고 '자동 줄바꿈' 옵션을 끈 상태에서 <날개셋> 편집기의 문서창을 최대 크기로 곧장 열었을 때 글자가 제대로 표시되지 않고 오동작이 발생하는 문제를 확인하여 고쳤다.
이것은 이번 7.0에서 처음으로 등장한 문제는 아니고 예전 버전부터 있었다. 단지 재연 조건이 흔치 않기 때문에 지금까지 발견되지 않았던 것이다.

(2) 사용자 정의 후보 변환을 쓰면, 사용자가 선택한 후보의 다음 후보들까지 한 줄에 하나씩 나란히 다 삽입됨

외부 모듈

(1) Windows 8의 Modern UI에서 옛한글이 여전히 입력되지 않음.
이것은 다른 문제가 아니라, Modern UI에서는 레지스트리에 접근이 되지 않아서 옛한글 표현 방식 옵션이 제대로 전달되지 않아서 발생한 현상이다. 내가 미처 생각하지 못한 상황이었으며 문제는 즉시 해결했다.

(2) Visual Studio 2012의 일부 검색 입력란에서 한글이 연속 입력될 때 다음 음절의 첫 타가 씹히던 문제.
<날개셋> 한글 입력기로부터 받은 문자 조작을 운영체제의 TSF layer로 옮기는 핵심 루틴을 모처럼 고쳐야 할 정도로 대단히 어려운 문제였다. 다른 프로그램들은 이렇게만 써 주면 아무 문제 없이 동작하는데, 저 프로그램은 특이하게 동작해서 그랬다.

(3) 이 외에 프로그램을 아주 극단적으로 특수하게 사용하지 않는다면 마주칠 일이 거의 없는 사소한 문제

또 일부 제어판 GUI에서 리스트박스의 아이템 높이가 현재 시스템 글꼴의 세로 크기를 정확하게 반영하도록 고치고(고해상도 환경 대비), 일부 영문 GUI의 텍스트와 도움말 본문을 살짝 수정했다.

2.

<날개셋> 한글 입력기 7.0에 뒤이어 올여름엔 Windows도 8.1이 나왔다.
윈도 8과 윈도 8.1의 관계는
윈도 98과 98 SE
윈도 95와 95 OSR2
윈도 XP와 XP sp2

의 관계에 얼추 대응하는 듯하다. 이제는 버전도(3.x, 4.0)도, 연도(95/98/2000)도, 고유명사도 아니고(XP/Vista), 버전과 무관한 숫자를 브랜드명으로 쓰는 이상한 관행이 생겼다. 잘 알다시피 윈도 7의 내부 버전은 6.1이고, 8과 8.1의 버전은 6.2이다.

잠깐 써 봤는데 생각만치 큰 차이는 없다. 시작 '버튼'만이 부활했을 뿐 그걸 클릭한다고 해도 과거의 시작 메뉴가 뜨는 것은 아니며, 여전히 전체 화면을 차지하는 시작 화면이 나온다.
<날개셋> 한글 입력기나 타자연습, 파워업이 윈도 8.1만을 위해 딱히 업데이트되어야 할 필요는 다행히 없는 것 같다. 다들 주요 기능들이 잘 동작한다.

차이라면 차이를 찾은 게 뭐냐 하면 8.1의 Metro(Modern) UI는 보안 모드에서도 TSF A급으로 동작하게 된 듯하다.
한글에 대해 한자 변환을 해 보면 한자들의 훈과 음이 뜨지 않고 유니코드 BMP 한자가 아니라 한국 상용 한자 4888자만 달랑 뜨는 모드가 있는데, 그게 바로 보안 모드이다.
날씨 앱을 실행한 뒤, 지역 추가 버튼을 눌렀을 때 뜨는 입력란이 보안 모드에 속한다.

보안 모드에서는 IME가 ProgramData나 사용자의 문서 디렉터리에도 전혀 접근을 할 수 없어서 자신의 동작에 필요한 파일을 제대로 읽을 수 없다. 그래서 한자 후보도 그렇게 볼품없게 나오는 것이다.
다만, 모든 Metro UI가 보안 모드인 건 아니다. 가령, Metro용 Internet Explorer는 주소 입력란이 보안 모드가 아니기 때문에 한자 후보가 데스크톱과 똑같이 제대로 뜬다.

8 시절에는 보안 모드에서는 파일도 제대로 못 읽을 뿐만 아니라 입력란이 TSF A급으로 동작하지도 않았는데
8.1 평가판을 써 보니, 그때도 비록  한자의 훈과 음은 안 뜨지만 TSF A급으로 동작하여 backspace 달라붙기 기능도 잘 되고, 단어 단위 한자 변환도 잘 되더라. 이걸 확인했다.

2-1.

8.1에만 해당되는 건 아니고 8부터 그랬던 것이긴 하지만,
원래 운영체제의 에디트 컨트롤은 특별히 TSF A급 확장으로 동작하고 있지 않을 때는 딱히 후보 창을 표시할 위치를 설정해 주지 않았었다. 그래서 MS IME든 날개셋에든 한자 후보 변환을 시켜 보면, 한자 선택창이 cursor의 위치와 관계없이 언제나 화면 우측 하단에 고정되어 나타나곤 했다. 윈도 7까지만 해도 말이다.

그랬는데 8부터는 에디트 컨트롤도 후보 창이 cursor의 아래에 나타난다.
MS에서 딱히 이런 동작까지 일부러 신경 써서 바꿀 것 같지는 않았는데 의외이다.

하지만 메뉴를 오른쪽 정렬로 띄우는 옵션은 도대체 왜 넣었는지 알 길이 없다. 아랍권이 아니면 전혀 필요 없을 기능인데 왜 한글/영문판에다가도 기본으로 선택시켰는지 원?

3.

드디어 공개한다. 내 홈페이지의 영문 버전을 개설했다.
본인에 대한 아주 최소한의 소개와 <날개셋> 한글 입력기 페이지만 존재한다.
Kim Yongmook's Official Home Page
Nalgaeset Hangul Input System

새로 만드는 영문 사이트는 prg4.html 같은 구식 주소 대신 ngs라는 디렉터리를 통째로 사용하며, 인코딩도 UTF8로 돼 있다.
도움말 전문이 영어로 좀 번역돼야 하는데 도저히 그럴 엄두가 안 나니, 외국인에게는 세벌식 같은 것보다는 현실적으로 훨씬 더 필요한 기능만 중점적으로 소개해 놨다. 바로 한글 로마자 입력 기능. 한영, 한자 키를 재정의 가능한 것도 덤이다.

그나저나 설치 프로그램 자체도 다국어 UI가 지원돼야 하는데 이건 비주얼 스튜디오가 기본으로 제공하는 설치/배포 프로젝트만으로 어찌할 수 없는 사항인지? 이 역시 아쉬운 점이다.
어쨌든, <날개셋>이 벌써 7.0까지 나왔으니, 이제는 내 프로그램을 국제적으로 알리는 것에도 신경을 쓸 계획이다.

Posted by 사무엘

2013/08/20 08:37 2013/08/20 08:37
Response
No Trackback , 29 Comments
RSS :
http://moogi.new21.org/tc/rss/response/868

날개셋 한글 입력기 7.0

마지막 버전의 공개 이후로 4개월이 넘는 시간 만에 드디어 <날개셋> 한글 입력기 7.0이 나왔다.
6.8 이후로 내부적으로 굉장히 많은 변화를 겪었으며, 지난 4월에 한번 중간 개발 근황을 올린 이후로도 또 바뀐 게 많다.

도대체 더 만들거나 개선해야 하는 기능이 아직 얼마나 남아 있을까? 이제 7.x가 이 프로그램의 거의 마지막 메이저 버전이 되지 않을까 하는 두려운 생각도 들지만, 시간이 흐르면 또 생각이 달라질지도 모른다.

1. 아이콘

아이콘은 비록 프로그램의 동작과 직접적인 관계가 있는 요소는 아니지만 그래도 사용자에게 프로그램의 첫인상을 결정하는 중요한 외모에 속한다. 이번 7.0 버전은 구현체를 구성하는 EXE 형태의 프로그램들의 아이콘이 환골탈태했다. 짠~

사용자 삽입 이미지

윗줄부터 좌에서 우로 1 2 3 / 4 5 6으로 번호를 매기자면,
편집기(분홍 2), 변환기(노랑 1), 입력 패드(청록 3)의 순이다.

새로운 아이콘은 요즈음 MS가 Windows 8 이래로 추구하고 있는 간결한 디자인 컨셉을 반영함과 동시에, 프로그램의 성격을 함축적으로 드러내고 이들이 동일 브랜드에 소속된 프로그램임을 나타낼 수 있는 형태로 그려졌다.
먼 옛날, 2004년의 3.0 버전부터 거의 9년 동안 사용되어 온 편집기의 빨간 수첩 아이콘(6)은 드디어 역사 속으로 사라질 것이다.

편집기는 1.x 시절부터 통용되어 온 익숙한 빨강 계열 색상을 반영하면서 종이에도 펜으로 뭔가를 쓰는 도구, 즉 텍스트 편집기임을 형상화했다.
변환기는 뭔가 변환을 하는 프로그램이 전통적으로 사용하는 상징인 동그란 화살표를 반영했다.
입력 패드는 '터치 입력'을 표현하기 위해 종전의 태블릿 그림 대신 그냥 손가락을 형상화했다.

3개 프로그램의 아이콘을 16*16, 32*32, 48*48까지 다 그리는 데 이틀이 꼬박 걸렸다. 모두 도트 노가다의 산물이다. -_-;;
그러고 보니 사각형 밑으로 알파 채널이 가미된 어두은 그림자도 넣었어야 했는데.. 일단 제낀다.

예전 글에서 잠시 소개한 적이 있는데,
<날개셋> 편집기가 1.x~2.x 시절에 최초로 사용한 16컬러짜리 빨간 수첩 아이콘은 비주얼 C++이 예제로 제공하던 아이콘을 그냥 그대로 차용한 것이었다. 국산 텍스트 에디터인 EditPlus도 거의 같은 컨셉의 아이콘을 좌우 대칭시키고 살짝 고쳐서 아직까지 사용하는 중이다.

<날개셋> 3.0부터 지금까지 사용한 아이콘은 그 아이콘을 트루컬러+알파채널 형태로 리메이크한 형태이다.
변환기나 입력 패드는 그런 것조차 없이 인터넷에 올라 있는 공개 아이콘 라이브러리를 검색하여, 적절해 보이는 아이콘을 임의로 차용해서 잠시 써 왔다.

그러다가 이제 7.0부터는 편집기, 변환기, 입력 패드가 모두 자체 제작한 동일 컨셉의 아이콘을 쓰게 되었으니 본인은 기쁘다.

물론, <날개셋> 한글 입력기 전체를 대표하는 파랑 계열의 브랜드 아이콘은 여전히 바꿀 계획이 없다.
그리고 외부 모듈은 그 브랜드 아이콘을 흑백 형태로 고친 것으로, 잘 알다시피 Windows 8의 IME 아이콘 디자인 가이드라인을 따른 형태이다.

이번 버전에서는 외부 모듈의 도구모음줄 아이콘에 전통적인 16*16뿐만이 아니라 20*20 크기도 추가되었다. 그래서 120dpi 해상도를 사용할 때도 도구모음줄이 깔끔하게 표시된다.

2. Windows 8 지원 강화

역시 예전 글에서도 언급했었다. 이 정도면 이제 <날개셋> 한글 입력기는 MS가 만들지 않은 싸제 한글 IME 중에서는 2013년 현재 Modern UI에 대한 대비까지 온전히 갖춰진 유일한 프로그램이라 할 수 있다.

일단, Modern UI에서 IME가 데스크톱 모드와 완전히 동일하게 동작하는 것은 기술적으로 원천적으로 불가능하다는 점을 분명히 하고자 한다. Modern UI 모드에서는 IME가 동작하는 데 제약이 너무 심하다. 내 문서, ProgramData 디렉터리마저 접근이 안 되는 건 너무했다. 사실, 이 모드에서는 MS 자기네가 만든 IME조차 제대로 동작하지 못한다.
Windows 8을 대비하느라, 실질적으로 새로운 기능이 추가된 게 없이도 <날개셋> 외부 모듈의 코드가 꽤 늘어나고, 실행 파일의 크기도 더 커지게 됐다.

데스크톱에서 쓰던 한글 입력 설정을 그 환경에서도 그대로 공유하려면, 데스크톱 프로그램에서도 최소한 하나 이상 <날개셋> 한글 입력기를 외부 모듈로 사용하는 프로그램을 띄워 놓고 Modern UI를 사용하시기 바란다.
자세한 것은 도움말 “VI. 외부 모듈 - 일러두기 - 알려진 문제 - Vista 이상...”에 있는 Windows 8 관련 항목을 참고할 것.

3. 후보(한자) 변환 기능의 세분화

거의 5.x 시절부터 계획되었던 것인데 드디어 7.0에 와서야 실현되었다.
<날개셋> 한글 입력기는 내부적으로 한자/후보 변환 글쇠가 4종류 존재하며, 그 중 1번만이 현행과 같은 한자/초성 특수문자 변환으로 용도가 예약되어 있다. 나머지 2~4에 대해서는 변환할 후보 리스트를 사용자가 지정할 수 있게 되었다. 한글을 일본어 문자로 바꾸거나 구결로 바꾸거나 여타 특수문자로 바꾸는 등, 거의 상용구 치환 수준의 활용이 가능하다.

사용자 삽입 이미지사용자 삽입 이미지
(인증샷. KS X 1001에 없는 각종 특수문자들이다. 게다가 옛한글인 아래아 '한'에다가 surrogate 한자들을 잔뜩 배당한 것을 볼 수 있다.)

이 custom 후보 변환 기능에 대해서 사용자가 알아야 할 점은 다음과 같다.
첫째, 과거의 "<날개셋> 고급 입력기"에 존재하던 사용자 후보 변환은 후보 데이터의 mapping에 사용되는 key가 오토마타 상태 번호인 반면, 이번에 추가된 후보 변환은 전적으로 cursor 앞의 문자열이 key라는 점이 다르다.

둘째, 원본 문자열과 대상 문자열은 한 글자여도 되고 여러 글자여도 된다. 그리고 조합 중이든 그렇지 않든 상관없다. 단, 조합이 끝난 여러 문자열을 한꺼번에 치환하려면 '단어 단위로 한자 변환' 옵션이 켜져 있어야 되며, 그런 동작을 기술적으로 지원하는 구현체에서만(가령 TSF A급) 기능을 활용할 수 있다.

셋째, custom 후보 변환 기능은 내장형이냐 외장형이냐, 그리고 입력기 계층 소속이냐 편집기 계층 소속이냐라는 두 속성을 모두 지원하는 형태로 설계되었다.

내장형은 모든 후보 변환 규칙이 입력 설정 내부에 저장되며 언제나 메모리에 상주한다. 즉, 후보 변환 과정에서 디스크 액세스가 발생하지 않는다. <날개셋> 고급 입력기의 사용자 후보 변환 기능도 기술적으로는 내장형인 셈이다.
그러나 외장형은 입력 설정에다가는 데이터 파일 이름만 지정해 놓고, 후보 변환 중에는 디스크를 액세스하여 해당 파일을 뒤진다.

외장형은 대용량의 후보 데이터를 다루는 데 적합하며, 특히 동일한 파일을 쓰도록 지정하면 여러 입력 항목들이 동일한 후보 데이터를 불필요한 메모리 낭비 없이 공유할 수 있다는 장점이 있다. (단, Windows 8 Modern UI에서는 파일 시스템에 접근이 되지 않아 외장형은 사실상 제대로 쓸 수 없다는 점도 유의 필요).

외장형 데이터 파일을 그나마 사용자가 내용을 쉽게 고칠 수 있는 텍스트 파일, 그리고 더욱 방대한 데이터를 빠르게 검색할 수 있는 바이너리 파일 형태가 모두 존재할 수 있는데 이번 버전에서는 바이너리 포맷은 보류하고, 일단 텍스트 파일까지만 구현했다.

이 후보 변환 규칙은 각 입력 항목이 가질 수도 있고, 편집기 계층이 가질 수도 있다.
입력 항목은 내장형과 외장형 이렇게 2개를 갖고 있으며, 이것은 각각 '후보 변환 2'와 '후보 변환 3'에 해당한다.
그러나 편집기 계층은 내장형 아니면 외장형 중 하나로 형태를 취사선택만 할 수 있으며, '후보 변환 4'가 바로 여기에 대응한다.

지금까지 통상적인 한글-한자나 초성-특수문자 변환은 '후보 변환 1'이었고 단축글쇠 규칙에서 '한자' 키를 보면 C0|0x82라는 값이 배당돼 있었는데,
후보 변환 2~4를 쓰려면 먼저 단축글쇠부터 0x83~0x85를 Shift+한자 같은 데에다 배당해 주면 된다.
또한, 후보 변환 2~3에는 특정 입력 방식에 종속적인(local) 규칙을 지정하면 되고, 후보 변환 4는 어떤 입력 방식을 쓰든 똑같이 공유되는(global) 규칙을 지정하면 된다.

외장형 후보 변환에 대해서 설정을 누르면 사용할 파일을 묻는 대화상자만 달랑 뜨는 반면, 내장형 후보 변환에 대해서 설정을 누르면 간단한 후보 변환 데이터 편집 대화상자가 뜬다.
여기서 먼저 원본 문자열부터 지정하거나 추가해 준 뒤, 그 원본 문자열을 치환할 후보 문자열들을 등록하면 된다.

사용자 삽입 이미지

이때 후보 문자열뿐만 아니라, 한자로 치면 훈과 음에 대응하는 설명문도 사용자가 다 지정할 수 있다.
이곳뿐만 아니라 기존의 <날개셋> 고급 입력기도 후보 문자열에 덧붙여 설명문을 지정하는 기능이 같이 추가되었다.

또한 후보 변환 데이터만을 한꺼번에 불러오거나 저장하는 기능이 있는데, 여기서 저장한 파일을 곧바로 '외장형' 후보 변환에다가 지정해서 사용이 가능하다! 이런 식으로 내장형과 외장형 변환 사이에도 데이터 공유를 하면 된다. 이런 면모까지 다 고려해서 기능이 설계된 것이다.

이 사용자 후보 변환 기능은 원본에 대응하는 변환 후보가 하나밖에 없는 경우, 별도의 선택 UI를 출력하지 않고 곧바로 그 문자로 바꿔 버린다. 가령, 기존 후보 변환 1은 엔(円), 김(金)처럼 대응하는 한자가 하나밖에 없더라도 관례적으로 선택 UI를 언제나 출력한다. 그러나 후보 변환 2~4는 진짜 상용구 변환처럼 쓸 수 있게 그 경우 사용자에게 아예 질문을 하지 않게 했다. 위의 그림에서 '수단'은 일본어 スダン로 곧바로 치환하는 후보 문자열이 들어있다.

4. 그 밖에..

Windows 8 지원 강화와 사용자 후보 변환 기능만으로도 0.2 만치 변화는 충분히 달성했으며 7.0의 명분이 서지만,
이것 말고도 이번 버전에서는 단축글쇠의 경우, 조합 중인 상태일 때만 동작하고 나머지 상황에서는 그냥 응용 프로그램으로 넘겨 주게 하는 '조합 중일 때만' 옵션이 추가되었다.

그리고 프로그램을 설치할 때 설치 프로그램 차원에서 “<날개셋> 한글 입력기를 운영체제의 기본 입력기로 자동 지정할까요?”라는 질문에 대한 답변을 받게 했다. 명색이 한글 IME인데 이런 옵션 정도는 넣어야 할 것 같아서.

하지만 이게 모든 OS에서 가능한 건 아니다. Windows 9x 계열에서는 아마 MSI의 버그 때문에 사용자의 선택 결과가 레지스트리에다 반영이 되지 않아서 기능이 지원되지 않는다.
그리고 반대로 완전 최신인 Windows 8은 전통적인 이런 방법으로 기본 입력 언어를 지정하는 게 동작하지 않는다.
그래서 현재로서는 이 명령이 유효한 운영체제는 Windows 2000부터 7까지로 국한되나... XP와 7이 포함되어 있다는 것만으로도 이런 preference 지정 기능이 있는 것이 나쁘지는 않을 것이다.

또한 <날개셋>이 운영체제의 기본 IME로 지정되어 있는 채로 프로그램을 제거하려 하면, 작업이 더 진행되지 않으며 '텍스트 서비스 및 입력 언어' 제어판 대화상자가 바로 뜨고 기본 IME 지정부터 해제하라는 경고문이 나오게 했다.
왜 이런 안전 조치를 진작에 취하지 않았나 모르겠다.

지난 2월 이래로 4개월 동안 쌓이고 쌓인 작업이 7.0이라는 브랜드로 아주 잘 마무리 되었다.
이제야 나도 감금 상태에서 벗어난 수능 출제 위원이 된 듯한 홀가분한 기분이다.
다음 버전은 오는 10월쯤에 또다시 한글 입력 관련 기능의 강화를 테마로 한 7.1을 목표로 하고 있다.

<날개셋> 한글 입력기는 PC Windows 환경에서 한국어가 아닌 한글 자체의 입력 기술을 한데 통합하는 솔루션으로서 앞으로도 지존의 위치를 유지해 나갈 것이다.
끝으로, '날개셋계속개발'이라는 명의로 후원금을 보내 주신 분께 감사드린다.

Posted by 사무엘

2013/07/01 08:22 2013/07/01 08:22
Response
No Trackback , 21 Comments
RSS :
http://moogi.new21.org/tc/rss/response/849

다음 버전 개발 근황 ㅋ

<날개셋> 한글 입력기 6.8이 나온 지 벌써 두 달 정도 시간이 지났다. 이 버전은 잘 알다시피 외부 모듈까지 Windows 8을 정식 지원하기 시작한 첫 버전이라고 선전... 은 했는데, 그 후로 Win8 사용자들로부터 역시 여러 미흡한 점들이 보고되었다..

  • IE의 주소 입력란 말고, 웹페이지 폼의 입력란에서 글자를 입력하는 중에 한/영 상태 버튼을 우클릭하면 메뉴 항목들이 disabled되어 나오는 것: 무척 괴이한 현상이지만 어쨌든 해결함
  • Modern(Metro) UI의 IE에서는 데스크톱 모드에서 맞춰 놓은 입력 설정이 제대로 반영되지 않고 동작하는 것: 파일 읽기에 문제가 있는 듯
  • 날씨(Weather) 같은 일부 자바스크립트 기반 앱에서는 <날개셋> 한글 입력기 커널 자체가 제대로 구동되지 못하고 영문만 입력되는 것: 역시 커널 DLL 파일에 접근하는 과정에 문제가 있는 듯. 권한 문제?

저것 말고 여전히 Windows 8의 Modern UI에서 <날개셋> 한글 입력기의 사용에 문제가 있는 분은 운영체제의 부팅 이후로 문제를 재연하는 모든 step을 마우스 클릭 단위로 상세하게 알려 주시기 바란다. 난 Windows 8 안 써서 그쪽 UI를 잘 모른다..;;더구나 데스크톱 앱과는 달리, Modern 앱들은 디버깅을 위해서 꼭 인터넷 접속을 해야 한다는 게 개인적으로 굉장히 불편하다. 정작 내 프로그램은 인터넷 같은 건 전혀 사용하지 않는데...

또한 근본적으로 Win8은 기존 데스크톱 환경과 Modern(메트로) 환경 사이에 장벽을 너무 많이 쳐 놨다. 그래서 데스크톱을 근간으로 하고 있으면서 Modern용 프로세스의 안에서도 서식해야 하는 외부 모듈에게 보안상 걸리는 제약이 너무 많다. 서로 memory mapped-file도 공유가 안 되고, Modern 프로세스 안에서는 대부분의 디렉터리에 접근도 안 되고.. 내 문서, ProgramData 다 안 된다.

Program Files와 Windows 디렉터리만 접근을 허용한다고 하는데, 전자는 32비트와 64비트가 따로 존재하기 때문에 사전이나 테이블 같은 공용 데이터를 놔 두기에는 적절하지 않은 위치이며 더구나 관리자 권한이 없으면 파일을 쓸 수도 없다. Windows\IME는 공식 설정상으로는 애초에 운영체제의 보급 IME들만이 사용하는 위치이다. 도대체 IME는 뭐 어떻게 동작하면서 Modern와 데스크톱 사이에 설정을 공유하라는 건지 모르겠다. 결국 레지스트리를 파일처럼 정보 공유 매체로 다루는 수밖에 없어 보인다.

뭐, 다음 버전을 개발하는 과정에서 이 이슈 말고도 다른 쪽으로도 <날개셋> 한글 입력기는 6.8 이래로 소스 코드가 많이 바뀌었다. 6.8은 다행히도 그 버전 자체만의 예기치 못한 버그가 들어있지 않으며 그럭저럭 잘 만들어졌다. 그래서 이 버전에 대한 유지 보수를 따로 할 필요가 없이 다음 버전인 7.0이 잘 개발되고 있는 중이다. 본인으로서는 다행스러운 점이다.

다음 버전 개발 근황을 좀 마이너한 아이템 위주로 늘어놓자면 이렇다.

1. 한컴 2바이트 코드와 한양 PUA 코드 변환과 관련된 모든 기능들은 드디어 <날개셋> 커널에서 완전히 삭제되었다. legacy 문자 코드에 대한 지원은 이미 4.8x대에서부터 차츰차츰 줄어들고, 커널에 있던 코드가 플러그 인 변방으로 이동하는 식으로 리팩터링이 진행되고 있었는데 그게 다 끝을 본 것이다. 이제 커널인 ngs3.dll에는 그런 문자 코드의 처리와 관련된 일체의 코드(프로그램)가 들어있지 않다.

2. 유니코드 문자열로부터 한글을 읽거나 쓰는 알고리즘을 미세하게나마 좀 더 최적화하고, 문자 인코딩을 자동 판단하는 알고리즘도 더 똑똑하게 개선했다. 한글이 없이 특수문자만 가득한 2바이트 인코딩을 제대로 판단을 못 하거나, 1바이트 아스키 문자 나열을 UTF16으로 오인하는 경우를 대폭 줄였다.
이 프로그램은 예나 지금이나 유니코드 UTF16, UTF8, 완성형(CP949), 그리고 조합형 코드(CP1361)을 자동 인식할 수 있다.

3. <날개셋> 편집기는 지난 3.0 시절부터 ‘기타 가져오기’ 기능을 통해 콘솔 프로그램의 출력 결과를 그대로 가져오는 기능이 있는데, 이 기능이 먼 옛날 버전부터 지금에 이르기까지 무척 비효율적으로 구현되어 있었음을 발견하여 대대적으로 개선했다.
언제든지 ‘취소’를 누르면 작업이 즉시 취소된다. stdout뿐만 아니라 stderr의 출력 결과도 가져온다. 그리고 프로그램의 실행이 끝난 뒤에도 작업 스레드가 정상적으로 끝나지 않고 강제 종료되고 있었던 것을 고쳤으며, 이 때문에 heap과 stack 메모리에서 발생하던 숱한 메모리 누수들도 덩달아 해결했다..

4. <날개셋> 편집기는 MFC를 쓰지 않고 자체 개발된 이래로 '창' 메뉴를 보면, 현재 선택되어 있는 문서 창의 항목에 체크가 표시되지 않는 버그가 있었다.. =_=;; 이걸 뒤늦게 인지하여 고침.

5. 외부 모듈의 경우 잘 알다시피 아이콘이 Windows 8 스타일의 흑백 배색으로 바뀌었는데, 표준 가이드라인에 따르면 겉의 테두리가 회색이 아니라 사실은 50% 알파가 적용된 검정이었다. 그것을 고쳤다.
그리고 사용 중인 글자판의 종류를 판단할 때, 비록 알파벳과 한글을 모두 입력할 수 있는 모호한 글자판이라도 한글(가/한) 판정이 후하게 나도록(A) 알고리즘을 살짝 고쳤다.

6. 외부 모듈은 제어판을 열어서 ‘확인’을 눌러서 종료하면 새로 바꾼 입력 방식이 모든 프로그램에서 곧바로 적용되어야 한다. 하지만 32비트 프로그램과 64비트 프로그램 사이에서는 이것이 동기화가 되지 않던 문제가 있었다. 새 버전은 이것을 해결했다. <날개셋> 한글 입력기가 64비트 플랫폼을 지원한 건 4.x시절 말기부터이고 시기적으로는 무려 5~6년이 지났는데 지금까지 이 점에 대해서는 전혀 생각을 못 하고 있었다.

7. 한글 로마자 입력 방식에서 표준 방식은 O+A로는 ‘ㅘ’가 되지 않고 오로지 W+A로만 ‘ㅘ’가 되게 규칙을 수정했다..

8. 일반적인 세로 스크롤용 휠뿐만 아니라 가로 스크롤 휠도 이제 드디어 지원한다. 일부 노트북 PC에서 터치패드 한쪽 끝을 가로로 드래그하면 이 메시지가 가는 경우가 있는데, 덕분에 편집기나 화면 인쇄 등 주요 화면에서 가로 스크롤이 가능해졌다.

<날개셋> 한글 입력기는 글쇠배열이나 오토마타 같은 걸 자유롭게 사용자 정의 가능하고 한글 입력과 관련된 거의 모든 아이디어들을 한데 기술할 수 있는 기반을 마련한 것으로 잘 알려져 있다. 하지만 그것 못지않게 이 프로그램의 독특한 면모는 바로 다양하고 개성 있는 구현체들이다. 문자 입력 기능을 제공할 수 있는 모든 형태의 구현체를 제공하기 때문이다.

편집기는 자체 한글 텍스트 에디터로, 문서 편집 창이 뜨는 일반적인 응용 프로그램과 가장 비슷한 형태이다. 전용 환경이다 보니 제공되는 기능이 가장 많고 특히 텍스트 필터를 써 볼 수 있는 사실상 유일한 구현체이다.
흔히 IME라고 불리는 외부 모듈은 EXE가 아니라 DLL이다. 범용성과 존재감이 가장 큰 구현체이다. 제공하는 기능의 양은 편집기보다 적지만, Windows 95부터 8까지의 모든 운영체제들의 특이사항을 커버하느라 코드의 양은 이게 편집기의 그것보다 더 많다.

변환기는 문자를 입력하는 기능은 없지만 한글의 표현과 관련된 호환성 유지를 위해 필요한 기능들을 한데 담은 유틸리티로, 간단한 대화상자 형태이다.
끝으로 입력 패드는 포인팅 장비를 이용한 문자 입력 기능만 제공하는 작은 프로그램으로, EXE 형태이지만 IME 내부 자료구조에 대한 훅킹을 통해 동작한다.

이런 모든 경우를 다 생각해서 개발되었다는 뜻이다. 이 구현체들은 심지어 도움말 내지 About 명령조차 서로 전부 제각각인 위치에 있을 정도로 사용자 인터페이스가 천차만별이다. (편집기는 프로그램의 도움말 메뉴, 외부 모듈은 입력 도구모음줄의 도움말 버튼, 변환기는 프로그램의 시스템 메뉴, 입력 패드는 시스템 트레이의 우클릭 메뉴)

개인적인 생각은 이들 프로그램의 아이콘도 마치 MS Office의 Word, Excel 등처럼 뭔가 한 제품에 속한다는 통일성이 느껴지는 형태로 바꾸고 싶다. <날개셋> 편집기의 지금 아이콘도 써먹은 지 벌써 10년이나 됐는데..

가끔은 까마득한 옛날의 1.x와 2.x버전을 꺼내서 실행해 본다. 내가 세상에 이런 완전 캐허접한 프로그램만으로 옛날에 정보 올림피아드 입상을 했구나 하는 생각이 든다. 1은 텍스트 에디터 하나 제대로 만들 기술도 없던 상태에서 그냥 세벌식 자판만을 위한 똘끼어린 최소한의 기술 데모일 뿐이었고 2는 버전 3을 만들기 위한 숱한 시행착오 단계였다.

3에서는 진짜 최소한의 뿌리와 기반이 갖춰지긴 했으나 아직도 허접한 UI와 외부 모듈의 안정성을 갖추기 위해 갈 길은 멀고도 험했다. 4는 버전 3이 경험한 시행착오들을 수습하면서 운영체제에 대한 독자적인 기술과 노하우가 차츰차츰 쌓이던 단계였고, 개발 8주년이 된 버전 5가 돼서야 내가 보기에 슬슬 쓸 만한 물건이 나오기 시작했다. 그리고 그 컨디션이 6에서 계속되는 중이다.

이 정도로 혼자 오래 꾸준히 개발한 프로그램이니, 내가 무슨 게임을 만든 것도 아닌데 이 프로그램에 대한 나의 애착과 중독성은 상당한 수준이다.
일단 결과물 자체부터 내가 매우 애용하고 있다. 비록 현실적으로는 외부 모듈이 가장 대중적으로 쓰이는 구현체일지 모르나 내가 가장 애용하는 구현체는 편집기이다. 자체적으로 문서를 편집하는 기능을 갖춘 일반적인 애플리케이션이며, 가장 먼저 개발되기도 했기 때문이다. 그냥 습관적으로 띄워서 뭐라도 글을 쓰고 한글 오덕질을 하고 싶은 생각이 절로 든다.

결과물뿐만이 아니라 도움말도 계속 읽어보고 싶고, 딱히 코딩을 안 해도 소스 코드를 꺼내서 뭐라도 리팩터링이나 최적화를 하고 싶다. 불행인지 다행인지 이 프로그램에 대한 모든 정체성과 권리는 본인이 혼자서 완전히 꽉 잡고 있기 때문이다. 1인 독재. <날개셋> 한글 입력기의 모든 바이너리들은 100% 자작 코드로만 이뤄져 있다.

그런데 여기에만 매여 있느라 다음 다른 연구도 제대로 못 할 정도인 건 문제인 것 같다.
이것과 관련된 개발 말고 다른 분야에는 도무지 관심이 생기질 않아서, 이걸 못 하고 덕업일치를 못 하느니 프로그래밍은 확실하게 취미 수준으로 접고 차라리 철도 같은 업종 전환도 고려할 정도로 진로가 좀 이상한(?) 방향으로 흘러가고 있다. 난 어지간한 다른 IT 분야 엔지니어들과는 애초부터 입문한 계기도 달랐고, 적성이나 취향도 다른 것 같다.

Posted by 사무엘

2013/04/13 08:30 2013/04/13 08:30
Response
No Trackback , 13 Comments
RSS :
http://moogi.new21.org/tc/rss/response/817

날개셋 한글 입력기 6.8

1. 6.8 버전의 의미

<날개셋> 한글 입력기 6.8이 나왔다. 2013년에 나온 최초의 버전이다.
사실 6.71과 6.8의 변화량은 6.7과 6.71 사이의 변화량보다도 적을지도 모른다.
새로운 기능이 추가된 게 없고, 양 버전 사이의 바이너리 호환성이 깨진 것도 없다.

그러나 6.71의 다음 버전을 6.72 대신 6.8로 잡은 것은, 이 버전에서 드디어 외부 모듈이 Windows 8 운영체제를 정식 지원하기 시작했기 때문이다. 비록 내 주변에 Win8 쓰는 사람은 아직 한 명도 못 봤지만..;;;

사용자 삽입 이미지

원래 계획은 6.7의 바로 다음 버전을 6.8로 하고 Win8을 바로 지원하는 프로그램을 만드는 것이었다.
하지만 여건상 그렇게는 못 하고 중간에 6.71을 거치게 됐다. 일단 Win8과 관련하여 편집기의 당장 급한 이슈만 해결하고, 더 근본적인 연구가 필요한 사항은 다음 버전의 숙제로 미룬 것이다.

6.71은 0.01만 올리기에는 해 놓은 게 많지만 그 내역이 딱히 존재감이 없다.
그 반면, 6.8은 절대적인 양은 0.09만 한 변화는 아니지만 그게 바로 'Windows 8 지원'이라는 존재감 큰 변화이다.
그래도 지금 두 버전의 변화 사항을 합하면 6.7 이후로 0.1쯤은 충분히 올릴 명분이 된다.

2. 수익 모델

이번 6.8 버전은 지금보다 더 이른 1월 중에 나올 수도 있었다.
그러나 본인의 직장 스케줄이 다소 바빠지고, 거기에다 투잡 같은 일종의 부업까지 뛰느라 한동안 <날개셋> 쪽으로 연구 개발을 전혀 할 수 없었던 관계로 프로그램의 완성이 늦어졌다. 시간이 없고 너무 힘들어서 이제 앞으로 투잡 같은 건 당분간 안 하련다.

투잡이라는 게 내가 생활고-_-에 시달려서 하는 건 아니고, 이게 그나마 <날개셋> 한글 입력기의 기술로 금전적인 이득을 얻는 통로라는 의미와 명분이 있어서 종종 해 왔다. 내 프로그램은 엔진 그 자체는 일반인을 대상으로 유료로 판매하는 상업용 소프트웨어가 아니고 심지어 광고 노출로 돈을 버는 것도 아닌데, 대회 상금이 아니면 이게 이윤을 창출해 온 유일한 방법이다.

별 게 아니라, 바로 <날개셋> 한글 입력기로 구현할 수 있는 입력 방식을 떼어서, 날개셋이라는 브랜드를 떼어내고 해당 코드만 최적화 static link하여 고객이 원하는 문자 입력 솔루션을 외주 개발하는 것이다. 물론 핵심 루틴은 빌드가 가능한 static library 형태로만 주고 소스 공개 안 한다.

세상에 날개셋 같은 완전 universal한 솔루션도 직접적인 수익 모델이 없으며, 표준 두벌식 다음으로 가장 인지도가 높고 구조적으로 우수한 공 병우 세벌식 같은 글자판조차도 만년 듣보잡 신세를 면치 못하고 있는데.. 한글 입력 방식 그 자체만으로 이제 무슨 사업을 하고 수익을 낼 게 있는지에 대해서는 한글 입력기의 개발자인 나조차도 회의적이다. 그래도 프로그램 만들면 개발비를 준다고 하고, 노력 대비 수지가 맞다고 여겨지니까 한다.. ^^

아무래도 일반적인 입력 방식은 레드 오션이 된 지 오래이니 진입할 틈새가 없고, 장애인용이나 동시치기 속기 같은 특수한 마이너 분야를 노려야 하지 않을까 싶다. 모바일이 아닌 PC용이라면 더욱 그러하다.

다만, 난 예전에도 공언했듯이 이미 소속된 직장이 있는 데다, 자체적으로 글꼴 연구도 해야 하고 나만의 연구 개발도 여전히 계속해야 하는데... 자꾸 외부에서 부탁하는 걸 받아서 하면 내가 자기 계발을 할 시간을 빼앗기기 때문에 이것도 큰 딜레마이다. 외부로 품팔이를 하지 않고 내가 하는 일만으로 경제적으로 자립할 수는 없을까? 이것도 점점 생각하지 않을 수가 없음을 느낀다. 정 답이 없으면 난 농담 반 진담 반으로 한 10년쯤 뒤엔 그냥 철도로 업종을 바꿔 있을 수도 있다. ㅋㅋ

3. Windows 8 이모저모

자, 암울한 돈 얘기는 그만 하고, 다음 주제인 Windows 8로 넘어가겠다. Windows 8에서는..

(1) 32비트 시절 이래로 전통적이던 관행을 깨고, 모든 프로그램이 동일한 입력기를 공유하는 설정이 추가되었으며 이것이 기본으로 적용되어 있다. 단, 옵션을 바꾸면 예전처럼 스레드별로 따로 놀게 할 수도 있다.

(2) active 입력기와 default 입력기의 구분이 없어졌다. 한 프로그램에서 입력기를 바꾸면(active) 그게 곧 default가 되며, 다음에 실행되는 프로그램은 그 입력기를 기본으로 사용하고 있다. 이것은 예전 Windows 버전처럼 동작하게 하는 옵션이 없으며, 그냥 개념을 저렇게 간소화시킨 듯하다.

(3) language bar(입력 도구모음줄)가 극도로 단순해졌다. 시스템 트레이에 '입력기 아이콘'과, 이 입력기의 '상태 아이콘'이라는 단 두 개의 아이콘만이 고정되어 나타나며, 나머지 자질구레한 기능들은 '상태 아이콘'을 우클릭했을 때 나타나는 메뉴를 통해 선택하게 되어 있다. 단, 옵션을 바꾸면 예전의 전통적인 길쭉하고 버튼 많은 language bar 방식을 쓸 수도 있긴 하다.

Win8의 디자인은 사실 TSF가 도입되기 전에 윈도우 95~ME가 사용하던 internat.exe 기반의 indicator 방식으로 되돌아 간 것이나 마찬가지이다. 그때도 IME 아이콘은 시스템 트레이에 입력기 아이콘과 상태 아이콘 둘만 있었기 때문이다. 디자인이 돌고 돌아 복고풍이 채택된 것 같다.

<날개셋> 한글 입력기 6.8은 이제 이 새로운 상태 아이콘을 지원한다. 이 아이콘은 우클릭을 하면 전체 기능을 선택하는 메뉴가 나오고 좌클릭을 하면 글자판(한/영 상태 같은)을 전환하는데, 글자판을 전환하는 규칙이 예전의 글자판 전환 버튼과는 살짝 다르다.

Windows 운영체제는 내부적으로 한글 아니면 영문이라는 이분법적인 구도로 자체 상태를 정의한다. 그러나 <날개셋> 한글 입력기 엔진은 임의의 n개의 입력 항목을 가질 수 있다. 그래서 기존 글자판 전환 버튼은 입력 항목이 딱 2개 존재할 때만 toggle 방식으로 동작하고, 3개 이상일 때는 메뉴를 표시하여 무슨 글자판을 지정할지 사용자가 직접 선택하게 했다.

하지만 Windows 8의 새로운 상태 표시 겸 글자판 전환 버튼은 동작 방식이 약간 다르다. 메뉴를 선택해야 하는 동작은 전적으로 우클릭이 전담한다. 그리고 좌클릭을 했을 때는 언제나 직전에 사용하던 non-trivial 글자판과 trivial 글자판만을 toggle 형태로 왔다 갔다 한다. trivial이란 '빈 입력 스키마', 또는 '빈 입력 스키마와 호환되게' 옵션이 지정되어 아무 글쇠도 처리하지 않는 '영문' 모드이고, non-trivial은 그렇지 않고 글쇠를 자체 처리하는 '한글' 모드에 대응하는 입력 항목이다. 실제로는 한글 이외의 다른 문자를 입력하더라도 말이다.

내가 살펴보니 기존 데스크톱 말고 메트로(Modern UI) 모드에서는 별도의 IME 툴바 같은 것 자체가 화면에 나타나지 않다 보니, 문자 입력란이 포커스를 받으면 IME가 자신의 한/영 모드를 근처에다 잠깐 표시했다가 사라지는 기능까지 제공하는가 보다. <날개셋>의 이번 버전은 그것까지는 구현하지 않았다. 일단 동작하는 것 그 자체에 의의를 두련다.

4. 다음 버전 계획

이번 6.8 버전은 <날개셋> 한글 입력기 6.x대의 마지막 버전을 염두에 두고 있다. 물론 Win8 지원과 관련해서 미흡한 부분이 또 발견되거나 사소한 기능 개선들의 양이 일정 수준을 넘어선다면 부득이 6.8x가 또 나와야겠지만, 새로운 기능이 추가된다거나 하면 반드시 7.0으로 갈 것이다.

그리고 혹시나 해서 말인데, Windows 8을 쓰고 있지 않다면 6.71하고 6.8이 아무 차이가 없느냐 하면 그건 물론 아니다. 예전 글에서 언급되었던 버그들이 고쳐졌다. 특히 6.71은 버그 때문에 사용자 정의 조합을 편집할 수가 없으니, 이 기능을 사용한다면 6.8로 업그레이드가 필수이다.

Win8 지원 작업이 완료되고 나면, 그 다음 버전은 다시 오랜 숙제로 남아 있는 입력 엔진 쪽의 기능 추가에 초점을 맞출 것이다.

  • 한자를 누르면 일반 한자 변환 모드가 되지만 Shift+한자를 누르면 사용자가 정의한 후보 리스트로 변환. 이를 위한 준비 작업은 이미 거의 5.x 버전 시절부터 해 놓았지 싶다. 한자 변환 명령을 4종류로 세분화했음.
  • 입력 패드 쪽으로 다양한 새로운 기능 추가
  • 임의의 글쇠뿐만 아니라 임의의 글쇠 동작까지 인식하는(동시치기, 길게 누르기 등등..!) '고급 입력 스키마' 완성

이게 다 갖춰지면 7.0 번호는 다 따 놓은 당상이리라.

5. 기타 잡설

(1) 세상에는 온갖 기괴한 한글 입력 방식이 존재한다. 그런 것들 중에는 정말 참신하고 의미 있는 발명인 것도 있다. 내부 메커니즘은 두벌식에 속하거나 세벌식에 속하거나 그 중간에 속할 수 있다.
그러나 공 병우 세벌식은 너무 직관적이고 평이하고 당연한 구조여서 딱히 튀는 게 없다. 그렇기 때문에 이건 다른 어떤 입력 방식보다도 더욱 의미 있고 fundamental한 발명이다.

세상에 기계간의 글자판 통일까지 염두에 두고서 사람 손으로도 이렇게 한글을 빠르고 편하게 잘 칠 수 있는 글자판은 공 병우 식 말고는 딱히 생각해 낼 수 없다. 한글교라는 종교가 있다면 이게 진짜 한글교의 핵심 교리 내지 이념이라 하지 않을 수 없다. 한글 입력기를 만든다면 이 방식부터 마스터를 한 뒤 더 복잡하고 편법이 필요한 물건으로 내려가는 게 순서일 것이다. 이것이 내가 예나 지금이나 공 병우 세벌식 덕후요 빠돌이인 이유이다.

(2) 텍스트 에디터라는 건 생각보다 굉장히 만들기 어려운 물건이다.
<날개셋> 편집기도 겉보기로는 시대에 너무 뒤떨어진 전/반각 비트맵 글꼴을 사용하고 있지만...
그 대신 MS Word 같은 다중 블록에다 세로쓰기도 지원하고, 다단계 undo까지 갖추고 있다.

또한 텍스트의 여러 군데가 동시다발적으로 변경되었을 때 필요한 부분만 문단을 다시 정돈하고, 딱 필요한 최소한의 구간만 화면을 업데이트하는 것은 <날개셋> 한글 입력기도 무려 6.x대 버전에 와서야 완벽한 구현체가 나왔을 정도이다. 타이포그래피 시스템을 그 정도로 제약하고 단순화하고도 절대로 호락호락 만들 수 있는 게 아니다.

하물며 텍스트 서식과 복잡한 유니코드 complex script를 지원하고, 장치 독립적인 레이아웃을 구현해야 하는 위지윅 워드 프로세서는 에디팅 엔진의 복잡도와 난해함이 어디까지 치솟을지 나조차도 선뜻 감을 못 잡겠다.

Posted by 사무엘

2013/02/10 19:32 2013/02/10 19:32
Response
No Trackback , 13 Comments
RSS :
http://moogi.new21.org/tc/rss/response/794

다음 버전 개발 근황

지난해 말에 <날개셋> 한글 입력기 6.71이 나온 지도 벌써 두 주가 넘게 지났다.
한 열흘 동안은 프로그램 소스를 고칠 일이 없이 나도 새 버전을 잘 썼다. 한글 입력과 관련하여 내가 속으로 구상하고 있는 최소한의 기술적 기반을 아주 탄탄히 갖춰 놓은 이 프로그램에 만족하면서 지냈다.

그러나 세월이 흐르면서 역시 프로그램에는 약점, 버그 내지 개선할 점이 발견된다.
그리고 지금 추세대로라면 다음 달쯤에 6.72 정도의 마이너 업그레이드 버전이 또 나와야 할 것 같다.
이 글에서는 2013년 1월 현재의 <날개셋> 한글 입력기의 개발 소식을 좀 전하도록 하겠다.

1. 사용자 정의 조합 제어판 UI에 프로그램이 뻗는 버그가 있음

먼저, 좀 어이없고 치명적인 버그가 발견되었다.
6.71은 제어판에서 '<날개셋> 고급 입력기'의 관할에 있는 '사용자 정의 조합'의 데이터를 조합 로직이든 후보 데이터든 고칠 수가 없다. 그걸 고치고 나면 데이터가 쓰레기값으로 바뀌고 프로그램이 죽는다.

본인은 한번 만들었던 코드를 그냥 내버려 두는 게 아니라 끊임없이 최신 코딩 스타일로 리팩터링을 하는 편인데, 그 과정에서, 해제해서는 안 되는 메모리를 부적절한 타이밍에 먼저 해제해 버리는 실수가 들어갔다.
이런 버그가 생긴 것을 유감-_-스럽게 생각한다.

2. 외부 모듈, 한글 첫 타가 덧나거나 끊기는 문제

<날개셋> 한글 입력기 외부 모듈은 특정 응용 프로그램에서 한글 조합 첫 타가 덧나거나 조합이 끊어지는 등, 제대로 인식되지 않는 문제가 종종 있었다. MS 오피스의 엑셀이나 파워포인트 등, 평상시에는 텍스트 편집 모드가 아닌데 한글 입력과 동시에 cursor가 나타나고 텍스트 편집 모드로 진입하는 프로그램의 경우 이런 오동작이 있는 편이었다.

그리고 최근에는 유명 공개 소프트웨어인 Paint .NET의 텍스트 입력 도구에서도 첫 타가 제대로 처리되지 않는다는 버그 신고가 있어서 이를 확인했다.
분석을 해 보니, 문제를 해결하는 방법은 간단하다. 이미 알려져 있는 방법론을 적용하면 된다. 그런데 문제는, 그 방법론은 다른 프로그램에서는 또 다른 오동작을 일으킨다는 것이다.

모든 프로그램에서 정확하게 잘 동작하는 해결책은 본인은 MS 한글 IME의 소스를 보지 않은 이상, 난 알지 못한다. 이게 사실은 IME의 개발과 관련해서 굉장히 골치 아픈 문제이기도 하다. 결국 현재 IME를 사용 중인 응용 프로그램의 이름에 따라 일부러 서로 다르게 동작하는 지저분한 꼼수를 동원할 수밖에 없었다.

그래서 Paint .NET에서 발생하는 그 문제를 어쨌든 해결은 했다. 그러고 보니 네이티브 코드 프로그램이 아닌 닷넷 기반 프로그램을 디버깅한 건 이번이 처음인 것 같다. .NET 프로그램은 EXE의 PE 헤더로는 x86용 32비트 프로그램이라고 명시되어 있어도, 64비트 운영체제에서는 결국 64비트 IME가 동작한다는 걸 알 수 있었다. 신기한 환경이다.

하지만 근본적인 문제를 해결한 게 아니라 응용 프로그램별로 인위적으로 문제를 피해 가게 한 것일 뿐이기 때문에, 앞으로 또 특이한 프로그램에서는 한글 첫 타와 관련된 문제가 여전히 있을 수 있다.
내가 나름 <날개셋> 편집기라는 에디터까지 다 만들어 봤지만, IME가 아닌 응용 프로그램의 관점에서 어떻게 해야 “첫 타를 그렇게 특이하게 처리하는 프로그램”을 만들 수 있는지를 모른다. 그래서 IME도 그렇게 불완전하게 만들 수밖에 없음을 밝힌다.

3. 윈8 지원은?

그리고 많은 사용자들이 기다리고 있을 Windows 8 환경의 지원에 대해서도 얘기를 하겠다.
결론부터 말하자면 잘 되고 있다.

사용자 삽입 이미지

윈8의 문자 입력 시스템은 이전 버전과 비교했을 때 크게 두 가지가 바뀌었다.
첫째, 스레드 단위로 모든 프로그램이 제각각 서로 다른 입력 언어와 한영 상태를 갖던 전통 관행을 깨고 모든 시스템이 동일한 입력 언어와 입력 상태를 공유하는 옵션이 추가되었다.
둘째, 입력 언어당 한/영 상태 같은 오로지 한 개의 버튼만을 갖는 극단적인 간소화 모드가 추가되었다.
이 두 옵션은 모두 기본적으로 “켜져 있다”.

거기에다 갑자기 무슨 바람이 들었는지 IME의 아이콘들의 배색을 전부 black & white 배색으로 바꿔 버린 건 부가적인 사항이고.

일단 개인적인 평을 말하자면 '둘째'의 경우 왜 지금과 같은 체계로 바꿨는지가 불만이며 좀 이해가 안 간다.
기존의 TSF language bar에도 개념적으로 간소화 모드는 있었다. IME는 도구모음줄에다 버튼들을 등록할 때, 간소화 모드에서도 표시되어야 하는 정말 중요한 아이콘에 대해서는 별도의 옵션 플래그를 주게 할 수 있었다.

그래서 도구모음줄을 우클릭한 뒤 '작업 표시줄에 아이콘 추가' 옵션을 끄면 중요한 아이콘만 표시되는 간소화 모드가 된다. 사실 이건 사용자를 오도하기에 충분할 정도로 말을 굉장히 이상하게 번역해 놓은 것이다.

뭐 아무튼.. 이것만 활용하면 아무 문제가 없을 텐데,
윈8은 또 자체적인 간소화 모드를 구현하기 위해서 IME가 별도의 카테고리 등록을 하고 아이콘을 추가로 등록해야만 하는 등, 굉장히 비생산적이고 번거로운 절차를 추가했다.

그래도 어쩔 수 있나.. 까라면 까야지. 어쨌든 윈8만의 간소화 모드를 지원하게 해서 데스크톱 모드에서 도구모음줄이 나오게 했고, 그리고...

사용자 삽입 이미지

메트로 앱에서 Win+Space로 입력기를 전환하여 <날개셋> 한글 입력기를 구동한 모습 인증샷이다. 올레!
나는 평가판을 쓰고 있어서 그런지, 디지털 서명을 안 해도 동작을 하긴 한다.
윈8 지원이 잘 되면.. 6.72가 아니라 8자에 맞춰서 다음 버전을 그냥 6.8로 올려 버릴 수도 있다.

사실, '메트로'라는 단어는 윈8이 나오기 전에 잠깐 쓰이다가 폐기된 용어이고 현재 MS에서 공식적으로는 Modern UI라고 부른다. 하지만 난 '모던 UI'보다 '메트로'가 훨씬 더 직관적으로 잘 와 닿는데 어떡하지? 마치 notification area vs '시스템 트레이'처럼 윈도우 운영체제에는 공식 명칭과 비공식 명칭이 따로 노는 요소가 몇 가지 더 있다.

전체 화면에서 돌아가고 단축키를 외워야 하는 등, 메트로 앱은 어찌 보면 옛날 도스용 프로그램으로 회귀한 듯한 느낌이다. 단지 도스 시절보다 하드웨어의 성능이 훨씬 더 좋고 앱 프로그래머가 직접 하드웨어를 저수준에서 제어해야 할 필요가 없을 뿐이다.

4. 기타

사소한 사항이지만, 도움말과 UI의 용어를 추가로 좀 교정한 게 있다.
그리고 도구모음줄이 세로로 길쭉한 작업 표시줄에 embed되어 있어서 버튼 아이콘들이 여러 줄에 걸쳐서 나열될 때, 아이콘들이 언제나 순서대로 위에서 아래로 순서대로 잘 표시되게 로직을 개선했다. 이것도 원래는 스펙대로만 만들면 운영체제가 보장을 잘 해 줘야 하는 건데 좀 사소한 잡음이 있었다.

지난 6.7 이래로 6.71의 다음 버전도 실질적인 '새로운 기능의 추가'는 없이 버그 수정, 최신 운영체제 지원, 데이터와 도움말의 개선 같은 변화만 있을 듯하다.

Posted by 사무엘

2013/01/07 19:32 2013/01/07 19:32
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/780

2012년의 끝을 앞두고 <날개셋> 한글 입력기의 새 버전이 나왔다.
원래 6.8을 계획했으나 그만치 개발은 못 하고 6.71로 마무리 지었다. 여기에는 이번 버전에서 윈도우 8 메트로 UI용 IME를 아직 못 만들었다는 이유가 가장 크게 작용했다. 데스크톱용도 윈도우 8이 제시하는 새로운 규격대로 맞춰진 건 없으며(흑백 아이콘, 새로운 표시 상태 등), 달라진 것도 없다.

MSDN에 개발 관련 정보가 뜨질 않으니 내가 뭘 더 할 수가 없다. “윈도우 8에서는 이런 점이 달라지니까 IME 개발자들은 여기에 대비해야 한다. 더 자세한 스펙은 추후에 게재될 것이다”라고 해 놓고 아직까지 게재가 되지 않고 있다.

1.
그럼에도 불구하고 이번 버전은 나온 시기가 시기인 만큼, 가장 먼저 윈도우 8에 대한 지원이 부분적으로 강화되었다. 사실, 수 년 전에 윈도우 비스타나 7이 나왔을 때도 <날개셋> 한글 입력기는 수차례 해당 최신 OS에서만 발생하는 문제를 해결하느라 패치가 몇 번 나와야 했다. 바뀔 게 없을 것 같은 분야여도 매번 은근히 바뀌는 게 많다.

그래서 이번 버전에서는.. 윈도우 8에서 편집기를 실행해서 제어판을 열고 '외부 모듈 관리'로 갔는데 IME들이 하나도 뜨지 않던 문제를 해결했으며,
편집기에서 빈 입력 스키마(운영체제의 문자 입력 프로그램 사용) 모드로 한글 윈도우 8이 내장하고 있는 옛한글 입력기로 옛한글을 입력하는데 글자가 종종 제대로 입력되지 않고 오동작이 발생하던 문제를 해결했다. <날개셋> 편집기는 자체 입력기와 운영체제 입력기를 모두 잘 수용하는 것을 목표로 하니까 말이다.

윈도우 8의 옛한글 입력기는, 옛날 MS 오피스 200x 시절에 한글판 plus pack이 제공하던 옛한글 입력기와는 동작 방식이 좀 달랐다. 단순히 유니코드 5.2를 지원하는 것 이상으로, 지금까지는 고려할 필요가 없던 특이한 상황에 대한 동작을 요청하는 게 있어서 내 프로그램의 에디팅 엔진을 보강했다. 뭐, 엄밀히 말하면 내 프로그램이 지금까지 TSF 인터페이스를 제대로 구현 못 했던 것이니 말이다.

다만, 3글자를 커버해야 하는데 2글자를 커버하는 것은 정황상 MS IME의 버그로 보인다. 내 프로그램에서 고쳐야 할 부분이 없다. 겉으로 보기만 좀 이상할 뿐 다른 문제는 없으므로 안심해도 됨.

2.
제어판의 GUI가 운영체제의 최신 GUI 요소를 반영하도록 몇몇 군데 개선되었다. 사소하지만 주목할 만한 개선 사항이다. 예를 들어, 제어판은 이미 개념적으로 split 버튼을 사용해 오고 있었는데 운영체제가 제공하는 진짜 split 버튼을 사용하도록 하는 조치가 이제야 취해졌다. split 버튼 자체는 이미 윈도우 비스타에서부터 있었는데도 말이다. 아울러 트리와 리스트의 모양도 좀 더 예뻐졌다.

3.
<날개셋> 편집기는 텍스트 파일을 열 때 유니코드 UTF16/UTF8, 그리고 한글 완성형/조합형 코드에 대해서는 자동 감지를 한다. 그러나 그 외의 인코딩은 자동 감지를 못 하고 사용자로부터 수동 확인을 받는다.

예전까지는 프로그램 실행 직후 자동으로 열리는('이전에 편집하고 있던 문서 기억' 옵션) 파일이나, '파일' 메뉴에 있는 '최근 파일' 명령으로 파일을 열 때도 매번 인코딩 확인 대화상자가 떴다. 그러나 이번 새 버전에서는 자동 감지가 되지 않는 파일을 다시 열 때는, 사용자가 무슨 인코딩으로 열었는지를 기억하게 했다. 중국어나 일본어, 유럽어처럼 한글도 유니코드도 아닌 인코딩으로 파일을 자주 편집하는 사용자에게는 이 조치가 굉장히 편리하게 와 닿을 것이다.

단, 아무 문제 없이 제대로 연 파일에 대해서만 인코딩을 기억한다.
<날개셋> 편집기는 이 프로그램에서 그대로 다시 저장을 했을 때 정보가 손실되는 파일에 대해서는 파일을 연 직후에 경고문을 띄운다. null 문자가 있어서 뒷부분은 모조리 잘렸다거나, 줄바꿈 문자가 일치하지 않는 부분이 있거나, 혹은 인코딩이 잘못 지정되어서 유니코드로 변환이 안 된 코드 바이트들은, 도로 저장할 때 원형이 보존되지 않고 소실되기 때문이다.

불러오는 과정에서 그런 문제가 있었던 파일이라면 사용자가 어차피 인코딩을 잘못 지정했을 가능성이 높으므로, 인코딩을 기억하지 않는 것이 훨씬 더 합리적이다.

4.
예제 데이터에도 변화가 생겼다. 예전 글에서 밝혔듯이, 네벌식이 정식 유형 파일로 들어갔으며, 일명 '강화 세벌식'이라고 불리던 세벌식 무한 낱자 수정 입력 방식 역시 <날개셋> 한글 입력기의 상징적인 기능인 만큼 유형 파일로 승격되었다. 한편, 팥알 님이 고안하신 세벌식 3-2012 글자판이 글쇠배열 파일로 추가되었다.

5.
그리고 끝으로, <날개셋> 타자연습은 크게 두 가지를 개선했는데,
첫째, 게임을 전체 화면에서 실행할 때 점수 숫자가 올라가는 게 뭔가 랙이 걸린 듯이 이상하게 업데이트되던 버그를 고쳤다. CPU 탓인지 GPU 탓인지는 모르겠지만, Core 2 Duo급 컴에서는 문제가 없었는데 i5 이상 되는 더 좋은 컴퓨터에서는 이런 현상이 종종 있었다.
그리고 둘째, 좀 어이없는 버그이고 언제부터 들어갔는지는 모르겠지만, 연습글 분석을 시키자 프로그램이 뻗던 버그를 고쳤다.

입력기와 타자연습을 모두 사용한다면 모두 업데이트를 할 것을 권장한다.
아, 그리고 잊을 뻔 했는데, 두 프로그램 모두 이번에 도움말을 처음부터 끝까지 다 읽어 보면서 내용을 교정하고 싹 고쳤다. 이것도 읽어 보시면 좋을 것이다.

Posted by 사무엘

2012/12/25 08:32 2012/12/25 08:32
Response
No Trackback , 10 Comments
RSS :
http://moogi.new21.org/tc/rss/response/774

1.

<날개셋> 한글 입력기는 제어판에서 불러다가 곧장 쓸 수 있는 20여 개의 다양한 예제 입력 방식들을 덩달아 제공하고 있다.
6.7 이후 다음 버전에서는 예제 데이터에 아래와 같은 여러 변화가 생길 예정이다.

- 6.7에서 잘 알다시피 종성 지향 두벌식을 활용하여 'MS 두벌식'이라는 유형 파일이 추가되었는데.. 여기에다가 한글 자모 외의 숫자와 기호는 글쇠를 먹지 않게 하는 입력 스키마 설정도 추가했다. (지난 6.5에서 추가된 글쇠 인식 customize 기능으로) 어차피 시스템의 영문 글자판과 똑같은 글자는 IME가 입력시키는 게 아니라 아예 글쇠 자체를 가로채지 않고 응용 프로그램으로 넘겨 준다는 뜻.
이것까지 갖춰 주면 진짜 MS IME와 고증이 100% 일치하게 된다. 특히 외부 모듈에서 말이다.

- 네벌식이 글쇠배열 *.key이 아니라 오토마타와 낱자 결합 규칙을 갖춘 유형(*.ist) 파일로 승격되었다.
받침을 입력하려면 모음을 아무 모음이나 써도 되는 게 아니라 타자기 설계 차원에서 받침용으로 의도된 모음을 써야만 하며, 그렇지 않으면 받침은 다음 글자로 튕긴다.

모음의 용도를 구분하는 건 다양한 방법으로 할 수 있다. 비받침용 모음은 0으로 대응하는 가상 받침을 같이 입력되게 하여 여타 받침과의 결합을 차단시킬 수도 있는데, 본인의 경우 두벌식 모음과 세벌식 모음으로 구분하여 오토마타가 O 변수를 써서 구분하도록 하는 방법을 썼다.

이 외에도 네벌식 오토마타는 초+중(+종)과 중+종은 허용하지만, 초에서 바로 종은 허용하지 않게 설계되어 있다. 97 이전의 도스용 아래아한글이 이런 오토마타를 갖추고 있었다. 또한 ㅒ, ㅖ가 바로 입력 가능하지 않다는 특성상 ㅑ+ㅣ, ㅕ+ㅣ로 해당 모음을 입력할 수 있게 했다.

네벌식은 그나마 옛날 타자기 표준이라는 역사적인 의미가 있고, <날개셋> 기능 활용면에서 의미가 있어서 추가했을 뿐, 타자 관점에서 효율적인 입력 방식은 절대로 아니다. 특히 공 병우 세벌식에 비하면 이런 허접하고 불편한 타자기로 한글 입력을 해야 했을 옛날 타자수들을 생각하면 그저 안구에 습기가 찰 뿐이다.

- 일명 '한소프트 세벌식'과, '드보락 호환 두벌식' 글쇠배열은 효용성이 떨어진다고 판단하여 삭제했다.
특별히 '한소프트 세벌식'에 대해 보충 설명을 하자면, 정체가 불분명하고 원문 자료를 제공하던 사이트도 운영이 중단되어 접속이 불통된 지가 이미 수 년이 지난 상태이다. 글쇠배열도 어차피 그리 잘 만들어진 것도 아닌지라 퇴출을 결정했다. 특히 숫자를 저렇게 Shift를 누른 채 양손으로 입력하게 해 놓으면 도대체 어쩌라는 건지? -_-

2.

현재 '세벌식 순아래' 글쇠배열이라는 게 있어서 예제 파일도 아니고 아예 프로그램에 내장되어 있는 배열 중 하나이다.
그러나 이것은 장기적으로는 *.key 급으로 격하될 예정이다. 내장 데이터로 쳐 주기에는 너무 듣보잡화해 있기 때문이다.

공 병우 박사의 이념을 물려받은 권위와 정통성 있는 세벌식 연구 기관에서--한글 문화원이라든가, 한글 문화원이라든가...-- 앞으로 390과 최종을 통합하는 새로운 세벌식 표준안을 제정한다면, 그 새 배열이 지금 순아래가 있던 자리를 대체하게 될 것이다.

그리고 그 통합안은 더 장기적으로는 390을 또 대체하게 될 수도 있다. 과거에 390이 389를 대체했듯이 말이다.
통합안은 기호 문제 때문에 최종보다는 390에 훨씬 더 가깝게 만들어질 것이다.
그 반면 2000년대부터 세벌식을 접한 사람들은 390보다는 최종이 더 많다. 본인도 최종 사용자.
최종은 27개 겹받침 모두 수록이라는 궁극의 아킬레스건이 있기 때문에 상징적인 의미가 크며, 통합안이 나온 뒤에도 별도로 존속할 가능성이 높다.

이런 이유로 인해, 기존 390 사용자들만 통합안으로 갈아타면, 최종과는 달리 390은 존재의 의미를 상실하여 역사 속으로 사라지게 될 것이다. 이것이 나의 짧은 생각이다.

3.

내 프로그램에는 역사적으로나 설계 방식면에서 의미가 있는 세벌식 글쇠배열 몇 개가 key 파일로 제공되고 있다. 세벌식 389는 받침 배열이 390과 최종의 짬뽕 같으면서도 숫자가 노트북 PC의 키패드 배열과 일치한다는 특징이 있으며, '송 영상'(닉: 길동무)이라는 분이 고안한 영상 세벌식은 세벌식계의 떡밥인 왼쪽부터 시작하는 세벌식을 나름 독창적으로 구현한 배열이다.

누가 만들었는지 모를 왼손/오른손 세벌식은 no shift로도 모자라서 진짜 말 그대로 한 손으로 타자를 치는 것에 특화되어 있다. 내가 알기로 영문 드보락 자판에도 이런 왼손/오른손 변종 배열이 있다. 아마 옛날에 도스용 에디터 같은 데서 이것저것 수집한 자료이지 싶다.

이런 것들은 역사적인 의미 외에 실용적으로 쓰일 가능성이 높지 않으며, 오토마타나 낱자 결합 규칙 같은 것도 그냥 일반적인 PC용 한글 입력기의 설정을 그대로 가져와 쓰는 것만으로도 충분하기 때문에, 유형 파일이 아니라 글쇠배열 형태로만 간단히 제공된다.

4.

현재 프로그램이 기본 제공하는 예제 입력 방식이 20여 개가 있다지만, 파일 하나가 겨우 몇백~몇천 바이트밖에 하지 않으니, 다 합쳐도 크기는 3만 바이트가 채 되지 않는다.
본인은 <날개셋> 한글 입력기의 사용자가 만든 UCC..는 아니고 UCI (user-created input methods) 데이터를 받는다.
마음에 드는 건 프로그램의 다음 버전에다 같이 수록도 흔쾌히 해 줄 것이다. 사실은, 이런 데이터만 공유하는 커뮤니티가 좀 있으면 좋겠다.

선정 기준은 다음과 같다. 하나 이상을 잘 만족하면 된다.

- 아이디어가 기술적으로 독창적일 것: 복벌식이나 신세벌식 같은 것. 이런 식으로 <날개셋>의 조건부 수식과 오토마타, 가상 낱자, 더 나아가 특수 글쇠 따위를 잘 활용하여 두벌식과 세벌식 사이를 왔다 갔다 하는 독창적이고 기발한 한글 입력 방식은 얼마든지 웰컴이다. 수록 0순위임. 다만 한 아이디어 당 한 개, 많아야 두 개로 국한임.

- 역사적 가치가 있거나, 인지도· 권위가 있을 것: 역사성이라 함은 앞서 언급했던 여러 legacy 세벌식 글쇠배열 말이다. 아니면 다수가 쓰거나 명목상의 표준이기라도 해야 한다.
북한 국규 표준은 나름 그쪽에서 권위를 가지고 통용되는 입력 방식이니, 통일을 대비해서라도 예전에 key로만 제공되던 것을 최근에 완전한 유형 형태로 격상했다. 아래아한글 97과 맥 OS, MS 두벌식 같은 기존 메이저 소프트웨어가 미묘하게나마 차이가 존재하는--그것도 오토마타 차원에서!-- 독창적인 한글 입력 방식을 제공하는 것도 바람직한 일이다.

휴대전화용 3대 표준 입력 방식(천지인, 이지한글, SKY-II)은 기술적 독창성과 권위를 모두 갖추고 있으니 두 말할 나위도 없이 수록이다. 사실 이것들을 포인팅 장비로 써 볼 수 있는 보조 입력 도구(패드)도 만들어야 하는데, 아직 6.7에서는 숙원을 못 풀었다.

- 타자 행동 관점에서 아주 효율적이거나 독창적일 것: 모바일용 입력 방식은 워낙 기술적인 메커니즘이 많은 반면, PC용 입력 방식은 딱히 그런 trick은 없이 그냥 글쇠배열 논쟁으로 흐르는 경향이 있다.
역사적인 뿌리나 인지도가 없고 그렇다고 기술적인 독창성도 없는 마이너 글쇠배열이 <날개셋>의 예제로 등재되기 위해서는 진짜 타자 효율이라도 압도적으로 좋다는 증거가 있어야 한다. 그게 아니면 순아래/한손 배열처럼 장애인 접근성 분야라도 파든가.

'영상 세벌식'은 타자 능률까지는 모르겠지만 왼쪽에서 오른쪽으로 흐르는 세벌식이라는 점이 독창성을 인정받아 예제 데이터로 수록되어 있다. 앞서 말한 기술적인 독창성 말고, 배열 자체가 독창적이라는 뜻이다.

- 한글 입력과 관련된 실생활에서 유용할 것: <날개셋> 한글 입력기는 기본적으로 한글 입력에 특화되어 있기 때문에 예제 데이터도 한글 입력 방식을 우대함을 원칙으로 한다. 한글이 아닌 문자는 한국 문화권에서 한글과 같이 즐겨 쓰이는 문자들로 국한한다.

가령, 일본어 문자는 아무래도 아랍· 태국-_- 문자보다야 한국에서 더 친숙하며, <날개셋> 고급 입력기의 사용자 정의 조합 기능을 이용해서 간단히 커버 가능한 예이기 때문에 히라가나와 가타카나가 모두 수록되어 있다. 구결도 마찬가로 국어 정보학 분야에서 유용하기 때문에 수록이다.
콜맥 글자판은 한글 입력과 관계가 없는 영문이지만, 드보락 다음으로 나름 인지도가 있는 마이너 배열인지라 영문 배열은 딱 하나만 선택해서 넣었다.

이상으로 내가 예제 입력 데이터를 선별하여 수록하는 대원칙을 공지했다.
저런 조건 중 하나 이상을 만족하고 기존 예제들과도 완전히 다른 입력 방식이 과연 얼마나 있을지는 잘 모르겠지만, 내 프로그램을 통해 여러 창의적인 한글 입력 방식이 많이 만들어지고 쓰이면 좋겠다.

<날개셋> 한글 입력기는 한글 입력과 관련된 그런 지적 재산들을 모두 구현하고 관리할 수 있는 프로그램이니 말이다.
그런 기반을 마련하기 위해 초창기엔 가장 엄밀한 극단이라 할 수 있는 공 병우 세벌식부터 추구한 뒤, 점차 더 generic한 쪽으로 내려오고 있는 중이다.

여담이지만, '한글 로마자 입력 방식'처럼, 그 자체가 한 입력 방식이 아니라 특정 포괄적인 아이디어 하에서 세부적으로 다양한 입력 방식이 파생되어 나올 수 있다면, 그건 유형 파일이 아니라 아예 별도의 '빠른설정'이라는 플러그 인 프로그램이 담당하게 된다.

Posted by 사무엘

2012/09/13 19:18 2012/09/13 19:18
, , ,
Response
No Trackback , 6 Comments
RSS :
http://moogi.new21.org/tc/rss/response/732

지난 8월말에 잘 알다시피 <날개셋> 한글 입력기 6.7이 완성되고 공개됐다. 내가 만들었지만 나 자신도 잘 쓰고 있다. 의미심장한 중요한 기능들이 많이 추가되어 아주 만족스럽다.

프로그램의 한 버전이 완성된 후, 조금 시간이 흐르면 버그 수정이나 새로운 아이디어 구현, 기능 추가를 위해서 결국 프로그램 소스를 또 건드리게 되고, 내가 쓰는 개발 중간 버전과 직전 완성 버전 사이에는 차이가 생기게 된다. 그 첫 차이가 생기기까지 걸리는 시간은 생각보다 길지 않다.

이번 6.7도 그 점에서는 예외가 아니다. 벌써 다음 버전 작업이 시작되었다. 프로그램 내부의 버그가 발견되었거나 새로운 기능이 떠오른 건 아니고, 단지 운영체제의 특성과 관련된 enhancement가 불가피하게 생기게 됐다. 그 내역은 다음과 같다.

1. 테마가 적용된 옅은 파랑 선택막대

<날개셋> 한글 입력기의 외부 모듈에서 한자 선택 UI를 꺼내면 외형이 윈도우 7 기준으로 지금까지(up to 6.7)는 왼쪽과 같았다. 그렇던 것을 다음 버전부터는 오른쪽처럼 나오게 수정했다.

사용자 삽입 이미지

highlight 색상이 너무 옅었던 것을 좀 더 진하게 하고, 아이템의 크기를 약간 더 키웠다. 예전보다 보기가 훨씬 더 좋아졌다. 크기를 약간 키웠는데도 MS IME의 목록이 <날개셋>의 그것보다 여전히 더 크다.

잘 알다시피 MS에서는 소프트웨어의 GUI에서 highlight된 항목을 표시하는 방법을 슬금슬금 교체해 오고 있다.
전통적인 방법은 파란 바탕 solid color에다가 하양 글씨였다. 그 이름도 유명한 GetSysColor(COLOR_HIGHLIGHT) 말이다. 아니면, 컨텐츠 자체에 여러 색깔이 서식 형태로 들어갈 수 있는 워드 프로세서 같은 곳에서 블록 같은 걸 표시하는 방법은 흰 바탕을 검정으로 바꾸는 XOR 반전색이 통용되어 왔다.

그러나 요즘 MS에서 밀고 있는 방법은 배경에다 그냥 옅은 파랑을 씌우는 것이다. 이 기법의 원조는 사실 MS 오피스 2000의 '엑셀'로 생각보다 오래 됐지만, 워드에서까지 블록이 전통적인 반전색 대신 옅은 파랑으로  표시되기 시작한 건 오피스 2007부터이다.

윈도우 XP부터는 리스트 컨트롤에서 드래그 사각형을 점선 사각형 대신 옅은 파랑으로 대체하는 LVS_EX_DOUBLEBUFFER 스타일을 도입하였으며, 비스타부터는 메뉴와 운영체제의 공용 컨트롤(리스트 뷰, 트리)에서 선택 막대까지 반전색 대신 알록달록 옅은 파랑 그러데이션이 도입되었다.

그리고 이 테마 색상은 운영체제의 시스템 색상의 영향을 받지 않는다.
Aero를 사용 중일 때에는 잘 알다시피 GPU가 합성해 내는 glass 프레임의 색깔만 바꿀 수 있지, 기존 시스템 색상은 바뀌지 않는다. 어찌 보면 시스템 색상도 점점 과거의 유물처럼 돼 간다는 뜻 되겠다.

그런데 본인은 그 옅은 파랑이 윈도우 비스타나 7이나 동일한 줄로 지금까지 알고 있었는데, 그렇지 않다. 똑같은 Aero 기반이지만 비스타가 약~간 더 옥색에 가까웠고 7이 좀 더 파래졌다.

또한 그 색상도 알고 보면 짙고 옅은 구분이 존재한다. 7은 옅은 색과 짙은 색의 차이가 비스타 시절보다 더 커졌다(위 그림에서 왼쪽의 상하 한 쌍이 비스타 것,, 오른쪽의 한 쌍은 7 것). 그래서 이를 조정함으로써 이제는 비스타와 7에서 모두 보기 좋은 색상이 나오게 되었다. 지금까지 사용하던 채색 방법은 비스타에서는 어차피 별 차이가 없던 반면, 7에서는 너무 옅게 나온다는 문제가 있었다.

2. 윈도우 8 지원

시기가 시기인 만큼 <날개셋> 한글 입력기의 다음 버전은 여건이 허락하는 한 윈도우 8의 지원 강화가 계획되어 있다.
<날개셋>은 지금까지 윈도우 2000에서 발생하는 특수한 문제 해결(아직 윈98이 대세이던 시절), 외부 모듈 첫 개발, 64비트 지원 등 외부적인 큰 환경 변화를 몇 차례 대면했었는데, 윈도우 8 지원도 상당히 도전적인 과업이 될 것 같다.

우선, 윈도우 8을 접한 소감부터 좀 말하자면, 이제 얘들은 XP, 비스타 같은 이름을 일일이 짓기가 귀찮아졌는지, 연도도 아니고 숫자를 버전과 아무 관계 없는 브랜드명으로 쓰기로 작정을 한 모양이다. 윈8의 내부 버전은 6.2이다. (비스타가 6.0, 7은 6.1)

GUI가 동글동글하던 것이 전반적으로 다시 각진 컨셉으로 바뀌고, 그러데이션이 단색(solid color)으로 바뀌는 등, 좀 더 검소해지고 단순해졌다(simplify). 의외이다.

컴덕후라면 이미 익히 알듯이 데스크톱 모드에 이어 메트로 모드라는 게 생겼으며, 메트로 모드는 확실히 과거와의 호환성을 버리고 좀 더 '새끈하고' 스마트폰 앱과 더 친화적인 응용 프로그램 환경을 추구한 듯하다.
근데 데스크톱 모드에 도대체 시작 버튼을 무슨 생각으로 없애 버렸는지는 잘 모르겠다.

윈8에서는 문자 입력기 쪽 인터페이스가 완전히 바뀌는 바람에 기존 한글 IME들은 메트로 모드에서는 동작하지 않으며, 데스크톱 모드에서도 기존 IME 도구모음줄(language bar)가 누락된 채 거의 반쪽짜리 상태로 동작한다. 특히 메트로 모드에서 동작하려면 IME 프로그램이 반드시 디지털 서명이 돼 있어야 한다고 그런다.

무엇보다 심각한 문제는, 기존 API로는 운영체제에 설치되어 있는 IME 프로그램들이 전혀 조회가 되지 않는다는 점이다. 또한 상태 표시 아이콘 쪽도 알다시피 크게 바뀌었기 때문에 이에 대한 대처를 하려면 적지 않은 시간과 수고가 필요할 것 같다.

세벌식 파워업은 수동으로 두벌/세벌 전환을 한번 해 준 뒤에 돌리면 자동 글자판 전환이 다행히 잘 된다. 그러나 IME 설정 대화상자를 꺼내기가 굉장히 불편해졌는데(일일이 제어판으로 들어가야 함. 예전처럼 우클릭만으로 되지 않는다) IME 설정 대화상자를 곧바로 꺼내는 기능이 동작하지 않기 때문에 이에 대한 패치는 해야겠다.

이렇듯, 프로그램 자체의 기능과는 전혀 무관하게 프로그램을 또 고쳐야 할 부분이 몇 군데 생겼다. 그러나 이번 6.7은 그것만 빼면 현재까지는 여전히 버그가 발견된 게 없고 최고의 완성도로 만들어져 있다..

참고로 윈8은 명령 프롬프트에서 '다다.' 글자가 덧나는 버그는 고쳐져 있었다. 그리고 모든 프로세스에서 사용 중인 IME의 종류와 상태가 한데 공유된다! IME가 각 프로세스의 스레드별로 따로 기어들어가는 게 아니라, 별도의 전용 프로세스를 통해 IPC를 써서 응용 프로그램들과 소통하는 것 같다!

※ 여담

- 난 내 컴퓨터로 서식이 없는 글을 쓸 때 무슨 프로그램을 써서 할지가 고민된다.
일단 윈도우에서는 내가 만든 <날개셋> 편집기가 심리적으로 마치 우리집 안방에 있는 것 같은 편안함과 가벼움을 선사한다. 정다운(?) 비트맵 글꼴과 화려하기 그지없는 고급 입력 기능들을 그대로 쓸 수 있으니 이것도 좋다.

한편, 맥 OS의 텍스트 편집기는 비록 한글 입력기의 자유도는 뒤쳐지는 반면, 찍히는 글꼴의 품질이 윈도우와는 넘사벽급으로 차이가 나고 너무 우수하니 이 또한 글 쓰는 즐거움을 선사하는 요인이다.
두 장점을 하나로 합치려면 결국 <날개셋> 한글 입력기가 맥용으로도 나와야 할 텐데 말이다.;;

- 요즘 모바일용 입력 방식 중에는 그냥 버튼을 눌렀다 떼는 게 아니라 특정 제스처를 취했을 때 초성과 중성이 동시에 입력되게 되어 있는 한글 입력 방식이 있다. 이런 로직을 <날개셋> 한글 입력기로 구현하는 건 일도 아니다. 날개셋문자는 애초에 여러 낱자를 한꺼번에 배당을 할 수 있는 구조이기 때문이다. 그걸 글쇠 수가 충분한 편인 PC 키보드에서는 잘 활용을 안 할 뿐.

'가'를 ㄱ+ㅏ로 입력했을 때와 한꺼번에 입력했을 때 종성의 조합 여부를 달리 지정하는 것도 가능하다. 오토마타가 통상 A ? 1: B ? .. 같은 식으로 지정되어 있는 것을 A && B ? 라고 하여 동시 입력 여부에 대한 상태 분기도 직접 지정하면 되기 때문이다. 어지간한 변칙적인 한글 입력 방식에 대한 대비는 <날개셋>이 다 해 놓고 있다.

그렇기 때문에 본인은 어떤 새로운 한글 입력 방식이 있으면 그게 손이 편하냐, 빨리 칠 수 있냐 하는 것보다는 그 입력 방식을 구성하는 기본 동작과 로직이 어떠한지를 보는 편이다. 그게 나의 연구 주제이기 때문이다.

- <날개셋> 한글 입력기의 다음 버전은 6.x대의 마지막 버전이 될 것이다. 이 글에서 언급된 이슈 말고 또 무슨 변화가 생길지는 아직 미지수이다.

그런데 개인적으로 난 윈8은 너무 급격한 변화들 때문에 비스타 꼴 날 것 같은 생각이 든다. -_-;; 왜 자꾸 익숙한 UI를 쓸데없이 바꾸고, 게다가 보안을 빌미로 응용 프로그램 실행엔 번거로운 제약만 자꾸 추가하는지 모르겠다. 2000/ME와 비스타가 망하고 XP와 7이 무진장 장수했는데, 8은 아무래도 오른쪽보다는 왼쪽 계열로 갈 것 같다.

Posted by 사무엘

2012/09/05 19:35 2012/09/05 19:35
,
Response
No Trackback , 15 Comments
RSS :
http://moogi.new21.org/tc/rss/response/729

오랜만에 <날개셋> 한글 입력기의 새 버전 소식을 전하게 된 것을 기쁘게 생각한다.
6.51 다음으로 6.7! 나의 대학원 석사 졸업 기념작이다.
나의 대학 학부 졸업 기념작은 까마득한 옛날인 2005년 여름에 나온 3.41이고,
4년 전 여름에 나온 5.0은 병특 만료 기념작이다.
작년에 6.2가 나온 뒤 거의 정확히 1년 만에 버전이 0.5만치 올라가게 되었다.

이번 버전은 비주얼 C++ 2010으로 개발된 첫 버전이다. 5.5부터 지난 6.51까지는 약 3년 동안 2008로 개발됐다.
더 옛날의 2.5부터 5.31까지는 거의 6년 동안 2003을 썼고 말이다. 그에 반해 VC++ 2005는 처음에 64비트 에디션을 빌드할 때만 잠깐 썼고 그다지 즐겨 사용되지 않았다.

버전 번호에 7이라는 숫자가 들어가는 것은 지난 12년간의 <날개셋> 한글 입력기의 개발 역사상 최초이다. 물론 6.x를 졸업하고 아예 메이저 버전이 7로 진입할 날도 얼마 안 남았고 말이다.
6.7은 여느 역대 버전들과 마찬가지로 다방면의 기능 추가와 개선을 거쳤다. 하지만 이번에도 시간과 여유의 부족으로 인해 원하는 기능, 넣고 싶었던 기능들을 모두 충분히 넣지 못했다. 그렇기 때문에 6.7까지는 안 하고 6.65, 심지어 6.66-_-으로 번호를 정하는 것도 이론적으로 충분히 가능하나, 국민 정서를 감안하여 그러지는 않았다.

한동안 <날개셋> 한글 입력기의 API에 큰 변화가 없었기 때문에 타자연습 3.3은 입력기 6.2부터 6.51까지 API 호환이 지켜졌으나, 이번 6.7에서는 클래스 가상 함수 한 군데의 프로토타입이 바뀌는 바람에 정말 어쩔 수 없이 API 호환이 깨지게 되었다.

타자연습은 1년 전이나 지금이나 바뀐 건 없고, 입력기 6.7의 API를 기준으로 재빌드한 프로그램만 다시 올렸다.
물론, 이제는 API 호환이 안 되는 버전의 <날개셋> 입력기 외부 모듈과 타자연습이 서로 같이 실행되어도 충돌이 없기 때문에, 굳이 타자연습에서 입력기 6.7에 새로 추가된 기능을 꼭 써서 타자 연습을 해야 할 분이 아니라면, 이미 설치된 타자연습 3.3을 또 재설치해야 할 필요는 없다.

이번 6.7에서 내세울 만한 변화는 다음과 같다.

1. 편집기의 에디팅 엔진 최적화

비록 눈에 당장 차이가 느껴지지는 않는 변화이긴 하나, 새 버전에서는 에디팅 엔진의 최적화가 최후 종결자 지점에 이르렀다.
텍스트의 여러 군데가 동시다발적으로 바뀌어서 구간별로 어디는 다시 그려져야 하고, 어디는 단순히 위로 몇 줄 스크롤하면 되고, 더 아랫부분은 반대로 아래로 스크롤되어야 할 때... O(n^2) 복잡도까지 감수하면서 구간별로 모든 가짓수를 100% 정확하게 파악하여 동작하게 했다. (물론, n이 너무 커지면 골치 아프게 그런 것 따질 필요 없이 그냥 화면 전체를 다시 그려 버리면 된다)

예전에는 그냥 최악의 상황을 가정하고 무조건 화면을 다시 그리게 하던 것이 지난 6.2 버전이던가 그때쯤에 크게 개선되었다. 그러나 그것도 동작이 지금 정도로 정교하지는 못했으며, 나중에 다시 생각해 보니 논리 자체에도 원천적으로 결함이 있어서 아주 특수한 상황에서는 여전히 화면 잔상이 남는 버그까지 있었다.

그 점이 찝찝했었는데 이번 버전에서는 드디어 작정하고 매달린 끝에 완전히 끝장을 내고 말았다. 만세! 새로운 기능 구현도, 단순 리팩터링도 아니고 최적화 작업을 끝냈을 때의 홀가분한 기분은 직접 구현해 본 사람만이 느낄 수 있을 것이다. 역시 좋은 프로그래머란, 모든 경우의 수를 논리적으로 잘 따지는 사람임을 느꼈다.

텍스트 에디터를 만들면서 이런 식으로 구간과 구간 사이의 여러 변화들을 한데 합성하는 알고리즘을 구현하는 게 굉장히 힘들었다. <날개셋> 편집기는 한글에만 초점을 맞추려고 complex script는커녕 글씨 크기 변경도 안 되고 가변폭 글꼴조차 지원 안 하는 아주 제한된 에디팅 엔진을 의도적으로 고수하고 있지만, 그 정도를 만드는 데도 지금까지 의외로 복잡하고 어려운 알고리즘이 제법 들어갔다. undo/redo를 관리하는 것도 그렇고.

2. 한글 입력 오토마타 차원에서의 기능 추가

이 달 초에 블로그 글을 통해 먼저 소개한 바 있는 종성 지향 두벌식은, 예전에는 없던 완전히 새로운 개념이 추가된 것이다. 같은 두벌식이라도 음절 경계에서 자음을 초성으로 볼 것인가, 종성으로 볼 것인가 하는 것을 이제 사용자가 직접 지정하는 것은, 한글 입력 전문 프로그램으로서 매우 중요한 기능이 아닐 수 없다.
종성 지향 두벌식과 맞물려 돌아가는 BKSP 옵션, 특수 키, 타수 복원 알고리즘 등등도 다 일관성 있게 동작하도록 로직의 수정과 보강이 이뤄졌음은 두 말할 나위가 없다.

그리고 오토마타에서는 현재 입력된 날개셋문자가 두벌식인지(종성 지향 포함) 세벌식인지를 나타내는 변수를 추가하여, 한 오토마타가 벌식에 따라 다르게 동작할 수도 있게 했다.

사실 이 두 기능은 내 학위 논문에도 들어가야 했을 아이디어인데 논문 학기가 다 끝난 뒤에야 생각이 나고 구현된 것이 좀 아쉽다. ^^;;

3. 단어 단위 한자 변환

<날개셋> 한글 입력기의 아주 오랜 숙원이 이번 버전에서 드디어 부분적으로나마 성취되었다. 만세!
드디어 '대한민국'에서 '국'을 조합 중이거나 '국'의 뒤에다 커서를 두고 한자 키를 누르면 단어를 한꺼번에 大韓民國로 바꿀 수 있다. 그리고 한자를 한글로 바꾸는 것도 최대 12글자까지 한꺼번에 할 수 있다.

사용자 삽입 이미지

이렇게 하기 위해서는 제어판의 '편집기 계층'에서 '단어 단위 한자 변환' 옵션을 켜 주면 된다. 그리고 이 기능은 아무데서나 쓸 수 있는 건 아니고, 자체 편집기나 TSF A급 프로그램(워드패드, MS 워드 등 몇몇)에서만 가능하다.

단, 이것은 아주 초보적인 수준으로만 구현된 것이기 때문에 한계도 적지 않다.
커서 바로 앞까지 끝나는 범위의 단어만 한자로 바꿀 수 있으며, 글자가 아닌 단어 영역에 대해서 블록 같은 시각적인 피드백이 없다.

그리고 이 단어 사전은 <날개셋> 한글 입력기가 자체적으로 갖추고 있는 게 아니다. MS 한글 IME의 한자 사전을 빌려다 써서 동작한다. 그래서 내 프로그램으로 단어 단위 한자 변환을 하려면 윈도우 비스타/7의 한글 IME가 설치되어야 있어야 한다. 자체 사전이 아니므로 사용자 사전 등록 기능 같은 것도 없다.

이번 버전은 그냥 최소한의 노력으로 <날개셋> 한글 입력기도 이제 제한적으로나마 단어 단위 한자 변환이 가능하다는 걸 맛만 보여 준다는 데 의미가 있다. 그러나 이렇게만 해도 정말 신기하기 그지없다.

4. 그 밖의 사소한 변화들

- <날개셋> 한글 입력기의 외부 모듈은 설치하여 구동하고 나면 language bar에 예닐곱 개의 아이콘들이 주렁주렁 달리는 편이었는데, 이번 버전부터는 잉여력이 꽤 강한 전/반각 모드, 텍스트 필터(극소수의 TSF A급 프로그램에서만 사용 가능), 문자표는 제외하고 기본적으로 4개의 아이콘(한/영, 한자, 제어판, 보조 입력 도구)만 표시되게 바꿨다. 나머지 아이콘들은 별도의 명령을 내려서 사용자가 표시하도록 해야 표시된다.

이렇게 하니까 훨~씬 깔끔하고 좋다. 외부 모듈이 개발된 지도 벌써 7~8년째인데 왜 지금까지 이렇게 정리를 할 생각을 안 했나 모르겠다.

- 그리고 <날개셋> 편집기에서 외부 모듈을 사용하면서 편집기의 도구-옵션 명령으로 프로그램의 GUI 언어를 변경한 경우, 외부 모듈의 도구모음줄 아이콘의 툴팁이나 명칭도 해당 언어로 바뀌게 했다. 크게 의미 있는 변화는 아니지만 프로그램간의 일체성을 향상시킨 조치이다.

- 외부 모듈의 한자 변환 후보 선택 중에 Ctrl+C를 누르면 선택된 한자를 클립보드에다 복사가 되게 했고, Shift+엔터/번호를 누르면 한(韓) 형태로, 그리고 Ctrl+엔터/번호를 누르면 韓(한) 형태로 삽입이 되게 했다. 저 기능도 언젠가 넣어야 할 필요를 느끼고 있었는데 이렇게 하는 게 제일 좋을 것 같다.
필요는 발명을 낳는 법. 단어 단위 한자 변환과 연계하면 더욱 편리해진다. '대한민국(大韓民國)' 같은 문구를 한번에 바로 삽입할 수 있으니 말이다.

- '한글을 소리 나는 대로' 필터가 받침 ㄷ계열(ㄷ, ㅅ, ㅌ 등)+ㄹ을 지금까지 ㄹㄹ로 동화시키고 있었는데 이를 ㄴㄴ 계열로 수정했다. 그런데 한국어에서 저렇게 동화가 일어나는 경우가 전혀에 가깝게 없기 때문에 <날개셋> 3.0 이래로 이에 대한 문제를 제기할 일이 없었다.

- '한글 낱자 종류 변환' 필터에 호환용 한글 자모 4개 나열로부터 표준 한글 자모나 한글 글자마디를 만드는 변환 기능을 추가했다. 이것은 우리나라 표준 문자 코드에 명시되어 있는 스펙이기 때문에 도입했다. (거의 사문 전락 수준이 아닌가 의심되긴 하지만.)

- 굳이 나열하기에도 구차한 여러 버그 수정들은 덤. 사용자는 거의 접할 일이 없겠지만.
- 그리고 이번 버전부터 후원 안내문이 프로그램 설치 화면과 도움말 구석에 추가되었다.

5. 제공 자료들

새로 추가된 한글 입력 기능을 활용하여 두벌/세벌 판별 변수를 활용한 복벌식용 모아치기 오토마타, 그리고 맥 OS의 세벌식 자판이 예제로 추가되었다. 종성 지향 두벌식을 사용하여 고증을 100% 살린 MS 두벌식도 예제로 제공된다.
그리고 6.7의 새로운 기능으로만 가능한 건 아니지만, 아래아한글 97이 과거에 제공하던 세벌식 semi-모아치기 오토마타도 예제로 추가했다.

아래아한글 97을 기억하시는가? 아래아한글 2.0 기반의 에디팅 엔진과 3.0 기반의 파일 포맷, 그리고 한컴 2바이트 코드를 사용하던 마지막 버전임과 동시에, 당대로서는 가장 완성도가 높았고 1990년대 말과 2000년대 중반까지 전국적인 사랑을 받았던 명작 워드 프로세서이다.

아래아한글 97은 세벌식 글자판에서 우리나라의 소프트웨어 역사상 전무후무한 한글 입력 로직을 갖고 있었다.
초성만 가장 먼저 입력한 뒤엔, 그 후의 중성과 종성은 아무 순서대로나 입력하면 된다. 아래아한글 97의 오토마타를 <날개셋> 식으로 기술해 보면 다음과 같은데...

0 → A ? 1 : B|C ? 2 : 0
1 → A ? 1 : B|C ? 2 : 0
2 → B|C ? 2 : 0

수식이 정말 심하게 단순하다!
<날개셋>의 표준 모아치기 오토마타는 초성을 나중에 뒤늦게 입력하는 경우를 고려하는 것도 있기 때문에 0부터 3까지 4상태이다. 그러나 아래아한글은 초성 아니면 중성/종성으로만 딱 칼같이 나눠서 겨우 3상태이고 수식도 더 간결하다.
거기에다가 아래아한글의 전통인 조건부 / 키만(초성 입력 직후에만 ㅗ, 나머지 상황엔 / 그대로) 수식으로 넣어 주면 100% 정확한 아래아한글 스타일 세벌식이 완성된다.

Mac OS의 세벌식에 이어 아래아한글 97의 세벌식 입력 오토마타를 구현해 보니 스스로 생각해 봐도 재미있다. 다 똑같은 한글 입력 방식 같아도 실제로는 100% 똑같지가 않다.

내가 예전 글에서 썼듯이, <날개셋> 한글 입력기는 그야말로 한글 덕후들의 지적 욕구를 충족할 수 있는 프로그램, 한글 덕후의 마음의 고향 같은 프로그램을 표방하며 개발되고 있다. 그리고 이번 6.7은 그 이상향에 더욱 근접했다고 볼 수 있으며, 글을 다 써 놓고 보니까 마음이 바뀌는 듯. 이 정도면 6.51에서 6.7로 충분히 버전을 올릴 만도 하다는 생각이 든다. ^^

Posted by 사무엘

2012/08/27 08:20 2012/08/27 08:20
, ,
Response
No Trackback , 13 Comments
RSS :
http://moogi.new21.org/tc/rss/response/725

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

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2026/07   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Site Stats

Total hits:
3929731
Today:
804
Yesterday:
1803