여타 소프트웨어들이 다 그렇듯이, 본인의 <날개셋> 한글 입력기에도 자기 정체성을 소개하는 고유한 About 대화상자가 있다. 타자연습은 그냥 별도의 About 탭이 대화상자를 대신하고 있고..;;

이게 참 재미있는 게, 원래 도스 시절에 풀다운 메뉴를 갖춘 각종 응용 프로그램들은 About 표시 기능이 맨 첫째 메뉴의 첫째 항목에 있었다.
하지만 윈도우 운영체제의 관행은 정반대로 맨 마지막 도움말 메뉴의 맨 마지막 항목에 About을 놓는 것인지라, 위치가 그렇게 바뀌어 버렸다.
과거 도스용 아래아한글과 윈도우용 아래아한글을 비교해 보면 차이가 명확하다.

사용자 삽입 이미지

뭐, 아래아한글은 아래아한글이고, 이제 내 프로그램의 경우를 살펴보자.

사용자 삽입 이미지

일단 이 프로그램이 <날개셋> 한글 입력기의 어느 부속품이며(편집기, 외부 모듈, 변환기 등등) 부속품의 버전이 무엇인지를 명시한 후, 이 프로그램이 <날개셋> 한글 입력기라는 제품의 구성 요소임을 밝힌다.
(이 글은 최신 6.3버전이 완성되기 한참 전에 작성된 글이어서 스크린샷은 6.2 기준. -_-)

모든 부속 프로그램들은 About 대화상자를 표시하는 명령이 어떤 형태로든 존재한다. 편집기는 도움말 메뉴에, 외부 모듈은 language bar의 도움말 메뉴에, 변환기는 대화상자의 시스템 메뉴에, 입력 패드는 트레이 우클릭 메뉴에 등.

그 다음으로 나오는 것은 한글 입력기 전체의 버전과 구동하는 CPU 비트수이며, 이 프로그램의 간단한 용도와 저작권, 날짜, 라이센스, 제작자 홈페이지 주소처럼 갖출 건 다 갖추고 있다. ^^

거기에다 간략한 운영체제 버전과 메모리 양 정보는 액세서리. 윈도우 9x에서는 리소스 퍼센티지도 나온다. -_-
개인적으로는 홈 에디션, 프로페셔널 에디션, 서버 에디션 같은 정보도 표시해 주는 기능이 있으면 좋겠지만, 귀찮아서-_- 생략.

<날개셋> 한글 입력기의 버전과 함께 나타나는 비트수는, 현재 돌아가고 있는 모듈의 비트수이다.
그러므로 64비트 OS에서 64비트 에디션을 설치했더라도, 현재 <날개셋> 한글 입력기를 사용하는 프로그램이 32비트라면 이 수치는 32비트로 나타난다. 따라서 이걸 보면, 굳이 작업 관리자를 열지 않더라도 이 프로그램의 비트수를 바로 알 수 있다.

그 대신, 64비트 OS에서 32비트 프로그램을 사용하고 있다면, 운영체제 버전 다음에 '64 bit'라는 숫자가 따로 명시된다. 이 점 착오 없기 바란다.
32이든 64이든 운영체제와 프로그램의 비트수가 일치하면 이런 말이 따로 뜨지 않는다.

외부 모듈은 이것 말고도 유용한 정보가 About 대화상자에 또 뜨는 게 있다.
바로, 스크린샷에서 보다시피 현재 구동 중인 응용 프로그램이 TSF / IME중 어느 기술 계층을 사용하는가이다.
비스타부터는 무조전 TSF이니까 이게 큰 의미는 없다만, TSF A급인지 B급인지도 가르쳐 주고, 게다가 비스타 이상에서는 TSF 확장 모드를 사용 중인지도 알려 준다. (TSF A*라고 별표가 추가됨)

한글 입력기로서, 특히 사용자가 버그 신고를 할 일이 있을 때 무척 유용한 정보를 덩달아 제공해 주는 셈이므로 참고하기 바란다.

또한, 오늘날의 사용자가 볼 일은 없겠으나,
윈도우 9x에서 윈도우 3.x용 16비트 프로세스 밑에서 <날개셋> 한글 입력기 IME를 돌려서 About 대화상자를 띄웠다면,
무려 16 bit IME mode라는 말까지도 뜬다. -_-;;
무조건 NTVDM을 돌리는 NT 계열은 해당사항 없음.

IME라든가 훅 DLL 같은 걸 만드는 게 아니라면, 32비트 DLL이 16비트 EXE 밑에 붙을 일은 없을 텐데, 무척 신기한 경우이다. 16비트 EXE는 32비트 EXE처럼 자신만의 주소 공간을 갖고 있지 않고 굉장히 이상한 방법으로 실행된다.
그 상태를 판단함으로써 지금 EXE가 16비트인지 32비트인지를 알 수 있다.

그 반면, 32비트와 64비트끼리는 과거처럼 호환성이고 썽킹(thunking)이고 나발이고 없이 코드가 서로 상종을 안 하기 때문에, 둘을 완전히 따로 만들어야 하지만 말이다.
그러고 보니 32비트와 64비트는 이렇게 서로 따로 노는데도 불구하고, 비주얼 C++ IDE는 32비트 프로그램임에도 64비트 OS에서 64비트 프로세스를 잘도 디버깅을 할 수 있는지 무척 신기하다. 제아무리 커널 오브젝트 핸들을 32비트와 64비트 프로세스끼리 공유가 가능하다 해도, 이건 보통일이 아닌 것 같다.

이상, <날개셋> 한글 입력기의 about 대화상자에 대한 설명이었다.

Posted by 사무엘

2011/10/07 08:17 2011/10/07 08:17
Response
No Trackback , a comment
RSS :
http://moogi.new21.org/tc/rss/response/580

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

Comments List

  1. 특븩 2011/10/07 11:48 # M/D Reply Permalink

    쿨럭.. 타자연습은 시작 란에 아예 프로그램 정보를 넣으셨군요.. 현명하십니다(?)
    글 잘 읽고 갑니다.

    ※아름이 최고

Leave a comment

<날개셋> 한글 입력기가 받아들이는 입력 단위는 여러 종류가 있다.

가장 먼저, 딱히 내부적인 메카니즘 없이 유니코드 문자를 있는 그대로 받아들이는 '일반 문자'가 있어서 심지어 한글 자모도 그냥 일반 문자처럼 입력시킬 수 있다.
오토마타를 거쳐 조합되는 한글은 입력 단위 차원에서 세벌식과 두벌식으로 종류가 나뉘어 있다. 그래서 한 글자판 안에 세벌식 자모 글쇠와 두벌식 자모 글쇠가 따로 존재할 수 있다.

이 외에 한글 입력기 내부의 상태를 다양하게 바꾸는 특수글쇠가 존재하며, Bksp라든가 한자 키는 그런 특수글쇠의 일종으로 처리된다. 다만 Bksp는 한자 키와는 달리, 한글 입력기가 처리할 때도 있고 그렇지 않고 응용 프로그램이 자체적으로 처리할 때도 있기 때문에, 키 위치를 한글 입력기가 마음대로 옮길 수 없다는 차이가 존재한다.

<날개셋> 한글 입력기는 흠좀무스럽게도 여러 자모를 한꺼번에 배당해서 중성과 종성을 한번에 입력한다든가, 심지어 지금 글자의 종성과 다음 글자의 초성을 한번에 입력할 수 있으며, 숫자 키패드처럼 '000'(UTF16 기준 최대 6바이트) 같은 문자열을 한 글쇠에 배당할 수도 있다. 이건 지난 5.65버전부터 가능해졌는데, 예전에는 그런 두세 글자를 한꺼번에 입력하려면 "<날개셋> 고급 입력기"의 사용자 정의 조합을 써야만 했었다.

이렇듯, 이 프로그램은 내부 구조가 대인배스러우며, 사용자 정의 가능성의 폭이 매우 크다.
그런데 '상태 전이'는 도대체 뭘 하는 놈일까?
이건 나름 무려 <날개셋> 한글 입력기 3.0 시절부터 있었던 기능이다. (2004년.. 그 엄청난 옛날!)
얘는 이름으로부터 알 수 있듯이, 오토마타의 내부 상태 번호를 지정된 코드값으로 바꿔 준다.

보통 오토마타 상태는 한글 자모를 입력하면서 그 입력값에 따라서 바뀌는 법인데,
그렇게 하지 않고 오토마타 상태만 바꿈으로써 그 이후의 한글 입력기의 동작 방식을 바꾸는 일종의 특수글쇠와 비슷한 효과를 낸다.
상태 전이 글쇠는 한글을 조합하고 있는 중에만 사용할 수 있으며, 0번 상태로 가게 해서 조합을 중단시키게 할 수도 없다. 다시 말해 상태 전이는 언제나 nonzero끼리만 가능하다.

가령, 평소에는 이어치기 방식으로 한글을 입력하다가 어쩌다가 가끔 모아치기나 무한 낱자 수정 같은 걸 일시적으로 쓰고 싶을 때, 두 방식의 오토마타를 모두 설계해 놓은 뒤 두 상태를 전환하는 기능을 배당하면 된다.
그 메카니즘은 다음과 같다.

초-중-종성 순서대로 들어온 입력만 허용하는 이어치기 오토마타는 다음과 같다. 수식을 해석하여 표로 나타낸 것이다.

현상태 비고
0 1 2 3  
1 1 2 3
2 0 2 3 중, 초중
3 0 0 3 중, 중종, 초중종, 초종

그 반면, 모아치기 오토마타는 다음과 같다.

현상태 비고
0 1 2 2  
1 1 3 3
2 3 2 2 중, 종, 중종
3 0 3 3 초중, 초중종, 초종

결국, 이어치기든 모아치기든 처음에 초성만 입력되었을 때는 공통으로 1번 상태이지만, 2번과 3번 상태는 각 성분이 입력된 상태가 서로 다를 수 있다.

두 오토마타를 합쳐야 하기 때문에, 서로 공유하는 한글 상태별로 오토마타 상태를 더 늘리도록 하겠다. 즉,

이어치기: 초 / 중,초중 / 종,중종,초중종,초종
모아치기: 초 / 중,종,중종 / 초중,초중종,초종

이었으니까 이들의 공통분모는

초 / 중 / 초중 / 종,중종 / 초중종,초종

으로 더욱 세분화할 수 있다. 중-중종과 초중종-초종만이 모아치기와 이어치기 모두에서 한 묶음으로 따라다니기 때문이다.
이렇게 상태 수만 늘린 채 모아치기 오토마타를 재구성하면 다음과 같다.

현상태 비고
0 1 2 4  
1 1 3 5
2 3 2 4
3 0 3 5 초중
4 5 4 4 종, 중종
5 0 5 5 초중종, 초종

그리고 동일한 상태에 따라 이어치기 오토마타를 expand하되, 1~5라는 상태 번호에다가 10을 더하여 11~15를 만들면 다음과 같다.

현상태 비고
0 11 12 14  
11 11 13 15
12 0 12 14
13 0 13 15 초중
14 0 0 14 종, 중종
15 0 0 15 초중종, 초종

이 오토마타들을 한데 집어넣어 주면 이렇게 된다.

0 → A ? 1 : B ? 2 : C ? 4 : 0
1 → A ? 1 : B ? 3 : C ? 5 : 0
2 → A ? 3 : B ? 2 : C ? 4 : 0
3 → B ? 3 : C ? 5 : 0
4 → A ? 5 : B|C ? 4 : 0
5 → B|C ? 5 : 0
11 → A ? 11 : B ? 13 : 15
12 → B ? 12 : C ? 14 : 0
13 → B ? 13 : C ? 15 : 0
14 → C ? 14 : 0
15 → C ? 15 : 0

그리고 적당한 글쇠에다가 다음 수식을 넣어 준다.

C1|T+(T>=10 ? -10 : 10)

C1은 '상태 전이'를 나타내는 접두사이다. T는 오토마타 상태 번호를 나타내는데, 이게 10보다 큰 상태이면 10을 빼 주고, 그렇지 않으면 10을 더한다. 따라서 1 ↔ 11, 13 ↔ 3 같은 오토마타 상태를 왔다갔다 할 수 있다. 초성과 중성만 입력된 상태의 모아치기 상태(3) 혹은 이어치기 상태(13)처럼 말이다.

지금까지 설명한 것처럼 오토마타를 짜면, 기본적으로 모아치기가 시작하는데 상태 전이를 해 주면 이어치기가 되게 할 수 있다.
그러나 0번 상태에 대한 수식을 A ? 1 : B ? 2 : C ? 4 : 0 대신, A ? 11 : B ? 12 : C ? 14 : 0 로 지정해서 이어치기 상태로 먼저 가게 하면, 기본적으로 이어치기인데 상태 전이를 해 주면 잠깐 모아치기가 되게 할 수도 있다.

즉, ㅏ를 입력했는데 평소 같으면 초성 ㄱ을 누르면 ㅏㄱ가 따로 갈라져 버릴 것이다. 이때 상태 전이 키를 잠시 누르면, 그 상태에서 '아'나 '악'을 어느 순서대로든 입력할 수 있는 상태가 된다. 상태 전이 기능은 바로 이런 식으로 활용할 수가 있다. 글자판을 바꿀 때와는 달리, 한글 조합 상태가 그대로 유지된다!

오랜만에 <날개셋> 한글 입력기의 레어템 테크닉에 대한 글을 썼는데 전달이 잘 됐으려나 모르겠다.
주어진 유한한 요소만 고침으로써 컴퓨터에서 한글을 내가 원하는 어떤 창의적인 형태로든 다룰 수 있게 하고, 그 과정에서 세벌식 글자판의 우수성을 부각시키는 것이 이 프로그램의 개발 목적이다.

IME도 개발돼 있긴 하지만 <날개셋> 한글 입력기의 대표 프로그램은 역시 편집기라는 전용 프로그램이다. 그야말로 윈도우 95 스타일의 기본 GUI를 그대로 답습하고 있는 소박한 프로그램이지만 이 작은 에디터가 본인에게는 마치 내 정신의 고향 같다. ^^;;

Posted by 사무엘

2011/09/21 08:28 2011/09/21 08:28
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/572

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

Comments List

  1. 특백 2011/09/23 21:55 # M/D Reply Permalink

    흠.. 오토마타 같은 경우 아직 C언어스러운 날개셋 수식과 더불어 손을 못 대 봤습니다.
    뭔가 재미있는 게 나올 수도 있을 것 같은데(네벌식이라든지)

    1. 사무엘 2011/09/23 23:38 # M/D Permalink

      이런 매니악한 글에 댓글을 달 분은 아무래도 특백 님 같은 분밖에 없을 거라고 생각했는데, 드디어 댓글을 남겨 주셨군요. ^^;;

      글쇠배열과 낱자 결합 규칙뿐만이 아니라 오토마타를 알아야 한글 입력기의 동작 방식을 완전히 마스터할 수 있습니다.
      글쇠배열이나 오토마타나 동일한 C언어 문법 수식이니 어려울 게 없습니다.
      시간이 나면 연구 많이 해 보세요. ^^

    2. 특백 2011/09/24 11:46 # M/D Permalink

      실제 동작하게 구현해 봐야 어떻게 돌아가는지 알겠는데요.
      참고로 글쇠배열에서 상태 전이 등을 사용할 수 있다는 건 처음 알았습니다.

      시간나면 가상 낱자 말고 진짜 오토마타 사용해서 네벌식이나 만들어 봐야겠네요. 근데 시간이 안 나서 문제. ㅜㅜ

  2. 특백 2011/09/25 21:26 # M/D Reply Permalink

    아, T가 오토마타 번호였군요. (그걸 인제 처음 알다니)

Leave a comment

날개셋 한글 입력기 6.3

추석 연휴가 끝나자마자 <날개셋> 한글 입력기의 따끈한 새 버전 소식이 기다리고 있다. (만세 ㄲㄲ)
본인의 사정으로 인해, 6.2가 나온 지 한 달이 채 되지 않아 6.21도 아니고 이례적으로 6.3이 나오게 됐다. 원래는 10월쯤에 내놓으려고 했는데.

그 대신 이게 올해의 마지막 버전업이 되지 싶다.
이번 학기를 마친 뒤엔 드디어 종합 시험(논자시;;)을 봐야 하고, 또 이번에 듣는 과목은 지난 학기의 과목과는 달리, 국어학 배경이 빈약한 본인에게는 만만찮은 것들이다.
그래서 프로그램 개발부터 좀 마무리를 짓고 나서 그런 일들에 전념하고자 한다.

6.3은 +0.1 이상에 해당하는 기능 추가와 개선이 충분히 이뤄졌다.
외부 모듈이 TSF 환경에서 옛한글 같은 2글자 이상의 조합을 표현할 때 조합이 끊어지던 문제를 완전히 해결했고,
한글 표현 체계와 에디팅 엔진이 크게 바뀌었던 직전 버전에만 자잘하게 존재하던 여러 버그들도 잡았다. 편집기의 경우 화면 잔상이 남던 것부터 시작해 심하면 프로그램이 죽던 문제까지도 있었다. 더 구체적인 내역은 모방 범죄 예방을 위해 알리지 않겠다. ㄲㄲ

정 재민 님께서 보내 주신 글꼴 데이터를 반영하였으며, 유용한 텍스트 필터도 세 종류나 추가했다.
- 호환용 영역의 한자를 본디 형태로 바꾸는 필터 (정 재민 님 제안)
- 본문 중의 수식을 계산하고 숫자의 경우 진법을 싹 바꿔 주는 필터
- 패턴 치환 필터. 이건 프로그램 설치해서 도움말을 읽어 보기 바란다. 일괄 치환과 더불어 아주 유용한 기능으로, 이걸 쓰면 칼럼 단위의 데이터를 다루기 위해 엑셀 같은 별도의 프로그램을 쓸 일이 크게 줄어든다. <날개셋> 편집기는 키매크로나 칼럼 블록 기능을 제공하지 않지만, 대체 기능을 텍스트 필터의 형태로 꾸준히 제공하고 있다.

그리고 뭐니뭐니해도 6.3 버전의 가장 큰 특징은 Bksp 키를 다루는 체계를 싹 바꿨다는 점.
<날개셋> 한글 입력기는 1.0 시절부터 Bksp에 여타 한글 입력기에서는 찾을 수 없는 특수한 기능들을 제공해 왔다. 즉,

