Perfil de Andyeasy talkFotosBlogListasMás Herramientas Ayuda

Blog


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 tweaks

Firefox2发布后,这篇日志写了一些使用firefox2时有用的配置选项的修改,比如通过在firefox的地址栏输入about:config可以进入配置页等等。
然后发现这个网站的内容也是千奇百怪,不错不错。

20 octubre

就好像抽自己的脸一般

从microsoft watch上转载:
 
IE 7 Fails Its First Security Test
By Peter Galli

It seems that Microsoft's brand-new Internet Explorer 7 browser, which was just released Oct. 18 for Windows XP, has already failed a security test.

An advisory from Secunia, released Oct. 19, says the gold version of IE 7 was shipped with an information disclosure flaw that could be used in spoofing attacks.

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 out

m$发布了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的更多信息:http://www.mockobjects.com
一种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 API

msn 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

谈论清华梦的粉碎—王垠写给清华大学的退学申请

 可以从一个侧面体现出一些问题,我不肯定过于专注于某方面的人是否是偏激的,但是可以肯定不是好大学就有好老师,好大学培养的也不都是好学生。原文很长,过客有时间请链接到王垠的主页全部看一下。

引用

清华梦的粉碎—写给清华大学的退学申请

清华梦的粉碎—写给清华大学的退学申请 2005.9.22

清华梦的诞生

小时候,妈妈给我一个梦。她指着一个大哥哥的照片对我说,这是爸爸的学生,他考上了清华大学,他是我们中学的骄傲。长大后,你也要进入清华大学读书,为我们家争光。我不知道清华是什么样子,但是我知道爱迪生和牛顿的故事。清华,大概就是可以把我造就成他们这种人的地方吧。我幼小的脑海里就想象出我能在清华做的事情……我的脸上浮现出笑容。我说我要实现这个“清华梦”。这就是清华梦的诞生。

小小科学家

我相信每个人在小时候都跟我差不多,对这个世界充满了好奇。

鲁迅有他的百草园,我也有我自己的"实验田"。如果说小时候的鲁迅是一个艺术家,那么小时候的我就是一个科学家。这么说可能有人要说我口气太大,张口闭口就是这家那家。然而在我的字典里,"艺术家"和"科学家"并不是什么了不起的人,它们只是贴在人内心的一个标签。如果一个小孩专注于内心对世界的感觉,那么他就是一个艺术家。而我不是。我的大部分兴趣是在了解世界是怎样运转,甚至不惜代价。也许大部分男孩子都是这样。

我小时候住在父母执教的中学里。两间平房,门口有一小块地,妈妈在里面种了一些菜。我们一家三口虽然穷,但是过着宁静舒适的生活。我们在这个地方一直住到上初中的时候。这些房屋记录着一个年幼的科学家的探索和实验,直到它们被夷为平地。

妈妈拒绝让我养猫狗,她说凡是会拉屎的都不养---除了我。所以我小时候就喜欢与蚂蚁作伴。我总是试图用各种各样的办法去了解蚂蚁的生活习性。我可以一整天的观察我家屋檐下的蚂蚁来来去去。看见他们用触须碰一碰,然后各自分头走开,我就会想它们到底说了什么。我在想,能不能用一种方法解开蚂蚁语言的密码。我从书中得知蚂蚁洞里有蚁后,她有很大的肚子。为了一睹芳容,我开始试图水漫金山,把水往蚂蚁洞里灌。我有时一个下午就干这种事情,却没有一次成功看到蚁后。后来才知道蚂蚁是如此精明的下水道工程师,水大部分都渗到地底下去了。可是我不甘心,我开始试用别的办法。比如在洞口放一块糖。可是蚁后架子太大,终究不肯出来,让别人帮她送饭进去。

有人说,这个世界最后不是毁在疯子手上,就是毁在科学家手上。世界上如果只有科学家是很可怕的,比如他们会发明高效的杀人武器。我发现疏松的棉絮可以迅速的燃烧,就想出一种惨绝蚁寰的大屠杀实验。我先把糖水滴在地上,等蚂蚁把那个地方围个水泄不通的时候,铺上棉花,点火……现在想起那些勤劳的小黑头都变成灰烬,我仍然心惊肉跳。他们的灵魂会来找我报复吗?后来这个实验有一个升级的版本用的是浸泡过一种化学药品溶液的纸,文火燃烧,由于燃烧速度慢,杀伤力不大,这个实验可以测试蚂蚁的逃跑路线。我还用活蚂蚁进行过心理实验。首先用破袜子摩擦塑料尺产生静电,然后放在一只正在行走的蚂蚁身后不远处。蚂蚁走不动了,我就开始推测它在想什么,它感觉到什么。它可能会觉得有外星人?但是由于尺子拿开以后,它若无其事继续走,我猜它只是有点纳闷,而不惊慌。但是反反复复几次之后,它明显有罢工的意思,似乎忘了自己要去干什么。后来我又发现蚂蚁被吸到塑料尺上之后会由于带上相同的电荷而被"发射"出去,就像人间大炮一样。注:"人间大炮"是日本电视剧《恐龙特急克塞号》里的一种可以把人当作炮弹发射的威力很大的电磁装置。

