2015年3月15日日曜日

GAE/Python の Backend Instance を使う

GAE/Python は、9時間/日の Backend Instance 無料枠があります。

この無料枠を使う方法をメモっておきます。

[公式ドキュメント]
https://cloud.google.com/appengine/docs/python/modules/

【重要】
・Backends Python API は、2014/3/13 に停止されています。
・WEB上の古い記事に注意しましょう。

[利用ケース]
この Backend Instance は、Cron で起動して、バッチ処理に使うとよいでしょう。

[必要なファイル]
app.yaml
dispatch.yaml
backend.yaml
cron.yaml

[app.yaml]
デフォルト(Frontend Instance)の設定ファイルです。

例:自動スケーリング(F1)を使用します。
-- ここから --
application: <アプリケーション名>
module: default
version: 1
runtime: python27
api_version: 1
threadsafe: true

instance_class: F1
automatic_scaling:
 max_idle_instances: 1
 min_pending_latency: 15.0s

handlers:
- url: /.*
 script: <スクリプト>
-- ここまで --

[dispatch.yaml]
どの処理を Backend Instance に渡すかを記述します。

例: /backend にリクエストがあった場合、module:backend を利用します。
-- ここから --
application: <アプリケーション名>
dispatch:
- url: "*/backend/*"
 module: backend
-- ここまで --

[backend.yaml]
バックエンドの設定ファイルです。

例:基本スケーリング(B1)を使用します。
-- ここから --
application: <アプリケーション名>
module: backend
version: 1
runtime: python27
api_version: 1
threadsafe: true

instance_class: B1
basic_scaling:
 max_instances: 1
 idle_timeout: 10m

handlers:
- url: /.*
 script: <スクリプト>
-- ここまで --

[Cron.yaml]
Cron で処理を起動するには、cron.yaml を準備します。

例: 毎日 02:00 に、/backend/cron/day の処理を起動します。
-- ここから --
cron:
- description: Cron Day Job of Backend
 url: /backend/cron/day
 schedule: every day 02:00
 timezone: Asia/Tokyo
 target: backend
-- ここまで --

[開発用サーバの起動]
$ google_appengine/dev_appserver.py app.yaml dispatch.yaml backend.yaml

[デプロイ]
$ google_appengine/appcfg.py update app.yaml backend.yaml

[参考]
http://www.topgate.co.jp/blog/20140715

2015年3月7日土曜日

jQuery Mobile で WebStorage を使う方法

Formで送信したデータを横取りして、webstorageに入れてみました。

HTMLは、こんなカンジで。

<form id="form" method="get" action="/search/">
<input type="search" id="search" name="q" value="" />
</form>

Formのidは「form」。
送信したデータの名前は「q」。

続いて、スクリプトです。

$(document).on("submit", "#form", function(){
 if (window.localStorage) {
  var storage = sessionStorage;
  var key = jQuery.now();
  var val = $(this).serialize().split('=')[1];
  //alert(val);
  storage.setItem(key, val);
 }
});

簡単に説明
on("submit", "#form", … Formの送信を検知。
if (window.localStorage) … ブラウザで webstorageが使えるか、確認。
storage = sessionStorage … セッションストレージを使います。
key = jQuery.now() … キーとして、現在時刻をセット
val = $(this).serialize().split('=')[1] ‥ 送信データから値を取り出し
(例えば、「nec」と入力した場合、「q=nec」が送信されますよ。)
storage.setItem(key, val) … webstorage に格納

格納されたことを確認するには(Chromeの場合)
その他ツール → デベロッパーツール → Resources → Session Storage

取り出すには

var storage = sessionStorage;
for (var i=0; i < storage.length; i++) {
 var key = storage.key(i);
 var val = storage.getItem(key);

for で回して、keyとvalを得ます。

アイデア次第で、イロイロなことに使えそう。