Emacs 상에서 파일의 인코딩을 (주로 Euc-kr 과 Utf-8 사이의 변경) 변경하는 방법에 관한 이야기 입니다. 

언젠가는 정리해야지 마음만 먹고 있다가 결국 정리하게 되는군요.

File Dired 모드 (C-xC-f 를 누르고 미니버퍼에 디렉토리에 보이는 상태에서 C-d 누르면 됨) 에서 다음에 불러들일 커맨드를 그 파일이 저장되어 있는 인코딩으로 지정해준다. (만약 파일이 euc-kr 로 저장되어 있다면)
 

 C-x RET c <RET> euc-kr 



이렇게 입력하고 다음에 불러들일 파일을 <RET> 을 입력해서 불러들이면 위에 지정한 인코딩(Euc-kr) 으로 파일을 불러들입니다. 

 

        C-x RET f <RET> utf-8 


이렇게 입력하면 지금 불려져 있는 파일을 인코딩을 변경하여 저장하라는 명령입니다. 현재 euc-kr 로 불러들인 파일을 utf-8 으로 저장하겠군요.  


 
흔히 말해지는 노가다. 파일 열어서 전부 원하는 단어를 찾고 그것을 일일이 변경하는 작업은 누구나가 싫어하는 작업입니다. Emacs 를 이용해서 간단하게 변경하는 작업을 해서 정리해 봤습니다. Windows 버젼에서는 검색까지는 되는데 찾은 파일을 오픈하는데 (Invalid escape) 오류가 발생합니다. 이건 따로 손을 봐야 하는 문제 같더군요. OSX 에서 테스트 해 본것입니다. 

 M-x find-grep-dired

 를 이용해서 찾고자 하는 문자열을 검색합니다. 정규표현식(Regexp)이 먹히기 때문에 원하는 것을 콕 찝어서 검색 가능합니다.

 검색된 파일들이 *Find* 버퍼에 쭈욱 나열되어 있습니다. 이때 t 를 누르면 검색된 파일들이 토글 됩니다. 

 
아래와 같은 형식으로 보이게 됩니다.  이때  Q (shift + q) 를 눌러주면 문자열 치환 식이 나타납니다. 역시 정규 표현식이 먹히기 때문에 편하게 입력하시고 실행 시키시면 치환조건에 맞는 구문을 찾아서 프롬프트가 나타납니다. y , n 를 눌러가면서 변환하시면 됩니다. 일일이 변환하시기 귀찮으면  Y 를 프롬프트상에서 누르시면 나머지 과정은 자동으로 진행됩니다. 

 그러면 변경된 수백개의 파일들을 일일이 저장하면서 끄기는 상당히 귀찮은 일입니다. 

M-x list-buffers 를 실행하여 나온 버퍼들을 s 로 표시해 줍니다. (저장하라는 뜻입니다) 저장할 수백개의 파일들이 선택됐으면 x (실행하라는 뜻) 를 눌러서 전부 저장시켜 줍니다. 



 
최근 자바 작업을 할 일이 있어서 하다보니 인라인 함수가 없다는 충격적인 소식을 들었습니다. 간단한 작업은 전부 인라인 작업을 즐겨하는 저에게는 청천벽력같은 일!! 그래서 귀찮은 작업들을 정말 간단한 이맥스 함수를 만들어서 해결 하는 방법을 소개할까 합니다. 

 
    
(defun put-iteration (var)

  (interactive "s메시지: ")
  (insert "parse_map.put(\"" var "\" , getTextValue(docEle , \"" var "\"));\n" ))

 (global-set-key "\C-\M-z" 'put-iteration)

 

주어진 var 형태를 소스에 직접 입력하는 방식입니다. 아래에 있는 줄은 단축키를 지정하는 것입니다.
자주 쓸것도 아니고 작업할 때만 몇가지 변경해서 쓰면 좋을 것 같아서 적어 봅니다.


프로그래밍을 하다보면 수학적 귀납법의 원리를 이용하여 함수가 제대로 작성 됐는지 검증하면 편할 때가 많습니다. 

수학적 귀납법

자연수 n과 관련된 명제 P(n)을 증명하려고 할 때, 다음 두 가지만 증명하면 된다.
1) n=1일 때, 참이다.
2) n=k일 때, 참이라고 가정하면 n=k+1일 때도 참이다.
1)과 2)에 따라서 모든 자연수일때 명제가 성립한다.

