Monthly Archives: March 2008

MSN Live Messenger产生大量ignored contacts的问题

Zhuotong Nan (南卓铜, zhn1@pitt.edu)

不知道从几时起,我笔记本上的Live Messenger就出现这个问题。每次登陆十分慢,或者干脆无法连接到server。一些初步的观察,可以看到:

在C:Documents and Settings<your name>Contacts<your email>下会产生0KB的.WindowsLiveContact或.WindowsLiveGroup的文件。同时该目录下有隐藏的Ignored目录,其下有几千甚至几万个这些0KB的.WindowsLiveContact或.WindowsLiveGroup的文件。Ignored目录同时可以找到一个IgnoredReason.txt文件,有时此文件达数百MB。

在C:Documents and Settings<your name>Local SettingsApplication DataMicrosoftWindows Live Contacts<your email>real和shadow(两目录是隐藏的)下面,也有大量的0KB联系人文件,并有隐藏的Ignored目录,目录下有几千甚至几万个0KB的.WindowsLiveContact或.WindowsLiveGroup的文件。同样Ignored目录下有IgnoredReason.txt文件,有时达数百MB之大。

如果有多个帐号,每个帐号的上述目录下面都有一样的大量0KB文件。

将这些文件删除,经过一段时间的Live Messenger使用,又会积累很多0KB文件。

Google检索无果。个别人也提到Large number of contacts问题,但都没有解决。

今天使用Filemon进行了详细的检查,终于发现了原因所在。Live Messenger在登录成功时,会首先检查Contacts和Live Contacts目录下的联系人文件,因为这些文件为0KB,打开失败,会将它们移入各自目录下的Ignored目录,并记录到IgnoredReason.txt文件。在稍后会尝试在Contacts和Live Contacts目录下新建全部联系人的文件以加速以后Messenger的打开速度。Messenger试图从服务器上下载数据,并调用本机C:Documents and Settings<your name>Application DataMicrosoftCryptoRSA<current account id>下的加密钥匙文件(如,34a80763996ffdc408b119337fc93131_0923ce10-ed9d-4fa5-baba-146a7f733203文件)。Messenger在此时可能调用密钥失败,生成0KB的联系人文件。每次Messenger登录都重复这个过程,从而产生了无数的0KB联系人文件。

重新安装或升级Live Messenger都无法解决此问题。

解决方法,RSA密钥文件错误或不完整,将C:Documents and Settings<your name>Application DataMicrosoftCryptoRSA<current account id>目录下的全部文件删除(如果不放心,可以先备份到另一目录)。重新登录Live Messenger,可以看到Contacts和Windows Live Contacts两目录下成功生成联系人文件。这时,可以删除Ignored目录下的全部文件。

Issue: large number of 0KB contacts files produced by Live Messenger

A very large number of contacts files with 0KB in size (with extension of .WindowsLiveContact or .WindowsLiveGroup) can be found at "C:Documents and Settings<your name>Contacts<your email>", and real and shadow directories under "C:Documents and Settings<your name>Local SettingsApplication DataMicrosoftWindows Live Contacts<your email>". Also we noticed there would be also very large amount of 0KB contacts files under the Ignored directories of all above-mentioned directories.  A file named IgnoredReason.txt under each Ignored directory may be large up to several hundreds MB.

This problem will seriously slow down the login of Live Messenger. Re-install or upgrading will not fix this problem.

This is due to the failure of crypt procedure called by Live Messenger when attempting to save contact files. Go to C:Documents and Settings<your name>Application DataMicrosoftCryptoRSA<current account id>, and remove all files under this directory (or just move them to another directory, for your safety consideration). The applications who need them will regenerate in case of their absence. Feel free to remove all useless 0KB contact files, as well as all stupid Ignored directories.

[转]含兴奋剂的中成药岂能只让“运动员慎用”

[按:让我的朋友们都能看到,为了自己的健康,请慎重对待。奥运会也会有一些好处,
比如让我们看到了这些。通知原文请访问这里,http://www.sda.gov.cn/WS01/CL0055/28492.html。
]

◇◇新语丝(www.xys.org)(xys.dxiong.com)(xys.dropin.org)(xys-reader.org)◇◇

含兴奋剂的中成药岂能只让“运动员慎用”

