2009년 8월 23일 일요일

[게임] Defend the Bunker 불평

일단, 링크부터.

도무지 질 것 같지가 않다.

콩그리에서 대충 훑어보다가, 내가 디펜스 류를 좋아하는 고로 적당히 끌리는 게임을 눌렀다. 중간에 과감하게 관뒀음에도 불구하고 high score는 현재 시점에서 10점(레벨 10)으로 1등이다 -_-v


여하간 좋은 점을 굳이 꼽자면

1. 쉽다. 스크린 샷 밑에서도 밝힌대로, 좀 집중하고 플레이하면 도무지 질 것 같지가 않다.

2. 사격은 물론이고 시야까지 조정해야 한다. 레이더 사면 시야조정은 땡이지만.

3. 이건 장점이자 단점인데, 사격이 어려우면서도 짜증이 날 만큼 어렵지 않다.



단점도 꼽아야겠지?

1. 졸라 쉽다. 도무지 질 것 같지가 않다. 결국 10탄에서 새롭게 탱크까지 적으로 등장했지만 내 사격 여섯발 정도에 부서지더라.

2. 비교적 정밀 사격으로 요구한다. 대량으로 쏴야 하는데 콩알만한 적을 하나하나 클릭해야 한다는 건 생각보다 쉽지 않다. 결국 피탄 30여발 장전하고 주르륵 뿌리는 식으로 사격의 어려움을 해결하긴 했지만.

3. 2번과 관련있는 부분인데, 인간형 적이 너무 작아서 마우스 커서에 가려진다. 플래시로 마우스 커서를 없애면 안 되나; 사격 표시 아이콘까지 만들어 뒀으면서.

4. 지루하다. 한 스테이지가 너무 길다. 조작이 편하고 쉽고를 떠나서 게임이 지루해진다. 적 등장 패턴도 (10탄까지는) 세 종류 정도밖에 안 돼서 지루함이 두 배. 거기에 콩알만한 놈 클릭질을 열심히 해야하니 지루하다.

5. 클릭 노가다가 너무 심하다.




다음 점은 개선했으면 좋겠다.

1. 차라리 난이도가 좀 있었으면 좋겠다. 체력 회복 가격이 지금의 50배 정도만 되더라도 약간 난이도가 높아지지 않을까. 지금은 1포인트에 10원... 만피 채우는데 1000원이면 충분하다. 반면에 내가 총알 갯수 1개 늘리는 데에는 3000원 정도가 들었다. 갭이 좀 심하지?

2. 마우스 커서좀 가렸으면 좋겠다. 얘가 적을 가려준다.

3. 사격할 때 판정범위가 좀 더 늘어났으면 좋겠다. 지금은 쫒아가서 제대로 클릭해야 하니 귀찮다. 적이 조금씩 나오면 물론 정밀사격으로 원샷 원킬 할 수 있는데 애들이 많아지면 서두르게 되니 잘 맞지도 않는다.(그럼에도 난이도는 쉽다. 이런...)

4. 레이더 구매 후에 시야 안에 들어온는 적도 레이더로 표시해줬으면 좋겠다. 어째 레이더로 보는게 시야로 보는 것 보다 더 뚜렷한데, 시야로 보이는 부분은 레이더 표시가 안 된다.

5. 한 스테이지 길이를 대폭 줄였으면 좋겠다. 지금은 너무 길어서 지루해지고, 거기에 돈도 너무 많이 나와서 난이도는 쉬워진다. 게다가 이렇게 긴 스테이지를 진행하더라도, 피는 10%도 채 안 까인다. 물론 실수를 연발했을 때 얘기이다.



뱀발.
이거 뱃지 없다. 나 콩그리 뱃지때문에 하는 거 아니라니까.

dos 공격 당했다

$ perl -e 'while(<>){$r{$1}++ if /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/g;} print "$_\t\t$r{$_}\n" foreach sort{$r{$a} <=> $r{$b}} keys %r' /var/log/apache2/access.log.1
125.224.194.223 12309
125.224.203.135 58368
125.224.197.1 89211
67.215.241.234 277025
205.209.142.61 627549

아파치 로그중에서 용량이 짐승같은 게 하나 있어서 아이피를 대충 긁어봤는데,

야 저건 심하잖아……


대충 16일부터 23일 19시까지 아피치 접속 로그. 205 어쩌구 하는 년은 차단 시키긴 했는데(...)

