2012년 12월 29일 토요일

영재원 실습

3D 관련쪽으로 들어가려 했는데 3DS MAX 2009를 가르쳐주네요;; 뭐 나쁘진 않으니

지금 영재원이라서 많이 못 쓰니 이만 줄이겠습니다.

2012년 12월 23일 일요일

한글 입력 이론 (1)

제가 이번에 한글 변환기(예를 들면 dkssud안녕으로 바꿔주는 기계)에 해당하는 함수를 만들 필요성을 느껴서 만들기로 했는데,
예제가 전부 말이 아니고 어떤 건 유료인 것까지 있어서 제가 그냥 강좌를 쓰기로 했습니다. (한글 오토마타라고 하나요?)
초기에 만든 것(주의! 예전 블로그인 네이버로 갑니다.)은 haansoft 뿐만 아니라 모든 자음분할, 모음분할자에 문제가 있어서 새로 만든 겁니다.

예전 알고리즘은 뭐였냐면 모든 완성자는 초성이 반드시 한 번을 입력한다.의 원리를 이용한 겁니다.
예를 들어 dkssud이 있으면, 뒤에서부터 읽어가며, 자음을 봅니다.
(편의상 자음을 파란색, 모음을 빨간색으로 표시하겠습니다.)
dkssud에서 두 번째부터 첫 자음을 초성으로 처리합니다. (초성은 검은색)
dkssud
이제 분리가 되었죠. 이게 바꾸는 원리였는데
원리를 보니 왜 자음분할, 모음분할자에 문제가 있는지 알겠죠.
그래서 이번 알고리즘은 일정한 문자를 보고 입력원리를 그대로 적용합니다!

자음분할자로 해 보겠습니다. 으-음... 예제는
rsefkiju로 해 보겠습니다. 끊는 위치를 찾는 겁니다.
끊는 위치만 찾으면 그 다음부터는 쉬우니까요.
1) 먼저 자음 = 0, 모음 = 1을 넣습니다.
특수문자가 보이면 바로 끊습니다.
r
s
e
f
k
i
j
u
0
0
0
0
1
1
1
1
어이구 표 한번 그리기 진짜 힘드네
2) 이제부터
초성 = 0
앞에 초성이 없는 중성 = 1
합성 가능한 종성 = 2
초성이 있는 중성 = 3
포화상태의 종성 = 4
이라고 합시다.
다음 진리표에 따라 값을 채웁니다.
전 값이 없으면 그대로 둡니다.
전 값
현 값
행동 요령(값)
0
0
그 곳에서 끊음
0
1
3
1
0
그 곳에서 끊음
1
1
합쳐지지 않으면 끊음
2
0
합쳐지면 4 아니면 끊음
2
1
그 전 곳에서 끊음
3
0
2
3
1
합쳐지면 3 아니면 끊음
4
0
그 곳에서 끊음
4
1
그 전 곳에서 끊음
이렇게 하면 되겠죠. 옛한글이라면 입력기가 어떻게 되었을까 생각도 드네요.
이 예제는 채우다 중간에서 끊기네요. r과 s 사이에서 끊기네요.

조금 더 좋은 예제로 해봅시다.
qnpfrz로 해 봅시다.
q
n
p
f
r
z
0
1
1
0
0
0
이렇게 됩니다. 그 다음에 시도해 보면, (시도 중인 건 빨간색으로 표시합니다)
q
n
p
f
r
z
0
3
1
0
0
0
첫 번째 n입니다. 0-1이므로 3으로 값을 바꿉니다.
q
n
p
f
r
z
0
3
3
0
0
0
두 번째 p인데, 3-1 조합에서 n과 p는 합쳐지므로(ㅞ로 합쳐짐) 3으로 바꿉니다.
q
n
p
f
r
z
0
3
3
2
0
0
세 번째 문자 조합에서 3-0이므로 2로 바뀝니다.
q
n
p
f
r
z
0
3
3
2
4
0
네 번째 문자 조합에서, 2-0 조합인데 합쳐지므로(ㄺ) 값을 4로 바꿉니다.
q
n
p
f
r
z
0
3
3
2
4
0
다섯 번째의 문자 조합 4-0은 그 곳에서 끊습니다. 즉 'qnpfr' 'z'로 끊기는 겁니다.
이 문자열을 변환하여 합치는 알고리즘은 유니코드를 조금만 해 보셨다면 금방 알 수 있습니다.
바꾸면 '뷁' 'ㅋ'입니다.
즉 주어진 문자열은 '뷁ㅋ'가 되는 것입니다.

(이번 강의는 잘 썼나요?)

다음에는 이것을 구현하는 코드를 같이 보도록 하겠습니다. 이 알고리즘을 구현하기 위해서는 버퍼라는 게 필요한데, 그것도 설명하도록 하겠습니다.

2012년 12월 16일 일요일

블로그

하기 정말 힘든 것 같음 ;;

기말 패망했다는 건 여기 안 적을 거임

2012년 10월 24일 수요일

C++에서 Windows 시스템 제어하기 (1)

