体验下一代微软平台开发Visual Studio 2005(1)

今天无聊在微软网站闲逛,不小心看到了Visual Studio 2005的各组件的Express Beta版本下载,于是就把它们下载了来下来试用。

最早看到有关VS2005的介绍是在DevDays 2004上,那时还是一个Preview的版本,随后就是在上一次的微软开发者大会上发到的MSDN开发精选杂志上看到了相关的介绍,但一直没有机会去尝试,这回就一起来尝尝鲜吧。

这次提供下载的是VS2005 Express Beta 1版包括VB、C#、VC++、J#、WebDev和SQL Server的2005版本,但都是Express即精简的版本,只提供了最基本的功能。另外与之配套提供下载的还有.NET Framework 2.0、VJ# Redistributable Pack 2.0和精简版的MSDN。这也东东也可以向微软订购免费的光盘,可惜要支付$30的邮费。

我依次安装了.NET Framework 2.0、VJ# Redistributalbe Pack和SQL Server 2005。然后安装VC++(其它几个包还在下载中)。整个过程都相当的顺利,除了SQL Server安装程序提醒我我的机器配置太低外:(

先来看看VC++吧。

VC 2005 界面

VC 2005 界面

界面上最明显的变化其实是最不重要的变化,与VS.NET2003相比,只不过是风格和布局有所调整。但我们也能看到一些新特性。

首先是增加了三个面板,左边的Program Manager,中间的Definition和Call Browser。

Program Manager的功能实话说我也没有闹明白,好像是用于管理一个项目的多种生成模式的设置的,比如Debug模式、Release模式等等。

Property Manager

Property Manager

Definition面板的功能我在Source Insight中见过,还是比较有用的,就是当编辑区中光标落在某个标识符上时,Definition面板中将相应显示出这个标识符的定义供你参考,并可以迅速切换到相关的位置以便修改。

Call Browser面板则可以显示出一个方法调用了其它哪些方法以及这个方法在哪些地方被调用过。感觉上这个功能对代码重构会很有帮助。很遗憾在VC++中没有找到重构的功能,好像只是在VC#中实现了。

VC++从2003版开始支持了Windows Forms的可视化设计,在2005版中,窗体设计功能也有了不少的进步,最明显的就是控件自动对齐功能,省去了原先很烦的对齐控件的操作。智能标记的功能(如果用过VS2003做ASP.NET就会注意到控件角上会有一个绿色的小三角,这就是智能标记功能,但那时并没有用)也开始在部分控件上使用。窗口设计器还增加了一种称为Property Editing View,可以对控件的常用属性进行十分方便的修改。

Windows Forms设计器

Windows Forms设计器

Windows Forms设计器

Windows Forms设计器

同时,就Windows Form本身而言,.NET 2.0也为它增加了不少的控件,新的DataGridView控件取代了原来的DataGrid,还增加了Serial Port(操作串口)、BackgroundWorker(多线程)、WebBrowser(对WebBrowser ActiveX控件的托管封装版本)等不少实用的组件。很遗憾的是我没有在这个Express版中找到对ADO.NET的支持,所以对数据访问还没有能有所认识。

其实VC2005最大的变化恐怕并不是开发环境的变化,由于原先VC用于支持.NET的Managed C++语法实在过于麻烦难看,所以VC2005引入了全新的语法来支持.NET,这就是最近的一个热门话题C++/CLI,它对标准C++进行了扩展,目前正在进行国际标准化的工作。关于C++/CLI的新特性,我正在学习中,随后将贴文总结。

Blog重新开张

经历了几天的新鲜劲儿后,我的Blog从6月底开始到现在就再也没有过动静。三个月来,周围朋友的Blog如同雨后春笋般建立起来,且以惊人的速度进行着更新,于是,经历了有想法而无行动的几天后,我决定我的Blog重新开张。

国庆前一直盼着国庆回家,回到家才发现家里和在学校一样无聊。除了看看电视,就还是只能在电脑面前度过大量的时间。

项目开发的需要,让我在这个学期把久违的.NET又捡了起来。微软平台开发最近热点的恐怕是Smart Client莫属了,从DevDays 2004上第一次听到这个概念,到9月27日微软开发者大会上的Smart Client专题,加上MSDN上铺天盖地的文章,让人感觉到了Smart Client的无处不在。