[게임] This is the Only Level

[[일단, 링크부터]] 이제까지 패턴상 콩그리 게임이다.


민지와쪄요 뿌우 'ㅅ'

이 게임의 주인공인 코끼리이다. 글씨는 그냥 넣어봤음.(…….)

게임이 꽤 괜찮다. 퍼즐 푸는 느낌이랄까 미궁 푸는 느낌이랄까,
굳이 따지자면 카로시Karosi 비슷한 느낌?
이런 게임은 신선도가 생명이라고 생각한다. 그리고 이건 신선하다. 좋잖아?

혹시나 막힐 사람들을 위한 공략(?) 및 팁도 써 두긴 할까.
미리니름 방지용 감추기. 누르면 열림


설마 플레이 할 거면서 팁부터 보는 사람은 없겠지.

Tip> 판들 모양은 죄다 똑같다. 익숙해지도록 하자.
그리고 막힌다 싶으면 스테이지 이름을 유심히 보자.



Stage 해결법

1. 단추 누르고 탈출하자. 이동 키는 기본적으로 화살표 키이다.

2. 단추 누르고 탈출하자. 좌, 우 키가 반대이다. 이거 꼭 써야하나.

3. 그냥 탈출하자. 단추 누르면 문이 닫힌다.

4. 키보드 말고, 마우스로 원하는 공간 클릭하고 살짝 드래그 하자.
코끼리가 마우스에 달라 붙는다.

5. 이 스테이지 중력이 약하다고 보면 된다. 그냥 단추 누르고 탈출하자. 점프가 상당히 잘 되고 떨어지는 속도가 느리다. 점프 중간에 점프키를 떼면 위로 상승을 멈추니 가시에 안 찔리도록 하자.

6. 마냥 통통 튀기는데, 단추 있는 곳의 가시는 절대 안 찔리니까 과감하게 단추를 누르자. 대신 두번째로 높은 곳의 가시에는 닿으니까 거긴 조심.

7. 가시에 닿으면 스프링처럼 위로 튄다. 점프 대신 가시를 이용해서 버튼 누르고 튀자. 빠른 속도로 가시에 닿았으면, 빠른 속도로 위로 올라간다.

8. 처음 코끼리가 밟고 있는 색의 발판 말고 다른 곳을 밟으면 죽는다. 조심해서 단추 누르고 탈출하자. 색이 다른 칸이라도 머리로 받는 건 상관 없으니 탈출구 앞에서 고민하지 말고 그냥 뛰자.

9. 마우스를 좌, 우로 움직이면 코끼리가 움직인다. 왼쪽 클릭은 점프이다. 이번 판은 얘기 좀 예민하니까 마우스를 살살 다뤄주자. 마찬가지로 단추 누르고 탈출하면 된다.

10. 코끼리는 자꾸 왼쪽으로 밀려난다. 점프를 하면 밀려나는 정도가 좀 약해지니, 그걸 이용해서 단추 누르고 탈출하자. 그런데 강풍이면 점프했을 때 더 잘 밀려나야 하는 거 아냐?

11. 왼쪽 버튼이 안 먹힌다. 뒤로 돌아갈 수 없으니 평소대로 단추 누르고 탈출하자.

12. 이번엔 점프 키가 안 먹힌다. 하지만 단추를 누를 필요가 없으니 오른쪽 방향키를 계속 누르고 있으면 알아서 탈출한다.

13. 키보드 왼쪽, 오른쪽을 번갈아가며 눌러준다. 연타가 빠를수록 빨리 탈출한다. 점프 그런 거 필요 없고 알아서 깨준다.

14. 딱 한번만 점프 가능하다. 오른쪽 발판으로 가서 점프하든, 아니면 처음 절벽에서 점프하든 단추 있는 바닥으로 갈 수 있으니 한 번만 뛰도록 하자. 한 번 뛰었는데 단추를 못 눌렀다면 가시에 찔리거나 Panic 버튼을 눌러주자. 여하간 단추 누르고 탈출하면 된다.

15. 한 번 코끼리를 죽이면 된다. 가시에 찔리거나 Panic 버튼을 눌러주자. 그런 후 탈출하면 된다.

16. 계속 제자리 점프 하면서 단추를 연타하자. 딘추를 다섯 번 누르면 문이 열린다.

