Tags » ‘python’

Google App Engine SDK 1.4.3リリース文抄訳

4月 2nd, 2011 by

GoogleAppEngine SDKのバージョン1.4.3が3月30日にリリースされました。マイナーバージョンアップですが、バグフィックスだけでなく、新機能も実装されています。GAEで開発をされている方は特別な事情のない限りアップデートをお勧めします。

リリースノート

青文字が原文です。訳に間違いがありましたら、Wordpressのコメント欄もしくは、Facebookのコメントで指摘頂けると助かります。気になる部分は、土日に検証してみようと思います。
http://code.google.com/p/googleappengine/wiki/SdkReleaseNotesを訳しました。

File APIをサポートしました。FileAPIを使うとblobstore内のファイルを読み書きできます。
Added Files API that allows writing to and reading from files in blobstore.

Cronの実行開始時刻と実行終了時刻を指定できるようになりました。
You can now specify cron execution for a time interval between a start and end time.

3の倍数と3のつく数字だけ

3月 26th, 2011 by

日経ソフトウェア 2010年4月号特別付録の問題をPythonでといてみた。 Amazon.co.jp ウィジェット 問題1: 「3の倍数と3のつく数字だけ・・・」 1から100までの整数を1行に.... Read more


gaecron アカウント上限を300に緩和

3月 26th, 2011 by

gaecronを運用しているのですが、200環境埋まった時点で、一番厳しいリソースで3割弱しか使っていないことが分かったため、上限を200→300に増やしました。 .... Read more


GAE/Pythonでサービス作ろう!

3月 23rd, 2011 by

この10日間ほど、地震のニュースばかり追いかける日々をすごしていないでしょうか?大勢の方が被災され、原発関連の二次災害も発生する中で落ち着きづらいというのも事実なのですが、心配しすぎてもしかたない。そ.... Read more


メタ構文変数

3月 11th, 2011 by

Python入門者に贈る16の鍵で、Pythonの変数名の例にfooやbarは使わないよって指摘いただいたので、調べてみた。Pythonという言語名はモンティ・パイソンにちなんでつけられたので、そのこ.... Read more


URLをアンカーリンクとIMGタグに置換

3月 10th, 2011 by

テキスト内のURLを、アンカーリンクとIMGタグに置換するサービスをリリースしました。

なお、ttpで始まるプロトコルは、httpに自動修正します。

ソースコード

Python入門者に贈る16の鍵

3月 7th, 2011 by

このエントリーは、Python入門者と、Python入門予備軍の方を対象としています。 どうしてPythonやるの? Pythonって覚えやすい言語なんです。といっても、それなりに使いこなせるようにな.... Read more


Memcachedで負荷が3分の1/GAE無料枠で1日200万PV

3月 1st, 2011 by

GAE/PythonのアプリにMemcached組み込んだら、CPU負荷が3分の1になった。

GAEは宇宙最強のデータセンタで動いてる。なら、負荷なんて気にしなくていい。お金さえあればね。ってことで、お金払いたくないので最適化しました。数行の変更で、性能3倍以上になっちゃいましたよ!!!!

最適化対象

ブログに埋め込むパーツです。シンプルですが、とあるまとめサイトに埋めたところ、1日数万リクエストがありました。Memcachedを使わなくても、1日50万PV程度は大丈夫だったのですが、最適化してみました。

スクリーンショット

スクリーンショット

Memcached導入による負荷の変化

赤い線がAPIが使ったCPU時間、青い線が全体のCPU時間です。Memcachedを組み込んだとたん、CPU使用量が3分の1になりました。特に、APIのCPU使用量は劇的に減っています。

無料利用分でどれだけつかえるの?

超過しそうなリソースはCPU時間とOutboundの転送量。それぞれ1リクエスト当たり10msと400byteです。

CPU無料枠
6.5時間/10ms = 234万PV

Outbound転送無料枠
1GB/400byte = 250万PV

これなら、1日200万PVは余裕ですね。

Memcached組み込み後のソースコード

※Memcachedを組み込む際には、元のデータの更新にあわせて、Memcachedのキャッシュをクリア(もしくは新しい値を上書き)すること。さもないと古いデータが表示され続けます。

データ読み取り処理(quickGet)
 Memcachedにデータがあるか確認します。あれば使います。なければ、DataStoreから取得しMemcachedに保存します。

