2010年8月7日土曜日

tipfy-ext-authのexampleのmulti-authを使ってみる。

一応multi-authの取得方法
http://code.google.com/p/tipfy-ext-auth/source/checkout
にあるように、
hg clone https://tipfy-ext-auth.googlecode.com/hg/ tipfy-ext-auth
とすると、exampleの中に入っている。

exampleなんだから、そのまま使えればいいのに、使えない...
どのように使うか考えてみる。

方針:/app/auth/の中に入れて、他のアプリからも、multi-authの機能を使えるようにしたい。

まず、
/app/auth/__init__.py
空のファイルを作っておく
/app/auth/urls.py
/app/auth/handlers.py
これをexampleからコピってくる。
exampleのconfig.pyから/config.pyに必要なとこをコピる。(どうせあとで設定が必要だが)

exampleのstaticを/staticへ
exampleのtemplatesをとりあえず/templates/auth/に全て移動。

/app/auth/urls.pyのruleのhandlerのところを
handler='apps.auth.handlers.HomeHandler'
の様に、適切なハンドラーをさすように全て変更。
(hello_worldの'/'とぶつかるので、'/hellosimple'とかにしておいた。)

/app/auth/handlers.pyのrender_response中を
return self.render_response('auth/home.html', section='home')
のようにして、/templates/auth/home.htmlなどを指し示すようにする。

この辺でhttp://localhost:8080/とかすると、エラーをはくので、
テンプレートもいじらねば。

将来的なことを考えて、
/templates/auth/layout.html

/templates/layout.html
に移動。
/templates/auth/login.html
などの中は
{% from 'auth/_form_macros.html' import form_field %}
と_form_macros.htmlのにはauthをつけておいた。

これで、一応エラーはでなくなったのだが、cssまわりが反映されてない。

/app.yaml

- url: /static
static_dir: static
を付け加えて、staticの中をちゃんと読めるようにした。(ただし、robot.txtとかの後に付け加えた。順番大事だったはず)

tipfyはじめました。

調査が終わった感じなので、実際につくりはじめてみる。

appの中に基本は実装していくというのはわかったのだけど、やはり、実際にやってみると、気をつけなければいけないところがあるね。

例えば、もし、appと関係なくutility.pyなど作りたいときにはどこに置くべきなんだろうか?

http://www.tipfy.org/wiki/guide/sitelayout/

によれば、
/app.yaml
/main.py
/config.py
/urls.py
/apps/(appname)/
/lib/
/locale/
/static/
/templates/

が決まっている。
/distlib/
も決まっているはずだ。

そうすると、自作のutility.pyなどは/lib/の中ライブラリとしてくるべきか?

app.yamlはid等を設定すれば十分なはず。
config.pyのapps_installedはいじらないといけないだろう。
urls.pyはconfig.pyから読み込んでRuleなど自動設定っぽいので、いじらなくていいはず。

/app/(appname)/の中でhello_worldではurls.pyとhandlers.pyが定義されているんだけど、models.pyとかforms.pyは分けた方がよいのか?

/templates/の中はappsごとにディレクトリきった方が後の管理は楽か?
/app/(appname)/templates/とした方がもっと管理は楽になりそうではあるが...
http://www.tipfy.org/docs/api/tipfy.ext.jinja2.html
より、templates_dirでディレクトリを決めなくてはいけないらしいので、
/app/(appname)/templates/
はできなさそうだ。

2010年8月3日火曜日

acl tipfy

ちょっとCMS調べ等で寄り道をしたが、tipfyを使ったaclに話題を戻す。
はっきりいって、
http://www.tipfy.org/docs/api/tipfy.ext.acl.html
http://www.tipfy.org/wiki/extensions/acl/
の2カ所以外に資料はみつからない。あとは、ソースを読み解け、ということだと思う。
間違えているかもしれないが、現状思っていることを記録しておく。

[area]
webアプリケーションで範囲を設定して、それごとにaclを設定できるということのようだ。なぜなら、
user_acl = AclRules.get_by_area_and_user('my_area', 'user_2')
としてaclを取得してから、その役割に追加したり、調べたりできるようだからだ。
ここが分かりずらかった。大規模になったときには便利になるんだろう。

