eclipse zencoding 한글은 안되냐?


작성자 : 김민석 ( lemonfish at g m a i l dot com )
zencoding 이라는 프로젝트가 있다. 

* 이클립스용은 별도 프로젝트가 존재한다. emmet 이라는 프로젝트 인데. zencoding을 만든 개발자가 심경의 변화가 있었는지... 원래 zencoding 이름을 버리고 새로 이름을 붙인 프로젝트다. 그래서 원래 zencoding의 이름으로 제공되던 update site 의 주소도 변경되었다.... 귀찮게 시리.... 쩝.

암튼 zencoding은 디게 쌈박한 프로젝트인데. 


zen + coding 
zen -> gen -> generate -> generating 
generating or generator +  coding -> code generating or code generator ?


이렇게 생각하면 쉬우려나? 개발자에게 재미를 주는 이런 프로젝트 정말 강추다.

table>tr*3>td*2 라고 치고 CTRL+E 혹은 탭을 뙇! 치면 아래와 같이 짜잔.!!!


<table>
    <tr>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
    </tr>
</table>


이렇게 코드가 생성된다. 올~ (^-^)b 짱인데? 문서의 구조를 머릿속으로 굴리고 굴려서 한방에 완성! 멋지다.

거기다 더 좋은건. 저렇게 코드를 생성하는 기능 이외에 snippet 기능도 있다는 건데.

물론 이클립스에도 snippet 기능은 있다. 하지만, snippet 안에 사용자가 채워야 하거나 변경해야 하는 부분을 변수로 지정하여 자동완성 되고 난 이후에 왔다리 갔다리 하면서 값을 채우는 기능은 zencoding에서 지원하는 snippet에만 있는 기능!

예를 들자면 이런거다.

alertmsg 명으로 snippet 을 아래 와 같이 많들 었다고 치자.


alert("${cursor}");
${cursor}


그러면 에디터에서 alertmsg 라고 치고 탭을 탁! 치면


alert("|");
${cursor}


자동완성이 되면서 위와 같이 커서가 snippet에서 보았던 alert 안의 ${cursor} 위치에 가 있는다. 거기에 지정 문구를 타이핑 한다음 탭을 치면 다음행의 ${cursor}위치로 커서가 이동한다. 

단순한 예는 이렇지만. snippet 이 복잡하면 복잡할 수록. 자동완성을 한 이후에 마우스나, 방향키를 이용한 커서 이동 없이 내용을 완성할 수 있는 아주 유용한 기능임을 알게 된다. 

그런데! 역시나. 해외의 프로젝트인지라 한글이 제대로 지원되지 않는다. 매우 안타깝다. 나는 한글 변수도 자주 쓰는데. 

아~스키.. 지도 러시아 사람이면서 아스키만 지원하네... ㅡ_ㅡ;;; 러시아어에 나오는 문자도 아스키에는 없는디...

그래서 이번 포스팅은 zencoding 한글 지원하게 만들기! (너무 쉽다. 너무 쉬워.)

일단 깃허브에서 소스를 받니 어쩌니 하는 과정은 필요없다. 그것이 쉬운 이유!

1. 이클립스의 plugins 폴더를 들어가면 zencoding을 위한 jar 파일이 딸랑 하나 있을 터. 옛날 에 받았으면 ru.zencoding.eclipse_XXXXX.jar 라는 이름 일거고, 최근에 받았으면 io.emmet.eclipse_XXXXXX.jar 라는 이름일 것이다.

2. 일단 그 파일을 아무곳에나 복사를 하자.

3. jar 는 zip형식이므로 압축 프로그램으로 열어 본다. (다시 압축하기 귀찮으면 압축파일을 풀지말고 그냥 열어서 내용을 볼 수 있는 형태로 열어 본다. 유틸은 7z 강추. )

4. 이러케