- Bksp와 Shift+Bksp의 용도를 구분하고,
- 조합 여부와 상관없이 한글을 낱자나 글자 단위 중 원하는 형태로 얼마든지 지울 수 있다.
- 그리고 한글이든 비한글이든 지금 글자가 다 지워진 후 그 앞에 또 한글이 있으면 그 한글에 달라붙어서 조합 상태가 재연된다. 앞 글자도 seamless하게 계속 낱자 단위로 지우거나 고치거나 빠진 낱자의 추가 입력이 가능하다.
- 게다가 이걸로도 모자라서, 두벌식 글자판의 경우 도깨비불 현상까지 고려해서 이전 상태를 복원해 준다. 일명 역도깨비불인데,

안해 → 않 (≠ 안해 → 안ㅎ → 안)
보끼 → 볶 (≠ 보ㄲ → 보ㄱ)

같은 동작도 지원된다는 뜻이다.

그리고 그 후 10여 년 뒤, 6.3 버전에서는, <날개셋> 한글 입력기의 간판 기능으로 손색이 없는 이 기능을 지정하는 방식이, 예전보다 훨씬 더 깔끔하고 체계적이고 전문적으로 바뀌었다.

사용자 삽입 이미지

스크린샷을 보면, 예전에 Bksp 동작 방식에 있던 서너 개의 체크 옵션이, 자주 쓰는 predefined configuration을 바로 가져오는 콤보 상자로 대체되었음을 알 수 있다. 자세한 설정은 말 그대로 '자세히' 버튼을 눌러서 나타나는 별도의 대화상자에서 해야 한다.

스크린샷에서 알 수 있듯, Bksp와 Bksp, 그리고 한글을 조합 중일 때와 그렇지 않을 때, 각 상황별로 한글을 무슨 순서대로 지울 것이며 이 글자가 다 지워졌을 때 앞의 한글에 달라붙을지를 일일이 사용자가 설정할 수 있다. 예전 버전에서는 기능 자체만 제공되었지 이 정도로 세밀한 설정은 가능하지 않았다.

또한 두벌식 역도깨비불 재현도 별도의 옵션으로 바뀌었다. 따라서 두벌식 자판을 쓴다고 하더라도 그냥 달라붙기 기능만 쓰지, 역도깨비불까지 원하지는 않는 사용자라면 해당 옵션을 끄면 된다. 이런 취사선택도 예전 버전에서는 가능하지 않았다.

과거의 3.0부터는 자그마한 옵션이 하나 추가되었는데, 입력 순서와 상관없이 하위 낱자부터 한 타씩 지우는 옵션이 그것이다.
ㅇ+ㅜ+ㅣ+ㄴ 순으로 입력했든 ㅇ+ㅜ+ㄴ+ㅣ 내지 ㅜ+ㅇ+ㅣ+ㄴ 순으로 입력했든, '윈'은 무조건 종성부터 역순으로 지워서 위-우-ㅇ이 되게 하는 기능인데, 이것이 바로 위의 스크린샷에서는 '최하위 낱자의 직전 한 타'이다. 이런 차이는, 당연한 말이지만 동일한 글자를 여러 가지 순서로 입력할 수 있는 모아치기가 가능한 세벌식 체계에서만 의미가 있다.

그에 덧붙여 이 새 버전에서는 '최하위 낱자 전체'라는 옵션도 추가됐다. 말 그대로 낱자 단위로 한꺼번에 지워 버리는 옵션으로, 아무리 복잡한 한글이라도 초· 중· 종성이 모두 갖춰져 있다면 세 타 만에 다 지워진다. '윈'을 지울 때 '위' 다음에 '우'를 안 거치고 바로 'ㅇ'이 된다는 뜻. 사실, PC용이 아닌 휴대전화용 한글 입력기의 Backspace는 다들 이런 방식으로 구현되어 있다.
여담이지만, 내부적인 구현 오버헤드는 최하위 낱자를 따지는 방식이, 고전적인 '직전에 입력된 한 타'보다 더 크다.

이쪽 기능을 대대적으로 손을 좀 봐야겠다고 거의 6.0 개발 초창기 시절부터 생각은 하고 있었는데 드디어 해내게 되어 무척 기쁘다. 진작부터 지원돼야 했을 기능들이다.
물론, 주변 글자를 자유자재로 다룰 수 없고 write-only만 가능한 TSF B급 이하 환경에서는 '달라붙음' 같은 기능은 전혀 쓸 수 없고, '조합 상태가 아닌 한글을 지우는 단위' 역시 오로지 글자 전체 단위로 제약을 받게 된다.

기능을 구현하는 과정에서 <날개셋> 한글 입력기의 내부 구조도 제법 바뀌었다. 하지만 더 합리적으로 바뀌었다. 그 내막을 살펴보면 이렇다.

지난 3.0 버전 이래로 Bksp 키는 입력 스키마가 '낱자 단위 지우기' 아니면 '글자 단위 지우기'라는 특수글쇠를 생성하는 형태로 내부적으로 처리되었다. 그리고 전자와 후자를 Bksp와 Shift+Bksp에다 각각 대응시킬지, 아니면 반대로 Shift+Bksp와 Bksp에다 대응시킬지를 '입력 스키마'의 옵션으로 지정 가능했다. 그게 끝이었다.

그러나 이제부터는 입력 스키마는 Bksp일 때 Bksp1, 그리고 Shift+Bksp일 때 Bksp2라고 언제나 고정적인 특수글쇠만을 생성한다. 이런 특수글쇠는 1부터 4까지 현재 네 종류가 예약되어 있는데, 이들 자체에는 어떤 특정 동작 방식이 규정되어 있지는 않다. 각 특수글쇠의 해석은 전적으로 그 아래의 '문자 생성기'만이 담당하게 된다. 그것이 바로 저 'Bksp 동작 방식' 옵션인 것이다.

그리고 그 추상적인 Bksp와는 별개로, 특정 방식대로 한글 낱자를 지워 주는 특수글쇠가 또 존재한다. 즉, 진짜배기 Bksp는 입력기의 옵션이 어떻게 지정됐냐에 따라서 낱자/글자 단위로 지우고 필요하다면 달라붙기나 역도깨비불까지 제공하는 반면, 그냥 낱자 단위, 입력 역순, 글자 전체(위의 스크린샷에 있는 네 옵션 중 하나) 삭제라는 고정불변 단편적인 Bksp 기능도 임의의 글쇠에다가 특수글쇠의 형태로 배당해서 쓸 수 있다는 뜻이다.

아시는 분이 있으려나 모르겠는데, <날개셋> 한글 입력기에는 0x10과 0x11에 '뒷글자 삭제'라고 해서 Del과 유사한 기능을 하는 특수글쇠가 이미 있다. 그것처럼 Bksp와 유사한 기능을 하는 네 가지 특수글쇠도 일관성 차원에서 추가된다고 이해하면 정확하다.

이들 특수글쇠는, 편집 환경만 지원된다면(TSF A급 같은), 이미 완성된 한글도 물론 낱자 단위로 자기 방식대로 지울 수 있다. 하지만 그런 이상적인 환경이 아니라면, 이미 완성된 글자는 건드리지 못한다. 사실 Bksp 키 자체가, 한글 입력기가 조종하는 것과 에디터 응용 프로그램이 조종하는 것이 공존하는 체계이다. 완성된 글자는 한글 입력기가 아니라 응용 프로그램이 지워 주며, 응용 프로그램은 일반적으로 '진짜' Bksp 키가 들어왔을 때만 그런 동작을 하기 때문이다.

이런 식으로 시스템 개편을 했는데, 솔직히 내가 생각했지만 내가 봐도 너무 멋있다..;; 이 맛에 프로그래밍 하는 거다.
이것저것 생각해 놓은 게 많아서 당분간은 새 버전의 Readme엔 '※ 한글 입력 체계' 카테고리가 쭉 있을 것으로 보인다. 한글 입력기 본분에 충실한 기능이 계속 강화되고 개선되고 있기 때문이다.

6.3 버전은 6.2와 API가 완전히 호환된다.
다음 버전은 내년 초에 6.5 정도가 목표이다. 버그 없이 프로그램을 잘 만들어서 가능하면 0.0x대로 내려가지는 말고 버전을 쑥쑥 크게 올려야겠다.

Posted by 사무엘

2011/09/14 08:29 2011/09/14 08:29
Response
No Trackback , 9 Comments
RSS :
http://moogi.new21.org/tc/rss/response/569

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

Comments List

  1. 왕배덕배 2011/09/14 16:11 # M/D Reply Permalink

    API가 호환되면 타자연습과의 호환성을 생각하지 않아도 된다는 건가요?
    제어판이 완전히 바뀌어 버리면 문제가 생길 것도 같은데

    1. 사무엘 2011/09/15 06:57 # M/D Permalink

      예. 타자연습 3.3 아래에서는 날개셋 6.2과 6.3 버전의 외부 모듈이 아무 트러블 없이 잘 동작합니다.
      저런 입력 기능은 굳이 말하자면 입력 설정 파일의 내부 구조에만 영향을 끼치지 API 차원에서의 호환성에는 영향을 주지 않습니다.

  2. 특백 2011/09/15 14:33 # M/D Reply Permalink

    제안 하나 - 쉬프트키 왼쪽과 오른쪽을 서로 다른 변수로 배당하는 방법(윗글쇠에만 적용되는)

    예를 들어서 키 X의 윗글쇠에 '우측 쉬프트이면 Y를, 그렇지 않으면 Z를 입력함' 이라고 하는 수식은 'R ? Y : Z' 등으로 할 수 있을 것 같습니다. (아랫글쇠는 적용 안 됨)

    단축글쇠 테이블에서 Shift를 좌, 우, 아무 키로 구분하니까.. 그걸 응용하면 할 수 있지 않을까요?

    P.S. 6.3 못써보고 있습니다. 노트북이 있어야 쓰죠

    1. 사무엘 2011/09/16 02:07 # M/D Permalink

      다음 버전(현재로서는 6.5)에 그 기능은 거의 확실히 들어갈 것으로 보입니다.
      편집기 계층에 있는 '단축글쇠 테이블'과 별개로, 입력 스키마 차원에서 '단축글쇠 테이블'을 도입하여, 영문· 숫자 47개 글쇠 말고도 사용자가 지정해 준 다른 글쇠의 입력도 받아들이고, 기존 글쇠도 특수한 modifier를 인식할 수 있게 하려고 구상 중입니다.
      그리고 계속 벼르고 있는 단어 단위 한자 변환 기능과, 입력 패드(보조 입력 도구) 쪽이 대수술을 거칠 예정입니다. ^^

    2. 특백 2011/09/18 12:29 # M/D Permalink

      입력 스키마의 단축글쇠 테이블이라..
      글쇠배열 항목 등에서 제어판이 꽤 복잡해 질수가 있겠군요.

      6.5에서 기대는 됩니다. 많이 바꾸길(??)

    3. 사무엘 2011/09/18 22:22 # M/D Permalink

      그렇게 많이 바뀌는 건 아니고요.
      이제 '글쇠 인식 옵션' 탭은 '빈 입력 스키마와 호환되게' 체크박스 하나만 달랑 덩그러니 놓여 있는데, 그 자리에 이것저것 기능들이 들어가게 될 겁니다.
      저도 빨리 6.5 개발 들어가고 싶네요. ^^ 중간에 포기하고 또 마이너 업글을 안 하려면, 이번 6.3이 버그 없이 안정화 버전으로 좀 오래 살아남아야 합니다.

      덕후끼가 많은 건 아무래도 좋은 현상이죠. ㅋ

  3. 삼각형 2011/09/15 20:39 # M/D Reply Permalink

    이번 버전은 자잘한 버그와 사소하지만 은근히 신경 쓰이는 것들을 손본 것 같은 느낌이군요. 업데이트마다 특성 같은게 있는 듯합니다.

    1. 사무엘 2011/09/16 02:07 # M/D Permalink

      네, 버전별로 그런 식의 테마가 있습니다.
      이번 6.3의 경우, Bksp 재정비 기능이 없었다면 이 정도 변화 사항만으로는 아예 새 버전이 따로 나오지 않았거나, 기껏해야 6.21에 머물렀을 것입니다.
      하지만 이번 버전은 짧은 개발 기간에도 불구하고 변화 내역 하나하나가 모두 굉장히 의미가 크고 중요하기 때문에 0.1만치 버전을 올리게 되었습니다.

      한동안 한글 입력기 엔진 자체에 변화가 계속 있을 것입니다. 좋게 말하면 제 프로그램이 아직도 활발하게 살아 있다는 뜻이고, 나쁘게 말하면 큰 변화가 있을 때마다 프로그램의 안정성이 떨어지고 예상치 못한 버그가 또 발견될 수도 있다는 뜻입니다.

  4. 사무엘 2011/09/21 22:28 # M/D Reply Permalink

    <날개셋> 한글 입력기 6.3은 공개된 지 1주일이 지난 현재 딱히 심각한 버그가 발견된 게 없으며, 지금까지 소스 코드가 바뀐 것도 리팩터링 위주이다.
    이제 한동안은 소규모 업데이트를 준비할 필요 없이 안심하고 수 개월째 잠수 타면서 각종 무거운 기능들 연구와 구현에 전념해도 될 것 같다. 아, 한동안 다른 일들 때문에 코드 자체를 못 들여다보겠지만. -_-

Leave a comment

1.

이 블로그는 좀 특이한 구석이 있다.
보통, 덕력이 좀 높은 블로거는 전문 분야 블로그와 일상 잡담 블로그를 분리해서 운영한다.
하지만 본인은 그렇게 하지 않으며 모든 관심 분야에 대한 글을 한 블로그에다 몰아서 올린다.
블로그를 따로 운영해야 할 정도로 덕력이 아주 높은 것도 아니어서 말이다..... 어? ㄲㄲㄲㄲ

난 사람들이 자기 관심 분야 블로그에만 가는 걸 원하지 않는다.
내 근황이 궁금하고 나에 대해 알고 싶어서 내 블로그에 온 사람이라면, 좋든 싫든 프로그래밍 관련 글도 보고, 철-_-도 관련 글도 보고, 한글 관련 글, 기독교 관련 글도 보길 원한다.
독자 여러분은 어떻게 생각하실지 모르겠지만 어쨌든 본인은 내 식대로 이런 식으로 블로그를 운영해 나갈 것이다. ㅋㅋ
<날개셋> 한글 입력기 카테고리가 몇 달째 글이 없으니 오늘은 또 오랜만에 개발 근황을 전하도록 하겠다.

2.

<날개셋> 한글 입력기의 다음 버전은 6.2로 확정했다. 나흘 뒤인 8월 21일 아침에 나올 예정이다. 현재 코딩은 거의 마쳤고 테스트와 도움말 작성 중이다.
편집기를 안 쓰는 분에게는 그리 큰 해당 사항이 없겠지만, 6.2에 대해서는 지금까지 오랜 숙원이었던 에디팅 엔진의 최적화 소식부터 먼저 전해야겠다.
무려 7년 전, 3.0 시절 이래로 변함없이 남아 있던 에디팅 엔진을 뒤집어엎었다. 옛날 코드의 로직을 재구성하여 더 정교하게 다시 만드는 게 쉬운 일이 아니었다.

예전 버전이 얼마나 비효율적이었는지를 단적으로 설명하자면 이렇다.
수십만 줄에 달하는 텍스트를 불러와서 맨 앞줄에서 엔터를 눌러서 줄을 삽입하거나 텍스트를 붙여넣으면 그 줄부터 문서 끝까지 내부적으로는 행번호가 다 renumbering된다. -_-;;
그리고 undo 한번 할 때마다 그 텍스트 레이아웃이 전부 다시 짜진다.

이제는 아무리 큰 문서를 불러와도 텍스트 레이아웃과 재배치는 영향을 받은 문단에서만 일어나며, renumbering도 없어졌다. Ctrl+Z를 마음껏 눌러도 된다.
다른 작업 우선순위에 밀리고 또 밀려서 7년 동안 못 하고 있던 일을 이제야 해냈다.
3.0을 만들던 당시는 세벌식 모아치기와 새로운 한글 입력 오토마타에 치중하느라, 에디팅 엔진은 비록 구닥다리 2.x에 비해서야 혁신이었지만 그래도 시간 관계상 대충 발로 짠 부분이 있었던 것이다.

이번 버전은 파일 저장도 매 줄마다 디스크에 쓰는 게 아니라, 수 MB 단위로 버퍼에다 미리 저장한 후 한꺼번에 디스크에 쓰게 함으로써 속도를 크게 향상시켰다. 이렇게 하는 게 이 정도로 큰 차이를 만들 줄은 몰랐다.
<날개셋> 변환기의 파일 변환 속도도 훨씬 더 빨라졌다.
학교에서 실제로 수~수십 MB에 달하는 옛한글 말뭉치 파일을 다뤄 보고서야 성능을 개선할 필요를 느꼈다.

3.

그리고 <날개셋> 편집기는 이제 legacy format(한컴 2바이트 코드 및 한양 PUA)으로 클립보드를 읽고 쓰는 기능이 없어지고, 편집 메뉴에 '선택하여 붙여넣기'(Paste special) 기능도 없어진다. Paste special은 무려 <날개셋> 한글 입력기 2.0때부터 있었던 기능이지만, 이 프로그램이 텍스트에다 서식을 넣을 수 있는 워드 프로세서도 아니고 사실 필요 없는 기능이다. 유니코드 하나만 신경 쓰면 되니까 말이다.

그 대신 이 기능들은 <날개셋> 변환기로 이동한다. 다만, 지금까지 한컴 2바이트 코드를 읽는 것 말고 '쓰는' 기능은 제2수준 한자를 지원하지 않았었는데, '쓰는' 것도 가능해진다. 클립보드 변환 기능까지 그대로 지원되긴 하지만, 아래아한글 97이나 <날개셋> 무려 2.x와 텍스트 데이터를 변환하는 상황이 아니라면 이제 쓸 일은 없을 것이다. 그러니 호환성 유틸리티인 변환기로 기능 이전.
하지만 유니코드가 등장하기 전에 아래아한글이 국어 정보 처리에 끼친 영향력을 감안하면, 한컴 2바이트 코드 지원을 완전히 없애 버릴 수는 없다.;;

