RSS 2.0 Feed
随笔
摘要:微软在上周发布了Visual Studio 2003 SP1。这个服务包看起来包含一系列稳定性、安全性的补丁以及一些其他的问题。Visual Studio 2003 SP1的说明http://support.microsoft.com/default.aspx?scid=kb;en-us;924009Visual Studio 2003 SP1补丁修复的问题列表http://support.microsoft.com/kb/918007Visual Studio 2003 SP1下载地址http://www.microsoft.com/downloads/details.aspx?FamilyID=69d2219f-ce82-46a5-8aec-072bd4bb955e&DisplayLang=en 在MSDN (http://msdn.microsoft.com/vstudio/support/servicing/sp1_vs05/default.aspx)上,可以看到Visual Studio 2005SP1会在今年第三季度发布——呃,现在已经是8月底了,第三季度只剩一个月了。另外,原来的预期是下一代的Visual Studio (Orcas)会和Windows Vista 一起发布,但是从产品特性来看,估计赶不上Windows Vista的客户端版本,而要等Office2007定版之后和Windows 2007 Server在2007年下半年一起发布,预计名字也应该成为Visual Studio 2007。 OK,现在是应该为产品更新迅速而高兴,还是要因产品的开发周期短而为质量而担忧呢?PS:需要面向64位系统的Visual C++开发人员应该升级到Visual Studio 2005。在http://support.microsoft.com/kb/875446 提供的面向64位的Visual C++库已经过时。...[阅读全文]

posted @ | Feedback (3) | Filed Under [ 随笔 ]

摘要:根据来自于http://www.sysinternals.com/的消息,提供Process Explorer、Regmon和DiskMon这样的优秀免费工具的Winternals Software被微软收购。 在这次交易之后,微软应该可以为这些工具提供更多的技术支持,而且也可以利用Mark Russinovich和Bryce Cogswell的创造力开发其他的产品,但是作为微软的员工,像上次揭发Sony这样的行为可能需要通过公共关系部门了,而且以前那些工具中关于Windows内部机制的信息也可能会被以对用户友好性的名义隐藏起来。最重要的一点可能是下载这些工具时可能需要进行Windows正版验证,使得很多盗版用户面临失去这些工具的危险。 作为一个理论上独立于微软的专家,我为微软和Mark Russinovich和Bryce Cogswell两人的合作感到高兴,但是也对广大Windows用户失去一个独立于微软的声音感到遗憾。...[阅读全文]

posted @ | Feedback (2) | Filed Under [ 随笔 ]

摘要:对于我这种用Fire Fox,用Tencent Traveler,用Maxthon,用我自己写的浏览器——就是不用IE——的人,自认为不会给那些用BHO来弹出广告的流氓软件任何的机会,因为BHO已经被我禁用了。但是Asynchronous Pluggable Protocol继承了BHO的光荣传统,在这一刻被流氓软件灵魂附体。 最近计算机开机的时候老是弹出广告。尽管禁止IExplore.exe的运行可以解决这个问题,但是毕竟不是长久之道,天知道这家伙会不会像CoolWebSearch一样去下载其他流氓软件,这一刻它可能已经不是一个人在战斗了。 我,面对这个问题,10秒钟以后会是怎样的表情? 首先用来检查问题的是Process Explorer,用这个软件我曾发现了手动清除Baidu和3721之后留下的一些漏网之鱼。IE加载的DLL看起来都很正常,除了一个rich001.DLL之外。这个文件Google不到,暂时无法判定是否属于流氓软件。 下一个用来检查问题的是HijackThis。嗯,除了百度搜霸残留下来的一堆Button之外,rich001.DLL也赫然列在Protocol Handler中,而且处理的居然是http协议。嗯,看起来十分可疑。选择fix,确定,重新启动。 重新启动了!没有弹出广告了!伟大的HijackThis!这个问题是一个绝对理论上的决杀,绝对的死角。这个胜利属于Process Explorer,属于HijackThis,属于所有编写免费软件的人!...[阅读全文]

posted @ | Feedback (26) | Filed Under [ 随笔 HTML编程(IE Programming) ]