5. ru.zen...jar 와 io.emmet...jar 는 이름은 틀리지만 거의 내부 형태가 유사하다. 각각에 맞게 js 파일을 찾으면 되는데.
뜬금 없이 js 파일 즉, 자바스크립트파일을 찾는게 좀 의아할 수 있겠다. 설명을 하자면 eclipse 용 zencoding은 모질라의 자바스크립트 엔진인 rhino 를 이용한다. 핵심적인 로직은 js 파일에 있다는 말씀!

ru.zen...jar 를 쓰고 있다면 ru\zencoding\ 에 위치한 zencoding.js 을 찾고,
io.emmet...jar 를 쓰고 있다면 io\emmet\ 에 있는 emmet-app.js 파일을 찾자.

찾았으면 또 어딘가에 복사를 해놓자.

6. 그럼 복사한 각 파일에서 isAllowedChar 라는 함수의 구현부를 찾아가자. 동일한 이름의 함수가 두개가 있을 텐데. char_code 혹은 charCode라는 변수가 등장하는 함수가 고쳐야하는 함수다.

7. isAllowedChar 라는 함수를 통과해야 자동완성이 트리깅(탭이나 CTRL+E를 통해)되었을 때 snippet 등이 제대로 동작하게 된다. 함수를 잠깐만 봐도 감이 올 사람은 올텐데. 한글이 입력으로 들어올 경우 이 함수를 통과하지 못한다.

8. 그래서 자바스크립트에서 한글의 범위를 해당 조건문에 추가해줘야 된다.

9. zencoding.js 의 경우 아래와 같은 코드가 추가된다. emmet-app.js 은 변수명만 다르고 동일하다. 


        || (char_code > 0x3130 && char_code < 0x318F) //korean
        || (char_code > 0xABFF && char_code < 0xD7A4) //korean


10. js 파일 수정이 끝났으면, 원래의 jar 파일을 열어 원본에 있던 js 파일을 수정된 녀석으로 덮어 쓴다. 

11. 끝~~~~~ 이제 플러긴을 수정된 jar 파일로 덮어 쓰고 이클립스를 다시 시작하면 

12. 한글이 잘 먹는다. 

13. 유후~


by killy | 2013/03/17 23:07 | 도구 | 트랙백 | 덧글(1)

아파치 포터블 런타임 유틸리티 1.4.1이 릴리즈 되었습니다.


작성자 : 김민석 ( lemonfish at g m a i l dot com )
Apache Portable Runtime (이하 APR) 은 지금 까지 개발자들이 소프트웨어가 운영되는 플랫폼을 고려하여 특정 플랫폼에서만 제공하는 기능이나 오류를 처리하기위해 별도의 코드를 작성하던 것을 한데 모아 일관된 인터페이스를 통해 그러한 처리가 가능하도록 도와주기 위해 만들어진 프로젝트입니다. 잘 알고 계시는 Apache HTTP Server (흔히들 아파치나 아파치 서버라고 부르지요)나 Tomcat 도 ARP 을 사용하고 있거나 사용할 수 있도록 되어 있습니다.

APR 프로젝트에 속해있는 Apache Portable Runtime Utility (이하 ARP-util) 새 버전이 릴리즈 되었습니다.

이번 버전에서는 apr_cypto API 가 추가되었습니다.  apr_cypto API 는 OpenSSL 이나 NSS 와 같은 암호화와 관련된 라이브러리 사용에 대한 인터페이스로 구성되어 있습니다.

참고로, APR-util 에는 아래와 같은 모듈들이 들어 있습니다.

  • MD5 루틴
  • UUID 를 생성하거나 파싱하고, 포매팅하는 루틴
  • 국제화 지원을 위한 문자셋 변환처리 라이브러리 (iconv 기반)
  • Base64 인코딩
  • 여러개의 버킷 처리를 위한 함수
  • 날짜 루틴
  • DBM 루틴
  • 후크 함수
  • LDAP
  • MD4 라이브러리
  • 옵션처리용 함수
  • 멀티 스레드 환경에서 안전한 FIFO 큐
  • 자원목록 관리 루틴
  • 재할당 가능한 메모리 관리 루틴
  • 문자열 패턴 매칭 루틴 (Boyer-Moore-Horspool 알고리즘 사용)
  • URI 처리 루틴
  • XML 처리 루틴 (expat 기반)
  • APR-util 1.3 호환용 함수들



