我恨微软!

Bill_Gates.jpg今天花了一下午用VC+openGL写图形学那个扫描线算法,本来想着用STL现成的list的就行了,没想到list.sort()那个函数竟然不能接我写的函数对象,总是说不能把这个对象转换为greater。我调啊调,还是那句话,就晕了,这和greater有什么关系?难道我用错了?去翻Bjarne Stroustrup的蓝宝书TCPL,上面写的自认为和我的做法没区别。

无奈,google一下,N多人在问:how do I use STL's list's sort method (the one that takes a parameter)... 就是没人答得沾边,好不容易看一个人回复了一段可是work around的程序,读了半天发现是他把list倒腾到vector里面排序再倒腾回去。我当时就想抽他~

最终我看到了最让人郁闷的网页,来自可爱的Microsoft...
BUG: The STL list::sort() Function Doesn't Sort a List of Pointers

原来VC6的STL代码里面
template ;
void sort(Pred pr);

错写成了
void sort(greater pr);
导致无论什么参数传进去,编译器都愣要转成greater
RESOLUTION里面说的解决办法和没说一样,重载greater...所以我一气之下,干脆把greater直接当小于号用了,微软都这么干,我怕什么啊!

MS写代码的人啊,你rp哪里去了!记得上次就是因为STL库里面的另外一个BUG,让友元都不能访问私有成员,也让我调半天。没想到VC6打了sp6也不管用,还有这么严重的BUG。一看时间——Last Review : July 5, 2005,VC6推出都多少年了?

一个下午就这么过了,我恨微软!!!

正则表达式没有AND逻辑

这几天在家,也没什么事,只好继续干枯的学术,见谅哈...

今天弄那个实验室的检索系统,用mysql的正则表达式做搜索功能,发现正则表达式竟然似乎不能表达AND逻辑。具体说来,就是如果我想匹配一个字符串,包含“北京”、“天津”、“上海”,顺序不限,就很难用简洁的正则表达。除非多次匹配,或者弄个三个地名的全排列来...

查了很多的资料,发现只有OR逻辑——(北京|天津|上海)。似乎正则表达式对顺序的要求很严格,仔细想想具体匹配算法,要一次找出这种排列的匹配,最简单的算法恐怕就是多次匹配吧。

记得第一次听说正则表达式这东西,觉得真是!@#$%^&啊!让我佩服得五体投地,无论是强大的功能还是乱码一样的表示_-_...

\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b,第一次看到这样的表达,谁都会发狂吧。至今我也没完全弄明白里面的符号含义,不过好在会一些实用的就够了。

可想而知这个匹配的算法……想想我就已经顶礼膜拜了。

网上的资源
正则表达式30分钟入门教程(简洁实用)
微软的正则表达式教程

突破封锁的Torpark

今天偶然看到的一个新的“洋葱头”浏览器,功能很适合教育网内的用户——自动代理。由于是在家用ADSL,没法测试教育网内的使用情况,不过我用它访问了一下被国内封锁的Wordpress.com,速度很不错的,以后不用到处找代理啦^_^

发现它其实个定制的Firefox,官方网站:http://torpark.nfshost.com
国内可以到http://www.onlinedown.net/soft/46665.htm下载。
中文使用手册(如何换成中文界面):http://torpark.nfshost.com/cnmanual.html

下载后解压到任意目录,不用任何设置,就可以用了。下面是摘抄的一些介绍。

能访问被屏蔽的网站的优秀浏览器torpark,其最大亮点就是全自动的代理功能,这种代理功能得益于一个叫做tor的网络平台(官方主页是tor.eff.org)。tor是新一代的socks加密代理服务软件,每个用户都可以在自己的计算机上运行tor软件,以便成为一台代理节点。把无数运行tor的计算机连接起来便构成tor网络。最终,一条条数据传输线路就在这个庞大的网络中产生。而用户机上的tor还可以为应用程序提供socks的接口支持,这就是torpark何以如此强大的原因。但由于tor软件本身的配置比较复杂,所以我们一般的应用就使用torpark即可。

blog故障日志

最近mysql都不是很稳定,所以blog没法访问我也没在意。

回来后,发现mysql可以读取,但php不能get参数。查了点资料,用phpspy察看了一下环境变量,果然php.ini的register_globals变成off了。
sigh,也怪写php时犯懒没用_GET[]...教训啊,现在受php.ini的气。我又懒得和弄服务器的人废话(又和我扯安全性...),难道我就要全改成_GET[]???

还好,查到这样一句,可以把_GET[]之类的自动导成全局,放到config里面一include就完事了。哈哈,看来像我这样的懒人还是有不少...
import_request_variables("GPC");
如我所料,一切恢复正常。

可是blog的问题还是没有解决,症状是白页,就像网页还没有下载完(进度条停在中间),似乎服务器端的php在死循环。没办法,从index.php开始,注掉代码逐渐恢复的方法来查,这可是wordpress啊,天知道我要查到哪里才是头?还好,才include了几个php就出现了问题。最后锁定到wp-db.php的function query($query)。晕死,所有访问数据库可都是这个函数,原来好好的也没人动怎么会出事?

罪魁是这句:@mysql_fetch_field($this->result);函数死在这里怎么也不返回了。还好,整个wordpress也都没用到察看数据表的field名(天知道他写这句干什么,可能为以后升级准备吧)。果然,注掉获取field信息的这一段循环,blog就活了。

后来,索性趁热打铁把wordpress升级到了2.0.3,换了大名鼎鼎的k2,一个k2_mod的清新theme,自己做了个logo,然后装了个据说好用的Sidebar Widgets Plugin。接下来就是烦人的调整,改CSS,调sidebar(插件根本不好用,还得自己写代码,除了那个动态的拖曳比较酷)……

弄了一天才算基本搞定。同时,还发现2.0.3的一个bug,友情链接的分类管理中的“格式”不管用!看了links.php才发现根本没写在代码里,看来2.0.3出来还真是匆忙(记得2.0.1里面没这个功能),改两句话,一切OK。

仔细想想,估计是服务器进行了升级(包括php和mysql),造成运行不稳定(来回调参数:()。mysql_fetch_field可能是管理员限制了数据库的权限吧,可是也没有死循环不返回的道理啊,看来要追究php4-mysql模块的责任:)

总之,现在一切问题都基本解决了,还真是麻烦。以后要注意经常备份数据库!要不然,服务器挂了哭都来不及...