또한, 옛한글을 한양 PUA <-> 유니코드 5.2 형식으로 변환하는 기능은 '텍스트 필터'로도 들어가서 편집기나 외부 모듈이 즉석에서 사용 가능하게 된다. 한양 PUA의 인지도는 아직까지도 무시할 수 없기 때문에..;;
이걸 감안하면, 비록 편집기의 한양 PUA 지원 기능은 겉으로는 일관성 차원에서 사라지지만, 동일 기능이 더 유용한 다른 형태로 대체되는 셈이다.

덤으로, <날개셋> 변환기는 옛한글 변환은 지금까지 UTF16 방식의 파일밖에 지원하지 않았다가 이제 드디어 UTF8도 지원할 예정이다. 그리고 명령줄에서는 하위 디렉터리의 모든 파일을 재귀적으로 찾아서 변환하는 /S 옵션이 추가된다.

4.

이렇듯, <날개셋> 한글 입력기의 다음 버전은 편집기와 변환기가 바뀐 게 많고 외부 모듈은 변화 사항이 상대적으로 적다고 볼 수 있다. 그래도 외부 모듈이 바뀐 걸 나열하자면,

첫째, 한글 글자판을 찾을 때 무조건 맨 위의 0번부터 그 아래가 아니라, 6.0에서 추가된 개념인 '기본 입력 항목'부터 먼저 고려하기 시작했다. (진작에 이렇게 했어야지..)
둘째, 편집기와 외부 모듈을 같이 쓰는 경우, 편집기에서 프로그램의 UI 언어를 바꾸면 외부 모듈도 아쉬운 대로 그걸 따라가게 했다.

이 외에, 프로그램 전반적으로는
수식에서 ? : 연산자와 콤마 연산자가 변수를 되돌리면 거기에 바로 대입이 가능하게 문법이 확장되었으며,
정 재민 님의 제안과 도움 덕분에 몇몇 글꼴들이 최신 유니코드 규격대로 업데이트되었다.
그리고 천지인· 나랏글과 더불어 스마트폰의 3대 복수 표준 입력 방식 중 하나가 된 팬텍 SKY 방식도 예제 입력 설정 파일을 만들어서 추가했다.

텍스트 필터 중에 '일괄 치환 필터'라고, 여러 건의 바꾸기 작업을 한꺼번에 수행하고 심지어 줄바꿈 문자까지 찾기-바꾸기 문자열에 포함할 수 있는 강력한 필터가 있는데,
여기에 있던 사소한 버그를 잡고, 이 필터에 '반복 적용' 옵션을 추가했다.
이걸 잘 활용하면 [   a   ], [ b  ] 같은 문자열도 싹 다 [a], [b] 같은 식으로 일괄적으로 공백 정리를 할 수도 있다. 이런 기능을 넣을 생각을 지금까지 왜 안 했는지 모르겠다.
적은 노력에 비해서 무척 유용할 수 있는 기능을 찾아내서 구현하는 건 참 즐거운 일이다.

끝으로, 타자연습은,
문장 연습 중에 오타를 내고서 Ctrl+Z를 눌렀을 때, 텍스트가 없어진 뒤에도 텍스트 위의 오타 마크가 사라지지 않던 버그를 잡았다.
그리고 게임은 이제 레벨이 올라갔을 때 자동 저장을 해 주지 않는다. 게임 중에 사용자가 단축키를 눌렀을 때만 해당 단계의 점수, 방어력, 주인공으로 나중에 게임을 이어서 할 수 있게 그 상태가 저장된다. 따라서 해당 단계의 초반에 저장을 하든, 끝날 때가 다 돼서 저장을 하든 그건 상관없다.

<날개셋> 타자연습의 게임 저장 체계는 어찌 보면 페르시아의 왕자 1의 그것과 비슷해졌다고 볼 수 있다.
(레벨의 첫 시작 시점만 저장할 수 있고, 한 시점만 저장 가능하다는 점에서)

5.
끝으로 여담,
<날개셋> 편집기처럼 텍스트 에디터를 처음부터 새로 만든다는 건 결코 쉬운 일이 아니다.
특히 유니코드의 complex script를 완벽하게 지원하려면 이미 거의 워드 프로세서 수준에 도달한다. 커서 이동, 마우스 포인터 위치로부터 문자열 위치 판단, 문단 정렬 같은 기본 중의 기본 작업들조차 완전 어려운 작업이 되기 때문이다. 내 프로그램은 그런 자질구레한 건 개발의 주목적이 아니기 때문에 죄다 깔끔하게 무시하고 개발되는데도 이 작업만으로도 코드의 양이 만만찮다.

WinAPI.co.kr의 운영자로 유명한 김 상형 님은 이런 텍스트 에디터를 개발하는 튜토리얼을 제공하고 있으니 초보 개발자들에게 무척 유익하다. 요즘 세상에 저 정도 프로젝트를 대인배스럽게 공개하는 분은 정말 드문데... 관심 있으신 분은 참고하기 바란다.

<날개셋> 입력기와 타자연습의 다음 버전도 어김없이 예전 버전과의 API 호환성은 깨질 예정이다. =_=;;; 따라서 둘을 원활히 같이 쓰려면 둘을 모두 업데이트해야 한다.
이제는 좀 바꿀 일이 없겠지 싶은 요소들도 계속 바뀐다. 그만큼 <날개셋> 한글 입력기는 여전히 활발하게 개발이 진행 중이고 살아 있는 프로젝트라는 뜻이기도 하다.

당초 계획했던 한자 관련 기능을 추가 못 하고, 입력기 커널에 내가 원하는 기능을 여건상 못 넣었는데, 이건 올해 하반기에 나올 또 다음 버전에서 기약을 해야겠다.

Posted by 사무엘

2011/08/17 08:11 2011/08/17 08:11
,
Response
No Trackback , 11 Comments
RSS :
http://moogi.new21.org/tc/rss/response/556

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

Comments List

  1. ^^ 2011/08/17 16:38 # M/D Reply Permalink

    저...

    <날개셋> 입력기와 타자연습의 다음 버전도 어김없이 예전 버전과의 API 호환성은 깨질 예정이다. =_=;;; 따라서 둘을 원활히 같이 쓰려면 둘을 모두 업데이트해야 한다.

    라고 하셨는데요

    왜 타자연습과 입력기를 같이 배포하지 않고 별도의 파일로 배포하시는 지 여쭤봐도 될까요?

    1. 사무엘 2011/08/17 22:50 # M/D Permalink

      두말 할 나위도 없이, 둘은 성격이 다른 프로그램이며, 둘 중 하나만 쓰는 사람도 있으니까요.
      타자연습은 입력기를 사용하는 응용 프로그램일 뿐입니다.

      그리고, 입력기와 타자연습 중 하나만 업데이트하고 다른 하나를 옛 버전을 그대로 쓰고 있더라도 대부분의 경우는 문제가 되지 않습니다.
      다만 입력기의 외부 모듈(IME)의 버전과 타자연습의 버전이 충돌하면, 타자연습에서 <날개셋> 한글 입력기 외부 모듈을 쓸 수 없게 됩니다.

      아예 입력기 아니면 타자연습 이렇게 한 프로그램만 쓴다면 모를까, 두 프로그램을 모두 사용하는 상황이라면, 이런 잡음을 없애려면 둘을 모두 최신 버전으로 업데이트 할 필요가 있다는 뜻입니다.

  2. 사이버카가미 2011/08/22 17:56 # M/D Reply Permalink

    새 버전 잘 받았습니다^^
    버그가 하나 생겼는데... 제가 두벌식과 오토마타가 같고 대신 쓸 수 있는 범위를 옛한글까지 확장한 입력기를 따로 만들어 쓰고 있었는데, IE나 메모장 같은 곳에서 TSF 확장 모드로 '한글'을 치면 '??????' 과 같이 앞 음절이 멋대로 조합 종료되어 버리는 문제가 있어요. 유니코드 완성형의 범위를 넘어설 때 조합 종료 문제가 일어나는 걸로 파악하고 있어요...넣은 옵션은 TSF 확장이랑, 입력 일반에서 '현재 글자가 ~', '완성된 글자를 ~', '낱자 단위 수정' 이에요.

    //(5:54 PM 8/22/2011) 메모장 말고도 다른 TSF 지원 프로그램에서도 시간이 지나면 그런 현상이 일어나네요..; (MetroTwit)

    1. 사무엘 2011/08/22 21:32 # M/D Permalink

      예전부터 있었던 현상이지 6.2에서 새로 발생한 건 아니죠? 6.2는 외부 모듈은 그쪽 부분은 바뀐 것도 없는데.
      전에도 비슷한 설명을 드린 적이 있는 것 같습니다만, 윈도우 운영체제는 한글 IME가 두 글자가 넘는 자모를 조합하는 걸 여전히 별로 좋아하지 않습니다. 말씀하신 것처럼 조합이 강제로 종료되어 버리는 현상도 있는데, 그건 제 프로그램이 더 개선할 수 있지가 않습니다.

    2. 사이버카가미 2011/08/23 00:52 # M/D Permalink

      아뇨, 6.0엔 그런 거 없었어요...ㅠ 내일 완전히 지웠다 다시 설치해 보고 말씀드릴게요.

    3. 사무엘 2011/08/23 01:01 # M/D Permalink

      다시 말씀드리지만 6.2는 그런 부분에서 버그가 생길 만한 변화는 없었습니다.
      그래도 만약 버그가 의심되는 부분이 있으면, '시스템 계층-한글 표현 방식'은 어떻게 맞춰 놓으셨는지도 꼭 정확하게 알려 주시기 바랍니다.

    4. 사이버카가미 2011/08/23 14:13 # M/D Permalink

      지운 뒤에 다시 설치해 보았는데 증상은 딱히 달라진 게 없네요..;ㅅ;
      말씀하신 옵션은 글자 계층 '현대 한글만, 호환용 한글 자모 사용', 낱자 계층 '표준 한글 자모, 채움문자 언제나 추가, 확장 자모 사용' 이에요.
      6.0으로 일단 롤백해놓고 해결 중인 상태예요, 음음..
      //지우는데 일부 파일이 어디에 살아 있는지, 다시 설치해도 설정이 초기화되지 않고 그대로네요...

    5. 사무엘 2011/08/23 19:32 # M/D Permalink

      저도 동일 현상을 확인했습니다.
      하지만 저 현상은 6.0에서도 똑같이 일어날 현상이며 새 버전만의 버그가 아닙니다.
      운영체제의 특성 때문에 어쩔 수 없는 사항이므로 여기에 대해서는 추후에 도움말에 더 자세히 명시하도록 하겠습니다.

      당장 문제를 해결하는 방법으로는..
      문의사항을 보아하니 조합이 끊기는 문제의 원인은 ㄴㄱ 옛한글이거든요?
      아무래도 두벌식 옛한글을 쓰지 않는 게 답일 것 같습니다. (빠른설정에서 옛한글 체크 끄기)

    6. 사이버카가미 2011/08/24 23:32 # M/D Permalink

      그냥 6.0 유지하는 게 나을 거 같네요..;
      6.2 재설치해서 계속 같은 버그가 있었지만 6.0으로 재설치하니 그런 일은 분명 없어요.

    7. 사무엘 2011/08/25 07:46 # M/D Permalink

      그런데 그것이 실제로 일어났습니다.

      처음에 저는 님의 버그 신고는 특별히 신경 쓸 필요도 없는 일상적인 운영체제 버그일 뿐이라고 생각했는데..
      진~짜 반신반의로 윈7에서 6.0 설치해서 똑같은 환경에서 '한글날'을 입력해 보니..
      예전 버전은 ㄴㄱ이 입력된 뒤에도 6.2와는 달리 조합이 끊기지 않는군요..;;

      깜짝 놀랐고, 현재로서는 뭐라 드릴 말씀이 없습니다. 저 역시 6.2 작업 과정에서 외부 모듈은 그런 부분이 영향을 받을 만한 변화를 준 적이 없습니다.
      금방 해결되지는 못할 것 같지만, 다음 버전이 나온다면 이 버그는 반드시 수정하도록 하겠습니다.
      꾸준히 버그 신고를 해 주셔서 감사드리고, 번거롭게 해서 죄송합니다.

    8. 사이버카가미 2011/08/25 13:11 # M/D Permalink

      아, 발견해주셔서 다행이에요! 예상치 못한 곳에서 버그가 있는 거군요...; OS까지 새로 설치하셔서 확인해주시고... 죄송하다뇨, 오히려 수고해주셔서 고맙습니다! :)
      날개셋 입력기 항상 잘 쓰고 있어요, 다음 버전 기대할게요!

Leave a comment

C/C++에는 ? : 라는 독특한 연산자가 있다. A ? B: C꼴로 표현되어 피연산자가 3개나 붙는 유일한 연산자이다.
이 연산자의 역할은 매우 단순하다. A가 참이면 연산자의 값은 B가 되고, 그렇지 않으면 C가 된다. 그래서 아예 if문의 역할을 간단히 대신할 수도 있으며, 콤마 연산자와 결합하면 어지간한 함수 호출마저도 한 연산식에다 박아 넣을 수 있다. 다만, 그게 너무 사악하다고 여겨졌는지-_-, C# 언어에는 콤마 연산자가 사라지고 콤마는 for 키워드 안에서만 제한적으로나 허용되지 싶다.

? : 는 &&, || 와 마찬가지로 C/C++에서 단축연산이 적용된다. A && B에서 A가 거짓이면 B는 실행이 전혀 되지 않고 전체 결과가 거짓이 되며, A || B에서 A가 참이면 B는 실행되지 않고 바로 전체 결과가 참이 된다. 그런 것처럼 ? :는 선택되지 않은 항에 대해서는 당연히 연산이 일어나지 않는다.

<날개셋> 한글 입력기는 짝퉁 C언어 문법 수식 해석기를 내장하고 있기 때문에, 이를 이용해 글쇠, 오토마타, 글자판 전환 글쇠 등에서 문자 입력 시스템의 자유도를 굉장히 높일 수 있다. 비록 튜링 완전한 수준은 못 돼도 말이다. 이때에도 ? : 연산자는 물론 매우 요긴하게 쓰인다.

? : 는 좌결합이 아니라 우결합이다. A ? B : C ? D : E는 (A?B:C) ? D : E가 아니라 A ? B : (C?D:E)로 결합한다. 그러므로 전자처럼 쓰려면 괄호를 넣어 줘야 한다.

? : 는 다른 연산 구문들을 포함하는 if문 대용처럼 쓰이는 만큼, 연산자의 우선순위가 상당히 낮다. 다른 평범한 연산자들이 다 결합한 뒤 나중에야 적용된다. 그게 합리적이다.
그러나 얘도 콤마와 대입 연산자보다는 순위가 높다. 그렇기 때문에 A = B ? C : D 라고 써 주면 알아서 A = (B?C:D)로 해석되어, A에는 B 조건의 충족 여부에 따라 C 아니면 D가 대입된다.

반대로, ? : 의 내부에 콤마 연산이나 대입 연산이 포함되어야 한다면 이들 연산은 무조건 괄호로 싸야 한다.

A ? (B=2): (C=5)
B에다가 괄호를 안 하면 = 가 ?와 :를 둘로 쪼개 버리는 효과가 나기 때문에 에러가 발생한다.
그리고 C에다가도 괄호를 생략할 수 없는데, 괄호를 안 하면 연산의 의미가 (A?(B=2):C)=5가 되어 버리기 때문이다. 우선순위의 특성상, =가 C항이 아니라 ? = 전체와 대응한다는 뜻 되겠다.

그리고 또 생각해 볼 것은, ? : 연산자의 값은 L-value가 될 수 있겠냐는 점이다. (대입 가능하겠냐)
<날개셋> 한글 입력기는 수식이 처음 도입된 3.0 이래로 지금까지 (조건 ? A:B)=100 과 같은 구문이 지원된 적은 없다. 그러나 이제 <날개셋> 6.0 이후의 다음 버전부터는 그게 가능해진다. 단, 2항과 3항 중 하나라도 변수에 연산자가 조금이라도 붙어서 A+2, -B 같은 형태가 되면 L-value 원칙이 깨지게 되는데, 그런 오류는 수식 입력 시점에서 프로그램이 자동으로 감지해 준다.

이게 지원되면 조건 ? (A=100): (B=100)보다야 구문을 더욱 간단하게 만들 수 있으니까 사용자의 입장에서 좋을 것이다. 더구나 콤마 연산자도 최후의 항의 변수 정보를 남겨 주기 때문에 (조건 ? (A=100,C): (B=50,D)) +=20 같은 복잡한 대입도 가능해진다. 저 식의 의미는 무엇일지 독자 여러분이 생각해 보기 바란다.

정작 이 연산자에서는 괄호가 필요하지 않다. 조건 ? A:B=100 이라고 하면 (조건 ? A:B)=100이 되며, 100 대입 연산은 3항의 B에만 연결되는 게 아니라 ? : 연산의 결과 전체에 걸린다. ? : 의 우선순위가 =보다 높기 때문에 =보다 먼저 계산되기 때문이다.

<날개셋> 한글 입력기로 복잡한 수식을 다뤄 본 분들은 이미 아시겠지만, 이 프로그램은 사용자가 입력한 수식을 어느 정도 자동으로 간소화를 한다. 상수 연산은 미리 계산을 해 버리며, 100/0나 2=A 같은 뻔한 에러는 미리 지적해 준다. 그리고 우선순위 규정상 굳이 칠 필요가 없는 괄호도 알아서 제거를 해 버린다.

(A+B)-C는 A+B-C로 바뀌며, 이와 비슷한 맥락으로 (조건 ? A:B)=100도 그냥 조건 ? A:B=100으로 바꾼다. 이건 프로그램의 오동작이 아니므로 놀라지 말고 수식을 사용하면 된다.

그런데 비주얼 C++ 같은 요즘의 C/C++ 컴파일러들은 ? :를 본인이 생각한 것처럼 취급하지 않는 것 같다.
A==100 ?B:C=400 라고 하면 =400은 3항의 C에만 붙지 B에는 붙지 않는다. (A==100 ? B:C)=400이라고 해 줘야 한다.
또한 ?와 : 사이에 있는 2항은 사이에 대입이나 콤마 같은 연산자(우선순위가 ? :보다 한참 더 낮은!)가 괄호 없이 연결되어 있어도 알아서 2항의 일부라고 인식해 주는 듯.
물론, 그렇다고 해서 A=조건 ? 2항: 3항 같은 문장이 있으면 A=까지 조건으로 끌어들이지는 않는다.

