代码改变世界

随笔分类 - Web

如何捕获和分析 JavaScript Error

2014-03-17 05:58 by Cat Chen, 8575 阅读, 收藏, 编辑
摘要:前端工程师都知道 JavaScript 有基本的异常处理能力。我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常。但估计绝大多数前端工程师都没考虑过收集这些异常信息。反正只要 JavaScript 出错后刷新不复现,那用户就可以通过刷新解决问题,浏览器不会崩溃,当没有发生过好了。这种假设在 Single Page App 流行之前还是成立的。现在的 Single Page App 运行一段时间后状态复杂无比,用户可能进行了若干输入操作才来到这里的,说刷新就刷新啊?之前的操作岂不要完全重做?所以我们还是有必要捕获和分析这些异常信息的,然后我们就可以修改代码 阅读全文

HTTP 状态码详解

2012-06-19 09:04 by Cat Chen, 12692 阅读, 收藏, 编辑
摘要:最近看《REST in Practice》,发现 HTTP 如此之多的状态码都有各自的含义,要准确使用并不难,但现实当中很少人能够做得到。大多数人熟悉的状态码就那几个,平时也不会去阅读 RFC 2616,结果反复使用的也就是那几个状态码。其实很多 REST 中可能遇到的情况,在 HTTP 状态码中都已经有考虑到,不需要自己去发明新的状态码,也不需要在 header 或者 body 自定义错误信息。在说状态码之前,首先建议大家还是先阅读一下 RFC 2616 中的相关章节,看看已有的状态码描述都是什么。我相信有部分状态码是你看了描述也不知道用来干什么的,这时候就需要有更具体的例子来告诉你怎么用了 阅读全文

怎么样才算是 RESTful?读 REST in Practice

2012-05-09 22:08 by Cat Chen, 8743 阅读, 收藏, 编辑
摘要:最近 O’Reilly 搞活动,我就半价买了一本《REST in Practice》(Kindle 版链接)。对于 O’Reilly 的书,我通常会对比 O’Reilly 打折后的价钱和 Kindle 版的价格,通常是那家更便宜就在那家买,但图表或代码比较多的我就会坚持买 O’Reilly 的版本,因为 PDF 能够最好地保存这些格式。回到 REST 的话题上。尽管这个概念 2000 年就被提出来了,2007 年成为了一个热词,随后越来越多的服务都宣称自己是 RESTful 的,但是到底真么做才是真正的 REST 我从来没有自习学习过。由于 2007 年的时候 Ruby on Rails 也十 阅读全文

为什么 script 标签不能写成自关闭形式

2011-07-08 13:50 by Cat Chen, 4770 阅读, 收藏, 编辑
摘要:今天早上在 Stack Overflow 看到了这个问题: Why don't self-closing script tags work? 。答案给出的解释是,在 XHTML 的标准里面规定非 EMPTY 标签不能使用自关闭形式。注意这里使用的是全大写的 EMPTY ,所以我不把它翻译为「空白」。那么 EMPTY 到底是什么呢?写过 DTD 的人应该知道它是个关键字,用来指明一个标签的内容必须是空白,而不能包含文本内容或子节点。看看具体的例子就很容易明白了:<!ELEMENT img EMPTY><!ATTLIST img %attrs; src %URI; #RE 阅读全文

在 JavaScript 中监听 IME 键盘输入事件

2011-05-29 22:26 by Cat Chen, 9221 阅读, 收藏, 编辑
摘要:在 JavaScript 中监听用户的键盘输入是很容易的事情,但用户一旦使用了输入法,问题就变得复杂了。输入法应当如何触发键盘事件呢?是每一下击键都触发一次事件,还是选词完毕才触发事件呢?整句输入又该如何触发事件呢?不同的操作系统和不同的浏览器对此有不同的看法。在最糟糕的情况下,用户使用输入法后浏览器就只触发一次 keydown ,之后就没有任何的键盘事件了。这对于 Suggestion 控件的实现来说是个大问题,因为 Suggestion 控件需要监听文本输入框的变化,而事件是最准确也最节省计算资源的做法,如果换成轮询的话性能就可能受到影响。 首先,要监听启用输入法后的击键事件应当使用 ke 阅读全文

John Resig 见面会视频

2010-11-23 00:28 by Cat Chen, 3244 阅读, 收藏, 编辑
摘要:上个星期 John Resig 来到了中国,谋智网络跟 CSDN 组织了一场 John Resig 见面会。 John Resig 在大会上介绍了 jQuery 的两个新特性(暂时还是插件): Data Link 以及 Templates 。引入这两个插件后,前端的数据呈现及交互将变得更简单,开发数据驱动型 Web 应用的成本也会随之而降低,估计将来我们能够见到更多基于 jQuery 的数据交互型... 阅读全文

如何让你的网站支持 IE9 Pinned Site (Part 2 - 实战)

2010-11-17 00:02 by Cat Chen, 2988 阅读, 收藏, 编辑
摘要:该如何展示 IE9 Pinned Site 呢?我可以写一个新的应用,完全是为了展示 Pinned Site 的特性,但这样就像是为了实现这些特性而利用这些特性。所以我想还是升级一个现有的网站好了,这样更能说明 Pinned Site 是如何起到优化用户体验的作用的。我选择了 hack 现在的百度地图。由于 IE9 正式版还没有发布,所以我 hack 的代码暂时也不能发布到线上,只能私下玩玩。在这... 阅读全文

如何让你的网站支持 IE9 Pinned Site (Part 1 - 理论)

2010-11-16 19:19 by Cat Chen, 3473 阅读, 收藏, 编辑
摘要:Windows 7 任务栏有何不同自从 Windows 95 开始,任务栏就一直没什么变化,都是一个个长条表示正在运行的应用程序,直到 Windows 7 。 Windows 7 的任务栏发生了巨大的变化,这个变化其实就是更像 Mac OS X 的 Dock 了。无论是否在运行的应用程序,都可以在任务栏上占一个位置,并且这个位置可以固定下来,让用户可以更方便的操作这个应用程序。从此,任务栏由单向地... 阅读全文

能承载移动 Web 应用的唯一浏览器: Mobile Safari

2010-01-30 14:02 by Cat Chen, 4897 阅读, 收藏, 编辑
摘要:最近拿 iPhone 、 Android 、 Windows Mobile 这三个平台上的内置浏览器来做了一番对比,结果是只有 iPhone 的 Mobile Safari 能够承载现代化的移动 Web 应用,其他移动浏览器的设计思路还停留在上个世纪──能看网页就行,不存在移动应用一说。我用来做对比的平台是 iPhone 2.0 、 Android 2.0 、 Window... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 7 - 多点触击)

2009-11-24 22:33 by Cat Chen, 3317 阅读, 收藏, 编辑
摘要:这个系列的上一篇文章差不多是两年之前的事情了,在这两年里Mobile Safari并非停滞不前,从iPhone 2.0开始Mobile Safari就加入了对多点触击的支持,现在我们就来看一下我们可以利用它来干什么。相信很多人都看过WPF为Surface设备做的一个简单demo,也就是在桌面上显示若干张照片,你可以通过单点触击拖放,也可以通过多点触击缩放和旋转。这在iPhone上能够做到,甚至在M... 阅读全文

十分钟内学会:控制浏览器是否缓存网页状态

2009-10-09 14:59 by Cat Chen, 7238 阅读, 收藏, 编辑
摘要:Question在Firefox等浏览器中,如果你打开一个页面并进行若干操作,例如在文本框进行输入,甚至点击按钮进行Ajax操作更新页面局部,这些操作的结果都会被缓存下来。在你点击链接离开这个页面后,如果你通过后退按钮回到这个页面,你会发现它仍出于你离开时的状态,而非页面刚刚加载好后的初始状态。在一些情况下,这样的缓存方式是符合我们预期的;但在另外一些情况下,我们更希望页面恢复到初始状态,或者说让... 阅读全文

你的网站「被兼容」了吗?

2009-09-17 15:35 by Cat Chen, 4791 阅读, 收藏, 编辑
摘要:一般情况下,我们只会讨论我们的网站如何主动兼容某某浏览器,被动地等待浏览器来兼容我们的网站是不切实际的幻想——哪个浏览器会那么伟大,原意主动为一个不兼容的网站而作出改变呢?IE8就是这样一个伟大的浏览器,Microsoft就是一家这样伟大的企业。故事是这样的,我们有一小段JavaScript依赖于userAgent属性,同样是用IE8进行浏览,在测试环境上userAgent... 阅读全文

jQuery is DSL (Part 2 - jQuery)

2009-08-17 00:01 by Cat Chen, 4395 阅读, 收藏, 编辑
摘要: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, 6364 阅读, 收藏, 编辑
摘要:jQuery刚刚出来的时候,我没有太多关注它,觉得这不过是Yet Another JavaScript Library。早期的jQuery专注于DOM节点的筛选与操作,不提供众多的基础类扩展,更不提供UI组件,因此体积能够做到很小。然而,我实在看不出它和我熟悉的Prototype比有什么明显的优势——jQuery能做的各项独立的操作,Prototype都能做。后来用jQue... 阅读全文

