역시 예제는 소녀시대를 이용해서.....-_-;
우선 저는 파이썬을 전혀 모르는 상태에서 만들었기때문에 태클환영합니다ㅠ

앱엔진 셋팅은 이곳을 참조 http://mudchobo.tomeii.com/tt/390

우선 편하게 코딩하기 위해서 NetBeans를 이용할 것인데, 이것을 이용해서 애플리케이션을 실행하거나 하지는 않아요. 실행은 cmd창 띄운 뒤, 그냥 수동으로 실행할겁니다(설정을 못해서-_-) 디버깅도 어떻게 하는지 모르겠네요. 할 순 있는건가-_-;

넷빈즈실행 -> New Project -> Python -> Python Project -> Project이름은 GirlsGenerationsAge-_-; -> Finish!
프로젝트 Properties에서 Sources -> Encoding을 utf-8로 변경.

우선 DB모델을 만들어야하는데요.
[code]class Sosi(db.Model):
    name = db.StringProperty()
    birth = db.IntegerProperty()[/code]
db.Model을 상속받고, name과 birth라는 property가 있어요. name은 이름이고. birth는 태어난 해입니다.

첫 메인페이지를 만들어야하는데요.
[code]class MainPage(webapp.RequestHandler):
    def get(self):
        path = os.path.join(os.path.dirname(__file__), 'html/index.xhtml')
        self.response.out.write(template.render(path, {}))[/code]
이 페이지는 html/index.xhtml파일을 불러오게 되어있어요. 그럼 html/index.xhtml파일을 만들어봅시다.
우선 html이라는 폴더를 source에다가 하나 만들고, 거기에다가
New -> Other -> Other -> XHTML File -> File Name은 index입력 후 finish.
html/index.xhtml
[code]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>소녀시대 나이검색</title>
    </head>
    <body>
        <form action="/search" method="post">
            <div>소녀시대 멤버이름을 입력하세요 :
            <input type="text" name="name" />
            <input type="submit" value="검색" /></div>
        </form>
    </body>
</html>[/code]
메인페이지가 완성이 되었어요! 그럼 이제 요청을 하는 search페이지를 만들어봅시다.
[code]class Search(webapp.RequestHandler):
    def post(self):
        name = self.request.get('name')
        sosis = db.GqlQuery("SELECT * FROM Sosi WHERE name = :1", name)
        sosi = sosis.get()
        if sosi:
            now = time.localtime()
            age = now.tm_year - sosi.birth + 1
        else:
            age = 0
        path = os.path.join(os.path.dirname(__file__), 'html/search.xhtml')
        template_values = {
            'age': age,
            'name': name
        }
        self.response.out.write(template.render(path, template_values))[/code]
post요청이 들어오면 post함수를 호출하네요. name에 대한 파라메터값을 받아서 그 값을 이용해 GqlQuery를 날려줘서 sosi객체를 가져옵니다. 그러면 현재 year를 이용해서 나이를 구할 수 있습니다. 그럼 search.xhtml파일에 값을 나이와 이름을 넘겨줘서 요청하게 되어있네요.
html/search.xhtml
[code]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>소녀시대 나이 검색결과</title>
    </head>
    <body>
        {% ifequal age 0 %}
            {{name}}은/는 소녀시대의 멤버가 아닙니다.
        {% else %}
            {{name}}의 나이는 {{age}}세 입니다.
        {% endifequal %}
    </body>
</html>[/code]
저기 html안에 if문같은 것은 Django template language라는 것인데요. JSP에서 jstl같은게 아닐까요?-_-;
암튼 값이 없으면 0을 넘겨주기 때문에 0이면 멤버가 아니고, 나이가 나오면 멤버가 되는 형식으로 되어있습니다.

아래는 이해는 잘 못했습니다만, 어떤 요청이 오면 어떤 클래스를 요청하고 정의하는 것 같은데, 이렇게 쓰이더라구요-_-;
[code]application = webapp.WSGIApplication([
    ('/', MainPage),
    ('/search', Search)
], debug=True)[/code]
끝으로 메인페이지입니다.
[code]def main():
    db.delete(Sosi.all())
    Sosi(name=u"윤아", birth=1990).put()
    Sosi(name=u"수영", birth=1990).put()
    Sosi(name=u"효연", birth=1989).put()
    Sosi(name=u"유리", birth=1989).put()
    Sosi(name=u"태연", birth=1989).put()
    Sosi(name=u"제시카", birth=1989).put()
    Sosi(name=u"티파니", birth=1989).put()
    Sosi(name=u"써니", birth=1990).put()
    Sosi(name=u"서현", birth=1991).put()
    run_wsgi_app(application)[/code]
