목록프로그래밍 (74)
Dharma
Emacs 에 Yasnippet 을 설치하면 기본적으로 Text-mode snippet 중에 time 이라는 단축어가 있습니다. Text-Mode 상에서 time 을 입력하고 TAB 키를 누르시면 Thu Mar 21 18:36:06 2013 위와 같은 내용이 출력됩니다. 일단 영어이기도 하고 , 제가 필요하 것은 오늘 날짜와 뭐 더 필요하다면 요일정도? 출력이 되면 좋겠다고 생각이 들어서 간단한 함수를 제작했습니다. (defun current-day-string () (let ((datetime (decode-time)) (dow '(일 월 화 수 목 금 토))) (format "%s-%s-%s %s요일" (nth 5 datetime) (nth 4 datetime) (nth 3 datetime) (nth..
어쩌다 보니 이메일 보내는 기능을 구현하게 됐습니다. 요즘 서비스 하나 만들려고 보면 이메일 보내기 기능은 거의 기본적인 기능이라 필수적으로 알아야 하는 부분이라고 볼 수 있습니다. 이 포스트는 두 부분으로 되어 있습니다. 1. SMTP 서버 설정하는 부분 2. Node.js 에서 이메일 보내는 부분 사실 2번은 무지 쉬웠습니다. nodemailer 라는 훌륭한 패키지가 존재하기 때문이지요. 1번은 너무나 쉽고도 오래된 이야기인지 오히려 관련 문구를 찾기가 어려웠습니다. 개발환경은 역시나 서버 사이드 이기 때문에 Ubuntu 12.10 버젼에서 테스트 했습니다. 1. Sendmail 을 설치해줍니다. $ sudo apt-get install sendmail Postfix 를 요즘 많이 쓴다고 하는데, 귀..
node.js 프로그래밍을 할 때, exception 이 발생하면 , 쉴새 없이 Ctrl+C , 화살표 위 (이러면 전에 실행했던 명령줄이 표시됩니다)를 반복적으로 누르는 것을 막아주기 위해서 설치하는 프로그램인 nodemon 이 Ubuntu 계열에서 오동작을 합니다. (하위 디렉토리에서 변경된 것을 잡아채지 못하더군요) 소스를 뒤져보니 파일의 변경유무를 알아보던 fs.watch 를 이제 안쓰기 때문이라고 하는데요. 그래서 소스 변경 유무를 다음과 같은 명령 형식으로 알아봅니다. (사실 다음 소스는 동작하는 여부인지 골라내는데 사용하는 코드입니다) find -L /dev/null -type f -mtime -1s -print 위 명령이 데비안 계열하고 BSD 계열이 다르게 동작하는데 실은 저 명령은 BS..
http://www.ziggytech.net/technology/web-development/experiences-with-node-js-porting-a-restful-service-written-in-java/ - 초간단 요약 - 기존의 자바 서비스하고 있던 부분의 일부를 node.js 로 포팅해서 두개를 벤치마크 해 봄. 자바는 멀티코어 환경에서 테스트하고 node.js 는 cluster 를 안쓰고 단일 코어에서 (아무것도 안하면 단일코어에서 도니 ㅎㅎ) 동작시켜봄 결과는 아래와 같음 씨피유와 메모리는 적게 쓰지만 (훨씬 적게..) 성능은 그리 낫지 않음. 이거저거 바꿔가며 테스트를 하던중 ORM 을 지원하는 Sequelizer 가 느리다는 것을 알아냄, node-mysql 로 바꾸고 나니 바뀐 내..
Express (Node.js의 웹 프레임 워크) 에서의 Middleware 개념은 쉽게 설명하자면 Java 에서의 Filter 와 비슷한 개념입니다. 자주 쓰이고 통념적으로 쓰이는 행위들을 미리 걸러주는 역할을 한다고 볼 수 있습니다. 예로 들면 express 가 내부적으로 쓰고 있는 formidable 은 HTTP의 request 를 정리하는데 탁월합니다. 그러나 개발자가 매번 formidable 을 불러서 정리하는 것이 번거로울 수가 있기 때문에 이를 middleware 로 만들어서 app.use(express.bodyParser()); 이런식으로 선언만 해두면 사용이 되는 것입니다. (내부적으로 formidable 이 쓰이고 있음. ) 이런 미들웨어를 만드는 법이 찾아보진 않았지만 예제가 많지는 ..
OSX 에서 GNU Emacs 를 사용중입니다. 귀찮고도 짜증나는 것중의 한가지가 왠만한 것들에 PATH 가 전혀 안 잡혀 있다는 것입니다. 심지어 $HOME/.bash_profile 에 내용을 넣어준다고 해도 Emacs 는 그 Path 의 영향을 받지 않더군요. 현재 Emacs 가 가지고 있는 PATH 정보를 확인하고자 한다면 M-x shell 로 들어가서 Prompt 가 뜨면 bash-3.2$ env | grep PATH EMACSPATH=/Applications/Emacs.app/Contents/MacOS/bin PATH=/usr/bin:/bin:/usr/sbin:/sbin 이렇게 빈약하게 걸려 있는 것 뿐입니다. 귀찮더라도 추가해 주고 싶은 PATH 가 있다면 .emacs 파일에 (setenv "..
프로그래머로 부터 배우는 코딩 기술 (プログラマから学ぶコーディングテクニック) from Mayuko Sekiya 이거 웹 디자인 하시는 분이라는데.. 왠만한 개발자 보다 수준이 훨씬 높으신 듯 ㅎㅎ
원래는 다른 의미로 쓰는 용어인데, 요즘은 이 한가지를 의미하는 말로 바뀐거 같습니다. 프로그래머가 웹 프로그래밍을 할 때 제일 싫어하는 게 무엇인지 물어보면 10중 7은 서슴치 않고 대답을 할 것입니다. 망할 CSS .. 전문 프로그래머에 가까우면 가까울 수록 이쁜 웹 디자인하고는 거리가 멀리 멀리 떨어지게 마련입니다. 혹 유려한 디자인과 훌륭한 개발 실력을 동시에 갖춘 개발자 아닌 돌연변이가 있기는 하지만 그런 사람 찾기가 하늘의 별 따기입니다. 그래서 혹시나 특출난 아이디어를 기반으로 하여 웹 서비스를 개발한다고 하더라도 그 못생긴 UI 에 실망하며 아 못생겼으니 이용도 하기 싫구나!! 를 연발하기 마련입니다. 그런 개발자분들을 위한 트위터 형식의 UI 형식을 갖춰줄 수 있게 해주는 훌륭한 개발 패..
'계획-구현'(plan-and-implement) 방법론은 댐을 건설한다던가 국가를 침공하는데에는 훌륭한 방법이 될 수 있지만, 경험상 프로그래밍을 하는데는 좋은 방법론 같지는 않다. 어째서? 아마도 컴퓨터가 너무나 엄격하기 때문일 듯 싶다. 각각의 프로그램들간의 차이가 댐들이나 침공들 끼리의 차이보다 더 심하기 때문일 듯 싶다. 또는 아마도 여분을 남기는 것과 같은 오래된 행태는 소프트웨어 개발에서는 없기 때문에 옛날 방법론은 먹히지 않는다: 댐 건설시 30% 의 콘크리트를 더 가지고 있는 것은 실수에 대비한 방법이지만, 프로그램에서 30% 더 일을 한다는 것은 명백한 실수다. 왜 오래된 방법론들이 실패했는지 말하기는 어려울 수도 있다. 하지만 그 방법론들은 명백히 실패했다. 누구나 실패한 것을 보지 ..
무엇이든 지 간에 실제로 짜보기 전에는 공부가 됐다고 말할 수가 없을 것입니다. 그런 의미로 조금 복잡한 프로그램을 만들어 본다면, 거의 할 수 있는 최고의 공부가 될 것입니다. 거기다가 처음부터 차근 차근 만들어 볼 수 있다면? 그런 의미에서 Nethack 이라는 게임을 클로져로 만들어 보는 것이 정말 괜찮은 공부가 될 수 있을 것입니다. 저도 우연히 발견한 사이트 인데 정말 많은 공부가 되고 있습니다. 실전 Clojure 공부라고 볼 수 있습니다. http://stevelosh.com/blog/ 1 부터 차례로 따라하시면 됩니다.