2012年05月25日

gae-sessionsのno_datastore

GAEでセッションを使いたい場合、gae-sessionsを使うのが便利だと思います。
gae-sessionsの詳細は、https://github.com/dound/gae-sessions で確認してください。
簡単に説明すると、
$ git clone git://github.com/dound/gae-sessions.git
でダウンロードして、GAE のアプリケーションディレクトリに移動し、appengine_config.py に
from gaesessions import SessionMiddleware;

def webapp_add_wsgi_middleware(app):
    app = SessionMiddleware(app, 
       cookie_key="32文字以上のパスワード",
       lifetime=datetime.timedelta(days=有効期限));
    return app;
と設定するだけです。
ただし、この設定ではセッション情報はデータストアにも保存されます。
gaesessions の動きとしては、
  1. まず、sessionID で memcache を探す
  2. memcache にデータがなければ、データストアからデータを取得する
という感じになっています。
ソースを見る限り、memcache でヒットしなくても read の際は、memcache にセットしなおさないため、次に write が行われるまで、常にデータストアを見続けるようです。

GAE の課金体系ではデータストアの read/write が一定量を超えると有料になるので、データストアの read/write はできるだけ避けたいところです。
そこで no_datastore を使えば、gaesessions では全くデータストアが使われなくなります。
no_datastore の設定は非常に簡単で、appengine_config.py で
def webapp_add_wsgi_middleware(app):
    app = SessionMiddleware(app, 
       cookie_key="32文字以上のパスワード",
       lifetime=datetime.timedelta(days=有効期限),
       no_datastore=True);
    return app;
とするだけです。
ただし、この設定をすると memcache にデータがなくなるとデータ自体が失われてしまうため、重要な情報をセッションに入れられなくなります。
タグ:GAE
posted by おちエン at 22:27| Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年04月22日

JavaScript の parseInt で 08 と 09 が・・・

ユーザに西暦、月、日を入力してもらうフォームを作っていて、入力された値を JavaScript で
var $month = $form.find("input[name='month']");
var month = parseInt($month.val());
if (month > 12 || month < 1) {
   alert($month.attr('title') + "が不正です");
   return false;
}
という風に値のチェックをしていたのですが、08 や 09 と入力された場合、「不正です」のエラーが出るという問題が発生しました。
調べてみると、08 や 09 が入力された場合、parseInt() で 0 が戻っていました。

parseInt() を調べてみると、
  • 0から始まる場合は8進数
  • 0xから始まる場合は16進数
とみなすというのが仕様でした。
したがって、08 や 09 は 8進数とみなされますが、8進数は07までなので 8 や 9 は削除されて 0 とされたということなのでしょう。

対処方法は、
var month = parseInt($month.val(), 10);
という風に10進数であることを parseInt() で明示するということでした。

posted by おちエン at 19:44| Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2011年11月06日

VMWare Fusion4 で WindowsXP の共有

VMWare Fusion4 でゲストOS に WindowsXP を使っていますが、Mac と WindowsXP で共有ができなかったので調べてみました。

とりあえず、共有設定するためにはゲストOS をシャットダウンしておく必要があるので、VMWare Fusion のメニューの「仮想マシン > シャットダウン」を選択します。
シャットダウンした後に「仮想マシン > 共有 > 共有設定」を選択して、スイッチを「オン」にします。
「共有フォルダ」を追加したい場合は、「+」を押してフォルダを追加すれば OK。

ただ、これだけだと共有できないです。それが分かるまでに相当時間がかかりましたが。。。
正解は「VMWare Tools のインストール」です。

「仮想マシン > VMWare Tools のインストール」を選択して、インストールを行うだけ。
インストール後、ゲストOS が再起動され、ログインするとゲストOS のデスクトップに VMWare Shared Foldersというディレクトリが表示されるようになります。



posted by おちエン at 22:05| Comment(0) | セットアップ | このブログの読者になる | 更新情報をチェックする

2011年11月05日

Facebook のファンページに投稿する方法

Facebook のファンページに PHP からで投稿しようとして、若干はまったので手順を備忘録として書いておきます。

ポイントは2つ。
そもそも Facebook に投稿するためには AccessToken が必要ですが、通常のウォール投稿とは違うファンページ用の Token が必要というのがまず1つ目。
もう1つはパーミッション。
ウォール投稿では、
  • publish_stream
  • offline_access
で十分ですが、ファンページ投稿にはさらに、
  • manage_pages
  • status_update
の2つが必要なようです。

やっかいなのは Facebook の管理画面などで自分の AccessToken が見れないので、AccessToken を知るためにわざわざコードを書かないといけないという。。。
この辺改善してもらいたいとこですが。

詳細を読む
posted by おちエン at 13:50| Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2011年10月08日

VMWare Fusionでdelete押してもファイル削除できない

今日も VMWare Fusion の話。

ゲストOS の WindowsXP でファイルを削除しようと、BackSpace はないので delete を押してファイルを削除しようとしたところ、ファイル削除できず。。。

正解は、fn + delete
ごみ箱にさえ入れたくない場合、Windows では shift + BackSpace ですが、Fn + delete + shift

キーボードショートカットがなかなか混乱しますね。

よくやってしまうのが、Windows なので思わず、alt + tab でタスク切り替えしようと、Windows で alt キーのある command キーに手が伸びてしまい、command + tab を押してしまって、Mac のタスクが切り替わるミス。
正解は option + tab です。
そのうち慣れていくんでしょうが、Windows を触ったときに混乱しないか不安。。。

タグ:VMware Fusion
posted by おちエン at 20:15| Comment(0) | セットアップ | このブログの読者になる | 更新情報をチェックする