2007-05-21

SC2中神族的母舰实在是太强了!

刚才看了那段SC2的演示Demo
神族的母舰可以创建一个时间缓慢场,在那个场中只有神族的航母可以以正常的速度行动,其它的东西的运动都慢得近乎于静止。。。
这个还不止。。。竟然还可以创建一个黑洞!!! Oh,My GOD!!!!!!!!
庆幸的是似乎在一场战斗中只能拥有一架这样的怪物。

SC2的韩国发布会现场:(成堆的丢韩语,只有后面讲E文的时候听得懂 -_-|||)
http://www.tudou.com/programs/view/08zXR3IBE1U/
//EOF Read More...

2007-05-20

FoxTorrent...

汗一个。。。想不到还有做 FireFox 的BT下载插件的。
详见: http://www.foxtorrent.com/

一年前曾经用过 FF 的插件 DownThemAll,也是个多线程、断点续传的下载插件,刚开始的时候还觉得比较新奇,用了一段时间后还是觉得没的专门的下载工具好。

尝尝鲜是可以,但我还是不看好这个 FoxTorrent
我个人是比较喜欢 FF 的,但是。。。有一点,就是 FF 的内存占用确实。。。尤其在游览某含有海量大幅图片的网站后,内存一直居高不下啊。。。而 BT 这个东西是要经常挂的。。。这样的话还不如命令行下面的小巧BT工具划算。
//EOF Read More...

2007-05-14

Parse error: unexpected $end in xxx.php

"Parse error: syntax error, unexpected $end in xxx.php on line 1517"

出现这么一条莫名其妙的错误,1517行又是文件的末尾,真是莫明其妙。
其实,出现这种错误大多是由于文件中不匹配的 括号("()","{}")特别是掉了某个结束括号 引发的。

仔细巡查文档,发现原来在删除一段代码块时多删除了一行(那一行就是一个"}"符号)所致。

所幸,我写的代码格式还算规范,加上使用了VIM这种优秀的编辑器,这样我才能这么快的找到问题所在。

所以说嘛,书写规范格式的代码 是很有必要的!
要不然,就只有通过某种优秀的代码编辑器在成堆的代码中艰难的苦苦探寻才能找到找出问题了。:)
//EOF Read More...

2007-05-13