뭐 우선 처음 애플리케이션이 실행될 때, DB에 있는 걸 다 날려버리고, 해당 데이터를 삽입하고 시작하게 됩니다.
invalid-file

파이썬 전체 코드입니다.



이제 YAML파일을 만들어야 합니다.
New -> Other -> Other -> YAML File -> File Name은 app, Folder는 src폴더로 지정해야합니다.
app.yml
[code]application: ggages
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: GirlsGenerationsAge.py[/code]
우선 script부분에서 해당 py파일을 넣어주면 되고, application에는 App Engine에서 생성한 Application ID를 입력해주시면 됩니다. Girls' Generations Age의 약자로.....ggages(최소 6자기때문에 s를...-_-)

실행을 해봅시다.
cmd창을 열어서 해당 넷빈즈 프로젝트로 이동합니다. 아래와 같이 실행합니다.
[code]C:\Users\mudchobo\Documents\NetBeansProjects\GirlsGenerationsAge>dev_appserver.py src/[/code]
그리고, http://localhost:8080 으로 브라우저를 띄워서 접속해봅시다.
실행이 제대로 된다면, 이제 구글에 올려봅시다.
[code]C:\Users\mudchobo\Documents\NetBeansProjects\GirlsGenerationsAge>appcfg.py update src/[/code]
이렇게 하면 처음하는 경우에 구글계정의 아이디와 비밀번호를 물어봅니다. 입력하면 바로 디플로이됩니다.

http://ggages.appspot.com/에 접속하면 디플로이 된 것을 확인할 수 있습니다. 자신의 계정에 맞게 디플로이하면 되겠죠?^^

 
Posted by 머드초보
,
 
http://appengine.google.com/start 에 접속하면 로그인을 하라고 나옵니다. 구글계정으로 로그인 하고나면 Create an Application버튼과 왤컴한다는 내용이 있을겁니다.
사용자 삽입 이미지
전 여기서 좀 고생을 했는데요-_-; SMS인증을 받아야하거든요. 국내통신사도 지원한다고 했는데, 전 안되는 것이였습니다. 결론은 전화번호를 잘못 입력해서......-_-;
Create an Application을 클릭하면 아래와 같은 화면이 나옵니다.
사용자 삽입 이미지
Country는 당연히 우리나라는 없더군요. Mobile Number에서 저는 +82 010 0000 0000이라고 입력하니....안되더군요-_-; 바보같이-_- 010에서 0을 빼야합니다ㅠ +82 10 0000 0000 라고 하니 되더군요 ㅠ 하루고생했습니다ㅠ

보내고 나면 애플리케이션을 만들 수 있는데요. 우선 Application Identifier:에유니크한 이름을 적습니다. 여기서좀 이상한 점이......분명 available이라고 해놓고, 등록하려고 하면 이미 사용하고 있다고 나오는 경우가 있더라구요. sosiage라고 등록하려고 하니 그렇더라구요-_-; 이 app id는 한번 등록하면 바꿀 수 없구요. 총 10개의 애플리케이션을 만들 수 있습니다. 더 쓰고 싶으면 돈내라 이건가.....

애플리케이션을 생성했으면 이제 개발툴을 설치해야합니다.
http://code.google.com/intl/ko-KR/appengine/downloads.html 이곳에 가면 다운로드할 수 있는데, 분명 저번 세미나에서 보여줬던 관리툴같은 게 있었던 것 같은데, Mac OSX용만 있나봅니다 ㅠ
아.....이걸 설치하기전에 파이썬부터 설치해야합니다.

http://www.python.org/download/
안정적인 버전이 2개가 있는데, 2.6.1과 3.0.1이 있네요.
3.0.1을 설치하면 안됩니다-_-;
2.6.1버전을 설치해야합니다. 설치는 그냥 다음신공으로 설치할 수 있어요. 쉬워요!

