1. 잡설: 개발 후기

늘 느끼는 거지만 코딩 작업은 머리를 짜내고 멘탈을 갈아넣을수록, 그 투입한 input에 비례해서 output은 늘 좋게 나온다.
이런 식의 개발 작업 살생부를 만들어 놓고, list에서 체크 표시가 하나씩 늘어 가는 게 내 인생의 기쁨이었다. 그럼 내가 마치 무슨 암살자가 된 듯한 느낌이랄까. 해치운 아이템들은 체크 표시를 하고 목록에서 지운다.

사용자 삽입 이미지

이제 자꾸 살생부에 살생 대상 아이템이 추가되지는 않았으면 좋겠다. 나도 이제 다른 연구도 하고 연애도 하고 결혼도 좀 해야지? ㄲㄲ

테트리스에는 수직 작대기가 있고 퀘이크 3 Arena에는 레일건이 있으며, 카트라이더에는 니트로 부스터와 드리프트가 있다.
그렇다면 프로그래밍에서 그런 카타르시스와 중독성을 선사하는 요소가 무엇일까? 바로, 공통된 코드 패턴을 한 클래스나 함수로 뽑아내고, 여러 클래스들 중에서도 공통된 요소를 템플릿이나 기반 클래스로 뽑아낼 때가 아닐까 싶다.
같은 기능을 더 적은 시간과 메모리로 수행하는 방법을 찾아내는 것도 좋긴 하지만, 본인은 그런 성능 최적화보다도 복잡함에서 질서를 찾아낼 때가 더 즐겁다. 프로그래밍이라는 건 정말로 극도의 복잡도를 제어하는 지적 노동이기 때문이다.

예전에도 했던 말이 또 반복되는 듯하지만, 한글 입력 패러다임의 관점에서 봤을 때 세벌식은 한글 본연의 성능을 올리고 최적화하는 데 적합하다. 그 반면 두벌식은 직관적이지 못하기 때문에 자동화 처리를 위한 프로그래밍의 관점에서 도전적인 과제가 많다.
두벌식에서는 세벌식처럼 초성 글쇠는 반드시 초성으로, 종성 글쇠는 반드시 종성으로 일대일, 필요충분관계로 대응하는 게 아니다. 문맥에 따라서 종성 글쇠가 초성 역할을 할 수 있고, 공유 옵션을 사용하면 초성의 결합 규칙이 종성을 조합하는 데 쓰일 수 있다.

이런 요소들 하나하나가 입력 순서 재연 알고리즘이나 각종 특수글쇠 조작을 꽤 복잡하게 만든다.
현재 한글 입력 스택에서 "초성만 지워라, 종성만 남겨라" 같은 명령을 수행하는데 세벌식은 초중종 직관적으로 대응해서 테이블이 3개만 있으면 되는 게, 두벌식은 저런 추가적인 상황을 고려하느라 4개가 되고 여러 예외 처리가 또 추가된다. 그래도 두벌식도 초성부용종성 원리에 따라 엄연히 한글을 활용하는 방식 중 하나이고, 속도와 능률보다는 글쇠 수가 더 중요한 환경에서는 의미가 있으니, 이 역시 단군의 후손들이 보유한 지적 재산이다. 단지 세벌식을 적용할 필요가 없는 곳에서 2순위로 적용되어야 할 방식일 뿐이다.

이번 7.5 이후로도 후속 개발 작업은 또 지체없이 계속된다. 최소한 내년 초까지 거의 7.8~8.0 정도에 도달할 때까지는.
난 지금까지 남들 안 하는 짓만 골라서 하면서 살아 왔으며 이것을 가능하게 해 주는 것이 '자유'라고 굳게 믿는 사람이다. 나는 자유를 극도로 사랑한다. 내가 정치적으로 북한에 대해 매우 민감한 것도 이 때문이다. 다른 사람들은 어느 환경에서나 머리 잘 굴려서 알아서 적응 잘 하고 요직을 잘 찾아갈지 모르겠지만, 난 자유가 없는 곳에서는 1분 1초도 못 견딘다. “자유가 아니면 죽음을 달라”라는 말을 적극 이해한다.

2. 공지: 늘 최신 버전을 사용할 것을 권장

내 한글 입력기는 자동 업데이트 기능이 없다 보니..
내게 메일로 버그나 오동작 문의를 하는 사용자 중엔 나로서는 상상도 못 할 까마득한 구버전을 사용하고 있는 경우가 종종 있었다.
그 문제는 이미 옛날 옛적에 해결되어 있기 때문에 그냥 최신 버전 업데이트만 해도 저절로 없어지는 경우가 90% 이상까지는 아니지만 그래도 과반은 됐다.

지난 여름엔 무려 4년 가까이 전에 만들어진 골동품인 5.8 버전을 쓰시던 분을 7.4로, 6.x도 건너뛰고 가히 시간 워프를 시켜 드렸다.

나도 강제 자동 업데이트 같은 걸 무진장 귀찮아하는 타입이고, 구버전의 이미 있는 기능만을 만족하고 잘 쓰고 있는 사용자에게 새 버전을 강요할 생각은 전혀 없다.
하지만 구버전에서 명백하게 불만족스러운 문제가 있다면.. 그 경우라면 최신 버전을 살펴보려는 노력을 사용자가 먼저 해야 하지 않겠는가? ㅎㅎ

<날개셋> 한글 입력기는 버전이 올라가면서 뭐 "종성 두벌식", 초종 공유 낱자 결합 규칙, 사용자 정의 후보 데이터, 특수 도깨비불 알고리즘 등등
헤비 유저들만 사용하는 안드로메다급의 복잡한 고급 기능만 추가되는 게 아니라.. 당장 사용자에게 와닿는 외부 모듈의 안정성 같은 것도 꾸준히 눈에 띌 정도로 개선되고 있다.

그렇기 때문에 굳이 모든 기능을 사용하지 않는 사용자라도 어지간해서는 반드시 최신 버전을 써야만 굳이 겪을 필요가 없는 버그 때문에 골치 아파할 일이 줄어든다.
그런데.. IME는 간단히 EXE 하나만 종료한다고 바로 구동을 중지하고 쉽게 업데이트가 가능한 물건이 아니며, 여러 모로 기술적으로 번거로운 요소가 있어서.. 내 프로그램은 부득이 자동 업데이트 같은 건 제공하지 않고 있다. 사용자가 스스로 내 홈페이지를 찾아와서 새 버전을 설치해야 한다.

3. 잡설: 날개셋 한글 입력기와 관련된 팩트들

이 프로그램의 연구 개발과 관련된 활동은 개발자의 대학교 학· 석사 시절에 일부 학점과 졸업 논문을 책임졌다. 그리고 정보 올림피아드를 포함한 소프트웨어 공모전 입상은 덤.

2014년 8월 현재 작업 중인 프로그램의 전체 코드는 6만 7천 줄 정도이지만, 개발자의 특이한 코딩 스타일을 감안했을 때 실제로는 10만 줄을 훨씬 넘는 분량일 것이라 추측되고 있다. (한 줄에 여러 statement를 100칼럼씩 꼭꼭 채워 집어넣기)

이 프로그램이 취급하는 모든 숫자들은 정수이다. 부동소수점 연산은 전혀 존재하지 않는다.

이 프로그램을 구성하는 모든 기계어 코드들은 100% 1인 자작이다. 내부에 타인의 작업물이나 오픈소스 프로젝트 같은 걸 인용한 것은 전혀 없다. 수식 해석, XML 파싱 등등도 전부 자체 제작이다.

이 프로그램은 웹브라우저조차 없는 Windows 95 / NT4 (물론 32비트 에디션 기준) 초창기 판에서도 바로 실행과 사용이 가능할 정도로 특수하게 빌드되었으며 API 최적화가 정밀하게 돼 있다.
한글이 굳이 최신판 컴퓨터과 OS에서야 활용 가능할 정도로 무겁고 복잡한 문자가 아니기 때문에, 이를 활용하는 프로그램도 최대한 가볍게 만들어졌다. 특히 편집기는 마치 기계식 타자기를 컴퓨터로 옮겨 놓은 듯한 아주 작고 가벼운 프로그램이 컨셉이다.

그러면서도 64비트 Windows 7/8이 제공하는 최신 문자 입력 프로토콜도 완벽하게 지원한다.

이 프로그램의 개발 목표는 한글로 무슨 공허한 마술을 부리거나 세계 정복을 하는 게 아니라, 그냥 지금 한글로 당연히 할 수 있는 모든 기술적 가능성을 열어 놓는 것이다. 그 당연한 일이 지금까지 별로 가능하지 않았기 때문에..;;

이 프로그램은 국내에서는 주로 (1) 세벌식 관련 고급 기능, (2) Shift+Space로 한영 전환, (3) 옛한글 처리 (4) 한글과 여타 외국/특수 문자 병행 입력의 목적으로 사용되나, 외국에서는 오로지 (5) 한글 로마자 입력 방식 때문에 입에서 입으로 소문이 퍼지며 사용되고 있다.

Posted by 사무엘

2014/09/15 08:23 2014/09/15 08:23
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1007

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

Leave a comment

<날개셋> 한글 입력기 7.5

추석 연휴의 끝과 함께 <날개셋> 한글 입력기 새 버전 소식이 기다리고 있다.
7.5. 7.x 중반을 나타내는 좋은 번호이고, 7.4 이후로 기간도 100여 일 남짓 지났으니 시기도 적절하고, 프로그램 역시 그에 걸맞은 충분한 성장을 이뤘다.

단, 이번 버전은 지난 7.4에서 첫 도입된 '고급 입력 스키마' 쪽은 부득이 완전히 아웃 오브 안중이 되었으며 바뀐 것이 거의 없다. 그건 더 후대 버전의 작업으로 우선순위가 밀려났다.
그 대신 7.5에서 집중적으로 한 것은 바로 한글 타자 순서 재연과 연속입력 가능 판단 알고리즘을 처음부터 완전히 다시 만든 것이다. 그리고 두벌식 도깨비불 처리 관련 알고리즘들을 아작을 냈다. 더 구체적으로는,

'일반 두벌식'과 '두벌식 종성' 타입,
그리고 '특수 도깨비불 규칙'과 '초-종 공유 결합 도깨비불 규칙'이
입력, 도깨비불 처리, 역도깨비불 재현, 입력 순서 재계산 기능 등과 연계되었을 때 최대한 일관성 있게 동작하게 했다.
7.4에서 닦은 기초를 바탕으로 앞으로 한 10년은, 어쩌면 영원히 더 고칠 필요가 없을 정도의 퀄리티를 자랑하는 코드가 완성되었다. 이번 여름방학의 최대 성과이고 소득이다. 유용하게 사용하시기 바란다.

1.
예전에는 '두벌식 종성' 날개셋문자를 사용한 "Microsoft 두벌식"을 불러온 뒤,
'틀간 근하 때는' 같은 단어를 "문자열을 글자판 입력으로" 필터로 변환해 보면..
연속 입력이 불가능하다고 글자 사이에 가운뎃점이 잘못 찍히는 문제가 있었다. 이는 오류이다.

그리고 7.4 버전에서는 <날개셋> 고급 입력기가 제공하던 글쇠 치환 규칙의 '음절 강제 분리' 옵션이 없어지고 '한글 로마자 입력기'는 오토마타의 O변수를 통해(두벌/세벌 날개셋문자) 음절 강제 분리 여부를 결정하게 바뀌었다.
그런데 예전의 입력 순서 재계산 알고리즘은 이 O변수를 제대로 감안하지 않았기 때문에 이로 인해 입력 순서를 제대로 못 찾는 문제를 일으켰다.

<날개셋> 한글 입력기에 7.5 이전과 같은 골격으로 한글 입력 순서를 찾는 기능이 처음으로 도입된 건 무려 2.3 버전부터이다. 그리고 연속 입력 가능 여부를 찾는 기능은 3.9에서 추가되었다. 그 뼈대에다가 특수 도깨비불, 초-종 공유 결합 규칙, '두벌식 종성' 날개셋문자 등 새로운 옵션들을 추가로 감안하는 기능이 추가되어 왔으나 로직이 완전하지 못하고 이런 저런 한계가 있었다. 결국, 이런 식의 개선에는 한계를 느끼고 해당 알고리즘을 처음부터 완전히 다시 작성했다.

기회가 되면 옛날 코드에는 무슨 문제가 있어서 저런 오동작을 했는지도 좀 추적하고 싶었으나 차마 그러지는 못했다. 여기는 정말 <날개셋> 한글 입력기의 소스 코드 전체에서 다섯 손가락에 꼽힐 정도로 복잡하고 난해한 부분이다. 이 의문의 해답은 미제로 남게 되었다.

2.
입력 순서 탐색 알고리즘을 다시 만들면서 꽤 중요한 변화가 생겼다.
이 프로그램은 A라는 낱자를 입력하는 규칙을 찾을 때 반드시 A 자체를 조합하는 것부터 생각한 뒤, 거기서 답이 없으면 A에 대응하는 가상 낱자들을 찾게 했다. 그리고 가장 짧은 것부터 찾고, 길이가 같으면 가능한 한 일반 문자열 key를 숫자· 기호나 Shift 윗글쇠보다 더 선호하게 했다.

이것은 몇 가지 중요한 변화를 수반하는데..
지금까지는 이중모음 정석을 강요하는 세벌식의 경우 이중모음용 ㅗ,ㅜ가 실제 ㅗ,ㅜ에 대응하고 홑모음 전용 ㅗ,ㅜ는 해당 낱자에 대응하는 가상 낱자로 표현하는 게 관례였다.
그러나 이제부터는 홑모음 전용 ㅗ,ㅜ가 실제 ㅗ,ㅜ에 대응하고, 이중모음용 ㅗ,ㅜ가 가상 낱자로 역할이 바뀌었다.

이 경우 겹모음을 만드는 낱자 결합 규칙도 ㅗ+ㅏ=ㅘ가 아니라 500+ㅏ=ㅘ와 같은 식으로 다 바뀌어야 하는데 이런 불편을 감수한 이유는... 한글 입력 순서를 찾는 알고리즘이 정확하게 동작하게 하기 위해서이다.
겹모음용 ㅗ,ㅜ뿐만 아니라 홑모음용 ㅗ,ㅜ까지 전부 /, 9키로 연결되는 현상을 방지하기 위해서이다. V,B부터 먼저 살펴본 뒤 이 글쇠로는 겹모음을 만들 수 없을 때 가상 낱자에 대응하는 /,9를 살펴보게 된다.

기본 글자판 설정, 한글 로마자, 복벌식, 신세벌식 등 기존 빠른설정이나 입력 예제들도 다 이런 방식을 반영하도록 바뀌었다. 이건 만만찮은 작업이었다.

3.
<날개셋> 한글 입력기가 제공하는 두벌식 도깨비불 현상은 크게 세 가지 종류가 있다.

  • 그냥 맨 마지막 한 타가 다음 글자로 이동하고 그 직전까지 입력되어 있던 종성(만약 있다면)만 남는 일반 도깨비불
  • 입력 과정과 상관 없이 지정된 규칙대로 종성과 다음 글자 초성을 일괄 결정하고 필요하다면 초성의 일부 입력 순서를 재연하는 특수 도깨비불 (3.9에서 추가)
  • 애초에 종성을 두 뭉치로 나눠서 한쪽 뭉치를 그대로 다음 글자로 넘기는 '초-종 공유 낱자 규칙'에 따른 도깨비불 (6.0에서 추가)

이번 7.5부터는 마지막의 초-종 공유 낱자 결합 규칙에 의해 발생한 도깨비불도 예전의 초성 입력 순서를 그대로 유지하게 되었다.
예를 들어 나랏글 입력 방식을 가져와서 '슬퍼'를 입력한다. 그 '퍼' 상태에서 bksp를 누르면, 지금까지는 초성 ㅍ은 입력 순서가 보존되지 않고 한 타 만에 바로 지워졌지만, 이제는 이것도 ㅍ-ㅂ-ㅁ의 순으로 지워진다.

그리고 이것과 관련하여 더욱 획기적인 변화가 생긴 부분은 bksp 역도깨비불 재현 기능이다.
1.0 이래로 지금까지는, bksp 조작으로 인해 현재 두벌식 타입의 자음이 "한 타밖에 안 남았고" 그게 앞 글자의 종성으로 결합이 가능하면 그걸 자동으로 앞 글자에다 붙이는 방식으로 동작했다.

그러나 이제는 굳이 한 타 이상이더라도 이 자음 전체가 앞 글자와 결합 가능하면 그걸 한꺼번에 앞 글자에다 붙이게 했다. 그래서 나랏글 기준으로 '을' 뒤에서 '파'를 입력하고 있다가 ㅏ를 지우면 굳이 ㅁ까지 안 가더라도 ㅍ이 곧바로 붙어서 '을'이 '읊'으로 바뀐다. 그리고 그 상태에서 또 bksp를 누르면 바로 '을'이 아니라 ㅂ과 ㅁ을 거치게 된다. ㅍ을 조합하는 전과정이 '을' 이후로 붙었기 때문이다.

단, 아무 상황에서나 이렇게 한꺼번에 붙는 게 아니며 여기에는 중요한 단서가 있다. 그리고 이게 진짜로 중요한 점이다.

첫째, 추가로 붙음으로써 예전 낱자로의 순환이 발생하지 않아야 한다.
천지인 입력 방식은 같은 글쇠로 ㄴ과 ㄹ이 순환하는데, 예전에는 '길나' 같은 단어를 입력하고 있다가 '나'의 ㅏ를 지우면 ㄴ이 앞의 받침 ㄹ과 바로 붙어서 '길'이 '긴'으로 바뀌곤 했다.
이것은 일반적으로 바람직한 동작이 아니었을 것이다. 이 '긴'은 ㄴ→ㄹ에서 다시 ㄴ으로 되돌아온 것으로 여겨지기 때문에, 이 상태에서 bksp를 누르면 ㄹ이 복원되는 게 아니라 ㄴ이 완전히 없어지기 때문이다. 7.5부터는 그렇게 예전 낱자로 순환이 발생하는 상황에서는 역도깨비불이 발생하지 않는다.

둘째, 역도깨비불이 발생한 상태에서 다시 모음을 입력했을 때, 역도깨비불 이전 상태로 복원이 가능해야 한다. 두벌식 옛한글 입력 방식에서 받침 ㄹ 다음에 초성 ㄲ으로 시작하는 글자를 입력했다가 bksp를 누르면.. 이들은 받침 ㄹㄲ으로 한꺼번에 넘어간다. 하지만 초성 ㄲ을 ㄱ+ㄱ으로 입력했을 때는 그렇게 넘어가지 않으며, ㄱ이 하나만 남았을 때만 받침 ㄺ으로 넘어간다.
왜냐하면 ㄹㄲ 다음에 모음을 입력하면 다음 글자의 초성은 마지막 한 타만 돌아와서 ㄱ이 되지, 원래대로 ㄲ이 되지느 않기 때문이다.

이런 경우까지 일일이 다 고려해서 프로그램의 두벌식 처리 방식이 크게 강력해졌다. 두벌식 옛한글이든, 천지인이든 결국은 다들 연속 입력이 안 되는 경우라는 공통점이 있다. 다중타를 주고받는 게 가능해졌는데 원래 형태대로 복원이 가능할 때에만 한해서 그렇게 해 준다고 생각하면 정확하다.

4.
그 외에,
(1) 한글 입력 중에 오토마타는 nonzero 값을 되돌렸지만 낱자 결합이 불가능하거나 허용 한글 범위에 걸려서 더 조합이 안 되는 경우, <날개셋> 한글 입력기는 A,B,C에 모두 0을 주고 지금 상태에 대한 오토마타 수식을 재계산한다.
하지만 이때에도 원래 A~C에 무슨 값이 들어있었는지를 I~K 변수를 통해 알 수 있게 했다.