이런 세세한 동작 방식에 대해서 정보를 얻고 싶어서 비주얼 C++ 도움말을 찾아봐도, ? :는 대입 연산자보다 우선순위가 높다던가, 2항과 3항의 타입이 서로 다를 때 연산자 값이 정해지는 원칙 같은 원론적인 말밖에 없다. 그 말대로라면 무조건 내 프로그램처럼 괄호를 써야만 할 텐데 말이다.

그 간단한 ? : 연산자에도 의외로 복잡한 사연이 있다는 걸 알 수 있다.
어쨌든 내 프로그램은 ? : 안에 대입이나 콤마 연산을 포함시키려면 무조건 괄호를 써야만 하는 구조가 앞으로도 유지될 것이다.

Posted by 사무엘

2011/06/05 19:20 2011/06/05 19:20
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/521

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

Comments List

  1. 아라크넹 2011/06/06 00:02 # M/D Reply Permalink

    엄밀하게 말하면, A == 100 ? B : C = 200은 ISO C에서도(ISO/IEC 9899:1999 section 6.5.16) ISO C++에서도(ISO/IEC 14882:1998 section 5.17) 아예 파싱이 되지 않아야 옳습니다. 문법을 잘 살펴 보시면 알 수 있듯 =의 왼쪽에는 괄호 없이 삼항 연산자 수식이 나타날 수 없습니다. 비주얼 C++의 동작은 아마도 확장인 것 같습니다.

    한 가지 흥미로운 것은 ISO C에서는 a || b = c가 파싱이 되지 않는 반면(즉, = 왼쪽에는 단항연산자 수식만 올 수 있습니다) ISO C++에서는 a || b = c가 (a || b) = c로 파싱이 된다는 것입니다(즉, 삼항 연산자를 뺀 모든 수식이 문법상으로는 올 수 있습니다). 후자는 operator||를 재정의해서 비상수 레퍼런스를 반환하게 하면 컴파일도 제대로 될 거에요.

    1. 사무엘 2011/06/06 15:06 # M/D Permalink

      프로그래밍 언어와 IT 표준의 전문가께서 한마디 해 주니 감사! ㄲㄲ
      연산자에 대해서 단순히 우선순위 이상으로 언어가 규정하고 있는 게 더 있군요.
      그래도 설마 && ||를 오버로드하는 용자가 있겠나 싶습니다.

  2. 주의사신 2011/06/06 08:47 # M/D Reply Permalink

    java 처음 입문할 적에, Robocode( http://robocode.sourceforge.net/ )라는 것을 했던 적이 있습니다. 이 때 미리 만들어진 다른 사람의 Robot을 구경하는데, 이 사람 ?를 정말 사랑하더군요.

    (a ? ( b ? c : d) : ( e ? f : g))라는 코드가 존재할 정도...

    그냥 if문 쓰지 하는 생각이 들 정도였습니다.

    1. 사무엘 2011/06/06 15:06 # M/D Permalink

      저는 코딩 스타일이 좀 구려서-_-, ? :와 ,의 남발을 좋아합니다. ㅋㅋㅋ

Leave a comment

날개셋 한글 입력기 6.0

※ 드디어 6.0 시대

5.8 이후 거의 5개월에 가까운 기간 동안 <날개셋> 한글 입력기가 발전한 결과물을 드디어 이렇게 선보이게 되어 대단히 기쁩니다. 무려 6.0!! 5.x에서 6.0이라는 이름이 전혀 아깝지 않을만치 변했습니다. 5.8 이후 소스 커밋은 약 60여 회(change set 개수)가 있었군요. 9개 모듈과 공용 라이브러리의 소스 코드 총합은 현재 약 6만 1천 줄.

초· 종성 공유 낱자 결합 규칙이 추가된 덕분에, 프로그램의 핵심이라 할 수 있는 한글 입력 오토마타 부분이 오랜만에 크게 바뀌었습니다. 아직 100% 완전체가 구현된 건 아니지만 이걸 쓰면 복잡한 두벌식 한글 입력 방식을 구현하는 게 눈물나게 수월해집니다. 그 구체적인 메카니즘은 도움말에 자세히 설명되어 있습니다. 진작부터 추가되어야 했을 기능인데 이제야 도입됐고요.

조합 자동 종료 타이머는 제어판에서 ‘입력 일반’ 항목에 수식의 형태로 깔~끔하게 추가됐습니다. 예제로 제공되는 삼성 천지인 입력 방식이 당장 이걸 사용합니다. A==3 ? 1000: 0 즉, 오토마타 상태가 3번(종성 입력)일 때 1초간 제한을 둬서 사용자가 다음 타를 입력하지 않으면 음절을 끊게 됩니다. 그냥 1000이라고만 입력하면 모든 조합 상태에서 1초 제한이 걸리겠죠.
한글 입력 상태는 A, 그리고 <날개셋> 고급 입력기의 사용자 조합 상태 번호는 B이므로 이들 변수에 대한 수식을 자유롭게 지정할 수 있습니다.

현재 사용할 입력 항목과, 프로그램이 시작될 때 처음으로 지정할 입력 항목을 따로 지정할 수 있게 되고, 입력 항목의 배열 순서를 숫자 직접 입력 및 up-down 컨트롤로 손쉽게 바꿀 수 있게 된 것도 개인적으로는 정말 멋진 변화 사항이라 생각합니다. 제어판 화면을 직접 보시면 압니다.

이 외에도 바뀐 것 많습니다.
외부 모듈의 안정성 관련 이슈는 MS IME의 소스를 직접 참고하지 않는 한 앞으로 6.x 시대에도 계속 나올 것 같고..

※ 타자연습

타자연습은 명목상으로는 바뀐 API 구조대로 프로그램을 재컴파일하고 연습글을 일부 고친 것 말고는 변화 사항이 없습니다. 그래서 버전을 올리지 않았습니다. 그러나 기능 변화가 없다고 입력기만 6.0으로 업그레이드하고 타자연습을 업그레이드하지 않으면, 타자연습 내부에서는 <날개셋> 한글 입력기 6.0 외부 모듈을 사용할 수 없게 됩니다. 자체 입력란 말고 일반 입력란에서는 한글을 입력할 수 없고 MS IME 같은 다른 IME를 써야 한다는 뜻입니다.

그러므로 <날개셋>을 윈도우용 IME로 사용하면서 타자연습도 동시에 사용하시는 분이라면 타자연습 프로그램을 반드시 업그레이드해야 합니다. 가능한 한 API 수준의 바이너리 호환성을 안 깨뜨리려고 노력하지만, 6.0은 한글 입력과 타자 재현 루틴 쪽이 많이 바뀌다 보니(타자연습도 핵심적으로 자주 사용하는 기능인데!) 어쩔 수 없이 호환성이 깨지게 됐습니다.

그래도 변화가 너무 없으면 재미없으니까..
연습글의 변화로는,
헌법 연습글에서 헌법 전문(preface)만 있던 걸 1장과 2장도 추가했습니다.
그리고 ‘재미있는 이야기에’ 주옥같은 김 성모 어록을 단문 연습글로 추가했습니다! “미안하다. 똥 싸느라 늦었다”, “더 이상의 자세한 설명은 생략한다”, “하지만 드라군이 출동하면 어떨까?” 등으로 세벌식 타자 연습을 즐겨 보세요!! ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

연습글의 패치 정도는 정말로 자동 업데이트 시스템이라도 있으면 편하긴 하겠죠. 저도 그런 것의 필요성을 느끼고는 있습니다.

※ 몇몇 표기법 변경

프로그램의 모든 UI와 도움말, 그리고 타자연습의 경우 연습글에서 한국 인명의 1-2자 성명은 성과 이름을 붙여 쓰는 것으로 표기를 바꿨습니다. (공병우, 김용묵) 제 프로그램을 처음 접하는 사람에게 이질감을 줄이기 위해서 취한 조치입니다.
하지만 여타 길이의 인명은 여전히 띄어 씁니다. (김 구, 남궁 억, 김 에스더 등~)

한 10년 동안 일부러 표준 표기법을 안 지키다가 관행을 되돌렸으나, 제 느낌상 다시 생각해 봐도 성과 이름은 일관성 있게 띄어 쓰는 게 더 합리적입니다.
제 블로그는 저의 개인 공간이기 때문에 앞으로도 둘을 여전히 띄어 쓸 것입니다.

※ 안 마태 글자판

안 마태 한글 소리글판이 업데이트됐다는 소식을 들었습니다. 그런데 공식 홈페이지에 제대로 홍보가 안 돼 있고, 키보드 드라이버를 개발하시는 분이 블로그에 게시해 놓은 배열과 공식 홈페이지의 배열이 일치하지 않으며, 심지어 레이아웃이 일반 키보드의 모양과도 일치하지 않는 부분 등 여러 문제로 인해, 제 프로그램의 예제 데이터에는 아직 업데이트를 안 했습니다.

※ 다음 버전은?

이제 6.0 이후의 입력기의 다음 버전은 현재로서는 6.1이나 6.2 정도로 생각 중입니다. 시기는 올해 가을쯤? 이번에는 한글이 아닌 ‘한자 기능 강화판’ 컨셉이라는 생각이 들기에 충분할 겁니다.
단어 단위 한자 변환 기능이 드디어 추가되고,
자료가 확보되는 대로 surrogate(확장 B 이상) 영역의 한자에 대한 독음· 부수 입력 지원 등이 계획되어 있습니다.

아주 옛날스러운-_- 글쓰기를 좋아하는 분 중에, 단어 단위 한자 변환 기능이 있다는 이유로 새나루 입력기를 아주 좋아하는 분이 있죠. 참고로 제 편집기는 세로쓰기도 지원한다만... -_-;;;

뭐, 제가 한자 혼용론자의 수요를 의식하는 건 아니고요. 저런 쪽의 연구는 단순히 MS IME와의 기능 격차를 줄이고 제 프로그램의 기술 데모를 만든다는 성격이 더 강합니다. 단어 단위 한자 변환은 MS IME가 그런 것처럼 TSF A급 프로그램에서만 제공될 것입니다.

지금은 옵션이 달랑 3개밖에 없는 편집기 계층에 한자를 단어 단위로 변환할지 글자 단위로 변환할 지 선택을 할 수 있게 되며, surrogate 영역의 확장 한자까지 후보로 출력할지 설정하는 옵션도 추가됩니다. 솔직히 일반 사용자가 BMP 이외의 한자를 쓸 일은 거의 없고, 그런 것까지 그냥 추가해 버리면 한자 후보가 이제 너무 많아지기 때문이죠.
부수+독음(ㄱ~ㅎ이니셜 정도) 연동 한자 검색 기능 추가도 검토 중입니다. 꽤 유용할 것입니다.
물론 한자 관련 기능만 계획되어 있는 건 아니고요.

※ 잡설

이번 6.0은 제발 잔버그가(특히 새로 추가된 기능에서) 발견되지 않았으면 하는 바람이 간절합니다.
작업 완료에 앞서 도움말을 쭉 읽고 검토를 했는데, 좋은 의미로든 비아냥거리는 의미로든 이게 정녕 내가 내 머리로 만든 프로그램과 설명서가 맞나 하는 생각이 들더군요. 내가 지금까지 참 어지간히도 또라이 같은 짓을 했구나 하는 생각.. -_-;;

맥/리눅스로의 포팅, 프로그램 아이콘, 그리고 다국어 UI 번역 등 역할 분담의 필요성이 느껴집니다. 타자연습은 이미 도저히 내 혼자 개발을 할 수 없는 경지에 간 지가 오래이고..;; 저도 슬슬 개발자 마인드에서 벗어나 사장-_- 컨셉으로 가야 하지 않나 싶습니다.

타자연습의 경우, 생각 같아서는 10년 가까이 묵은 연습글들 대부분을 이제 좀 갈아엎어 버리고 싶답니다. -_-;; 그런데 그것도 제가 할 시간과 능력이 안 되고. 게임은? ‘더 이상의 자세한 설명은 생략한다’ 수준. 어쨌든 결론은 돈인데..;;
“내가 나루토를 보면서 느낀 건데, 사람을 쓰려면 돈이 존나 필요할 거 같아. 그런데 날개셋은 수익이 없잖아? 그러니까 우린 안 될 거야 아마..” ㅋㅋㅋㅋㅋ 뼈 있는 농담. -_-

뭐 그렇습니다.
유용하게 사용하시기 바랍니다. ^^

Posted by 사무엘

2011/04/28 11:24 2011/04/28 11:24
Response
No Trackback , 34 Comments
RSS :
http://moogi.new21.org/tc/rss/response/503

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

Comments List

  1. 김 완수 2011/04/28 18:47 # M/D Reply Permalink

    날개셋 6.0을 설치했습니다.

    한/셀 메모 버그는 여전하고(한/셀 자체 버그), 한/셀에서 곧바로 한글 입력을 할 때 첫 글자가 나오지 않는 것이 수정된 것을 확인했습니다.

    하지만 한/쇼에서 글상자를 선택만 한 다음에 한글을 입력할 때 맨 처음 글자에 해당하는 영문 글자가 나오는 대신에 맨 처음에 친 글자가 한 번 더 나옵니다.(예: 한글 → ㅎ한글, 씨앗 → ㅅ씨앗)

    1. 사무엘 2011/04/29 00:11 # M/D Permalink

      반갑습니다. 윈도우 7 + 한컴 오피스 2010의 한셀. 저는 글상자를 선택만 한 뒤에 바로 한글 입력했을 때 그런 현상이 전혀 발생하지 않고 이제 글자 추가가 잘 되는데 이상하군요? 설마 서비스 팩이나 패치 같은 거 영향 받지는 않겠죠?

  2. 주의사신 2011/04/28 20:33 # M/D Reply Permalink

    1. 6.0 설치했습니다. 그런데 날개셋 헤비 유저가 아니라서 그냥 쓰던 기능만 쓰게 될 것으로 예상됩니다.

    2. 개발 전에 Word 켜 놓고 명세서 쓰는 습관을 들이다 보니, 세벌식을 익히기는 해야겠다는 결론을 내리게 되기는 했습니다. 언제가 될 지는 저도 잘 모르겠습니다.

    3. changeset이라는 명칭을 쓰시는 것으로 봐서 버전 관리 시스템이 Mercurial이나 Git일 것 같은데, 뭔가요?

    4. 아래와 같은 자판도 존재합니다. 프로그래밍 서적계에서 유명하신 김상형님께서 고안하신 건데요. 어떻게 생각하시는지 궁금합니다.

    http://winapi.co.kr/project/anerim/index.htm

    1. 사무엘 2011/04/29 00:11 # M/D Permalink

      1. 6.0은 새로운 입력 기능을 제외하면, 편집기는 아기자기한 편의 기능이 제법 추가되었고, 외부 모듈은 버그가 많이 고쳐진 편입니다. 어떤 분야로든 업그레이드가 유용한 구석이 있을 겁니다. ㅎㅎ

      2. 한글 입력도 많이 하신다면 세벌식은 더욱 투자해서 익혀 볼 가치가 있습니다. 제 프로그램을 진짜 제대로 활용하려면 세벌식을 꼭 익혀 보세요.

      3. 헐, 딱 정확히 맞히셨네요. 지인의 권유로 Mercurial 쓴답니다. 다른 버전 관리 프로그램 중에는 같은 개념을 changeset 말고 다른 용어로 표기하는 것도 있나 봐요?

      4. 김 상형 님의 명성은 저도 익히 잘 알죠. 윈도우 API의 달인인 데다 안드로이드 책도 쓰신 분인데, 문자 입력 시스템까지 연구해 오신 분이라는 건 처음 알았네요. 언뜻 보기로는 12키와 컴퓨터 키보드의 중간 위상에 해당하는 yet another 두벌식 입력 방식 같습니다. 마치 철도에도 표준궤 철도 말고 경전철은 다양한 스펙이 존재하듯, 컴퓨터 키보드보다 작은 입력 방식은 여전히 춘추 전국 시대인 것 같습니다.
      그분 아니랄까봐, 입력 에뮬레이터는 역시나 윈도우 API만으로 굉장히 공들여서 만드셨군요.

    2. 주의사신 2011/04/29 08:16 # M/D Permalink

      SVN 같은 경우에는 Commit 한 번 한 기록을 Revision이라고 부릅니다.

      그렇다 보니 changeset이라는 것을 듣고는 분산 버전 관리 시스템 쓰시는구나 생각을 했습니다.

  3. 최호윤 2011/04/28 21:55 # M/D Reply Permalink

    오오~ 날개셋이 업데이트 되었구나. 집 컴퓨터에 설치하고 사용해봐야겠다~. ^^

    1. 사무엘 2011/04/29 00:11 # M/D Permalink

      ^^;; 지금쯤 써 보고 있으려나??

  4. 박철현 2011/04/28 22:13 # M/D Reply Permalink

    날개셋 6.0으로 업데이트를 했습니다.
    고맙습니다.
    kjv.tc 부분을
    설명대로 따라서 설치를 시도했는데
    아직은 성공을 못해서 더 시도를 해보고 있습니다.
    고맙습니다. ^^

    1. 사무엘 2011/04/29 00:11 # M/D Permalink

      저도 고맙습니다~!
      디렉터리를 찾는 게 어려우시면 kjv.tc를 편한 곳에다 둔 후, 연습글 목록 XML 파일의 <꾸러미 이름="신약 성경"> 태그에다가 기준위치="kjv.tc가 있는 전체 경로" 속성을 추가해 주는 방법도 생각할 수 있습니다.

  5. Asperimus 2011/04/29 09:07 # M/D Reply Permalink

    드디어 6.0이 업그레이드가 되었군요! 사무엘님 수고하셨습니다^^ 당장 업글을 해야겠네요ㅎㅎ

    1. 사무엘 2011/04/29 23:13 # M/D Permalink

      새 버전이 마음에 들었으면 합니다. ^^

  6. 김 기윤 2011/04/29 11:36 # M/D Reply Permalink

    날개셋과 타자연습 모두 설치 완료했습니다.

    김성모 어록 단문 연습글은 ㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲ 정말 ㄲㄲㄲㄲㄲ

    1. 사무엘 2011/04/29 23:13 # M/D Permalink

      시대에 맞는 신선한 연습글이 필요하죠. ㅋㅋㅋㅋㅋㅋㅋ
      마음 같아서는 개그 만화 일화 어록도 넣고 싶었습니다. "똥 묻은 파르페 다음으로 싫어", "닥치세요 이것이 저의 완전체입니다" 등. ㄲㄲㄲㄲㄲ

  7. ???????????? 2011/04/29 18:03 # M/D Reply Permalink

    첫가끝 코드로 한글을 쓰고 나서 백스페이스를 이용해 도로 지울 때, 지금 조합 중인 글자까지만 지워지고 나머지는 지워지질 않아요. 이 문제는 영문 같이 한글이 아닌 문자를 한 번 쓰고 나면 해결돼요. 하지만 그 다음 한글을 다시 쓰면 또 일어나네요.

    이 문제는 메모장, Windows Live Mail, Internet Explorer 등에서 일어나요.

    그리고, 어느 쪽 문제인지는 모르겠지만 Firefox에서 언젠가부터 TSF 기능이 활성화되질 않네요... 옵션에서 강제 활성화를 했지만, 메모장 같은 다른 곳에선 제대로 활성화되는데 Firefox에서는 전혀 되질 않아요.

    1. 사무엘 2011/04/29 23:13 # M/D Permalink

      TSF 확장 기능은 시범적인 성격이 강하고 운영체제 차원에서 안정화가 그리 돼 있지 않은 듯합니다. 에디트 컨트롤에 비해서 IE의 입력란은 오동작이 발생하는 경우가 많으나, 이건 <날개셋> 계층 바깥의 영역이고 딱히 해결책이 없음을 알려드립니다. 어차피 MS IME도 지원 안 하는 일종의 비문서화 기능이기 때문에..;
      님과 같은 상황에서는 TSF 확장 기능이나 bksp 앞글자 달라붙기 기능 중 하나는 꺼야겠습니다.
      FireFox는 자체 제작한 크로스플랫폼 GUI 엔진을 쓰지, 운영체제의 표준 에디트 컨트롤을 사용하지 않는 걸로 저는 알고 있습니다. 그러니 TSF 확장 기능의 수혜를 받지 못하는 게 맞습니다.

    2. 사이버카가미 2011/04/30 22:41 # M/D Permalink

      아, 댓글을 보고 테스트해 보니 '입력 일반-Bksp 동작 방식'의 '현재 글자가 다 지워지면 앞 글자로 달라붙음(T)'와 '완성된 글자를 최초로 지울 때도 낱자 단위로(D)' 중 어느 하나만 체크해도 이 증상이 나타나는군요...전엔 안 그랬는데 이상하네요 ;ㅅ;

      //TSF 확장 기능을 MS IME가 사용하지 않는 건 아니고, 아예 항상 사용하게끔 만들고 그걸 끄는 옵션을 없애 버린 걸로 알고 있어요. 그래서 Vista 때 게임 부분 같은 곳에서 TSF 호환성 문제가 있었다는군요...

      //(10:40 PM 4/30/2011)
      아, 그리고 Chrome에서도 TSF가 적용되지 않네요 ㅠ_ㅠ

  8. 사무엘 2011/04/29 23:23 # M/D Reply Permalink

    이스트소프트의 알약이 날개셋 6.0의 NgsIme.ime (외부 모듈) 파일을 Trojan.Heur.LP 이라는 괴상한 트로이목마로 인식한다는 연락을 모 지인으로부터 받았습니다.
    그게 뭔 소리인가 의아해하고 있었는데.. 알약이 깔려 있는 다른 컴에서 우연히 제 프로그램을 설치해 보니 진짜로 그렇게 나오네요!
    이게 무슨 EXE도 아니고, 그 파일은 컴파일러가 생성한 후 정규 post-processing만 거친 파일을 그대로 패키지화한 것입니다. 헥사 에디터로 들여다봐도 변조나 손상된 흔적은 전혀 없습니다.
    그럴 리도 없지만, 설령 만에 하나 제 컴에 바이러스나 악성 코드가 묻어 있다 해도... 실행도 안 하고 바로 포장한 파일이 오염될 수는 없잖아요? -_-;

    저런 거 검사를 무슨 알고리즘대로 하는지는 모르겠습니다만, 이거 이스트소프트 측에다 오진 신고라도 해야 하나요?
    듣자하니 알약도 엔진은 외산이고 어차피 이스트소프트 제품이 아니라고 하는데..
    보안 쪽으로 일가견 있으신 분의 의견을 기다립니다. 저는 백신 전혀 안 쓰는 사람입니다. -_-

    1. ???????????? 2011/04/29 23:42 # M/D Permalink

      VirSCAN.org Scanned Report :
      Scanned time : 2011/04/29 23:34:09 (KST)
      Scanner results: Scanners did not find malware!
      File Name : NgsIme.ime
      File Size : 210944 byte
      File Type : PE32+ executable for MS Windows (DLL) (GUI)
      MD5 : c36511232a5955f0aba9a7eb96182142
      SHA1 : e0a18efa1d1fc72762ef17d06953ca58afc08a06
      Online report : http://virscan.org/report/53bbaf6e2ff05ebbe38fe96472c90e70.html

      Scanner Engine Ver Sig Ver Sig Date Time Scan result
      a-squared 5.1.0.2 20110429041027 2011-04-29 6.18 -
      AhnLab V3 2011.04.28.01 2011.04.28 2011-04-28 9.29 -
      AntiVir 8.2.4.224 7.11.7.84 2011-04-29 1.54 -
      Antiy 2.0.18 20110205.7694535 2011-02-05 0.15 -
      Arcavir 2011 201103241627 2011-03-24 0.36 -
      Authentium 5.1.1 201104290942 2011-04-29 4.51 -
      AVAST! 4.7.4 110429-0 2011-04-29 0.02 -
      AVG 8.5.850 271.1.1/3604 2011-04-29 0.91 -
      BitDefender 7.90123.7179116 7.37289 2011-04-29 10.44 -
      ClamAV 0.96.5 13022 2011-04-29 0.05 -
      Comodo 4.0 8518 2011-04-29 2.50 -
      CP Secure 1.3.0.5 2011.04.29 2011-04-29 0.14 -
      Dr.Web 5.0.2.3300 2011.04.29 2011-04-29 31.17 -
      F-Prot 4.4.4.56 20110429 2011-04-29 4.80 -
      F-Secure 7.02.73807 2011.04.29.03 2011-04-29 0.18 -
      Fortinet 4.2.257 13.160 2011-04-28 0.54 -
      GData 22.191/22.67 20110429 2011-04-29 12.54 -
      ViRobot 20110428 2011.04.28 2011-04-28 0.52 -
      Ikarus T3.1.32.20.0 2011.04.29.78277 2011-04-29 14.47 -
      JiangMin 13.0.900 2011.04.27 2011-04-27 1.64 -
      Kaspersky 5.5.10 2011.04.29 2011-04-29 0.17 -
      KingSoft 2009.2.5.15 2011.4.29.18 2011-04-29 0.87 -
      McAfee 5400.1158 6320 2011-04-18 0.00 -
      Microsoft 1.6802 2011.04.29 2011-04-29 19.36 -
      NOD32 3.0.21 6074 2011-04-27 0.02 -
      Norman 6.07.08 6.07.00 2011-04-28 76.39 -
      Panda 9.05.01 2011.04.28 2011-04-28 18.89 -
      Trend Micro 9.200-1012 8.126.12 2011-04-29 0.08 -
      Quick Heal 11.00 2011.04.29 2011-04-29 1.25 -
      Rising 20.0 23.55.04.03 2011-04-29 5.66 -
      Sophos 3.18.0 4.64 2011-04-29 7.82 -
      Sunbelt 3.9.2491.2 9152 2011-04-29 11.77 -
      Symantec 1.3.0.24 20110428.002 2011-04-28 0.07 -
      nProtect 20110429.01 3415799 2011-04-29 22.47 -
      The Hacker 6.7.0.1 v00176 2011-04-18 1.92 -
      VBA32 3.12.16.0 20110428.2016 2011-04-28 6.08 -
      VirusBuster 5.2.0.28 13.6.326.1/50826132011-04-28 3.09 -

      ????????????...???? ?????????? ????? BitDefender/???? ?????? ??????? ???? ????????? ???????? ???????? ??? ???????. ?? ???????? ?????????????? ?????????? ??????? ???????????...

    2. 사무엘 2011/05/02 17:27 # M/D Permalink

      구글 크롬 역시 운영체지의 에디트 컨트롤이나 IE 엔진의 입력란과는 관계가 없는 자체 UI 프로그램이므로 TSF 확장 옵션이 전혀 적용되지 않습니다.

      그나저나 날개셋 6.0 NGSIME.IME 오진 문제를 수정하겠다고 이스트소프트 알약 개발팀으로부터 답변을 받았습니다. ^^

  9. 인민 2011/05/09 17:18 # M/D Reply Permalink

    개인적으로, 요즘 한글 세계화를 위해 만드는 누리글 등의 신(新)한글자모가 계속 생겨나고 있는데(물론 저는 14세기 한글 자모 스물여덟 자만으로 충분하다고 생각하지만), 그런 '사용자 정의 한글 자모'를 입력 / 코드 할당 / 키보드 배치 등의 기능을 추가했으면 합니다.

    날개셋 잘 쓰고 있습니다.

    1. 사무엘 2011/05/10 12:59 # M/D Permalink

      제 프로그램은 일단 자소 단위보다 더 세분화된 확장 한글 표현은 지원하지 않고 있습니다. 그래서 유니코드 5.2에 등록되어 있는 한글 자모가 한계이죠. 그리고 어차피 그보다 더 넓은 customization을 제 프로그램이 지원한다고 하더라도 <날개셋> 밖에서 그걸 한데 모아서 표현할 방법이 없으니 문제입니다. 컴퓨터에서 없는 문자를 만들어 표현하려면 코드, 글꼴 등 여러 계층에서 해결해야 할 번거로운 문제가 많습니다.
      의견 감사합니다. ^^

  10. 겨울하늘 2011/05/11 21:58 # M/D Reply Permalink

    수고 많으셨어요~ 업데이트하러 갑니다^^ 감사합니다.

    1. 사무엘 2011/05/12 09:16 # M/D Permalink

      오랜만에 뵙네요. 반갑습니다. ^^

  11. 인민 2011/06/03 20:45 # M/D Reply Permalink

    안녕하세요. 다시왔습니다. 위엣글 답변 감사합니다.

    (답변에 실망한 탓에 프로그래밍 배워서

    모든 옛한글
    방점 조합 <날개셋 방점은 조합이 안된다죠. 게다가 세로쓰기를 해야 뭔가 좀 방점답고>
    사용자 정의 한글 자모 지원
    키보드 포함 옛한글에 최적화된 두벌식, 세벌식 입력방식 개발
    <솔직히 한글 24자로 줄어든 건 어떤 면에선 좋은 점이라고 생각합니다. 훈민정음 28자에다가 ㆋ,ㅴ 같은 것까지 있었으면 공박사님이 한글타자기를 만들 수 있었을까요>

    하여 개발한 후 날개셋과 합작 + 아래아한글과 합작 같은 걸 기대하고 있다는
    아, 물론 농담입니다. 사실 전 중딩밖에 안 됐어요.)

    P. S. wS나 Sw로 배치되어 있는 ㅅ ㅈ ㅊ 비슷하게 생긴 옛한글 자모를 2가지(ㅋㅅ나 ㅌㅅ 등, 기존 방법)로 표시할 수 있는 기능을 추가할 가능성(설령 그렇게 안 하신다 해도) 이 있을까요? 이것 역시 지원이 안 되나요?(프로그래밍을 잘 몰라서 답변의 내용을 잘 모른다는)

  12. 인민 2011/06/03 20:49 # M/D Reply Permalink

    P.S.2. 만약에 , 와 . 가 4단에 간다면 불편할까요? 오른손이 타자를 시작하는 곳이니만큼 오른손이 편하게, 오른손 <한글> 입력은 4단을 쓰지 않게 개정을 시도했는데 말이죠.

    1. 사무엘 2011/06/03 23:25 # M/D Permalink

      간단히 제 의견을 말씀드립니다.

      1. 저도 20세기에 행해진 현대 한글 자모 정리는 나쁘게 생각하지 않습니다. 한글의 잠재적인 표현 능력과, 한국어 정서법에 최적화된 표기 도구로서의 한글은 구분해서 생각해야 하지요. 또 말씀하신 것처럼 기계화 관련 이슈도 있고 말입니다.

      2. 아래아한글에서 'Windows 입력기 사용' 골라서 <날개셋> 외부 모듈을 쓰면 두 프로그램의 기능을 합칠 수 있지요. 다만, 이 경우라도 저번에 말씀드렸듯이 컴퓨터에서 없는 낱자를 새로 만드는 건 굉장히 어려운 일입니다.

      3. 그 옛한글 자모(<날개셋> 내부에서 쓰이는 XML 명칭도 아시는군요^^)를 여타 자모의 조합으로 입력하려면 개인적으로 낱자 결합 규칙에다 그걸 추가해서 쓰면 됩니다.

      4. 영문의 경우 드보락이 온점과 반점이 3단에 가 있습니다. 그런데 이게 4단에 가 있다면? 처음에 사용자에게서 이질감은 많이 느껴질 것 같네요. 오래 쳐 봤을 때 진짜 불편할지는 논외로 하더라도요. 그냥 차라리 지금처럼 ㅋ이 4단인 게 나쁘지 않을 것 같습니다.

  13. 지치고와 2011/06/10 17:57 # M/D Reply Permalink

    안녕하십니까? 날개셋 항상 감사히 잘 쓰고 있습니다.
    다름이 아니라, 저희 집에서 세벌식을 사용하는 사람이 저 밖에 없는지라···, 날개셋 한글 입력기로 한/영 키를 눌렀을 때는 두벌식-영문 쿼티로 바뀌고, 왼쪽 Shift+스페이스바를 눌렀을 때는 세벌식 최종-영문 쿼티로 바뀌게 설정해 놓고 사용하고 있었습니다.

    그런데 날개셋이 글자판 우선순위를 세벌식 최종을 가장 높게 잡는지, 어떤 프로그램을 켜도 세벌식 최종이 가장 먼저 나오네요. 이 상태에서 한/영 키를 누르면 두벌식이 나오기 때문에 저에게는 큰 문제가 아닙니다만, 아버지께서 아예 자판을 치는 데 자꾸 키보드랑 다른 글자가 나오는 것이 짜증나셨던 모양입니다. 아버지께 이럴 때는 한/영 키를 누르면 된다고 말씀드려도 자꾸 헷갈려 하시는군요.

    결국 가장 먼저 영문 쿼티를 나오게 하고자 날개셋 제어판에서 자판 순서를 바꿔보았지만 계속 세벌식 최종이 가장 먼저 떠서, 이것저것 건드려 본 결과, 결국 영문 쿼티가 가장 먼저 나오게는 했지만, 그 과정에서 무언가 잘못 건드렸는지, 문제가 발생해버렸습니다.

    텍스트를 드래그로 다중선택(블록 지정)을 하고서 그 상태에서 다른 글쇠를 누르면 원래는 그 블록 지정한 텍스트가 전부 지워지고 누른 글쇠가 나오지 않습니까? 그러나 저 같은 경우에는 지워지지 않고 문장 마지막에 누른 글쇠가 새로 생깁니다. 또한 문장 가운데 커서를 놓고 그 사이에 다른 글쇠를 눌러도 문장 가장 마지막으로 가서 누른 글쇠가 나옵니다.
    이 현상은 인터넷 익스플로러 8과 메모장과 일부 프로그램에서 확인했습니다. 구글 크롬에서는 이렇지가 않습니다.

    가능하면 저 혼자서 해결하려 했습니다만, 날개셋 제어판과 도움말이 제가 이해하기에 그 내용이 너무 복잡하기에 실례를 무릅쓰고 이렇게 도움을 요청하는 바입니다. 죄송합니다.

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

      반갑습니다.

      1. 한글 글자판에서 두벌식이 먼저 나와야 한다면 두벌식을 0번으로 맨 위로 옮기고, 글쇠 전환 수식도 그에 맞춰서 바꾸면 될 것 같습니다.

      2. 이해가 좀 안 되는 현상입니다만, 의심 가는 건, "시스템 계층-고급 시스템 옵션"에서 혹시 "윈도우 비스타/7에서 TSF 지원 확장" 옵션인데요, 이게 켜져 있으면 끄시기 바랍니다.
      하지만 윈도우 비스타에서는 그걸 켰더라도 블록이 안 지워지는 것 같은 현상은 발생하지 않으며, XP에서는 전혀 해당사항이 없습니다.
      만약 잘 안 되면, "가져오기 - 프로그램 설치 직후 상태로"를 선택한 후 입력 환경을 처음부터 다시 맞춰 보는 건 어떨까 싶네요.

      더 의문이 있으면 제게 '메일'로 연락 주시기 바랍니다.

    2. ???????????? 2011/06/16 09:49 # M/D Permalink

      2번 현상은 저에게도 나타나요. (Windows 7 64bit)
      제 경우는, 다른 때도 나타나는지는 잘 모르겠는데 IE 9에 트위터 웹에서 답변 기능을 쓸 때 특히 많이 나타나더군요.

      마지막에 입력을 시도했던 커서의 위치에서 벗어나 커서를 다른 곳으로 옮긴 다음 입력을 시도하면 도로 원래 위치로 돌아가서 입력을 하고 있다든가 하는 현상이 나타나요.

      이 문제가 항상 나타나는 건 아니고, 트위터 웹 사이트에 접속한 뒤에 처음엔 잘 되다가 좀 쓰다 보면 갑자기 이런 문제가 나타나요.

    3. 사무엘 2011/06/16 11:41 # M/D Permalink

      ‘커서가 도로 원래 위치로 돌아가는’ 현상은 TSF 확장 옵션을 켰을 때 일어날 수 있는 현상이고, 저도 원인과 재연 조건을 파악하고 있습니다. (기술적으로 여건상 일부러 그냥 방치하고 있는 것 ㄲㄲ)

      지치고와 님의 댓글처럼, 블록 위에다 한글을 입력했는데 블록이 안 지워지고 블록 끝에 한글이 입력되는 건 비스타/7, 그리고 TSF 확장 옵션 유무와 상관없이 저는 전혀 확인하지 못했습니다. 혹시 사이버카가미 님도 블록 미삭제 현상을 확인하셨나요?

    4. ???????????? 2011/07/02 01:19 # M/D Permalink

      IE에서 트위터를 하다가 얼마 지나면 재미있는 현상이 많이 나타났는데, 요즘은 IE로 트위터를 하지 않아서 기억이 안 나지만 그 현상들 가운데 하나로 그런 현상이 있었던 것 같아요.

  14. 에네스케이 2011/06/12 14:06 # M/D Reply Permalink

    두벌식과 세벌식의 전환이 잘 이루어지지 않는 경우가 있습니다.

    가끔 제 컴퓨터를 아버지가 쓰실때가 있어서 자판을 세벌식에서 두벌식으로 바꿔놔야 할 경우가 있어 설정에서 세벌식으로 설정된 자판을 두벌식으로 바꾸면 설정창에서는 두벌식으로 나오지만 작업표시줄의 '한'이라고 되어있는 부분은 여전히 세벌식으로 나오며 입력도 그대로 입니다.

    딴짓좀 몇번 하다가 다시 두벌식으로 체크하고 확인을 하면 갑자기 정상적으로 두벌식으로 입력되는 경우도 있으며 이 증상은 두벌식에서 세벌식으로 변경할때도 동일하게 나타납니다.

    정확히 어떤 상황에서 발생하는지 저도 잘 몰라서ㅠㅠ 원하는때에 재현이 불가능합니다-_-;; 그래서 이렇게 밖에 쓸 말이 없네요;;

    사용하는 운영체제는 윈7 64비트입니다.

    1. 사무엘 2011/06/12 21:05 # M/D Permalink

      날개셋 얘기인지('한' 모양 아이콘), 세벌식 파워업(두벌식과 세벌식 전환) 얘기인지 분간이 안 되네요.
      세벌식 파워업은 MS IME(윈도우 기본 한글 입력기)를 상대로만 동작하지, 날개셋 한글 입력기를 건드리는 프로그램이 아니라는 건 아시지요?

    2. 에네스케이 2011/06/18 02:04 # M/D Permalink

      날개셋 이야기입니다. 버전은 물론 6.0이구요.

Leave a comment

날개셋 한글 입력기 개발 소식

독자 여러분 중에 혹시
“이 블로그 주인장은 요즘 온통 철도에 미쳐서, 본업이던 <날개셋> 개발 같은 건 이제 때려치웠나 보군.”이라고 오해할 분이 있으실 것 같아서
오늘은 오랜만에 내 본업의 근황을 좀 알리도록 하겠다. ㄲㄲㄲㄲㄲㄲㄲㄲ

걱정 마시라. <날개셋> 한글 입력기는 현재 6.0의 개발이 활발하게 진행 중이다.
5.x 버전도 졸업이 임박했고 드디어 6.0 시대 개막이다.
킹 제임스 성경 발간 400주년과, 내 홈페이지 개통 10주년을 기념하여 5월 초순에 출시 예정이다.

10년 전이나 지금이나.. 이번 새 버전에도 어김없이 버그 고치고 새로운 기능 단장한 게 많다. 물론 대부분의 버그는 세벌식 최종+모아치기+드보락 정도의 용도로나 프로그램을 사용하는 분들은 발견할 일이 없는 것들이기 때문에, 문서화하지도 않은 것도 여럿 있다.
하지만 이제는 더 고칠 게 없겠지 싶어도, 새 버전 릴리즈 후 한두 주 정도가 지나면 프로그램 소스 코드를 어김없이 건드리게 되더라.

이번 6.0에서는 외부 모듈에 지금까지 알려져 있던 버그들은 모두 해결했다. gvim (한영 상태), MS Outlook (영문 덧입력), 로그인 UI (아이콘 외형)처럼 비록 프로그램의 안정성 관련은 아니지만 자잘한 문제가 있던 게 해결되었고, 해당 버그 제보자에게는 버그가 고쳐졌다고 메일로 다 따로 통보를 오래 전에 했다.

이런 bugfix만 있다면 새 버전의 번호를 6.0으로 올리기에 부족한 감이 있을 것이지만, 새 버전에는 한글 입력과 관련된 깔끔한 새 기능이 들어간다.
첫째, 일정 시간 동안 키 조작이 없으면 음절 구분을 위해 지금 조합을 자동으로 끊고 음절을 구분하는 기능이 추가된다. 천지인 같은 휴대전화 입력 방식을 구현할 때 필요하다.

둘째, <날개셋> 한글 입력기의 역사상 최초로, 초성과 종성이 한 낱자 결합 테이블을 공유하는 기능이 추가된다. ㄱ->ㅋ->ㄲ 같은 조합 로직은 하나만 구현해 놓으면 초성과 종성이 자동으로 공유하고, 종성에다가는 ㅄ, ㄶ처럼 도깨비불 처리가 필요한 겹받침 결합 규칙만 정하면 된다. 이걸 이용하면 ㄴㅅ, ㄴㅇ, ㄴㅊ 등 온갖 복잡한 경우의 수를 따져야 하는 휴대전화 입력 방식을 디자인하기가 지금보다 훨씬 더 쉬워진다.

물론 이 기능이 추가됨으로써 GUI상의 변화와 입력 설정 데이터 파일의 변경은 말할 것도 없고, 이미 지금 있는 가상 낱자와 특수 도깨비불 테이블과의 연계라든가.. 타수 복원 알고리즘의 추가 구현 같은 작업량이 아주 많다. 그러나 이것은 굉장히 중요한 변화이다.

6.0 이후로는 <날개셋> 한글 입력기는 자잘한 버그 수정이나 자그마한 편의 기능 추가,
아니면 여러 입력 패드 추가, 지금보다 더 복잡하고 다양한 글쇠 입력을 받아들이는 입력 스키마의 추가 등으로 최소한 6.x 중반까지는 버전업이 계속될 것이다.

그 중, 한 글자가 아닌 단어 단위의 한자 변환 기능은 6.0은 아니지만 6.0 완성 이후에 상당히 높은 작업 우선순위를 두고 있다.
MS IME는 무려 2003년도 버전부터(MS 오피스 2003) 지원했고 윈도우 비스타부터는 아예 기본으로 들어간 기능인데 내 프로그램은 다소 늦은 감이 있다. 물론 한글 입력 쪽보다야 중요도가 훨씬 더 낮기 때문에 지금까지 구현이 미뤄져 온 것이다.

내가 10년이 넘게 한글 입력기만 파고들 수 있었던 원동력은.. 간단히 말하면 한글이 너무 대단하고 세벌식 글자판이 너무 신기해서였다.
프로그래밍 하듯이 각종 테이블과 오토마타 로직을 바꿔서 한글 입력기의 동작 방식을 바꾸고, 내가 원하는 방식으로 마음대로 한글을 입력하고, 내가 원하는 한글 성분을 바로 고치고, 이미 입력된 문자열도 조작하는 걸 보니까 뭔가 밥 안 먹어도 배가 부른 것 같고, 정신적으로 만족과 자아 성취감을 느낀다. 이런 걸 '제대로' 구현하려면 누가 뭐래도 세벌식 글자판이 없으면 안 된다. 세벌식으로는 더 편리한 걸 만들 수 있지만 두벌식으로는 잘 해야 기본밖에 못 만든다.

보너스로...
모 지인이, 북한의 붉은별 OS가 쓰는 한글 글꼴의 비트맵을 완성형으로 추출하여 파일을 보내 줬다.
매우 흥미롭다. 남한과 북한의 운영체제에서 쓰이는 완성형 한글 비트맵 글꼴이 한데 집합했다.

사용자 삽입 이미지

광명은 순명조 컨셉이고, 붓글은 우리나라에도 비슷한 모양의 서체가 간판 같은 데서 쓰인다.
천리마는 뭔가 투박한 느낌이 나는 가는돋움 스타일.
그리고 청봉은 신명조 윤곽선 글꼴을 힌팅을 아주 잘 해 줬을 때 나올 법한 미려한 본문용 서체이다.

북한은 그렇게도 민족, 주체 사상을 좋아하면서 한글 글자판이나 코드는 다 남한과 비슷한 스타일로 표준을 정했다.
북한도 평범한 두벌식을 쓰고(왼손이 자음인 것도 동일함), 2350자보다는 약간 더 많지만 그래도 역시 2천여 자의 완성형을 쓰는 것까지도 똑같다. 세벌식이나 조합형 같은 건 주체 사상하고 별 관련이 없나? 그냥 김일성, 김정일만 따로 특수문자로 배당해 놓으면 장땡인 건가? ㄲㄲㄲㄲㄲㄲㄲ
아울러, 북한이 안상수체나 공한체 같은 탈네모꼴 글꼴을 만들었다는 얘기도 본인은 못 들었으니 글꼴 쪽도 별 변화가 없는 셈이라 하겠다.


Posted by 사무엘

2011/03/07 08:33 2011/03/07 08:33
, ,
Response
No Trackback , 23 Comments
RSS :
http://moogi.new21.org/tc/rss/response/476

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

Comments List

  1. 바슈 2011/03/07 09:24 # M/D Reply Permalink

    기대하겠습니다.

  2. 김기윤 2011/03/07 11:12 # M/D Reply Permalink

    단어 단위의 한자 변환 기능이 드디어 들어가는군요..!

    ....그런데 북한 서체는 좀 후덜덜한데요?;;

  3. 사무엘 2011/03/07 22:12 # M/D Reply Permalink

    바슈: 감사합니다. ^^

    김기윤: 북한은 방송 말투도 그렇고 서체도 ㅎㄷㄷ하죠. 그래도 나름 완성도는 있어 보입니다.

  4. ?????? 2011/03/07 22:24 # M/D Reply Permalink

    아、글자를 첫가끝으로 쓸 때도 ”’Bksp 동작 방식’→’현재 글자가 다 지워지면 앞 글자로 달라붙음’” 작동하게 해 주세요~

    1. 사무엘 2011/03/08 09:12 # M/D Permalink

      외부 모듈을 말씀하시는군요. 무슨 말씀인지는 알겠습니다.
      하지만, 현 운영체제 내지 응용 프로그램들이 1글자를 넘는 길이의 한글 조합을 표현하고 처리하는 게 영 시원찮아서, 그건 기술적인 한계로 인해 별 의미가 없어서 구현을 안(또는 못) 하고 있습니다. ^^

    2. ?????? 2011/03/12 23:55 # M/D Permalink

      음, 제가 보기에 1글자를 넘는 길이의 한글 조합을 표현하고 처리하는 데에 큰 문제는 없어 보이던데요...ㅇㅅㅇ;

      커서 바로 앞이 첫가끝 코드로 되어 있을 때 끝소리-가운뎃소리-첫소리 순으로 역추적해서 앞 글자로 달라붙을 수 있게 할 수 있을 것 같아요.

    3. 사무엘 2011/03/13 21:39 # M/D Permalink

      아니요, 그런 차원에서의 문제를 가리키는 게 아니라, 기술적으로 조금 더 골치 아픈 문제가 있습니다.
      같은 엔진을 쓰는 <날개셋> 편집기 내부에서야 문제가 없는데, 한글 조합은 오로지 한 글자뿐이라고 전제하고 설계된 여타 프로그램들에서 나타나는 현상입니다.

    4. ?????? 2011/03/16 19:26 # M/D Permalink

      그 여타 프로그램들에서 안 되더라도 그 여타 프로그램들이 아닌 프로그램에서만이라도 작동하게 할 수 없을까요 ㅠ.ㅠ...

    5. 사무엘 2011/03/16 21:16 # M/D Permalink

      bksp 달라붙기 기능을 쓸 수 있는 프로그램 자체가 극소수의 TSF A급 프로그램뿐이죠.
      그런데 그 '여타 프로그램' 중에 전세계 사람들이 업무용으로 즐겨 쓰는 유명한 프로그램들을 빼면 남는 게 없습니다. :(

    6. ?????? 2011/03/16 22:53 # M/D Permalink

      그 '즐겨 쓰는 프로그램'에서 잘 되는 게 중요하다고 생각해요... ㅠ.ㅠ

  5. 최호윤 2011/03/08 09:13 # M/D Reply Permalink

    하하, 네 말대로 날개셋 얘기는 없고 철도 얘기만 잔뜩 있어서 그런 생각이 들곤 했어. ^^;

    1. 사무엘 2011/03/08 09:41 # M/D Permalink

      ㅋㅋㅋㅋㅋㅋㅋ 염려 놓으셈~

  6. 김재주 2011/03/08 10:17 # M/D Reply Permalink

    음. 저는 스타2를 많이 하기 때문에 날개셋을 쓰지 못하고 있네요. 지금도 안 되는지는 잘 모르겠습니다만 아마 그쪽에는 별 변화가 없을 것 같습니다.

    블리자드 코리아는 전부터 세벌식 사용자를 배려하기 위해 WOW의 기존 지정 단축키까지 수정한 전례가 있는데
    고객지원 쪽으로 한번 찔러보면 긍정적인 답이 나올 수도 있지 않나 싶기도 한데 말이죠.

  7. 김재주 2011/03/08 10:21 # M/D Reply Permalink

    아, 갑자기 떠오른 생각인데 단어 단위 한자 치환 기능을 지원하실 거라면 일본어 IME처럼 특수문자 입력을 우리말로 할 수 있게 하면 어떨까요? '별' 하고 한자키를 누르면 ☆과 ★이 나오고 별이라는 음을 갖는 한자들이 나오고, '화살' 하고 누르면 →↗← 같은 화살표들이 나오고 '네모' 하면 □이 나오고..

    하나하나 정리하는 것도 큰일이겠습니다만 이거야 여러 사람이 힘을 합치면 충분히 가능한 일이지 싶네요. 일단 구현이 되면 편리하지 않을까요?

    1. 사무엘 2011/03/08 12:32 # M/D Permalink

      1. 스타2의 버그가 나중에 고쳐졌다는 얘기도 들은 것 같은데 저는 잘 모르겠습니다.
      제가 확인한 바로는, 스타2가 키보드 보안 같은 이유로 인해 여타 입력기의 정상적인 동작을 고의로 막는 수준입니다. 그래서 제가 더 어찌할 도리가 없습니다.

      2. 한국어 IME에는 전설의 초성+한자 신공이 있기 때문에 굳이 그런 기능이 필요한지는 모르겠지만..
      마음만 먹으면 굳이 한글-한자가 아니어도 임의의 다대다 문자열 변환 mapping이 가능할 정도로 범용적으로 해당 기능을 구현할 예정입니다. ^^;;
      이번 6.0은 여전히 일대일 변환 mapping만 지원하지만, surrogate를 사용할 수 있게 기능이 약간 확장됩니다.

    2. 김기윤 2011/03/08 13:33 # M/D Permalink

      스타크래프트2 버전 1.2.2 와, 날개셋 버전 5.8 기준으로 한글 입력 전혀 문제 없습니다. 아니, 클베때에 발생했던 문제였는데, 그게 오베때(1.0.0, 2010년 7월 27일)에 블리자드측에서 완전히 해결 한 문제로 알고 있는데요, 저는?;;; 그동안 계속 날개셋 상태로 스타2를 계속해서 해왔으니까요. 오베 이후 전혀 문제 없었습니다.

    3. ?????? 2011/03/20 15:34 # M/D Permalink

      그렇게 생각할 수도 있겠지만, 입력하고 싶은 문자가 어디에 있는 것이었는지 항상 이리저리 찾게 되어 버려서, 일본어 입력기같이 저런 기능이 있다면 더욱 쉽게 찾을 수 있을 거예요!

  8. 박상대 2011/03/08 22:12 # M/D Reply Permalink

    저는 윈도우7 + 스타크래프트2 + 날개셋 버전 5.53 (업뎃 귀차니즘...) 인데,
    한글 입력시에는 별 문제가 없지만,
    전체 화면으로 할 때 한자 후보창이 안 보입니다.
    그래서 무슨 한자가 몇 쪽 몇 번인지 외워서 씁니다.
    날개셋이 구버전이라서 그런거겠죠?

    1. 김기윤 2011/03/08 22:43 # M/D Permalink

      일단, 저는 Windows 7 x64 Ultimate K + 스타2 + 날개셋 버전 5.8 기준입니다.

      일단, "스타2 버그" 라고 하시길래 클베때 있었던 한글 입력이 안되는 사건...인줄 알았는데, 그게 아니고 한자 후보창이 안보이는 문제셨군요. 그래가지고 실험을 하던 중에 http://twitpic.com/47g9eu 이런 것을 발견하였습니다.(저는 이 한자 후보창 처음 봤습니다-_-;;) 일단 한자 후보창 자체 제작한 블리자드에게 경의=_=를 표합니다.. 일단 다음에 시간을 내서 이쪽은 자세히 증상을 확인해 봐야 겠습니다. 현재 이 스샷은 날개셋으로 찍은 것이며, 한자 후보창이 뜰 때가 있고 안 뜰 때가 있더군요. MS IME 상태에서는 항상 뜨는지, 날개셋으로 할때는 후보창이 뜨는 조건이 뭔지 조사해서 알려드리겠습니다.

    2. 사무엘 2011/03/10 09:48 # M/D Permalink

      한자 후보창 쪽은 5.53 이후로 바뀐 게 없기 때문에 구버전 문제는 아닌 것 같습니다. ^^

    3. ???????????? 2011/03/11 16:33 # M/D Permalink

      김기윤님//요즘 나온 전체 화면 프로그램에서는 TSF 라이브러리를 써서 자체 UI로 만들더군요~

    4. 김기윤 2011/03/16 11:40 # M/D Permalink

      간단하게 실험해 보았는데, 기본값을 날개셋으로 한 상태에서 실행할 경우 창모드(전체화면) 기준으로 스타크래프트의 한자 후보창 UI가 아니라, 날개셋 고유의 한자 후보창 UI 가 뜨더군요. 그런데 이게 아니고, 실행한 뒤 날개셋으로 바꾸면 이번에는 스타 고유의 후보창 UI 가 뜹니다. MS IME의 경우, 전후관계 상관없이 항상 스타 고유의 후보창 UI 가 뜨는 것 같습니다.
      전체화면시에는 안보인다 하셨는데, 이 경우에는 날개셋 고유의 한자 후보창 UI가 스타크래프트2 화면에 가려서 안보이는 것으로 추정됩니다.

      (그런데 스타 고유의 UI 뜨는것도 약간 문제가 있는 듯 합니다.. 바로 뜨는 경우도 있고, 방향키 등으로 UI를 갱신시켜야 뜨는 등)

    5. 사무엘 2011/03/16 21:16 # M/D Permalink

      흠, 그런 현상이 있군요. 제가 6.0을 만들면서 거기까지 신경을 쓰지는 못하겠지만, 나중에라도 관련 분야로 외부 모듈을 테스트할 기회가 있을 때 이런 점을 염두에는 두고 있겠습니다.

Leave a comment

My Programming Life

1.

<날개셋> 한글 입력기는 동일한 입력기 커널을 공유하는 세 개의 프런트 엔드가 있다.
그 중에서 가장 존재감 있는 터줏대감은 전용 에디터인 편집기이고, 실질적으로 가장 널리 이용되는 프로그램은 윈도우용 IME인 외부 모듈이다. 한편, 편집기처럼 실행되어 마치 IME처럼 동작하는 포인팅 장치 입력 유틸리티인 입력 패드도 지난 5.3 버전에서부터 추가되어 제 3의 프런트 엔드 구실을 하고 있다.

그 중 가장 먼저 만들어진 ‘편집기’는... 프로그램을 만든 본인부터가 에디터로서 아주 유용히 사용한다.
차라리 외부 모듈은 디버깅 할 때 외에는 사용하지 않는다. 운영체제의 기본 IME로 지정되어 있으면 파일을 고칠 수가 없어서 디버깅을 못 하기도 하기 때문이다.

<날개셋> 편집기는 어떤 점에서는 아주 답답하다. 가변폭 글꼴이 지원 안 되고 글씨 크기 조절도 안 되고, ClearType 렌더링이라든가 OpenType 스펙 등 오늘날의 모든 최신 타이포그래피 기술로부터 완벽하게 소외된 외딴 섬이기 때문이다.

그러나 한편으로 <날개셋> 편집기는 아주 작고 가벼우면서도 윈도우 95 이래 어떤 OS에서나 동일하게 유니코드 5.2 옛한글을 마음대로 조합할 수 있고 한글을 내 마음대로 다룰 수 있는 우리집 안방 같은 공간이다. 내가 만든 프로그램이어서 자화자찬 차원이 아니라 정말로 그렇다.
입력 기능뿐만 아니라 다양한 텍스트 필터도 있고, 한글을 자모 단위로 찾고 입력기에다 넘겨주는 글쇠를 붙여넣는 것 같은 아기자기한 기능도 있다. 도스 시절 추억의 도깨비 한글 비트맵 글꼴을 볼 수 있는 건 덤이다.

예전에는 옛한글은 오로지 내장 글꼴로밖에 표현할 수 없었는데 5.3에서부터 임의의 조합 테이블과 추가 자모를 내장 가능한 자체 비트맵 글꼴 포맷을 제정함으로써 <날개셋> 한글 입력기의 커널은 나름대로 글꼴도 독립을 이뤘다. 아래아한글 1.x와 비슷한 글월 입력 환경을 윈도우 환경에서 재현해 낸 것이다.

완전한 텍스트 에디터 엔진을 처음부터 새로 만들었기 때문에, 앞으로 한글 표현 방식이 어떻게 바뀌든 이 구조에 맞춰 엔진을 마음대로 내가 고칠 수 있다.
리눅스나 맥 OS에서는 이런 게 언제쯤 상륙 가능할까? ㄲㄲ

2.

지금까지 <날개셋> 한글 입력기를 만드는 과정에서 그 당시엔 내가 방법을 전혀 몰라서 어려움을 겪던 고비가 몇 차례 있었다.
- 인스톨 패키지 만들기(2002~2003년): MSI 기반으로 완전히 해결
- 외부 모듈(2004~2005년): 3.x 초창기 버전 때 무수한 시행 착오를 겪으면서 결국 안정화 단계. 하지만 “아직까지도” 일부 극소수 몰상식-_-한 응용 프로그램에서 사소한 오동작 버그 신고가 올라오고 있음
- 64비트(2007년): 결국은 본인이 64비트 기계를 직접 장만하면서 지원에 성공.

3.

한 컴퓨터를 놔두고 세벌식 사용자인 본인과 두벌식 사용자인 지인이 같이 앉아 문서를 읽으면서 검토와 교정을 하고 있었다. 이때 복벌식 입력 방식을 아주 유용하게 사용했다. 글자판 전환을 할 필요 없이 서로 자기에게 익숙한 글자판으로 자기가 수정하고 싶은 곳에서 바로 글자를 입력하면 되니 이렇게 편할 수가 없었다. ^^

이거 하니까 세벌식 관련 다른 팁이 또 생각난다. 세벌식 숫자 배열이 익숙한 분이라면, numlock이 켜져 있을 때 오른손 숫자 자리가 non-shift 자리로 내려오게 하면 엑셀 같은 데서 숫자 입력을 아주 편리하게 할 수 있다. <날개셋> 한글 입력기로는 가능하다.

4.

버전 5.53 내지 5.65쯤부터 추가되었지 싶은데, <날개셋> 편집기로 프로그램이 아닌 문서 창(MDI)의 시스템 메뉴를 보면 해당 문서 파일의 ‘속성’ 창을 바로 꺼내거나, 탐색기를 꺼내거나 전체 경로를 복사하는 명령이 있다. ‘파일 경로 복사’를 고르면 되는데, 지금까지는 진짜 말 그대로 파일의 경로가 텍스트 형태로 복사되어 메모장에서만 그걸 붙여넣을 수 있었다.

그런데 탐색기에서 Ctrl+V를 누르면 해당 파일 자체가 실제로 복사도 되게끔 프로그램을 고쳐 봤다. 메모장과 탐색기는 클립보드를 사용하는 방식이 완전히 다르기 때문에 이 기능은 서로 충돌을 일으키지 않으며, 이렇게 하니까 아주 편하다. 5.8 버전에 이 기능이 반영되지 못해서 아쉽다.

5.8을 릴리즈한 후 현재까지 도움말의 오타 내지 로그인 화면· 아웃룩· vim 등에서의 사소하지만 쉽지 않은 외부 모듈 관련 버그가 몇 개 보고되어 있다. 하지만 다들 프로그램의 성능이나 안정성(죽는다거나-_-)과 관련된 건 아니다. MS IME의 소스를 직접 보지 않는 이상 이런 것까지 다 완벽하게 처리하는 버그 없는 IME란 제작 불가능하다. -_-

5.

다음은 <날개셋> 타자연습 이야기. 지금부터는 그림도 좀 곁들이겠다.

사용자 삽입 이미지
요즘도 실력 유지를 위해 타자 연습을 안 하는 건 아닌데,
주옥같은 연습글을 만들었다. 다음 버전에 추가할지 진지하게 고민 중이다. ^^;;

공 병우 세벌식은 10년을 넘게 써도 한글의 위상을 끌어올린 정말 위대한 발명품임이 느껴진다. 그 반면 저 불편한 현행 두벌식 글자판은 어떻게 쓰는지 그걸로 빨리 치는 사람들이 대단하기 그지없다. 세벌식의 단점--기껏해야 글쇠 수 좀 많고 4단 쓰는 것--에 비해 두벌식의 단점은 훨씬 더 치명적이다.

사용자 삽입 이미지
2008년부터 2010년까지 존재하는 본인의 게임 점수판은 전부 ‘승리’(12단계 깨고 엔딩)이다. 본인이 사무엘이라는 이름을 쓰기 시작한 건 2008년 말부터임.
<날개셋> 타자 게임은 과거의 한메 타자 베네치아보다 훨~씬 더 어렵지만 요즘은 한글 타자가 워낙 일상화했기 때문에 본인 말고도 엔딩 보는 사람이 꽤 있을 것이다.

6.

끝으로, 10년 전에 만들었던 WordTech 엔진(컴퓨터 자동 대국 기능)을 요즘 완전히 새로 다시 짜고 있다. 스크린샷은 기존 WordTech와, 새 엔진(GUI를 갖다붙이지 않은 콘솔 프로그램)끼리 서로 검증 대국을 시키는 모습이다.

사용자 삽입 이미지
본인은 <날개셋> 한글 입력기를 만들기 전엔 국내에서 거의 최초로 크로스워드 게임 엔진을 만든 바 있으나... 그 당시의 작품은 지금의 관점에서 보면 기술적으로 개허접.. ㄲㄲㄲㄲ

요즘은 워낙 컴퓨터가 똑똑해진 덕분에, 굳이 이것보다 더 빠르고 메모리를 덜 쓰는 크로스워드 게임 엔진을 만든다는 게 큰 의미는 없지만... 이번에 새로 짠 코드는 메모리 사용량, 계산량, lexicon의 자료구조와 알고리즘, 코드의 깔끔함과 재사용성 등 모든 면에서 10년 전의 구닥다리 코드와는 비교가 되지 않는다. 참으로 아름답다. ^^;;

사실, 이렇게 만들면 된다는 이론적 기반은 이미 수 년 전에 완성되었지만 <날개셋> 개발 때문에 뒷전으로 밀려서 지금까지 작업을 못 하고 있었을 뿐이다.
WordTech도 버전업 좀 하고 싶은데.. ㅠㅠ 컴퓨터과학과 대학원 수업에서 무슨 과목으로든 프로젝트로 좀 할 기회라도 있었으면 좋겠다. 이 엔진 얹으면 버전 4.0으로 가는 건데.;;

콘솔은 만국의 공통 인터페이스이다 보니(표준 입출력 스트림^^), 엔진을 비주얼 C++뿐만이 아니라 오랜만에 DJGPP로도 컴파일해서 도스에서 돌려 봤다. 똑같이 32비트이기 때문에 별 어려움 없이 돌아간다. 지금도 DJGPP가 버전업이 되고 있는지는 모르겠지만 내가 보유하고 있는 건 무려 1997년에 설치한 버전. 혹시 bool 키워드가 지원되지 않나 확인해 봤는데 다행히 지원한다.

10년 전에는 DJGPP의 그 느린 빌드 속도가 무척 거슬렸으나 지금은 그마저도 전광석화. 별도의 도스박스 같은 에뮬뿐만이 아니라 그냥 윈도우 운영체제의 NTVDM에서도 잘 돌아간다.
단, printf의 포맷 지정자로 %c만 인식하고 %C는 인식하지 않는다. 대문자를 찍는다는 생각에 %X와 %x(16진수 숫자)를 구분하듯 습관적으로 %C를 지정해 줬는데 인식이 안 되더라. 뭐, 어차피 찍을 때 chCode+'A' 식으로 대문자를 지정하기 때문에 %c와 %C는 전혀 구분할 필요가 없고 %c만 지원해도 충분하긴 하다.

이상으로 본인의 programming life 잡설 끗.

Posted by 사무엘

2010/12/29 16:46 2010/12/29 16:46
, , , , , ,
Response
No Trackback , 12 Comments
RSS :
http://moogi.new21.org/tc/rss/response/440

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

Comments List

  1. 처음 알았음..; 2010/12/29 17:50 # M/D Reply Permalink

    으음.... 날개셋 입력기가 "외부 모듈"이었군요....

    1. 사무엘 2010/12/30 00:56 # M/D Permalink

      ‘외부 모듈’이라는 게 뭐 정확한 용어는 아니지만 제가 편의상 붙인 것입니다.
      <날개셋> 한글 입력기는 실질적으로 외부 모듈, 즉 IME의 형태로 제일 널리 쓰이고 있죠.ㅋㅋ
      하지만 외부 모듈이 개발된 건 버전 3.x대에 와서이고, 그 전에 제 프로그램은 편집기 형태로만 존재했습니다.

  2. 김기윤 2010/12/29 20:37 # M/D Reply Permalink

    1. 외부 모듈을 디버깅 하려면 오히려 기본 IME 로 지정하면 디버깅을 못하는 아이러니..
    그래도 날편은 작고 가벼우면서 서식 없는 간단한 텍스트 편집하기에 괜찮아서 메모장 대용으로 즐겨 사용하는 편입니다. 한자 읽고 싶을때도 사용하구요. (...)

    2. -인스톨 패키지-저는 아직 만들어 본 적이 없습니다 ㅋㅋㅋ
    -외부 모듈-몇몇 몰상식한 응용 프로그램에서 아직도 버그가 발생하고 있죠 -_- 어찌 된 일일까요. MS제 응용 프로그램에서도 발생하니..
    -64비트-제가 64비트 컴퓨터를 장만하고 있지만 x64 타깃으로 배포용 프로그램은 만든 적 없습니다. 테스트용으로만 간단하게 몇몇개만 돌려보고..

    3. 패스

    4. ... 관련 메뉴를.. 못찾겠음.. orz.. 꼭꼭 숨어라, 머리카락 보일라 -.-

    5. 저는 엔딩을 지금까지 한번 밖에 못 보았죠. 언젠가 승리로 꽉 채워야 할텐데 말이죠

    6. 저번에 펜타고 AI 인터페이스를 좀 만져서 AI vs AI 를 시켜보았는데 참 재밌더군요-_-; 랜덤요소도 조금 있어서 선이 이기기도 하고, 선이 지기도 하고 비기기도 하고.. 분명히 같은 AI 인데 말이죠.

    1. 사무엘 2010/12/30 00:56 # M/D Permalink

      오랜만에 댓글로 뵙네요. ^^

      1. MS도 내부에 개발부가 워낙 많기 때문에 동일 회사 프로그램끼리의 충돌이 당연히 존재합니다. 대표적인 예가 MSI와 AppLocale 사이의 충돌이었죠.
      2. 특별히 탐색기 쉘 확장처럼 64비트 DLL을 꼭 지원해야 하는 경우를 제외하고, 딱히 64비트 ‘EXE’만을 만들어야 할 일은 거의 없지요. 비주얼 스튜디오의 익스프레스 에디션이 괜히 x64 플랫폼을 기본 제공 안 하는 게 아닐 겁니다.

      4. 문서 창을 최대화했을 때, 파일 메뉴 왼쪽에 있는 그 ‘문서 창의 시스템 메뉴’입니다. ^^
      5. 이미 상당한 세벌 고수가 되어 계신 겁니다. 곧 엔딩을 여러 번 하는 날이 오겠죠~
      6. 음.. 그러고 보니 오목 AI도 다시 손보고 싶고..;; AI뿐만이 아니라 삼삼 판단, 렌주 룰 등 오목에도 신경쓸 것 많습니다. ^^
      옛날에는 PC 통신으로 자작 오목 게임 프로그램들이 여럿 나돌았는데 요즘은 그런 건 다 스마트폰 앱으로 만들어야 장사가 되겠죠?
      저는 스마트폰은 PC처럼 컴 내부의 모든 걸 내 마음대로 다루질 못하고, 타자를 빨리 못 치는 게 불편해서 영 신기하게 와닿지가 않더군요.

    2. 김기윤 2010/12/30 19:43 # M/D Permalink

      아.... 왜 안보이나 했더니 저장하지 않은 "글월1" 상태로 그 메뉴를 찾았으니 안보였지-_-;; 처음에 누른 메뉴가 맞았었습니다. 파일을 연 상태로 보니 제대로 보이네요.. (덜덜..

  3. 주의사신 2010/12/30 10:38 # M/D Reply Permalink

    1. 제가 MS 내부끼리 충돌하는 것을 본 가장 황당한 경우가 다음 글입니다.

    http://sainthkh.codex.kr/xe/?document_srl=2177&vid=prog

    DirectX 팀이 IE팀을 많이 싫어하지 않고서야 어떻게 이런 걸 만들 수 있는지부터가 의문인 희안한 일이었습니다. 도대체가 이런 버그는 어떻게 만드는 건지 싶었습니다.

    2. 세벌식은 언제나 배워 볼까요?

    1. 사무엘 2010/12/30 11:29 # M/D Permalink

      우와 저건 AppLocale 버그보다 더하네요. ㅋㅋ
      (게임 개발 하시는 듯? 주의사신 님의 주 개발 분야는 처음 봅니다. ^^)
      일부러 버그를 만들지 않고서야 있을 수 없는 현상이라.. 제 전공인 한글 IME 분야에서도 여럿 목격했죠.
      윈도우 7 콘솔에서의 세벌식 버그, 스타크래프트 2 초창기 버전 내지 오페라 9.x에서의 오동작..
      특히 스타2와 오페라 문제는 한글 IME를 일일이 가려가면서 동작해야만 저런 버그가 발생할 수가 있을 겁니다. 버그를 만들어 넣기가 더 힘들 텐데.. 도대체 프로그램을 어떻게 만들었는지 따지고 싶은 심정이더군요.
      세벌식은 지금 당장이라도 꼭 시작해 보세요.

    2. 주의사신 2010/12/30 15:47 # M/D Permalink

      1. 졸업 작품 차 게임을 만들어 보고 있습니다.

      동화들 스토리가 꼬여서, 주인공이 그 꼬인 스토리를 정상적으로 돌아가게 하기 위해 노력한다 뭐 그런 내용을 다룰 생각입니다.

      계속 게임계에 남을지 아니면 다른 곳에 가게 될 지는 아직 잘 모르겠습니다. 이것저것 만들어 보는 것 자체가 즐겁네요. 게임 쪽을 그만한다면, 아마 개발툴쪽이나 문서 검색 쪽을 하게 될 것 같습니다.

      2. 이것저것 해 보다 보면 해보고 싶은 것이 많아져서, 만들고 싶은 것 다 만들어 볼려면, 아마 노아 할아버지만큼(...^^;;) 살아야 할 것 같습니다.

  4. Spica 2011/01/28 22:29 # M/D Reply Permalink

    메일을 보내도 답장이 없던데.. 혹시 제가 제가 틀리게 보낸 건가요? 달리 남길 데가 없어서 가장 가까운 날개셋 카테고리의 최신 글에 댓글로 남겨 봐요.

    1. 사무엘 2011/01/29 09:26 # M/D Permalink

      음? 그러셨습니까?
      근래에 낯선 분에게서 메일이 온 적이 없었거든요.
      주소가 정확한지 확인해 주세요. (sebulsik 골뱅이 드림위즈.컴)
      저는 특히 <날개셋> 프로그램 관련 메일은 24시간 안으로 늘 반드시 답장을 드렸습니다.

    2. Spica 2011/01/31 22:53 # M/D Permalink

      다시 보내 봤습니다. 이번에도 안 가면 제가 주소 이해를 잘못 하고 있는 거겠군요..;

    3. 사무엘 2011/02/01 09:48 # M/D Permalink

      네, 이번에는 제대로 간 듯합니다. 어제 이미 답장을 드렸습니다.

Leave a comment

※ 아래의 세 버그는 해당 기능이 처음으로 추가된 5.31버전부터 지금까지 1년이 넘는 시간 동안 존재하다가 이제야 발견하고 고쳐졌습니다.

- "코드번호로 변환" 텍스트 필터의 설정을 고쳤는데 번호 표현 형태(format)가 사용자의 설정대로 제대로 적용되지 않던 버그
- <날개셋> 편집기의 "계산기"에서 '사용할 상수'를 바꿔 줬는데도 해당 분야에 속하는 상수가 제대로 인식되지 않던 버그

- 외부 모듈: <날개셋> 한글 입력기는 TSF A급 프로그램에서는 bksp 키를 눌렀을 때 앞 글자로 달라붙는 기능을 사용할 수 있습니다. 그런데 언제부턴가--한 5.3x 정도부터로 추정-- 완성된 글자를 처음으로 지울 때는 달라붙는 게 동작하지 않는 문제가 있더군요. 아마 입력 패드 같은 기능이 처음으로 추가되면서 들어간 side effect 같습니다. 이걸 발견하여 버그를 고쳤습니다.

※ 아래의 버그는 현재의 최신 버전인 5.65에만 있다가 고쳐졌습니다.

- <날개셋> 편집기를 중복 실행을 허용하지 않은 상태에서 또 중복 실행하면, 예전 인스턴스에서 새 문서도 같이 만들어져야 하는데 되지 않는 것
- <날개셋> 제어판의 '낱자 처리' 탭에서 낱자 결합 규칙의 내정값으로 "유니코드 5.2 옛한글"을 골랐는데도 유니코드 5.2에서 새로 추가된 초록색 옛한글 낱자들이 로딩되지 않던 문제
- 낱자 결합 규칙 리스트에서 비사이클 -> 사이클이 있는 결합 규칙을 대상으로 Ctrl+클릭을 했을 때 프로그램이 무한 루프에 빠지고 죽는 버그 (Ctrl+클릭 기능 자체가 5.65에서 새로 추가된 것임)

※ 다음은 사소한 개선 사항들입니다.

편집기 UI: 프로그램을 종료(Exit)할 때나 창을 한꺼번에 모두 닫을 때(Close All), 저장되지 않은 문서가 둘 이상 있으면 "저장할까요?" 대화상자와 더불어 "다음부터 이 질문을 하지 않음" 체크 상자가 뜹니다. 그래서 이걸 체크하면 여러 문서들을 한꺼번에 저장하거나 단번에 무시하고 버릴 수 있게 했습니다.
단, 이 UI는 윈도우 비스타 이상에서부터만 지원됩니다.

변환기 UI: 클립보드의 옛한글 텍스트 표현 방식을 자동으로 감지하는 버튼을 추가하고, 이에 덧붙여 원본 형식과 대상 형식을 switch하는 버튼을 추가했습니다. 아래아한글 200x와 2010, 그리고 MS 오피스 200x의 옛한글은 모두 표현 방식이 다릅니다. 변환기를 사용하면 각 방식을 손쉽게 교환할 수 있습니다.

편집기: 수천-수만 줄, 수 MB에 달하는 대용량 텍스트를 블록으로 잡아 복사할 때의 성능을 크게 개선했습니다. 예전에는 이때 잦은 메모리 재할당으로 인해 디스크 thrashing이 일어나면서 동작이 멈출 때도 있었지만, 이제는 전체 메모리를 한 번만 미리 잡아놓고 복사가 매우 신속하게 수행됩니다.

입력 패드와 외부 모듈도 편집기의 한글· 영문 비트맵 글꼴 설정을 따라갑니다.

정 재민 님이 추가로 제공해 주신 비트맵 글꼴을 적용하고, 임 정택 님이 제공해 주신 신세벌식 입력 설정을 적용했습니다. 그리고 예제로 제공되던 천지인 입력 방식을 복잡한 받침까지 완전한 일치하는 형태로 개선해 넣었습니다.

※ 다음은 알려진 문제입니다.

1. 현재 <날개셋> 한글 입력기 5.65와, <날개셋> 타자연습 3.21은 저의 부주의로 인해서 버전 충돌이 있습니다. 그래서 타자연습에서 입력기 외부 모듈이 동작하지 못합니다.
이 문제는 앞으로 입력기가 5.80으로 버전업되고 덩달아 타자연습도 버전업되었을 때, 이 둘을 모두 최신 버전으로 업데이트하면 해결될 예정입니다. 불편을 끼친 것에 양해를 구합니다.

2. <날개셋> 한글 입력기를 기본 IME로 지정한 후 gvim (7.3 기준)을 실행하여 A를 눌러 편집 모드로 들어가면, 영문이던 한영 상태가 느닷없이 한글로 바뀌는 현상이 있습니다. 참고로 TSF 모듈에서만(= 윈도우 비스타/7급) 나타납니다.

이것은... 운영체제의 동작 방식에 대한 정보 미비로 인해 해결이 어려울 것 같습니다. 그 프로그램에 맞게 동작을 고쳐 놓으면, 다른 프로그램에서 side effect가 생기는 식의 현상이기 때문입니다. MS 워드나 파워포인트가 처음 실행될 때 영문이 아닌 한글 모드로 시작하게 하는 옵션과 완전히 동일한 맥락이기 때문에, 제 프로그램이 gvim의 한글 모드 전환만 예외적으로 봐 줘야 할 명분이 없습니다.
물론 MS IME에는 그런 현상이 없죠. 그건 소스나 정확한 스펙이 공개되어 있지 않는 걔네들 방식대로만 가능한 것이기 때문에 제가 그 이상 더 정확한 동작을 구현할 수 없습니다.

3. 윈도우 7, 스타크 2에 이어 비주얼 스튜디오 2010에서도 한글 입력이 잘 안 되는 문제가 보고되어 있으며, 이 역시 해당 프로그램의 버그로 추정됩니다. MS IME에서도 동일하게 발생합니다. 갑자기 최신 소프트웨어들에서 IME 쪽으로 자질구레한 버그가 왜 이리 자꾸 발견되는지 모르겠습니다. 한번 짜고 나서는 고칠 일도 없고 버그가 들어갈 일도 없을 것 같은데.

Posted by 사무엘

2010/11/07 11:23 2010/11/07 11:23
Response
No Trackback , 8 Comments
RSS :
http://moogi.new21.org/tc/rss/response/406

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

Comments List

  1. 문태부 2010/11/08 19:38 # M/D Reply Permalink

    오오 감사합니다. 김용묵님 덕에 또 다른 재미거리가 생겨 났군요. 진심으로 감사드립니다.

    1. 사무엘 2010/11/08 22:46 # M/D Permalink

      제 프로그램으로 인해 컴퓨터 생활이 뭔가 더 풍성해지고 즐거워졌다면 참 반가운 소식입니다. ^^

  2. 사무엘 2010/11/22 23:29 # M/D Reply Permalink

    날개셋 한글 입력기 5.8과 날개셋 타자연습 3.22.
    예정대로 11월 22일 밤에 간신히 업데이트했습니다. 공개 마지막 순간까지도 버그가 발견된 게 있어서 일정이 좀 지연됐네요.
    입력기는 수많은 자잘한 변화, 코드 리팩터링 같은 건 리드미에다가 기록하지도 않았기 때문에 겉으로 드러난 변화 사항이 적습니다.
    타자연습은 세벌식 만물상 내용을 대거 업뎃하고 오타 교정, 깨진 링크 수정을 했습니다. 그리고 "대한민국 헌법 전문" 연습글을 "기본 연습글"에다 추가했습니다.

    블로그질 잉여질만 좀 덜 했으면 날개셋 버전업 스케줄이 1주일은 더 일러졌을지도? ㅋㅋㅋㅋ

    1. 삼각형 2010/11/26 18:48 # M/D Permalink

      설치해 보니 변화 사항을 거의 모르겠네요. 이제 날개셋도 기능추가보다는 유지보수 단계일지도.
      변한건 헌법 전문 정도인데. 헌법 전문이 3쪽;; 서문 뿐이 없네요.

    2. 사무엘 2010/11/26 23:19 # M/D Permalink

      추가할 기능이 이제 더 없어서 유지보수 단계로 접어든 건 절대 아니지요. 하하. 제가 여유가 없어서.. =_=
      입력기는 석사 과정으로 있는 동안 마지막으로 기력을 총동원해서 기능 추가 잔뜩 해서 6.0을 깔끔하게 만들 생각입니다.
      이번 5.8은 비록 가시적인 기능 추가는 거의 없지만 위와 같은 버그 fix가 많았고, 제가 느끼기로는 며칠 계속 더 써 봐도 완성도가 올라간 게 보입니다.

      타자연습은 이미 3.0대부터 유지보수 모드이긴 하지만, 그래도 지금까지 바뀐 것도 은근히 많죠.
      헌법 연습글에서 전문이라는 게 全文이 아니라 말 그대로 ‘서문’의 의미를 지니는 前文(preamble)입니다. 그래서 그것밖에 없는 게 맞습니다. 그런데 전문에다가 제 1장 총강 정도까지는 넣어도 괜찮겠어요. ^^
      헌법.. 색깔이나 이념면에서 걸릴 것 없고, 저작권 없고, 한글과 숫자뿐이고, 교육용으로도 괜찮고.. 나름 상당히 좋은 연습글이라는 생각이 들지 않나요?

    3. 삼각형 2010/11/27 20:07 # M/D Permalink

      前文 흡흡흡. 그런거였군요. 사실 저는 이미 헌법 전문(全文)을 추가해서 사용하고 있습니다. 앞쪽은 좋더군요. 3장 국회 쪽 가면 드디어 좀 법률같은 느낌이 들고 앞쪽은 인권 선언 정도?

  3. 겨울하늘 2010/11/29 16:50 # M/D Reply Permalink

    입력기와 타자연습 모두 오늘 당장 다운받아 업데이트했습니다.
    헌법전문을 보니 반갑네요.
    제안을 받아주셔서 감사합니다.^^

    1. 사무엘 2010/11/29 21:51 # M/D Permalink

      유용하게 사용하시기 바랍니다.
      헌법전문 제안은 정말 좋은 아이디어였습니다. ^^

Leave a comment

직업병

1.
레크리에이션 시간에 하는 OX 퀴즈 말이다. 이거 완전 퀵 정렬스럽다는 느낌이 들지 않는지?
퀴즈는 PIVOT값이다. 정말 알쏭달쏭해서 사람들이 O와 X로 반반씩 갈려야 좋은 문제이고,
너무 쉽거나 해서 사람들이 한데 쏠리면 그건 난감하다. 퀵 정렬도 완전 똑같다. ㅋㅋ

2.
수업 시간에 각 학생들에게 설문지를 돌리거나 과제물을 나눠 준다. 내게도 서류 뭉치가 왔는데, 이게 어디서 왔는지 모르겠고 내가 살펴본 뒤에 다음으로 이걸 어느 방향에다가 넘겨줘야 할지 잘 모를 때가 있다.
이건 C++로 치면 iterator이다. 서류 뭉치는 모든 학생들을 한 번씩 순회하는데, ++itor; 명령이 수행되려면 지금의 순회 위치로부터 다음 순회 위치를 알 수 있어야 한다. 트리 구조를 순회한다면, 각 노드마다 부모 노드 포인터도 갖추고 있어야 한다는 뜻.

3.
요즘 존재하는 수많은 웹사이트들 중, html 수작업으로 만들어진 것들은 로컬 환경으로 치면 기계어로 짠 네이티브 프로그램이고, 블로그 엔진 기반은 닷넷처럼 일종의 상부 계층 위에서 돌아가는 프로그램에다 비유할 수 있을 것 같다.
개인 사용자가 나모 같은 에디터로 홈페이지를 만들 일이 없어졌다는 건, 윈도우 환경에서 어셈블러 수작업으로 프로그램을 만들 일이 없어진 것과 비슷한 맥락이 아닌가 싶다.
하지만 Win32 API 같은 네이티브 계층 자체가 완전히 없어지는 날은 과연 올까?

4.
외솔관에 있는 대학원생 독서실에 있다가 위당관으로 수업을 들으러 간다. 두 건물의 뒤쪽엔 높은 언덕이 있기 때문에 3층과 4층이 뒷문으로 연결되어 있으며, 이 경로를 이용하면 건물 사이를 왕래할 때 번거롭게 1층까지 내려갔다가 다시 올라갈 필요가 없다.
바깥에 비해 상대적으로 어두운 건물 복도를 걸으면서 지하철 터널을 떠올리는 것은 어렵지 않다. 그러다가 잠시 밖으로 나가면, 지하철이 강을 건너거나 서울 지하철 8호선의 복정-산성 구간 같은 곳을 지나느라 잠시 지상으로 나온 것 같은 느낌이 든다.

5.
교회에서 성가대 연습을 한다. 노래를 부르는데 반주자가 악보를 넘기느라 잠시 피아노 반주가 중단되었다. 그래도 노래는 박자나 음정의 어긋남이 없이 계속 잘 이어진다.
이것은 절연 구간을 지나느라 전동차에 전원 공급이 잠시 중단되더라도 차가 관성으로 계속 달리는 것과 같은 맥락으로 풀이할 수 있다. 아울러, 바닷물과 민물을 넘나드는 연어는 교류-직류 겸용 전동차의 예표이다.
일상생활 속에서 철도 패턴을 찾기는 어려운 일이 아니다.

6.
대학 학부까지만 학업을 마치고 취업을 한 건, 지금 생각해 보니 학업이라는 지하철이 서울 시계까지만 건설된 뒤 노선이 끊어졌던 듯한 느낌이다. 학부를 졸업한 지 5년이 지나서야 대학원에 들어가니, 그 선로를 이어서 장거리 광역전철을 건설하는 것 같다.

7.
<날개셋> 한글 입력기 5.65를 공개한 후, 소스를 대대적으로 뒤집어엎었다.
null-terminate 스트링의 write 버퍼를 받는 모든 함수에는 버퍼의 크기에 대한 정보를 추가하고, sprintf 같은 함수 호출도 버퍼 오버런을 일으키지 않게 다 손질했다.
파일을 읽고 쓰는 과정에서 에러 처리를 더욱 강화하고, 범용적인 dll 모듈은 thread-safe하도록 고쳤다.
좀 비효율적이고 불합리하게 만들어져 있던 라이브러리 API를 뜯어고쳤다.

그래서 다음 버전으로 잠정 계획 중인 <날개셋> 한글 입력기 5.8은 5.5 시절부터 비교적 잘 유지되어 왔던 API 하위 호환성이 모두 깨질 예정이다.
타자연습도 덩달아 버전업된다. 입력기에 적용된 프로그래밍 테크닉이 그대로 적용되고, 그리고 연습글을 좀 정리할 생각이다.

6만 줄에 달하는 <날개셋> 한글 입력기 소스 코드를 들여다보노라면 정말 나만의 세계, 나만의 건축물, 나만의 철도 노선에 들어온 느낌이다. 의존도라고는 Win32 API와 몇몇 Ansi C 함수밖에 없으며, 나머지 코드들은 100% 자체 제작이다. 다른 프레임워크나 오픈소스 작품 같은 거 쓴 것이 전혀 없다.

누구에게 돈이나 시간 면에서 단 한 치도 얽매인 게 없이, 전적으로 개인 취미 생활로 개발하는 것이다 보니,
단순히 기능만 되게 하는 게 아니라 소스 코드의 질에도 굉장히 신경을 쓴다.
비록 한 줄에 100칼럼을 꽉꽉 채우느라 겉보기로는 코드가 좀 지저분해 보여도, 구조는 의외로 깔끔한 편. ㅋㅋㅋㅋ

코드에 무슨 공통된 패턴이 반복되는 게 발견되면 함수로 따로 떼낸다거나, 모듈 간의 공통된 기능을 한 기반 클래스로 빼낸다거나.. 이런 식으로 "리팩터링"을 수시로 진행한다는 뜻이다.
이런 거 공사 하나 잘 해서 추상적인 클래스가 하나 탄생하고 상속 계층이 한 단계 올라간다거나 하면,
어려운 버그를 잡은 것만큼이나 기쁘다.

Posted by 사무엘

2010/10/17 18:08 2010/10/17 18:08
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/393

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

Comments List

  1. 김재주 2010/10/17 21:08 # M/D Reply Permalink

    그런데 그 리팩터링 때문에 새로운 버그가 생겨나면 수명이 줄어드는 걸 느끼게 됩니다.

    1. 사무엘 2010/10/17 23:08 # M/D Permalink

      리팩터링이 side effect를 남긴다면... 음 좀 불행한 사태가 발생하겠죠. ㅋ

  2. 삼각형 2010/10/17 22:33 # M/D Reply Permalink

    그러고 보니 전 그런 식의 직업병은 딱히 없네요. 해봐야 숫자 샐 때 0부터 샌다거나 그 정도. 직업이 아니라서 그런가(;;;)

    날개셋 한글 입력기가 OS에 종속적이기는 해도 그런 식이라면 다른 OS나 플랫폼으로의 이식도 크게 문제 없겠군요. 어짜피 입력기의 처리는 비슷할 테니까요.

    빠른 64bit 지원도 시스템에 종속적인 저수준의 함수를 쓰지 않으니 가능하자 않았나 합니다. 반면 세나루 64bit 지원은 되기는 할지 의문.

    1. 사무엘 2010/10/17 23:08 # M/D Permalink

      이식성을 고려한다면 운영체제 API 직통이 아니라,
      qt 같은 크로스 플랫폼 GUI 툴킷 기반으로 프로그램을 만드는 게 더 유리하지요. 그 대신 이 경우 프로그램 덩치는 심하게 더 커지게 됩니다. ㅎㅎ
      외부 모듈 같은 프로그램은 이래저래 해당 운영체제의 API 직통으로 가볍고 효율적으로 만들어야 합니다. 그 점에서는 새나루도 마찬가지이기 때문에, 플랫폼을 바꿔서 빌드만 해 주면 64비트 지원은 아무 문제 없을 거예요.
      직업병은 삼각형 님도 대학 가서 전공 과목 들어 보시면 생길 겁니다. ^^

Leave a comment
« Previous : 1 : ... 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

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

Site Stats

Total hits:
1220881
Today:
66
Yesterday:
474