All Stories

看云风的blog有感

  看到云风blog上关于C和C++的争论,有点反感。本来对云风的印象也不深,只知道当时网上有个关于游戏编程的个人主页,上面有些有趣好玩的东西,一个学生写出一个游戏开发包,也有点让人佩服的。自从他出了本书,看过那本书后,印象就不怎么好,总觉得书上全是吹嘘自夸的,没有多少实际有用的东西。现在再看这blog上的一些他的做法、观点,实在有点恶心。  他居然说用C写的模块比用C++写的好维护!真不知道怎么妄自得出这样的结论来的,难道那些研究出OO,发明改善C++的先辈们真的全是做的无用功。只是写过个游戏开发包,做过一两个网游,就敢这样大放厥词,实在让人不爽啊!而且看过他在书上列出的那点代码,也实在没什么水平可言,总让我感觉是自己不行然后去批判别个不好用。再怎么样,说说我们公司那些产品,应该也是几百万行代码规模吧,也是嵌入式,又是对性能要求比较高的场合,现在不也是用C++了么,不也是用STL了么,还是本领域内市场占有率世界第二呢!有点想骂人,唉……

坐车坐到冒烟

  下班回家坐328,结果渐渐闻到一股什么东西烧焦的味道,结果车停下来了,坐后排的人往后面看了看,还说这车子烧着了,突然一车的人都开始往外跑,几个女的还被弄倒在地,还有丢掉鞋子的,呼呼。

Boost1.34.0正式发布

  在经过Beta、RC后终于在5月12日在主页上宣布1.34.0发布了!相比之前的1.33.1改动是比较多哈,当然,加入的新库都是些小规模的,好在不用编译,哈哈!  昨晚堂哥告诉我二伯被人砍了,今天打电话去问候了一下,背上、头上、臂上各中一刀,所幸都没中要害,力道也不致命,那种凶手真是猪啊,老大的年纪了脾气还这么坏,这样的大人都教育出什么样的小孩来呢!  参加一个正式的项目对人的锻炼还真是有点用的哈,至少我现在知道有序列图,UML图这些东西了,哈哈,而且逼得我用MFC写程序,确实不知道为什么,用VC写代码风格总比在BCB下写的好看,呼呼!  用StarUML来建模,呵呵,只要开源软件足够好用,还是很能吸引人的。  从微软的网站上下了个XML Notepad 2007来写简单的XML文件,也挺好用的,至少比直接用UltraEdit来写方便多了,哈哈,这也是免费的。  关键是这些工具比起那些商业付费的同类来说,很小巧啊,而且功能上已经能够满足我目前的需求了。但是有些软件是不得不用D版啊,比如Office、VS、BDS……

从XUL说起

  心血来潮,又去Songbird的网站看了一下,还把编译好的Preview的安装程序,以及SVN里的源代码都下下来了。只可惜看了半天的编译说明,还是没看懂,唉,这个说明也太烦琐了,条理都不清晰。这样看来,Mozilla的XUL解决方案怎么推广得了哦,想想Adobe、MS这些大厂商的解决方案,一整套完整的流程支持,各个环节都可能会有比较完善的工具支持,而且安装部署都会很容易,一张光盘,一个ISO镜像,一个setup.exe文件就搞定所有的事,一切都准备好给人使用,有多少比例的人愿意去花那么些时间搞那么麻烦的mozilla的东西。Mozilla社区确实应该好好想想,反思一下,为什么XUL技术出来这么多年,Mozilla里也用了那么久,却一直没有被大众接受,直到现在这些大厂商出来推,才火起来。也许从技术的角度讲,各个解决方案间没有特别大的区别或差距,但是易用性、友好性方面呢,可能差得太多了。其实这也是众多开源项目的通病啊,孤芳自赏的hacker想法是走不出hacker圈子的。  装上Songbird,听了几首MP3,就把它卸载了,现在的条件用XUL技术来实现这样的桌面应用时候还早了点,连一个窗口里点菜单,点右键,来回换输入焦点都会卡好几秒钟,有几个人受得了,换回foobar2000,看起来轻巧多了。所说Firefox3.0也是基于XulRunner来实现的了,就像Songbird一样,进程管理器里可能就看不到firefox.exe了,而是一个XulRunner.exe。这样就像Java之类的了,虚拟机实现的东西,除非是开发效率或其它有什么特别突出的优点,不然是不会被大众接受的。  Mozilla能有那样好的扩展能力,其实从某方面讲,跟Eclipse、Emacs等是一个原因,那就是脚本语言和本地代码的结合。它用XUL描述界面,用C/C++实现真正的逻辑,再用JavaScript把两者结合起来。这样看来,只要能把描述界面的部分规范下来,真正的核心逻辑用C/C++实现,再设计一个良好的两者互动通信机制,那么一个弹性极佳的系统也就设计出来了!LLYF Spy中,是应该好好设计一下了,2.0可以只做预研性的设计和实现,3.0可以考虑实现成一个程序员工具平台了,只要扩展机制实现得好,可以给它添加各种扩展功能,比如编辑器,比如听MP3,比如下载上传……

Boost是一天一个Release Candidate啊

  正式版就要发布啦!  好困好累哦!都不想动了!开心就好!