by killy | 2011/12/18 14:48 | Apache | 트랙백 | 덧글(0)

아파치 트래픽 서버 3.0.2 가 릴리즈 되었습니다.


작성자 : 김민석 ( lemonfish at g m a i l dot com )
Apache Software Foundation 에서 참 좋은 일을 많이 합니다. 이런식으로 가진 지식을 지역(?)사회에 환원할 줄 아는 존경스러운 개발자분들이 이렇게나 많다니... ㅠ_ㅠ 저도 언젠가는!!!

이번 릴리즈를 알리는 공지에도 역시나 다른 릴리즈와 마찬가지로 뻔한 말들이 쓰여 있습니다. 역시 이건 템플릿이 아닌가 싶네요. 그런데 외국사람들은 참 수식을 좋아하는 것 같습니다. bug fix release 라고 적고 말면 아쉬워서 인지. ironing out some minor crashers 라는 표현을 쓰네요. 
 
이하 원문의 일부.
This is primarily a bug fix release, ironing out some minorcrashers. More importantly however it includes two new SSLfeatures. We encourage Traffic Server users to upgrade - andeverybody else to try it out!
참 써보고 싶게 만들지 않습니까?

어쨌든. 이번 릴리즈의 새로운 점이나 수정된 사항을 얘기하기에 앞서. 잠시 Apache Traffic Server 에 대해서 간단히 알아보고 넘어가겠습니다.

혹시 squid(오징어) 라고 들어 보셨나요? squid 는 아주 유명한 프락시 서버입니다. 몇 년 전 부터 많이 쓰이는 웹 가속기는 어떤가요? 웹가속기는 하드웨어적으로 구현된 프락시 서버라고 보시면 되겠네요. 혹시 모르니 곁다리로 프락시 서버에 대해서 설명을 해보지요. 프락시 서버는 실제 서버와 사용자 사이에서 동작합니다. 예를 들면 사용자가 어떤 웹페이지를 보고자 했을 때 그것을 그 웹페이지가 있는 실제 서버가 아닌 프락시 서버로 요청을 하게 됩니다. 그러면 프락시 서버는 그 웹페이지를 자기가 가지고 있으면 그걸 바로 사용자에게 보내주고, 없으면 실제 웹페이지를 가지고 있는 서버에 요청하여 가져온 다음 다시 사용자에게 보내 주는 것이죠. 사실 네트워크 인프라가 전세계 어느 나라보다 막강한 우리나라 사람들이야 그다지 필요성을 느끼지 못하겠지만. 망이 상상도 못할 정도로 저속인 국외에서는 저~~어기 있는 서버에서 여어~기 있는 사용자까지 한바이트씩 한바이트씩 왔다갔다하려면 한나절이었던 거죠. 그래서 실제 서버와 사용자 사이의 곳곳에 프락시 서버가 존재해서 열악한 네트워크 인프라를 극복했달까... 뭐 그렇습니다. 현대에 들어오면서 프락시 서버는 단순히 멀리 있는 컨텐츠를 근처에 미리 가져다 놓고 빨리 갔다가 쓰기 위한 용도뿐만이 아닌 로드밸런싱, 필터링, 로깅 등등의 다양한 용도로 사용되고 있지요. (해킹에도 사용됩니다 :P)

주저리주저리 서두가 길었습니다만 결론은 Apache Traffic Server 가 바로 그 프락시 서버라는 겁니다. squid 라는 유우우명한 프락시 서버가 있다더니 Apache Traffic Server 는 뭐 별거냐? 싶으실지도 모르겠네요. 

근데 요녀석이 좀 사연이 있는 녀석입니다. 
2009년 11월 2일. 야후에서 사용하던 놈이었던 Traffic Server 를 Apache Software Foundation 에 기증을 하게 됩니다. (내부적으로 세션관리나 인증, 설정관리, 로드밸런싱, 클라우드 컴퓨팅 스택간의 라우팅을 위해 사용되었다고 함) 오픈 소스 클라우드 컴퓨팅을 위한 투자로서 기증을 한거죠. 당시에 야후 클라우드 컴퓨팅 팀에서 소개한 바로는 

