2007年12月
微软在VC里添加了很多的关键,比如__interface以方便编写COM组件,但是Doxygen并不认识,所以不会生成文档。但是,Doxygen留下了扩展空间,就是可以支持预处理,这样就可以把__interface进行重定义。 具体做法是,在高级选项里找到Preprocessor,然后设置 ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YESEXPAND_ONLY_PREDEF = YESPREDEFINED = __interface=struct http://osdir.com/ml/text.doxygen.general/2003-06/msg00066.html 就一切OK了,Doxygen真是好东西啊!阅读全文>
发表于 @ 2007年12月28日 11:12:00|评论(loading...)|编辑
动态库的加载有两种方法:隐式和显式。隐式就是在编译时链接Dll的引入库lib,然后在程序启动时由OS自动加载对应的Dll,显然这会略微增加程序启动的时间。而且,如果Dll不存在的话,程序还无法启动。显式加载,就可以灵活判断,在需要时再加载Dll,万一加载失败还可能绕过去,而不至于让程序无法启动。但是,显式加载,需要主动调用LoadLibrary和GetProcAddress函数,代码会显得很啰唆,而且调用还必须知道被调用Dll的名称(不利于以后调整)。 有没有一种好的方式来解决这个问题呢?我以为,需要灵活处理。即对于相对独立使用的Dll,可以使用LoadLirary的方式来显式加载。而对于会被反复调用的公共模块,则使用隐式的方式加载(比如一个显式加载的Dll内部,也可以通过隐式方式来引用别的Dll)。这样就可以比较好的平衡开发效率以及运行效率的问题。 其实VC提供了一个编译选项/DELAYLOAD,可以自动把隐式加载变成显式加载。其实是延迟加载,即在被调用Dll第一次被调用时自动加载,而开发人员不用修改代码。这样,就把隐式和显式加载的好处都囊括了!但是,因为需要一一指定要延时加载的Dl阅读全文>
发表于 @ 2007年12月26日 18:55:00|评论(loading...)|编辑
习惯了C++的编程模式:编辑,保存,编译,运行和调试之后,就忘了其实还有另一种编程模式--交互式编程。很多脚本语言都提供类似的控制台,直接输入脚本语句,回车就执行了,结果立即显示出来,而不用经过复杂的保存和编译阶段。 交互式编程,对于简单的尝试性的操作是很方便的,比如测试一个函数的用法。因为输入语句之后,就可以立即得到结果,你就知道问题出在哪里,立即就可以修正,开发的速度于是得到了极大的提高。想想看,如果在C++等语言里,你是如何做到这些的。1. 打印输出结果到屏幕,到日志文件,或者MessageBox 2. 使用调试器单步跟踪或者设置断点。不管是哪种,都是比较费劲的,一旦发现问题,还必须终止整个程序,重新再来。如果程序加载的时间很长,或者需要经过很多步骤才能到达指定位置,你就更辛苦了--虽然VS2005等工具可以实现调试状态下修改C++代码并接着运行,但是我用的还是不多,好像不是那么灵便。 如果只是想实现一些临时性的操作,比如查看某些信息,那么交互性编程的优势就更凸显了。因为是临时性的操作,随意性会比较强,很多时候是看到一个信息之后才会想到要做另一个操作,所以不能事先想得很好。这时候阅读全文>
发表于 @ 2007年12月21日 10:22:00|评论(loading...)|编辑
软件代码不公开,除了担心别人抄袭,另一个担心就是安全。有人因此说,开源软件不安全。这有点像鸵鸟遇到危险的时候,把头埋进沙子以为自己看不见危险就不存在了一样。而恰恰相反,只有把代码公开了,让无数双眼睛来注视,安全隐患就会无处可逃。当秘密已经不成为秘密的时候,自然就会有很多的补救措施。如果前面立了一个警示的牌子,你就不会掉进阴沟里。最大的危险,就是当秘密成为秘密的时候,只有少数人知道漏洞在哪里。那么,这少数人可以绕开这个漏洞,当然也可以利用这个漏洞,而大多数人只能成为无辜的受害者。所以,真正的安全不是封闭,而是开放。真正的安全不是让你无知,而是让你知晓一切。真正的安全就是完全透明,却还是无懈可击,这才是最高境界。 当然,要代码公开,一定是让所有利益相关的人都知道。否则,只是少数人知道的话,就会被滥用以侵害另一部分人的权利。让所有人都有同等的权利,就可以相互制衡,没有人能够因为信息不对称而侵害别人。当然,代码除了公开,还要能修改。否则,只能眼睁睁的看着漏洞存在,别人据此来攻击却无能为例,那只能是悲哀。所以,开源重要,开源的方式也很重要。阅读全文>
发表于 @ 2007年12月21日 09:56:00|评论(loading...)|编辑
从ScottGu's的博客上看到ASP.NET MVC的介绍,简直像极了Ruby on Rails。比如URL Routing,scaffolding,LINQ to SQL(作为O/RM)......甚至用法都是类似的。 这样也好,开发人员就可以触类旁通了。阅读全文>
发表于 @ 2007年12月20日 10:14:00|评论(loading...)|编辑
虽然我经常会把这个链接工具栏给关掉,但是不管是IE还是FireFox都是有这么一个快捷的链接(书签)工具栏的。除了能够放置一些常用的网址,经常看到有网站说拖动一个链接到该工具栏上,就可以增加xx功能--很神奇,但是一直没有去深究。直到今天尝试CSDN剪影的时候,才决定深入了解一下。 原来很简单,网页上的任何链接<a href=''></a>都是可以拖到该工具栏上,点击的时候就跳转到href的位置了,跟直接点击链接的效果是一样的。而那些所谓的xx功能,其实是一段javascript脚本,因为href可以使用“javascript:xxx”的语法直接指向一段代码的。我们来看一下剪影按钮的完整的代码: <A onclick="alert('请用右键点击收藏或直接拖动收藏');return false;" title="转载到CSDN" href="javascript:function init(){try{var script=document.createElement('SCRIPT');scr阅读全文>
发表于 @ 2007年12月19日 13:52:00|评论(loading...)|编辑
“很多程序员是不看编程相关的Blog的,他们上网找资料只是想尽快解决手边的问题,他们也很少读书。他们只是简单的培训之后,就上岗了,他们同样也在写程序,我们使用的很多软件甚至就是出自他们之手......这样的人群大约占到了80%的比例。 如果你正在阅读这篇文章,这说明你是属于那些勤奋学习的20%的。不过,先不要庆幸得太早了,因为重要的不是你属于这少数的20%,而是那些不可及的80%。因为,不管这20%的人发明了什么新的方法,新的工具,那些另外的80%都是不了解的,也不关心,所以你们就自娱自乐吧! 这世界上有几类程序员,第一种是使用到才学习,只满足与快速完成手头的工作。第二种在把手头的工作完成的同时,会积累和总结很多的经验。第三种人则会追求尽善尽美,并会在动手前先进行大量的学习。 我们当然知道最后一种是最优秀的,但是这种人也比较少。大量存在的是第一种人,平虽然水平比较低,但是却完成了大量的具体工作,很多我们使用的重要软件都是他们写的。所以,他们的编程水平的提高才是最重要的。 所以,作为一个专业的程序员,不能仅仅满足与写好自己的代码,还要帮助其它人写好代码,这才够专业!” 以上阅读全文>
发表于 @ 2007年12月19日 11:36:00|评论(loading...)|编辑
A practical guide to building to HTTP based services. PPT REST vs SOAP的争论经常见诸于各个Blog,但是什么是REST?REST有什么优缺点,特别是在安全性上有什么问题?上面这个PPT写得很全面,似乎把相关的问题都回答了,实在是值得推荐。如果不想看复杂的REST介绍文章的话,PPT其实是很好的选择,谁说PPT容易写来的?呵呵阅读全文>
发表于 @ 2007年12月18日 14:06:00|评论(loading...)|编辑
IM,VoIP,Video,Live Meeting,以及Presence,一个企业版的Messenger系统?跟WCF(Windows Communication Foundation)没有关系,WCF主要讲的网络编程技术,UC主要讲的是人与人的沟通方式。WCF要实现的是,程序之间的无缝连接。UC要做的是,让人们时刻保持联系。 Unified Communications API 不仅提供了Managed API,COM甚至Ajax接口,在Web页面里也能登录UC,接收联系人的状态变化通知,当然还有发消息。 对于企业内部的应用,或许UC Platform是一个选择。 Unified Communications Developer Portal Unified Communications Client 1.0 SDK Documentation Unified Communications AJAX 2007 SDK Documentation阅读全文>
发表于 @ 2007年12月14日 16:14:00|评论(loading...)|编辑
为什么HTTP协议会这么流行?为什么防火墙一般都不拦截80端口?那是因为,HTTP协议除了简单,还有一点就是数据格式一般是透明的,特别是HTML网页就是文本格式的。这就为防火墙的对网络数据进行过滤提供了极大的方便,不管是杀毒,还是内容过滤。否则,对于自定义的格式,每个应用程序使用不同的二进制流,防火墙真是没有办法检查。所以,网管喜欢80端口,安全工作容易做一点。 不仅拦截过滤变得容易,而且修改也变得容易了。所以有宽带提供商(ISP)就可以神不知鬼不觉的在用户访问的HTML文件里添加自己的信息,比如广告。这样,你会莫名其妙的看到一些弹出窗口,甚至被纂改的页面,比如这个。阅读全文>
发表于 @ 2007年12月13日 23:05:00|评论(loading...)|编辑
就像当年ASP.NET里,加上一个[WebMethod]属性,就可以把以一个方法以WebService的方式输出所带给我们的震撼一样,现在你只要加入一个[RunAtOrigin]就可以把一个方法从客户端放到服务端执行,实现单层(Single-Tier)应用到多层(N-Tier)应用的转变。 微软新推出的Volta预览技术,就是希望让你以最熟悉的.NET语言来写程序,然后由Volta自动的转换到其它的运行环境里,包括非.NET环境,比如浏览器。MSIL抹平了不同编程语言之间的分隔,现在Volta还要抹平运行环境之间的界限。 Volta Home Volta Get Started Microsoft architect compares Volta and Google’s GWT阅读全文>
发表于 @ 2007年12月13日 10:04:00|评论(loading...)|编辑