'Architecture for Software'에 해당되는 글 77건
- 2010/07/29 클라우드 컴퓨팅과 Google App Engine에 대하여
- 2010/07/12 App Inventor for Android와 스퀵의 스크레치(scratch)
- 2010/05/03 제 1 회 Korea Lisp 세미나 후기 :-) (20)
- 2010/04/25 드디어 우리나라 첫(?) Lisp 세미나가 열립니다! (10)
- 2010/04/06 [안드로이드 이야기] 안드로이드란 무엇인가? (8)
- 2010/03/20 새로운 웹 프로그래밍의 세계: Hunchentoot로 웹 사이트 제작하기 (11)
- 2010/03/05 리눅스 커널(Linux Kernel)로 여행을 떠나시는 분에게 (2)
- 2010/02/26 스마트폰(Smartphone) 운영체제에 대한 정리 및 전망 (24)
- 2010/02/17 Clojure 개발 환경 구축하기
- 2010/01/12 Lisp의 객체지향은 그 무엇보다 강력했다.
혹시 슬라이드 쉐어에서 보기 힘드신 분들을 위하여 PDF 파일을 첨부합니다.
제 생각에는 아마도 발표자료의 흐름이 빠르기 때문에 보시기가 쉽지 않을 수 있습니다. 데브멘토에서 제 발표를 녹화하여 올려져 있습니다. 참고삼아 한번 보시는 것도 좋을 것 같습니다. 여튼 좋은 참고가 되셨으면 좋겠습니당~
'Architecture for Software > Google App Engine' 카테고리의 다른 글
| 클라우드 컴퓨팅과 Google App Engine에 대하여 (0) | 2010/07/29 |
|---|---|
| Google App Engine for Java 용 Maven 프로젝트 구축하기 (2) | 2009/09/09 |
| GAE for Java용 이클립스(Galileo) 플러그인 설치하기 (2) | 2009/08/28 |
오늘 새롭고 재미있는 안드로이드 개발 툴에 관한 소식을 접하였습니다. App Inventor for Android란 이름의 이 툴은 마치 스퀵(Squeak) 기반의 스크레치(scratch) 프로그램과 같이 안드로이드 프로그래밍을 할 수 있도록 구성되어 있습니다.
출처: http://arstechnica.com/old/content/2007/07/new-educational-tool-makes-programming-like-playing-with-lego-bricks.ars
마치 레고 블럭을 쌓듯이 프로그래밍하는 방식입니다. 스크레치(scratch) 프로그래밍은 정말 직관적이고 재미있습니다. 아직 접해보지 못하신 분들에게 강추합니다. :-)
그 유명한 구글의 Beta라는 이름을 달고 나온 App Inventor for Android역시 스크레치(scratch)와 유사한 구조를 가지고 있습니다. UI적인 컴포넌트 블록들과 각 제어 블럭들을 연결하고 쌓아올리다보면 어느새 안드로이드 어플리케이션이 작성되도록 되어 있습니다.
App Inventor for Android을 보면서 아이들이나 청소년을 위한 안드로이드 교육시 활용한다면 참 재미있겠다는 생각을 하였습니다. 기회가 된다면 한번 해보고 싶네요~ :-)
스크레치(scratch)와 App Inventor for Android가 너무도 닮았다고 생각하는 순간 App Inventor for Android의 설명을 보니 스크레치(scratch)를 개발한 MIT 미디어 랩의 영향을 받은 Open Blocks Java library를 블록 프로그래밍하는데 응용하였습니다.
사실 이렇게 본다면 App Inventor for Android는 언어와 환경만 다른 스크레치(scratch)프로그램이라고 볼 수 있습니다.
새로운 시대와 환경에 맞는 진보를 한 것이죠~ 그리고 오픈 소스를 활용하여 빠르게 개발한 것이 특징이라고 볼 수 있습니다.
프로그래밍이 하나의 놀이가 되는 세상~ 정말 얼마 안남은 것 같습니다.
이러한 관점에서 본다면, 점 복잡하긴 하지만 우리의 프로그래밍도 하나의 놀이이지 않을까요~ 물론 안드로이드 프로그래밍에 저 역시 불만 있습니다만 App Inventor for Android를 보면서 확실히 프로그래밍의 관점이 많이 달라지고 있는 것을 새삼 느꼈습니다~ ;-)
'Architecture for Software > Android' 카테고리의 다른 글
| App Inventor for Android와 스퀵의 스크레치(scratch) (0) | 2010/07/12 |
|---|---|
| [안드로이드 이야기] 안드로이드란 무엇인가? (8) | 2010/04/06 |
| 스마트폰(Smartphone) 운영체제에 대한 정리 및 전망 (24) | 2010/02/26 |
| Android의 3D에 대하여 (2) | 2009/09/22 |
드디어 제 1 회 Korea Lisp 세미나를 성황리에~ 잘 마쳤습니다. :-)
우선 와주신 모든 분들에게 진심으로 감사드립니다. Lisp 이란 언어가 그리 많은 관심을 가지는 언어가 아니기 때문에 사실 준비하면서 많은 고민을 했었는데~ 이번 세미나를 통하여 정말 많은 분들이 Lisp에 대하여 많은 관심을 가지고 계시다는 것을 확인할 수 있었습니다.
저희가 마련한 장소가 원래 최대 30명이었습니다.
아울러 본 세미나를 Lisp을 처음 접하시는 분들을 위한 세미나입니다. 따라서 Lisp의 문법을 다루기 보다는 Lisp의 다양한 활용을 확인하실 수 있도록 구성하였습니다. 그래서 정말 다양한 세션으로 구성하였습니다. 나중에 Feedback을 받아보니~ 조금 더 깊은 내용을 원하시는 분도 계셨습니다. 하반기나 내년쯤에는 Hand-on Lab 형식의 세미나도 생각중입니다. 실제 Lisp 코드를 한번씩 짜보는 세미나를 통하여 Lisp을 접할 기회를 드리고 싶네요~
생각보다 리허설에 시간이 많이 걸렸습니다. 약 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) 해요~ :-)
'Architecture for Software > Lisp' 카테고리의 다른 글
| 제 1 회 Korea Lisp 세미나 후기 :-) (20) | 2010/05/03 |
|---|---|
| 드디어 우리나라 첫(?) Lisp 세미나가 열립니다! (10) | 2010/04/25 |
| 새로운 웹 프로그래밍의 세계: Hunchentoot로 웹 사이트 제작하기 (11) | 2010/03/20 |
| Clojure 개발 환경 구축하기 (0) | 2010/02/17 |
| Lisp의 객체지향은 그 무엇보다 강력했다. (0) | 2010/01/12 |
| ANSI Common Lisp 책을 읽고 있습니다. (5) | 2010/01/08 |
-
김종민 2010/05/03 23:58
Lisp 세미나에서 뜻밖에 만나뵙게 되어 좀 놀라기도 했고, 너무나 편안히 말씀을 잘 해주셔서 즐거운 시간이었습니다. 기계학습에 관심이 있는 터였는데 ACT-R에서 무척 흥미로웠구요. 빠른 시간안에 Lisp에 발을 담궈보도록 하겠습니다. 수고 많으셨습니다.
-
장선진 jangsunjin 2010/05/06 13:26
안녕하세요~ 김종민님 :-)
좋은 시간이 되셨다니~ 다행입니다. 첫 세미나인 관계로 점 긴장하긴 했거든요~ 함께 Lisp을 공부하면 좋겠네요~ ;-)
-
-
-
권용순 2010/05/04 14:53
^^ 박카스는 [궈뇽협찬] 이였습니다.
"자발적 후원"이라고나 할까요 ^^
저도 나름 보람찬 하루였습니다. 게다가 '인사이트' 싸장님!도 뵙고 말이죠.
다음에 또 뵙겠습니다. 고생하셨습니다! -
강현부 2010/05/04 16:14
정말 뜻깊은 시간이었겠습니다.
참석 하고 싶었지만 다른 사정이 생기는 바람에 아쉽게 불참 하였네요..
정말 좋은 기회였는데 말이죠;;
솔직히 Lisp이란것을 잘 몰라 꼭 참석하여 Lisp을 조금이나마 알고 싶었는데 너무 아쉽습니다.
다음에 기회가 있다면 꼭 참석하도록 하겠습니다^^-
장선진 jangsunjin 2010/05/06 13:31
안녕하세요~ 강현부님~
다음에는 미리 오래전부터 공지해드리겠습니다.
장소를 늦게 잡느라~ 점 시간이 걸렸습니다.
그리고 곧 동영상을 올려드리겠습니당~ :-)
-
-
-
타스케 2010/05/21 03:12
아 참여하지 못해서 정말 아쉽네요 ㅠㅠ
Lisp 에 관한 책이나 관련된 문서들이 좀 더 많아졌으면 하는 바람입니다.
초보자가 다가가기에는 정보가 너무 없습니다.. ㅠㅠ ^^;-
타스케 2010/05/21 03:19
정보가 너무 없다고 한 말이 무색할 정도로 올해엔 리스프 관련 글이 엄청 많아진 것 같네요!;;
작년 말에 MIT에서 제작한 Common-Lisp 프로그램까지만 시도하다가 말았더니.. ^^;
이거 또 다른 데 불붙겠는데요..;; -
장선진 jangsunjin 2010/05/21 05:59
안녕하세요~ 타스케님 :-)
많은 분들이 Lisp에 관심을 가지고 계신것 같습니다.
작년에 비한다면~ 정말 좋은 현상이라고 생각합니당~
그리고 작은 씨앗을 뿌린것 같아 매우 좋습니다~ ^^
조만간 Clojure 스터디도 준비중입니다~ 시간되시면~ 참여해서~ 불점 붙여주세용~ ^^~
-
-
박승훈 2010/06/06 14:06
안녕하세요?
참 좋은 자리가 마련되었군요.
국산CAD 캐디안(CADian)을 개발하는 인텔리코리아 에서도 다음 세미나 시에는
협찬할 수 있는 기회를 가질 수 있도록 해 주시기 바랍니다.
그리고 lisp 사용하시는 분들은
http://www.cadian.com/download/value_content.asp?idx=49 에서 평가판을 다운로드 받아서
현재 사용 중인 오토캐드 기반의 리습을 캐디안 에도 적용해 보시기를 바랍니다.
그럼.-
장선진 jangsunjin 2010/06/06 22:00
안녕하세요~ 박승훈님 :-)
정말 좋은 말씀감사합니다. Lisp의 경우 후원사를 찾기가 정말 어려웠는데~ 든든하네요~
Auto CAD 기반의 CAD Lisp 역시 좋은 레퍼런스가 될 것 같습니다. 다음 세미나때 꼭 연락드릴께요~
감사합니당~ :-)
-
-
박경현 2010/06/06 16:04
리습에 관심이 있지만, 초보자는 끼기 힘들겠네요.
빨리 ~ 열심히 공부해서 동참하고 싶네요.
http://cafe.naver.com/ilovecadian-
장선진 jangsunjin 2010/06/06 22:01
안녕하세요~ 박경현님 :-)
저 역시 아직 초보입니다. 그저 좋아서 배우고 있습니다.
최근 Clojure를 이용한 프로젝트를 구상중에 있는데~ 잘 될지 모르겠네요~
조만간 Clojure 스터디를 할 예정이니~ 그때 참여해주시면 좋겠습니당~ 스터디 일정 등이 정해지면 블로그에 올리겠습니당~ ^^
-
-
지난 1년여간 스터디 해온 결과를 종합하고 모든 분들에게 Lisp에 대하여 쉽게 이해하고 익힐 수 있는 시간이 될 것이라고 생각합니다.
자~ Lisp에 관심있는 분이라면~ 5월 1일 토요일 오후 2시까지 삼성멀티캠퍼스 702호로 오세요~
오시는 분들을 위하여 다양한 경품도 준비하였습니다.
가장 멀리서오시거나~ 가장 먼저오시거나 가장 늦게 오시거나~ 좋은 질문은 해주시거나 많은 홍보를 해주셨다면 누구나 좋은 경품을 가져가실 수 있습니다.
Lisp에 마음의 관심을 가지고 계셨던 분들의 많은 참여 부탁드립니다~ 그리고 아래 포스터를 바탕으로 많은 홍보 부탁드립니다. ;-)
세미나 포스터 업데이트 했습니다. ^^
그리고 http://www.onoffmix.com/e/ecomist/1505 로 등록해주는 센스 부탁~
'Architecture for Software > Lisp' 카테고리의 다른 글
| 제 1 회 Korea Lisp 세미나 후기 :-) (20) | 2010/05/03 |
|---|---|
| 드디어 우리나라 첫(?) Lisp 세미나가 열립니다! (10) | 2010/04/25 |
| 새로운 웹 프로그래밍의 세계: Hunchentoot로 웹 사이트 제작하기 (11) | 2010/03/20 |
| Clojure 개발 환경 구축하기 (0) | 2010/02/17 |
| Lisp의 객체지향은 그 무엇보다 강력했다. (0) | 2010/01/12 |
| ANSI Common Lisp 책을 읽고 있습니다. (5) | 2010/01/08 |
-
Subject fupfin의 알림
2010/05/02 06:32
드디어 우리나라 첫(?) Lisp 세미나가 열립니다!
-
Subject Outsider의 생각
2010/05/02 07:49
LISP 세미나도 있군요… 오덕들의 수다에서 많이 얘기나오던 LISP… 왠지 여기는 관심있으신 분들이 많으실것 같아서.. ㅎ
-
Subject 맹수의 생각
2010/05/04 02:15
[장선진] 삶을 위한 소프트웨어 :: 드디어 우리나라 첫(?) Lisp 세미나가 열립니다!
-
-
장선진 jangsunjin 2010/04/27 03:31
안녕하세요~ 장선진입니다.
자리는 30석인데요~ 최대 40분까지 가능하지 않을까 싶습니다~
아시다시피~ Lisp 전문 세미나인만큼 좌석에 큰 문제가 없을듯 싶네요~ ^^;;
오셔서 좋은 시간 가졌으면 좋겠습니다~
-
-
레몬에이드 2010/04/26 09:49
악!? 5월 1일...!!!
아주 중요한 약속이 있는..날...이네요;;
흙... 안되겠어요 갈 수 없을것 같네요
선진님 그냥 LISP 초보자용 책 써주세요 ㅠㅠ
덧 :: 왜 Tistory에서 트랙백이 안날아가는 걸까요...;; 참 이상하군요... ㅋ-
장선진 jangsunjin 2010/04/27 03:33
에공~ 지환님~
안타깝군요~
책은 아마도 정말 후반기에 하나 쓸것 같습니다~ 회원님들이랑 활발하게 논의중인데요~ 가능하면 올해 안에 한번 도전해보겠습니다.
그리고 나중에 동영상으로도 올려놓겠습니다. 혹시라도 못오시는 분들에게 도움이 되었으면 좋겠네요~ ^.~
-
-
네피림 2010/04/26 12:20
멋진 세미나가 열리는 군요!
조금 미리 공지가 되었으면 시간을 확보했을 텐데~
무척이나 가고 싶은데, 참석할 수 있을 지 확실하지 않네요.
암튼 Lisp 세미나가 열린다는 사실 자체가 뿌듯합니다.
이런 다양한 언어 세미나가 자주 열리면 좋겠어요.
ps. 포스터의 아이디어도 멋지군요 ㅎㅎ-
jangsunjin 2010/04/27 03:29
^^ 안녕해세요~ 네피림님~
포스터 아이디어는 함께 만들어 냈습니다. 제가 디자이너가 아니라서 점 꾸미는데 힘들었지만~ ㅎㅎㅎ
궨찮게 봐주시니 다행입니다. 포스터 업데이트했습니다.
시간되시면 꼭 참여해주시면 좋겠네요~ ^.~
-
-
미지의세계 2010/04/27 14:06
방금 전에 Lisp 세미나 참가 신성했습니다.
오랜 만에 글 올립니다. 그 사이 Study도 끝내시고 이렇게 멋진 세미나까지 준비하셨다니.....
역동적으로 진행하시고 행동으로 보여주시는 모습이 너무 아름답습니다.
스터디 했던 동영상 보게 되었는데요, 이제 쪼금씩 이해가 가기 시작했어요...
CLOS도 처음 들을 때는, 전혀 먼 소린지 몰랐는데, 어제 약간 감이 잡히더라구요.
이렇게 수고해 주신 덕에 많이 배우고 갑니다.
고맙습니다.-
jangsunjin 2010/04/28 18:51
안녕하세요~ 미지의 세계님 :-)
그간 잘 지내고 계셨는지요~ 저도 참 놀라운게 어느새 Lisp 세미나를 준비하고 있더군요~
항상 주변에 관심이 중요한것 같습니다.
그리고 세미나 등록 진심으로 감사드립니다. 나름 소중한 선물들을 준비했으니 오셔서 좋은 Lisp 세미나도 듣고 경품도 가져가셨으면 좋겠네요~ ^^
-
-
Lisper 2010/04/28 19:40
40명 등록이 넘어섰네요! 국내에서 Lisp 세미나가 열리고 참석인원이 모두 마감되어 대기자까지 있다니 이상 야릇한 기분이네요. 해외에서 Lisp 프로그래밍 하고 있지만, 간접적으로 지켜보기만 해도 왠지 으쓱한 느낌입니다. 잘 하시고 계속 많은 성과 이루어 내시기를 진심으로 기원합니다. 파이팅!
-
장선진 jangsunjin 2010/04/28 23:27
안녕하세요~ Lisper 님
해외에서 Lisp 프로그래밍을 하신다니 정말 많이 궁긍합니다. ^^
저 역시 많은 분들께서 참가 신청을 해주셔서 정말 날라갈듯한 기분입니다. 처음 "Lisp을 좋아하는 사람들의 그룹"을 만들어서 번개를 할 때 별파란님 한분만 오셨었거든요~ ㅎㅎㅎ
지금은 많은 분들께서 관심을 가져주셔서 정말 좋습니다.
저 역시 정말 기분좋은 일이구요~ 앞으로 많은 조언 부탁드립니다.
저도 회사에서 프로그래밍을 열심히하고 있는데, 아직까지 Lisp을 실무 프로젝트에서 적용시키지 못하고 있거든요~
아마도 하반기정도에 잘하면~ Clojure를 바탕으로 회사의 프로젝트에 적용할 수 있을것 같습니다.
여러모로 기분 좋은 행사에 깊은 지식을 전달해야 하는데~ 제가 아직 많이 부족해서 잘 할지 모르겠네요~
나중에 동영상 올릴 예정이니~ 보시고 의견부탁드립니다.
감사합니다. :-)
-
언제 얼마큼 연재할지 모르겠지만~ 제가 알고 있는 지식들을 정리하여 여러분들과 함께 나누기 위한 내용을 중점적으로 다루겠습니다.
첫번째로 안드로이드(Android)란 무엇인가에 대한 내용을 다루어 보겠습니다.
안드로이드란 무엇인가?(What is Android?)
이 질문에 대한 가장 정확한 답은 http://www.android.com/about/ 에서 찾을 수 있습니다. 공식적인 안드로이드 사이트이자 Android에 대한 가장 신뢰할 수 있는 정보를 제공하는 사이트이기 때문입니다. 아울러 http://developer.android.com/guide/basics/what-is-android.html 에서 정의된 내용을 바탕으로 안드로이드에 대한 정의를 내리는 것이 좋다고 생각됩니다.
안드로이드(Android)는 OHA(Open Handset Alliance)에서 개발된 운영체제(OS)와 미들웨어(Middleware) 및 핵심 모바일 어플리케이션을 포함한 모바일 기기를 위한 소프트웨어 스택이라고 할 수 있습니다.
안드로이드는 공개되어 있습니다.(Open)
이러한 환경은 완전히 공개되어 있습니다.
예를들어, 사용자를 위한 더욱 응집되고 풍부한 경험이 녹아있는 어플리케이션을 창조할 수 있도록, 전화를 걸거나, 문자를 보내거나, 카메라를 사용하는 등의 핸드폰의 핵심 기능을 호출하여 사용할 수 있습니다.
안드로이드는 공개된 리눅스 커널(Linux Kernel)을 기반으로 하고 있습니다.
더욱이, 모바일 환경에서 하드웨어 리소스와 메모리 최적화를 위하여 설계된 커스텀 가상 머신을 사용하고 있습니다.
안드로이드는 오픈 소스(Open Source) 입니다.
즉, 오픈 소스를 이용하여 새로운 최신 기술들을 바탕으로 자유롭게 확장할 수 있습니다. 이를 통하여 개발자 커뮤니티들이 함께 혁신적인 모바일 어플리케이션을 구축하듯이 안드로이드 플랫폼은 지속적으로 진화할 것입니다.
어플리케이션은 동일하게 창조되었습니다.(All applications are created equal)
안드로이드 플랫폼을 사용하는 기기에서 사용자들은 취향에 따라 모든 것들을 정의할 수 있습니다.
사용자들은 핸드폰의 홈스크린(Homescreen)과, 다이얼 스타일 및 어떠한 어플리케이션이라도 교체할 수 있습니다. 심지어 모든 사진들을 볼 때 사용하는 사진 보기 어플리케이션을 선호하는 것으로 변경할 수 있습니다.
어플리케이션의 경계가 존재하지 않습니다.(Breaking down application boundaries)
예를 들어, 개발자들은 핸드폰에 있는 사용자의 연락처, 일정, 위치 정보등과 같은 개인적인 정보를 웹에서 조합하여, 사용자에게 더욱 유용한 경험을 제공할 수 있습니다. 즉 안드로이드 하에서, 개발자는 사용자의 친구가 주변에 있다면 만날 수 있는 기회를 제공하기 위하여 알려주는 어플리케이션을 구축할 수 있습니다.
빠르고 쉬운 어플리케이션 개발(Fast & easy application development)
예를 들어, 안드로이든 기기의 위치를 알 수 있또록 지원하여, P2P 기반으로 통신할 수 있는 풍부한 Social 어플리케이션을 지원합니다.
덧붙이면, 안드로이드는 높은 생산성과 깊은 통찰력을 바탕으로 개발자들이 어플리케이션을 제작할 수 있는 최상의 플랫폼이며, 이를 위한 툴들을 포함하고 있습니다.
이상으로 안드로이드의 정의가 끝났습니다.
흠~ 너무 안드로이드에 장점만 설명하는 정의입니다.
개인적으로 안드로이드는 풍부한 UX/UI 프레임워크가 부족하며, 아직 개발자들에게 풍부하고 생산성 높은 개발을 하기 위한 지원이 부족하다고 생각합니다.
안드로이드의 버전이 숨가쁘게 올라간 이유를 가만히 들여다 보면, 안드로이드가 그 만큼 안정성과 풍부한 라이브러리를 지원하지 못하였기 때문이라고 보입니다.
그런 면에서 아직도 안드로이드는 갈길이 멀은 스마트폰 OS 라고 판단됩니다. 다만 잠재력은 어느 스마트폰 OS 보다 높다고 판단됩니다. 아이폰의 아성을 넘을 수 있으려면, 나름 기다려야 할듯하지만요~ 아직도 컵케이크 속에 있는 안드로이드 처럼요~ (지금은 컵케이크 속에서 나왔습니다~ ^^)
다음에는 안드로이드의 주요 기능을 살펴보겠습니다.
혹시 궁금하신 점이나 부족한 점이 있으시면~ 언제든지 댓글 부탁드립니다. :-)
'Architecture for Software > Android' 카테고리의 다른 글
| App Inventor for Android와 스퀵의 스크레치(scratch) (0) | 2010/07/12 |
|---|---|
| [안드로이드 이야기] 안드로이드란 무엇인가? (8) | 2010/04/06 |
| 스마트폰(Smartphone) 운영체제에 대한 정리 및 전망 (24) | 2010/02/26 |
| Android의 3D에 대하여 (2) | 2009/09/22 |
-
cofcat 2010/04/07 02:30
안드로이드에 대한 좋은 정보 감사드려요^^
안드로이드가 계속 발전하고 이제 아이폰을 따라잡을 수준까지 온 것 같네요^^
이번에 열리는 tac 공모전에서 좋은 어플이 많이 나온다면 조금 더 따라잡지 않을까
기대중입니다^^ -
-
장선진 jangsunjin 2010/04/13 10:30
하이바네님 :-)
깊이 있는 질문 감사드립니다.
우선 안드로이드가 Linux Kernel을 이요한 것은 원래 Google이 안드로이드 사를 인수하기 전부터 Linux Kernel을 이용한 것으로 알고 있습니다.
이 점은 여러가지 장점이 있는데요~ 여차하면 Linux의 다양한 라이브러리를 이용할 수 있고~ 안정적인 Linux Kernel을 통하여 다양한 하드웨어를 잘 컨트롤 할 수 있기 때문입니다.
즉, Linux의 성능이 Linux Kernel에서 나오는 것 처럼 안드로이드의 진정한 성능도 Linux Kernel에서 나온다고 할 수 있습니다.
하지만, 모바일 프로그램은 데스크탑 Linux 어플리케이션과 다른 특성을 가지고 있습니다.
즉, 적은 메모리, 낮은 CPU 성능, 그리고 배터리 성능 등으로 인하여 모바일 프로그램만의 특성을 담을 수 있는 그릇이 필요하게 되었습니다.
이러한 점은 구글은 달빅이란 VM을 통하여 해결하였습니다.
이미 Java는 JavaME를 통하여 전 세계 핸드폰에서 돌아가고 있으며, 그만큼 안정성이 입증되어 있습니다.
즉 Java의 태생이 그러하듯이 모바일 환경에 많은 적합성을 가진 언어라는 것입니다. 이러한 점을 간파한 Google에서 한가지 문제를 삼은것은 말씀하신 성능입니다.
부족한 성능을 끌어 올릴 수 있는 방법이 필요하게 된 것입니다.
이에따라 기존 JavaVM을 사용하는 대신 자체 JavaVM을 만들었습니다. 사실 라이센스 문제도 한몫했구요~
따라서 ARM 기반의 CPU에 더 적은 Instruction으로 구동할 수 있는 VM을 만들어 달빅이란 이름을 붙였습니다. 점 엉뚱한 이름이긴 합니다~ ㅎㅎ
여튼 이에따라 기존 JavaME의 성능보다는 높은 성능을 갖추게 되었습니다. 물론 말씀하신대로 iPhone 보다는 낮은 성능을 가지고 있지만 나름 장점이 있습니다.
우선 Java 개발자를 바로 끌어 댕길 수 있습니다. Java와 문법이 같기 때문이죠~ 그리고 오픈 소스 진영의 Java 라이브러리를 마음껏 이용할 수 있습니다.
개발하는 쪽에서 볼때 상당히 좋은 조건입니다.
저도 Object C를 조금 알지만~ 어려운 면이 있거든요~ 개발 장비 문제도 있구요~
하지만 안드로이드 프로그래밍의 경우 일반 IBM PC를 통해서도 쉽게 개발이 가능합니다.
마지막으로 성능을 계속 좋아질 것 입니다. 그것이 iPhone이건 Android이건 Windows Phone이건~
이제 모바일 기기의 하드웨어 성능에서 더 이상 메모리 문제와 CPU 문제가 많이 언급되지 않고 있습니다. 물론 한계가 있습니다. 배터리 소모 문제도 있지만~
더 저 전력에 더 높은 클럭을 갖춘 CPU와 더 낮은 메모리를 소비하는 RAM과 더 긴 시간을 자랑하는 배터리가 채용되고 있습니다.
따라서 모바일 기기의 성능은 어느 순간~ 대략 내년 말쯤~ 넷북의 성능을 추월할 것 같습니다. 저장 공간 역시 SDHC의 발전 속도를 볼때 곧 128G를 갖춘 고급 스마트폰도 나올 기세입니다.
사실 그렇게 하지 않으면 하드웨어 제조사 나름의 장점을 갖추기 힘듭니다. 이미 소프트웨어 전쟁에서 뒤쳐졌다고 보여집니다.
여튼 저는 Android도 좋아하고 iPhone도 좋아하는 사람의 입장에서 마무리 한다면~ 성능의 문제 보다는 더 좋은 모바일 소프트웨어가 진화할 수 있는 체계를 갖춘쪽이 더 성공할 가능성이 높아 보입니다.
결국 소비자는 좋은 소프트웨어를 바라보기 때문이죠~ 원하시는 답변이 되었는지 모르겠네요~ :-)
-
-
하이바네.P 2010/04/13 17:42
심도있는 답변 감사드립니다. 아무래도 하드웨어-소프트웨어-판매사가 하나인 애플에 비해 안드로이드라는 생태계를 만들어 놓은 구글이라는 회사가 뭔가 보여줘야 할 때인 것 같네요. 이번 4월의 발표회때 잡스씨가 언급한 내용중에 팜프리나 블랙베리쪽이 맡아왔던 기업형 소프트웨어에 대한 지원까지 늘린다고 하는걸 보니, 애플의 차근차근 단계를 밟아가는 모습에 비해 안드로이드의 두드러진 모습이 없어서 아쉽습니다. 그래도 미래가 기대되네요.^^
-
장선진 jangsunjin 2010/04/14 01:59
아네~ 하이바네님 :-)
덕분에 저도 많은 생각을 하게 되었습니다. 좋은 질문 종종 올려주세용~
굳이 안드로이드와 아이폰을 비교하지 않아도 좋을 것 같습니다. 추구하는 바가 너무도 틀립니다.
완벽한 미와 기능성을 추구하는 아이폰과 공개되고 조금 정리가 되지 않았어도 개방성을 추구하는 안드로이드는 사실 서로 태생부터 다르며, 추구하는 바가 너무도 다릅니다.
안드로이드 역시 Linux가 그랬던것처럼 Linux 엔진을 달고 개방성을 향해 나아가는 스마트폰 플랫폼이며, 아이폰의 경우 애플이란 회사가 독점권을 가지고 만들어가는 스마트폰 플랫폼입니다.
당근 한 회사에서 만들면 추진력도 점있고 전체적으로 통일감도 있는 반면~ 개방성에서 떨어지구요~
여러회사가 연합되어 있는 안드로이드의 경우 개방성은 좋아서 많이 사용되지만 너무 개방적이기 때문에 약간의 혼선과 대응이 느린 부분이 있습니다.
모두 필요한 특성이자 부분이라는 생각이 드네요~ :-)
-
-
마지막으로 제가 웹 프로그래밍에 대한 내용을 발표하기로 하였습니다. ^^~
사실 이번에 웹 프로그래밍 발표를 위하여 여러가지 자료를 찾으면서 역시 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이 당근 훌륭한 기능을 제공한다고 생각되네요~
아마 웹 브라우져의 내용이 궁금하신 분들이 많으시리라 생각됩니다. 한번씩 해보세요~ 따라하시기 편하도록 구성하였습니다. ;-)
'Architecture for Software > Lisp' 카테고리의 다른 글
| 제 1 회 Korea Lisp 세미나 후기 :-) (20) | 2010/05/03 |
|---|---|
| 드디어 우리나라 첫(?) Lisp 세미나가 열립니다! (10) | 2010/04/25 |
| 새로운 웹 프로그래밍의 세계: Hunchentoot로 웹 사이트 제작하기 (11) | 2010/03/20 |
| Clojure 개발 환경 구축하기 (0) | 2010/02/17 |
| Lisp의 객체지향은 그 무엇보다 강력했다. (0) | 2010/01/12 |
| ANSI Common Lisp 책을 읽고 있습니다. (5) | 2010/01/08 |
-
Hybrid 2010/03/27 15:28
좋은글 잘 보고 갑니다~
그야 말로 피가 되고 살이 되는 내용이네요 ㅜㅜ
(하지만, 윈도우 환경이라 아직 실습 해볼 수 없다는 현실에 좌절만....~!)-
장선진 jangsunjin 2010/03/29 10:49
아네~ ^^ Cygwin + ASDF 가 성공했었는데.. 지금은 잘 안되네요~
다음에 Windows 환경에서 Cygwin + ASDF 를 설정하는 방법에 대하여 한번 정리해서 올리겠습니다~ ^^
-
-
레몬에이드 2010/03/30 09:20
와... 역시 선진님 답게 깔끔하고 멋진 정리입니다
다만 Lisp 코드를 전혀 읽지 못하는 안타까움이 ㅇㅅㅇ;;
요즘에 호기심에 이것저것 찔러보고 있는데
멘토가 깊이를 우선 시 하라고 해서 마음을 다시 잡고 있습니다.
그래서 선진님 공간에 살짝 발도장 찍고 갑니다 ㅎㅎ-
jangsunjin 2010/04/02 11:12
아네~ 오랜만입니다~ 지환님~
잘 지내고 계시지요~ 저희가 세미나를 준비중에 있습니다~
Lisp 세미나 열리면 꼭 참석해주세용~ :-)
-
-
전창민 2010/04/03 23:40
처음 뵙겠습니다.
코드 따라가다가 막히는 부분이 있는데요 ^^;
votes 와 name method 는 undefined function 이라고 나오는데 따로 정의하신부분이신가요 ?ㅎ-
전창민 2010/04/03 23:45
원문에 들어가서 찾아보니 결국 자문자답이 되었네요 -_-
루비와 비슷하게 자동으로 생성되는 슬롯을 정의해줘야 하더군요.
(defclass game ()
((name :reader name
:initarg :name)
(votes :accessor votes
:initform 0))) -
전창민 2010/04/03 23:53
밑으로 좀 더 진행하니 클래스 확장부분이 있었네요.
그럼 순서 조정이 필요할꺼 같네요 ^^;
KLISPER> (defclass book()
((name :reader name
:initarg :name)
(votes :accessor votes
:initform 0)
)
)
#<STANDARD-CLASS BOOK> -
전창민 2010/04/04 00:38
한시간 정도 걸려서 따라 해봤는데 정말 직관적인거 같군요.
폴그레이엄이 왜 lisp 로 viaweb 을 만들었는지 조금이나마 이해가 되네요. 정말 잘 정리해주셨네요 ^^ -
장선진 jangsunjin 2010/04/04 08:57
안녕하세요~ 전창민님 :-)
도움이 되셨다니~ 다행입니다.
예제 자체가 처음에 book~ 이란 클래스가 만든 후 확장하게 되어 있습니다.
저도 Lisp의 매크로가 이렇게 강력한지 이번에 알았습니다~ 후후후~
저희 Lisp을 좋아하는 사람들의 그룹에서 Lisp 전문 세미나를 준비중입니다. 아마 5월 1일경에 세미나를 주최하게 될 것같습니다. 오셔서 Lisp의 다른 세계도 알아보세요~ ;-)
-
-
-
장선진 jangsunjin 2010/04/04 19:53
네~ 감사합니다~ :-)
일정 진행 상황은 http://groups.google.com/group/lisp-korea 에서 확인하실 수 있습니당~ 추후에 제 블로그에도 공지하겠습니당~ ;-)
-
저 역시 예전에~ Long Long Time Ago~ Linux Kernel이란 미지의 세계로 여행을 떠나 보려다가 너무 험난한 경로인지라 포기하고 말았습니다.
특히 어디로 어떻게 가야할지 정말 막막하더라구요~
다행히 리눅스 커널(Linux Kernel)로 여행을 떠날 수 있는 좋은 지도가 있습니다.
자~ 지도한장 들고~ 떠나 보시죠~ ;-)
'Architecture for Software > OS' 카테고리의 다른 글
| 리눅스 커널(Linux Kernel)로 여행을 떠나시는 분에게 (2) | 2010/03/05 |
|---|
-
-
장선진 jangsunjin 2010/03/07 18:22
안녕하세요~ 쿠크다스님 :-)
아마도 좋은 책이 아닐까 싶습니다. 여러가지 Linux Kernel에 관한 책이 있으므로 한번 찾아보셔서 자신에 맞는 나침반을 찾는것이 좋을 듯 합니다.
한번 Linux 커널에 대하여 이해하고 싶은 것인지~ 아니면 Linux Kernel에 대하여 이해하고 장치를 제어하고 시스템 관련 프로그래밍을 할 것인지에 관하여 여러가지 나침반이 있을 것 같네요~
저도 사실 본지가 오래되서~ 나침반이 녹슬어 있습니다. ^^;;
-
휴~ 자료를 정리하고 나니~ 정말 많은 스마트폰 관련 OS가 존재하는군요~
관심있으신 분들께서는 참고하시기 바랍니다. 감사합니다. :-)
1. 스마트폰(Smartphone)에 대한 정의
스마트폰(Smartphone)이란 개인용 컴퓨터에서 제공하는 진보된 기능을 제공하는 모바일 기기(핸드폰 등)를 의미합니다.
아직 업계에서는 스마트 폰에 대한 정확한 정의를 내리고 있지 않지만, 갈수록 똑똑(Smart)해지는 모바일 기기를 총칭하는 의미하며, 필자의 생각으로 스마트폰이란 다양한 응용 어플리케이션을 개인용 컴퓨터와 같이 설치하여 사용할 수 있도록 구성된 모든 모바일 장치와 에코시스템(Eco System)을 구성하는 환경을 의미한다고 생각합니다.
일부에서는 스마트폰이란 전화(이야기)를 할 수 있는 컴퓨터라는 정의를 내리고 있으며, 키보드와 같은 입력장치를 가진 모바일 기기라고 정의하고 있습니다. 하지만 스마트폰은 각각 모양과 입력장치가 다르므로 스마트폰을 이런식으로 일반화하여 정의하기 어렵습니다.
특히 스마트폰을 이야기할때 빠질 수 없는 것이 스마트폰을 중심으로 만들어지는 에코시스템(Eco System)이라고 생각합니다. 즉 기존에도 Windows Mobile이나 Windows CE와 같은 스마트폰 운영체제(OS)가 있었지만, 최근 정의하는 스마트폰과 거리가 있는 이유가 바로 스마트폰을 중심으로 만들어지는 에코 시스템이 없기 때문이라고 생각합니다.
스마트폰의 에코시스템에 대한 내용는 나중에 한번 정리해서 올리겠습니다.
참고로 영문으로 스마트 폰을 표기할때 Smart Phone과 Smartphone 모두 사용하지만, 최근에는 Smartphone으로 통일되어가고 있습니다.
2. 스마트폰(Smartphone)의 현황
스마트폰의 현재 현황을 보면 다음과 같습니다.
재미있는 점은 실제로 최대 시장 점유율을 가지고 있는 스마트폰 운영체제는 심비안(Symbian)이란 점입니다.
참고로 그동안 많이 알려져있던 Windows Mobile에 시장 점유율 역시 그리 크지 않다는 점입니다. 국내 옴니아부터 여러가지 스마트폰에 채용된 운영체제가 바로 Windows Mobile이었는데, 글로벌 마켓 점유율 역시 크지 않군요~
그리고 세계 최초의 스마트폰은 1992년 COMDEX에서 IBM이 발표한 Simon이라는군요~
각 스마트폰 운영체제에 대하여 간략하게 살펴보면 다음과 같은 특징을 가지고 있습니다.
2-1 심비안(Symbian)
심비안은 1980년에 탄생한 첫번째 상업용 스마트 폰 운영체제로서 모바일 기기와 스마트 폰을 위한 오픈 소스 기반의 운영체제입니다. 다만 심비안이 처음부터 오픈 소스를 추구한 것은 아니며 Nokia에 인수된 뒤 최근(2010년 2월)에 시장의 위협에 따라 오픈 소스화를 추구하였다고 합니다. 정말 오랜기간 장수하였네요~ ^^
2-2 RIM 블랙베리(Blackberry)
캐나다 기업인 RIM(Research In Motion)에서 2002년 스마트 폰을 대상으로 출시한 블랙베리는 오바마 미국 대통령이 많이 사용하여 오바마 폰으로도 불리고 있습니다. 블랙베리는 RIM에서 만든 멀티태스킹이 가능한 운영체제로서 Java MIDP 2.0을 지원하고 있습니다. Novell GroupWise나 Lotus Notes와 같은 기업용 시스템과 쉽게 연동할 수 있는 장점이 있습니다.
2-3 애플 아이폰(Apple iPhone)
전 세계에서 가장 선호되는 아이폰은 애플에서 아이팟(iPod) 터치의 장점을 극대화한 스마트 폰으로 각광받고 있습니다. 정말 간지 작렬입니다. ^^~
iPhone 의 운영체재는 OS X iPhone이라고 알려져 있으며 2007년 1월에 출시된 후 앱스토어(AppStore)를 바탕으로 모바일 소프트웨어 유통 패러다임의 변화를 이끌어 내었습니다. 이를 통하여 새로운 에코시스템이 탄생하게 되었으며, 특히 개발자가 직접 수익을 얻을 수 있는 구조가 만들어졌습니다. 많은 분들이 생각하시든 애플 아이폰의 절대적인 경쟁력은 바로 애플 앱스토어에서 나오는것 같습니다.
2-4 윈도우스 모바일(Windows Mobile)
윈도우스 모바일은 마이크로소프트웨어 의하여 출시한 스마트폰 운영체제로서 아이폰이나 안드로이드가 나오기 전까지 널리 사용된 스마트폰 운영체제였습니다. 최근까지 널리 사용한 윈도우스 모바일 6.5는 Windows CE 5.2 커널을 기반으로 윈도우의 API를 사용할 수 있는 구성을 갖추고 있었습니다. 원도우스 모바일은 사용자들에게 만족할만한 속도나 에코시스템을 갖추지 못하였으며, 다양한 제조사들의 지원도 원활하지 못하였습니다.
최근 원도우스 폰(Windows phone)이란 운영체제를 출시하였으며, 새로운 사용자 경험(UX; User Experience)를 제공하여 예전의 아성을 찾으려고 노력하고 있지만 아이폰이나 안드로이드의 급속한 시장 확대로 인하여 쉽지 않을 것 같습니다. 하지만 마이크로소프트가 앞으로 어떤 전략으로 사용자들에게 다가올지 한번 살펴볼 필요가 있을것 같습니다.
2-5 구글 안드로이드(Google Android)
안드로이드는 실제 OHA(Open Handset Alliance)에서 관리되고 있이며, 구글이 OHA 설립을 주도하였습니다. 사실 안드로이드는 구글이 처음 만든것이 아니라 2005년에 안드로이드라는 회사를 인수하였으며, 이를 바탕으로 제공한 스마트폰 운영체제입니다.
안드로이드는 하부에 리눅스(Linux)를 이용하면서 Java 언어를 사용할 수 있는 달빅(Dalvik) VM을 가지고 있습니다. 따라서 기존의 Java 개발자들이 쉽게 안드로이드 관련 어플리케이션을 개발할 수 있는 환경을 제공하고 있습니다.
개인적으로 안드로이드의 API 수준은 좋지 않다고 생각합니다. 여러모로 개선될 점이 많은것 같습니다. 참 우아하지 못한 API들을 필요한 곳에 덕지 덕지 바른 느낌이랄까요~ 제가 처음 Java를 접한것이 1.1이었는데.. 마치 그때 Java API를 보는듯한 느낌이 많이 듭니다.
구글답게 안드로이드는 개방성을 바탕으로 시장을 확대하고 있으며, 아이폰의 앱 스토어와 같은 안드로이드 마켓을 통하여 다양한 모바일 소프트웨어를 유통할 수 있는 에코시스템을 갖추었습니다. 많은 개발자 및 사용자에게 기대를 받고 있으며 다양한 단말기 제조사(HTC, Motorola, 삼성, LG 등)에서 앞다투어 안드로이드 기반의 스마트폰 기기를 본격적으로 출시하고 있습니다.
이 외에도 팜(Palm)이나 삼성에서 만든 바다(Bada)와 같은 스마트폰 운영체제가 있습니다. 참고로 삼성 바다(Bada)의 경우 운영체제가 아니라 미들웨어라는 이야기가 있습니다. 아직 개발툴 등을 공개하지 않고 있어 정확한 것은 더 지켜봐야 알 수 있을것 같습니다.
3. 스마트폰(Smartphone)의 전망
스마트폰 시장은 앞으로 계속 확대될 예정입니다. 가장 큰 이유는 소비자들이 스마트폰을 선호하고 있기 때문입니다. 여러분들 역시 아이폰과 같은 스마트폰을 사용하고 싶지 않으십니까 ^^~
재미있는 점은 스마트폰의 선호도가 모바일 기기 제조사의 시장점유율에도 많은 영향을 미치고 있다는 점입니다. HTC와 Motorola의 경우 점유일이 짧은 기간동안 올라가고 있습니다. 모두 안드로이드를 탑재한 스마트폰을 출시하였기 때문이라고 보입니다.
아울러 스마트폰 관련 운영체제의 선호 비율이 바뀌고 있습니다. 안드로이드의 선호비율이 상당히 올라가있습니다. 개인적으로 안드로이드에 대한 기대가 높다는 반증으로 보입니다. 다만 제 생각에는 안드로이드가 갈 길이 멀은것 같습니다. 시장에 아직 본격적으로 출시되지 않았기 때문에 기대보다 실망이 클 수 있습니다만, 장래성은 충분해보입니다. 눈여겨 보실점은 블랙베리 역시 선호도가 높아졌다는 점입니다. 1%가 높여졌지만 블랙베리 역시 소비자에게 좋은 스마트폰 운영체제로 자리매김하고 있다는 점입니다. 따라서 블랙베리도 눈여겨 볼 필요가 있다고 생각합니다.
본격적으로 모바일 기기 제조사에서 안드로이드를 탑재한 스마트폰을 출시하고 있는 관계로 안드로이드 운영체제의 점유율이 급상승할 것으로 예상됩니다.
스마트폰 운영체제의 만족도를 살펴보면 안드로이드가 아이폰과 비슷한 만족도를 보이고 있습니다. 이점이 사실 대단한것이.. 출시한 기간이나 아이폰과 같이 단일한 기업에서 완성도를 보장하지 않고 있음에도 불구하고 안드로이드의 만족도가 이렇게 높게 나왔다는 점은 상당히 고무적으로 볼 수 있습니다.
4. 스마트폰(Smartphone)에 대한 나름의 결론
결론적으로 제 생각을 정리하면 다음과 같습니다.
스마트폰 시장은 스마트폰 운영체제의 완성도와 에코시스템을 얼마나 잘 갖추고 있느냐에 따라 시장 점유율이 틀려질 것으로 생각됩니다. 예전에 PDA 시장에서 가장 많이 활용되었던 팜(Palm)과 같은 운영체제는 사용자와 개발자(ISP)를 위한 에코시스템을 갖추지 못하였기 때문에 점점 자신의 영역을 읽어가고 있습니다.
하나의 스마트폰 운영체제가 독점하는 시장이 아닌 여러 스마트폰 운영체제가 과점하는 양상을 보일 것 같습니다. 아이폰을 선호하는 사용자의 경우 나름 이유가 있으며, 안드로이드를 선호하는 사용자나 블랙베리를 선호하는 사용자 모두 자신의 필요성 등에 따라 운영체제 및 스마트폰 기기를 선택할 것 같습니다. 따라서 하나의 운영체제가 모든 스마트폰 시장을 독점하지 않고 사용자들에 따라 과점할 것으로 보입니다.
이러한 과점 체제의 스마트폰 시장에서 가장 중요한 요소는 얼마나 사용자들을 만족시킬 수 있는 풍부한 서비스(어플리케이션)를 제공할 수 있을 것인가입니다. 나름 예상해보건데, 스마트폰에서 실행되는 어플리케이션의 가격은 점점 낮아지지만 지금보다 훨씬 다양하고 많은 어플리케이션들을 사용자들이 사용할 것 같습니다. 즉, ISP(개발자)입장에서는 더 낮은 가격으로 판매해도 많은 사용자들이 있기 때문에 수익은 더 늘어날 것 같으며, 아이폰의 앱 스토어나 구글의 안드로이드 마켓의 중개 수수료도 더 낮아지거나, 전문 어플리케이션 판매를 위한 마켓플레이스(Market Place)도 생겨날 것 같습니다.
결국 ISP(개발자)에게 더 많은 기회가 생길 것이며, 스마트폰 사용자에게도 더 질 높은 어플리케이션이 제공될 것이며, 이러한 환경을 구축한 스마트폰 운영체제 제공사와 스마트폰 기기 제조사에게도 더 많은 수익이 발생될 것입니다.
이상 제 나름의 전망이었습니다. 읽어주신 여러분들에게 감사드리며, 부족한 점이나 궁금한점이 있다면 댓글 부탁드립니다. :-)
'Architecture for Software > Android' 카테고리의 다른 글
| App Inventor for Android와 스퀵의 스크레치(scratch) (0) | 2010/07/12 |
|---|---|
| [안드로이드 이야기] 안드로이드란 무엇인가? (8) | 2010/04/06 |
| 스마트폰(Smartphone) 운영체제에 대한 정리 및 전망 (24) | 2010/02/26 |
| Android의 3D에 대하여 (2) | 2009/09/22 |
-
Subject 허니몬의 알림
2010/03/02 13:10
스마트폰 (Smartphone) 운영체제에 대한 정리 및 전망, [장선진] 삶을 위한 소프트웨어 // 우리가 알고 있는 것이 다가 아니다. // 스마트폰에서 중요한 것은 에코시스템(운영체제, 앱, 비즈니스 시스템, 모바일 환경 등)이다.
-
Subject 스마트폰(Smartphone) 운영체제에 대한 정리 및 전망
2010/05/23 19:56
스마트폰(Smartphone) 운영체제에 대한 정리 및 전망
-
김나연 2010/03/04 16:30
안녕하세요.
저희는 시장조사 전문기관인 코리아리서치(www.kr.co.kr)입니다.
이번에 저희 회사에서는 신상품 수용도 파악을 위한 조사를 좌담회 방식으로 진행할 예정입니다.
좌담회란, 공통 주제에 대하여 10명이 모여서 서로 이야기를 나누는 형식의 모임입니다.
많은 참여 부탁드립니다.
**대상 조건
1그룹 - 25~34세의 남자
1년차 직장인으로 연봉 2천8백이상인자
스마트폰 보유자
2그룹 - 25~34세 여자
1~3년차 직장인으로 연봉 2천8백이상인자
스마트폰 보유자 또는 향후 구매 의향자
3그룹 - 25~34세 여자
1~3년차 직장인으로 연봉 2천8백이상인자
스마트폰 보유자 또는 향후 구매 의향자
향후 6개월내 결혼 예정자
**참석비 - 1그룹 10만원
2그룹 스마트폰 보유자 8만원 / 구매의향자 7만원
3그룹 10만원
**일정 - 3월 10일(수) ~ 3월 12일(금) 오후 7시 30분 양재역 부근
**담당자 - 김나연(02-3415-5175 / joajoany@naver.com / joajoany@kric.com)
** 프로필은 아래와 같이 작성해 주세요.
이름/나이/연락처/직장명(입사년도)/스마트폰 보유여부(보유면 모델명 기입)/해당그룹
메일로 프로필 양식을 보내주시면 저희가 따로 연락을 드립니다.
궁금한 사항 있으시면 연락주세요. -
-
-
-
-
-
-
-
-
-
자, 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.jar와 clojure-src.jar 그리고 clojure-contrib.jar와 clojure-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 프로그래밍에 대한 내용을 종종 올리겠습니다.
감사합니당~
'Architecture for Software > Lisp' 카테고리의 다른 글
| 드디어 우리나라 첫(?) Lisp 세미나가 열립니다! (10) | 2010/04/25 |
|---|---|
| 새로운 웹 프로그래밍의 세계: Hunchentoot로 웹 사이트 제작하기 (11) | 2010/03/20 |
| Clojure 개발 환경 구축하기 (0) | 2010/02/17 |
| Lisp의 객체지향은 그 무엇보다 강력했다. (0) | 2010/01/12 |
| ANSI Common Lisp 책을 읽고 있습니다. (5) | 2010/01/08 |
| 첫 오프라인 Lisp 스터디 모임을 시작하였습니다. :-) (0) | 2009/09/23 |
나름 객체지향에 대한 일정 수준의 이해가 있다고 생각했던 저에게 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의 세계로 여러분을 초대합니다.
참고로 유투브에서도 확인하실 수 있습니다. 주소는 http://www.youtube.com/watch?v=Sdq9NN98s3A&feature=player_embedded 입니다.
다른 어떤 언어보다도 Lisp을 공부하고 있는 제가 좋습니다. 이렇게 말하면 Lispy한 것일까요~ ㅎㅎㅎ
"Lisp을 좋아하는 사람들의 그룹(한국 리스퍼)"에서는 매주 토요일 Lisp 오프라인 스터디를 진행하고 있습니다.
관심있는 분들의 많은 참여 부탁드립니다. 저희 그룹은 Lisp을 공부하지만 Lispy하지 않아요~ :-)
'Architecture for Software > Lisp' 카테고리의 다른 글
| 새로운 웹 프로그래밍의 세계: Hunchentoot로 웹 사이트 제작하기 (11) | 2010/03/20 |
|---|---|
| Clojure 개발 환경 구축하기 (0) | 2010/02/17 |
| Lisp의 객체지향은 그 무엇보다 강력했다. (0) | 2010/01/12 |
| ANSI Common Lisp 책을 읽고 있습니다. (5) | 2010/01/08 |
| 첫 오프라인 Lisp 스터디 모임을 시작하였습니다. :-) (0) | 2009/09/23 |
| Lisp 오프라인 스터디를 본격적으로 시작하겠습니다. :-) (0) | 2009/09/14 |
GAE의이해_장선진.pdf


