Monthly Archives: April 2005

数据库的选择

开始的时候,准备在自己的客户端系统中完全放弃数据库,改用内存和XML实现,这样操作起来简单,可移植性也高。但是到目前,发现一个问题,就是数据库编辑后保存没有想想中的简单。虽然可以做到,但是代码量却是直线上升。看来不引入数据库是不行了。 开始的时候考虑使用access,不过根据以前的经验,这个玩意太不可靠了,对开发人员要求很高,数据库操作稍微不小心,就会给你报错。想想还是放弃吧,以后给工程人员维护,估计数据库会。考虑使用客户端可以嵌入的数据库系统,这样在客户端可以一次安装。所以MSDE之类的已经不在考虑之列了。最后在mysql,sqlite,firebird之间选择(发现一个开源数据库比较的网页:http://www.csdn.net/news/newstopic/4/4986.shtml),由于客户端使用了BCB工具进行开发,而且前段时间好像也有人提到Python链接FB的问题,估计这两个支持是没有问题的了。这样可以使用BCB的快速的GUI开发功能,也可使用Python的脚本功能。 不过目前使用FB遇到的一个问题是,没有一个GUI界面的可以操作FB数据库的工具,可能是我没有找到。暂时还不了解Python对FB支持的程度,还得找找资料,慢慢来啊!找到了一个FB工具的网站:http://www.sqlmanager.net/products/ibfb

Posted in BCB||C++, Python, 数据库 | 6 Comments

通用软件与定制软件

参考文章:http://tech.sina.com.cn/it/2005-04-22/0938590491.shtml Salesforce,一个未经名传的小公司吧(至少我是第一次听说),居然敢这么嚣张,其实是有它的道理的。目前的软件,对定制的呼声越来越高了,不单企业要求定制,个人用户也需要定制。我在公司是做电信业务设计的,就是根据客户的需求定制我们的软件给用户使用。尽管我们自己也有平台,有产品,但是好像不定制的软件,基本一份都没有出去过。我们每天做的工作,都是根据客户需求进行“按单生产”。一般小需求半个月给客户出货,大需求可能要半年左右。公司这样做无可非议,但是现在我接触到一些人,自己使用软件,也是需要定制。最明显的就是CRM软件了,现在只要是生意人,好像都认识到了CRM的作用,不过我接触过的几个朋友,都说现在的CRM不行,光一个安装程序就能折腾死人的,还有什么初始化数据,备份数据什么,都是狠麻烦。还有一点,就是功能太多了,不过他要的功能倒是不全。操作太复杂了,为了完成一个功能,需要进行多个操作,受不了。他们大部分是使用了一段时间后,最后还是放弃了,或者是将就着用了。其实,目前的CRM,大部分都是针对通用软件开发的,除非是企业大客户,否则是不给你定制的。但是我认为,CRM如果不定制,就不能叫成功的CRM。因为客户关系每个人都是不一样的管理手段,这样才能最终留住或者争取更多的客户。而通用的CRM软件却做不到这一点,最后就会导致大家的管理手段同质化,而这个对软件的客户是没有好处的。定制软件,这里还是要将就科学手段的,如果你的定制是整个软件的定制,那么这种定制终究是要失败的。定制软件,最起码是要分为两层:平台和业务。平台基本是不受客户的影响的,对客户有实质性的定制就是业务层的定制。

Posted in 我的原创 | 2 Comments

函数调用终于可以返回值了

前几天的BCB调用Python,没有直接在C++里面调用Python函数,只是简单的使用了PyRun_SimpleString()这个函数进行指定字符串的执行。这种调用,对于没有输出结果,或者是输出结果在文件之类时还是可以使用的,但是通常情况下,我们调用函数是需要返回一个结果给被调用者的。针对这种情况,使用解释字串方式可行性不大了(可以实现,使用输出流重定向,但是处理起来复杂),只能是调用函数,然后接受函数的返回值。 这种调用也是比较简单的(因为我只要求返回字串就可以了:)),首先使用PyImport_ImportModule初始化你要调用的模块(一般指文件名),然后使用PyObject_CallMethod调用你的Python函数,当然了,调用函数的参数是需要设置的。 参考代码:———————————–    AnsiString ScriptPath = ExtractFilePath(Application->ExeName)+“script”;    AnsiString PyStr;    PyObject *pName, *pOs, *pArg, *pResult, *pCall;     Py_Initialize();    InitLogger();     pOs = PyImport_ImportModule(“os.path”);    PyObject_CallMethod(pOs, “join”, “(s)”, ScriptPath.c_str());        pCall = PyImport_ImportModule(“BOMandXY”);    pResult = PyObject_CallMethod(pCall, “ReadBOM”, “(s)”, FileName.c_str());    ShowMessage(PyString_AsString(pResult));     Py_Finalize();

Posted in BCB||C++, Python | Leave a comment

BCB中集成Python终于成功了