跟小思宇全家吃饭去了

  今天小思宇说她爸妈定了12号回去的机票了,于是我问她晚上有空一起吃饭不。最后定在万科城的关东风饺子馆,跑上跑下去借张优惠卡,结果到买单的时候才知道,预订桌席的就已经有八五折了,晕!小思宇长得跟她爸很像哦,照小妞的话说,她爸长得很可爱,一看就是很慈祥的,呵呵。不过今天小妞好像状态不好,战斗力下降,而小思宇则更不行了,柳妈妈也是只是稍微动了一下筷子!

今天又浪费掉了

  上网聊了一晚上天,也没做什么事,现在体会到软件架构设计的重要性了,也体会到为什么会有人去发明什么UML了。  现在觉得似乎用VCL还是得用第三方控件啊,尤其是界面方面,装了几个控件包,试用了一下效果还是挺满意的。不过我最喜欢的界面控件应该是像VCLSkin或XPMenu那样,用原生VCL控件画完后,只要放上这样一个第三方控件,就能直接把界面效果改掉了。而现在看到的BusinessSkinForm、DynamicSkinForm、KSDev、Raize这些都是把一个一个控件自已实现了一遍,如果原来已经画了界面的,就很麻烦了。  VCL是不能跟Boost很好地混用的,因为Boost中大量应用的模板技术,泛型编程,很多都极度依赖C++的语法,比如回调,用()来调用可调用体,用Object Pascal写成的VCL可能就不行了,所以尽管我没真的试过,还是放弃这个念头了。要有Boost就老老实实地只跟纯C++程序一起用吧!

五一长假结束了

  五一长假终于结束了,这是最省钱的一次长假了,只买了个双肩背包和一瓶15ml的眼部护理凝胶,呵呵。本来还跟小丫头说,每次长假是一次比一次花得多,小丫头就说我就是这样变穷的。  代码结构改掉,引出的问题还真的挺多的。因为希望能尽量减少对VCL的依赖,于是不用IntToHex,改用Boost::Format,突然发现有很严重的性能问题,调了好一会儿,甚至想过要放弃而改回VCL,最后发现,只要合理地整改程序结构,多余的操作不做,速度自然就提上去了。不过让我还是有点担心的是,Boost::Format是不是真有性能问题。暂时也不管了,反正能满足要求了,而且把AnsiString::Pos也换成用Boost::string_algo来实现。另外还有一个问题是,TCanvas还没能去掉,应该直接换用API画。  其实这次代码重构的一大目的是为了把原来写在MainForm类中的3000行代码精减,初步目标是控制在1000行以内,如果能更少就更好了。另外一个目的是要把不同类型的功能划分成不同的模块来实现,这样也是为了能更好更方便地支持多种类型的插件和协件。  再次,这回要把各种全局设置、协件、插件、外部工具等设置都做到同一个设置对话框里去,所以想要一个更好看点的界面,看到Foxmail里那个不错,观察了一下是用了TZlistbox控件,网上找了一下,好像是付费的。如果直接用TListBox就太土了点,又观察了一下VS2003里的向导,是用HTML做的,原来是没注意过的,也是因为MS用HTML做的界面经常做得像Native程序一样,所以也看不大出来,上次听同事说起过,今天看了一下,就是几个HTML文件在那里切换,自己实现几个接口就行了。当然,今天又得到一个教训是,在这种情况下,能让脚本做的事,就尽量让脚本做,放在C++里增加了不少复杂度,而且某群人说过比较极端却也不无道理的话,“一行脚本顶一百行C++代码”。比如原来我嵌入的WebBrowser里面没有XP风格,后来发现只要加一句HTML代码就行了。还有,一直没解决的屏蔽F5刷新的问题,在网上找了找,其实几行JavaScript代码就搞定了。  最后,看到有个叫ShowHTMLDialogEx的API,可以直接弹出个对话框浏览HTML文件哦,比较方便。

Inno Setup挺好用的

  Inno Setup真的挺容易用的,小巧轻便,又免费。本来还专门整了个安装输入法的程序,把ime文件复制到系统目录下,再写一下注册表,调用一个API,最后把所有文件用WinRAR打包成自解压文件。其实这样的方案也不是不行,只是觉得自解压的界面丑了点,看起来更业余了点。于是抽空用Inno Setup整了个,ISTool才是其中的大功臣,把本来全部要用代码完成的功能分解到各个GUI窗口中进行设置。它可以完成复制文件,操作注册表,调用简单API等功能,实在太方便了。现在我这个安装程序还可以自动寻找上一次的安装路径,可以根据用户选择写入不同的内容到注册表中,用户体验应该说还是不错的,哈哈。  生成的安装程序在系统菜单上显示的“关于”选项,会弹出一个版权信息消息框,如果要改这个消息,应该改setup.e32文件中对应的信息。我开始用UltraEdit来改,但改了总是出错,于是把源代码弄来自己编译一个setup.e32,不过有一个问题是,我自己编译的体积要大好多,不知道哪里的问题,而且界面显示上有一点点问题。另外,安装程序文件查看版本的时候,在“备注”一项里,也会有固定的标识,也是可以用改资源的方法处理的,如果有代码的话,先修改一个SetupLdrVersion.rc文件,再编译成res,最后编译一把SetupLdr.e32就行了。在编译Setup.e32时,会要求有RemObjects的Pascal Script控件,下一个装上就行了。最后还有一点是,它居然不能用Delphi7来编译,看代码中的注意说,用小于7的版本,或者9都可以,9应该是2005吧,反正我在2007下面是编译过了的。