データ書き換え処理(18行目)
 DataStoreに保存したデータと同じものをMemcachedに保存します。

python-blog-systemを改良

2月 27th, 2011 by

今日はpython-blog-systemの改良を進めていました。といっても新機能を実装したというよりは、不具合修正やら、設定の外部化やら地味な作業が中心でした。 ソースコードはこちら https:/.... Read more


pySNSを微調整

2月 23rd, 2011 by

今日は、hakemeで遊んでしまい、pySNSの開発はほとんど進みませんでした。ユーザ数表示の追加と、全体のリファクタリングをしかできませんでした。 hackmeはLv2まで突破できました。エラーメッ.... Read more


GAE/P DataStore vs Memcached

2月 18th, 2011 by

昨日のDataStoreの書き込み性能の測定の続きで、DataStoreの読み込みとMemcachedの読み書きの性能を測定した。

比較内容

以下の5項目の測定を行った。100バイトの読み書き50回を1セットとして、10回測定しグラフを作成した。

  • Store/W
    DataStoreへの保存
  • Store/R
    DataStoreから1レコード取得
  • Mem/W
    Memcachedへの保存
  • Mem/R – s
    Memcachedからの読込。データが存在する場合。
  • Mem/R – m
    Memcachedからの読込。データが存在しない場合。

結果グラフ

縦軸は1回当たりの処理時間(単位ms)、横軸は10回分の測定結果。

datastore_vs_memcached

datastore_vs_memcached

結果考察

MemcachedのReadが最も高速で、MemcachedのWrite、DataStoreのRead、DataStoreのWriteと順に遅くなった。平均処理時間と、MemcachedのReadを1とした時の実行時間を表にまとめてみた。

Store/W Store/R Mem/W Mem/R-s Mem/R-m
時間[ms] 17.94 7.1 2.29 2.12 2.07
Mem/R比 8.68 3.43 1.11 1.02 1

csv2table

この結果から、Memcachedの性能は、DataStoreと比べてReadで3倍程度、Writeで8倍程度高速であることが分かる。Memcachedのキャッシュヒット率が50%を超えるようなサービスであれば、Memcached導入によるパフォーマンスアップが期待できそうだ。

測定用プログラム

測定に用いたプログラムを掲載しておく。

ブログにDjango1.2.5を組み込みました

2月 13th, 2011 by

Djangoをpython-blog-systemに組み込みました。もともと、Pythonのソースコード内で、self.response.out.writeを使ってHTMLを出力していたのですが、テンプレートエンジンを利用することで、Pythonで記述したロジック部とHTMLを分離できました。

変更前

変更前のソースコードです。汚いなんてもんじゃありません。MVCが渾然一体となっています。小規模なアプリであればこれでも良いと思いますが、これ以上大きなプロジェクトを開発するのであればMVCきっちり分けたほうがよいでしょう。

Twitterクライアントを改良

2月 9th, 2011 by

今日は、昨日作成したTwitterクライアントを改良しました。

まず最初におさらいですが、今作成しているTwitterクライアントは、GoogleAppEngine/Python環境で動作しています。OAuthでの認証を実現しており、興味をもたれた方は、自由に使っていただいて問題ありません。また、欲しい機能などがありましたら、意見頂けると中の人が喜びます。コメント大歓迎です!(自動公開にならないかもしれませんが、見つけ次第、公開します)

改良点は以下の通り

  • デザインを調整
    スタイルシートをつけてみました。
  • 空文字列の送信を防止
    何も入力していない状態での送信をJavaScriptで防止しました。
  • URLのリンク
    TL内のURLに自動リンクするようにしました。
  • @ユーザIDのリンク
    @の後ろに英数字が続く場合は、そのユーザにリンクするようにしました。
  • BadValueエラーの処理
    同一メッセージを2回連続で発言した際に発生していたBadValueエラーを隠しました。

スクリーンショット

スクリーンショットです。このスクリーンショットに映っているユーザは全員公開モードになっていたので、内容は伏せていません。

Nisetweet

Nisetweet

ソースコード

GAE/PythonでOAuth

2月 6th, 2011 by

GoogleAppEngine / Python環境で、TwitterのOAuthを使ってみた。


CSV2Tableパワーアップ

2月 5th, 2011 by

