积累日常生活的点滴,开发过程的心得。

为Source Insight添加SourceSafe的控制命令

  1. 首先确保你的Source Insight的ProjectSettings中的Project Source Folder和你的代码所在的根目录一致。
  2. 然后,点击Options / Custom Commands来添加自定义的版本管理命令添加Check In 命令
    • Run中输入命令行SET SSDIR=\\XXXX\VSS; SET SSUSER=chen; ss cp \;ss cp ProjectFolderName;ss Checkin $%r,替换ProjectFolderName为你的项目所处的VSS的目录名,设定SSDIR为SourceSafe的配置文件所处的共享目录名。
    • Dir输入框中输入%d
    • 去掉Pause When Done选项
  3. 依次添加Check out,Get Last Version等命令即可

游客系列之四:注册机制与破解(转贴CNSW)

游客系列之四:注册机制与破解

国庆,喝了半瓶茅乡宴,52度,没醉,闲着没事,继续游客系列。

除非你故意想让破解者破解你的软件,或者对破解根本不在意,不然对防破解还是花一点心思的。不过故意要破解者破解软件的也可以看这篇游客系列,浪费不了你的时间——反其道而行即可。

防破解比之两年之前容易多了——我感觉,因为大家都浮躁多了,做技术最忌讳浮躁,搞破解的既然宣称他们是在搞技术,那么这两年因为浮躁,技术下降了不少。之前阿达也发过帖子分享防破解经验,我悄悄应用了,发现很实用,最近也没有搜索我的软件的破解版情况,因为我自己也发布破解版,不过根据注册情况来看,应该是没有注册机出现。

客套话

公司里面有个销售经理,比较喜欢说客套话,见到公司同事的父母总喜欢说“您生了个好儿子”之类的,见到同事的老婆就喜欢说“你找了个好老公”,结果前几天碰到我老婆,说了一句“你可生了个好儿子”。Foot in mouth

发布Sqlite Developer 2.15

这一版本主要是修改了一些bug

下载地址 http://www.sharpplus.com/downloads/SqliteDev215.zip

Antlr中的Semantic Predicates

有些时候由于Antlr不是真正的LL(K)算法,会产生二义性的代码,这时需要我们手工来编写LookAhead的判断语句。这就用到了Semantic Predicates

 

语法结构为{XXXX}?,示意如下

盛名之下其实难副的《Microsoft .NET框架程序设计》

Applied Microsoft .NET Framework programming这本书是著名的Jeffrey Richter同学写的,中文译名《Microsoft .NET框架程序设计》号称在Amazon上排了好长时间榜首的一本牛书,当年刚出来的时候,我花了将近100块钱买到的,希望看完之后能够让我框架设计水平突飞猛进一下,结果是翻了几天也没发现这本书跟框架设计有什么狗屁关系,感觉好像关公战秦琼一样。从此,这本书就再也没有被窝翻开过,总的来说我的看法就是 Jeffrey Richter花了好多时间,费了很大心思写了一本你也挑不出什么错来,但是就是特别没有用的跟框架也不沾边跟应用也不沾边的一本书来。注意我这里说的特别没有用,指的是你把它上面写的东西全都研究明白了,你也没法用它挣到一顿饭钱,就好像屠龙之术一样,技术很眩,可惜没有龙来让你屠。

配置Apache的Proxy功能

修改http.conf 设定加载Proxy相关的模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

如果要允许https代理的话,还要加载proxy_connect模块

LoadModule proxy_connect_module modules/mod_proxy_connect.so

然后设定允许Proxy功能

# Proxy Settings
ProxyRequests On

发现Apache的配置真是非常简单

移植Sqlite到Vxworks(2)

今天有空,继续Port Sqlite,这次用的OS没有文件系统,只有一块64M的Flash内存。所以,把Sqlite对文件操作的IO函数都改成对Flash内存地址的访问。然后,将一个Sqlite 测试用的数据库传到Flash内存中,

数据库很简单,只有一个Test表,有两个字段f1, f2,有两条数据1,123; 2,234

使用下面测试函数进行测试,

#include <stdio.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}

int test_sqlite(){
sqlite3 *db;
char *zErrMsg = 0;
int rc;

rc = sqlite3_open("sqlite_mem", &db);
if( rc ){
printf("Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
rc = sqlite3_exec(db, "select * from test", callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
printf("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}

发布Sqlite Developer 2.1

这一版本增加了以下一些功能

  1. 允许察看Blob字段中的Bitmap,Jpeg,Gif内容
  2. 将Extract Schema Wizard改进为同时可以将表的数据导出为Insert语句。

下载地址

http://www.sharpplus.com/downloads/SqliteDev210.zip

移植Sqlite到Vxworks(1)

前一阵子想把Sqlite port到Vxworks上,一直没空。今天得到一个好消息,这次要控制的读卡器硬件还没有做好,要到这个月底才能出来,这也就意味着月底前我都会比较闲。于是,早上先是写了一下VxWorks上Sqlite使用的IO,信号量控制的Dummy接口程序,然后就是关闭绝大部分的编译选项,特别是这次用的CPU不支持浮点运算,所以要禁用浮点功能的支持。交叉编译后放到板子上Load,结果还是老报告浮点错误,看了半天程序也没发现什么问题,一个一个文件的排除试验,终于发现问题出在Sqlite默认使用64位的整型运算,可我用的CPU只支持32位的整数div和mod操作,改成32位的整数就Load成功了。

同步内容