Category Archives: Tech

使用Google docs + office 实现协作文档

Word 2010据说提供了较好的协同写作支持。然而我等版权自律比较好,又没钱更新成新版本的,只能用2007版本的word。以前曾经在小组内安排过sharepoint 进行协同写作,记得西部数据中心的申请书就是这么完成的。但sharepoint也是恼火的东西,不好用。

最近得知google出来个叫google cloud connect的东西。下载地址是http://tools.google.com/dlpage/cloudconnect。据说可以用office做为客户端,以google docs作为云端,实现协同写作。听起来好像不错。于是想试验一下。

(一)

很不幸,google docs在国内是被伟大的墙封锁的。所以先做一点点工作以绕过墙。在资源管理器里切换到c:windowssystem32driveretc目录下,找到一个叫hosts的文件,用文本编辑器(如notepad打开)。在里面另起一个空行,添加
74.125.235.110 docs.google.com

这使得docs.google.com的域名首先在你自己的机器上被解释,然后直接用此IP地址连接。记得保存hosts文件。

docs.google.com在不同地方访问有不同的IP地址。所以得到docs.google.com的IP地址,最好的方法是,打开命令行窗口(开始菜单>运行>敲入cmd),在提示符下敲入 ping docs.google.com,应该就可以看到被解释的IP地址,用这个地址替换上面的那个,并保存进hosts文件。

当然如果你有VPN服务,那么使用你的VPN就可以绕过去,不必做以上设置。

(二)

下载google cloud connect,地址见第一节。安装。要求有管理员权限。安装完成后,打开word,貌似这个cloud connect支持2003,2007,2010等各版本。详细见它的说明吧。

我这边打开word 2007后,看到多了一个东西如图所示。

image

看到google cloud connect了吧。点击login,要求你提供google的帐号。你没有?那么赶紧申请一个吧,这个帐号一般就是你的gmail的帐号。

如果出来下面这个错误窗口,不要急。

image

确定关掉,点 global settings窗口里的 Login。

image

如果第一次使用,这时要求你输入帐号和密码,如下

image

进去后,一般可以弹出一个授权的窗口,象这样的。这是授权cloud connect可以访问google docs。

image

点授予访问权。并在global settings里单击OK关闭窗口。现在你的word,通过cloud connect已经连接上google docs。

(三)

在你的新建文档里随便敲些东西。然后点击Sync同步按钮,那么你的东西除了在本地有一份,也同时传输到google docs上了。

(四)

这个文档要跟你的朋友一起来写。单击Share,在里面添上你朋友的email地址,建议是你朋友的google帐号地址,如果不知道,打电话问吧。

image

单击下面的share按钮,本文的google docs地址将发送到你朋友的邮件里。

(五)

当你邮箱里收到一个google docs地址,点击进去google docs,将此文档下载过来本地。在word里将之打开,就可以用word对之进行编辑,同样可以通过cloud connect进行同步。这样,你和你朋友就可以在同一个文档上进行编辑,当你进行更新,你朋友将看到这些更新,同样你朋友的更新也会很快反映到你的Word里来。

(六)

无疑是个极好的东西,问题就出在google docs被墙,前述方法有时候并不work,同事受几次挫折,还是连接不上docs,就不想再用这个了。郁闷兼遗憾。

在LSF作业提交系统上提交MPI并行程序

我们的noah模型采用mpi进行了并行。在windows上测试的时候使用了mpich2,通过。实际计算时使用了所里的曙光5000高性能计算机。还是费了一下午的时候来进行必要的设置。我们的超算环境部署了几种mpi,如mpich p4,openmpi等。我们使用了openmpi库。对于openmpi库的一些必要环境变量已经配置在 /public1/scripts/openmpi1.4-gnu.sh脚本里,其中包含MPI_HOME、PATH、LD_LIBRARY_PATH等与mpi有关的变量。

1. 在超算环境里,应用配置后的变量设置。
source /public1/scripts/openmpi1.4-gnu.sh

2. 在用户目录下的.bashrc里增加
export OMPI_MCA_pls_rsh_agent=/usr/bin/rsh