今日は、CSV2Tableをパワーアップの改良作業を行いました。追加した機能は以下の通りです。 ラベル位置選択 1行目、1列目、1行目+1列目、ラベルなし、の4通りから選択できるようになりました。 .... Read more


CSV2Table

2月 3rd, 2011 by

CSV(TSV)から、HTMLテーブルに変換するサービスを作りました。デザイン調整などまだできていないので、かっこ悪いのですが、動作自体は安定していると思います。お約束のソースコードは記事の末尾に添付してます。

サービスの使い方

一番上のテキストエリアに、CSV(カンマ区切りデータ)もしくは、TSV(タブ区切りデータ)を入力して変換ボタンをクリックしてください。HTMLテーブルのプレビューと、そのソースコードが表示されます。CSVなのか、TSVなのかは、自動判別されます。

スクリーンショット

以下の画像をクリックすると、サービスのURLにジャンプします。

csv2table

csv2table

ソースコード

掲示板

2月 1st, 2011 by

掲示板をつくってみた。

管理者側で入力した内容が、5秒ごとにユーザ画面に転送されます。

さすがに、メタリフレッシュはかっこ悪いので、AJAXなどで書き換えるように変更しないとなー。

掲示板

掲示板

ソースコード

ソースコードは以下の通り。

URL短縮君をさらに改良

1月 30th, 2011 by

URL短縮君にログイン機能を実装しました。ログインして短縮URLを作成すると、あとで、どんな短縮URLを作成したか確認できます。また、短縮URLごとの、クリック数も確認できます。 .... Read more


URL短縮君を改良しました

1月 29th, 2011 by

URL短縮君を改良しました。 改良点は以下の通り。 URL入力画面に、説明を追加 URL入力画面に、確認ボタンを設置 URL入力画面に、生成したURLの総数を表示 短縮URL取得画面に、確認ボタンを.... Read more


URL短縮サービス作りました

1月 29th, 2011 by

以前作成していたURL短縮サービスを、大幅改造しました。改良したのは以下の3点です。

  • 独自ドメインの設定
    ドメインが[APPLICATION_NAME].appspot.comでは短縮後のURLが長すぎるので、独自ドメインを設定しました。
  • 例外処理の追加
    正しいURLが入力されていない場合にサーバの投げる例外ではなく、適切なメッセージを表示するようにしました。
  • デザインの適用
    簡単なデザインをつけました。前回と比べればはるかに使いやすくなったはずです。

スクリーンショット

こんな感じになりました。スクリーンショットをクリックすると、サービスのURLに移動します。

GAE/Pythonで作るメリット

GAEで運用すれば、サーバのメンテナンスをしなくて良い。個人で提供するサービスで、正直、サーバの面倒までみている暇はありません。またPythonを使うと、メンテナンス性の高い短いソースコードでサービスを開発できます。大規模プロジェクトであれば、きっちり設計して、Javaなどのコンパイル言語をつかったほうが高速で安定したサービスを開発できるとは思いますが、個人でサービスを作成するなら、開発効率の高いPythonが楽だとおもいます。

ソースコード