DevDays 2004上的IssueVision示例程序,让我第一次到接触到Smart Client的概念,也让我又一次体会到软件构架的重要,暑假里对DevDays 2004 DVD上的IssueVision和OpenHack两个示例程序以及经典的.NET示例Duwamish进行了学习,学到了很多有用的东西。这次9月27日的开发者大会上,又介绍了一个新的Smart Client的示例程序TaskVision,回到家,我又迫不及待的把它下载了下来进行学习。

TaskVision程序与IssueVision很相似,但相对来说功能更强劲一些,它的功能是对工作中的各种任务进行管理,可以创建任务并把它指定给某人去完成,某人也可以重新把任务指定给其它人去完成,完成的进度和所有的转交情况都将被记录下来。作为Smart Clinet的示例程序,Smart Client的几个核心特性在这个程序中都有不错的体现。它的官方网站说它演示了以下的技术:

  • Application offline and online model(脱机和连机工作模式,这是Smart Client的核心特性之一)
  • Application update model via HTTP (no-touch deployment) (无接触部署,Smart Client的核心特性,通过AppUpdate组件实现,很Easy)
  • Authorization to control user access to application features
  • Data collision handling (有脱机支持就必须有良好的数据冲突处理机制,ADO.NET为我们提供了很好的工具)
  • Printing and Print Preview (一个IssueVision没有的特性,很简单,不过很实用)
  • Windows XP Themes
  • Dynamic properties
  • Localization support (也是一个IssueVision没有的特性)
  • Accessibility support (limited) (同样是新特性)
  • Forms authentication using a database for user names/passwords (这个验证方式与IssueVision用的不同,我正在学习)
  • Asynchronous XML Web service class (提高用户体验的很重要的特性,IssueVision用了一个BackgroundWorker组件,似乎比TaskVision用的方法很简单一些)
  • ADO.NET data access using SQL stored procedures (通过存储过程进行各种数据库操作,是微软反复强调的调用模式)
  • Graphics development using GDI+ (TaskVision用它做了一些可视化的组件)
  • Integration between .NET Framework-based code and COM applications (COM interop) (对于IssueVision的一个新特性,正好对我很有用,它通过COM interop把数据输出到一个Excel的Sheet,而我的项目中需要把数据输出到一个AutoCAD的图纸。)

让我很惊呀的一点是TaskVision居然没有对缓存在本地的数据进行加密,而IssueVision对这一点则做得很好。另外一点是IssueVision中用的很有用的Commander模式和Observer模式也没有在TaskVision中使用。从总体上说,感觉TaskVision虽然是一个新的示例程序,功能比较强大,但完善程度和制作的精细程度与IssueVision相比还是差了一些,GotDotNet网站有一个协作改进的项目。

国庆期间,除了学习TaskVision,另一件占据大量时间的事情就是协同刘海先生测试他的新软件iDreamPiano 1.0,从2000年试用了刘海的HappyEO 1.0这个键盘模拟琴软件后,我就一直与他保持比较多的联系,全线参与了HappyEO 1.05到3.05(该软件已获Tucows五头牛认证),Jp-Word 1.0到2.0(一个简谱编辑软件)和iDreamPiano的测试工作。iDreamPiano也是一个键盘模拟琴软件,目前功能还不能与HappyEO的功能相比,但从技术上说它有一个重要的改进,就是不再依赖系统的MIDI设备发声,而是直接通过dls波表和DirectX发声,这样做会有几个明显的好处:1.在不同的机器上可以达到一致的发声效果,2.没有MIDI软波表可能带来的延时的情况,3.不再受General MIDI或者Roland的GS和Yamaha的XG标准限制,可以扩展出任意多的音色,包括民族乐器的音色。

(2004-06-26)倒底什么是“禁止的词语”呀?

本来今天不想写日记的,结果在贴另外一篇文章时确出现了问题,系统提示:“文章中出现禁止的词语,系统不予接受。”

天哪,我文章向来是很文明的,居然说我“出现禁止的词语”,更可恶的是不告诉我是哪一个。

没办法,只好把文章一段段分几次贴,以便找出“禁止的词语”,忙活了本天,原来禁止的词语是:“巨大(的)便捷”。

我原文中没有那“的”字,然后就郁闷了~~~~

哎,太郁闷,浪费我N多时间、精力和上网费。

