appengine

Python と Java で AppEngine アプリを開発してみて

はじめに Python と Java でそれぞれ AppEngine アプリを何個か作ってきましたが、AppEngine の利用方針を変更したことだし、このタイミングでそれぞれの開発を振り返ってみます。 Python での開発 フレームワークは AppEngine に特化した Kay Framework を…

AppEngine 用の Flask 拡張作ってみた

先日、AppEngine 向けには自分用のツールだけを開発すると宣言しました。 AppEngine 新料金体系を受けて方針変更 - present 自分用のツールなら Kay みたいなヘビー級のフレームワークを使うまでもないです。なので、Flask を使っています。 ただ、Flask は…

AppEngine 新料金体系を受けて方針変更

Twitter で AppEngine の新料金体系が話題になっていますね。一部抜粋。 サービスによって多少の違いがあるけど、大体今の料金の7〜8倍程度に ロジック見直して、どの程度まで下げられるか。このままだと、ほとんどのサービスを停止せざるを得ないレベル #ga…

Appstats を Flask で使う方法

App Engine アプリ用のプロファイラである Appstats は、Django 用ミドルウェアだけでなく、WSGI 用ミドルウェアも提供していました。考えてみれば、webapp フレームワークで使えないと SDK で提供しても意味無いですしね。だから Flask でも使えます。 apps…

Google App Engine で動く Full Ajax なタスク管理アプリケーションを作ってみた

これまで、タスク管理に check*pad や Remember The Milk を使ってきたんですが、どれもしっくりきませんでした。check*pad はシンプル過ぎるし、RTM は UI が使いにくい。 Mac の Things や OmniFocus は良さそうなんですが、あいにく私のマシンは Windows…

Slim3 でログイン必須のコントローラーやサービスをテストする方法

Slim3 で、ログイン必須のコントローラーやサービスをテストする方法が分かりにくかったので、やり方をメモしておきます。 まぁ、やり方は簡単で、tester.environment の setEmail と setAttributes を使うだけなんですけどね。 // ログイン Map<String, Object> attrs = new</string,>…

Slim3 の Validator を自作してみた

リクエストパラメータが Key や boolean に変換可能かどうか検証する Validator が見当たらなかったので。Slim3 のソースコードを参考にすれば、作るのは難しくないです。 まず boolean 用。 package sample.controller.validator; import java.util.Map; im…

Kay のページング機能を使ってみた

はじめに AppEngine/Python で CGM 系の Webサービスを作っているんですが、運営しているうちにデータ数が多くなりそうです。いや、なりますね。1ページに何百何千もデータを表示すると、見づらいし表示が遅いので、ページングを実装しなければいけません。 …

Cygwin で App Engine 開発環境を構築する

zsh を使うために Cygwin を導入したので、App Engine の開発環境も Cygwin 上に構築することにしました。 簡単に構築できると思ってたら、結構苦労したので、作業内容をメモしておきます。 Python 2.5 と Mercurial をインストール Cygwin の setup.exe を…

Python のマイクロフレームワーク『Flask』を試してみた

今更なんですか… 最近になって、『Flask』という Python のマイクロフレームワークの存在を知りました。フリスクじゃないよ。ずっと Kay や Django みたいなフルスタックフレームワークを追っていたから、Flask に気付くのが遅れました。…って、これは言い訳…

Kay Framework でも Blobstore を使ってみる

先日、App Engine で提供されている Blobstore を、webapp フレームワークで使っていました。 Google App Engine で Blobstore を使ってみる - present でも、実際のアプリ開発では Kay Framework を使っているわけで。 その Kay Framework ですけど、ちゃん…

Google App Engine で Blobstore を使ってみる

Google App Engine(以下 GAE) で画像とかファイルをアップロードするのどう実装しようか迷っていたら、「Blobstore 使えばいいよ〜」というアドバイスをもらいました。そういえば、Blobstore が提供されたことは知っていたけど、試したこと無かったな。 さっ…

Kay の Form を使った RESTful API でのリクエストチェック方法

