前の月 / 次の月 / 最新

hiChangeLog / 2008-09

2008-09
SMTWTFS
123456
78910111213
14151617181920
21222324252627
282930

2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12

2008-09-08 Mon

macとunixのepochの違い [その他]

世のOSは(たぶん)epochを起点として日付を解釈する。このepochがmacとunixで異なる。
mac: 1904 1/1
unix: 1970 1/1
なんで、「epochからの秒数」を、mac的からunix的に変換するには、その間の秒数を減ずればよい。
その値は 2082844800 のようである。

http://support.microsoft.com/kb/149471/ja
http://help.support.fcm.co.jp/__Help/FOV1-0001235F/FOV1-00012360/A403
http://www.velocityreviews.com/forums/t437794-getting-a-string-date-from-a-number-of-seconds-from01011904.html
http://search.cpan.org/src/CNANDOR/Mac-Carbon-0.77/Carbon.h

SimpleHTTPRequestHandlerによるHTTPサーバの応答がsocket.getfqdnのせいで遅かった [python]

Windowsマシンで構成されたプライベートLANでpythonによるHTTPサーバを使おうとし、自PCからのアクセスには全く問題無かったが、他PCからの応答に対し5秒程度の遅延がある、という状況に出くわした。取得データに問題はなかったが、5秒もの長い間待つのは不便極まりないので、原因を調べた。

原因はSimpleHTTPRequestHandler.address_string中のsocket.getfqdnで、こいつの実行に5秒近くかかっていた。ここではログに記録するためのホスト名を取得しようとしている。アクセス元Windowsの「コンピュータ名」が結局記録されていたが、そんなもんは私の用途では全く重要ではない。なのでSimpleHTTPRequestHandlerを継承したクラスで以下のようにオーバーライドすることで解決した(IPアドレスだけ記録する)。

def address_string(self):
    host, port = self.client_address[:2]
    #return socket.getfqdn(host) # original
    return host

勿論、空文字だけを返してもOKだと思う。

2008-09-07 Sun

ResEditのプロパティウィンドウでThinkPadの中ボタンでスクロールするとエディットコントロールにフォーカスが移らない [その他]

ResEdit 1.4.3 のANSIビルドで妙な体験をしたのでメモしておく。
ThinkPad X61 tablet, Windows XP (Tablet Edition) SP3

ウィンドウキャプションやIDを変える際、プロパティウィンドウで該当箇所のエディットコントロールにフォーカスを移し、キーボード入力を行う。だけどたまに、それができなくなることがあった。具体的には、エディットコントロール上にマウスを持っていっても、マウスカーソルが入力用のもの("I"っぽいやつ)にならず、クリックしてもコントロール内にカーソルが行かない。当然、キーボード入力もできず、値も変えられず、困っていた。ResEditを再起動すると直るし、ごく稀に、プロパティをぐちゃぐちゃいじった後に症状が回復することもあったし、他のWindows2000マシンでは振舞が再現しないなど、発現と回復の条件がさっぱり解らず、途方にくれていた。

ぐちゃぐちゃやった結果、以下が判明した。
(1) ThinkPadの中ボタンによるスクロールを行うと症状が発現する
(2) 左ボタンでスクロールバーをクリック(バー自信でも、上下矢印でも)すると、症状が回復する

対処法がわかったので良しとするが、なぜこうなるのかは検討もつかない。
Windows XP Tablet Edition(もしくはエディットコントロール)のせい?ThinkPad(のマウスドライバ)のせい?ResEditのせい?
まったくわからん。

2008-09-06 Sat

COMクライアントで利用する定数(やメソッド)を知るためにmakepy.pyを使ってStaticDispatch用モジュールを作成する [PyWin32]

pywin32のwin32comでCOMクライアントを作成する際必要となる定数やメソッドをどう取得するか?
makepy.pyによってStaticDispatch用モジュールを作成すれば良い。
タイプライブラリ名が判っている場合は以下でOK。C:\Python25\Lib\site-packages\win32com\gen_py 中に作成されたモジュール(ファイル)中に記載されている。

C:\Python25\Lib\site-packages\win32com\client>python makepy.py "Igor Pro 6.0 Type Library"
DLLや実行ファイルを以下のように直接指定してもOK。
C:\Python25\Lib\site-packages\win32com\client>python makepy.py typelib, "C:\Program Files\hoge\fuga.exe"

タイプライブラリ名は C:\Python25\Lib\site-packages\win32com\client\combrowse.py を起動して、出てくるウィンドウの中から見つけられる。上記makepy.pyを直接起動しても探す用インターフェースが出てくるそうだが、私の環境では引数なしのmakepy.pyは起動できなかった。これは、Adobe Illustrator CSをインストールしていたため。バージョンが数値でなく'CS'となっているので、makepy.py的になんじゃこりゃとなってしまう模様(勿論、makepy.pyの修正によって回避できる)。

VisualStudio + VB だと、こんな手間は不要なばかりか補完まで行ってくれるのが羨しい。

ipythonの起動時のディレクトリを指定する [python]

バッチファイルを用意するのが簡単。

@echo off
cd %1
ipython
これをipythonstartup.batとかにしておいて下記でOK。
ipythonstartup (ディレクトリ)
参考(参考ってほどでもないけれど) http://lists.ipython.scipy.org/pipermail/ipython-user/2007-October/004744.html

2008-09-05 Fri

実行している自分自身のスクリプトの絶対パスを知る [python]

print os.path.abspath(os.path.dirname(__file__))
ref. 134:実行しているスクリプトのパスを求める

2008-09-04 Thu

UnixUtilsによって、UNIXでお馴染のコマンドをWindowsに一挙に導入できそう [Windows][コマンド]

dd,diff,du,grep,find,md5sumとかの定番UNIXコマンドの(cygwinではない)Windows移植版は各地で作成されている。でも1ケずつ導入するのは面倒だし、いざ使おうとなった段に「ああ、これは入れるの忘れてた」とかなると尋常じゃなくストレスが溜まる。
でもUnixUtilsには、usr/local/wbin に定番のコマンドがたんまり入っているので、上記の悩みからは解放されそうだ。全部はチェックしてないが、とりあえずmd5sumは動いた。

matplotlibがpythonのグラフ作成ツールとして良さそうだ [python]

pythonでグラフを作成したい時、matplotlibが強力で便利そうだ。
windowsのインストーラでインストールした後に、以下を実行したらそれっぽいのが出てきた。

import pylab
x = range(0,10)
y = range(10,20)
pylab.plot(x,y)
pylab.savefig('C:\\temp\\hoge.png')
とても良さそうだ。

2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2010-03-08 22:21