既然开写了,干脆多写几句,前几天没搞定的问题依然存在,只好先着手干活,做玩了发给协调人让他帮助上传吧。我选中的第一篇要翻译的文章是GNU的The Free Software Song,页面很小,但主要内容是段歌词不好翻译,翻了一段时间,感觉还是不满意,这歌本来就不算好听,歌词像口号,翻出来就更怪异了,嗨,算了,搁着吧,有兴趣的时候再翻吧。

Emacs入门指南(3)

通过前两篇文章的学习,您已经可以把Emacs当作一个Better-Notepad来使用了。今天我们要学习的是Emacs中强大的搜索功能。

默认情况下,Emacs采用了一种很待殊的”增量搜索”的功能,虽然它与我们常用的搜索方法在操作习惯上有很大的不同,但习惯后确实是十分的方便。

要让Emacs开始执行搜索,可以按C-s或C-r,前者是从光标位置往后查找,后者则是往前查找。我们以C-s为例。按动C-s后,Emacs在Minibuffer中提示: I-Search:,这时您便可以输入要搜索的关键字了,现在学习试验的阶段建议您输入时手脚慢一点,看看Emacs是如何来执行您的搜索请求的。

比如,要搜索“search”一词,您输入s,这时Emacs会把光标移动到最近一个s字母上,这里如果您暂停输入一会儿,Emacs就会把所有的s字母进行高亮。您继续输入e,这时Emacs就找到了最近的se字母组合。一直输入下去,直到Emacs找到您要找的内容,这时按回车键即可结束查找。

在查找过程中,您可以反复按动C-s或C-r来执行向后或向前的查找。如果您已经找到一了一个匹配的内容,并且按了回车键结束了查找,这时如要继续查找这个内容,您只需按两次C-s或C-r即可,第一次按动用于激活查找功能,而第二次按动则表示要继续查找。

在输入查找关键字时,如果不小心输错了,可以按动<DEL>键来清除前一个字符,请注意,在Emacs术语中,<DEL>键是指我们通常所说的<BackSpace>键,而<DELETE>键才表示我们键盘上的<Delete>或<Del>键。

输入关键词时也有一个细节的问题,如果您输入的关键字全部是英文小字母,则Emacs会进行不区分大小写的查找。但如果输入的关键字中包含有大写字母,Emacs就会进行区分大小写的查找。另外在查找的过程中,可以通过M-c快捷键来切换区分大小字模式,可以用它来强行指定是否区分大小写。

如果不想用Emacs的增量搜索功能,也可以让Emacs进行传统的搜索,在按下C-s或C-r后,直接打一个回车键,这时Emacs就将进行非增量搜索,您可以输入你的关键字,再按回车键来执行搜索。

下面要介绍的是更为强大的正则表达式搜索功能。您可以通过按动C-M-s或C-M-r来启动正向或反向的正则表达式搜索功能,Emacs会在Minibuffer中提示Regexp I-search:,这时您便可以输入正要匹配的正则表达式了。

在正则表达式中可以使用很多的控制符号,这里我挑选几个常用的作一个简单的介绍,更全面复杂的解释可以在Emacs的手册中查到。

‘.’ (句号): 正则表达式的中句号可以用于匹配一个任意的字符。比如正则式’a.b’就可以匹配abb,acb,adb。。。等等以a开头以b结尾的三个字符的字符串。

‘*’: 正则表达式中的*号可以用于表示把它前面的字符重复0次或多次。比如’ff*’可以匹配一个或多个相连的f的字符串。

‘+’: 正则表达式中的+号与*号的作用基本相同,区别在于它表示把它前面的字符重复1次或多次,所以可知正则式’ff*’等价与’f+’。

Emacs的正则表达式语法十分复杂与强大,请您阅读Emacs手册来对它们进行全面的学习,一定会给您的工作带来巨大的便捷,作为一篇入门教程,这里我就不再作更全面的叙述了。

———–

附注,我要被这篇文章整死了,先是怎么也贴不上文章,系统非说我的文章中出现禁止的词语,不予接受,好不容易查出来了,是文末的“巨大(的)便捷”这个词搞鬼,我一开始没写那“的”字。

好不容易贴上了,得,<DELETE>这个词给我变成删除线了,要知道我可是已经把大于小于号改成相应的HTML编码了,没办法呀,又改了一次,这篇文章真是贴了不知多少遍才贴上呀。太辛苦了!