missdeer 之编出来的幸福

倚楼听风雨,淡看江湖路——未来的不可知,是我们前进的原动力!花开,然后花落,星光闪耀,不知何时熄灭。这个地球,太阳,银河系,甚至整个宇宙也总会有消失的时候,人的生命和那些相比只不过是一瞬间吧,在那一瞬间中,人诞生,微笑,哭泣,战斗,伤害,喜悦,悲伤,憎恨谁,喜欢谁,所有的一切都是刹那间的邂逅,谁都不能逃脱死亡的长眠……

2009年06月20日

原创 在CI中使用bjam构建项目

不知道什么原因,我的机器上什么VC2008命令行来编译项目,无论是devenv.com还是devenv.exe,都会占满CPU,而真正的编译进程cl.exe却一直慢吞吞地,几个文件的小项目,也不知要等上多少时间,在持续集成时实在忍无可忍。  不过因为之前有一段时间专门学习了一下如何使用bjam,所以我就决定在CI上,使用bjam来构建项目。统计了一下我的项目的情况,有用MFC的,有用WTL的,也有用wxWidgets的,有用VC编译的,也有用MinGW编译的,无论哪种情况,bjam都可以满足需求。 使用bjam的一个比较方便的特性是,它能比较智能地自动为不同的编译器套件使用各自的命令行编译选项,这样使得一个bjam脚本可以同时不同的编译器套件来编译。不过实际使用过程中,还是有些需要区别对待的地方,这可能是因为bjam主要用于boost的构建这个目的而产生吧。 比如对于VC和MinGW,可能链接的库文件是不同的,要么是文件名不同,要么是所在路径不同;链接选项可能不同,也许是boost的原因,bjam在构造exe时,默认是使用控制台子系统,所以需要自己在链接选项中自行阅读全文>

发表于 @ 2009年06月20日 10:42:00|评论(loading...)|编辑|举报|收藏

2009年05月31日

原创 boost svn中也有编译不过的代码

回到家,习惯性地更新了一下boost svn中的代码,从来都最多只看一下哪些文件更新了,至于具体更新了什么内容,却从来没有关心过,也不是我能关心的。 然后整了一下自己写的一些代码。 再之后是继续整前几天放假时写的一个小程序,结果突然发现编译不过了!开始还怀疑该不会是VC出问题了吧,重启了一下VC,没用!于是看了一眼出错信息,定位到出错代码行,是boost::signals2中的一个叫signal_template.hpp的文件中。众所周知boost的代码只有超人才能看得懂,而我很幸运地不是超人,所以就看不懂啦!折腾了一阵,也没有办法,后来猛然看到这代码中明显是语法错误嘛!我猛烈地faint啊,原来超人也会犯错儿呀!尝试了一下把这语法错误修正,结果编译时报的是其他地方的错了,这我就不晓得是什么原因了。无奈之下,为了能正常编译我的程序,只好回退到之前一次提交的内容去了! 目瞪口呆!阅读全文>

发表于 @ 2009年05月31日 21:02:00|评论(loading...)|编辑|举报|收藏

2009年05月30日

原创 鼠标手势算法

今天看到一篇文章,讲鼠标手势算法,觉得有点意思。现在不少软件都有了鼠标手势支持,尤其是浏览器,几乎成了高级用户的标准配置了。 这算法分为4步。 一、过滤鼠标移动动作。如下图所示,这步过程把一连串的鼠标移动动作中幅度过小的动作过滤掉。这跟系统配置也有点关系,不同的配置下,记录鼠标移动的速率等量纲有所不同。 二、限制鼠标移动方向。如下图所示,对于简单的鼠标手势支持,只支持上下左右4个方向,就把其他方向的动作都归并到这4个方向中。一般就是比较一下上下方向和左右方向的差值,取大的那个作为最后的方向。 三、简化移动方向序列。如下图所示,这步非常简单,原本是右右上上右上上的方向序列,简化后变成右上右上了。 四、匹配和推演。这步是最困难的,表面是把夹杂在长距离移动动作中的短距离动作过滤掉。大概的做法是先把整个动作序列与一组预定义的序列匹配比较,如果匹配失败,就把这序列中最短幅度的动作过滤掉,再进行匹配,如此循环往复,直到最后匹配到为止。 阅读全文>

