Monthly Archives: April 2005

关于qt国际化

qt对国际化有很好的支持。但默认的是unicode编码。中文系统下默认的并非unicode,
而是比如gbk或gb2312。所以在进行const char*参数传递和显示时必须特别注意。
比如在默认情况下
QMessageBox::information(this, "Test", "这是一个测试");
中文字符无法正确显式
又如
bool connect(const char * connectString);
你如果输入
QString str("一个测试");
connect((const char*)str);
默认是调用QString.latin1()方法,是直接从Unicode的QString返回latin-1字符表示
集。在中文系统下有时不是你想要的。
解决方案:在main.cpp里增加
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
这时涉及到QString/QCString到const char*的转换将使用本地的编码集。
类似的还有setCodecForTr()方法。

NOTE: 这跟qt使用unicode进行内部通讯、显示并不冲突。当显示一个const char*时,
qt会将const char*再行转成unicode。

win server 2003下windows程序安装不了的问题

给程老师安装biblioscape的时候(windows server 2003 enterprise edition英文系
统),发现双击安装文件,提示类似c:windowssystem32autoexec.nt. The system
file is not suitable for running MS-DOS and Microsoft Windows applications.
Choose "Close" to terminate the application. 无论半击Close还是Ignore,安装无
法进行。
以前没遇到过。后来搜索了一下c盘上的autoexec.nt,发现在repaire目录下有一
autoexec.nt,将之拷贝到c:windowssystem32以面。再双击安装,正常通过。
这应该是以前误删除autoexec.nt造成的。

Migrating TerraLib 3.0 from vc6 to vc7.1

TerraLib 3源代码里提供了vc6的项目文件,在vc7里编译通不过。需要做一些更改:
1. STLport 4.x不支持vc 7,需要从stlport网站下载最新的5.0 rc2(现时),编译成static library后,将include文件和library都替换成5.0的
2. vc6项目里的include列表需要重新设置,去掉不必要的,用分号(;)分开
3. 将TeGeosWrapper.cpp/.h从项目里去掉,它们需要geos.h,在terralib 3里没有包括这个头文件
4. 在checkvec.h里的
     typedef typename checkedVector::size_type size_type;
     typedef typename checkedVector::iterator iterator;
     typedef typename checkedVector::difference_type difference_type;
     typedef typename checkedVector::reference reference;
     typedef typename checkedVector::const_reference const_reference;
注释掉,否则将提示“fatal error C1202: 递归类型或函数依赖项上下文太复杂”。
5. 再编译通过。连接的问题还没涉及到,遇到再描述。

积温内插算法

积温内插算法断续做了1个多月,终以失败告终。科研是允许失败的,只能这样安慰自
己。
事情太多,头绪太乱,有点找不着感觉了。象小冉讲的,很少能睡个安稳觉,梦里也总
是还萦绕着白天的事情。

sourceOffSite 4.1 并发问题

发现当有多个用户同时连接上sos server的时候,server停止反应。
解决方案:
server端
(1)确认在vss目录下的win32目录下的ssapi.dll版本号是以98.48结束
(2)将
HKEY_CLASSES_ROOTCLSID{783CD4E4-9D54-11CF-B8EE-00608CC9A71F}InprocServer3
2ThreadingModel 的值department,改为both
(3)将实时扫描的anti virus程序设置为排除sos database目录
client端
(4)客户端将最新的windows安全补丁都打上

上帝掷骰子吗——量子史话

这本书真的写的不错,语言很生动,流畅。作者看起来(至少在我这等外行人眼里)对
物理特别是量子这一套东西很了解。看到里面提到两名大名鼎鼎的人物(托马斯·杨和
薛定谔),突然想起一件事,某个有名的主持人写了本书,里面提到中国的华人是如何
的出色,当然不可避免地提到了象杨振宁等,但很不幸,他将上述这两位地地道道的老
外都当成华人呢,原因恐怕是一个姓“杨”,一个姓“薛”,而且后者看起来真的很像一个华人的名字。

另一个感触,里面提到的人太厉害了,成名的时候都才二、三十岁。而且出了这么多的nobel奖,真是了不起。

