(上에서 계속됨)
※ 중대한 버그 수정
기능 얘기는 상편에서 그럭저럭 다 했고, 이제는 안정성이나 문서 등 부수적인 변화 사항 얘기를 하겠다.
굳이 직전 버전인 7.7만 그랬던 건 아니지만, 알고 보니 단순한 오동작 수준이 아니라 프로그램이 뻑날 정도의 안정성 버그가 생각보다 여러 곳에 있었다.
- 편집기에서 Alt+F1로 보조 입력 도구 대화상자를 꺼낸 뒤, '확인'이 아니라 '설정'을 누르고 취소를 눌렀을 때
- 콤보 박스가 있는 문자표나 부수 한자 입력 같은 보조 입력 도구를 꺼내서 콤보 박스를 클릭한 뒤, 그 상태에서 리스트를 우클릭 했을 때
- 제어판의 글쇠배열이나 한자 낱자 선택기처럼, 문자열이 아닌 문자 하나만 입력받지만 어쨌든 날개셋 에디트 컨텍스트를 사용하는 자체 컨트롤에서 특수글쇠를 사용했을 때
그리고 외부 모듈은 입력 항목 전환 수식의 값을 잘못 줬을 때 인덱스 오버플로우가 나서 역시 오동작과 crash가 발생할 수 있었다. 해당 문제를 해결했다.
※ 사소한 개선
버그이긴 하지만 프로그램의 안정성에 영향을 끼칠 정도는 아닌 것으로는,
(1) 글쇠배열 편집 윈도우에서 '두벌식 한글'을 입력받는 모드로 가는 단축키 F6이 실제로는 동작하지 않던 문제를 해결했다. 사용자의 제보로 문제를 발견했는데, 이런 것까지 어떻게 찾아 냈는지 신고해 주신 분이 정말 대단하고 고맙다.
(2) 글쇠 수식 편집 대화상자에서 상하 인접 글쇠 버튼을 통해 4단 숫자 자리로 갈 때, 정확하게 인접 글쇠로 가지 않던 문제를 해결했으며, 이 대화상자를 '확인'을 눌러서 종료하면 마지막으로 편집하던 글쇠 위치로 cursor도 자동으로 가 있게 동작을 고쳤다. 이렇게 하니까 역시 훨씬 더 낫다.
(3) 사용자에게 당장 심각하게 와 닿는 문제는 아니겠지만, DLL의 로딩 reference count가 꼬여서 DLL들이 FreeLibrary 때 바로 해제되는 게 아니라 해당 프로세스가 종료될 때에야 해제되던 문제를 해결했다. 직전 버전인 7.7을 포함하여 지금까지 역대 날개셋 프로그램들이 거의 다 갖고 있었던 문제이다.
※ 사소한 변경
(1) 현재 문자표(편집기에서 Ctrl+I)를 꺼내면 유니코드 문자에 대해 BMP 영역에 한해서 그 문자의 이름이 나옴과 동시에, KS X 1001로 변환 가능한 문자는 그 KS 코드 번호도 []로 둘러싸져서 같이 나온다. 그런데 변환 후에 다시 원래 문자로 역변환이 정확하게 되지 않는 문자는 * 로 추가로 표시가 되게 했다.
예를 들어 U+00A9 Copyright sign은 [A8CF]로 바뀌긴 하지만, 엄밀히 말하면 이것은 "동그라미+소문자 C"여서 모양만 비슷할 뿐 실제로 서로 다른 글자이다. 이런 것들이 [A8CF]* 로 표시된다.
(2) 이제 날개셋 설정의 내부에서 외부 파일을 참조하는 경우가 두 가지나 생겼는데(후보 데이터, 문자 집합 데이터), 설정을 저장하거나 불러오는 중에, 자기 자신이 들어가는 컨테이너 파일의 경로에 대한 정보를 감안할 수 있게 했다. 그래서 참조하는 외부 파일이 컨테이너 파일(ist, set, xml 따위)과 동일하거나 그 하부 디렉터리에 있다면, 절대 경로 대신 상대 경로로 저장된다. 그래서 ist/set 파일과 txt 데이터 파일을 같이 인터넷으로 배포한다거나 하는 작업이 원활히 처리 가능해졌다.
(3) Windows 8의 IME들은 [가], [A] 같은 한영 상태가 '검은 테두리'가 쳐진 흰 글자로 찍히는 것이 표준 디자인 가이드라인이다. 이와는 달리 내 프로그램은 잘 알다시피 지금까지 그냥 흰 글자만 찍히곤 했는데, 드디어 이제부터 글자 주위에 검은 테두리가 추가되었다. 직접 보면 차이를 느낄 수 있을 것이다.
※ 문서화
도움말에도 새로 추가된 기능 때문에 당연하게 내용이 추가된 것 외에도, 기존 내용도 10수 군데 이상이 바뀌었다.
아주 사소한 것부터 열거하자면, "답은 한글" 페이지에 재레드 다이아몬드 교수의 quote를 추가했다. 지금까지 당연히 수록돼 있을 거라고 생각했는데 그렇지 않은 걸 뒤늦게 알고는 경악했다.
"기본 자료구조"에서 "한글이 표현되는 방식"에 덧붙여 옛한글이 표현되는 방식을 별도의 지면을 할애하여 미리 설명했다. 한양 PUA는 다 걷어내기에는 이미 인프라가 굳어져 버렸다는 것, 그리고 유니코드 5.2가 가장 이상적이긴 하지만 아래아한글 2010 내지 Windows 8 이상에만 볼 수 있다는 것까지 언급했다.
이 외에도 인디자인 오동작에 대한 설명(명백히 인디자인 자체의 버그임), 단축글쇠 규칙과 관련된 여러 유의 사항들, 사용자로부터 지적된 오타 수정 등이 반영되었다.
다만, 문서 구조가 점점 "훈계 위에 훈계, 줄 위에 줄, 여기에 조금, 저기에 조금"(사 28:10)처럼 돼 가고 있다. 중구난방 산만하지고 있다는 뜻임. 언젠가 또 문서 내용을 싹 다 엎고 재정리를 해야 할 날이 올지도 모른다. =_=;;;
※ 영문 홈페이지
한편, 외국인들은 잘 알다시피 내 프로그램을 오로지 한글 로마자 입력 방식 때문에 사용한다. 도움말을 영작을 도저히 못 하고 있는 게 참 안타까운 현실이긴 한데..
지금까지 페이스북으로 자주 접수된 외국인의 피드백들은 크게 두 가지로, (1) "프로그램 UI가 언제부턴가 갑자기, 혹은 아예 처음부터 한국어로 튀어나온다. 영어로 바꾸는 법은?" (2) "잘 쓰고 있는데 프로그램 바이너리 파일이 삭제되고 제대로 동작을 안 한다."였다.
(1)에 대처하기 위해 영문 버전 홈페이지에 있는 서바이벌 가이드에다 언어를 변경하는 순서를 집어넣었다. (2)는 아마 안티바이러스 프로그램이 시스템을 감시하고 있다가 내 프로그램을 수상하다고 판단하고 무단으로 지워 버리기 때문인 거라고 설명을 넣었다. 내 프로그램은 msi, exe, dll 등등에 디지털 서명이 전혀 없기 때문이다.
아마 Windows 8부터는 다운로드 후에 탐색기에서 msi 파일의 속성을 꺼내서 Unsafe 마크를 수동으로 지워 준 뒤에야 설치가 가능했을 것이다.
쩝~ 서명도 받아야 할 텐데 이것도 한 최하 8.0 버전 이후대로 나중에 생각하기로 한다. 일단은 닥치고 프로그램 연구 개발만 해야 하기 때문에.
※ 다음 버전 계획
새 버전 자랑은 그럭저럭 다 늘어놓은 것 같고 지금부터는 후일담이다.
이번 7.9는 코딩 노예 계약서에 명시되어 있는 여러 아이템들을 이행하고 실현했지만, 그래도 미처 다 이루지 못하고 8.0으로 넘긴 아이템들 역시 많다. 입력 엔진 쪽은 제끼고, GUI 분야에서 작업이 확정되어 있는 것은 다음 두 가지 아이템이다.
(1) 수식에서 숫자는 무조건 한 형태로 획일화하는 게 아니라 10진수, 16진수, 상수 명칭이 적용된 놈 등 사용자가 입력한 원형을 보존하게 할 것이다.
(2) '보조 입력 도구'가 현재 한손 입력기, 화면 키보드, 부수 한자, 문자표 이렇게 4종류가 있다. 여기에 현재 사용자 변수(소문자)의 값과 지금 선택된 입력 항목의 번호를 원하는 형태로 보여주는 "사용자 편의형" 보조 입력 도구를 하나 추가할 것이다.
cursor 근처에 현재의 한영 상태를 표시하는 기능을 좀 추가해 달라는 기능 제안이 있었다. 물론 Windows 8 이상의 메트로 UI에는 이런 기능이 필요하고 날개셋 역시 그걸 지원한다. 하지만 데스크톱 UI에는 이미 멀쩡히 language bar가 운영체제 차원에서 제공되기 때문에 이것은 기능 중복인 관계로, 본인은 그런 제안을 일단 받아들이지 않았다.
굳이 그런 기능이 꼭 필요하다면 사용자가 그런 용도의 보조 입력 도구를 꺼냄으로써 그 기능을 사용 가능하게 할 것이다.
※ 다음 버전에서는 한글 정규화 방식이 변경될 예정
과거에 Windows Vista/7에서는 현대 한글이 자모 조합으로 풀어져서 표현된 것을 역시 한데 묶어서 출력해 주곤 했다. 가령, U+AC00뿐만 아니라 U+1100, U+1161도 똑같이 '가'로 찍어 줬다는 뜻이다. 이건 이전 버전인 XP까지는 없던 기능이었다.
그런데 지난 8부터는, 옛한글 쪽은 유니코드 5.2 자모가 추가되는 와중에 현대 한글을 모아서 출력해 주던 기능은 도로 없어졌다. 어찌 된 일일까?
답부터 말하자면 이것이 표준 규격을 더 준수하는 쪽으로 바뀐 것이기 때문이다.
유니코드 5.2와 함께 한글을 표현하는 규칙도 예전보다 더 엄격하게 바뀌었다. 현대 한글은 무조건 글자마디로, 옛한글이나 미완성 한글은 자모 조합인데 이것도 '초+중+(종)' 형태만 허용한다. 현대 한글을 자모 조합으로 표현하는 것은 이제 지원되지 않게 되었다.
<날개셋> 한글 입력기는 상징적인 의미를 감안하여 지금 7.9는 여전히 놔두고, 다음 버전인 8.0때부터 새로운 정규화 규칙을 적용할 것이다.
맥 OS는 계속해서 한글을 자모 조합으로 풀어서 표현하는데, 이것은 해당 소프트웨어의 잘못이다.
※ 갈수록 복잡해지는 프로그램
<날개셋> 한글 입력기의 전체 소스 코드는 7만 줄의 돌파를 앞두고 있고, 커널인 Ngs3.dll은 이제 15비트 단위를 넘어섰다(> 32768).
<날개셋> 편집기 같은 크기 고정 비트맵 글꼴 하나밖에 지원 안 하는 이 단순한 에디터도 사용자가 키를 하나 눌러서 cursor가 움직이고 A나 '가' 같은 글자가 하나 입력돼서 화면에 찍히기까지..
컴퓨터 내부에서 일어나는 변화와 실행되는 코드, 처리가 내가 보기에 너무 많은 것 같다.
동일한 일을 하더라도 지난 10여 년 동안 온갖 추상화 계층이 늘어나고 이것저것 체크할 게 늘어나다 보니 컴퓨터가 해야 하는 일은 더욱 많아진 것이다.
이 정도 규모의 프로그램이 벌써부터 이 지경이 됐는데 좀 더 최적화를 할 거리가 없는가 하는 자책감(?)이 들기도 하고, 한편으로는 서식이 존재하는 워드 프로세서는 얼마나 더 복잡할까 하는 생각이 든다.
단순 텍스트 에디터보다 복잡한 건 서식이 들어간 에디터이고, 그냥 화면용 서식을 처리하는 것보다 더욱 어렵고 복잡한 건 역시나 그 서식을 장치 독립적인 위지윅 형태로 레이아웃 가능한 워드 프로세서이다. 이미 아시는 분도 있겠지만 단적인 예로, 스프레드 시트인 엑셀은 서식은 지원하지만 위지윅을 지원하는 프로그램은 아니다!
※ 어떤 기능이 새로 추가되기까지의 과정
<날개셋> 한글 입력기에 새로운 기능은 대략 다음과 같은 사이클를 거쳐서 연구 개발되어 왔다. 참고 차원에서 소개한다.
- 수요 발생: "어.. 뭐가 불편하다, 이런 방식으로 입력이 가능했으면 좋겠다."
- 타당성 검증: "이게 있으면 타자를 더 편리하게 할 수 있거나 이론적으로 커버 가능한 한글 입력 동작의 영역을 더 확장할 수 있는 게 확실하다."
- 세부 작계 수립: 이론을 현재의 날개셋 소스에다가 접목한다. "이 기능은 입력 스키마에, 저 기능은 문자 생성기의 요 계층에 들어가면 되겠다. 요 가상 함수를 오버라이드 하면 된다. 이 때문에 부과되는 런타임 상의 메모리/성능 오버헤드는 이 정도이다."
- 구현: 기존 소스를 고쳐서 최소한의 기능만 동작하는 형태로 돌려 봄. 핵심 알고리즘을 실제로 구현함. 시제품을 하나 만든 것과 같음.
- storage: 이 새로운 기능으로 인해 새로 추가된 설정치 데이터가 있다면, 그걸 바이너리나 XML 형태로 저장되는 방식을 결정함
- GUI: 그 새로운 설정치들을 사용자가 고치는 대화상자 인터페이스들을 얹음
- 도움말: 새로운 개념, GUI들을 도움말에다 문서화함
5~7은 일종의 양산 단계와 같다. 4에 해당하는 코드가 전투 병력이라면 5~7은 보급 병력인 셈이다.
※ 맺는 말: 세벌식 진영의 파편화에 대한 생각
내 프로그램을 오래 사용하고 이곳 내 블로그에도 종종 들러 오신 분이라면 내 성향을 어렴풋이 알 것이다. (정치· 종교 성향 같은 거 말고=_=;; 한글 기계화 쪽 지론.)
난 골수 공 병우 세벌식주의자이고 세벌식을 그렇게도 깊이 연구했으며 한글 IME를 15년째 만들어 오고 있지만, 나만의 고유한 글쇠배열 하나 발표한 적이 없다.
글쇠배열 자체는 세벌식 최종을 예나 지금이나 별 불만 없이 잘 쓰고 있고, 단지 거기에다가 일부 특수글쇠만을 집어넣어서 "세벌식 무한낱자 수정"이라는 변종을 하나 만들었을 뿐이다. 영문 기호 같은 다른 '문자'를 집어넣은 게 아니다.
즉, 난 선박으로 치면 항해보다는 기관을 연구하는 사람이다. "Bksp를 눌렀을 때 무슨 단위로 지워지게 할 것인가"처럼 글쇠배열을 고치지 않고 그렇다고 NLP 기능도 동원하지 않고, 한글 입력기의 기계적인 메커니즘 자체를 더 정교하고 똑똑하게 만드는 것이 본인의 관심사이다. 문자 입력을 연구한다는 사람이 으레 관심을 갖기 쉽다고 여겨지는 저 두 분야는 정작 거의 다루지 않고 완전히 비껴 갔다는 점이 특징이다.
글쇠배열이야 어차피 이 장점을 살리면 저 단점이 있을 수밖에 없기 때문에, 초중종성이 모두 문맥 의존적이지 않은 독립된 자리에 배당돼 있고 "오른쪽에서 왼쪽 순이라는 큰 틀만 공 병우 스타일에 들면, 그 뒤부터는 뭐 어떻게 만들든지 도찐개찐"이라고 생각한다. 그리고 많은 사람들의 통념과는 달리, 본인은 4단 사용과 여러 겹받침 글쇠가 그렇게 큰 단점이라고 생각하지 않는다. 굳이 기계식 타자기와의 물리적인 호환성까지 고려하지 않더라도, 타자기와 컴퓨터가 사용자 경험이 근본적으로 완전히 다른 것도 아닌데.. 양손 균형과 리듬감을 위해서라도 그런 것들은 필요하다.
즉, 본인은 공 병우 세벌식 패러다임은 이미 타자기 시절 때 큰 그림이 그럭저럭 완성되었기 때문에 오늘날에도.. 무슨 스마트폰이나 아이패드로 논문을 쓰고 책을 저술하는 정도의 격변히 있지 않은 이상 기존 390과 최종의 사이를 절충하는 아주 사소한 변화 이상의 변화가 또 필요하다고 생각하지는 않는다. 모바일이나 터치 스크린을 배려해서 신세벌식 스타일로 중성과 종성을 문맥 의존적으로 중첩 배당하는 것은 불가피한 상황에서 optional한/부가적인 동작 방식으로 별도로 논의해야지, 그게 main이 돼서는 안 된다고 생각한다. 하긴, 최종이라는 명칭조차도 391이 더 정확하다는 말이 있는데.. 일단 7.9에서는 반영하지 않고 그냥 놔 뒀다.
요즘 민간에서는 이 둘의 통합을 목적으로 글쇠배열을 연구하고 날개셋 설정 파일을 배포하는 분이 계신다. 그런 걸 창의적으로 마음껏 연구하고 손쉽게 써 보라고 내 프로그램을 만든 것이니 이것은 일면 반가운 현상이다. 세벌식 자체가 듣보잡으로 걍 묻혀 가는 것보다 백 배 나은 모습이다. 컴퓨터의 속도가 아무리 빨라져도 거품 정렬이 퀵 정렬보다 더 빨라질 수는 없는 것처럼 양 손 열 손가락을 쓰는 환경에서 두벌식은 세벌식을 구조적으로 결코 따라잡을 수 없는 건 명백한 사실이다. 세벌식을 배제한다는 건 한글 입력의 진정한 활용 가능성을 반 이상 제 발로 포기하는 짓이다.
다만 세벌식 글쇠배열이 갈수록 파편화해 가는 것에 대해서는 본인 역시 본연의 임무인 프로그램의 연구 개발을 그럭저럭 마친 뒤엔 좀 더 적극적으로 의견을 내야 할 것 같다. 또한 공 병우 박사를 직접 뵌 적이 있는 후예 세대들과(390 위주), 그 후에 세벌식을 접한(최종 위주) 본인 같은 세대 사이에 좀 더 적극적인 의사소통과 의견 수렴이 필요할 것으로 보인다.
공 병우 박사는 저렴한 보급형 교육용 IBM PC 따위는 거들떠보지도 않고, 1980년대 초 그 옛날에 그 비싼 돈지랄이던 애플 매킨토시로 컴퓨터를 시작한 분이다. 80대 노인이 다 돼서는 그것도 21세기도 아닌 1980년대에 아들뻘인 5, 60대 중장년 후배들을 보고 "지금 시대가 무슨 시대인데 컴퓨터를 안 배우다니 무슨 추태냐! 아직도 펜으로 글을 쓰는 미개한 족속 같으니라고.. 서양에서는 초음속기와 우주선이 날아다니는 마당에 우리는 아직 소 끌고 달구지 끌고 다니는 거나 마찬가지다" 이렇게 갈궜던 넘사벽 얼리어답터임을 생각할 필요가 있다.
이거 뭐 우리 같은 사람은 사고방식이 뭔가 범접할 수 없는 분이다. 또한 본업인 안과학뿐만 아니라 공돌이 기질도 펄펄 넘쳐서 기계 발명도 엄청 많이 하셨던 분인데, 그런 분이 인터넷과 스마트폰을 접했으면 또 무슨 생각을 했을지(일단 스마트폰은 시간을 아껴 주는 좋은 물건이라고 기본적으로 +50점은 먹고 들어갈 듯).. 기계식 타자기와 직접적인 관계가 없으며 전통적인 두벌 세벌 논쟁과는 한 발짝 떨어져 있는 모바일 기기에서는 한글 입력에 대해 어떤 생각을 하셨을지 나로서는 100% 정확하게 시뮬레이션을 할 수 없다. 그래도 글쇠 수를 일부 줄일지언정 도깨비불 현상이 없는 한글 입력 방식은 반드시 필요하다고 주장하셨을지도 모르겠다.
Posted by 사무엘