一点微小的发现,就可以引发大量的探索和实验。这就是我在那个年代的特点。虽然妈妈也逼着我练习毛笔书法,绘画,还多次获奖,但我不喜欢这些东西。我似乎生下来就是科学家,不是搞艺术的,不过也许只是妈妈的强迫让我反感了艺术而已。物理是我最喜欢的,因为它让我了解到世界的奥秘。我一般开学前几天就会把物理书上的实验都挑出来,费尽辛苦找到材料实践一番,心里美滋滋的。上学真是快乐!

失之交臂

上了高中,由于课业的压力,我的生活逐渐改变了。为了考上清华大学,我努力的学习。抛下我的毛笔书法,抛下我用来做实验的蚂蚁,电池和线圈,抛下除了考试科目的一切。在老师眼里我是一个听话的好学生,在妈妈眼里我是一个听话的好孩子。每天早上按时起床,吃一大碗妈妈做的面(为了补充一上午学习需要的体力),然后冲进教室,按照预设的程序开始读书,做练习题。似乎一切都有条不紊,顺利进行。可是……

忽然有一天我发现,我的一切活动都是在纸上进行的,看书,做习题。试卷和复习书让我变得变得麻木。我想这样下去我就不再像爱迪生和牛顿了。于是我开始调皮起来。我不但要做考试的题目,还要做更难的题目。做了物理奥林匹克的题目,接着就想看大学的物理书,接着就想恢复我小时候的实验的爱好。老师辅导自习时经常被我缠住问一些不着边际的问题,那其实是我在实验中发现的问题。终于有一天,在我要求他跟我合作制造一个磁悬浮陀螺的时候,他显示出了不耐烦:“王垠,你让我先回答别的同学的问题好不好?你的问题对考试没有好处。” 我呆住了,启发我让我爱上物理的人,尽然对我说出这样的话。后来想一想,他也是无奈啊,不过我从此再也不想问他任何“超纲”的问题。

高二的时候妈妈就拿回一份前一届的高考题让我做,我随手一做就得了一个当时可以考上清华的成绩。我的心里想,清华我来了。明年的这个时候,我就会拿到录取通知书了!从此我就不再把高考放在眼里。我开始钻研越来越难的题目,进行越来越离谱的实验。我想,清华里面应该都是我这样的学生吧,我会有很多志同道合的朋友,不用再跟这群只会做题的呆子在一起了。

可是我的行为总是受到老师的压制,他们要把我们变成考试的机器。他们告诉我,沉下心来做习题,考试才能有把握。妈妈也帮着老师劝导我。看,一班的某某某这次模拟考试数学成绩比你高,多努力一下吧。我哪里听得进去,我才不在乎这点分数,我能解决更难的问题,老师都没法解决的问题。我开始有了逆反心理,开始早上懒床,装病请假不去上课。班主任,校长多次找我谈话,说我要沉下心来准备考试云云。但是我根本就听不进去,我鄙视高考,觉得他们没有资格出题来考我。然后我就有了心理疾病,大概是强迫症。高考语文的时候我居然怀疑监考老师认为自己在作弊,接着好像真的怕被抓住了一样,手发抖,头冒汗。然后我又想要是考不好,以前的优秀会不会也被人怀疑?他们会不会以为我以前的成绩全都是作弊得来的?手就抖得更厉害了。这时候,监考老师可能发现了我的情况,真的走了过来,站在我身后。害得我好几分钟不敢写一个字,因为手已经完全不听使唤。不过他还是走开了,这可怕的高考终于结束了。

我们是考试前填的志愿,我根本不考虑其他学校就只填了清华。后来妈妈研究了一下,帮我添了一个天津大学在第二志愿。以下的志愿全部空白。大家觉得我真够大胆,可是我的心理状态让我发挥完全失常,比清华的最低分数线还差两分。特别是语文,才96分。天津大学第一志愿收满不要我。昔日的好学生,居然到了落榜的下场。我真的那么好吗?我问自己。我太骄傲,才落到如此地步吧。我开始怀疑自己是否应该那样瞧不起高考。看着爸爸的愁眉苦脸,妈妈的唠唠叨叨,真是生不如死。复读吗?那会是噩梦的继续。我不能再在这个学校待下去。再面对题海,我的心理疾病会让我自杀的。碰巧四川大学来招收高分落榜的学生,还给了我随便选择专业的机会。妈妈说,计算机现在很火热,出来好找工作。我虽然对工作不感兴趣,但是我比较喜欢写程序,于是就进了川大计算机系。

