1. 들어가는 말
이번 학기도 다 끝나고 여름방학이 시작됐다. 이젠 코스웍이 한 학기밖에 안 남았고, 슬슬 종합 시험과 학술지 논문 등 길고 긴 연구 모드로 들어갈 준비를 해야 한다.
그런데 아직 기말 과제가 다 안 끝났을 때, 방학이 되길 벼르고 벼르면서 타는 목마름으로 할것들을 적어 놓은 게 이미 한 트럭인지라, 방학이 된 뒤에도 별로 방학 같은 느낌이 안 든다.
이게 무슨 상황이냐 하면, 월급날이 돌아와 봤자 카드 명세서와 저축, 집 대출 이자 내지 자동차 구입 할부 등의 비소비 지출들이 한바탕 raid를 벌이고 나면, 여전히 가난한 것과 완전히 똑같다.
알람 안 맞추고 좀 원없이 자 보고 싶다.
하루에 최하 8시간 이상, "너무 자서 골병 들 거 같다. 이제 좀 그만 자야지" 생각이 들 때까지 자고 싶다.
코딩 노예 계약서를 화형에 처하고 싶다.
차 끌고 전국일주 여행 좀 가고 싶다. 그리고 여친도 좀 사귀고 싶다. -_-;;
내가 도대체 무슨 부귀영화를 바라고서 이 나이까지 이 짓을 하고 있나.. 그냥 빨리 돈 벌고 안정적으로 살려면 스펙 관리해서 코레일이나 철도 시설 공단에나 들어가면 되지 싶은 자괴감이 들긴 하지만,
뭐 어쨌듯 이런 와중에 <날개셋> 한글 입력기 8.0이 완성됐다. 그 다음 버전(8.x)까지 빨랑 다 만들어 버리고 완성된 모습을 좀 보고 싶다.
이번 8.0은 리팩터링 내지 내부 완성도 강화 작업이 많아서 readme에다가는 쓸 게 적은 편이었다. 하지만 내부적으로는 0.1을 능가하는 분량의 변화가 있었다.
지난 5월에 이미 언급했듯이 편집기에서 한글 정규화 규칙 강화, 수식의 상수에 원형 보존이라는 굵직한 변화가 있었으며, 또 '초성 지향 두벌식', 글쇠누름 날개셋문자 기능과 관련해서 조합 종료 처리가 불완전하던 것을 보강했다.
사소한 것으로는 한글 조합 중에 아무 자모 없이 H2, H3, H2J 이런 날개셋문자만 달랑 넘겨 준 경우 지금까지는 그냥 아무 일 없었다는 듯이 무시만 당했지만, 지금은 입력 중인 한글의 종류를 그걸로 변경되게 했다. 이것 말고도 아주 마이크로한 부분에서 프로그램의 완성도를 높이고 소스 코드 구조를 개선하는 작업들은 가시적인 작업 성과에 비해 난이도가 무척 높았다.
또한 도움말과 프로그램 소개 페이지에 있는 스크린샷들을 싹 다 최신 버전 기준으로, 특히 외형도 Windows 8 모양으로 교체했다. 알다시피 Windows 8이 비주얼이 더 단순하고 빈약한 덕분에 같은 화면이어도 스크린샷의 크기가 더 작아졌다. 이로 인해 도움말 크기가 몇만 바이트 감소하고, 프로그램 전체의 배포 패키지 크기도 아주 약간 더 작아졌다. 프로그램은 덩치가 조금 더 커졌는데도 말이다. 예기치 못한 긍정적인 효과이다.
이런 식으로 사소한 것들이 쌓이고 쌓였다는 뜻이다. <날개셋> 한글 입력기는 개발 15년째인 아직까지도 매 새 버전마다 새로운 역사를 쓰고 있다.
2. 입력 패드에 키보드 입력 모드 추가
이런 것 이후에 이번 <날개셋> 한글 입력기 8.0에서 추가된 큰 기능은..
편집기와 외부 모듈에 이어 제3의 구현체이던 입력 패드가 드디어 키보드 입력이 가능해졌다는 점이다.
Windows에서 정식 IME가 아닌 EXE 형태의 프로그램이 다른 프로그램에서 키보드 입력으로 한글을 입력해 넣는 게 가능해졌다.
입력 패드는 5.3버전에서 첫 도입된 이래로 약 6년 동안 마우스를 이용한 '입력 도구'의 구동만 가능한 반쪽짜리 구현체였다. 키보드까지 지원하는 것은 기술적인 난관 내지 구현 가성비 등을 감안했을 때 보류되어 있었고 연구 우선순위도 별로 높지 않은 상태였다. 당장 이번 8.0에서도 처음엔 딱히 고려 대상이 아니었는데...
그러나 화면 키보드에 '눌린 글쇠 표시'기능을 넣는 과정에서 입력 도구에도 키보드 입력을 연계하는 기능이 7.9와 8.0의 개발 과정에서 자연스럽게 구현되었다. 어떤 글쇠가 눌렸다는 통지를 받고, 원한다면 이 키 입력을 입력 도구가 가로채어 먹을 수도 있는 것이다.
그러니 아예 키보드 입력을 지원하는 것도 이 작업의 연장선 차원에서 지원 가능하겠다는 생각과 함께 불현듯이 개발이 진행되었다.
그냥 입력 패드를 실행하면 딱히 변화가 없다. 그러나 트레이를 우클릭해서 메뉴를 열면 "키보드 입력 사용"이라는 메뉴가 추가되어 있다. 이걸 선택해서 체크하면 키보드 입력이 가능해진다.
단, 입력 패드는 운영체제 IME가 동작하지 않는 틈을 타서 동작하며, 이미 제도권에서 돌아가고 있는 운영체제 IME를 대체하거나 그 동작을 바꾸지는 않는다. 운영체제 IME가 '영문 반자'로 켜져는 있으되 동작은 안 하는 상태여야 한다. 걔가 한글 모드일 때는 본 프로그램은 아무 동작도 하지 않는다. 또한 운영체제 IME가 자기 입력 모드를 바꿀 때 사용하는 한영 글쇠 같은 것도 가로채지 못하므로 Shift+Space나 우클릭 메뉴처럼 다른 전환 글쇠를 배당해야 한다.
또한 마우스만 지원하던 예전부터 마찬가지이긴 했지만, 입력 패드가 제공하는 입력 기능은 데스크톱 GUI 환경 전용이다. 명령 프롬프트나 Windows 8 이상의 메트로 UI에서는 동작하지 않는다. 거기서는 정식 외부 모듈만을 써야 한다.
입력 패드가 제공하는 입력 프로토콜의 수준은 TSF A급이 아니다. 조합을 만들고 완성된 문자열을 내보내는 것만 가능할 뿐, 조합이 끝난 인접 문자열을 알아 오거나 고칠 수는 없다.
입력 패드가 TSF를 지원하는 프로그램에서 TSF A급으로 동작하는 것은 이번 8.0의 개발 작업을 통해 기술적으로 '불가능한 건' 아님을 확인했다. 하지만 구현하는 오버헤드가 굉장히 크며, 편집기와 외부 모듈이 있는 상황에서 입력 패드가 굳이 그것까지 지원할 필요는 없다고 여겨져서 미지원 상태로 남겨 뒀다.
따라서 편집기는 전용 프로그램이다 보니 언제나 A급이 보장되고, 외부 모듈은 어느 프로그램에서 동작하느냐에 따라 A/B급이 유동적으로 바뀌는 한편, 입력 패드는 간편하게 동작한다는 특성상 언제나 B급이라는 차이가 존재한다.
끝으로, 편집기나 외부 모듈과는 달리 입력 패드는 한자 변환을 아직 지원하지 않고 있다. 키보드 입력이 지원되기 시작했기 때문에 앞으로는 이 한계가 이제 더욱 부각되어 보일 것이다.
이 역시 기술적으로 불가능한 건 아니고 단순히 해당 UI가 시간 부족-_-으로 인해 구현되지 않아서 지원되지 않은 것이다. 입력 패드에서 글자 조합 중에 한자/후보 변환을 시도하면 "해당 기능은 아직 지원되지 않습니다"라는 풍선 도움말이 뜬다.
3. 타자연습
타자연습은 프로그램에 변경 사항은 없으며 이번 입력기 8.0 버전도 예전의 7.9와 마찬가지로 타자연습 3.41하고 API가 호환된다. 그러므로 타자연습을 굳이 또 다시 받아서 설치하지는 않아도 된다. 다만, 이번에는 3.41을 다시 올리면서 연습글에다 "세스코 질문 답변 모음"을 추가했다.
"나는 바퀴벌레 제 1군단 장군이다. 우리는 너희 세스코를 적으로 간주하며 오는 12월 25일 크리스마스 선물로 너희 세스코 본사를 대대적으로 공격할 것이다." 뭐 이런 문장으로 연습을 할 수 있다.
'퀴'는 세벌식에서 치기 어려운 축에 드는 글자이니 연습 효과도 상대적으로 클 것으로 기대된다.;;
이 때문인지, 어지간한 연습글들은 분석해 보면 4단의 사용 빈도가 3~5%대인 반면, 세스코 글은 6%가량 된다. ^^
엔하위키(지금은 이름이 '나무'로 바뀌었지만)나 각종 인터넷 카페에서 <날개셋> 타자연습 프로그램에 대한 소개를 해 놓은 걸 보면 김 성모 유행어와 각종 인터넷 유행어가 연습글로 들어있는 게 역시나 반응이 아주 좋다. 이제는 시간이 너무 흘러서 그것조차도 유행이 다 지나려 하긴 한다만..
세스코도 비슷한 맥락으로 재미있는 연습글 역할을 할 수 있을 것이다.
4. 후속 과제
7.9에서 8.0은 지난번 7.7에서 7.9로 올라갈 때만치 양적 성장은 없지만 추가된 소수의 기능들이 제각각 매우 중요하고 여파가 크다. 버전에서 소수점이 아닌 1자리 숫자의 변화와 같이 일어나기에 적절한 것들이다.
사실은 이번 8.0에서는 최종 변환 규칙의 동작 방식을 변경하고, IME 관련 이벤트를 정형화해서 "변경된 글자판을 cursor 근처에다 잠시 표시해 주는 입력 패드"도 추가하려고 했다. 그러나 이것은 입력 패드의 키보드 입력 기능을 구현하느라 뒷전으로 밀려서 다음 버전의 과제로 남게 됐다.
사실, 입력 패드는 현재의 글쇠배열을 표시하는 UI가 어디에도 존재하지 않는다. 시스템 트레이의 아이콘을 가리키고 있어야만 툴팁으로 나온다. 그러니 입력 패드를 쓰고 있을 때는 저 UI가 더욱 필요할 텐데 시간 관계상 8.0에서 다 반영되지 못했다. 3개월 정도 시간이 지났고 이미 0.1 이상의 충분한 작업량이 쌓였으며, 7.9에 꽤 어이없는 버그가 있기도 하기 때문에 새 버전의 공개를 지금 시점보다 더 미룰 수는 없었다.
그러니 굳이 많은 기능들을 사용하는 헤비 유저가 아니더라도 이 글을 보시는 7.9 사용자라면 8.0으로 빠짐없이 업그레이드를 하고, 한번 입력 패드도 사용해 보시기 바란다.
생각 같으면 한 배포 패키지에서 32비트와 64비트별로 파일이 알아서 설치가 되고 편집기/외부 모듈/입력 패드 구현체들 중 사용자가 원하는 것만 선택해서 설치하는 옵션도 넣고 싶긴 하다.
과연 다음 버전 8.1이나 8.2는 신규 모아치기/동시치기 엔진까지 포함해 <날개셋> 한글 입력기의 종결자 버전이 될 수 있을까? 그건 나도 모른다. to be continued일 뿐..! 그래도 1년 전에 비해 task list가 눈에 띄게 가벼워진 것을 보면 감회가 새롭다. 느리긴 해도 노예 계약은 추가되는 것보다 이행되는 게 더 많으며, 꾸준히 청산하고 있는 중이다.
* 여담 1: 한중일 IME들의 제어판 UI의 구조
잘 알다시피 Windows에서 문자 입력을 위해 단순히 운영체제의 기성 코드 + 데이터 차원의 variant가 아니라 아예 제3자가 만든 IME라는 별도의 프로그램이 쓰이는 언어는 한국어(한글), 일본어, 중국어 간체, 그리고 중국어 번체 이렇게 4개이다.
그런데 Window에 내장돼 있는 중국어나 일본어 IME에서 환경설정 대화상자를 열면 그건 IME 프로그램 내부가 아니라 별도의 EXE 프로그램이 실행되는 형태로 열린다. 그 대화상자가 떠 있는 상태에서 예전에 글자를 입력하던 창으로 돌아가는 것도 가능하다.
환경설정뿐만 아니라 보조 입력 도구를 꺼내는 것도 IMEPADSV처럼 한중일 IME들이 한데 공유하는 별도의 프로그램을 써서 하며, 도움말도 통상적인 HtmlHelp API를 쓰는 게 아니라 HH 프로그램을 별도로 띄우는 방식으로 동작한다.
IME들은 자기가 돌아가는 프로세스에 끼치는 영향을 최소화하려고 의도적으로 그렇게 만들어진 것 같다. 뭔가 복잡한 GUI를 띄워야겠다 싶은 건 in-process로 구동하는 걸 기피한다.
내 프로그램의 경우 제어판은 규모가 상당히 크긴 하지만 그냥 in-process에서 modal 대화상자 형태로 돌아가며, 편집기나 입력 패드 같은 독립적인 구현체들 단위로 별도의 EXE가 만들어져 있지, 중간의 구성요소가 또 EXE이지는 않다. 쉽게 말해 <날개셋> 제어판이 그 자체가 독립적인 EXE로 존재하지는 않는다는 뜻이다.
MS 한글 IME는 운영체제의 제어판이 아닌 자기 자신만의 독자적인 UI에 환경설정을 꺼내는 명령이 아예 존재하지 않아서 두벌/세벌 전환조차도 하기가 불편하다. TSF가 도입되기 전, Windows 98~ME 시절에는 자기 도구모음줄을 우클릭해서 글자판을 아주 간편하게 바꿀 수 있었는데 그런 기능이 없어졌다.
* 여담 2: Windows 8.1의 MS 한글 IME
Windows 8때까지만 해도 이런 게 없었는데 난 이걸 비교적 늦게 발견했다.
8.1의 메트로 UI에서 MS 한글 IME로 한글을 입력하다가 글자를 지워 보면, 연달아 입력하던 단어까지는 계속해서 자모 단위로 지워지다가 그 뒤부터 글자 단위로 지워진다. 오, 신기한 기능이 추가됐다. 사실 이렇게 동작하는 게 일반적으로 훨씬 낫다. <날개셋> 한글 입력기의 경우 2년 전 버전 7.1에서 비슷한 옵션이 처음으로 추가되었다.
단어 전체를 조합으로 잡는지, 아니면 실시간으로 앞 글자를 얻어 오는지는 잘 모르겠지만, 세벌식에서 받침 ㄶ을 한 타로 바로 입력했는지 ㄴ+ㅎ로 입력했는지를 다 정확하게 기억하는 걸로 봐서는 아마 전자인 것 같다.
Posted by 사무엘