살아오면서 수학과 프로그래밍에 대해서는 별다른 연관성을 못 느끼고 있었습니다. '수학적 사고나 논리력 증대가 프로그래밍에 도움이 되는 것이겠지' 정도로만 치부하고 살았는데, 최근에 결국 프로그램의 대부분이 아무리 많은 데이터를 다루더라도 index 형태로 처리하게 된다면, 함수를 작성할 때 귀납법을 고려해서 작성하면 좋구나 하고 느낄 때가 있었습니다. 

함수를 작성할 때 위에 쓰여진 귀납법 형태대로 따르면 n=k 일 때 제대로 돌아간다고 생각하고 작성해 줍니다. 그리고 n=1 일때 실제로 맞게 돌아가는지 확인을 하고 n=k+1 일 때 제대로 돌아가는지 체크를 해주면 깔끔하게 작성이 됩니다. 

딱히 방법이랄 것은 아니지만, '맞아 이런거였지?' 정도로만 인식해도 함수를 잦은 디버그 없이 작성할 수 있게 되는 요령이 됩니다. 



코딩에 좋다는 10가지 폰트를 다 써봤지만 개인적으로는 Consolas 를 추천합니다. 그 미묘하게 휘어지는 곡선의 느낌이 참 좋습니다. -ㅅ-... 



일단 폰트 모습입니다. 프로그래밍 하루 이틀 해온 것도 아니고, 앞으로도 수도 없이 할 것 같은데요. 기분 좋게 생긴 폰트를 가지고 작업을 하면 여러모로 기분이 좋습니다. 

OSX 에서 Monaco 폰트를 썼는데 이 폰트 알게 된 후로 전부 다 수정하고 있습니다. 단 단점이라면 우분투를 버추얼 박스(VitualBox)에서 돌리고 있는데 거기서 기본 폰트로 쓰기에는 크기가 안 맞더군요. 17 pt 까지 크기를 키워야지만 이쁘게 보입니다. ClearType 폰트는 하드웨어 가속이 되야지만 작을 때 이쁘게 보이는 건갈까요? 


이거 저거 직접 타이핑 하면서 폰트 모습을 볼 수 있게 해주는 사이트 입니다. 위의 그림도 거기서 타이핑해서 캡쳐했습니다. 






Flex 로 개발할 일이 회사내에서 생길꺼 같아서 OSX 에서 개발환경 세팅을 하는 중이였습니다.
Flex SDK 에서 받을 수 있으며 적당한 곳에 옮겨주고

.bash_profile 에다가

export PATH=$ANDROID_SDK_ROOT/tools:/Users/crazia/work/flex_sdk_4/bin:/usr/local/bin:$PATH


로 추가해 주면 됩니다. 색이 진한 부분이 "/Users/crazia/work/flex_sdk_4" 가 flex sdk 를 복사해준 부분입니다. 여기까지만 하면 개발환경은 세팅 완료 입니다. (또 지루한 emacs 설정이 있지만 그건 나중에 다루기로 하겠습니다)

그런데 문제가 생겼습니다. Terminal 창을 열고

mxmlc


라고 입력하니 메시지들이 전부 깨지는 것입니다. encoding 문제라고 바로 직감적으로 알았으나 2시간의 걸친 구글링 동안 아무것도 나오지 않는 것입니다. 결국 어찌 어찌 뒤지다 보니 "flex_sdk_4/lib/" 밑에 mxmlc.jar 파일과 mxmlc_ko.jar 파일이 존재하더군요.