[rule]
# Set a dict of roles with an 'admin' role that has full access and
# assign users to it. Each role maps to a list of rules. Each rule is a
# tuple (topic, name, flag), where flag is as bool to allow or disallow
# access. Wildcard '*' can be used to match all topics and/or names.
とあるので、topic, name, flag によって構成されていることがわかる。

[role]
Groupではなく、roleと呼ぶみたいだ。

[roles_map]
Acl.roles_map = {
'admin': [
('*', '*', True),
],
}
roleとruleをタブルで列挙していく。

[使い方-ユーザーの追加]
# Assign users 'user_1' and 'user_2' to the 'admin' role.
AclRules.insert_or_update(area='my_area', user='user_1', roles=['admin'])
AclRules.insert_or_update(area='my_area', user='user_2', roles=['admin'])

[使い方-ユーザーに対する権限の追加/削除]
user_acl = AclRules.get_by_area_and_user('my_area', 'user_2')
user_acl.rules.append(('UserAdmin', '*', False))
user_acl.put()
area,userからAclRulesを取得して、そのrulesからappend()とかremove()すればよさそうだ。

[使い方-実装]
is_one(role)
is_any(roles)
is_all(roles)
has_any_access()
as_access(topic, name)
を使って実装していく。

[app-engine-site-creatorのACLの実装との比較について]
app-engine-site-creatorではACLの実装のかなりの部分をmodels.pyに記述している。
tipfyでもやり方によってはできるか?

[デコレータ]
Handlerを書くときにデコレータで
@login_required
@admin_required
のようにかけたら便利だな、と思っていたところ、
http://groups.google.com/group/tipfy/browse_thread/thread/cca740bf8e131510/c609e94e1e70fa96?lnk=gst&q=acl#c609e94e1e70fa96
に「書いたよ!」という人がいた。
一応、引用しておこう。

I wrote a function decorator for acl, it is according to my needs, but 
maybe it is interesting for others too: 
roles_map = { 
        # roles map definitions 
} 

# function decorator: 
def require(name, topic, area='whole'): 
    def wrap(func): 
        @auth.user_required 
        def decorated(*args, **kwargs): 
            context = {} 
            # user info for the template, getAuth is a custom function 
which 
            # returns username and the links generated by auth 
            #context['auth'] = getAuth() 
            #username = context['auth']['user'].username 
            username = auth.get_current_user().username 
            Acl.roles_map = roles_map 
            acl = Acl(area, username) 
            if acl.has_access(topic=topic, name=name): 
                return func(*args, **kwargs) 
            else: 
                context['errormessage'] = 'No access.' 
                return render_response('error.html', **context) 
        return decorated 
    return wrap 
# a functional form instead of a decorator, which return True or False 
instead of a response 
@auth.user_required 
def is_allowed(name, topic, area='whole'): 
    username = auth.get_current_user().username 
    Acl.roles_map = roles_map 
    acl = Acl(area, username) 
    return acl.has_access(topic=topic, name=name) 
Is there a more appropriate place to publish snippets and samples for 
tipfy? 
/ruben 


さて、そろそろ調査は終わりかな...

2010年8月2日月曜日

cpedialog etupirka vasao

GAE上で使えるブログ
ブログとしては強力なんだけど、Pageはメニュー階層つくれないので、残念...

これを改良するかな。

それとも、
etupirka
http://sites.google.com/site/aboutetupirka/
まだ開発中みたいだけど、CMS/Blogの両方がうまく使えそうな気はする。GAE/Jだけど...

これもGAE/Jだけど
vosao cms
割と強力そうだ。

App Engine Site Creator

ちょっと使ってみようと思ったら...あれ、ここにACLの実装例があるぞー。また悩む...
とりあえず実行して、記事を投稿しようとすると
'ascii' codec can't decode
とかエラーがでるので、
views/admin.pyの220行目
page.content = request.POST['editorHtml']

page.content = request.POST['editorHtml'].decode('utf-8')
と修正したら、なおった。
画像切れは
images/logo.gif -> /static/images/logo.png
に2カ所修正。

http://ringio-blog.appspot.com/tag/GAE
によれば
「複数ユーザでクローズドなページを管理したい!という要求に答える素敵ソフトウェアですね。
任意のGoolgeアカウントに閲覧可否・管理機能使用可否を付与できるのでいい感じです。」

2010年7月31日土曜日

tipfy インストール/extensionの追加/アップグレード/使っているライブラリについて