이것이 적용된 경우로는 나랏글 오토마타의 2번 상태 "B ? 2 : C ? 3 : J ? -1 : 0"이다.
모음(J)의 경우 더 결합이 되지 않으면 다음 글자로 넘어가지 않고 입력을 무시(-1)한다. ㅣ+ㅣ=ㅣ 같은 결합 규칙을 추가하는 대신 오토마타 차원에서 이런 조치를 취할 수 있다.
물론 나랏글이라는 두벌식 입력 방식에서 2번 상태에 A=B=C=0이 날아오는 경우는 사실상 모음 입력 상황밖에 없기 때문에, 굳이 J 값을 체크 안 하고 바로 -1을 줘도 문제될 건 없지만, 저게 논리적으로 더 엄밀하다.

(2) 또한 단축글쇠 규칙에서 입력기 전환 수식뿐만 아니라 날개셋문자 전달 수식에도 현재의 입력 항목 번호를 나타내는 A 변수가 추가되었다. 그래서 같은 글쇠라도 지금 사용하는 입력 항목이 무엇이냐에 따라서 서로 다른 글쇠를 되돌리는 게 가능해졌다.

(3) 제어판의 '낱자 처리' 페이지에서 '글쇠배열에 있는 낱자만' 옵션의 알고리즘이.. 초-종 공유 낱자 규칙을 반영하여 종성 부분을 더욱 정확하게 표시하게 개선되었다.
또한 지금까지는 유니코드 표준 영역에 없는 낱자도 회색이고 글쇠배열에 없는 낱자도 회색으로 표시되어 색깔이 겹쳤기 때문에, 후자는 주황색이라는 완전히 새로운 색으로 표시되게 동작을 수정했다.

(4) 꽤 오랜 기간부터 존재했던 문제로 추정되지만 정말 늦게 발견되고 수정되었다.
제어판의 '시스템 계층-외부 모듈 관리'에서, 각종 입력기들의 아이콘이 64비트 에디션에서는 제대로 표시되지 않았다. 운영체제가 기본 제공하는 여러 IME들이 동일한 아이콘으로 출력되는 문제가 있었는데 이번에 수정되었다..

(5) 그리고 간단하지만 의외로 유용한 숙원을 하나 이뤘다.
외부 모듈에서 제어판에서 '활성화' 버튼으로 active 글자판(입력 항목)을 바꾼 것이
시스템의 한/영 상태 제약이 없이 언제나 그대로 반영되게 했다.

지금까지는 <날개셋> 제어판에서 입력 항목을 바꾼 것은 운영체제 차원에서 내부적으로 관리하고 있는 해당 프로그램의 한/영 상태를 결코 바꾸지 않았다.
그래서 한글 글자판을 쓰다가 빈 입력 스키마로 변경을 할 수 없었으며, 이미 한글 모드여야만 같은 한글 세벌식, 한글 두벌식 등등끼리 전환이 가능했다.

시스템 일관성 차원에서 유지하고 있던 제약인데, 그 경우 시스템의 상태도 바꾸면서 글자판도 사용자가 설정한 것으로 바꾸게 하니까 훨씬 더 편하다.

(6) 저렇게 입력기 API가 다 뒤집어엎어졌으니 타자연습도 불가피하게 업데이트되었다.
그냥 재빌드만 된 게 아니라 예전에도 말했듯이 새 연습글에서 발견된 수십여 군데의 오타를 바로잡기도 했으니 업데이트가 마냥 아까운 삽질은 아닐 것이다.

Posted by 사무엘

2014/09/12 08:33 2014/09/12 08:33
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1006

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

Comments List

  1. 지나가며 2014/10/27 17:14 # M/D Reply Permalink

    한글 3벌식을 위해 애쓰시는 것에 대해 감사하게 생각합니다.
    한글 입력기를 사용해 보겠습니다.
    저도 3벌식을 오랫 동안 사용하고 있지만, 자녀에게는 3벌식을 가르치지 않고 지가 알아서 공부하도록 방치하고 있습니다. 그것은 아무래도 아직까지 3벌식을 사용하는 것이 여러 모로 불편한 점이 있었기 때문입니다.
    2벌식에도 문제가 많지만, 당장 3벌식을 가르치자니 너무 힘든 측면이 있다고나 할까요.

    정치적인 견해에 대해서는 저하고 다소 차이점이 있는 것 같습니다.
    기본적으로 대한민국은 민주공화국입니다. 민주공화국을 파괴했던 독재세력에 대항해서 다시 민주공화국으로의 위상을 되찾았습니다. 독재세력을 필요악이라고 할 수도 있지만, 필요하지만 악은 분명히 악이라는 것을 인정해야 합니다.
    물론 이 세상에 절대 선은 없습니다. 하지만 현대 헌법에 따른 민주국가에서는 독재란 분명 체제를 붕괴시키는 악입니다. 꼭 공산주의만 그런 것은 아니지요. 공산주의와 전체주의는 모두 뿌리가 같습니다. 대등한 권력관계가 아니라 특정부류에게 권력을 집중시킨다는 점이지요. 인간의 악을 견제 균형할 수 없는 수단을 제거하는 것입니다.
    박정희와 김일성은 같은 존재입니다. 박정희가 김일성을 막은 것이 아닙니다. 둘은 서로 공생했지요.
    민주주의적 사고방식으로 보면 이것은 너무 자명할 것입니다. 민주주의적 견지로 보면, 박정희와 김일성은 모두 민주주의에 대한 적입니다.

    1. 사무엘 2014/10/27 20:01 # M/D Permalink

      세벌식 자판에 관심을 가져 주셔서 고맙습니다.
      다만, 그냥 MS 한글 IME로도 세벌식 자판 자체는 얼마든지 쓸 수 있으니 제 프로그램은 특별히 사용하고 싶은 customize 기능이 있을 때 시도해 보셔도 됩니다.

      정치 쪽은 죄송하지만 상대방 말을 들을 의향이 없는 분(본인과 견해가 다른 사람이 아님)과의 논쟁은 극구 사양하오니, 자신이 그런 속성에 해당하는지 다시 한번 생각해 보시기 바랍니다.
      안보가 탄탄하고 등 따시고 배가 불러야 그 뒤에야 민주화고 뭐고 더 고차원적인 욕구를 추구할 수 있지요. 남북 지도자를 그렇게 판단하는 것은 북한 주민들에 대한 모독이며, 올바른 판단이 전혀 아닙니다.
      저는 아무 근거 없이 주장을 하는 게 아니니, 굳이 제 사상을 안 바꿔 놓고는 못 견디겠다면 '현대사/안보' 카테고리 글을 먼저 정독은 해 보실 것을 권합니다. 감사합니다.

  2. wishdon 2015/07/09 15:15 # M/D Reply Permalink

    안녕하세요, 세벌식 최종 사용자입니다. 날개셋 입력기 너무 잘 쓰고 있습니다. 감사합니다.
    날개셋 입력기는 다양한 입력 방식을 테스트 해볼수 있어서 정말 좋은것 같습니다.
    제가 아는 한도내에서는 동시치기를 할 수 있는 가장 좋은 입력기 입니다.
    그런데, 한가지 의문점이 들어서 덧글 남겨봅니다.

    혹시 `500 + 중성'은 합성을 하지만 `중성 + 500'은 합성은 하지 않고 있는것 아닌지요?
    "과"를 입력할 때, "이중모음 정석 강요+받침은 한타로만+세벌식 모아치기2"에서
    "ㄱ + ㅗ(500) + ㅏ"은 "과"가 되지만 "ㄱ + ㅏ + ㅗ(500)"은 "가 ㅗ" 가 됩니다.
    다른 옵션들로 거의 완벽한 동시치기가 되는데 딱 이경우 하나가 걸리네요.
    제가 잘 못이해하고 있는건지, 이 상황을 처리할 방법이 있는지 문의드립니다.

    감사합니다.

    1. 사무엘 2015/07/09 15:55 # M/D Permalink

      안녕하세요? 딱 최소주의에 입각한 형태로 세벌식 최종 글자판을 사용하고 계시네요.
      A+B뿐만 아니라 B+A도 조합되게 낱자 결합 규칙을 직접 넣어 주면 됩니다.
      "낱자 처리 → 중성"에서 "ㅏ+ㅗ(500) → ㅘ"를 추가해 보세요. 감사합니다.

Leave a comment

<날개셋> 한글 입력기는 도대체 왜 만들어도 만들어도 또 만들 게 끝도 없는 걸까? 미치겠다. ㅠ.ㅠ 이거 좀 진지한 고민거리이다. 누가 이 마약 같은 코딩의 노예계약으로부터 나를 좀 해방시켜 줄꼬.

난 기술을 매우 긍정적으로 보지만, 한편으로 IT 쪽은.. 이제 어지간히 만들어질 거, 나올 건 다 나오고 한계에 도달하지 않았나 하는 회의감도 어느 정도 갖고 있다. Windows도 그렇고 Office도 그렇고.. 소프트웨어 업그레이드의 여파가 이제 예전만 하지 않다.

그러나 <날개셋> 한글 입력기에 관한 한은 상황이 다르다. 여전히 만들어 질 거, 나올 것들이 다 완성된 상태가 아니다. 이건 긍정적인 상태라고 해석해도 될 것 같다.
이 글에서는 <날개셋> 한글 입력기 7.4에 대해서 미처 제대로 공지가 안 되었던 변화 사항과 다음 버전 개발 근황 등을 전하도록 하겠다.

※ 7.4 버전의 잠수함 패치 내역

1.  고급 입력기의 사용자 정의 조합은 이제 언제나 '일반 문자' 타입의 날개셋문자만을 인식한다. 한글 타입(두벌식, 세벌식 등)의 날개셋문자를 0x11??대의 글쇠로 자동으로 인식하는 기능은 없어졌다.
이것은 동작 방식의 간결화를 위해 취해진 조치이다. 한글 자모나 글자를 이용하여 사용자 정의 조합을 만드는 것은 7.4의 고급 입력기에서 추가된 '한글 출력 치환' 기능으로 구현해도 된다. 더 전문적인 대체 기능이 생겼다.

2. 기본 입력기의 글쇠배열 수식에서 이제는 A와 C 변수가 제공되지 않는다. 이것은 사실 디자인상의 실수에 가까운 잉여일 뿐이었다.
글쇠가 눌러질 때 Alt 키가 눌러져 있으면 A에, Ctrl 키가 눌러져 있으면 C에 nonzero 값이 들어왔다. 그러나 7.4부터는 기본 입력 스키마의 기본 94개 글쇠는 언제나 Alt, Ctrl이 눌러져 있지 않을 때만 동작하게 동작이 바뀌었으며 해당 변수는 제공하지 않는다. Alt/Ctrl까지 동원해야 하는 복잡한 글쇠 조합은 고급 입력 스키마로 구현하면 되고, 또 기본 입력 스키마에도 그런 사용자 정의 글쇠 배당 기능이 6.5 버전에서부터 따로 추가되었으므로 이를 활용하면 된다.

지난 7.4 버전은 긴 시간 동안 한글 입력 관련 기존 코드들을 싹 정리하면서 각 개체와 계층들의 역할을 재정리하고 프로토콜도 다시 설계했다. 즉, 리팩터링의 비중이 컸다. 그러면서 이런 미세한 기능들은 좀 예고 없이 변경해도 여파가 별로 없겠다 싶은 것들을 과감하게 뜯어고쳤다. 그랬는데 본인은 <날개셋> 한글 입력기 헤비 유저들의 창의성을 너무 얕잡아 봤던 듯하다.

7.4의 공개 직후에, 잠수함 패치 때문에 예전에 되던 기능이 갑자기 안 되어서 불편을 겪으신 분께 사과드리며, 앞으로는 이런 변화는 충분히 예고를 드리도록 노력하겠다.
특히 고급 입력 스키마의 새 기능을 적극 사용하면서 여러 질문과 버그 신고를 해 주신 김 기윤 님께 감사드린다.

※ 다음 버전 개발 근황

7.4는 큰 버그 없이 잘 만들어진 듯하다. 딱 이 정도 만들어졌을 때 커트를 하여 새 버전을 내놓은 것도 매우 적절했다.
새로 추가된 고급 입력 스키마에서 이것저것 미흡한 점과 개선할 점들이 보이지만 그건 시간과 여유의 부족으로 인해 애초에 고려를 못 했던 부분들이다. 새 기능으로 인해 기존 기능에서 예기치 못한 오동작이 발생한다거나 프로그램의 안정성과 관련된 치명적인 버그가 생긴 것은 없다.

7.4의 다음 버전은 7.5로 계획하고 있다. 7.4를 마무리 지으면서 나머지 잔여 기능들은 하반기에 나올 다음 버전을 기약하기로 그때부터 이미 결정을 해 놨다.
다음 버전의 개발 방향은 (1) 7.4에서 미처 못 끝낸 입력 엔진 리팩터링과 개선, (2) 고급 입력 스키마의 기능 마저 구현, (3) 기타..로 나뉜다. 다만, 이것저것 넣고 싶은 기능들을 다 구현한다면 변화량이 7.5 수준을 초과할지도 모른다.

(1) 고급 입력기의 기능을 활용하고 나면, 두 글자 이상 길이의 조합을 만드는 게 가능해진다. 그러나 조합 중에 C0|0xD (앞쪽으로 조합 중단) 같은 특수글쇠를 집어넣어 보면, 현재는 정확하게 조합의 앞에 cursor가 놓이는 게 아니라 조합의 뒤에서 한 글자 앞에 cursor가 놓이게 된다. 기본 입력기의 기능만 활용해서 한글 한 글자만 조합 중일 때에야 이런 동작 방식이 문제가 없지만, 범용성 면에서 이런 동작 방식은 문제가 있다.

이렇게밖에 할 수 없는 것은 내부적으로 여러 한계가 있기 때문인데, 이 한계를 극복하는 작업을 7.4에서 완전히 마무리 짓지 못했다. 그래서 다음 버전에서는 이를 지체없이 이어서 진행할 예정이다.

또한, 한글로부터 입력 순서를 찾아내는 알고리즘, 인접한 두 한글의 연속 입력 가능 여부를 판별하는 알고리즘을 처음부터 깔끔하게 다시 작성할 예정이다. 지금 작성된 코드는 긴 세월이 흐르면서 나중에 추가된 특수 도깨비불 규칙, 종성 지향 두벌식, 오토마타의 O 변수 같은 복잡한 기능들을 정확하게 반영하여 처리하지 못하며 구조적으로 확장하기도 어려운 형태이다.

주어진 입력 설정으로부터 최적의 한글 입력 sequence를 찾는 알고리즘은 한글 입력기가 제공할 수 있는 가장 유용하고 멋진 자동화 기능이므로 올여름에 심혈을 기울여 재개발을 할 것이다.
뭐, 이것 말고도 지금 모든 내역을 밝힐 수 없는 다른 리팩터링 작업들도 남아 있음.

(2) 고급 입력 스키마에 아직 숙제로 남은 여러 미흡한 기능들을 개선하고, 본격적으로 한글 동시치기와 관련된 추가 옵션들을 구현할 예정이다. 세벌식 자판도 직전 한두 타를 아주 빠르게 누른다거나 하면 조합 중이던 자모가 다음 글자로 넘어가는 '도깨비불' 현상이 발생할 수 있게 된다.

(3) 이것도 모든 내역을 당장 밝힐 수는 없는 여러 이슈들이 현재 존재한다. 아, 입력 패드와 관련된 내용을 잠시 후에 언급하도록 하겠다.

한편, 타자연습은 다른 특이점은 없고 새 연습글들을 허겁지겁 추가하다 보니 오타가 생각보다 많이 발견되어 이걸 고쳤다. 버전 번호를 바꾸지는 않을 것이고, 입력기 새 버전이 나오는 날에 타자연습을 동일 버전으로 다시 배포할 생각이다. 그렇기 때문에 기존 3.4 사용자라면 지금 쓰는 타자연습을 제거한 후, 새 3.4를 받아서 다시 설치해서 사용하시면 될 듯하다. 연습글의 오타 신고는 지금까지 박 철현 님께서 가장 열성적으로 해 주셨다.

※ 입력 패드의 버그 수정

<날개셋> 한글 입력기의 구현체들 중 입력 패드는 7.11에서 7.4로 넘어가는 그 격변기에도 큰 변화가 없었으며, 얘는 앞으로 거의 건드릴 일이 없을 거라 여겨졌다.
그러나 다음 7.5 버전에서는 이 프로그램과 내부 hook DLL이 정말 오랜만에 좀 고쳐질 예정이다.

예전에 외부 모듈은 Excel이나 Paint.NET 같은 프로그램에서 한글을 처음 입력할 때 첫 타 조합이 끊어지거나 덧나는 등 자잘한 문제가 있었다. 엄밀히 말하면 내 프로그램의 로직에 문제가 있긴 하지만, 그 프로그램들이 또 좀 특이하게 동작을 해서... 서로 조심을 안 해서 발생하는 문제였다.

그래서 외부 모듈은 한동안 특정 프로그램에서만 인위적으로 다르게 동작하는 예외 로직을 넣어서 문제를 피해 갔었으나, 지난 7.4에서는 오랜 연구 끝에 그 문제를 드디어 완벽하게 해결했다.
그러나 그 방법이 외부 모듈 말고 입력 패드에는 적용되지 않아 있었다. 여전히 Excel에만 예외 로직이 적용되어 있었으며, Paint.NET 같은 다른 프로그램에서는 글자가 덧나는 문제가 남아 있었다. 단지 입력 패드는 편집기나 외부 모듈보다 훨씬 덜 쓰이는 잉여 프로그램이기 때문에 문제의 심각성이 덜 부각되었을 뿐이다.

그러다가 이번에 입력 패드에까지 새로운 해결책을 적용하여 그 문제를 해결했다.
원래 입력 패드는 hooking을 이용하여 변칙적인 꼼수를 부리며 동작하는 위험한 프로그램이기 때문에 이 문제는 외부 모듈만치 깔끔하게 해결하기가 어려웠다. 이 문제를 해결하느라 다른 부작용(side effect)이 생기지는 않았는지를 아주 꼼꼼하게 테스트해야 했으며 이 과정이 대단히 힘들었다.

또한, '한손 입력기'처럼 내부적으로 독자적인 문자 생성기를 가진 도구를 사용했다가 닫은 뒤에 '화면 키보드' 같은 다른 도구로 문자 입력을 시도했을 때 프로그램이 죽는 문제를 해결했다. 늘 나타나는 현상이 아니어서 그저 그러려니 싶었는데.. 확실하게 코딩 실수가 있는 걸 발견했다. 이 두 가지 버그가 현재 해결되었다.

system hook 프로그래밍을 해 본 분들은 아시겠지만, hook을 사용하는 프로그램이 hook을 해제하고 종료한 뒤에도 어찌 된 일인지 그 hook DLL은 오랫동안 메모리에서 완전히 제거되지 않고 남아 있는 경우가 많다. 그래서 그 hook DLL의 소스를 고쳐서 다시 빌드를 하려 해도 덮어쓰기가 안 되고 진행이 안 되는 경우가 많다.

자잘하게 코드 한두 군데만 고친 뒤 결과를 확인하려고 하는데 매번 운영체제 로그인을 다시 해서 상태를 초기화해야 하니, hook 개발은 IME 개발보다도 더 불편한 애로사항이 있었다. IME는 그래도 프로그램만 확실히 종료하고 나면 업데이트가 안 되는 불편은 없기 때문에 말이다. 예전에 XP/Vista 시절에는 명령 프롬프트 디버깅을 한 뒤에는 conime.exe를 매번 죽여 줘야 해서 불편했지만, 그건 7부터는 개선됐다.

아무튼 본인으로서는 문제를 최대한 해결하여, 지금 동작이 예전의 문제를 해결하면 해결해서 더 낫게 만들면 만들었지, 최소한 예전보다 상태를 더 '나쁘게' 만든 것은 없음을 확인했다. 말은 이렇게 했는데 또 버그가 발견되면 그러면 할 말이 없긴 하지만...