·方舟子·

近日,国家食品药品监督管理局发出《关于公布含有兴奋剂目录所
列物质药品名单的通知》,列出1227种含兴奋剂的中成药品种,其中1
种含代血浆(右旋糖苷),6种含克仑特罗,9种含氢氯噻嗪,104种含
吗啡,174种含士的宁,400种含麻黄碱,533种含普拉雄酮。

这些兴奋剂成分,有的是配方中的草药本身所具有的,例如士的
宁源自马钱子,麻黄碱源自麻黄,吗啡源自罂粟壳。但是有的则是人工
合成的化学药物,例如克仑特罗、氢氯噻嗪、普拉雄酮,它们不可能来
自“天然成分”,只能是添加的化学成分。

其中最值得注意的是被用得最多的普拉雄酮,它是一种甾体激素,
进入体内后将转化成性激素。居然有533种中成药被检测出了含有这种
激素!这些并不是什么伪劣假冒或新研发的中成药,其中不乏片仔癀、
安宫牛黄丸、川贝枇杷糖浆等著名的传统中成药,但是在其成分中并没
有标出添加了普拉雄酮。被查出添加了普拉雄酮的还有多种是传统儿科
药物,同样没有标明,让婴幼儿稀里糊涂地吃下了性激素的前体。

国家药监局发这个通知的目的显然是为即将参加北京奥运会的中国
运动员着想,担心他们因为服了中成药而通不过兴奋剂检测,要求这些
中成药标明“运动员慎用”。但是这却无意中权威地证实了一个公开的
秘密:当前市场上的大部分中成药都添加了西药成分,有的在成分表中
标明(往往放在最后),更多的则是不标明,属于非法添加。

这也说明中成药的厂商们其实自己也对中成药的功效没有信心,所
以才会采取“药效不够,西药来凑”的作法,一方面利用国人对中药的
信任赚钱,一方面又利用西药的效果来欺骗国人。实际起作用的是西药
成分,但是用中药包装的西药的价格却远远高于西药本身的价格,还美
其名曰“中西医结合”。

消费者浪费了钱倒还罢了,如此“中西医结合”还有很多危害。添
加的西药有的是会有比较严重的副作用的处方药,需要在医生的指导下
才能服用。如果没有在中药中标明西药成分,患者不知不觉地吃了西药,
就无法预防、处理这些西药的副作用,也会干扰疾病的治疗。另一方面,
吃药并非多多益善,中、西药一起吃,中药有可能妨碍西药发挥效用,
甚至由于药物相互反应而出现毒副作用。人体摄入不必要的药物也增加
了肝、肾解毒的负担。在儿科用药中添加激素更是有害儿童的发育。

因此,药监局既然已经检测出了这些中成药非法添加了西药成分,
那就应该发出通报、召回药品、处置厂商,起码也得要求在说明书中标
明真实成分让消费者知情,岂能仅仅以“运动员慎用”就了事?难道广
大患者的健康还比不上某位运动员能否通过药检?

2008.3.26.

(XYS20080328)

◇◇新语丝(www.xys.org)(xys.dxiong.com)(xys.dropin.org)(xys-reader.org)◇◇

Kappa tool

Zhuotong Nan (南卓铜,zhn1@pitt.edu)

网上可以找到的计算Kappa系数的工具都是基于ArcView 3.x,如KappaStat。大多是做Land cover classification的人开发的。计算对象是采样的点文件和分类的polygon或者grid文件。但如果我们将Kappa应用于两个图像比较它们的相似性时,这类软件不能直接用。一个可行的方法是,将其中一个图像转换成point文件,比如应用arcgis的RasterToPoint命令。但对于很多图像对要比较,则没有好用的法子。KappaStat的图形界面和本身是一个ArcView 3.x的扩展模块,决定了即使写Avenue脚本也不是件容易实现的事。

所以我们写了一个小工具Kappa.exe。它用来计算两个栅格文件之间的Kappa系数,只要两个栅格文件有同样的width和height(即两图像是同样的mxn阵列)。Kappa工具不考虑栅格文件所在的空间参考系,只是简单的逐网格进行运算。用户需要自己确认两幅图像有合适的空间参考系。

