Python 2.5サポート終了

Python 2.5のサポートが終了するとの事。2017年5月16日に無効になるとの事。

https://cloud.google.com/appengine/docs/deprecations/python25

手順を踏めば、6月20日まで延命できるらしいが、Google App Engineは無料で使える時間もかなり限られてしまったので、もう延命処置も2.7への移行ももしない。
なので、実験的に立ち上げた以下のサイトは利用できなくなる。

http://2ndindex.appspot.com/
http://2ndfoto.appspot.com/
http://2ndpen.appspot.com/
スポンサーサイト

はてなブックマークに追加 はてなブックマーク - Python 2.5サポート終了

GAEの無料枠では実用的なサイト運用は難しい

コリスの記事「ウェブ制作者の困ったを解決するコードが盛りだくさん、スニペットを共有するサービス -Code Pad」
http://coliss.com/articles/build-websites/operation/work/share-code-snippets-codepad.html
に、コメントで、私の個人的なスニペット集サイトの紹介を投稿したら、そのスニペット集(あえてここにはURLを記載しない)がパンクしてしまった。

スニペット集は、GAE(Google App Engine)サーバー上にPython+App Engine Datastore(データストア)で構築していますが、Datastore Small Operationsの数値があっという間に上がってします。

無料枠のリソースを消費してしまうと、「このウェブページにはリダイレクト ループが含まれています」というエラーが出てアクセスできなくなります。1日単位ではリセットされますので、その時点では使えるようになりますが。

App Engine Datastoreでは、全文検索が難しいので、全件取得して正規表現で検索しているのも原因かとも思いますが、GAEの無料枠では実用的なサイトの運用は難しそうです。

gae2.jpg

はてなブックマークに追加 はてなブックマーク - GAEの無料枠では実用的なサイト運用は難しい

theme : システム開発
genre : コンピュータ

GAE:Datastore Read Operationsを減らす

Google App Engineを使ったスマートフォンでNHKゴガクルの英語フレーズの学習ができるサイト「2nd英語」
http://eigo.ok2nd.biz/m
で、データストアの「Datastore Small Operations」を減らすため、.order('date')のソートを止めたが、実アクセスであまり効果が出ていない。
「Datastore Read Operations」も含めて、データストア操作を減らすために、カテゴリ別の約200の英語フレーズをまとめてタブ・セパレート形式の1データにして、TextProperty()に格納するよう変更した。これで、Datastore Operationsがかなり減るはず(?)。
ついでに、PC用の英語フレーズ一覧&検索機能も廃止し、スマートフォン専用サイトとしました。

はてなブックマークに追加 はてなブックマーク - GAE:Datastore Read Operationsを減らす

theme : システム開発
genre : コンピュータ

GAEのDatastore Small Operations

Google App Engineを使って、スマートフォンでNHKゴガクルの英語フレーズの学習ができるサイト「2nd英語」を作成したが、
http://eigo.ok2nd.biz/m
データストアの「Datastore Small Operations」の数値があっという間に上がってします。
「Datastore Read Operations」の約3倍です。
「2nd英語」では、カテゴリ別に約200の英語フレーズを全件読みとってクライアントサイドに渡しているので、「Datastore Read Operations」の数値が上がるのは仕方ないとして、それ以上に「Datastore Small Operations」の数値が上がるのは納得できない。
そこで、.order('date')でソートしていたのを止めたら、「Datastore Small Operations」が「Datastore Read Operations」の数値よりも下がりました。
※ 2011/12/28追記 ↓
.order('date')を止めたらDatastore Small Operationsが下がるというのは勘違いだったかも?
http://ok2nd.blog87.fc2.com/blog-entry-315.html

はてなブックマークに追加 はてなブックマーク - GAEのDatastore Small Operations

theme : システム開発
genre : コンピュータ

Google App Engineで全文検索

Google App Engineで全文検索のテストサイトを作成してみました。

≪全文検索 on Google App Engine≫
http://2ndmytest.appspot.com/zenbunn

ブログ「星屑日記」でGoogle App Engine用の全文検索のPythonソースを公開されていたので、これを使いました。
コアな部分のロジックは、数十行しかない非常にシンプルなものです。N-gramなど、ロジックの詳細は理解できていませんが、完璧に動作しているように思えます。素晴らしい!!!。ドロップさん、ありがとうございます。

≪星屑日記:Google App Engineで全文検索≫
http://d.hatena.ne.jp/intheflight/20100107/p1
http://d.hatena.ne.jp/intheflight/20100113/p1

残念なのは1文字の検索ができないことです。英文では必要ないと思いますが、日本語では1文字の検索は欲しい。

どの程度のデータ量まで、実用レベルのレスポンスで返ってくるのかは分かりませんが、全文検索がこんなにシンプルに実現できることに驚きです。

星屑日記のドロップさんが、「作りながら思ったことは、小さい全文検索システムなら正規表現で探したほうが速いんじゃないか」と書かれていたので、このN-gramの全文検索と、データストアからText.all()で全件取得して正規表現でre.search()する方式を選択できるようにしてみました。100件程度のデータからの検索で試した限りでは、単純に正規表現で検索する方が速い場合が多いようです。ちょっと、残念。

英単語は小文字・大文字区別なく、検索できた方が嬉しいので、一部修正して使っています。と言っても、インデックスと検索文字列にそれぞれtext.lower()を追加しているだけです。

検索結果は登録最新順に並び替えるようにしています。N-gramの場合、検索結果をリストにした上で、.sort(key=operator.attrgetter('created'), reverse=True)を実行しているだけです。処理時間には並び替え時間も含んでいます。

現在、新規の文章追加は出来なくしてあります。