让 JavaScript 轻松支持函数重载 (Part 2 - 实现)

2009-07-02 15:51 by Cat Chen, 4179 阅读, 收藏, 编辑
摘要:在上一篇文章里,我们设计了一套能在JavaScript中描述函数重载的方法,这套方法依赖于一个叫做Overload的静态类,现在我们就来看看如何实现这个静态类。识别文本签名我们先来回顾一下上一篇文章中提到的Overload用例: var extend = Overload .add("*, ...", function(target) { }) .add("Boolean, *, ...", ... 阅读全文

让 JavaScript 轻松支持函数重载 (Part 1 - 设计)

2009-07-02 09:18 by Cat Chen, 7179 阅读, 收藏, 编辑
摘要:JavaScript支持重载吗?JavaScript支持函数重载吗?可以说不支持,也可以说支持。说不支持,是因为JavaScript不能好像其它原生支持函数重载的语言一样,直接写多个同名函数,让编译器来判断某个调用对应的是哪一个重载。说支持,是因为JavaScript函数对参数列表不作任何限制,可以在函数内部模拟对函数重载的支持。实际上,在很多著名的开源库当中,我们都可以看到函数内部模拟重载支持的... 阅读全文

写个 JavaScript 异步调用框架 (Part 6 - 实例 & 模式)

2009-07-01 21:59 by Cat Chen, 3809 阅读, 收藏, 编辑
摘要:我们用了5篇文章来讨论如何编写一个JavaScript异步调用框架(问题 & 场景、用例设计、代码实现、链式调用、链式实现),现在是时候让我们看一下在各种常见开发情景中如何使用它了。封装Ajax设计Async.Operation的最初目的就是解决Ajax调用需要传递callback参数的问题,为此我们先把Ajax请求封装为Async.Operation。我在这里使用的是jQuery,当然无... 阅读全文

写个 JavaScript 异步调用框架 (Part 5 - 链式实现)

2009-06-30 23:36 by Cat Chen, 3738 阅读, 收藏, 编辑
摘要:在上一篇文章里面,我们为异步调用框架设计了一种链式调用方式,来增强异步调用队列的代码可读性,现在我们就来编写实现这部分功能的代码。调用入口链式调用存在Async.go方法和Async.chain方法两个入口,这两个入口本质上是一致的,只是Async.chain方法在调用时先不提供初始参数,而Async.go方法在调用时提供了初始参数并启动异步调用链。Async.chain = function()... 阅读全文

写个 JavaScript 异步调用框架 (Part 4 - 链式调用)

2009-05-09 23:46 by Cat Chen, 3386 阅读, 收藏, 编辑
摘要:我们已经实现了一个简单的异步调用框架,然而还有一些美中不足,那就是顺序执行的异步函数需要用嵌套的方式来声明。现实开发中,要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子,我们先要异步获取联系人列表,然后再异步获取每一个联系人的具体信息,而且后者是分页获取的,每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。为此,我们需要设计一种新的操... 阅读全文

写个 JavaScript 异步调用框架 (Part 3 - 代码实现)

2009-05-07 14:54 by Cat Chen, 3401 阅读, 收藏, 编辑
摘要:在上一篇文章里,我们说到了要实现一个Async.Operation类,通过addCallback方法传递回调函数,并且通过yield方法返回回调结果。现在我们就来实现这个类吧。类结构首先我们来搭一个架子,把需要用到的似有变量都列出来。我们需要一个数组,来保存回调函数列表;需要一个标志位,来表示异步操作是否已完成;还可以学IAsyncResult,加一个state,允许异步操作的实现者对外暴露自定义... 阅读全文

写个 JavaScript 异步调用框架 (Part 2 - 用例设计)

2009-05-07 01:12 by Cat Chen, 3890 阅读, 收藏, 编辑
摘要:在上一篇文章里说到,我们要设计一个异步调用框架,最好能够统一同步异步调用的接口,同时具体调用顺序与实现方式无关。那么我们现在就来设计这样一个框架的用例。传递回调我们首先要考虑的一个问题是,如何传递回调入口。在最传统的XHR调用当中,回调函数会被作为最后一个参数传递给异步函数:function asyncOperation(argument, callback)在参数相当多的时候,我们可以把参数放到... 阅读全文

写个 JavaScript 异步调用框架 (Part 1 - 问题 & 场景)

2009-05-06 00:18 by Cat Chen, 5147 阅读, 收藏, 编辑
摘要:问题在Ajax应用中,调用XMLHttpRequest是很常见的情况。特别是以客户端为中心的Ajax应用,各种需要从服务器端获取数据的操作都通过XHR异步调用完成。然而在单线程的JavaScript编程中,XHR异步调用的代码风格实在是与一般的JavaScript代码格格不入。额外参数考虑一个除法函数,如果它是纯客户端的同步函数,那么签名会是这样的:function divide(operand1... 阅读全文

十分钟内学会:避免用户刷新导致重复POST提交

2009-04-03 11:56 by Cat Chen, 4219 阅读, 收藏, 编辑
摘要:Question在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交。即使用户成功打开了POST提交目标页,之后他通过链接导航到别处了,再退回到POST提交目标页时仍可能会重复提交页面(例如因为浏览器缓存已失效)。而且,只要碰到重复POST提交的场景,浏览器就会问用户是否确认重做此操作,用户并不一定能正确理解重... 阅读全文

ASP.NET AJAX 4.0 Preview 3 (Part 2 - ASP.NET AJAX Template)

2009-03-14 10:43 by Cat Chen, 4602 阅读, 收藏, 编辑
摘要:在上一篇文章里,我们说到了如何使用ADO.NET Data Service Client Library能够轻松访问到存在服务器端的数据,然而将数据展现出来仍需要人手拼接HTML这点就实在是让人难以接受,所以我们现在就来看看如何利用ASP.NET AJAX Template解决这个问题。文章中所用到的示例代码,可以在这里下载:ASP.NET AJAX 4.0 Preview 3 Demo,然后参考... 阅读全文

ASP.NET AJAX 4.0 Preview 3 (Part 1 - ADO.NET Data Service Client Library)

2009-03-11 00:18 by Cat Chen, 4007 阅读, 收藏, 编辑
摘要:自从Microsoft与jQuery合作以来,ASP.NET AJAX与jQuery就被定位为两个互补的AJAX库。既然jQuery已经实现了如此多轻量级的AJAX特性,自然ASP.NET AJAX会继续专注于富客户端所需的一些重量级特性。 在ASP.NET AJAX 4.0 Preview 3里面,开发人员能够接触到的两个重要的新特性就是ADO.NET Data Service Client L... 阅读全文

《Introducing Microsoft Silverlight 2》书评

2008-11-23 21:54 by Cat Chen, 2497 阅读, 收藏, 编辑
摘要:和上次的《Microsoft SQL Server 2005: 数据库基础由入门到精通》书评一样,同样是MVP的书评活动。 这本书适合什么人看?适合好像我这样的,对Silverlight 2感兴趣但是又不知道从何入手的人。整本书非常完整地覆盖到Silverlight每一个技术细节,当然这是Microsoft Press的习惯做法了。如果你想用Silverlight 2来做点什么,却发现开发过程中困... 阅读全文

以服务器端为中心的 ASP.NET AJAX 模式 (Part 2 - Control)

2008-10-30 00:50 by Cat Chen, 4703 阅读, 收藏, 编辑
摘要:在上一篇文章当中,也就是《以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 - Behavior)》,我们探讨了较为易用的Behavior模式。之所以说它较为易用,是因为它不涉及和原有Page处理流程的交互,即使访问网络也是访问独立的Web Service(包括Page上的[WebMethod]),因此和Page处理流程的设计绝对是正交的。但有时候我们需要的就是与Page处理流程... 阅读全文

以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 - Behavior)

2008-10-26 20:33 by Cat Chen, 4497 阅读, 收藏, 编辑
摘要:早在ASP.NET AJAX从CTP转向Beta再转向RTM时,看着客户端的Control被逐步放弃,与此同时ASP.NET AJAX Control Toolkit越来越多地使用Behavior,我就想深入说说ASP.NET AJAX的模式。不过由于我比较懒,所以这个话题只在《理想的 ASP.NET AJAX (Part 2 - Server Centric)》中一笔带过,没有深入讨论。今天看到... 阅读全文

如何动态加载 JavaScript 与 CSS

