최근에 몸이 안좋다는 핑계로 이것 저것 하던 것들 다 손에서 내려 놓고, 아무것도 제대로 해보지 않은지 약 1달이 되었다. 이전에 Twiter4J 분석해서 여러가지를 테스트하고는 이를 GAE에 올리려고 하다가, 말았는데 그 이유는 새로 다운 받은 Eclipse 3.5 버전(Galileo)에서 돌아가는 GAE 플러그인이 제공되지 않았기 때문이 었다. 그 이후로 수 차례 GAE 사이트에 들어가서, 확인을 해 보았지만, 여전히 제공되지 않는 것을 확인하고는 잊고 있었다.

그러다가 최근에야 Eclipse 3.5 플러그인이 제공되는 것을 알게 되었다.
오늘은 GAE에 변경된 것들이 있는지 문서들을 읽어 보다가 web.xml 설정에 대한 제약들을 알게 되었는데, 어쩌면 당연한 것이라고 생각되는 것이었다.

아래의 내용인데,

App Engine supports the <load-on-startup> element for servlet declarations. However, the load actually occurs during the first request handled by the web server instance, not prior to it.

App Engine supports <mime-mapping> elements for specifying the MIME type to use for resources whose filenames end with certain extensions. However, MIME mappings only apply to servlets, not to static files. Static files use a fixed list of mappings of filename extensions to MIME types.

Some deployment descriptor elements can take a human readable display name, description and icon for use in IDEs. App Engine doesn't use these, and ignores them.

App Engine doesn't support JNDI environment variables (<env-entry>).

App Engine doesn't support EJB resources (<resource-ref>).

The <distributable> element is ignored.

Servlet scheduling with <run-at> is not supported.


읽어보면 Web Applicaton 시작시에 순서를 정해주게 되어 있는데, 이는 GAE에서는 별다는 의미를 부여하지 않는다는 것이다. 이를 사전에 처리하는 것이 아니라, 웹서버의 instance에 의해 첫번째 요청을 처리하는동안 load 되기 때문이다.

그리고, MIME mapping은 Servlet에 맵핑할때만 사용될뿐, 정적파일에는 사용되지 않는다. 정적 파일들에 대한 맵핑은 Fixed 된 파일을 통해서 정의해서 사용한다.

그리고,
- JNDI 환경변수를 지원하지 않는다.
- App Engine은 EJB 환경 변수를 지원하지 않는다.
- <distribution>은 무시한다.
- <run-at>태그를 이용한 Servlet의 스케즐링도 지원하지 않는다.
        (==> 기존의 다른 WAS상의 run-at 태그의 이용에 대한 것은 다음의 링크를 참조하면 된다.
        http://www.caucho.com/resin-3.0/servlet/run-at.xtp )




WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

영화 "터미네이터 3"가 나온지 벌써 6년이 다 되어간다. 그리고 올해 "터미네이터 4"라는 제목으로 우리앞에 새로운 모습으로 다가왔는데, 6년 전만해도, 많은 사람들이 더 이상의 시리즈는 없을 거라고 예상하였고, 실제로 주연 배우였던 "아놀드 슈왈제너거"의 캘리포니아 주지사 당선으로 더 이상의 시리즈는 많들지 않을 거라고 확신하였었다.
하지만, 6년이 지난 지금, 우리 앞에 새로운 터미네이터 시리즈로 나타난 이영화를 과연 터

미네이터 시리즈로 보아야 하느냐? 라는 질문에는 선듯 대답하기를 주저할 수 밖에 없다. 먼저 "아놀드 슈왈 제너거"가 없는 터미네이터는 허전해서, 먼가를 생각나게 만든다. 그리고, 영화의 전개는 미래인 2018년에서 벌어지게 되는게, 기존 시리즈는 "존 코너"를 지키기 위해서 현재에서 "스카이 넷"이 보넨 로봇과 싸우지만, 영화는 미래에서 "스카이 넷"이 지배하는 세상에서 인간들이 싸우기 시작하는 시점이고, "존 코너"가  저항군들을 이끌기 시작하려는 때이다. 
그렇기 때문에, 시점 상으로 보면, 전혀 다른 영화라는 생각이 들고, 만약 "터미네이터"라는 제목을 붙이지 않았다면, 다른 영화라고 생각해도 무방할 정도로 이전과는 분위기나 스토리 전개도 무척 다르다.

사실 이러한 혼란들 피하기 위해서 제작사는 TV 시리즈인 "사라 코너 연대기"를 통해서, 시간적인 공백과 미래의 "존 코너"의 행적에 대한 이해를 도우려 했다.
과연 얼마나 많은 사람들이 이러한 제작사의 의도를 파악하고, TV 시리즈를 미리 보았을지는 모르겠지만, TV시리즈를 안 본다고 해서, 영화의 재미가 반감되지 않는다.

영화는 영화 나름대로 플롯을 가지고, 고객들의 흥미를 끌어 당기고, "아놀드 슈왈제네거"가 없는 터미네이터도 존재할 수 있다는 것을 보여주고 있다. 하지만, 시나리오의 맥락을 보면, "터미네이터와는 다른 새로운 영화를 만들수 있지 않았을까?" 라는 의문이 갖게 된다. 왜냐하면 영화속에는 나름대로 잘 다듬어진 캐릭터들이 존재하기 때문이다. 특정 캐릭터에 의존하지 않고, 비슷한 비중의 주연들을 여러명을 두는 현재 영화의 특징을 그대로 살릴 수도 있었을 텐데라는 아쉬움이 있다.

영화를 끌고 오던 캐릭터 였던 "마커스"를 "존 코너"라는 비중있는 인물을 죽어야 되는 상황에서 구하기 위해서, 그리고 이를 통해서 감동을 불러오려는 의도였는지, "남의 위한 희생"이라는 이름으로 너무나도 갑작스럽게 죽는다. (사실 감동적이지는 않았다.)
사실, "마커스" 그는 영화의 스토리를 이끌었다는 점에서는 오히려 주인공 "존 코너" 보다 더 중요한 역할이었다. 

영화속의 스토리에서 이상한 점은, 2018년의 "스카이 넷"은 어떻게 "존 코너"와 존 코너의 아버지로 과거로 시간 여행을 해서, "사라 코너"를 보호해야할 임무를 받은 "카일 리스"의 존재를 알고 있는냐는 것이다. 
사실, 시간 여행을 통해서 과거로 갈 수 있는 기술이 개발되는 때는 약 20년 후의 일이기 때문이다.

영화 속의 로봇 군단과의 전투는 "트랜스 포머"이후의 영화들과 마찮가지로, 자유로운 관절 움직임이 있는 로봇들과 대형 로봇들이 영화에서 현실감 있게 표현된다.  그리고, 이러한 로봇과의 전투씬과 추격씬은 블록버스터 영화다운 스케일을 보여주고 있다.
  
"터미네이터 4"는 처음 터이네이터 시리즈를 보는 사람들이 보아도, 크게 이해하는데 어렵지 않은 오락영화이고, 부담스럽지 않은 영화이다.

 


WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  1개가 달렸습니다.
  1. 좋은 포스트 잘봤습니다.
    오셔서 영화.드라마.음악.쇼프로 다운받아 보세요.
    물론 공짜입니다^^
    www.entos.co.kr
secret
어제와 오늘은 스프링 프레임워크를에서 제공하는 코드를 이용하여, 몇가지를 테스트를 하였다.
Spring MVC를 이용하여, Sample코드를 작성해보았는데, 정상적으로 동작하지 않았다.
Springframework에서 제공하고 있는, MOC테스트도 정상적으로 동작하고, Controller에서 log를 찍어 보아도, 정상적으로 표시가 되는데, 꼭 View에서 값을 표시할 수 없다는 것이었다.

아래의 코드는 Controller의 코드로, 현재 시간을 String형으로 View에 전달되는 코드이다.
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String now = (new Date()).toString();
        logger.info("Returning hello view with " + now);
        System.out.println("Returning hello view with..2 " + now);
        return new ModelAndView("/WEB-INF/jsp/hello.jsp", "now", now);
    }