"졸라 졸라 빠르고, 졸라 졸라 성능 뛰어나고, 견고하고 확장성있는 API 에다가 프락시 + 알파로 요청 라우팅에 필터링에 로드 밸런싱에 블라블라블라... 1.86GHz 쿼드코어에서 일정한 트래픽 패턴일때 다른 애들은 초당 8천건의 요청을 처리하는데 우리는 초당 3만요청을 처리할 수 있고,.... 우리는 하루에 300억개의 컨텐츠, 400테라바이트의 데이터를 요놈으로 서비스 해왔고... 요거 만드는데 투입된 공수가 몇백년이고 squid 만들던 사람도 참여 했었고,...킹왕짱이야. 근데 사실 몇몇 부분에서는 squid 도 썼었어... 모든게 완벽할 순 없잖아? 그러니까. 이렇게 다들 볼 수 있게 내놓을 테니 같이 ipv6 도 집어넣고,  64비트 지원도 넣고, 이것저것 넣어서 좀 잘 만들어보자. "

이만큼 각별한 소프트웨어를 오픈소스에 기증한 야후는 대인배~ 외쳐!!! ~야후! (관련기사는 여기에서)

전체 내용보다 서두가 길겠군요. 그럼 이제 요번 릴리즈를 살펴보지요. 

16개의 오류수정과 1개의 개선사항 1개의 새로운 기능이 이번 릴리즈에 포함되었습니다. 새로운 기능, 개선사항, 오류수정 순으로 보겠습니다.

새로운 기능. 두구둥.

  • SSL 설정과 관련한 기능입니다. ssl_multicert.config 는 Traffic Server 에 여러 아이피가 부여된 경우 요청이 들어온 서버 아이피에 따라서 인증서를 따로 주기위한 것인데. CA 체인도 별도로 지정할 수 있게 됐답니다. (원래는 CA 는 다 동일하게 쓰게 되어있었음)
다음으로 개선사항입니다.

  • 이것도 SSL 과 관련된 것이군요. SSL 이 사용될 때 클라이언트와 서버간에 협상이라는게 이뤄지는데요. 간단하게 말하면 클라이언트는 128비트 암호화밖에 못다루는데 서버에서 1024비트로 암호화된 내용을 날리면 전혀 대화가 안되겠지요. 때문에 인증정보를 날리기 전에 클라이언트가 어디까지 처리가능한지 확인하는 겁니다. 이전 버전의 Traffic 서버에서는 이 부분을 전혀 제어할 수 없었습니다. 따라서 클라이언트가 128비트 암호화만 지원하면 서버에서는 당연히 128비트로 암화화된 내용을 전달해 왔던 거지요. 근데 보안이 중요한 곳에서는 "무조건 128비트 보다 높은 암호화 수준으로 통신을 하고 그에 미달되는 놈은 차라리 튕겨내겠다" 라고 할 수 도 있을 겁니다. 그래서 이번 릴리즈에서 그러한 암호화 수준을 지정할 수 있는 기능이 추가되었습니다. 