两度退学失败

不能不说进川大是个没有选择中的好选择。大学生活自由一些,我至少不会走上自杀的道路。可是我的毛病仍然在继续,我永远不满足学校里能学到的那么点东西。老师基本是照本宣科,我逐渐不再满足这种知识灌输式的教育。我觉得完全没必要上这个大学。

川大的环境我实在无法忍受。军训的时候受够了同学和教官的委屈,我就想退学。我们的军训是在一个戒备森严的炮兵基地里,心里的苦向谁说啊!有一天我们正在路上齐步走的时候,我忽然看到一个女人挽着一个军官走了过来。那个军官的老婆怎么长的这么像我妈妈!要是妈妈来到我身边该多好!没想到回到营地,团长(原来是连长,我们来军训他就升一级做团长了)说有人来探访。我走过去,居然发现是妈妈!因为听说我想退学,她急忙向学校打听了军训的地点,几经周折跑过来,是那个军官带着她混进来的。我想我妈妈要是转行当间谍一定是个好料子。她说已经帮我办了退学,学校同意了,回去好好复习,准备考上清华…… “好好复习,好好复习”……我的脑海里又浮现出高三的情景,这次我要跟一群更没用的复读的人在一起。脑子一阵疼痛之后,我说:“妈妈,我不想退学了。”

可是军训回到学校,发现宿舍如此差劲,我又想退学。妈妈又来帮我办理手续,可是结果我还是由于懦弱反悔了。害得学校办事的老师都骂我:“你这个人简直神经病!” 对啊,我确实是有病,不过我的是精神病,不是神经病。我恨我的高中,我恨我的大学,我恨高考,我恨中国的教育!是你们让我生病的。可是妈妈,她为了我已经费尽了辛苦。我不能再这样周折下去。我自己在学校里好好努力,准备考上清华的研究生吧。

学校住宿环境很差劲,又经过好多麻烦事,我终于决定在校外去租房子住。后来我开始玩滑板,它让我变得勇敢。我心里逐渐平静下来,可以用心看书了。大二以后,我的学习生活才逐渐进入正常,自信开始恢复。

梦的复苏

记得川大教Pascal语言的老师第一堂课就对我们说:“我们学校就是落后啊。外面公司里都用C, C++了,我们还在教Pascal。你们以后要出去工作恐怕还是得学学VC什么的。” 于是有的同学开始抱起一本本像“XXX圣经”之类的书开始学习,上数学课也在看这些东西。我当时自愧不如啊。自己就是小学的时候玩过一下学习机,可以说没

24 mayo

一起coding的幸福

今天又去k歌了,席间mazha和smell合唱了一首歌,原歌是周华健的《一起吃苦的幸福》,但歌词被mazha改过,非常适合搞计算机的人。本来我是非常不喜欢改歌词的,总感觉对原歌有点侮辱(^_^,想法有点特殊),但是这首歌却有些感动,觉得真的很能体现cs的风格。另外,我想很大一方面是歌词和我自己的经历有很多重叠的地方。

我和丹从相识到熟悉就是从一起调试代码开始发展。同是cs人,又是同班,所以很多程序都是我俩一起做过来的。也许是我对coding太痴迷,我一直很享受两个人一起coding的幸福。记得做编译器的时候,丹回家了,我一个人在学校,连续几天我根本没有心思去想怎么做,也没有想清楚应该怎么做。一个人的时候好像真的不知道要做什么。丹提前一天从家里回来,开始加入我。我突然觉得思路清晰了,头脑清醒了,我们两个连续写了一天一夜,居然真的把一个简单的c语言编译器做出来了。我真的是陶醉在两个人一起coding的幸福里了。那次是我感觉丹和我一起做程序最快乐的一次,因为在我俩商定好任务后,我只是偶尔帮她debug一点点,大部分工作她都做的非常完美。以往的程序,我可能承担的过多了,以至于大部分都是我来做,丹不能从中体会到快乐。所以编译器那次经历的最大卖点就是我俩完美的合作。

以后不知道还会不会恋爱了,未来太遥远。如果还会,我想对方很可能还是一个cs人。毕竟我还要在这条路上走很久,交往的圈子自然会有限制,交到文学类的女生的几率不大。希望到时候还能两个人一起享受coding的幸福。coding是我生活的一部分,她也是我生活的一部分,亲情、爱情和兴趣交织在一起的幸福是我所追求的。

