看前面黑咚咚,待俺上前杀它个干干净净。。。

 

2014年3月21日

db2 818坑

项目中有一个sqC产生的实体调用方法时,始终报818错。删掉bnd得编问题照旧。在同事的提示下--所有sqC文件名的前8个字符不能一样--,找到重复文件重命名,删掉BND文件,重编译,搞定。

posted @ 2014-03-21 10:35 山城,山 阅读(358) | 评论 (0)编辑 收藏

2013年5月18日

在Win7上编译 google V8

一、环境
编译工具:VS2012 Express
操作系统:Win7旗舰版 64
SVN客户端
 
二、下载
1、创建目录v8,用v8目录,check out: http://v8.googlecode.com/svn/trunk/
2、创建目录v8\build\gyp,用gyp目录,check out:http://gyp.googlecode.com/svn/trunk
3、创建目录v8\third_party\cygwin,用cygwin目录,check out:http://src.chromium.org/svn/trunk/deps/third_party/cygwin
4、创建目录v8\third_party\python_26,用python_26目录,check out:http://src.chromium.org/svn/trunk/tools/third_party/python_26
 
注:上面的check out目录同https://code.google.com/p/v8/wiki/BuildingWithGYP一文所述目录不一致,文中所述目录是无效的。
 
三、编译
1、打开VS2012 开发人员命令提示。
2、cd v8目录。
3、执行命令:
   third_party\python_26\python.exe build\gyp_v8 -G msvs_version=2010
   系统显示
   Updating projects from gyp files...
4、在命令行中输入:build\all.sln,回车。
5、系统自动打开VS2012 IDE环境。
6、在IDE环境项目菜单中,更新项目,升级项目文件。
7、编译。

posted @ 2013-05-18 13:03 山城,山 阅读(485) | 评论 (0)编辑 收藏

2013年5月14日

Linux守护程序类-daemon

/////////////////////////////////////////////////////////////////////////////////////
///   daemon 测试类
#include <unistd.h>
#include <syslog.h>
#include <stdlib.h>
#include "daemon.h"

class logger : public daemon
{
public:
    logger() : daemon("日志")
    {}

    void do_something()
    {
        while(true)
        {
            syslog (LOG_NOTICE, "Writing to my Syslog");

            sleep(5);
        }
    }
};

int main(int argc, char *argv[]) {
    logger l;

    l.run();

    return 0;
}

////////////////////////////////////////////////////////////////////////////
//   .h

#ifndef DAEMON_H
#define DAEMON_H

#include <string>

class daemon{
public:
    const std::string name;
public:
    daemon(const char* nm);

    void run();

private:
    static void fork_off_parent();
    static void set_child_context();
    virtual void open_log();
    virtual void do_something() =0;
    virtual void finish();
private:
    daemon(const daemon&);
    daemon& operator=(const daemon&);
};

#endif // DAEMON_H

/////////////////////////////////////////////////////////////////////////////////
//  .cpp
/*
 * cp from  
http://shahmirj.com/blog/beginners-guide-to-creating-a-daemon-in-linux
 
*/

#include "daemon.h"

#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>

daemon::daemon(const char *nm) : name(nm)
{}

void daemon::run()
{
    fork_off_parent();
    set_child_context();
    open_log();
    do_something();
    finish();
}

void daemon::fork_off_parent()
{
    //Fork the Parent Process
    pid_t pid = fork();

    if (pid < 0)
    {
        exit(EXIT_FAILURE);
    }

    //We got a good pid, Close the Parent Process
    if (pid > 0)
    {
        exit(EXIT_SUCCESS);
    }
}

void daemon::set_child_context()
{
    //Change File Mask
    umask(0);

    //Create a new Signature Id for our child
    pid_t sid = setsid();
    if (sid < 0)
    {
        exit(EXIT_FAILURE);
    }

    //Change Directory
    
//If we cant find the directory we exit with failure.
    if ((chdir("/")) < 0)
    {
        exit(EXIT_FAILURE);
    }

    //Close Standard File Descriptors
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
}

void daemon::open_log()
{
    //Set our Logging Mask and open the Log
    setlogmask(LOG_UPTO(LOG_NOTICE));
    openlog(name.c_str(), LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER);

    syslog(LOG_INFO, "Entering Daemon");
}

void daemon::finish()
{
    //Close the log
    closelog ();
}

posted @ 2013-05-14 14:01 山城,山 阅读(298) | 评论 (0)编辑 收藏