여담인데, Internet Explorer의 웹페이지 내부에 있는 폼에다가 입력 패드로 문자를 입력해 보면,
IE 10까지는 조합이 일반적인 IME로 한글을 입력할 때와 마찬가지로 본문에다 네모 사각형 모양으로 제대로 생긴다. 그러나 유독 IE 11부터는 조합이 그렇게 처리가 안 되고 마치 IME-aware하지 않은 프로그램처럼 프로그램 밖의 조합 창에 따로 생기는 형태로.. 시각적인 피드백이 좀 불편해졌다. 어째 이런 것에도 미세한 변화가 생겼다.

※ 기타 공지

1. 다음 버전에서는 문자 생성기를 가리키는 명칭에 날개셋이라는 단어가 빠지고, 입력 스키마의 명칭과 마찬가지로 그냥 빈 / 기본 / 고급이라는 3단계 수식어만 붙을 예정이다. '빈 입력기, 기본 입력기, 고급 입력기'.
날개셋이라는 이름이 왜 지금까지 있었느냐 하면, 오토마타라든가 각종 특수글쇠처럼 <날개셋> 한글 입력기의 가장 중요한 핵심 기능들이 구현된 계층이 문자 생성기이기 때문이다. 쉽게 말해 상징적인 의미 때문이다. 하지만 그건 군더더기라 여겨져서 다음 버전부터는 빼게 되었다.

2. <날개셋> 한글 입력기가 버전을 매기는 방식은 통상적인 소수점과 완전히 동일하다. 가령, 버전 7.4와 7.40은 동일한 표기이며 7.4는 7.11보다 더 높은 버전이다. 다만, 공식적으로는 끝의 0은 생략하여 7.40 대신 7.4라고 표기하는 것을 권장· 선호한다.

3. 그리고 이것도 한 번쯤 언급할 필요가 있어서 입장을 확실히 밝히고자 한다. <날개셋> 한글 입력기는 브랜드 이름을 지금까지 less than과 greater than 부호로 감싸는 이상한(?) 관행이 존재해 왔다. 이것은 세벌식 최종 글자판이 ()와 <>를 아랫글쇠로 입력할 수 있다는 것에 착안하여 별 생각 없이 붙이게 됐는데..
반드시 강요는 안 한다. 파일 이름이나 HTML 태그 같은 상황에서 <>를 붙이기가 대략 난감할 때는 얼마든지 생략해도 된다. 영문 표기에서도 당연히 생략.
하지만 한글로 full name을 공식 표기할 때는 <>를 넣는 것을 원칙으로 삼고자 한다. ㅎㅎ 여기에도 이런 내력이 있는 셈이다.

4. 진짜 마지막으로... 간단한 내용이지만 최근에 문의를 한 분이 있어서 또 공지하도록 하겠다.
입력기와 타자연습을 모두 사용하시는 분이라면, 두 프로그램을 모두 최신 버전으로 업데이트할 것을 강력하게 권한다.

타자연습도 실행에 필요한 최소한의 파일들은 자체적으로 모두 갖추고 있으며 입력기와 독립적으로 동작하는 게 가능은 하다. 그러나 입력기와 타자연습이 서로 API 호환이 되지 않으면 타자연습은 입력기의 모든 기능을 100% 활용할 수가 없게 된다. 특히 플러그 인을 사용할 수 없게 되기 때문에 고급 입력 스키마나 고급 입력기 같은 기능을 사용한 입력 설정이 무용지물이 된다. 반드시 업데이트를 해야 한다.
이번에 타자연습은 3.31 이후 거의 1년 반 가까이 버전업이 없다가 3.4로 업데이트됐기 때문에 문의가 들어올 만도 했던 것 같다.

Posted by 사무엘

2014/07/10 19:32 2014/07/10 19:32
Response
No Trackback , 5 Comments
RSS :
http://moogi.new21.org/tc/rss/response/983

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

Comments List

  1. 김재주 2014/07/16 21:07 # M/D Reply Permalink

    DLL Code Hotswapping이 되면 참 개발자 입장에서 편할 텐데 말이죠. 부작용도 그에 못지 않게 심할려나.

    1. 사무엘 2014/07/17 06:21 # M/D Permalink

      그러게 말예요. ㅎㅎ 다만, 실행 중인 모듈들을 함부로 못 고치는 현행 방식이 Windows NT 개발 당시에는 성능/효율상의 장점이 있으니 도입됐던 것일 테고, 지금은 보안의 관점에서 유리하게 작용하는 것도 있을 것 같습니다.

  2. 김국 2014/07/19 22:07 # M/D Reply Permalink

    정부연구과제로 컴퓨터 키보드 현황과 표준화 방향을 연구합니다. 설문조사를 하고 있는 중인데, 설문지에 관심이 있는 분은 제게(kimkuk99@daum.net)로 간단한 소개(성명, 관심, 소속 필요한 만큼)와 이메일 주소를 보내주세요. 감사~

  3. 김승권 2014/09/03 09:02 # M/D Reply Permalink

    안녕하세요. 날개셋 프로그램 정말 잘 쓰고 있습니다.
    이렇게 값없이 좋은 프로그램을 쓸 수있게 해주셔서 무한 감사드립니다.

    1. 사무엘 2014/09/03 11:17 # M/D Permalink

      감사합니다~ 좋은 일을 하고 계시네요! ^^ 아래아한글 밖의 프로그램에서 옛한글을 입력할 목적으로 사용하고 계시는가요? 메일은 답장을 드렸습니다.

Leave a comment

<날개셋> 한글 입력기 7.4-- 下

* 하편에서는 지난 상편보다 좀 더 실무(?)스러운 세부 기능과 안정성 위주의 얘기가 나올 것이다.

5. 글자판 전환 단축글쇠의 지능화

PC용 문자 입력 프로그램에서는 키보드 연타를 좀 더 똑똑하게 인식하는 기능이 확실히 있긴 해야 하는 것 같다.
지난 7.1 버전에서는 bksp를 연타할 경우, 최초에 선택되었던 낱자/글자 삭제 단위를 그 다음 글자의 조합 상태와 무관하게 계속 적용하는 옵션을 추가했다. 이런 기능을 구현하려면 아무래도 예전 상태를 기억하는 변수가 있어야 하고 모든 key 동작을 감시하는 오버헤드가 불가피하지만, 그 오버헤드 이상으로 그건 사실 편리하고 필요한 기능이긴 했다.

bksp에 이어 이번 새 버전에서는 입력 항목(=글자판) 전환 단축글쇠에도 연타를 인식하는 로직이 추가되었다.
입력 항목 전환 수식은 10년 전의 3.0 이래로 지금 글자판의 번호를 나타내는 변수 A 하나밖에 존재하지 않았는데, 이번에는 연타 카운트를 나타내는 B, 전체 입력 항목 개수를 나타내는 N, 그리고 우리 직전에 사용하던 입력 항목 번호를 나타내는 C라는 여러 변수들이 추가된다.

여기서 연타라 함은 계속 누르고 있거나, 아니면 modifier에서 손을 떼지 않고 main key만 눌렀다 뗐기를 반복하는 걸 말한다. Shift+Space라면 shift는 꾹 누르고 있는 채로 space만 반복해서 누르는 것이다.

그렇다. Windows 8과 맥 OS에서는 이미 익숙한 관행일 것이다. 전자의 경우 Win 키를 누른 채로 space를 눌러서 IME를 고를 수 있으며, 맥의 경우 역시 Cmd+space를 1회만 누르면 직전에 사용하던 입력기와 내 것만 toggle되고, space를 여러 번 누르면 평소에 안 쓰던 다른 입력기를 고를 수 있다. 이 동작이 이제 <날개셋> 한글 입력기로도 가능해지는 것이다. 예를 들어,

B>0||C==A ? (A+1)%N : C

이런 수식을 배당하는 경우, 이 key가 연타 상태이거나(B>0) 글자판 전환을 처음 하는 상태라면 현재 존재하는 모든 입력 항목을 돌아가며 순회한다. 현재 입력기의 바로 다음 입력기(A+1)로 넘어가되, 이 값이 N과 같아지는 경우 도로 0으로 되돌리는 것이다(%N). 그렇지 않으면 내가 바로 직전에 사용하던 입력 항목 번호를 나타내는 C로 돌아간다.

세벌식과 쿼티, 두벌식과 드보락을 한데 배당해 놓고 있었는데 세벌식/쿼티이던 것을 세벌식/드보락으로 바꾸고 싶은 경우, 세벌식 상태에서 Shift를 누른 상태에서 Space를 몇 번 눌러서 드보락으로 이동시킨다. 그 다음부터 Shift+Space를 1회만 누르면 세벌식/쿼티가 아니라 세벌식/드보락이 된다. 마찬가지로 두벌식 전환을 하고 싶은 경우, 영문 자판 상태에서 두벌식으로 돌아가면 그 뒤부터는 두벌식/드보락 toggle이 된다.

이로써 오로지 0과 1 사이만 왕복하고 더 다양한 입력 항목을 사용하려면 별도의 단축글쇠를 추가하거나 불편하게 마우스를 동원해야 했던 번거로움이 사라지게 될 것이다.

6-1. 외부 모듈: 특정 프로그램에서 첫 타가 조합이 끊어지는 문제

이건 굉장히 오래 전에 작업이 완료된 아이템인데, 블로그 옛날 글을 읽어 보니 언급을 한 번도 안 한 것 같다. 그러니 지금이라도 좀 공지를 하도록 하겠다.

<날개셋> 한글 입력기 외부 모듈은 특정 프로그램에서 한글 입력을 곧바로 시작했을 때, 첫 타의 조합이 끊어지는 문제가 있었다. 대표적인 예가 MS Office의 엑셀. 얘만 좀 아래의 한글 IME에다가 특이한 이벤트를 날리는 게 있어서 '나라'라고 입력을 시작하면 'ㄴㅏ라'가 되곤 했다.
이 문제를 당장 피해 가는 건 물론 가능했다. 그러나 그 경우, 다른 프로그램에서 조합이 종료되어야 할 때 종료가 되지 않는 오동작이 발생하니 난감한 상황이 아닐 수 없었다.

그래서 <날개셋> 한글 입력기는 고육지책으로 외부 모듈은 자신이 동작하는 프로그램 EXE의 이름을 살펴서 엑셀 같은 '요주의 프로그램'이면 문제 회피 로직을 쓰고, 다른 프로그램에서는 그 로직을 쓰지 않는... 궁극의 지저분한 꼼수를 굉장히 오랫동안 사용해 왔다.
그런데 그렇게만 하니까 첫 타가 끊어지는 문제가 Paint .NET에서도 발생하고, 다른 듣보잡 프로그램에서도 종종 보고되면서 상황이 더욱 나빠져 갔다.

일단 난 응용 프로그램이 한글 IME를 도대체 어떻게 조작해야 첫 타를 끊어지게 만들 수 있는지, 어떻게 해야 저런 프로그램을 만들 수 있는지를 이해를 못 한다. 하지만 그럼에도 불구하고 7.4에서는 논란의 여지가 있던 부분을 없애고 오랜 연구 끝에, 문제를 일단은 이름 판별이라는 꼼수 없이 완벽하게 해결했다. 이런 미세한 동작 방식 같은 건 제대로 문서화도 돼 있지 않으니 정말 프로그래머가 경험을 알아서 축적하는 수밖에 답이 없다.

참고로 첫 타의 조합이 끊어지는 문제는, 첫 타가 아예 무시되고 씹히는 문제하고는 성격이 다르다. 후자 역시 다른 상황에서 예전에 <날개셋> 한글 입력기 외부 모듈의 버그로 종종 보고되곤 했다. ㅎㅎ

6-2. 외부 모듈: Windows 7의 명령 프롬프트에서 한글이 덧나는 문제

Windows 7에는 한글 IME의 세벌식 지원과 관련하여 이전의 XP/Vista에 없었고, 후대의 8에도 없는 전무후무한 이상한 문제가 하나 있다. 명령 프롬프트에서 한글을 입력하다가 space, 마침표, 숫자 등 비한글 문자를 입력하여 조합을 중단할 경우, 조합 중이던 한글이 덧나는 현상이 발생한다.

MS IME, 그리고 <날개셋> 한글 입력기도 동일하게, 그것도 오로지 윈도 7에서만 발생하기 때문에 이것은 IME 차원에서는 해결 불가능한 운영체제의 버그라고 간주되어 왔다.
단, MS IME로 두벌식을 쓸 때는 문제가 없는데, 두벌식의 경우 비한글 문자는 IME가 글쇠를 가로채어 직접 처리하지 않기 때문에 그렇다.

그랬는데.. 이번 7.4 버전으로 우연히 콘솔에서 한글을 입력해 봤는데.. 덧나는 현상이 없어져 있어서 깜짝 놀랐다. 윈도 7에서 세벌식으로 덧나는 현상 없이 한글을 입력하는 걸 난생 처음 본다. 저게 가능하구나!
구버전(= 현재 공식 최신 버전)인 7.11을 돌려 보니 문제가 발생하는데, 7.4를 돌리니 문제가 사라지는 게 확실하다.

도대체 무슨 변화가 생긴 건지? 저 6번하고는 영역이 다른 문제였을 텐데. 기대도 안 했던 버그가 별다른 작업 없이 저절로 해결돼 있으니 기분은 좋다만, 한편으로 좀 난감하네.

7. 타자연습

자, 입력기가 이렇게 완전히 머리부터 발끝까지 뒤집어 엎어진 동안, 타자연습도 변화가 하나도 없으면 좀 섭섭할 것이다.
입력기와 API 호환성이 다 날아갔으니 7.4 버전에 맞춰 다시 빌드되어야 한 건 두 말할 나위도 없거니와, 외형과 관련된 사소한 개선 사항이 좀 있었다.

프로그램의 16*16 소형 아이콘이 그 크기에 맞는 전용 아이콘으로 나오는 게 아니라 32*32 아이콘을 축소시킨 우중충한 형태로 지금까지 나오고 있었는데, 당장 그걸 개선했다. 개인적으로는 타자연습도 지금의 편집기나 변환기처럼 <날개셋> 한글 입력기 7.0 스타일의 동그란 네모 아이콘으로 바꾸고 싶으나, 그 작업까지 할 여유는 없다.

그리고 프로그램을 고해상도 DPI 모드에서 실행해서 UI 텍스트가 잘린다거나 하는 것을 모두 수정했다. 그 작업의 결과로 페이지의 우측 하단에 있던 “연습 시작” 버튼들이 예전보다 더욱 길쭉해지고 보기 좋아졌다. 이 역시 진작부터 개선할 생각을 왜 안 했나 모르겠다.

다음으로 장문 연습을 시작할 때 "연습을 시작합니다. 준비하세요"라고 메시지 박스가 번거롭게 뜨던 걸 없애고, 단문 연습과 마찬가지로 첫 타를 누름과 동시에 시간 측정과 경쟁 모드가 시작되게 했다. 인터페이스 개선에 기여할 것으로 보인다.

끝으로, 연습글을 상당수 교체했다. 세월을 안 타는 고전을 제외하고는 너무 구태의연하고 지금과 시기가 안 맞는 글은 삭제했다. 예를 들어 한글날이 공휴일에 국경일까지 된 마당에 한글날 국경일 지정을 촉구하는 글을 계속 남겨 둘 필요는 없으며, 월드컵 관련 글도 너무 오래 됐다고 판단하여 뺐다.
그 대신 다른 글을 넣고, 각종 인터넷 유행어 병맛 개그들을 넣었으니 타자 연습할 때 즐겁게 이용해 주시기 바란다. ^^

사실 게임도 업그레이드 시스템을 없애고 시간이 나면 시스템을 다 갈아엎고 싶었으나 도저히 손을 댈 수 없었다. 3.31에서 3.4로 번호를 작업량에 비해 좀 크게 올린 것은 거의 1년 반 만의 버전업이어서 시간 간격이 워낙 길었으며, 또 7.4와 끝자리를 맞춘다는 의미를 더 표현하고 싶었기 때문이다. 올해는 또 2014년이기도 하고.

8-1. 사소한 것: 최종 변환 규칙 UI

다른 카테고리에 분류되기가 뭣한 잡다한 얘기들은 다 여기에다가 집어넣었다.
<날개셋> 한글 입력기는 최종 변환 규칙이라는 게 추가된 무려 2.4 버전 이래로 지금까지..
입력값 from과 to를 접수하는 방식이 좀 괴이했다. 한 입력란에다가 from 문자와 to 문자를 붙여서 입력하고 '추가'를 눌러야 했으나.. 이번 7.4에서는 드디어 from과 to를 별도의 입력란에다 따로 입력하는 방식으로 UI가 직관적으로 개선되었다. 아래 그림을 참고하시라.

사용자 삽입 이미지

8-2. 떡밥 - JSON

이건 새로운 기능 얘기는 아니고 다른 잡설임.
<날개셋> 한글 입력기는 입력 설정 파일을 바이너리 고유 포맷뿐만 아니라 텍스트 에디터로 편집 가능한 XML 방식으로 저장하는 것도 꽤 오래 전부터 지원해 왔다.
그런데 텍스트 기반의 데이터 직렬화(serialize) 파일 포맷으로 XML뿐만 아니라 JSON이라는 물건도 있었구나. 얘도 보아하니 찰져 보이고 XML의 대체제가 될 수 있을 것 같다.

XML처럼 다단계 계층을 당연히 표현할 수 있으며, key-value 방식의 자료구조뿐만 아니라 배열을 통해 테이블 같은 단순 데이터 dump도 모두 손쉽게 표현할 수 있다는 게 마음에 든다. XML은 일단 후자에는 최적화돼 있지 않으니 말이다.
태그가 아니라 프로그래밍 언어의 데이터 초기화 코드에서 모티브를 땄다는 점도 참신해 보인다.

8-3. 떡밥 - 글꼴

<날개셋> 한글 입력기는 1.0 시절부터 내부 입력 프로토콜을 사용하는 자체적인 에디트 컨트롤을 갖추고 있었으며, 구현체들 중 편집기는 이 컨트롤을 기반으로 동작하는 텍스트 에디터이다. 그리고 자체 에디트 컨트롤은 16*16 비트맵 글꼴이라는 굉장히 원시적이고 똘끼 충만한 글꼴 체계를 고집하고 있다.

그것 자체는 이 프로그램의 특징이고 포기할 수 없는 특성이라고 치자. 운영체제에 의존하지 않고, TTF로는 상상도 할 수 없는 작은 크기의 조합형 글꼴로 옛한글과 미완성 한글을 출력하는 것을 애초에 목표로 삼았으니 말이다. 기계식 타자기를 컴퓨터에다 옮겨 놓은 듯한 날씬함을 개발 철학 차원에서 추구한 셈이다.

다만, 이거 하나는 대세를 무시할 수 없는 듯하다. 바로 화면 해상도. 옛날에는 16*16이라는 글자 크기가 운영체제 UI의 기본 글꼴보다 컸지만, 125% 내지 150% 배율을 쓰는 초고해상도 환경에서는 이것은 작은 크기이다.
같은 폰트라도 16픽셀을 18이나 20 정도로 확대해 주는 기능은 있어야 할 것 같다.

기능 자체는 화면에다 글자를 찍는 부분과 마우스 포인터 위치 인식 기능에다 간단한 비례식을 추가하는 정도로 구현할 수 있을 듯한데..
문제는 비트맵 그래픽을 출력하는 부분이다. 정수배 확대가 아니니 그래픽의 품질을 위해 안티앨리어싱은 필수라고 봐야 하는데, 재래식 GDI로는(StretchBlt 함수) 그걸 넣을 수 없다. 당장 <날개셋> 편집기에서 화면 인쇄 명령을 내려서 배율을 바꿔 보면, 이를 확인할 수 있음.

그러니 이것도 최소한 GDI+나 요즘 대세인 Direct2D 같은 API로 작성되어야 할 것으로 보이는데, 그것까지 신경 쓰는 건 <날개셋> 한글 입력기의 핵심 기능과 직접적인 관계가 없고, 개인적인 작업 부담이 너무 심하다. 쉽지 않은 문제다.;;

