孙展波:实现.NET无限潜力

Realize .NET Potential (中文版)
随笔 - 417, 评论 - 12186, 引用 - 54

导航

关于

贴子以"现状"提供且没有任何担保也没有授予任何权利。
计数器(2005/12/8起).点击阅读我的Blog In English

标签

每月存档

最新留言

广告

【第1页/共28页,417条】
首页
前页
1
...
2009年05月21日

从五月二十日开始,Visual Studio 2010 Beta1可以公开下载了。下面这个表提供了下载的链接。

Visual Studio 2010 Professional Beta 1 – Web Installer http://go.microsoft.com/fwlink/?LinkId=147408
Visual Studio 2010 Professional Beta 1 – ISO http://go.microsoft.com/fwlink/?LinkId=150591
Visual Studio Team System 2010 Team Suite Beta 1 – Web Installer http://go.microsoft.com/fwlink/?LinkId=147407
Visual Studio Team System 2010 Team Suite Beta 1 - ISO http://go.microsoft.com/fwlink/?LinkId=150592
Microsoft .NET Framework 4.0 Beta 1 http://go.microsoft.com/fwlink/?LinkID=147415
Microsoft Visual Studio 2010 Remote Debugger (Beta 1) http://go.microsoft.com/fwlink/?LinkId=147421
Visual Studio 2010 SDK Beta 1 http://go.microsoft.com/fwlink/?LinkId=147422

 

如果您对于Visual Studio 2010 Beta1中的WPF/Silverlight设计器有任何反馈,或者在使用过程中遇到问题或者Bug,您都可以通过微软的这个论坛提出。我们会仔细听取你的意见,并且帮助解决你在使用时遇到的问题。

posted on 2009-05-21 06:56:09 by zhanbos  评论(0) 阅读(2628)

 
2009年05月20日

有人问安装了Windows 7 RC之后的机器是否已经安装了.NET 3.5 SP1的版本。有人回答只是3.5但不是3.5SP1。有一个办法可以很快得到答案。

在Windows 7中用IE 8打开任何一个网页后,在其地址栏输入:javascript:alert(navigator.userAgent)

回车后就看到如下的对话框。

userAgent

注意其中的.NET CLR 3.0.30729。这是.NET 3.5 SP1的版本号。

posted on 2009-05-20 07:09:13 by zhanbos  评论(0) 阅读(2543)

 
2008年10月21日

终于看完了《编程之美》。这是一本需要花时间也值得花时间的书。其实,如果我把所有的扩展问题和相关问题都试图做一遍的话, 我还要花2个月。

对于每天没有大段时间细读此书的朋友,我提一条“一书多读”循序渐进的建议:

  • 第一次读,读懂题目。不追求能解决这道题,但是弄明白题目问得是什么?很多时候,有趣的题目让我们不由自主地想去解决之。也有的时候,有些题目我们未必读的懂。这往往是数学知识不足的结果,咱们要先补补基本功。
  • 第二次读,试图解决这些题目。一般情况下我们是想不到猜不透最美的解决方案。但是如果有任何思路,我们需要试图先自己解决次问题。对于3星以上的有些题目,我们可能连一个解法都没有。那也正常,不要泄气。(真正的技术面试难度想必要比本书的难度低些。这本书来源于面试,但高于面试。这也是本书耐读之处。)
  • 第三次读,重点理解解法一。这往往是最直接了当最容易想到的解法,也就是说,往往和我们读者的想法不谋而合。当然也可能不同。理解解法一使我们避免了在面试中一筹莫展的尴尬。而且在此启发下,我们也许会想到别的解法。
  • 第n (n>=4)次读,以积极的态度学习题目的其他解法。这是本书的精髓所在:充分体会算法和编程之美,都在对不同的解法理解和领悟之中。

以邹欣为核心的《编程之美》小组为我们奉献了一本不得不爱的好书。别看我花了4个月才基本读完本书,作者们花费的时间远远比这多。他们的心血在本书中充分体现。希望您也和我一样从中受益匪浅。

