摘要:又是一年一度的MVP Open Day,前年在三亚,去年在北京,今年还在北京,明年能不能换个地方啊?我觉得两岸三地是个很好的主意,让我能认识到平时接触不到的港台MVP。不过,也请容我私下阴谋论一下,是不是好像TechEd裁减预算三场合办为一场那样,MVP Open Day也用两岸三地的预算合办了啊?去MVP Open Day的路上,第一感觉是会务安排的失职(CSDN,又在说你呢!)—&... 阅读全文
程序之外的事情 (Part 1 - Speech)
2009-12-15 01:18 by Cat Chen, 4521 阅读, 11 推荐, 收藏, 编辑
摘要:相信大家最近都看到了有一篇题为《程序员需要培养企业家式的能力》的热文吧。在我首次读到这篇文章时,我并不太同意文章开头的几段话——“程序员在公众面前讲话会脸红,不能很好地表现自己”,你开玩笑吧?在我熟悉的程序员当中,没几个是这样子的,我很喜欢跟他们聊各种各样的事情,从而获得更多有趣的观点,也激发自己的创意。后来想想,或许仅仅是我所在的圈子如此吧,我熟悉... 阅读全文
编写 iPhone Friendly 的 Web 应用程序 (Part 7 - 多点触击)
2009-11-24 22:33 by Cat Chen, 3499 阅读, 3 推荐, 收藏, 编辑
摘要:这个系列的上一篇文章差不多是两年之前的事情了,在这两年里Mobile Safari并非停滞不前,从iPhone 2.0开始Mobile Safari就加入了对多点触击的支持,现在我们就来看一下我们可以利用它来干什么。相信很多人都看过WPF为Surface设备做的一个简单demo,也就是在桌面上显示若干张照片,你可以通过单点触击拖放,也可以通过多点触击缩放和旋转。这在iPhone上能够做到,甚至在M... 阅读全文
不看《时尚先生》的你竟然看《程序员》?!
2009-11-23 23:26 by Cat Chen, 5245 阅读, 17 推荐, 收藏, 编辑
摘要:我的博客订户有多少人看《时尚先生》的,举手来看看?博客园里又有多少人是看《时尚先生》的,喊出来听听?我相信绝大多数程序员都是不看《时尚先生》的,尽管它定位为男性杂志,但不看的人不会因此而觉得自己不够男人,也不会去指责一本男性杂志的编辑为何不考虑男性程序员。(为了表示我没有性别歧视的倾向,请女程序员自行将本文的《时尚先生》替换为《时尚》,将Esquire替换成Cosmopolitan。)我们都明白一... 阅读全文
User Friendly 2009
2009-11-18 00:01 by Cat Chen, 2679 阅读, 2 推荐, 收藏, 编辑
摘要:这个周末有幸去上海参加了UPA China组织的用户体验行业大会User Friendly 2009。参会人员大多数都是设计师,会议内容也是他们熟悉的内容,但对于像我这样少数的参会工程师来说,这样的会议确实让人大开眼界。在整场会议当中,我觉得让我印象最深刻的就是Jared M. Spool的Keynote了,我觉得其中一些观点是非常有价值的。至于其它的Workshop,也都能学到一些实实在在的东西... 阅读全文
Tech·Ed 2009
2009-11-16 20:01 by Cat Chen, 2738 阅读, 2 推荐, 收藏, 编辑
摘要:今年是我第一次以讲师身份参加TechEd,碰巧TechEd所在的周末我们要搬家到百度大厦,所以我星期四早上搞掂打包工作后就赶到了会场。凭着《讲师指南》进入会场后,我直奔讲师休息室领取证件和衣服,然后再跑到MVP站台领取印章,接着等待第一天下午的Keynote开始。尽管我没有参加Windows 7 Launch而跑去参加SD2C了,但我仍然觉得第一天Keynote的一半是Windows 7 Laun... 阅读全文
我在 TechEd 2009 演讲的资源 (Silverlight & Ajax)
2009-11-10 11:49 by Cat Chen, 3941 阅读, 5 推荐, 收藏, 编辑
摘要:这是TechEd第二天下午的Silverlight课程资源。关于百度Hi的Silverlight实现方面的任何问题,都欢迎与我讨论。基于Silverlight的RIA架构及百度应用View more presentations from Cat Chen.这是TechEd第三天下午ASP.NET 4课程资源。与ASP.NET AJAX 4.0相关的问题可以在此讨论。建站大业,实战ASP.NET 4... 阅读全文
SD2C 2009 (Part 2 - Session & Forum)
2009-10-25 19:51 by Cat Chen, 2594 阅读, 1 推荐, 收藏, 编辑
摘要:SD2C的第一天晚上,我在「开放平台」和「PPT制作秘诀」两者之间犹豫,最后选择了去听蔡学镛的「尼古丁+咖啡因...不瞌睡的PPT制作秘诀」,原因是我觉得如果蔡学镛能教别人写不瞌睡PPT,那么他自己的PPT至少也应该是不瞌睡的。事后证明我的选择是没错的——别人告诉我「开放平台」论坛成了平台和开发人员互相责骂对方的战场。蔡学镛把制作PPT比喻为制作生鱼片,要经过选材、处理、装... 阅读全文
SD2C 2009 (Part 1 - Keynote & Meal)
2009-10-23 00:13 by Cat Chen, 2831 阅读, 2 推荐, 收藏, 编辑
摘要:一年一度的SD2C又来了,今年的时间由去年的两天半扩充到三天,第一天只设主会场,全部都是keynote。跟去年的情况类似的是,keynote环节基本上就是赞助商专场,每个赞助商都来从技术的角度说一下自己当前最重视的市场。例如说Microsoft开始重视Team Foundation Server的市场占有率了,于是就在Visual Studio 2010的keynote上介绍TFS的特性,所占比例... 阅读全文
十分钟内学会:控制浏览器是否缓存网页状态
2009-10-09 14:59 by Cat Chen, 7637 阅读, 10 推荐, 收藏, 编辑
摘要:Question在Firefox等浏览器中,如果你打开一个页面并进行若干操作,例如在文本框进行输入,甚至点击按钮进行Ajax操作更新页面局部,这些操作的结果都会被缓存下来。在你点击链接离开这个页面后,如果你通过后退按钮回到这个页面,你会发现它仍出于你离开时的状态,而非页面刚刚加载好后的初始状态。在一些情况下,这样的缓存方式是符合我们预期的;但在另外一些情况下,我们更希望页面恢复到初始状态,或者说让... 阅读全文
你的网站「被兼容」了吗?
2009-09-17 15:35 by Cat Chen, 5004 阅读, 7 推荐, 收藏, 编辑
摘要:一般情况下,我们只会讨论我们的网站如何主动兼容某某浏览器,被动地等待浏览器来兼容我们的网站是不切实际的幻想——哪个浏览器会那么伟大,原意主动为一个不兼容的网站而作出改变呢?IE8就是这样一个伟大的浏览器,Microsoft就是一家这样伟大的企业。故事是这样的,我们有一小段JavaScript依赖于userAgent属性,同样是用IE8进行浏览,在测试环境上userAgent... 阅读全文
jQuery is DSL (Part 2 - jQuery)
2009-08-17 00:01 by Cat Chen, 4644 阅读, 7 推荐, 收藏, 编辑
摘要:jQuery的Internal DSL形式在上一篇文章里面,我们了解到了Internal DSL的具体形式,形如:/* Method Chaining */computer() .processor() .cores(2) .i386() .disk() .size(150) .disk() .size(75) .speed(7200) .sata() .end();然后我们在看看一段... 阅读全文
jQuery is DSL (Part 1 - DSL)
2009-08-10 23:47 by Cat Chen, 6908 阅读, 13 推荐, 收藏, 编辑
摘要:jQuery刚刚出来的时候,我没有太多关注它,觉得这不过是Yet Another JavaScript Library。早期的jQuery专注于DOM节点的筛选与操作,不提供众多的基础类扩展,更不提供UI组件,因此体积能够做到很小。然而,我实在看不出它和我熟悉的Prototype比有什么明显的优势——jQuery能做的各项独立的操作,Prototype都能做。后来用jQue... 阅读全文
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009-07-02 15:51 by Cat Chen, 4366 阅读, 1 推荐, 收藏, 编辑
摘要:在上一篇文章里,我们设计了一套能在JavaScript中描述函数重载的方法,这套方法依赖于一个叫做Overload的静态类,现在我们就来看看如何实现这个静态类。识别文本签名我们先来回顾一下上一篇文章中提到的Overload用例: var extend = Overload .add("*, ...", function(target) { }) .add("Boolean, *, ...", ... 阅读全文
让 JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009-07-02 09:18 by Cat Chen, 7556 阅读, 1 推荐, 收藏, 编辑
摘要:JavaScript支持重载吗?JavaScript支持函数重载吗?可以说不支持,也可以说支持。说不支持,是因为JavaScript不能好像其它原生支持函数重载的语言一样,直接写多个同名函数,让编译器来判断某个调用对应的是哪一个重载。说支持,是因为JavaScript函数对参数列表不作任何限制,可以在函数内部模拟对函数重载的支持。实际上,在很多著名的开源库当中,我们都可以看到函数内部模拟重载支持的... 阅读全文
写个 JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
2009-07-01 21:59 by Cat Chen, 3932 阅读, 1 推荐, 收藏, 编辑
摘要:我们用了5篇文章来讨论如何编写一个JavaScript异步调用框架(问题 & 场景、用例设计、代码实现、链式调用、链式实现),现在是时候让我们看一下在各种常见开发情景中如何使用它了。封装Ajax设计Async.Operation的最初目的就是解决Ajax调用需要传递callback参数的问题,为此我们先把Ajax请求封装为Async.Operation。我在这里使用的是jQuery,当然无... 阅读全文
写个 JavaScript 异步调用框架 (Part 5 - 链式实现)
2009-06-30 23:36 by Cat Chen, 4020 阅读, 0 推荐, 收藏, 编辑
摘要:在上一篇文章里面,我们为异步调用框架设计了一种链式调用方式,来增强异步调用队列的代码可读性,现在我们就来编写实现这部分功能的代码。调用入口链式调用存在Async.go方法和Async.chain方法两个入口,这两个入口本质上是一致的,只是Async.chain方法在调用时先不提供初始参数,而Async.go方法在调用时提供了初始参数并启动异步调用链。Async.chain = function()... 阅读全文
拆分自然数:纯while实现 (Part 2 - 实现)
2009-06-28 15:35 by Cat Chen, 3814 阅读, 1 推荐, 收藏, 编辑
摘要:在《拆分自然数:纯while实现 (Part 1 - 思路)》这篇文章里面,我提供了解答Jeff《编程小练习:拆分自然数》问题的一种解答思路,并且使用了两个例子来解释这种思路,不知道你是否已经成功利用这种思路解题了呢?首先,这道题的搜索域是什么?那就是[min, min, min, ..., min]到[max, max, max, ..., max],或者是它的子集。就算你完全不懂算法,我相信你... 阅读全文
拆分自然数:纯while实现 (Part 1 - 思路)
2009-06-24 13:38 by Cat Chen, 3640 阅读, 2 推荐, 收藏, 编辑
摘要:关于Jeff的《编程小练习:拆分自然数》问题,在此我提供一种思路,希望大家理解这种思路后能够自己把答案写出来。我先问大家一个问题,写一个函数按顺序输出所有的4位二进制数(即:0000, 0001, 0010, 0011, ..., 1110, 1111),你会怎么写? 如果把固定4位变成任意n位,你又会怎么写?我知道那些会写高精度加法的人会跳出来说,就做一个高精度的二进制加法,Array的每一位保... 阅读全文
中国程序员有美国梦吗?
2009-06-15 02:40 by Cat Chen, 9105 阅读, 2 推荐, 收藏, 编辑
摘要:Jeff最近转载了一篇名为《贺计算机成“就业最困难专业”》的文章,然后抛出了一个问题来,问大家对此看法如何,接着自然又引起了新一轮博客园首页发文热潮。对此,我站在我的角度说说我的看法。大浪淘沙,金子难寻1848年,美国爆发了加州淘金热潮,大量人口涌到加州进行淘金,其直接后果就是让一个叫旧金山小村庄的转眼间变成了一座大城市。在淘金热潮之初,你拿个筛子在河床里筛泥沙也能找到金子... 阅读全文
写个 JavaScript 异步调用框架 (Part 4 - 链式调用)
2009-05-09 23:46 by Cat Chen, 3736 阅读, 1 推荐, 收藏, 编辑
摘要:我们已经实现了一个简单的异步调用框架,然而还有一些美中不足,那就是顺序执行的异步函数需要用嵌套的方式来声明。现实开发中,要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子,我们先要异步获取联系人列表,然后再异步获取每一个联系人的具体信息,而且后者是分页获取的,每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。为此,我们需要设计一种新的操... 阅读全文
写个 JavaScript 异步调用框架 (Part 3 - 代码实现)
2009-05-07 14:54 by Cat Chen, 3580 阅读, 0 推荐, 收藏, 编辑
摘要:在上一篇文章里,我们说到了要实现一个Async.Operation类,通过addCallback方法传递回调函数,并且通过yield方法返回回调结果。现在我们就来实现这个类吧。类结构首先我们来搭一个架子,把需要用到的似有变量都列出来。我们需要一个数组,来保存回调函数列表;需要一个标志位,来表示异步操作是否已完成;还可以学IAsyncResult,加一个state,允许异步操作的实现者对外暴露自定义... 阅读全文
写个 JavaScript 异步调用框架 (Part 2 - 用例设计)
2009-05-07 01:12 by Cat Chen, 4057 阅读, 0 推荐, 收藏, 编辑
摘要:在上一篇文章里说到,我们要设计一个异步调用框架,最好能够统一同步异步调用的接口,同时具体调用顺序与实现方式无关。那么我们现在就来设计这样一个框架的用例。传递回调我们首先要考虑的一个问题是,如何传递回调入口。在最传统的XHR调用当中,回调函数会被作为最后一个参数传递给异步函数:function asyncOperation(argument, callback)在参数相当多的时候,我们可以把参数放到... 阅读全文
写个 JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
2009-05-06 00:18 by Cat Chen, 5352 阅读, 1 推荐, 收藏, 编辑
摘要:问题在Ajax应用中,调用XMLHttpRequest是很常见的情况。特别是以客户端为中心的Ajax应用,各种需要从服务器端获取数据的操作都通过XHR异步调用完成。然而在单线程的JavaScript编程中,XHR异步调用的代码风格实在是与一般的JavaScript代码格格不入。额外参数考虑一个除法函数,如果它是纯客户端的同步函数,那么签名会是这样的:function divide(operand1... 阅读全文
十分钟内学会:避免用户刷新导致重复POST提交
2009-04-03 11:56 by Cat Chen, 4824 阅读, 0 推荐, 收藏, 编辑
摘要:Question在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交。即使用户成功打开了POST提交目标页,之后他通过链接导航到别处了,再退回到POST提交目标页时仍可能会重复提交页面(例如因为浏览器缓存已失效)。而且,只要碰到重复POST提交的场景,浏览器就会问用户是否确认重做此操作,用户并不一定能正确理解重... 阅读全文