View(hello.jsp)의 코드는 아래와 같다. JSTL과 EL을 이용해서, Controller에서 전달한 값을 찍어주는 코드이다. 그러나 내가 원하는 값(현재 시간) 대신 "${now}" 라고 화면에 찍어준다.
<%@ include file="/WEB-INF/jsp/include.jsp" %>
<html>
  <head><title>Hello :: Spring Application</title></head>
  <body>
    <h1>Hello - Spring Application</h1>
    <p>Greetings, it is now <c:out value="${now}"/></p>
  </body>
</html>

위의 코드를 테스트 하기가 그렇게 쉽지는 않았다. 왜냐하면, JSTL의 문제일 것이라는 생각은 있었지만 어떤식으로 전달되는 값을 테스트 할지는 생각하기 쉽지 않고, 에러 메시지도 전혀 없었기 때문이다.
그래서, 값의 전달에 문제가 있을 거라 생각하고, 다음과 같은 코드를 넣어 보았다.

<%@ include file="/WEB-INF/jsp/include.jsp" %>
<html>
  <head><title>Hello :: Spring Application</title></head>
  <body>
  <%
       out.println(request.getAttribute("now"));
  %>

    <h1>Hello - Spring Application</h1>
    <p>Greetings, it is now <c:out value="${now}"/></p>
  </body>
</html>

위와 같이 했을 때, 임시로 넣어준 테스트 코드인 "request.getAttribute("new"))" 는 정상적으로 Controller에서 전달한 값들이 표시해 주었다. 이제 문제는 JSTL과 EL의 문제인데, 엄밀하게 이야기하면, JSTL의 문제는 아니고, EL의 문제인데, 건드릴 수 있는 부분은 자바 코드는 전혀없기 때문데, 결국 시스템의 설정을 건드려 주어야 한다.

그래서, googling과 이전에 사서 보곤했던 "Head first"시리즈로 나왔던 "Server & JSP"책을 찾아보았다.
결국 답을 찾았는데, 답은 web.xml의 설정이 잘못되었기 때문이다.

아래는 처음에 web.xml에 설정했던 것이다.
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">

위의 것을 아래과 같이 설정을 변경하였더니, EL이 정상적으로 잘 동작하였다.
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

현재 Servlet versing 2.5가 최신의 것인데, 위에서는 2.4버전으로 설정한 것을 예로 보여주고 있다. 만약 2.5 버전을  사용하고 싶다면, 아래의 것을 사용하면 된다.

<web-app
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  id="WebApp_ID" version="2.5">


Goolge App Engine은 JSTL을 기본적으로 제공하고 있기 때문에, JSTL을 지원하기 위해서, "jstl.jar"과 "standard.jar" 파일을 Class path에 포함 시킬 필요는 없다.

위와 같이 web.xml의 설정을 변경하면, 아래와 같은 결과를 볼수가 있다.

이를 해결하기까지, 생각보다 시간이 많이 걸렸다.




WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  1 , 댓글  7개가 달렸습니다.
  1. 보통 DD는 그냥 쓰던것 복사해서 쓰는 경우가 많아서,
    저도 예전에 web.xml 뼈대부분만 그냥 복사해서 썼다가
    같은 현상으로 좀 짜증 났었던 기억이 나네요. :)
    그래도 그덕에 해결방법을 아주 다양하게 알게 됐죠.

    역시 제일 좋은 방법은 포스트에 언급하신 namespace와 schema를 제대로 설정하는것인거 같구요.

    다른 방법으로는 jsp 파일에
    <%@page isELIgnored="false" %>
    를 추가해 주는 방법이 있습니다만, 너무 삽질 같구요...ㅡ_ㅡ;
    (XML 스타일이면
    <jsp:directive.page isELIgnored="false" />)

    아니면 DD안에
    <jsp-config>
    <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <el-ignored>false</el-ignored>
    </jsp-property-group>
    </jsp-config>
    이렇게 설정해주는 방법도 있구요.
    근데 이럴바에는 역시 namespace와 schema 설정을 해주는게 훨씬 좋겠죠.

    뭐 요즘이야 Eclipse와 M2Eclipse를 써서 web-app plug-in이 알아서
    DD를 생성해 주니 저런 문제 생길일은 별로 없지만,
    저런건 한번 설정해서 쓰면 크게 신경 안쓰는 부분이라서,
    이전에 쓰던 파일 한번 잘못 복사했다가
    "뭐야? 왜 전에 잘 되던게 안되지?" 하는식으로 골칫거리를 낳기 쉬운거 같습니다.
  2. 감사합니다. 자세히 여러가지 알려주셔서...
    사실 Google App Engine의 Eclipse Plugin이 만들어 주는 Web.xml이 너무나 심플해서 생겨난 문제 였습니다.

    말씀하신 대로, Eclipse에서 자동으로 생성해 주는 다른 Plugin은 별 문제가 없었거든요. 그래서 무의식적으로 확인할 생각을 하지 않고, 지나쳤는데 이번에 제대로 공부하는 기회가 되었습니다.

    감사합니다.
    • 헉, 별말씀을요.
      게을러서 제가 포스팅 하긴 힘들고,
      다른분이 좋은글 써놓은것에 정보 공유 차원에서
      몇마디 한건데요. 사실 묻어가기죠...ㅡ_ㅡ;;;

      그나저나 Google App Engine Eclipse Plugin은
      써본적이 없어서 몰랐는데, 그게 또 그렇게
      심플하게 생성하는군요.
      좋은 정보 고맙습니다. 아직 사용은 안 해봤지만,
      저도 Google App Engine에 관심이 있어서
      조만간 사용해 볼까 했는데,
      알려주신덕에 plugin이 생성한 web.xml 때문에
      발생하는 문제는 모면했네요.

      역시 정보는 다른이와 나누면 더 크게 돌아오는군요...^^
    • Kevin님의 블로그를 방문했는데, 좋은 자료들이 많이 있더군요. 또 찾아 주셔서 감사합니다.
  3. 저기 궁금해서 그러는데요.. 혹시 SpringMVC의 ViewResolver는 어떤걸 사용하셨나요??
  4. 저기 궁금해서 그러는데요.. 혹시 SpringMVC의 ViewResolver는 어떤걸 사용하셨나요??
  5. 저기 궁금해서 그러는데요.. 혹시 SpringMVC의 ViewResolver는 어떤걸 사용하셨나요??
secret
지난주에 Google App Engine SDK가 새로 Release되었다.
이번 Release는 Java 언어를 지원하고, 처음 제공되는 Release로 많은 버그들이 수정되었고, 새로운 기능들을 추가하기 위해서 제공한다고 한다.

추가 및 변경된 주요 기능은 아래과 같다.

- Support for unindexed datastore properties of arbitrary types
- Embedded UTF-8 characters in JSPs now render correctly
- Increase in response size limit from 1MB to 10MB
- Support for Thread.setContextLoader()

전체적인 수정된 항목들은 다음의 링크를 통해서 알수 있다.

위 내용들을 살펴보면, 현재 제공하고 있는 기능들을 사용하는 것이 만만치 않음을 알 수 있다. 아직까지는 최종 버전으로 제공되기에는 개발자들의 시행 착오를 필요로한다는 것이다. 그래도 해 볼만한 가치는 있다고 본다. 이렇게 빨리 버그들의 수정과 기능의 변경들이 이루어 지고 있으니 말이다.
만약 SDK를 이용하여 개발하고 있다면, 위의 세부 내용들을 한번씩 살펴보는 것도 시행착오를 줄이는 좋은 방법이다.
생각보다 많은 버그들은 아니므로, 한 시간 정도 투자하면 모든 것들을 살펴 볼 수 있을 거라 생각된다.

새로 제공되는 SDK는 구글에서 여기에서 다운을 받아서 설치 할수있다.
그러나 Eclipse의 plugin을 업데이트 하는 방법이 더 간단하므로, 여기서는 이를 이용하여 설치 하는 방법을 간략하게 알아보겠다.

Eclipse의 Software Updates and Add-ons 창을 열어서, 새로운 Plugin을 찾아보면, 아래와 같이 구글에서 제공하는 App Engine을 위한 Plugin과 SDK를 쉽게 찾을 있을 것이다.


위와 같이 선택을 하고 우측 tkd에 있는 "install..." 버튼을 클릭하여 다음 단계를 진행하면 된다.
이어서 아래의 화면이 나오는데, "NEXT" 버튼을 이용하여 다음 단계로 이동하면 된다.
  
위 화면에 이어서, 라이센스에 동의하는 화면에서 사용자가 동의하면 설치가 진행하게 된다.
설치가 마쳐지면, Eclipse를 다시 시작하면, SDK의 Update 작업은 끝나게 된다. 이미 Eclipse를 사용하고 있는 개발자라면 이는 매운 간단한 작업이 될 것이다.



자 여기가 끝이 아니다, 한거지 더 해야 할 작업이 있다.
지금까지는  SDK를 새로 설치한 것이 아니라, 단지 기존의 것을 업그레이드 하기 위한 준비 작업을 진행하였을 뿐ㅇ이다.  Eclipse에서 이것이 자동으로 설정들이 변경되고, 등록되었으면 좋겠지만, Google에서는 그렇게 제공하지 않고 기존에 설치했던 SDK를 제거하였기 때문에, 기존에 잘 동작하던 프로젝트의 클래스들 마져 Build Error가 일어나는 것을 볼수 있다. (사실 이부분은 나도 전혀 예상하지 못했던 부분이다.)

이를 해결 하기 위해서는 "Java Build Path"의 설정을 수정해 주면 된다. 이해하기 쉽게 말하면, 기존의 것을 참조하고 있던 것을 새로 설치한 SDK의 Path로 설정을 변경하면 된다.

먼저, Eclipse에서 "Alt + Enter"키를 눌러서 아래의 화면을 호출하거나, Eclipse의 window 메뉴의 서브 메뉴인 Preferences 메뉴를 마우스를 클릭하여 아래의 창을 띄운다. 그리고, 왼쪽의 메뉴 트리에서 "Java Build Path"를 클릭하고 "Libraries"템을 클릭한다. (아래 그림 참조)


Google SDK의 새버전으로 변경하기 위해서는,  위 화면의 오른쪽 리스트 창에서 "App Engine SDK..." 항목을 선택하고 오른쪽에 있는 "Edit"버튼을 클릭한다.