摘要:阿拉斯加州共和党参议员特德·史蒂文斯在投票反对一个关于语音电话的电信法修正案时宣布,一个Internet在周五10时由他的职员发送给他,但是花了好几天才到,因为Internet上的商务数据太多了。之后,他给Internet下了一个新定义:一系列管子(http://www.theinquirer.net/default.aspx?article=32770)。OK,我承认要82岁老人理解这些新名词(呃,Internet才出来十几年而已……)可能困难了些,但是作为参议院商业、科技和运输常设委员会主席,在对法案内容发言之前应该有更多了解才是。P.S.这让我想起了以前职称考试将Office XP归于Windows XP模块中的笑话(http://blog.joycode.com/jiangsheng/archive/2004/03/01/14345.aspx)...[阅读全文]

posted @ | Feedback (4) | Filed Under [ 随笔 ]

摘要:OK, 这不是Tech ED 2004的讲座,而是从6月19号开始Codeguru上的一个活动。在一周之内,Visual C++项目组成员将会就此主题回答提问。目前看来提问大多集中在Visual C++未来的发展上,不过有想挖黑历史的也不要错过。 活动地址在http://www.codeguru.com/forum/forumdisplay.php?f=89,语言是英语(……)...[阅读全文]

posted @ | Feedback (1) | Filed Under [ 随笔 ]

摘要:微软主管开发部门的副总裁S. "Soma" Somasegar近日宣布了MSDN WIKI的测试版本的启动,我也终于可以摆脱保密协议的限制来讨论这个项目了。MSDN WIKI是一个公开的在线合作创作的文档项目,目前看起来是处于原型测试阶段,只有英语版本,而且不支持内部链接,但是在最终版本中应该会有各种语言的版本。目前这个项目中仅包含了Visual Studio 2005和.Net Framework 2.0的文档,但是项目计划包含所有的MSDN内容。尽管还很粗糙,但是微软在和开发社区的互动中又迈了一大步。 在项目FAQ中,微软声明测试阶段的内容会被移植到最终版本中,但是目前不知道在加入更多格式化功能之后如何格式化现有的内容。目前使用者需要一个Windows Live ID进行登录,使用IE来浏览网站,而且目前不能修改文章内容,只能在文末添加类似BLOG评论的脚注。 如果觉得现在的MSDN文档需要补充,那么就去MSDN WIKI分享自己的发现吧。注意,用户贡献的内容受到Creative Commons非商业授权协议的约束。这个项目的BLOG在http://blogs.msdn.com/msdnwiki。...[阅读全文]

posted @ | Feedback (4) | Filed Under [ 随笔 文档(Documentation) ]

摘要: 根据MSDN Coding4Fun 网站的信息,Visual Studio 2005 Express从一年免费改为永久免费。 从微软的Virtual Server R2免费、Office Live入门版免费,以及这次Visual Studio Express永久免费来看,微软似乎正在转向免费服务。...[阅读全文]

posted @ | Feedback (10) | Filed Under [ 随笔 ]

摘要:Office Live Blog 5号宣布Office Live的测试者暂时不再需要产品密钥来进行注册,但是注册仍然需要一个美国地址和一个信用卡帐户。从站点内容来看,OfficeLive目前的测试版面向的用户是中小企业,提供5个邮箱、30兆空间和免费国际域名(嗯,注册了一个http://jiangsheng.net),以及FrontPage(OK,我知道这玩意现在叫Office SharePoint Designer )和Outlook的功能。 尽管站点的AJAX脚本经常出错(比如在编辑页面输入+号保存之后会消失,上传文件有时会失败),但是整个界面还是比较友好的,类似FrontPage的站点管理用起来很方便,而且类似Office助手的工具栏使得用户可以很快上手。...[阅读全文]

posted @ | Feedback (9) | Filed Under [ 随笔 用户界面 程序人生(Programming on the fly) 脚本(Scripting) ]

摘要:好长时间没更新BLOG了,向大家拜个晚年先。最近没怎么写代码,转几篇在网易虚拟社区发的文章过来充数。 对于BUG的自信 Donald E. Knuth(高德纳)在TeX: The Program的前言中说:"我相信,在1985年11月27日,TeX代码里面的最后一个BUG已经被发现和解决了。但是,如果代码中仍旧有BUG,我很高兴付给任何第一个发现BUG的人20.48美元(这是前一个金额的两倍,而且我计划在一年内把它翻倍。你看,我很自信!)" 想知道后来发生了什么吗?在http://truetex.com/knuthchk.htm可以看到他写出去的支票的金额是从2.56美元开始翻倍的。微基百科中关于这种支票的文章(http://en.wikipedia.org/wiki/Knuth_reward_check)说,截至2001年10月为止,他写出去了超过两千张这样的支票,但是他的BUG支票是如此有名,以至于很多人把他的支票收藏起来而不是拿出去兑现(http://www.tug.org/whatis.html)。有多少程序员在发布产品的时候可以这样自信地声明产品没有问题? 遗憾的是,现在的程序员经常把发现BUG的责任推给测试人员——“不用担心,测试人员会发现所有BUG的,这是他们的工作”。实际上,测试人员并没有开发人员的条件,他们不可能进行源代码级别的调试,很大程度上只能靠运气——没错,是靠运气,如果一个BUG很容易被发现,程序员不太可能自己没有发现它——来发现BUG。 还有一些人干脆就认为BUG是不可避免的,或者认为不值得这么精益求精(参见网易虚拟社区http://p5.club.163.com/viewArticleByWWW.m?boardId=clanguage&articleId=clanguage_108eacc622169e7&boardOffset=0的讨论),但是实际上防止BUG出现的最好的时机,就是在编写代码的时候。在编写代码一段时间之后,即使是编写者本人也可能需要一段时间来理解代码(如果不习惯写注释的话,这段时间会更长),更别说定位问题所在了。在编写代码时,如果具有良好的习惯,可以免去很多在之后消灭BUG的困难。 规范不是语法 太多人把不要使用goto奉为圣旨,从来不想去打破。他们会争论,goto会造成难以维护的难读的代码,以及使编译器无法进行优化。这两点在很大程度上是真的,但是也有使用goto可以增加程序可读性和效率时候。在这种情况下,遵循“不使用goto语句”规范会产生更糟糕的代码。一些人喜欢在成员函数后面加const,但是另外一些人没有养成这个习惯。一个直接的结果就是,一些看起来对对象完全没有影响的函数不能在const函数里面使用。这时候应该怎么办?看看Paul DiLascia建议的,把this指针强行转化为一个非const指针(http://www.microsoft.com/msj/archive/S126E.aspx)。如果函数实际上会对对象成员造成影响(例如CToolBar::GetItemRect),这也会带来潜在危险。为了和ANSI标准之前编写的代码兼容,ANSI C中的memchr函数的声明为void *memchr( const void *buf, int c, size_t count ); 这里c是一个字符。很明显,标准为了兼容性放弃了明确性和更强的类型检查。如果放弃兼容性,这个函数应该声明为如下形式void *memchr( const void *buf, unsigned char c, size_t count ); 微软的很多代码使用一种叫做匈牙利表示法的命名规范。这使得标识符的含义和类型更加明确——但是这是从广义的角度来说的。考虑如下函数声明char *strcpy( char *strDestination, const char *strSource ); 如果严格遵循原始的匈牙利表示法,那么两个参数的声明应该是pch开头。但是以str开头给这两个参数更多含义:它们指向以\0为结束符的字符串。   规范是用来在大部分时间里遵循,以及在可以得到更好的结果时打破的。 编译警告的意义 智能化的编译器开始将语法正确的语句列为警告:while(size-->0);//注意这里有个分号 *pTo++=*pFrom++; 编译器会报告空循环问题。但是对于以0结尾的字符串复制while(*pTo++=*pFrom++); ,这样的警告是多余的。更加常见的警告是在条件判断语句中if(ch='\0') EndOfString(); 为了绕过这个警告,需要添加额外的运算或者语句,或者更正错误的赋值。while((*pTo++=*pFrom++)!='\0')...{} if(ch=='\0') 一些程序员甚至将比较语句修改成if('\0'==ch) 这样作的原因显而易见:为了减少潜在的BUG。如果你的编译器没有这样的警告,那么你可以使用一些工具来检查那些语法正确但是有潜在BUG的代码。LintProject (http://www.codeproject.com/tools/lintproject.asp)就是其中一个。但是,良好的编程习惯还是减少BUG出现的最好的方法。在觉得警告消息太烦人的时候,不妨想想编译器的开发人员为什么要编写这么多警告消息,而不是仅仅寻求关闭警告的方法。 P.S. Visual C++的默认警告等级是3级。发布软件之前应该改成4级,之后检查所有的编译警告。 无处不在的断言 使用编译器来捕获BUG的主意很好,Visual Studio 2005甚至会报告定义的变量不符合命名规范(Warning 1 CA1709 : Microsoft.Naming : Correct the casing of type name 'welcome'.);但是我敢打赌你检查BUG列表的时候,你会发现只有一小部分BUG会被编译器抓到。很多BUG在程序运行过程中很少会出现,例如内存分配失败的问题using namespace System; #define ARRAY_SIZE 1000 struct bubbleBase ...{ int value; }; class bubble1:public bubbleBase ...{ public: virtual int getvalue()...{return value;} virtual void setvalue(int newvalue)...{value=newvalue;} }; class bubble2:public bubbleBase ...{ public: virtual int __clrcall getvalue()...{return value;} virtual void __clrcall setvalue(int newvalue)...{value=newvalue;} }; template<class T> void bubbleSort(int length) ...{ TimeSpan ts; T* array1=new T[ARRAY_SIZE]; for (int i=0;i<ARRAY_SIZE ;i++) ...{ array1[i].setvalue(ARRAY_SIZE-i-1); } ......[阅读全文]

posted @ | Feedback (1) | Filed Under [ 随笔 .Net Framework 编译(CodeGen) 类库(Library) 语言(Language) C++/CLI/Managed C++ Extension ]

Full 随笔 Archive