9. 마치며

(1) 후원금을 보내 주신 분들의 이름은 그 다음 버전의 프로그램 도움말의 '감사의 글' 페이지에 꼬박꼬박 등재되고 있다.
후원자가 아주 많아지면 액수 순으로, 혹은 최근 순으로 잘라서 수록하는 게 불가피하겠지만, 내 프로그램은 벌써 그런 경지에 오른 것도 전혀 아니고 아직까지는 후원해 주신 모든 분들이 명단에 올라 있다.

<날개셋> 한글 입력기는 14년째 개발자가 한글 오덕질 근성을 주체하지 못하여 자기 인생의 상당 부분을 투자하며 개발되어 왔다. 특히 이번 7.4는 개발 역사상 유례를 찾기 어려울 정도로 한글 입력 엔진에 굉장히 많은 기능 추가와 수정이 이뤄졌다. 프로그램의 개발 취지를 이해하고 후원해 주신 분들께 다시 한번 감사드린다.

(2) 단군의 후손들이 어째 라틴 알파벳도 아니고, 한자 같은 그림문자도 아니고, 한글 같은 위상의 문자를 쓰고 있는지.. IME가 필요하긴 하지만 NLP 기술 없이 글자 구조 자체와 관련된 엔지니어링이 개입할 여지가 있는 문자를 쓰는지? 생각하면 할수록 신통방통한 일이다. 거기에 세벌식 글자판까지 생각하면.. 오덕질을 안 할래야 안 할 수가 없다.

본인은 맹목적인 공 병우 빠돌이가 아니며, 맹목적인 세벌뽕도 아니다. 더 나은 한글 기계화 패러다임이 있다면 정말 열린 마음으로 수용할 의향이 있다. 어떤 한글 입력 방식이든 동등한 여건 하에서 구현되고 테스트되어야 한다. 솔직히 <날개셋> 한글 입력기야말로 바로 종류를 불문하고 한글 입력 기술의 공평한 통합을 목표로 개발되고 있기도 하고 말이다. (그러니 세벌식뿐만 아니라 두벌식 관련 고급 기능도 많이 들어있다!)

그런데 그렇게 열린 마음으로 살펴봐도 현실적으로 정말 공 병우 세벌식을 능가하는 한글 기계화 패러다임은 등장하지 않았고 앞으로도 딱히 나올 기미가 보이지 않는다. 그 정도 성능에 그 정도 범용성을 갖춘 최강 가성비를 자랑하는 입력 방식 말이다.
오히려 모바일 환경으로 가면서 굳이 그렇게 빨라야 할 필요가 없으니 의미가 퇴색했을 뿐이지, 동일 환경에서 공 병우 세벌식이 다른 패러다임에 의해 추월당한(beaten) 적은 내가 보기에 없다. 내가 식견이 부족한 것일 수도 있으니 이 명제에 대한 반박은 언제든 얼마든지 환영한다.

본인은 이런 패러다임을 바탕으로 우리나라 고유문자를 컴퓨터에서 완전 변태(?) 수준으로 쥐락펴락할 수 있는 기술을 보유한 것에 자부심을 갖고 있다. 적어도 Windows라는 한 플랫폼에서만은 마스터를 했으니 말이다. 프로그래머 만세다. 언젠가 내 프로그램의 내부 구조와 설계 이념을 강연이나 저술을 통해 지금보다 더 널리 알릴 기회가 있으면 좋겠다.

Posted by 사무엘

2014/06/04 08:27 2014/06/04 08:27
Response
No Trackback , 9 Comments
RSS :
http://moogi.new21.org/tc/rss/response/970

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

Comments List

  1. kyeongrok kim 2014/06/08 17:23 # M/D Reply Permalink

    포스트 하나만 읽어봐도 ㅎㄷㄷ한 내공이 느껴지네요. 날개셋 입력기 5년째 정말 잘 쓰고 있습니다. 이런 기능들이 딱히 문제 없이 잘 굴러간다는 것 자체가 신기할 다름입니다. ㄷㄷ

    1. 사무엘 2014/06/09 00:32 # M/D Permalink

      그럼 한 5.x대부터 구경하셨겠군요? 제 프로그램을 꾸준히 사용해 주셔서 고맙습니다. ^^

  2. 김재주 2014/06/19 08:15 # M/D Reply Permalink

    그러고 보니 스타 2에서 날개셋으로 세벌식.. 아니 세벌식 뿐만이 아니라 두벌식도 입력이 안 됐었는데 최신 버전에서는 세벌식도 정상적으로 동작하더군요.

    1. 사무엘 2014/06/19 11:33 # M/D Permalink

      오, 제 입력기만 버전업을 했더니 동일한 프로그램에서 안 되던 게 되게 바뀐 게 있는가요? 반가운 소식이군요~!

  3. 팥알 2014/06/27 01:47 # M/D Reply Permalink

    7.4판을 써 보면서 아쉬우면서 궁금한 것이 있습니다.
    제가 만들어 쓰는 옛한글 자판은 ㅢ와 ㅖ 자리를 이어 치는 전환(확장) 글쇠로 써서 한글 낱자를 더 넣는 방식입니다.
    먼젓판에는 ㅖ, ㅢ 자리 글쇠를 칠 때 특수코드 C0을 써서 전환 상태를 나타내는 변수값만 바꾸고 아무런 입력값이 들어가지 않은 채로 한글 조합 상태를 이어갈 수 있었는데, 7.4판으로 판올림하니 C0이든 C1든 어떤 특수코드를 써도 한글 조합이 풀어져서 뜻하는 대로 되지 않습니다.
    글쇠를 눌러도 별다른 동작은 하지 않게 하는 특수코드나 다른 방법은 없을까요?

    1. 사무엘 2014/06/27 04:07 # M/D Permalink

      안녕하세요?
      일단 이번 7.4에서는 고급 입력기의 사용자 정의 조합이.. '일반 문자' 타입에 대해서만 동작하고, 한글 글쇠가 U+11xx대로 자동 인식되는 기능은 빠졌습니다. 이것을 추후에 말씀드리려고 했는데 아직 정식 공지가 안 됐네요.
      그것 말고 말씀하신 사항은 새 버전이라고 크게 달라지지는 않았을 것 같은 사항인데요. 입력 설정 파일을 첨부해서 메일로 주시거나, 혹은 파일을 받을 수 있는 링크 및 재연 스텝을 좀 알려 주시면 살펴보겠습니다. ^^

    2. 팥알 2014/06/27 08:39 # M/D Permalink

      사용자정의 조합이 그렇게 바뀌었군요.
      특수기호를 넣을 때는 한글 조합이 풀려도 괜찮으니 사용자정의 조합을 쓰는 방법은 대체할 방안이 있지만, 제가 의도한 엣한글 확장 한글 입력 쪽은 한글 조합 중에 조합이 끊기지 않아야 하는데 7.4판에서는 끊기고 있습니다.

      http://pat.im/908

      위 주소에 덧붙어 있는 '세벌식 3-2011 옛한글.ist' 파일 등에는 ㅢ 자리 글쇠와 ㅖ 자리 글쇠에 "!A&&!C&&(Z=(Z&&Z)*0x10+2) ? C0 : 0" 수식을 써서 변수 Z로 한글 확장 전환 상태를 나타내게 하여 옛한글 낱자를 더 넣게 하였습니다.
      Z가 0일 때는 기본 한글 배열에서 낱자를 넣고 Z가 1, 2, 11, 12일 때에 각기 다르게 ㅿ, ㆆ, ?, ?, ?(ㅣ+ㅏ) 같은 옛한글 낱자들과 ㅢ, ㅖ를 넣는 방식입니다.
      이 수식이 먼젓판에는 C0을 통하여 한글 조합이 풀어지지 않게 잘 작동시킬 수 있었는데, 7.4판에서는 조합 도중에 위 수식을 쓰면 조합이 풀립니다. 그래서 j8d, j7c로 넣던 '의', '예'가 'ㅇㅣ', 'ㅇㅔ'로 들어갑니다. C0을 C0|0x??이나 C1|T 따위로 바꾸어 보아도 한글 조합이 풀어져서 대체할 방안을 못 찾았습니다.

      제가 몰라서 그런지 모르겠는데, 만약에 한글 조합에 전혀 영향을 미치지 않고 별다른 동작도 하지 않는 특수코드가 7.4판에 없다면 다음판에 따로 들어갔으면 합니다.

    3. 사무엘 2014/06/27 10:53 # M/D Permalink

      아하. Shift+7과 Shift+8 자리를 보시면 !A&&!C 체크를 하는 게 있는데, 그 식을 없애 보세요. 그럼 문제가 해결될 겁니다.
      7.4 버전부터는 기본 입력 스키마는 언제나 Alt와 Ctrl이 안 눌러졌을 때만 동작한다고 가정하고 동작하며, A와 C 변수를 제공하지 않습니다. 즉, 그 값은 언제나 0인 걸로 가정하는 거지요. 이런 식으로 7.4에서는 입력기 로직을 단순화하고 미묘하게 제한 전제조건을 넣은 게 있습니다. 물론 도움말에서는 A C 변수 언급을 뺐구요.. ㅎㅎ

      다만, 그렇다면 이제 A, C 변수는 언제나 초기값이 0이고 예전에 내가 수식으로 저장해 놓은 값이 보존되어야 하는 완전 free, custom 변수여야 하는데... 지금 그게 그렇지 않아서 문제입니다. A에 다른 쓰레기값이 들어가서 non-zero가 되었으며, 그래서 Z=(Z&&Z)*0x10+1 부분이 실행되지 않고 C0도 실행되지 않은 게 문제입니다.
      그건 제 쪽에서 수정하거나, 이 변수를 사용해서는 안 된다고 정식으로 공지할 사항인 것으로 여겨집니다.

      아무튼, 7.4에서 그렇게 미묘하게 바뀐 부분에 대해 추가 공지글을 다음 달 초-중순쯤에 올릴 생각입니다.

    4. 팥알 2014/06/27 13:43 # M/D Permalink

      답변 고맙습니다. !A&&!C를 빼니 말끔히 해결되었습니다.

      다시 생각해 보니 글쇠값에 들어가는 A와 C를 도움말 보고 넣은 것 같은데, 왜 넣었는지 기억은 나지 않고 7.4판에서 다시 도움말을 다시 봐도 뭔가 허전하다 싶었습니다. 그런 까닭이 있었네요.^^

      다른 이야기이지만, 지난 판에서는 오토마타에서 "C&&(D || E || G)&&!(G=0) ? 3 : 0" 같은 수식으로 임의로 쓰는 변수(G)의 값을 조작하지 못했던 것 같은데, 7.4판에서는 잘 되네요. 그 덕분에 신세벌식 자판으로 초성체 넣게 하는 글쇠값과 오토마타 수식을 더 간단하게 넣을 수 있었습니다. (본래 잘 되었는데 제가 잘 몰랐는지도 모르겠네요.^^)

      거듭 감사 드립니다.
      (고급 입력 스키마라는 게 새로 들어갔는지 몰랐는데, 공부할 거리가 더 늘었습니다.^^)

Leave a comment

<날개셋> 한글 입력기 7.4-- 上

요 며칠간 개인적으로 잘 된 일도 있었고 잘 안 풀린 일도 있는 채로 다사다난한 시간을 보냈으나.. 그 어느 것도 나의 코딩을 가로막을 수는 없다. 열차는 시각표대로 무조건 달린다. 건널목에서 충돌 사고가 나도 질량과 관성 때문에 장애물을 그냥 밀고 쭉쭉 나아갈 뿐이다.

그래서 드디어 <날개셋> 한글 입력기가 7.11 이래로 무려 7개월간의 수련을 마치고 7.4 버전이 완성되었다.
원하는 기능들을 다 집어넣은 건 아니지만 한번 역에 정차하여 쉬어 가게 됐다. 이 달부터는 학기 마무리 준비를 해야 하는 관계로, 더 작업은 하고 싶어도 할 수 없기 때문이다.

5월은 안 넘긴 걸 기쁘게 생각한다. 의도했던 건 아닌데 5월 31일은 공교롭게도 <날개셋> 한글 입력기 3.0 출시의 딱 10주년 타이밍이기도 하다. 2004년 5월 31일 + 10년이다.

3.0은 최초로 유니코드 API 도입, 입력 스키마와 문자 생성기 계층 구분, 단축글쇠 테이블, 수식 기반의 오토마타, 지금과 같은 64비트 크기의 입력 단위, TSF를 인식하는 에디팅 엔진, 가변 길이 옛한글 등 오늘날 내 프로그램의 근간을 닦은 버전이었다. 2.5 이후로 거의 9개월 동안 프로그램을 밑바닥부터 다시 만들었었다.

물론 지금 보면, 기술적 디테일이나 사용자 인터페이스는 그야말로 내가 겁도 없이 이런 허접한 프로그램을 대회에 출품하고 사용자에게 공개했다 싶을 정도로, 민망할 정도로 허접하기 그지없었다.
그러나.. 포니를 개발한 뒤에야 에쿠스가 나올 수 있었듯이, 그런 개허접한 3.0이 있었기 때문에 그 뒤로 꾸준히 후속 기술이 개발되고 기능이 추가되어 무려 7.4까지 나올 수 있었던 건 자명한 사실이다. 이제 7.4를 바탕으로 올가을쯤에 7.5가 나와서 잔여 과업들을 완수해 준다면, <날개셋> 한글 입력기는 거의 대망의 완전체가 도달하지 않을까 싶다.

1. 입력 엔진 부분의 대대적인 리팩터링

예전에도 한번 소개한 적이 있듯, <날개셋> 한글 입력기에는 한 번에 한 낱자가 아니라 초중종 낱자를 한꺼번에 입력하는 기능이 있다. 그리고 그냥 입력하는 정도가 아니라 두 번에 걸쳐 입력하는 기능이 있다. 예를 들어 "받침ㅆ+다"를 배당하여 '이' 다음에 '있다'를 곧바로 만든다거나, '가' 다음에 '갔다'를 바로 만드는 게 가능하다.

극단적인 예로, 한 글쇠에다 '받침ㅋ+쌰'를 배당한다. 수식으로는 'H12|SS|YA|_K'라고 표현된다. 그 뒤, 허용 한글 범위를 KSX1001 완성형으로 맞춰서 2350자만 입력 가능하게 바꾼다.
이 상태에서 '가' 입력 중에 그 글쇠를 누르면.. '가ㅋ쌰'가 찍히는 게 맞다. '갘'은 조합이 안 되니 ㅋ이 다음 글자로 떨어져 나가고, '쌰'도 완성형에 없는 한글이기 때문에 조합이 더 진행되지 못하고 끊어지는 게 맞다. 그러나 현재 7.11 버전은 'ㅋ가쌰'가 된다. 중첩 입력을 처리하는 로직이 완전하지 못하기 때문이다.

또한 이 경우 원래 조합하던 글자에 이어서 총 2개의 글자가 추가로 완성되는 것이기 때문에 삽입이 아닌 '겹침' 모드에서는 2개의 글자가 추가로 덮어써져야 한다. 그러나 7.11은 그것도 깔끔하게 처리되지 못하고 여전히 삽입만 되고 있다.

이렇듯 NLP 기술이 하나도 없는 단순 한글 입력기 같아도 <날개셋> 한글 입력기는 서로 영향을 끼치는 입력 관련 각종 옵션과 변수들을 제어하는 게 굉장히 복잡하다. 가짓수와 가짓수를 서로 고려하다 보면 가능성이 곱셈이 되어 버려서 통제를 못 하게 된다. 각 변수들을 있는 그대로 각개격파하여 덧셈으로 유지되게 해야 한다.

굳이 저런 극단적인 상황에서의 매끄러운 처리까지 생각하는 게 아니더라도, <날개셋> 한글 입력기의 핵심 엔진 부분은 지난 10여 년 동안 다양한 기능이 추가되는 과정에서 매우 심하게 지저분해졌으며 구조적으로 심각한 한계를 드러내고 있었다. 그래서 대대적인 리팩터링이 불가피했다.

한참 옛날에 만들어 놨던 코드의 모든 로직과 의미를 다시 읽으며, 머리를 쥐어뜯고 피말리는 작업이 계속되었다.
그 결과, 단독으로 1천 줄이 넘던 핵심 함수의 일부를 2개의 함수로 떼어내고, 반복적인 패턴이 발견되는 일련의 루틴들을 별도의 클래스로도 빼냈다. 복잡한 입력, 이동, 지우기 동작을 제한된 element만으로 추상화해 낸 것이다.

특히 재귀호출이 필요한 부분과 그렇지 않은 부분을 확실히 분리했으며, 중복 무한순환 재귀호출을 감지하여 막는 부분을 더욱 똑똑하고 논리 오류가 없게 개선했다.

기능 추가도 아니고 동일한 기능을 구현하는 방식만 바꾸는 데 거의 50일이 걸렸다. 이 디자인이 과연 최선의 디자인인지 스스로 확신을 얻는 데도 긴 고뇌의 시간이 필요했다.
새로운 체계 덕분에 각종 지저분한 중복 코드가 없어지고, 지저분한 임시 변수나 비트 플래그가 없어지고, 그럼에도 불구하고 입력기의 논리적인 버그가 없어질 때마다 본인은 거의 엑스터시에 가까운 환희를 경험했다.

결합 축약 테이블에 의한 입력 순서 축약은 입력 타이밍이 아니라 bksp 지우기 동작이 실제로 일어날 때 행해지게 바꿨고,
특히 겹침 모드에서 배경의 글자를 덮어쓰는 개수를 계산하는 건, 입력 동작의 결과를 보고 공통된 post-processing 과정에서 한번에 알아서 계산하게 바꿨다.

이렇게 만들어진 출력 action은 구현체에 따라 IME에서는 WM_IME_*메시지로, TSF 환경에서는 TSF interface 함수 호출로, 자체 에디터에서는 말 그대로 내부 조작으로 seamless하게 변환되어 나간다. Windows 95부터 8.1까지 버전 불문하고 32비트, 64비트 불문하고 모두 똑같이 동작하는 건 물론이고 말이다.

이번 작업 덕분에 <날개셋> 한글 입력기의 코드는 소프트웨어공학적인 품질이 크게 향상되었으며, 이를 토대로 다른 새로운 입력 기능들도 손쉽게 확장해 넣을 수 있게 되었다.

2. 고급 입력 스키마

이번 7.4 버전에서는 종전의 '동시입력 스키마'를 대체하는 '고급 입력 스키마'가 추가되었다. 아직 넣고 싶은 기능이 100% 다 구현된 건 아니지만 어쨌든 이로써 입력 스키마와 문자 생성기가 모두 (1) 빈 (2) 기본 (3) 고급이라는 3단계 계층이 갖춰지게 됐다.

빈 입력 스키마는 아무 글쇠도 스스로 처리하지 않고 응용 프로그램에 그대로 넘겨 주는 잉여이다.
기본 스키마는 우리가 지금까지 써 온 대로, 키보드에서 통상적인 문자 입력용으로 쓰이는 47개 글쇠에다 Shift 조합을 포함한 94개 자리의 keydown을 인식한다. 거기에다 사용자가 별도로 지정한 글쇠의 keydown을 추가로 인식하거나, 기존 47개 글쇠를 부분적으로 인식하지 않게 하는 기능을 액세서리 차원으로 제공한다. 추가 글쇠는 Ctrl/Alt/Shift/Win 같은 modifier 조합을 옵션으로 가질 수 있다.

이에 덧붙여 고급 입력 스키마는 지정한 글쇠에 대해서 keydown뿐만 아니라 keyup(글쇠를 뗀 것)을 모두 인식할 수 있으며, 각 상황별로 이 글쇠를 처리할지의 여부를 모두 수식으로 지정 가능하다. 또한 이 keydown 이벤트가 몇 번째 연타인지, 그리고 이 이벤트가 발생한 시각(밀리초 단위)이 언제인지 같은 정보도 변수로 제공된다(예전에 기록한 시각과의 차이를 계산하는 데 활용 가능). 기본 입력 스키마에는 존재하지 않던 정보들이다.

