2011-11-20

開発用サーバー dev_appserver.py がデバッグログを出力しない

今まで home.py で logging.getLogger().setLevel(logging.DEBUG) とかやっていましたが、Python 2.7, webapp2, threadsafe: trueの環境に移行して、CGIモードではなくなって機能しなくなって困ったあげく、今さらながら解決策が分かりました。

開発用サーバー本体 dev_appserver.py のコマンドラインオプション一覧を見るとわかりますが、デフォルトがFalseとなっている '--debug' オプションを付けます。
これによりDEBUGレベルのログがちゃんと出るようになるので、app.yamlで制御されるディスパッチャの動作や、urlfetchの詳細なパラメータが出るようになるのでとても便利です。

Google App Engine Launcherを使っている場合は、プロジェクトごとのApplication SettingsでLaunch Settings, Extra Command Line Flagsに--debugを加えます。

2011-11-19

Accessing Spreadsheets API with OAuth2 + app_identity.get_access_token()

import pprint
import webapp2
import gdata.client
import gdata.gauth
import gdata.spreadsheets.client
from google.appengine.api import app_identity

pp = pprint.PrettyPrinter()

class GetWorksheetsHandler(webapp2.RequestHandler):
    def get(self):
        spreadsheet_key = self.request.get('key') or '0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        scope = 'https://spreadsheets.google.com/feeds/'
        access_token, _ = app_identity.get_access_token(scope)

        oauth2token = gdata.gauth.OAuth2Token(
            client_id='',
            client_secret='',
            scope=scope,
            access_token=access_token,
            user_agent='your_application_name'
        )

        client = gdata.spreadsheets.client.SpreadsheetsClient()
        client = oauth2token.authorize(client)

        try:
            list = client.get_worksheets(spreadsheet_key=spreadsheet_key)
            self.response.out.write(str(list))

        except gdata.client.RequestError, msg:
            logging.debug(pp.pformat(msg))

application = webapp2.WSGIApplication([
    ('/get_worksheets', GetWorksheetsHandler),
], debug=True)

You need to copy
gdata-python-client's src/{gdata,atom} directories into your AppEngine project directory.

The client acts as the user 'APP_ID@appspot.gserviceaccount.com'. When you invite it as your collaborators, the application can modify your spreadsheet.

References
Getting started with python GData spreadsheets + OAuth2
Python gdata.spreadsheets.client get_worksheets
Google App Engine > App Identity Python API Overview

2011-11-15

[windows] Java Plug-In SSV Helper を削除するには

アンインストール後もIEのアドオンの管理にずっと残る迷惑なブラウザヘルパオブジェクトを削除するには、Sysinternals の大変すばらしいソフト Autoruns を使って、Internet Explorer タブの Browser Helper Object 項目内のエントリを削除します。

Java Plugin は、この他にも品質に疑問を感じる点 (javacpl.exe が管理者権限を要求せず設定が変更できないバグが1.6 update 29, 1.7 update 1 でも延々と放置されているなど) が見受けられるので、不要なマシン (Java での開発をしないマシン) からはアンインストールすることを強くお勧めします。

プラグインが存在しなければそもそも攻撃のしようがなく、うざったいアップデートに付き合わなくて済むので時間を節約でき、未知の脆弱性におびえる必要がなくなります。

参考
エフセキュアブログ : 有害とみなされるJava

2011-11-06

Canvasで三角関数を使わずに何とかする方法

JavaScriptでHTML5 Canvasを使っていて、円周上に点を書いてみたり、任意の角度で線を引きたい場合など、三角関数によってr, θからx, y座標を求めたくなる状況があると思います。

APIをよく見ると、三角関数は使わなくても、平行移動(translate), 回転(rotate)の座標変換を行えば、先のほとんどの状況で何とかなり、コードが大変すっきりします。

座標変換なんて事をすると元の座標系に戻れないんじゃないかと大変不安になられるかと思いますが、いったん状態をsaveした後、restoreすることで戻すことができるので気兼ねなくやってよいです。

参考
MDN - Canvas チュートリアル > 変形
HTML5 Clock - この時計アプリは三角関数を使用していません。

2011-11-03

Yahoo!おすすめ情報メールを一括解除するには

登録情報よりリンクされているこのページ
Yahoo! JAPAN からのおすすめ情報メール
から一括解除ができます。

注意
新しいサービスについて自動的に配信する設定になります。
配信されてくるメールからリンクされているページからは、そのメールでおすすめされるサービスの設定のみ変更できるので、一括解除は出来ません。