这本书新浪读书网里有,也可以从google里搜索找到。推荐一下。

龟兔赛跑悖论

先复述一下这个悖论。乌龟与兔子再次赛跑了,这次兔子让乌龟先跑10米,兔子再起
跑,按芝诺的结论是,这样兔子永远追不上乌龟,为什么呢,因为兔子在跑完10米的时
候,乌龟又向前移动了一些距离,不管这个距离有多小,然后兔子又花时间去完成这个
距离,但在同样的时间内,乌龟又向前移动了一点点,这样的结果,是兔子永远也追不
上乌龟。但大家知道,在现实中,跑的快的兔子毫无疑问能追上乌龟了。
芝诺混淆了时间跟“时间段”的概念,元限的时间段累加起来却是一个固定的时间。正
如庄子讲的棰的故事,一尺长的棰子,每天取一半,万世也取不完。庄子讲的是长度,
但跟龟兔赛跑的时间是同样的道理。无限的长度段,累加起来才是一个固定的长度。
今天在新语丝上也看到一个悖论,也是关于时间的。老师在周末的时候告诉学生,
(1)下周会考试;(2)下周考试的时间你永远不可能想到。有学生就根据这2个条件
进行推论。首先,不会是周六。因为如果周一到周五不考试,学生就知道周六考试,这
不符合条件2。其次,那么,既然周六不考试了,就剩余周一到周五了。如果周一到周
四不考试,那么就是周五考,学生也知道了,所以不会是周五。依此类推,也不会是周
四,周三,周二,和周一。结论是下一周不会考试。但下一周老师真在某一个时间考试
了,结果学生谁也没想到。
很有意思的逻辑题。新语丝上的张远山给了一个他的关于考试悖论的想法,却引来很多
网友的不同看法。不过真是很有意思。

PHP和MySQL的License问题

很有意思。事情原委如下,
MySQL的许可分两种,一种是基于GNU开源协议,一种是商用协议。前一种更具体的讲,
MySQL的数据库是基于GPL协议的,但一些client libraries是基于LGPL的。MySQL这不
在Web应用上取得了比较大的成功了,一些商用软件就连接到这些client libraries上
面(这是合法的),从而跟基于GPL的MySQL数据库核心间接连接起来。这样这些商用软
件就不用买MySQL了,损害了MySQL的利益。
所以MySQL在某一天决定将这些LGPL的库也改成GPL了,因为GPL规定使用GPL的软件也必
须以GPL的方式公开出来,这样就可以防止商用软件的上述情况了。
Linux下,有个词叫LAMP,意指LInux+Apache+MySQL+PHP是最佳组合,性能很高配置很
容易。PHP将MySQL的client库就嵌入到它的源码里。PHP从4之后改成APL,而不是GPL。
MySQL的更改库许可的决定,意味着如果PHP继续用MySQL,也必须基于GPL协议。而APL
和GPL是有冲突的。所以PHP只能将MySQL的集成模块从自己包里移出去。
这并不意味着用户不能将PHP和MySQL连在一起,对用户的使用来讲是没有问题的,基于
PHP和MySQL的开发只能基于GPL也是许可的。但对PHP来讲,使用MySQL就和使用其他数
据库,比如Oracle等没有区别了,处在一样的位置上。
类似的情况还危及到MySQL与RedHat等多家开源软件的关系。所以MySQL出于利益的考
虑,在04年又决定给出一个exception,即在得到他们授权的情况下,开源软件是可以
将这些client库集成起来,而不用担心GPL的限制。但PHP 5推出了SQLite,仍没有将
MySQL重新集成起来。
因为PHP是纯免费的东西,PHP公司据亮子讲,也是只买附加产品的,所以他们的分离对
PHP的利益影响不大,而对MySQL,因为它还靠它的商业License挣钱呢,跟PHP分离,对
它的影响就比较大。所以有这种举动,也可以理解。
跟亮子在讨论它们间的License关系,找了几个中文的报道看,都不大正确(中国记者
的水平由此可见,都在乱写一通),而英文的报道相对较少。将英文报道跟英文论坛上
讨论的问题综合起来,写了这个东西,应该是正确的。