ドライブの関連付けでは引数に注意
ドライブの右クリック メニューに以下のような項目を作ったら、うまく動かなかった。
キー名 | 値の名前 | 値の種類 | 値のデータ |
---|---|---|---|
HKEY_CLASSES_ROOT\Drive\shell\foo\command | (既定) | REG_SZ | foo.exe "%V" |
例えばCドライブを右クリックして foo を選ぶと、コマンドラインはこうなる。
foo.exe "c:\"
すると main() 関数の仮引数はこうなる。
引数の番号 | 引数の値 |
---|---|
argv[0] | foo.exe |
argv[1] | c:" |
\ の次にある文字がエスケープされて、パスが壊れちゃってるよ。 CommandLineToArgvW() を使ってもまっく同じ結果。
ドライブの関連付けでは、" で囲まない方がいいかもしれない。
フォルダにドライブをマウントした場合、パスにスペースが含まれる可能性があるが、実際にやってみるとフォルダの関連付けが使われるようなので問題ない(いや、それはそれで別の問題があるか?)。
パフォーマンス モニターの警告でプログラムを実行させたいが
Windows XP Professionalのパフォーマンス モニターで警告がトリガされたらプログラムを実行するようにしたが、どうも実行されている気配がない。
http://q.hatena.ne.jp/1155037867 を参考にSysmonLog(Performance Logs and Alerts)サービスのアカウントを変えてみたが変化なし。なのでアカウントは「NT AUTHORITY\NetworkService」に戻しておく(スペルが間違ってるよね)。
あちこち調べたり、いろいろ弄ったりしたが、どうしてもプログラムが起動してくれない。
ふと「コマンド ラインの引数(C)...」で「引数の文字(S)」にチェックを入れてみると、ちゃんと実行されるようになった。何だこれは? 調べてみたが、XPはあまりヘルプが充実していないので理由はわからなかった。
余談だが、パフォーマンス モニターでは実行するプログラムの引数を好きに弄ることができないので、複雑な引数のプログラムはバッチファイル経由で実行したほうがいいと思う。
HTTPのHEADリクエストを送信する
ウェブページの最終更新日だけを知りたいのでHEADメソッドを送信する。
# Python 3.1 import http.client import sys import socket conn = http.client.HTTPConnection('www.example.com') try: conn.request('HEAD', '/') res = conn.getresponse() except (http.client.HTTPException, socket.error) as err: print('エラー:', err, file=sys.stderr) sys.exit(1) finally: conn.close() print('ステータス・コード:', res.status, res.reason) print('最終更新日:', res.getheader('Last-Modified', 'なし'))
HTTP以外の部分でエラーになるとsocket.errorが発生するのがちょっとなあ。
Python3からhttplibがhttp.clientになったわけだが、名前の長さが微妙で、別名にするか一部を切り取るか、あるいはそのままにするか迷うな。
追跡お断りをお断り
Firefoxのアドオンをいじっていたら
X-Behavioral-Ad-Opt-Out: 1 X-Do-Not-Track: 1
という項目がリクエストヘッダに付いていることに気が付いた。何だこれは?
検索してみるとどうもNoScriptが付けてるみたいだな。これを付けると個人を追跡されなくなるんだと。他にもAdblock Plusで同様な設定ができるようだ。
ググっても英語の文章しか出てこないようなヘッダを付けても日本では意味がないと思ったので無効にしておいた。方法はabout:configでnoscript.doNotTrack.enabledをfalseにするだけ。
総乗の計算が1行でできる
Pythonに総和を計算する関数はあるが、総乗を計算する関数はないので自作する。
# Python 3.1 import functools import operator Π = functools.partial(functools.reduce, operator.mul) print(Π([3, 5, 7, 11])) # 1155 print(Π([3, 5, 7, 11, 13])) # 15015
Python2ではビルトイン関数だったreduce()がモジュール関数に降格してて吹いた。いまいち使いにくい関数だったのでしょうがないか。
operator.mulをoperator.addに置き換えると総和になる。つまりsum()ね。こんな感じで、Pythonがグルー言語であることを最近実感している。
「サインアウトできませんでした」
FirefoxでWindos Live系のサービス(HotmailやSkyDriveとか)からログアウトしようとするとエラーになる。
サインアウトできませんでした
お使いのブラウザーによって Cookie がブロックされているため、
サインアウトできませんでした。
サインアウトするには、
ブラウザーのすべてのウィンドウを閉じてください。
この問題が再発しないようにするには、
お使いのブラウザーで Cookie を許可するように設定を変更してください。
方法が不明な場合は、ブラウザーのヘルプを参照してください。
サードパーティCookieを許可するとログアウトできるようになるのだが、できればそれはしたくない。
Live HTTP headers *1 で通信内容を見ると
http://loginnet.passport.com/ThirdPartyCookieCheck.srf?ct=xxx
のようなURLにアクセスしてる。そこで、Cookieフィルタに「passport.com:現在のセッションのみ」を追加すると、正常にログアウトできるようになった。
ちなみに、クッキーを削除しないように設定しているのなら、「現在のセッションのみ」ではなく、「許可」を選択した方がいいかもしれない。