RSS 2.0 Feed

Friday, August 15, 2008

当您安装了最新发布的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 @ | Feedback (0) | Filed Under [ Visual Studio ]

Friday, August 08, 2008

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 @ | Feedback (0) | Filed Under [ 只言片语 ]

Monday, March 24, 2008

这是一个飘雨的下午;今天是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 @ | Feedback (2) | Filed Under [ 只言片语 ]

Sunday, March 02, 2008

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

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

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

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

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

posted @ | Feedback (5) | Filed Under [ 只言片语 ]

Monday, February 18, 2008

在.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 @ | Feedback (2) | Filed Under [ 设计指导 | Design Guideline ]

Saturday, February 16, 2008

最近这些日子,很多程序员反映,在安装了最新的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 @ | Feedback (3) | Filed Under [ Visual Studio ]

Thursday, February 07, 2008

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

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

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

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

posted @ | Feedback (2) | Filed Under [ 只言片语 ]

Monday, January 21, 2008

一个类(或者一个结构)封装了一些相关的属性和方法。在使用这些属性和方法的时候,设计指导要求从不会得到NullReferenceException。这至少包含两个方面的意思:

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

如果某个函数的一个参数不能为null,函数代码需要检查输入是否合法。如果输入是null,代码需要抛出的是ArgumentNullException

即便是来自微软.NET框架库中的代码也未能100%遵守设计指导,将如下一篇Blog所示。

posted @ | Feedback (6) | Filed Under [ 设计指导 | Design Guideline ]

Monday, January 07, 2008

先前相关:微软将发布.NET框架库的大量源代码

在上次Blog的评论中,有人称赞道:确实,调试方便了不是一点点;这真是太cool了;很好,期待很久了!不过也有这样的评论:买一张MSDN就可以了。实际上,MSDN中并没有包含将发布的.NET Framework的源代码。

这项服务还在最后的调试阶段,很快就会对外发布。我在这个周末通过Visual Studio 2008使用了这一服务。对于.NET程序员来说,这真的是非常有助于调试,也提供了软件开发时候很有价值的参考。

为了在Visual Studio 2008中使用此服务,有以下几个要点:

  1. 在Debugging | General 选项中,不要选Enable Just My Code (Managed Only).
  2. 在Debugging | General 选项中,选择Enable source server support.
  3. 在Debugging | Symbols 选项中,添加Microsoft Reference源代码服务的URL。 正式的URL很快会对外发布。

首次使用时需要接受2个License:一个是symbol,另外一个是Source.

这样在调试程序的时候就可以看到.NET Framework的源代码,也可以在调试时跟进(Step into)。

比如说WinForm的Button.cs就被下载到\src\source\.net\8.0\DEVDIV\depot\DevDiv\releases\whidbey\REDBITS\ndp\fx\src\WinForms\Managed\System\WinForms\Button.cs\1\Button.cs。从文件夹的结构可以看到,.NET框架3.5下的WinForm代码实质上还是Whidbey即.NET 2.0。但的确有了一些更新。REDBITS下是.NET 3.5发布时候的代码。

即使将Winform的项目的Target Framework改成2.0或者3.0,我们一样得到上述的Button.cs. 这是因为REDBITS在安装时取代了早先2.0的程序集。

在WPF下的Button.cs被下载到\src\source\.net\8.0\WIN_WINDOWS\lh_tools_devdiv_wpf\Windows\wcp\Framework\System\Windows\Controls\Button.cs\1\Button.cs。虽然现在WPF属于DevDiv的一部分了,从这个文件夹的结构可以看到以前WPF是隶属于Windows的。

在代码的格式上,您也一定能够看出DevDiv和Windows的区别。

除了在文件中添加了几行版权声明:

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.

您看到的代码与微软内部能够看到的代码是完全相同的。那些代码中的注释,还有对private或者internal members的说明,都是在此之前无法从MSDN的文档中得到的信息。

当然没有任何代码是十全十美的。我已经注意到标有HACK HACK HACK注释的代码了。

阅读代码对程序员而言是一件有趣的活动。随着Microsoft Reference源代码服务的推出,我们有更多的阅读材料了!

