投稿者「たなか」のアーカイブ

PythonでHMAC-SHA256を扱う

ちょいとHMAC-SHA256を使った簡単なお仕事があったので、Pythonでいじってみた。
HMACってなんじゃなホイという方はRFC2104へどうぞー。
Pythonには最初からHMAC取り扱えるようになっているのでラクチンですよ。

import hmac
import hashlib

secretkey = '秘密鍵'
message = 'メッセージ検証したいなにものか'

signature = hmac.new(secretkey, message, hashlib.sha256).hexdigest()

hmac.new()の第三引数がハッシュ関数なので、MD5にしたいならhashlib.md5とか指定すればよし。
詳しいところは、Pythonライブラリリファレンスのhmacの項を読んでね。

来年用の手帳を買った

f:id:calnarsa:20111003154811j:image:medium:leftまあタイトルそのまんまなのですけどね、来年用の手帳を買ってみた。能率手帳のポケットカジュアル1。
今年はほぼ日手帳WEEKSを使ってた。
スケジュール管理よりも簡易日記として使っていたので別に今年の手帳に不満はないけど、あえて来年用は別のものにしてみた。

f:id:calnarsa:20111003155104j:image:medium:left今年使っていた手帳とのツーショット。
比べると幅はほぼ一緒なんだね。どうもこのサイズが自分の好みのようです。

stoneでただのHTTPサーバをHTTPSサーバに大変身させてみた

すっかり間があいたけど気にすることはないよ、ただの気まぐれ。
で、ちょいとHTTPしか話せないサーバくんをどうしてもSSL化してHTTPS対応してるふりをさせなきゃいけなくなったので、stoneを使って実現させてみた。まあ、stoneなんて使うの10年ぶりくらい。
やりたいことは以下のとおり。

HTTPSで話したいクライアントくん <-- HTTPS --> localhost:8000(stone) <-- HTTP --> localhost:8080(HTTPしか話せないサーバくん)

ということで、早速stoneのインストールから。
Ubuntuなのでapt-get一発でいけた。

$ sudo apt-get install stone
$ stone -h
Oct  3 14:42:36.512085 140493228386080 stone 2.3e  http://www.gcd.org/sengoku/stone/
Oct  3 14:42:36.512301 140493228386080 Copyright(C)2007 by Hiroaki Sengoku <sengoku@gcd.org>
Oct  3 14:42:36.512313 140493228386080 using OpenSSL 0.9.8k 25 Mar 2009  http://www.openssl.org/
Usage: stone <opt>... <stone> [-- <stone>]...
opt:  -h opt            ; help for <opt> more
-h stone          ; help for <stone>
-h ssl            ; help for <SSL>, see -q/-z opt

うん、最新版の2.3eが入ったね。
では、やりたいことをやりましょう。

$ stone localhost:8080 8000/ssl

でちゃんとHTTPSでポート8000番叩いたら、あら不思議、HTTPしか話せないサーバくんがHTTPS話してるよ。stone恐るべし!
まあ、所詮オレオレ証明書なんで全然セキュアでないですが、今回はローカルで動けばいいのでオレオレでいいや。

どうでもいいけどstoneの作者の仙石浩明さん。今はKLabのCTOなんだ。すごいね、オレもがんばらなきゃ。

GoogleAppEngineでsimplejson使ってJSONでレスポンス返してみた

GoogleAppEngineで、クライアントにJSONでデータ返そうとして import json とかやったら使えなかった…orz
まあ当たり前で、GoogleAppEngineのPythonは2.5ベースなのでJSONサポートが組み込まれてないのですな。組み込まれるのは2.6以降だったね。すっかり2.6に慣れててすっかり忘れてたよ。
ということで代替案を考えたところ、GoogleAppEngineには最初からDjangoが入ってるからsimplejson使えるんじゃね、と思ってサンプルコード書いてみた。

# -*- coding: utf-8 -*-

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

from django.utils import simplejson

class MainPage(webapp.RequestHandler):
    def get(self):
        test_data = {
            "data1": u"日本語",
            "data2": "ascii",
            "data3": u"長い文字列を入れてみたいと思いましたが力尽きました。",
            "data4": u"テストデータ作るのもめんどくさいですね",
            "data5": {
                "subdata1": u"入れ子データ1",
                "subdata2": u"入れ子データ2",
                },
            }

        self.response.headers['Content-Type'] = 'application/json; charset=utf-8'
        self.response.out.write(simplejson.dumps(test_data,
                                                 ensure_ascii=False,
                                                 sort_keys=True))

application = webapp.WSGIApplication(
    [('/', MainPage)],
    debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

出力結果はこんな感じ。

{"data1": "日本語", "data2": "ascii", "data3": "長い文字列を入れてみたいと思いましたが力尽きました。", "data4": "テストデータ作るのもめんどくさいですね", "data5": {"subdata1": "入れ子データ1", "subdata2": "入れ子データ2"}}

見事にビンゴでしたとさ。

jQuery1.5が出たけどGoogle Library APIが対応してくれないのでなんとかしてみた

jQuery1.5リリースおめでとうございます。
ということで、早速1.5をいじってみようとしたら、Google Library APIがまだ1.5対応してなかったので代替策を調べてみた。

この2つが既に1.5に対応していた。詳細はhttp://docs.jquery.com/Downloading_jQuery#CDN_Hosted_jQueryあたりを見てくだされ。
とりあえず、jQuery謹製のCDNを使ってみることにした。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"></script>

え、自前で用意すればいいじゃんって? だってめんどいじゃん(ダメじゃん…)