-----

《编程之美》 ISBN: 978-7-121-06074-8  北京电子工业出版社

posted on 2008-10-21 18:07:38 by zhanbos  评论(3) 阅读(4063)

 
2008年10月16日

在广州和北京的Tech Ed上,我除了热情推荐DEV200的课程之外,还有保留地推荐DEV241的课程。

DEV241的标题是:中小型软件项目开发实践;副标题是:微软WPF Designer组是怎样做产品开发的。

WPF Designer是Visual Studio 2008中首次发布的对WPF应用程序开发提供设计时支持的工具。通过介绍WPF designer产品组开发该软件项目的实践,本讲座愿和与会者一起交流和讨论中小型软件项目管理的经验教训。

如果您对以下术语比较了解,我建议您参加其他的课程。如果只是为了讨论的环节,我们可以在课后继续。

  • Feature Crew (功能小组)
  • Feature branch (功能分支)
  • Daily build (每日构造)
  • Dog fooding (自己使用自己的尤其是未发行的产品)
  • Triage (缺陷诊断)
  • Quality Gate (质量门)

反之,我欢迎您参与该讲座,并且加入讨论和分享中小型软件项目管理的经验教训。对于有备而来积极参与讨论的朋友,我还还准备了小小的纪念品以示鼓励。

posted on 2008-10-16 18:43:24 by zhanbos  评论(1) 阅读(2738)

 
2008年10月15日

广州上海北京。Tech Ed China三地课程安排已经上网。

一门编号DEV200的课程,很荣幸在三地都排在课程首日的第一时间段。该课程将综述微软的最新技术,其中有些技术将在其他课程中详细讲解。所以这样课程安排的好处就是:您可以在Tech Ed的一开始就集中了解来自微软的最新技术。然后,您可以更有效地选择别的课程。

DEV200d的自我介绍:作为Visual Studio的第十个版本,Visual Studio 2010的改变和新特性值得期待,也必将成为新一轮微软新技术开发的主流平台。本课程首先阐述Visual Studio 2010的愿景,然后具体讨论其在体系结构,用户体验,Team foundation增强,中小型企业项目支持,软件开发语言,并行计算以及云计算工具支持等方面的技术内幕。此课程让您站到微软技术发展的最前列,为最大化使用Visual Studio 2010新特性做好准备。

期待您的参加,请相信我们都会有所收获!

posted on 2008-10-15 14:01:11 by zhanbos  评论(1) 阅读(2969)

 
2008年10月14日

除了Silverlight 2 RTW的重要新闻之外,微软在Windows操作系统的历史上首次在Beta版本发布之前就宣布了Windows Vista下一个版本的正式名称。

在此之前,我们都以产品代号名称之为,Windows 7.

在此之后,我们都会以产品名称之为,Windows 7.

很明显,这也是Windows历史上第一次出现产品的代号名和正式名称一致的发布。

在所有的Windows代号名中,Windows 7也是一个很简单的例子。(最新的Office代号名,Office 14,倒是有异曲同工之处。)当Windows XP或者Windows Vista这样表现一种愿景的名字失去新鲜感之后,Windows 7的命名,很有怀旧的风格,也代表着对从Windows 1开始的所有版本得失总结后发布的最好版本。

微软将在几个星期后的PDC上演示Windows 7。这是针对开发者的一次Preview,比Beta还要早。国内的开发者,您可以参加Tech Ed China同样看到Windows 7的Preview。我不知道Keynote时是否会演示,但是我知道Dev200的课程会。

I am a PC. And I love Windows 7.

posted on 2008-10-14 12:15:49 by zhanbos  评论(1) 阅读(3368)

 
2008年09月07日

很多消费者买了电脑的主要目的是上网站浏览新闻,写电子邮件,做电子商务等。即使在旅途中,或者在度假时,我们对一台笔记本的依赖性也是很大的。

