다솜 입력기 테스트 버전을 준비하고 있습니다.

자유로운 이야기, 구인구직, 이벤트, 나눔

Moderators: Dry8r3aD, drake_kr

Post Reply
hodong
Posts: 200
Joined: 2014/12/23 Tue 3:29 am
Contact:

다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by hodong » 2015/07/04 Sat 4:39 pm

다솜 입력기 개발 진행 상태입니다.
현재 굵직한 버그를 잡았고 곧 테스트 버전을 준비하고 있습니다.

다음은 http://www.cogno.org/node/134 와 동일한 글입니다.

안녕하세요...
다솜 입력기를 만들기 시작한지가 벌써 5개월 정도 지났습니다.
최근 입력기 서버 및 im 클라이언트에 있던 굵직한 버그(race condition)를 잡았습니다.
그걸 잡고 나니 focus out / focus in 이 싱크가 안 맞더군요.
자세히 살펴보니...
창이 2개가 있고, 창1에 포커스가 있을 때, 창2번을 찍으면
창1번은 focus out 신호를 발생시키고 focus out 신호에 대한 처리(reset, commit 등)가 완료되지 않아도
창2번은 바로 focus in 신호를 발생시킵니다.
아마도 윈도 관리자가 창관리를 thread로 처리할 것으로 추정됩니다. 그래서 이러한 현상이 나타나는 것 같습니다.
그래서 focus in / out 싱크 맞추기 위해 아래처럼 작성하였습니다.
[code:3ereq4pk]
case DASOM_MESSAGE_FOCUS_OUT:
pending = TRUE;
dasom_context_focus_out (context);
dasom_send_message (socket, DASOM_MESSAGE_FOCUS_OUT_REPLY, NULL, NULL);
pending = FALSE;
break;
...
if (pending)
{
ctx = g_main_context_new ();
GSource *source = g_socket_create_source (context->socket, G_IO_IN, NULL);
g_source_set_can_recurse (source, TRUE);
g_source_set_callback (source, (GSourceFunc) on_incoming_message_dasom, context, NULL);
g_source_attach (source, ctx);
}

do {
g_main_context_iteration (ctx, TRUE);
} while (context->reply && (context->reply->type != type));
[/code:3ereq4pk]
이것은 완벽한 해결책은 아닙니다. 왜냐하면 서버 엔진의 focus_out 함수에서 signal 을 발생시킨 후 이를 처리하는 클라이언트의 callback에서 아래처럼 비정상적으로 호출할 경우 문제가 발생할 수 있기 때문입니다.
또한, engine의 caller (target context)가 변경이 되기 때문입니다.
[code:3ereq4pk]
void client_signal_callback (im1)
{
dasom_im_some_api (im1); /* fd: 38 이런 건 문제가 되지 않습니다. */
dasom_im_some_api (im2); /* fd: 39 이렇게 im1과는 다른 im2를 호출하는 경우 문제가 됩니다 */
}
[/code:3ereq4pk]
위의 같은 코드를 허용하려면 현재 모듈별로 engine 인스턴스가 1개만 생성되는 싱글톤 방식인데, 클라이언트 context 당 1개씩 생성하도록 변경하면 해결이 되지만, 이 경우 클라이언트/서버 구조로 만들 필요도 없어지고 그냥 일반적인 라이브러리 호출로 작성하고 엔진이 변경될 때 입력기 상태 알림 agent 서버에 한/영/중/일 엔진 상태를 알려주도록 만들면 되겠죠.
그런데 왜 서버 구조로 만들었냐면, 응용 프로그램이 im_context를 여러개를 생성하기 때문에 응용 프로그램 당 im_context를 5개씩 생성한다고 가정하면, 응용 프로그램을 5개(웹 브라우저, 편집기, 파일 관리자, 음악 플레이어, 터미널) 정도 실행시키면 25개 정도의 im_context가 생성되는데 한국어의 경우 별로 부담이 되지는 않지만, 중국어, 일본어의 경우 로딩되는 사전 파일의 크기가 커서 시스템에 큰 부담이 되기 때문에, 서버측의 엔진 인스턴스를 엔진 모듈당 1개만 생성(싱글톤 방식)하도록 설계하였습니다.
그래서 엔진 인스턴스 1개로 여러 프로그램이 사용을 하게 됩니다. 예를 들어 한국어의 경우, 응응 프로그램을 5개를 실행시키더라도 서버측 엔진은 1개만 생성됩니다. 기존의 라이브러리 방식이라면 약 25개가 생성이 되겠죠.
그리고 우리가 입력을 할 때 창이 5개가 있다면 키보드 5개로 5개의 창에 동시 입력을 하는 것이 아니라, 5개의 키보드가 있다고 하더라고 키보드 1개로 촛점이 잡힌 1개의 창에 입력을 합니다. 그래서 다솜 입력기에 스레드를 사용하지 않았습니다. 스레드를 사용해봤자 얻을 수 있는 이득이 없습니다.
저 혼자 알파 테스트를 좀더 거친 후에, 반드시 필요한 최소한의 기능을 갖춘 후, 보다 폭넓은 베타 테스트를 하기 위해 테스트 버전을 조만간 만들 계획입니다.

