思考

我知道迟早我要来弄弯管机的控制和仿真程序的,结果这一天早早的来到了。接手了这个项目的3D显示部分的任务,也着实看到了实验室的强人的代码。

弯管机的控制程序运行在工控机上面,而工控机本质是用PC机作为载体,装的XP作为操作系统。整个控制通过专业的控制卡进行。硬件方面不说,我也不是做硬件的,就从软件的角度看看代码就让我彻底晕死了。

整个项目用的是VC6进行设计开发,数据库用SQL SERVER 2000。麻烦的就在这个VC6上面,彻底的古老的玩意儿了,不完全支持STL,有些莫名奇妙的vector的BUG就出现在里面。就我来看整个界面是比较简单的,没有太多动态的部分,但是整个工程的代码让我看了就彻底郁闷了——几乎所有的窗体、按钮都是慢慢用MFC凑出来的,也就是说,界面纯粹用代码写出来的。结果,这个界面变得奇丑无比,想改一下相关的东西都很麻烦,想想全是API在那儿弄过去弄过来,一会儿一个SendMessage,烦不烦!我拿到这个代码以后想添加一个东西完全无从下手,在未编译运行之前根本不知道这个窗体是什么样子的,好歹那些纯静态的窗体你给我用画出来嘛。结果由于是他们要做多国语言,不得不硬编码。至于运行起来有动态的地方(其实也就是一些类似tabControl的东东)更是摸不着头脑,只有大概猜一下,然后设置一个断点,再运行一下,看看是不是那个地方,感觉比盲人摸象还牛,毕竟盲人知道那个是象,有四条腿,总不会摸出第五条腿嘛!

界面的超级抽象不说了,另一方面更强的问题在于怎么去修改这个界面。每次做个修改都要实际运行一下看看结果,不对再改,天啊,这太折磨人了。

去年刚刚接触这个项目的时候,我就对当时写了一半的代码提出质疑,为什么现在开发项目还在用VC6,为什么不用.NET平台?.NET已经是很先进的一个平台了,虽然直接操作API上面有一些屏障。大家一致回答,不懂.NET,也不知道怎么用.NET来控制工控卡,还是用熟悉的VC6来做吧。其实我后悔当初为什么加进来,还不如另给我一个题目,让我从0开始!

再来看看我周围的研究生,他们来的时候都或多或少学了一些C/C++,老一届的师兄因为历史的原因都说用VC6吧,所以天天抱着一本厚厚的MFC读啊读,做项目也只有用这个了,因为学了C/C++,他们认为用VC6这个投资才没有浪费。没有人告诉他们,还有C#可以满足你的要求,学学C++/CLI,生活便会开心许多。但我想,对于大多数“懒”人来说,我的这句话依然只是一句废话。

其实在我接触C++/CLI之前我也有一些疑问,.NET如何去控制工控卡。VS2003时代有Managed C++ Extenstion,但其怪异的语法让人望而却步。幸亏微软没有忘记这个强力雾气,在VS2005时推出了C++/CLI。这个革命性的语言让托管和非托管语言隔阂缩小了很多。可以说目前.NET平台上,C++/CLI是最为强大的语言,他将历史和未来进行了完美的结合,让以前旧有的代码得以充分利用,也让现有的工作可以基于.NET平台,从而享受.NET带来的优势和愉悦。目前,我利用C++/CLI,已经实现把纯C++的OpenSceneGraph图形库和C#结合起来一起工作,C#专门做界面,OpenSceneGraph负责OpenGL图形显示,各司其职,将做复杂界面的挑战减小到了最小,而又不失灵活。

那么工控机运行.NET程序是否那么快?据我了解现在所配置的工控机的CPU配置都达到了P4的水平,内存也多在512以上,除了第一次运行可能比较慢以外,这个配置运行.NET程序不存在任何问题。但对于开发机来说,VS2005先进的功能让很多旧电脑不堪重负,强人们的机器实在是太老了,512内存跑VS2005那是很痛苦的。为什么老板就不能升级一下我们的电脑呢?呵呵,为什么“不”这就不容多说了吧。我怕哪天学生科的老师又叫一个学生敲敲寝室的门,然后对我说,XX老师叫你好好学习。

废话不多说,以我的观点来看,如此简单的工控机的界面用不着动用VC6这个老元老了,除非是需要继续进行2000年左右项目的开发,而迁移成本很高的情况下。2005年以后的工程都可以用VS2005来开发了,在嫦娥都能奔月的今天,开发工具不在进行革新,就好比原始人用石头和现代人的原子弹比拼。要知道我做PDA上面的地震数据采集的界面都比这个复杂太多,工控机优越的硬件环境足以支撑.NET平台。

