Lisp을 좋아하는 사람들의 그룹(http://groups.google.com/group/lisp-korea)에서 Common Lisp을 하면서 Common Lisp을 이용한 라이브러리들에 대하여 스터디하고 있습니다. 현재까지 C프로그램과의 링킹부터 Socket 프로그래밍 및 Database 프로그래밍까지 진행하였습니다.
마지막으로 제가 웹 프로그래밍에 대한 내용을 발표하기로 하였습니다. ^^~

사실 이번에 웹 프로그래밍 발표를 위하여 여러가지 자료를 찾으면서 역시 Common Lisp은 긴 역사만큼 강력하다는 것을 느꼈습니다.
실제 활용을 하면서 Common Lisp을 만지다보니 그동안 잘 이해되지 않았던 부분도 자연스럽게 많이 이해되었습니다. ^^

Hunchentoot도 정말 쓸만하구나 하는 생각이 들었습니다.
참고로 http://www.adampetersen.se/articles/lispweb.htm 의 내용을 바탕으로 발표 자료를 준비하였습니다.
아울러 Ubuntu 9.10 + SBCL + Slime(2009-06-15) + Emace 22.2.1 환경 하에서 작성하였습니다.

사실 처음에 Windows 7 + Cygwin + SBCL + Slime으로 하다가 ASDF 관련한 GPG 에러가 있어서 Ubuntu로 갈아탔습니다. 이거 때문에 고생점 했었습니다.



1. Hunchentoot에 대하여 


Hunchentoot는 Common Lisp으로 작성된 웹 서버입이며, 다이나믹한 웹사이트를 구성할 수 있도록 도와주는 툴킷입니다. 단독실행(Stand-alone)될 수 있으며, HTTP/1.1 스펙을 지원하고, DBMS와 연결 및 SSL 등을 지원합니다. 아울러 Hunchentoot는 Session을 처리할 수 있으며, Cookie 기반의 Session 처리와 Cookie를 사용하지 않는 Session 처리도 가능합니다. 또한 Logging을 하거나 사용자 정의 에러 처리를 할 수 있습니다.


1.1 Hunchentoot 설치

Hunchentoot는 당근 ASDF를 기반으로 쉽게 설치가 가능합니다. ASDF에 대한 자세한 사항은 나중에 한번 정리해서 올리겠습니다.
설치 절차는 다음과 같습니다.

CL-USER> (require 'asdf)
NIL
CL-USER> (require 'asdf-install)
("ASDF-INSTALL")
CL-USER> (asdf-install:install :hunchentoot)
Install where?
1) System-wide install:
   System in /usr/lib/sbcl/site-systems/
   Files in /usr/lib/sbcl/site/
2) Personal installation:
   System in /root/.sbcl/systems/
   Files in /root/.sbcl/site/
 --> 1
Downloading 140293 bytes from http://weitz.de/files/hunchentoot.tar.gz ...
Installing /root/HUNCHENTOOT.asdf-install-tmp in /usr/lib/sbcl/site/,/usr/lib/sbcl/site-systems/
hunchentoot-1.1.0/
hunchentoot-1.1.0/acceptor.lisp
hunchentoot-1.1.0/CHANGELOG
hunchentoot-1.1.0/CHANGELOG_TBNL
hunchentoot-1.1.0/compat.lisp
hunchentoot-1.1.0/conditions.lisp
hunchentoot-1.1.0/cookie.lisp
.....

참고로 저의 경우 /usr/share/common-lisp/ 에 Common Lisp 관련된 자료를 몰아넣는 것을 좋아합니다. Slime도 여기에 설치했습니다.  아울러 ASDF-INSTALL 시 System-wide install을 하여 다른 계정으로도 쉽게 접근할 수 있도록 구성하는 것을 좋아합니다. Hunchentoot를 설치하다보면 계속 GPG 관련한 확인을 해주어야 합니다. 간단하게 ASDF-INSTALL 전에 다음과 같이 설정하시면 GPG 관련 항목을 더 이상 체크하지 않습니다.

CL-USER> (setq asdf-install::*verify-gpg-signatures* nil)


1.2 Hunchentoot 실행

ASDF를 이용하여 Hunchentoot가 정상적으로 설치했다면 다음과 같이 실행하면 됩니다. 8080포트를 사용합니다.

KLISPER> (hunchentoot:start (make-instance 'hunchentoot:acceptor :port 8080))
#<ACCEPTOR (host *, port 8080)>
간단하게 실행됩니다.

1.3 Hunchentoot 종료
간단하게 종료됩니다. 사실 종료는 아직~ 해보지 않았습니다. :-)

KLISPER> (hunchentoot:stop *hunchentoot-server*)



 2. CL-WHO에 대하여

사실 처음 CL-WHO를 들었을때 WHO(국제보건기구)에서 만들었나~ 하는 생각을 하였습니다. ㅎㅎㅎ CL은 당은 Common Lisp의 약자구요~ WHO는 With-Html-Output의 약자라는군요~ 참 했갈리게 하면서도 확실히 기억되는 이름입니다.

CL-WHO는 Lisp의 마크업 언어(Markup Language)입니다. Lisp의 특징인 S-expression을 기반으로 HTML, XHTML, XML 등의 마크업을 작성할 수 있도록 도와주는 넘입니다. 참고로 이와 비슷한 넘이 HTML-TEMPLATE란 넘이 있습니다.

아래의 Lisp 코드에서 (:XXX) 가 바로 CL-WHO 의 예 입니다.

KLISPER> (defmacro standard-page ((&key title) &body body)
  `(with-html-output-to-string (*standard-output* nil :prologue t :indent t)
     (:html :xmlns "http://www.w3.org/1999/xhtml"  :xml\:lang "en" :lang "en"
       (:head
         (:meta :http-equiv "Content-Type" :content "text/html;charset=utf-8")
     (:title ,title)
     (:link :type "text/css" :rel "stylesheet" :href "/retro.css"))
       (:body
         (:div :id "header" ; Start all pages with our header.
           (:img :src "/logo.jpg" :alt "Commodore 64" :class "logo")
           (:span :class "strapline" "Vote on your favourite Retro Game"))
         ,@body))))

2.1 CL-WHO 설치

당근 ASDF 를 이용하여 다음과 같이 설치합니다.

CL-USER> (asdf-install:install :cl-who)
Install where?
1) System-wide install:
   System in /usr/lib/sbcl/site-systems/
   Files in /usr/lib/sbcl/site/
2) Personal installation:
   System in /root/.sbcl/systems/
   Files in /root/.sbcl/site/
 --> 1
Downloading 19817 bytes from http://weitz.de/files/cl-who.tar.gz ...
Installing /root/CL-WHO.asdf-install-tmp in /usr/lib/sbcl/site/,/usr/lib/sbcl/site-systems/
cl-who-0.11.1/
cl-who-0.11.1/CHANGELOG
cl-who-0.11.1/cl-who.asd
.....




3. Parenscript 에 대하여

이름과 같이 Common Lisp 하에서 JavaScript를 CL-WHO와 같이 S-expression으로 표현할 수 있도록 도와주는 넘이 Parenscript 입니다. 이번 예제에서는 많이 쓰지 않았습니다. 하지만 재미 있는 기능이 많은 것 같습니다. :-)

이렇게 사용된다고 하네요~

(lambda (x)
  (case x
    (1 (loop repeat 3 do (alert "foo")))
    (:bar (alert "bar"))
    (otherwise 4)))

상기 Lisp 코드가 변환되면 이런 JavaScript 코드가 나온다고 합니다.

    function (x) {
        switch (x) {
        case 1:
            for (var _js1 = 0; _js1 < 3; _js1 += 1) {
                alert('foo');
            };
            return null;
        case 'bar':
            return alert('bar');
        default:
            return 4;
        };
    };




4. K-Lisper 들을 위한 Lisp 책 투표 사이트 구축하기

자 이제 Common Lisp에서 웹 프로그래밍을 하기 위한 환경들을 살펴보았으니 본격적으로 웹 프로그래밍을 시작해보겠습니다.
예제로 만들어볼 웹 사이트를 간단하게 설명드리면, K-Lisper들이 자신이 선호하는 책에 투표를 하면 투표 결과가 바로 나오며, 만약 선호하는 책이 없으면 등록할 수 있는 웹 사이트입니다.

구조는 간단하지만, 간단한 투표 시스템을 만들려고 해도 사실 어려운 것이 사실입니다. 하지만 Common Lisp을 사용하였을 때 얼마나 효과적으로 웹 프로그래밍이 가능한지 한번 확인해보시기 바랍니다. :-)


4.1 패키지 설정

K-Lisper 책 투표 사이트를 위한 패키지를 새로 만듭니다.

CL-USER> (defpackage :klisper (:use :cl :cl-who :hunchentoot :parenscript))
#<PACKAGE "KLISPER">

자~ 만든 패키지로 이동합시다.

CL-USER> (in-package :klisper)
#<PACKAGE "KLISPER">


4.2 책(Book) 클래스 정의 및 로직 구성

Lisp에도 클래스가 있어라고 이야기하시는 분이 있다면, 김영태님이 발표하신 CLOS에 관한 내용을 확인해보시기 바랍니다. 제 블로그에 Lisp의 객체지향은 그 무엇보다 강력했다. 란 제목으로도 올려놨습니다.

우선 책 투표 사이트이므로 책(Book) 클래스를 만들겠습니다.

KLISPER> (defclass book()
       ((name :initarg :name)
        (votes :initform 0)
        )
       )
#<STANDARD-CLASS BOOK>

상당히 간단한 책 클래스입니다. 필수적으로 입력받아야 하는 책 명(name)과 얼마나 투표했는지 나타내는 votes가 존재합니다.

그럼 새로운 책을 하나 만들어 볼까요~ :-)
예제 삼아  Lisp을 좋아하는 사람들의 그룹(http://groups.google.com/group/lisp-korea)에서 처음 공부하였던 책 제목을 넣어 봤습니다.

KLISPER> (setf klispers-books (make-instance 'book :name "Common Lisp: A Gentle Introduction to Symbolic Computation"))
; in: LAMBDA NIL
;     (SETF KLISPER::KLISPERS-BOOKS
;             (MAKE-INSTANCE 'KLISPER::BOOK :NAME
;                            "Common Lisp: A Gentle Introduction to Symbolic Computation"))
; ==>
;   (SETQ KLISPER::KLISPERS-BOOKS
;           (MAKE-INSTANCE 'KLISPER::BOOK :NAME
;                          "Common Lisp: A Gentle Introduction to Symbolic Computation"))
;
; caught WARNING:
;   undefined variable: KLISPERS-BOOKS
;
; compilation unit finished
;   Undefined variable:
;     KLISPERS-BOOKS
;   caught 1 WARNING condition
#<BOOK {D321AE9}>

생성된 Common Lisp 책 객체가 정상적으로 동작하는지 확인하기 위하여 책 명을 확인해보겠습니다.

KLISPER> (name klispers-books)
"Common Lisp: A Gentle Introduction to Symbolic Computation"

잘 들어가 있군요~ :-) 투표 건수도 확인해보겠습니다.

KLISPER> (votes klispers-books)
0

네~ 아직 투표는 하지 않았으니 0건이 맞습니다. 한번 투표해보겠습니다.

KLISPER> (incf (votes klispers-books))

;     (LET* ((#:TMP1390 KLISPER::KLISPERS-BOOKS)
;            (#:G1391 1)
;            (#:NEW1389 (+ (KLISPER::VOTES #:TMP1390) #:G1391)))
;       (FUNCALL #'(SETF KLISPER::VOTES) #:NEW1389 #:TMP1390))
;
; caught WARNING:
;   undefined variable: KLISPERS-BOOKS
;
; compilation unit finished
;   Undefined variable:
;     KLISPERS-BOOKS
;   caught 1 WARNING condition
1
KLISPER> (votes klispers-books)
1

incf 는 1씩 증가시켜주는 function 입니다. 제 Emacs는 WARNING되는 내용을 확인할 수 있도록 설정되어 있어 약간씩 내용이 틀릴 수 있습니다. 참고하세요~

책(Book) 클래스를 더 확장하겠습니다.

KLISPER> (defclass book()
       ((name :reader name
          :initarg :name)
        (votes :accessor votes
           :initform 0)
        )
       )
#<STANDARD-CLASS BOOK>

사용자가 선택한 책을 찾아서 투표해주는 메소드를 만들겠습니다.

KLISPER> (defmethod vote-for (user-selected-book)
       (incf (votes user-selected-book))
       )
STYLE-WARNING: Implicitly creating new generic function VOTE-FOR.
#<STANDARD-METHOD VOTE-FOR (T) {C847BF1}>

자~ 새로운 메소드를 통하여 한번 투표를 해보겠습니다.

KLISPER> (votes klispers-books) ; 현재 1건 투표됨
1
KLISPER> (vote-for klispers-books) ; 투표함
2
KLISPER> (votes klispers-books) ; 2건 투표됨.
2

책들을 담을 전역 변수를 만들겠습니다. 앞으로 이곳에 책들이 저장될 것입니다.

KLISPER> (defvar *books* '())
*BOOKS*

자~ 전역 변수를 기준으로 책 명으로 책을 찾아주는 메소드를 만들어 보겠습니다.

KLISPER> (defun book-from-name(name)
       (find name *books* :test #'string-equal :key #'name))
STYLE-WARNING: redefining BOOK-FROM-NAME in DEFUN
BOOK-FROM-NAME

그리고 책이 존재하는지 여부를 확인하는 function을 만들어 보겠습니다.

KLISPER> (defun book-stored? (book-name)
       (book-from-name book-name)
       )
BOOK-STORED?

아울러 책을 투표된 건수를 바탕으로 정렬해서 출력하는 function도 만들겠습니다. 나중에 화면에 출력할때 투표건에 따라 정렬할 때 사용할 예정입니다.

KLISPER> (defun books()
       (sort (copy-list *books*) #'> :key #'votes)
       )
BOOKS

마지막으로 책을 추가하는 function을 만들어 보겠습니다.

KLISPER> (defun add-book(name)
       (unless (book-stored? name)
         (push (make-instance 'book :name name)
           *books*)
         )
       )
ADD-BOOK

자~ 새로 만든 function들이 정상적으로 동작하는지 확인해보겠습니다.

KLISPER> (books) ; 현재 한권의 책도 없음.
NIL
KLISPER> (add-book "Common Lisp") ; 새로운 책 추가함.
(#<BOOK {C656311}>)
KLISPER> (book-from-name "Common Lisp") ; 책명으로 책을 찾음
#<BOOK {C656311}>
KLISPER> (add-book "Common Lisp") ; 같은 명칭의 책을 추가하였지만, 추가되지 않음. 즉 기능이 정상임.
NIL
KLISPER> (mapcar #'name (books)) ; 책 목록을 출력함.
("Common Lisp")

이로서 책 투표 사이트 구축을 위한 핵심 로직 구성이 끝났습니다. 이제 본격적으로 웹 페이지를 구성해 봅시다~


4.3 웹 사이트 구성

CL-WHO를 본격적으로 이용해볼 시간이 왔습니다. 간단하게 한번 CL-WHO를 테스트 해봅시다.

KLISPER> (with-html-output (*standard-output* nil :indent t)
       (:html
        (:head
         (:title "K-Lisper's Books")
         )
        (:body
         (:p "K-Lisper's is best!")
         )
        )
       )

<html>
  <head>
    <title>
      K-Lisper's Books
    </title>
  </head>
  <body>
    <p>
      K-Lisper's is best!
    </p>
  </body>
</html>
"
<html>
  <head>
    <title>
      K-Lisper's Books
    </title>
  </head>
  <body>
    <p>
      K-Lisper's is best!
    </p>
  </body>
</html>"

표준적으로 사용할 HTML 페이지의 구조를 잡는 Macro를 작성하려고 합니다. 즉, XHTML의 공통적인 요소를 담고 있는 Macro 입니다. 이 Macro를 통하여 불필요한 요소를 없애고 변화되는 내용만 반영하게 만들것입니다.

KLISPER> (defmacro standard-page ((&key title) &body body)
  `(with-html-output-to-string (*standard-output* nil :prologue t :indent t)
     (:html :xmlns "http://www.w3.org/1999/xhtml"  :xml\:lang "en" :lang "en"
       (:head
         (:meta :http-equiv "Content-Type" :content "text/html;charset=utf-8")
     (:title ,title)
     (:link :type "text/css" :rel "stylesheet" :href "/retro.css"))
       (:body
         (:div :id "header" ; K-Lisper's Books Header
           (:img :src "/logo.jpg" :alt "K-Lisper" :class "logo")
           (:span :class "strapline"  "Vote on your favorite Lisp Book"))
         ,@body))))

STANDARD-PAGE

주의하셔야 할 점은  ,title,@body, 는 마침표(.)가 아니라 쉼표(,)라는 것입니다.


자~ 첫 페이지인 index.htm을 한번 만들어 봅시다. Macro로 이미 정의한 standard-page의 위력이 발휘되는 순간입니다.

KLISPER> (defun index-page()
       (standard-page
           (:title "Klisper's Books")
         (:h1 "Top KLisper's Books")
         (:p "We'll wirite the code later..."
         )
         )
       )
INDEX-PAGE

이제 만든 페이지를 index.htm으로 걸어 봅시다.

KLISPER> (push (create-prefix-dispatcher "/index.htm" 'index-page) *dispatch-table*)
(#<CLOSURE (LAMBDA #) {C70DCED}> DISPATCH-EASY-HANDLERS DEFAULT-DISPATCHER)

웹 브라우져에서 http://localhost:8080/index.htm 이 정상적으로 출력되는지 한번 확인해보세요~

이렇게 등록하는 절차를 더욱 쉽게 하도록 Macro를 사용하겠습니다.

KLISPER> (defmacro define-url-fn ((name) &body body)
       `(progn
          (defun ,name()
        ,@body)
          (push (create-prefix-dispatcher ,(format nil "/~(~a~).htm" name) ',name)
            *dispatch-table*)
          )
       )
DEFINE-URL-FN

그리고 다시 index 페이지를 작성해보겠습니다.

KLISPER> (define-url-fn (index)
       (standard-page (:title "K-Lisper's Book Site")
         (:h1 "Top Books!")
         (:p "How about it?")
         )
       )
(#<CLOSURE (LAMBDA #) {BEE6D7D}> #<CLOSURE (LAMBDA #) {BB85A8D}>
 DISPATCH-EASY-HANDLERS DEFAULT-DISPATCHER)

웹 브라우져에서 다시 http://localhost:8080/index.htm 을 입력하고 정상적으로 변경되었는지 확인해보세요~ 두번에 해야할 절차를 한번에 간단하게 끝냈습니다. 와우~ 매크로여~ :-)



본격적으로 index.htm 페이지에 투표를 할 수 있는 기능을 추가해보겠습니다.

KLISPER> (define-url-fn (index)
       (standard-page (:title "K-Lisper's Top Books")
         (:h1 "Vote on your all time favorite Lisp Books!")
         (:p "Missing a book? Make it available for votes " (:a :href "new-book.htm" "here"))
         (:h2 "Current stand")
         (:div :id "chart" ; For CSS Style of Links
           (:ol
            (dolist (book (books))
              (htm
               (:li
            (:a :href (format nil "vote.html?name=~a" (name book)) "Vote!")
            (fmt "~A with ~d votes" (name book) (votes book))
            )
               )
              )
            )
           )
         )
       )
      
STYLE-WARNING: redefining INDEX in DEFUN
(#<CLOSURE (LAMBDA #) {C9B40F5}> #<CLOSURE (LAMBDA #) {D94667D}>
 #<CLOSURE (LAMBDA #) {AAB237D}> #<CLOSURE (LAMBDA #) {BB85A8D}>
 DISPATCH-EASY-HANDLERS DEFAULT-DISPATCHER)

길어 보이긴 합니다만, 기종의 HTML 작업의 경우 JSP나 PHP 또는 ASP 파일을 각각 만들고 각각 서버에 올려서 다시 컴파일 되는 과정이나 인터프리팅 되는 과정을 거쳐서 결과가 나오지만, Common Lisp의 웹 프로그래밍은 전혀 파일이 필요없습니다.

따라서 언제라도 index.htm 을 바로 변경할 수 있으며 만약 미리 만든 lisp 파일을 load한다고 하여도 파일속의 내용이 현저하게 적습니다. 웹 브라우져로 HTML 소스를 확인해보신다면 아마 팍팍 느끼실 것입니다.


이제 투표 결과를 받는 페이지입니다.

KLISPER> (define-url-fn (vote)
       (let ((book (book-from-name (parameter "name"))))
         (if book
         (vote-for book))
         (redirect "/index.htm")
         )
       )
(#<CLOSURE (LAMBDA #) {D21BE9D}> #<CLOSURE (LAMBDA #) {D9A7965}>
 #<CLOSURE (LAMBDA #) {D9B3E6D}> #<CLOSURE (LAMBDA #) {AAB237D}>
 #<CLOSURE (LAMBDA #) {BB85A8D}> DISPATCH-EASY-HANDLERS DEFAULT-DISPATCHER)


index.htm에서 Vote! 를 클릭하면 vote.htm으로 왔다가 바로 redirect되어 /index.htm으로 돌아가게 되어있습니다. 여기서 주목할 점은 이전에 만들었던 function인 vote-for를 로직으로 바로 활용했다는 점입니다. 그리고 "name" parameter 역시 간단하게 바로 받아서 처리합니다.

얼마나 멋집니까~ 하하하~ ;-)


이제~ 새로운 책을 추가하는 페이지를 만들겠습니다. 투표할 목록에 원하는 책이 없는 경우 간단하게 책 명을 입력하는 페이지입니다.
KLISPER> (define-url-fn (new-book)
       (standard-page (:title "Add a new book!")
         (:h1 "Add a new book to the chart")
         (:form :action "/book-add.htm" :method "post"
           :onsubmit (ps-inline ; Client-side validation.
               (when (= name.value "")
             (alert "Please enter a name.")
             (return false)))
            (:p "What is the name of the book?" (:br)
            (:input :type "text" :name "name" :class "txt"))
            (:p (:input :type "submit" :value "Add" :class "btn"))
            )
         ))
           
(#<CLOSURE (LAMBDA #) {BC8CD65}> #<CLOSURE (LAMBDA #) {DA52B0D}>
 #<CLOSURE (LAMBDA #) {D9A7965}> #<CLOSURE (LAMBDA #) {D9B3E6D}>
 #<CLOSURE (LAMBDA #) {AAB237D}> #<CLOSURE (LAMBDA #) {BB85A8D}>
 DISPATCH-EASY-HANDLERS DEFAULT-DISPATCHER)

이 페이지에서 드디어 Parenscript 를 사용합니다.  중간에 ps-inline 부터 사용하며, 만약 내용이 없는 경우 다시 입력을 받을 수 있도록 JavaScript로 입력값 검증을 처리하는 부분입니다.


자 새로운 책명을 입력받았다면, 책을 추가하는 페이지입니다. JavaScript에서 이미 걸렸겠지만, 다시 한번 빈 내용이 들어오는지 확인합니다. 이런 처리까지 해주어야 정말 좋은 웹 프로그래밍이라고 생각합니다. 참고로 로직 상으로도 이미 book-stored? function을 통하여 중복 방지 처리가 되어있습니다. 
KLISPER> (define-url-fn (book-add)
       (let ((name (parameter "name")))
         (unless (or (null name)(zerop (length name)))
           (add-book name))
         (redirect "/index.htm"))
       )
(#<CLOSURE (LAMBDA #) {D274E35}> #<CLOSURE (LAMBDA #) {D9999F5}>
 #<CLOSURE (LAMBDA #) {DA52B0D}> #<CLOSURE (LAMBDA #) {D9A7965}>
 #<CLOSURE (LAMBDA #) {D9B3E6D}> #<CLOSURE (LAMBDA #) {AAB237D}>
 #<CLOSURE (LAMBDA #) {BB85A8D}> DISPATCH-EASY-HANDLERS DEFAULT-DISPATCHER)


자~ 이제 index.htm에 있는 here 를 눌러서  새로운 책을 한번 추가해보세요~ :-)




여기까지가 Common Lisp의 새로운 웹 프로그래밍의 세계입니다. 다른 언어도 많은 장점을 제공하지만, Common Lisp이 당근 훌륭한 기능을 제공한다고 생각되네요~

아마 웹 브라우져의 내용이 궁금하신 분들이 많으시리라 생각됩니다. 한번씩 해보세요~ 따라하시기 편하도록 구성하였습니다. ;-)
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  8개가 달렸습니다.
  1. 좋은글 잘 보고 갑니다~
    그야 말로 피가 되고 살이 되는 내용이네요 ㅜㅜ
    (하지만, 윈도우 환경이라 아직 실습 해볼 수 없다는 현실에 좌절만....~!)
  2. 와... 역시 선진님 답게 깔끔하고 멋진 정리입니다

    다만 Lisp 코드를 전혀 읽지 못하는 안타까움이 ㅇㅅㅇ;;

    요즘에 호기심에 이것저것 찔러보고 있는데
    멘토가 깊이를 우선 시 하라고 해서 마음을 다시 잡고 있습니다.
    그래서 선진님 공간에 살짝 발도장 찍고 갑니다 ㅎㅎ
    • 아네~ 오랜만입니다~ 지환님~
      잘 지내고 계시지요~ 저희가 세미나를 준비중에 있습니다~
      Lisp 세미나 열리면 꼭 참석해주세용~ :-)
  3. 처음 뵙겠습니다.
    코드 따라가다가 막히는 부분이 있는데요 ^^;
    votes 와 name method 는 undefined function 이라고 나오는데 따로 정의하신부분이신가요 ?ㅎ
    • 원문에 들어가서 찾아보니 결국 자문자답이 되었네요 -_-
      루비와 비슷하게 자동으로 생성되는 슬롯을 정의해줘야 하더군요.

      (defclass game ()
      ((name :reader name
      :initarg :name)
      (votes :accessor votes
      :initform 0)))
    • 밑으로 좀 더 진행하니 클래스 확장부분이 있었네요.
      그럼 순서 조정이 필요할꺼 같네요 ^^;

      KLISPER> (defclass book()
      ((name :reader name
      :initarg :name)
      (votes :accessor votes
      :initform 0)
      )
      )
      #<STANDARD-CLASS BOOK>
    • 한시간 정도 걸려서 따라 해봤는데 정말 직관적인거 같군요.
      폴그레이엄이 왜 lisp 로 viaweb 을 만들었는지 조금이나마 이해가 되네요. 정말 잘 정리해주셨네요 ^^
  4. 네 꼭 참석토록 하겠습니다.
안녕하세요~ 장선진입니다. :-)

최근 저희 "Lisp을 좋아하는 사람들의 그룹(http://groups.google.com/group/lisp-korea)"에 여러가지 변화가 있었습니다.
우선 저는 계속 회장 직을 수행하지만, 대외적인 부분을 담당하기로 하였습니다.

그리고 Lisp에 열정을 가지고 계신 회원님들을 중심으로 운영진을 구성하여 지속적인 Lisp 스터디와 운영 등을 하기로 하였습니다. 이제 새로운 운영진 여러분들께서 Lisp을 중심으로 다양한 활동을 펼치게 되었습니다.

기존의 설립 및 운영자에서 이제 설립 및 후원자가 되었습니다.

많은 커뮤니티들이 지속적으로 발전하기 위하여 노력을 하지만, 임파워먼트(Empowerment)를 제대로 하지 못하는 경우가 많습니다. 
저는 그러한 일을 반복하고 싶지 않았습니다. 조직이든 커뮤니티이든 긍정적인 방향으로 지속적으로 발전하려면 열정적이고 좋은 분들에게 적절한 임파워먼트가 이루어져야 한다고 생각합니다. 이번 운영진 여러분들의 선출이 저희 Lisp을 좋아하는 사람들의 그룹이 장기적으로 발전할 수 있는 계기가 될 것이라고 생각합니다.

저 역시도 "Software in Life"라는 회사를 책임지고 있는 입장이라 Lisp을 좋아하는 사람들의 그룹에 적극적으로 활동하기 힘든 부분도 한 요인이었습니다.

이번에 새롭게 구성된 운영진 여러분들이 "컴퓨터 프로그램의 구조와 해석 (Structures and Interpretation of Computer Program)" 스터디를 준비하고 계십니다.



흔히 SICP라고 줄여서 불리우는 이 책은 컴퓨터 프로그래머에게 선망의 대상이자 두려움의 대상인 책입니다.
사실 이 책은 Lisp 책이 아닙니다. 아울러 Scheme 책도 아닙니다.

컴퓨터 프로그램을 작성하면서 알아야하는 근본적인 지식을 차근 차근 문제를 해결하면서 배우는 책입니다.

이 책 덕분에 Lisp을 배우려는 분들이 많지만, 반대로 Lisp을 두려움 가득한 프로그래밍 언어로 기억하시는 분들도 많습니다. 그렇습니다. 저 역시 SICP를 처음 볼때 그 오묘함과 이해하지 못할 내용들로 인하여 좌절하였었습니다.

저를 비롯하여 많은 분들을 절망에 빠지게 했던 그 책을 Lisp을 좋아하는 사람들의 그룹에서 스터디하고자 합니다. 
나름 그 동안 Common Lisp과 더불어 Clojure 스터디를 해온 터라 회원님들의 호응이 매우 컸습니다. 이제 이 대마를 잡아봐야할 때인것 같습니다.

만약 여러분들이 좋은 프로그래머가 되고 싶다면 읽어야 할 책이 정말 많겠지만 이번 스터디를 통하여 SICP를 공부하시길 권합니다.
성당과 시장(The Cathedral and the Bazaar)으로 유명한 에릭 레이몬드(Eric Raymond)는  "어떻게 해커가 되는가?(How to Become a Hacker)" 란 글을 통하여 Lisp의 가치를 이야기한 적이 있습니다.

“Lisp은 그것을 마침내 손에 넣게 되었을 때 경험하게 되는 심오함을 깨달음을 위해서라도 배울 가치가 있다.
Lisp을 이용하는 일이 그렇게 많지 않다고 할지라도 그 경험은 그 자체만으로도 당신을 훨씬 훌륭한 프로그래머로 만들어 줄 것이다.”

여러분들에게 심오한 깨달음을 위한 가장 스터디 기회가 바로 SICP를 공부하면서 Lisp의 가치를 느끼는 이번 스터디가 아닌가 싶습니다.

http://onoffmix.com/event/1923 에 가시면 이번 SICP 스터디에 참여신청을 하실 수 있습니다.
최대 15명으로 계획하고 있는 이번 스터디를 통하여 평소 혼자 공부하기 정말 어려운 책들을 많은 좋은 분들과 함께 하셨으면 좋겠습니다.

마지막으로 이번 스터디를 널리 홍보해주셨으면 좋겠습니다.
그럼 모두 행복한 하루 보내세요~
감사합니다. :-)
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 사놓고 책장에만 꽂아 뒀는데, 시간내서 봐야 겠네요. ^^
secret
안녕하세요~ 장선진입니다.

다들 잘 지내고 계신지요~ :-)
어느새 10월입니다. 

제가 최근 회사일로 인하여 제가 설립하고 운영하고 있는 Lisp을 좋아하는 사람들의 그룹에많은 신경을 못쓰고 있습니다.
이번주 스터디 건도 그렇구요~ 제가 조금 더 먼저 챙겼어야 하는데 많은 신경을 쓰지 못해서 죄송합니다.

클로저(Clojure)스터디가 어느새 마무리되어가고 있으며, 다음 스터디에 대한 이야기가 자연스럽게 나오고 있어서 참 좋습니다.
SICP에 관한 스터디에 저 역시 많은 관심을 가지고 있습니다.



지난 1년 넘게 저는 "Lisp을 좋아하는 사람들의 그룹"이란 커뮤니티를 만들고 여러분들과 함께 Lisp을 공부할 수 있도록 여러가지 노력을 기울였습니다.
별파란님이 첫 회원으로 가입하신 후 지금 230여명의 회원님들이 가입하신 커뮤니티가 되었습니다.

그리고 2번의 Common Lisp 오프라인 스터디와 1번의 Lisp 전문 세미나와 현대적인 Lisp인 Clojure 스터디를 마무리하고 있습니다.
사실 국내에 몇 안되는 Lisp 커뮤니티 중에 가장 왕성한 활동을 펼치고 있다고 생각합니다.

특히 마이크로소프트웨어(http://www.imaso.co.kr)에 Lisp 세미나한 내용들을 공동연재하여 Lisp의 저변확대에도 일조하였다고 생각합니다.
이번 2010년 10월호에 조성식님의 기고를 마지막으로 연재가 완료될 예정입니다. Lisp으로 구현된 ACT-R에 대한 내용도 나오니 참고하세용~ :-)

아울러 올초에는 클로저 번역서에 대한 베타리딩도 진행하였습니다. 그리고 구체적이지는 않지만 곧 열릴 대안언어 축제에도 참여할 예정입니다.


Lisp이라는 주제를 바탕으로 저희가 할 수 있는 다양한 활동을 진행해왔다고 생각합니다.

많은 프로그래밍 언어 관련된 커뮤니티가 벤더의 지원을 받아가면서 운영되지만, 순수하게 회원님들의 참여만으로 이러한 일을 해왔다는것에 대하여 저는 나름대로 자부심을 가지고 있습니다.

그리고 이러한 저희 커뮤니티의 활동으로 인하여 우리나라에 Lisp이 많이 보급되고 있고 많은 분들이 관심을 가지고 있다고 생각합니다.



이 즈음에서 저는 우리 커뮤니티의 다음 모습을 생각해 보고 있습니다.

사실 저는 Lisp을 잘하는 사람이 아니지만, Lisp을 정말 좋아하는 사람입니다.

아마 Lisp을 잘했다면 저는 커뮤니티를 설립하지도 운영하지도 않았을 것입니다. 저 역시 여러분들과 같이 Lisp에 관심을 가지고 함께 배우고 싶었으며 여러가지 활용방안을 찾는 사람입니다.

이러한 활동을 가장 잘하기 위한 방안으로 Lisp을 좋아하는 분들이 함께 모일 공간을 만들었고 여러분들의 의견을 모아서 다양한 활동을 진행해 온 것입니다. 이 와중에서 많은 회원님들의 노력이 없었다면 아마 커뮤니티가 이렇게 발전하기 힘들었다고 생각합니다.

파라님과 처음 만나 12시까지 쐬주를 마시며 Lisp 커뮤니티의 발전 모습에 대하여 토론하였고, 그것을 이루기 위하여 나름 노력하면서 많은 분들이 동참해주셨기 때문에 작지만 좋은 결과가 만들어졌다고 생각합니다.

앞으로 저희 커뮤니티가 더욱 발전하여 우리나라에서 Lisp에 대한 최고의 커뮤니티가 되었으면 하는 바램과 이왕이면 Lisp으로 다양한 프로그래밍도 할 수 있는 커뮤니티로 발전하면 좋겠다는 생각을 하고 있습니다.



그 첫번째 생각은 Lisp 중심의 오픈소스 커뮤니티가 되었으면 하는 바램이 있습니다.

Lisp 이라는 프로그래밍 언어 자체가 오픈소스입니다.
다양한 Lisp 구현체와 방언들이 존재하는 근본적인 동기를 살펴본다면 언어차원에서 이미 오픈소스화되어 있기 때문입니다.

단순한 코드상의 오픈소스를 넘어 Lisp은 언어를 이루고 있는 사상까지 오픈되어 있습니다.
여러분들 누구나 연산자를 만들 수 있으며 구현체를 만들 수 있습니다.

세상에 이러한 언어는 존재하지 않습니다. 따라서 우리 Lisp은 언어와 언어를 이루고 있는 사상 차원에서 이미 오픈소스화되어 있다고 생각합니다.
따라서 오픈 소스 커뮤니티로 자연스럽게 발전하는 것이 우리 커뮤니티가 가야할 길이라고 생각합니다.

하지만 아직까지 Lisp을 바탕으로 구현되어 활용되는 소프트웨어가 많지 않습니다.
Lisp이 많은 곳에 활용되고 오픈 소스화되려면 많은 활용처를 찾아야 합니다. 이 활용처를 마련하는 일이 제가 본격적으로 해야 할 일이라고 생각합니다.


두번째 생각은 이제 Lisp을 더욱 활성화 시킬 수 있는 분들이 커뮤니티를 운영하셔야 합니다.

제가 설립 및 운영자로 해야할 가장 큰일은 커뮤니티의 자리매김이었다고 생각합니다. 
아시다시피 Lisp이란 언어에 관심을 가지신 분들이 많지 않기 때문에 커뮤니티로서의 자리 매김을 하는데에도 많은 노력일 필요했었습니다.

하지만 이제 저희 Lisp을 좋아하는 사람들의 그룹은 Lisp 전문 커뮤니티로서 확실한 자리매김을 하고 있다고 생각합니다.

이후 저희 커뮤니티가 더욱 발전하기 위해서 Lisp을 바탕으로 다양한 활동을 펼칠 수 있는 분들이 운영하시는 것이 좋다고 생각합니다. Lisp 관련 스터디와 확산을 위하여 Lisp을 바탕으로 좋은 소프트웨어를 만들 수 있는 생각과 경험과 지식을 공유할 수 있는 분이 운영하는 것이 좋다고 생각합니다.

저의 경우 이제 주로 하는 일이 회사 경영이기 때문에 이러한 일을 하기에 적합하지 않습니다. 
아울러 다른 생각을 가지신 분들이 다양한 활동을 펼치는 장이되는 것이 커뮤니티의 다른 모습이라고 생각합니다.

이미 총무님을 비롯하여 많은 분들이 우리 커뮤니티 내에서 각자의 역활을 해주고 계십니다. 즉, 이미 차기 운영을 하실 수 있는 좋은 분들이 모이셨다고 생각합니다. 이에따라 저는 차기 운영진들에게 모든 것을 일임하고 후원자의 입장에서 대외적인 일을 지원하고자 합니다.


세번째 생각은 Lisp이 진정으로 발전하기 위하여 Lisp 관련된 행사를 주기적으로 주관 및 개최하는 것이 좋다고 생각합니다.

우리나라 최초의 Lisp 전문 세미나를 지난 봄에 개최했었습니다. 
정말 하고 싶었던 세미나였습니다. 이 세미나를 통하여 저희 커뮤니티가 많이 알려졌으며 장기적으로 발전할 수 있는 토대가 되었다고 생각합니다.

이러한 행사가 1회성으로 끝나서는 안됩니다.

내년 봄에도 Lisp 전문 세미나를 개최하고, 여름이나 가을쯤에는 Lisp 트레이닝 캠프 같은 것도 개최하면서 Lisp의 보급에 많은 노력을 기울였으면 좋겠습니다. 최소한 Lisp 전문 세미나 개최는 지속적으로 이루어져야 한다고 생각합니다.

이렇게 지속적으로 세미나를 개최하다보면 50년 뒤에는 Lisp을 좋아하는 사람들의 그룹에서 아시아를 대표한 Lisp 세미나 개최도 할 수 있을지 모르지 않겠습니까 ^^~
저희 Lisp을 좋아하는 사람들의 그룹이 역량을 모은다면 가능한 일이라고 생각합니다.




자~ 이제 저의 생각을 마무리할 때가 된 것 같습니다.

저는 이번 10월 9일 스터디때 본 생각에 대한 여러분들의 의견을 바탕으로 차기 운영진 선출 방법 등을 의논하고자 합니다.
아마도 차기 회장님과 부회장님 총무님을 선출하는 것이 좋은 인력 구성이라고 생각합니다.

재미있게 커뮤니티를 운영하실 수 있으신 분들이라면 누구나 차기 운영진으로 활동할 수 있도록 의견을 모을 예정입니다.
그리고 다음 스터디 부터는 제가 주관이 아닌 차기 운영진에서 알차게 꾸며가실 수 있도록 지원하겠습니다.

Lisp에 열정을 가지신 분들이라면 이번 차기 운영진으로 꼭 참여부탁드립니다.
여러분들의 생각으로 지속적으로 Lisp을 좋아하는 사람들의 그룹이 발전했으면 정말 좋겠습니다.


이상 저의 생각이었습니다. 
감사합니다.

PS: 이 글은 Lisp을 좋아하는 사람들의 그룹을 위한 글입니다. 제가 남겨두기 위하여 블로그에 포스팅하였습니다. 
참고로 Lisp을 좋아하는 사람들의 그룹은 Lisp 전문 커뮤니티입니다. 자유롭고 편하게 Lisp 관련된 이야기들을 나눌 수 있는 공간입니다.
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret
안녕하세요~ 장선진입니다.

드디어 제 1 회 Korea Lisp 세미나를 성황리에~ 잘 마쳤습니다. :-)
우선 와주신 모든 분들에게 진심으로 감사드립니다. Lisp 이란 언어가 그리 많은 관심을 가지는 언어가 아니기 때문에 사실 준비하면서 많은 고민을 했었는데~ 이번 세미나를 통하여 정말 많은 분들이 Lisp에 대하여 많은 관심을 가지고 계시다는 것을 확인할 수 있었습니다.

저희가 마련한 장소가 원래 최대 30명이었습니다.
하지만 OnOffmix를 통하여 접수받은 인원만 대기자 포함 50분이 넘었기 때문에 장소에 대한 걱정이 가장 컸습니다.

하지만 걱정은 기우에 불과하였습니다. 중간 중간 자리가 없어서 서서 들으시는 분들이 계셨지만, 삼성 SDS 멀티캠퍼스 702호실의 자리가 넓었기 때문에 다행이도 큰 문제가 없었습니다. :-)

본 세미나가 여러가지로 의미를 가지는 점은 첫번째로 Lisp 관련된 첫번째(?) 공개 세미나라는 점입니다.
현재까지 저희가 준비한 Korea Lisp 세미나 외에 아직 우리나라에서 공개된 Lisp 세미나를 개최했다는 이야기를 들은적이 없기 때문에 본 세미나가 우리나라 첫 세미나로 볼 수 있습니다. 혹시 우리나라의 Lisp 세미나 역사를 아시는 분이라면 저에게 메일 주시거나~ 댓글 남겨 주세요~

아울러 본 세미나를 Lisp을 처음 접하시는 분들을 위한 세미나입니다. 따라서 Lisp의 문법을 다루기 보다는 Lisp의 다양한 활용을 확인하실 수 있도록 구성하였습니다. 그래서 정말 다양한 세션으로 구성하였습니다. 나중에 Feedback을 받아보니~ 조금 더 깊은 내용을 원하시는 분도 계셨습니다. 하반기나 내년쯤에는 Hand-on Lab 형식의 세미나도 생각중입니다. 실제 Lisp 코드를 한번씩 짜보는 세미나를 통하여 Lisp을 접할 기회를 드리고 싶네요~


사실 세미나 전날 새벽 4시까지 세미나 발표 준비를 했습니다. 이런 저런 걱정이 있었는데, 가장 큰 문제는 생각보다 많은 분들이 오셔서 자리가 불편하면 어떻게 하는가에 대한 걱정이었습니다. 그리고 좋은 내용을 잘 설명드려야 하는 부담이 있긴 하였습니다.

이런 걱정을 앞두고 아침 9시에 토즈 강남2호점에서 발표자들을 중심으로 리허설을 하였습니다. 경품이 많은 관계로 차를 몰고 토즈로 향했습니다~



생각보다 리허설에 시간이 많이 걸렸습니다. 약 2시간 30분 정도 시간이 걸렸습니다. 그렇다고 세미나 발표 내용을 줄이는 것도 좋은 방법이 아니라고 생각이 들었습니다. 30분이 긴시간이라면 긴 시간이지만, 사실 제대로 내용을 전달하기에는 생각보다 짧은 시간이었기 때문입니다.

그래서 세미나 전에 오시는 분들에게 양해를 구하고 세미나 발표 시간이 2시간 30분정도 소요될것이라고 미리 공지하기로 하였습니다.
12시경에 토즈 강남2호점에서 나와서 점심식사를 마칠 무렵에 벌써 세미나 장소에 도착했다는 분의 전화를 받았습니다.
가장 먼저 오시는 두분에게 선물을 드리기로 하였는데요~ 당근 선물을 드렸습니다. :-)


이렇게 많은 분들이 오셨습니다. 자리가 없어서 서서 들으신 분들도 계시고 창문쪽에 걸터 앉으신 분들도 계십니다. 다음에는 더 큰 장소를 섭외해야 할 것 같습니다.

제가 우선 개회사와 Lisp의 역사와 이해에 대한 부분을 발표하였습니다. 음~ 제 아이폰으로 사진을 찍어서 올린 관계로 제 발표에 대한 사진은 없네요~ ^^ 나중에 동영상도 올리겠습니다.


두번째 발표자이신 박성민님이 OpenGL을 이용하여 Lisp에서 실시간으로 Live Coding을 하시는 모습입니다. 정말 Interactive한 Lisp 프로그래밍을 선보여 주셨습니다.


세번째 발표자인 김영태님이십니다. CLOS에 대한 내용을 발표하여주셨습니다. Lisp의 깊이있는 객체지향 개념에 대하여 묵직하게 설명하여 주셨습니다.


네번째 발표자이신 손수일님입니다. Hunchentoot를 기반으로 CL-WHO 라이브러리를 이용하여 웹 프로그래밍을 다이나믹하게 하는 방법을 보여주셨습니다. 정말 Lisp의 macro의 장점을 잘 알 수 있는 시간이었습니다.

마지막으로 조성식님이 ACT-R 모델을 기반으로 Lisp이 인지모델에 어떻게 사용되는지에 관하여 설명해주셨습니다. 실제로 인지공학이 인공지능과 어느정도 거리가 있기 때문에 세미나 발표 주제인 Lisp과 인공지능과 약간 거리가 있습니다. 하지만~ Lisp을 기반으로 국내에서 인지 공학에 실제로 사용되는 실 예를 보여준 좋은 내용이었습니다. 아쉽게도 사진이 없네요~

전창민님이 동영상 촬영을 도와주셨구요~ 권순범님이 사진 촬영을 도와주셨습니다. 나중에 권순범님에게 사진을 받아서 웹 앨범에 모아서 올리겠습니다. :-)


대망의 세미나 발표를 마친 후 협찬사 소개를 하였습니다.
이번 세미나는 다양한 IT 기업과 출판사에서 협찬을 해주셨는데요~ 지앤선에서 책 10권과 박카스를 협찬해주셨습니다. :-)
그리고 인사이트에서 책 5권을 협찬해주셨구요~ 마이크로소프트웨어에서 마소 5월호 5권을 협찬해주셨습니다. 그리고 다음 커뮤니케이션에서 Everyday Kit 10개를 협찬해주셨습니다. 그리고 겜브라스에서 게임기 1대를 협찬해주셨구요~ 제가 몸담고 있는 유라이크에서 뒷풀이 비용을 후원해주셨습니다.

45분정도 오셨는데~ 경품이 31개라 대부분 원하는 경품을 받아가셨습니다.
저희 Lisp 세미나에서는 다른 경품 추천과 달리 자신이 원하는 경품을 골라가는 경품 이벤트를 준비하였습니다. 대부분 책과 Everyday Kit이기 때문에 원하는 경품을 가져가실 수 있도록 하였습니다. 정말 Lispy한 경품 이벤트 아닙니까 ^^~

특히 가장 먼곳에서 오신분과 가장 먼저 오신분~ 그리고 가장 홍보를 많이 하신분~ Q&A를 해주신분~ 가장 늦게 오신분~ 들에게 먼저 경품을 드렸습니다. 가장 먼저~ 그리고 가장 멀리서~ 가장  홍보를 많이 해주신분들은 당연히 경품을 받으셔야 한다고 생각합니다. 아울러 가장 늦게 오신분도 많은 일에도 불구하고 Lisp 세미나를 꼭 참여하고 싶었기 때문에 오신 분이기 때문에 경품을 드렸습니다.

이 분들부터 경품을 드린 후 협찬사의 김지영 이사님께서 저희가 Clojure로 만들 경품기로 추첨해주셨습니다. 경품기는 황희님이 제작하셨구요~ 제가 옆에서 조금 도왔습니다. :-)

자~ 마지막 대망의 경품~ 겜브라스의 경품기의 당첨 번호입니다. 원래 겜브라스의 조정현 사장님께서 휴대용 게임기 경품을 위한 경품기의 버튼을 누르시려고 하였는데~ 황희님이 테스트로 한번 더 누르시는 바람에~ 가장 앞자리의 여자분이 게임기 경품을 받아가셨습니다. ㅎㅎㅎ


이게 정말 간단하지만 Clojure로 구현된 경품기입니다~
세미나 후에 발표자와 도와주신 분들과 함께 사진 촬영을 한 후~ 긴긴 뒷풀이를 하였습니다~


제가 작년부터 소원이 하나 있어습니다. Lisp을 더욱 많은 분에게 알릴 수 있도록 세미나를 여는 것이었습니다.
어느새 그 소원이 이루어졌습니다. :-)

그리고 SCIP로 두려움에 차있던 Lisp이란 언어에 여러분 모두 한걸음 더 다가갈 수 있는 좋은 시간을 마련했다고 생각합니다. 앞으로 세미나 내용을 정리해서 함께 공유해드리겠습니다. 그리고 우리나라에 Lisp의 저변 확대에 더 노력하겠습니다.

우리 함께 (Keep Lisping) 해요~ :-)
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  13개가 달렸습니다.
  1. Lisp 세미나에서 뜻밖에 만나뵙게 되어 좀 놀라기도 했고, 너무나 편안히 말씀을 잘 해주셔서 즐거운 시간이었습니다. 기계학습에 관심이 있는 터였는데 ACT-R에서 무척 흥미로웠구요. 빠른 시간안에 Lisp에 발을 담궈보도록 하겠습니다. 수고 많으셨습니다.
  2. 아... 정말 즐거우셨겠다 ㅠㅠ
    다음에는 함께해요 ㅎㅎ

    고생많으셨어요~!
  3. ^^ 박카스는 [궈뇽협찬] 이였습니다. :) "자발적 후원"이라고나 할까요 ^^
    저도 나름 보람찬 하루였습니다. 게다가 '인사이트' 싸장님!도 뵙고 말이죠.
    다음에 또 뵙겠습니다. 고생하셨습니다!
  4. 정말 뜻깊은 시간이었겠습니다.

    참석 하고 싶었지만 다른 사정이 생기는 바람에 아쉽게 불참 하였네요..

    정말 좋은 기회였는데 말이죠;;

    솔직히 Lisp이란것을 잘 몰라 꼭 참석하여 Lisp을 조금이나마 알고 싶었는데 너무 아쉽습니다.

    다음에 기회가 있다면 꼭 참석하도록 하겠습니다^^
  5. 참석하고 싶었는데... 아쉬워요...ㅠㅠ
    다음엔 꼭 참석하겠습니다...ㅎㅎ
  6. 아 참여하지 못해서 정말 아쉽네요 ㅠㅠ

    Lisp 에 관한 책이나 관련된 문서들이 좀 더 많아졌으면 하는 바람입니다.

    초보자가 다가가기에는 정보가 너무 없습니다.. ㅠㅠ ^^;
    • 정보가 너무 없다고 한 말이 무색할 정도로 올해엔 리스프 관련 글이 엄청 많아진 것 같네요!;;

      작년 말에 MIT에서 제작한 Common-Lisp 프로그램까지만 시도하다가 말았더니.. ^^;
      이거 또 다른 데 불붙겠는데요..;;
  7. 비밀댓글입니다
  8. 안녕하세요?

    참 좋은 자리가 마련되었군요.
    국산CAD 캐디안(CADian)을 개발하는 인텔리코리아 에서도 다음 세미나 시에는
    협찬할 수 있는 기회를 가질 수 있도록 해 주시기 바랍니다.

    그리고 lisp 사용하시는 분들은
    http://www.cadian.com/download/value_content.asp?idx=49 에서 평가판을 다운로드 받아서
    현재 사용 중인 오토캐드 기반의 리습을 캐디안 에도 적용해 보시기를 바랍니다.

    그럼.
  9. 리습에 관심이 있지만, 초보자는 끼기 힘들겠네요.
    빨리 ~ 열심히 공부해서 동참하고 싶네요.
    http://cafe.naver.com/ilovecadian
  10. 최근 Clojure를 이용한 프로젝트를 구상중에 있는데~ 잘 될지 모르겠네요~
  11. 리습제작이 가능한가요 ~
secret
드디어 우리나라 첫(?) Lisp 세미나가 열립니다.
지난 1년여간 스터디 해온 결과를 종합하고 모든 분들에게 Lisp에 대하여 쉽게 이해하고 익힐 수 있는 시간이 될 것이라고 생각합니다.

자~ Lisp에 관심있는 분이라면~ 5월 1일 토요일 오후 2시까지 삼성멀티캠퍼스 702호로 오세요~

오시는 분들을 위하여 다양한 경품도 준비하였습니다.
가장 멀리서오시거나~ 가장 먼저오시거나 가장 늦게 오시거나~ 좋은 질문은 해주시거나 많은 홍보를 해주셨다면 누구나 좋은 경품을 가져가실 수 있습니다.

Lisp에 마음의 관심을 가지고 계셨던 분들의 많은 참여 부탁드립니다~ 그리고 아래 포스터를 바탕으로 많은 홍보 부탁드립니다. ;-)

세미나 포스터 업데이트 했습니다. ^^
그리고 http://www.onoffmix.com/e/ecomist/1505 로 등록해주는 센스 부탁~



저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  6개가 달렸습니다.
  1. 인원수의 제한은 없는 건가요?
  2. 악!? 5월 1일...!!!

    아주 중요한 약속이 있는..날...이네요;;

    흙... 안되겠어요 갈 수 없을것 같네요

    선진님 그냥 LISP 초보자용 책 써주세요 ㅠㅠ



    덧 :: 왜 Tistory에서 트랙백이 안날아가는 걸까요...;; 참 이상하군요... ㅋ
  3. 멋진 세미나가 열리는 군요!

    조금 미리 공지가 되었으면 시간을 확보했을 텐데~
    무척이나 가고 싶은데, 참석할 수 있을 지 확실하지 않네요.

    암튼 Lisp 세미나가 열린다는 사실 자체가 뿌듯합니다.
    이런 다양한 언어 세미나가 자주 열리면 좋겠어요.

    ps. 포스터의 아이디어도 멋지군요 ㅎㅎ
  4. 방금 전에 Lisp 세미나 참가 신성했습니다.
    오랜 만에 글 올립니다. 그 사이 Study도 끝내시고 이렇게 멋진 세미나까지 준비하셨다니.....
    역동적으로 진행하시고 행동으로 보여주시는 모습이 너무 아름답습니다.
    스터디 했던 동영상 보게 되었는데요, 이제 쪼금씩 이해가 가기 시작했어요...
    CLOS도 처음 들을 때는, 전혀 먼 소린지 몰랐는데, 어제 약간 감이 잡히더라구요.
    이렇게 수고해 주신 덕에 많이 배우고 갑니다.
    고맙습니다.
    • 안녕하세요~ 미지의 세계님 :-)
      그간 잘 지내고 계셨는지요~ 저도 참 놀라운게 어느새 Lisp 세미나를 준비하고 있더군요~
      항상 주변에 관심이 중요한것 같습니다.
      그리고 세미나 등록 진심으로 감사드립니다. 나름 소중한 선물들을 준비했으니 오셔서 좋은 Lisp 세미나도 듣고 경품도 가져가셨으면 좋겠네요~ ^^
  5. 40명 등록이 넘어섰네요! 국내에서 Lisp 세미나가 열리고 참석인원이 모두 마감되어 대기자까지 있다니 이상 야릇한 기분이네요. 해외에서 Lisp 프로그래밍 하고 있지만, 간접적으로 지켜보기만 해도 왠지 으쓱한 느낌입니다. 잘 하시고 계속 많은 성과 이루어 내시기를 진심으로 기원합니다. 파이팅!
secret
Eclipse를 이용하여 Clojure의 개발 환경을 구축하는 방법을 알아보고자 합니다. 매우 간단하고 쉽습니다. 
Step by Step으로 진행하여 그 유명한 HelloWorld를 한번 실행해 보겠습니다.

우선 이클립스 3.4 이상이 설치되어 있다고 가정하겠습니다. 아울러 JDK 5(1.5)나 6를 설치하였다고 가정하겠습니다.

1. counterclockwise 이클립스 플러그인 설치
자 이렇게 설치가 되었다면, counterclockwise라는 이클립스 플러그인을 설치해야 합니다. 참고로 counterclockwise는 이클립스 하에서 Clojure를 개발할 수 있는 플러그인으로 REPL을 지원하며 신택스 강조(Syntax higlighting)이나 코드 완성(Code completion) 등을 지원합니다. 다양한 기능에 대한 내용은 counterclockwise 사이트를 참고하시기 바랍니다.

자, Help > Install New Software... 를 선택합니다.

그러면 다음과 같은 창이 나타납니다. 오른쪽 위에 있는 Add... 버튼을 클릭하고 이클립스 플러그인 업데이트 사이트의 주소를 Location에 입력해주세요~ 주소는 http://updatesite.counterclockwise.googlecode.com/hg/ 입니다. Name은 간략하게 Counterclockwise라고 넣겠습니다.

Next 버튼을 클릭하면 다음과 같은 화면이 나타납니다. 아래와 같이 선택하시고 Next 버튼을 클릭하세요. 그 다음에 License 부분도 Accept 하시고 Next 버튼을 클릭하고 난 후 이클립스를 재시작하여야 합니다.


2. Hello World 작성하기
Counterclockwise 플러그인을 잘 설치하셨다면, 본격적으로 Hello World를 찍어보러 가겠습니다. CTRL + N이나 File > New > Other를 누르시면 다음과 같이 Clojure Project를 선택하실 수 있습니다. 선택하고 Next를 클릭합니다.



다음으로 Project name을 입력합니다. 저의 경우 HelloClojure로 하였습니다. 원하시는 프로젝트 명을 넣으시면 됩니다. 그리고 Finish를 클릭하시면 Clojure 프로젝트가 생성됩니다.


처음 프로젝트가 생성되면 다음과 같습니다. 참고로 clojure.jarclojure-src.jar 그리고 clojure-contrib.jarclojure-contrib-src.jar가 자동으로 포함됩니다. 따라서 Clojure에 관련된 JAR를 별도로 받으실 필요가 없습니다.


Clojure REPL을 실행하시려면 다음과 같이 프로젝트를 선택하시고 오른쪽 버튼을 클릭하시고 Run As > Clojure REPL을 선택하시면 Clojure REPL이 나타납니다.

Lisp 다운 Hello World를 해보면 아래 화면과 같습니다. ;-)


너무 간단하죠 ^^~ Clojure 파일을 만들어서 한번 Hello World를 작성해보겠습니다. Clojure 파일은 확장자가 clj 입니다. 다음과 같이 src 디렉토리에서 New > Clojure File을 선택합니다.


새로 만들 Clojure File의 File name을 입력합니다. 저의 경우 HelloWorld를 입력하였습니다.


매우 간단하게 HelloWorld를 작성해보았습니다. 소스는 아래 화면을 참조해주세요~
HelloWorld.clj를 선택하고 Run As > Clojure REPL을 선택하시면 아래의 Console view에서 Clojure REPL이 실행되며, (hello)를 입력하면 우리가 원하던 Hello World가 출력됩니다.


상당히 간단하죠~ 알고보면 Lisp도 쉽다고 생각합니다~ 물론 아직도 이해안되는 부분이 많습니당~ ^^;

앞으로 Clojure를 바탕으로 Lisp 프로그래밍에 대한 내용을 종종 올리겠습니다.
감사합니당~
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  6개가 달렸습니다.
  1. 감사합니다~^^
  2. 저도 방금 Hello World 끝냈습니다.
    멋진 설명 감사합니다.
  3. 감사합니당 덕분에 hello world를 찍었어용!!
  4. 작명이어려워 2011.04.30 01:29 신고
    좋은 설명 감사드립니다. 출처 밝히고 펐습니다. 혹시 노출을 꺼리시면 내리도록 하겠습니다~
  5. 글내용 그대로 따라 했는데 eclips에서 아래 내용을 수행했을 때 그냥 1:1 user=> 요것만 보이네요.
    <수행한 내용>
    Clojure REPL을 실행하시려면 다음과 같이 프로젝트를 선택하시고 오른쪽 버튼을 클릭하시고 Run As > Clojure REPL을 선택하시면 Clojure REPL이 나타납니다.
    </수행>

    플러그인 설치시에는 3가지가 보이길래 모두 선택해서 설치도 해봤고, 3가지중 맨 위에 하나만 설치를 하고 다시 위에서 수행한 테스트를 해봐도 결과는 동일합니다. 그리고 웹에서 쉽게 찾을 수 있는 helloworld 다른 예제를 수행해봐도 정상이 아니네요...뭐가 잘못된건지 혹시 추측이 되시는지요?
    • 아 정말 오랜만에 답글 올리네요~
      저도 간만이라 다시 봐야할 것 같습니다.

      포스팅 내용 점 업데이트 해야겠네요~
      업데이트 후 답글 남기겠습니다.
      감사합니다.
secret
Lisp의 깊은 바다를 헤매이다가 Lisp의 객체 지향(Object-Oriented)에 대하여 이번에 알게 되었습니다.
나름 객체지향에 대한 일정 수준의 이해가 있다고 생각했던 저에게 Lisp의 객체지향은 그야말로 하나의 충격이었습니다.

Lisp은 우아하게 그리고 너무도 자연스럽게 객체 지향을 매우 깊이 있게 지원하고 있었습니다.

이 괄호로 둘러싸여 이상하게 보이는 언어는 AOP(Aspect Oriented Programming)를 이미 포용하고 있었으며 독특하면서도 특별한 객체 지향의 모습을 멋지게 보여주었습니다.

너무도 멋진 이 Lisp의 객체 지향 관련된 기능은 Common Lisp에서는 CLOS(Common Lisp Object System)이라고 부릅니다.
여러분중에 객체에 대하여 난 좀 알고 있다고 생각하시는 분들이라면 아래의 동영상을 한번 깊이있게 들어보시기 바랍니다.

아래 동용상은 "Lisp을 좋아하는 사람들의 그룹(한국 리스퍼)" 에서 지난 주(2010년 1월 9일)에 진행한 2010년 첫 스터디에서 김영태님이 발표한 내용입니다. 현재 "Lisp을 좋아하는 사람들의 그룹(한국 리스퍼)" 에서는 Practical Common Lisp(http://www.gigamonkeys.com/book/) 이란 책을 가지고 Lisp을 공부중에 있습니다. 그 중 16장과 17장에 관한 내용입니다.

여러분이 생각하는 것보다 더욱 멋지고 우아하고 강력하게.. 그래서 폴(Paul Graham)아저씨가 말했듯이 Lisp은 모든 프로그래밍 언어 중에 언어라는 것을 알려줍니다.


자~ 새로운 객체 지향 Lisp의 세계로 여러분을 초대합니다.

1부


2부



참고로 유투브에서도 확인하실 수 있습니다. 주소는 http://www.youtube.com/watch?v=Sdq9NN98s3A&feature=player_embedded 입니다.

다른 어떤 언어보다도 Lisp을 공부하고 있는 제가 좋습니다. 이렇게 말하면 Lispy한 것일까요~ ㅎㅎㅎ

"Lisp을 좋아하는 사람들의 그룹(한국 리스퍼)"에서는 매주 토요일 Lisp 오프라인 스터디를 진행하고 있습니다.
관심있는 분들의 많은 참여 부탁드립니다. 저희 그룹은 Lisp을 공부하지만 Lispy하지 않아요~ :-)

저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret
카네기 멜론에서 나온 Common Lisp: A Gentle Introduction to Symbolic Computation 책을 "Lisp을 좋아하는 사람들의 그룹"에서 공부한 후 현재는 ANSI Common Lisp 책을 읽고 있습니다.

Common Lisp은 Lisp을 처음 접하시는 분들에게 상당히 훌륭한 책이라고 생각합니다. 저 역시 이 책을 Lisp을 좋아하는 사람들의 그룹에서 진행한 오프라인 스터디를 통하여 공부하였는데, 많은 도움이 되었습니다.

혹시 Common Lisp 책을 공부하시는 분들 중에 참고자료를 찾으시는 분들이라면 저희 그룹에서 진행한 오프라인 스터디 동영상을 한번 참고하시기 바랍니다. 저희 위키 사이트인 http://lisp-korea.wikispaces.com/Common+Lisp 에 동영상 강의를 잘 모아서 올려 놨습니다.

현재 Lisp을 좋아하는 사람들의 그룹 에서는 Practical Common Lisp 책을 바탕으로 함께 오프라인 스터디를 진행하고 있습니다.
음.. Practical Common Lisp 책에 대한 개인적인 의견은 책의 명성만큼 잘 정리된 책은 아닌듯합니다.

사실 그렇게 느끼는 이유중에는 제가 아직 Lisp의 많은 부분을 모르기 때문이기도 합니다.



해서 최근 Paul Graham 아저씨가 쓰신 ANSI Common Lisp을 읽고 있습니다. 저희 김영태님께서 소개해주셨는데, 정말 궨찮은 책인것 같습니다.
제 부족한 Lisp 실력에 따악 맞는 책인것 같습니다. :-)

국내에서는 해커와 화가로 유명하신 Paul 아저씨의 글을 읽으면서 따악 Lispy한 느낌을 받습니다.

뭔가 간결하면서도 따악 할말만 하시는 Paul 아저씨~ Lisp을 공부하시는 분이라면 한번 참고하시면 좋겠습니다. :-)
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  3개가 달렸습니다.
  1. 덕분에, 시야에 안들어와있던, ANSI Common Lisp 구해서 보고있습니다. 감사합니다~^^
  2. Practical Common Lisp
    OOP in Common Lisp
    On Lisp
    Paradigms of AI Programming
    Art of MetaObject Protocol

    제 경우 Common Lisp 프로그래밍을 배우는 것은 위의 순으로 읽어볼 것을 권합니다. 책 제목이 다 맞는지 모르겠네요. 아뭏든 무슨 책이 되었든 열심히 하시기 바랍니다.
  3. 참, HyperSpec을 꼭 설치해서 프로그래밍 도중에 참고하실 것을 권합니다. (그리고 위의 책 목록은 제 생각으로는 가장 짧고 지금까지 존재하는 경우의 방법중 가장 완벽하게 CL을 마스터하는 방법이라고 말씀드리고 싶네요)
secret

http://blog.liverpoolmuseums.org.uk/AuthorView,author,stepheng.aspx


어제(2009년 9월 22일) 오후 7시 30분 토즈 강남점에서 드디어 첫 오프라인 Lisp 스터디 모임을 시작하였습니다.

마치 작은 배가 첫 출항을 하듯이 조심스럽게 준비해온 이번 첫 오프라인 스터디 모임에 제 생각보다 많은 분들이 참여해주셨습니다.
토즈에 예약을 잡을때는 7인실로 예약을 했었습니다. 최소 5명정도는 오실 것 같아서 나름 여유있게 예약을 했었습니다. 제가 처음 도착한 후 얼마 있다가 별파란(박성민)님이 오셨습니다.

별파란은 Lisp을 좋아하는 사람들의 그룹(한국 리스퍼)의 운영자로도 활동하고 계셔서 서로 오늘 몇분이나 오실지 궁금해하면서 기다리고 있었습니다. 그렇게 7시 30분이 지난 후 김영태님이 오시고, 조금 있다가 이은지님과 권순범님이 오시고 조성식님과 민정상님이 오셨습니다. 어느새 7인실이 꽉 차있는데 엄익훈님과 이원찬님이 오셨습니다.

제가 예상했던것 보다 정말 많은 분들이 참여해주셨습니다. :-)

사실 이 오프라인 스터디는 아주 오랜 사연을 가진 스터디 모임입니다. 멀리 충남에서 오신 이은지님이 예전에 제 블로그를 보고 저에게 Lisp에 대한 공부를 하고 싶다는 메일을 보내신적이 있습니다. 이은지 님의 경우 프로그래밍에 대한 경험이 없으시기 때문에 많은 걱정을 하시고 계셨습니다.

사실 그때 저 역시 Lisp에 대하여 관심을 가지고 이런 저런 자료를 모으고 보고 있을 때 였습니다.

아시다시피 우리나라에는 Lisp에 대한 자료가 많지 않습니다. 그래서 이은지님과 같이 Lisp에 관심을 가지고 계시지만, 너무도 관련 자료가 없기 때문에 시작하지 못하시는 분들이 많습니다. 저 역시도 그러한 부분들을 많이 느끼고 있었던 차라 많은 동감을 하고 있었습니다.

그래서 Lisp을 좋아하는 사람들의 그룹(한국 리스퍼) 을 구글 그룹스에 만들고, Lisp을 좋아하시는 분들과 함께 스터디를 할 수 있도록 여러차례 회원님들과 의견을 나누고 있었습니다. 올 초에도 오프라인 스터디를 하려고 시도하다가 어제 드디어 첫 오프라인 스터디 모임을 시작하게 된 것입니다.

이러한 사연을 가지고 있는 오프라인 스터디 모임이기에 저는 이 스터디 모임이 매우 소중한 스터디 모임이라고 생각합니다.

특히 어제 오신분들은 프로그래밍이나 IT에 직접적인 관련이 없으신분들이 많습니다. 다른 프로그래밍 언어의 경우 IT 분야에 종사하시는 분들이 많지만, 어제 오신분들의 경우 인지공학이나 어학 및 작곡등을 하시는 분들이 오셨습니다.

Lisp이 많은 분야에서 다양하게 적용되고 있고, 많은 분들이 충분히 관심을 가질만한 언어라는 점이 모이신 분들만 보셔도 알 수 있을 것이라고 생각됩니다. 저 역시 Lisp에 이러한 다양한 매력이 좋습니다. 각자 Lisp에 어떻게 관심을 가지게 되었는가에 대한 이야기를 들어보면 이러한 사실을 확인하실 수 있습니다.

본격적인 스터디에 앞서 Lisp 스터디를 잘 하기 위한 여러가지 것들에 대하여 이야기를 나누었습니다. 역시 어떤 책을 중심으로 스터디를 하겠는가에 대한 이야기를 많이 나누었습니다.

이미 Lisp에 대하여 많이 아시는 분들도 계셔서 좋은 조언을 통하여 Common Lisp이란 책을 선정하였습니다. 이 책을 선정한 배경에는 처음 Lisp을 접하시는 분들도 계시며, 처음부터 Lisp의 기초를 빠르게 다함께 살펴보기에 매우 좋은 책이기 때문입니다. 사실 저는 아직 이 책을 보지 못하였지만, 온라인 상에 PDF가 공개되어 회원님들과 함께 살펴보면서 처음 Lisp을 접하시는 분들에게 참 좋은 책이라는 생각하게 되었습니다.

이 책을 통하여 저 역시 Lisp의 기초를 다져보려고 합니다. 사실 저도 아직 Lisp에 관하여 많이 안다고 할 수 없기에, 이 책이 저와 회원님들에게 Lisp에 대한 기초를 튼튼히 다져줄 것이라고 생각합니다. :-)

스터디 방식은 챕터를 맡아서 챕터에 대한 설명을 드리는 방식으로 정했습니다. 각자 챕터를 읽어오는 것을 기본으로 하되 각 챕터를 맡으신 분이 핵심적인 부분을 설명하고, 자연스럽게 Q&A를 하여 궁금한 점들을 서로 풀어가면, Lisp에 이해를 충분히 높일 것 이라고 생각합니다.

스터디 일정을 다음과 같이 하기로 하였습니다.
 일정  Chapter  맡으신 분
 09월 26일 오전 10시 1, 2, 3  조성식 님
 10월 10일 오전 10시  4, 5  장선진 님
 10월 17일 오전 10시  6, 7
 김영태 님
 10월 24일 오전 10시  8, 9  박성민 님
 10월 31일 오전 10시  10, 11
 민정상 님(10장), 이봉근 님(11장)
 11월 7일 오전 10시  12, 13
 이원찬 님
 11월 14일 오전 10시
 14  엄익훈 님

모임은 토즈 강남점에서 하기로 하였습니다. 그리고 이은지 님이 총무님을 맡아주시기로 하였습니다.

이번 주 토요일 10시부터 본격적인 스터디에 들어갑니다. 재미있고 유익한 오프라인 스터디가 될 수 있도록 노력하겠습니다. ;-)
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret
안녕하세요~ 장선진 입니다. :-)

드디어 Lisp 오프라인 스터디를 위한 의겸 수렴 내역을 공개하겠습니다. 지난 1주일간 http://spreadsheets.google.com/viewform?formkey=dDVDSFg4WkJOcU5UQzFSZnFXN1lSeEE6MA 에서 Lisp 관련 오프라인 스터디를 의한 의견 수렴을 하였습니다.

이번 의견 수렴에는 현재까지 총 14분이 본 의견 수렴에 참여해주셨습니다.

그리고 10분이나 Lisp 오프라인 스터디에 참여해주신다고 의견을 주셨습니다. 올레~ ;-) 매우 경이적입니다. 아마 첫 의견 수렴 결과를 기억하시는 분들께서는 본 결과가 매우 의미있다는 것을 익히 알고 계실 것입니다.

왜냐하면 Lisp 오프라인 스터디를 위한 1차 의견 수렴때에는 적극적으로 오프라인 스터디에 참여하신다는 의견아 3분이 채 안되었기 때문입니다. 그것도 2달에 1번 참여 등의 의견이 주를 이루었습니다.

하지만 이번 의견 수렴 결과에서는 적극적으로 1주일에 1회 참여하신다고 설문에 응답해주신 분들이 12분이나 되었습니다.
따라서 이제 본격적으로 오프라인 스터디를 추진하고자 합니다. 의견 수렴의 결과는 다음과 같습니다.



간소한 차이로 화요일 저녁에 모임을 가지는 것을 선호하셨습니다. 또한 장소는 강남역 근처가 가장 우세했습니다. 역시 지리상으로는 강남역 근처가 대세군요 :-)

이에따라 다음 주 화요일(2009년 9월 22일) 저녁 7시 30분에 강남역 근처에 토즈 강남점에서 첫 오프라인 스터디를 진행하고자 합니다.
직장인들을 고려하여 7시 30분으로 잡았습니다. 우선 토즈에서 간단히 모여서 오프라인 스터디에 대한 본격적인 의견을 나누고 간단한 뒷풀이를 진행하고자 합니다. 토즈 사용비와 간단한 뒷풀이 비용으로 1만원씩의 회비를 걷을 예정입니다. 토즈 강남점을 잘 모르시는 분은 아래 약도를 참고하시구요~ 토즈 강남점에 도착하시면 010-4585-1770으로 연락주세요 :-)



자~ 이제 본격적인 Lisp 오프라인 스터디가 시작됩니다. Lisp에 관심 있으신 분은 망설이지 마시고 다음 주 화요일에 토즈로 오세요~ 함께 Lisp을 즐겨 보아요 ;-)
아직 Lisp을 좋아하는 사람들의 그룹(한국 리스퍼)에 가입하지 않으신 분들은 http://groups.google.com/group/lisp-korea에 가셔서 가입해주시기 바랍니다. 그리고 참석 여부를 알려주세요~ 토즈 예약시 참고하려고 합니다.
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret