다음 버전 개발 근황 ㅋ

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

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

Comments List

  1. Lyn 2013/04/13 16:36 # M/D Reply Permalink

    다음버전은 샤방샤방한 스킨 기능을 붙여서 (...)

  2. 김재주 2013/04/13 20:09 # M/D Reply Permalink

    이왕 이렇게 된 거
    사전과 형태소 분석 기능, 입력 패턴 분석 등의 알고리즘을 추가하여

    단어 입력중에 단축리스트가 떠서 입력속도를 단축시킬 수 있는
    우주최강 한국어 입력기로 재탄생하심이 어떨지...

  3. 사무엘 2013/04/13 22:27 # M/D Reply Permalink

    Lyn: ㅋㅋㅋ 스킨이라니.. ^^

    김재주: 언어 처리까지 들어가는 건 일단 날개셋의 개발 범위가 아닙니다만, 운영체제 차원에서도 자동 완성 쪽을 굉장히 많이 밀고 있기 때문에 그런 걸 무시할 수는 없을 것 같습니다. 글쇠 수가 적은 환경에서는 굳이 중국어/일본어 같은 언어가 아니라 영어까지도 자동 완성이 팍팍 쓰이니까.
    한국어로 범위 확대는, 한글만 갖고도 할 수 있는 일을 다 끝낸 다음에 생각해 보죠. ㅎㅎ

  4. 김재주 2013/04/14 14:20 # M/D Reply Permalink

    뭐 개발하시게 되더라도 입력기 자체게 포함된다기보다는 외부 모듈 같은 형식으로 추가하시게 될 것 같네요 아무래도 분야가 비슷하긴 해도 약간 다르니까요

    아니면 안드로이드 및 아이폰으로 레알 진출하는 것도 한가지 방벙이 될 것 같습니다 ㅋㅋ

  5. 이수동 2013/04/14 14:25 # M/D Reply Permalink

    안마태 소리글자 자판. ist 파일을 좀 구하려고 합니다
    자료가 있으며 링크 사이트라도...
    설명에는 날개셋 환경설정에서 하라고 되어 있는데요
    안마태 파일은 없네요
    한번 써보고 싶어서요
    한글 검색하다가 안마태 키보드를 보게 되었네요

    날개셋 좋은 아이디어네요

    훌륭하신 프로그램 타인에게 많이 공유 하도록 하겠습니다

    1. 사무엘 2013/04/15 07:29 # M/D Permalink

      안마태 소리글판은 제가 (주)안마태 연구소와 모종의 계약을 맺은 관계로, 이제 날개셋에서 정식으로 유형 파일을 제공하지 않습니다.
      손수 입력 설정을 맞춰서 쓰거나 예전 버전에 들어있던 파일을 스스로 찾아서 쓰는 것까지는 저나 그 회사 측에서 일일이 간섭할 수 없는 영역이지만, 바로 불러다 쓸 수 있는 파일을 응용 프로그램 차원에서 드리지는 않게 되었습니다. 이 점 양해해 주세요.

  6. 팥알 2013/04/15 13:23 # M/D Reply Permalink

    신세벌식 자판 원안에서 홀소리 ㅣ와 받침 ㅎ이 들어간 자리의 글쇠값은 이런 수식으로 들어가 있는데요.

    D&&(!E || E==0x15 || E==0x2B || E==0x40) ? H3|I_ : H3|_H

    이렇게 하면 ㅟ, ㅚ처럼 첫소리 없는 겹홀소리만 따로 넣지 못하는 점이 아쉽습니다.
    아래처럼 수식을 바꾸면 어떨까 싶습니다.

    D&&!E || E==0x15 || E==0x2B || E==0x40 ? H3|I_ : H3|_H

    1. 사무엘 2013/04/15 14:32 # M/D Permalink

      오, 그렇게 생각할 수도 있겠군요. 하지만 어차피 이중모음의 첫 시작인 ㅗ,ㅜ를 Shift와 함께 누르기 때문에 다음 타도 대체로 shift를 누른 채로 누르는 경우가 많지, 그걸 non-shift로도 입력할 수 있게 하는 건 그렇게 큰 의미가 있을 것 같지는 않습니다.

    2. 팥알 2013/04/15 15:16 # M/D Permalink

      아, 윗글쇠를 누른 채로 뒤에 나오는 홀소리까지 넣으면 겹홀소리만 넣을 수 있군요.
      거기까지는 생각하지 못했습니다.

  7. 사샤나즈 2013/04/27 12:13 # M/D Reply Permalink

    이건 버그까진 아닌데, 높은 DPI에서 작업 표시줄의 아이콘이 좀 깨져 보이네요...
    기본 IME에선 그렇지 않길래 혹시 알고 계시나 해서 올려 봐요.
    테스트한 DPI 설정값은 120DPI (125%)입니다.

    http://sdrv.ms/1228tAI

    1. 사무엘 2013/04/27 21:16 # M/D Permalink

      실제로 그렇게 표시되는 건 처음 보네요. (특히 제가 가진 물건이 해상도 낮은 맥북이어서 100보다 높은 DPI는 완전 관심 밖 ㅎㅎ)
      제 프로그램은 아직 16*16 아이콘에만 맞춰져 있는데, 이제는 그런 것까지 신경 써야 할 때가 됐네요.
      알려 주셔서 고맙습니다. ^^

  8. 터프엉클 2013/05/27 13:35 # M/D Reply Permalink

    간단한 사항을 추가할 수 있을까요? 사용하다가 개인적으로 이런 것이 추가되면 좋겠다는 것을 적어봅니다.
    제가 텍스트 작업을 하다보면 저장할 때 ansi 형식이기 때문에 UTF8 문자가 들어있을 경우 저장이 안됩니다.
    그런데 구체적으로 어떤 문자 때문에 저장이 안되는 것인지 알 수가 없습니다. 특히 많은 양을 편집할 때 말입니다.

    1. ANSI 형식으로 저장할 때 UTF8 문자 등의 문자가 있어서 저장이 안될 경우 해당 첫번재 문자로 커서가 이동하면 어떨까요? 그럼 수정이 간편할 듯합니다.
    2. “다른 이름으로 저장”을 할 때, 파일 형식에서 ANSI나 UTF8 등 한글에서 지원하는 형태만이라도 선택할 수 있게 하면 어떨까 합니다.

    그럼.. 계속 좋은 프로그램 발전시키시길 바랍니다.

    1. 사무엘 2013/05/27 16:30 # M/D Permalink

      안녕하세요?

      <날개셋> 편집기는 저장하는 인코딩으로 표현할 수 없는 문자가 들어간 파일을 저장할 경우, 저장 후에 “현재 인코딩으로 저장할 수 없는 문자가 있습니다.” 경고문를 표시해 주고, 그게 무슨 문자인지 코드 포인트까지 알려 줍니다.
      그래서 그 코드 포인트값을 "문자 영역 검색" 기능으로 찾으면 그 문자가 어디 있는지도 곧장 알 수 있습니다.

      또한, 문서의 인코딩을 바꾸는 명령은 “파일-저장 옵션”에 따로 갖춰져 있습니다. 여기서 UTF8이나 UTF16을 선택하면 됩니다. 참고하시기 바랍니다.

Leave a comment
« Previous : 1 : ... 883 : 884 : 885 : 886 : 887 : 888 : 889 : 890 : 891 : ... 1608 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2020/04   »
      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    

Site Stats

Total hits:
1353252
Today:
144
Yesterday:
527