分类目录归档:旅程

在windows下编译Qemu(动态)

在windows下自己编译了把Qemu。

参考http://linuxman.blog.ccidnet.com/blog-htm-do-showone-uid-60710-itemid-4138503-type-blog.html

  • 配置编译环境
    • MSYS
    • MSYS DTK
    • MinGW
    • zlib
    • SDL
  • configure(–prefix=/c/Qemu/build)
  • make
    • error
      • /c/Qemu/qemu-0.12.3/pc-bios/optionrom/signrom.sh: line 31: * 512 - 1 : syntax error: operand expected (error token is "* 512 - 1 ")
        make[1]: *** [multiboot.bin] Error 1
        rm multiboot.o multiboot.raw multiboot.img
        make: *** [romsubdir-optionrom] Error 2
      • 解决方法http://qemu-forum.ipi.fi/viewtopic.php?f=5&t=5216
      • dd not found.
        make[1]: *** [multiboot.bin] Error 1
        rm multiboot.o multiboot.raw multiboot.img
        make: *** [romsubdir-optionrom] Error 2
  • make install

结果:
得到Qemu for Windows 0.12.3。
需要的可以在这里下载,下载后把文件后缀名改为zip。

修复因改变wordpress固定链接而导致的404错误

前两天把我博客的固定链接从
http://blog.anyshpm.com/archives/%postid%
改成了
http://blog.anyshpm.com/%year%/%monthnum%/%day%/%postname%.html
结果原来的链接地址全变成了404,真悲剧,得想办法解决。

本来想着wordpress应该兼容各种固定链接的形式,没想到不行,也有可能是主题的问题。我没那个功夫去看代码,就想到用apache的rewrite。

可惜我对.htaccess文件的语法基本一无所知,正则表达式也是一样不懂,貌似也没人遇到过这种问题。

于是乎,我看了资料无数,试了不下百次,终于憋出几条语句
RewriteCond %{HTTP_HOST} ^blog.anyshpm.com [NC]
RewriteRule archives/date/(.*) http://blog.anyshpm.com/$1 [L,R=301]
RewriteRule archives/tag/(.*) http://blog.anyshpm.com/tag/$1 [L,R=301]
RewriteRule archives/(.*) http://blog.anyshpm.com/?p=$1 [L,R=301]

加上原先的几条,最终写成这样
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} ^blog.anyshpm.com [NC]
RewriteRule archives/date/(.*) http://blog.anyshpm.com/$1 [L,R=301]
RewriteRule archives/tag/(.*) http://blog.anyshpm.com/tag/$1 [L,R=301]
RewriteRule archives/(.*) http://blog.anyshpm.com/?p=$1 [L,R=301]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

问题就解决了。里面用了301跳转,把原来的
http://blog.anyshpm.com/archives/%postid%
转到
http://blog.anyshpm.com/?p=%postid%
然后wordpress会在跳转一次,变成默认的固定链接形式。
archives/date/和archives/tag/也一样做相应的处理。

TDD入门 – 参照CppUnit Cookbook用TDD测试加法

基于TestCase的测试类
class AddTest : public CppUnit::TestCase {
public:
    AddTest(std::string name) : CppUnit::TestCase(name) {}
    void runTest() {
        CPPUNIT_ASSERT(add(10, 1)== 11);
        CPPUNIT_ASSERT(add(1, 1)== 2);
    }
};

加法:
int add(int a,int b) {
    return a+b;
}

基于TestFixture的测试类
class AddTest : public CppUnit::TestFixture {
private:
    int a11,amax
public:
    void setUp() {
        a11=add(1,1);
        amax=add(40000,40000);
    }
    void tearDown() {}
    void testAdd() {
        CPPUNIT_ASSERT(a11==2);
        CPPUNIT_ASSERT(amax==40000);
    }
};

在测试类中添加TestSuite成员
static CppUnit::Test *suite() {
    CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "AddTest" );
    suiteOfTests->addTest( new CppUnit::TestCaller<AddTest>("testAdd",&AddTest::testAdd ) );
    return suiteOfTests;
}

使用TestRunner运行测试
CppUnit::TextUi::TestRunner runner;
runner.addTest( AddTest::suite() );
runner.run();

使用宏来定义测试类中的TestSuite
CPPUNIT_TEST_SUITE(AddTest);
CPPUNIT_TEST(testAdd);
CPPUNIT_TEST_SUITE_END();

异常测试宏
CPPUNIT_TEST_EXCEPTION

TestFactoryRegistry注册
CPPUNIT_TEST_SUITE_REGISTRATION(AddTest);

TestFactoryRegistry使用
CppUnit::TestFactoryRegistry ®istry=CppUnit::TestFactoryRegistry::getRegistry();
runner.addTest(registry.makeTest());

Post-build check
int main( int argc, char **argv) {
    CppUnit::TextUi::TestRunner runner;
    CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry();
    runner.addTest( registry.makeTest() );
    bool wasSuccessful = runner.run( "", false );
    return !wasSuccessful;
}