2008-09-02 23:01 by Cat Chen, 10049 阅读, 收藏, 编辑
摘要:Omar AL Zabir这位MVP总是喜欢搞些稀奇古怪同时又很实用的小东西,并且还十分值得参考。最近他就做了一个叫做ensure的小工具用于动态加载JavaScript、CSS与HTML,而且IE、Firefox、Opera、Safari都支持了,那么我们就来看看ensure是如何做到动态加载JavaScript与CSS的。在介绍ensure内部的实现之前,让我们先来看看其功能:ensure({... 阅读全文

救救 Web Developers ,拒绝 IE6 !

2008-04-06 16:41 by Cat Chen, 6190 阅读, 收藏, 编辑
摘要:这是最近的一场于web developers相关的campaign,官方站点是SaveTheDevelopes.org。在上面你可以下载一段脚本和对应的图片,放到你自己的网站上,然后只要有用户使用IE6访问你的网站,他就会看到一个小小的提示框,建议他升级到IE7或选用其它非IE浏览器。当然,你也可以直接引用SaveTheDevelopers.org上面的脚本文件,但大家都知道潜在的风险,因此最好不... 阅读全文

讲座资源:Silverlight 2.0

2008-03-31 12:17 by Cat Chen, 3184 阅读, 收藏, 编辑
摘要:这是2008年3月30日微软广州.NET俱乐部活动上Silverlight 2.0这一部分讲座的资源,包括了pptx以及演示网站(演示网站中的SilverlightDemoHost项目需要部署为http://localhost/SilverlightDemo/)。在这次的讲座上,讲的主要是Silverlight 2.0的新特性,而上次Silverlight 1.0所讲过的内容没有再次重复。不过在问... 阅读全文

深入理解 ASP.NET 动态控件 (Part 6 - 模板控件)

2008-03-26 00:39 by Cat Chen, 7455 阅读, 收藏, 编辑
摘要:在之前的文章中,我极力推荐大家使用Repeater和MultiView这类TemplateControl,为什么呢?因为只有这样做,才算是符合MVP或MVC模式。(到底是MVP还是MVC,这视乎你选用什么呈现引擎了。)虽然我们要动态创建控件,但实际上这部分控件仍然属于View的部分,我们应该尽量采用ASPX的声明性名义来描述这些控件,避免用C#代码来创建控件、设置属性并添加为子控件。就拿最简单的例... 阅读全文

深入理解 ASP.NET 动态控件 (Part 5 - 编译实验)

2008-03-24 12:04 by Cat Chen, 6552 阅读, 收藏, 编辑
摘要:这次的文章是一个小小的动手实验,你需要准备好Visual Studio 2005或者Visual Studio 2008,以及最新版本的Reflector。通过这次的实验,你将对ASPX与C#代码如何合并编译为一个dll代码有所理解。在实验开始之前,首先来一个小问题:如果不允许你使用ASPX,要你完全使用C#代码写一个具备复杂控件树的页面你会怎么写?把声明控件的代码都放在Page_Load里面吗?... 阅读全文

使用 .NET 实现 Ajax 长连接 (Part 2 - Mutex Wait & Signal)

2008-03-08 17:21 by Cat Chen, 8686 阅读, 收藏, 编辑
摘要:在上一次的文章中,我们说到了如何设计一个ASP.NET Web Service来处理长连接请求。很多人对此就提出了问题,如何hold住请求让它30秒不断开了?这其实很简单,只需要Sleep()一下就可以了:Thread.Sleep(30 * 1000);然而问题是,我们不是要等30秒然后看看是否有事件需要返回,而是在这30秒内随时有事件随时返回。因此,我们需要一套机制来在等待的过程中检查是否有事件... 阅读全文

使用 .NET 实现 Ajax 长连接 (Part 1 - Comet Web Service)

2008-02-26 17:49 by Cat Chen, 14502 阅读, 收藏, 编辑
摘要:Ajax的长连接,或者有些人所说的Comet,就是指以XMLHttpRequest的方式连接服务器,连接后服务器并非即时写入相应并返回。服务器会保持连接并等待一个需要通知客户端的事件,该事件发生后马上将数据写入响应,这时候客户端就以相当“实时”的方式接收到事件通知。具体的通信模型,请参考这篇文章:《Comet:基于 HTTP 长连接的“服务器推”技术... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 6 - iUI)

2008-01-07 21:01 by Cat Chen, 4473 阅读, 收藏, 编辑
摘要:iUI是一个针对iPhone Safari的Web开发框架,由Joe Hewitt开发。这位Joe Hewitt曾经参与过Firefox的开发,包括其中的DOM Inspector以及Firebug,后来到了Facebook,为Facebook开发了iPhone专用版本,对iPhone Web开发社区算是作出了巨大贡献。样式我们继续说iUI这个框架。这个框架所做的事情,就是提供iPhone Fri... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 5 - 交互入门)

2007-12-29 13:41 by Cat Chen, 3523 阅读, 收藏, 编辑
摘要:我们已经研究过XHTML和CSS了,现在开始看看最后一部分,也就是JavaScript,以及它所提供的交互能力。无AJAX交互第一种我们要看的交互,是完全不使用JavaScript,这其中一个例子就是GMail。GMail的iPhone版其实就是由普通的GMail移动版修改过来的,界面上更贴近桌面版GMail了,然而交互性并没有怎么提高,每一个点击都对应一次刷新,没有任何AJAX可言。事实上,不用... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 4 - CSS)

2007-12-27 14:54 by Cat Chen, 3540 阅读, 收藏, 编辑
摘要:说到编写CSS,大家的第一反应肯定是——有没有选择性CSS。有!我们可以设计一个CSS,使得只有iPhone上的Safari会采用它,其他浏览器都会无视它,这样我们就可能可以复用现有的XHTML页面代码,仅仅为它们引入新的CSS就能够适用于iPhone,无须重新编写页面。这个选择性CSS链接语句如下:<link media="only screen and (max-device-width... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 3 - XHTML)

2007-12-27 13:11 by Cat Chen, 3328 阅读, 收藏, 编辑
摘要:在接下来的两篇文章中,我们将探讨iPhone上的Safari所支持的XHTML与CSS,之后才进入JavaScript的讨论。作为一款现代化的浏览器,Safari当然是基于标准的,那就让我们看看Safari支持哪些标准吧: HTML 4.01 XHTML 1.0 CSS 2.1 以及部分 CSS 3 JavaScript (ES3) DOM (Level 2) AJAX (XMLHtt... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 2 - Viewport)

2007-12-26 17:48 by Cat Chen, 4164 阅读, 收藏, 编辑
摘要:在了解到iPhone的一些常见布局法后,我们就可以开始着手编写一个真正能在iPhone上跑的页面了。小声说一句,之前我说要布局讨论完了,要进入交互逻辑开发,后来细心一想发现不行,有些东西不讲的话将会对布局带来问题,绕过去的话并不怎么优雅,因此继续讲布局。首先要说的就是viewport,也就是可视区域。对于桌面浏览器,我们都很清楚viewport是什么,就是出去了所有工具栏、状态栏、滚动条等等之后用... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 1 - 布局入门)

2007-12-25 21:47 by Cat Chen, 4377 阅读, 收藏, 编辑
摘要:用过iPhone的朋友应该知道,iPhone上面的一些应用程序是能够随机器转动自动适应的,也就是说竖着拿的时候就竖着显示,横着拿的话就横着显示,iPhone中至关重要的Safari浏览器当然也支持这一点了,因此我们考虑设计iPhone friendly的应用程序时,首先要考虑兼容这种情况,不能把页面定死在一个宽度上。且慢,我们不是说设计自己的应用程序吗?这和内置的Safari有何关系?iPhone... 阅读全文

使用 fluid layout 时记得设置 min-width

2007-12-21 15:35 by Cat Chen, 1606 阅读, 收藏, 编辑
摘要:希望aw不介意我拿他的blog来做例子,因为第一次想到这个问题是我在手机上看aw的blog时碰到的。我的手机屏幕小,然而Opera Mini运行在完整视图时会以贴近Opera PC的形式处理CSS,因此fluid layout的多个列不会自顶向下顺序显示,而会保持原来并排的布局,同时因为fluid layout没有强制width,因此Opera Mini就会使用手机浏览器的宽度来显示整个页面,可想... 阅读全文

从 Adobe SHARE 说到 Silverlight 的 XPS 支持

2007-11-21 09:34 by Cat Chen, 4293 阅读, 收藏, 编辑
摘要:在很久很久以前,我们仅仅知道Flash能够做一些JavaScript做不到或者做不好的交互,特别是复杂度高的交互,除此之外也没有什么理由使用Flash了。后来Flash加上了视频支持,却一直不受重视。然而突然有一天YouTube就出现了,人们才发现这项支持的真正价值,并且纷纷效仿。再后来,Flash还加入了对PDF文档的支持,这项技术最近已经被Adobe成功利用于开发Web2.0站点了,那就是Ad... 阅读全文

Silverlight 与 WPF 的一些差异

2007-11-19 22:46 by Cat Chen, 6091 阅读, 收藏, 编辑
摘要:首先,这两者使用的namespace是不同的,不要以为都是<Canvas />作为根元素那就是同一个类,其实从XML语义的角度来说不同namespace的同名节点代表着不同类别的实体。Silverlight的默认namespace是http://schemas.microsoft.com/client/2007,而WPF的默认namespace则是http://schemas.micr... 阅读全文

