‘python’ カテゴリーのアーカイブ

[RSAの勉強日記2] Javascriptで暗号化してPythonで復号したい

2012年2月4日 土曜日

先日、RSAについて解った気になったと書いたんですけど、実際はあんまり解ってなかったので補足等。やりたいのはクライアントで暗号化した情報をサーバで受けて復号したいという事ですね。

  1. 鍵の生成をサーバで行って公開鍵をJSのコードに埋める
  2. JS側で公開鍵を使って暗号化したデータをサーバに送る
  3. サーバで受け取ったデータをPythonで復号

単純な話なはずだったんですけど、上手く行かずにハマりました。

結論から書くと、PyCryptoモジュールがPKCS#1で規定されているのパディング/アンパディングに対応してなかったので自前でアンパディング処理を追加したら上手く行ったという事ですが、学習をかねてもう少し詳しく書いておきます。

(続きを読む…)

RSAの勉強日記

2012年2月2日 木曜日

Javascriptでデータ送る際にデータを暗号化したいなという事で、そうだRSAを使おうと思ったのですが、RSAについて、sshの鍵作る時に出てくる単語で暗号方式?位の理解しかなかったので少し調べてみました。

(続きを読む…)

Pythonで合同式の逆元を求める

2012年2月1日 水曜日

RSAをおさらいしていたら、合同式の逆元を求める必要がありました。合同式の逆元は拡張ユークリッドの互除法を使うと求められるのですが、逆元を求める際にどう拡張ユークリッドの互除法を使えば良いのか解らなくて、手間取ったのでメモしておきます。コードはPythonです。

一応解きたい式を書いておくと以下になります。
\mathfrak{a}x \equiv 1\ \pmod{\mathfrak{m}}

(続きを読む…)

django.utils.functionalを読んだメモ

2011年12月21日 水曜日

django関連のコードを読んでいて、django.utils.functionalというモジュールが目につきました。中を見るとカリー化や遅延評価など聞いたは事あるものの、いまいちピンとこなかったので、調べた事のメモ書きを残しておきます。

(続きを読む…)

DjangoでJinja2を使いたいという話

2011年10月13日 木曜日

先ほどの記事にも書いたようにAppStatsは、Kay frameworkで途中まで書いたコードをDjangoに移植したんですが、その際にテンプレートエンジンの差異に少し戸惑いました。

Kayで採用されているjinja2はDjangoの標準テンプレートに良く似せて作られていて、Djangoを触った事があれば違和感無く使い始められます。ところがDjangoでイマイチな部分が解消されていて、一度jinja2を使ってしまうとDjangoに戻ってきた時にイライラしてしまうという問題が生じます。jinja2の何が良いかというと、例えばdjangoのドット記法はヤダとか、テンプレート中で関数呼び出しを見慣れている形で記述できるとか、デフォで{% macro %}が使える等などです。

正直macroなんかは一回使ったらもう同等機能がないテンプレートシステムなんて使えないです。という訳でDjangoでもjinja2を使いたいということで、調べた方法を記録しておきます。

(続きを読む…)

iPhoneアプリのランキングサイト書いた

2011年10月12日 水曜日

iPhoneとかiPadとかのCMで40万以上のアプリが使えるとか言われてるわけですが、数あるアプリから目当てのもの探すのは正直大変です。そこでユーザのレーティングをもとにiPhoneアプリをランク付けするサイトを書きました。名前はApp Statsです。

アクセスはココから。

AppStats Top Page

(続きを読む…)

CentOSでnginx + uwsgi + Djangoを試してみた

2011年6月2日 木曜日

最近GAE上で書いていたサイトが、ちょっとGAEには向かないという事がわかりまして、仕方が無いので、普通のサーバ上で書き直す事にしました。巷ではapache + mod_pythonはもう古いらしく、じゃあ何が良いのと思って色々調べていると、このベンチマークエントリが見つかりまして、その中で良さそうだったuwsgiを使う事にしました。HTTPサーバは上記エントリで使われてたnginxです。ずっと気になっていたのでこの機会に触ってみました。なお環境はCentOS 5.5です。

思ったよりも長い記事になってしまいました。以下の手順を踏みます。

  1. Pythonのインストール
  2. virtualenvやDjangoのインストールとテストプロジェクト作成
  3. uwsgiのインストール
  4. nginxのインストール・設定・動作確認
  5. Djangoのadminアプリを動かす(おまけ)

(続きを読む…)

PythonでMovableTypeのXML-RPCインターフェースを叩く

2010年11月26日 金曜日

MovableTypeにはXML-RPCインターフェースが準備されているので、外部から新しい記事を投稿したり過去の記事を取得したりできます。MT自体のリファレンスを探せなかったので、コチラのページを参考にさせて頂きました。

(続きを読む…)

Hello Cython World

2010年10月24日 日曜日

lxmlのソースを読もうとしたらcythonというPythonの拡張を書くためのPythonとCの間の子みたいな言語で書かれているという事で、全く知らないままだとlxmlのソースに挑む気が起こらなかったので少し調べてみました。まぁ調べてみたといってもcythonのドキュメントの最初に書かれているGetting Startedを舐めただけなんですけども。

(続きを読む…)

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回◇放送..."
    ]
]

(続きを読む…)