いつものお約束。ソースコード全文公開です。今回は、メインのpyファイルのほかに、yamlファイルとCSSファイルも掲載します。メインのプログラムは、デザイン部分やらGoogleAnalyticsのロギングコードまで含めて90行を切っています。短いです。

  • Python

  • 人気記事

      このエントリーは、Python入門者と、Python入門予備軍の方を対象としています。 どうしてPythonやるの? Pythonって覚えやすい言語なんです。といっても、それなりに使いこなせるようにな.... Read more

      リスト内包表記とは、あるリストを元にして別のリストを作るための記法のことです。ループ、Map、Filterなどを使っても同じ操作をできますが、リスト内包表記には以下の利点があります。 コードがシンプ.... Read more

      Pythonには固有の文字列フォーマット(モジュロ)操作が用意されている。文字列中の%?であらわされる部分が、文字列の後ろに与えられた変数で置換される。 単一値の置換 単一の変数を置換する場合は、文字.... Read more

      Pythonの世界は、整数などの単純な値も含め、すべての値はobjectクラスを継承したクラスのインスタンスでできています。 ::CODECOLORER_BLOCK_66:: classを定義する も.... Read more

      だまって↓インストールすれば、Facebookのコメントプラグインがすべての投稿とページにつくよ。動かなかったらごめん。 wp-facebook-comment .... Read more

      リスト(List)とはPythonの組み込み型の1つで、シーケンス(sequence)の一種です。他の言語におけるインデックス配列に似ていますが、かなり柔軟な操作ができます。このページではリストをつか.... Read more

      Pythonでは、print文を使わないと日本語を正しく出力されない。print文を使うと、あらかじめ設定されているエンコードにしたがって適切に出力される。 ::CODECOLORER_BLOCK_9.... Read more

      プログラム内でループを使うのは以下の3パターン。C言語などになれていると1番や2番を使いたくなるかもしれないが、Pythonでは3番が適してるケースが多い。 N回ループ一番基本的なタイプ 条件を満た.... Read more

      みなさん、Google App Engineって聞いたことありますか? あっ、それしってる。Google Docsとかでしょ?って思った方。惜しいけど違います。 Google App Engineとは.... Read more

      DataStoreとは 本記事内のDataStoreは、GoogleAppEngineのデータストアのことを指す。GoogleAppEngineは、ファイルの書き込みが一切できないため、DataSto.... Read more

      GAE/Pythonで、一体いつになったらPython3系が使えるようになるのか。興味深いページがあったのでざっくり翻訳してみました。 http://code.google.com/p/googlea.... Read more

      Pythonの文法構造には、単行のコメントアウトしかありません。 複数行のコメントアウトが必要な場合は、コメントを文字列にします。 単行コメントアウト #以降がコメントとして扱われます。 ::CODE.... Read more

      GoogleAppEngineでは、世界標準時で時刻を管理する。でも、そのまま表示すると分かりにくい。このページでは世界標準時を日本時間に変換したり、日本時間を世界標準時に変換する方法を紹介する。 現.... Read more

      昨夜、OAuthでの認証がうまくいったので、今日はTwitterのTLの取得と発言を実装してみた。 お試し環境 → http://nisetwitter.appspot.com/で公開している。 エラ.... Read more

      Pythonの条件分岐は、if, else, elifの3つの構成要素から成ります。条件成立時、非成立時の実行範囲は、インデント(indent)であらわします。条件部 If elseから成る条件分岐 .... Read more

      この10日間ほど、地震のニュースばかり追いかける日々をすごしていないでしょうか?大勢の方が被災され、原発関連の二次災害も発生する中で落ち着きづらいというのも事実なのですが、心配しすぎてもしかたない。そ.... Read more

      なんと、int型が64bitまで使えるんです。当たり前だけどうれしいです。 ::CODECOLORER_BLOCK_125:: windowsだと64bitCPU使っていてもこんな感じになります。In.... Read more

      タプルとは、シーケンス型のオブジェクトです。同じくシーケンス型のオブジェクトとの違いは、不変であるということです。リストは生成後に要素を追加したり削除したりできますが、タプルは生成後に内容を修正できま.... Read more

      Pythonには基本的な型として、数値、bool、文字列があります。type() を使うと変数の型を確認できます。 数値 数値を表す型には、整数型 、 長整数型 、浮動小数点型 、複素数型の4つがあり.... Read more

      GAE/Pythonで最初に戸惑うのはRequestHandlerだと思います。新規アプリケーション作成時に自動生成されるので必要に応じて書き換えることができれば問題ありません。 RequestHan.... Read more

      文字列は文字の列(シーケンス)のこと。文字列リテラルの表記方法は、以下の4つがある。 シングルクオーテーション1個‘string comes here’ ダブルクオーテーショ.... Read more

      モジュールとはPythonの定義や文が入ったファイルです。 標準モジュールや第3者によって公開されているモジュールを組み合わせることで、容易に高度な処理を実現できます。また、自作のモジュールを作ること.... Read more

      GoogleAppEngineでPythonを使う場合は、特別な理由がない限り、バージョン2.5を使いましょう。2.5以外の環境で開発すると、開発環境では動作していたアプリケーションが、GAEでは動作.... Read more

      ディクショナリ(dict)とは、他の言語でいうところの連想配列やハッシュと同じ機能を提供する。最近流行しているKey-Value型のデータストアもディクショナリの一種であるといえる。 辞書の作成 中.... Read more

  • タグ

  • Archives

  • Recent Comments

    • ブログロール


    Get Adobe Flash player