그 다음 개발툴을 설치하면 됩니다.
그리고 난 다음에 데모를 실행해서 잘 되는지 확인해보면 됩니다.
시작 -> 실행 -> cmd를 열고......디폴트로 설치했다면 이곳에 데모가 있을 겁니다.
[code]cd C:\Program Files\Google\google_appengine\demos
dev_appserver.py guestbook/[/code]이렇게 실행하면
INFO     2009-03-01 05:08:50,332 dev_appserver_main.py] Running application guestbook on port 8080: http://localhost:8080
웹브라우저에서 http://localhost:8080을 입력하면 초간단 방명록이 실행되고 있을겁니다-_-;

PS. python이라는 언어가 참 간결하고 좋긴한데, 전.....개인적으로 다른 언어도 지원했으면 좋겠네요-_-;

 
Posted by 머드초보
,
 
사실 어떤 블로그를 보고 구글에서 세미나 한다고 해서 가보고 싶어서 신청했는데, 되서 가게 되었는데....난....App Engine이 뭔지도 모르고....OpenSocial은 또 뭐고.....-_-; 아무것도 모르는 상태에 가서 세미나를 들었습니다. 역시나......뭔소린지 하나도 모르고 그냥 돌아왔습니다 ㅠ

우선 처음에 가니....구글코리아가 여기 강남에 있었군요-_-; 참 색다른 경험이였습니다-_-; 알록달록한 것이 참 이쁘네요. 암튼, 시간이 좀 늦어져서 좀 늦게 20분 후에 시작했던 것 같네요.

Making Money with OpenSocial

간단하게 오픈소셜로 수익을 얻을 수 있는 것을 발표했습니다. 그 첫번째로 광고구요. 광고는 인터넷에서 필수적인 수익모델이죠^^ Buddy Poke라는 것이 가장 유명한 것 같은데, 지금 방금 실행해보니....대체 뭐하는 건지 모르겠습니다-_-; 전 친구가 하나도 없어서 그런가요?-_-; 그냥 어떤 놈이 나와서 저한테 손만 흔드는군요-_-; 왠지 플렉스로 만든 것 같습니다. 플렉스 컴포넌트들이 막 보이네요.
http://www.buddypoke.com/

두번째로는 Virtual Currency네요. 이건 국내에서 게임 업체나 커뮤니티업체들이 많이 하는 모델이죠. 아바타 사려면 돈을 결제해야하는 그런...cyworld에 도토리 보내 달라고 하는 복혜은이 생각나네요(친구입니다-_-).

세번째는 offers인데요. 어떤 요구사항을 들어주고, 돈이나 Point를 받는거죠. 이것도 국내에서 많이 하는..-_-; OK CashBag모을 때나 던전앤파이터를 하는데, 캐쉬가 모자라서 창고를 못살 때 쓰는 좋은 방법이죠-_-; 아래는 Mobsters라는 건데, 게임인 듯 한데, 뭔가 복잡하군요. 이곳에서 쓰이는 돈을 받기위해서 어딘가 회원가입을 해서 Cash를 모아야하나 봅니다-_-;
http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=104283

네번째는 Brand Marketing이라고 하는데, 뭘 말하는건지 모르겠네요.

위에 사례를 들어보니...오픈소셜 애플리케이션을 만들고 싶군요. 마이스페이스같은 SNS서비스에 APP를 만드는 것인 것 같습니다. 한번 알아봐야하겠습니다(뒷조사를..-_-)


Google App Engine

아....외국인입니다...뭔말하는지 못알아 듣겠군요. 다행히 통역해주시는 분이 계셨습니다만, 몇마디는 생까고 해주신 것오늘 가장 큰 깨달음은 영어공부를 해야한다였습니다-_-; 영어공부를 해야합니다...ㅠ
오늘 대충 얘기를 들어보니 App Engine은 구글에서 서버사이드환경을 제공하며 구글이 제공하는 Framework를 이용해서 손쉽게 웹애플리케이션을 구축할 수 있는 것 같습니다. 즉, 웹애플리케이션을 구동시키기 위한 서버 환경셋팅과정은 생까고, 구글에서 제공하는 서버환경 및 Database를 사용할 수 있는 것입니다. 뭐 단점이라면 지원언어가 Python밖에 없는 합니다. 아직 사용해보지는 않았지만, 이걸 사용한다면 서버 비용 절감 및 개발 시간 단축정도가 되겠네요. 게다가 구글인증을 사용해서 구글서비스와 손쉽게 연동이 되는 듯 하네요.

