‘python’ カテゴリーのアーカイブ
2012年2月2日 木曜日
Javascriptでデータ送る際にデータを暗号化したいなという事で、そうだRSAを使おうと思ったのですが、RSAについて、sshの鍵作る時に出てくる単語で暗号方式?位の理解しかなかったので少し調べてみました。
(続きを読む…)
タグ:RSA
カテゴリー: python, 技術 | コメントはまだありません »
2011年10月13日 木曜日
先ほどの記事にも書いたようにAppStatsは、Kay frameworkで途中まで書いたコードをDjangoに移植したんですが、その際にテンプレートエンジンの差異に少し戸惑いました。
Kayで採用されているjinja2はDjangoの標準テンプレートに良く似せて作られていて、Djangoを触った事があれば違和感無く使い始められます。ところがDjangoでイマイチな部分が解消されていて、一度jinja2を使ってしまうとDjangoに戻ってきた時にイライラしてしまうという問題が生じます。jinja2の何が良いかというと、例えばdjangoのドット記法はヤダとか、テンプレート中で関数呼び出しを見慣れている形で記述できるとか、デフォで{% macro %}が使える等などです。
正直macroなんかは一回使ったらもう同等機能がないテンプレートシステムなんて使えないです。という訳でDjangoでもjinja2を使いたいということで、調べた方法を記録しておきます。
(続きを読む…)
タグ:django, jinja2, python
カテゴリー: programming, python | コメントはまだありません »
2011年6月2日 木曜日
最近GAE上で書いていたサイトが、ちょっとGAEには向かないという事がわかりまして、仕方が無いので、普通のサーバ上で書き直す事にしました。巷ではapache + mod_pythonはもう古いらしく、じゃあ何が良いのと思って色々調べていると、このベンチマークエントリが見つかりまして、その中で良さそうだったuwsgiを使う事にしました。HTTPサーバは上記エントリで使われてたnginxです。ずっと気になっていたのでこの機会に触ってみました。なお環境はCentOS 5.5です。
思ったよりも長い記事になってしまいました。以下の手順を踏みます。
- Pythonのインストール
- virtualenvやDjangoのインストールとテストプロジェクト作成
- uwsgiのインストール
- nginxのインストール・設定・動作確認
- Djangoのadminアプリを動かす(おまけ)
(続きを読む…)
タグ:nginx, uwsgi
カテゴリー: linux, python | コメントはまだありません »
2010年10月3日 日曜日
しばらくベンチマークコードを書いてなくてすっかり忘れていたので、メモ書きです。今回は例題として、yahooのこのページをBeautifulSoupとlxmlでのスクレイピング比較をしてみる事にしました。比較対象の関数は以下の通りです。どちらのコードも入力・出力ともに同じなので、どちらが実行時間やメモリ使用量が少ないのかを知りたくなりますね。
# BeautifulSoup
def scrape_with_bs(html):
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
rows = soup.find('table', attrs={'class':'channel9'}).findAll('tr')
channels = rows[0].findAll('td', attrs={'class':'station'})
programs = rows[1].findAll('td', attrs={'class':'turnup'})
res = []
for ch, prog in zip(channels, programs):
res.append((ch.find('span').string, ch.find('a').string, prog.find('a').string))
return res
# lxml
def scrape_with_lxml(html):
import lxml.html
root = lxml.html.fromstring(html.decode('utf-8'))
rows = root.xpath('//table[@class="channel9"]/tr')
channels = rows[0].xpath('td[@class="station"]')
programs = rows[1].xpath('td[@class="turnup"]')
res = []
for ch, prog in zip(channels, programs):
res.append((ch.xpath('span/text()')[0], \
ch.xpath('descendant::a/text()')[0], \
prog.xpath('descendant::a/text()')[0]) )
return res
ちなみに上記の関数から得られる配列をprettyprintすると、以下の様な出力が得られます。各チャンネルごとに、今放送中の番組を取得しています。
[
[
"アナログ1ch",
"NHK総合",
"ニュース"
],
[
"アナログ3ch",
"NHK教育",
"ハーバード白熱教室@東京大学「イチローの年俸は..."
],
[
"アナログ4ch",
"日本テレビ",
"真相報道 バンキシャ!"
],
[
"アナログ6ch",
"TBS",
"THE世界遺産「皇帝たちの地下宮殿」〜..."
],
[
"アナログ8ch",
"フジテレビ",
"笑顔がごちそう ウチゴハン"
],
[
"アナログ10ch",
"テレビ朝日",
"ドライブ A GO!GO!「群馬格安温..."
],
[
"アナログ12ch",
"テレビ東京",
"TOKYO ..."
],
[
"アナログ14ch",
"TOKYO MX",
"芸術史と芸術理論( 10)第1回◇放送..."
]
]
(続きを読む…)
タグ:beautifulsoup, benchmarker, guppy, lxml, python
カテゴリー: programming, python | コメントはまだありません »