用C++来构造界面往往需要花费很大的精力才能调整好整个,有过MFC开发经验的人就知道这些痛苦了。要实现一个多国语言都显得很麻烦。其次,C++的内存管理始终是一个问题,即便很小心,也可能忘记new了一个数组以后(int* p=new int[count])需要用delete[] p进行删除。编译器不会给你说这个地方需要怎么做,最多给你一个Warning,但恐怕业余程序员也不屑于来更正这些Warning。错误的操作导致的内存泄露很麻烦,也不容易查找出来,而.NET的托管平台就没有这个隐患,除非你自己使用了非托管资源而未作处理。

.NET的优势不仅在于以上所说的创建界面方面,整个.NET平台简化了太多的操作。XML结合序列化反序列化的使用使得存储一个结构变得轻而易举,XML以明文存储的结构数据更能很容易的进行查看,找到问题所在。而在现在的项目中,由于VC6的局限,最方便的方法莫过于直接将一个结构写二进制文件。但这样造成了严重的后果,如果以后版本升级,之前的数据文件将不再兼容,虽然有些即便看上去可以用,但值却不是一一对应,可能隐藏一些很复杂的问题。想想为什么现在Office 2007都要用XML来存储,我想,这肯定是经过了太多的兼容性的折磨的。其次微软的跨平台的野心也促使其使用工业标准。正是由于这些原因,这才带来了OpenOffice和Microsoft Office的高度兼容。

再说说数据库里面存放的玩意儿。对数据库我不是太在行,对于表结构那些我没有太多的看法。当然我知道用C++调用ADO访问SQL Server在现在.NET平台下看来简直是没事找事做。强人们用了好几百行代码来写这个数据库部分,有必要么?现在系统数据库里面存储的工艺文件和管形文件是用二进制来存储的,如果要调试,就要用专门的类来进行读取,才知道里面到底有什么。我知道,C++里面操作XML不是一个简单的事情,C++缺少META信息也给序列化带来了不便。这不怪强人们,如果他们出生在我的年代,用上了.NET平台,用上了序列化和反序列化,我想他们肯定很乐意几行代码将需要的结构保存下来,而不是费尽心思去写Load和Save的代码。

回过头来,当身处强人们的位置时,当机器无法快速运行VS2005时,当老板的项目逼得很急时,没有更强的专业开发人员时,作为业余的程序员,也只有选择走一些弯路。越调越多的BUG,越变越复杂的需求,无不深深的折磨着他们身心。而现在项目就要移交给我,我真想将整个项目重新规划,用.NET重写整个逻辑,用C++/CLI来操作工控卡,但,老板愿意承担其中的风险么?他愿意花时间么?一年多积累下来的代码重新以后是不是改动太大了?如果再不做一些改动,恐怕这些代码以后的路很难走。

当然,项目组一起做上来的业余程序员也只能走一步算一步,越走越黑暗,越走越伤心,最终毕业了就真正解脱了——为什么程序开发这么难

日志回来了……

在百度上用百度快照找回来了:

CRYSIS OUT!

不知道我写这个out是DEMO已经发布的意思还是这个游戏即将从硬盘消失的out,呵呵,反正一语双关吧。

今天早上一起来就发现游侠网上说crysis demo发布了,很激动啊!下午陪朋友装电脑的时间就把游戏下载完了,晚上回寝室立刻High起。先是在DX9模式下玩的,速度还行,8800GTS 1024*768全开高还比较流畅,肉眼观察就在15-30帧左右。

后来为了看到very high模式的效果,切换到VISTA系统。终于知道了这个游戏的牛了,DX10模式下面,稍微复杂的场景就只有个位数的帧数…………但整个场景的渲染还是做得比较厚道的,特别是能够看到体积光的效果,看到太阳从海面升起来,看到阳光从树缝里面透过的情景,很棒!!!感觉这个游戏给Futuremark 公司做测试算了,太强悍了。估计3DMark Next会增加类似的场景吧,拭目以待!

图:光照效果(转帖)

8800GTS 320M的显存容量总是硬伤啊,帧数很大程度上都受制于这点点显存。最后还是在800*600分辨率下勉强玩了一会儿 Very High,头晕,算了,关机,回家。

总的来说这个游戏算是图形和可玩性的一个极好的创新,德国人开发的东西果然不错。等待正式版,再玩玩,把显卡再超频一些,恐怕就对了~

=============================================================
果然强悍!
作者:admin 日期:2007-10-26
闲暇之余,一定要讨论S.T.A.L.T.E.R跳票N年之久,以至于当时专为Geforce FX 5800开发的游戏跳票到8800已经量产。在一次Alpha版本“泄露”之后,就曾一度遗忘这个“恐怖”游戏,直到去年发布。但很恶心的是,这个游戏没有什么真正的亮点,在我的硬盘里留不住,人跑得太快以至于晕头,半个小时之后就删除了。

=============================================================
无敌了,又跳票!!!
作者:admin 日期:2007-10-26

现在Crysis倒是赚足了眼球,明明铁打的全球DEMO首发在今天下午5:00,结果遗憾的是在“正式”发布之前几个小时又跳票。游侠网上等待一天一夜没有睡觉的兄弟终于崩溃了。好吧,等吧,当时倒计时指示还有 15个小时,那就是明天早上的7点钟左右。呵呵,回来看看游侠网,哇,不错,EA又跳票了,倒计时还有1天多……