OSX 세팅중에서 "언어&텍스트" 에서 선호하는 언어 순서를 "English"로 바꾸니 메시지가 제대로 출력되는 것을 보고 시스템에서 정하고 있는 언어 순서대로 찾을것 같다고 가정을 하고 다시 원래대로 "한국어" 위주로 바꾸고 (영어로 출력되는게 싫습니다. -0-)

mxmlc_ko.jar 를 혹시 몰라서 mxmlc_ko.jar.bak 으로 변경해줬습니다.

역시나 한국 로케일 관련 jar 파일을 찾지 못하니 영문 로케일인 기본으로 출력이 되는 것을 확인하실 수 있습니다. 이 간단한 설정을 찾느라 안타까운 내 시간이 화살과도 같이 흘러갔습니다.





Weblocks 로 Web Programming 을 하다보면 자동으로 생성되는 Tag 들이 보기 싫을 때가 있습니다.

자동으로 만들어 주면서 관련된 javascript, stylesheet 를 연결해서 최소한도로 손을 안대도 코딩이 되게 할려는 목적으로 만들어서  편하기는 한데, 공부를 하는 차원에서는 이 태그 저 태그 붙어서 정신 없는 것보다 깔끔하게 내가 원하는 만큼의 HTML을 생성하는 것이 여러모로 편리할 때가 많습니다. 이러한 방법을 알아보기로 하지요.

http://uint32t.blogspot.com/2008/01/weblocks-starting-with-blank-slate.html 조금 예전 자료긴 하지만 충분히 참조할 만합니다.

자동으로 붙어 나오는 tag 는 page-wrapper , page-extra-top , page-extra-bottom 등 3개씩 붙어 나와서 보기 흉합니다. 이렇게 붙어 나오는 이유는

weblocks/src/page-template.lisp 안에 있는 render-page-body 함수 때문입니다.

(defmethod render-page-body ((app weblocks-webapp) body-string)
  "Default page-body rendering method"
  (with-html
    (:div :class "page-wrapper"
      (render-extra-tags "page-extra-top-" 3)
      (htm (str body-string))
      (render-extra-tags "page-extra-bottom-" 3))))

보시면 weblocks-webapp 객체의 method 인 render-page-body 입니다. 태그를 붙이는 코드의 내용이 확인됩니다. 그렇다면 이 부분을 수정해서 재컴파일 하면 되는 것이냐.. 하는 것인데. 절대 그럴 필요 없습니다. lisp 의 막강한 기능인 함수 오버라이딩을 바로 해줄 수 있습니다.

weblocks 으로 만들어준 temp-cloud 라는 프로젝트에서 temp-cloud/src/init-session.lisp 파일을 열어줍니다. 최 상단에 있는 (in-package :temp-cloud) 구문 아래에 바로 오버라이딩 함수를 추가해줍니다.

(in-package :temp-cloud)


(defmethod render-page-body ((app weblocks-webapp) body-string)
  "Default page-body rendering method"
  (with-html
          (cl-who:htm (str body-string))))


단지 이렇게 해준 것만으로 깔끔하게 태그가 사라진 결과물을 볼 수 있습니다.


저자: 벤 포터
역자: 김경수

배우기는 힘들지만 익히고 나면 이처럼 강력한 것이 없다는 3인방중에 하나인 '정규표현식' 에 관한 책입니다. 막상 어떻게 배워야 할지 모르면 이 책을 한개 사서 소장하는 것도 나쁜일은 아닐 것입니다. (대부분의 자료는 인터넷에 있지만 말입니다)

물론 저는 회사에 굴러다니는 사람의 책을 들고 와서 봐버렸지만 말입니다. -0-

원제가 'Regular Expressions in 10 minutes' 답게 쉬운 난이도와 몇개의 편리한 예제로 이루어져 있습니다. 그리고 책 자체가 레퍼런스 성격이 강합니다. 그럼에도 불구하고 다 보는데는 몇일이 걸렸네요. 쇼파에 누워서 책 보기 시작하면 계속 졸기 시작하게 만드는 강력한 책입니다!!!

