공돌이들의 친구 Matlab은 3대 OS를 모두 지원하는 프로그램입니다. 저도 덕분에 리눅스용을 설치해서 엄청 애용하고 있습니다.

 대다수 학교나 공공기관은 Windows용을 사용합니다만, 어차피 라이센스가 OS상관없이 호환되기 때문에 학교에서 구입한 Matlab을 리눅스에서도 별 문제없이 잘 쓰고 있습니다. 그런데 리눅스용을 쓰다보면 기존 Windows사용자들과 충돌이 가끔 벌어지는데 Windows용과 리눅스용은 단축키가 다르다는 문제가 있습니다.


원인은...Mathworks사에서는 리눅스용 Matlab을 만들때 리눅스에 기본적으로 포함된 Emacs의 단축키로 기본 세팅하기 때문이었습니다. 헌데, 리눅스 데스크탑도 Emacs단축키보다는 Windows단축키를 사용하는 것을 감안하면 뻘짓이지요.


Emacs를 쓰시는 분들이 그다지 많지 않은 관계로 대표적인 단축키가 어떤 차이가 있는지 말씀드리겠습니다.



 Emacs

Windows 

 Alt+W

Ctrl+C 

 Ctrl+Y

Ctrl+V 

 없음(!)

Ctrl+N


제가 제일 많이 쓰는 단축키 3개만 놓았는데도 이러한 차이가 나옵니다. 심지어 Windows단축키가 더 갯수가 많습니다. Emacs는 보통 본인들이 세팅해서 쓰는 스타일이니 그러려니 합니다.

어쨌거나 Windows단축키가 더 익숙해진 지금 Emacs단축키는 새로 외우기도 힘들고 심지어 어렵습니다.(Ctrl+Y는 한손으로 치기 어렵습니다... 손이 워낙 작아서...)그러면..세팅을 바꾸면 되는데 이 방법은 아주 간단합니다.


2014이전 버전에서는 File-Preference로 들어가시기 바랍니다. 이후 버전이라면...


도구상자에 있는 기본설정 버튼을 눌러주세요.



그리고 키보드-바로가기(Keyboard-Short cut)에서 Emacs 설정을 Windows Default로 바꿔주시면 됩니다.





이제 그냥 쓰던데로 쓰시면 됩니다.(!)

,


대체 이것은 무엇인가??? 첨부파일은 다 어디간거야??


가끔 Thunderbird나 기타 이메일 클라이언트를 쓰다보면 첨부파일로 winmail.dat 라는 파일을 받을때가 있습니다. 이건 사실 Microsoft의 규격에 의해 생긴 일로 Outlook 이외의 클라이언트로 Outlook에서 첨부파일을 보낼 때 생기는 일로 쉽게말해서 MS의 농간입니다.(...)


개나소나 Outlook을 쓰고 있지만 아직 이를 잘 활용하는 업체는 0에 가까운 고로(...어떤 회사에서든지 뉴스그룹 같은 것을 쓴 것을 본 적이 한 번도 없습니다.)그냥 기본설정으로 쓰다보니 생긴 폐해입니다.


https://support.mozilla.org/ko/kb/what-winmaildat-attachment


이를 보시면 잘못된 설정에 의해 생긴 폐해인데요. TNEF형태는 MS독점 형태이며 MS만이 사용가능합니다. 물론 이미 역 어셈블해서 분석이 완료되었지만 라이센스의 문제도 있어서 이래저래 문제가 있습니다.


결국 보내는 쪽(Outlook사용자)측에서 TNEF형태를 안 쓰도록 하는 것이 가장 좋지만 우리나라는 알다시피 그렇고 그런 나라(인데다가 관심도 없지요)이기에 TNEF를 그냥 쓰고 있을 겁니다.


일단은, 첨부된 것을 다시 보내달라고 하기는 힘드니(애초에 설정 건드는 것 자체가 고역인 사람들이라...) 잘못 날라온 winmail.dat파일을 열어서 확인하는 것을 알려드리겠습니다.