그래서 이를 이용하면 한 글쇠를 0.n초 이상 오래 누른 것, 혹은 0.n초 이내에 눌렀다가 뗀 것, 어떤 두 글쇠를 연달아 누른 것, 굳이 Shift+X가 아니라 Shift를 한번 눌렀다 떼고 나서 다음 X를 순차적으로 누른 것 같은 복잡한 글쇠 동작을 모두 인식할 수 있으며, 글쇠를 오래 누르고 있어도 연타는 한 번 또는 n회 이내만 인식시킬 수도 있다. 기본 입력 스키마에다가 옵션으로 넣으려고 했으나 이론적인 기반을 마련하지 못해 지금까지 전혀 구현을 못 하고 있던 변칙적인 글쇠 인식은 전부 고급 입력 스키마를 통해 general하게 구현 가능해졌다.

단, 고급 입력 스키마는 기본 입력 스키마처럼 modifier 조합 같은 게 없다. 오로지 어떤 글쇠의 눌렀다 떼는 것에만 초점이 가 있으며, 두 글쇠의 조합은 각각의 글쇠가 눌러졌을 때 사용자가 변수에다 해당 글쇠가 눌렸다는 것을 일일이 판단함으로써 모든 로직을 수동으로 구현해야 한다. 기본 입력 스키마보다 설계 철학이 더 저수준이기 때문이다.

기본 입력 스키마는 날개셋문자를 있는 그대로 차근차근 보내는 것만 가능하다. 그러나 고급 입력 스키마는 사용자가 지정한 수식값에 따라서 지금 조합 중인 문자를 덮어쓰고 조합을 무조건 새로 시작시킬 수 있으며, 지금 조합을 무조건 종료한 뒤에 조합을 새로 시작시킬 수도 있다. 전자는 'ㄱ+ㅏ'를 '가'가 아니라 'ㅏ'로 바꾸는 기능이며, 후자는 'ㄱㅏ'로 바꾸는 것이라고 생각하면 이해하기 쉽다. 자기와 연결되어 있는 문자 생성기의 상태를 무시하고 입력을 보내는 게 가능하다는 뜻이다.

이런 고급 입력 스키마가 고급 입력기라는 문자 생성기와 만나면 활용 가능성은 더욱 커지는 건 두 말할 나위가 없다. 평상시에는 일반적인 방법으로 한 타씩 한글을 입력하지만, 특수한 글쇠 두어 개를 동시에 누르거나 한 글쇠를 오래 누른다거나 하면 미리 지정해 둔 '습니다', '000' 같은 글자 묶음이 지금 조합을 무시하거나 종료시킨 상태에서 곧장 입력되게 할 수 있기 때문이다.

더 자세한 개념과 기능 설명에 대해서는 고급 입력 스키마를 꺼낸 뒤, "고급 글쇠 인식 옵션" 페이지에서 F1 도움말을 참고하면 된다. 앞으로 이걸 이용한 창의적인 문자 입력 방식이 많이 고안되어 나오면 좋겠다. 예제 템플릿 수식 같은 거라도 더 넣어서 고급 입력 스키마에 대한 사용 접근성을 더 개선하는 게 추후 과제로 남아 있다.
또한 지금 만들어 놓은 입력 설정을 그대로 유지하면서 기반 루틴만 '기본'이던 것을 '고급'으로 업그레이드하는 방법이 없는 게 문제라면 문제임을 인정한다. 기반 루틴을 바꾸고 나면 글쇠배열 같은 입력 설정은 다시 세팅을 해야 한다.

다음 버전인 7.5에서는 이번 7.4에서 실험적으로 구현한 기능을 바탕으로, 한글의 동시 입력에 특화된 보정 기능들이 추가될 예정이다.

3. 고급 입력기 -- 한글 출력 치환

입력 스키마에 이어 문자 생성기에도 '고급 입력기'에 신선한 기능이 새로 추가되었다.
잠시 개념을 좀 복습하자면, 빈 입력기는 아시다시피 오토마타, 조합, 후보 변환 같은 게 없이 문자를 있는 그대로 완성된 형태로만 보낼 수 있는 제일 원초적인 문자 생성기이다. 영문 같은 문자에나 적합하다.
기본 입력기는 그야말로 한글 한 글자를 조합하는 데 필요한 온갖 복잡 화려한 <날개셋> 한글 입력기의 핵심 기능들이 모두 구현되어 있는 문자 생성기이다.

그리고 고급 입력기는 기본 입력기의 기능들을 바탕으로, 비한글 문자의 custom 조합과, 한글 입력과 비한글 입력을 서로 연동하는 액세서리 기능이 추가적으로 들어있다. 설계 철학이 이러하다는 걸 염두에 두도록 하자.
이번 7.4에서는 '한글 출력 치환'이라는 기능이 고급 입력기에 추가되었다. 언뜻 보기에 이것은 편집기 계층에 존재하는 '최종 변환 규칙'의 입력기 계층 버전처럼 보이기 쉬우나, 성격이 그것과는 약간 다르다.

한글 출력 치환은 초중종성 낱자별로 동작하는 버전과 글자 전체 단위로 동작하는 버전이 따로 존재한다.
전자는 가상 낱자를 가리면서 동작하고--다시 말해 세벌식에서 겹모음용 ㅗ/ㅜ와 홑모음용 ㅗ/ㅜ를 구분한다는 뜻--
후자는 그걸 따지지 않고 그냥 겉으로 보이는 한글 전체의 모양만 따지며 동작한다.

낱자 버전부터 설명하도록 하겠다.
초중종이 각각 ABC로 구성된 한글이 있고, 초중종 A, B, C에 대해 각각 1, 2, 3이라는 문자열로 출력 치환하는 규칙이 존재한다면.. ABC라는 한글은 대략 1A2BC3이라고 바뀌어 출력되게 된다. 즉, 한글의 앞뒤로 비한글 일반 문자가 삽입되며 특히 중성에 치환 규칙이 존재하면 한글 자체가 초/중종 두 글자로 찢어진다.

이런 기능이 왜 필요하며 무슨 용도로 쓸 수 있을까?
주된 활용 방법 중 하나는, 한글 입력 과정에서 현행 한글 코드에 존재하지 않는 복잡한 겹낱자를 잠시 표현해야 할 때, 이를 여러 개의 기존 낱자로 풀어서 표현하는 것이다. 물론, 123 말고 ABC 자체의 형태를 바꾸려면 기존 가상 낱자 규칙을 쓰면 된다. 따라서 낱자 출력 치환은 가상 낱자 규칙과도 연계해서 활용하면 좋다.

이번 7.4에서는 천지인이나 나랏글 같은 휴대전화 입력 방식 예제가 다 이 기능을 사용하여 다시 만들어져 있다.
종성 부분을 보면, 내부적으로는 받침 ㅃ, ㄸ, ㅉ이지만 겉으로는 초성 ㅃ, ㄸ, ㅉ이 다음 글자에 가 있는 것처럼 화면에 나타나는데, 가상 낱자를 써서 받침 ㅃ, ㄸ, ㅉ을 0으로 치환하여 원래 있던 자리에서는 없애 버리고, 그 대신 출력 치환 규칙에다가 초성 ㅃ, ㄸ, ㅉ을 대신 출력하게 한 것이다.

ㄴ+ㅇ, ㄱ+ㅆ, ㄱ+ㅊ 같은 받침이야 더 말할 필요도 없다. 300 이상의 가상의 받침을 설정한 뒤, 가상 낱자 규칙에다가는 ㄴ, ㄱ 같은 앞부분 받침만 나타나게 하고, 뒷부분 받침은 출력 치환 규칙으로 지정했다. 한글 한 글자를 조합하는 걸로 두 글자 이상의 한글이 한꺼번에 나타나게 하는 걸 이런 이론 기반으로 구현해 냈다.
단, 외부 모듈의 경우 한글 조합이 길이가 한 글자를 넘어가면 응용 프로그램에 따라서는 조합 중인 문자가 제대로 표현되지 않을 수 있으므로 주의가 필요하다.

다음으로 글자 버전은.. 쉽다. 말 그대로 지금 조합 중인 한글을 다른 문자로 바꿔서 보여 주는 것 그 이상도 이하도 아니다. 한글 입력 방식을 한글로 다른 문자를 입력하는 데 고스란히 활용할 수 있으며, 덕분에 사용자 정의 조합 기능을 쓸 일도 크게 줄어든다.

이것 덕분에 아래아한글 97 이래로 지금까지 구현된 적이 없던.. 한글로 일본 문자 입력이 가능해졌다. 이번 버전에서는 히라가나/가타카나를 종전과 같은 로마자 기반 사용자 정의 조합뿐만 아니라, 한글 출력 치환으로 구현한 예제 파일이 새로 추가됐다.

이와 관련하여, "한글 출력 범위(=문자 집합) 제한"에도 유용한 기능이 하나 추가됐다. 지금까지는 KSX1001 2350자, 한컴 2바이트 완조형, 한양 PUA 완성형처럼 완전 legacy 잉여 문자 집합을 생색내기로 흉내 내는 기능만 있었던 반면, 바로 <날개셋> 고급 입력기의 한글 출력 치환 규칙이 존재하는 글자만 허용하는 기능이 새로 추가된 것이다.
한글로 일본어 문자를 입력하는 예제 파일을 써 보면, 일본어 치환이 존재하지 않는 한글은 아예 조합이 되지 않고 낱자가 다음 글자로 튕기는 걸 볼 수 있다.

(다만, 지금까지 사용자 정의 조합으로 구현되어 있던 구결 입력 방식은, 그냥 외장형 "사용자 후보 변환"으로 입력하는 데이터 파일로 형태를 바꿨다. 한 한글에 대응하는 구결 문자가 여럿 있기 때문에 후보 변환이 더 적절하다고 판단되어서이다.)

4. 그 밖에

이번 7.4에서 이뤄 낸 위의 1~3 아이템들은 생각만 해도 후련하다. 왜 이런 기능들이 무려 2014년에 와서야 실현된 걸까. ㅠ.ㅠ 일반 사용자의 입장에서야 <날개셋> 편집기에 다른 에디터에도 있는 기능들이 덩달아 들어가기를 더 원할지 모르고 현실적으로는 외부 모듈의 안정성 개선이 더 중요하게 느껴질지 모르나, 본인의 입장에서는 그런 건 개발 방향과 직접적인 관계가 없거나 최소한 부가적인 요소들이다.

<날개셋> 한글 입력기의 개발에서 본인이 가장 중요하게 여기는 건 한글 입력과 관련된 기술을 한데 통합할 수 있는 이론 연구와 구현이다. 그러니 편집기는 10년 전이나 지금이나 똑같은 촌스럽기 그지없는 MDI 프로그램 외형이지만, 그 속의 깊이는 갈수록 심오해지고 있다. 이번 7.4가 개발 기간이 괜히 길었던 게 아니며, 7.2나 7.3을 건너뛰고 괜히 바로 7.4로 간 게 아니다.

프로그램 버전이 7.x대까지 가고 나니 프로그램의 완성도는 충분히 정착한 듯하며, 이를 토대로 지금까지 못 하고 있던 long-term 이론 연구를 최대한 진행했다.
고급 입력 스키마와 고급 입력기는 모두 ngs3 모듈이 아니라 ngsx라는 플러그 인 모듈이 담당하고 있는데, 이런 대규모 작업 덕분에 드디어 ngsx의 프로그램 크기가 <날개셋> 편집기 ngsedit의 크기를 근소하게 추월했다.

분량이 벌써 굉장히 길어진 관계로, 이 항목에서는 고급 입력기와 관련된 변화 사항을 조금만 더 얘기하고 나머지 새 버전 자랑은 다음 하편으로 미루도록 하겠다. ㅎㅎ 그러고 보니 타자연습도 빨랑 업데이트하고 저거 얘기도 해야 되는데..

7.4에서는 한글 로마자 입력 방식의 근간인 글쇠 치환 규칙이 동작하는 방식이 살짝 바뀌었다. 새로운 기능 추가가 아니라 변경임. 글쇠 치환 규칙에 존재하던 잡다한 옵션들이 모두 없어지고 이들의 구현 방식이 다른 대체제로 바뀌었다.

caps lock 무시 옵션이 없어졌기 때문에 이제는 기반 영문 글쇠배열이 caps lock을 구분하여 동작하지 않도록 바뀌어야 한다. 이것은 글쇠배열 편집기를 우클릭한 후 "전체 간소화 → 수식 제거"를 선택하면 된다. 하지만 간단히 한글 로마자 입력 빠른설정만 다시 실행해 줘도 7.4 버전 기준에 맞는 로마자 입력 방식이 다시 세팅된다.

shift 음절 강제 구분 옵션도 없어졌으며, 조합을 하는 낱자와 조합을 안 하는 낱자는 두벌식/세벌식 한글 타입으로 오토마타 차원에서 구분을 한다. 비슷한 메커니즘이 이미 네벌식 예제 입력 방식에서도 쓰인 적이 있다.
다만 이것 때문에 현재 한글로부터 글자판 입력 문자열을 구하는 방식이 제대로 동작하지 않고 있는데, 이것은 7.5에서 해당 알고리즘을 싹 다시 구현할 때 문제를 개선할 예정이다.

끝으로, 두벌식 처리 옵션도 없어졌다. 두벌식 한글로 치환되는 글쇠는 언제나 초성과 종성이 현재의 오토마타 상태에 따라 자동으로 구분되어 두벌식으로 처리된다. 번거로운 절차를 없앴다. 이 점 착오 없으시기 바란다.

Posted by 사무엘

2014/06/01 08:27 2014/06/01 08:27
Response
No Trackback , 8 Comments
RSS :
http://moogi.new21.org/tc/rss/response/969

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

Comments List

  1. 사샤나즈 2014/06/03 11:44 # M/D Reply Permalink

    상이 있으니 하도 있는건가요..!
    시간 나면 한번 새 고급 입력 스키마 만져 봐야겠네요!

    1. 사무엘 2014/06/02 18:55 # M/D Permalink

      넵~ 코딩이 끝난 뒤에도 글 쓰는 게 굉장한 고역이더군요. 작업 뒷정리만 하다가 주말이 다 지나 버렸지만 그래도 이렇게 7.4가 세상이 정식 공개되니 저도 몹시 기쁩니다. ^^
      바로 다음 버전에는 글쇠 동작에 따라 한글 조합을 좀 더 세밀하게 제어하는 기능이 고급 입력 스키마에 더 추가될 겁니다.

    2. 사샤나즈 2014/06/03 13:04 # M/D Permalink

      오, 예전부터 만들어보고 싶었던 입력기법 구현이 가능한 걸 확인했네요. 아주 좋네요!

    3. 사샤나즈 2014/06/03 23:29 # M/D Permalink

      이번 버전 문제인지 윈도 최근 업데이트에 문제가 있는 것인지는 모르겠으나 윈도8.1에서 32bit 버전과 64bit 버전이 설정이 완전 따로 놀고 있습니다. 32bit 프로그램에서 날개셋 제어판을 띄워 작업한 것이 64bit 프로그램에서 다시 띄우니 적용이 안 되고 날아가 있어 당황했네요.

      그런데 이것만 문제면 또 모르겠는데 기괴한 것은 그래서 32bit에서 따로 ist 파일을 저장해서 64bit 쪽으로 불러오려고 했더니, 32bit 날개셋 제어판에서 저장한 것은 같은 32bit 날개셋 제어판에서만 불러올 수 있고 64bit 날개셋 제어판이나 윈도 파일 탐색기로는 아예 파일의 존재 자체를 확인할 수 없었으며 심지어 같은 32bit 프로그램인 MetroTwit으로 파일 다이얼로그를 띄워도 해당 ist 파일의 존재를 알 수 없었다는 것입니다. 직접 탐색기에 파일 경로를 쳐도 없는 파일이라는 이야기만 하고, 잘라내기+붙여넣기도 불가능하며 그저 지우기만 가능했습니다. USB 메모리를 끼워 저장했더니 그제야 인식이 가능해 64bit 제어판에서 다시 불러올 수 있었습니다.

      이 문제는 제 데스크탑에서 발생했지만 제 태블릿PC에서도 '설정 따로 놀기'와 '파일 따로 놀기' 모두 재현할 수 있었습니다.

      기괴한 현상이네요. -_-;

    4. 김 기윤 2014/06/04 00:10 # M/D Permalink

      윈도우 7 / 64bit 운영체제인 제 기준으로는 해당 문제가 재연이 되지 않는 것 같습니다.

    5. 사샤나즈 2014/06/04 00:56 # M/D Permalink

      아마 윈도8.1 한정인가 보군요... 혹시나 해서 윈도8.1이 설치되어 있고 날개셋 입력기는 설치되어 있지 않은 64bit 가상머신에 7.4를 설치해 봤는데 역시 두 가지 현상 모두 재현되네요.

    6. 사무엘 2014/06/04 01:16 # M/D Permalink

      제어판을 꺼내고 IST 파일 얘기를 하는 상황이니, 일단 다 메트로는 아니고 데스크톱 프로그램 문맥이죠?
      그런데도 그 정도로 기괴한 환경이라면 <날개셋> 한글 입력기를 현재 구동하고 있는 그 32비트 프로그램에서 직접 만든 파일(저장한 문서 같은)도 다른 64비트 프로그램에서는 인식이 안 될 것 같습니다. 일단 운영체제 자체의 고유한 기능이나 정책으로 인한 문제를 의심해야 할 듯하군요.

    7. 사샤나즈 2014/06/04 02:11 # M/D Permalink

      구동한 32bit 프로그램은 IE11과 MetroTwit입니다. 구동하는 프로그램 자체에 한정된 것은 아니어 보입니다만, 말씀하신 부분은 이 프로그램들이 파일을 저장하는 프로그램이 아니라서 테스트해보기 어렵네요. (데스크탑 IE11은 브라우징 환경만 32bit고 주소 막대를 포함한 나머지 부분은 64bit입니다)

      // 네, 모두 데스크탑 이야기입니다.

      // 제가 뭘 착각했던 것 같습니다. 32bit 프로그램 모두가 그런 것이 아니라 IE11 혼자만 그렇습니다. ㅡㅡ;

      // 아.. 그리고 추가로 제가 설정이 동기화되지 않는 증상을 처음 보고했던 modern 스카이프 및 modern MetroTwit에서도 그런 걸 확인했습니다. 실시간 동기화는 되지 않으며, 프로그램을 껐다 다시 켜면 동기화되지만, 버그 때문에 64비트 쪽과 32비트 쪽 설정이 다를 시 32비트 쪽 설정을 따릅니다.

      // 설정 파일을 따로 두셨을 거라고 생각되지는 않는데... 설정이 따로 노는 문제와 파일이 따로 노는 문제가 원인이 같을 거라고 생각되네요. 32bit 제어판에서 저장한 파일 경로에 64bit 제어판에서 똑같은 이름으로 저장이 가능하고 둘이 따로 놉니다. ㅡㅡ;;;

      // 처음 생각과는 달리 알아볼 수록 윈도 쪽 버그라는 생각이 드니 MS 쪽에 문의해 봐야겠습니다.
      다만 MS 한글 IME는 32bit 프로세스에 있는 상태에서 제어판을 띄울 방법이 없고 일본어 IME는 제어판을 별도 프로세스로 따로 띄워서 영향이 없네요. 음...

Leave a comment

다음 버전 개발 근황

2014년에 처음으로 나올 <날개셋> 한글 입력기의 다음 버전은 7.4로 정해졌으며 한창 개발 중이다. 지금까지 작업이 완료된 변화 내역은 다음과 같다.