讲座资源:Silverlight In Action

2007-11-17 22:26 by Cat Chen, 3062 阅读, 收藏, 编辑
摘要:这是2007年11月17日广州.NET俱乐部活动中Silverlight In Action这一部分的讲座资,其中包括了pptx以及Clock与MediaPlayer两个sample。需要注意的是,为了减少体积,第二个sample里面的SampleVideo.wmv被删除了,如果要让它正常运行起来,你必须手动添加一个SampleVideo.wmv到项目根目录里面去。 对于Silverlight感兴... 阅读全文

不要动态修改 DOM 里面的 id 属性

2007-10-10 15:25 by Cat Chen, 1612 阅读, 收藏, 编辑
摘要:我不知道是否有什么标准规定不允许修改id属性,或者不建议修改id属性,总之IE对此支持不佳。在IE当中,修改id属性对将来的DOM操作没什么不符合标准的影响,你仍然可以通过document.getElementById()找到该元素,然后在CSS支持上就有问题了,id修改后并不会自动去重新匹配CSS规则,因此id修改后不会体现出应有的样式。 因此,进行DOM编程时应该避免修改id属性,如果需要动态... 阅读全文

深入理解 ASP.NET 动态控件 (Part 4 - 解决问题)

2007-09-11 07:01 by Cat Chen, 7309 阅读, 收藏, 编辑
摘要:前言 在开始写这个系列的文章之时,我想着必须深入介绍背后的原理,然后将所有需要的背景知识呈现到读者眼前,不过我现在发觉这并不是好的写作方法,要写下去对我自己来说难度也不少。最近受到Infinities Loop发布TRULY Understanding Dynamic Controls (Part 4)的刺激,我决定继续写这个系列的文章,并且领悟到了更多读者需要的是对问题的一种较为易于理解的解释,... 阅读全文

ASP.NET 3.5 的 ListView 控件与 CSS Friendly

2007-08-22 08:57 by Cat Chen, 5000 阅读, 收藏, 编辑
摘要:之前在写CSS有关文章的时候,我就想写写如何使用ASP.NET控件能够更加CSS Friendly,更容易实现一些常见的页面布局pattern,然而之后就发现这并非那么容易的。说起来要让ASP.NET控简变得CSS Friendly很容易,直接使用ASP.NET 2.0 CSS Friendly Control Adapters就是了,然而事实并非如此简单。 CSS Friendly Contro... 阅读全文

讲座资源:ASP.NET AJAX 体验

2007-08-21 16:49 by Cat Chen, 2190 阅读, 收藏, 编辑
摘要:这是2007年8月18日广州.NET俱乐部活动中ASP.NET AJAX体验这一部分的讲座资源,其中包括了pptx文件以及所有的sample。sample中包括8个UpdatePanel sample、4个UpdateProgress sample、1个Timer sample、2个ScriptManager sample以及1个client script sample。ASP.NET AJAX ... 阅读全文

理想的 ASP.NET AJAX (Part 2 - Server Centric)

2007-07-31 23:32 by Cat Chen, 4132 阅读, 收藏, 编辑
摘要:使用ASP.NET的话……ASP.NET的最大优势就是组件化,在UI上更明确地说就是控件化,但这却为AJAX带来了不少问题。首要问题是输出HTML不由我们控制。复杂的GridView不说,我们就来看简单的CheckBox,在你不对它设置任何样式属性和文本时,它是一个单纯的<input />,加上文本的话文本会被放在<label />中以便点击文本与点... 阅读全文

理想的 ASP.NET AJAX (Part 1 - Client Centric)

2007-07-30 22:42 by Cat Chen, 4904 阅读, 收藏, 编辑
摘要:怎样的AJAX才算是理想? 要说什么是理想的ASP.NET AJAX,就要先说说什么是理想的AJAX。事实上AJAX最不理想的地方在于search engine friendly以及bookmarkable,这两个问题有一定的相似性,要解决并不难,只是每一个系统中实现起来都不一样,因此难以提出一个统一的patterns来解决。 首先说说search engine friendly这一点吧,实际上使... 阅读全文

英语阅读推荐:使用样式显示图片 & .NET中的颜色操作

2007-07-03 21:11 by Cat Chen, 3768 阅读, 收藏, 编辑
摘要:本期Random Clippings栏目还是如同往常一样推荐两篇文章。简单的一篇讲述的是如何使用样式取代元素来实现图片的显示,对于熟练的Web Developer来说这是个非常入门级的话题,然而可能还有不少Win Forms转到Web Forms的开发人员是不了解的,因此我们一起来看看如何使用样式来显示图片吧。较难的一篇讲述的是颜色的操作,其实更多的是计算机系统处理颜色的一些模型,例如RGB、CM... 阅读全文

从 Dynamic Data Control 回归普通的 Data Control

2007-06-19 09:13 by Cat Chen, 1858 阅读, 收藏, 编辑
摘要:我尝试在自己的软件工程项目中使用DDC,希望它能带来一些比较敏捷的特性,虽然在那么正统的软件工程课程上搞敏捷貌似有些不妥,不过其实也没有几个小组是完全按照流程来做的,反正最终所有文档齐全了演示也能让老师觉得效果不错那就行了。事实上很多小组都是随便分析一下就开始写代码,东西做出来了再补文档,哈哈……新建了一个ASP.NET Futures的网站后,我先尝试使用DynamicD... 阅读全文

慎用 XHTML 标签的自关闭写法

2007-06-14 08:15 by Cat Chen, 5500 阅读, 收藏, 编辑
摘要:我们都知道XHTML里面的img标记应该这样写:<img alt="" src="" />,这种写法也就是所谓的自关闭,在XML中是完全合法的写法。如果你熟悉XML相关的开发,可能也就习惯于这种写法,想着XML中任何不含子节点的元素都可以这样写,那么XHTML中没有内容的标签也都可以这样写。XHTML中理论上当然允许任何标签以自关闭的方法来书写,然而浏览器兼容性却带来了新问题,那就是I... 阅读全文

探索 ASP.NET Futures (Part 3 - Client Diagnostics)

2007-06-12 15:57 by Cat Chen, 3866 阅读, 收藏, 编辑
摘要:貌似ASP.NET 2.0新增的诊断相关服务没多少人关注,更没多少人用,不过对于正在使用此类服务分析站点的人来说,肯定非常期望ASP.NET AJAX中的客户端代码错误也能记录到诊断日志中,这样就能获取更丰富的数据来分析站点不稳定因素的来源。ASP.NET Futures中已经引入了客户端诊断服务,在解释此服务之前不妨先思考一下假如你要自己写一个客户端诊断服务会怎么做。如果我来写一个客户端诊断服务... 阅读全文

探索 ASP.NET Futures (Part 2 - Search Enabled)

