乱七八糟

//非常非常想把整个系统从头再写

//在别人的系统上修改,添加功能都是一件痛苦的事情

//关键还不能重构,Jenson总是说没时间,暂时不要搞这个。

//为啥?就是怕出大篓子。

//为啥怕出大漏子,因为系统很脆弱。

现在的问题是这样的

之前别人写完的程序,只能pause,不能stop。每次一stop,再start,就出问题

为啥呢。因为状态出了问题。有的模块假定永远是这样。一stop之后假定就不成立了。

跟jenson商量后,决定解决这个问题的同时添加一些新的feature,再输入输出端做一些修改

而修改呢,必须得加上,或者改一些接口

Jenson本来是一个接口也不想加

因为这样会可能打破他之前的架构,就是上面的模块不要了解任何底下模块的细节

可问题是不加那么有些事情就做不了

磨了半天终于加上

而另外一个地方,又采取不加的策略。

为什么可以这样呢。因为之前有一个万能接口,叫EngineProcess

输入命令是一个整数。<0的是start , stop ,pause之类的命令。而大于0呢?你随便怎么处理。好吧,我们就用大于0的这个东西来传入一个参数。

其实之前的输入模块就是这么干的。而这个模块我读了半天才发现这个trick

好吧。花了一天写完程序。然后调试。

然后噩梦来了。

总是冒错。最开始是一个parse字符串的bug。搞了半天。绕了个弯过去了。

后来是内存非法读取。又搞了半天。发觉就是万能接口的问题。什么问题呢?>0的那个参数其实已经被用过了!

不得不又搞个trick绕过去。

绕过去还没完。

因为底层模块还有问题。

什么问题呢?就是类的变量太多。而且到处引用。跟c的全局变量一样。改一个东西还不够,还得改另外一些东西。

//读代码发觉重复代码太多。还有重复文件。

Advertisements

老爸

一大清早又跑出去

去上次说水浅的那个湖

今天发现了湖里面的一个坑

就把鱼钩甩到坑里

结果第一条上来就是大鱼

回来的时候带了5条鱼

说还扔了很多鱼

这下算是找到好地方了

昨天还去了另外一个湖

要穿过大马路,很危险

嘱咐老爸不要再过去

今天又要吃鱼了

基本上以后要天天吃鱼了

 

/ENTRY:mainCRTStartup

从Console (/SUBSYSTEM:CONSOLE)改到Windows (/SUBSYSTEM:WINDOWS)

部署到另外一个机器总发生错误

加了这么一个选项就没错了/ENTRY:mainCRTStartup

http://csf11.acs.uwosh.edu/cs371/visualstudio/

开始生成的manifest总多了一节,如果是Windows的话。要dependent on两个CRT的版本,wk~。

加了这么一个选项就没有那多的一节了。

新的框架

Jenson的框架可以这么解释

一个应用 = 一些COM模块 + 一个配置文件

模块有三类,一类是函数,一类是全局数据,一类是模块执行引擎(根据配置文件)

也就是说,配置文件其实是一个脚本

以前的应用都很简单,几个模块顺序执行就行了

现在的问题变得复杂

模块的参数可能中途变化,或者需要另外一个模块的计算

另外,该配置几个模块也变得不确定,取决于机器有几台CPU,设置几条线程

Jenson的解决方案是这样的,在配置文件里面设置一些特定的symbol,相当于变量

这些变量的值,在运行时决定

根据变量值,动态生成一个配置文件

变量值怎么设置呢?Jenson的解决方案是使用另外一组配置文件,里面可能有一个a  = b * c + d之类的东西

一两个星期前,我的工作就是写这么一个解释器,从一个配置文件模板,几个参数配置文件,生成一个最终的配置文件。

现在的模板文件,相当于生成脚本的脚本

也就是说,Jenson又设计了一套新的语言。并试图通过这个语言来创建应用。可是,。。。,这个语言会有传统的C++强大么?这里面没有if,没有for,没有函数。。。

乱七八糟

今天基本上终于大致明白了jenson同学的框架

感觉每个写软件的人都有一种框架癖

希望一旦框架搭好了,以后任何应用都像填一份表格

设置一些参数,写一些函数,或者类

Jenson的框架大致是这样的

每个模块是一个COM组件

每个模块有一个输入,几个输出

所有模块的输入,输出,都使用一个同一个数据模块,也是一个单独的COM

有了数据区,有了模块

构造一个应用的话,就只需要一个配置文件,里面写好模块执行顺序,以及每个模块输入输出的名字

当然,解读配置文件也是一个单独的模块

看上去很美,很简单

有一个问题,如果模块需要配置参数怎么办?

目前的框架是这么解决的

每个算法模块都单独配置一个引擎模块

所有的引擎模块都是一样的接口,包括load配置字符串,save配置,引擎开始,引擎暂停,以及引擎结束

这样最顶层的应用模块就不管具体的参数配置,只负责开始或者结束哪个引擎,以及提供引擎对应的配置字符串。

举个例子,如果我们有一个应用,需要三个函数,a, b, c。那么,我们需要三个算法模块,三个算法引擎模块,一个文件配置模块,一个应用引擎执行模块。

什么问题呢?90%的代码都是处理字符串,配置输入输出,COM包装了。调试还麻烦。

另外更严重的一个问题,就是两个的应用不能装在同一个机器上。因为模块是重复的。为什么呢。如果为每一个函数单独构建一个项目,构建一个DLL。代价太大。目前的框架呢,就是一个DLL里面装一组类似的模块。于是呢,不同的应用,DLL是重复的。但是一旦不同的应用DLL接口冲突,或者功能不一样,问题就出来了。

哦。想起来,Input也是单独的一个模块,而且,所有的应用,Input模式都是一样,那就是从Input/目录里面读数据。而不是让用户打开一个文件。

Jenson现在又设计了新的框架。因为现在要使用多线程,多核。以前的框架就不行了。新框架已经做了三四个月了。有很多问题。而我现在的任务,是和Jenson一起把所有这些问题解决,另外把框架搭完。

 

 

数据

逻辑不变,程序会变

数据不变,逻辑会变

只有数据是最终面向用户的

用户只关心数据。输入数据,输出数据。

所以呢。程序没有数据重要。

所以呢,得专门建立一个数据的目录。里面存放输入数据,以及正确的输出数据。还有数据的描述。

 

 

code

建公司的代码库

C++这块只有我和jenson负责

jenson是part-time,算是老员工了

以前的系统主要是他负责开发的

这几天在做一个项目的集成调试

问题一堆,还不好调

很多代码是找的大学学生写的,非常乱

调试人家代码真是相当郁闷

改代码,加新功能更是郁闷

有些受不了,还不如自己写

感觉jenson设计的框架太复杂

原来的代码重复特别多

不仅是文件重复,函数重复,类库也重复

一个项目里面,矩阵库就有三个版本

另外,之前的项目里面,COM代码跟算法混到一起

接口不清晰

超长函数,超长参数

现在计划设计一个统一的代码库,纯C++

每个模块单独写应用程序,这样便于测试,也便于demo

即使是混到COM里面也会相对容易,清晰

错误捕捉也方便