20 七月, 2006
UTM, The Universal Transverse Mercator System
近来研究google map,不得已要接触这些Projection System。
好文:http://www.uwgb.edu/dutchs/FieldMethods/UTMSystem.htm
- 赤道上1度(经度)的距离mLE和某纬度lat([-90..90])上1经度的距离mLL之间的关系:
mLL = mLE * cos(radian of lat);
- 100公里双字母表示方法(100-killometers Digraphs):
美国军方(还有整个NATO)使用的表示方法,MGRS中间几位也是用的这种。以上海市(121.4666667E, 31.2333333N)为例,它的UTM数据是:Northing: 3456474, Easting: 353968, Zone: 51R;而不同精度的NATO表示如下:
UQ55(10公里)
UQ5356(1公里)
UQ539564(100米)
UQ53965647(10米)
UQ5396956474(1米)
转换的方法,查看上文中的“100-kilometer Digraphs”,“Determining Grid Coordinates”,“Appendix: The Digraph Lettering System”三个小节。
- google maps的zoom和scale
zoom pixelsPerLonDegree
==== ==================
0 93206.75555555556
1 46603.37777777778
2 23301.68888888889
3 11650.844444444445
4 5825.422222222222
5 2912.711111111111
6 1456.3555555555556
7 728.1777777777778
8 364.0888888888889
9 182.04444444444445
10 91.02222222222223
11 45.51111111111111
12 22.755555555555556
13 11.377777777777778
14 5.688888888888889
15 2.8444444444444446
16 1.4222222222222223
17 0.7111111111111111
放大到最大(zoom=0),在赤道上,Google Map上的一个pixel对应实际距离1.2米左右(111,000/93206.75555555556~=1.2,赤道上,每经度间距离约111公里)
如果你想让自己的地图和Google Map配套使用,那么以上的数据就非常有用。
17 七月, 2006
hosts file doesn't work, 罪魁祸首是MSN Messenger
今天被这个问题浪费了至少1个小时,很生气!这里记下来,希望后来者能节省点时间。
症状:
- ping(或者使用IE, FF访问)一个网址,hosts file不起作用,完全被ignored
- hosts文件的位置正确,entry语法正确,registry中对应的key值("HKEY_LOCAL_MACHINE/System/CurrentControl Set/Services/TCPIP/Parameters/DataBasePath")正确
- 关闭"dns client" service,并重启进入安全模式,依然无法ping通hosts file内的entry
奇怪现象:
- 在你hosts文件所在目录下(xp: %systemroot/system32/drivers/etc),除了hosts file以外,还有一个陌生的hosts.msn文件
直接原因:
- "HKEY_LOCAL_MACHINE/System/CurrentControl Set/Services/TCPIP/Parameters/DataBasePath"的值虽然正确(在xp机器上应该是"%Systemroot%/System32/drivers/etc",表示hosts file的实际路径),但是它的类型(REG_SZ)却是错误的。正确的类型是:REG_EXPAND_SZ,扩展字符串,可以以实际值替换环境变量%systemroot%。而REG_SZ类型的字串则必须指定实际路径,如"C:/windows/system32/drivers/etc"。
解决方法:
- rename (注册表key)DataBasePath
- 新建REG_EXPAND_SZ类型的值"DataBasePath"
- 将原"DataBasePath"值拷贝到新"DataBasePath"内
- 删除原"DataBasePath"
幕后凶手:
- 曾经使用过MSN Messenger 7.0/7.5的“Connection Troubleshooter”或者在安装这两个版本(7.5以上版本未做测试)的Messenger时选择了"automatic scanning and configuration of ports" option
作案过程:
- 保存hosts到新的hosts.msn文件
- 修改注册表值DataBasePath的类型,从可扩展字符串到普通字符串,结果系统无法查找带%号的路径,造成hosts文件失效
作案动机:
- 我不用这个hosts,大家也都别用
- 某些间谍程序和病毒再也没法使用这个hosts作恶了
- 让大家充分认识到注册表值的这两种字符串类型之间的微妙区别
- 一想到会有很多人为此焦头烂额,真开心
- Bill说...
感谢zafar:http://www.mcse.ms/archive62-2006-1-1880791.html
13 七月, 2006
刚刚看到这个消息:[刘翔]又破了世界纪录:12.88s
就在前几日温网郑洁晏紫女双夺冠,李娜单打进入前八
而世界杯刚结束,更加感叹为什么伟大的“中国”+美好的“足球”=“畸形”,唉
11 七月, 2006
终于可以休息(工作?)了。。。
中意的比赛:
- 阿根廷——塞黑:6:0,踢得好看
- 意大利——美国:1:1,美国人突然发飚,裁判三张红牌恰到好处的配合,让这场比赛充满生机
- 阿根廷——墨西哥:2:1,一快一慢,张驰有度。墨西哥速度之快出乎意料,掐边打中的战术也非常奏效,阿根廷赢得不容易。刺激
- 葡萄牙——荷兰:1:0,这场比赛没看直播,至今后悔不已。俄罗斯人伊万诺夫的16Y4R表明这场比赛是多~~么的火爆
- 意大利——澳大利亚:1:0,丑陋的比赛,除了最后一分钟。伟大的意大利的左后卫!(格罗索)。感谢黄健翔倾情奉献
- 巴西——法国:0:1,齐达内
- 意大利——法国:如果没有齐祖和马特拉齐的戏剧性演出,这场决赛真得不够格
3 七月, 2006
wxPython: Boa vs. PythonCard
Boa,Python IDE和wxPython GUI开发平台,是一个类似于Delphi的相当优秀的RAD工具。开源,当前版本0.4.4alpha,发布时间是2005/07/11。虽然这个项目的开发进度似乎已经停滞,但是这个版本的Boa还是完全适用小型的GUI应用的开发。作为一个IDE,它具备大多数应该有的功能,也包括code completion, code tips等附加功能。支持自行修改添加Plug-in(如customModuleInfo),支持Custom component等。
不过作为内测alpha版,使用Boa,在开发过程中,一定会碰到很多Bug,想办法绕过去吧。还有,用Sizer实现半可视化的Layout调整,不太方便;以 全路径而不是相对路径调用外部图片等资源,如果不手工修改自动生成代码,则会在实际运行环境中产生异常。
PythonCard, 使用下来,不如Boa方便。不算是统一的集成开发环境(你需要分别调用layout Editor, code Editor);没有采用代码生成方法,而是以特定的资源文件来描述GUI(.rsrc.py),并通过PythonCard.model来解析这个资源 文件。所以严格来说,PythonCard不应该算是一个好的开发平台,更应当被看做是一个封装wxPython的框架(Frame)
参考:PythonCard and Boa Constructor not ready yet
2 七月, 2006
wxPython: wxApp::OnExceptionInMainLoop无效,如何接管异常处理?
wxApp::OnExceptionInMainLoop
“This function is called if an unhandled exception occurs inside the main application event loop. ”
重载了此方法,但是无效,无论什么异常,发生时,这个方法根本不会被执行。没有看过wxPython源码,猜测要么这是一个bug,要么帮助文件中的描述有问题,wxApp::MainLoop()会处理绝大部分Exceptions,所以几乎不存在“unhandled exception”。
如何接管wx App的异常处理?
写一个新的接收三参数( type, value, traceback)的过程,然后覆盖sys.excepthook
例如,在wxApp中将所有的异常都以Message Dialog形式报告给用户:
import sys, trackback
class MyApp(wx.App):
...
#new excepthook method
def _OnExceptionInMainLoop(self, type, value, traceback1):
topwin = self.GetTopWindow()
tblist = traceback.format_list(traceback.extract_tb(traceback1))
dlg = wx.MessageDialog(topwin, '%s : %srn%s'%(type, value, 'rn'.join(tblist)), 'Exception', wx.OK | wx.ICON_ERROR)
try:
dlg.ShowModal()
finally:
dlg.Destroy()
#call default exception handler here
sys.__excepthook__(type, value, traceback1)
application = MyApp(0)
#assigne new exception handler to sys.excepthook attribution
sys.excepthook = application._OnExceptionInMainLoop
application.MainLoop()
因为sys和trackback是通用模块,这个方法也适用于非wxPython应用
参考: http://docs.python.org/lib/module-sys.html