功能很强大(适合编程,游戏,多媒体)的笔记本很重。很轻的笔记本很贵。智能手机也可以上网但是月费和可用性仍然不能让人满意。市场需要一种价廉物美的小巧笔记本,而来自DELL的Inspiron Mini 9就有可能适应了市场的需要。

从其产品网页上可以看到该笔记本

  • 支持有线和无线上网,蓝牙,USB
  • 支持Windows XP
  • 使用固态硬盘,Intel Atom处理器,内存从512M到1G
  • 重量是2.3lb约1.08公斤
  • 8.9英寸显示器,1024X600分辨率
  • 4小时的电池使用时间
  • 长宽高大致是:23厘米X17厘米X3厘米

DELL的Inspiron Mini 9有潜力成为需要偶尔使用笔记本的消费者的首选,以及常规笔记本使用者的第二笔记本配置。

您的观点如何?

posted on 2008-09-07 06:36:51 by zhanbos  评论(0) 阅读(4420)

 
2008年09月06日

如果我们有如下的类定义:

public abstract class FruitBase {

}

 

public class Apple : FruitBase {

}

 

public class Orange : FruitBase {

}

 

public class FruitCollection : System.Collections.ObjectModel.Collection<FruitBase> {

}

 

public class Menu {

    public FruitCollection Fruits { get; set; }

}

对于Menu的一个实例,比如olympicMenu,其Fruits属性可能只含有Apple,但是也许全是Orange,或者是多种FruitBase字类实例的集合。

如果我们还定义了Fruit这样一个类:
public class Fruit : FruitBase {

}

 

这样就很有可能让一些程序员产生错觉了,以为Apple, Orange都是Fruit的子类。而MenuFruits这个名字,似乎也提示其是Fruit的集合,而不是FruitBase的集合。

 

在一个需要对olympicMenu.Fruits中的每个实例进行检查的代码中,如果程序员忘掉了这一点,就可能会写出这样的代码:

 

for (int i = 0; i < olympicMenu.Fruits.Count; i++) {

    Fruit f = olympicMenu.Fruits[i];

//...Op on f

}

 

幸运的是,编译器会给出这样的错误信息:Cannot implicitly convert type ‘FruitBase’ to ‘Fruit’. An explicit conversion exists (are you missing a cast?)

 

因为explicit必须显示写出,程序员的错误得以避免。但是,foreach显然是要比for循环更简练。如以下的代码所示:

 

foreach (Fruit f in olympicMenu.Fruits) {

//...Op on f

}

这个代码却不再会得到编译器的错误提示了!foreach隐含了显式的类型转换!编译通过!如果在调试运行时olympic.Fruits的元素都是Fruit类型,这个错误也不能在调试时发现。这样发布的产品就有了这样一个bug。在运行时,如果olympic.Fruits含有Orange, Apple类的实例时,InvalidCastException将会出现。

 

FruitBase这个抽象类,就这样又被人记起了。

 

===

写这个blog,是因为今天分析了一个在已经发布的SP1中的bugVS 2008 SP1的代码中并没有FruitBase, Fruit, Apple, Orange, 但与之相对应的有WPF中的:TriggerBase, Trigger, MultiTrigger, DataTrigger.

 

这行代码,

foreach (Trigger trigger in curStyle.Triggers)

导致了一个需要通过发布补丁的大bug. 成本是很大的。如果Trigger的命名是PropertyTrigger,不但可能避免这个混淆,而且也更加精确地描述了其功用。

 

回想几年前WPF还在开发的时候,我就提出过这一意见。当然有支持的声音。但是最后还是用Trigger这个名字了。其最有力的理由是什么呢?

 

且听微软实录下一篇。

posted on 2008-09-06 08:32:43 by zhanbos  评论(0) 阅读(3402)

 
2008年08月15日

当您安装了最新发布的Visual Studio 2008 SP1之后,您需要安装Microsoft Silverlight Tools Beta 2 for Visual Studio 2008以继续对Silverlight 2的开发。(Expression Blend 2.5 June 2008 Preview 仍然继续可以使用。)