번역 귀찮아 각주 안 달래

여기서는 처음 말하는 것 같은데, 저는 C++를 사용하는 도스 프로그래머입니다.
  • WinMain이 너무 어려워요.
  • 여기서는 도스를 이용하여 키 후킹을 하는 방법을 알려드리도록 하겠습니다.

    저도 얼마 전에 안 함수인데, GetAsyncKeyState(int vKey) 함수입니다.
    인자로 vKey 변수를 받는데, int형이군요. 하지만 윗 3바이트는 버리고 아래 1바이트만 보니 알 게 뭐야.
    vKey는 Virtual Keycode의 준말로, 가상 키코드라는 뜻입니다.
    저건 도스창이 포커스가 되어 있지 않을 때도 잘 돌아가는 함수인데요,
    키보드에 직접 접근?하여 상태를 알아내기 때문에 그렇습니다.

    가상 키 코드표는 MSDN 같은 곳에서 전부(0에서 255까지) 구할 수 있지만 우리가 그 코드를 다 쓸 것도 아니고, 귀찮으므로 하나 만들어 봅시다.
    코드는 다음과 같습니다.
    #include <iostream>
    #include <windows.h>
    using namespace std;


    void main() {
        int i;
        while (1) {
            for (i=0; i<256; i++) {
                if (GetAsyncKeyState(i) & 0x0001) {
                    cout << i << endl;
                }
            }
        }
    }
    이것을 컴파일하고 실행하면 아무 키가 눌릴 때마다 어떤 수를 출력합니다.
    사실상 마우스도 되는데, 1번이 마우스 왼쪽 키, 2번이 마우스 오른쪽 키기 때문입니다.

    이것으로 우리는 매크로를 만들 수 있습니다!

    저는 강좌를 잘 쓰는 편이 아니기 때문에, 알아보실 분들만 알아보시고 유용하게 쓰시리라 믿습니다.

    2012년 10월 16일 화요일

    그런데 정말 대단하네요.

    페이지뷰가 55명이군요. 근데 미국 사용자가 1/3을 차지하네요.
    page was viewed by 55 people. By the way, one third of them are American.
    영어 공부도 할 겸 영어로 각주 달아야겠습니다.
    I'll put references studying English at the same time.

    제가 네이버에서는 느끼지 못했던 많은 것들을 구글과 Blogger에서 느끼고 있습니다.
    I'm feeling many things in Google and Blogger which I can't feel in naver?.
    별 글을 쓰지 않았는데도, 위에서 말한 것처럼 55명의 사용자가 들어왔습니다.
    I wrote that poor post, but 55 people came to my blog like what I said.
    역시 네이버에서 구글로 옮기길 잘했다는 생각이 들었습니다.
    I thought It was fine to move from naver to Google.

    지금은 한국 시간으로 12시 반인데 뭘 하는 거지.
    Now it's half past midnight in Korean time, what am I doing.

    한국어에서 영어로의 번역은 틀릴 수 있습니다. 문법적으로 틀린 부분이 있으면 댓글을 써 주세요.
    The translation from Korean to English may NOT be correct. Please note if you find the part grammatically incorrect.

    2012년 10월 14일 일요일

    네이버 블로그에서 이 블로그로 옮깁니다.

    현재까지 제가 네이버에서 블로그를 하고 있었는데요(플래시신),
    내리와 인성의 IT 이야기: 웹툰?(http://minix.tistory.com/218)을 우연히 보고
    이곳으로 이전하게 되었습니다.

    제가 네이버 블로그에서 상당히 많은 좋은? 글들을 썼지만 뜨지 못한 이유에 대해서도
    생각보다 상세히 기술되어 있었습니다.?

    이제 이 곳에만 글을 올리겠습니다. 네이버 블로그(http://kipa00.blog.me)는 초기화시키려다 좋은 자료들 때문에 그러지는 못하겠고 이 블로그로 잇겠습니다. 아마 네이버 블로그의 마지막 글은 Blogger로 블로그를 이전하게 되었습니다.가 될 것입니다.

    친구(http://esukmean.blogspot.com 그의 블로그입니다.)의 도움으로 만 13세에 구글 계정을 얻게 되었습니다. 막상 구글 계정을 얻고 나니 할 것이 없었습니다. 하지만 위 웹툰을 보니 구글만큼 좋은 사이트가 없다는 것을 알게 되었습니다.

    이곳에는 프로그래밍과 일상?, 관심사(큐브, 주변기기, 게임, etc...) 등등을 올릴 것입니다.
    마지막으로 말하자면, 네이버를 쓰지 맙시다. 유튜브에 여러 번 접속하는 것도 많은 도움이 됩니다.? 좀 잔인하단 생각이 들지만, 공정하지 못한 경쟁을 이끄는 사람들은 없어져야 합니다.

    주석 틀?CC BY-NC-SA에 의거합니다. 이것은 앞으로 제가 쓰는 모든 글에 적용됩니다.
    혹시 사용법을 모르신다면, 물음표에 마우스를 올려보세요. 스마트폰이신 분들은, 죄송합니다.