목록clojure (19)
Dharma
일단 http://crazia.org 입니다. 별거 아니지만 누르고 들어가면 https://crazia.org 로 바뀝니다. 정말 너무 일반적인 형태의 웹사이트로 보이지만 나름 최신 기술들로 잘 버무려져 있습니다. http2 도 지원함 ㅋㅋ 1 AWS 의 Certificate Manager 를 이용해서 SSL 인증서를 발급 받았습니다. 혁신적이죠. 기존에는 항상 싼 SSL 인증서를 사서 사용했는데, 여기는 클릭 몇번으로 공짜로 인증서를 받을 수 있습니다. 2 AWS 의 ELB (Elastic LoadBalancer) 를 사용하고 ELB 에 인증서를 포함시켰습니다. 기존에는 NginX 에 인증서를 포함시키는 방법을 썼는데 이제는 이렇게 하는게 편하더군요. 알아서 갱신까지 해줘서 설정만 해주면 문제 없습니다..
클로져는 정말 멋지게도 언어레벨에서 Concurrency 를 지원합니다. 물론 그래서 어렵다는 평을 받긴 하지만 이미 개념을 알고 있는 사람들은 이보다 더 편할 수가 없습니다. 게다가 자바와의 연계성이 뛰어난 점 때문에 클로져는 정말 멋진 언어입니다. 최근 무어의 법칙이 더이상 통하지 않고 CPU 의 코어수만 늘어나는 상황하에서 멀티쓰레드 프로그래밍을 모른다면 진정한 컴퓨팅 파와를 쓸 수가 없습니다. 그렇기 때문에 저는 예전부터 클로져를 눈여겨 왔었는데요. 그 클로져의 Concurrent Programming 에 관한 괜찮은 글을 찾아서 여기에 소개합니다. http://blakesmith.me/2012/05/15/understanding-clojure-concurrency-part-1.html 위는 간단..
저번 포스트 에서 Emacs 버젼을 24 로 업그레이드 한 후에 가장 큰 문제가 생겼습니다. Clojure 와 Common Lisp 개발환경이 동시에 안되는 문제가 발생했습니다. 몇번의 노력끝에 결국 Emacs 에서도 편하게 설치하는 쪽을 받아들이게 됐습니다. 기존에는 "이맥스 유저는 이래야 해!!" 라는 말도 안되는 자존심으로 수동으로 이거 저거 설치하는 쪽이였으나 이제 대세를 받아들이기로 했습니다. 클로져 (Clojure) 개발 환경 설정 예전 포스트 에서 쉽게 설치하는 방법을 소개한 적이 있었습니다. 그러나 swank-js 를 만들었던 당사자가 더 훌륭한 솔루션이 나왔다고 GG 를 쳐버렸습니다. -0- (당신을 믿고 포스팅을 했었다고!!! ㅜ.ㅜ ) nRepl 을 설치해줍니다. nrepl.el is..
ClojureScript 라고 들어 보셨는가요? 자바 스크립트 (Javascript) 는 대단히 편리한 언어이고 렉시칼 스코프 (Lexical Scope)를 지원해서 Anonymous Function 이나 Closure 를 지원하는 등, 고급 추상적인 언어가 지녀야할 몇가지 장점을 지니고 있습니다. 또한 문법도 쉽고 그래서 빠르게 전파되고 있습니다. 게다가 V8 엔진을 쓰는 Node.js 등 이제는 속도면에서도 자바(Java)에 필적하고 있습니다. (예전 제 포스트 참조) 그러나 자바스크립트는 또한 약점이 존재합니다. 자바스크립트 지지자들도 여러번 지적하는 사항이라고 하는데요 (사실 저는 잘 모르겠습니다 -ㅅ- ). 지나치게 단순하고 어딘가 허술하며, 확장시키기 좋지 않으며 어떤 기능을 구현하기 위해서 ..
무엇이든 지 간에 실제로 짜보기 전에는 공부가 됐다고 말할 수가 없을 것입니다. 그런 의미로 조금 복잡한 프로그램을 만들어 본다면, 거의 할 수 있는 최고의 공부가 될 것입니다. 거기다가 처음부터 차근 차근 만들어 볼 수 있다면? 그런 의미에서 Nethack 이라는 게임을 클로져로 만들어 보는 것이 정말 괜찮은 공부가 될 수 있을 것입니다. 저도 우연히 발견한 사이트 인데 정말 많은 공부가 되고 있습니다. 실전 Clojure 공부라고 볼 수 있습니다. http://stevelosh.com/blog/ 1 부터 차례로 따라하시면 됩니다.
요즘 Protocol 을 사용해서 (defprotocol) 무엇인가 만들어 보는 중인데, 알 수 없는 이상한 버그가 종종 발생합니다. 분명히 돌아가는 코드인데, 코드를 살짝 변경했는데, method 를 찾을 수 없다는 에러. 답답해서 별 짓을 다 해봤지만 원인을 알 수가 없었는데, 우연히 발견한 방법으로 에러를 추정할 수가 있었습니다. target/ 디렉토리 안에 들어있는 class 파일들을 캐싱하다가 definition 을 못 찾는 것으로 추정됩니다. 뻔하게 돌아가야 하는데 안 돌아간다면 project 디렉토리에서 $ lein clean 한 번 실행해 주고 다시 컴파일을 해 준다면 정상적으로 돌아 갈 것입니다. (이 걸 몰라서 몇 주째 고생했음 ㅜ.ㅜ) ps. 명령을 실행하기 전에 clojure 연결은..
요즘 Node.js 로 프로젝트를 진행중입니다. 엄청나게 빠르고 편하게 개발할 수가 있는 좋은 개발 환경인데 단 하나의 장점이 너무 빠르게 개발해서 기획이나 클라이언트 개발과 페이스를 맞출 수 없는 단점 아닌 단점이 있습니다. 게다가 페어 프로그래밍 방식으로 일하는 친구마저 있으니 속도가 상상을 할 수 없을 만큼 빠릅니다. (최근에는 진짜 어려운 일이 아니면 페어도 그만두었습니다. 여유를 좀 가지고 일하자고 해서 ㅎㅎ ) 그러다 보니 딴 짓을 하게 되더군요. 지금 열심히 만들고 있는 게, DB 에 테스트 데이터를 랜덤으로 만들어서 집어넣는 프로그램을 만들었습니다. 아주 쓸만하더군요. (생각보다 괜찮음 ㅋㅋ) 그중에서 현재 날짜를 가지고 와서 주어진 포맷팅 형식으로 변환하여 String 타입으로 리턴하는 ..
CLisp 이나 C++ 에서는 쉽게 설정하는 함수 인자 기본 값 (Default) 설정하는 방법에 관한 예제입니다. 일단 쉽게 설정하는 방법이 없는 듯 합니다. link | changes view sourceprint? 1 user=> (defn bar 2 ([a b] (bar a b 100)) 3 ([a b c] (* a b c))) 4 #'user/bar 5 user=> (bar 5 6) 6 3000 7 user=> (bar 5 6 2) 8 60 이 와 같은 식으로 가장 인자 수가 많은 함수를 내부에서 호출하는 형식으로 꾸며줍니다. 그 외에 다른 방식으로는 :keyword 형식으로 호출하는 등등이 있으나 위에 쓰여지는 방법이 그나마 다른 언어(Language)에 익숙한 방법이라 사료됩니다. defn ..
Parallelism Versus Concurrency Lest our discussion of concurrency and parallelism lead you to think they are the same thing, let’s disentangle the two notions. Concurrency is the coordination of multiple, usually interleaved threads of execution that are accessing or modifying some shared state. Parallelism involves state as well, but usually in the inverse. Being an optimization technique used ..
재미로 만들어(만들었 다기 보다는 포팅- Porting) 본 스팸 필터 입니다. https://github.com/crazia/spam-filter 여기에 올려두었습니다. ('' Practical Common Lisp 이라는 책에 보면 폴 그레이엄이 구상한 스팸 필터에 관한 간단한 예제가 있습니다. 그 알고리즘을 바탕으로 책에서는 CLisp 으로 구현한 예제가 있습니다. (Chapter 23 - Practical: A Spam Filter) 위 내용을 바탕으로 해서 Programming Clojure 라는 책을 쓴 Stuart Halloway 가 간단하게 PCL (Practical Common Lisp) 에 있는 예제들을 Clojure 로 옮긴 것들이 있습니다. (practical-cl-clojure) ..