2013年5月10日

Qt程序源码中,中文常量字符串问题及翻译家的使用

    在Windows7下使用Qt creator开发程序,想直接在源代码中使用中文字符串常量,源码是utf8的,保持utf8是便于迁移到linux,VC编译器总是报错,串中有换行符,怪异的是如果恰好串只有两个中文字符时,一切都是那么美好,多了,VC编译器就会让你痛苦了。
    经过一番google,我总结了解决问题的原则:
    绝对不要在源码中使用中文字符串常量。
    那要显示的中文怎么做?用Qt Linguist.

下面是方法:


第一步:打开
.pro文件,在最后面加入一行

TRANSLATIONS = cn.ts

可以自由命名右边的.ts文件

 

第二步:选择菜单:工具/外部/Qt翻译家/更新翻译(lupdate)

此时,系统将在.pro文件所在目录生成cn.ts文件

 

第三步:打开cn.ts文件,注意是用菜单:打开文件,用...。这种方式,在对话框中选择

Qt Linguist

 

第四步:在Qt Linguist中,汉化找到的源代码中的字符串常量。

 

第五步:完成汉化后,保存并选择【发布】。系统会在cn.ts文件所在目录生成cn.qm文件。

第六步:把汉文件文件添加到,项目资源中。打开.qrc文件,添加cn.qm文件

/tr

     cn.qm

 

 

第七步:使用汉化结果. 在主窗口显示前,应用实例创建后安装翻译器。

QApplication a(argc, argv);

 

QTranslator translator;

 

translator.load(":tr/cn.qm");

a.installTranslator(&translator);

 

经验:有些时候明明已经翻译了,程序还是不生效,此时你可以选择【清理项目】后再次构建,试一下。

posted @ 2013-05-10 16:09 山城,山 阅读(2281) | 评论 (0)编辑 收藏

2012年5月7日

Linux 平台Eclipse与CMake结合的方法

 

1、项目目录规划

 

    project_dir下建立build, cmake, src三个目录。

  

2、按照CMake要求,为项目编写CMakeLists.txt文件。

 

3、调用CMake命令为eclipse生成项目文件,我把这些命令写成脚本来执行:

        make_project.sh

 

#!/bin/sh

mkdir -p build/release

mkdir -p build/debug

cmake -E chdir build/release cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=release ../../

cmake -E chdir build/debug cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=debug ../../

 

4、打开eclipse,选择菜单:文件/ 导入/常规/现有项目到工作空间中.。在“导入”对话框中,在“选择根目录”项目中指定目录为project_dir/build.

    eclipse会自动搜索到debug, release两个目录下的项目。

    点击“完成”按钮。eclipse将自动加入项目。

 

5build项目。

 

6、调试项目时,你需要在菜单:运行/调试配置 里新增配置信息,指定执行文件的路径。

posted @ 2012-05-07 15:55 山城,山 阅读(6601) | 评论 (0)编辑 收藏

2012年2月28日

一张图

图本身没有什么特别的,只是用来分析任务队列,图是用来推理的。

posted @ 2012-02-28 17:20 山城,山 阅读(210) | 评论 (0)编辑 收藏

2010年9月30日

wxFormBuildert杂记二则

一、wxFormBuilder选择utf8生成的cpp代码,是无代码签名的,VS2008 express编译过程中可能会出现字符串错误。
         解决办法是:打开文件菜单,选择保存高级选项,在“编码”中选择“unicode - 代码页1200”,确定后,重新编译。
二、wxFormBuilder制作wxFlexGridSizer布局时,其默认rows,cols都是2,这个值不会自动变化,因此,你添加了超个2*2个窗体后,生成的cpp代码可以顺利编译,但运行过程会报超过2*2的错。
         解决办法:调整rows, cols值。


更正:方法一,更简单的处理是在项目属性中勾选c++ properties/ use_microsoft_bom 设置,这样生成的cpp文件,VS2008 Express 无碍编译。

posted @ 2010-09-30 08:29 山城,山 阅读(399) | 评论 (0)编辑 收藏

2010年7月29日

sqlite简明使用