チュートリアルが充実している訳ではないが、他のドキュメントは充実している気がするし、jinja2とかまぁ、他でも使っているもの結構あるし、開発が活発なので、これでいってみたくなった。

インストール---------------------------------
http://www.tipfy.org/wiki/guide/
のInstallationからbuildされたzipをダウンロードして解答すれば、基本的におわり。
dev_appserver.py /path/to/project/app
でサーバーを動かせる。これで、既にhello_worldのアプリが走っている。

extensionの追加----------------------------------
http://www.tipfy.org/wiki/extensions/
extensionは全て最初から入っている訳ではないので、
buildout.cfgのeggs=のところに必要なものを追加。
例えばtipfy.ext.aclなど。 使わないものは抜いていいらしい。

python2.5 bootstrap.py --distribute
は一回走らせればいいみたいだ。

その後
bin/buildout

を実行すると、extensionが追加/削除されている。

アップグレード-----------------------------------
http://www.tipfy.org/wiki/guide/upgrade/
project/versions.cfg
にバージョンが書かれているらしいのだが、[versions]以外は書かれていない。現状まだ問題はでてない。
基本はアップグレードするためには上記の
python2.5 bootstrap.py --distribute
bin/buildout
を繰り返せばいいみたい。

使われているライブラリについて-----------------------
babel:I18N, L10Nのためのライブラリ
jinja2:テンプレートエンジン
pytz:タイムゾーンライブラリ
werkzeug:WSGIのユーティリティモジュール

あった!

tipfy
http://code.google.com/p/tipfy/
http://www.tipfy.org/
はGAE用に作られたフレームワークなので、間違いなく動くはず。
http://www.tipfy.org/docs/api/tipfy.ext.acl.html
とaclが実装されているので、これを試してみる!

2010年7月30日金曜日

gae と ACLについて

ユーザ認証でも、ACLはみんな搭載してほしいのだけど、みつからない...

一応まとめてみる。

--------------
com.google.appengine.api.users
http://code.google.com/intl/ja/appengine/docs/java/javadoc/com/google/appengine/api/users/package-summary.html
UserService を使用すると、ユーザーが Google アカウントを使用した認証を行っているかどうかを確認し、ユーザーのメール アドレスを取得できます。また、ユーザーがアプリケーションの管理者かどうかを確認することもできます。

というわけで、ACLはできないっぽい。

--------------
Django-nonrel
django.contrib.auth
管理画面を出すことは成功したが、AUTHにGroupsが出てこない。allbuttonpressedでも同様だった。
ので、Groupsに対応してないのではないか。
is_superuser, is_active, is_staffは使えるようだ。

http://bitbucket.org/wkornewald/django-nonrel/src/d69349741502/django/contrib/auth/tests/basic.py
を見ると、a.groups.all(), a_user_permissions.all()がある。怪しいけど...

--------------
app-engine-patch
https://code.google.com/p/app-engine-patch/
開発終了なのだが...管理画面にいくと、あっさりGroupsが存在してるーーーーーーー

うーーーん。開発終了してるので、使わない方がいいかなぁ。
まだ、使い方もよくわかっていないが...

---------------
kay-framework
http://kay-docs-jp.shehas.net/tutorial.html#id7
is_admin, is_anonymous(), is_authenticated()を使える
デコレータはlogin_required, admin_requiredのみ
usersを拡張して、デコレータ増やせばできそうな気がするけど...

---------------
pylons
http://pylonshq.com/
ではできるみたい
http://wiki.pylonshq.com/display/pylonscookbook/Another+approach+for+authorization+in+pylons+(decorator+based,+repoze.what+like)
だけど、gaeで動くかわかんないし...

--------------
ここらでよく考えてみる。
ManyToManyが問題で、ACLのおいしいところは、
Usersが複数のGroupsにも属すことが出来るというところか。
kayのところで書いたusersを拡張して、というやり方でいけるのかなぁ...試してみるべきか。
うまくいくなら、どれでもいいような気もしてきた。
動的にGroupつくれなくても、is_eigyoとか拡張できればそれはそれでありな気もするしなぁ...


--------------
ちょっと気になる...
http://sourceforge.jp/projects/secioss-auth/
「LDAPを使ったユーザ認証のライブラリやWebシングルサインオンを行うためのプラットフォームを開発します。Webシングルサインオン機能には、オープンソースソフトウェアのsimpleSAMLphp、PHP OpenID library、mod_auth_tktを利用しています。」
gaeでも使えるらしい...