아래와 같은 화면이 나타나면, 새로 설치되어 있는 "1.2.1" 버전으로 설정을 변경하고 "OK"버튼을 눌러주면 설정이 모두 끝마치게 된다.

위와 같이 Build Path의 변경이 마쳐지면, Eclipse는 정상적으로 프로젝트를 빌드하고, 동작하게 될것이다.
자, 이제부터 즐거운 프로그래밍 시작이다.


WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Google App Engine에 Java버전 SDK를 다운받고, Springframework을 이용하여, 간단한 MVC모듈을 이용하여 테스트해보고, Google 서버로 테스트해보고 그동안 아무로 작업을 하지 못했다.
개인적으로 여러가지 좋지 않은 일들이 있었기도 하고, 그리고 주말을 제외하면 나만의 관심사들을 깊이 있게 공부하기에는 시간들이 부족하기도 하고, 음.. 변명거릴 찾으려니, 구차하기까지 하다.

오늘은 잠시 스타벅스에 들러서, 잠시 "Google App Engine Java"에 대한 자료들을 살펴보고 있는 중이다.
그리고 살펴보고 있는 자료를 간략하게 나마 정리하고 있는 중이다.

다음 자료를 참고함.
 
 
App Engine Jave Overview
    - Java 표준 기술
        : Java의 표준 기술들로 web applicaions을 개발하고, 이를 구글의 확장성 있는 Infrastucture위에서
          구동 가능하도록 함.
        : 이를 위해서 Java은 Java 6 JVM환경과 Java Servlets interface, 그리고 표준 Interface를 통해 
          App Engine의 확장가능한 Datastore와 Serviece에 제공한다.
            .JDO, JPA, JavaMail 그리고 JCache 등
   
    - Google Plugin for Eclipse
        : Eclipse를 통해서 제공되는 Plugin은 개발을 새로운 프로젝트를 생성하고, 디버그를 도와준다.
        : 이는 Google Web Toolkit을 통해 Cross plotform에서 개발을 용이하도록 도와준다. 
        : 다음 the Java Getting Started Guide 를 통해서 Google App Engine에서 소개 자료를 찾아 볼수 있다.
 
    - The Java Runtime Environment
        : App Engine은 Java 5 JVM상에서 Appliction을 동작시킨다.
        : App Engine SKD는 Java 5와 그 이상의 버전을 지원한다.
        : App Engine 은 Web Application을 위해서 Java Servlet 표준을 사용한다.
            . Java Server Pages, static files and data files 그리고 web.xml과 같은 설정 파일이 
              Standard WAR 디렉토리 구조 안에정의됨.
        : JVM은 보안적인 측명에서 별도로 Appliaciond의 서비스를 지원하도록 분리되어 동작한다.
        : 제약사항으로 App은 Threads를 생성학나 local file system에 데이터를 쓰거나,
          임의로 네트워크 커넥션을 만들수 없다.
        : 더 많은 내용들은 Servlet Environment 를 참조한다.
 
    - The Datastory, the Services and the Standard Interfaces
        : App Engine은 확장성 있는 서비스들을 제공하는데,
            . Application들이 persistant data를 저장하고,
            . 네트워크를 통해서 리소스에 접근하고,
            . 이미지 데이터들을 처리할 수 있도록 해준다. 
        : Datastore은 2가지 표준 자바 Standard Inteterface를 제공한다.
            . Java Data Objects (JDO) 2.3
            . Java Persistence API (JPA) 1.0
        : 위 두개의 Interface는 DataNucleus Access Platform 를 사용할 수 있도록 구현되어져 있다.
        : App Engine은 Memcache를 제공한다. 이는 Datastrore의 Query들과 계산 결과를 캐싱해서
            전달할 있도록 한다. 
            . Java Interface는  JCache (JSR 107)을 구현하였다.
        : URL Fetch 서비스는 다른 웹의 Resource에 접근할 수 있도록 도와준다.
            . Http/Https를 이용하는 다른 서버와 통신이 가능하다.
            .  java.net.URLConnection 를 사용한다.
        : Mail Service
            .  JavaMail Interface를 이용하여 email 메시지를 전송할 수 있음.
        : Image Service
            . Applications에서 이미지를 변환할 수 있도록 서비스를 제공함.
            . 이미지의 크기를 변환하거나 다른 포멧으로 변환이 가능토록 함.
         : Authentication
            . Google Account를 이용한 인증이 가능함.
            . Google Account는 사용자의 계정을 생성하거나, Sign-in할 수 있음.
            . 이미 사용자가 Google의 Account를 가지고 있다면, 이를 Application에 사용할 수 있음.
            
    - Sheduled Tasks
        : Application은 특정한 주기로 Task를 시작할 수 있도록 설정해서 실행할 수 있다.
        : 이는 Unix와 Linux의 Cron Jobs와 유사한다. 다음의 Cron Jobs 를 참조.
    - Java Tools
        : App Engine Java SDK는 몇가지 툴을 포함하고 있다.
            . Test Application
            . Uploading the Application files
            . Downloading log data
            . Apache Ant
            . Google Web Toolkit (GWT)
        : Development server
            . Local에서 application의 개발과 테스트가 가능하도록 도와줌
            . Server는 App Engine의 Data store와 service 그리고 Sandbox를 시뮬레이션을 도와준다.
            . 개발 서버는 data store의 인덱스와 쿼리를 Application에서 테스트 할 수 있도록 도와준다.
        : AppCfg
            . 이 툴은 Command-line인터페이를 제고하여 application을 Google App Engine에서 실행할 수
                있게 도와준다.
            . Application을 Upload하고 index의 구성를 수정하고, Application의 로그를 다운로드 해준기도 한다.
            . 세부 내용은 다음의 "AppCfg"의 내용을 참고한다.
 
간단하게 읽는다는 것이 정리를 하게되니 쉽지가 않다.
하지만 정리하진 않은면, 기억에서 금방 사라지기 때문에, 어쩔수 없다.

WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
나는 전문적으로 주식투자를 하는 사람이 아니고, 많은 관심을 보이는 사람도 아니다. 그리고 주식을 공부하기 위해서 이러 저러한 책은 섭렵하고, 연구하는 사람은 더 더욱 아니다.

