実装予定の機能 ・友達登録機能 ・日記への画像添付機能 ・プロフィール画面にプロフィール画像を表示 ・友達の日記表示機能 2時間ほどしか作業できなさそうなので、どこまで出来るかは疑問で.... Read more
PythonでSNS
2月 21st, 2011 by adminPythonでSNSを作ってみることにしました。 実装済みの機能は Googleアカウントでのログイン アカウント(名前)の設定 日記の投稿 全体日記の閲覧 プロフィール画像の設定 です。 友達.... Read more
エンコードエラー
2月 20th, 2011 by adminエンコード関連ではまったので共有しておきます。 ベースとなるコード 日本語の部分がユニコード文字列になっていないのが不安ですが、動作します。 ::CODECOLORER_BLOCK_1:: 動かないコ.... Read more
GAE/Pの管理画面でDataStoreを操作
2月 19th, 2011 by adminapp.yamlの末尾に以下の2行を追記しておけば、GAEの管理画面でDataStoreのメンテナンス出来ます。 ::CODECOLORER_BLOCK_10:: .... Read more
今週末の予定
2月 19th, 2011 by adminちょっと大きめのWebアプリを開発中です。Webアプリ自体は公開できないかもしれませんが、途中で気がついたことをいくつか記事にまとめようと思ってます。 ブログを何点か改良(改悪?)しました。 ブログ.... Read more
単語リスト
2月 19th, 2011 by admin英単語の出現頻度を利用したアプリを作ろうと思い、その下準備として単語リストを作りました。大文字・小文字、過去形、三人称単数現在形の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 admin昨日の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回分の測定結果。
結果考察
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 |
この結果から、Memcachedの性能は、DataStoreと比べてReadで3倍程度、Writeで8倍程度高速であることが分かる。Memcachedのキャッシュヒット率が50%を超えるようなサービスであれば、Memcached導入によるパフォーマンスアップが期待できそうだ。
測定用プログラム
GAEのDataStoreは遅い?
2月 17th, 2011 by adminGoogleDataStoreは遅いといわれることが多いので、簡単にベンチマークを取ってみた。
測定方法
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 adminURL短縮君のAPIを公開したところ、早速9000回を超える攻撃リクエストを受けました。 匿名で利用できるVPNサービスを使ってのアクセスだったようですが、司法機関が動くと普通に身元割れてしまうのでご.... Read more
URL短縮APIをリリース
2月 15th, 2011 by adminURL短縮サービスに、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 adminDjangoをpython-blog-systemに組み込みました。もともと、Pythonのソースコード内で、self.response.out.writeを使ってHTMLを出力していたのですが、テンプレートエンジンを利用することで、Pythonで記述したロジック部とHTMLを分離できました。
変更前
変更前のソースコードです。汚いなんてもんじゃありません。MVCが渾然一体となっています。小規模なアプリであればこれでも良いと思いますが、これ以上大きなプロジェクトを開発するのであればMVCきっちり分けたほうがよいでしょう。
GAE/PythonでDjango1.2.5を使う方法
2月 11th, 2011 by admin本日リリースのApp Engine SDK 1.4.2から、新しいバージョンのDjangoを利用できるようになっているので、早速使ってみた。 ソースコード templateをインポートする前に、use.... Read more
GAE-Cron
2月 11th, 2011 by adminGoogleAppEngine/Pythonを使って、CRONサービスを提供するサービスがあったので、参加してみた。 試しに1環境設置。ユーザ数の上限は50で、一人当たりの設定数の上限は5にしている。.... Read more
Twitterの検索機能はJS必須?
2月 11th, 2011 by adminTwitterクライアントに、ハッシュタグ投稿機能を実装しました。 ハッシュタグを付けて発言しているときは、TLにハッシュタグの検索結果が表示されるのが自然ですよね?で、実装しようとしたんですが、無理.... Read more
GAEのSDK 1.4.2リリース文
2月 11th, 2011 by adminGoogleAppEnigneの新しいバージョンのSDKが公開された。正式版のリリース文はまだ公開されていないようだが、プレリリース版のリリース文があったので簡単に翻訳してみた。使ったことがない機能は.... Read more
本日の実装
2月 11th, 2011 by admin今日はhttp://nisetwitter.appspot.com/を少し改良しました。 改良点 URL自動リンクの正規表現に穴があったので修正 Tweet内容をDBに保存する機能を実装 明日から.... Read more
本日の実装予定/結果
2月 9th, 2011 by admin予定 不具合修正 ・API呼び出しに5秒以上かかった場合の例外処理を実装 ・OAuth認証がタイムアウトした場合の例外処理を実装 新機能 ・自分TLではなく、特定ハッシュのTLを表示する機能 ・特定ハ.... Read more
Twitterクライアントを改良
2月 9th, 2011 by admin今日は、昨日作成したTwitterクライアントを改良しました。
まず最初におさらいですが、今作成しているTwitterクライアントは、GoogleAppEngine/Python環境で動作しています。OAuthでの認証を実現しており、興味をもたれた方は、自由に使っていただいて問題ありません。また、欲しい機能などがありましたら、意見頂けると中の人が喜びます。コメント大歓迎です!(自動公開にならないかもしれませんが、見つけ次第、公開します)
改良点は以下の通り
- デザインを調整
スタイルシートをつけてみました。 - 空文字列の送信を防止
何も入力していない状態での送信をJavaScriptで防止しました。 - URLのリンク
TL内のURLに自動リンクするようにしました。 - @ユーザIDのリンク
@の後ろに英数字が続く場合は、そのユーザにリンクするようにしました。 - BadValueエラーの処理
同一メッセージを2回連続で発言した際に発生していたBadValueエラーを隠しました。
スクリーンショット
スクリーンショットです。このスクリーンショットに映っているユーザは全員公開モードになっていたので、内容は伏せていません。
ソースコード
簡易Twitterクライアント作ってみた。GAE/Python
2月 7th, 2011 by admin昨夜、OAuthでの認証がうまくいったので、今日はTwitterのTLの取得と発言を実装してみた。 お試し環境 → http://nisetwitter.appspot.com/で公開している。 エラ.... Read more