Category Archives: Work

这两天写了个小玩意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就是锄头。大家还没有真正接触到项目呢,我的意思是说,大家要学的东西真
还是很多。我本人喜欢做技术,也很喜欢和尊敬能踏实做技术的人。我希望通过培养,
能形成一个真正的具备足够技术水平的团队,这也是大家所乐意见着的,但需要大伙一
起的努力。
我相信大家都会做的很好。

Pda——Dell axim 51

新买了个pda,媳妇总说我象个小孩,有个新东西就到处给人展示,唯恐别人不知道似
的,也许吧
不过最早的想法,还是来自本科生的选题,我感觉有必要找人把mobile gis做一下。呆
在单位的一片小天地里不知道外面的情况,一位从事地矿工作的朋友来兰路过,发现他
们出野外mobile gis已经用的很广泛了,不仅在跟gps结合,即时将自己的位置显示在
pda的地图里,还用于野外填图,那是很厉害了。我们现在初步的很不会。
所以定了个本科生的题目,叫基于mobile gis的兰州市电子地图。
然后我花了一个白天一个晚上的时候来看pda的相关基础知识,ppc和pc还是有很大区
别。
一个设想,也许我们可以将兰州市电子地图打包,通过arcpad,提供一个可安装包,也
许可以卖钱。
不过L老师看了我这帖子估计要说,先做好行内的事吧,自己的事都完成不了,还想这
个想那个。也是也是。

拉下了很多事

时间不如以前多了,周末已经不是属于自己的时间了
不过好在装修已经完成,还都是老婆一人做的,我基本没参与。以后也许周末会好一
些,不过今年已经过去了
上周W, Q和我讨论了一下world bank proposal的内容,花了两天时间写了一个,最后
翻译成英文submit上去了。不过有种预感,希望不是很大,主要还是因为主题不是很贴
切。今年的主题是water use, sanity和energy,我们的内容是关于环境的,勉强放在
water这个sector下面。很可能会被组织者因为主题不符被毙。我上次递交的IGRASS,
也很不幸被退掉了,问题也是出在没有递交到合适的sector里去,老外对这个很注意。
而后的几天看了一些asp.net的东西,想在周五前能整理一个这方面的内容与项目组内
的成员共享。结果没有来得及。周五下午P和X做了arcIMS和 dotnetnuke方面的报告,
dotnetnuke这种cms (content management system)很不错,很适合以后的网站开发,
在国外现在有不错的应用。而且在与他们的交流中,发现asp.net 2.0与以前的1.1又有
不少的改变,比如2.0里又扔掉了1.1的code behind技术,再度采取inline code或code
beside。我个人而言,却是很喜欢1.1的code behind,可以将网站编辑人员与coder的
工作分开。不过code beside在vs 2005里可以实现类似的效果。vs 2005的英文版出来
了,中文版的发布前宣传在12.2已经展开,不日大概可以看到正式发布了。小X还是做
了不错的工作,在学校里上研究生的,讲课的机会比较多一些,讲的条理很不错。小P
可能因为以前离技术比较远,所以目前来看,还需要更加努力。
Z前面问了几个关于Qt里ActiveX的调用问题,却没有时间看他的代码,这周要找时间补
上了。Qt 4.1又出来了,不过变化不大了,已经进入比较稳定改进的时期,在性能上有
一些提高,及修改了一些bug。DSS的工作还是比较看好,数据中心人员却是一个问题。
上上周跟兰大计算机系的L教授谈了一下从他们那带研究生的事,这周也不知道在忙什
么,没有时间再跟他们联系一下。研究生过来可能一下子也干不了活,但如果有比较出
色的学生,通过一段时间的学习,可以很快的上手。毛主席讲的人多力量大,在干技术
这活上面有时候也是对的。当然有能干的人很重要,找对了一个人,一个项目可能很快
就上轨道了,否则多干个一年半载也未必能有进展,这话不知是谁跟我讲过的,我感觉很对。
小P正式成为遥感室的职工了,周五请我们在一个日本餐馆请我们吃了一顿,小P在日本
呆了两年,动作都已经很日式化了,哈哈,不过不知怎么回事,从心底,我并不喜欢日
本这个民族,感觉这个民族比较变态和血腥。我却是一个吃不下生鱼片的人。

会议顺利完成