그런내 내가 이책은 보게된 것은, 지난해 가을경, 미국에서 시작된 경제위기로 인하여 세계 경제가 긴장 상태에 놓였을때, 김정현 책임이 우연히 나에게 언급하게 된 것이 계기 였다. 이전에도 "시골의사의 경제학"이라는 책을 보려고, 나의 읽을 책 목록에는 넣었지만, 읽지 못하고 지나쳐 버려서 한층 관심이 생겼다.

그때 나의 관심을 끌도록 만들어준 이야기 하나는 주식 투자를 위해서 투자자들의 돈을 끝어드리는 방법에 대한 예 였는데, 투자자들이 의심하지 못하도록 만드는 것이었다. 즉 100% 확실한 정보를 가지고 있고, 그에 대한 증거를 보여주고, 이를 이용하여 투자할 사람들을 찾는 방법이었다. 사람들에게 주식이 오르고 떨어질 거라는 예측을 연속해서 증명한다면, 대부분의 사람들이 믿을 것이다.
먼저 2000명에게 어느날의 주식시장의 동향이 어떨거라는 메일을 보내는데, 1000명에게는 오른다고 보내고, 나머지 1000명은 떨어진다고 보낸다. 이들은 서로를 모르고 개별적으로 받은 메일이라고 생각할 것이다. 그리고 예측이 맞은 1000명중 500명에게는 또 어떤 주식이 오른다고 보내고, 나머지 500명은 떨어질 거라고 보낸다. 이런 식으로 수차례를 예측한 결과가 맞은 사람들에게 반복해서 보내다 보면, 한번도 틀리지 않고 예측이 모두 맞았다고 믿는 사람들이 생겨날 것이다. 이들은 또한 앞으로도 계속 예측이 100% 맞을 거라는 믿을을 갖게 될것이다. 이때 이들에게 투자를 유도하고, 투자자들은 확신가운데 자신의 돈을 기꺼이 푼다는 이야기였다. 

위의 예를 김정현 책임에게 듣고는 갑자기 책에 대한 관심이 생겨났고, 올초에 책을 사사는 회사에서 하루에 몇장씩 책을 보기 시작했다. 그리고는 최근에 1권을 모두 보게 되었다.

책은 내가 생각했던 주식투자를 위한 지침도, 가이드 책자도 아니었다. 저자인 박경쳘씨는 주식 투자에 대해서 이렇거고, 이러니까 이래야 한다고 강력하게 말하지 않는다. 오히려 주식 투자는 성공할 수 없다라고 이야기 하면서, 자신의 지식과 경험을 이야기 한다. 그리고 주식 투자를 말리기까지 한다.
왜냐하면, 주식시장의 역사는 약 200년이 되었지만, 아직도 아무도 예측할 수 없고, 수도 없는 많은 변수들 가운데서 앞으로 이럴거라고 예측하는 것이 무의미 하기 때문이다. 많은 분석과 연구가 있지만, 이역시도 현재의 현상에 대한 분석이지 미래를 예측하는데는 많은 불확실함을 내포하고 있기 때문이기도 한다.

책을 처음 읽으면서, 저자의 이러한 이야기는 책에 대한 나의 예상과는 많이 달랐다.
그리고 책은 주식에 대한 저자의 개인의 생각보다는 경제에 대한 많은 학설과 연구들을 참조하여 객관적인 입장에서 이야기하고 있다. 이러한 경제적인 연구들은 독자들의 이해를 높일뿐만 아니라, 그의 이야기의 객관성을 부여하는데 도움이 될것이다.

1권을 읽으면서, 책을 통해서 경제학에서 다루고 있는 많은 이론들과 돈의 흐름에 대한 연구들을 시대별로 알수 있었다. 그리고 최근의 외환위기와 미국의 서브프라임를 촉발된 현재의 위기에 대한 내용도 이해하는데 많은 도움이 되었다. 경제에 대한 많은 연구들이 있고 삶에 밀접한 것임에도 무관심하게 지나칠때가 많았는데, 이 책은 알아야 할 것들을 쉽게 이야기 하고 있다.

저자는 1편을 마무리 지을때 까지도 주식을 통해서 대박을 꿈꾸는 이들에게 경고한다. 이는 대부분의 사람이 손해을 볼수 밖에 없는 게임이라고...

내가 이책에서 얻은 것들은 주식에 어떻게 투자를 할것이가에 대한 것이 아니다. 그런 의미에서는 이 책의 제목은 다분분히 미끼(?) 성 문구이지 않나 싶다.
경제와 자본의 흐름에 대한 오랜 역사적인 연구와 실례를 통해서, 미처 보지 못했던 여러가지 경제 논리와 이론들을 알게 되었다. 물론 이러한 이론적인 토대가 나의 삶에서 어떤씩으로 쓰일지는 모르겠다. 그리고 어떤 사람들에게 이러한 것들이 재미 없을 것이라고 할지도 모르겠지만, 적어도 나에게는 책을 손에 들고 있어야하는 이유를 제공해 주었다는 점에서 의미가 크다. 

그래서, 사놓은지 오래 되었는데, 아직 읽지 못한 2편을 기대하고 있다. 또 어떤 식으로 나의 시야를 넓혀 줄지... 

WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
자바를 이용하여 개발하는 개발자 대부분은 아마도 서버용 Application을 개발할 거다.
자바라는 언어가 현재는 main stream으로 자리를 잡았지만, 윈도우즈 애플리케이션 보다는 서버 환경에 적합한 기술로 알려지고 있다. 하지만, 개발자들은 대부분 자신이 만든 코드가 동작하는 환경에는 알려고도 하지 않을 뿐더러, 어떤식으로 접근해야 하는지 알지 못한다.
예전에는 하드웨어의 성능을 최대한 이용하기 위해서 WAS와 Web Server의 세부적인 부분까지 알고 튠닝을 하는 일이 많았으나, 요즘은 이를 제대로 알려고 하는 사람들을 찾아 보기 힘들다. 물론 기본적으로 설정한 값들을 그대로 사용해도 잘 동작할 만큼 하드웨어의 성능과 넉넉한 메모리 때문에 시스템 동작에 큰 영향을 주지 않는다고 할지도 모르지만, 개발자는 항상 최악의 상황까지도 염두에 두어야 한다.