posted @ | Feedback (17) | Filed Under [ WPF/SilverLight ASP.NET WinForm Visual Studio FCL | 库函数 ]

Tuesday, January 01, 2008

随着版权意识的增加,许多网站首页(比如此博客堂)都有版权声明,常见的写法举例如下:

Copyright(c) 1999-2008 All Rights Reserved
Copyright(c) 2008 版权所有

例子中使用了2008的年份,因为国内现在已经是元月一日。重视细节的网站应该已经自动或者手工将其版权声明的年份更新了。是不是这样呢?

搜狐和新浪网更新了,而网易没有。
携程网更新了,而ELong(艺龙)没有。
大众点评网更新了,而美食中国网没有。
博客园更新了,而此博客堂则远远没有。

细微之处,往往可以以小见大。

------
Copyright(c) 2008 版权所有

posted @ | Feedback (13) | Filed Under [ 细节 ]

Monday, December 31, 2007

通过Visual Studio 2008新创建一个WPF Application项目,在没有编译的情况下打开Window1.xaml.cs。鼠标右键单击InitializeComponent();这一代码行,选择Go To Definition菜单项。我们会看到其定义在一个叫做Window1.g.i.cs的文件之中。

对WPF比较熟悉的程序员知道:在编译WPF程序的时候,MsBuild通过调用Markup Compiler将Window1.xaml编译成为一个baml文件和window1.g.cs文件。这里的g的含义是“生成的”(Generated)意思。

可是Window1.g.i.cs文件呢?

这是只有在Visual Studio编程环境下才能看到的一个文件,g的含义同上,而 i 则是“智能感知”(Intellisence)的意思。为了能够让用户更方便的使用Intellisense,Visual Studio生成并且使用了Window1.g.i.cs文件。

如果在一次编译之后再Go To Definition,您就会发现这次打开的是Window1.g.cs文件。当然在编程的绝大多数时间里面,Window1.g.i.cs文件的使用率要高的多。

----

二零零八,新年快乐!

posted @ | Feedback (2) | Filed Under [ WPF/SilverLight Visual Studio ]

Wednesday, December 26, 2007

有一种记忆单词的方法是谐音,就是根据其读音近似到汉语的某个词组合,而这个词组合可以被联想引申到单词的本义。

posted @ | Feedback (7) | Filed Under [ 玩的就是词藻 ]

Saturday, December 22, 2007

虽然resgen.exe.NET框架2.0下已经有了/publicClass的选项,Visual Studio 2005自动生成的代码文件只能是internal.

Visual Studio 2008下,程序员可以选择internal或者public,如下图所示:

 

 Resources

----

祝您节日快乐!

posted @ | Feedback (1) | Filed Under [ Visual Studio ]

Wednesday, November 21, 2007

打点行李,就要在周日通过香港回去工作了。

posted @ | Feedback (8) | Filed Under [ 只言片语 ]

Monday, November 12, 2007

1.       如果您在微软开发平台正式的对外技术资料上看到一篇题为“Silverlight照亮RIA前程”的文章,其中的RIA是什么的缩略语?

2.       Visual Studio 2008提供了对XAML文件的设计时的支持,这是针对 (单选题)

a.       Silverlight 1.1, Silverlight 1.0, WPF平台的。

b.      Silverlight 1.0WPF平台的。

c.       WPF平台的

d.      RIA平台

3.       简述在Silverlight 1.0下如何在客户端下载新的字体。

4.       Expression Blend 2下控件的Render Transform类别提供了若干Tab供用户配置。Tab的个数比SilverLight 1.0提供的Transform个数多了几个?是哪几个?

5.       以下在WPF运行时之中支持但是在Silverlight 1.0运行时之中不支持的有哪些? (多选题)

a.       DataGrid控件

b.      Button控件

c.       对矢量图的支持

d.      Bitmap添加Drop Shadow的效果

e.      使用Javascript实现程序逻辑

f.        RadialGradientBrush

posted @ | Feedback (24) | Filed Under [ WPF/SilverLight Quiz ]