hacking2009/09/29 01:18
크리에이티브 커먼즈 라이선스
Creative Commons License
개정판#1: 종료(Run/Stop)하면 제대로 종료가 안되는 문제, 그리고 디버깅이 안되는 문제를 고쳤음.

예전에 이클립스에서 google appengine (python)을 사용하기 위한 삽질기를 올렸었는데...
이번엔 혼자 좋아라 하는 넷빈즈다.  IMNSHO, 이클립스는 IDE로써는 이미 맛탱이가 갔다. 그냥 다른 대안이 없어서 쓸 뿐~ 3.4 까진 달나라였는데... 이젠 안드로메다를 넘어 아공간으로 날아가버린...-,.-;

미리 말해두는데, 이 글의 관심사는 Java가 아니고 Python이다. Google AppEngine for Java라면 꽤 쓸만한 플러그인이 이미 있다. 

아무튼 넷빈즈 6.0 이후로 비공식적으로 Python(Jython 포함)이 지원되는데... 이걸 이용하면 gnome-terminal + vim 만큼 손에 착 달라붙진 않지만, 몇가지 편리한 기능들이 있어서 아쉬운대로 쓸만하다. 이걸 AppEngine(Python) 개발에도 써먹어 볼려구 했더니... 문제가 좀 있어서 삽질이 필요하다.

1. 파이썬 2.5.x 설치
여기서는 c:\python25 로 설치했다고 치자.

여기서는 c:\google_appengine 에 설치했다고 치자.

3. 넷빈즈 설치
알아서들 잘 까시겠지만... 이클립스와는 달리 인스톨러가 있다. 자바까지 포함된 인스톨러도 있다. 우분투라면 apt-get install netbeans 해도 된다. 입맛대로 깔아보자.

이 글을 여기까지 본사람이라면 1,2,3은 이미 다 되어있겠지만... 그냥 써봤다. :p

Tools -> Plugins -> Available Plugins -> Python을 찾아서 체크한 다음 Install을 눌러주시면 된다. 직관적이다. 이클립스 P2인지 뭔지만큼 플렉서블하며 스케일러블하고 엘레강스하고 개떡같진 않지만, 나같은 촙오도 대충 하면 될 정도로 직관적이다. 참고로 Jython도 덩달아 설치된다. 리스타트하라고 겁주는데... 겁나니까 그냥 리스타트 하자.

5. 파이썬 런타임 등록
넷빈즈의 파이썬 플러그인은 아무말 안하면 Jython 런타임을 사용하지만, 앱엔진 개발을 위해선 Python 2.5.x가 필요하다. Tools -> Python Platforms -> New 해서 c:\python25 를 선택하면 대부분의 값은 자동으로 채워진다. Python Path 탭으로 가서 앱엔진 라이브러리들을 등록해주자:
  • c:\google_appengine\lib\antlr3
  • c:\google_appengine\lib\django
  • c:\google_appengine\lib\webob
  • c:\google_appengine\lib\yaml\lib <-- 요기 끝에 lib 한 번 더 있다. 오타 아님.

6. 파이썬 프로젝트 만들기
File -> New Project 에서 Categories를에서 Python을 고르면 두가지가 있다:
  • Python Project
  • Python Project with Existing Source
설명할 것도 없고, 제목 그대로다. 사용할 파이썬 런타임 물을 때(Python Platform... 얘네들 플랫폼 참 좋아한다) 미리 등록해둔 Python 2.5.x를 선택하자.

7. 넷빈즈 안에서 dev_appserver.py 실행하기
일반적인 파이썬 프로젝트라면 여기서 끝인데... 앱엔진 프로젝트는 난관이 하나 더 있다.

(현재로썬)넷빈즈용 파이썬 플러그인은 현재 프로젝트 밖에 있는 모듈을 메인 모듈로 지정할 수 없다...-,.-;;;

그래서 밖에서(명령 프롬프트, cmd, 터미널, 콘솔... 머라고 부르던...) 실행 해야하는데... 이래서야 IDE라고 할 수 없다. 그래서 삽질을 좀 했다:

#!/usr/bin/env python2.5

import sys
import os

if __name__ == '__main__':
    GAE_HOME = 'c:\google_appengine'
    script_dir = os.path.join(GAE_HOME, 'google', 'appengine', 'tools')
    script_path = os.path.join(script_dir, 'dev_appserver_main.py')

    sys.path.insert(0, GAE_HOME);
    sys.argv.append(os.path.dirname(__file__))

    execfile(script_path, globals())