1. Thunderbird 확장 중 LookOut이란 확장을 쓰자.

위의 링크에보시면 나오는 것이라서 간단합니다만, 지원이 끊기면 답이 없습니다. 하지만 일단 설치해 놓으면 Thunderbird에서 바로 파일을 열 수 있어서 편리합니다.

하지만 제일 좋은 것은 TNEF자체를 사용하지 않는 것!


2. tnef 패키지를 쓰자.

위의 Lookout 확장에서 사용한 코드입니다. MS의 TNEF를 분석해서 만든 프로그램이며 메일에 첨부된 winmail.dat 파일의 암호를 디코딩해줍니다.


sudo apt-get install tnef


위 명령어로 설치하고


tnef winmail.dat


명령으로 디코딩합니다. 하지만 윈도우는......다른 프로그램을 사용합니다.

winmail opener라는 프리웨어를 사용하시면 됩니다. 이건 구글링하면 금방 나옵니다.(...윈도 사용자는 저한테 약간 무관심영역이다보니...)


그나저나 IE전용코드에 이어서 Outlook전용코드라니....이건 진짜 너무합니다. Thunderbird가 점유율이 아직 현저히 낮은 것이 원인인가요?


볼 사람은 아무도 없겠지만 Outlook을 사용하시는 분들께 고합니다.


제발 다른사람들이 요청하면 좀 모두가 볼 수 있는 설정을 사용해주시기 바랍니다. 그동안은 모르고 사용하셨겠지만 웹메일에서도 TNEF 형태는 에러가 납니다. 세상에는 이메일클라이언트가 Outlook만 있는 것이 아니랍니다. 모두에게 평등한 웹이 됩시다.

,

실시간 게임번역기란 물건이 있습니다. Monkey head's OCR Realtime Translator - 이하 Mort (http://www.steambb.com/bbs/board.php?bo_table=gamebb&wr_id=479632) 라는 물건입니다. 기존의 텍스트 후커는 API후킹방식을 주로 이용하여 이루어졌는데요. 이 방법은 그냥 화면에 나오는 문장을 OCR로 읽어서 텍스트를 읽어들입니다. 사실 이는 이전에 VNR(Visual Novel Reader)란 프로그램에서도 지원되는 기능이었지만 이 물건은 워낙 묵직했던데다가 API후킹도 지원되던 탓에 OCR방식은 잘 쓰이지 않았습니다. (모르는 사람도 있습니다.) 그에 비해 Mort는 성능도 괜찮고 그럭저럭 쓸만합니다. 단점이라면 Tesseract의 학습 기능을 어느 정도 쓰지 않았다면 인식률이 개판입니다. Mort는 학습 기능과 함께 이미지 전처리 기능을 넣어서 어느정도 인식률을 올린 듯 합니다. 그럼에도 여전히 엉망이라 Spell Checker 기능까지 우겨넣어서 인식률을 끌어 올려야 하더군요. 


그래도 상당히 좋은 물건인 듯 해서 리눅스에서 돌릴 수 있는지 봤는데...


닷넷 프레임워크를 필요로 합니다. mono로는 실행이 안 됩니다. 그래서 약간의 폭발 이후 비슷한 클론을 하나 만들어 냈습니다.

...물론 대충 만들어서 모양은 별로이며 동일한 Tesseract 엔진이라 인식률은 꽝입니다. 심지어 이미지 전 처리 기능도 없습니다.....(PIL이나 OpenCV를 써서 넣으면 되기는 합니다만...)

적당히 만들어서 Gitjub 정도에 올리면 되지 않을까 생각하고 있습니다. 자신 있게 올리기엔 코드가 더러운게 흠이지만요.(저는 프로그래밍 전공이 아닙니다. 그래서 알고리즘이 최적화 되어있지 않습니다.)