发表于 @ 2009年05月30日 12:03:00|评论(loading...)|编辑|举报|收藏

2008年10月18日

原创 自定义保存文件对话框

早就想在保存文件时,能让用户顺便多输入点信息了,于是自定义保存文件对话框的需求就提上来了。在网上搜了一遍,各种方法倒是不少,不过都跟我想像中的有点区别,我想在MFC中做,就希望能尽量的简单方便。于是就搁下了,直到前天,在公司里想起这件事,问了问同事,同事给我一个例子,VC6写的工程,看了觉得很简单,但是回家自己弄还是不行。昨天又跟同事交流了一下,再加上晚上在网上找资料,结合着弄,终于成功了。 首先,添加一个对话框资源,加上需要的各种控件,最重要的是要加一个ID为stc32的控件,可以是Static,至于大小、位置,可以之后慢慢调整,以及对话框的风格要加上WS_CHILD。 然后,给该对话框添加类,基类就选CDialog好了,生成代码后,把基类从CDialog改为CFileDialog,尤其要注意,CFileDialog的构造函数需要更多的参数。 再之后,要给m_ofn成员初始化一下,先是dwFlags要有OFN_ENABLETEMPLATE,再lpTempate要指定到刚才活到的对话框资源。 最后,就是看情况,重载几个虚函数,比如OnFileNameOk,阅读全文>

发表于 @ 2008年10月18日 09:19:00|评论(loading...)|编辑|举报|收藏

2008年10月09日

原创 再次放弃升级工程到VS2005

本以为今天闲一点了,可以干点其他事了,于是琢磨着把工程从VS2003升级到VS2005。升级的事,之前一直有想,但一直由于这样那样的原因而放弃了。这次又动了这样的想法,一方面是因为VS2005上才有Refactor!,另一方面是换了高版本的dot后,dot本身就带有8.0版本的crt dll,所以想着如果把7.1版本的crt dll换掉,感觉会舒服一点。 先看了看最基本的ACE和XTP有VS2005编译出来的lib和 dll,然后开始升级工程。这次学聪明了点,不停靠VS2005自己的升级功能,而是直接自己编辑.sln和.vcproj文件。基本上只要把版本号改了,就可以了。为了回退方便,我先复制了各个.sln和.vcproj文件,并改名,然后才改版本号。再用VS2005打开,编译链接。这个过程倒没出多少问题,2005和2003最大的几点区别是,2005中对字符串操作的函数作了扩展,其次是manifest的引入。这都没有引起多少麻烦的事,只略作修改就可以了。 最后却因为另外一个没想到过的问题而促使我放弃了升级:编译太慢!真是没想到啊,也不知道是本来VS2005的编译器就比较阅读全文>

发表于 @ 2008年10月09日 21:41:00|评论(loading...)|编辑|举报|收藏

2008年10月06日

原创 升级dot

今天偶然发现有一个图,dot会崩溃,换到2.20.x版本后,就没问题了,看来在适当的时候,升级是很有必要的。但是同时又引出一个新问题,高版本dot生成的svg格式,里面使用的坐标系比以前的复杂了,居然出现了科学计数法和负数,这让原来勉强能工作的格式化后活动框的定位又不行了。经过一番研究,发现在svg的开头有一个transform属性,该属性的值分成三部分,其中一部分是translate,经过试验发现,该translate的值加到下面的坐标系中的值,刚好能对应上以前使用的那种方式的坐标系统表示的值。于是乎,也就是说,又要多一步操作了。 升级到高版本的dot,同时也带来一个新问题,就是如果发布这个dot套装。反正我是不想在我的安装程序里面再执行一遍Graphviz的安装程序了,像Wireshark一样,感觉不是很舒服。之前的低版本(好像是2.05.x还是2.15.x)dot,很简单,一个exe文件,五六个dll就搞定了。而新版本的dot而远远不是,经过在一台没装过Graphviz的机器上实验发现,比较省事的一个办法是,复制dot.exe和所有同目录下的dll,一个config文件,一阅读全文>

发表于 @ 2008年10月06日 23:27:00|评论(loading...)|编辑|举报|收藏

2008年10月04日

原创 WallpaperHelper W.I.P.