17. Stage 1과 같다. 그냥 버튼 누르고 탈출하면 된다. 특별히 뭐가 다른지 모르겠다.

18. 바닥을 밟으면 무너진다. 탈출구 천장쪽 칸 위에 올라가서 천자을 무너트린 후 탈출하면 된다.

19. 그냥 시간이 느리게 흐른다. 답답한 스테이지이다. 방향키를 오래 눌러야 그럭저럭 원하는대로 움직인다. 여하간 단추 누른 후 탈출하자.

20. 여태까지 스테이지 모양이랑 같다. 다만 안 보일 뿐이다. 단추 있는 곳 가서 누른 뒤 탈출하자.

21. 처음에 코끼리가 밟고 있는 색의 칸은 중력이 반대로, 다른 색 칸은 중력이 제대로 작용한다. 단추 누르고 깨면 되는데 좀 컨트롤이 골때리던 것 같다.

22. 단추 오른쪽 공간에 보이지 않는 벽이 있다. 그냥 오른쪽으로 가면 코끼리가 죽으니, 버튼 밟은 후 점프해서 위쪽 발판을 통해 탈출하도록 하자.

23. 키보드 중앙의 T, F, H를 이용해 코끼리를 움직이자. T:↑ F:← H:→ 단추 누르고 탈출하면 된다.

24. Caps Lock을 누르면 문이 열린다. 단추는 훼이크. 캡스락 꾹 눌러서 문을 통과한 후 탈출하면 된다. 근데 탈출구에서 닫힌 문쪽으로 가면 문 밖으로 튕겨나간다. 치사한듯. 문 통과했으면 뒤돌아보지 말고 탈출하자.

25. 단추 그런 거 상관 없고, 문이 랜덤하게 열린다. 쭉 오른쪽 버튼만 누르고 있으면 언젠가는 탈출할 수 있다.

26. 문은 훼이크이다. 그냥 통과할 수 있으니 오른쪽 버튼만 쭉 누르고 있으면 탈출한다.

27. 메인 메뉴로 나가서, 크레딧을 보고 오면 문이 열려있다. 단, 타임어택을 할 경우라면 크레딧을 보고 시작하면 시간을 아낄 수 있다.

28. 이것이 처음 스크린 샷의 주인공 스테이지. Stage 20과 같은 방법으로 진행하면 된다.

29. 문이 열린 후 일정 시간이 지나면 도로 닫힌다. 그러니 단추를 누르고 재빨리 탈출하면 된다.

30. 탈출구 가까이로 갈수록 화면이 검어진다. Stage 28이나 20과 같은 방법으로 진행하면 된다.

31. 31 Stage 그런 거 없다. 콩그리 미디엄 뱃지에 "Complete all 30 levels" 라고 써 있으면서 계속 스테이지만 늘어나는 것에 신경쓰지 말자. 30스테이지 다 깨면 뱃지 준다.





그런데 3분 40초 안으로 클리어 하기가 꽤 어렵다. 세번째로 했을 때 내 최고 기록이 나왔는데, 대강 4분 30초쯤. 50초를 무슨 수로 줄이지…… 그렇다고 뱃지 따려고 게임 하는 건 아냐.

2009년 8월 21일 금요일

집에 돌아오는 저녁에

집에 돌아오는 저녁에 어떤 꼬마가 부모에게 말을 하는 것을 들었다.
"저기 별이다!"

난 속으로 생각했다.
'그거 인공위성이야.'

안습.

2009년 8월 20일 목요일

전자파 차단에 대하여 (핸드폰)

간간히 전자파 차단에 대한 이야기가 들린다. 당연히 99% 이상 광고에 사용되는 문구이다. "본 제품을 이용하면 자외선이 차단되고 전자파도 차단되고 원 적외선도 방출되어……" 어디서 본 것 같은 문구들 아닌가? 이러한 광고들에서 사용하는 과학적인 것 들에 대해 이야기를 하고 싶다.

일단 본 게시물에서는, 제목에서 밝힌대로 핸드폰 전자파 차단에 대해 다루고자 한다. 이 주제가 가장 쉽게 이야기할 수 있는 것이기에, 처음엔 가볍게 가자.

핸드폰에서 송·수신하는 전자파는 꽤[1] 고주파다. 이 주파수가 뇌에도 영향을 주고, 핸드폰 사이에 달걀을 넣어두면 삶은 달걀이 되어버린다는 이야기도 있는 줄로 안다. 따라서 인체에 얼마나 해롭겠는가, 하는 이야기가 나오면서 결국 핸드폰 전자파 차단에 대한 맹신이 생긴 것 같다.