파이썬 촙오가 짠 코드다 보니... 좀 보기 그렇지만.... -,.-;;; 문제에 집중하자! 집중! 이 녀석을 적당한 이름 (내 경우엔 _nb_dev_appserver.py라고 지었다)으로 저장해놓고 메인 모듈로 지정해주면 된다(최초 실행시 메인 모듈이 뭔지 물어본다)


Posted by iolo
hacking/web2009/09/23 14:52
크리에이티브 커먼즈 라이선스
Creative Commons License
dojo 프로젝트의 리더였던 alex가 구글로 자리를 옮긴뒤 첫 제품을 내놓았다.



"Chrome Frame"이라는 이름의 IE 플러그인(Active-X)이 그것인데, 기술적으로는 FirefoxIE Tab 확장과 비슷하지만, IE Tab은 사용자가 명시적으로 IE로 보겠다고 해야만 활성화되지만, Chrome Frame은 색다른(?) 접근 방식을 제안한다(물론, 두가지 방식 모두 Chrome Frame이 깔려있을때만 동작한다):
1. (사용자가) URL 앞에 "cf:"를 붙인다. 예를 들면 http://acid3.acidtests.org/ 하면 IE가 X같은 반응을 보이지만, cf:http://acid3.acidtests.org/ 하면 잘 된다.
2. (개발자가) HTML 페이지에 <meta http-equiv="X-UA-Compatible" content="chrome=1" /> 메타 태그를 달아놓으면 해당 페이지를 보는데 크롬을 사용한다.

첫번째 방식은 GUI 메뉴를 URL로 옮겨놓았을 뿐, 결과만 확인하고 넘어가자:

Chrome Frame 없이 IE8로 Acid3 테스트에 도전!

Chrome Frame 없이 IE8로 Acid3 테스트에 도전!


IE8을 가장한 Chrome으로 Acid3 테스트에 도전!

IE8을 가장한 Chrome으로 Acid3 테스트에 도전!


두번째 방식을 주목해보자. 이 방식을 사용하면 Chrome Frame 플러그인만 깔려있다면 자동적으로 활성화 된다. 그렇다면 Chrome Frame 플러그인만 자동으로(강제로) 깔 수 있으면... -.-ㅋ 뭔가 구린 냄새가 솔~솔~ IE로 인터넷 뱅킹이나 쇼핑몰 결제할 때만 되면 난리 법석을 떨던 ActiveX의 *랄 발광을 역이용(!)할 수 있다. 금상첨화(혹은 설상가상) 우리나라 사용자들은 ActiveX 설치할 때 "보안 경고"가 뜨면 무조건 "예"라고 해야 한다고 배워서 실천하고 있으니~ =..=