1. 현재 MS 한글 IME의 사전을 이용하여 단어 단위로 한자를 변환하는 기능이 제공되고 있는데, 원래 있는 사전뿐만 아니라 MS IME에다 사용자가 등록해 놓은 custom 사전의 내용도 목록에 같이 뜨게 했다.

2. 제어판의 '편집기 계층'에서 옵션을 바꾼 뒤 '확인' 종료를 하면, 제4후보 설정들이 날아가 버리는 약간 중대한 버그가 있었다. 이것을 고쳤다. 사용자 정의 후보가 첫 추가된 7.0 이래로 존재했던 버그이며, 7.11에 존재하던 사실상 유일한 버그였다. 게다가 이것은 7.11만의 버그도 아니니 이번 7.11은 딱히 고쳐져야 할 게 없이 정말 완성도 높게 잘 만들어지긴 했다.

3. 낱자 수정 모드로 진입했을 때 전체 반전이 아니라 사각형 테두리 모양의 cursor가 거의 10년 만에 부활했다. 물론 이건 외부 모듈 말고 <날개셋> 편집기만으로 한정이다.

사용자 삽입 이미지

아마 아시는 분이 많지 않겠지만... <날개셋> 한글 입력기에는 낱자 수정 모드라는 게 있다. 삽입/겹침이 '겹침'에 맞춰져 있고(Ins 키), 낱자/글자가 '낱자'로 맞춰져 있는 경우(Shift+Ins), '가'를 '개'나 '나'로 곧바로 고친다거나 '강'으로 한 타 만에 고칠 수 있다. 글자를 처음부터 다시 입력해야 할 필요가 없다. 이것은 무려 1.0 첫 버전부터 긴 역사를 자랑하며 지원되어 온 기능이다.

낱자 수정 모드도 엄밀히 말하면 한글 조합 상태이긴 하지만 여느 상태와는 다르다. <날개셋> 편집기는 삽입/겹침이나 한글/영문이 아니라 낱자 수정 상태만을 별도의 cursor 모양으로 표시해 주고 있었는데.. 이건 까마득한 옛 버전인 1.x와 2.x까지만으로 한정되었다.

에디팅 엔진이 완전히 교체되고 운영체제의 표준 cursor를 사용하기 시작한 3.0부터는 낱자 수정 모드 자체는 존재하지만 다른 시각 피드백 구분이 없어졌으며, 그 관행이 2004년 이래로 10년째 지속되어 왔었다. 테두리 cursor는 10년 가까이 봉인되었다가 드디어 이번 버전에서 부활할 예정이다.

4. 외부 모듈에서 '빈 입력 스키마' 내지 '빈 입력 스키마 호환 옵션이 지정된 영문 쿼티'를 없앤 상태로 '확인'을 누르면 아예 경고문이 나타나게 했다. 링크를 클릭하면 더 자세한 도움말 설명도 나타난다.
쿼티를 없애고 드보락만 지정했는데 '빈 입력 스키마'가 자꾸 자동으로 추가돼서 이상하다는 문의가 지금까지 하도 많이 들어와서 말이다.

그렇게 IME가 인위로 글쇠를 생성하는 글자판은 비록 영문을 입력하는 방식이라 할지라도 기술적으로는 한글 모드일 뿐이다. IME가 아무 글쇠도 처리하지 않고 한국어 키보드 드라이버에 배당되어 있는 쿼티 방식 그대로 글쇠를 보내는 모드가 아예 없을 수는 없다.

5. 또한 이와 비슷한 매락에서, 단축글쇠 배당 대화상자에서는 Ctrl/Alt의 경우 오른쪽 방향은 인식되지 않을 수 있다는 경고문도 간단히 추가했다. 한국어 키보드 드라이버는 이들 글쇠를 한영/한자 키로 인식하기 때문이다.
<날개셋> 편집기야 자체 한글 기반이기 때문에 한국어가 아닌 여타 외국어 글쇠배열을 사용하다가 자체 한글 입력 모드로 들어가면 오른쪽 Ctrl/Alt를 인식 가능할 수도 있다. 그러나 외부 모듈은 그 자체가 한글 IME이고 무조건 한국어 키보드 드라이버와만 연결되기 때문에 그런 선택의 여지가 없다.

6. <날개셋> 한글 입력기는 MS IME와 마찬가지로 유니코드 BMP 영역에 있는 모든 한자들을 독음으로 입력할 수 있다. 그러나 현실에서 상용 한자 이외의 한자가 쓰이는 일은 매우 드물다. 그렇기 때문에, 좀 잉여스러워 보이긴 하지만 MS IME와 마찬가지로 '확장 한자 사용' 옵션을 켰을 때만 모든 한자들이 다 보이고 평소에는 상용 한자 4888자만 나타나게 했다. 이렇게 하는 게 처리 속도도 더 빠르고 말이다.
물론 이것은 사용자 후보나 단어 단위 한자 변환 동작에는 전혀 영향을 주지 않는다. 한글 하나만을 제1 후보 방식으로 기본 변환할 때에 한해서이다.

7. 편집기는 문서를 저장할 때 이미 있던 파일에다 덮어쓰는 경우, 임시 파일을 생성하여 저장한 뒤 임시 파일의 저장이 완전히 성공한 뒤에야 기존 파일을 지우고 임시 파일을 개명하는 방식으로 동작하게 했다. 저장 중에 프로그램이 뻗더라도 파일 내용이 송두리째 날아가는 일은 발생하지 않게 조치를 취했다. 어찌 보면 안전을 위한 기본 조치인데 <날개셋> 편집기는 지금까지 그런 정책을 채택하지 않고 있었다.
디스크의 용량이 극도로 부족할 때는 예외적으로 그렇게 복사본을 만들지 않게 하는 알고리즘도 필요할 듯도 하지만 일단은 거기까지 고려는 하지 않게 했다.

그리고 안전한 저장이라 하니까 생각하는데, <날개셋> 편집기는 자동 저장 기능은 여전히 지원하지 않으며 개발 계획에도 없다.

8. 다음으로 아주 잉여로운 GUI 변화 사항으로는...
TSF 시스템이 없는 운영체제에서는(Windows XP 미만의 초 구닥다리) 편집기의 'TSF 지원' 옵션이 흐리게 나오고, 자체 한자어 사전이 없는 운영체제에서는(Vista 미만) '단어 단위 한자 변환' 옵션이 흐리게 나오는 당연한 조치를 취했다. 물론 오늘날 운영체제에서는 아무 의미 없는 조치이지만, <날개셋> 한글 입력기는 공식적으로는 32비트 에디션 기준으로 윈도 95에서도 완벽하게 실행되는 거의 변태 같은 프로그램이기 때문에.. ㅎㅎ

- 블로그에 공지했던 입력 방식 유료 컨설팅 관련 설명은 도움말의 '일러두기'에도 당연히 짤막하게 추가되었다.

- UTF-8, UTF-16LE 같은 몇몇 용어를 표준 표기에 맞게 수정했으며,
- 빠른설정을 선택하는 목록 메뉴에서 '한글 로마자 입력기'가 신세벌식이나 복벌식보다 더 앞에, '기본 입력 설정' 바로 다음으로 나오게 순서를 변경했다. 이유는 두 말할 나위 없이 로마자 입력 방식이 두벌식/세벌식 다음으로 가장 널리 쓰인다고 판단되기 때문이다.

메이저한 굵직한 기능을 추가하기도 전에 사소한 변화 사항도 벌써 이만치 나왔다. 재미있다.
이런 경험들이 하나씩 쌓이면서 프로그램의 완성도는 갈수록 상승한다.

이미 보신 분도 계시겠지만, 사실 지난 1월에는 <날개셋> 한글 입력기 소개 페이지도 싹 갈아엎었다. 문서 만드는 게 코딩 이상으로 더 힘들 수 있다는 걸 실감한 시간이었다.

첫 화면에는 이 프로그램이 무엇인지 그 본질을 최대한 단순· 간단하게 소개한 뒤, 다운로드 페이지는 별도로 마련하고
프로그램에 대한 자랑질은 (1) 입력 아키텍처 쪽, (2) 세벌식 위주의 고급 활용 기능, (3) 편집기 및 외부 모듈 같은 구현체 소개
이렇게 세 단계로 완전히 세분화를 했다.

특히 (2)번의 경우.. 팔자에도 없던 움짤(gif)까지 최초로 만들어서..
기존 입력기에서는 이렇게 불편하게 고쳐야 하는 것을 이 프로그램으로 세벌식 + 관련 설정을 바꾸면 저렇게 곧바로 가능하다는 걸 바로 알 수 있게 했다. 왜 지금까지 이렇게 만들 생각을 안 했나 모르겠다.

마지막 '간단한 사용법'은 이 프로그램을 받아 놓고 도대체 무슨 기능부터 써 봐야 할지를 모를 사용자를 위한 팁 모음 같은 페이지이다.
내가 왜 코레일로 이직을 못 하고 있는지 궁금하신 분들은 한번 구경해 보시길~~ ㅎㅎ

다음으로 <날개셋> 타자연습이다.
타자연습의 경우 지난 2013년 한 해 동안은 새 버전 소식이 없었다.
그러다가 올해 초에는 입력기 7.4와 더불어 타자연습도 3.4가 나올 예정이다.

사용자 삽입 이미지
큰 기능 변화는 없고 아기자기한 외형 변경, 고해상도(high DPI) 모드에서의 일부 외형 glitch 수정 등이 이뤄졌다.
작은 크기에서 기존 32*32 아이콘을 줄인 밍밍한 아이콘이 아니라, 깔끔한 소형 전용 아이콘이 나오는 것을 주목할 것.
그리고 이번 기회에 연습글을 상당수 교체할 예정이다.

단문 연습용으로 너무 식상한 속담· 격언을 넘어서서 김성모 화백 어록이 제공된 게 지금까지 반응이 무척 좋았다. "내가 무릎을 꿇었던 건 추진력을 얻기 위함이었다" 같은 드립이 타자 연습글로 나오니까..ㅎㅎ
이번에는 일반 인터넷 유행어도 추가되어 "저 새는 해로운 새다" "찰지구나" "안녕하신가 힘세고 강한 아침" "병시나 산소" 등이 연습글로 제공될 예정이다.

그리고 허 성도 교수의 <우리 역사 다시 보기> 강연 녹취록을 적당히 편집하여 새 연습글로 추가했다. 분량도 적당히 많고, 내용 역시 매우 건전하고 훈훈하고 이념스러운 것 없고, 전국민에게 알릴 필요가 있는 좋은 내용이기에 즉시 추가했음.

이것 외에도 혹시 추가할 만한 좋은 연습글 있으면 추천받는다.
잘 알려지지 않은 인물의 선행/성공 일대기, 특정 사회 시스템을 돌아가게 하는 내부 사정 이야기, 언어 특성을 잘 살린 탁월한 운문이나 수필 등등이 좋을 것 같다..
아울러, <방망이 깎던 노인> 내지 <은전 한 닢>의 패러디 중 하나가 "재미있는 이야기" 카테고리에 들어갈 가능성이 있다.

끝으로, 세벌식 파워업도 2013년 한 해 동안 버전업이 없다가 최근에 간단한 업데이트가 행해졌다.
다른 프로그램을 사용하다가 파워업의 꼬마 윈도우를 클릭했을 때, "x벌식으로 바꿨습니다"와 함께 키보드 포커스가 잠깐 밖으로 나갔다가 다시 돌아와야 하는데..
지금까지 그렇지가 않아서 IE 11 같은 프로그램에서 글자판 전환이 곧장 반영되지 않던 문제가 있었다.
이번 패치는 이 문제를 해결했다.

IE 9와 IE 10에서 모두 원래 관찮았는데 하필 Windows 8.1 + IE 11에만 문제가 있는 걸 사용자의 제보를 통해 확인했다.

이상, 입력기, 입력기 소개 페이지, 타자연습에 파워업까지.. 오랜만에 본인의 본업 관련 소식을 쭉 전했다. 새해에는 세벌식 글자판이 더욱 널리 알려지고 쓰였으면 좋겠다.

Posted by 사무엘

2014/02/04 08:22 2014/02/04 08:22
Response
No Trackback , 8 Comments
RSS :
http://moogi.new21.org/tc/rss/response/927

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

Comments List

  1. 세벌식 2014/04/24 22:07 # M/D Reply Permalink

    "세벌식-드보락" 사용자입니다.
    XP, 윈7 까지는 Shift+Ctrl로 "두벌식-쿼티"로의 단방 전환이 가능했으므로
    다른 입력기가 필요하지 않았는데,

    윈8.1에서는 단방 전환이 불가능하고 설정을 바꾸는게 엄청 번거로와져서
    방법을 찾다가 <날개셋입력기>를 설치하고 편리하게 사용할 수 있게 되었습니다.
    "윈도우키+스페이스바"로 "두벌식-쿼티"로의 단방 전환이 가능하기 때문입니다.
    컴퓨터를 전적으로 혼자 사용할 수는 없으므로 간편한 단방 전환 가능 여부는 매우 중요합니다.

    그런데...

    영영사전 프로그램을 사용하다가 발견한 문제점.
    (Longman Dictionary of Contemporary English 5th, Oxford Advanced Learner's Dictionary 8th 등등..)

    -. "날개셋-드보락"으로 설정을 하고 프로그램을 띄워도 "날개셋-쿼티"로 설정이 바뀜.
    -. "날개셋"에서 쿼티를 제거해봐도 여전히 쿼티로 바뀜.

    -. 바뀐 쿼티 상태로 그냥 입력을 하면 곧바로 입력이 되고,
    쿼티탓에 잘못 찍힌 글자를 지우고 드보락으로 전환하면 입력이 되지만,
    쿼티로 바뀐 상태에서 곧장 드보락으로 바꾸면 곧바로 입력이 되지 않고,
    입력창에 한번 클릭을 해야 입력이 시작됨.

    -. 윈도우 내장 드보락으로 설정하면 위의 문제가 생기지 않고 곧바로 드보락으로 입력이 가능함.
    하지만, 내장 드보락은 한글세벌식과 조합되지 않고 따로 설정이므로 한영전환시 번거롭고 불편함.


    <날개셋입력기> 7.4버전에서는
    드보락이 자꾸 쿼티로 바뀌거나, 작동이 불안정한 문제가 해결되었으면 좋겠습니다.
    부탁합니다...

    1. 사무엘 2014/04/25 09:58 # M/D Permalink

      안녕하세요?
      한글 IME는 키보드 드라이버 차원에서 동작하는 고유 글자판을 바꾸지는 못합니다. 그 쿼티는 자기가 쿼티 글자판을 구동시키는 모드가 아니라, 자기가 동작하지 않고 모든 글쇠를 응용 프로그램으로 보내는 모드입니다.
      그렇기 때문에 인위로 동작하는 드보락 모드 말고도, 필요한 경우 쿼티 글자판이 반드시 있어야 합니다. 제어판에서 쿼티를 삭제해도 '빈 입력 스키마'가 자꾸 생기는 걸 보셨을 텐데요. 이에 대한 자세한 설명은 도움말에 들어있습니다.

      다음 버전에서는 그 문제 자체가 개선되는 게 아니라, 쿼티 글자판을 없앨 수 없다는 안내문과 도움말 링크가 프로그램 UI에 추가되어 들어갈 것입니다.
      작업 자체는 굉장히 오래 전에 돼서 반영됐는데 7.11은 아직 그게 없군요. ^^ 7.4가 어서 나오긴 해야 합니다.
      감사합니다.

    2. 사샤나즈 2014/04/26 15:51 # M/D Permalink

      빈 입력 스키마가 작동할 때 작동하는 드라이버를 선택할 수 있도록 할 수는 없을까요?
      옛날에 새나루 입력기를 사용할 때는 쿼티용과 드보락용이 설치파일부터 나뉘어 있어 드보락 사용자도 쿼티로 바뀌는 일이 없이 사용이 가능했는데, 설치기에서 기본 드라이버를 선택할 수 있도록 하는 것은 어떨까 싶습니다. :)

  2. 사샤나즈 2014/04/26 15:47 # M/D Reply Permalink

    안녕하세요!
    오랜만에 입력기 관련 문서를 다시 살펴보다가 도움이 될 수 있을 듯한 문서를 찾아서 댓글을 달아 봅니다.

    "If your IME must store the dictionary file somewhere else, it must explicitly manipulate the Access Control Lists (ACL) of the dictionary files to allow access from app containers."
    http://msdn.microsoft.com/en-us/library/windows/apps/Hh967425.aspx
    http://msdn.microsoft.com/en-us/library/windows/apps/aa374872.aspx

    ACL이란 걸 명시적으로 지정해 놓으면 윈도8 modern 앺에서의 제한을 넘어서 ACL에 지정된 다른 경로에도 접근이 가능하다는 듯합니다. "dictionary file"만 말하고 있지만 글자판 관련 파일 등 다른 파일 접근도 상관 없지 싶네요.

    1. 사무엘 2014/04/26 18:30 # M/D Permalink

      반갑습니다. :)

      1. 새나루는 그렇게 키보드 드라이버의 customization까지 지원하는 게 인상적이더군요. 다만, 제 프로그램은 개발 방향의 특성상 그런 것까지 지원할 필요를 느끼지는 않아서 놔 두고 있습니다. “제 프로그램의 기능들을 활용해서 드보락도 덤으로 구현해서 대충 쓸 수 있다” 정도이지, 키보드 드라이버 차원에서 완전한 수준의 드보락 지원이 목표는 아니니까요.

      2. 그리고 소개하신 링크 문서는 저도 예전부터 봤습니다. 다만, 저게 구체적으로 뭘 의미하며 당장 내 프로그램에서 무슨 조치를 취하면 되는지 개념은 여전히 모르겠습니다. 당장 “Sharing information between processes: Use a web service to share data between Windows Store apps.” 이것도 뭘 말하는 건지 알 길이 없어요.
      그리고, 극단적으로 말씀드리자면, 데스크톱 앱에서 날개셋 제어판 실행 후, 입력 설정 파일을 '관리자 권한' 한번 줘서 Program Files 밑에다만 집어넣게 하면
      그건 메트로 앱에서도 공유가 가능하긴 합니다. 다른 이상하고 복잡한 방법을 찾느니 차라리 저게 현실적으로 더 나을지도 모릅니다. 깔끔한 방법은 못 되겠지만.
      메트로-데스크톱뿐만 아니라 32-64비트 장벽도 있으니 이거 참 골치 아프네요.

    2. 사샤나즈 2014/04/30 19:56 # M/D Permalink

      1. 음.. 혹시나 드라이버를 수동으로 바꾸더라도 날개셋 작동에 이상이 없게 된다면 (새나루의 경우는 키 입력을 받을 때 드라이버에 따라 바뀌지 않는 어떤 절대적인 값을 사용하는 것으로 기억합니다) 괜찮을 듯해요. MSKLC를 이용해 커스텀 드라이버도 만들 수 있으니 이것이 가능하다면 한글뿐 아닌 영문입력에서도 자유도가 상당히 높아질 거라고 생각합니다.

      2. 웹 서비스 이야기는 그 바로 위에 있는 on-the-fly learning에서 클라우드 서비스를 언급하는 맥락에서 보면 그 클라우드 서비스를 표현만 다르게 한 게 아닌가 싶네요. 윈도8부턴 설정 동기화 등을 중시하니까요.

      ACL 이야기로 돌아가면,
      http://msdn.microsoft.com/en-us/library/windows/apps/aa446596.aspx
      이 문서로 들어가면 SetEntriesInAcl 함수로 새 ACL을 만들라고 하네요. 여기서 날개셋이 파일을 읽을 수 있도록 접근 권한을 설정하길 요구하는 것일 텐데 아마 이 과정에도 관리자 권한이 필요하지 싶습니다.

      4/30/2014 덧:
      이번 IE 취약점 때문에 4월 26일자로 올라온 자료에 ACL이 언급되었길래 살펴봤는데, (30일자로 수정되었습니다만)
      http://cc.bingj.com/cache.aspx?q=acl+vgx.dll&d=4534163940053952&mkt=en-US&setlang=en-US&w=h-IUVpWHsTQN5nJ0klwNPS9ndQ5pKLjD
      cacls, 또는 비스타 이상부터는 icacls를 이용해 콘솔에서 ACL을 수정할 수가 있네요.

      icacls에 대해서는 여기에 패러미터 설명이 되어 있는데,
      http://technet.microsoft.com/en-us/library/cc753525.aspx

      위쪽 IE 취약점 관련 문서에서처럼 everyone 권한을, 지우는 대신 새로 준다면 되는건지, modern 앺에서 접근하려면 어떤 특정 권한을 따로 주어야 하는건지는 여전히 잘 모르겠네요..

    3. 사샤나즈 2014/05/02 13:16 # M/D Permalink

      http://support.microsoft.com/kb/2798317

      권한에 대해 좀더 봤는데,
      All Application Packages라는 그룹에 권한을 주면 modern 애플리케이션에서도 파일을 읽을 수 있게 되나 봐요.
      Windows 폴더가 현재 이 그룹에 읽기 권한을 주고 있네요.

      http://stackoverflow.com/questions/17761826/assigning-folder-permissions-to-all-application-packages-group
      이건 처음 올렸던 것처럼 코드로 직접 ACL을 만드는 방법에 관한 질문글인데 역시 All Application Packages 그룹 권한을 사용하고 있네요.

    4. 사무엘 2014/05/02 17:19 # M/D Permalink

      일일이 정보 리서치를 해 주셔서 고맙습니다.
      현재 작업 중인 새 버전은 한글 입력 알고리즘 쪽이 완전히 다시 만들어지다시피했는데 작년 11월 이후로 거의 반 년에 가까운 시간 동안 외부 모듈은 의외로 딱 하나(첫 타 씹힘 관련) 마이너한 버그가 고쳐진 것밖에 변화 내역이 없답니다.
      메트로 앱에서 입력 설정 동기화 관련 개선이 될 수 있을지는 모르겠지만, 나중에라도 참고하겠습니다. ^^