후딱 다 보시고 레퍼런스로 가지고 계시면서 사용할 일 있으실 때 참조하시면 딱 좋을 책입니다.
제가 아는 영업쪽 담당하시는 분이 한분 계십니다. 영업하시는 분답게 계약 체결전에는 간이라도 빼주실 듯 하다가 막상 체결이 되면 안면을 싹 바꾸시는..

투 페이스 되겠습니다. 다른 사진들은 너무


그런 분이 계시는데 그분이 명절 때가 되면 잊지않고 mail 을 보내주십니다. 잊지 않으신것은 고맙지요 (요즘 안오는거 보니 잊어버리신듯..) 그러나 편지를 받고 보면 수많은 cc 들을 보면서 기가 질립니다. 같은 mail 이라도 저한테만 보낸것 처럼 되어 있으면 참 좋을 텐데.. 라는 생각이 들지요

그래서 시작하게 됐습니다. 대량으로 메일을 발송하되 cc 는 안보이고 단일 대상한테 보내는 것처럼 하기. 찾아보면 간단하게 해결하는 방법이 많겠지만 저는 공부하는 겸 해서 직접 작업해보기로 했습니다.


여기부터는 프로그래머의 영역입니다. 프로그래머가 아니신 분은 봐도 몬소린지 모를 가능성이 아주 농후합니다.



프로그램 세게에서는 학습곡선이 뭐 같아서 배우기 힘들지만, 배우기만 하면 정말 무궁무진한 능력을 주는 것이 세가지가 있다고 합니다. (제 말 아님..)

1. Emacs
2. Regular Expressions
3. Functional Language


배우기 힘들지만 진짜 쓸모가 있다는 이야깁니다. 그런데  Emacs 라는 에디터는 기본적으로 정규 표현식과 함수형 언어인 ELisp 이 포함되어 있기 때문에 Emacs 를 잘 다루려고 공부하다 보면 자연스럽게 2번 3번을 익히게 됩니다.

"지인들에게 기분 상하지 않게 단체 메일 보내기" 프로젝트는 기본적으로 Emacs 를 가지고 개발하는 것을 원칙으로 합니다.

먼저 Emacs 에서 Gmail 을 통해서 편지 보내기!!

왜 하필 Gmail 을 통해서 보내는 것이냐? 라고 하시겠지만, 개인이 아무 리눅스에서 sendmail 데몬 깔아서 메일을 보내면 왠만한 e-mail 서비스는 전부 spam 으로 인식해서 편지 전달이 안됩니다. 그래서 Gmail 로 편지를 보낼 수 있게 설정해야 합니다.

gmail 에서 POP 와 IMAP 사용이 가능하게 설정합니다. <-- 이것에 관한 설정은 Gmail 환경설정에서 도움말이 존재합니다.

정확히 POP 와 IMAP 설정을 해야 사용할 수 있는지는 잘 모르겠는데, 제가 그렇게 설정을 해놨습니다. 여기까지만 하시면 외부 설정은 끝입니다.

그러면 Emacs 가 설치되어 있는 로컬 컴퓨터 기준으로 설명을 진행하겠습니다. OSX 10.6 Snow Leopard 에서 진행을 하고 있습니다. 아마도 테스트는 안했지만 우분투에서는 당연히 될것으로 생각합니다. 

Emacs 는 당연히 설치가 되어 있는 상태구요. 만약 없다면 http://aquamacs.org/ 에서 받아서 설치하시면 됩니다. 구체적인 세팅방법 같은건 정말 열심히 공부하셔야 합니다.

gnutls 를 설치해야 합니다. gmail 이 이방식으로 보안처리를 합니다. 설치를 해줘야 하는데, port 가 깔려 있다면

sudo port install gnutls