전자파를 차단시켜준다는 핸드폰 악세사리는 상당히 종류가 많다. 단순히 열쇠고리처럼 핸드폰에 달고 다니는 것 부터 스티커까지 종류가 다양하다. 케이스에 씌워서 다니는 것도 있을 법 한데, 이건 내가 확인을 하지 않아서 뭐라고 해야할지 모르겠다. 여하간.

전자파가 몸에 해로운지, 혹은 건강을 위해 전자파를 정말 차단해야 하는지는 일단 논외로 하고 외부 전자파가 비교적 잘 차단되는 곳에 대해 생각을 해보자. 지하 깊은 곳이나 승강기중 일부에서는 전자파가 잘 차단된다. 얼마나 잘 차단되는지 핸드폰이 기지국을 찾지 못할 지경이다.[2] 이쯤 되면 내가 무슨 이야기를 하려고 하는지 눈치 채는 사람이 있을지도 모르겠다. 내가 이야기 하고 싶은 말은 핸드폰은 전자파를 이용하여 통신을 하는 기기라는 것이다.

이쯤에서 Qustion 1. 핸드폰 전파가 잘 안 터지면 어떻게 되나요? Answer 1. 당연히 전화 연결도 잘 안 되고 통신도 안 됩니다. 싫겠죠?

대체 그 해롭다는 고주파 전자파를 차단해서 어디에 써먹겠다는 건지 모르겠다.[3] 좀 더 자세하게 논의를 진행해보자.

1. 핸드폰에서 발생하는[4] 고주파 전자파는 인체에 좋지 않다.
2. 따라서 고주파 전자파를 차단하면 건강에 도움이 된다.
3. 그런데 핸드폰 전자파를 잘 차단하면 차단할수록, 전파가 안 터진다.[5] 어라?
4. 따라서 핸드폰을 비교적 건강하게 이용하기 위해서는 안 터지는 핸드폰을…… 어라?

핸드폰은 고주파 전자파를 이용하는 통신기이며, 따라서 전자파는 발생되어야만 한다. 물론 이 전자파가 사방으로 퍼져서 수신기를[6] 찾아 전자파를 송-수신 해야 한다. 따라서 전자파를 차단하면 차단할수록, 핸드폰은 안 터지는 애물단지가 된다. 따라서 핸드폰 전자파 차단에는 의미가 없다.

이처럼 어설픈 과학으로 물건을 팔려는 사람들에게 현혹되어 물건을 사진 말자. 그 사람들이 불쌍하다거나 디자인이 마음에 들어서 사주는 거라면 본 게시물과는 관련이 없는 이야기이다. 좀 일반화를 시킨 감이 없지 않은데, 보다 일반적인 전자파에 대한 이야기나 원적외선 발생, 자외선 차단 등에 대해서는 차후 다른 게시물에서 다룰 생각이 있다.

그런데 요새는 전자파가 어쩌구 하는 얘기 믿는 사람이 없던가?

______
[1]굳이 라는 표현을 사용한 까닭은 빛에 비하면 훨씬 저주파이기 때문이다. 일상 생활에서 사용되는 전자파인 빛의 주파수는 핸드폰의 그것보다 수억 배이다. 전자렌지에서 이용되는 마이크로 웨이브도 핸드폰에서 쓰는 것 보다 훨씬 고주파.
[2]요새 지하철이나 일부 승강기에서는 핸드폰 잘 터진다. 승강기는 전자파가 덜 차단되는 놈으로 만들었을지도 모르고, 지하철 역에는 수신기가 어딘가에 설치되어 있을 것이다.
[3]주파수 대역별로 다르게 차단할 수는 있다. 예를 들자면, 유리는 가시광선은 잘 통과시키면서 더 높은 주파수인 자외선은 잘 통과시키지 않는다. 또 오존층에서는 꽤 높은 주파수의 자외선 이상은 흡수-차단하면서, 이하의 주파수에 대해서는 통과시킨다. 하지만, 내가 여기서 하고싶은 얘기는, 고주파가 문제라면서 그걸 차단하겠다는 건 대체 뭐 하는 짓이냐는 거다.
[4]실제로는 핸드폰에서 이용하는
[5]전파나 전자파나 의미는 다르게 사용하지만, 실제로는 똑같은 말이다.
[6]혹은 기지국을