OAuth
Twitterなどのリソースを使うときに必要そう。

pirate-politics
http://code.google.com/p/pirate-politics/wiki/GettingStarted

django-nonrelをもう一度

authでgroupがでてこない...この機能が欲しいのに...と思い、もう一度一から順にやってみる。
allbuttonpressedから4つ落としてきて、testappにまず放り込む。
python manage.py runserver
で"It works"は現れるが、もちろん
http://localhost:8000/admin/
は機能しない。
まずは、authをいれたいので、settings.pyから'django.contrib.auth',のコメントアウトをはずす。
'django.contrib.addmin',を追加
urls.pyに
from django.contrib import admin
admin.autodiscover()

('^admin/', include(admin.site.urls)),
を追加。

管理画面はでるのだが、Usersしかでてこない。Groupsはどうしたー!!!!!

ちなみに、プロジェクトを新規につくっても、ユーザのデータベースは共通のようだ。
もう少し調べてみる。これがクリアしないと、どれで作ったらいいのか、わからーん。
allbuttonpressedを確認してみるのも手か?

microblogをやってみる。

Django X Python
にそって、microblogをやってみる。P.61の
$python manage.py startapp microblog
からだ。
it worksまではでるんだけど、cssがリンクされてない模様。ソースをみても、そうだから、まよしとする。

とりあえず、
http://yasakawa.blogspot.com/2010/06/django-nonreladmin-interface.html
を参考にしてみる。
うーーん。いろいろエラーが出てくるのだが、それはおいといても、
http://d.hatena.ne.jp/TaRO/20100726/1280156039
の人と同じようにcreatesuperuser
がない...と思ったら、settings.pyのコメントアウトされている
'django.contrib.auth'
を有効にしてmanage.py helpしたら使える!
ついでに 'django.contrib.sites','microblog'も付け加えた。
localhost:8081/admin/
で画面がでてきた。
ここで、manage.py createsuperuser
をして、ログインしてみた。
あれ?できない...

うーんと、こまったなぁ。ということで、もう一回整理。
GoogleAppEngineLauncherを使っているのに、manage.py createsuperuserとかって、トラブルのもと?
と思い、
GoogleAppEngineLauncherは停止にして、manage.py runserver
としてアクセス。ログインできた!
なんか、GoogleAppEngineLauncherとか使わずに素直にターミナルとTextMateとかで開発する方がいいのかな?
Eclipseだと、不要なエラー出し過ぎな気がする。コード補完とかは便利だけど、完璧ではないし...

Django-nonrel インストール

http://www.allbuttonspressed.com/projects/djangoappengine
にあるように、
django-nonrel
djangoappengine
djangotoolbox
django-testapp
をダウンロードして、django-testappを展開した中に
django-nonrel/django
djangotoolbox/djangotoolbox
djangoappengine
を放り込んだ。
それをEclipseに放り込んでみたのだが、エラーがでている。ほとんどi18n系のファイルだったが、あけてみると、エラーが消える。それでも、
django/core/urlresolvers.py
の中でfrom django.conf import settings
で「ないよー」といってくる。確かに調べてもない。が
http://djangoproject.jp/doc/ja/1.0/topics/settings.html
を見ると、「django.conf.settingsはモジュールではなくオブジェクトです。」と書いてあり、
django.conf.__init__.py
をみると、
settings = LazySettings()
となっている。ってことは問題なさそうだ。ほおっておこう。

ACLはどのようになるのか...

Kay Frameworkで認証はできるんだけど、ACLに関する記事がまるででてこない。
使えない?

djangoだとロールベースの権限管理/グループができるようだが、これはGAEで動くのだろうか...
試すために、django-nonrelを試してみることにする。

2010年7月24日土曜日

viewのクラスによる実装

チュートリアルではviews.pyの中に

def index(request):
asdfjkl;ajsdklf;a
asdjkf;ajsdkf;l
return asdfjka;lsjdfkl;

と書いてあったが、クラスでの実装もできるようだ。その場合の注意点
class MainHandeler(BaseHandler):
 def prepare(self)
  #準備のコード
 def get(self):
  return asdjfkl;
 def post(self):
 return asjdkfl;ajskl;df