昨天说干就干,打开尘封很久的工程,添加一个窗口,把那几张现成的图片抠过来,然后计算一下桌面工作区大小,把窗口放在桌面右侧,像是侧边栏的样子。结果一开始,什么都没有显示出来,这是相对比较麻烦的出错情况,因为根据之前使用GDI+创建异形窗体的经验,这时候任何地方都有可能是出错的地点,所以要找出原因就要费点工夫。仔细对照之前写的代码,一点点的修改,终于能让它显示出一个窗口了,但是窗口仍然是窗口,没有按照预想的那样把png图片显示出来,并按图片渲染窗口形状。最后发现是在创建窗口的时候,因为心急,直接把窗口设置为桌面的子窗口了,如果把那几行代码去掉,就都正常了。经过这次实践发现,用GDI+实现异形窗体可以随意缩放窗口大小的,一般说来,要把窗口调整到需要的尺寸,通常是大于或等于图片原始大小,这时再把图片按窗口大小画上去就可以了,这种特性在绘制侧边栏的时候有用,比如可以只有小小一张图片,但侧边栏可能很长,就直接这样拉伸了。 能显示出侧边栏的底座了,就要开始考虑接下去怎么做了。鱼鱼和雅虎是两套不同的方案。鱼鱼只是能计算一下各个widget的大小尺寸,根据当前侧边栏上停靠的widget计算出其他w阅读全文>

发表于 @ 2008年10月04日 11:26:00|评论(loading...)|编辑|举报|收藏

2008年10月03日

原创 研究了几个widget工具

昨天心血来潮,装上了鱼鱼桌面秀看了看,以前也是装过的,有乱码,现在经过几个版本的更新升级,软件名称也已经换过了,但是乱码问题还是没有解决,原来用Delphi开发的就这么郁闷啊!我用的是英文的XP,打了中文语言包,照理显示中文是没有问题了的,不过这个软件在安装路径中如果有中文的话,就不能正常启动。另外,界面上也不全是乱码,某些地方的中文还是能显示出来的。还有,装的2.1.1纯净版,运行非常不稳定,经常出错崩溃。如此看来,这个软件也就是界面上比较出色了。 说完了缺点,来看看它的技术特点。现在这个软件也算是一个widget工具了,可以有一个侧边栏,依靠在桌面的右侧,在该侧边栏上的可以安放一些widget,一般就是显示当前时间,当前CPU占用率,内存使用率,某个城市的天气情况等等,翻来翻去就是这么固定的几个内容,主要体现在界面上的设计有所不同。看了一下它的SDK,终于基本搞明白,原来是程序内部固定了只提供这些服务,外部每个widget有一个脚本文件,可以是vbs或js,调用程序提供的那些对象、方法,然后绘制界面。除了一个描述逻辑用的脚本文件外,widget还会有一个配置文件,记录一些最阅读全文>

发表于 @ 2008年10月03日 10:21:00|评论(loading...)|编辑|举报|收藏

2008年09月26日

原创 Office2007的改进之处?

今天突然想到,之前遇到的两个操作Excel的问题,该不会是在2007里对2003版本的修正吧! 最早使用COM操作 Excel2003出现的问题是,在我的电脑上,打不开Excel文件,硬是说没有正确的序列号,我分特,公司花了那么大一笔钱买了license的!想了一些办法,仍然没有解决,为了不影响进度,忍痛在512MB内存的机器上装了个2007版的Office,但是奇怪的是,如果直接运行Excel 2003 SP2,编译文件什么的,都是好好的。 第二个问题是,突然一夜之间,所有的使用Excel 2003的机器上,都不能对图形全选操作了,用鼠标是可以选择的,但如果通过代码来SelectAll则必定异常,无论是在VBA中,还是通过COM接口操作,屡试不爽!很无语的是,当时定位了好久,也因为只有我自己的开发机上是用的Excel 2007,根本暴不出这个问题,最后找到出错处后,仍然束手无策,一狠心,再也不copy图片了,而是提取出各个图形节点的位置信息,自己用GDI一个一个画出来,同时带来很严重的失真现象。自己画的线条没有抗锯齿,没能好好计划节点内的文字大小和位置,没能按照连接线的阅读全文>

发表于 @ 2008年09月26日 22:25:00|评论(loading...)|编辑|举报|收藏