Google App Engine + Kay Framework で RESTful な Web API を作成するとき、データの更新は HTTP メソッドの PUT を使っています。PUT では、更新に必要なデータがリクエストのボディで渡されてきます。データは JSON 形式を使うことが多いです。 リクエス…

Kay Framework でログイン必須のビューをテストする方法

Kay Framework に同梱されている werkzeug の Client クラスを使えば、ビューの単体テストができます。ただし万能ではなく、login_required デコレータがついたログイン必須のビューはテストできません。仕方ないので、テストしたい処理をログイン不要なメソ…

Google App Engine + Silverlight でタスク管理アプリケーション開発(6)

前回までの内容 GAE + Silverlight でアプリケーションを開発する本連載も終盤です。ビューモデルの実装が前回で終わり、残すはビューのみ。 いきなり完成画面 文章やコードをずらずら並べただけじゃ味気ないので。完成画面のスクリーンショットがこちら。 …

Google App Engine + Silverlight でタスク管理アプリケーション開発(5)

前回までの内容 前回ようやくビューモデルに着手しました。でも、ビューモデルのベースを用意したり、コマンドを実装したりといった、下準備がほとんど。肝心のビューモデルは、簡単なもの1つ実装しただけです。なので、今回も引き続きビューモデルを実装し…

Google App Engine + Silverlight でタスク管理アプリケーション開発(4)

前回までの内容 「GAE + Silverlight でアプリケーション作るってばよ!」な本連載も4回目。前回で MVVM パターンで使うモデルと、GAE/Python のサービスを呼び出すクラスを実装しました。今回はいよいよビューモデルに着手します。といっても、まずは下準備…

Google App Engine + Silverlight でタスク管理アプリケーション開発(3)

前回までの内容 Google App Engine(以下 GAE) + Silverlight でアプリを作ってやろうという本連載。前回でひとまず、GAE/Python でのサービス開発は終了。なんちゃって RESTful な Web API に仕上がりました。今回から、そのサービスを呼び出す Silverlight …

Google App Engine + Silverlight でタスク管理アプリケーション開発(2)

前回までの内容 リッチな UI を持つ Web アプリを作った事がないので、GAE + Silverlight で作ってやろうという本連載。前回は作成するアプリの詳細を決めて、GAE のプロジェクトを作成するところまで済ませました。済ませたといっても、せいぜい準備程度で…

Google App Engine + Silverlight でタスク管理アプリケーション開発(1)

はじめに これまでに、Google App Engine(以下 GAE) でいくつか Web サービスやアプリを公開しました。 Tweet Code tnakamura/gpipes · GitHub でも、まだリッチな UI のアプリケーションは作ったことがありません。そろそろ挑戦したいと思っていましたが、J…

GAEのモデルからSilverlightのモデルを生成するスクリプト作った

最近実験しているのが、GAE/Python + Silverlight という構成のアプリ。GAE/Python で WebAPI を作って、それを Silverlight から呼び出すイメージです。近いうちにこのブログで連載する予定。 この構成で開発していると、GAE/Python のモデルと Silverlight…

Django-nonrel 事始め

Django-nonrel というプロジェクトがあるらしい Django-nonrel は「Django を NoSQL/NoRDB に対応させよう」というプロジェクト。Google App Engine のデータストアをはじめ、SmipleDB・MongoDB・CouchDB といった有名どころをサポートする予定みたい。Djang…

Google App Engine でタグ機能の実装を簡単にする taggable-mixin

昨今のソーシャルアプリではタグ機能はあたりまえ。そのタグ機能を Google App Engine で実装するのを助けるモジュールに、taggable-mixin があります。 taggable-mixin - A mixin class that adds taggability to Google AppEngine Model classes. - Google…

認証必須の URL は app.yaml ではなくデコレータで記述

Google App Engine(以下 GAE)で、ある URL をログイン必須や管理者専用にする方法として、app.yaml で指定する方法があります。でもこの方法だと、RequestHandler のコードを見たとき、ログイン必須なメソッドなのかが分らないので、好きじゃないです。「ロ…

Kay Framework に RESTful な API を実装するための機能が追加されていた