のように書いて、
main_handler = MainHanlder()
のように書いておく。

そして、urls.pyに

view_groups = [
 ViewGroup(
  Rule('/', endpoint='index', view='myapp.views.index'),
  Rule('/test', endpoint='main_handler', view='myapp.views.main_handler')
 ),
 CategoryCRUDViewGroup(),
]
のようにかけば動いた。

複数アプリケーションを考える

テンプレートに関してはプロジェクト直下にtemplateフォルダを作り、settings.pyに
TEMPLATE_DIRS = (
'templates',
)
とすることで、共通のテンプレートを使えそうだ。
各アプリケーションはそのフォルダのテンプレートフォルダを使えばいい。
そして、{% include {{filename}} %}の形でrender_to_response('main.html',{'filename':'header.html'})などとすればすてき。

モデルについてはまだ不明...

Kay Framework チュートリアルをやってみる。

http://kay-docs-jp.shehas.net/tutorial.html

ユーザの認証
myapp.modelsにclassを定義して、
settings.pyで
AUTH_USER_MODEL = 'myapp.models.MyUser'
の様にしているが、複数アプリケーションになったときはどうなるんだろう?
settings.pyで設定されているから、他アプリケーションでも利用できるのか?

モデルを設定すると、Entity Kindとしてはmyapp_commentのように作られているので、これは便利!
アプリケーションごとに衝突を考えなくてもOKってことだね。

とりあえず、国際化のところで.poというファイルがでてきたので、
eclipseにgtedというプラグインもいれてみた。
http://www.gted.org/

チュートリアルにかいてなかったのだが、settings.pyを
INSTALLED_APPS = (
'kay.auth',
'kay.i18n',
'myapp',
)
の様に追加しないと動かなかった。

2010年7月22日木曜日

Kay Frameworkインストールして使ってみる

参考
http://kay-docs-jp.shehas.net/tutorial.html

http://code.google.com/p/kay-framework/downloads/list
から
kay-1.0.0.tar.gz
をダウンロード

eclipseのworkspaceを
/Users/sammy/Documents/workspace
に設定していたので、
そこに
/Users/sammy/Documents/workspace/kay-1.0.0
と解凍する。

terminalで
/Users/sammy/Documents/workspace
に移動して、
python kay-1.0.0/manage.py startproject kaytestproject
とすると、
/Users/sammy/Documents/workspace/kaytestproject
ができた。

eclipseにプロジェクトとして登録するのに、
New-Project-Pydev Google App Engine Project
Projectnameをkaytestproject
Google App Engine Directoryには/usr/local/google_appengine
What's the application id registered for this project?はkaytestproject
From which template do you want to create your new Google App Project?
はEmpty Project
にすると、無事に登録ができた。
srcフォルダができているが、いらないので、削除した。--すると、あとで怒られるので消さない方がいい。

kaytestprojectに移動して
python manage.py startapp myapp
としてmyappを作る。Eclipseのプロジェクトをリフレッシュで現れてくる。

チュートリアルでtreeが使われているので、ここで
sudo port install tree
として使えるようにしておいた。

setting.pyに登録。チュートリアルにあわせて

INSTALLED_APPS = (
'kay.auth',
'myapp',
)
APP_MOUNT_POINTS = {
'myapp':'/',
}

とした。Kay Frameworkではプロジェクトの下にたくさんのアプリケーションを作る、という仕組みのようだ。
python manage.py runserver
とすれば、
http://localhost:8080
でアクセスできた。が、Ctrl-Cでストップ。
GoogleAppEngineLauncherに登録してみる。Add Exsisting Project...で登録。
準備ができたようだ。

フレームワークについて

DjangoがGAEに入っているからといって、それを全て利用できるわけではない。
なぜなら、モデルの考え方が異なっているから、例えば強力な管理画面などは利用できない。
利用するためには、
app-engine-patch
などの利用もgaeのdocにかいてあるが、これはもうdiscontinueであり、
django-nonrel+djangoappengine+django-testapp
を使えとなっている。
ちなみに、前者の方針はdjangoがGAEで動くようにパッチを当てる、という考え方であり、
後者は、Djangoで非リレーショナルDBをサポートし、その中にGAEがある、という考え方らしい。

djangoの最新版を使うためのやり方はgaeのdocに書いてある。
ファイル数の制限などがあるため、zipimportが鍵になりそうだ。