undefined reference to `vtable for xxx'

C++ 程序链接的时候出现这条信息 往往是有 虚析构函数 出现在基类中而又没有相应实现的情况。
解决方法:
给这个 虚析构函数 一个函数体,或者是定义成一个纯虚函数。

而在 QT 中出现这种情况 很可能是由于在该类中使用了Q_OBJECT宏
(见:http://blog.sina.com.cn/u/496ad465010007sk
http://blog.csdn.net/baymoon/archive/2006/11/23/1409167.aspx
和moc文件相关,解决方法,删除掉 *.o 再重新编译一次。
(对于KDevelop生成的qmake之外的工程,要到./debug/src 目录中删除掉 *.o 还有那些 class-name.moc.cpp ,然后重新编译)
//EOF Read More...

终于决定用Tor了

托我们伟大的国网(GFW)的福,这两天blogspot又不能访问了。。。
而以前的两个代理inblogs和pkblogs又都下线了,不想找别的代理,终于描上了以前听说过的Tor。
其实,原来别人也推荐过我用Tor,主要是保密方面的因素,而我平常也没什么好保密的,也就没有方在心上。
实际上Tor的特性决定了它在除通信保密之外很强的一个用途——可以当作灵活的代理来用——当然为了不要占用大家的资源只能用来作些通信量较小的工作,下载大文件那是最好不要做的。

安装配置方式,使用方法,Tor的主页上都说的很清楚了:
http://tor.eff.org/index.html.zh-cn

//EOF Read More...

2007-05-10

王蓝一

哈哈,以前不是没时间就是忘记了。今天趁着还记得上网搜索了一下
才知道 原来她叫做“王蓝一”,不过还真的有叫“蓝一”……
其实,还是蛮好听的,呵呵。

中央台天气预报的主持人。
我第一次看到她就是“朝闻天下”插播天气预报的那短短的片刻。
虽然只是片刻的时光却给我留下了深刻的印象。
一身职业装、一头短发,鲜明简洁,微笑,亲切,充满朝气(感觉她最适合作“朝闻天下”气象播报的主持人了,就是每天都早起的话太辛苦啊~)
早上能够见到她,那一天都能感觉神清气爽。偶尔几个早上见不到她,不免感觉有些失落。

不过,“中国气象信息网”上的照片都是长发的,还是感觉短发的她——“朝闻天下”气象播报中的那种装束 更加漂亮,更加动人。
似乎比我大呢,70年代末的(会不会对我们80后的有成见呢?)
哈~想这些干嘛?先做好我份内的吧,就像她的座右铭——“也许你不是最优秀的,但记住你一定是唯一的”
//EOF Read More...

2007-05-09

callback 在 C++ 中的使用

C++ 的class中只有用 static 的公有成员函数才有可能作为参数传递给 callback。
但是 static 的成员函数却不能访问非 static 的成员,因为对于static来说this指针是没有意义的。

那么有个变通的解决方法:自己搞一个 ^_^
——用一个该class的指针作参数,通过该参数来变通的访问类的实例。
如下:


#include <iostream>

using namespace std;

typedef int (* FUN)(int,void*);

class AA {
public:
   int aa;
   static int fun(int n, AA* a) {
      return a->aa>>n;
   }
};

int f(int f, void*)
{ return f<<2; }

void p (FUN callback, void* arg=NULL)
{
   cout<<callback(8, arg)<<endl;
}

int main ()
{
   AA a;
   a.aa = 0x1000;
   p (f);
   p ((FUN)AA::fun, (void*)&a);
   return 0;
}

对此,pthread_create 最后一个参数的魔力就体现出来了。
//EOF Read More...

2007-05-05

黑盒测试 和 白盒测试

以前学过的东西,基本忘记了。。。再从书上抄下来加深点映像。

黑盒测试(功能测试)

已知程序具有的功能,检验每个功能是否能正常使用。
(它只检查程序功能:是否能适当地接收输入的数据并输出正确的信息,并保持外部信息的完整性。)
测试以下几个方面:
  1. 不正确或遗漏的功能。
  2. 界面错误。
  3. 数据结构或数据库的访问错误。
  4. 性能错误。
  5. 初始化和终止条件错误。
有以下几种方法:
  • 等价分类法
      按输入条件把输入的数据划分为若干等价类
  • 边界值分析法(BVA, Boundary Value Analysis)
      经验表明,大多数错误都发生在输入的边界值上。
  • 对比测试法(背靠背测试,back-to-back testing)
      通过不同开发的相同功能冗余系统来对照

白盒测试(结构测试)内部功能测试

已知程序内部工作过程,测试动作是否按规格说明书的规定正常进行。
(按照程序内部的逻辑,检验程序中的每条通路是否能按预定的要求工作。)
原则:
  1. 保证模块中每一独立的路径至少执行一次。
  2. 保证所有判断的每一分支至少执行一次。
  3. 保证每一循环都在边界条件和一般条件下至少各执行一次。
有以下两类方法:
  • 基本路径测试
    • 流图(程序图)<把流程图结构用有向图表示,谓词节点>
  • 控制结构测试
    • 条件测试法(condition test)
    • 数据流测试法(data flow testing)
    • 循环测试

黑盒测试 和 白盒测试 不能相互替代,两者应互为补充!


因为不可能进行穷尽测试,所以不可能发现程序中的所有错误,也就是说,通过测试并不能证明程序的正确性。但是,我们的目的只是通过测试保证程序的可靠性,因此,必须仔细设计测试方案,力争用尽可能少的测试发现尽可能多的错误。

实践表明:用无效的输入数据比用有效的输入数据进行测试,往往能发现更多错误。
//EOF Read More...