Category Archives: Work
无线局域网
南师大访问
完成了gimms-clip
- 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搁上来。
今年好象比往年更忙了
存在多个元数据标准,如何处理好呢
标准(gb),如何在一个系统里实现呢。一个方案是在地理信息元数据iso的基础上进
行扩展,使之也适合于生态数据;或者在数据中心里就启动两个metadata service,不
同标准不同service里处理;再比如象arcIms对待iso和fgdc一样来处理(具体还不十分
清楚,好象是用了synchronizer之类的进行同步和转换的)。
不知道大家有什么好的想法。
citationSearch v0.1
有发现问题。只是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;
};
附界面截图
Qt, asp.net项目内交流
大家做了一下自己的学习报告。很高兴大家都还是花了力气去做这件事情了,但从心底
讲,都没有达到期望值,也许是对大家的基础没有把握,期望过高了些。
不过希望大家能齐心协力将布置的事情做好,学生还是处在能力培养的阶段,尽管说现
在的工作形势比较严竣,但我相信那是对一般的学生,对有能力的学生,我想不出应聘
单位不要的理由。毕竟现在已经不是以前靠拍马屁就可以过的很好的时代,特别在公司
或科研单位,当然如果有能力嘴巴又比较甜的就更好,但有本事是最重要的,谁也不会
要一个不能干活的人。
其实呢,在整个项目里,Qt和asp.net还只是工具。就是种田,也要会用锄头吧,Qt和
asp.net就是锄头。大家还没有真正接触到项目呢,我的意思是说,大家要学的东西真
还是很多。我本人喜欢做技术,也很喜欢和尊敬能踏实做技术的人。我希望通过培养,
能形成一个真正的具备足够技术水平的团队,这也是大家所乐意见着的,但需要大伙一
起的努力。
我相信大家都会做的很好。