Category Archives: Tech

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以后版本中得以修正。

在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;
}

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

在超算上执行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>恢复到上一会话。

ThinkPad x200 更换硬盘及数据迁移

Zhuotong Nan ([email protected])

原硬盘250G,因最近工作产生大量数据,已经只有10G空间了。在决定换硬盘前,通读了一些网上相关的文档,大致评估了风险。硬盘是肯定可以换的,但我更关心:

  1. 原硬盘上的系统和数据要原原本本迁移拷贝到新硬盘,否则安装系统和各种应用程序、专业程序,调整系统就太麻烦了。
  2. 因操作系统是正版的,不想因为变换了硬盘,导致操作系统要重新激活。
  3. 一定保证数据安全,不丢失。

购买7200转的500G Seagate硬盘,USB 2.0硬盘盒。准备一个4G U盘(不一定4G,有100M空间就够),一把十字螺丝刀。

1. 安装Acronis True Image Home 2010,主要用于创建启动U盘,和磁盘对拷。我是安装在另一台Vista机器,如果没有额外机器,也可以安装在笔记本上。2010版本支持在Windows 7上运行,如果系统是Vista(象my case),可以安装旧版本。Acronis得是full version,可以购买或者从网上找序列号。

安装后,插入U盘,打开Arconis,注意,创建启动U盘需要管理员权限。选择创建可启动的应急盘。按指示进行,在指定目标时,选择对应的U盘。注意U盘上的内容会被清除,注意将U盘有用的内容事先备份。创建后的U盘只花了几十MB的空间。

要先插入U盘,Acronis才有在U盘上创建应急盘的选项,否则只有光盘等可选项。

2. 关闭ThinkPad X200笔记本。将启动U盘插入X200对应USB口上。将新硬盘安装到USB硬盘盒,连接USB线到X200。我没有将新硬盘直接换到X200上,是为了防止有可能的系统迁移失败,当然后来的事情很顺利。但建议大家也是按这个次序,并不显得麻烦太多。

按F12不放,按电源键开机,按F12不放,直到在屏幕上看到preparing boot list,放开。这是ThinkPad提供的一个临时改变启动次序的方法。出来的启动次序,选择U盘。

请注意,因为以后的拷贝操作会消耗比较长的时间,一定要接外接电源。

3. 系统很快从U盘上启动,进入Acronis图形界面,这时是支持鼠标的。点击Arconis帐号(在2010上只有一个可用帐号)进去。在Tools and Utilities下选择 disk clone,可以看到两个disk,一个是x200上的原硬盘,和连接到USB上的新硬盘。

我的X200是安装Windows 7系统,有100M的系统保留分区,如果是原装的X200 Vista,还有保留应急分区。不管如何,在disk clone时,选择manual (手动),如果选择自动,会将各分区按比例自动扩大,这不是我们想要的。进去Manual选择后,选As is。这样在新盘上将创建与原盘上一样大的分区,多余的空间作为未分配空间,可通过widnows 7磁盘管理里的扩展卷功能,将未分配空间重新并入。与As Is下仍然有Manual允许指定大小,但为了免除误操作,建议选As is选项。

首先要指定源盘,请确认选择了x200上的盘,再指定目标盘,即新盘。务请不要搞反了,否则就悲惨了。

克隆开始。进展对话框,有一选项是完成后关闭电脑。我是在晚上睡觉前执行上面工作,所以将这个选项选择上,然后安心睡觉去了。克隆的过程大概需要4小时左右,各人电脑需时不一。耐心等候,Arconis能完美地完成任务。

另外,无须担心x200上的源盘数据受损,Arconis只是从源盘读数据,不会进行任何写操作,我的机器上有最近的工作都没有备份,也十分放心的做以上操作。但一定要遵从我上面的步骤要点。尤其是源,目标盘不能搞反了。

4. 拷贝/克隆完成后。退出acronis,关闭x200电源。拔掉电线和外设。反转电脑,拧开一枚螺丝,将盖打开。硬盘两边有橡胶保护。有一黑色塑料片(是固定在硬盘架上的),可以捏住这个向外拉。拉出来后,将橡胶保护去掉,将硬盘从架子上下来,有四个螺丝需要松开。

新硬盘从硬盘盒里取出来。放到硬盘架上,固定4个螺丝,放上橡胶保护,然后塞进去,注意如果塞不倒位,请确认上下没有弄反。我在操作的时候就弄反了。应该很轻松的塞进去。重新固定盖子复原。

将5400转250G的老硬盘放到硬盘盒。可以作它用,或者保管起来以作备份。

5. 打开x200,看是不是成功了,应当能跟以前一样的进去操作系统。在尽情享受更大容量和更高速度带来的乐趣前,执行最后一步。进去磁盘管理(我的电脑右键选管理),在原C盘上,右键,选扩展卷,将未分配的空间全部分配给C盘(或者其它盘,根据你的需要)。

Outlook 2007 archiving error

During the archiving processing, an error happens, saying,

Error while archiving folder "shull" in store "Personal Folders". A folder by this name already exists.

which can be found in the archive log item in the Deleted Items folder.

After examining carefully, I found in the archiving folder, there is a folder named Shull already existing but in a difference case. Change the “shull” folder name in the personal folder to “Shull”, start archiving again. The problem gets solved.

It seems that the folder name in the Outlook 2007 is case-sensitive. In the archiving process, the program intends to create a folder name “shull” in the archiving file. However, the folder creation is case-insensitive. When it found that there was already a folder name “Shull”, it stopped and subsequently an error threw out.

Install HP LaserJet 1012 on Windows 7

HP does not provide official support for LaserJet 1012 on Windows 7. There is a workaround and it does work fine for me.

