限行有感

“北京机动车400万辆,东京、纽约各有800万辆却没有北京堵,这显然不仅仅是车多车少的问题。现在听到的方案都是准备拿私车开刀我反对,应该先向道路管理部门开刀,再向交通管理部门开刀,再向公交设计与实施部门开刀,顺便说一下,那些多此一举的收费站都可以开一刀,因为人类早就创造了不阻碍交通的收费方式。在北京,还可以向特权车狠狠来一刀。好刀要用在刀刃上。”(引自崔永元微博)

崔老师身在皇城,所谓身在福中不知道福,该知足了。兰州现在一车一月限6天或者7天,兰州才30万车,北京还有400万辆,但兰州限行比北京还狠。事实说明一切,限行的结果一样不乐观,堵的时候还是堵,倒是闲的时候车是少了一些,理论上限行可以减少20%,但问题是堵的时候根本不是多了20%,而是多了2000%。

政府做各种事情总是有理由,道路硬件条件差,种种先天或者后天不足,所以他们只能做一些伤害民众利益的事情,告诉每人要从大局出发,照顾好整体利益。有时候很奇怪,政府是干什么的,这些事情不应该就是他们的份内事吗?解决不好别找借口了,承认自己无能还落个诚实的评价,哪来这么多话。所谓大局整体,他们在讲的时候好像忘掉了大局整体不是虚的,是由一个个实在的人构成的,所以总理以前讲过,百姓无小事,这个国家就是由个个百姓组成的。有时候感叹,同是公务员,有些城市的执政水平就高了不止一筹。

杨凌项目会

16-17陕西杨凌项目会。第一次过去杨凌,印象不错。杨凌16万人,西北农林科技大,水保所等多家科研机构在这个小镇上。有些象国外的依托大学成长起来的小镇。科研人员生活压力不大,有体面的生活,这些研究所都做出了很了不起的科研成果。环境也不错。感觉很适合做科研的地方。着实羡慕了一阵子。

遗憾的是交通不是很方便,从机场过去杨凌,打表的话要400,据说不打表可以300块成交。从火车站过去其实蛮方便,本来10块的车费,但开出租车的当地人见是外地人会要到20块,这些好像让人感觉到杨凌人好像不是很厚道。听说现在在修高铁,交通进一步改善,西安杨凌的距离进一步缩短后,估计会更好一些。

住在一个三星的新天地酒店,有三星的硬件,但服务好像跟不上。比如,在第二天12点后,房卡打不开,我要求再续半天,结果被拒绝。问那如何进去房间,前台服务员不吭声。结果没法子,只有要求退房,才得以进去房间拿行李并被要求马上退房,搞的哭笑不得。这是农林科大办的宾馆,还很有一些官僚的作风,这些情况在大城市宾馆里已经很少见了。

主办水保所介绍说杨凌在未来会发展成一个现代化的城市。真到那一天,杨凌也便跟其余城市没啥区别了。

NoteExpress v2.6.1.1482多用户BUG

系统情况如下:

  • 操作系统Windows 7 中文
  • Office 2007 英文版
  • Kaspersky 2011 中文

全部正版。日常使用的是普通帐号(非管理员帐号)。下载了NoteExpress v2.6.1.1482后,安装时,提示需要管理员权限,提升到管理员帐号成功安装。

症状:

安装完成,不离开NE安装界面直接启动NE,成功(这时其实NE仍运行在管理员帐号下,因为安装已经提升到管理员帐号)。关闭安装界面,使用普通帐号打开NE,失败,提示该帐号下的Roaming目录下的NE配置文件失败。使用“以管理员权限运行”NE,成功。

以普通帐号打开Word,没有发现NoteExpress。以管理员权限打开Word,NE出现在Word界面上,正常运行。

以普通帐号打开Word,在Word选项里进入COM加载管理,没有发现NE项,通过Add… 将NE安装目录下的NEWordAddin2.dll 添到里面。关闭异常。再次打开Word,发现NE COM为inactive,无法正常添加。需要指出,如果运气太好,这时NE COM addin 添加成功了,那么每次打开word 都出现异常。这时请运行regedit,将HKEY_CURRENT_USERSoftwareMicrosoftOfficeWordAddinsNEWordAddin2.WordAddIn2删除,便可以正常启动Word。

原因:

NE在安装时,由于权限提升而导致用户帐号变化,错误地将一些必要配置文件写到管理员帐户下。

解决方案:

1. 每次运行NE,以管理员权限打开。相应的,也需要以管理员权限打开Word。不幸的是,由于权限控制,管理员帐户和当前普通帐号有不同的个人目录,比如这时NE打开的“我的目录”是管理员帐户的“我的文档”,而不是当前普通帐号的“我的文档”,再比如,无法将自己的桌面(当前普通帐号)上的文件拖到NE(运行在管理员权限下)附件里,诸如此类,很多不便。