这个帖子的类别可能还是放在心情里比程序员这个类别要合适一些,因为加了好多怀念和希望,。不过一切因coding而起,干脆就放在这里。下面是歌词。

       一起coding的幸福
 
                           原唱:周华健

我们越来越爱coding了 是不是因为更加渴望技术呢

你说世界好像掌握在指尖上 望着字符飞舞心都越来越开阔

是该多学一些语言的 看看不同的类库有什么特色

遇到困惑你就勇敢发贴问吧 找不到的答案再去google搜一下


就算有些错误漏洞百出,至少我们有一起coding的幸福

每次程序从崩溃恢复,过程一步步会给我们帮助

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 Part

ASP.NET2.0感觉做得不错,感觉他把Web Matrix整个整合了进来,吸收了Web Matrix的优点,同时也有缺点。

优点:

1.    1.   内建了一个轻型的Web Server,只能本地localhost访问,端口随机,速度较快。由于有了内建Web Server,所以在建Web程序时不再需要一定有IIS的虚拟目录支持,可以选择本地文件系统目录,2003建项目时项目文件和工程文件分家的缺点没了。

2.     2.  Server Explorer完全整合了Web Matrix的数据库访问功能,不仅能显示数据库的内容,而且可以直接把一个表拖动到Design页面,自动生成GridViewDataSource ControlTSQL脚本的Build功能也完全拿了过来,勾勾选选就产生了SQL语句和数据绑定函数。数据字符串存放在一个DataSource控件里,可以自动从Web.config里读出连接字符串。

3.    3.   绑定控件的格式对话框做得不错,可以选择allow sorting,allow paging,allow editing,allow deleting,会自动产生相应的SQL语句和函数,在vs.net2003里需要手工添加的函数已经完全不用再写了。原来的一个DataGridEdit功能,我记得做起来还是挺麻烦的,现在一切烦恼都没了~

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_DataApp_CodeApp_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 Project

Test Project感觉就是把NUnit整合进来了,然后把标签的名字改了改……,完全抄袭之作,懒得看文档,具体如何使用没有感受。Team Project没有服务器,没有感受到。登陆的方式和Visual Source Safe相似。

其他的功能变化

Server Explorer里不仅能连接数据库,还增加了Performance的显示,能显示事件日志、服务、消息队列、进程信息,甚至控制面板里的部分信息,nbnb,不过感觉垃圾,谁会开个vs.net来查看系统信息阿―。―b,就算是学emacs一挽狂澜,把别的先做好好不好啊……

Class View也有些变化,分了两个窗,类关系和类成员分开显示,类继承关系有些像Refelector

ToolBox不再像vs2003那样分栏了,而是做了一个可收缩的文本显示分类,真的很难看。有一点比较新鲜的是会自动把你项目里使用的控件作为一个分栏在ToolBox里显示,如果一个工程里有多个项目的话,看起来会比较方面。

增加了自动生成类图的功能,挺好。

Document Outline在每种项目里都可以显示,感觉只是在Web Develop里比较方面,因为在窗体设计里面,树型结构不像HTML页面那样明显,显示的也不如网页开发那么舒服。

Visual Source Safe增加了HTTPHTTPS连接方式,追Subversion啊~,可是那那么容易追上去阿,我还是觉得SubVersion比较强:P

编译结果的输出窗口根据ErrorWarningMessage分类,显示的挺清楚,信息会回行了,不像以前一行字多了就看不见。

增加了Code snippet功能,visual assist的一大优势不见了哦~

增加了重构功能,不过我从来没重构过,好坏就不知道了。

(从上面几点可以看出,VS2005把很多原来的插件的功能都做进去了,很多插件以后可以废了,那些插件的作者们啊,另谋出路吧……你们的创意已经被无偿剥夺了。)

环境的配置文件不在起始页里进行选择了,而是在第一次启动时请你选择是一般配置还是倾向于某种开发模式的配置。日后想改需要在菜单里exportimport配置文件。

MSDN的搜索模式变了,好像所有的信息都以网页的形式体现,搜索时会询问你是搜索本地信息为主还是以网络上的信息为主,感觉和网络的结合更加紧了。Vs的菜单里也加入了Community一个大项。

差不多第一次的感受就是酱紫~~~~~~

04 mayo

开‘程序员’这个类别的原因

本来不想开这个类别的,在这个空间上不想谈技术的问题(估计也不会有多少人在spaces.msn.com上找技术的东西看吧),不过作为一个自认为还算合格的程序员,总是忍不住谈谈代码,谈谈程序。姑且列出来,全为自娱自乐之需^_^