2009년 8월 11일 화요일

버박이 무거워진 것 같다

버전업 하면서 프로그램이 조금씩 무거워 지는 건 이해할 수 있긴 하지만 가벼운 맛에 쓰던 녀석인데, 부팅시 꽤 무거워지니…… 처음 2.몇 버전 설치할 땐 굉장히 가벼웠던 것 같은데. 가상하드 문제인가? 여하튼 꽤 무거워져서 쓰기 좀 불편하다. 애당초 윈도 돌릴 일이 불편한 일이겠지만.

버박 무거워져서 안 그래도 기피하던 윈도를 더 기피하게 될 것 같다.


오늘의 배설 블로깅 끗.

2009년 8월 10일 월요일

dos 공격 당하고 있다

dos 공격 당했다당하고 있다.

……이걸 dos 공격이라고 봐야 할지는 좀 미지수긴 한데,
특정 아이피에서 미친듯이 인덱스 페이지를 열어대려고 시도했으니 dos 맞겠지.


$ netstat -ntlpa
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 000.000.0.0:80 205.209.142.61:2869 SYN_RECV -
tcp 1 648 000.000.0.0:80 205.209.142.61:3390 CLOSING -
tcp 1 649 000.000.0.0:80 205.209.142.61:1560 CLOSING -
tcp 1 648 000.000.0.0:80 205.209.142.61:2779 CLOSING -
tcp 1 650 000.000.0.0:80 205.209.142.61:2704 CLOSING -
tcp 1 648 000.000.0.0:80 205.209.142.61:4372 CLOSING -
tcp 1 648 000.000.0.0:80 205.209.142.61:1877 CLOSING -
tcp 1 650 000.000.0.0:80 205.209.142.61:2575 CLOSING -
tcp 1 650 000.000.0.0:80 205.209.142.61:3480 CLOSING -
tcp 1 648 000.000.0.0:80 205.209.142.61:4254 CLOSING -

인덱스 파일을 미친듯이 읽어대서 cpu 사용률을 올리기에 수동으로 차단을 먹였다. 좀 잠잠해졌다. 지금 다시 확인해보니, 위에서는 10개인데 36개로 늘어났다. 아파치에서 차단을 열심히 먹이곤 있는데 이러다가 아파치가 맛이 가서 뻗는 게 아닐까…… dos 공격 맞는 듯 하다. 누가 내 서버를 테스트 서버로 쓰고 있든지, 아니면 웬 병신이 뜬금없는 서버를 공격해보든지. 둘 다 같은 정도인가.

여하간 왜 공격을 하는지 모르겠다. 시발. 내 서버 죽여서 어디에 쓴다고.

2009년 8월 9일 일요일

뒤질 뻔 했다

갑자기 화장실에서 볼일을 보는데
수강 신청이라는 단어가 퍼뜩 떠올랐다

……날짜가 날짜인지라, 왠지 기간이 지났을 것 같은 불길한 예감이 들더라.
두근 두근 두근 두근 벌렁 벌렁 벌렁 아 시발 이거 어쩌지 어쩌지 하면서
vbox를 켜고(덕분에 서버에 렉이 좀 걸렸다) 황급히 홈페이지를 확인하니

아직 안 지났다.
8월 X일부터 수강신청…… 살았다.


지났으면 어쩌지 하고 수강정정기간에 존나 몸이라도 비벼볼까 싶었는데
살아난 기분이다. 열심히 시간표나 짜 봐야지;

2009년 8월 6일 목요일

[Perl] 영타->한타 변환 (모듈 사용)

#####################################################
# en-co_convert.pl
use Lingua::KO::TypoCorrector;

my $asdf = '<누군가> TNLVMXMZLRK DKSQKWUDY';
$asdf =~ s/([ASDFGHJKLZXCVBNMYUI])/lc($1)/eg;

while ( $asdf ) {
print toKorean($&) if $asdf =~ s/^\w+//;
print $& if $asdf =~ s/^\W+//;
exit if $n++ > 20; # 혹시 예상하지 못한 문제로 무한루프를 돌면 안 되니까(...)
}
######################################################

결과
$ ./en-co_convert.pl
<누군가> 쒸프트키까 안빠쪄요