Leave a comment

1.

본인은 <날개셋> 한글 입력기의 개발자이며, 사용자로부터 프로그램과 관련된 문의 사항을 종종 메일로 받고 있다.
그런데, 단순 문의나 버그 신고, 제안을 넘어서 이런 한글/일반 문자 입력 방식을 고안해 놓은 게 있는데 이걸 혹시 날개셋에서 쓸 수 있게 만들어 줄 수 있느냐는 문의가 오기도 한다.

사실, 내 프로그램은 초보자가 당장 사용하기가 좀 어렵다는 것을 본인도 인정한다.
워낙 특이하고 구조가 복잡하기 때문에 프로그램의 개발 취지와 내부 구조를 어느 정도 이해하고 있어야 고급 기능들을 제대로 활용할 수 있다. 날개셋문자, 수식, 오토마타, 낱자 결합 규칙 같은 것들...

그러나 내 프로그램도 비록 여전히 내용이 어렵다는 비판은 있을지언정, 모든 기능들이 개념 설명과 문서화는 충분히 돼 있다.
스스로 설정을 이것저것 바꿔 보고 있는데 모르는 게 있어서 궁금한 부분만 묻는 것도 아니고,
아예 처음부터 끝까지 밥을 떠 먹여 달라는 부탁을 내가 일일이 다 들어 줄 수는 없다.

그분들이 날개셋 한글 입력기의 구조를 공부하는 게 어려운 것만큼이나,
역으로 그분들이 생각하고 있는 각종 독창적이고 기괴한 입력 방식 스펙을 내가 이해하고 의견을 맞추는 것도 만만찮게 어렵기 때문이다. 어느 쪽에서든 세상에 쉬운 일은 없다~!

그리고 만에 하나 내가 입력 설정 파일을 하나 만들어 줘도 그분들이 그걸 제어판에서 불러다 선뜻 쓸 수 있을 거라는 보장도 없고,
머릿속에만 존재하던 자기 입력 방식을 실제로 쓰다 보면 결국은 마음에 안 드는 게 생기고, 또 고치고 싶은 게 생기기 마련이다. 당사자는 손 하나 까딱 안 하면서 그걸 내가 일일이 다 고쳐서 애프터서비스를 해 줄 수도 없다. 프로그램 자체에 대한 서비스가 아니라 그 사람의 아이디어에 대한 서비스가 말이다.

그러니 내가 일일이 다 코치를 해 줄 수도 없고, 그렇다고 해서
정말로 날개셋 한글 입력기의 구조를 다 공부할 여력이 안 되는 분의 부탁을 고사만 하는 것도 최선의 해결책은 아니라 생각되기에...
이렇게 하기로 했다.

<날개셋> 한글 입력기를 이용한 문자 입력 방식 구축 컨설팅(?) 서비스는 앞으로 유료로 정식 제공할 것이다.

이 프로그램은 1.0 이래로 수익 모델은 한동안 대회 상금이 전부였다. 그러다가 1년 남짓 전부터 후원금을 받기 시작했으며 고맙게도 몇몇 분들께서 실제로 후원을 해 주셨다.
그 다음으로 제3의 수익 모델로는 저게 자연스럽고 적절하다고 여겨진다.

리눅스 배포사들도 리눅스 자체는 무료 배포하고, 각종 기술 지원을 유료로 함으로써 이윤을 내지 않던가.
그것처럼 <날개셋> 프로그램 자체는 누구나 무료로 사용 가능하되, 자기가 원하는 대로 프로그램을 세팅하는 기술 지원만을 유료로 하는 것이다.

현재 생각하고 있는 것은,
한 입력 방식에 대해서 customize된 ist 파일을 한 번만 만들고 애프터서비스 없이 끝내는 것이 3만 원, (단수?)
그리고 첫 ist 파일이 완성된 이후로 두 주 동안 최대 3회까지 입력 방식의 개정 요청까지 들어 주는 것이 5만 원 선이다. (복수?)

물론 만들어진 파일의 내부 구조와 원리에 대해서 각종 설명은 충분히 해 준다.
그리고 단수라 해도, 애초에 입력 설정이 예전에 접수된 주문대로 만들어지지 않았다면 수정을 해 준다. 주문 자체가 모호하고 불충분했던 것에 대한 추가 보완 내지, 단순 변심 수정 요청만을 받지 않을 뿐이다.

이건 양산된 컨텐츠를 뿌리는 게 아니라, 일종의 일대일 맞춤형 과외 같은 서비스이기 때문에 비용이 무슨 공산품 수준으로 저렴할 수는 없다.
저 비용을 지불하고 싶지 않으면 자기가 직접 날개셋 도움말을 독학하면서 수식을 입력하고, 비한글 입력의 경우 고급 입력기의 로직을 스스로 짜면 된다.
즉, 프로그램 자체가 무료인 이상, 무료 우회도로가 얼마든지 존재한다. 유료 고속도로는 단지 더 빠르고 편하게 가게만 해 줄 뿐이다.

거래는 이런 식으로 진행될 것이다.
사용자가 먼저 자기 입력 방식에 대해서 설명하고, 단수와 복수 중 원하는 서비스를 주문한다.
그러면 본인은 그 입력 방식에 대해서 내가 이해한 게 맞는지 되묻고, 그게 기술적으로 내 프로그램에서 가능한 입력 방식이라면 승락을 한다.
그래서 사용자가 서비스료를 후원 계좌로 입금하면 본인은 그 입력에 대한 설정 파일을 만들고 사용자에게 이것을 보내 준다.

입력 방식 컨설팅 수요가 얼마나 될지 앞으로 지켜보겠다.
오해가 없게 다시 말하지만, 자기가 직접 프로그램을 써 보면서 잘 모르는 것을 본인에게 문의하고 상담하는 건 당연히 얼마든지 무료이다.
머리부터 발끝까지 프로그램을 자기 입맛대로 설정을 다 맞춰서 떠 먹여 달라는 주문만이 유료이다.

2.

다음으로 <날개셋> 한글 입력기의 외부 모듈과 관련하여 지금까지 최상위 순위권으로 접수되어 온 질문에 대한 설명을 좀 다시 하겠다.
“드보락 자판을 쓰려고 하는데, 쿼티/빈 입력 스키마 글자판이 또 자꾸 새로 생기는 것” 말이다.

이미 아시는 분들도 있겠지만, 외부 모듈(IME)은 편집기처럼 자기 혼자 독자적으로 돌아가는 프로그램이 아니다. 운영체제 내지 응용 프로그램과도 조화를 이루며 동작해야 한다.
응용 프로그램이 생각하는 영문 모드는 “IME가 영문 글자를 보내는 모드”가 아니라 IME가 아무 키도 처리하지 않고 그걸 응용 프로그램으로 그대로 보내 주는 모드이다. 이때 지원되는 쿼티 배열은 IME보다도 아래인 키보드 드라이버 차원에서 제공되는 기능이다.

그렇기 때문에 <날개셋>도 여러 입력 항목 중에 아무 글쇠도 처리하지 않는 모드를 반드시 갖추고 있어야 하며, 날개셋의 영문 모드가 아니라 “운영체제가 지정하는 영문 모드”로 진입해야 할 때는 날개셋 프로그램이 자신을 그런 모드로 동기화해야 한다. 그렇기 때문에 그런 상황에서는 '빈 입력 스키마'가 지정되는 것이다.

<날개셋>으로 드보락 글자판을 아무리 설정해 봐도 그것은 운영체제의 관점에서는 영문이 아니라 한글 모드일 뿐이다. 응용 프로그램의 단축키가 드보락 방식으로 바뀌지는 않는다. 그 드보락이 native 쿼티를 완전히 대체할 수는 없다는 것을 이 자리를 통해 다시 밝히는 바이다.

3.

음, 그리고 이번에도 한영 상태 관련 이슈이다.
지금이 한글 모드인지 영문 모드인지, 지정돼 있는 글자판을 좀 더 쉽게 알 수 있게 할 수 없느냐는 문의도 지금까지 종종 받았다.
옛날에 삼성 전자에서 개발한 워드 프로세서인 훈민정음이 생각난다. 한글 모드일 때는 cursor가 검은 반전이 아니라 빨간색으로 바뀌었었다...!

이미 한영 상태 표시를 위해 입력 도구모음(language bar)에 아이콘이 있기 때문에 본인은 그걸 놔 두고 구태여 또 다른 UI를 만들 생각은 없음을 밝힌다. 게다가 훈민정음처럼 cursor의 외형을 바꾸는 것은 워드 프로세서 같은 응용 프로그램의 영역이지 한낱 IME가 관여할 수 있는 영역도 아니다.

다만 Windows 8의 style(modern, metro) UI의 경우 language bar가 없기 때문에 별도의 시각적 피드백이 필요하다. 입력란으로 키보드 포커스가 가면 현재의 IME 입력 모드가 간단한 사각형 모양으로 잠깐 나타났다가 사라진다. 이것은 <날개셋>도 지원한다.
그러나 이 기능을 굳이 style UI 말고 기존 데스크톱 UI에까지 지원해야 할 필요를 느끼지는 않는다.

Posted by 사무엘

2014/01/18 08:39 2014/01/18 08:39
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/921

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

Comments List

  1. 세벌 2014/01/20 00:28 # M/D Reply Permalink

    문자 입력 방식 구축 컨설팅(?) 서비스는 앞으로 유료로 정식 제공v
    아하. 그렇죠. 모든 것을 무료로 할 순 없겠죠. 여기에도 수익모델이 있었군요.
    많이 버시고 또 그만큼 더 좋은 프로그램 만들어주시길.

    1. 사무엘 2014/01/21 01:45 # M/D Permalink

      네~ 감사합니다.

Leave a comment

두벌식 한글 입력 방식에는 초성과 종성의 구분을 위해 도깨비불 현상이라는 게 존재한다.
이것은 <날개셋> 한글 입력기의 내부에서는 다음과 같은 조건에서 발생한다. 쉽게 말해 두벌식 종성 + 두벌식 중성 + 오토마타 0상태라고 요약된다.

1. 현재 입력 중인 글자의 직전 마지막 타가 두벌식 타입으로 입력되었고, 종성이 존재한다. (초성이나 중성은 있든 없든 무관)

2. 그 상태에서 초성이 없고 중성이 존재하는 두벌식 타입의 날개셋문자가 새로 입력되었다. (종성은 있든 없든 무관)
여기서 두벌식 타입이라 함은, 오리지널 두벌식 또는 6.7에서 새로 추가된 두벌식 종성 타입이 모두 해당한다.

3. 종성까지 입력된 그 상태에서 새로 입력된 날개셋문자에 대한 오토마타 수식 계산 결과가 0이다. 보통 종성의 경우 이어치기 오토마타 수식은 n -> C ? n : 0인데, 이때는 중성이 입력되면 C가 아닌 B가 nonzero가 되므로 어차피 계산 결과는 0으로 귀착된다.

4. 혹은 양수 상태라 해도 그 상태로는 중성 and/or 종성의 낱자 결합이 불가능해서 어차피 다음 글자로 넘어가야 한다. (implied zero state)


이런 상태에서 다음 글자의 조합이 계속될 때는, 그냥 넘어가는 게 아니라 앞 글자의 종성을 적당히 떼어서 다음 글자의 초성에 미리 넣어 주는 게 도깨비불 현상이 하는 일이다.
자음을 분할하는 방식은 그냥 마지막 한 타만 떼는 기본 동작이 있고, 그 외에 특수 도깨비불 규칙이나 초-종성 공유 낱자 결합 규칙이 관여하기도 한다. 이에 대한 더 자세한 설명은 프로그램 도움말을 참고하도록 하시고.

<날개셋> 한글 입력기는 여러 낱자를 한꺼번에 입력하는 걸 지원한다. 초-중성, 중-종성을 한꺼번에 입력하는 건 물론이고 지금 글자의 종성과 다음 글자의 초성을 곧바로 입력하는 것조차 가능하다.
이와 비슷한 맥락으로 두벌식에서는 '굴' 상태에서 ㅡ를 입력해서 '구르'까지 만드는 것뿐만 아니라 ㅡ+ㅁ을 한꺼번에 입력해서 '구름'을 바로 만들 수도 있다.

다만, 그게 오리지널 두벌식 타입으로는 가능한데, 비교적 따끈한 새 기능인 '두벌식 종성' 타입에서는 중성과 종성을 중첩 입력하는 게 제대로 지원되지 않았다. 이것이 지난 7.11 버전에서 개선되었다.
오리지널 두벌식은 비록 종성이라 하더라도 다음 글자로 넘어갈 때 종성이라는 정체성이 없어지고 초성과 완전히 다름없게 처리된다. 그렇기 때문에 그 상태에서 중성+종성을 한꺼번에 입력하는 것이 자연스럽게 가능하다.

그러나 두벌식 종성은... 비록 다음 글자로 넘어가서 모음과 결합함으로써 외형상 초성으로 바뀌긴 하지만, 원래 자신이 종성이었다는 본디 정체성은 변함없이 유지되어야 한다.
자신이 이미 불변 종성인데 중성과 더불어 또 다른 종성까지 한꺼번에 입력되면, 이것은 도깨비불을 의도하는 건지 아니면 그냥 중성과 종성의 평범한 결합이나 분리를 의미하는 건지 프로그램이 논리적으로 명확하게 결정해야 한다.

오리지널 두벌식 타입의 종성 ㅁ (H2|_M)을 조합하는 상태에서 두벌식 ㅏ+ㅂ(H2|EO|_B)을 배당해 주면 응당 '맙'으로 바뀐다. 단지 bksp를 한번 누르면 ㅁ이 이제는 종성이 아니라 초성으로 되어 있을 뿐이다.
그러나 두벌식 종성 타입의 종성 ㅁ (H2J|_M)에다가 같은 입력을 공급하면 '받침ㅁ/ㅏㅂ'이 되고 ㅏ+ㅂ을 따로 조합하는 상태가 된다.

그리고 받침 ㅁ 대신 받침 ㄹ을 조합하는 상태에서 같은 입력을 공급하면 그 중성과 종성이 지금 글자와 결합하여 ㅏ+ㄻ을 조합하는 상태가 된다. 이것은 받침 ㄹ이 오리지널 두벌식이든 두벌식 종성이든 결과가 동일하다. 왜 그럴까?

가장 큰 이유는 입력 날개셋문자에 중성뿐만 아니라 종성이 존재하기 때문이다. <날개셋> 한글 입력기가 제공하는 기본 오토마타들은 한 번에 초-중-종이든 낱자가 하나씩만 들어온다고 가정하고 설계되어 있다. 그래서 C ? n : 0 수식의 값은 nonzero가 되어, 도깨비불 현상 대신 지금 글자의 조합이 계속 유지되게 되는 것이다.

물론, ㄹ+ㅂ의 경우와는 달리 ㅁ+ㅂ은 결합이 성립하지 않는다. 세 성분 중 한 성분이라도 결합이 되지 않으면 결합은 실패하므로 도깨비불 현상이 발생한다. 이때 오리지널 두벌식은 ㅁ을 초성으로 넘겨 주기 때문에 '맙'을 성공적으로 만들어 준다. 그 반면 두벌식 종성은 ㅁ을 종성으로 처리한다. 그래서 도깨비불 현상 후에도 두 종성은 서로 충돌하며 결합이 실패한다.

이 경우 프로그램은 최종적으로 도깨비불 없이 ㅁ이 마치 세벌식 종성이었던 것처럼 변경 없이 놔 두고, ㅏ+ㅂ만 다음 글자로 따로 떼어 내 준다. 이번 7.11이 취한 정책이다. 예전에는 그냥 조합이 끊어져 버렸었다.

두벌식 종성으로도 중성+종성이 충돌 없이 도깨비불 현상 처리가 되려면, 도깨비불은 결합 실패로 인해 뒤늦게 발생하는 게 아니라 오토마타 수식 차원에서 0이 돌아옴으로써 이 타이밍 때 곧바로 발생해야 한다.
애초에 중성+종성 날개셋문자가 C ? n : 0 수식을 nonzero로 통과했던 게 화근이었다. 이 수식을 !B && C ? n : 0으로 바꿔 주면 문제가 해결된다. 종성이 한번 입력된 뒤부터는 오로지 종성만 받아들이도록 말이다.

이렇듯, 두벌식 종성에서 중성뿐만 아니라 중성+종성 복합 입력의 도깨비불 현상을 처리하기 위해서는 프로그램의 내부 알고리즘도 개선되어야 하고, 사용자의 설정도 미묘하게 바뀌어야 함을 알 수 있다. 한글 입력기 하나에도 오묘한 면모가 은근히 많다.

<날개셋> 한글 입력기는 13년 동안 개발되면서 버전이 무려 7.x대까지 올라갔다. 편집기나 외부 모듈의 외형은 엄청 옛날 버전이나 지금이나 거의 바뀐 게 없지만, 이 프로그램이 진짜로 꾸준히 바뀌고 있는 부분은 입력 엔진과 이를 제어하는 제어판 쪽이다. 이 프로그램은 그야말로 어떤 변칙적인 한글 입력 방식도 만들 수 있고 한자 변환이나 bksp 동작 같은 주변 기능까지 전부 세밀하게 제어 가능한 기술 통합형 엔진을 추구하고 있기 때문이다.

살짝만 스포일링을 하자면, 현재 구상하고 있는 것은 고급 입력 스키마와 고급 입력기이다.
글쇠를 길게 눌렀다 떼는 건, 여러 글쇠를 한꺼번에 누르는 것, 타이밍까지 세벌식 자판에 최적화해 주는 입력 스키마..
그리고 지금의 최종 변환 규칙 같은 것을 입력기 단위로도 적용하여 한글로 일본어나 구결을 곧바로 입력할 수 있는 문자 생성기. 한글과 비한글 문자를 조합 상태에서 끌어들일 수 있는 그런 시스템을 생각 중이다.