会议如期进行,共9个报告,从上午8:30到晚上近6点结束。气氛还不错,有一些讨论。来的人也不少,早上应该不少于80人,晚上结束的时候会议室仍是满
满的,c老师很高兴,说至少说明了模型集成能吸引不少的人。大部分的报告不错,一些学生可能初次报告,紧张,或者没抓住重点,在有限的时间内没能将自己最
精彩的内容讲给大家。
c老师谈到这里是醒得早,但起得晚。很多概念或工作都是这边先开始,但基础跟不上,后劲不足,别人一听这些东西不错,就开始组织人做,结果被人赶上并超
过。外因内因都有,很头疼。可能这就是为什么这里是兰州,而不是北京的缘故。看得出,c老师也有点无奈,大环境如此。水向低处流,人往高处走。正常的事,
勉强不得。

准备11.27号的黑河模型集成项目’05研讨会

收到9个报告要求了,与c老板商量后,将会议时间延长到一天,每人时间45分钟,这样发言时间就比较充裕了。以往正式会议报告,时间总是只有15,20分钟的发言,5分钟的讨论,这样短短的时间问题根本就没能讲清楚,那种报告的目的只能说是混个脸熟,让与会的人知道有你这么个人,在做这件事情,至于真实的工作情况,只能是底下再交流了。但这次既然叫研讨会,就想着要真正做到研究讨论的目的,要有时间让大家将自己的问题讲清楚,然后有充足的时间来讨论存在的问题。所以时间放的比较长,不过这样参会的人可能也会比较累一些了。但如果真能学到东西,我想大家不会有人介意辛苦不辛苦的。
参会的主要是年轻人,加上c老板也能与会听取大家的报告,相信会有个好的气氛。

出差

清华组织的一个内陆河流域水文国际会议,27-29号,估计30号能回来
听河海的jane讲河海月底也有一个国际会议Hohai2005,不过好象所内的人对河海的工作不感兴趣。好象做研究的人看不起作应用,生产的人,有这个毛病。河海的水文水资源方面的水平还是很高的。只是太偏向于做工程生产项目,听说钱挣了不少,每个老师口袋里都是鼓鼓的。
看了一下Hohai2005的网页,内容对我来讲,好象比清华的更感兴趣,
 
在New thread forum上看到一句话,很好,摘录下来做为此日志的end.
“为什么我用黑色的眼睛寻找光明,看见的总是无边的黑暗?”

不妨先体验一下trac

大家先不妨体验一下trac的power。这是西部数据中心项目合作和交流平台的一部分。这个网址:http://503.mygis.org/trac/labForum
trac的配置还没彻底调好。
合作和交流平台设想是包括 forums (http://forum.westgis.ac.cn,可能要重新布置一个,但采用同样的系统),
mailList(基于mailMan,已交给亮子来完成界面的调整),instant messenger(msn
messenger),网络会议(基于netmeeting),m2f(电邮到论坛的双向互动),subVersion(版本管理)和trac(基于
web的bug trace和new feature
request系统)。这样就比较完整了。trac可期望在本周完成调整。m2f还需要比较大的工作量。希望亮子的mailList调整这周也能拿出来。
这样合作和交流平台的工作量基本就可以告一段落了。以后就是看如何利用了。

Installation of Trac 0.84

1. pysqlite必须是1.16,不是是2
2. trac 0.84必须是 python 2.3,而不是2.4
3. 将各个组件安装好,包括 python 2.3, clearsilver-0.9.14.win32-py2.3.exe,
pysqlite-1.1.6.win32-py2.3.exe, svn-win32-1.2.3_py.zip,
docutils-0.3.9.rar,and
trac-0.8.4.win32.exe,都很简单。对svn-win32-1.2.3_py.zip解压缩后,将其中的内容copy到
python23/lib下。对doctuils-0.3.9的内容,解压缩后,运行python setup.py install即可自动安装
3. python trac-admin trac-db-name
3.1 using trac-admin trac-db-name to customize settings.
3.2 copy trac/cgi-bin/trac.cgi to apache2/cgi-bin
3.3 add permission to trac: permission add admin TRAC_ADMIN or something like
3.4 httpd.conf的配置
    Alias /trac "/wherever/you/installed/trac/htdocs/"
    <Location "/cgi-bin/trac.cgi">
        SetEnv TRAC_ENV "d:traclabForum.db"
    </Location>

    # You need something like this to authenticate users
    <Location "/cgi-bin/trac.cgi/login">
        AuthType Basic
        AuthName "Rslab forum project"
        AuthUserFile /somewhere/trac.htpasswd
        Require valid-user
    </Location>
4. it might work now!

更将至 0.9b1后,要重新修改apache下的trac.cgi,我因为这个找了很长的原因。
在系统变量的path里增加 c:python23; c:program filessvn-win32-1.2.3/bin。由于apache做为service运行,所以得重启一次。否则trac网页浏览的时候会提示找不着 DLL
如果提示找不着log模块,将trac下的Log.py修改成log.py即可。这是一个已知的bug,可以trac的官方网站找着。