User avatar
봄맘
Posts: 245
Joined: 2009/03/01 Sun 7:05 am
Location: 제주 서귀포 성산읍

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by 봄맘 » 2015/07/04 Sat 10:38 pm

기대를 가지고 기다리고 있습니다.
힘내십시오.
"바로지금"이 가장 소중한 때입니다.

janghe11
Posts: 173
Joined: 2010/06/02 Wed 11:49 am

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by janghe11 » 2015/07/05 Sun 12:16 pm

화이팅!!
혹시나 나중에 필요하신 부분이 있으시면 말씀해 주세요!

hodong
Posts: 200
Joined: 2014/12/23 Tue 3:29 am
Contact:

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by hodong » 2015/07/06 Mon 5:10 am

테스트 버전 준비한다는 글 올리고서 열심히 테스트하고 있는데
중대 버그가 해결이 안 된 상태인 것을 재발견...ㅠㅠ
버그 잡다가 날 샜네요. 다행히 해결했습니다.

[quote="janghe11":52ychz6r]화이팅!!
혹시나 나중에 필요하신 부분이 있으시면 말씀해 주세요![/quote:52ychz6r]

네 알겠습니다.

madang
Posts: 17
Joined: 2010/06/10 Thu 11:47 pm

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by madang » 2015/07/13 Mon 12:56 am

열심히 응원드립니다.

User avatar
IceCube
Posts: 412
Joined: 2008/12/01 Mon 2:35 pm

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by IceCube » 2015/07/13 Mon 2:53 pm

무더운 날 수고가 많으십니다.
응원합니다.
學而時挿之不亦悅乎
(학이시삽지불역열호)
배우고 때로 삽질하니 즐겁지 아니한가.

hodong
Posts: 200
Joined: 2014/12/23 Tue 3:29 am
Contact:

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by hodong » 2015/07/21 Tue 11:16 pm

제가 알고 있는 버그는 모두 잡은 것 같습니다.
이제 드디어 테스트 가능한 상태가 되었습니다.

자질구레한 작업들만 남았습니다.
예를 들자면,
.deb 제작용 debian 파일, 설정 창, 한자 창 더 이쁘게 보이기, 조합 중인 상태 색깔, 예외 처리 방법 등.
엔진 개발을 위한 api 다듬기, agent / candidate interface 설계 등.
아.. 나중에 시간 날 때 qt 용 모듈 및 중국어, 일본어 엔진들도 만들어야 하는군요.

초보자 분들은 따라하시면 스트레스 좀 받으실겁니다.
설치는
./autogen.sh
에러 발생시 필요한 패키지 설치.
make
sudo make install
sudo ldconfig
im-config 하면 창이 뜰텐데 Dasom 선택
윈도 logout
다시 윈도 login

프로젝트 주소
https://github.com/cogniti/dasom

버그, 기능 개선, 희망 사항 등은 아래 주소에 글을 남겨주세요.
https://github.com/cogniti/dasom/issues

parkmino
Posts: 137
Joined: 2010/03/12 Fri 11:10 am
Location: 경북 구미

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by parkmino » 2015/07/22 Wed 9:16 am

autogen.sh에서 아래와 같은 메시지가 나오고 make가 진행이 안되면 어떻게 해야 하나요?

[code:3ffkv1tx]autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
autoreconf: configure.ac: tracing
autoreconf: configure.ac: creating directory build-aux
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `build-aux'.
libtoolize: copying file `build-aux/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:13: installing 'build-aux/ar-lib'
configure.ac:13: installing 'build-aux/compile'
configure.ac:21: installing 'build-aux/config.guess'
configure.ac:21: installing 'build-aux/config.sub'
configure.ac:9: installing 'build-aux/install-sh'
configure.ac:9: installing 'build-aux/missing'
Makefile.am: installing './INSTALL'
agents/standalone/Makefile.am: installing 'build-aux/depcomp'
libdasom/Makefile.am:90: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
autoreconf: automake failed with exit status: 1[/code:3ffkv1tx]
Last edited by parkmino on 2015/07/22 Wed 11:15 am, edited 1 time in total.

hodong
Posts: 200
Joined: 2014/12/23 Tue 3:29 am
Contact:

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by hodong » 2015/07/22 Wed 10:34 am

gobject-introspection 를 설치하세요

parkmino
Posts: 137
Joined: 2010/03/12 Fri 11:10 am
Location: 경북 구미

Re: 다솜 입력기 테스트 버전을 준비하고 있습니다.

Post by parkmino » 2015/07/22 Wed 10:50 am

이건 또 무슨 패키지를 설치해야 하나요?

[code:9l2rxf0l]configure: error: Package requirements (gtk+-3.0) were not met:

No package 'gtk+-3.0' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.[/code:9l2rxf0l]
Last edited by parkmino on 2015/07/22 Wed 11:15 am, edited 1 time in total.

Post Reply