친철한 알렉스께서~ 우리를 위해 그 스크립트까지 만들어 놓으셨는데, 이를 이용해서 간단한 예제 하나 만들어 보자(IE로 http://iolo.pe.kr/acid3.html 에 접속해봐도 된다):
<html>
<head>
<title>acid3 test on IE with Chrome Frame</title>
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
</head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
 
<div id="placeholder">
<p><a href="http://acid3.acidtests.org">acid3 test</a></p>
<p><a href="cf:http://acid3.acidtests.org">acid3 test with Chrome Frame(IE Only)</a></p>
</div>

<script>
 CFInstall.check({
    node: "placeholder",
    destination: "cf:http://acid3.acidtests.org/"
  });
</script>
</body>
</html>

CFInstall.check() 함수는 기본적으로 지정한 노드(여기서는 placeholder)를 설치 페이지를 표시하는 iframe 태그로 바꾸서 설치를 유도하고, 설치가 끝나면 destination 페이지로 이동한다(자세한 설명은 공식 개발자 문서를 참조하시라~).

이런식의 스크립트를 웹 서비스의 진입부에 적당히 끼워넣어 두면... "부끄러운" 대한민국의 웹(한국 웹의 불편한 진실 참조)이 우리에게 강요했던 방식 그대로~~~ 크롬을 쓰도록 강요할 수 있다 -.-ㅋ

그런데, 구글은 이런걸 왜 만들었을까? 무엇보다도 구글이 만든 대다수의 초첨단(?)  웹 어플리케이션들을 돌리기엔 IE(6,7은 말할것도 없고 8도 도토리 기재기)의 렌더링 / 자바스크립트 엔진이 너무 구리기 때문일 것이다.

Chrome Frame이 널리 보급되기엔 넘어야 할 산이 많다. 첫째, 사용자 경험이 너무 거칠다. 플래시의 경우처럼 매끈하게(뭔가 설치한다는 느낌을 주지않고) 설치할 필요가 있다. 설치 유도 스크립트(CFInstall.js)를 많이 다듬어야 할 듯... 둘째, 다음으로 77M를 넘어서는 설치 용량이다. 사용자의 컴퓨터에 구글 크롬이 설치되어 있다면 이를 그대로 활용할 수 있을 것이다. 아마 조만간 그렇게 되겠지? 셋째, 아직은 버그가 많다. 첫술에 배부를 순 없겠지...

IE에선 느려터져서 못해먹겠던 벽돌깨기에  다시 도전해보자~
IE를 가장한 크롬으로 벽돌깨기!

IE를 가장한 크롬으로 벽돌깨기!


결론, 플래시 정도의 사용자 경험을 통해 설치할 수 있다면, IE용 페이지 따로 개발하는 대신 Chrome Frame을 써 볼만 하겠다.

Posted by iolo
hacking2009/05/26 23:12
크리에이티브 커먼즈 라이선스
Creative Commons License
들어가는 글

오늘 삽질은 이클립스PyDev를 사용해서 이클립스에서 AppEngine(Python)어플리케이션을 개발할 수 있는 환경을 꾸미는 거다. AppEngine이 나오자 마자 guestbook 예제만 따라해보고 잊어버렸는데, 뭔가 해보긴 해봐야겠는데 지난 번 AppEngine for Java 삽질을 해보니 당분간은 파이썬 버전이 현실적인 듯 해서...^^;

리눅스에서는 사실 이클립스 같은 거 있어봐야 걸리적 거리기만 하고, OSX이라면 허접하긴 해도 구글에서 제공하는 간단한 툴이 있어서 나름대로 유용하게 쓸 수 있다. 윈도에선... 그야말로... Orz 나로 말할 것 같으면, 최근 몇년 동안 소스 코드 편집에 vi와 이클립스 외엔 써본적도 없다.

준비 - 이클립스 + PyDev

이클립스PyDev 플러그인은 재주껏 설치하시라. 파이썬을 잘 알아도 이클립스는 모르겠다는 분은 trigger님의 블로그를 참조하시면 되겠다. 파이썬이 뭔지도 모르겠다는 분은 Dive Into Python을(현재 한글 번역본은 빌드를 잘못해서... 깨져서 보이는데 어차피 옛날 버전이니 영문판 보는게 나을 듯) 참조하시길...

PyDev 프로젝트 생성

아무튼, File -> New -> Project 에서 PyDev Project를 선택하여 새로운 PyDev 프로젝트를 만들어 보자:

그 다음 화면에서 Project name(여기서는 iolo)을 입력하고, Grammer Version2.5로(AppEngine 1.2.2 기준) 맞춰주자. 그 밑에 보면 소스를 src 폴더에 만들겠다는 체크박스가 있는데(기본으로 선택되어 있다) 니맘대로 하면된다. 프로젝트 이름은 꼭 AppEngine 어플리케이션 이름(****.appspot.com)과 같을 필요는 없다. 정확한 이름은 app.yaml에 적어주면 된다. 

그 다음 화면은 참조할 모듈(이클립스 프로젝트)를 지정하는 건데, 그 모듈을 디버깅하는게 목적이 아니라면 필요없으니, 무시하고 넘어가자. 어차피 PYTHONPATH로 지정해주면 되니까 다음(Next)를 눌러 구경하던가, 그냥 마침(FInish)를 누르자.

PyDev 프로젝트 설정 
본격적인 코딩에 들어가기에 앞서, 프로젝트의 PYTHONPATH에 AppEngine 전용 라이브러리들을 추가해주자. 화면 왼쪽(Pydev Package Explorer)에서 프로젝트를 선택하고(이거 안해주면 이클립스가 삽질한다. 이후에도 프로젝트에 대해서 뭔가하려면 항상 프로젝트를 먼저 선택해주는 걸 잊지말자. 이게 귀찮으면 그냥 프로젝트의 컨텍스트 메뉴를 쓰는게 제일 확실하다), Project -> Properties (혹은 프로젝트 컨텍스트 메뉴에서 Properties)를 선택하면 프로젝트 Properties 대화상자가 열린다. 대화상자의 왼쪽에서 PyDev - PYTHONPATH를 클릭하면 아래 그림같은 화면이 나온다:

오른쪽의 External Source Folders 옆에 있는 Add source folder 버튼을 눌러가면서 아래의 폴더들을 추가하자(단, D:\devel\google_appengine은 본인이 AppEngine SDK(Python)를 설치한 디렉토리다):
  • D:\devel\google_appengine\
  • D:\devel\google_appengine\lib\django
  • D:\devel\google_appengine\lib\webob
  • D:\devel\google_appengine\lib\yaml\lib
실행 설정(Run Configuration)

이제부턴 구글에서 제공하는 튜토리얼을 따라서 app.yaml도 만들고, 필요한 helloworld.py파이썬 소스도 만들고... 이것 저것 해보자. 흠 여기까진 별 문제 없는데, 문제는 이걸 실행하는 거다. 물론 튜토리얼에서 설명하는대로 커맨드 프롬프트를 열어서(윈도 시작 메뉴 -> 실행(비스타라면 그냥 검색창에) -> cmd) dev_appserver.py를 실행해도 되겠지만, 그래도 명색이 IDE니까... IDE스럽게...^^

Run -> Run Configuration 메뉴(또는 Run  툴바()의 드롭다운 메뉴에서)를 선택하면 Run Configurations 대화상자가 열린다. 대화상자의 왼쪽에서 Python Run을 클릭하고, 다시 대화상자 위쪽에 있는 작은 New 툴바(또는 Python Run에서 오른쪽 버튼을 클릭하고 팝업 메뉴에서 New 메뉴)를 클릭하자(혹은 Run -> Run As -> Python Run을 해도 된다).

대화상자 오른쪽을 보면 여러개의 탭들이 장황하게 늘어서 있는데, 맨 앞의 Main 탭에서 Main Module 아래에 dev_appserver.py의 위치를 입력(!)해주자. 옆에 있는 Browse는 해봐야 소용없다. 내 경우엔 D:\devel\google_appengine\dev_appserver.py 인데, 알아서 맞게 입력하면 되겠다:

계속해서, 그 옆에 Arguments 탭에서 Program arguments 아래에 소스 디렉토리를 입력하자. 내 경우엔 "${project_loc}\src" 인데, 프로젝트 생성할 때 src 폴더를 만든다는 체크박스를 껐던가 나름대로의 디렉토리 구조를 잡아놓았다면 알아서 맞게 입력하면 되겠다. 여기에 dev_appserver.py가 제공하는 여러가지 옵션을 지정할 수 있는데, 많이 쓰이는 것은 --port 옵션이다(기본값은 8080):

이제 Run을 누르면 실행된다. 다음부터는 그냥 Run -> Run 메뉴(또는 Run 툴바)를 선택하면 마지막으로 실행한 녀석을 다시 실행한다. 중간에 다른 뭔가를 실행했다면 Run -> Run History Run 툴바의 드롭 다운 메뉴를 열어서 지금 설정한 녀석을 고르면 된다(위의 스크린샷대로라면 기본값인 New_configuration인데 하다보면 바꾸게 될거다).

실행 및 디버깅

dev_appserver.py의 출력 메시지는 이클립스 창 아래에 있는 Console 탭에 표시된다. 종료하려면 그 탭 위쪽에 있는 빨깐 네모()를 눌러주면 되겠다(이런거 까지 얘기할 필요가...).

여기까지면 일단 명령 프롬프트 열어서 할 수 있는 건 다 할 수 있고, 보너스로 디버깅)까지 할 수 있다. 디버깅을 하고 싶으면 Run 툴바()대신 바로 왼쪽에 있는 초록색 딱정벌레(캡쳐하기 귀찮다-,.-)를 눌러주면 된다. 자세한 사용법은 PyDev 홈페이지에서 제공하는 문서를 참조하자.