他にGAE専用のフレームワークというのもいろいろあるようだ。
その中でKay Frameworkというのがあるので、これを試してみようかと思う。


参考:【特集】Google App Engineで開発するためのフレームワーク × 16 + α
http://coolcoding.com/2010/01/frameworks_for_gae/

Imgについて

Imgages APIはローカル環境では動かないらしい。
ローカルで動作確認を行いたい場合は、
Python Imaging Libraryというライブラリをインストールしないといけないらしい。

http://code.google.com/intl/ja/appengine/docs/images/installingPIL.html

ところが、Leopardだと、ここに書かれているdmgだと「pythonはいってないよー」といわれてしまう。

ので、ソースからインストールしてみる。

http://www.pythonware.com/products/pil/
から最新版は1.1.7なのだが、
http://pythonmac.org/packages/py25-fat/index.html
のインストーラが1.1.6だったので、1.1.6をダウンロード

ダウンロードしたtar.gzを展開したディレクトリにターミナルでいき、
$sudo python setup.py install
(xcodeが必要っぽい)

JPEG support not availableとPIL 1.1.6 BUILD SUMMARYに出てきたので、
http://www.ijg.org/
からjpegsrc.v8b.tar.gz
をダウンロードして展開したディレクトリにターミナルでいき
./configure
make
make test
sudo make install

をしてインストールしてから、
1.1.6のbuildディレクトリを削除して、
sudo rm -fr build

もう一度
sudo python setup.py install
とする。

もう一度、ログのPIL 1.1.6 BUILD SUMMARYをみると、JPEG support okとなった。
参考
http://nakaken.mediacat-blog.jp/e43462.html

その後Eclipseで
Preference:Pydev:Interpreter - Python
でLibrariesに
/Library/Python/2.5/site-packages/PIL
を追加した。(New Folder)...これだと動かない...

うーーん。

port でインストールしてみるか...
一応
http://d.hatena.ne.jp/shohu33/20080818/1219078757
のように
sudo port install jpeg
sudo port install freetype
をして、あ、でも結局
sudo python setup.py install
にするのか....

あ、ひょっとして、GoogleAppEngineLauncherでサーバ起動しなおしてないからか?
と起動しなおすと、めでたしめでたし!

2010年7月21日水曜日

Pydev import unresolved error

Pydevではこのエラーが割とでるらしい。
解決できればいいのだが、とりあえず、
Preference-Pydev-Editor-CodeAnalysis-Imports
でImport not foundをIgnoreにすればエラーにはならない。infosという扱いになる。

文字コード...ってことは化けたわけだが

u'日本語'
のようにかいてあるものもあるが、
http://d.hatena.ne.jp/momo_dev/20091230/p1
によれば、UTF-8で保存されていれば、uはいらないようだ。

値を
str1 = self.request.get('text1')
等と受取るときには、
str1.encode("utf-8")
とすることで正常に表示されるようだ

あと、レイアウト用に部分を書き出したhtmlファイルをつくると、aptanaは内容から勝手にs-jisと判断してしまった。
ファイルの右クリックでUTF-8に指定しなくてはいけないが、全部UTF-8でやってほしいものだが...

2010年7月20日火曜日

ここまでのまとめ

設定さえすれば、わりと使いやすい環境になる。

使うだろうファイルタイプは
.py, .html, .yaml, .css
くらいだろう。
yamlエディタも気がむいたらいれたらいいかもしれない。

一度サーバーを起動すると、それ以降は、ブラウザのリロードにて確認ができる。
ちなみに、コンソールの赤い■を押せば、サーバーをシャットダウンすることもできそうだ。(Ctrl-Cではいかない)

と思い、新しいアプリを簡単につくれるか試すと...うまくいかない。
New-Project-Pydev Google App Engine Projectでtemplateはhello worldかなにかをを選んだ後、
・srcの中にあるapp.yaml, helloworld.pyをプロジェクト直下に移動
・run-run configurations...
をして、既存のものを複製、Name:, Project(main tab),workspace_loc:の後(Arguments) を修正すると、一応使える。
もう少し簡単にできないのか...

プロジェクトを作るところまではeclipseで作って、ファイルを移動することなしに、
GoogleAppEngineLauncherでAdd Existing Applicationを使って、登録した方がスマートかもしれない。
この時のPathは
~/Documents/workspace/******/src/
となる。これでいくか...