이 명령만 쳐주시면 알아서 설치가 됩니다. port 가 설치되어 있지 않다면 http://www.macports.org/ 에서 설치하시면 됩니다.

구체적인 세팅이 끝났으면 $HOME/.emacs 파일을 열어줍니다. 없으면 만드시면 됩니다. osx 기준으로는 $HOME 은 /Users/my-id 입니다. my-id 는 자신의 아이디 입니다.

.emacs 내용
(setq send-mail-function 'smtpmail-send-it
   message-send-mail-function 'smtpmail-send-it
   smtpmail-starttls-credentials
   '(("smtp.gmail.com" 587 nil nil))
   smtpmail-auth-credentials
   (expand-file-name "~/.authinfo")
   smtpmail-default-smtp-server "smtp.gmail.com"
   smtpmail-smtp-server "smtp.gmail.com"
   smtpmail-smtp-service 587
   smtpmail-debug-info t
   starttls-extra-arguments nil
   smtpmail-warn-about-unknown-extensions t
   user-full-name "광이랑"
   starttls-use-gnutls t)

위의 내용을 그대로 .emacs 에 복사하시고 '광이랑' 이라는 부분만 자신의 이름으로 바꾸시면 됩니다. 만약 받은 편지에서 보낸 사람의 이름의 인코딩이 깨져서 보이면 emacs 의 환경이 utf-8이 아니라는 이야깁니다. 만약을 위해서

.emacs 에서

(set-language-environment "UTF-8")


을 추가해 줍니다.

그리고 중간에 보이는 ~/.authinfo 파일은 만들어 줍니다. 만들고 그 안의 내용을

machine smtp.gmail.com login my-id@gmail.com password my-pass


라고 채워줍니다. 딱 이 한줄만 있어야 하며, newline 문자(엔터!)도 들어가면 안됩니다. my-id 와 my-pass 는 구글에 로긴할때 쓰는 아이디와 패스워드 입니다.

자 이제 C-x m 을 입력하시면 mail-mode 로 바뀝니다.

To:
Subject:
--text follows this line--


이와 같은 내용이 나오고요, 부족한 부분을 채우신 다음에 C-c C-c 를 입력하시면 편지를 보내게 됩니다. 여기까지 Emacs 에서 gmail 을 통해서 메일 발송하기 였습니다. 다음은 이 방법을 이용해서 "web-mail 형식으로 편지 보내는 방법"에 관해서 입니다. 그건 나중에...

프로그래밍 하기 좋은 10가지 폰트 <-- 클릭

마소의 콘솔라스 폰트가 실제로 no.1 이나 다름 없네요. 사실 써보면 무지 좋습니다. 이쁘장한게 한글도 잘 지원하고, 애플의 전통적인 강자인 모나코 폰트는 8위네요 (현재 제가 쓰고 있는 폰트임)

그리고 글에는 안나왔지만 폰트 크기도 중요합니다. 예전부터 프로그래밍에 쓰는 폰트와 폰트 크기는 'Anti Alias' 기능을 끄고 8-9 point 가 대세를 이루었습니다.

그런데 요즘 모니터 크기를 생각해 보면, 예전에는 1024x768 시대였다면 요즘은 1920x1200 의 시대입니다. 적은 크기의 폰트를 쳐다보고 있자면 눈에 모래 바람이 일어나는 시기지요.

그런 의미에서 clear type 들의 폰트가 인기를 끄나 봅니다. 그래서 monaco 도 순위가 떨어진 듯하고요.

제 맘대로 추천을 드리자면

Consolas Font 를 쓰면서 Clear Type 옵션을 키시고(기본적으로 지원 할 것임) Emacs 를 쓰시면 Anti Alias 기능을 키시고 Font Size 는 14-15 point 가 괜찮을 듯합니다. (모니터 크기에 맞춰서)

저는 현재 Monaco 폰트에 14 point 를 쓰고 있습니다.

+ Recent posts