3. 对源代码进行编译。
mpicxx *.cpp *.o -o cali_noah_final_new_1 -I../gsl-1.14-lib/include -I/public1/home/CAS/lzhpc14/devenv/hdf5-1.8.5/include -L/public1/home/CAS/lzhpc14/yuting/runnoah/gsl-1.14-lib/lib -lgsl -lgslcblas -L/public1/home/CAS/lzhpc14/devenv/hdf5-1.8.5/lib -lhdf5 –lgfortran

mpicxx是mpi版本的c++编译器。在这里指定源代码,头文件路径,库路径,连接的库名即可通过编译。mpicxx具体是连接到哪个mpi环境里,是由步骤1进行了设置。注意必须使用mpi使用的对应编译器。

4. 编译通过后,将产生我们的模型可执行文件,cali_noah_final_new_1。这个模型需要带一个参数。所以我们写一个脚本cali_noah.sh。里面包括以下内容:
#!/bin/sh
export LD_LIBRARY_PATH=/public1/home/CAS/lzhpc14/yuting/runnoah/gsl-1.14-lib/lib:/public1/home/CAS/lzhpc14/devenv/hdf5-1.8.5/lib:$LD_LIBRARY_PATH
./cali_noah_final_new_1 run_0223.config

其中,export 需要指出./cali_noah_final_new_1 依赖的库位置。这里涉及到两个库gsl和hdf,mpi有关的库,不必在这里指定。在涉及到多个物理机器参与mpi计算时,export必须指定,否则会提示找不到必要的shared library。

5. 通过lsf提交到计算节点进行计算
bsub -q bigmem -n 64 -a openmpi mpirun.lsf ./cali_noah.sh

这里使用了64个CPU进行计算。由于这里使用很多个CPU,位于不同的计算节点上,大致流程是这样的。bsub将任务从登录节点提交到计算节点,并申请了64个计算单元。分配成功后,openmpi寻找一个计算节点为主节点,进行必须的初始化(包括在这个节点上进行shared library的位置配置),然后openmpi将任务分配到其余可用的计算节点,进行计算。如果这些计算单元全部位于同一个物理计算节点,那么是不需要专门设定shared library位置。但如果计算单元位于不同的计算节点,由openmpi分配的计算节点只预先配置了mpi的环境,而没有应用程序需要的其它library位置信息。这种情况下,必须指定LD_LIBRARY_PATH,如步骤4所描述。

在mingw/win7上进行 micromet/snowmelt

Micro-met提供了优秀的气象要素的插值方法。其代码是fortran写成。在windows 7下进行编译需要一点trick。

1. 安装mingw,我安装的gcc 是4.4.0 版本。

2. 安装gfortran,一样4.4.0 版本。

3. 在micro-met code目录下,写一个 build.bat文件,内容是

gfortran -O3 -I. -o ../snowmodel enbal_code.f micromet_code.f preprocess_code.f readparam_code.f snowmodel_main.f snowpack_code.f snowtran_code.f dataassim_user.f outputs_user.f

4. Build.bat生成的snowmodel.exe将在上一级目录。

5. 确保 mingw的bin目录在path里,双击 build.bat,将在上级目录生成 snowmodel.exe

6. 切换到上级目录,双击生成的snowmodel.exe,提示说 页面文件太小,无法执行,类似。在命令行里执行snowmodel,将提示“系统无法执行指定的程序”。此提示是由于内存不够引起。清空占用内存的程序腾出内存一般可以解决。如果还不够,设置page file缓冲。

7. 这是由于 gfortran生成的代码受32MB 内存的限制。一些详细的解释可见以下网址:

http://www.trnicely.net/misc/vista.html

8. 使用管理员权限打开 regedit,在ComputerHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlWOW 目录下,新建一个 DWORD类型的键DpmiLimit,并将其值设成128000000 (10进制),或者0x7A12000(16进制)。关闭注册表。

9. 双击build.bat重新编译。

10. 在命令行里,执行 snowmodel,将执行。

Thecus RAID 0 格式化问题

新买了一个Thecus N4100Pro,组建了一个RAID 0用于数据备份。

注:RAID 0的风险必须考虑,如果其中一个盘坏掉,那么全部盘的数据都将丢失。

然而在格式化时,选择128KB stripe size和EXT3 file system,等待了1个多小时,都还提示在格式化。

通过Thecus电源按扭强行关闭后,再开启,创建RAID 0时,选择XFS文件系统,约30 s格式化配置完成。