2008年09月07日

原创 exchndl.dll提取出来了

昨天好不容易咬咬牙,把捕获未处理异常的功能提取出来封装成一个dll了。这是一个很简单的功能,所有的代码都是现成的,我只不过是把它从源代码复用的方式改成了二进制复用。当时公司里的同事说我这源代码复用的方式太落后,想叫我改成一个COM组件。而我又恰恰对COM很反感,所以一直都没动手。这次在一体化平台中涉及到2个exe程序,而只在一个主程序中用到了这个功能,有一天收到一个报告,另一个exe程序也会崩溃了,所以就有了要分离出来的想法。 提取成dll我当然不会用COM来封装,而是学MinGW中的exchndl.dll的方式,移植的主要工作是把MFC中的CString类都替换掉。这花了不多的时间,然后放在WallpaperHelper中进行测试。 除了记录了系统简要信息和调用栈信息,我还另外加了几项也许有点用的内容,包括当前系统中所有的进程、环境变量、当前进程所有的模块、所有线程信息。本来还想加些其他内容的,比如当前系统的服务信息、系统设备驱动程序信息、当前进程的所有句柄、所有文件映射、所有窗口等等,不过想到暂时这些信息也不是很重要,而且这样会让生成崩溃报告的时间更长,先还是放一边吧阅读全文>

发表于 @ 2008年09月07日 21:39:00|评论(loading...)|编辑|举报|收藏

2008年09月05日

原创 使用iconv转换字符编码

昨天从网上查到,要让dot支持中文,必须得把dot文件保存成UTF-8编码,可是我用C Runtime、MFC CFile、C++ iostream都只会保存成ASCII的,于是不可避免地要再多一道工序把字符编码转换一下。 从一开始我就想到了iconv。先拿来它的可执行文件,在控制台上尝试了几次,原来是要把中文的设置为gbk才行,如果是ascii或者 gb_2312-80都是不行的。知道iconv确实是可以将编码转换后,就放心大胆地在程序中使用iconv库了。从公司归档库中找得到的只有1.9版的,但好在.h文件和.lib文件都有,看了一下头文件中的声明,猜猜也就是先iconv_open,然后iconv、最后iconv_close共三步操作而已。于是先把文件都读出来,然后iconv。可是死活不能把转换后的内容存放到目的缓冲区中,而源缓冲区,以及返回值,还是源数据长度和目的数据长度却都是对的,实在不得要领。这样郁闷了好久,还是不得其法,于是准备直接用iconv.exe来转换算了。 iconv.exe转换时会把转换后的结果直接在控制台输出,可以通过管道重定向到文件中,可是在程序阅读全文>

发表于 @ 2008年09月05日 22:46:00|评论(loading...)|编辑|举报|收藏

2008年09月04日

原创 终于借到《Lex与Yacc》了

几个月前,就想从公司图书馆去借本《Lex与Yacc》了,可是从在线服务中可以查到确实有一本没有借出去,但到了图书馆就是找不到那本书放在什么地方了,图书馆的人说他们也没有办法找到,因为书要么就是照着编号放在书架上的,如果在指定的书架上没有,那就没办法了。我还为此去了几次图书馆,希望碰碰运气万一某一天他们整理的时候能发现那本没有找到的书,但是一次一次都失望而归。也想过自己买一本,但逛过深圳的几处大型书城,都没有找到过,从网上倒是能看到介绍,可是都是断货了,太郁闷了! 昨天觉得该去还那本《Windows技术内幕》了,虽然借了三个月,但没看几页。到图书馆一看,惊喜地发现有一本《Lex与Yacc》静静地躺在柜台面上,看来是刚刚有人还回来的,连忙抢到手中。 实在觉得这词法分析和语法分析在处理模式化文本时太有用了。说起来虽然现在在做那个劳什子一体化平台,可是我心里却一直想回去完善编辑器,简直有种生不逢时,壮志未酬的感觉。本来同事是有一种语法解析组件的,大概浏览过那代码,其实是从ruby源代码里抠出来,在某一阶段直接把语法分析树dump出来。不过不知道为什么在源代码超过8000行时,分析阅读全文>

发表于 @ 2008年09月04日 21:32:00|评论(loading...)|编辑|举报|收藏