이 책을 보게된 동기는 제목중에 있는 "코딩 습관"이라는 말 때문이었다. 하지만 전체적으로는 코딩을 위한 내용이라기 보다는 서버의 튜닝과 문제점 해결에 대해 많은 내용을 다루고 있기 때문에, 초보자들에게 좋은 가이드가 될 것 이라 생각된다.
 
이 책의 저자는 SDS에서 실무 경험을 쌓은 엔지니어이다. 책은 가상의 인물을 통해서, 실제와 같은 상황을 예를 들어 개발자가 개발에 관한 기술들을 습득하고, 활용하는 방법에 대해 익혀나가는 것을 독자와 같이 공유토록 이끌어 간다.

개발이라면 코딩이 끝이라고 생각하는 것에서, 시스템 환경 구성과 문제를 어떤 식으로 해결할 지에 대한 가이드가 될 수 있는 책이라고 생각돤다. 이러한 점에서는 제목에 포함되어 있는 코딩 습관이 별로 어울리진 않을지라도, 한번쯤은 읽어 볼만한 책이라 생각된다.

책에서 다루고 있는 내용을 간략하게 소개하면 기본적인 시스템의 메모리 관리와 GC의 종류들과 이를 어떻게 활요할지, 그리고 프로파일링 툴들에 대한 설명들과 Java의 메소드와 API들에 대한 성능및 목적에 맞는 사용법에 대해서
IO에 대한 병목 처리와 로그의 중요성을 설명하고 있다.

그리고 WAS 또는 서버 설정을 위한 기본적인 Thread와 인스턴트 설정에 대한 것과모니터링 API에 대한 JMX에 대한 소개와 사용 방법에 대해서 설명을 한다. 그리고 책의 마지막에는 저자가 실제 있었던 상황들을 이를 해결하기 위해서 사용했던 방법론들을 예를 들어 독자들에게 설명한다. 

결론적으로 이 책은 국내에서 찾아보기 힘든 주제를 다루고 있는 책으로, 초보자들이 전반적인 지식을 얻기에는 도움이 될거라 생각한다. 하지만 제목 대로 좋은 코드를 다루거나 하지는 않기 때문에 코딩 관점에서 책을 보게되면 약간의 실망을 가질것이다. 책에서 다룬고 있는 여러가지 툴들은 개발자와 테스터에게 좋은 툴과 무기로 제공될거라 생각된다. 특히 자바 VM의 GC를 처리하고 이의 동작 방법은 자바의 메모리 관리를 이해하는데 도움이 될것이다.

WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Google Trend를 이용해서, 최근에 사용되고 있는 웹 기술들을을 한번 살펴 보았다.
기술이라는 것이 단지 인기에 의해서 흥하고 망하는 것은 아니지만, 사람들이 관심을 끌고 있는 기술들이 무엇인지 안다면, 분명히 그 이유가 있다. 그리고 이를 안다면 개발하고자 하는 프로젝트에 적용할 때, 적지 않은 도움이 될거라고 생각된다.

내가 회사에서 관련 있는 프로젝트는 ExtJS를 기본 Javascript Framework로 사용하고 있는데, ExtJS는 라이센스가 유료이다. 그리고 많은 Component를 개발자에게 제공하지만, 이를 숙달할수 있도록 익히기 위해서는 약 2달정도의 공부할 수 있는 시간이 필요하다. 왜냐하면, Javascript와 CSS의 기본을 충분히 알지 못한다면, 각 Componet를 원하는대로 쉽게 제어하기 힘들기 때문이다.
그래서, 최근에는 JQuery를 검토하고 있고, 이는 생각보다 개발자드의 코드를 많이 줄여주고, 코드를 단순화 시키는데 도움이 된다. 

Google Trend를 통해, 이러한 기술들에 대한 사람들의 관심도를 알아보기 위해서 검색을 해보니, JQuery에 대한 관심도가 상승곡선을 타고있고 Prototype과 ExtJS는 상대적으로 낮은 traffic을 보여주고 있다.

     jquery: 6.40    prototype: 9.80    extjs: 1.90

 위 그래프는 JQeury의 관심도가 ExtJS보다 약 6배정도 높다는 것을 보여주고 있다. (ExtJS를 1이라고 볼때, JQeury는 6.40의 traffic을 보여주고 있다.)  Prototype의 traffic은 초기부터 현재까지 거의 일정하다. 이를 사랑하는 사람들이 꾸준한 애정을 가지고 있다고 할 수 있다.

다음은 개인적으로 관심을 가지고 있는 Microsoft의 ASP.NET MVC에 대한 사람들의 관심도를 알아볼 것이다.
최근에 ASP.NET 3.5의 Extention으로 마이크로소프트 사는 MVC프레임워크를 개발하고 1.0버전을 공식 발표했다.
이에 대한 사람들의 관심도는 기대 이상으로 보인다. 향후에 이를 이용해서 개발하는 개발자들이 꾸준하게 늘거라 생각한다. 그리고 MS에서는 Asp.net에서 제공하는 기본 Javascritp framework으로 JQuery를 제공하고, 이를 Visual studio에서 툴로서 지원하고 있다. 

최근에 많이 사용하고 있는 Spring MVC와 Structs를 비교해서 검색해 보았다.
Spring MVC는 꾸준하게 관심도를 유지하는 반면에, Structs는 시간에 지남에 따라 상대적으로 관심도가 줄어 들오 있다. 이에 반해 MS의 ASP.NET MVC는 최근에 발표된 이후로 많은 관심을 끌고 있음을 아래 차트를 통해서 알수 있다.
 
    spring mvc: 2.10    struts mvc: 1.00    asp.net mvc: 1.40  

위의 차트가 모든 것을 다 말해줄수는 없다. 최근에 발표되었기 때문에 MS의 ASP.NET MVC가 사람들의 관심을 끌고 있을 수도 있고, 검색 조건에 따라서 차트의 결과가 달라질 수도 있기 때문이다.
그러나 분명한 것은 개인적으로는 MS에서 발표한 MVC 프레임워크와 Scheffold 기능은 오픈 소스에서 진행되었던 여러 프로젝트의 장점들을 따서 만들었기 때문에 개발자들에게 도움이 될거라는 점이다.