不知道算不算一个BUG。

mpich2的安装问题

在windows7操作系统下,安装mpich2的时候,需要以administrator帐号登录进来,并以administrator进行安装。注意,是指administrator帐号,而不是administrators组里的其它管理员帐号。如果是其他管理员帐号,mpich2将无法运行。也不能以权限提升的方式进行安装。

安装完成后,administrator帐号甚至是可以被禁用的。这时切换到其它帐号,使用权限提升的方法,用其它管理员帐号进行 register(使用mpiexec register)后,就可以正常运行mpiexec了。

Win7上安装MPICH2

MPICH2是并行计算MPI的支持库。我们在win7平台上安装的时候遇到一些有意思的问题。安装机器以Administrator管理员权限登录进来,无密码。该机器上还有一般用户,假设为user,密码为userpwd。在安装后MPICH2可执行包后(注意安装时也需要管理员权限),运行mpiexec,弹出登记对话框,这里需要键入用户的用户名和密码,且密码不能为空。我们出问题的原因就是由于Administrator没有密码,所以用了user/userpwd,但看起来 mpiexec在具体执行的时候,同样是要求管理员权限的,否则出错。

由于mpiexec执行是通过port进行线程间交换数据的,所以如果遇到问题,还要注意配置防火墙配置。除了一些第三方防火墙,比如360防火墙要设置外,也不要设置windows自身带的防火墙。如果不会设置,最简单的方法就是将防火墙统统关闭。在不使用mpiexec的时候再打开防火墙。

函数指针传递变长参数的问题

一个例子,编译不通过。

//test.h

#include <cstdarg>

class Test
{
public:
  // int A();
   int B(int a1,int(*Func)(int b1,va_list ap),…);
  int C(int b1,va_list ap);
};

//test.cpp

#include “test.h”

int Test::B(int a1,int(*Func)(int b1,va_list ap),…)
{
    va_list ap;
  va_start(ap,Func);
  int f=Func(a1,ap);
  va_end(ap);
  return f;
}
int Test::C(int b1,va_list ap)
{
int a=(int)va_arg(ap,int);
int b=(int)va_arg(ap,int);
int c=(int)va_arg(ap,int);
return a+b+c;
}

//main.cpp

#include <iostream>
#include <test.h>

int main()
{
  Test t;
// std::cout<<t.A()<<std::endl;

  std::cout<<t.B(3,t.C,4,5,6)<<std::endl;

  return 0;
}

编译提示Unresolved overloaded type 之类的错误。

解决方法:

int C(int b1,va_list ap); 必须声明为 static

得到预期结果。


 

Outlook 2007最近更新问题

这两天总感觉Outlook 2007变得很慢,打开文件夹比较费劲。检索了一下Google,看到一则新闻,意思是Outlook 2007的最近一个更新(KB2412171)导致这个问题。

来自微软的帖子在这里:http://blogs.msdn.com/b/outlook/archive/2010/12/17/issues-with-the-recent-update-for-outlook-2007.aspx

大致说这个更新会导致三个问题:

§ Outook无法连接,如果帐户配置为安全密码验证(SPA)而邮件服务器不支持SPA的话;

§ 如果不使用Microsoft Excahnge Server的帐号,在切换Outlook文件夹的时候会感觉到性能下降;

§ 如果不使用Microsoft Exchange Server帐号,自动存档可能不能使用。

解决方法是将KB2412171更新删除。

进去控制面板>程序>程序和功能>已安装更新,对此更新卸载。

卸载完成后,一切恢复正常。

禁止Windows 7下的备份提示

我是第三方软件备份的,没有用Windows 7本身带的。恼火的是,经常出现以下提示,

image

点击进去,出现“正在启动Windows备份”窗口,然后让选择备份位置。我的机器只有一个C盘是500GB。所以实际上是无法进行备份的。

image

于是就想如何将之禁止掉,不要时不时就跳出来。

在开始菜单里,找到计划任务程序,打开(须以管理员权限打开),定位到 任务计划程序(本地)> 任务计划程序库 > Microsoft > Windows > WindowsBackup,在右面板的 ConfigNotification 上双击,弹出,

image

切换到“触发器”,在每日上双击,

image

将启用选项的勾去掉。确定保存之。

注销当前用户后,再进来。