이 정도까지 만들어 놓으면 프로그램의 버전은 7.x대 중후반은 올라갈 수 있을 것이고, 그 뒤에 입력기 개발은 진짜로 반쯤 접은 채 다음 글꼴 연구를 시작할 수 있을 것 같다.
NLP 쪽의 연동이 없이 한국어와 무관하게 한글 자체만의 engineering도 할 일이 정말 많다.

Posted by 사무엘

2013/12/01 08:22 2013/12/01 08:22
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/904

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

Leave a comment

<날개셋> 한글 입력기 7.11

<날개셋> 한글 입력기 7.1은 다음 7.3이나 7.4가 나올 때까지 오랫동안 안정적으로 쓰일 수 있을 것 같았으나.. 시간이 흐르고 보니 부득이 소규모 7.11 업그레이드가 3주 남짓한 시간 만에 나오게 됐다.

이 버전에서는 외부 모듈이 다음과 같이 대대적으로 개선됐다.

1.
TSF B급 프로그램(메모장 같은)에서 '호환용 한글 자모'를 쓰고도 옛한글이 전혀 입력되지 않던 문제를 해결했다.
이것은 직전 버전인 7.1에만 있던 버그이다. TSF A급 프로그램에서 두벌식 도깨비불 현상에 의해 옛한글이 곧장 시작되었을 때 조합이 끊어지던 문제를 해결했었는데 불행히도 그게 TSF B급 프로그램에서는 심각한 오동작을 유발하고 있었다.
결국 A급일 때와 B급일 때를 인위적으로 나누어 따로 동작하게 하는 방식으로 두 토끼를 모두 잡았다.

한글 IME 개발이라는 게 이렇게 지저분하고 어렵다.
모호한 스펙 때문에 IME를 사용하는 구현체별로 문서화되지 않은 예측 불가능한 동작이 너무 많으며, 이것을 하나하나 다 맞춰 줘야 한다. 한 프로그램에다 동작을 맞춰 주면 다른 프로그램에서 오동작하는 게 왕왕 있다.

물론, TSF B급 프로그램에서는 '호환용 한글 자모'를 써서 첫 조합은 한 글자 길이를 보장시킨 뒤에 제한적으로 옛한글 입력이 가능하지만, 두벌식의 경우 도깨비불 현상으로 옛한글이 곧장 시작되었을 때 조합이 끊어지는 건 어쩔 수 없다.
이런 문제 때문에 MS에서는 논란의 여지를 없애기 위해 자기가 개발한 옛한글 입력기는 오로지 TSF A급 프로그램에서만 동작하게 제약을 걸었다. 지원하는 글자판 자체도 두벌식밖에 없기도 하니 말이다.

2.
Windows 8에는 일명 메트로라고 불리기도 한 Modern UI가 있고 거기서 일부 앱은 권한이 극도로 제한된 상태로 동작한다. 본인은 입력기를 테스트할 때 날씨(Weather) 앱을 실행한 뒤 장소 추가 대화상자를 꺼내 보곤 했다. 그런데 테스트를 하려면 인터넷 연결을 꼭 해야 해서 개인적으로 무척 성가시고 불편함을 느꼈다.

어쨌든, 그런 제한 모드에서는 IME가 자기 입력 설정을 불러올 수조차 없어서 어쩔 수 없이 설치 직후의 기본 입력 설정으로 동작한다. 이때는 입력 설정이 제대로 로딩되어 있는 다른 프로그램--데스크톱 앱 또는 권한 제약이 없는 Modern 앱--을 미리 실행해 놓고, 제약이 걸린 앱도 덩달아 같이 실행해야 입력 설정이 동기화된다. 이것은 기술적으로 더 어쩔 수 없는 귀결이다.

그런데 이번 버전에서는, 제약이 걸린 앱을 먼저 실행하고 제약이 없는 앱(데스크톱 앱 포함)을 “나중에” 뒤늦게 실행한 뒤, 제약이 걸린 앱으로 되돌아오더라도 입력 설정이 동기화되도록 프로그램을 개선했다. Modern 앱에서 <날개셋> 한글 입력기의 사용 편의성이 더 향상될 것으로 기대한다.
당연히.. 제약이 없는 앱을 실행한 뒤엔 그 프로그램에서 <날개셋> 한글 입력기 외부 모듈을 로딩도 하고서 돌아와야 한다.

3.
그리고 드디어, 드디어...
외부 모듈도 현대 한글뿐만 아니라 옛한글까지 bksp 낱자 단위로 지우기 및 달라붙기 같은 기능이 동작 가능해졌다. 물론 TSF A급 프로그램 한정이고, 단순한 한글 자모 나열이 아니라 filler까지 정규화가 잘 된 글자에만 한해서 말이다.

이 기능을 구현하는 기반은 사실 지난 6.5 버전 때 이미 다져져 있었다. 그러나 실제로 제공되지는 못하고 봉인되어 있었는데,
그건 TSF A급 프로그램에서 존재하던 옛한글 조합 관련 버그 때문이었다.
그래서 그 버그를 고치면서 봉인돼 있던 기능까지 다시 살펴보게 되었고, 결국 이것도 덩달아 구현에 성공한 것이다. 만세! 한글 처리 기술의 진보를 이뤘다.

외부 모듈과 관련된 위의 세 이슈가 중요한 것이고 다음은 사소한 변화 사항들이다.

(1) 이 프로그램은 입력 설정이 없는 경우 MS 한글 IME의 설정이 어떻냐에 따라서 세벌식이나 두벌식을 자동으로 가져온다. 그런데 0번 말고 2번에 배당되는 기본 한글 글자판은 언제나 세벌식 옛한글로 고정이었다.
이제부터는 0번이 두벌식으로 맞춰지면 2번의 옛한글 글자판도 두벌식 옛한글로 지정되게 바뀌었다.

(2) 영문 about 대화상자에 layerd 오타-_-를 잡았다. 2004년에 나온 3.0의 영문 GUI 때부터 지금까지 줄곧 존재했던 오타이다. -_-;;; 오타가 그 단어의 실제 발음과 직관적으로 잘 대응하는 편인 관계로, 오타가 있는 줄 9년이 넘게 꿈에도 모르고 있었다.
그리고 편집기의 편집 화면 옵션 대화상자에 있던 '이동줄'이라는 단어도 '스크롤 막대'라고 MS 표준 번역 용어로 바꿨다. 이 역시 해당 옵션이 처음으로 추가되었던 3.0 버전 때부터 썼던 단어인데 드디어 변경.. ㅎㅎ
사실 '이동줄'은 한글 윈도 3.1의 도움말에 있던 용어이다.

(3) 지난 7.1에서는 앞으로 '고급 입력 스키마'를 재개발할 것을 염두에 두고 기존 '동시 입력 스키마'를 제거했다.
그랬는데, 이 입력 스키마를 사용하고 있는 분으로부터 요청을 받고 그걸 다시 원상복귀시켰다.
다만 이제 이 입력 스키마는 이름 뒤에 '임시용'이라는 단서가 붙었으며 영문 명칭에는 아예 legacy라는 단어가 추가되었다.

(4) 화면 키보드 입력 도구가 지금까지 크기가 너무 작은 게 흠이었는데, 작게-중간-크게 3단계로 크기를 조절하는 기능을 추가했다.
물론 글쇠 자체는 여전히 16*16 고정된 크기로만 찍히지만, '중간'으로만 해도 고해상도 화면에서는 글쇠배열이 훨씬 더 시원스럽게 보일 것이다.

(5) 두벌식 종성으로 입력한 종성으로 중성+종성을 한꺼번에 입력하여 도깨비불 현상을 일으킬 때, 내부 처리가 좀 더 정확하게 되도록 입력 엔진을 개선했다. 내부 사연이 좀 복잡하므로 이에 대한 자세한 내역은 별도의 글로 다루도록 하겠다..

(6) <날개셋> 편집기의 찾기 기능을 다소 손질하여, 찾는 문자열 영역이 한글을 이루는 글자의 중간에 걸치는 것은 정상적인 찾기 결과로 인정하지 않게 했다. 그래서 'ㅎㆍ'를 검색하면 정말로 'ㅎㆍ'만 걸리지, 'ㅎㆍㄴ'이 걸리지는 않게 했다. 'ㅎㆍ'로 'ㅎㆍㄴ'을 찾는 건 '한글 낱자 단위로' 옵션을 켰을 때에만 가능하다.

업데이트가 귀찮으시더라도, 부디 최신 버전을 사용하여 프로그램의 원 저자가 의도한 모든 기능을 마음껏 활용하시기 바란다.
아울러, 10월 한 달간 두 분이 후원금을 보내 주셔서 누적 후원자 수는 세 분이 되었다. 태어나서 이런 걸 연달아 받아 보는 경험이 거의 처음이어서 감개무량하고 보람을 느낀다. 감사드리는 바이다.

Posted by 사무엘

2013/11/04 19:23 2013/11/04 19:23
Response
No Trackback , 14 Comments
RSS :
http://moogi.new21.org/tc/rss/response/895

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

Comments List

  1. 김재주 2013/11/05 21:52 # M/D Reply Permalink

    날개셋 개발하시는데 있어서 정해둔 유닛 테스트 같은 게 있으신가요?

    미리 만들어 둔 테스트 셋트를 스크립트를 사용해서 검증하면 버그 예방에 상당한 도움이 될 것 같아서요.
    Static analyzer도 쓰시는지 궁금하고요.

    1. 사무엘 2013/11/06 00:03 # M/D Permalink

      역시 재주 님다운 수준 높은 질문이군요. ㅎㅎ
      TSF A급, B급, legacy 운영체제의 IME 환경 등.. 카테고리별 테스트 케이스는 있습니다. 하지만 매번 매뉴얼대로 꼼꼼하게 테스트를 하거나 자동화 절차까지 갖춰 놓은 정도는 아니구요.
      이번 7.1처럼 외부 모듈에서 아주 중요하고 민감하며, 변경시 side effect가 발생할 수 있는 부분은 그런 걸 더 신중하게 했어야 하는데 미처 생각지 못했던 부분에서 문제가 발생했었습니다.

      그리고 정적 분석은 마침 고맙게도 Visual Studio 2012에서 추가돼서 예전에 한번 전체 소스를 대상으로 돌려 본 적은 있습니다.
      하지만 생각만치 심각한 문제가 있지는 않았습니다. 또한 정적 분석을 제대로 활용하려면 함수 선언부에도 각종 메타정보를 다 공급해 줘야 하는데 그런 것까지는 활용을 못 했습니다. ^^;;

  2. Lyn 2013/11/08 10:32 # M/D Reply Permalink

    PVS Studio
    http://pvs-studio.viva64.com/

    도 추천드립니다.

    1. 사무엘 2013/11/08 21:23 # M/D Permalink

      오오, 고맙습니다. 정말 세상은 넓고 온갖 정보와 솔루션은 넘쳐나는군요..!

  3. 사샤나즈 2013/11/11 22:36 # M/D Reply Permalink

    오오오... Modern 앺에서 동기화 기능! 추가해주셔서 감사합니다! 이제 굳이 스카이프를 껐다 켜지 않아도 날개셋을 작동시킬 수 있겠군요! layerd도 고쳐졌네요 >.<

    어떤 프로그램에선 옛한글 입력하면 조합이 망가져 버리던 문제도 있었는데 아마 1번에서 말한 문제가 아니었나 싶네요! 프로그램 문제인가 하고 있었는데...

    1. 사무엘 2013/11/12 01:08 # M/D Permalink

      저도 바라던 소식입니다. 7.11이 가려운 곳 여러 군데를 긁어 주는 버전업이 됐군요. ^^
      저도 며칠간 써 봤습니다만 이번 버전은 진짜로 앞으로 몇 개월은 업데이트가 필요하지 않을 정도로 충분한 완성도를 갖추고 잘 만들어진 것 같습니다.

  4. 사샤나즈 2013/11/22 20:45 # M/D Reply Permalink

    이상하게 여전히 자꾸 두벌식으로 고정되는 경우가 있는데, 그 중 하나로 윈도8.1의 기본 스카이프 앺에서는 항상 날개셋이 두벌식으로 고정되는 거 같네요. 다른 프로그램에서 글자판을 모두 불러온 상태에서 다시 스카이프를 껐다가 켜도 계속 두벌식으로 고정되니 스카이프와 호환성 문제가 있는 것인지... @.@

    1. 사무엘 2013/11/23 07:33 # M/D Permalink

      음 그런가요? 정확하게 표현하자면, 데스크톱용 앱을 실행해서 날개셋을 로딩해 줬는데도 설정 동기화가 같이 되지 않는 '모던 앱'이 여전히 있다는 얘기지요? 내장 스카이프가 그 예 중 하나이고? (제가 갖고 있는 preview에는 그게 아직 포함되지 않아서 재연은 못 해 보겠네요)
      절 도와드리는 셈치고, 번거로우시겠지만 잘 적용되지 않는 조건/경우를 스스로 더 정확하게 구체적으로 정리해 보셨으면 좋겠습니다. ^^
      일단 7.11 이후로 당분간, 최하 내년 봄 이상까지는 날개셋은 버전업 계획이 잡혀 있지 않으니 시간은 많습니다.

      * 여담이지만 모던 UI라는 말은 또 스타일 UI로 공식적으로 또 바뀌었다네요? 저도 최근에 알았습니다. 어휴 자꾸 사람 헷갈리게.. 개인적으로는 메트로가 제일 고유명사스럽고 알아듣기 쉬웠는데.. -_-;;

    2. 사샤나즈 2013/11/23 15:25 # M/D Permalink

      테스트를 조금 더 해서 알아본 바로는 스카이프 앺과 윈도 스토어의 MetroTwit 앺에서 이런 증상이 나타납니다.
      탐색기나 기타 데스크탑 프로그램에서 입력기를 불러들여도 이 두 앺에서는 두벌식으로 고정되는데, 방금 찾은 임시방편은 데스크탑 IE를 켜고 페이지 내에 입력창이 있는 페이지를 IE에서 불러오면 그 즉시 증상이 풀립니다.

      //파폭이나 크롬, 또는 데스크탑용 MetroTwit을 켜도 즉시 풀리네요..
      나머지 Style UI(!) 앺들은 그냥 탐색기에서 입력해보는 것만으로(또는 Win+S를 눌러 검색 막대를 불러오는 것만으로) 입력기를 불러올 수 있게 되는데, 저 두 앺들만 특이하게 이런 증상이 있네요.

    3. 사무엘 2014/01/21 01:45 # M/D Permalink

      드디어 Windows 8.1 정식 버전을 설치해서 말씀하신 상황을 살펴봤습니다.
      하지만 스카이프의 채팅창만을 말씀하시는 거라면, Win+S만 눌렀다 되돌아와도 제 자리에서는 입력 설정의 동기화가 별 문제 없이 되는걸요.
      님의 블로그의 글에 댓글로 자세한 조건을 알려 드렸습니다.
      문제에 대한 재확인을 부탁드립니다.

    4. 사샤나즈 2014/01/21 06:09 # M/D Permalink

      문제를 영상으로 찍어 보았습니다. 첫 화면은 로그오프 뒤 처음 진입한 화면입니다.

      마지막 터치키보드가 나오지 않는 장면은 물리키보드를 썼습니다.
      http://sdrv.ms/1e8Pv4b

      환경은 64bit 영문입니다만 언어나 32/64bit 차이가 영향이 있는지는 잘 모르겠네요...

    5. 사무엘 2014/01/21 07:34 # M/D Permalink

      오옷, 굉장히 신속하게 답변해 주셔서 고맙습니다.

      데스크톱뿐만 아니라 메트로(Modern/Style/Win store app..-_-)에서도 곧장 Win+S를 누르면 되는군요. 그리고 32비트 전용 환경에서는.. 스카이프 → Win+S 만 갔다 와도 곧장 동기화가 문제 없이 돼 버립니다.
      또한 현재 <날개셋> 한글 입력기가 메트로와 데스크톱 사이에 입력 설정을 동기화하는 방식은.. 기술적으로는 비트 수를 가리는 방식이기도 합니다.
      그렇기 때문에 현재로서는 응용 프로그램의 비트 수를 의심해야 하지 않나 생각해 봅니다.

      혹시 스카이프는 메트로 기반이긴 하지만 32비트 프로그램이고, 동기화를 시켜 주는 프로그램들도 다 32비트라는 공통점이 있지 않은가요? 그렇잖아도 웹브라우저는 어지간해서는 여전히 32비트 프로그램이 대세잖아요? Win+S나 탐색기 같은 운영체제 셸이야 다 64비트일 테고.
      데스크톱에서는 <날개셋> 한글 입력기의 About 화면을 보면 동작하는 프로그램이 32비트인지 64비트인지 곧장 알 수 있습니다.

      이것을 확인 부탁드립니다~!
      비트수 때문이라는 게 판명되면.. 이 문제는 더 해결 가능하지 않고, 매뉴얼 '일러두기'에 아이템이 추가되어야 합니다.

    6. 사샤나즈 2014/01/27 12:23 # M/D Permalink

      아마 그 이야기가 맞는 것 같습니다.
      작업 관리자에서 스카이프를 32bit로 표시하고 있네요. 그 상태에서 같은 .NET 프로그램을 켜더라도 64bit로 돌아가는 .NET 프로그램을 켜면 스카이프 쪽과 동기화되지 않고 32bit 프로그램을 켜면 스카이프 쪽과 잘 동기화되네요!

      위에서 Firefox를 켰을 때 잘 동기화된다고 했었습니다만 64bit 빌드를 켰을 때는 동기화되지 않습니다. 이제 궁금증이 풀렸네요 :)

      이런 증상이 있는 스카이프와 MetroTwit 앺 모두 32bit로 돌아간다는 특징이 있군요!

    7. 사무엘 2014/01/28 09:20 # M/D Permalink

      OK! 메트로 앱은 C++/CLI 기반이어서 좀 managed 코딩 냄새가 나지만, 그래도 엄연히 비트 수를 구분하는 네이티브 기계어 프로그램이더군요. 저도 도움이 됐습니다. 감사합니다. :)

Leave a comment

<날개셋> 한글 입력기 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

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

Comments List

  1. 김 기윤 2013/10/14 10:20 # M/D Reply Permalink

    아아, Bksp 동작 이해했습니다.
    예를 들어, 조합 중에는 낱자 단위로 지워지고, 조합 중이 아닐 때는 글자 단위로 지워지게 세팅한 경우,
    해당 옵션을 사용하지 않으면, 조합 중에 Bksp 를 눌러 글자를 다 지운 뒤에 뒷 글자를 지울 경우, 글자 단위로 지워지지만,
    해당 옵션을 켰다면, 조합 중에 Bksp 를 눌러 낱자를 다 지운 뒤, 다음 글자를 지울 경우, 이전에 낱자 단위로 지웠기 때문에, 계속해서 낱자 단위로 지운다는 말이군요.

    1. 사무엘 2013/10/14 17:35 # M/D Permalink

      옙~ 익숙해지면 무척 유용한 기능?옵션?이 될 거라 예상합니다. :)

  2. 사샤나즈 2013/10/14 17:39 # M/D Reply Permalink

    이제 Modern 애플리케이션에서도 옛한글이 문제 없이 입력되네요! 감사합니다 :D

    우연히 본 건데, 영문 About 페이지에 세벌식(three-layerd) 에 e가 빠져 있는데 아마 오타가 아닌가 싶네요 @.@

    1. 사무엘 2013/10/14 21:32 # M/D Permalink

      우와, 대박이네요. 저 스펠링은 지금의 about 화면이 생긴 이래로 수 년째 있었을 텐데..
      정말 꼭꼭 숨어 있어서 오타인 줄 꿈에도 몰랐습니다. ㅎㅎ

  3. 김선민 2013/10/16 19:00 # M/D Reply Permalink

    정말 잘 쓰고 있습니다.^^

    1. 사무엘 2013/10/17 22:19 # M/D Permalink

      ㅋㅋ 감사합니다. :)

Leave a comment
« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : ... 12 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2018/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:
1075561
Today:
521
Yesterday:
648