这个下载包括了Silverlight 2 beta 2的运行时,SDK, 和VS对Silvrlight的tool支持。

VS的支持来自Cider组。Cider组也提供了VS中对WPF应用程序的设计时支持。在SP1下,我们除了修正了前一版本中的许多bug,还增加了下述新的功能:

  1. Events tab
  2. Alphabetical view
  3. Toolbox for XAML view
  4. Rename
  5. Go To Definition/Find All References
  6. TabControl和Expander的设计时支持. 同时您现在可以删除grid line了。
  7. Snap lines for control margins
  8. 没有设计时支持的XAML将以Full XAML view方式打开。

详情请看:Community Feedback Important to the WPF Designer for Visual Studio 2008 SP1

posted on 2008-08-15 06:13:31 by zhanbos  评论(0) 阅读(3628)

 
2008年08月08日

Nothing can be perfect.

The upcoming Olympic 2008 will be very exciting, but with areas for improvement.

All players will do their best.

To lose is certainly not a disgrace, but to win is still the thing to celebrate.

 

Practice makes perfect.

The opening ceremony, which is to start in less than 4 hours, has been rehearsed quite a few times by now, after years of preparation and at the cost of roughly 100million US dollars.

What a big project!

 

Like big software project, isn’t it?

There is a date to hit for release, after years of development and at cost of millions of dollars.

Yet we release the software with bugs, some of which we know only too well.

Our goal is to win the market share, win the hearts of developers.

To win is the thing to celebrate.

 

People are entitled to different opinions.

Olympic is not without criticism.

But, after all is said, Olympic is a get-together party for players and people around the world.

A celebration that defines strength, speed, skill, perseverance and beauty in human nature

 

Let the party begin!

posted on 2008-08-08 16:21:18 by zhanbos  评论(0) 阅读(3628)

 
2008年03月24日

这是一个飘雨的下午;今天是3月23日。

我通过Microsoft 的网络发布这个帖子,与别的时候不同:

  • 这是Microsoft Canada的网络。
  • 我的门卡不能让我进入这个2层楼的建筑,但是我的笔记本可以连接到无线网络之中。

四处非常安静,没有什么动静。这或许是因为Microsoft Canada还没有太多的雇员,也许更是因为这是加拿大一个长周末的一个飘雨的下午。

微软在去年7月宣布这个最新的开发中心的新闻稿中说:The Vancouver area is a global gateway with a diverse population, is close to Microsoft’s corporate offices in Redmond and allows the company to recruit and retain highly skilled people affected by immigration issues in the U.S.

虽然有些人可能只是在这里工作一年,我想长远看来,这个center可能会发挥越来越大的作用。加拿大本地的职工未必想到Redmond工作。而且,这里是个很适合居住的地方。

地址在照片下面。

Microsoft Canada Co‎rporation
13511 Commerce Parkway
Richmond, BC V6V 2J8, Canada

posted on 2008-03-24 07:14:38 by zhanbos  评论(2) 阅读(3824)

 
2008年03月02日

我一直主张少看电视,而儿童最好远离电视。劳累工作以后,想轻松一下,稍微看一点并没有插播令人反感广告的娱乐节目,也未尝不可。但是千万不要相信,电视娱乐节目,像湖南卫视引进的《以一敌百》,还会是个益智节目。

《以一敌百》是一个知识竞赛性质的节目,当然有些不同的规则。参加者的确需要有一些百科知识,但是观众的兴趣可不是去学习或者记住那些知识。否则的话,这显然是十分缓慢低效的学习方法。更别说这些凌乱的知识到底有没有需要特别记住的必要。

而且,记住这些事实性的知识并不能起到益智的效果。互联网已经使得这些百科知识触手可得,而真正重要的知识和能力的培养,则来自系统和持续的学习,创造和实践。