제작 언어는 제작 속도가 더럽게 빠르기로 유명한 Python 2.7입니다.(3.x는 일부 라이브러리 때문에 사용 불가) 그리고 Tkinter와 기타 플랫폼 독립적 라이브러리를 이용했기 때문에 (OSX, Windows, Linux만 되기는 하지만)크로스 플랫폼(!) 입니다. Tesseeract-OCR를 라이브러리 형태가 아니기에 따로 추가 설치 해주셔야 합니다. (하지만 Tesseract-OCR도 각 플랫폼 별 바이너리를 제공하기에 큰 문제는 없습니다.)


Mort에 비하면 UI가 공대 감성입니다. 미리 말씀드리자면 완성된 프로그램도 아니고 그냥 비슷한 기능을 구현한 것입니다. 작동 되면 좋고 아님 마는 겁니다.


구성은 창 2개입니다. 왼쪽 터미널 위에 있는 컨트롤 창과 오른쪽 Scan Area 창 두 개입니다.


우선 캡쳐 하고자 하는 부분을 Scan Area 창으로 가려 버립니다(!) 저 Scan Area 창은 X버튼의 기능을 삭제 했습니다. 때문에 그냥 구역 설정 기능만 갖춘다고 생각하시면 됩니다.


...그리고 Start를 누르면...Scan Area창이 최소화되면서 해당 Area 부분을 캡쳐한 뒤 신나게 OCR로 읽어들입니다. 인식률은????.........아직은 포기하면 편해요. 이미지 전처리 기능을 만들지 않는 이상 인식률을 효과적으로 끌어올리기는 힘들 듯 합니다.


그리고 한국어 번역을 쓰는데 구글 웹 번역기(?)를 씁니다. goslate란 모듈이 이를 지원합니다. (영어 → 한국어) 보다는 (영어 → 일어 →한국어)가 더 번역율이 높다고 들어서 한번 해봤는데 구어체는 별 차이가 없습니다. 그래서 그냥 (영어 → 한국어) 로 처리 중입니다.


그냥 한번 어떻게 되는지 구경이나 해봅시다.



번역을 하고 싶은 부분을 찾아서 Scan Area 창을 신나게 가지고 놀자


일단 게임을 실행하고 작성한 파이썬 스크립트를 실행합니다. 항상 위 옵션으로 걸려있으므로 Scan Area 창은 절대로 게임 창 뒤로 가지 않습니다.


번역을 하고자 하는 구역을 Scan Area 창으로 가려버리자! 추후 여기에 번역문을 띄울까 하는 생각도 해봤지만...그건 별로


번역을 하고자 하는 부분 위에 창을 올려놓고 조절합니다. 그냥 가리면 됩니다. 참 쉽죠?


그리고 Start를 하면??? Scan Area 창이 자동으로 최소화 됩니다. 그리고 터미널에 보면!!!


왼쪽에 터미널을 주목하자 아직 출력 창을 안 만들었기에 터미널에 번역문을 대신 띄우고 있다. 참으로 공대감성이 아닐 수 없다.

....번역기의 성능은 기대 안 하는 것이 좋습니다. 어차피 구글 번역기이니까요. 심지어 잘 못 인식된 글자도 있네요. 저것은 이미지 전 처리 기능과 Spell Checker를 추가로 붙여서 보완해야 합니다. 하지만 이를 리눅스로 구현했다는 데에 의의가 있습니다. (그런데 테스트에 쓴 게임은 Windows용 Wine 구동 게임...)


이걸 조금만 더 다듬으면 훌륭한 크로스 플랫폼 실시간 번역기가 될 수 있을 듯한데 모양도 별로고 조금 공대 감성을 탈피해야 합니다. (범인은 Tkinter) 하지만 3일만에 만든 것 치고는 그럭저럭 괜찮네요. 이제 OCR된 문자열 및 번역문 츨력창을 따로 만들고 이미지 전 처리 기능을 넣고 Hunspell- Spell Checker (http://hunspell.sourceforge.net/)을 적용하면 인식률을 엄청 끌어 올릴 수 있을 것 같은데 뭐....언젠가는 하겠지요 뭐...

,