원래는 IRC에서 누가 한글이 안 쳐지면 하게 만든 스크립트인데(이런 건 꽤 돌아다니지만 내 봇에도 넣고 싶었다.)
그거 때문에 자소 합치는 스크립트를 열심히 머리 굴려서 짜게 됐던 거다. 근데, 모듈이 이미 존재하더라.
JEEN 님께서 작성해 두셨다. 저런 거 까지 있을줄이야……
TypoCorrenctor

freenode #perl-kr 에서 자소 융합 모듈에 대해서 얘기가 나왔는데,(아마 나의 안습한 포스팅을 보고 얘기를 하신게 아닌가 싶다. 아마 이 포스팅도 보실 것 같다. 무서워) 아마 유니코드에서 초성 중성 종성과 그냥 키보드로 타이핑하는 자음, 모음에는 키의 차이가 있다고 한다. 내가 사용하려던 목적과는 약간 어울리지 않았던 것이겠지……
확실히, 분리는 그럭저럭 되는 것 같았는데 폰트가 달랐고 글자 모양도 달랐고; 직접 키보드 초, 중, 종성에 대한 값 ('\x{1101}' 같은 것들)을 넣었다면 작동했을지는 모르겠지만 난 그러기가 귀찮았다. 귀찮은 건 미덕이라지 않은가…… 아무튼 더 귀찮아서 검색을 열심히 했다면 스스로 모듈을 찾을 수 있었겠지만, 미덕이 모자라 귀찮음을 무릅쓰고 저런 일을 했으니 안습.


위의 스크립트에 대해서 변명을 좀 해보자면,
나는 \w 가 허용하는 문자들의 ord를 확인해 본 적이 없다. 알 수 없는 곳에서 버그가 날지도 모른다는 것이겠지;

파파존스 마가리타+올미트 라지

파파존스 치즈가 생각보다 취향에 맞아 간간히 시켜먹는다. 며칠 전 얘기긴 한데, 파파존스에서 피자를 시켰다. 피자 박스를 열어보고 딱 든 생각이,

왼쪽 절반이 마가리타, 오른쪽 절반이 올미트

파파존스에서 피자 조각을 모아서 파나?
11시 방향 피자 조각이 작다. 여섯시 방향에는 뭐랄까, 선명하게 바닥도 보인다. 이런 적은 없었는데, 점심때 시켰더니 이 모양으로 왔다.[1] 평소 배달 오던 사람도 아니고 약간 바쁜 것 같은 기분은 들었는데 그래도 저건 좀 그렇잖아……

그래도 맛있게 꾸역꾸역 처먹었다. 요새 파파존스에서 자주 시켰더니 치즈 맛이 약간 물리는 느낌이다. 다음 번에 시켜먹을 땐 다른 곳에서 시켜봐야겠다.


______
[1]파파존스를 위해 변명 한 마디 해본다면 점심때 시킨다고 다 저 모양으로 오는 건 아니다. 점심 때에도 여러번 시켜봤는데, 저렇게 온 건 저게 처음이다.

2009년 8월 4일 화요일

[Perl] 분리된 한글 자모 합치기 스크립트

스크립트 소스:

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Encode;

my @charset = qw/ㅇ ㅖ ㅈ ㅔ 1 ㅂ ㅓ ㄴ /; # 쓸 문자열을 지정합니다.

# %cho, %jun, %jon 은 초성, 중성, 종성의 순서를 나타냅니다.
# print "$_ : ".chr($_)."\n" foreach keys %cho;
# 같은 코드를 이용하면 확인해보실 수 있습니다.


my %cho = (
12593 => 0 , 12594 => 1 , 12596 => 2 , 12599 => 3 , 12600 => 4 , 12601 => 5 , 12609 => 6 , 12610 => 7 , 12611 => 8 , 12613 => 9 , 12614 => 10 , 12615 => 11 , 12616 => 12 , 12617 => 13 , 12618 => 14 , 12619 => 15 , 12620 => 16 , 12621 => 17 , 12622 => 18 , );
my %jun = (
12623 => 0 , 12624 => 1 , 12625 => 2 , 12626 => 3 , 12627 => 4 , 12628 => 5 , 12629 => 6 , 12630 => 7 , 12631 => 8 , 12632 => 9 , 12633 => 10 , 12634 => 11 , 12635 => 12 , 12636 => 13 , 12637 => 14 , 12638 => 15 , 12639 => 16 , 12640 => 17 , 12641 => 18 , 12642 => 19 , 12643 => 20 , );
my %jon = (
0 => 0 , 12593 => 1 , 12594 => 2 , 12595 => 3 , 12596 => 4 , 12597 => 5 , 12598 => 6 , 12599 => 7 , 12601 => 8 , 12602 => 9 , 12603 => 10 , 12604 => 11 , 12605 => 12 , 12606 => 13 , 12607 => 14 , 12608 => 15 , 12609 => 16 , 12610 => 17 , 12612 => 18 , 12613 => 19 , 12614 => 20 , 12615 => 21 , 12616 => 22 , 12618 => 23 , 12619 => 24 ,
12620 => 25 , 12621 => 26 , 12622 => 27 , );


