2009年4月12日日曜日

Mac OS XのBlogライター、Petrus Bloggerを試してみる


Blogger付属のWYSIWYGエディターを使っていると、Preタグの中身の空白が消えたり化けたりすることがあることが分かったため、やむなくBlogger付属のエディターを使うことが出来なくなってしまいました。

そこで、外部のBlogエディターを導入してみることにします。



■タイトルのテスト
タイトルはfontタグになるみたいです

目についた機能を列挙してみると、
  • Bloggerの機能と連携していて、アプリケーションのメニューからBloggerのDashboardを一発で開いたり出来る。過去記事の編集も可能
  • HTMLタグの入力補助や入力補完は一切無い
  • 画像のアップロード補助も一切無い
  • BloggerのLabelに関しては完全にサポートしている、入力補完はないが入力補助がある

@interface PreTagTest
    NSString *test1;
    id delegate;
@end

@property (retain)NSString *test1;
@property (assign)id delegate;


画像アップロードテスト

↑Edit > Upload Photoを実行するとこのリンクが自動的に張られるのですが、見ての通り表示できません。


Blog > Albumsを押すとアルバム全体が開くので(全体です、二度目以降はキャッシュしているみたいですが、1回目はむちゃくちゃ待たされます)、それから写真を選んでPicasaのページを開き、さらにそこから自分でリンクを拾ってきてようやく表示できます。
使い物にならん・・・orz

ううん、なかなか便利なんですが、編集機能がちょっと弱すぎる感じがしますね。せめてタグの挿入ぐらいはしてくれないとなぁ。画像もドラッグ&ドロップでサクッと入れたいです。

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のゲーム開発フレームワークとか大いに気になります。