这几天经过断断续续的摸索,请教了不少人,也发了不少帖子和mail,终于把Python集成到BCB里面的工作给实现了。 其实按照Python给的文档里面的描述不错,确实是可以使用的,不过那个是发布版本的,而我们的工程默认是DEBUG版本的,里面有一个宏:_DEBUG。所以如果你使用的是默认的工程,编译Python文档给的例子是链接无法通过的。解决的办法就是增加DEBUG的LIB和DLL。开始的时候,我使用的是别人给我的lib库和dll文件,但是在运行的时候,出现错误。经过调试,应该不是我自己程序本身的问题,怀疑debug库是要在自己机器上编译的。然后下个Python的源码,在自己的机器上编译了一个lib和dll,再加入到工程里面就好了。 还发现一个问题,Python在解释的时候,居然不认识\r这个字符,我在PyRun_SimpleString()之前必须要把这个字符替换掉。界面如下

Posted in BCB||C++, Python | 4 Comments

BCB中集成Python

准备在BCB中集成Python真是一波三折啊,开始准备使用Python的C API来实现,但是调试到半道,由于Py_DECREF()函数的干扰(编译的时候会出现三个链接错误),导致暂停API的实现。而是改用PythonForDelphi,不过PythonForDelphi进展也不是很好,最后还是撤回C API的实现方式。根据Python文档中提供的集成的例子,在去掉了Py_DECREF()函数后是编译链接没有问题了,运行也是正常,不过内存管理可能会出现问题,先不管这么多了。 运行程序后,还是出现了以前的那个site问题:’import site’ failed; use -v for traceback。除了这个提示,程序还是可以运行的,这里估计和列表里面经常提的Site文件有关吧。今天的Python代码的例子里面含有re,结果发现,这个re包含了不少的东西的,运行的时候老是说XX模块无法导入,例如:sre,sre_compile,sre_constants,sre_parse,string等。看来想集成Python脚本,还要注意相关模块的导入问题啊,这些模块如果都导入,可能文件的大小估计会肥很多的。

Posted in BCB||C++, Python | Leave a comment

好东西当然要备份一下:Python for Series 60

 Useful for Series 60 App: Dict2Go Python在S60手机上运行已经是很早的话题了,不过教程倒是没有见到过,今天从邮件列表里面遇到了,备份一下,以后肯定是用的到的

Posted in Python | 1 Comment

PythonForDelphi玩不转啊

昨天,我在maillist里面发了一封求助信,求PythonForDelphi,今天回来发现别人发送给我了,安装过程很顺利,加载包,发现只有CB5的,我使用的CB6,不过这个兼容性应该是有的。编译,安装,OK。在CB6的组件面板上面,也有Python出来。 新建一个工程,放入PythonEngine组件,发现保存的时候需要输入头文件和lib文件,这个是因为没有包括相应的路径。编译运行,没有问题,在退出程序的时候,告诉你Runtime Error。开始的时候怀疑是内存释放的问题,但是别人在delphi下面是可以用的,后来怀疑是lib库的问题,使用C++ Builder Notes文件里面的:implib -a <INSTALLDIR>\Components\py21.lib WINNT\SYSTEM32\python21.dll方式导入,还是不行,暂时只能先放弃了,先问问高手们是怎么解决的。

Posted in BCB||C++, Python | 1 Comment

PyNSource

今天由于直接使用Python的内嵌机制调试失败,于是在网上想找pydelphi的安装包。在pydelhi的相关网站上,发现一个新玩意,是Python代码的反向工程的工具,是用wxPython编写的,从上面介绍的来看,还是不错的。他提供了几种安装包模式,不过目前暂时用不到,先记录地址:http://www.atug.com/andypatterns/pynsource.htm,以后有机会可以看看。

Posted in Python | 1 Comment

Python的调试

一直都感觉,Python的开发,最大的困难是调试部分,没有一个很好的调试环境可以使用,使用日志感觉又不是很方便。这两天调试循环,把我累的够戗。因为循环次数都是过千次的,前面几百次循环基本不会出现什么问题的,主要是后面的处理可能会出错。换了几个IDE调试都不是很爽,最后想到使用日志方式,把每个循环都打印出来,记录到一个文件中。不过Python的logging提供的日志信息太丰富了,我只要简单的信息即可,以方便定位。 后来从一本电子书里面找到一段代码,就是将原先的stdout重定向一下,完成之后再重定向回去。用了之后,感觉还是不错的,调试信息明显减少了很多,简单又方便:—————————————import sys…if __name__==‘__main__’:    oldStdout = sys.stdout    sys.stdout = open(“script.log”, “w+”)    print script.SchoolSong(Download())    sys.stdout = oldStdout—————————————-

Posted in Python | 2 Comments

最近躁动现象严重

这几天,可能是受了外界的影响吧,公司里面也不平静。由于海外市场发展迅猛,而开发人员没有到位,导致现有的开发人员压力很大,工作量是平时的几倍了,最猛的已经达到了4天/7KLOC的量了,产品质量开始下降,但是质量部盯得紧紧得,我们有些人开始陆续被罚款了(50大洋/1BUG),今天居然有两个人提出辞职。不过最后没有成功,主要是公司说对方公司要罚款1W/位,所有的罚款得由员工自己支付,对方同意辞职但是罚款还是依旧的。 看来势头不对啊,老员工都快到期了,都不想干了,新员工还没能完全接班。躁动啊!

Posted in 我的原创 | 1 Comment