跑题
据说Oracle Berkeley DB"很好",就去试用一下,但是,它,很不给我面子,在put了半天之后,我想get一下写入的东西,运行正常,但没有结果返回,看了几遍帮助,copy文档的代码,也是这个结果,就很是郁闷了。没有太多的时间去追究问题,还好世上还有一些“美好”的东西。sqlite,也是嵌入数据库,据说它快但是比Oracle Berkeley DB“逊色”,但Oracle Berkeley DB 11g的sql引擎是用sqlite的,最重要的它还是免费的。
有兴趣了解的朋友可以去这里看一下。
http://www.bdbchina.com/2010/03/oracle-berkeley-db-%E6%94%AF%E6%8C%81sql%E5%95%A6%EF%BC%81/
BDB中国研发团队的博客,讲了一些与sqlite的关系。这里摘录一下:

“Oracle Berkeley DB引入了SQLite的SQL层:包括用户接口(sqlite3(), ODBC, JDBC等)和SQL语言处理层(Tokenizer、Parser及Generator),而底层引擎(虚拟机)则使用了BDB的存储引擎。从而,将原来SQLite基于数据库级别的并发提升一个级别 - 至BDB的基于页(Page)级别的并发,并可以利用BDB的更好的内存管理、数据和事务恢复功能、更多的扩展(如Berkeley DB的db_hotbackup、db_stat、db_archive等一系列命令行工具)。”


Berkeley DB SQL和SQLite使用上的区别

a) 对于用户和开发人员来说,这两个产品是没有区别的。它们在SQL语法、API、命令行交互、PRAGAMAs 等方面都是一致的。我认为,用户可以体验的显著区别有可能是性能和并发了 - 由于SQLite提供的是数据库级别的锁,而Berkeley DB SQL是页(Page)级别的锁,因此后者在绝大多数测试中都会快很多 (如Insert, Update, Delete, 并发操作等)。但是,由于DBSQL提供的细粒度锁的机制,它又会带来一些额外的开销,一些极端的测试用例下会比SQLite慢上少许(但不明显)。并且对于这些极端测试的案例,我们一直在进行性能优化。

b) 对于已有的SQLite应用程序和工具而言,由于这两者在调用接口都是一致的,因而都可以无缝支持。

c) 对于DBA人员来说,除了可以继续使用SQLite原来的管理工具,您还可以使用BDB提供的db_hotbackup、db_stat、db_archive等一系列命令行工具来备份,监控,升级等。另外,您还可以联系Oracle寻求支持。

总体而言,我们有充分理由相信Oracle Berkeley DB SQL将会比SQLite更快,更稳定。同时,我们也将会提供更好的支持服务。


正题
使用http://sqlitewrapper.kompex-online.com/ Kompex SQLite Wrapper 呵呵,超好用

完了

posted @ 2010-07-29 17:32 山城,山 阅读(686) | 评论 (0)编辑 收藏

wcsftime,_wcsftime_l之困

本想用wcsftime,_wcsftime_l来简化时间格式化操作,显示中文时间,于是就这样整:
    wchar_t buf[128];
    wcsftime(buf, 128, L"%y年%m月%d ...." ...)
谁知道执行成功,但buf里边内容为空,注意不是"\0",是什么也没有返回. 东找西查,可能是local相关问题。
好,我设置  "CHS",OK,(调试。。),再F5 , NND,sqlite又报一个互斥量错误,额的娘哟!消灭一个问题,又引入一个新问题。。。立即痴呆3分钟:-(。
   好了,好了,惹来起,躲得起,我可不会去探寻为什么sqlite会不给面子,不然这一天又过去了。
还好,有数据,毛老人家讲“自力更生,丰衣足食”,wcsprintf一样的可用。。。

posted @ 2010-07-29 17:27 山城,山 阅读(1040) | 评论 (0)编辑 收藏

2010年6月4日

当前路径 !=程序路径 --我吃了它的苦头

    第一次,我在写一个MFC程序,用CFile打开文件时,我认为当前路径==程序路径,文件名没有采用绝对路径。在程序执行过程中,没有打开任何文件对话框时,我的想当然是对的,可是只要弹出一个文件对话后,我就跌入了沼泽,耗时三天,才发现文件对话框是要更改当前路径的。
    每二次,我在写一个服务时,一个函数里边要打开读取一个文件,在非服务程序的执行过程中,函数表现正常。当我转换成服务,在主函中调用它后,在服务启动运行期间,它运行不正常。我又认为当前路径==程序路径,文件打开失败,调试了一下午才找出原因。

“同一个错误,不能犯两次”

posted @ 2010-06-04 23:17 山城,山 阅读(487) | 评论 (1)编辑 收藏

仅列出标题  下一页

导航

统计

常用链接

留言簿

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