목록프로그래밍 (299)
Dharma
Node.js 와 Node.js 를 잘 활용하기 위한 웹 프레임워크까지 쭈욱 따라하기 식으로 하루만에 쫓아갈 수 있는 훌륭한 튜토리얼이 정리되어 있습니다. 비록 영어이긴 하지만 신기술은 번역되어 있는 것을 구하기 힘드니 여기서 쭈욱 따라가시면서 이해만 하시면 충분히 node.js 로 바로 웹 사이트 하나 만들 수 있는 실력을 구비하실 수 있을 것입니다. Node.js 설치하기 는 예전 제 포스트를 참조하시면 됩니다. 기본 (The Basics) (1-2 시간 소요) The Node Beginner Book 기본적인 문법과 Asynchronous 코딩에 대한 기본을 설명해주고 있는 훌륭한 책입니다. 정말 쭈욱 따라하시면 됩니다. 더 깊게 들어가기 (Going Deeper) (1 시간 소요) chapter7..
Slime 이 무엇인지 Emacs 를 사용하시는 분들은 대충 아시리라 봅니다. REPL (Read Eval Print Loop)형태를 지원하는 언어에 대한 최적의 개발 환경이라고 보시면 됩니다. (물론 부정하는 분들도 많습니다) 저는 Common Lisp , Clojure 등을 Slime 을 이용해서 개발환경을 구축해 두었습니다. 이번에 프로젝트를 Node.js 로 진행하게 되어서 (Node.js 또한 REPL 을 지원합니다) Emacs + Slime 으로 환경을 구축할려고 알아보았습니다. 역시나 괜찮은 솔루션이 하나 등장하더군요. https://github.com/swank-js/swank-js Slime 은 Swank 라는 방식으로 각기 언어별로 소켓 접속이 가능한 방식으로 서버를 띄우면 Emacs ..
아이디어 기획의 시작은 종이와 연필로 부터 , 프로그래밍 시작은 키보드로 부터 아이디어 자체보다 실행이 중요하며, 프로그램은 머리로 짜는 것이 맞지만, 손 부터 움직이지 않으면 일 시작하기가 애매합니다. 빠른 개발론 (Rapid Development)을 실현화 할려면 무엇보다 시간을 많이 잡아먹는 변수를 없애야 합니다. 그 변수중 첫째는 기획 문서 만드는 것과 둘째는 프로그램 개발의 시작입니다. 이 두가지 변수를 없애는 방법은 '빠르게 시작하는 것' 일단 종이와 연필을 가지고 아이디어를 구상하고 구상 단계가 끝나면 잽싸게 키보드를 부여잡고 개발을 시작하는 것입니다. 진행하면서 생각하기!! 빠른 개발론의 시작입니다.
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 ..
친구랑 까마득한 옛날에 배웠던 전산학 개론에 관한 기억을 더듬다가 나온 이야기입니다. 현대 컴퓨터의 모델이 대체 무엇이냐에 관한 논쟁을 하던중 "튜링 머신이다" 와 "폰 노이만 아키텍쳐" 다 로 의견이 갈려서 서로 강하게 대립했습니다. 결론부터 말하자면 두가지 다가 맞습니다. 그러나 형태는 조금 다르다고 보면 됩니다. 튜링 머신은 초 간단 설명을 하자면 '명령어가 나열 되어 있고 그것을 읽어서 실행하는 형태의 가상 기계' 입니다. 그리고 폰 노이만 아키텍쳐는 '컴퓨터 하드웨어를 이루는 CPU, RAM , 하드디스크 등등으로 구조에 관한 설명'입니다. 하나는(튜링 머신) 프로그램에 관한 설명이고 하나는(폰 노이만 아키텍쳐) 하드웨어 구조에 관한 설명입니다. S/W 와 H/W 둘중 하나라도 없으면 현대 컴퓨..
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) ..
모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을만한 표현 양식을 가져야 한다. DRY - 반복하지 마라 (Don't Repeat Yourself) 어떻게 중복이 생기는가? - 강요된 중복 개발자들은 다른 선택이 없다고 느낀다. 환경이 중복을 요구 하는 것처럼 보인다. - 부주의한 중복 개발자들은 자신들이 정보를 중복하고 있다는 것을 깨닫지 못한다. - 참을성 없는 중복 중복이 쉬워 보이기 때문에 개발자들이 게을러져서 중복을 하게 된다. - 개발자간의 중복 한 팀에 있는 (혹은 다른 팀에 있는) 여러 사람들이 동일한 정보를 중복한다. 위 내용은 예전에 읽었던 '실용주의 프로그래머' 라는 책에서 나와 있는 드라이 원칙 입니다. 소프트 웨어를 작성할 때 필히 반복되는 환경에 대해서 어떻게 피..
http://attractivechaos.github.com/plb/ 위 주소가 원문이 있는 사이트고 저는 거기서 그림만 가져왔습니다. 사이트의 내용은 각기 어떠한 기준으로 테스트를 하는지에 관한 설명이 있습니다. 그렇지만 역시 그림을 보는것이 편하겠지요? 몇가지 특이할만한 사항이 있습니다. 1. 자바 (Java) 무지 빨라졌습니다. 2. 제이루비 (JRuby)는 자바 버프 빨인지 무지하게 빠릅니다. 심지어 오리지널 루비보다 빨라 보입니다. 3. 자이썬 (Jython)은 다만 자바 버프를 못 받았는지 많이 느린것 처럼 보입니다. 4. V8:JS 의 속도를 보십시오!! 이걸 보니 Node.js 가 대체 얼만큼 빠른것인지 알 수가 있습니다. Node.js 에서 쓰이는 자바스크립트(Javascript)는 언어..
페르마의 작은 정리 n 이 소수고 , a 가 n 보다는 작고 0 보다는 큰 정수라면 , a^n (a 의 n 승) 은 a modulo n 으로 맞아 떨어진다. 이러한 페르마 검사가 확실하게 소수를 판별하지는 못한다. 역이 성립이 안하기 때문이다. 즉 소수가 아닌데도 페르마의 작은 정리를 만족시키는 값이 존재하기 때문이다. 이러한 수를 카마이클 수 (Carmichael number)라고 하는데, 이 수는 아주 드물다는 점 밖에 알려진 성질이 없다. 1000,000,000 아래에는 25개가 있고 예를 들자면 (561, 1105, 1729, 2465, 2821, 6601) 사실 아주 큰 값을 마구잡이로 골라 그 수가 소수인지 알아볼 때, 페르마 검사가 틀릴 확률은 우주선 (우주에서 온 방사선 cosmic rad..