Hello, World2,3,4,5,6,7

Step 2:
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/usingwebapp.html
をやってみる。
helloworld.pyをいじり始めると、白色で入力される文字がある...困った...背景色をまずいじってみよう。
Preference-General-Editors-Text Editors のAppearance color optionsでSystemDefaultを外して、Colorを黒にしてみる。黒文字があったらどうなるんだ...と一抹の不安はあるが、これでいってみる。
Current Line Highlightも見づらいので、黒に向けて50%くらいのところにしてみた。
yamlが今度まずくなった...黒字なんだもの...
とりあえずaptana editorにアサインすることで白字に対応した。


とりあえず、無事にHello, webapp World!と表示された。

Step 3:
次は
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/usingusers.html
をやってみる。

前回ためしにやってみたときには、普通のテキストエディタでやっていたのだが、コードヒントはやはりすばらしい!
ログイン作業をすると、
Hello, xxxxxxxと表示された。

Step 4:CGI
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/handlingforms.html
をやってみる。

データの受け渡し成功

Step 5:データストア
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/usingdatastore.html
をやってみる。

問題なし!データストアもさくっといける。

Step 6:テンプレート
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/templates.html
をやってみる。

OK!

Step 7:CSS
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/staticfiles.html
無事に動く。

というわけで、
cssや、html,yamlがきても、割とみやすいし、使いやすい環境になったかと思う。

Hello, World

EclipseでFile-New-Project
から
Pydev Google App Engine Project
を選択
Project nameをHelloworld
Interpreterが設定されていないので、クリック、AutoConfigとした
Google App Engine Directoryとして
/usr/local/bin
とするとおこられたので、元の場所である
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/
を直接入力してFinish
!This kind of project is associated with the Pydev perspective. Do you want to open this perspective now?
と出たので、Remember my decisionとしてYESにした。

環境

いままで使ってきたMacBookが調子が悪いので、MacBookPro17(2.66 Intel Core2Duo 4GM)で開発環境を作っていく。
SnowLeopardにしていなかったのだが...みあたらない...とりあえず、SnowLeopardのままでいこう。

ターミナルで
python -V
にすると、2.5.1とのことで、GoogleAppEngineでは2.5.2をサポートとある。
http://code.google.com/intl/ja-JP/appengine/docs/whatisgoogleappengine.html
2.5.2はbugfix onlyなので、とりあえずこれでいってみよう。

Google App Engine SDK for PythonからGoogleAppEngineLauncher-1.3.5.dmgをダウンロードした。

http://www.eclipse.org/downloads/
からEclipse IDE for Java EE Developersの64bit版(3.6)をダウンロード。Classicでもいいかな?と思ったが、とりあえず、一番上ので問題はないだろう。

aptanaも考えたのだが、プラグインでもいいか、とeclipseにした。

Google Plugin For Eclipseをインストールする。
http://code.google.com/intl/ja/eclipse/
からクイックスタートガイドを参考にし、
Help->Install New Software...
から
http://dl.google.com/eclipse/plugin/3.6
と入力し、Plugin,SDKsにチェックを入れ、nextを数回で、restartした。(以外と時間かかったなぁ)

次は同様にして
http://pydev.org/updates
と入力し、PyDev,PyDev Mylyn Integration(optional)にチェックを入れてインストール。

ついでにaptana Eclipse Plug-inもインストール。
http://download.aptana.com/studio3/plugin/install
Aptana Studio3にチェックを入れてインストール
(betaだが、3をいれてみた..現時点でJavaScript Debugging, Contest assist for Ruby and PHP, Synchronization to FTP Sites, A First-Use Experience that will walk you thorough the setup of the tools you need, Built in DocumentationがNotable Missing Featuresとなっている)

一通りインストールしたところで、
環境設定-Genearal-Keys Scheme:Emacs
を変更しておいた。
あと、GAEではUTF-8なので、
環境設定-General-WorkspaceのText file encodingでOtherとしてUTF-8を選んだ。

P.S.
・UMLを入力できるのをいれておきたかったが、適当なのが見つからなかったので、保留とした。
・pythonで使う場合はGoogle Plugin for Eclipseっていらないのか???

GAE-DEV-REPORT

GAEでの開発をするにあたり、ポイントをメモとして残していく。