나가는 글

별 내용은 없지만 -,.- 딱히 일도 손에 안잡히고... 심심하기도 하고... 혹시나 도움이 될까해서 써 봤다. 근데 파이썬으로 코딩같은 코딩을 해본지가 거의 4~5년이 지나니 뭘 해야할지 완전 막막하다 -,.- 아무튼 어여어여~ 맘잡고 좀 더 보람있는 일로 저녁시간을 써야...

Posted by iolo
hacking/java2009/05/18 22:34
크리에이티브 커먼즈 라이선스
Creative Commons License
오늘은 오랜 만에 개발 관련 포스팅을 가장한 투덜투덜.
뭔가 기술적인 내용을 기대했다면... 낚인거다.

구글 앱엔진이 자바를 지원하게 됐다는 소식은 꽤 오래된 얘기. 그동안 여유가 없어 못본척 넘어가다가, 지난 주에 짬을 내서 삽질을 좀 했다.

일단, 헬로월드... 훗~ 잘되네~ 속도도 짱 빠르고, 이클립스 플러그인도 있으니 금상첨화~ 오오~ 이거! 날로 먹는 톰캣 호스팅 서비슨가? ^O^ 그러나, 섣부른 판단은 금물. 고수일 수록 칼은 조심스럽게 고르는 법... 흠흠... 좀 더 그럴싸한 걸 만들어 보자. 뭘 만들까... 고민하다가 예전에 만들다 말았던 녀석을 옮겨 보기로 했다. (기대 만땅)