我们不可能也没有必要成为活百科全书。要通过电视来益智,我们就已经糊涂了。娱乐节目帮助我们更容易的打发时间,存在自然有其道理;只是非要标榜益智的功能,就可能给看电视上瘾的儿童们所利用,要求家长允许其有"益智"的机会。

这时,家长需要明确指出:娱乐节目谈何益智。有空去读孙展波的博客,也比看电视强。

posted on 2008-03-02 18:57:32 by zhanbos  评论(5) 阅读(4563)

 
2008年02月18日

在.NET框架3.0或者3.5版本下,下面的代码会在GetHashCode时抛出NullReferenceException:

System.ComponentModel.SortDescription description = new System.ComponentModel.SortDescription();
int hash = description.GetHashCode();

设计指导:不要抛出NullReferenceException中,我们提到此准则至少包含两个方面的意思:

  1. 代码中决不要显性地 throw new NullReferenceException
  2. 代码中要有充分的错误检查,避免由CLR抛出NullReferenceException.

上面代码的问题是由于第一点,还是第二点呢?我们只有看到源代码才能确定。

在源代码中,我们看到对于这个public struct SortDescription,程序员定义了一个构造函数:

        public SortDescription(string propertyName, ListSortDirection direction)

        {

            if (direction != ListSortDirection.Ascending && direction != ListSortDirection.Descending)

                throw new InvalidEnumArgumentException("direction", (int)direction, typeof(ListSortDirection));

 

            _propertyName = propertyName;

            _direction = direction;

            _sealed = false;

        }

而GetHashCode的实现如下:

        public override int GetHashCode()

        {

            return unchecked(PropertyName.GetHashCode() + Direction.GetHashCode());

        }

其中PropertyName简单返回_propertyName. 您一定注意到,构造函数没有对propertyName是否为null做检查。 这是会导致GetHashCode时的NullReferenceException.

但是,我们最初的代码实际上使用的是struct结构的缺省构造函数。和class不同,即使程序员显式地提供了一个非缺省构造函数,struct仍然保有缺省构造函数。在设计库函数时,我们需要留意这些区别。

------ ------
值此Blog 400篇之际,MSR Asis特制对联一幅, 以谢读者:

Chun Lian 400

posted on 2008-02-18 09:10:00 by zhanbos  评论(2) 阅读(4666)

 
2008年02月14日

最近这些日子,很多程序员反映,在安装了最新的Windows SDK for Windows Server 2008 and .NET Framework 3.5之后,VS2008 WPF Designer的Intellisense就不再工作了。他们不得不重新安装或者修复VS2008。

这往往是因为一个Registry Key的值被SDK的安装程序错误地删除了。

请检查HKEY_CLASSES_ROOT\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32下,(Default)的值是否为空。如果是,你需要将其更新为TextMgrP.dll的完整路径。TextMgrP是Visual Studio Text Manager Proxy。

在我的系统上,该文件在C:\Program Files\Common Files\Microsoft Shared\MSENV\TextMgrP.dll。更新之后,Intellisense就又可以工作了。

如果您不想自己修改注册表值,也可以通过VS安装程序的修复功能,恢复原先正确的状态。

(而安装程序的问题,也会在近期解决。)

posted on 2008-02-14 18:50:00 by zhanbos  评论(3) 阅读(5246)

 
2008年02月07日

这个冬天有点冷。无情的雨雪把我们打醒,让回家的路从此被否定。

但是,冬天到了,春天还会远么?

在这万家灯火爆竹声声辞旧岁的时刻,我向您拜年了!对在过去的一年里面帮助和关心着我的人们,我要深深地说声谢谢。繁忙的生活常使我们疏于联系,请多保重。有一天我们一定要再见,那一天也许就在戊子年.

祝我们的2008风调雨顺。“鼠”于您的成功,跑也跑不掉。

posted on 2008-02-07 00:02:00 by zhanbos  评论(2) 阅读(4308)

 
【第1页/共28页,417条】
首页
前页
1
...

Powered by: Joycode.MVC引擎 0.5.1.0