ラベル Google App Engine の投稿を表示しています。 すべての投稿を表示
ラベル Google App Engine の投稿を表示しています。 すべての投稿を表示

2010年7月25日日曜日

google app engine Images Python API  画像ファイルを読んで画像を表示させる

google app engineのImages APIを使おうと思って普通に一日ハマってたので防備録。
まず、画像ファイルを読み込むっていうサンプルが見つからなかった。
データストアのBlobProperty使うっていうのは割と見つかるんだけど。

以下はimageディレクトリにある画像ファイルhoge.pngを読み込んでImagesオブジェクト作り表示させる簡単なサンプル。
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.api import images
import os


class MainHandler(webapp.RequestHandler):
  def get(self):
    imgdir = os.path.join(os.path.dirname(__file__), 'image')

    fp = open(imgdir + '/hoge.png','rb')
    data = fp.read()
    fp.close()
    img = images.resize(data, 32, 32)

    self.response.headers['Content-Type'] = "image/png"
    self.response.out.write(img)


  def main():
    application = webapp.WSGIApplication([
    ('/', MainHandler)
    ],
    debug=True)
    wsgiref.handlers.CGIHandler().run(application)


if __name__ == '__main__':
  main()
■ポイント1:読み込む画像が入ったディレクトリは静的ディレクトリにしない
上のサンプルではimageディレクトリにあるhoge.pngを読み込んでます。静的ディレクトリに指定されたものはスクリプトファイルから読めませんのでapp.yamlにはimageディレクトリをstaticで登録しちゃいけません。
以下の例ではimg_staticを静的ディレクトリに指定してますのでこの中のファイルは読むことができません。
application: hogehoge
version: 1
runtime: python
api_version: 1

handlers:
- url: /img_static
  static_dir: img_static

- url: .*
  script: main.py
■ポイント2:コンストラクタを使わない。
なんかうまくいかないので。どうやったらいいのかな?できると思うんだけど。
img = images.Image(data)

■参考にしたサイト
http://d.hatena.ne.jp/kwatch/20100415/1271285578#

2010年1月20日水曜日

簡易WebアプリケーションサーバとしてGoogle App Engine SDKを使う

Webアプリケーションを作る
Webアプリケーションを作りたい、もしくは作る必要ができた時どうするでしょうか?
ApacheなどのWebサーバとPHPを用意して、場合によってはTomcatなどのアプリケーションサーバをインストールしてアプリケーションを配備する。あとDBサーバも欲しいからMySQLもインストールする。。。などなど。結構な下準備をする必要があります。
もちろんそういった環境があらかじめ整ってるかもしれません。でも、ちょっとしたWebアプリのアイディアが浮かんだ。たまたまネットブックを持っていたのでちょっと試しに作ってみよう。なんていうシチュエーションの場合はどうでしょうか?
まずはApacheを入れて、なんていうのはじれったいですよね。

Goolge App Eninge SDKを活用する
そこでGoogle App Engine(以下、GAE) SDKの登場です。やや、話が飛躍している感じはしますが続けます。 GAE SDKには以下のような特徴があります。
  • GAE SDKはインストーラが付いていて簡単インストールできます。
    (Python 2.5.xをあらかじめインストールしておく必要がありますが、Pythonもインストーラで簡単にインストールできます。)
  • SDKにはWebサーバがついています。(デプロイしたあとにhttp://localhost:8080/でWebアプリにアクセスできます。)
  • 作ったアプリケーションはコマンド1つで簡単にデプロイできます。
  • GAEのDBであるDatastoreもローカルでシミュレートしている。
あとはWebアプリのコードを書くだけ、という環境がPythonとSDKのインストールだけで用意されます。インストールにかかる時間はそれぞれ数十秒です。
あとは自分のアイディアを形にするだけです。

GAE自体の特徴や活用方法はいろんなところで見かけるけれどSDKに注目したエントリは無いような気がするので書いてみました。僕はPython版しか使ったことがないのでPython版を。また、SDKのバージョンは1.3.0でWindows版を前提にして書いています。

2009年1月4日日曜日

reStructuredTextのススメ

reStructuredText(以下、RST)をご存知でしょうか?
軽量マークアップ言語に属するものです。wikiに似ていると思ってくださったらイメージしやすいでしょうか。RSTの書式に沿って書いたプレーンテキストをHTMLやPDFといった形式に変換できるのです。
書式や技術については詳しいサイトがいろいろありますのでここでは詳しく書きません。Googleで検索してみてください。

RSTを使うと何がいいか?どんな風に幸せになれるのか?というと、やはり”ワープロソフトを使わなくても美しいスタイルの文書が作成できる”ということではないでしょうか。
ワープロソフトは編集している最中からスタイルを画面上に反映させようとしますので、動作が重くなりがちだと思います。(もちろん、下書きモードなども用意されていますが、いちいちモードを切り替えるのが好きな人は少ないんじゃないかと思います。)
RSTはプレーンテキストで書きます。なのでいつもコードを書いているその使いやすいエディタから離れることなく書くことができます。

RSTを変換するツールはvimのプラグインVSTDocutilsがありますが、rst2a.comというサイトで簡単に変換することができますので、サイトの使い方をご紹介します。



サイトのトップページです。Createを選択します。















ファイルをアップロードするか、直接サイトでRSTを書くかを選べます。
もうすでにRSTが作成されているのであればファイルアップロードでいいのですが、結構文法に厳格なようで先に紹介したVSTやDocutilsなどで変換ができたファイルでも、このサイトではエラーで変換できない場合があるようですので直接編集をおすすめします。




左側のテキストエリアで編集します。
右側のLegendにはRST書式の書き方が表示されています。
出来上がったら、Convert To:で出力形式をPDFかHTMLを選ぶことができます。ここではHTMLを選択します。









すると右側の画面がHTML Exportに変わりました。ここで出力するHTMLのスタイルを選ぶことができます。
ここではcrngamesを選んでいます。
あとはDownloadボタンを押して完了です。








別ウィンドウでHTMLファイル開かれます。見事完成しました。
PDFの場合にはファイル保存ダイアログが表示されます。







僕はすっかりRSTの虜になってしまい、今ではいろんな手順書やスケジュールを記載したメールまでRSTで書いています。こんな風になってしまったのはGoogle App EngineのHack-a-thonでチューターをなさったvoluntasさんにRSTを紹介されてしまったからです。
voluntasさんの会社では社内文書の公式フォーマットとしてRSTが使われているそうですよ。

■Thanks
voluntas
https://twitter.com/voluntas


■参考サイト
rst2a.com
http://rst2a.com/

VST : Vim reStructured Text
http://www.vim.org/scripts/script.php?script_id=1334

Docutils
http://docutils.sourceforge.net/index.html

プレーンテキストからビジュアルな文書を生成できるreStructuredTextとrst2a
http://sourceforge.jp/magazine/08/05/07/0124234