本日はPySNSに機能追加します

2月 21st, 2011 by

実装予定の機能 ・友達登録機能 ・日記への画像添付機能 ・プロフィール画面にプロフィール画像を表示 ・友達の日記表示機能 2時間ほどしか作業できなさそうなので、どこまで出来るかは疑問で.... Read more


PythonでSNS

2月 21st, 2011 by

PythonでSNSを作ってみることにしました。 実装済みの機能は Googleアカウントでのログイン アカウント(名前)の設定 日記の投稿 全体日記の閲覧 プロフィール画像の設定 です。 友達.... Read more


エンコードエラー

2月 20th, 2011 by

エンコード関連ではまったので共有しておきます。 ベースとなるコード 日本語の部分がユニコード文字列になっていないのが不安ですが、動作します。 ::CODECOLORER_BLOCK_1:: 動かないコ.... Read more


GAE/Pの管理画面でDataStoreを操作

2月 19th, 2011 by

app.yamlの末尾に以下の2行を追記しておけば、GAEの管理画面でDataStoreのメンテナンス出来ます。 ::CODECOLORER_BLOCK_10:: .... Read more


今週末の予定

2月 19th, 2011 by

ちょっと大きめのWebアプリを開発中です。Webアプリ自体は公開できないかもしれませんが、途中で気がついたことをいくつか記事にまとめようと思ってます。 ブログを何点か改良(改悪?)しました。 ブログ.... Read more


単語リスト

2月 19th, 2011 by

英単語の出現頻度を利用したアプリを作ろうと思い、その下準備として単語リストを作りました。大文字・小文字、過去形、三人称単数現在形のsなどもそのままの形で収録されています。実際に、アプリに組み込むときは、大文字・小文字の統一ぐらいはしたほうがよさそうです。10001-20000番目の単語のリストも作ろうと思ったのですが、途中の単語が1000個欠落してたので、諦めました。

出典: Wiktionary:Frequency lists/Project Gutenberg 1-10000

Wiktionary:Frequency lists/Project Gutenberg 1-10000

1行100単語 × 100行です。行内の単語はスペース区切りになっています。

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導入によるパフォーマンスアップが期待できそうだ。

測定用プログラム

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

GAEのDataStoreは遅い?

2月 17th, 2011 by

GoogleDataStoreは遅いといわれることが多いので、簡単にベンチマークを取ってみた。

測定方法

1000バイトの文字列と、5000倍バイトの文字列を、100回保存するのにかかる時間を測定した。バラつきを見るために、それぞれ10回ずつ計測した。

測定結果

各行は、指定長さの文字列をDataStoreに100個保存する処理の所要時間(秒)です。

1000バイト

1
2
3
4
5
6
7
8
9
10
2.015
2.058
2.050
2.019
2.150
1.720
1.836
1.962
1.923
1.690

5000バイト

1
2
3
4
5
6
7
8
9
10
1.746
1.874
1.727
1.854
1.986
1.827
2.376
1.890
2.383
5.054

まとめ

1000バイトの場合も、5000バイトの場合も、データの保存にかかる時間はほぼ20msである。1個~数個程度のデータを保存する場合は問題にならないが、100件で2秒、1000件で20秒かかってし0まう。CSVのインポート機能などはTaskqueueを使って実装すべきだといえる。

ソースコード

URL短縮君が攻撃された

2月 15th, 2011 by

URL短縮君のAPIを公開したところ、早速9000回を超える攻撃リクエストを受けました。 匿名で利用できるVPNサービスを使ってのアクセスだったようですが、司法機関が動くと普通に身元割れてしまうのでご.... Read more


URL短縮APIをリリース

2月 15th, 2011 by

URL短縮サービスに、APIを実装しました!!!
使い方はとっても簡単、”http://b.php5.jp/?url=”の後ろに短縮したいURLをつけるだけ!!!
※url=の後ろはURLエンコード推奨

短縮元URL

1
http://www.yahoo.co.jp

短縮用のAPI呼び出し 

1
http://b.php5.jp/?url=http://www.yahoo.co.jp

実行 → http://b.php5.jp/?url=http://www.yahoo.co.jp

短縮例

1
http://php5.jp/l

ソースコード

とりあえず乗っけときます。

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

2月 13th, 2011 by

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

変更前

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

GAE/PythonでDjango1.2.5を使う方法

2月 11th, 2011 by

本日リリースのApp Engine SDK 1.4.2から、新しいバージョンのDjangoを利用できるようになっているので、早速使ってみた。 ソースコード templateをインポートする前に、use.... Read more


GAE/Pでテンプレートエンジン使ってみた。

2月 11th, 2011 by

GAE/Python標準付属のテンプレートエンジンである.... Read more


GAE-Cron

2月 11th, 2011 by

GoogleAppEngine/Pythonを使って、CRONサービスを提供するサービスがあったので、参加してみた。 試しに1環境設置。ユーザ数の上限は50で、一人当たりの設定数の上限は5にしている。.... Read more


Twitterの検索機能はJS必須?

2月 11th, 2011 by

Twitterクライアントに、ハッシュタグ投稿機能を実装しました。 ハッシュタグを付けて発言しているときは、TLにハッシュタグの検索結果が表示されるのが自然ですよね?で、実装しようとしたんですが、無理.... Read more


GAEのSDK 1.4.2リリース文

2月 11th, 2011 by

GoogleAppEnigneの新しいバージョンのSDKが公開された。正式版のリリース文はまだ公開されていないようだが、プレリリース版のリリース文があったので簡単に翻訳してみた。使ったことがない機能は.... Read more


本日の実装

2月 11th, 2011 by

今日はhttp://nisetwitter.appspot.com/を少し改良しました。 改良点 URL自動リンクの正規表現に穴があったので修正 Tweet内容をDBに保存する機能を実装 明日から.... Read more


本日の実装予定/結果

2月 9th, 2011 by

予定 不具合修正 ・API呼び出しに5秒以上かかった場合の例外処理を実装 ・OAuth認証がタイムアウトした場合の例外処理を実装 新機能 ・自分TLではなく、特定ハッシュのTLを表示する機能 ・特定ハ.... Read more


Twitterクライアントを改良

2月 9th, 2011 by

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

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

改良点は以下の通り

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

スクリーンショット

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

Nisetweet

Nisetweet

ソースコード

簡易Twitterクライアント作ってみた。GAE/Python

2月 7th, 2011 by

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


  • 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      実行速度(改)で、最適化をし尽くしたつもりが、早速 mohayonao@hatena さんから、改善案をいただきました。rangeではなく、xrangeを使うとより高速化するとのこと。早速書き換えてみ.... Read more

  • タグ

  • Archives

  • Recent Comments

    • ブログロール


    Get Adobe Flash player