2007-06-11 21:40 by Cat Chen, 4005 阅读, 收藏, 编辑
摘要:在本系列的上一篇文章中,我们探索了ASP.NET Futures (May CTP)的SearchSiteMap功能,说明了如何将ASP.NET的SiteMap影射为符合Sitemaps协议的XML以便搜索引擎更好的抓取我们的站点。然而让搜索引擎更好的抓取我们的站点了,这部分的优化却仅仅对来自于搜索引擎的访客有用,这是否有点浪费?我们是否可以选择站内的搜索也通过Internet搜索引擎(例如Goo... 阅读全文

探索 ASP.NET Futures (Part 1 - Search & Sitemaps)

2007-05-29 00:10 by Cat Chen, 4366 阅读, 收藏, 编辑
摘要:如果你在使用ASP.NET站点,同时又希望它Search Engine Friendly一些,很可能你就希望它有一个Sitemaps。在这里我们说的不是ASP.NET的SiteMap,而是Sitemaps.org定义的基于XML的Sitemaps协议,注意这两个名字的大小写以及单复数,之后我都会这样区分它们。Sitemaps协议有点类似RSS或者Atom,只不过它描述的不是最近的内容更新,而是整个... 阅读全文

Cat2 模板系列开始预览啦!

2007-05-17 18:38 by Cat Chen, 5089 阅读, 收藏, 编辑
摘要:什么是Cat2?Cat2 = Cat * Cat,两位Cat合作的意思,也就是我Cat Chen和猫窝的猫影组成的小团队。什么是Cat2模板?这是一个XHTML+CSS+JavaScript的模板系列,暂时只包括blog模板,并且优先提供Blogger与WordPress立即可用的模板,同时也会考虑为其他常见的blog平台(例如DotText)提供立即可用的模板。如何获取Cat2模板?我们的模板存... 阅读全文

根本不存在 DIV + CSS 布局这回事

2007-04-09 22:29 by Cat Chen, 48435 阅读, 收藏, 编辑
摘要:在《欲练 CSS ,必先宫 IE》和《你有 <table /> 强迫症吗?》这两篇文章中,看到有不少评论用到div+CSS布局这个说法,用来和table布局比较。实际上div不是用来布局的,div只是用来表示一个其它元素都无法准确表达语意的一个块区,只有CSS是用于布局的,所以根本就不存在div+CSS布局这回事。反过来,table布局的时候经常依赖于CSS定义一个单元格的布局属性,所... 阅读全文

Adobe Apollo vs Joyeur Slingshot

2007-03-24 21:20 by Cat Chen, 5397 阅读, 收藏, 编辑
摘要:如果觉得这世界上有Microsoft WPF/E vs Adobe Apollo还不够刺激的话,那么我们可以看看刚刚加入这竞技场的一位新选手:Joyeur Slingshot。Joyeur Slingshot是谁?我想你应该看看它背后那个阵营标记,没错,就是Rails这5个字母! Slingshot有什么明显的好处吗?使用Microsoft WPF/E和Adobe Apollo都要将思维模式由B/... 阅读全文

十分钟内学会:自动识别GB2312与UTF-8编码的文件

2007-03-22 14:08 by Cat Chen, 6049 阅读, 收藏, 编辑
摘要:Question在简体中文系统中,我们有时候需要打开一个保存在磁盘上的纯文本文件,例如txt,但却不知道其保存编码,该怎么办呢?如果文本只需要在Windows上显示,那就很幸运了,因为无论是GB2312还是UTF-8编码的string都能够正确显示。但如果需要输出到ASP.NET页面上就不是那么简单了,因为如果页面编码为UTF-8但纯文本文件导入的string是GB2312,那就会导致乱码,反之亦... 阅读全文

你有 <table /> 强迫症吗?

2007-03-19 00:04 by Cat Chen, 11828 阅读, 收藏, 编辑
摘要:上次讲到&#8220;欲练 CSS ,必先宫 IE&#8221;,如果你宫了IE然而还是觉得不得要领,那就该怀疑自己是不是有传说中的table强迫症了。在CSDN社区上,时不时能够看到一些页面整体布局的问题,要求用div做一些table才能做到的,否则就以此为把柄说XHTML+CSS布局方法不好。其实,首先要做的是改变思维,以适应XHTML+CSS的布局。面向页面设计而非面向浏览器设计XHTML+... 阅读全文

英语阅读推荐:在AJAX中制作自定义验证服务 & 优秀网站的5个因素

2007-03-16 20:08 by Cat Chen, 5180 阅读, 收藏, 编辑
摘要:新一期的Random Clippings又来了,这次介绍的两篇文章都很容易读,单词不会太难,语法也简单。在AJAX中制作自定义验证服务 (Building a custom authentication service in AJAX)在这篇文章中我们将学会如何制作一个自定义的验证服务,用于ASP.NET AJAX。为什么需要制作自定义的验证服务呢,ASP.NET AJAX不是内置一个了吗?因为那... 阅读全文

学习 Ruby on Rails 真的很爽!

2007-02-24 10:42 by Cat Chen, 4466 阅读, 收藏, 编辑
摘要:最近开始看《Agile Web Development with Rails 2nd Edition》,发觉感觉真的非常爽。虽然至今连Ruby语法都没完全懂,懂了的也没记住多少,但在看书过程中你会乐意模仿书中所有的例子,一个一个完成看看结果是怎样的,观察这个神奇的框架如何将你所书写的一点点代码转变为使用ASP.NET要不少代码才能实现的功能。我不知道它是怎么实现的,但暂时我还不觉得我有必要知道它是... 阅读全文

欲练 CSS ,必先宫 IE

2007-02-18 02:58 by Cat Chen, 19537 阅读, 收藏, 编辑
摘要:&#8220;Win国天下,欲练CSS之人不在少数,大多不得要领,又或是走火入魔,全为IE所累。故曰:欲练CSS,必先功IE。&#8221;曾经,我也属于为IE所累的行列,如今见到很多人仍然不愿意对自己的宝贝IE下手,所以决定特异写篇文章说说此事,以明辨IE到底是宝贝还是累赘。好了,funny部分结束,按回我的习惯直入正题。之所以说IE不好,是因为IE会误导了你对CSS模型的理解,让你以为IE的理... 阅读全文

IIS7 会重用那些不该重用 HttpHandler

2007-02-12 23:31 by Cat Chen, 9838 阅读, 收藏, 编辑
摘要:首先,实现IHttpHandler时要实现一个IsReusable的属性,这个属性告诉ASP.NET此HttpHandler是否可重用。如果一个HttpHandler是可重用的,那么多次请求都有可能用同一个HttpHandler实例;而如果一个HttpHandler是不可重用的,那么ASP.NET应该确保每次请求使用的都是一个新构造的HttpHandler实例。Page是设计为不可重用,所以每次请... 阅读全文

英语阅读推荐:你真的懂UPDATE语句吗 & 当有layout之时

2007-02-08 22:44 by Cat Chen, 5386 阅读, 收藏, 编辑
摘要:Random Clippings栏目已经有一段时间没有更新了,主要是因为一直没能挑选到适合的文章推荐(有可能是因为这段时间我读英文文章少了,哈哈),这次一定要好好补上,推荐两篇好文章给大家。你真的懂UPDATE语句吗 (Think you know how to write UPDATE statement? Think again.)怎么又是Omar Al Zabir?别急别急,这家伙写的文章够... 阅读全文

十分钟内学会:将HTML格式化为合法的XML

2007-02-07 12:14 by Cat Chen, 8882 阅读, 收藏, 编辑
摘要:Question在网站中需要引入来自外部的HTML,这是很正常的事情。例如允许用户采用HTML直接发表时,或者聚合外部的Feed时,这时候外部的HTML就直接嵌入到我们的代码中。如果我们的网站是设计为符合XHTML的,那就可能因为引入外部HTML而破坏掉XHTML的合法性,甚至连合法的XML都做不到。这时候我们就需要将外部的HTML格式化为合法的XML,以方便我们的处理。Answer要将HTML转... 阅读全文

Microsoft AJAX Library + ADODB = ?

2007-02-05 23:30 by Cat Chen, 6172 阅读, 收藏, 编辑
摘要:最近做了一个基于Web的纯桌面端数据库应用,非常轻量级的,在挑选库的时候最后还是选择了自己熟悉的Microsoft AJAX Library,而没有使用prototype、dojo、YUI之类的。一方面,是因为Microsoft AJAX Library比较贴近我熟悉的控件模型,另一方面要做的东西真的轻量级得只需要普通的控件,不需要拖放和效果,不需要封装新控件或widget。过程整个制作流程大概是... 阅读全文

ASP.NET 无法确保在注册的 JavaScript 内不存在重复定义

2007-01-28 00:13 by Cat Chen, 6682 阅读, 收藏, 编辑
摘要:在ASP.NET 2.0中,我们使用Page.ClientScript属性(也就是一个ClientScriptManager对象)的一些名字以Register开头的方法注册客户端脚本,这是大家都知道的。理论上应该如何避免冲突先说说为什么要这样注册脚本,而不用Response.Write直接输出。举个例子,你用3个DropDownList做了一个输入日期的区域,分别代表年/月/日,然后你为了防止用户... 阅读全文

英语阅读推荐:使用AJAX+WF+LINQ制作Google IG式首页

2007-01-16 01:28 by Cat Chen, 8156 阅读, 收藏, 编辑
摘要:如果你既想学习ASP.NET AJAX,又想学习Windows Workflow Foundation,还想学习LINQ(包括DLinq和XLinq),能够一次过满足你三个愿望的除了Kinder出奇蛋就是本期Random Clipping重点推荐的这篇文章了。Build Google IG like Ajax Start Page in 7 days using ASP.NET Ajax and ... 阅读全文

英语阅读推荐:基于AJAX的ASP.NET聊天室 & 如何建立共识

2007-01-03 22:41 by Cat Chen, 9653 阅读, 收藏, 编辑
摘要:&#160;基于AJAX的ASP.NET聊天室 (Building an AJAX based chat room in ASP.NET)这是一篇从技术角度来说非常入门级的文章,别看到标题又是AJAX又是chat room,就以为用到了Atlas和HttpHandler之类复杂的东西,实际上它仅仅使用了XMLHttpRequest和Page。这就降低了读者所需要跨越的技术门槛,即使你平常只是使用P... 阅读全文

十分钟内学会:根据数据库生成站点导航

2006-12-29 22:28 by Cat Chen, 7624 阅读, 收藏, 编辑
摘要:Question上次的《十分钟内学会:存储在二维表的树结构如何进行指定深度节点的查询》提到用树结构表示无限分级的商品分类或论坛板块,也就是说这种树结构常常用于存储与导航相关的信息,该如何让网站导航自动按照数据库中存储的树结构自动生成呢?Answer继承自SiteMapProvider要实现站点导航,在ASP.NET 2.0中最方便的就是SiteMap功能了。如果仅仅使用XmlSiteMapProv... 阅读全文

英语阅读推荐:美化文件上传框 & 无刷新文件上传

2006-12-23 01:09 by Cat Chen, 9535 阅读, 收藏, 编辑
摘要:相信很多使用过GMail的读者都会觉得它的文件上传功能作得好,首先它支持无刷新上传,其次它能够隐去丑陋的文件上传框。本期的Random Clipping重点推荐两篇与上传有关的英语技术文章,希望对大家制作一个GMail那样的上传界面有所帮助。美化文件上传框 (Styling an input type="file")"Of all form fields, the file upload fiel... 阅读全文

Microsoft WPF/E vs Adobe Apollo

2006-12-17 18:53 by Cat Chen, 6645 阅读, 收藏, 编辑
摘要:整个.NET社区都在庆祝WPF/E开始CTP,且慢,看看河对面的Flash社区好像也在举行隆重的庆典哦。AVM2开放源代码这几个星期发生在Flash社区的震撼事件,包括Adobe将ActionScript Virtual Machine 2(AVM2)的核心源代码捐献给Mozilla组织,变成了一个叫做Tamarin的开源项目。Tamarin的目标是实现一个高效的ECMAScript 4th ed... 阅读全文

十分钟内学会:让你的博客文章也有机会成上Digg头版

2006-12-16 22:42 by Cat Chen, 4993 阅读, 收藏, 编辑
摘要:是否非常羡慕别人的文章有机会冲上Digg头版,接着带来大量的访客呢?是否也希望自己的文章也能受到链接的宠爱,从而获得更高的PageRank呢?好,跟我来,让我帮你把文章接入到Social Software中。 首先,你知道Social Software是什么吗?从广义上来说,就是能够让人们联系或聚集到一起的软件,老式的邮件列表或者新闻组也算是,然而通常我们用它指现代的blog和wiki平台。我们正... 阅读全文

英语阅读推荐:海明威写作技巧 & UpdatePanel为何失灵

2006-12-15 01:25 by Cat Chen, 4307 阅读, 收藏, 编辑
摘要:Random Clippings作为一个英语阅读推荐栏目,目标是让大家多读好文章,从而提高自己的英语阅读水平,不过却不一定要限制在英文技术文章内吧,所以我这次尝试推荐点别的东西。海明威写作技巧 (Ernest Hemingway&#8217;s Top 5 Tips for Writing Well)这篇文章来自copyblogger,这是一个有趣的博客,它的理念是好像写广告文案(copywrit... 阅读全文

十分钟内学会:无刷新的页面间导航

2006-12-10 14:18 by Cat Chen, 7036 阅读, 收藏, 编辑
摘要:Question 通过ASP.NET AJAX,我们能够实现页面内无刷新的异步回送。然而我们不可能将功能都放在一个页面里,这样设计非常不方便,动态加载控件的逻辑也复杂,所以还是要在多个页面间导航。可以让这种页面间的导航也无刷新吗? Answer 要页面间导航当然要刷新,这是无法避免的,但我们总不能把原本属于多个页面的逻辑塞在一个页面里吧,所以要想个办法把这些逻辑分开来。这里用到一个小技巧,就是使用... 阅读全文

深入理解 ASP.NET 与客户端缓存 (Part 2 - ASP.NET 支持)

2006-12-07 02:09 by Cat Chen, 6903 阅读, 收藏, 编辑
摘要:在上一篇中,我们知道了HTTP属性与客户端缓存的关系,现在就可以着手用ASP.NET来控制这种缓存。需要注意的是,ASP.NET的Cache是用于服务器端缓存的,所以和我们正在讨论的事情完全无关,我们在这里要讨论的是如何通过HTTP属性控制客户端缓存。页面缓存在ASP.NET中,如果你需要添加HTTP属性,可以使用HttpResponse.AppendHeader方法,例如在Page的代码中直接执... 阅读全文

深入理解 ASP.NET 与客户端缓存 (Part 1 - HTTP 协议)

2006-12-06 21:45 by Cat Chen, 5556 阅读, 收藏, 编辑
摘要:前言这个系列的文章要讨论的是如何通过ASP.NET服务器端技术来优化客户端缓存策略,而且让这种策略变得可配置和可扩展。我们要了解的知识从HTTP协议中相关属性对客户端缓存的影响,到ASP.NET如何控制这些属性来实现我们的缓存策略。HTTP基础知识由于讨论涉及到客户端缓存,所以还是先要简单介绍一下HTTP协议是如何控制客户端缓存的,这里涉及到HTTP头的Last-Modified、ETag等属性。... 阅读全文

对博客园 URL 的一些调整建议

2006-12-04 00:19 by Cat Chen, 3817 阅读, 收藏, 编辑
摘要:在博客园里,每一个人的文章都有两个URL,一个是以username.cnblogs.com开头的,另一个是以cnblogs.com/username开头的(前面是否有www都可以)。默认的文章链接都是指向以后者开头的地址,而个人首页则指向username.cnblogs.com,这其实对用户的博客优化造成了很大的障碍。 搜索引擎友善 不知道什么时候开始,搜索引擎优化(SEO)成了绝对的贬义词,大概... 阅读全文

AJAX 在中文社区的“集体信仰动摇”?!

2006-12-03 16:37 by Cat Chen, 4128 阅读, 收藏, 编辑
摘要:最近好像在中文社区又多了关于AJAX的讨论,很多都是说AJAX仅仅是过渡技术,又或者说AJAX现在有些滥用了,反正就好像一场狂热下来大家又成了怀疑论者了。Microsoft Expression看起来最震撼的事情应该是Microsoft Expression系列被越来越多人知道,很多人都在想WPF在如此强大的设计器支持下能否干掉AJAX。首先说一下Microsoft Expression是什么,这... 阅读全文

英语阅读推荐:主题切换控件 & ExpressionBuilder

2006-12-02 22:51 by Cat Chen, 3084 阅读, 收藏, 编辑
摘要:这里是Cat in dotNET的Random Clippings系列,专门向大家推荐.NET相关的英文技术文章,每期推荐两篇文章,第一篇适合于英语技术文章阅读的入门者练习阅读能力,而第二篇则适合于进阶练习与技术学习。主题切换控件 (Theme Switcher Control)大家都用过ASP.NET 2.0的主题了吧,在为网站增加几个不同的主题后很多人都会发现了一个问题,那就是系统不提供一个控... 阅读全文

从 ASP 到 ASP.NET (Part 3 - 后记)

2006-11-24 00:09 by Cat Chen, 1800 阅读, 收藏, 编辑
摘要:首先要说明,题目原本是《从熟练的ASP程序员到熟练的ASP.NET程序员》,不过我觉得太长了所以删减了。这篇是后记,不再会提及任何技术细节,需要说的只是如何到达&#8220;熟练&#8221;甚至是&#8220;精通&#8221;的境界。使用造就熟练在ASP.NET 2.0发布一年后才来发表这个系列的文章,距离ASP.NET 1.0发布已经有4年了,可能很多人都会觉得太晚了。其实还不算太晚吧,因为... 阅读全文

十分钟内学会:让GridView支持按行选中及多选

2006-11-21 19:34 by Cat Chen, 3441 阅读, 收藏, 编辑
摘要:Question 如何能让GridView支持选中多行?并且PostBack时要能确定哪些行有被选中哪些行没被选中。 Answer 网上关于GridView多选的实现方式的讨论也不少,有一些需要直接输出&lt;input /&gt;并指定其name属性,或者需要通过Request.Form获取提交表单的数据,这些都解决方案都无法让我满意。我使用ASP.NET的原则就是,别人封装好的东西绝对不要伸手... 阅读全文

深入理解 ASP.NET 动态控件 (Part 3 - 页面生命周期)

2006-11-19 01:57 by Cat Chen, 10038 阅读, 收藏, 编辑
摘要:前言 在上一篇文章中,承诺了这一篇开始讲解释器的,不过看来要按着一个大框架来写文章不那么容易,没仔细推研究过就写出来的内容似乎很应付式。所以我决定恢复我原来的写作习惯,我觉得哪部分的内容已经成熟了,那就把它release出来,没成熟的就继续留在我的draft里面。这次要讲的是页面生命周期,动态控件对此关注的当然是动态与静态控件在生命周期中加载的差别。 一般加载 虽然一般加载过程已经被说过很多次了,... 阅读全文

从 ASP 到 ASP.NET (Part 2 - 忘记什么)

2006-11-17 02:24 by Cat Chen, 1984 阅读, 收藏, 编辑
摘要:前言上一边讲到ASP程序员迁移到ASP.NET时,应该顺应Web开发的潮流学习Web Standards,应该为了更好的理解ASP.NET而学习OOP,然而学习这些知识之后并不代表你就是一个合格的ASP.NET程序员了,因为你仍被ASP的思想所束缚,接下来我要告诉你如何解决这些束缚。比喻首先我们要看看ASP.NET是如何&#8220;确保&#8221;你被继续禁锢在ASP的思想内的。假如我把ASP... 阅读全文

ASP.NET - 解决一个大难题的同时引入另一个更大的难题

2006-11-11 02:19 by Cat Chen, 3616 阅读, 收藏, 编辑
摘要:前言 ASP.NET的优点我说过很多次了,也就是各个控件独立负责自己内部的逻辑,这是一个好事情,因为它解决了原本ASP处理逻辑耦合度高的问题。然而这是需要代价的,那就是引入ASP.NET页面生命周期,随着控件的多层嵌套,应用的复杂度增加,我们再次陷入泥潭! 问题 其实这个文章题目我两个月前就写下了,可是一直没想写完它,直到今天我在这个泥潭中泡了几个小时,于是决定先从泥潭中跳出来把文章写完,再跳进去... 阅读全文

从 ASP 到 ASP.NET (Part 1 - 学习什么)

2006-11-09 15:28 by Cat Chen, 2099 阅读, 收藏, 编辑
摘要:前言首先要告诉大家,文章标题是我&#8220;恶意删改&#8221;了,原本是《从熟练的ASP程序员到熟练的ASP.NET程序员》。从ASP迁移到ASP.NET的程序员肯定不少,我就是其中一个,然而要从熟练的ASP程序员转变为熟练的ASP.NET程序员并不容易,这不仅仅要求你学习非常多的新东西,还要求你丢弃非常多的旧东西。对于没学过ASP的人来说,或许这还容易些,因为他们本来就做好了苦学的准备,也... 阅读全文

深入理解 ASP.NET 动态控件 (Part 2 - 编译过程)

2006-11-05 20:55 by Cat Chen, 8108 阅读, 收藏, 编辑
摘要:前言 要深入理解ASP.NET动态控件,首先就要深入理解整个ASP.NET对页面的处理过程,由你书写好一个ASPX文件(可能还有一个code-behind文件)到你在浏览器中看到的HTML页面,这中间到底发生了什么事。这其中的第一步就是解释ASPX文件并进行编译,也就是这篇文章要讨论的内容。 由于ASP.NET编译本身就是一个大话题,所以我决定在本系列文章把这个题目再细分成几篇文章来写。开头第一篇... 阅读全文

Microsoft Ajax Beta1 - 边学边用边补充 (Part 4 - $create)

2006-11-04 01:17 by Cat Chen, 2780 阅读, 收藏, 编辑
摘要:在Beta1之前,我们可以使用Xml-Script定义对象,当然也可以用JavaScript的老方式来定义对象,不过用过后者的人肯定会觉得这种方式不太方便,因为大多数Control和Behavior都需要手动调用initialize后才能正常运作。例如CTP中的Button,不执行initialize就不会绑定DomElement的click事件,它自身的click事件也就不能被正常触发。还有be... 阅读全文

Microsoft Ajax Beta1 - 边学边用边补充 (Part 3 - ITemplate)

2006-11-01 21:18 by Cat Chen, 2042 阅读, 收藏, 编辑
摘要:首先,使用ITemplate的例子大家可以在Dflying那里找到一些: 使用ASP.NET Atlas实现拖放(Drag &amp; Drop)效果(下) 使用ASP.NET Atlas ListView控件显示列表数据 这些例子当中,ITemplate都不是显式声明的。我们仅仅是在xml-script中制定了以某一个DomElement为基础生成一个ITemplate,但是ITemplate不... 阅读全文

深入理解 ASP.NET 动态控件 (Part 1 - 感性认识)

2006-10-31 13:55 by Cat Chen, 8812 阅读, 收藏, 编辑
摘要:正如我在《我喜欢的教材与我讨厌的教材》中所说的,我讨厌那种标题之后直入理论部分并开始写“定理1、定理2、定理3”的做法,所以在我自己的文章也绝对不会这样写。我认为感性认识是理性认识不可缺乏的基础条件,所以在很理论性的解释ASP.NET页面生命周期之前,先通过一些大家可能都遇到过的例子给大家一个感性认识。 动态控件遇到的第一类问题就是跨页面生命周期时无法自动保存,你必须每次手动创建。举个简单的例子,... 阅读全文

扩展 Atlas 的客户端 Web Service 调用功能

2006-10-30 11:49 by Cat Chen, 2667 阅读, 收藏, 编辑
摘要:Jeffrey Zhao最近在写客户端调用WebService的有关内容,那么我也来说说。Jeffrey Zhao说到了,Beta1中只有一个onComplete,onTimeout、onError、onAborted都没有了,这3个事件都整合到onComplete中,使用者需要自己在onComplete中手动判断到底属于哪个情况。另外Jeffery Zhao最近在讨论继承WebRequestEx... 阅读全文

深入理解 ViewState

2006-10-29 17:40 by Cat Chen, 8751 阅读, 收藏, 编辑
摘要:上个星期写了一篇《控件 ViewState 属性的值保存去哪里了》,解释了Control.ViewState最终还是通过Control.SaveViewState和Control.LoadViewState这两个方法存取的。文章中有一句话可能会让大家感到疑惑的:“我们在OnInit之后使用this.ViewState[key]读写时该属性都为true”,其中“该属性”指StateItem.IsDi... 阅读全文

Microsoft Ajax Beta1 - 边学边用边补充 (Part 2 - DragDropList)

2006-10-27 02:21 by Cat Chen, 1448 阅读, 收藏, 编辑
摘要:由于我在做一个类似Live.com的东西,所以需要类似WebPart的功能。我不清楚Atlas扩展的那个所谓的Cross Browser WebPart到底是什么,支持如何,所以不敢去尝试,从而决定用DragDropList。首先,关于如何使用DragDropList,可以参考Dflying的以下两篇文章: 使用ASP.NET Atlas实现拖放(Drag &amp; Drop)效果(上) 使用A... 阅读全文

Microsoft Ajax Beta1 - 边学边用边补充 (Part 1 - Debug)

2006-10-27 01:31 by Cat Chen, 1284 阅读, 收藏, 编辑
摘要:这Beta1的更新多就不再强调了,关键就是它对以客户端为中心的开发人员不太友善。客户端框架正在作大幅度修改,这个我不反对,但是将明显一个修改到一半的东西扔出来显然就不太好。Beta1里面的客户端框架是没问题的,不过Preview中的就衔接不上了,有些CTP原有的功能没有在Preview中保留,有些则看得出是修改中的,例如debug版的代码不太工整,enclosure和prototype书写方式混合... 阅读全文

ASP.NET AJAX Beta1 发布

2006-10-22 15:47 by Cat Chen, 656 阅读, 收藏, 编辑
摘要:Atlas在7月的CTP之后就几个月没有更新了,当然就意味着之后会来一个大更新,这就是ASP.NET AJAX Beta1。ASP.NET AJAX Beta1将原来的CTP拆分为两个部分:1.0核心和增值CTP,同时原来的Atlas Control Toolkit也改名为ASP.NET AJAX Control Toolkit了。上述3个下载都已经更新了,然而要把老的Atlas项目迁移到新版本则... 阅读全文

控件 ViewState 属性的值保存去哪里了

2006-10-22 15:45 by Cat Chen, 2185 阅读, 收藏, 编辑
摘要:&#160;看过MSDN的都知道,存取ViewState有两种方法: 直接操作控件的ViewState属性,通过this.ViewState[key]就可以直接进行读写。 重写控件的LoadViewState和SaveViewState方法。在LoadViewState中系统会将此控件以ViewState保存的信息作为一个object类型参数传入,控件需要自己将信息unboxing出来。在Save... 阅读全文

AJAX - 服务器端也用 JavaScript 不好吗?

2006-10-22 15:44 by Cat Chen, 1320 阅读, 收藏, 编辑
摘要:现在ASP.NET要实现AJAX已经不难了,可以用同时有服务器端扩展和客户端框架的Atlas,也可以选一个Atlas之外的服务器端JSON串并转换器和支持JSON-RPC的客户端框架。类似的,PHP等现在热门的语言都有服务器端JSON串并转换器,唯独已被人放弃的ASP没有,所以很多人都为如何在ASP上实现AJAX而感到困惑。 要在ASP实现AJAX,首先考虑的是用什么数据格式进行传输,主流的选择就... 阅读全文

ASP.NET 2.0 中的 DataSource 系列控件

2006-10-22 15:41 by Cat Chen, 772 阅读, 收藏, 编辑
摘要:在ASP.NET 2.0中,引入了DataSource系列控件,扔一个到页面上并且选择性的配置好SELECT/UPDATE/INSERT/DELETE对应的操作,它就能够和数据空间无缝合作自动处理查询与更新,并且提供分页、排序等支持。 有一些ASP.NET 1.x的程序员,并不喜欢使用DataSource控件,觉得还是按找1.x的写法在Page_Load里面设定数据控件的DataSource属性然... 阅读全文

Script# - 把 C# 编译为 JavaScript

2006-10-22 15:39 by Cat Chen, 1798 阅读, 收藏, 编辑
摘要:原来有一样东西叫做Script#,是Atlas的主要开发者之一的Nikhil Kothari自己编写的一个小框架,目标就是制作一个C#编译器让C#可以直接编译为JavaScript,并且是不经过编译为IL这个步骤。 之前我就说过,以MS的做法如果要想继续宠着那群很RAD的ASP.NET程序员,并且确保他们继续think inside MS's box,那就必须做一个C#到JavaScript的编译... 阅读全文

Meebo 和 GMail + Talk 等 WebIM 的实现方式

2006-10-22 15:35 by Cat Chen, 1892 阅读, 收藏, 编辑
摘要:我用Fiddler监听过Meebo和GMail + Talk,终于知道他们是如何实现event机制的了(也有人称之为Comet模式)。event包括好友发信息给你、好友上线/下线,甚至连是否显示某某人"is typing"的状态变换也算,反正就是指模仿桌面应用event机制需要服务器端主动触发客户端的东西。 例如有一个event.ashx是专门负责发送event消息的,那么工作的时候就保证一个客户... 阅读全文

初次使用Atlas JavaScript (Part 3 - 实现自己的应用)

2006-10-22 15:35 by Cat Chen, 761 阅读, 收藏, 编辑
摘要:在这里,我假设你肥肥的客户端是基于MVC设计,同时Web Service的内容是以数据为中心的。 在说客户端之前,必须先说说服务器端如何设计。如果服务器端你习惯了3层设计,那就保留你以前的数据访问层和业务逻辑层设计方法,用一模一样的方法完成这两层,只不过我们不再有通过Page表现的UI,而是通过Web Service直接暴露一些业务逻辑层的调用,这就是服务器端需要完成的一切。看起来没有了Page轻... 阅读全文

初次使用Atlas JavaScript (Part 2 - Web Service扩展)

2006-10-22 15:32 by Cat Chen, 728 阅读, 收藏, 编辑
摘要:Atlas对Web Service两方面的扩展包括:1.自动生成javascript代理类的代码2.在javascript代理类调用时使用JSON表达式进行数据交换 通过看Atlas项目的web.config,你可以发现*.asmx现在关联到了一个新的handler,也就是ScriptHandlerFactory,这个handler的行为很简单,如果请求是REST方式则用新的RestHandler... 阅读全文

初次使用Atlas JavaScript (Part 1 - JavaScript扩展)

2006-10-22 15:30 by Cat Chen, 807 阅读, 收藏, 编辑
摘要:Atlas的服务器端控件已经说了,现在说说客户端脚本。Atlas的脚本分为xml-script和javascript两部分:xml-script作为一种描述性语言主要用来做Controller,直接放在页面里面;javascript经过Atlas库扩展后可以用来写Atlas特有的客户端控件,而其内容最好放在独立的js文件中通过引用来使用。xml-script我还没有专门研究过,不是太懂其机制,所以... 阅读全文

Atlas 服务器端控件 - 易用但不灵活

2006-10-22 14:54 by Cat Chen, 428 阅读, 收藏, 编辑
摘要:首先,我会把Atlas服务器端控件区分为两类,纯服务器端控件和客户端逻辑封装控件。前者类似WebControl派生出来的控件那样,它自身并非直接呈现(render)一个客户端元素的实例就算,而是拥有复杂的服务器端逻辑,它呈现出来的HTML由交错的规则决定着;至于后者,则类似HtmlControl派生出来的控件,它所做的基本上就是将自身呈现为一个单一的客户端元素,其服务器端属性比较直接的生成客户端元... 阅读全文

ViewState - ASP.NET 的一个特有存储容器

2006-10-22 14:52 by Cat Chen, 3309 阅读, 收藏, 编辑
摘要:首先,我不确定是不是只有ASP.NET由ViewState,也不确认它有多特有,只是觉得这个东西对于Web开发MVC分离的进步很有帮助。 所谓的ViewState,就是用来存放关于View的State的地方。以前的存储容器包括Cookies, Session, Application, Cache, Hidden,有时候连传递变量用的QueryString也用作存储容器,但都不是专门用来存储Vie... 阅读全文

ASP.NET 设计优秀之处

2006-10-22 14:51 by Cat Chen, 576 阅读, 收藏, 编辑
摘要:我觉得ASP.NET设计得最好的地方,就是控件树的概念。虽然WebForm的概念很烂,误导了不少没有Web开发经验的程序员,但它带来的控件这一概念及控件树结构就真的很好。 控件树优秀的地方,就在于它把整个页面的处理逻辑分割到控件,控件与控件之间是松耦合的,不存在任何依存关系。以往的Web开发,所有的代码都是平板式的接受Request平板式的输出Response,Request被看作由不同的Requ... 阅读全文

LoadPostData 最多只有两次

2006-10-22 14:49 by Cat Chen, 1077 阅读, 收藏, 编辑
摘要:在很多MSDN的一般文档中,都回避了LoadPostData这个问题,直接就说Page由Init到Load然后就是控件事件了。而根据我的实验,在Load的前后会出现两次的LoadPostData,而最后在MSDN也找到了独立的文章证实了这个流程。一般的HTML中静态声明的控件初始化应该发生在Init,Init之后这些控件也就初始化完成。然后此时会有一次LoadPostData,这是面向仅使用HTM... 阅读全文

ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题

2006-10-22 14:45 by Cat Chen, 725 阅读, 收藏, 编辑
摘要:这显然是一个非常明智而且很早就应该实现的做法,因为已经在HTML中声明为runat="server"的控件,就应该算是声明过,还要在code-behind中同步的用C#代码再声明一个同名控件显然是违反了《程序员修炼之道》中所谓的DRY(Don't Repeat Yourself)原则。 原本ASP.NET 1.x的编译模型是编译站点时先编译code-behind部分,然后得到code-behind... 阅读全文

ASP.NET 2.0 ClientScript Callback

2006-10-22 14:41 by Cat Chen, 941 阅读, 收藏, 编辑
摘要:当AJAX出名的时候,ASP.NET 2.0已经基本上完成并且离最后发布时间还剩下半年,此时人人都希望MS为ASP.NET 2.0加上AJAX支持但MS说我们没时间加了,AJAX将成为独立的Atlas项目并出现在ASP.NET 3.0中。不过ASP.NET 2.0中有一个非常通用的但只能称为Method而不能称为Framework的AJAX支持,那就是Callback。 Callback的使用非常... 阅读全文

ASP.NET 2.0 实在太强了!

2006-10-22 14:38 by Cat Chen, 577 阅读, 收藏, 编辑
摘要:.NET Framework 1.x设计很优秀,但是很多东西都还没有,只能借用.NET Framework写自己的Framework然后再用。好象.NET Framework给你不少东西,但实际上你自己不开发自己的Framework那么.NET Framework根本做不了大项目。例如Sharepoint的WebPart架构是套很好的东西,但是只有MS自己用得爽,不装Sharepoint你就不能用... 阅读全文

我不懂 ASP.NET

2006-10-22 14:36 by Cat Chen, 675 阅读, 收藏, 编辑
摘要:这真是个严重的问题,而且我越来越发觉其严重性。要懂得ASP.NET语法非常容易,要学习MS提供给你那种RAD开发方法也很容易,但是你无法做大东西,或者说你只能够按照ASP的老路去做大东西,并不能“享受”ASP.NET带来的“优越性”。 要做到“优秀”的Web应用,最重要的就是“分离”(“正交设计”就是老生常谈的问题了)。首先就是Web Standards里面鼓催的内容(Content)与布局(La... 阅读全文

ASP.NET 是如何让 aspx 完全编译的呢?

2006-10-22 14:28 by Cat Chen, 1058 阅读, 收藏, 编辑
摘要:我以前对这个问题一直持怀疑态度,因为.NET Framework里面就有很多TemplateControl处理类和方法挂上了Parse(或Parser)的字样,不过也有挂上Compile字样的。最近我确实测试了一次它是否完全编译: 我做了一个简单的纯asp页面: &lt;html&gt; &lt;head&gt; &lt;title&gt;Now!&lt;/title&gt; &lt;/head... 阅读全文

2 Ways Thinking In Ajax

2006-10-22 14:21 by Cat Chen, 375 阅读, 收藏, 编辑
摘要:至今来看,ajax的模式有两种,就是Google模式和.NE&shy;T模式。 Google模式就是服务器仅仅接收xml和返回xml,其他一&shy;切工作都是客户端做。开发的重点在于客户端,然后xmlhttp&shy;仅仅用于发送和接收数据,服务器端则是仅处理数据的逻辑,如果把&shy;xmlhttp看作"透明代理"的话,那么这个设计就是属于客户&shy;端设计了。 .NET模式则刚刚好相反,虽... 阅读全文