2014年9月8日月曜日

Djangoのフォーム


Djangoで同じモデルからModelFormとAdminでCreate画面を作成。

ModelForm

Admin

2014年6月7日土曜日

minichatをpyramidに対応させるための変更点


サーバーをwsgirefからgeventに変更

development.ini

[server:main]でegg:pyramid#wsgirefをegg:minichat#server_factoryに書き換える。


setup.py

requiresにgeventを追加
entrypointに[paste.server_factory]とminichat:server_factoryを追加


__init__.py

server_factory関数を追加


FlaskからPyramidに変更

__init__.py

ルーティングを追加


views.py

@app.routeを@view_configに変更
ここで使用するテンプレートも指定する

view関数の引数をrequestだけにする

matchdictからrouteで指定した変数を取得する

戻り値をテンプレートに渡すdictに変更する

その他の変更点

pcreateを使用したのでその時に作成されたとラバー猿関係の処理も削除しています。

2014年6月6日金曜日

geventのサンプルminichatをpyramidで書いてみた

GeventのチュートリアルにあったFlaskで書かれたminichatをpyramidで書きなおしてみた。

やってみてわかったのはFlaskと比べて、ルーティングとビューの割り当てがわかれていることやルートパターンから変数を取り出すのに、flaskだとそのまま関数の引数になるが、Pyramidだとmatchdictから変数をとり出さないといけず、どうしてもコード量が増える。

minichatのリポジトリ https://bitbucket.org/witten/minichat/

2014年4月4日金曜日

aiohttpを使ってダウンロードする

aiohttpライブラリを使って複数のサイトを並列ダウンロードする。

import asyncio
import aiohttp

@asyncio.coroutine
def download(url):
    response = yield from aiohttp.request('GET', url)
    return (yield from response.read_and_close())

urls = ['http://www.yahoo.co.jp', 'http://www.google.co.jp']
loop = asyncio.get_event_loop()
f = asyncio.wait([download(u) for u in urls])
r = loop.run_until_complete(f)
for i in r[0]:
    print(i.result())

asyncio.waitは複数のコルーチンを1つのFutureにまとめる
asyncio.waitの戻り値は(done, pendding)のタプル
future.doneがTrueの場合はdoneにfutureが格納される。
run_until_completeは引数futureの戻り値(future.result())
なのでr[0]には処理が完了したfutureが格納されており、そのリストのなかのfutureの結果にdownload関数の戻り値が格納されている

2014年3月3日月曜日

Check IO Open Labyrinth

Open Labyrinth

1=壁、0=通路の二次元配列で表された迷路をスタート(1,1)からゴール(10,10)まで移動経路を返す問題。

スタートが迷路の端なので右手法や左手法でもクリアできる。

Check IO roman-numerals

roman-numerals

アラビア数字をローマ数字に置き換える問題。
例えば  10 → Xのようにする。

1桁ずつ変換していけばいいので簡単にできる。

2014年2月26日水曜日

Check IO Xs and Os Referee

Xs and Os Referee
○×ゲームの勝敗を返す。縦と横3列と斜め1列づつをすべて調べれば簡単にできる。
どうやって調べるかが重要になると思う。