제대로 할려면 맥가이버칼(메이븐)이 필요한데... 흠흠... 구글 이클립스 플러그인이 만들어주는 프로젝트의 디렉토리 레이아웃을 보니... 대략 난감. 나중에 좀 더 찾아보기로 하고, 패스 ~.~ 구글링 좀 해보면 알겠지만 나름대로 어수룩한 해법이 있긴 하다. (쉽게 포기)

ORM은 앱엔진에서 제공하는 (JDO 비스므리한) 녀석을 쓰면 되고... 일단, 스프링부터 추가하자. 그러나 1분도 안되 터져나오는 괴성~ 이 뭥미! 스타트업도 안되네. -,.- 거의 무조건 반사로 구글링~ 안되는게 정상이지만, 이러케 저렇게 요로케 조로케~ 조금만(?) 삽질하면 돌아가긴 한다는 군. 하긴... 이런걸 클라우드 위에서 돌리려면 뭔가 제약이 있을 수 밖에 없지... 꽁짜! 톰캣 호스팅 서비슨데... 이정도는 감수해야쥐 ~.~ (미련 둔탱)

그래도, 구글에서 만든 쥬스는 돌아가겠지... 라고 생각하고 후다닥~ 이것 저것 바꿔 봤지만 -.-; 천만의 말씀 만만의 콩떡. 역시 무조건 반사로 구글링 한 결과, 쥬스 최신 스냅샷 버전을 받아서 이러케 저렇게 요로케 조로케~ 조금만(?) 삽질하면 대충 돌아가긴 한다는데... (내가 뭔가 엄한 삽질을 하고 있는게 아닐까...) IoC 컨테이너라는게 첨엔 번거롭고 거추장스럽고 귀찮지만, 있다가 없으면 정말 갑갑한데... 그래도 어쩌랴... 일단 그게 중요한게 아니지! 목표에 집중하자! 집중~ 이렇게 속으로 외치며~ (근거없는... 홧팅!)

jersey를 추가하기로 하고, (메이븐이 없으니 이런 *삽질을...) 여기저기 돌아다니며 관련 jar들을 받아서 추가... 예전에 만들었던 코드에서 DAO만 살짝 바꿔치고 실행하니~ 이건 또 뭥미! ㅠ.ㅠ 다시 구글링... JAXB는 쓸 수 없다는 군 -.-; 뭐 어쩌라는 거냐! (버럭) 뭐 괜찮아... json으로 바꾸면 되지~ (대충 대충)

jettison을 추가하고 다시 이것 저것 뜯어고치기 시작. 흠... JAXB가 안되니 StAX는 당연히 안될꺼고... 그냥 단순무식하게 JSONObject로 만들어서 무식하게 toString()... 이렇게 할꺼면 jersey 쓰는 보람이 없는데... 투덜투덜... 뭔가 더 깔끔한 방법이 있겠지. 내가 GAE/J를 잘 몰라서 그런 걸꺼야~ (구글 만쉐)

오호! 된다 된다!

...

흐뭇한 마음으로 appengine에 프로젝트를 생성하고, 디플로이~~ 했으나... 끝도없이 쏟아지는 경고와 에러들...ㅠ.ㅠ appengine에 만들어진 프로젝트는 삭제도 못하는데... ㅠ.ㅠ "도대체 되는 게 뭔거냐! 그거 먼저 말해줘라!"라고 투덜거리며, 다시 구글링... oTL
구글링할 필요도 없었다. 앱엔진 자바 사이트에 예쁜 이름을 가진 페이지가 하나 있다: JRE Class White List... 이걸 이제서야 보다니... (RTFM)