우선 처음에 얘기해준게 역시나 이거였습니다. 웹 애플리케이션 개발 시 문제점! 서버셋팅이죠. 서버머신도 있어야하고, 그곳에 여러 제품(Linux, Database 등)의 셋팅 등의 어려움이 있는데, App Engine에서는 이 모든 것을 하나에 담아서 제공합니다(아놔.....오늘부터 파이썬 파야하나....-_-)

또한 장점으로 쉽게 시작할 수 있고(파이썬 아닌사람이나-_-), 쉽게 변경이 가능하다고 하네요. 또한 구글과 같은 Infra를 사용해서인지 구글규모의 대규모 서비스도 가능하다고 하네요. 아...BigTable설명하면서 Database관련된 것을 보여줬는데, GQL(당연히 Google Query Language겠지-_-)라는 것을 이용해서 쿼리를 날립니다. SQL과 비슷한 문법으로....마치 HQL과 같은 형태로 App Engine에 맞게 최적화시킨 듯 합니다.

데모를 보여줬는데, 간단한 Hello World찍는 건데, 있다가 한번해봐야겠습니다. 설정할 수 있는 파일인 yaml(야믈이라고 읽더군요-_-)을 이용해서 뭐 하는 것 같은데...암튼, 방명록같은 것도 손쉽게 만들 수 있는 것 같습니다. 게다가 셋팅이 필요없는 개발환경을 제공하는 점이 너무 좋은 것 같네요. Java로 방명록 만드려면, 톰캣깔고, MySQL깔고, 뭐 그래야하는데, 이건 뭐 그런게 필요없는 듯 합니다. 좋아요~


App Engine + OpenSocial

뭐 두개를 이용해서 애플리케이션을 만들 수 있는 것 같은데, 둘 다 전혀 모르는 거라...그냥 멍하니 보다가 왔습니다.

아....보니까 OpenSocial애플리케이션 만드는 법이 Google에 Gadget(외국인들은 개짓이라고 발음합니다. 개짓하고있네-_-)만드는 거랑 같은 코드인 것 같네요. Module들어가고...전에 다음위젯뱅크 좀 보다가 본 건데, Javascript로 개발하는 듯 합니다. 지금 0.8버전까지 나왔는데, 지금은 기존처럼 Javascript형태로 개발이 가능한데, 나중에 템플릿기반의 개발이 가능한 듯 합니다. HTML태그를 입력하는 형태로 개발을 할 수 있는 듯 합니다. 마치 Flex에서 xml로 코딩할 수 있는 것 처럼이랑 비슷한 것 같습니다. 차후버전인 0.9에서 지원한다고 하네요.

아무것도 모르는 상태에서 글을 쓰려니 저도 뭔소리 한지도 모르겠네요. 그냥 들은 거랑 제 생각을 좀 포함해서 쓴겁니다. 잘못된 내용이 있을 수도 있습니다. 돌은 던지지 마시구요-_-;
사용자 삽입 이미지

제가 좋아하는 공책과 펜이군요. 공책과 펜을 너무 좋아합니다ㅠㅠ


 
Posted by 머드초보
,
 
http://mudchobo.tomeii.com/tt/303
Javascript로 만든 위젯이 여러분의 매우 관심없음의 힘입어....Flex용으로 만들어봤습니다.
우선 HTTPService가 안돼서......Javascript를 이용하여 만들어봤습니다.
조합은 아래와 같습니다.

Flex 3 + Javascript(Prototype 1.6.0.2) + swfobject2.1 + FABridge입니다.

블로그에 넣으려고 하니 FF에서만 안보이네요-_-;
IE에서도 보이는데... 뭐하고 충돌하는거지-_-;
링크입니다.
http://mudchobo.tomeii.com/swf/GoogleWeatherWidget.html

야후에서는 API를 제공해서 다른 방법으로 해보려다가 이렇게 까지 해버렸네요-_-;
완전 삽질-_-;
아래는 저의 삽질의 결정체 소스파일입니다.

이런식으로 할바에는 안쓰겠다라고 말하고 싶군요.
하지만, FABridge의 엄청난 능력에 대해서 감탄하고 말았군요.
Flex객체에 대한 addEventListener가 완벽하게 지원하는 듯합니다. Timer이벤트도 한번 걸어봤는데 잘 되더라구요.
 
Posted by 머드초보
,