<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.6.2" -->
<rss version="0.92">
<channel>
	<title>一马当先，为人问学　[当问网]</title>
	<link>http://www.dangwen.com</link>
	<description>记录一名程序员的编程生活．．．</description>
	<lastBuildDate>Wed, 26 Nov 2008 10:03:33 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>让php以脚本的方式运行</title>
		<description><![CDATA[在linux环境下,有时不想在php文件前里加上命令php的字样,让其以独立的脚本运行.下面是注意点:1.让文件有可执行权限, chmod +x abc.php;2.开头加上#!/usr/bin/php;3.如果提示: bad interpreter: No such file or directory 之类,表明不是以unix格式换的行,使用dos2unix *.php命令强行改过.
]]></description>
		<link>http://www.dangwen.com/archives/2008/11/158.html</link>
			</item>
	<item>
		<title>Httpclient和htmlunit实现401授权认证[原]</title>
		<description><![CDATA[http状态码的含义:
1**：请求收到，继续处理
2**：操作成功收到，分析、接受
3**：完成此请求必须进一步处理
4**：请求包含一个错误语法或不能完成
5**：服务器执行一个完全有效请求失败
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到，但返回信息为空
205——服务器完成了请求，用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET，但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码，现行版本中不再使用
307——申明请求的资源临时性删除
400——错误请求，如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖，请求资源不可访问
407——类似401，用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态，请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段，在当前请求资源范围内没有range指示值，请求
也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值，如果是代理服务器，可能是下
一级服务器不能满足请求
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用，有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载，服务器使用另一个关口或服务来响应用户，等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本
==========================================================
英文版：
100：Continue
101：Switching Protocols
102：Processing
200：OK
201：Created
202：Accepted
203：Non-Authoriative Information
204：No Content
205：Reset Content
206：Partial Content
207：Multi-Status
300：Multiple Choices
301：Moved Permanently
302：Found
303：See Other
304：Not Modified
305：Use Proxy
306：(Unused)
307：Temporary Redirect
400：Bad Request
401：Unauthorized
402：Payment Granted
403：Forbidden
404：File Not Found
405：Method Not Allowed
406：Not Acceptable
407：Proxy Authentication Required
408：Request Time-out
409：Conflict
410：Gone
411：Length Required
412：Precondition Failed
413：Request Entity Too Large
414：Request-URI Too Large
415：Unsupported Media Type
416：Requested range not satisfiable
417：Expectation Failed
422：Unprocessable Entity
423：Locked
424：Failed Dependency
500：Internal Server Error
501：Not Implemented
502：Bad Gateway
503：Service Unavailable
504：Gateway Timeout
505：HTTP Version Not Supported
507：Insufficient Storage
1.httpclient实现.
HttpClient client = new HttpClient();
GetMethod get = new GetMethod(&#8221;http://the.page.you.want.to.get&#8221;);
UsernamePasswordCredentials [...]]]></description>
		<link>http://www.dangwen.com/archives/2008/11/151.html</link>
			</item>
	<item>
		<title>模式和原则</title>
		<description><![CDATA[设计模式介绍“模式：每一个模式描述了一个在我们周围不断重复发生的问题，以及该问题的解决方案的核心。”这是关于模式最经典的定义，作者是建筑大师Christopher Alexander。如果是第一次看到这句话，多数人会觉得有些抽象难懂。其实“模式”两个字只是一个代号，就像我的英文名字叫Justin，如果我改叫Tom也没什么问题，只是我更喜欢Justin这个名字，所以从Christopher开始，有了“模式”这个词，人们也都把关于“重复发生的问题的描述和解决办法”统称为模式。“模式”这个词是不局限于软件开发行业的，它几乎无处不在，它其实就是一种经验的积累，就象大多数人的教育经历都是从小学到初中再到高中再到大学，这也是一种模式，是中国的教育模式；现在越来越火的出国热，也是另一种模式：海外留学模式。因为GOF的《设计模式：可复用面向对象软件的基础》一书描述的23种经典设计模式，奠定了模式在软件行业的地位，从此人们提到“设计模式”就是默指“面向对象设计模式”，但是如前文所述，模式绝对不局限于软件行业，即使在软件行业，也不局限于GOF描述的23种设计模式，例如最著名的Martin Flower的《企业架构模式》，还有我们常用的MVC、IOC等架构模式。因为模式是一种经验的积累和总结，所以通过模式，我们可以站在巨人的肩膀上去思考问题、解决问题，熟练使用设计模式可以提高我们的工作效率，改善产品质量，最终带来经济效益。因此对于任何想开发出灵活高效、健壮的软件产品的个人或团体，熟练掌握并正确使用设计模式都是必须掌握的基本技能。
比设计模式更重要：GRASP (职责分配原则)要学习设计模式，有些基础知识是我们必须要先知道的，设计模式是关于类和对象的一种高效、灵活的使用方式，也就是说，必须先有类和对象，才能有设计模式的用武之地，否则一切都是空谈，那么类和对象是从那冒出来的呢？这时就需要比23种设计模式更重要更经典的GRASP模式登场了，嘿嘿，原来这才是老大！GRASP(General Responsibility Assignment Software Patterns)，中文名称为“通用职责分配软件模式”，GRASP一共包括9种模式，它们描述了对象设计和职责分配的基本原则。也就是说，如何把现实世界的业务功能抽象成对象，如何决定一个系统有多少对象，每个对象都包括什么职责，GRASP模式给出了最基本的指导原则。初学者应该尽快掌握、理解这些原则，因为这是如何设计一个面向对象系统的基础。可以说，GRASP是学习使用设计模式的基础。1. Information Expert (信息专家)信息专家模式是面向对象设计的最基本原则，是我们平时使用最多，应该跟我们的思想融为一体的原则。也就是说，我们设计对象(类)的时候，如果某个类拥有完成某个职责所需要的所有信息，那么这个职责就应该分配给这个类来实现。这时，这个类就是相对于这个职责的信息专家。例如：常见的网上商店里的购物车(ShopCar),需要让每种商品(SKU)只在购物车内出现一次，购买相同商品，只需要更新商品的数量即可。如下图：针对这个问题需要权衡的是，比较商品是否相同的方法需要放到那里类里来实现呢？分析业务得知需要根据商品的编号(SKUID)来唯一区分商品，而商品编号是唯一存在于商品类里的，所以根据信息专家模式，应该把比较商品是否相同的方法放在商品类里。2. Creator (创造者)实际应用中，符合下列任一条件的时候，都应该由类Ａ来创建类Ｂ，这时Ａ是Ｂ的创建者：a. Ａ是Ｂ的聚合b. Ａ是Ｂ的容器c. Ａ持有初始化Ｂ的信息(数据)d. Ａ记录Ｂ的实例e. Ａ频繁使用Ｂ如果一个类创建了另一个类，那么这两个类之间就有了耦合，也可以说产生了依赖关系。依赖或耦合本身是没有错误的，但是它们带来的问题就是在以后的维护中会产生连锁反应，而必要的耦合是逃不掉的，我们能做的就是正确地创建耦合关系，不要随便建立类之间的依赖关系，那么该如何去做呢？就是要遵守创建者模式规定的基本原则，凡是不符合以上条件的情况，都不能随便用A创建B。例如：因为订单(Order)是商品(SKU)的容器，所以应该由订单来创建商品。如下图：
1.单一职责原则（SRP）;2.开放－－封闭原则（OCP）;3.依赖倒置原则（DIP）;4.接口隔离原则（ISP）;5.替换原则（LSP）；
]]></description>
		<link>http://www.dangwen.com/archives/2008/11/149.html</link>
			</item>
	<item>
		<title>Zend Framework V1.5 中的新特性[转]</title>
		<description><![CDATA[2008 年  5 月  26 日
流行的开源软件 Zend Framework 刚刚实现了一些出色的增强。本文介绍 V1.5 中的新特性以及如何升级对 GData  Web 服务的增强支持，包括 Zend_Form、Zend_Layout  和 Zend_View，并且，改进的 Ajax 支持可以帮助 PHP 开发人员轻松地构建先进的 Web 应用程序。
 软件框架指一组代码库集合，旨在以一种标准化方式处理应用程序中的所有基本需求，以便使开发人员集中精力进行开发，而不是进行重复劳动。目前有多个开源的 PHP 开发框架可供选择，在所有这些框架中，Zend Framework 也许是最受欢迎的。
Zend 收到欢迎的原因是它非常重视最佳实践，这一特性对于那些重视可持续性的开发人员来说十分有吸引力。Zend 以一种高度模块化的方式构造框架：大多数 Zend Framework 组件可以完全分离并单独使用，这一点非常吸引只需要用到可用库的其中一部分的开发人员。Zend 的灵活性以及重视最佳实践而产生的良好标准化，使它成为具有广泛用途的实用框架。
已经很强大的 Zend Framework 在 V1.5 中又增加了几个全新的组件和组件增强。这些升级使开发复杂的 PHP 应用程序更加简单、更加可维护，这是因为对诸如表单验证例程甚至是前端布局创建等内容实现了标准化。让我们首先看一下Zend_Form 组件以及它提供的全部功能。
 Zend_Form 
Zend Framework 的一个令人兴奋的新增特性就是 Zend_Form 组件。Web 应用程序如果不能接收输入数据并对其进行处理，那么就会变得毫无意义，获得用户数据的最简单方式就是使用表单。当然，在开发与维护一个 Web 应用程序时，表单是最单调乏味的工作：您必须验证收到的全部内容，确保它是您需要的内容，并需要对每个到来的数据片段进行单独处理。所有上述操作都假设您 [...]]]></description>
		<link>http://www.dangwen.com/archives/2008/11/142.html</link>
			</item>
	<item>
		<title>Drupal中的节点（Node）</title>
		<description><![CDATA[
什么是节点（Node）：
节点是构建Drupal的一个核心模块，“节点（Node）”并不是告诉你它是某个网络的一部分，相反地，你应该将一个节点想成是你网站一个具有魔
力的一部分，它可以由你网站的用户创建，当然你自己也可以创建，它可以是一个博客或者一份手册，通过Drupal内容管理工具箱（Content
Construction
Kit），你甚至可以创建无限多种你可以想像的类型的节点。你要牢记的是，任何一个节点都有它的类型，这种类型指向节点的内容类型，每一个节点都有自己唯
一的节点ID号、一个标题、主内容区、创作的内容、一位作者以及一些其它的属性，一个节点与其它所有节点一起被存在在数据库中的一份数据表之中。
Drupal拥有很多数据表，核心数据表在50份左右，或许你q希望将它们中的某些数据显示在你的网站上来实现某种功能。
用户模块也拥有自己的数据表，用户之中有很多又是某节点的作者，在这两者之间就产生了一种联系，要找到与某位用户相关联的节点的唯一途径就是搜索整个数据表想发现相匹配的项目，这是一个很大的工程，当然，感谢数据库服务器是很快速的。
任何一个节点都可以拥有无限数量的评论，评论又被存放在另一份数据表中，要找到某个节点所拥有的所有评论，我们需要搜索评论数据表中的所有记录。
节点是怎样工作的：
看一下正在访问Drupal站点的浏览器的地址栏，你或许可以看到这样的一个地址：“http:
//yourdomain.com/node/1”，这正是浏览器使用Drupal方式来向Drupal站点请求一次数据库查询，其内容包括：“从数据库
中查询ID为1的节点的所有查询允许的信息（如作者、评论等）并展示在页面中”，这叫数据查询请求。
大多数查询都是由相关模块来完成的，/tracker 会搜索所有节点并且按时间将结果存在在一份数据表中，只要你开启了Tracker 模块，那么它将一直运行。
当你将鼠标移到一个链接上面之后，察看浏览器的状态栏，你或许就可以更深的了解这个链接的文字所表达的意思，因为Drupal可以模仿文件夹路径一样的链接来表示内容的类型。
Drupal的模块（Modules）可以对数据进行很多操作，打个比方，当你打开一个你自己创建的文章节点后，你会在页面的最底部看到一个标签
栏，里面有查看/编辑（View/Edit）两个链接，但是这两个链接在不是你自己创建的页面却看不到，这就是通过用户权限设置后所拥有的功能。
节点类型：
Drupal将所有内容存储为节点，系统默认的节点类型有以下几种：

博客文章：由网站用户发表在他开设于Drupal站点上的博客上的文章。
网站文章：与博客文章类似，只不过它不是发表在用户的个人博客上，而是有相关权限的用户直接发表于网站上。
手册页面：手册页面是为联合协作文档编辑而准备的，一份手册可以由很多人共同完成。
评论：评论是每一个节点都有的，它是有评论权限的用户对某一个节点内容的看法，由用户提交。
论坛：论坛是内建于Drupal系统之中的默认模块，通过它网站拥有者可以建立根据不同的话题建立不同的论坛，用户可以在不的同论坛中发起相关的讨论。
页面：页面是一种简单的节点，它只是一个静态的页面并且可以生成一个在主导航栏的链接
投票：一种特殊的 节点，可以发起对某个话题的投票与调查活动
其它类型节点：由不同的模块生成的相关的节点

]]></description>
		<link>http://www.dangwen.com/archives/2008/11/140.html</link>
			</item>
	<item>
		<title>Memcache的使用和协议分析详解</title>
		<description><![CDATA[Memcache是danga.com的一个项目，最早是为 LiveJournal 服务的，目前全世界不少人使用这个缓存项目来构建自己大负载的网站，来分担数据库的压力。（关于Memcache的更多信息请Google）Memcache官方网站：http://www.danga.com/memcached
【安装Memcache服务器端】
我目前的平台，服务器是Fedora Core 1（内核：2.4.22），客户端是Windows XP SP2，需要安装的就是服务器的Memcached的守护进程和客户端的PHP扩展php_memcache两个东西。现在我分别来讲。
服务器端主要是安装memcache服务器端，目前的最新版本是 memcached-1.2.0 。下载：http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz另外，Memcache用到了libevent这个库用于Socket的处理，所以还需要安装libevent，libevent的最新版本是libevent-1.2。（如果你的系统已经安装了libevent，可以不用安装）官网：http://www.monkey.org/~provos/libevent/下载：http://www.monkey.org/~provos/libevent-1.2.tar.gz
我分别把两个东东下载回来，放到 /tmp 目录下：# cd /tmp# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz
先安装libevent：# tar zxvf libevent-1.2.tar.gz# cd libevent-1.2# ./configure &#8211;prefix=/usr# make# make install
然后看看我们的libevent是否安装成功：# ls -al /usr/lib &#124; grep libeventlrwxrwxrwx&#160;&#160;&#160; 1 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;21 11?? 12 17:38 libevent-1.2.so.1 -&#62; libevent-1.2.so.1.0.3-rwxr-xr-x&#160;&#160;&#160;&#160;&#160;&#160; 1 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 263546 11?? 12 17:38 libevent-1.2.so.1.0.3-rw-r&#8211;r&#8211;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 454156 11?? [...]]]></description>
		<link>http://www.dangwen.com/archives/2008/11/138.html</link>
			</item>
	<item>
		<title>Memcache协议中文版</title>
		<description><![CDATA[写在前头
偶然之间看到本文的中英文对照版本，感觉看起来不是很方便，于是花费了半个小时的时间，仔细整理出了独立的中文版本，并记录下来。
协议
memcached 的客户端使用TCP链接 与 服务器通讯。（UDP接口也同样有效，参考后文的 “UDP协议” ）一个运行中的memcached服务器监视一些（可设置）端口。客户端连接这些端口，发送命令到服务器，读取回应，最后关闭连接。
结束会话不需要发送任何命令。当不再需memcached服务时，要客户端可以在任何时候关闭连接。需要注意的是，鼓励客户端缓存这些连接，而不是
每次需要存取数据时都重新打开连接。这是因为memcached
被特意设计成及时开启很多连接也能够高效的工作（数百个，上千个如果需要的话）。缓存这些连接，可以消除建立连接所带来的开销（/*/相对而言，在服务器
端建立一个新连接的准备工作所带来的开销，可以忽略不计。）。

在memcache协议中发送的数据分两种：文本行 和 自由数据。
文本行被用于来自客户端的命令和服务器的回应。自由数据用于客户端从服务器端存取数据时。同样服务器会以字节流的方式传回自由数据。/*/服务器不用关心
自由数据的字节顺序。自由数据的特征没有任何限制；但是通过前文提到的文本行，这项数据的接受者（服务器或客户端），便能够精确地获知所发送的数据库的长
度。
文本行固定以“\r\n”(回车符紧跟一个换行符)结束。 自由数据也是同样会以“\r\n”结束，但是
\r(回车符)、\n(换行符)，以及任何其他8位字符，均可出现在数据中。因此，当客户端从服务器取回数据时，必须使用数据区块的长度来确定数据区块的
结束位置，而不要依据数据区块末尾的“\r\n”，即使它们固定存在于此。
键值
存储在memcached中的数据通过键值来标识。键值是一个文本字符串，对于需要存取这项数据的客户端而言，它必须是唯一的。键值当前的长度限制设定为250字符（当然，客户端通常不会用到这么长的键）；键值中不能使用制表符和其他空白字符（例如空格，换行等）。
命令
所有命令分为3种类型：
存储命令（有3项：’set’、’add’、’repalce’）指示服务器储存一些由键值标识的数据。客户端发送一行命令，后面跟着数据区块；然后，客户端等待接收服务器回传的命令行，指示成功与否。
取回命令（只有一项：’get’）指示服务器返回与所给键值相符合的数据（一个请求中右一个或多个键值）。客户端发送一行命令，包括所有请求的键值；服务
器每找到一项内容，都会发送回客户端一行关于这项内容的信息，紧跟着是对应的数据区块；直到服务器以一行“END”回应命令结束。
/*?*/其他的命令都不能携带自由数据。在这些命令中，客户端发送一行命令，然后等待（由命令所决定）一行回应，或最终以一行“END”结束的多行命令。
一行命令固定以命令名称开始，接着是以空格隔开的参数（如果有参数的话）。命令名称大小写敏感，并且必须小写。一些客户端发送给服务器的命令会包含
一些时限（针对内容或客户端请求的操作）。这时，时限的具体内容既可以是Unix时间戳（从1970年1月1日开始的秒钟数），或当前时间开始的秒钟数。
对后者而言，不能超过 60*60*24*30（30天）；如果超出，服务器将会理解为Unix时间戳，而不是从当前时间起的秒偏移。
错误字串
每一个由客户端发送的命令，都可能收到来自服务器的错误字串回复。这些错误字串会以三种形式出现：
- “ERROR\r\n”
意味着客户端发送了不存在的命令名称。
- “CLIENT_ERROR &#60;error&#62;\r\n”
意味着输入的命令行里存在一些客户端错误，例如输入未遵循协议。&#60;error&#62;部分是人类易于理解的错误解说……
- “SERVER_ERROR &#60;error&#62;\r\n”
意味着一些服务器错误，导致命令无法执行。&#60;error&#62;部分是人类易于理解的错误解说。在一些严重的情形下（通常应该不会遇到），服务器将在发送这行错误后关闭连接。这是服务器主动关闭连接的唯一情况。
在后面每项命令的描述中，这些错误行不会再特别提到，但是客户端必须考虑到这些它们存在的可能性。
存储命令
首先，客户端会发送一行像这样的命令：
&#60;command name&#62; &#60;key&#62; &#60;flags&#62; &#60;exptime&#62; &#60;bytes&#62;\r\n
- &#60;command name&#62; 是 set, add, 或者 repalce

set 意思是 “储存此数据”
add 意思是 “储存此数据，只在服务器*未*保留此键值的数据时”
replace意思是 “储存此数据，只在服务器*曾*保留此键值的数据时”

- &#60;key&#62; 是接下来的客户端所要求储存的数据的键值
- &#60;flags&#62; 是在取回内容时，与数据和发送块一同保存服务器上的任意16位无符号整形（用十进制来书写）。客户端可以用它作为“位域”来存储一些特定的信息；它对服务器是不透明的。
- &#60;exptime&#62; 是终止时间。如果为0，该项永不过期(虽然它可能被删除，以便为其他缓存项目腾出位置)。如果非0（Unix时间戳或当前时刻的秒偏移），到达终止时间后，客户端无法再获得这项内容。
- &#60;bytes&#62; 是随后的数据区块的字节长度，不包括用于分野的“\r\n”。它可以是0（这时后面跟随一个空的数据区块）。
在这一行以后，客户端发送数据区块。
&#60;data block&#62;\r\n
- &#60;data block&#62; 是大段的8位数据，其长度由前面的命令行中的&#60;bytes&#62;指定。
发送命令行和数据区块以后，客户端等待回复，可能的回复如下：
- “STORED\r\n”
表明成功.
- “NOT_STORED\r\n”
表明数据没有被存储，但不是因为发生错误。这通常意味着add 或 replace命令的条件不成立，或者，项目已经位列删除队列（参考后文的“delete”命令）。
取回命令
一行取回命令如下：
get &#60;key&#62;*\r\n
- &#60;key&#62;* 表示一个或多个键值，由空格隔开的字串
这行命令以后，客户端的等待0个或多个项目，每项都会收到一行文本，然后跟着数据区块。所有项目传送完毕后，服务器发送以下字串：
“END\r\n”
来指示回应完毕。
服务器用以下形式发送每项内容：
VALUE &#60;key&#62; &#60;flags&#62; &#60;bytes&#62;\r\n
&#60;data block&#62;\r\n
- [...]]]></description>
		<link>http://www.dangwen.com/archives/2008/11/136.html</link>
			</item>
	<item>
		<title>Zend Framework 入门（1）——快速上手</title>
		<description><![CDATA[这个系列是我的学习笔记。主要内容来自 Zend Framework 的［程序员参考手册］，结合了自己的学习和开发过程。
1. 安装
从 Zend Framework 的网页上下载最新版本。解压后，把整个目录拷贝到一个理想的地方，比如：/php/library/Zend。
打开 php.ini 文件，确认包含 Zend 目录的路径在 include_path 里定义了。以上面的配置为例，php.ini 中应有类似下面的条目：
include_path = &#8220;.:/php/library&#8221;
注意：Windows 下的写法略有不同，应该类似于 include_path = &#8220;.;C:\php\library&#8221;
初始的安装就这么简单。Zend Framework 的一些组件会用到 php 的一些附加模块。具体的要求请参考这里。
&#160;
2. 项目的目录结构
如果你的项目不包含多个模块，可以用下面的目录结构：
&#60;span style="color: rgb(0, 0, 0);"&#62;application/&#60;br /&#62;    controllers/&#60;br /&#62;        IndexController.php&#60;br /&#62;    models/&#60;br /&#62;    views/&#60;br /&#62; [...]]]></description>
		<link>http://www.dangwen.com/archives/2008/11/134.html</link>
			</item>
	<item>
		<title></title>
		<description><![CDATA[A content management system(CMS) is a computer application used to create, edit, manage, and publish content in a consisitently organized fashion. CMSs are frequently used for storing,controlling,versioning, and publishing industry-specific documentation such as news articles,operators&#8217; manuals, technical manuals,sales guides, and marketing brochures(小册子).The content managed may include computer files,image media, audio files, video files, electronic documents, [...]]]></description>
		<link>http://www.dangwen.com/archives/2008/10/132.html</link>
			</item>
	<item>
		<title>linux crontab 时间格式</title>
		<description><![CDATA[分 時 日 月 星期43 21 * * *               21:43 执行15 05 * * * 　　          05:15 执行0 17 * * *           [...]]]></description>
		<link>http://www.dangwen.com/archives/2008/10/130.html</link>
			</item>
</channel>
</rss>