애초에 블랙리스트 같은 건 없었다. 왜냐 하면 되는 것만 적는게 더 짧으니까... -,.-

물론, maven 없다고, spring 없다고, guice 없다고, jersey 없다고, JAXB 없다고, *없다고... 자바 코딩이 안되는 것도 아니고, 웹 서비스를 못 만드는 것도 아니다. 게다가 구글링 조금만 열심히 하면 나름대로 해결책도 있고, 꼼수도 있고... 그래! 문제는 이거다! 왜 그냥 자바에선 안해도 되는 꼼수를 남발하게 만드는 거냐? 구글 앱엔진에서 돌아가게 만든답시고 엄한 패치를 양산하게 만드는 거냐? (책임 전가)

예전에 마이크로소프트가 Swing 대신 DirectX를 집어 넣고 Visual J++이라는 불세출의 IDE와 함께 배포했던 MSJava를 기억하는가? 나는 그 J++로 수십만줄의 코드를 만들었었다. 그 덕분에 내 자바 실력이 얼마나 늘었는지 모르겠지만, 그 이후로는 MS의 개발자용 제품을 쓰지게 되었다. 지금 구글이 하는 짓을 보고 있노라면 그 때의 MS가 생각난다. (논리 비약)

구글은 이 따위로 만들어놓고 자바를 지원한다고 하면 안된다. 공짠데, 그 정도면 감지덕지라고? 그러니까 자바를 지원한다고 하지 말라고... -,.- 아직 "Early Look"인데 이해하라고... 그러니까 자바를 지원한다고 하지 말라고... -,.- 그랬으면 전세계의 수많은 자바 고수들이 한푼 값어치도 없는 엄한 삽질(내가 jersey에서 json을 뿌리기 위해 한 삽질같은... 값어치 없는... 그런 삽질)하느라고 시간을 낭비하지 않을 꺼 아닌가. (거짓 걸룐)

메일링에서 누가 그러더라. "이걸 Goole AppEngine for Java (GAE/J)라고 부르지말고 Guava라고 부르자"고...여기도 +1 한 표 추가!

이렇게 말하면서도 공짜 톰캣 호스팅(혹은 Django 호스팅)의 유혹을 뿌려치기란 쉽지 않다. 뭔가 낚시에 걸리지 않고(이미 걸렸나?) 떡밥만 쏙~ 빼먹는 방법은 없을까~ 궁리 중... -,.- (무전유죄 유전무죄)

Posted by iolo
hacking/web2006/11/03 20:34
크리에이티브 커먼즈 라이선스
Creative Commons License
구글이 최근 JotSpot을 인수했다.

발음하기도 참 므흣한 JotSpot... "잣스팟"이라고 읽는다 :p

JotSpot 은 말하자면 위키와 웹오피스(?)가 결합된 포스트 모던한 위키 호스팅 서비스를 제공하는 회사다. 즉, 구글이 위키의 비지니스 모델에 눈을 돌리고 있다는 얘긴데..

일찍이 많은 회사들이 위키 비지니스를 시도했었지만, 다들 위키스러움과 사용성이라는 두마리의 토끼 사이에서 헤매다가 소리 소문없이 사라졌었다. (네이버의 지식인에 대항(!)하기위해 야후가 시도했던 위키 백과 서비스를 기억하는가?)

일단, 단기적으로는 [http]GoogleDocs과의 결합을 예상할 수 있겠지만, 문제는 그 뒤다. 뻔한 녀석들도 구글이 손대면 달리지곤 한다. 이번에도 구글의 마법이 계속될까? 아니면, 구글도 실패한 위키 비지니스의 전철을 밟게 될까?

개인적으로 위키에 관심이 많고, 회사에서 하는 일이 웹오피스 인지라... 사뭇 흥미진진한 진행이다. :D

'hacking > web' 카테고리의 다른 글

AJAX이전에 AJAX가 있었으니...  (0) 2006/11/07
slideshare.net  (0) 2006/11/07
Google has accquired JotSpot  (0) 2006/11/03
IE6 vs IE7 vs FF1.5 vs FF2  (0) 2006/11/01
모니블로그, 10분만 하면 감자만큼 한다~  (0) 2006/10/29
HTML 테이블 헤더빼고 스크롤하기  (0) 2006/09/25
Posted by iolo