其实都是商业利益在作怪,EA提供给正版预定的人DEMO,这些人称之为VIP。但运气不好的是,这些VIP真正变成了了Very Impossible Pig,哈哈,非常不幸的小笨猪,被EA骗了。DEMO有一个BUG导致很多电脑根本无法运行……EA笑了!

今天“跳票”的主题被EA上演的淋漓尽致,继续跳吧,试问明年IT界的主题是什么?~

破crysis demo说的今天下午五点钟发布(格林威治时间9:00AM),害得我还把VISTA装上,笔记本接上,准备抢先下载这个破玩意儿。结果时间临近了,Y的又跳票到明天早上6点钟!!!!!15个小时啊!!!什么意思嘛,还好我不支持这个破游戏的正版,跳票跳得比我还牛逼!我倒要看看这个破玩意儿到底最终提供了什么可玩的东西!!!~!!!!

失望~

最近学英语
作者:admin 日期:2007-10-25
最近学英语也不是突发奇想,而是大四的时候就觉得真的有必要了。最近又比较闲,所以开始学。

基本方法找到了。

听:www.putclub.com上面的文章。最近锁定在:NPR Channel(地址:http://bbs.putclub.com/index.php?showtopic=110122)。一半是三至五分钟的文章。方法:先听一遍(用听写软件:http://www.putclub.com/article.php?articleid=117),看能不能听写,当然,很多时候听得云里雾里。然后就是看看提供的原文,学习中间的单词,句子等等,多听几遍,把一些弱读连读的部分听出来就对了。然后重新听写,看看学习的效果。一般来说一个到两个小时吧。但下午这样做的话感觉效果不好,单词很多以后就忘了。

读:早上读英语《时代》周刊精选阅读,这个难度还是可以的……后一步要改良一下,把听写的文章读一下,尽量集中熟悉一篇文章上面,免得分散了。晚上有空读China Daily,不买,图书馆阅读,买了的半天不看浪费。

写:预计要抄写听写的文章,然后用于第二天阅读。

坚持就是胜利~ go on

彻底晕死

前天个人主页的主机挂了,今天恢复正常了。郁闷的是,怎么我之前的日志不见了!!!!……!!!有没有备份,哎,真是彻底晕死。

看来以后要经常备份数据库了,这些破坏主机的人一天也是没事情了,靠~

计划

两个月过去了,除了做一些项目以外就是玩,没有学到太多的东西,接触了一些人,更深的了解了一些人。但生活还是过的没有目标,不像当年本科阶段,年年都有自己的计划。至于刚开学一两个月的迷茫,这是相当正常的,没有目标的生活即将结束,要做点什么了。

周末的时候和两个朋友随便聊了聊,觉得有些学校的研究生的生活和我们现在的处境大不一样啊,当然这和导师的差异有相当大的关系。但总的来说,无论如何,还是要把英语学到手,对于我来说做项目只是一些时间和技术上的问题,而这两年越来越感觉到英语的憋足和退步,使我不得不重新拾起它。

往往制定计划比执行计划简单,但往往执行计划变得那么复杂就是因为制订计划时制定得太简单。当然我不是说这个计划要定的很复杂,而是要根据自己的需求,选择一个适合自己的道路。比如我不太喜欢文学方面的东西,就大不可必要去借那些文学原著,而是读一些报纸、简短的科普文章等等,丰富自己的阅读而又饶有兴趣。我语法还比较贫乏,对于词法更是欠缺,所以也得首先弥补这方面的东西。单词就从报纸上获得即可。

我自己的计划是今年能够基本上吧China Daily上面的文章看个大概明白,当然很多词汇的积累也要从这里开始。研一一年应该达到读China Daily除了专业词汇不去翻字典了,阅读时不翻译阅读,提高阅读速度。

读和写应该从这里开始,还有听说的能力也是要提高的。听只有靠每天的常速英语来练了,辅之于一些写。说得能力在没有语言条件的环境下还有些麻烦,日后在寻找解决方案,但是每天还是要读一些东西,练练嘴。

所以研一暂时就制定这个计划了,至于其它什么项目什么的一律滚蛋,我想每天抽出一定的时间来做这个事情,一年后一定有效果的!

剩下的就是早上稍微早点起来,平时多听多练,一定会成功的~!

测试英文单词和语法能力的网站

最近要考虑在研究生阶段逐步将英语能力提高了,这个是真正的为自己。学术、工作都是次要的,要将大学4年欠的英语的帐给补回来。

最近在看www.putclub.com上面的帖子,先要给自己定一个合理的计划,看看人家是怎么做的。

下面这个是一个测试英语单词和语法能力的网站

http://www.test-your-english-now.net/

我测试了一下,2000词汇一下吧……~太次了,呵呵