从Don Box处看到的连接,用Gematriculator 算出, my blog is 57% evil, 43% good
写完上面后,又算了一次,这回变成12% evil, 88% good
Enjoy coding | Enjoy life
从Don Box处看到的连接,用Gematriculator 算出, my blog is 57% evil, 43% good
写完上面后,又算了一次,这回变成12% evil, 88% good
今天天气真好,女儿闹着要出去玩,她特别要求去社区的playground那边玩。平常坐惯车的她,这次居然要求走着去,真是难得,我们就沿着树林里的一条小路走了过去。
虽然树枝还是光秃秃的,但走近仔细看的话,小树枝上已经发出嫩芽来了,虽然还不见绿色。树林里的树大都很高而且非常直,这些树我都说不上名字。脑子里的印象,好像杨树是又高又直的。往上看去,支叉不多的树大都比支叉多的树要高,当时脑子里想到的是,乱七八糟的学得太多了,想都精通不太容易,正所谓,Jack of all trades,master of none。
在playground,女儿看到了自己的同学,兴高采烈地一起玩去了,我就坐在附近的一张椅子上等她。
无聊地看着蓝天,白云,树干,小孩嘻戏,忽然感觉好像很遥远。这几年,虽然也出去玩过,但大都只在几点转悠,公司,家,商店,小孩学校。对季节的变化很麻木,自己的感官好像都没有以前那么敏感了。早出晚归,好像忙得连看蓝天的时间都没有。想起小的时候,割草时偷懒,睡在草地里,看着蓝天,随着白云的形状,联想翩翩的惬意,有点迷茫,是自己太专注了,还是在慢慢失去生活的乐趣?春天已经来了, 但身上还穿着棉袄,感觉不到春天的气息,幸好知道自己的心还跟以前一样仍在跳动,否则是不是会有living mummy的感觉?
有个网友问我前面有个贴里的Motivation指的是什么?
根据Dictionary.com,
motivation
n : the psychological feature that arouses an organism to action; the reason for the action; “we did not understand his motivation”; “he acted with the best of motives” [syn: motive, need]
根据On-line Medical Dictionary,
Those factors which cause an organism to behave or act in either a goal-seeking or satisfying manner. They may be influenced by physiological drives or
by external stimuli.
根据 在线网上英汉互译字典,
motivation
n.
1. 刺激;推动
2. 积极性;干劲
3. 行动方式
说白了,就是动机,动力。
有了她,你就会对好奇的东西寻根问底。有了她,别人花5分钟的问题,你也许会花上5个小时反复探索,想发现更好的方案。有了她,在乍看即知明显答案的情形下,你会绞尽脑汁另寻别的可行方案。
有了她,你就会深更半夜爬起来,打开计算机,输入你脑子里刚浮现的方案,发现确实完美无缺地解决了你的问题,大声欢呼,遭到隔壁邻居大骂神经病。
有了她,你就会陪着你女朋友/老婆/情人在商场里逛上几个小时而丝毫不嫌无聊。
有了她,你就会从城的一头坐几个小时的车去城的另一头看你喜欢的人,即使当晚还要赶回,甚至由于时间太晚有段路没车了需要走路也心甘情愿。
朋友给你看三个倒放的杯子,两个杯子下是小石块,另一个杯子下有块巧克力。他让你背转身,把杯子的次序搞乱,然后让你选择一个你认为其中有巧克力的杯子。你选定后,朋友打开另外的两个杯子中的一个,其下是石头,问你是否要改变主意,挑另外的那个杯子?(例子意译自Edward de Bono的著作《Serious Creativity》)
一开始选时,你知道猜中其下为巧克力的杯子的机率为1/3。朋友显示那个其下为石头的杯子后,从表面上,你猜中的机率变成1/2,好像没有改变的必要,是这样么?
有时候,特别是在动态的开发中,一开始知道的只是个大致或模糊的用户要求,并不知道所有的细节,所以做出的决定也是个大概方向而已。只有在知道进一步的细节后,才能作出更明确的决定,甚至改变原来的方向。这不光需要一个灵活的架构,也需要开发人员拥有一个随时重构或改进的态度或意愿。
俗话说,The devil is in the details,无论是对小项目,还是大项目而言,甚至是企业级的东西也如此。
《软件成功的诀窍(Secrets of Software Success)》一书中,通过对全球100个软件企业,450个高层管理人员的采访后,得出的结论是
“…Ultimately, say the authors, the secret to success lies in the details — the ability to choose from a range of key management decisions in order to balance the right set of actions at the right time with rapidly changing market conditions…”
以下博客堂堂主由于很久没有更新,将面临冻结帐号的处理:
Aliy, Jack, blahblah, 东方蜘蛛, Momoplus, 唐一均, 40Star, .com.cn, 天生, 沧海笑一声, paranoid, Locksmith, yeka, 梁佳楠, 笑语, xiaozhuo, 响叮当, 随风而来, 小毅, dannylu。
他们将收到以下模板的邮件,希望在收到邮件后能够尽快回复。
[Author]同学!您好,
鉴于您自2004-01-01以来,从未对博客堂进行过更新,我们将于近日对您的帐号进行冻结,在冻结帐号期间,我们并不删除您的任何资料,但您的站点将无法访问。
如果您希望继续拥有该帐号,请来信[email protected],说明您未进行更新的原因,我们将重新开放您的帐号。如果您不需要此帐号,也请来信说明。如果在一周内未接收到您的任何回复,我们将默认您不再需要此帐号。
如果您认为有些资料需要备份,也可以来信告诉我们,我们将短期为您开放帐号,让您有充足的时间进行资料备份。
您的帐号信息如下:
地址URL]
帐号Username]
密码Password]
希望能够得到您的谅解!
Regards,
Joy Wang
我们仍然欢迎各位大老推荐您的朋友加入博客堂,但他必须现在已经拥有另外一个地方的博客帐号,以便我们对他的技术及热情进行评价。
大家肯定都知道Longhorn,也知道Longhorn有一个Desktop Sidebar,不过Longhorn却要在2006年才会推出,居现在还有两年的时间,在这之前,如果你对SideBar感兴趣,可以使用我今天推荐的这个软件,Desktop SideBar。而且还有简体中文哟
试用了两个月,感觉这东西还是非常不错的,终于明白Longhorn要推出SideBar的用心了。当然,这个SideBar不是Longhorn的SideBar,其实现基理也是完全不同的,最简单一点,它不支持LongHorn的那种编程方式调用。
另外,这两天也开始使用Outlook对自己的日程进行管理。在公司里面,eMail成为重要的交流方式,任务的分派及日常报告都会使用eMail进行交流,最常见的一句话就是:给我发一封Mail吧。
假设我今天接受到一个任务,举个例子,有人发邮件,希望我帮他开一个博客堂帐号,而我当前没有时间来处理,我会随手将这封邮件拖拽到Outlook的“任务”栏中,然后会自动在任务栏当中产生一项新的任务。在我完成后,仅需要打一下勾即可。
如果你公司里面安装了Project Server,这个“任务”还可以与你的Project Server进行通讯,在AD集成的环境中,自动获得分配给你的任务,并且进行追踪。
如果你公司里面安装了SharePoint Portal Server 2003,那么“日历”的管理方式则是最方便的,在SPS 2003里面的某一子区域中,创建一个“事件”的Web Part,然后在其上选择“链接到Outlook”,则你的Outlook里面会自动产生一个新的共享日历,不过很遗憾的是,这个日历是只读的。你只能在SPS里面对其增加,而且它是做为团队日历存在的,适合组织一个部门的日程安排。
目前我手头上有一个任务是做一个Web Part,它与事件的区别是:
目前,对这个Web Part的制作尚未任何头绪,希望与大家共同探讨。
BTW: 我已经接管了本网站的管理权限,凡是在2004年1月1日后没有做过更新的成员,我们将对其帐号进行冻结,但不删除资料。在连续发送三次邮件未得到任何响应,或者答复不再需要本帐号时,我们将删除其资料。待帐号清理完毕后,我们再接受的新的申请。新申请成员,请你们一定要仔细考虑:你们真的是来做博客的吗?你们真的有这个激情吗?建议你们先在其它站点(如http://www.blogger.cn或者http://www.donews.net)申请帐号,我们会通过Google查阅在技术及激情上均有所建树的人员,邀请其加入博客堂。这是目前加入博客堂的唯一途径。
Desktop SideBar下载地址:http://www.desktopsidebar.com/index.html
下载或者定购SPS 2003试用版:http://www.microsoft.com/office/sharepoint/prodinfo/trial.mspx
Microsoft Project 2003免费培训:http://www.microsoft.com/china/events/2004/Project2003Training.asp
这几天与粥颇有缘…
从郑州回来,父母却回了老家,于是吃饭成了问题。周末的时候,MM过来陪俺共同切磋厨艺,有了上次做西红柿炒鸡蛋的失败经历,MM这次决定开始熬粥喝。MM说她喜欢吃咸咸的咸菜,喝稠稠的稠粥,说那种生活很幸福。
我们便将大米、棒子渣及麦片淘净,放在微波炉里面熬。我的微波炉虽然是新品,菜单非常丰富,但就是缺少“熬粥”这一项,于是不得已,以“米饭”为基准,在米饭的标准十八分钟之后,打开看一下,然后再决定熬几分钟。经验主义总是失败的,我们的粥在开始的时候,要么熬成了米饭,要么熬糊了,总之,没有熬出来“幸福”。
不过契而不舍总是会出成绩的,目前,我与MM熬粥的手艺是越来越高超了
这周公司的同事都去美国了,只剩下几个留守的,今天中午的时候,邀两个留守的同事去知味斋喝腊味粥,在喝的时候,想起了MM与我熬的粥,总觉得不够滋味,做得不是那么入味,所以也没有吃多少。
快下班的时候,肚子有些饿,于是去公司水房拿了些酸奶及饼干垫一下肚子,准备下班后回家继续熬粥喝。一边吃着饼干一边与MM熬电话粥(MM这段时间在驾校学开车),不经意开玩笑说:晚上去丈母娘家喝粥吧。MM竟然一下子当真了,而且岳母大人也十分高兴。在客套一番后,放下嘴里面的干饼干,打点行李回家。
经过了一个小时的长途跋涉,赶到了MM家中,此时小舅子还在上晚自习,尚未到家(想一想,现在的初中生减负仍然不见成效呀)。于是陪岳父岳母大人聊会天,岳父大人把一张请柬递给了我,是他这周末的书法展的(不知道博客堂是否有人对书法感兴趣)。聊了十分钟后,小舅子终于到家了,于是,开饭
竟然还是粥,呵呵,不过是以小米为主的,好象北京人称之为“面糊”,也不知道对不对。喝粥、吃馒头,而且还与岳父对饮了半杯红酒。吃得饱饱的。吃完了,又陪岳父、岳母及小舅子聊天,半小时后,起身告辞。此时,MM及岳母已经将剩下的粥放在餐盒里面,并且装在了塑料袋中交我,让我做第二天的早餐。虽然提出了从不吃早饭的理由,但只引来了批评,最终还是带粥而行。
途中,遇一丐持一饭盆,隔街,用疑惑的眼神看我手中的餐盒(由于背Laptop,怕洒了粥,只好手持餐盒行之,与丐无异样),继而,眼露兴奋神色,晃着饭盆就向我追来,吾见不妙,遂急行避之。
现在,那个餐盒在我的冰箱里面,明天,又有粥喝了
function act(no)
{
if(document.all.item(“x”+no).style.display==””) document.all.item(“x”+no).style.display=”none”;
else document.all.item(“x”+no).style.display=””;
}
一、预约
我很早就办了因私护照,所以拿到邀请函后就直接预约了,好象是 2 月 4/5 号左右打电话预约的,面谈时间是 24 号下午 1:30 ,633 号。美国大使馆每天大约安排 700 人左右签证,上下午各一半,我是 633 号,很靠后面的,如果你是前 50 号,或是 350-400 号,应该排队时间不是很长。
据我昨天排队的时候听人闲聊,现在预约都到 3 月 二十几号了,所以没有护照的同学们要加把劲呀,再晚可能就真来不及了, 记得 MVP Summit 是 4月4号 。
二、准备材料
按照 Grace 的提示,我将我的所有材料,每一份单独装订,用一个小黄色标签标上顺序号:A B C D 等,所有材料用夹子夹起来,最前面一页是一个非常清晰的中英文 List ,写明了 A B C D 等是什么材料,如下所示:
List 清单
=============================================
A. Passport , 护照
B. DS 156 / 157 /158 , 非移民签证申请表
C. Microsoft 2004 MVP Global Summit Invitation , MVP 峰会邀请函
D. MVP Certificate , MVP证书
E. 2004 MVP Global Summit Agenda , MVP 峰会议程
F. 2004 MVP Global Summit Registration Confirmation , MVP 峰会注册确认
G. Confirm Email Between FPM Shanghai and Microsoft ( Including MVP Name List) , 美国上海领事馆与美国微软总部的关于邀请函的确认电子邮件(包含 MVP 姓名列表)
H. Certificate of Employment , 工作单位证明
I. Certificate of Ownership of House ,购房证明
=============================================
换纸牌时,才发现多填了一张 DS158 表,只需要 DS156/157 就可以了。
三、排队
我 12:30 到使馆,经过使馆外的排队,签证大厅门口排队(30分钟),交护照排队(先在 1,2 号窗口交护照换一个排队的纸牌),等待安排窗口排队(约 1 个半小时,腿都站麻了),窗口前排队(20分钟),面谈时间约有3-5 分钟。
我不喜欢人多的地方,当时看那么多人排队,好多老头老太太,跟大商场抢购便宜商品似的,闹哄哄的,又有风,我真想一走了之,后来强忍着这种情绪排队,过与不过都不再想了,估计是 Grace 那句:“越不当回事,就越可能成功”的话起了作用,最后还真通过了。
四、面谈
签证官的问题如下:
1 签证官用中文问了一个小问题,忘记了是什么。
2 (仔细看邀请函)问英文问:Do you have ever worked for Microsoft ?
回答: No
3 语速很快地问了一个英语问题,隔着玻璃,我没有听清楚,而且我有点紧张,小声说:“我没有听清楚”,丢人哪 … 🙁 (这时预感要泡汤)
4 签证官改用中文又问:你去那边做什么?
回答:参加 MS 提供的一个培训与交流的 MVP 峰会,我是单位负责安全方面的专门技术人员,想与 MS 的安全专家或其它 MVP 共同交流,提高软件的安全性,保护诸如网上银行这样的高风险的系统 …
5 签证官仔细看我的材料,在 Registration 后面的那个类似于名片的地方看了好久(注意:如果你从 MVP 站点注册后,最后会有一个注册结果页面,最下面有一个东西很象“代表证”的东西 😛 ,这个东西打印时,好象打不出边框,失去了应有的效果,所以用截图的方式抓下来,重新插入到保存下来的 HTM 页面中,就可以打出来了)
6 签证官看到 FPM Shanghai 与 MS 总部关于 Intivation 的确认信,看了一会,又好象去其它窗口,估计是找人确认,或是其它 … (我这时有点预感可能要过)
7 问工作单位
8 问月收入 ,我说大约 X K ,他说有没有财产证明,我说我有一个招行帐户余额证明(这个是预备材料),我拿出来给他,上面只有 3 万多,我解释说我刚买完房子,卡上的钱不是很多
9 签证官又问,那你的购房证明? 我指着已经递给他的材料说就在最后一页,其实我附上的只是一个认购协议书,并不是购房合同,但我觉得能说明问题,他们也不会深究。
10 你买的房子在那里? 我说在西三环,他在看材料,似乎没听清,我又重复了一遍
11 签证官给我一个黄色的纸条,退还材料,叫我到边上的窗口等待护照签证,至此通过。
五、感想
我感觉我的顺利通过主要因素是:材料准备充分,合理,清晰
我的材料不多不少,也就 10 页左右,在材料内容的处理上,我也考虑比较周到,例如打印 Grace 发的那个 Invitation Confirm Email 时,行间距很大,又没有粗体显示主要信息,我就手动编辑了一下这个 Email ,没有更改内容,但删除了行间距,使内容比较紧凑,2 页就可打印完,同时,对于重要的人名、Email 地址,From,To 等关键字等做了加粗处理,非常清晰(如果按原始格式打印,好象有4,5 页,有点太多),而且首页的 List 也起了很大作用。
在这里再次感谢 Grace 的关于材料准备的提示和确认 Email 以及其它 MVP 分享的签证经历。
最后,要说明的一点是,由于每个人具体情况不同,面对的可能是不同的签证官,以上只是个人经历和一些感觉,只能起到参考作用。
我本来坚持的原则是在 Blog 上“当里个当,闲言碎语不要讲”,只写与技术有关的问题,但考虑到签证经历可能对很多 MVP 有参考价值,就破例了。
Ron Jeffries的《Extreme Programming Adventures in C#》已经出版了,怕书堆着读不完了,所以这几天逼着自己把Kent Beck的《Test Driven Development: By Example》读完了。正好看到sam111谈到这书,所以我也来凑凑热闹。
Test-Driven Development(TDD),是Extreme Programming (XP)–极限编程的一个重要组成部分。JGTM’2004前不久曾经欣喜若狂地介绍过XP里另一个重要部分,Pair Programming。
以前看到过别人提起“测试驱动开发”,当时我还以为是测试驱动程序的呢,所以没在意。今天看了sam111贴子的连接,才明白是怎么回事。(Test-Driven Development,是不是翻译成“测试为主导的开发”比较好?)
《Test Driven Development: By Example》作者是XP运动的开山鼻祖之一的Kent Beck,他的另一本经典著作是《Extreme Programming Explained: Embrace Change》。
TDD的目的,用Ron Jeffries的话来说,是为了产生Clean code that works,采用自动化的测试来主导开发过程,通常的做法是:
1。只在自动化的测试失败时才写新的编码
2。消除重复编码
在实践中通常的开发周期是这样的,
1。Write a test(写测试编码)
2。Make it run(使其运行,采取任何手段,包括hardcode跟测试相关的值等)
3。Make it right(使其变成好的编码,采用refactoring-重构方法消除重复编码)
这本书分成三部分。在第一部分(共17章)里,作者通过一个多国货币的例子,简单明了地演示了TDD的过程。从货币涉及的操作出发,先从简单的继承法引进多国货币,然后用重构方法反复消除重复编码,最后回复到单个类。第二部分是讲怎么用Python语言用TDD编写测试架构(有点象performing brain surgery on yourself)。第三部份总结了TDD开发中的模式。
总的感觉是,这本书是TDD方面不可多得的入门教材,但也感到TDD的实习人员需要精通OOP以及Refactoring的种种实践,否则很难从头到尾一贯性地实行TDD的精神。
在MSDN上有二篇谈及TDD的文章:
1。Unit Testing and Test-First Development(Eric Gunnerson)
2。Get Test Infected with NUnit: Unit Test Your .NET Data Access Layer(Steven A. Smith)
这里还有一个包含丰富资源的连接:
当然别忘了在.NET中开发TDD时必备的测试架构:
以及
大型的互联网网站总有不少独立的网络应用,而每个应用都有些需要用户登陆后才能看到的内容。很明显,你不想在每个应用里搞一套自己的登陆方案,设置自己的登陆页面。再说,如果用户每换一个应用就需要登陆一次,很麻烦,我们需要一个统一的登陆方案,用户登陆一次即可访问其他应用的方案。
在论坛上看到过一些建议,一般都是利用ASP.NET里基于Form的认证方法,其中一个方案是把所有的应用变成子目录,而非单独的虚拟目录,然后集中起来放在一个虚拟目录下,然后在虚拟目录下设置单一的认证。但这方案大概只适用于网络应用都集中在单一服务器上的情形,而且强制去虚拟化也减少了其中应用们的相对独立性。
当然,微软已经提供了一个很好的方案,Passport认证服务。ASP.NET也支持这服务,查看一下System.Web.Security命名空间下以Passport开头的类名就知道了。如果你想在你的应用里使用Passport认证服务的话,你需要下载.NET Passport SDK,可以参考
或DEVX网站上的这篇文章
Set Up Passport Authentication in ASP.NET
看是如何设置的。
但在很多情形下,这方案也许不是很恰当,但我们可以模仿Passport认证服务的工作机理来定做一个方案。在MSDN上好象找不到详细的Passport协议内容,找到的这一页则不够详细。你可以参考下列文章来了解一下Passport认证过程:
Enable Single Sign-on in ASP.NET with Passport
但大概的过程是这样的:
一。用户访问你网站上的某一网页
二。两种情形
A。如果你的网页发现用户尚未被认证,则显示认证登陆(Sign In)按钮
1。用户按登陆按钮
2。你的网页重新定向用户请求到认证服务器,并提供你的网站的ID
3。两种情形
a。如果认证服务器通过cookie发现用户尚未被认证,认证服务器显示用户名字/密码登陆表单,用户输入名字/密码,认证服务器认证后,在用户浏览器端生成一个认证cookie,并重新定向用户请求回到原来你的网页,并在URL里提供用预先生成的你网站的公钥加密过的ticket和用户profile信息,这些信息的细节参考上述文章
b。如果认证服务器通过cookie发现用户已经被认证过(也许是在别的应用/网站里),认证服务器更新那个认证cookie,并重新定向回到原来你的网页,并在URL里提供用预先生成的你网站的公钥加密的ticket和用户profile信息
你的网页检查URL,用预先生成的你网站的私钥,获取用户信息,生成一认证cookie,然后显示退出认证(Sign Out)按钮
B。如果你的网页发现用户已经被认证,显示退出认证(Sign Out)按钮
三。如果用户点击退出认证按钮,则将触发一个到认证服务器的退出认证网页的请求,认证服务器的退出网页根据回来的认证cookie,为每个目前用户已经登陆的应用/网站生成一个〈IMG〉,其属性SRC则指向各个应用/网站的退出认证页面,并使认证服务器的认证cookie过期。而各个应用/网站的退出认证网页,则把自己的认证cookie过期。
结果是,用户点击退出认证按钮的话,他将从目前登陆的所有应用/网站退出。
当然,你定制的方案也许不用这么复杂或健壮,你可以考虑不使用PKI。