Perfil de Andyeasy talkFotosBlogListasMás ![]() | Ayuda |
|
|
13 diciembre What software you paid this year?1. QIM
2. 如果随macbook自带的tiger及其应用软件可以变相计算进去的话,那么也算一些……
你们呢? 29 noviembre 微软对联系统知道微软研究院在研究什么东西么?这个是一个例子。你输入上联,它会自动产生下联。
有人测试的结果:
上联: 微软对联真是弱, 对下联:惠普格言不知寒 横批:尽如人意 上联:好男不当兵, 对下联:美女空出家, 横批:鱼水相欢 太仰慕MSRA的人了,真闲啊……我玩的时候一直连接服务器出错,郁闷。 http://couplet.msra.cn/ 17 noviembre linux kernel newbie~这个季度要做linux kernel programmer,目前正在转型中……从最简单的printk学起,看到一点可以试验的小程序就会兴奋,看到键盘的led灯因为我的程序一闪一闪的时候就心里美。一个字一个字仔细的看书,好像回到刚接触程序设计时的那个样子。想起那个时候就是单纯,有可以学习的技术就如饥似渴的把自己埋到书本和电脑里去,就好像拣了钱一样。到了大学后几年,对新出现的技术就没有当初的兴趣了,学不学用不用完全看现在有没有项目需要,有没有兼职可以做,纯粹的功利,只求能用,不求用好。一直都在做windows的程序,现在开始接触linux的程序,能再次体会到学习技术时的兴奋,真不容易。 07 noviembre 那便是神啊最近公司高层都来上海访问,发现这些人都太牛了。老大的老大的老大的老大的老大的老大的老大就不要说了,那简直就是教父,今天来的documentum的Howard Shao,简直就是legend,90%的mba教科书都会讲他的案例,从那么小的公司花一点点钱就赚到17亿美金,ohmygod,服了。此人太谦虚了,MIT出身居然说自己脑袋笨……今天的presentation是听起来最舒服的,从头到尾都聚精会神,不只是因为自己以前做的文档管理系统和documentum有点共同点,最好听的还是之前他在讲个人经历的经验。看得出Howard很会和人交流,ppt很有趣,而且最后总会重复他要说的重点,这比一些技术presentation听起来要能抓住重点的多,又学会了一点。今天简直被他的热情感染了,远见真的很重要,也许慢慢应该考虑今后的人生规划了,什么都不想,只会慢慢消失在世界里。 26 octubre Firefox2 config tweaks20 octubre 就好像抽自己的脸一般从microsoft watch上转载:
The vulnerability is caused by an error in the handling of redirections for URLs with the "mhtml:" URI handler. "This can be exploited to access documents served from another web site," Secunia warned. Secunia has a test page available that demonstrates the bug on a fully patched version of Windows XP SP2, running Internet Explorer 7. Secunia first raised an alert for this vulnerability in April 2006, but it was never fixed in IE 6 and was largely ignored in IE 7.
While it is nearly impossible to exploit this flaw to launch a spoofing or phishing attack, as an attacker would first have to lure an IE user to a fake Web site and know for sure which other secure site might be open in an IE tab in the same browser session, it is strange that Redmond allowed this to slip through. 19 octubre IE7 is outm$发布了IE7 English版,可以从m$的网站直接下载,看介绍功能还不错,不过现在浏览器的功能都差不多,无非说更安全,浏览更舒服,rss阿,search阿什么的,终于加入tabbed browsing,进步了……
本想尝试,发现不支持win2k,看来只能回家玩了,特意装个虚拟机只为一个浏览器不值得。 25 febrero 写程序时要注意兼容firefox今天把BookShelf在俱乐部架起来了,阿朱姑娘很快就指出一个问题“firefox不能正确浏览”,我说我只拿ie做测试了,从来都没有拿firefox试过。xc马上跳出来说“写程序要注意兼容firefox”。突然感觉到自己一个很大的毛病,喜欢从自己的好恶出发。现在firefox的用户群越来越大了,像我这种死守ie不动的死脑筋不该总这么狭隘,书架写出来是给别人用的,现在这个样子可能会失掉很多用户。才想起阿朱姑娘是用debian的,我居然下午说出你换ie就没问题了这种蠢话。还有很多人用非win操作系统的更不可能使用ie了,以后写程序我得多想想这个事。 10 febrero TDD & Refactoring Make Code Better (3)测试UI可能是比较麻烦的一件事。实现UI操作的接口本来与用户就具有很高的耦合性,而且现在大多数自动化IDE产生的界面代码都是事件驱动方式的,假设有一个Windows GUI程序,我怎么测试用户点击了某个按钮,或者以何种顺序执行了某个操作呢?尤其现在IDE的功能大大简化了编写界面代码的过程,比如Visual Studio,我很多时候直接就把一个逻辑操作代码写到了界面操作的处理函数里面,因为这样写很方便,但是这也给测试带来了麻烦。因为我的UI代码和运行逻辑代码混在了一起,使得运行逻辑代码慢慢的变成了界面操作的奴隶,当我要换一个界面实现时,就需要重写很多代码。写测试代码就更加麻烦。
其中一种解决办法就是把UI操作的逻辑和实际的UI呈现分离出来。比如常见的Model-View-Controller和Doc-View都是这种想法。这样做就可以对逻辑进行单元测试而不管UI的实际显示如何。Michael Feathers的一篇文章-《The Humble Dialog Box》,http://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf -提供了一种代码的写法。就是让UI代码继承一个只提供对界面元素进行get和set属性的接口,而UI代码只实现对接面元素进行显示的代码。所有的界面事件处理函数只是调用controller的一个函数。所有的逻辑都放在controller里进行实现。比如下图: ___________ _______________
| Controller | | IView(interface) |
|-----------------| |--------------------------| |+init(IView) |-------> |+Name{get; set;} | |+OnOK() | 1| | |__________| |_______________| /\ ▔ | | |▔▔▔▔▔▔▔▔| | UIView | |-----------------------| |+OnButtonOK() | |_____________| UI实现类UIView继承IView接口,实现UI操作的处理函数,Controller接受一个IView对象的引用,实际为UIView对象。当界面操作某个按钮时,在UI的OnButtonOK()函数中调用Controller的OnOK()函数,Controller操作IView对象的Name属性来反映操作。
如何对Controller进行单元测试呢?看下图:
___________ ________________ | Controller | | IView(interface) | |------------------| |--------------------------| |+init(IView) |------->|+Name{get; set;} | |+OnOK() | 1| | |__________| |_______________| /\ ▔ | | |▔▔▔▔▔▔▔▔| | MockUIView | |------------------------| |+OnButtonOK() | |______________| 实现一个MockUIView对象,继承IView接口,其它代码不变。可以写这样的测试代码:
[Test] public void TestOnButtonOK() { MockUIView view = new MockUIView(); Controller ctl = new Controller(); ctl.init(view); view.OnButtonOK(); Assert.AreEqual(view.Name, "test"); }
如此便对UI逻辑进行了单元测试。并且当你实现另一种UI时,只需要实现界面显示代码即可。UI的逻辑代码根本不需要变动。这种设计就简化了代码未来的扩充。实际的过程应该是先实现MockUIView,然后再去实现界面。道理同上面一样,因为这样定义了操作的接口。 The Humble Dialog Box这篇文章总结此种代码编写过程为:
1. Create a class for the smart object, and an interface class for the view. Pass the view to the smart object.
2. Develop commands against the smart object, test first. Write your tests against a mock view.
3. Create your dialog class and implement the view interface on it. Gestures on the dialog should delegate to commands on the smart object. Calls from the smart object to the dialog should resolve to simple setter methods.
当然实际情况肯定要比例子要复杂的多,这种方式也肯定不适合所有的情况。不过在适用情况下,这种方法肯定能优化代码的设计。同样的,单元测试也绝不是永远不变的真理,但是可以在很多情况上对代码的设计提供帮助。
TDD的东西就先到这里了,这次回家也把买了2年左右但是却没怎么翻过的《重构:改善既有代码的设计》拿回来了,最近就准备开始看了:) TDD & Refactoring Make Code Better (2)单元测试有很多简化程序员工作的工具,著名的Unit家族实力庞大,JUnit、NUnit、CppUnit、MbUnit等等好多种语言实现。我最近在学着用的就是NUnit。其实以前不知道多少次把NUnit下了装、装了卸。因为好多次都想学着用,但是每次都懒得写测试代码,纯粹的懒惰而已。NUnit的使用方法很简单,有半个小时足够上手使用,但是看懂了语法并不代表会写Unit Test了,只用不断实践实践再实践,才能逐渐写出像样的Unit Test。
单元测试中,很重要的一个原则就是make sure that each test tests ONLY ONE thing。但是通常情况下做到这一点并不容易。排除写代码的习惯原因,非常常见的一种情况就是你所要测试的的类或者函数需要使用其它对象来使自己工作。怎样保证其它的类或者函数对象能够正确的运行呢?这就是一个问题。为了解决这个问题,有一种叫做Mock Objects的东西就出现了。它的作用就是帮助程序员只测试他想测试的东西。A mock object is a "double agent" used to test the behaviour of other objects. 一个mock object扮演了一种需要使用的类或者接口的虚假实现,他只提供真正的类的最小外部接口,用来检验需要与真正的类进行交互的其他对象的行为是否正确。举个简单的例子,比如一个测试需要连接数据库,然后做两次update操作,因此可能就有一个MockDatabase的虚假实现来代替真正的数据库,他检查测试得类是否真的连接了数据库,并进行了update操作。使用mock object的好处是:Easy to make,easy to setup,fast,deterministic(produce predictable results),allow easy verification the correct calls were made, perhaps in the right order.
一种mock objects的.NET实现:DotNetMock,http://sourceforge.net/projects/dotnetmock/。 TDD & Refactoring Make Code Better (1)TDD(Test-Driven Development) 测试驱动开发
Refactoring 重构 我写程序,尤其是想把程序做“大“一点的时候,经常会发生一种情况:当花了很多时间,费了很大力气,写了很多代码,已经接近完成的时候,开始重新整理类名、函数名,整理代码文件结构,重新设计类结构,甚至重些部分代码乃至很大一部分代码。这样做的原因是因为代码的大小已经超过了我的暂时记忆能力,当我要增加某种功能时我需要去翻看很多类的实现代码,确保我这么做不会和以有的东西冲突;当我要使用某个已有的模块时,我需要查看这个模块的详细实现,因为我不记得模块功能范围的详细划分,不记得那个函数是否确保不影响其他的东西;当我要为某个小部分程序写测试程序时,很多情况下我都会收手,因为这个小部分程序牵扯了太多其它部分的程序,我为了保证这部分的正确性,就要先测试其它部分的正确性。而这个测试的圈还有可能又绕回到这一小部分程序上。也就是说代码里经常会充满所谓的bad smell.
曾想过造成这种麻烦事的原因,不爱写文档是原因之一,代码设计不清晰不详细是原因之一。不过即便写程序之初切记这些毛病,当写到一定程度的时候,还是能发现自己又走到了岔路上。我有一个还算清晰的设计和功能需求,但是在写程序的过程中因为某种想法的变动而使实际情况偏离了开始的初衷。比如,我又想加一个新功能,或者想把某部分代码写的功能强大一点,觉得以后可能会作为模块再次使用(这个想法最害人,曾经因为这个想法在某个C++程序里包装了一个很全面的线程模块,实现了各种互斥、协作以及线程池,做了很多那个程序用不到的功能。而实际情况是从那以后还没再用C++做过大一点的程序)。 最近通过一点实践和阅读,体会到了一点点可以明显控制这些问题的方法,那就是TDD和Refactoring。其实这些概念都是老歌新唱,测试一直都是重要的,重构也一直在做,只不过以前没人愿意提,而现在多了很多善于炒冷饭的人。以前的做法是写完实际工作的程序后再写测试程序,而现在提倡的做法是先写测试程序,再实现实际工作的代码。我的体会是TDD的作用在于它可以检验代码设计是否合理,重构的作用在于他可以改善代码的设计。如果无法轻松地对已经完成的代码实施单元测试,说明已有代码设计的松散性不够,类与类之间的耦合度太高。而重构就是改善这些问题的方法。
通常可以实施的测试驱动开发步骤是:
1. 写测试代码。 2. 运行测试代码。It fails to compile because the code you're trying to test doesn't exist yet. 3. 编写可以使代码编译通过的最小框架。(好像给代码上个壳) 4. 运行测试代码。仍然会失败,因为没有实际运行代码。 5. 实现功能代码使测试通过。 6. 运行测试代码。全部pass了,yeah~(fail的话说明代码有误) 7. 转到第一步开始写新的测试。 第5步的作法很有意思,有人叫它做Coding by Intention。这是一种自顶向下的编程方式,它做的不是写一个类,拥有这些函数方法,而是写一个能够提供这些函数方法的类。因为之前的测试代码里已经定义了这个类对外公开的部分和使用方法。 26 diciembre 测试MSN Space Blog APImsn space一公布提供xmlrpc实现的blog api,着实让我高兴了一下,所以很想写个程序试试看,这篇日志就是用自己的程序发上来的啦:)自己写的东西虽然简陋,不过重在实践嘛,咱好歹还是本土化,w.blogger还不支持中文呢。等以后做一个自己的blogger工具,自娱自乐~ 发布新日志时作为内容传递给msn space的字符串是以html代码处理的,所以相当于直接在space里编辑html代码。比如<font color=red>测试内容</font>就是这么来的。 有一点不太明白,看metaweblog的xml-rpc实现说明里说newPost的struct的格式是符合RSS2.0的tags的,可实际上用的tags又不是RSS2.0的tags,搞不零清(⊙o⊙) 目前的问题是msn space实现的api返回的xml字符串有错误,第一个字节是一个非法字符。这个bug太恶心了。那个msn员工Dare公布了消息后马上说某某工具支持msn space了,说要给出详细的文档“in short days”,又是把论坛建起来了,可是过了好久了也再说啥,有人提出问题和bug也不修复,一句话“现在是holidays”,就一切等节后再说……core,严厉bs-_-b 你还不如先不发布呢。。。(凸  ̄▽)一百遍阿一百遍 10 diciembre 今天提交了BookShelf version2准确地说是在今天凌晨4点多向mscenter网站提交了BookShelf第二版的程序。算是完成了这件事,不然都不好意思见人了。
从当初信心勃勃的从Mick手里接过BookShelf的项目那天开始到今天提交为止,整个过程绝对算不上任何成功。自己对书架的几个想法都没有实现,所做的工作其实只算是对其外表进行了一些美化,整个模式没有改变,说到底还只是一个网站而已,本来想实现一种网站与用户桌面的通道的想法没有体现出来,也许只是我对桌面工具有所偏爱吧。相对于为了找一点东西需要打开浏览器输入网址浏览半天我更喜欢在桌面上有一个sidebar随时候命。
当初拉了好几个人一起干,以为会有一个挺完整的团队,应该可以体会到分工合作的愉快。而实际上所有的代码都是我一个人在写,xka做了图片,设计了页面的初期结构,binghe负责配置了svn服务器。而其他人因为种种原因都没能坚持住。这其中有我的原因,比如不太懂得如何分配工作,不会督促别人完成工作,不懂得坚持时限的重要,因为我觉得每个人既然当初组队时都是一样的口气,那么工作时的投入也都应该是一样的,实际情况这是一个过于理想化的情况,因为每个人都有与他人不同的原因。实际的体会是一个没有利益驱动没有惩治方法靠热情来驱动的团队很难成功,它的成功需要很强烈的热情或者一个强势的领导人,我很肯定我不是一个强势的人,我不喜欢也不擅长对别人的行动指手画脚。即使让自己坚持住也都不是那么容易的事情,我想做的时候找不到其他人,我不想做的时候有人会催你时间快到了,这便让我觉得别人不理解你的处境,会觉得烦。学会合作绝对是门高深的学问。
不知道这个项目以后还会不会再做下去,我会不会还有机会参与,会不会实现我的那些想法。但至少我希望BookShelf真的能在浙大使用起来,我不是为了向mscenter提交一个项目给MSTC.ZJU挣点活动分,而是为了一个不错的想法能在浙大的网络上存活下去而做这个东西。 26 noviembre space的代码做的挺不错把msn space管理首页的源代码浏览了一下,找出了几个javascript脚本文件和aspx文件,简单的看了看,发现做的挺不错,很受启发。想做出交互性比较好的网页果然javascript和html一定要玩的漂亮,光想靠些asp.net的服务器控件是根本写不出好东西来的。javascript实在是太强大了。简单一比就知道自己有多差了,半吊子水平就是思维受限制。做web实在是一件累活,希望将来能做一个类似msn space的东东,肯定很过瘾。不知道M$将来会不会考虑将space开源呢?想想这便是梦吧,笑。 02 noviembre 做了几天MSTC BookShelf说起这个东西来,战线拖的真长。当初从Mick手里接过来,信誓旦旦的开始做第二版。本来在毕业前应该把第二版做完才对,但是因为本来应该一起做的几个伙伴都不积极,加上我当时个人的事情心情很不好,结果就停了下来。曾经还接到东北某大学的某MSTC的某位人士的电话问书架的情况,心情不好,无心理会,没给人家具体的回答。我就像死猪皮不怕烫一样不再去理会MSTC BookShelf。前段时间发现有人在问,感觉非常过意不去,该我做的东西居然拖到现在没结果。装了VS,数据库,又把好久没动过的代码翻了出来。
一开始做,果然好像不会写程序一样了,不知道该怎么下手,忘得差不多了,手中的刀完全锈掉了。用了1天把以前的东西翻来翻去的看,终于算是有了点头绪。这两三天天写下来也一直不顺,明明有98%都一样的代码在一个页面上ok,换到了另一个页面就完全失效。我恨,难道是编译的bug?完全无法理性解释了。只好换另一种方式来做。为了前后统一,又把其他几个页面的东西重写过。天哪,累。其实只需要在DataGrid的ItemCommand调用里做做就能达到功能,但就有一个页面有问题,只好把所有类似的地方全部改成了用javascript弹出模式窗口来进行操作,模仿了MSN Space的列表的操作方式,前后的代码量差了好多好多。
网页的东西真的很烦,测试起来烦死,等待慢腾腾的ie刷新出来,如果发现有问题,改完了还要刷新,等待刷新的时间加起来快可以睡个小觉了(其实是电脑太烂了)。
做了管理员登陆后的页面,分类的管理页面,管理员账号的管理页面,新进书籍的列表页面等等,想想还差好多好多,但是明天不能再做了,好久没看书了。
这几天生活完全没有规律,吃饭,睡觉完全不是正常人的生理规律。写程序效率太差了,本该很快就做出来的东西却总有毛病,改来改去就凌晨n点了,以我的性格自然不睡了,然后白天大好的时间就用来睡觉了……其实不但没有增加醒着的时间,反倒增加了睡觉的时间。
觉得自己看bbs的时间太长了,所以控制一下这种行为。先尝试归隐几天试试。其实mj还有好几个,想上的话还是没问题,希望自己能忍住。电脑也一样要控制。想想以前的书生为了读诗书住到庙里去,还是很有道理的啊。只要欲望的东西在你可控的范围内,想阻止自己去获得就会非常难。即使是控制自己不去做也会让自己分心,因为人就是有欲望。归隐前特意把昵称改成了有事请电话联系,现在觉得自己太自作多情了,因为本来就没有什么事情别人需要联系我嘛,手机经常1周没有任何短信和电话,完全是我的手表。即使我上MSN或者QQ也基本没有和别人聊天,只有在bbs上灌水认识的人才知道“oh,这个人还活着”。也许都不会有几个人这几天会注意到我归隐。本科的班主任和同学看到我都会问“你还住在华家池吗?”就是最好的例子。不知道谁谣传的我住在华家池,结果n个人问过我这个问题……真ft,每个人当时说这话的感觉都好像我是从山上下来的一样,我回答我没住hjc阿,马上就会听到:“啊?你又搬了?不住华家池了?”……一方面说别人自作多情,自己也自作多情,好像举起巴掌删到了自己的脸。希望自作多情是人类共同的问题。
23 septiembre 谈论清华梦的粉碎—王垠写给清华大学的退学申请可以从一个侧面体现出一些问题,我不肯定过于专注于某方面的人是否是偏激的,但是可以肯定不是好大学就有好老师,好大学培养的也不都是好学生。原文很长,过客有时间请链接到王垠的主页全部看一下。 引用 清华梦的粉碎—写给清华大学的退学申请 24 mayo 一起coding的幸福今天又去k歌了,席间mazha和smell合唱了一首歌,原歌是周华健的《一起吃苦的幸福》,但歌词被mazha改过,非常适合搞计算机的人。本来我是非常不喜欢改歌词的,总感觉对原歌有点侮辱(^_^,想法有点特殊),但是这首歌却有些感动,觉得真的很能体现cs的风格。另外,我想很大一方面是歌词和我自己的经历有很多重叠的地方。 我和丹从相识到熟悉就是从一起调试代码开始发展。同是cs人,又是同班,所以很多程序都是我俩一起做过来的。也许是我对coding太痴迷,我一直很享受两个人一起coding的幸福。记得做编译器的时候,丹回家了,我一个人在学校,连续几天我根本没有心思去想怎么做,也没有想清楚应该怎么做。一个人的时候好像真的不知道要做什么。丹提前一天从家里回来,开始加入我。我突然觉得思路清晰了,头脑清醒了,我们两个连续写了一天一夜,居然真的把一个简单的c语言编译器做出来了。我真的是陶醉在两个人一起coding的幸福里了。那次是我感觉丹和我一起做程序最快乐的一次,因为在我俩商定好任务后,我只是偶尔帮她debug一点点,大部分工作她都做的非常完美。以往的程序,我可能承担的过多了,以至于大部分都是我来做,丹不能从中体会到快乐。所以编译器那次经历的最大卖点就是我俩完美的合作。 以后不知道还会不会恋爱了,未来太遥远。如果还会,我想对方很可能还是一个cs人。毕竟我还要在这条路上走很久,交往的圈子自然会有限制,交到文学类的女生的几率不大。希望到时候还能两个人一起享受coding的幸福。coding是我生活的一部分,她也是我生活的一部分,亲情、爱情和兴趣交织在一起的幸福是我所追求的。 这个帖子的类别可能还是放在心情里比程序员这个类别要合适一些,因为加了好多怀念和希望, 一起coding的幸福 我们越来越爱coding了 是不是因为更加渴望技术呢 你说世界好像掌握在指尖上 望着字符飞舞心都越来越开阔 是该多学一些语言的 看看不同的类库有什么特色 遇到困惑你就勇敢发贴问吧 找不到的答案再去google搜一下
每次程序从崩溃恢复,过程一步步会给我们帮助 Repeat * 虽然有时候待遇残酷 至少我们有一起coding的幸福 一个人测试只有痛苦,两个人调试不再孤单无助
07 mayo Visual Studio.Net 2005 beta2 初体验VS.NET2005 beta2出了之后,我实在是忍不住诱惑,前两天装了试看。发篇贴谈谈我适用的感受。出beta1的时候已经有人谈过感受,这次我再说不准备谈vs的界面设计好不好看了,感觉就是有的变简朴了,有的花哨了但是难看。我准备主要从编程序的角度谈谈我简单适用的感觉。 启动速度感觉还可以,感觉和2003差不多,运行的速度也是差距不大,编译好像比2003快一些,不过现在2005只是建了几个小项目测试了一下,没有挂其他乱七八糟的东西,所以速度还可以,基本上点了就能出来,估计用用就会像2003挂多了东西一样得等半天。(其实如果有1G内存,根本不用考虑速度问题,xka的本本启动个vs.net2003比我启动个记事本都快……也就咱儿者处于社会最底层的苦孩儿还考虑速度的问题。) Visual C++这里谈的Visual C++就是指编标准win32程序,MFC,ATL等等项目。经过Binghe编了几个MFC程序,使用过的感受就是和以前一个样,没啥区别,原来怎么用现在还是怎么用,也没有增加什么控件。标准win32 C++程序也是没有什么改变,可以享受的都是VS另外附加的功能。 Visual C++.NET听说MS新加入了CLI,号称是划时代的产物。本来颇为激动,赶紧弄了一个C++.NET托管的winform程序看看。在可视化编程方面和C#、Visual Basic.Net是一样的,具体结构改变在C#方面再谈。CLI具体内容咱不懂,看了看代码后发现,指针的符号由c++的*变成了pascal的^,数据库绑定控件好像都分出一个.h文件来存放代码,我在窗体上放置了一个GridView,产生了一个相应的.h文件存放数据榜定的代码,同时还有几个其他文件,不知何用。然后代码量比较庞大,而且极其复杂混乱,感觉已经不是肉眼能够看清楚得了。所以我觉得如果你想写C++程序,可以写win32的标准c++程序,如果想用.NET框架可以使用C#和Visual Basic.NET,至于托管C++还是放弃吧,我觉得除了垃圾已经没有什么好形容词了。不管CLI有多好,放到这里都不像是给人用的。我和binghe一致认为MS是在花巨资把C++搞黄,把程序员拉到它其他的语言上。 Web Develop PartASP.NET2.0感觉做得不错,感觉他把Web Matrix整个整合了进来,吸收了Web Matrix的优点,同时也有缺点。 优点: 1. 1. 内建了一个轻型的Web Server,只能本地localhost访问,端口随机,速度较快。由于有了内建Web Server,所以在建Web程序时不再需要一定有IIS的虚拟目录支持,可以选择本地文件系统目录,2003建项目时项目文件和工程文件分家的缺点没了。 2. 2. Server Explorer完全整合了Web Matrix的数据库访问功能,不仅能显示数据库的内容,而且可以直接把一个表拖动到Design页面,自动生成GridView和DataSource Control,TSQL脚本的Build功能也完全拿了过来,勾勾选选就产生了SQL语句和数据绑定函数。数据字符串存放在一个DataSource控件里,可以自动从Web.config里读出连接字符串。 3. 3. 绑定控件的格式对话框做得不错,可以选择allow sorting,allow paging,allow editing,allow deleting,会自动产生相应的SQL语句和函数,在vs.net2003里需要手工添加的函数已经完全不用再写了。原来的一个DataGrid的Edit功能,我记得做起来还是挺麻烦的,现在一切烦恼都没了~ 4. 4. Web.config文建立连接字符串的存储有了变化,不再是从<appSettings>节点里<add key=”xxx” value=”xxx” />了,专门有了<connectionStrings>一节,里面专门存放连接字符串。 5. 5. aspx页面源代码编辑模式添加了代码折叠功能,并且可以方便的块选中某一个标签的所有内部元素。鼠标点击某一个标签内的代码时,自动加粗突出显示本标签。 6. 6. aspx页面自动生成取消了以前烦人的meta-data,整个世界清静了。 7. 7. 有多个页面时可以方便的测试某一个页面,不再用设置起始页,当前打开了那个页面,Debug就启动那个页面。 8. 8. Web控件确实增加了不少,有些感觉很实用,比如TreeView,还有一个Login分类,整个分类都是登陆窗相关的控件,DataGrid默认不显示在ToolBox里,完全由GridView取代,需要的话要自己添加到ToolBox。还有很多很不错的控件,感觉ToolBox里显示的新的控件没有50个那么多。很多空间都有多个版本对应.Net Framework的不同版本,都加起来可能就够了。 9. 9. 新添加的Document Outline也很方便。
缺点: 1. 1. 在DataView数据绑定的时候,从Server Explorer直接拖动一个表过来和build SQL脚本产生的SQL脚本和函数全部加到aspx页面代码里,完全的Web Matrix风格,非常之ft,这个东西好歹得注意一下嘛~ 2. 2. 其他的没注意。 页面的一些标签属性改了名,比如CodeBehind变成CodeFile,另外加了很多系统目录,比如App_Data、App_Code、App_Theme等等,不是原来一个目录啥都放的样子了。原来Mick介绍过ASP.NET2.0编程模型的变化,可惜没听,8知道了(-_-b)总之,ASP.NET2.0变化还是挺大的,感觉是整个vs里做得最好的一部分。 Visual C# & Visual Basic控件变化和Web Control差不多,代码写起来感觉也差不多,最突出的是一个Form的代码文件不只是原来的一个Form.cs或者Form.vb了,而是增加了一个Form.Designer.cs(Form.Designer.vb),窗体的初始化代码从Form.cs转移到了Form.Designer.cs里,代码清爽了许多。代码绑定部分和C++.NET一样,也增加了一个xxxDataSet.xsd文件及相关的代码文件,里面也是难看死了,估计是添加数据库数据源自动产生的。还好这个不用自己写。原来的AssemblyInfo文件和项目级的资源文件放到了Properties里。Main函数跑到了Program.cs文件里。 有一点很不爽,就是不能像Web Develop里那样,直接把一个数据库的表拖到Design里直接产生数据绑定的GridView,充分体现出做vs的肯定又是好几个组,优点不能完全继承,我很生气,后果…… Test Project & Team ProjectTest Project感觉就是把NUnit整合进来了,然后把标签的名字改了改……,完全抄袭之作,懒得看文档,具体如何使用没有感受。Team Project没有服务器,没有感受到。登陆的方式和Visual Source Safe相似。 其他的功能变化Server Explorer里不仅能连接数据库,还增加了Performance的显示,能显示事件日志、服务、消息队列、进程信息,甚至控制面板里的部分信息,nb是nb,不过感觉垃圾,谁会开个vs.net来查看系统信息阿―。―b,就算是学emacs一挽狂澜,把别的先做好好不好啊…… Class View也有些变化,分了两个窗,类关系和类成员分开显示,类继承关系有些像Refelector。 ToolBox不再像vs2003那样分栏了,而是做了一个可收缩的文本显示分类,真的很难看。有一点比较新鲜的是会自动把你项目里使用的控件作为一个分栏在ToolBox里显示,如果一个工程里有多个项目的话,看起来会比较方面。 增加了自动生成类图的功能,挺好。 Document Outline在每种项目里都可以显示,感觉只是在Web Develop里比较方面,因为在窗体设计里面,树型结构不像HTML页面那样明显,显示的也不如网页开发那么舒服。 Visual Source Safe增加了HTTP和HTTPS连接方式,追Subversion啊~,可是那那么容易追上去阿,我还是觉得SubVersion比较强:P 编译结果的输出窗口根据Error、Warning、Message分类,显示的挺清楚,信息会回行了,不像以前一行字多了就看不见。 增加了Code snippet功能,visual assist的一大优势不见了哦~ 增加了重构功能,不过我从来没重构过,好坏就不知道了。 (从上面几点可以看出,VS2005把很多原来的插件的功能都做进去了,很多插件以后可以废了,那些插件的作者们啊,另谋出路吧……你们的创意已经被无偿剥夺了。) 环境的配置文件不在起始页里进行选择了,而是在第一次启动时请你选择是一般配置还是倾向于某种开发模式的配置。日后想改需要在菜单里export、import配置文件。 MSDN的搜索模式变了,好像所有的信息都以网页的形式体现,搜索时会询问你是搜索本地信息为主还是以网络上的信息为主,感觉和网络的结合更加紧了。Vs的菜单里也加入了Community一个大项。 差不多第一次的感受就是酱紫~~~~~~ 04 mayo 开‘程序员’这个类别的原因本来不想开这个类别的,在这个空间上不想谈技术的问题(估计也不会有多少人在spaces.msn.com上找技术的东西看吧),不过作为一个自认为还算合格的程序员,总是忍不住谈谈代码,谈谈程序。姑且列出来,全为自娱自乐之需^_^ |
|
|