はてなブックマークに追加 はてなブックマーク - Google App Engineで全文検索

theme : システム開発
genre : コンピュータ

Google App Engine:Webブラウザで縦書き表示

Google App Engine上に、Webブラウザ上でテキストを縦書き表示できるページを作成しました。
http://2ndindex.appspot.com/tategaki-set

テキストまたはURLを入力すると、縦書き表示します。URL指定では、複雑な構造のホームページでは、きれいに表示できません。

青空文庫などのシンプルな文章のみのページではきれいに表示できます。
http://www.aozora.gr.jp/cards/000879/files/42_15228.html

ChromeとIEで縦書き表示できます。ChromeとIEでは使用してるCSSが違います。IEはバージョンにより表示が違ってしまいます。IE9がとくに問題ありかもしれません。

Chrome、IEとも印刷はきちんとできません。Chromeでは、フォントが横になってしまいます。IE7,IE8あたりでは正しく印刷できる可能性がありますが、確認していません。

【2011/9/5追記】
Chromeの印刷不具合は解消方法がみつかりました。
http://ok2nd.blog87.fc2.com/blog-entry-294.html


gae-tategaki.jpg

はてなブックマークに追加 はてなブックマーク - Google App Engine:Webブラウザで縦書き表示

theme : CSSレイアウト
genre : コンピュータ

jSnowで、メッセージカード作成

javascript「jSnow」を使った文字を雪のように降らせるサイト「2nd jSnow」で、メッセージカードを作成できるようにしました。

≪2nd jSnow≫
http://2ndjsnow.appspot.com/

≪メッセージカード・サンプル≫
http://2ndjsnow.appspot.com/card/agpzfjJuZGpzbm93chILEgtDYXJkU3RvcmFnZRjqBww

はてなブックマークに追加 はてなブックマーク - jSnowで、メッセージカード作成

theme : JavaScript
genre : コンピュータ

Google App Engine:日本語ファイル名

Google App Engine備忘録。

Google App Engineでファイルアップロードのファイル名が日本語の場合の処理。

filename = db.BlobProperty()
とする方法もあるが、

filename = db.StringProperty(multiline=False)
としておいて、unicodeに変換して入れておく方が良いかも。

≪例≫
storefile = self.request.body_file.vars['uploadfile']
storageFile.filename = unicode(storefile.filename,'utf-8')

↓スニペット集
http://memo.ok2nd.biz/?cat=300&query=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%8C%E6%97%A5%E6%9C%AC%E8%AA%9E

はてなブックマークに追加 はてなブックマーク - Google App Engine:日本語ファイル名

theme : システム開発
genre : コンピュータ

Google App Engine:utf-8の文字列切り出し

Google App Engine備忘録。

Pythonではutf-8とUnicodeは別物らしい。
utf-8のままでは、文字単位で正しく文字列処理をしてくれない。Unicodeにすれば、正しく処理される。

utf-8の日本語文字列から、一部を取り出す場合、結構面倒。

≪例≫
utf8 = str.encode('utf-8')
html = '<td>'+utf8[:5]+'</td>'
では、asciiとしてバイト単位で取り出すため、文字化けする。

utf8 = str.encode('utf-8')
html = '<td>'+unicode(utf8,'utf-8')[:5].encode('utf-8')+'</td>'
みたいにするとうまくいく。まわりくどい。何か勘違いしているだけかも。

関数にして、次のようにして使ってみる。
html = '<td>'+utf8left(str,5)+'</td>'
def utf8left(str,length):
  str = unicode(str.encode('utf-8'),'utf-8')
  if len(str) <= length:
    return str.encode('utf-8')
  else: 
    return (str[:length]+'...').encode('utf-8')

はてなブックマークに追加 はてなブックマーク - Google App Engine:utf-8の文字列切り出し

theme : システム開発
genre : コンピュータ

Google App Engine:セッション管理

Google App Engineで作成したサイト
http://2ndpen.appspot.com/
http://2ndfoto.appspot.com/
のセッション管理を、
≪gaeutilities≫
http://gaeutilities.appspot.com/
から、
≪gae-sessions≫
https://github.com/dound/gae-sessions
に変更。

gaeutilitiesを使って数日間セッションを保持していると、数日後sessions.Session()でエラーになる。cookieが残っていて、memcacheが消えたりしているのかもと思うが、原因不明。この場合、ブラウザのCookieを全て消去しないと復旧できない。gae-sessionsに変更してしばらく様子を見ることにする。

gae-sessionsの使用方法は、以下のサイトが参考になりました。
≪ACC開発ブログ:GAEでセッションを使ってみた by gae-sessions≫
http://d.hatena.ne.jp/iacctech/20110612/1307899228

gaeutilitiesからgae-sessionsへの変更メモ書き。
1. gaesessions/__init__.pyをアプリケーションフォルダへコピー。
2. appengine_config.pyを作成。(cookie_keyを適当に変える)
3. Pythonソースの以下の箇所を変更。
from appengine_utilities import sessions
↓↓↓
from gaesessions import get_current_session

sessions.Session()
↓↓↓
get_current_session()

self.sess.delete()
↓↓↓
self.sess.terminate()

はてなブックマークに追加 はてなブックマーク - Google App Engine:セッション管理

theme : システム開発
genre : コンピュータ

プロフィール

ok.2nd

Author:ok.2nd
HomePage:
http://ok2nd.web.fc2.com/
Email: m.ok.2nd@gmail.com

最新記事
最新コメント
最新トラックバック
月別アーカイブ
FC2ブログランキング

FC2Blog Ranking

検索フォーム
カテゴリ
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
ユーザータグ