Yearly Archives: 2008

无耻的CNN

就因为个奥运,最近的事情好多,离奥运还有些时间,不知道以后又会有什么事情发生
最近先是法国火炬的事,号召大家抵制外资的家乐福,吓的家乐福赶紧发表声明说他们是支持奥运的。
法国这事我并不感觉到气愤,法国政府没有咱们政府这么大的权力,所以护卫火炬不利也是正常,法国媒体也不听政府的,难免有咱们不爱听的声音出来。家乐福一家超市而已,大家为什么跟自己的油盐酱醋过不去,要抵制,大家不要买法国的奢侈品好了。别为商业对手给利用了。
然而,美国有线电视网一个节目评论员说中国人50年来一直是恶棍,将全世界华人全骂到里面去了,激起现在的共同抵抗是难免了。后来又改口说他是骂中国政府的。一听就是狡辩,如果早是骂中国政府的,怕也不会是现在这个样子。
4月19日在LA CNN分部有游行,大家关注并支持。

校内网与Facebook

做it的人经常感叹,中国人的水平其实挺高的,不知道怎么回事,就是想不出新东西来,但仿冒别人的东西很厉害
比如腾讯的qq,先是抄icq,被人告了改了现在的名字,现在就抄live messenger的东西,很少有自己的好东西出来
只是这东西技术是自己实现的,只是样子象,怕法律也没奈何
最近一朋友告知校内网,说又是抄facebook的,于是注册了一个看看。只是我不知道两个公司是不是有关系,
比如facebook授权了(看样子不象),点子是跟facebook一个样了。第一个吃螃蟹的叫英雄,这样老跟人屁股的,
即使挣再多的钱,怕也格调不高吧。只是商业社会,怕也顾不了这么多了。
所以我也要挣大眼睛看看四周,什么是美国有的,现在中国还没有,也抄一个进去,没准又是新百万富翁。
不过我这个性怕这辈子无望了

两所大学

周末到West Virginia University(在Morgantown)和Washington & Jeffison University(在Washington County)去看了一下
大学其实不大,只有一座座building,没有国内常见的围墙,也绝不会有门卫拦着不让进(根本就没有门卫或警察看着)
可能是周末的关系,人很少,学生不知道躲哪去了
进了它们的图书馆,宽敞明亮,对任何人都开放(不知道偷书被逮,下次还会让进不)
我们跑图书馆的目的总是因为小孩要尿尿
早春时节,已经看到悦目的绿色
在WVU看到免费的有轨无人校车,象过山车,很好玩,任何人都可以免费的坐,从一个campus到另一个campus
只是辛苦W同学了,一周工作只想周末能好好躺下来休息,还被我们拉去当司机了

天价剪发

看到最近郑州一个黑店2女孩剪发被要了1.2万的新闻,随着媒体的跟进,很多人在该店(保罗国际)有类似遭受也被报道出来。后来该老板叶剑文(保罗是其洋名)到网易与两嘉宾辩论,大谈“诚信”。奇怪的是,一些话当时他说的(比如,有后台之类的话)都是很多人在现场,居然都敢当面撒谎。做人无耻到这等地步,也属罕见了。从事情看,如果说没有后台,我也不信能害人可以害这么长时间,而且还是十分凶的那种。只是现在事情闹大了,怕那后台也保不它了。所以做人不要太过份了。

这些人为什么敢这么蛮干,除了有后台在保护,另一个原因是惩罚力度不够,不大了关门走人,再换个地方害人,特别是有后台在周旋一下,象征性罚点钱就完事。象这种恶劣的事情,应当罚个倾家荡产,看他下次还敢不敢。因为作恶代价小收益大,受不了诱惑的因此大有人在,造成现在大家在中国社会里生活什么事情都要小心翼翼,买个吃要看是不是过期,是不是以次充好,买穿的要看是不是仿冒的尽管掏了真的那个价钱。万一有事了还要知道保护自己。想问的是,政府如果不能保护大家,大家又如何保护大家。如果大家都能知道如何保护自己了,还要政府干什么。政府的职能(嗯,从幼儿园到博士的全部的政治书里都这么说的)就是组织大家生活在一个更为协调有效率的社会里。

到美国超市买东西,绝不会有店员跟你屁股后面,要偷个东西比国内的超市要容易的多。而且有自助的付款出口,没有任何店员监看。将标签一撕掉,就可以大有大摆的拿出超市。甚至有些出口是没有感应器的。美国超市也丢东西,而且丢的据说还不少。但,我想说的是,你能偷成功,没关系,那是你的本事。但,不要被逮住。只要有一次被逮住,非但超市要列你进黑名单,这些不良的记录还会影响到信用。美国是凭信用生存的一个社会,如果信用不好,银行拒绝给你服务,房东不租房子给你,你也甭想开公司什么的,政府不会发给你许可证,警察也会时不时关注你。这辈子就算完了。正是有了这么严重的后果,一般人犯不着为些小事情去干坏事。那些恶人也都是聪明人,他们在为恶的时候大都会计算一笔帐的。如果微软敢这么黑顾客,估计微软再多的钱,也被政府给罚的差不多了。重压出良民,谁还敢。这才叫法律。而且甭想去找关系,除非真做的天衣无缝(只有死人是安全的,武侠小说里都这么说),否则只要有人给你捅出来,那关系人也玩完了,州长总统因此下台也不是没有。绝不会象咱们国内,受牵连的政府官员一般都没啥损失,即使下台也能东山再起——只要有关系。这样,他下次还要干,再去保护另一家保罗黑店好了。

MODIS过境时间及相关

Zhuotong Nan(南卓铜, [email protected])

教科书上都有MODIS有固定的过境时间,比如Terra说是10am过境(指从北向南经过赤道,中文资料上有意无意忽略这些定语,当地时间),Aqua是13:30过境(从南到北经过赤道。国家MODIS网站上将13:30写成14:30,是错误的。)。其实对于某一区域,过境时间不一样了。比如下面两张NASA Orbit Archive的Terra轨道图。

na2002_08_02_214 na2005_12_08_342_aqua
Aug 2, 2002(左),Dec 8, 2005(右)

对于美国Oklahoma区域(MODIS tile: h09v05)左边在下午5点,右边在下午7点。

而针对16天合成的NDVI和EVI,它是选择其后16天内的观测良好(如无云)的若干观测通过一定算法合成的,每个网格上的数据都有可能来自此16天内的不同时间。幸好NDVI/EVI作为反应植被的一种指标,对半月期变化是可以接受的,用来反应整个植被变化的趋势是足够了。但如果要跟土壤水分等时间性十分强(如一场大降水)的数据耦合到一起应用,则需要慎重的考虑。

(最近看的资料有这些想法,了解不多,如有谬误,请指正)

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

Zhuotong Nan (南卓铜, [email protected])

不知道从几时起,我笔记本上的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 (南卓铜,[email protected])

网上可以找到的计算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(南卓铜) [email protected]

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。