Kappa工具与KappaStat进行了结果验证,证明计算是可靠,输出结果包括误差矩阵(Error Matrix),Kappa系数,还包括Variance和P统计值。

Kappa工具对栅格图像的支持调用了ArcGIS ArcObjects栅格API,支持很多种栅格格式,包括ESRI grid, ASCII grid, TIFF/GeoTIFF, JPEG等。

Kappa工具运行在命令行。这意味着通过简单的批处理脚本,可以实现批处理功能。比如,以下Windows batch代码实现了两个目录下相同文件名的栅格文件的Kappa计算。计算结果保存在kappa.txt文件里。

@echo off
for %%i in (00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23) do (
echo Hour %%i …
kappa.exe data1rldas%%i data2rldas%%i  -k:.kappa.txt
)
echo Done.

命令行格式,Kappa.exe [参考或实测图像] [待比较图像] {-l:日志文件} {-k:Kappa文件}

[]表示必须,{}表示可选。对ESRI grid,图像指定到目录名;对个人geodatabase(通过Access数据库保存)的Raster dataset,以geodb.mdbraster指定;文件geodatabase的Raster dataset,以geodb.gdbraster指定。如果指定日志文件,在屏幕上输出的内容将同时保存到日志文件中;如果指定Kappa文件,则将Kappa系数单独保存在此文件中。此两选项开关在批处理有用。

运行需求

dotnet framework 2.0
ArcGIS desktop 9.2 with ArcView License or higher

运行平台

运行在Windows系统。但由于工具由C#编写,调用ArcGIS ArcObjects相关API,如果在Linux上有安装ArcGIS desktop 9.2,结合MONO runtime,本工具应当可以被编译成适合于Linux平台。

Binaries和source codes可以Email联系我。

在ArcGIS中应用脚本实现批处理

Zhuotong Nan(南卓铜) zhn1@pitt.edu

ArcGIS 9.2提供了脚本功能,可以方便地实现批处理功能。可用脚本包括JS, VBS和Python。以下示例利用Python实现批处理ASCII grid文件到ESRI Binary grid转换的功能。

问题

ASCII grid由matlab代码生成,存储于 LDAS.data 目录。ASCII grid内容如下:

ncols         32
nrows         32
xllcorner     -88
yllcorner     37.75
cellsize      0.125
NODATA_value  -9999
0.000000    0.000000 …

各ASCII grids命名有以下规律:

nbwi3.[yyyy].[mm].[dd].[hh]h.txt

其中[yyyy]是4位年份,[mm]是月份,[dd]是2位日期,[hh]是24制的小时。比如,nbwi3.2001.07.08.15h.txt等。

生成的ESRI Binary grid有以下命名规律:n[yy][mm][dd][hh],其中[yy]是2位年份,[mm]是月份,[dd]是2位日期,[hh]是24制的小时。如n01070814。注意,ESRI grid的命名和长度是有一定要求限制的,所以我们必须要选择合适的,并能区别数据的命名方式。

我们需要做的是将数百个ASCII grids转换成对应的ESRI binary grids。

实现

脚本编写环境我们这里采用免费的PyDev/Eclipse。Python脚本存储在与LDAS.data并列的src目录下。事实上,可以使用任何文本编辑软件来用脚本,但Eclipse提供很多编程增强功能,如智能提示等。

import arcgisscripting
import os

datadir=os.path.abspath(os.path.join(os.getcwd(),"../LDAS.data"))
#print datadir
children=os.listdir(datadir)

#only ".txt" files
txtfiles=[]
grdnames=[]
for child in children:
    root,ext=os.path.splitext(child)
    if (ext==’.txt’):
        txtfiles.append(child);
        grdname=’n’+root[8:19]
        grdname=grdname.replace(‘.’,”)
        grdnames.append(grdname)
# grid names now ready       

gp=arcgisscripting.create()
gp.workspace=datadir

# begin iteration
for i in range(len(grdnames)):
    gp.ASCIIToRaster(txtfiles[i], grdnames[i], "FLOAT")
    print txtfiles[i]

首先,需要通过import arcgisscripting,将arcgisscripting导入Python。arcgisscripting事实上是位于C:Program Filesarcgisbin目录下的arcgisscripting.dll。如果在运行时,提示找不到arcgisscripting库,则需要配置Python库路径。