2. 进到 C:Users<管理员帐号>AppDataRoaming 下,将其下的NoteExpress2目录里的全部目录和文件拷贝到当前普通帐号的对应位置,即C:Users<当前普通帐号>AppDataRoaming 下。在Word里打开Word选项,在COM加载项里添加NE安装目录下的NEWordAddin2.dll 。这样,普通帐号便可以正常运行NE了。

如果在COM加载项里原先已经有不打勾的NE,先将之移掉,重启Word,再行添加。

方案2无法回避的问题是,当NE有新版本出来,再行安装后,NE又将新的配置文件安装到管理员帐户下,无法对当前普通帐户进行自动更新,需要手工将Roaming下的对应NoteExpress 目录拷贝到当前帐户对应位置下。这个问题的解决,需要NE开发人员的修正。

然而,我前面在NE技术论坛上指出多用户下的这种BUG,有管理人员回复说,技术人员会进行测试,但我不认为NE技术人员意识到这种问题,并认真测试了。

要重放以上问题,准备2个干净的帐户(干净是指此前没有安装过NE),一是普通帐户,一是管理员帐户,使用干净普通帐户进行安装,安装时提升到干净的管理员帐户,应当可以reproduce描述的症状。

3. NE开发人员,在帐户提升的情况下,配置文件的安装应当是在当前普通帐户下,而不是提升后的管理员帐户下。

匆忙记录,错误在乎难免,请指正。

此BUG已经报告给NE相关人员,并在2.6.1.1508以后版本中得以修正。

愚弄小学生的东西

在数个群里都有人转发类似下面的文字:

“2010年的10月份是个不寻常的月份,这个月份中有5个星期五,5个星期六,5个星期日,这种情况需要823年后才能再次出现,这种月份被认为是钱币之月。”

小学毕业大致都可以猜出来月内5个周五周六周日的情况不致于这么罕见。简单计算一下,下一个这样的月份是,2011 年 7月,2013年3月,2014年8月,2015年的5月,,再下是2016年1月,2016年的7月。。。

呵呵!

在C中调用Fortran中的字符串数组

modparm.f

!在此模块下定义了很多共用变量,此处以title为例,定义为60个数组,每数组包括4字符

      module parm
      character(len=4) :: title(60), cpnm(5000)
      end module parm

getallo.f

!此函数(子例程)将使用modparm.f中定义的title变量,将从file.cio文件中读取3行填充title

      subroutine getallo
      use parm

!!    initialize variables
!      write(*,*) title
      title = “”

      open (23,file=”file.cio”)
      read (23,6000) titldum
      read (23,6000) titldum
      read (23,5100) title
      read (23,6000) titldum
      read (23,5000) figfile
      read (23,*) myr

      close (23)
      return
5000 format (6a)
5100 format (20a4)
6000 format (a80)
       end

将两fortran文件使用gfortran联编成 dll ,此时,title的实际符号为 __parm_MOD_title,getallo的实际符号为 getallo_。

在Qt/C++代码中读取和修改 title 变量,两个方法,如下:

1. 直接申明外部变量

#include <QtCore/QCoreApplication>
#include <QDebug>

extern “C” char __parm_MOD_title[60][4];
extern “C” void getallo_();

int main1(int argc, char *argv[])
{

     getallo_();
    char* aa = new char[60*4 +1];

    memcpy(aa, __parm_MOD_title, 60*4);
    aa[240]=”;

    qDebug()<<“__parm_MOD_title:”<<
            aa;
}

同样可以通过数组访问的方式对元素进行修改。

2. 通过动态加载resolve方法

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QLibrary>

extern “C” void getallo_();

int main(int argc, char *argv[])
{
    char * title =(char *)QLibrary::resolve(“../bin/test.dll”,”__parm_MOD_title”);

     getallo_();
    char* aa = new char[60*4 +1];
aa[240]=”;

    memcpy(aa, title, 60*4);

    qDebug()<<“__parm_MOD_title:”<<
            aa;

//修改第一个字符
title[0]=’h’;
   memcpy(aa, title, 60*4);
   qDebug()<<“__parm_MOD_title:”<<
           aa;
}

第二种方法将多维数组作为一维数组进行访问。

今天去了世博园

各个馆还是很漂亮,只是人多。昨天本想创新高(9.23达63万之多)结果才25万,今天刚才看了一下统计,已经有38万。多数排队都很长,只是从馆前看看,照个照片就过来了。只是看了几个小馆,排队在半小时以内。真要认真看,估计需要一周,内容还是很丰富。一个感受是中国馆真是很气派,占了偌大的地盘;美国馆英国馆等头号资本国家相对比就寒碜多了。罗马尼亚馆说为了公平,不设绿色通道,有点讽刺哦。园内喝了可乐,吃了吉野家,价格都可以接受,没有传说中的很贵。插队推挤到处可见。罕见的老外们还是高人一等。志愿者跟人讲话,都是不看人,感觉没有礼貌,不过是通病了。