2008年09月03日

原创 Google终于也出浏览器了

今天在公司就发现有人传了个chrome的完整安装包上来,都没有安装过程,直接双击,过n秒钟的后,窗口就弹出来了,很简洁,简洁得让人感觉像是个玩具。只玩了两下,就没了新鲜感,就凭它现在的状态,它是吸引不了我的,我还是继续用回Firefox,那些使用习惯设置,插件,都已经成为我暂时离不开 Firefox的理由。 回家打开Google Reader一看,n多blog和discussion在描述chrome,顺便让我有那么一点点惊喜地发现这还能直接从svn里下到源代码!不过就像其他的各种开源源代码一样,不到真的要用时,我是决计不会去看这些源代码的,尽管我确实已经下了不少源代码了,包括Code::Blocks、 CodeLite、notepad++等等,都是因为在某些时刻突然觉得这些源代码有一定的参考价值,而且update这些源代码也成为我每次打开电脑后几乎必做的一件事。但实际上,我却还是没有真正能从这些源代码中获取过多少有用有价值的东西,这不怪这些源代码,而要怪我自己。公司里有个牛人,看部门似乎是个做硬件的,却好像看过n多开源项目的源代码,包括那些BSD系统、Linux系统的,实在佩服这阅读全文>

发表于 @ 2008年09月03日 19:31:00|评论(loading...)|编辑|举报|收藏

2008年08月25日

原创 调了一天ACE

上周没调完,今天接着调,调了一天,勉强可以实现点对点文件传输了,但还剩下不少问题,比如我会在服务器端先读入整个文件,如果该文件很大很大,岂不是很占内存,如果超过了物理内存的容量,要动用虚拟内存,岂不是效率又会降低不少!这只是众多问题中的一个,还有其他各种问题,只能走一步算一步了,关键是先把容错性做好,不要动不动就崩溃。 现在的情况是一个程序里,又当服务器端,又当客户端,两边我都是用reactor实现的,其实我对其中的工作原理一窍不通,只不过抓来几个例子,照着书上写的拼凑起来,好在调试工具还算好用,加上一点点的抽丝剥茧,总算理出点头绪,也得到些经验教训。 首先,不要为了图省事而使用那个全局单件reactor对象,我开始的时候服务器和客户端共用这个对象,后来觉得不妥,把客户端的改成一个客户端连接临时生成一个reactor,使用调试工具发现勉强可以用了,服务器端却不会自动调用handle_output,后来把服务器端的那个reactor也换成自己生成的,竟然也可以了,也许是我没用对,但反正现在它几乎能运行起来了。 其次,无论reactor是用在服务器端还是客户端,都要 阅读全文>

发表于 @ 2008年08月25日 19:15:00|评论(loading...)|编辑|举报|收藏

2008年08月24日

原创 VS出问题了

发现机器上装的几个VS出问题了。6.0不说,因为压根没想过要用它。2003出问题似乎是最早的,大概是因为最早用得最多,就出问题也早,发现问题也早,现象是时不时弹出个消息框说什么GDIPLUS怎么出错了,而且一弹就会连续地弹好几次,让人受不了。2005本来还没怎么发现问题的,因为不常用,要用也是2003或2008,当时只是发现它的菜单怎么变中英文夹杂了,也没怎么在意,反正看得懂,最近一段时间想用它来创建个工程,发现这个 wizard不能用了,估计也是因为这本地化引起的,老是去不存在的目录下查找那些html文件!最后说2008,2008是今年开始用的,春节回家的时候用它来写WallpaperHelper,当时安装的时候也费了些力气,新建个MFC工程来编译,发现还缺几个.exe文件,抱着侥幸心理从2005那里照着文件名拷贝过来,发现勉强也能用,结果今年上半年堕落颓废了,看小说去了,几乎写过代码,现在发现2008里的资源编辑器不能用了,资源视图里都打不开资源,只是报个RC多少号的错,我也懒得再去查这是什么错了,反正这个资源文件是肯定没错的,郁闷死! 没耐心继续跟它们耗了,直接卸载,重装!阅读全文>

发表于 @ 2008年08月24日 11:12:00|评论(loading...)|编辑|举报|收藏

Csdn Blog version 3.1a
Copyright © missdeer