库导入成功后,gp=arcgisscripting.create() 创建script对象,此后通过“gp.命令”的方式调用script支持的命令。一般来讲,可以在arcgis command window里使用的命令,都会有对象的script调用方式。比如,

ASCIIToRaster的命令语法是ASCIIToRaster_conversion <in_ascii_file> <out_raster> {INTEGER | FLOAT},对应的脚本语法是ASCIIToRaster_conversion (in_ascii_file, out_raster, data_type)。我们可以在ArcGIS Desktop帮助文档里找到。

此外,gp还有一些专用的script命令,比如ListRasters、GetMessage等,大家可以在ArcGIS Desktop帮助文档查询Geoprocessor object。这些命令对于进行批处理迭代时十分有用。

在以上代码中,与geoprocessor有关的代码有,

gp=arcgisscripting.create()
gp.workspace=datadir
gp.ASCIIToRaster(txtfiles[i], grdnames[i], "FLOAT")

workspace设置了当前的工作目录,相当于在command window里执行 “workspace 目录”。

ASCIIToRaster执行实质的转换工作。如果此处我们需要执行位于ArcGIS扩展模块的命令,则需要在调用命令前,先对扩展模块(如spatial analysis)进行checkout。使用以下命令:

gp.CheckOutExtension("Spatial")
gp.CellStatistics_sa(…)

否则CellStatistic_sa会抱怨说没有License可用。

代码其余部分是常规Python代码。以下取得指定目录下的txt扩展名的全部文件名,并生成对应的grid文件名。

children=os.listdir(datadir)

#only ".txt" files
txtfiles=[]
grdnames=[]
for child in children:
    root,ext=os.path.splitext(child)
    if (ext==’.txt’):
        txtfiles.append(child);
        grdname=’n’+root[8:19]
        grdname=grdname.replace(‘.’,”)
        grdnames.append(grdname)

Python十分有趣,如果有其它语言基础,学习起来并不难。对我们写ArcGIS脚本,有一般的Python知识就足够了。尽管效率不如传统的arcinfo AML高,但在功能上则不逊色。如果需要实现十分复杂的GIS功能,则建议使用c++, vb或.net语言操作ArcObjects。

汉字数字化?

IPv9方兴未艾,据说得到信息部的支持。这里汉字数字化方案又浮出水面(其实是旧事
重提了)。据说四川代表(人大代表么?)提议,“建议尽快制定《汉字数字化方
案》”。
看到“现代计算机技术是以英文为基础设计的,中文被长期排斥在中央处理器之外”,
很是疑惑,排斥在CPU之外的岂止中文,任何人类语言只是某种外在表现,哪个学过计
算机的不知道计算机语言其实是一系列的0和1(电脉冲)。
然而,果不其然,又看到这个所谓的“汉字数字化”功能多多,不仅是输入法,还解决
加密,人工智能等诸多难题,与“十进制网络”如出一辙。
除了笑笑还能说什么。
突然又想到以前曾经有个汉字编程也风靡一时,据说还拿了不少的研究经费,不知道现
在进展如何了。
查看原新闻

最近研究一下了HDF

因为需要对modis数据进行处理,研究了一下hdf和hdf eos两个类库
hdf是个好东西,不过有点太复杂,而且api尽管很强大,但工具还是相对不多,可以windows下使用的则更少
 

珍惜

不同的人的生活轨迹,就是在坐标系里的每条游走的曲线,在沿着时间轴不停的发展变化,然后有一些曲线就在某些阶段会相交到一起,有些会重合走一段时间,也许以后会分开。但65亿条曲线,能走到一起的,能有多少。缘份是值得珍惜的。

刘东生院士过世了

看到一个小块新闻,但对我们在这领域工作的人来讲比“陈冠希又出了几张艳照”可来得震憾的多。新闻说黄土学家刘东生院士过世了。以前在北京开会见过刘院士做过报告。十分了不起的一个人,作出了很优秀的工作成果,尤其这些年很高龄了还是很敬业,经常能看到他的身影,精神值得我们年轻人学习。他是国内地学界真正了不起的科学家之一,获过Tylor环境奖和国家自然科学最高奖。这两个奖的重量每个搞地学的人都知道,基本等同于最高荣誉了。