Category Archives: Work

无线局域网

买了一个D-LINK 45m的无线路由器,扩展了项目办公室已有的有线网
试了一下由无线router接Internet,再级联交换机已有局域网,速度不甚理想
改成由无线router来扩展现有有线网,并禁止了DHCP,使得有线网和无线网可以共享打印机(无线网也静态配置成有线网一样的内部地址,由有线网的网关连接到Internet)

南师大访问

结束了两天南师大的访问。上次LU教授访兰时无缘听他的报告,这次终于听到他对模型集成,建模环境的一些看法,很有启示。也有机会亲身体会了他们项目组的工作方式和工作态度,很多方面我们可以借鉴。

完成了gimms-clip

作为了一个Qt的训练,主要是完成一个GIMMS数据集(ftp://ftp.glcf.umiacs.umd.edu/glcf/GIMMS/)的空间裁剪功能,特色在于:
  • Qt实现跨平台,国际化等功能
  • 调用GDAL完成多种GIS格式的转换
  • 可变线程来处理整个裁剪流程

完成了v1.0,可能暂时到止,以后有兴趣了,可以在此基础上再增加一些小功能,比如引进xml,将用户的配置记住等等(当然可以用QSettings,但锻炼一下学生的xml也是不错的)

放一个截图吧,已经本地化

——

前面有朋友问为什么在windows下不用mfc,我最早应该是mfc出身的,但接触的科研项目大多对操作平台有要求,国外很多学者仍是用linux/unix环境来进行科学研究,于是开始寻找一种可以跨平台的而且对于我来讲比较易学的工具(c/c++/c#背景),Qt当然是个不错的选择,只是Qt/win稍贵了一些

有关网筝

被网筝的事折腾的忙了好几天,还亏得小吴和小潘的帮助。做好“售后服务”真是不容
易。
整了一个网筝的网页: http://westdc.westgis.ac.cn/netkites
现在可以在线提交申请信息。网筝的安装有些问题,计划做一个FAQ搁上来。

今年好象比往年更忙了

如M同志所讲,今年好象比往年的事情更多了,深有同感。经费是相对充裕了,如果现在正撰写的本子能下来,在几年内就可以一心一意做研究,这也是室领导的愿意。但人员仍是很多问题,基金委项目催的紧,6月份见一个实现主要功能的数据平台,所以这上半年我的大部分精力得放到系统的实现上去,手上还有个基金,还没开始做。
今天在改本子的时候,听到一个好消息,西部的已有数据资源应该归集到我们所。早应该如此,北京已经集中全中国的数据了,西部的应该放到西部了,北京的手也伸的太长了。看来研究所进A很有好处,除了经费上的,或许这也是其中一点好处,在某些方面(至少在西部)可以与北京争一下了,希望如此。一个不好的消息,2千多万的项目至少会面临着削减一半甚至更多。
改本子很辛苦,水平也能体现出来,这些教授研究员们水平还是要高一截,写的文字看的问题比我们要广要高。

存在多个元数据标准,如何处理好呢

西部数据中心至少已经存在 地理信息元数据标准(iso或gb),和生态科学数据元数据
标准(gb),如何在一个系统里实现呢。一个方案是在地理信息元数据iso的基础上进
行扩展,使之也适合于生态数据;或者在数据中心里就启动两个metadata service,不
同标准不同service里处理;再比如象arcIms对待iso和fgdc一样来处理(具体还不十分
清楚,好象是用了synchronizer之类的进行同步和转换的)。
不知道大家有什么好的想法。

citationSearch v0.1

原来周末 sdb这个数据库被关掉了,今天(周一)发现又可以用。调试了一下,基本没
有发现问题。只是sdb对来自同一个ip的http请求好象有安全上的要求,我设定在1s内
发起6个链接,居然会引起网站的forbid,改成2s也不成,后来干脆改成10s,通过!
里面有个页面抓取的功能,出了点小问题,后来发现是 connect 被我用在了具体的操
作之后了,郁闷,如此低级的错误。
不打算再改了,也没有时间了。
准备花一两天将 GIMMS-GUI给写好,提供对GIMMS数据集的空间裁剪功能。数据中心的
事情没有太多的进展。
一做起技术就是这样,有些地方被卡住的时候,连睡觉都会梦着这些问题,不过好象很
少在梦里将这些问题解决掉的。跟一个网友聊起的时候,他说尽管你说自己喜欢做技
术,但这样不成,不睡好也就没法子干好。

这两天写了个小玩意citationSearch v0.1

目的:
从http://sdb.csdl.ac.cn 输入文章标题和作者名,获取该文章的引用次数,以及所属
的单位名
这个小玩意初步实现了批处理的功能,比如手上有1万个文章标题和对应的作者,就可
以用这个很容易的得到引用次数等信息
技术:
Qt 4.1,
当前版本,v0.1,由于这两天 sdb.csdl.ac.cn网络有问题,所以完成界面后没有来得
及测试;几个重要类是2天前在console模式下测试通过。不过最主要的难点都已经解
决,其余的就是如何做的更好的事情了。
可以学到:
* 大量的使用了qt的signal/slot机制,这种机制对写的人很方便,但对阅读的人估计
就感觉比较乱了
* QHttp的异步机制,在http返回前,QHttp对象一定不能已经销毁
* 由于QHttp的异步机制,所以程序里 顺序的渠道是无法知道什么时候http返回信息,
这样对由几个页面组织在一起,即第二页面必须在第一页面完成后才能执行,第三个页
面,又只能在第二个页面完成后执行,必须也要通过signal来通知。即第一个页面完成
任务后,通知第二页面开始工作。
* 学到了一点新知识:一个对象发出了 signal,联结到一个对象的slot,这个slot如
果企图要删除发出signal的对象时,会出错。 这种情况在此程序里出现,即我给定一
对文章标题和作者,要求执行三个页面,得到引用次数,,在得到引用次数后,这个对
象发出signal,要求联系的slot,继续给出下一对标题和作者 ,重新开始;由于异步
机制,这个对象必须是以指针的形式给出(如果是局部变量,可能会在异步返回前,这
个对象已经销毁),所以 在重新new一个对象时,必须要删除前一个已经存在的该对
象,在slot里直接删除会出错,提示QMutex共享冲突。 试了很长时间,找到一个折衷
的解决方案:
即在重新new一个对象前,将前一个对象指针先保存起来,这样就是说 在当前的slot里
不去删除该对象,但在经过一次循环后,在下一次,可以将该对象指针完全删除,而不
引用异常。
描述的比较抽象,看一些示例代码:
entry point:

aQuery=new queryCitation(author, title, this);

aQuery->setTimeout(timeout);
connect(aQuery, SIGNAL(stopped(QString)), this,
      SLOT(saveResultsAndNextQuery(QString)));
aQuery->query();

saveResultsAndNextQuery(QString):

delete preQuery; //即在下一次调用里 删除上一次的instance
preQuery=aQuery;

aQuery=new queryCitation(author, title, this);
aQuery->setTimeout(timeout);
connect(aQuery, SIGNAL(stopped(QString)), this,
     SLOT(saveResultsAndNextQuery(QString)));
aQuery->query();

* 要形成post data,看源网页的代码,很费劲,这时可以用sniffer pro等来capture
这些post data
* 正则表达式的应用,用于抓取html文件里的需要的信息

下面给出page的基础类,供具备 post data功能的页面继承
web page页的abstract class 附下,

#pragma once
#include <QObject>
#include <QFile>
#include <QHttp>

class QTimer;

class page :
public QObject
{
    Q_OBJECT
public:
page(QString output_filename, int timeout=300);
virtual ~page(void);
virtual void PostData(); //提交数据
void setTimeOut(int secs);
public slots:
virtual void abort(); //强行取消,如超时
private:
virtual QString formatPostData()=0; //根据必要参数形成post数据,保存
                                             //在 postData里,返回值没经过url 编码
private slots:
virtual void on_postFinished(int id, bool error)=0;
/*
与QHttp.requestFinished相连
注意不要与 QHttp.done相连,Qhttp.done在
QHttp.abort或delete http时都会发生
*/
signals:
void done(bool error, QString msg); //http response 结束时发生, 无论
                                                  //有无错误
protected:
QByteArray postData;
QFile receivedHtml;
QHttp http;
QTimer* timer;
};

附界面截图

Citation Search v0.1
About screenshot

Qt, asp.net项目内交流

由于项目内新进了一些人员,前面给大家布置了一些任务,前后也有一个月了,今天让
大家做了一下自己的学习报告。很高兴大家都还是花了力气去做这件事情了,但从心底
讲,都没有达到期望值,也许是对大家的基础没有把握,期望过高了些。
不过希望大家能齐心协力将布置的事情做好,学生还是处在能力培养的阶段,尽管说现
在的工作形势比较严竣,但我相信那是对一般的学生,对有能力的学生,我想不出应聘
单位不要的理由。毕竟现在已经不是以前靠拍马屁就可以过的很好的时代,特别在公司
或科研单位,当然如果有能力嘴巴又比较甜的就更好,但有本事是最重要的,谁也不会
要一个不能干活的人。
其实呢,在整个项目里,Qt和asp.net还只是工具。就是种田,也要会用锄头吧,Qt和
asp.net就是锄头。大家还没有真正接触到项目呢,我的意思是说,大家要学的东西真
还是很多。我本人喜欢做技术,也很喜欢和尊敬能踏实做技术的人。我希望通过培养,
能形成一个真正的具备足够技术水平的团队,这也是大家所乐意见着的,但需要大伙一
起的努力。
我相信大家都会做的很好。