以前 appengine-rest-server を紹介したときに「Kay Frameworkに追加されないかな」なんて書いていたら、本当に追加されました。 23. 汎用ビューグループ — Kay v3.0.0 ドキュメント ソースコードを見たところ、appengine-rest-serverのソースコードをKayに…

Kay Framework で Model を JSON に変換する方法

以前 Google App Engine でモデルを JSON に変換する方法を紹介しました。 Google App Engine の Model を JSON に変換する方法 - present この時はわざわざ simplejson のカスタム Encoder を自作していましたが、Kay Framework を使う場合はもっと簡単な方…

appengne-rest-server で作る簡単 Web API

はじめに リッチな UI を持つ Web アプリを作るなら、クライアントは Ajax か Flash、または Silverlight を使うと思う。そうすると、表示するデータを非同期に JSON または XML で取得するために、Web API を実装することになる。でも、リクエストパラメー…

Twitter でコードスニペットをつぶやける『Tweet Code』をリリース

Google App Engine/Python + Kay Framework で、Twitter アプリを作ってみました。その名も『Tweet Code』。 404 Not Found Twitter に140文字以上のつぶやきを投稿するサービスを、コードスニペット向けに特化させたものです。類似サービスに TweetMore や …

Kay Framework で Twitter につぶやきを投稿する方法

先日、Kay Framework で認証に Twitter の OAuth を使えるようになったので、今度はつぶやきを Twitter に投稿してみた。Twitter への投稿を urlfetch を使って一から実装するのは面倒なので、 Google App Engine 用の Twitter ライブラリ『AppEngine-OAuth-…

Kay Framework で認証に Twitter の OAuth を使う方法

Kay Framework は認証機能を提供しています 認証方法も多様で、Google アカウントを使った認証だけでなく、データストア認証*1や OpenID、さらには OAuth まで利用できます。 認証方法は Kay の認証ミドルウェア用バックエンドとして提供されています 簡単に…

webtest を使った Google App Engine アプリケーションのテスト

Google App Engine (以下 GAE)アプリケーションの、Web API 部分のテストを自動化するために、webtest というツールを導入してみた。webtest は WSGI アプリケーションをテストするための便利ツール。WSGI アプリケーションにダミーのリクエストを簡単に送る…

Google App Engine の Model を JSON に変換する方法

Google App Engine (以下 GAE) で結果を JSON で出力したい場合、GAE SDK に同梱されている Django の simplejson を使えばいい。ただ問題があって、simplejson で JSON にできるのは、Python の組み込み型*1だけ。Model や GqlQuery を JSON にはできない。…

Google App Engine でモジュールを動的にインポートする方法

Google App Engine(以下 GAE)でモジュールを動的にインポートするには、__import__関数を使えばいい。 # 動的にモジュールをインポートする def dynamic_import(name): mod = __import__(name, globals(), locals(), [], -1) components = name.split('.') f…

Kay Framework でログイン必須のビューを作る方法

Kay チュートリアルでも紹介されていますが、ログイン必須のビューを実装するなら、kay.auth.decorators.login_required デコレーターを使うのが手っ取り早いです。 from kay.auth.decorators import login_required @login_required def index(request): re…

はじめてのKay Framework

はじめに Google App Engine(以下 GAE) アプリの開発スピードを上げるために、Kay Framework を導入することにしました。ただ、導入に思いのほか時間がかかってしまったので、手順をメモしておきます。誰かの役に立てば幸いです。今回試した環境は次の通り。…

Google App Engine で動く RSS/Atom フィードアグリゲーターを作った

はじめに 先月ぐらいに、ふと、次のようなことを考えました。 はてなダイアリーに書いた記事へのリンクを、手動でわんくまBlogに投稿するの面倒。自動化したいよね。 ↓ Yahoo Pipes 使えばいける? ↓ ブログ投稿機能ないよ。 ↓ xFruits はどう?ブログ投稿機…

親がいるモデルをキー以外で取得するなら親指定必須

Google App Engine (以下 GAE) では、parent がいるモデルを get_by_key_name や get_by_id で取得する場合、parent を指定する必要がある。parent に指定するのは、モデルオブジェクトでもいいし、キーでもいい。これを知らなかったので、モデルを取得でき…