어떤 기술을 선택할지는 개발자의 몫이다. 기간과 리소스와 개발자들의 기술 수준을 고려해서 프로젝트 초기부터 잘 검토한다면, 효율적인 개발이 이루어질거라 믿는다. 초기에 제대로 검토하는 시간과 노력없이 프로젝트를 진행해서 나중에 땜빵으로 누더기를 만드는 프로젝트를 여러번 보아왔다. 이 또한 개발자의 양심과는 대치대는 것이지만, 후 작업과 품질 좋은 코드를 원한다면, 초기에 많은 시간이 들여야 한다.

항상 하는 이야기지만, 개발자는 코드로 이야기 해야한다.

WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  1 , 댓글  0개가 달렸습니다.
secret

어제는 근로자의 날이라서 출근하지는 않았었다. 그리고 전날은 부부동반 모임이 있어서, 늦에 들어온 것을 핑계삼아 간만에 게으름도 피우고 그랬다. 아니 사실은 게으름을 피운 것운 것이 아니라, 감기인지 못살인지 몸이 좋지 않아서 누워서 오전을 보냈다. 선천적으로 늦잠을 좋아하지 않는 관계로 시간이 무척 아까웠다.

무엇을 할까 고민하다가, Google App Engine에 스프링으로 간단한 페이지를 한번 올려봐야지라는 생각이 들었다.
최근에 Google의 Eclipse 플러그인과 SDK는 이미 설치해서 간단한 것들은 적용해 본 상태여서, Google의 App Engine의 인증만 남은 상태이므로 남은 작업은 정말 간단하다.

만약 Eclipse에 Google App Engine Plugin과 SDK를 설치 하지 않았으며,
이전에 블로그에 올렸던 다음의  글을 "Google App Engine SDK 설치 및 실행" 를 참조 하기 바란다.

위와 같이 Google App Engine을 위한 기본 환경을 만들었으면, Spring Framework를 다운 받아야 한다.
이미 Spring Framework를 이용하여 개발한 경험이 있는 개발자라면, 기존에 가지고 있던 Library들을 그대로 사용하면 되지만, 그렇지 않은 개발자라면 www.springframework.org 에서 다운 받아야 한다.
                      - Spring Framework 2.5 Dependency Version Download

지금은 SpringFramework 3.0M3가 공개되고 있지만, 정식 Release된 2.5.5버전을 예제 작성에 사용할 것이다.
(물론 다른 버전을 사용해도 큰 영향은 없을거라 생각된다. 환경만 잘 맞추어 주면 말이다.)

자 이제 본론으로 들어가서, Google App Engine의 Eclipse Plugin을 정상적으로 설치하게 되면, Eclipse의 상단 메뉴텝에 다음과 같이 3개의 아이콘들이 생겨난 것을 볼수 있을 것이다.

   



위에 첨부한 메뉴 이미지 중에서 왼쪽에 있는 메뉴 아이템을 클릭하여 "New Web Application Project"창을 아래와 같이 띄운다.

위의 창에 생성할 프로젝트 이름을 입력하고, 기본적으로 생성할 패키지명도 입력한다. 만약 Google Web Toolket를 사용하기 원하지 않으면 체크박스에서 체크 표시를 지워주고 하단에 있는 "Finish"버튼을 클릭하면 된다.

프로젝트를 생성하면 기본적인 Servlet을 예제로 제공한다. 자 일단 테스트를 위해서 이를 실행해 보자.
아래와 같이 "Debug As" 메뉴의 서브 메뉴인 "Web Application" 를 실행시키면 웹서버가 실행된다.



이를 확인하기 위해서는 웹브라우져의 주소창에 "http://localhost:8080" 입력하여 실행하면 된다.

정상적으로 동작하는 것을 확인하면, 이제 스프링을 실행할 수 있는 환경을 만들어 보겠다.
예제는 아는 사람들에게는 잘 알려져 있는 "step-by-step" 를 예제로 작업할 것이다. 환경을 만들어 주기 위해서는 이전에 다운 받은 Springframework에서 Spring.jar, Spring-mvc.jar 그리고 common-log.jar 파일을 WEB-INF/lib 디렉토리 아래로 복사한다. (아래  그림 참조)

common-log.jar 파일은 Google에서 제공하는 logging 패키지를 이용해도 되지만, Spring의 "DispatcherServlet"을 로딩할때 에러가 나기 때문에 넣어준 것이다. 위의 "step-by-step" 예제를 따라하면, 기본적인 웹페이지를 작성할 수 있을 것이다. 다만, "Ant Build"에 관한 내용과 "Unit Test"에 관한 부분은 크게 신경 쓰지 않아도 된다.

Spring의 "DispatcherServlet"을 이용한 기본적인 예제는 큰 에러 없이 작성될거라 믿는다. 만약 에러가 난다면, Google의 SDK없이 만들어서 돌려보기 바란다. 기본적인 개념을 익히는데 큰 도움이 될거라 믿는다.

일단 http://localhost:8080 을 이용해서 무리가 없으면,



위 이미지의 메뉴중(붉은 박스로 안에 있는)에 세번째 아이템(비행기 모양의 버튼)을 클릭을 하여 "Deploy Project to Google App Engine" 윈도우를 띄운다. 



위와 같은 창이 뜨면, 입력할 값들을 입력박스에 채워 넣고 Deploy를 실행하면 되는데, 이를 위해서는 Google App Engine의 인증이 필요하다. 인증을 위해서는 이미 구글의 Account가 있어야 하고, 이를 이용하여 Deplore를 진행할 수 있다.

아래의 이미지는 서버에서 서비스할 application을 위한 기본적인 정보인데, 간단하게 필요한 내용을 입력하면 된다.


위 화면의 "Applicatiion Identifier"는 자신이 원하는 App Engine상의 sub 도메인 역할을 하는 것이고, "Appication Title" 은 적절한 이름을 넣어주면 된다. 인증 관련된 부분은 특별한 설정 없이 그래도 놓은면, 누구다 다 접속이 가능하고, 별도의 추가 설정이 필요하면 "Edit" 링크를 눌러서 추가 설정을 해주면 된다. (자세한 내용은 구글에서 제공하는 가이드를 참고하기 바란다.)
 