世博参观人数达7000万按官方数据应该没有问题,只是很好奇,里面有多少是外国人,不知道官方能否给出个各国参观人数的统计。否则所谓刺激经济也是将全国人的钱转到上海钱袋里。至少今天匆忙转了A、B、C、E区,个人感觉99.9%是国人。

回到宾馆,感觉腰酸腿痛。

GIS方法理论2010年会

上海同济,很多人是冲着世博来的。共2天,一天半是专家报道,不分分会场,是一些国内知名专家的报告。地信的领域有些杂,所以国外的高校一般不专门开地信的系,而是将地信作为一些专业的基础课。其实一些专家的报告并不感兴趣,但没得选择。第2天半天,分了若干个分会场,集中了几十个非知名专家的报告,包括我的。里面有一些感兴趣的,由于同济的这种安排法,也听不成。

这个年会也越来越变成知名专家们的年度聚会了,并没有多少时间听到青年科学家的声音。知名专家里,除了一些有原创性,也有不少是跟随大流的成果,随便吹吹牛自己团队有多少的经费和项目。Google太可恨了,出了个google earth/map,叫多少个gis专家脸面无光了。

有个叫吴志强的同济教授,是上海expo 2010总规划师,讲了一个生态世博的主题,讲话能力十分强,而且政治绝对正确。坐在我边上的学生们个个听的入神一直鼓掌叫好,吴教授争了中国人的光。象我等因为在国外呆了一些时间,有时候感觉很不以为然,对一些观点甚至看出不同的结论,不过没有这个讲话的本事,即使给争的机会也不知道如何争辩,注定了国内平庸的生活。

在超算上执行Matlab程序

新发展了一个算法,对MODIS LST进行重建。对象是青藏高原250sq km,共2.7M多个点。工作量十分大。写了Matlab代码。在实验室工作站进行 parallel运行,开了8个labs,每一幅大约花费 3-5小时。希望计算2005年一年的day和night LST。计算时间不能接受。

研究所部署有曙光5000大型机。LSF管理系统。在个人用户下(不一定需要系统权限,一般用户即可)安装了Matlab 2010a,MatlabRoot是 /public1/CAS/wanglx/matlab1。Putty连接到超算后,执行./matlab1/bin/matlab,提示glibc 不支持,当前版本是 glibc 2.4,2010a支持的版本是 2.7,需要用户输入y 才能继续进入到matlab。需要对oscheck.sh进行crack,否则以后的bsub提交系统会有问题。vi $Matlabroot/bin/util/oscheck.sh进去后,注释掉584行 read ans(前面添加 #)。其后插入一行 ans = ‘y’。:w! 保存(加!是因为文件是只读),:q退出 vi。

安装XME,远程连接到超算,启动matlab,在Parallel菜单里配置 default configuration。配置一个合适的叫lsfconfig。设为default。注意在字符界面下是无法配置 defaultParallelConfig的。

使用parallel configuration是为了使用matlabpool 进行自动的分割和管理。否则自己得使用设定scheduler, job, 和task 还得自己管理输入和输出。比较麻烦一些。matlabpool 可以跟 parfor等连接起来使用,对于我们面临的任务简单的for循环十分适用。

退出xme。以 matlab -nodisplay进去,调用 interp_lst2 执行,以high 队列进去,自动连接到 256个labs进行计算。在configuration时配置 submitarguments 为 -qhigh。

interp_lst2的结构如下:

function interp_lst2

%set up some variables and reading data in from files

matlabpool open lsfconfig 64

for i=1:length(lst_data_fns)

decompose2_func(interp_image_fn, lst_dir, ref_dir, output_dir, …
dem, slope, aspect);

end

matlabpool close

function decompose2_func(…)

%set up variables

parfor i=1:interp_count

end

%posterior procedures

Putty连接Linux 如何后台运行

Putty连接后运行一个Linux程序,如果关闭Putty session,程序也将退出。解决方法是使用Screen。

Putty连接成功好。在命令符运行screen,启动之。

在screen窗口里执行程序,Ctrl-a d将此窗口 与Putty会话断开。此时将 Putty关闭,程序仍在远程Linux机器上运行。

下次Putty连接进去后,运行 screen –ls 列出全部的screen会话,找到对应的id号。

screen –r <id>恢复到上一会话。

黑河土壤调查

与南师大的李硕老师出了一趟野外,主要是黑河流域中上游的土壤调查。调查内容包括环刀取样和原状土的渗透系数测定。前后十天。

调查点地图如下,基本是将中上游的主要土壤和土地利用类型控制住了。这应该是近些年来黑河流域开展最为系统的一次调查了。

map 
三角为调查点,红色区域为黑河流域上流,紫色为中游区域。

DSC_0669 
分两小组分别工作,我们小组在达坂山垭口的合影