The solution is original from this post (http://forums13.itrc.hp.com/service/forums/bizsupport/questionanswer.do?admit=109447627+1270533366367+28353475&threadId=1381135).

1. First off, go download HP LaserJet 1012 Host Based drivers.
64-bit: http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareDescription.jsp?lang=en&cc=us&prodTypeId=18972&prodSeriesId=377934&prodNameId=306510&swEnvOID=2100&swLang=8&mode=2&taskId=135&swItem=lj-67501-1
32-bit:
http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareIndex.jsp?lang=en&cc=us&prodNameId=306510&prodTypeId=18972&prodSeriesId=377934&swLang=8&taskId=135&swEnvOID=2093
2. Extract the driver.
3. Plug in and turn on your printer if you haven’t already.
4. Go to Start>Devices and Printers, and choose to add a printer
5. Choose to add a local printer
6. Choose Dot-4-usb printing support
7. Click Have Disk on the next window
8. Navigate to where you extracted the drivers, and choose the inf file
9. Choose the HP 1012 HB Driver
10. Follow the prompt till it installs the printer or what not

Now you may notice that it prints slow as heck, well no worries! To fix that do this.
1. Go to Start, right click Computer and choose Manage
2. Go to Device Manager
3. Find 1284.4 dot4usb Printing Support
4. Right click it and choose Update Driver
5. Choose Browse my computer for driver software.
6. Choose USB Virtual Printing Support
7. Follow the prompt, exit out of Device Manager
8. Go to Start>Devices and Printers
9. Right click HP 1012 HB, choose Printer Properties
10. Go to the Port Tab, find Virtual USB Printing Support (Not dot4) and check that.
11. Click Ok.
Congratulations! Your printer isn’t an agonizing experience anymore!!
NOTE: The users in my environment reported that the printer after a restart showed up uninstalled but continued to print fine, so meh. Guess it cannot be perfect.

蓝光中国标准

蓝光(blue-ray)是下一代高容量DVD标准。来自索尼的蓝光标准在赢得国际市场前与东芝支持的HD DVD标准有过生死之战,最终东芝无奈也选择了蓝光,至此,蓝光基本已经成为下一代大容量DVD的国际标准。然后,在中国,还有更多的故事。

在蓝光和HD DVD没分输赢前,中国选择了HD DVD标准,然后有几家单位进行了进一步的研发,诞生了所谓的拥有自主产权的中国蓝光标准(CBHD)。此两者标准互不兼容。这里想问的是,真有这个必要,中国搞自己的标准么?

CBHD是派生于东芝的HD DVD标准,不是真正意义上的具备自主知识产权;

CBHD支持的容量是单层15GB,双层30GB;国际蓝光是单层25GB,双层50GB;在容量上不占优势。无论CBHD还是蓝光,作为存储介质,容量是其重要指标。

目前看CBHD在价格上有优势,但需要知道的是,类似的高技术产品,经过一些时间,各方面成熟后,价格都会很快下来,当CBHD在价格上没有明显优势后,除了号召大家支持民族产业和国家标准,还能做什么

最重要的是,当全世界的厂商都推出支持蓝光的设备(蓝光是跟CBHD在物理格式上不兼容的),大家以为他们会刻意的支持一个区域性的标准么? 即使支持了,也是以增加成本为代价,成本是要反映到最终零售价格里的。

国内的软硬件开发人员也有得折腾了,写代码,得写两套标准,一套支持国际上通用的蓝光,一套支持中国标准,硬件也得两套,为了美观和方便,将两套硬件二合一。

那么会不会国际社会主动来适应中国的标准么? 如果中国是美国,也许还有可能。迄今为止,看着的莫不是洋货跟宝一样,以崇洋媚外为荣,千万不要到头来中国标准又成曲高和寡之作

那么难道就不要中国标准了吗?发展中国标准不是自已搞一套,正确的发展思路是跟美国和日本一样,将自己区域性的标准推广成国际标准。在全球化的今天,要放到国际舞台上去竞争,不要在国际舞台上争不过,就关起门来,自己搞一套,真当自己是国际老大了,大家要听你的,如果还不是,就先适应国际上的潮流吧。搞中国标准的底牌是相关厂商认可中国的市场,象Warner Bros.就宣布支持中国标准,然而是不是每公司和用户都买这个帐呢?最关键的是中国盗版严重,正版市场远没有想象中的大,这些都是其余内容提供商决定发行CBHD需要权衡的。记得以前DVD时代,中国也搞过EVD、FVD等,都是惨淡收场。

目前国内有关部门正在推行CBHD标准,等些年后,回头再看,相信市场会淘汰掉一些不必存在的东西

Migrate live space to blogger (v1.1.1)

A new version of the live space export utility. The old version can not run because the live space has changed some codes in its web pages. Also some bugs have been fixed in this version.

Download link (v1.1.1):

http://cid-0ea641a5a7f665a1.skydrive.live.com/self.aspx/Public/livespaceexport.v1.1.1.zip

md5 sum: 1591c88501470b9292cff39a42eb209d

Please read the readme.txt file included in the zip package before use.

I ONLY MAKE A SIMPLE TEST. PLEASE LET ME KNOW IF THERE STILL IS ANY PROBLEM.

BE SURE SIGN IN YOUR LIVE SPACE WITH YOUR PASSWORD USING YOUR FAVORITE BROWSER BEFORE TRYING TO RETRIEVE LIVE SPACE POSTS.

The previous posts on this tool might be helpful if you are not clear how to set the parameters which are necessary to run the tool.

http://nanzhuotong.blogspot.com/2008/11/move-blog-posts-from-live-space-to.html (figures included to show the parameter configuration)

http://nanzhuotong.blogspot.com/2008/11/live-space.html (in Chinese, figures are also included)