이제 어떤 오류들이 수정되었는지 보겠습니다.

  • 아주 치명적인 버그가 수정되었습니다. 헤더를 처리할 때 자주쓰이는 문자열들을 맵에 저장해서 사용하고 있는데 해쉬값과 길이만 비교하고 있었네요. 그렇게 될 경우 실제 동일한 해쉬값과 길이를 가진 다른 문자열이 헤더에 섞여 들어올 경우 보안에 문제가 심하게는 서버가 뻗을 수 있다는 이유로 후다닥.. 수정.
  • 솔라리스 10 에서 SSL 커넥션에 행이 걸리는 문제가 수정 되었습니다. 소스를 보니 읽기,쓰기가 별도로 처리되어야 하는데 분기처리를 하나 잘못 해서 읽으려는놈을 쓰라고 하고 쓰려는 놈을 읽으라고 하고 있었네요. 커허. 어쨌든 수정되었으니 OK!
  • 디버그 빌드를 구동중이거나 스레드별 커넥션풀을 사용중일 때 활성화 되지 않아야할 assert 가 제거되었습니다.
  • 분석을 위해 사용되는 바이너리 로그 생성시 추가적인 개행이 들어가서 traffic_logstats 명령을 이용해 요약을 만들 수 없었답니다. 보니까. writeln 을 write 로 변경했군요. 
  • ssl.server.cert.path 설정과 ssl.server.private_key.path 설정이 경우에 따라서 제대로 먹질 않는다는 보고가 있었습니다. 각각을 처리하는 함수들이 따로 따로 만들어져 있다보니 동일한 방식으로 처리가 되지 않았나 봅니다. 소스상에서 모두다 동일한 함수를 사용하게 해서 처리했군요. 
  • proxy.config.http.forward.proxy_auth_to_parent 라는 길기도 긴 옵션이 동작하지 않는다는 버그입니다. 일단 수정은 된것 같은데. 이 옵션 사용은 그다지 권장하지 않는다는군요. 
  • 빌드 시 최적화 옵션이 먹지 않던게 수정되었습니다.
  • 데비안과 솔라리스에서 make check 수행시 fail 이 뜬다는데. 이게 원래 수정된 사항이었다네요. 그래서 백포트 되었습니다.
  • TSFetchURL 이 호출될 때 PluginVC 에서 처리될 이벤트가 없는데 이벤트를 타면서 죽어버리는 현상이 수정되었습니다.
  • HTTP 컴포넌트에서 메모리 누수가 보고되었는데 보니까 뭐랄까. 요새는 메모리가 기가단위인데... 몇십바이트 정도야... 새도 상관없지 않을까 하는 생각도 드네요. 어쨌든 수정이 되었습니다. (초기화 과정에서 파일명을 담는 변수에서 좀 샛나 보네요)
  • TSHttpIsInternalRequest() 함수에서 클라이언트가 중간에 연결을 끊어버리면 뻗는 버그가 있었네요. 수정되었습니다. 
  • Mac OSX 10.6.8 에서 보고된 traffic_logstat 명령 수행시 죽어버리는 버그가 고쳐졌습니다. 
  • traffic_logstats 명령이 잘못된 도움말을 표시하던게 수정되었습니다. -l 옵션이 로그파일 지정에도 쓰이고, 출력 라인 길이 지정용으로도 나오더랍니다. ( -f 는 로그파일 지정이고 -l 은 라인길이지정이 맞습니다. )
  • Free BSD 에서 컴파일시 malloc.h 말고  stdlib.h 를 써야된다고 피드백이 들어왔네요. malloc.h 를 쓰게되면 컴파일이 안된 답니다. 빌드설정이 수정되었네요.
  • SSL 이 firefox 에서는 안되는데 google chome 에서는 되는 버그가 있었다네요. 예전에 수정되었던 사항이라 백포트 되었습니다. 소스를 보니 앞에서도 한번 나왔던 듯 한데. 읽기 쓰기를 반대로 고쳤네요. 애네들 그걸 자주 헷갈리나 봅니다.
  • forward proxy 모드에서 계층적인 캐싱을 위해서 부모 서버를 지정했는데 부모 서버로 요청이 안가고 지가 다 처리하는 버그가 있었네요. 다른 버전에서 수정되었던 사항이라 백포트 되었습니다.

소프트웨어란 뚝딱하고 만들어서 완성되자마자 완벽해지는 것이 아닌. 오랜기간 쓰이고 고쳐지면서 점점 성장하는 그런 것이 아닌가 싶습니다. 마치 나무처럼 말이죠. 어이구 내 새끼! ㅋ


by killy | 2011/12/10 03:54 | Apache | 트랙백 | 덧글(2)

◀ 이전 페이지          다음 페이지 ▶


rss

skin by FreeCssTemplates