2009年4月9日木曜日

Google App Engineのcronサポートまとめ



http://code.google.com/intl/en/appengine/docs/python/config/cron.html

■注意
以下の情報は2009/04/09現在(Google App Engine 1.2.0.0)の情報です。皆様がごらんになっているときには古くなっている可能性があります。



■時間指定方法
cron.yamlを書く
本家cronとは記法が異なるが、本家cronとほぼ同様のスケジューリングが可能
起動タイムゾーンの指定も可能
cron:
- description: daily summary job
  url: /tasks/summary
  schedule: every 24 hours
- description: monday morning mailout
  url: /mail/weekly
  schedule: every monday 9:00
  timezone: Australia/NSW

■認証
cronによって起動されたURLはadminユーザーによって起動されるため、以下の
2種類の方法で認証が可能
app.yamlのhandlers要素にlogin: adminを指定する
application: hello-cron
version: 1
runtime: python
api_version: 1

handlers:
  - url: /report/weekly
    script: reports.py
    login: admin

2009/04/13追記、以下の方法は利用できません。詳しくはこちらの記事をご覧ください。ご迷惑をおかけいたしまして申し訳ありませんでした。
アプリケーションのRequestHandler内で、users.is_current_user_admin()を利用して判定する(こちらの方法は未確認)
from google.appengine.api import users

# ログインしていない場合やadmin以外の場合にはFalse。adminがログインしている場合のみTrue。
if users.is_current_user_admin():
    # cronジョブをここで実行
else:
    # エラー画面を表示するなど

さらにcronはURLを起動する際にHTTPリクエストヘッダーに以下の要素を付けるため、RequestHandler内でヘッダをチェックすることが出来る
X-AppEngine-Cron: true

■cronタスクの管理方法
cronタスクをアップロードするには、通常のアプリケーションをアップロードするときと同様に以下のコマンドを実行すれば、アプリケーションと一緒にアップロードされる
appcfg.py update

cronタスクだけをアップロードしたい場合場合は以下のコマンドを実行
appcfg.py update_cron

cronタスクを削除したい場合は、cron.yamlを以下のように書き換えてからアップロードすればよい
cron: 

以下のコマンドを実行すれば、現在のcronの設定状況を見ることが出来る(ただし、タイムゾーンを扱う場合はpytzライブラリが必要)
appcfg.py cron_info

■制限
  • 今のところPython版のみ(Java版はない)Java版もある。Java版はcron.xmlを記述する。http://code.google.com/intl/ja/appengine/docs/java/config/cron.html
  • タスクは20個まで
  • 最短実行間隔は1分
  • cron.yamlから起動できるのは自アプリのURLのみ。人のアプリを起動したり、全然関係ないURLを指定したり、シェルスクリプトを起動したりは出来ない
  • cronから対象URLを起動した場合のCPU時間・通信量もすべて従量対象になる

2009年4月5日日曜日

canvasとJavaScriptでゲームなど(2) タイトルつけてみました



http://akisuesandbox.appspot.com/games/zzz
(前回とパスが変わってます、注意)

前回のゲームに悪のりしてタイトルをつけてみました。

ついでにソースコードも公開してみました。まぁ、JavaScriptなので意図しようとも意図すまいとも自動的にオープンソースになってしまいますけれども、一応w
http://github.com/akisute/gae_akisutesandbox/tree/master



以下、余談。

ゲームの画面を制御するにはループと入力受付を制御しなくてはならないのですが、
JavaScriptを用いると、
ループの制御はsetIntevalとclearInterval
入力受付の制御はhogehoge.onmousemoveとかhogehoge.onmousedownに適切なファンクションをセットする
ことで制御が出来るので比較的簡単な気がします。

すごーく昔にDirectXでプログラムを作ったときに
このあたりの制御をするのが余りにも面倒で(といいますか手続き型のプログラミングが面倒で)嫌になって辞めてしまった記憶があります。

最近のゲーム開発環境はどうなんでしょう。特にiPhoneのゲーム開発フレームワークとか大いに気になります。

2009年4月3日金曜日

canvasとJavaScriptでゲームなど




http://akisuesandbox.appspot.com/welcome/zzz

こんなの作ってました。中身は無いに等しいです。



以下駄文。

canvasとJavaScriptは思っていたよりは高速に動作しますが、やはりFlashに比べると遅いです。
ですが2Dグラフィックスの勉強にはcanvas + JavaScriptのほうがFlashより向いていると思います。Flashはかじった程度ですが、2Dグラフィックス(線引いたり四角描いたり)というよりはオブジェクトとアニメーションの制御が中心のような印象を受けました。