설정을 마쳤으면 "Save" 버튼을 클릭하면 서버상의 설정을 마쳐지게 된다.

내가 작성한 셈플 프로그램은 여기에 있다.
    Sample Progrom 링크 : http://happyzoo2009.appspot.com/hello.htm

추가적인 사항으로는 Google App Engine에서 제공하는 DB는 공식적으로는 없다. 다만 Google App Engine의 Datastory를 이용이 가능하다. 하지만 이 역시도 Google에서 제공하는 Library를 통해서 JPA와 JDO틀 통한 이용이 가능하다. 이를 이용해서 Persistance 데이터들을 관리해서 사용해야 한다. 이의 사용은 기존의 관계형 DB와는 차이가 있다. 때문에 제대로 이용하기 위해서는 역시 공부하고, 분석하는 시간들이 필요하다.

하지만, 관계형 DB의 사용도 가능하나 역시 제약이 뒤 따른다. HSQLDB를 이용하여 in-memory상에서 동작을 시키는 경우이다. (이런 경우는 Hibernate의 이용이 가능하다. ) 
 
이제는 데이터를 어떤식으로 다룰지에 대한 고민들이 남아있다.
한가지 한가지씩 배워나가는 즐거움이 있는 장남감이다. SprignSource에선 Groovy와 Grails을 이용한 예제를 벌써 내 놓았다. 아직은 이들을 적용하고 싶은 생각은 없지만, 조만간 한번을 이들에 대해서도 공부하고 알아야 겠다는 생각은 늘상 가지고 있다. 일단은 Jruby를 먼저 적용해 보고 싶은 생각이 크다.






WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

오늘 날자로 따끈한 소식이 "Google: Upgrade now to Android 1.5 "Cupcake" SDK" 라는 타이틀로 ZDnet에 떴다.
드디어 Google에서 Android 1.5 정식 버전이 릴리즈 되었다. 물로 이에 대해 관심 있는 개발자라면, 다른 여러 경로를 통해서 들었을 것이다.

최근에 Apple에서는 iPhone SDK 3.0 베타를 공개했고, 이어서 6월에는 정식 버전이 공개될 예정이다.
이로 인하여 모바일 디바이스 개발자들이 양분될지도 모르지만, 이는 우려일거라 생각된다. 현재 Apple은 10억 다운로드를 전면에 내세우며, 비지니스 모델의 우월함과 개발자들의 절대적인 지지을 받고 있다.

이에 구글은 올해를 모바일 플랫폼의 입지를 세우는 중요한 해가 될거라 예상하고 있고, 최근 한국의 삼성전자는 6월에 Google Phone을 출시하려는 계획을 가지고 있고, 며칠전에 여러 신문사들이 이에 대한 기사를 다루었다.
다음은 동아일보에 나와 있는 "삼성 '구글폰' 6월 유럽 출시"라는 기사이다.
    기사 링크: http://www.donga.com/fbin/output?f=k__&n=200904280062

그리고, 구글폰이 미국에서 100만대가 팔렸다는 기사도 접할 수 있다. 이에 대한 기사는 여기를 참조하기 바란다.

안드로이드 SDK 1.5버전의 릴리즈는 중요한 시점에 발표되었고, 이를 통해서 새로운 방향을 모색할 수 있으리라 본다.
하지만, 이를 통해 개발하기 위해서는 기본적인 시뮬레이터와 개발을 위한 디바이스의 확보가 필수적인데, 아직까지는 국내에서 언제쯤 출시될지는 미지수이다.

자바 개발자들에게는 안드로이드는 또 다른 의미로 다가 올수 있기 때문에, 새로운 기회를 모색하고 있는 자바 개발자라면, 반드시 관심을 갖을 필요가 있을 거라 생각된다. 개인적인 생각일지 모르겠지만, 이러한 기회들을 지난 20년동안 그리크게 많지 않았다. 다만 머저 앞서갔던 사람들은 그 만큼 많은 기회를 얻었다는 것이다. 왜냐하면, 초반에는 희소성의 원칙이 지배하기 때문이다. 그리고 더 많은 패러다임의 변화를 체득한 사람들은 그렇지 않은 사람보다 여유로울 수 밖에 없다. 특히 개발에 대한 애정밖에 없는 순수한 개발자라면 더더욱 그렇다. 조만간 국내에서도 안드로이드 SDK를 이용하여 개발이 가능한 환경이 찾아 올것이다.

애플이든 구글이든 한 업체가 전체 시장을 다 먹을 수는 없을 거라 생각된다.
애플이 빠르게 시작하였지만, 아직까지는 시장이 만들어지는 단계이기 때문에(단지 하드웨어만 판다고 하면 이는 전혀다르다.), 향후의 행보는 쉽게 예측하기 어렵다. 다만 애플이 App Store를 통한 비지니스 모델이 성공하면서, 기업끼리의 경쟁에서 "개인과 개인" 또는 "개인과 기업"의 경쟁 구조로 Echo System을 만들어 버렸다. 이것이 언제까지 지속될지는 알수 없지만, 지식 노동자의 개인에게 기회를 제공했다는 점에서 큰 의미를 부여할 수 있다.

아래 링크는 위 블러그에서 참조 삼아 가져온 링크들이다. 이중에는 "Android 1.5 Version Notes"는 구글의 Adroid에 대해서 관심있는 개발자라면 한번 읽어 볼만하다. 

  • Top 5 features in Android 1.5 (Cupcake)
  • 1.5 Non-Working Apps List (as of 06apr2009)
  • Android 1.5 Version Notes
  • Flashing your Android Dev Phone with a Factory System Image
  • Planet Android
  • Follow Planet Android on twitter (@droidfeed)
  • 가끔씩은 기회를 기다릴수 있는 인내와 그리고 기회에게 먼저 다가갈 수 있는 용기가 필요하다.


    WRITTEN BY
    행복상자
    행복한 마음으로 매일을 살고 싶은 개발자 입니다.

    트랙백  0 , 댓글  0개가 달렸습니다.
    secret