Gdal v1.13

默认的Gdal 1.13 submake.bat utility是执行/MD,而默认启来的vc 7.1项目的debug
下是/MDd,这时可能在GDALClose()时会出现异常。可以不理,也可以将/MDd改成 /MD
另外,如果要更改Gdal的编译选项,在Gdal 1.13下找到 nmake.opt,更改对应选项即

Gdal与Qt的连接,暂时还有一个问题没有解决,即在Gdal回call自己的
GDALProcessFunc(一个函数指针,原型是typedef int (CPL_STDCALL
*GDALProgressFunc)(double,const char *, void *);)时,如何将c++类里的
function赋给这个函数指针);目前只能在全局level上才能回call,但这样就不能使
用Qt强大的emit功能了。

QHttp post的一个问题

有一些网站必需要求 cookies,这些在使用QHttp request前,必须在
QHttpRequestHeader里设置 正确的cookies,否则可能不正常工作,in the
citationSearch case,会提示被禁止访问。具体作法可参考 citationSearch源代码。

1. 可以在程序里 实例化多个 QHttp

2. 最好用 requestFinished(int, bool)来截获请求的完成情况,而不是done(bool);在进行abort()或delete QHttp时,都要emit done

3. …

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

ArcIMS 9 with Tomcat 5 安装的一个补充

作为对以前那个ArcIMS 9安装的一个补充,
按以上步骤完成后,执行诊断不能通过(提示找不到页),别担心,
在tomcat菜单下找到 tomcat manager,进去后,点击  application list,看/servlet是否已经起来,如果起来就是正确的。另一个检查的法子是,在ie里键入 http://localhost:8080/servlet/是否好用,如果好用证明tomcat安装正确了,只是redirector没有起作用。
 
打开 redirector下的conf (我的位置是 C:Program FilesApacheJakarta Isapi Redirectorconf),找到 uriworkermap.properties,打开,添加 /servlet/*=wlb
保存,重启 tomcat (?,可能不是必需),重启 iis admin service,和www publishing service
再试你的diagnoise,看test 1和2是否好了!

网上南氏宗祠

趁午休期间,在网上瞎逛,先是有老乡告诉我网上现在有一个叫柳市论坛的,让我去看
看。不过人不多,没啥新玩意,不到在里面看到有人帖了个南氏网上宗祠的地址,原地
址失效了,在google里搜索,是以下地址,
http://mem.netor.com/m/zc/zc.asp?bID=38040
在留言里看到很多同姓人的留言,才发现原来这个姓在全国很多地方都有分布(河南省许昌市鄢陵县, 河南濮阳,河南舞钢,山东济南市历城区,山东莱州,山东菏泽,山东临沂,山东潍坊,山东高唐县南王庄, 安徽淮北黄里村, 湖北黄冈浠水, 山西省洪桐县大槐树, 江苏淮阴, 河北保定,河北廊坊,河北沧州南皮, 上海, 温州乐清, 黑龙江省密山市,江西省樟树市,……)。山西大槐树估计是个比较重要的来源,河北等很多地方的朋友说自己祖上是从那儿搬迁来的。此外,河南好象也有重要的一支。回顾上一个关于姓氏的帖子,发现自己对这个姓的了解很是浅薄,据说全国有2万人这个姓的人,不过我也怀疑这个数据有多少说服力。再向前翻留言,居然看到一位跟我妹同名的上海女孩。这个世界真是很有意思!
兰州〇六年的第三次雪了,不过小,落到地上很快就化掉了。
工作千头万绪,感觉茫乱。
W向我打听结婚的手续,估计他们要结婚了,先恭喜一把!

五一和朵朵

这两天不小的雪(2006年的第一场雪?),整个城市都被白雪覆盖,看着树枝头压着雪
绒,才发现这个城市,如果没有污染的话,会是怎么的漂亮。
昨天到小W家吃火锅,两个小孩,五一和朵朵玩的很高兴,朵朵就一直跟着五一后面,
模仿五一的动作,然后两人一起在床上蹦跳,很少见着玩的这么开心的。小孩好象有他
们自己的语言,他们讲的话,我们未必每句都懂,但好象并不妨碍他们间的交流。最后
小帅哥小美女趴在窗台上面,冲着窗外街道上的行人大叫“小姐”。小W夫妻直叫五一
被朵朵带坏了。给他们拍了一小段录像,作为留念。

春节快乐

今天是狗年第一天上班。总的讲,这是个愉快的春节,一家三口在一起,过的很高兴,
朵朵也越来越好玩了。
中间一个小插曲,某天晚上,朵朵将葵花籽塞到鼻子,弄不出来了,吓得我们跑了一趟
急诊,好在医生用专业的工具,很顺利就取出来了,而朵朵居然已经睡着了。笑着跟媳
妇说,朵朵第二天一早醒来,会不会以为睡一觉,鼻子就顺畅了,下次塞住了,就睡觉
好了。次日问朵朵,果然她又玩开了,全忘了昨日鼻子不舒服的事了。

写了几个字,大家看看如何

跟在下面,“集思学院” for cngis.org,大家看看如何,有没有一点点书法的味道
 
——真是很不错,不是吗? 但正如大家所想的,这是经过处理的。要给大家推荐的一个软件叫Ougishi,来自一个日本作者,可以将自己写的字处理成各成不同风格的毛笔字,如王羲之体,黄庭坚体,以及很多可以定制的选项。试试吧,我估计你也不敢认自己写的字了!
不能不感慨的是,中国人现在是普遍不会写毛笔了,日本人却在那里发扬光大!