my @numset;
#map { push @numset, ord $_ foreach (split //, $_) } @charset;
# @ARGV에서 받은 한글을 split 하니까 오류가 나서 포기했습니다.


map { push @numset, ord $_ } @charset; # 한글 문자열을 유니코드 문자세트로 바꿉니다.

my @output;
my $type=0;

while (@numset) { # 문자세트를 한 글자마다 분리시키기 위해 루프를 돌립니다.
# @$numset[0]은 초성, [1]에는 중성, [2]에는 종성을 넣도록 합니다.

my $qq = shift @numset;
if ( $qq > 12643 || $qq < 12593 ) { # 초, 중, 종성의 문자셋이 아니면 한 글자로 집어넣습니다.
$type++; push @{$output[$type]}, $qq;
next; # 지금 것은 처리가 끝났으니 다음 문자로 갑시다.
}
if (
($qq <= 12622 && $numset[0] > 12622 ) ||
( ${$output[$type]}[2] )) {
$type++; # 지금 글자에 종성까지 들어가 있거나
# 다음 문자가 모음이라면 다음 글자로 가서

}
push @{$output[$type]}, $qq; # 집어 넣습니다.
}


foreach ( @output ) {
($_=$$_[0])&&(next) unless $$_[1]; # 중성도 없다면
$_ 를 그 배열(@$_)의 첫번째 값으로 바꿉니다.

$$_[2] = $$_[2] || "0"; # null 대신 0을 넣어줍니다.
# 안 해주면, 종성이 없을 때에는 경고메세지를 출력합니다.

$_ = ($cho{$$_[0]}*21 + $jun{$$_[1]}) * 28 + $jon{$$_[2] } + 44032; # $_에 배열 대신 계산값 대입.
}
print encode('utf-8',chr($_)) foreach @output;
# 출력합니다.
# wide character 어쩌구 오류메세지를 막기 위해 인코딩을 사용했습니다.

print "\n";


출력 결과:
$ ./asdf.pl
예제1번



이 스크립트는 소정의 개인적인 목적을 위해 짜여졌으며, 내가 원하는 스크립트를 위한 중간발판 정도입니다. 때문에 저는 그냥 테스트 코드로만 작성을 해서 예외처리라든지 지저분한 점이라든지 있습니다. 태그 문제로 코드 정리도 지저분하고, 취향 때문에 사용한 몇몇 더러운 코드도 있긴 할테지만 자비롭게 봐주시면 감사합니다.
CPAN에 한국어 자모분리/합치기 모듈이 있긴 하지만 도무지 이용이 어려워 아예 스크립트를 새로 짰습니다. 그리고 딱히 자모 합치기에 대한 perl 스크립트는 보이지 않아 새로 게시를 하였습니다.

mwultong 님의 게시물에서 많은 도움을 받았습니다.

추가> 자음이나 모음만 들어간 경우를 처리하기 위해서는 좀 더 코드가 필요합니다. 중간에 while 문 안에 적당한 조건을 더 집어넣으면 되는데, 생각해보니 이프문을 두 개로 나눠놨는데 하는 짓은 똑같더군요. 예. 합쳐주면 조금이나마 더 깔끔한 코드가 될 것 같습니다.


덧.
아무래도 블로그 글 예쁘게 쓰기는 나랑 성향이 영 안 맞는 것 같다. 다음부터 대충 써야지 역시……
이 게시물 태그에 뻘짓이 있는 건, 나름 예쁘게 써보겠답시고 태그 만지고 블로그 편집기랑 싸움을 한 것 때문이다.
급 반말이 나오는 이유는, 애당초 여긴 배설 블로그였기 때문에 :P