デスクトップに置いたプロジェクトを Google App Engine Launcher に登録するのは NG

デスクトップに置いたプロジェクトを、Google App Engine Launcher に登録しようとしたら、固まってしまったので、タスクマネージャーから強制終了。で、再び起動しようとしたら次のようなエラーが出て、起動できなくなった。 See the logfile 'C:\Google\go…

Google App Engine で集約例外ハンドラ

Google App Engine の webapp.RequestHandler には、ハンドラ内で例外が発生したときに呼び出される handle_exception メソッドがあります。このメソッド、デフォルトでは HTTP ステータスコードを 500 に設定するだけですが、これをオーバーライドして、動…

urlfetchの制限時間は5秒

Google App Engine では、外部のWebサービスのAPIを呼び出したり、RSSを取得したりするために、urlfetch というモジュールが提供されています。この urlfetch モジュールの fetch 関数を使って、URLのドキュメントを取得できます。ただ、fetch 関数のデフォ…

Google App Engine で RSS を生成する方法

Google App Engine 用のアプリケーションで RSS を生成したいなら、Django に入っている feedgenerator を使えばいい。feedgenerator は Django に入っているユーティリティモジュール。Google App Engine SDK for Python には最初から Django が入っている…

Google App Engine/Python で単体テスト

Google App Engine SDK for Python には、単体テスト用に各サービスのスタブが提供されています。このスタブと unittest を使えば、ローカル環境で GAE 用アプリの単体テストが可能です。GAE/Python で unittest を使って、単体テストを行うサンプルは次の通…

参考になりそうなオープンソースのGAEアプリ

GAE アプリを開発しているけど、Python と GAE の両方とも初心者なので、どう実装したらいいのか迷う。そこで、「オープンソースのGAE向けアプリを参考にすればいいじゃないか」と考え、ネットで探してみた。 kay-framework - A web framework made specific…

GAE/JRuby がすごく速くなっている件

Ruby で Google App Engine 用アプリを開発できる「appengine-jruby」っていう gem があるんですが、これを久しぶりに更新したら、すごく速くなっていて驚きました!何が速くなったかっていうと、初回ロードがすごく速くなっています。以前は表示されるまで…

ログインが必要なメソッドを実装するための Google App Engine アプリ用デコレータ

Google App Engine アプリを作っていると、「ログインしていないときはログインページにリダイレクトする」コードをよく書きます。 class MainHandler(webapp.RequestHandler): def get(self): # ログインしていないときは、ログインページにリダイレクト if…

GAE アプリのテンプレートを DRY

Google App Engine のテンプレートでも、Django のみたいにテンプレートを継承できます。テンプレートの継承を使えば、サイトで共通に使われている全ての要素をまとめることが可能です。まず、ベースとなるレイアウトを記述します。 base.html <html> <head> <title>{% block ti</title></head></html>…

GAE で DataMapper を使う準備

Google App Engine(以下 GAE) で DataMapper を使用可能にする、dm-appengine というプロバイダがあります。この dm-appengine の導入でハマってしまったので、今後のために導入手順をメモしておきます。まず、 appcfg.rb.bat gem install data_mapperで Dat…

google appengine の gem でインストールされる appcfg のバグ?

Windows XP で、日本語で名付けたアカウントにログインし、下記のコマンドを実行。 appcfg.rb.bat gem install インストールするgem名すると、「Document and Settings 下にフォルダがない」といった内容のエラーが発生する。肝心のフォルダ名は文字化けして…

予算ジェネレーターのソースコードを公開

GitHub に予算ジェネレーターのソースコードを公開しました。 404 · GitHub GitHub と Google Code のどちらで公開するか迷いましたが、自分のプロジェクトが dashboard に一覧表示される点と、Git を採用している点、この2点で GitHub に決定。Source のペ…

Google App Engine で動く Web サービス「予算ジェネレーター」

Google App Engine と Python の入門として、超単純な Web サービスを作ってみました。 予算ジェネレーター スクリーンショットはこちら。 月収を入力してボタンを押すと、予算を計算して表示します。各費目の適正割合は、「年収200万円からの貯金生活宣言」…