8월 4일 16시 51분 출력 결과 수정 및 추가사항 입력. 아놔 예문 줄였으면서 그대로 올리면 어쩌자는 거지;

2009년 8월 2일 일요일

[잡담] 발자취 및 irc perl bot

사실 윈도를 쓸 때에는 mIRC를 사용하고 있었다. 아마 크랙 된 놈으로. 그래도 버전이 무지 낮더라;

아마 irc를 언제 처음 썼더라…… 6년도 말쯤이 아니려나? 오게임 하면서 무슨 동맹에서 나눠주기에 받아서 써봤다. 금방 그만뒀지만.



여하간 좀 더 하다가 아마 삼발이(부족전쟁) 하면서 irc를 다시 쓰게 됐던가 하는 기억이다.



찾아보니 역시 오게임 하면서 재시작 한 모양이다 -_-; 부족은 덤이었고.

하여간 irc를 시작하면서, 다른 사람들이 자동으로 반응하는 것들이 신기했다.(자반) 그래서 나는 여러 검색창에 "자동 반응" 정도를 검색했던 걸로 기억하고… mIRC 스크립트를 접하게 되었다. 지금은 거의 만지지만 :P 이후 자동 반응이라든지(이건 식상해서 그만 둔 것 같다) 여러가지 스크립트를 삽질 하면서 만들고, IRC 클라이언트에 얹어놓고 썼다. 대개 혼자 쓰긴 했는데, 좀 쓴 것 같다. mIRC를 메인으로 사용한 건 대충 08년도 초부터 08년도 11월 10일9월 말까지 쓴 것 같다. 이건 자동 로깅 데이터의 마지막 정보를 기초로 함(...) => xchat 로그 제일 처음을 보니 10월 1일.

XChat 하니 뭔가 감이 잡히실 분이 있을 것도 같은데, 저때부터 과감하게 우분투 리눅스로 OS를 갈아탔다. 이유는 간단한데 ; 윈도가 설치된 하드디스크가 고장이 났는지 겁나 느렸다. 그래서 외장하드 지르고, 거기에 OS를 설치했다. 나 좀 짱인듯?[1] 그러고 wine으로 mIRC를 돌리기도 거북하여…… XChat을 설치해서 사용하게 되었다. 이 때 당시에는 perl script에 약간 익숙해진 상태였기 때문에[2] 과감하게 mIRC 스크립트를 버리고 XChat에 Perl 스크립트를 얹어서 돌려볼 생각을 가지고 있었다. 솔까 mIRC 스크립트보다 펄이 편하다-_-; 근데 그냥 perl과 perl in xchat은 약간 달랐던 모양이다. 난 그냥 주눅이 들어서 GG를 치고 xchat도 켜고, wine으로 mirc도 켜고 양다리를 타고 있었다. mirc로 켠 놈은 그냥 봇 용도로만 썼다.

그런데 최근에 hanirc가 ddos 공격을 받으면서 서버가 죽었다. 덕분에 hanirc에 있던 많은 유저는 뿔뿔히 흩어져야 했고, 나 또한 흩어졌다. 그런데 내 mirc 버전이 구려서 다중 탭이 안 되잖아. 난 새 버전을 깔려고 시도해보았으나, 여태까지 정리해온 스크립트를 옮기기가 귀찮아서 이전부터 생각했던 wine으로 어정쩡하게 돌리는 거 말고, 간지나게 새 봇을 굴려보자! 프로젝트를 시작하게 되었다. 그냥 그렇다고.

도움이 많이 된 JEEN 님의 블로그.
아무튼 보고 스텝바이스텝 하면서 봇을 만들고 있다. 느낌이, 적어도 mIRC 스크립트로 굴리던 녀석보다는 더 간지나게 만들 수 있을 것 같다.

아, perl 채널도 안 간지 우주 오래 됐는데 그냥 가서 죽만 치고 있을까나……



______

[1]여담으로 지금도 OS는 외장하드에 설치되어 있다. 그래서 USB 연결이 실수로라도 뽑히면 컴퓨터가 멈춘다. 예전 설치 그대로인 건 아니고, 우분투가 판올림 될때마다 포맷하고 설치하고 했는데도 아직 OS는 처음 자리에 있다. 물론 파티션은 좀 다르게 나누긴 했지만 :P
[2]아직 초보.