<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>~~天狼星技术博客~~</title>
	<atom:link href="http://blog.painiu.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.painiu.com</link>
	<description>天狼星黎明时分的秘密!!!</description>
	<lastBuildDate>Sat, 05 Sep 2009 11:50:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>三招禁止迅雷里烦人的广告</title>
		<link>http://blog.painiu.com/2008/12/71.html</link>
		<comments>http://blog.painiu.com/2008/12/71.html#comments</comments>
		<pubDate>Tue, 09 Dec 2008 19:18:44 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[用户体验]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=71</guid>
		<description><![CDATA[喜欢用迅雷的朋友看着迅雷里的那么多广告，一定会十分厌烦。那就让我们动手禁止这些广告吧。
1.禁止顶部的广告
进入迅雷的安装目录，再进入“Program”子目录。用记事本打开该目录下的“adhistory.xml”文件，然后将里面的内容全部删除并 保存。右击“adhistory.xml”文件，选择“属性”在弹出的对话框中选中“只读”属性。最后删除“Ad”子目录下的所有文件。
2.禁止底部的文字广告
再次进入“Program”子目录，用记事本打开该目录下的“adtask.xml”文件，将里面的内容全部删除，然后保存。最后为“adtask.xml”文件添加“只读”属性。
3.禁止右侧显示的资源信息
先进入迅雷的安装目录，然后再进入“Components”子目录，然后删除“P4PClient”子目录，这样资源信息栏就会变成一片空白。如果你不喜欢工具栏上的搜索工具，也可以删除“Search”子目录就可以了。
]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/12/71.html/feed</wfw:commentRss>
		<slash:comments>937</slash:comments>
		</item>
		<item>
		<title>最佳做法为加快您的网站</title>
		<link>http://blog.painiu.com/2008/12/76.html</link>
		<comments>http://blog.painiu.com/2008/12/76.html#comments</comments>
		<pubDate>Tue, 09 Dec 2008 19:18:30 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[用户体验]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=76</guid>
		<description><![CDATA[
少HTTP请求
 Use a Content Delivery Network 使用内容交付网络
 Add an Expires or a Cache-Control Header 新增过期或Cache &#8211; Control标题
 Gzip Components gzip格式压缩组件
 Put Stylesheets at the Top 把样式表顶部
 Put Scripts at the Bottom 把脚本底部
 Avoid CSS Expressions 避免的CSS表达式
 Make JavaScript and CSS External 制作的JavaScript和CSS外部
 Reduce DNS Lookups 减少DNS查找
 Minify JavaScript and CSS 缩小的JavaScript和CSS
 Avoid Redirects 避免重定向
 Remove [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/12/76.html/feed</wfw:commentRss>
		<slash:comments>659</slash:comments>
		</item>
		<item>
		<title>HTTP header中的 Cache-control</title>
		<link>http://blog.painiu.com/2008/11/77.html</link>
		<comments>http://blog.painiu.com/2008/11/77.html#comments</comments>
		<pubDate>Sat, 08 Nov 2008 14:51:11 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[前端开发]]></category>
		<category><![CDATA[用户体验]]></category>
		<category><![CDATA[编程技巧]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=77</guid>
		<description><![CDATA[Cache-control常见的取值有private、no-cache、max-age、must-revalidate等


网页的缓存是由HTTP消息头中的“Cache-control”来控制的，常见的取值有private、no-cache、max-age、must-revalidate等，默认为private。其作用根据不同的重新浏览方式分为以下几种情况：
（1） 打开新窗口
如果指定cache-control的值为private、no-cache、must-revalidate，那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值，那么在此值内的时间里就不会重新访问服务器，例如：
Cache-control: max-age=5
表示当访问此网页后的5秒内再次访问不会去服务器
（2） 在地址栏回车
如果值为private或must-revalidate（和网上说的不一样），则只有第一次访问时会访问服务器，以后就不再访问。如果值为no-cache，那么每次都会访问。如果值为max-age，则在过期之前不会重复访问。
（3） 按后退按扭
如果值为private、must-revalidate、max-age，则不会重访问，而如果为no-cache，则每次都重复访问
（4） 按刷新按扭
无论为何值，都会重复访问
当指定Cache-control值为“no-cache”时，访问此页面不会在Internet临时文章夹留下页面备份。
另外，通过指定“Expires”值也会影响到缓存。例如，指定Expires值为一个早已过去的时间，那么访问此网时若重复在地址栏按回车，那么每次都会重复访问：
Expires: Fri, 31 Dec 1999 16:00:00 GMT
在ASP中，可以通过Response对象的Expires、ExpiresAbsolute属性控制Expires值；通过Response对象的CacheControl属性控制Cache-control的值，例如：
Response.ExpiresAbsolute = #2000-1-1# ‘ 指定绝对的过期时间，这个时间用的是服务器当地时间，会被自动转换为GMT时间
Response.Expires = 20 ‘ 指定相对的过期时间，以分钟为单位，表示从当前时间起过多少分钟过期。
Response.CacheControl = “no-cache”


]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/11/77.html/feed</wfw:commentRss>
		<slash:comments>1558</slash:comments>
		</item>
		<item>
		<title>大型网站架构</title>
		<link>http://blog.painiu.com/2008/10/75.html</link>
		<comments>http://blog.painiu.com/2008/10/75.html#comments</comments>
		<pubDate>Tue, 21 Oct 2008 06:47:33 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[编程技巧]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=75</guid>
		<description><![CDATA[大型网站架构系列之一 不得不考虑的问题
前言：这两天机器坏了，正在送修中，写个系列的大型网站架构的文章，希望对有志在互联网做出一番事业的站长朋友们一些帮助。
注意：这里的大型网站架构只包括高互动性高交互性的数据型大型网站，基于大家众所周知的原因，我们就不谈新闻类和一些依靠HTML静态化就可以 实现的架构了，我们以高负载高数据交换高数据流动性的网站为例，比如海内，开心网等类似的web2.0系列架构。我们这里不讨论是PHP还是JSP或者. NET环境，我们从架构的方面去看问题，实现语言方面并不是问题，语言的优势在于实现而不是好坏，不论你选择任何语言，架构都是必须要面对的。
文入正题：
首先讨论一下大型网站需要注意和考虑的问题
A. 海量数据的处理。
众所周知，对于一些相对小的站点来说，数据量并不是很大，select和update就可以解决我们面对的问题，本身负载量不是很大，最多再加 几个索引就可以搞定。对于大型网站，每天的数据量可能就上百万，如果一个设计不好的多对多关系，在前期是没有任何问题的，但是随着用户的增长，数据量会是 几何级的增长的。在这个时候我们对于一个表的select和update的时候(还不说多表联合查询)的成本的非常高的。
B. 数据并发的处理
在一些时候，2.0的CTO都 有个尚方宝剑，就是缓存。对于缓存，在高并发高处理的时候也是个大问题。在整个应用程序下，缓存是全局共享的，然而在我们进行修改的时候就，如果两个或者 多个请求同时对缓存有更新的要求的情况下，应用程序会直接的死掉。这个时候，就需要一个好的数据并发处理策略以及缓存策略。
另外，就是数据库的死锁问题，也许平时我们感觉不到，死锁在高并发的情况下的出现的概率是非常高的，磁盘缓存就是一个大问题。
C. 文件存贮的问题
对于一些支持文件上传的2.0的站点，在庆幸硬盘容量越来越大的时候我们更多的应该考虑的是文件应该如何被存储并且被有效的索引。常见的方案是 对文件按照日期和类型进行存贮。但是当文件量 是海量的数据的情况下，如果一块硬盘存贮了500个G的琐碎文件，那么维护的时候和使用的时候磁盘的Io就是一个巨大的问题，哪怕你的带宽足够，但是你的 磁盘也未必响应过来。如果这个时候还涉及上传，磁盘很容易就over了。
也许用raid和专用存贮服务器能解决眼下的问题，但是还有个问题就是各地的访问问题，也许我们的服务器在北京，可能在云南或者新疆的访问速度如何解决?如果做分布式，那么我们的文件索引以及架构该如何规划。
所以我们不得不承认，文件存贮是个很不容易的问题
D. 数据关系的处理
我们可以很容易的规划出一个符合第三范式的数据库，里面布满了多对多关系，还能用GUID来替换INDENTIFY COLUMN 但是，多对多关系充斥的2.0时代，第三范式是第一个应该被抛弃的。必须有效的把多表联合查询降到最低。
E. 数据索引的问题
众所周知，索引是提高数据库效率查询的最方面最廉价最容易实现的方案。但是，在高UPDATE的情况下，update和delete付出的成本 会高的无法想想，笔者遇到过一个情况，在更新一个聚焦索引的时候需要10分钟来完成，那么对于站点来说，这些基本上是不可忍受的。
索引和更新是一对天生的冤家，问题A，D，E这些是我们在做架构的时候不得不考虑的问题，并且也可能是花费时间最多的问题，
F. 分布式处理
对于2.0网站由于其高互动性，CDN实现的效果基本上为0，内容是实时更新的，我们常规的处理。为了保证各地的访问速度，我们就需要面对一个绝大的问题，就是如何有效的实现数据同步和更新，实现各地服务器的实时通讯有是一个不得不需要考虑的问题。
G. Ajax的利弊分析
成也AJAX，败也AJAX，AJAX成为了主流趋势，突然发现基于XMLHTTP的post和get是如此的容易。客户端get或者post 到服务器数据，服务器接到数据请求之后返回来，这是一个很正常的AJAX请求。但是在AJAX处理的时候，如果我们使用一个抓包工具的话，对数据返回和处 理是一目了然。对于一些计算量大的AJAX请求的话，我们可以构造一个发包机，很容易就可以把一个webserver干掉。
H. 数据安全性的分析
对于HTTP协议来说，数据包都是明文传输的，也许我们可以说我们可以用加密啊，但是对于G问题来说的话，加密的过程就可能是明文了(比如我们 知道的QQ，可以很容易的判断他的加密，并有效的写一个跟他一样的加密和解密方法出来的)。当你站点流量不是很大的时候没有人会在乎你，但是当你流量上来 之后，那么所谓的外挂，所谓的群发就会接踵而来(从qq一开始的群发可见端倪)。也许我们可以很的意的说，我们可以采用更高级别的判断甚至HTTPS来实 现，注意，当你做这些处理的时候付出的将是海量的database，io以及CPU的成本。对于一些群发，基本上是不可能的。笔者已经可以实现对于百度空 间和qq空间的群发了。大家愿意试试，实际上并不是很难。
I. 数据同步和集群的处理的问题
当我们的一台databaseserver不 堪重负的时候，这个时候我们就需要做基于数据库的负载和集群了。而这个时候可能是最让人困扰的的问题了，数据基于网络传输根据数据库的设计的不同，数据延 迟是很可怕的问题，也是不可避免的问题，这样的话，我们就需要通过另外的手段来保证在这延迟的几秒或者更长的几分钟时间内，实现有效的交互。比如数据散 列，分割，内容处理等等问题
K.数据共享的渠道以及OPENAPI趋势
Openapi已经成为一个不可避免的趋势，从google，facebook，myspace到 海内校内，都在考虑这个问题，它可以更有效的留住用户并激发用户的更多的兴趣以及让更多的人帮助你做最有效的开发。这个时候一个有效的数据共享平台，数据 开放平台就成为必不可少的途径了，而在开放的接口的情况保证数据的安全性和性能，又是一个我们必须要认真思考的问题了。
当然还有更多需要考虑的问题，我这里就写一个最需要考虑的问题，欢迎补充。下一篇文章将针对问题A，提出具体的解决方案和思路
大型网站架构系列之二 底层架构概论 
首先澄清上篇中关于几个朋友的评论。
上篇介绍的基于AJAX的攻击很多人提出疑问，比如不能跨域，减轻负担之类。Ajax是通过简单的GET和POST进行数据传递的，采用 HTTPDEBUGGER，抓取数据，然后采用如下方案，顺便写个示例的攻击代码.比传统的webform，我们更容易构造一些，其实对于webform 和ajax的处理和发包过程是一样的，ajax数据量相对小，速度也快一些。
结合SharpPcap和HttpWebRequest我们构造一个合理的正常的IP数据包过去,代码很长，我们用伪代码简单的表达一下。
request.CreateUrl(Ajax处理页面);
request.Method=”GetORPost”;
request.refere=”网页来源”;
SharpPcap.SetLinkConnection(伪造IP地址);
String content = request.GetResponseStream() 如果作为一个多线程的应用程序对对方的WEB构成批量发包的话(假如是DEDECMS)，足可以把Dedecms的数据库搞垮
文入正题：
对于上回书提到要解决问题A，我们先讲解一下电信公司ADSL的布局方案。机器上没有装VISIO，我简单的用文字描述一下流程。
Adsl用户Aè输入用户名密码è远程连接到账户数据库(在天津)è账户数据库连接计费数据库并返回状è如果成功，连接PPPOE服务器，并进一步连接计费数据库è认证服务并连接。
这里没有什么特别的地方，但是和qq通讯服务是一样的，就是采用了统一的用户验证服务器，同时对于用户验证的信息数据库是只读的，我们从其中可以想到什么吗?
以上是个简单的例子，下面开始谈具体的架构策略，首先对于上篇提到的问题A，我们首先以用户数据库为例来做解释和要求。
首先做用户量估算需求，假如我们做的是学术社区，那么这个用户量不会很大，可能我们不需要考虑这个，对于用户量的级别，我们暂时把用户量级别定 为三种，百万级别(M)和千万界别(S)，以及亿万级别(Q)，并考虑用户登录验证以及查询常用的操作，对M和S进行扩充以及了解。
众所周知，在这个情况下，对于用户数据的负载其实并非可行而不可行的问题，而是如何最大化的保证查询和更新以及各个服务器之间的数据同步。这里 我们不再讲解如何优化如何索引，只介绍架构初期的方案，下面介绍的方案如果涉及全表查询，可以采用分区视图的方案，大家可以具体搜索相关资料。
对于M级别来说，现有的DBMS经过合理的布局完全可以满足需求。我们需要解决的问题的关键其实是处理IO方面的问题，处理方案相对简单一些， 对数据库的FILE文件分磁盘存贮(不是分区，是不同的硬盘)，根据负载量大小，我们可以适当的控制硬盘的数量和文件分区的数量。
对于S级别，上个处理方案已经不能完全满足需求了，这个时候我们需要对注册和入库的流程进行简单的修改了，解决方案是数据散列和分区视图的概念，具体概念大家去google一下，我不详细说明了。
我们常用的方案有三种。第一种是等容扩充法，在用户注册控制的基础上，保证每个库的用户容量不超过500万，超过之后入第二个库，以此类推，这 个方案可以保证系统有效的扩充性，但不能保证数据被有效的索引。第二种就是共区索引方案，其实和第一种方案有异曲同工的之说但是讲第一种方案进行了合理的 优化，按照用户名进行分库存贮。比如我们可以建立26的数据库，按照用户名的索引来控制用户数据入哪个库。假如用户名是CrazyCoder，那么就讲该 用户名的数据存放在用户表C中，在数据存贮的时候可以很方便的根据用户名进行相应的数据查询，方案二可以有效的解决数据索引问题。方案三是一个更具模型化 的方案，结合方案一和方案二，进行用户ID的编码，不是INDENTIFY Cloumn，我们用一种序列化的方案将用户名以编码的形式存贮，比如用户名是CrazyCoder,我们的编码方案就是通过算法进行数字化，将 CrazyCoder按照C，R,A,….存贮为数字索引，然后进行分区存贮，数字类型的数据在数据库中可以更有效的被查询和被更新和共享，结合方案一和 方案二这个就是方案三。
对于Q级别。数据量已经是足够海量了，这个时候无论用哪种方案都是一个让人头大的数据，不能简单的用查询的方案来处理了，可以参考S级别的进行 处理。但这个时候我们采用的方案是根据用户活跃度的权值结合数据量进行临时数据表的存放。如果一个非意外的数据情况下，每天登录的用户量不会上千万。这个 时候我们需要做的是一个简单的数据代理程序。一个临时的用户验证数据库，每天执行一次批处理，将活跃度高的用户账户提取到临时数据库中，查询的时候先查询 临时库，如果没有在进行全库查询。这个根据系统的负载情况来估计阈值，不同的系统估算方案也不尽相同。
上面对于，M,S,Q三种界别进行了简单的概述，下面介绍一个在其之上更高级的一个查询方案，数据缓存服务器，我们也可以把它理解为缓冲服务器，数据做为只读来使用。
具体实现方案如下：以为涉及了海量，DBMS常规的缓存方案已经不符合我们的要求了，那么我们需要一个有效的缓存方案，这个时候处理的流程其实 [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/10/75.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>开源数据库 Sharding 技术 (Share Nothing)</title>
		<link>http://blog.painiu.com/2008/10/74.html</link>
		<comments>http://blog.painiu.com/2008/10/74.html#comments</comments>
		<pubDate>Sun, 19 Oct 2008 09:44:47 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[Sharding]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=74</guid>
		<description><![CDATA[从 Shard 到 Sharding
&#8220;Shard&#8221; 这个词英文的意思是&#8221;碎片&#8221;，而作为数据库相关的技术用语，似乎最早见于大型多人在线角色扮演游戏(MMORPG)中。&#8221;Sharding&#8221; 姑且称之为&#8221;分片&#8221;。
Sharding 不是一门新技术，而是一个相对简朴的软件理念。如您所知，MySQL 5 之后才有了数据表分区功能，那么在此之前，很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑，而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题，MySQL 的推广者经常会被问到：如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理，是如何办到的呢? 答案是：Sharding。
Sharding 不是一个某个特定数据库软件附属的功能，而是在具体技术细节之上的抽象处理，是水平扩展(Scale Out，亦或横向扩展、向外扩展)的解决方案，其主要目的是为突破单节点数据库服务器的 I/O 能力限制，解决数据库扩展性问题。
事关数据库扩展性
说起数据库扩展性，这是个非常大的话题。目前的商业数据都有自己的扩展性解决方案，在过去相对来说比较成熟，但是随着互联网的高速发展，不可避免的会带来一些计算模式上的演变，这样很多主流商业系统也难免暴露出一些不足之处。比如 Oracle 的 RAC 是采用共享存储机制，对于 I/O 密集型的应用，瓶颈很容易落在存储上，这样的机制决定后续扩容只能是 Scale Up（向上扩展） 类型，对于硬件成本、开发人员的要求、维护成本都相对比较高。
Sharding 基本上是针对开源数据库的扩展性解决方案，很少有听说商业数据库进行 Sharding 的。目前业界的趋势基本上是拥抱 Scale Out，逐渐从 Scale Up 中解放出来。
Sharding 的应用场景
任何技术都是在合适的场合下能发挥应有的作用。 Sharding 也一样。联机游戏、IM、BSP 都是比较适合 Sharding 的应用场景。其共性是抽象出来的数据对象之间的关联数据很小。比如IM ，每个用户如果抽象成一个数据对象，完全可以独立存储在任何一个地方，数据对象是 Share Nothing 的；再比如 Blog 服务提供商的站点内容，基本为用户生成内容(UGC)，完全可以把不同的用户隔离到不同的存储集合，而对用户来说是透明的。
这个 &#8220;Share Nothing&#8221; 是从数据库集群中借用的概念，举例来说，有些类型的数据粒度之间就不是 &#8220;Share Nothing&#8221; 的，比如类似交易记录的历史表信息，如果一条记录中既包含卖家信息与买家信息，如果随着时间推移，买、卖家会分别与其它用户继续进行交易，这样不可避免的 两个买卖家的信息会分布到不同的 [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/10/74.html/feed</wfw:commentRss>
		<slash:comments>70</slash:comments>
		</item>
		<item>
		<title>请不要忽视这些基础知识</title>
		<link>http://blog.painiu.com/2008/10/73.html</link>
		<comments>http://blog.painiu.com/2008/10/73.html#comments</comments>
		<pubDate>Thu, 16 Oct 2008 20:33:34 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=73</guid>
		<description><![CDATA[第一，谈谈final, finally, finalize的区别。
final  用于声明属性，方法和类，分别表示属性不可变，方法不可覆盖，类不可继承。finally是异常处理语句结构的一部分，表示总是执行。finalize是Object类的一个方法，在垃圾收集器执行的时候会调用被回收对象的此方法，可以覆盖此方法提供垃圾收集时的其他资源回收，例如关闭文件等。
第二，Anonymous Inner Class (匿名内部类)  是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)?
可以继承其他类或完成其他接口，在swing编程中常用此方式。　
第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。
Static  Nested Class是被声明为静态（static）的内部类，它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。　　
第四，&#38;和&#38;&#38;的区别。
 &#38;是位运算符，表示按位与运算，&#38;&#38;是逻辑运算符，表示逻辑与（and）.　　
第五，HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现（非线程安全的实现），他们都完成了Map接口，主要区别在于HashMap允许空（null）键值（key）,由于非线程安全，效率上可能高于Hashtable.　　
第六，Collection 和 Collections的区别。 　　
Collection是集合类的上级接口，继承与他的接口主要有Set  和List.Collections是针对集合类的一个帮助类，他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。　　
第七，什么时候用assert。
1.4新增关键字（语法），用于测试boolean表达式状态，可用于调试程序。使用方法 assert  ，表示如果表达式为真（true）,则下面的语句执行，否则抛出AssertionError。另外的使用方式assert  &#60;  boolean表达式&#62;:，表示如果表达式为真，后面的表达式忽略，否则后面表达式的值用于AssertionError的构建参数。注意编译时要增加-source  1.4 参数，否则报错。]运行时要增加 –ea参数，否则assert行被忽略　　
第八，GC是什么? 为什么要有GC? 　　
GC是垃圾收集的意思（Gabage  Collection）,内存处理是编程人员容易出现问题的地方，忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃，Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的，Java语言没有提供释放已分配内存的显示操作方法。  　　
第九，String s = new String(&#8220;xyz&#8221;);创建了几个String Object?
两个　　
第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12Math.round(-11.5)==-11round方法返回与参数最接近的长整数，参数加1/2后求其floor.　　
第十一，short s1 = 1; s1 = s1 + 1;有什么错?
short s1 [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/10/73.html/feed</wfw:commentRss>
		<slash:comments>169</slash:comments>
		</item>
		<item>
		<title>mysql sql 修改表名 建立外键 修改列名 删除列</title>
		<link>http://blog.painiu.com/2008/09/72.html</link>
		<comments>http://blog.painiu.com/2008/09/72.html#comments</comments>
		<pubDate>Fri, 19 Sep 2008 11:03:17 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[编程技巧]]></category>
		<category><![CDATA[MYSQL]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=72</guid>
		<description><![CDATA[&#8211;重命名表
rename table t_softwareport to software_port;
&#8211;建立外键
alter table software_port add constraint fk_software_port_softwareprocessid foreign key (softwareprocessid)
references software_process (id) on delete restrict on update restrict;
&#8211;删除列
alter table software_type
drop column upid,
drop column orderid;
&#8211;修改列名
alter table software_process change  software_id  softwareid  int(11) not null;
]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/09/72.html/feed</wfw:commentRss>
		<slash:comments>507</slash:comments>
		</item>
		<item>
		<title>apache自带负载均衡的集群功能实战录（mod_proxy模块的应用）</title>
		<link>http://blog.painiu.com/2008/09/70.html</link>
		<comments>http://blog.painiu.com/2008/09/70.html#comments</comments>
		<pubDate>Sun, 14 Sep 2008 20:51:54 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=70</guid>
		<description><![CDATA[下面以在apache mod_proxy下做的反向代理负载均衡为配置实例：在站点www.test.com，我们按提供的内容进行分类，不同的服务器 用于提供不同的内容服务，将http://www.test.com/news的访问转到IP地址为192.168.1.1的内部服务器上处理，对 http: //www.test.com/it的访问转到服务器192.168.1.2上，http://www.test.com/life的访问转 到服务器 192.168.1.3上，http://www.test.com/love的访问转到合作站http://www.love.com上，从 而减轻本apache服务器的负担，达到负载均衡的目的。
首先要确定域名www.test.com在DNS上的记录对应apache服务器接口上具有internet合法注册的IP地址，这样才能使internet上对www.test.com的所有连接请求发送给本台apache服务器。
在本台服务器的apache配置文件httpd.conf中添加如下设置：
proxypass     /news     http://192.168.1.1
proxypass     /it     http://192.168.1.2
proxypass     /life    http://192.168.1.3
proxypass     /live    http://www.live.com
注意，此项设置最好添加在httpd.conf文件“Section 2”以后的位置，服务器192.168.1.1-3也应是具有相应功能的www服务器，在重启服务时，最好用apachectl configtest命令检查一下配置是否有误。
接下来也是我真正想要介绍的2.2版本后在mod_proxy中新添加的mod_proxy_balancer模块给我们带来的新功能。
首先将在主配置文件http.conf以下Module的注释去掉
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
再并增加以下元素
ProxyRequests Off
ProxyPass [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/09/70.html/feed</wfw:commentRss>
		<slash:comments>145</slash:comments>
		</item>
		<item>
		<title>Yahoo！社区架构(转载)</title>
		<link>http://blog.painiu.com/2008/09/69.html</link>
		<comments>http://blog.painiu.com/2008/09/69.html#comments</comments>
		<pubDate>Thu, 04 Sep 2008 09:21:38 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=69</guid>
		<description><![CDATA[旧金山举行的 QCon 会议带给我们很多新鲜的信息。虽然没机会参加，但是看看各个网站&#8221;晒架构&#8221;也是个比较过瘾的事情。请参观并收藏这个页面：Architectures you&#8217;ve always wondered about。
eBay 的架构和去年相比基本是换汤不换药，倒是 Yahoo! 的 Ian Flint(这位老兄是 Bix 的运营总监. Bix 已被雅虎收购) 这个 PPT Yahoo! Communities Architecture: Unlikely Bedfellows  挺有意思，披露了一些鲜为人知的信息。
Yahoo! 社区包括我们比较熟悉的 del.icio.us、Flickr、Yahoo!群组、Yahoo! Mail、Bix等。相当于 Yahoo！把这些属性相近的应用放到一起运营。这个思路倒是和盛大对游戏的运营有些相近。
架构特点
有两点值得注意：1）层次化 2）模块化。这也是大规模作业下的比较经济的途径。
软件架构
首先是操作系统已经从 FreeBSD 逐渐迁移到 RHEL。这怕是雅虎不得已作出来的决定吧。FreeBSD 的开发力量的确不如 Linux，这也是不争的事实。数据库上 MySQL 与 Oracle 都有。Yahoo! 在 DW/BI 用的是 Oracle，构建了一个超大数据库。诸如 yapache、yts(反向代理服务器)、yfor(提供快速失败接管)、 ymon（监控），还有还有ysquid、ypan(cpan的 Yahoo! 克隆) 这些组件都是通过 yinst  来统计部署。关于 Yapache，请参考我以前写的 Yapache-Yahoo! Apache 的秘密
这是 [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/09/69.html/feed</wfw:commentRss>
		<slash:comments>103</slash:comments>
		</item>
		<item>
		<title>网站压力测试工具集</title>
		<link>http://blog.painiu.com/2008/08/68.html</link>
		<comments>http://blog.painiu.com/2008/08/68.html#comments</comments>
		<pubDate>Wed, 27 Aug 2008 05:01:38 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[网站压力测试]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=68</guid>
		<description><![CDATA[工具 相关网址
LoadRunner http://www.mercuryinteractive.com/products/loadrunner/
SilkPerformer http://www.segue.com/products/load-s &#8230; nce-testing/index.asp
QALoad http://www.compuware.com/products/qacenter/qaload.htm
WebLoad
OpenSTA 开源
Jmeter 开源
自动测试工具集
工具 相关网址
WinRunner http://www.mercuryinteractive.com/products/winrunner/
SilkTest http://www.segue.com/products/functio &#8230; l-testing/silktest.asp
QARun http://www.compuware.com/products/qacenter/qarun.htm
SAFS http://safsdev.sourceforge.net/Default.htm
Bug追踪系统
工具 相关网址
JIRA http://www.atlassian.com/software/jira/
Bugzilla http://www.bugzilla.org
TestDirector http://www.mercuryinteractive.com/products/testdirector/
GNATS http://www.gnu.org/software/gnats/
TestTrackPro http://www.seapine.com/ttpro.html
软件测试网站
http://www.51cmm.com
http://www.sqe.com
http://www.qadirect.com
http://www.bonoy.com
http://www.sztest.net
http://www.testage.net
http://www.sqatester.com
http://www.testingfaqs.org
软件测试工具集锦见正文
类型 名称 公司 网址
测试设计工具
ALLPAIRS http://satisfice.com/
Caliber-RBT http://www.tbi.com
Caliber-RM http://www.tbi.com
DARTT http://home.t-online.de/home/bsse.info/
Datatect http://www.datatect.com
DGL http://www.csee.usf.edu/~maurer/
McCabe Test http://www.mccabe.com
McCabe TestCompress http://www.mccabe.com
Multi http://www.testing.com/
Panorama C/C++ http://www.softwareautomation.com
Reactis Tester http://www.reactive-systems.com
TDGEN http://www.soft.com/Products/index.html
T-VEC Test Generation System http://www.t-vec.com
GUI测试驱动器 Android http://www.smith-house.org/open.html
Atesto Functional Testing Service &#8220;http://www.atesto.com/
&#8221;
AutoTester for Windows http://www.autotester.com
AutoTester for [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/08/68.html/feed</wfw:commentRss>
		<slash:comments>2962</slash:comments>
		</item>
		<item>
		<title>MYSQL系统优化与系统设置参数</title>
		<link>http://blog.painiu.com/2008/08/67.html</link>
		<comments>http://blog.painiu.com/2008/08/67.html#comments</comments>
		<pubDate>Tue, 26 Aug 2008 10:23:06 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[编程技巧]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=67</guid>
		<description><![CDATA[MYSQL系统优化与系统设置参数的一次调查
对mysql进行优化意味着适当地分配内存，并让mysqld了解将会承担何种类型的负载。减少磁盘访问的次数。
类似地，确保 MySQL 进程正确操作就意味着它花费在服务查询上的时间要多于花费在处理后台任务（如处理临时磁盘表或打开和关闭文件）上的时间。
记录慢速查询
在一个 SQL 服务器中，数据表都是保存在磁盘上的。索引为服务器提供了一种在表中查找特定数据行的方法，而不用搜索整个表。当必须要搜索整个表时，就称为表扫描。通常 来说，您可能只希望获得表中数据的一个子集，因此全表扫描会浪费大量的磁盘 I/O，因此也就会浪费大量时间。当必须对数据进行连接时，这个问题就更加复杂了，因为必须要对连接两端的多行数据进行比较。
当然，表扫描并不总是会带来问题；有时读取整个表反而会比从中挑选出一部分数据更加有效（服务器进程中查询规划器用来作出这些决定）。如果索引的使用效率 很低，或者根本就不能使用索引，则会减慢查询速度，而且随着服务器上的负载和表大小的增加，这个问题会变得更加显著。执行时间超过给定时间范围的查询就称 为慢速查询。
您可以配置 mysqld 将这些慢速查询记录到适当命名的慢速查询日志中。管理员然后会查看这个日志来帮助他们确定应用程序中有哪些部分需要进一步调查。清单 1 给出了要启用慢速查询日志需要在 my.cnf 中所做的配置。
启用 MySQL 慢速查询日志
[mysqld]
; enable the slow query log, default 10 seconds
log-slow-queries
; log queries taking longer than 5 seconds
long_query_time = 5
; log queries that don&#8217;t use indexes even if they take less than long_query_time
; MySQL 4.1 and newer only
log-queries-not-using-indexes
这三个设置一起使用，可以记录执行时间超过 5 秒和没有使用索引的查询。请注意有关 log-queries-not-using-indexes [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/08/67.html/feed</wfw:commentRss>
		<slash:comments>69</slash:comments>
		</item>
		<item>
		<title>javascript 框架执行elements时间测试</title>
		<link>http://blog.painiu.com/2008/07/66.html</link>
		<comments>http://blog.painiu.com/2008/07/66.html#comments</comments>
		<pubDate>Wed, 23 Jul 2008 19:23:34 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[MOOTOOLS]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=66</guid>
		<description><![CDATA[javascript 框架执行elements时间测试
http://mootools.net/slickspeed/#
]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/66.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>关于邮件群发的经验和技巧</title>
		<link>http://blog.painiu.com/2008/07/65.html</link>
		<comments>http://blog.painiu.com/2008/07/65.html#comments</comments>
		<pubDate>Wed, 23 Jul 2008 07:13:51 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[用户体验]]></category>
		<category><![CDATA[编程技巧]]></category>
		<category><![CDATA[Email]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=65</guid>
		<description><![CDATA[一、关于邮件群发的经验和技巧 
1、强力推荐使用免smtp服务器的群发软件。这种软件将您的电脑虚拟成发信服务器，邮件直接地送至对方的邮箱，可以清楚地知道发送成功的数量，还可以知道邮址不能发送成功的原因。如亿虎Email邮差和WorldCast等。
2、尽量不要使用多smtp服务器的群发软件。多smtp的服务器软件，由于先将邮件发送至smtp服务器进行中转，现在，一般的邮件服务器都做了 设置，如果smtp服务器检测到短时间内来自同一个IP地址的大量连接请求，就会中止转发邮件，从而产生大量退信现象。况且，现在免费的smtp服务器已 经很难找了。
3、建议将邮件地址打乱发送，效果最佳。您可以使用一些电子邮件地址列表筛选和管理软件，如Mail List Management和欧阳邮件列表管家可以轻松实现这一要求。
4、发送信件的时候，建议申请多个hotmail、yahoo等免费信箱作为发送信箱，轮流使用，而将自己常用的信箱作为回复信箱，这样可以避免常 用的信箱受到封锁，从而也可以避免因此产生的大量退信现象。如sohu.com的邮箱，经常使用同一个信箱发送信件的话，服务器会屏蔽您的邮址，从而不能 发送，碰到这种情况，就需要更换发送信箱了。
5、合理使用群发线程。群发线程越多，速度自然越快，但现在很多的服务器自动检测，如163.net、263.net的邮箱，如果线程数使用很多， 服务器马上显示太多的连接请求，拒绝再转发。具体多少线程数为好，用户可以根据自己的电脑进行测试，从而找到最佳的发送线程数，既要保证发送速度快，同时 也要保证最高的成功率，还要保证发送邮件的时候不死机。
6、群发软件的选择使用。由于每一款群发软件在设计时发送参数都略有不同，所以不是每一款群发软件都能发送邮件到任何一个邮箱。如：一款群发软件可 发送邮件至21cn.com、sohu.com、263.net等，但却不能够发送邮件至sina.com、etang.com。而另一款群发软件却可发 送邮件至sina.com、263.net、etang.com、sohu.com等，但它不能发送邮件至21cn.com。这种情况在免SMTP群发软 件中尤为突出。因此，要尽可能全面的群发邮件到不同的邮箱，建议用户使用不同的群发软件，一种软件不能发送成功的邮址，可以导入到另一种群发软件，试试 看。
7、由于网络速度和服务器设置等多方面的原因，发送的时候可能经常会出现服务器连接失败的提示，您可以将这些邮址重新发送一次，很多又可以成功的。
二、关于邮件地址收集的经验和技巧
1、搜集网站邮址软件。通过扫描网页及相关链接方式，不断搜索网页上公布的Email地址。重点推荐亿虎Email扫描大师、Fast Email Spider和商舟邮箱搜集大师。这些软件对收集行业邮件地址比较有用。建议您先收集一些行业网站的网址，然后利用这些软件搜索这些网站，可以得到大量活 跃程度比较高的邮址。
2、搜索服务器邮址软件。利用字典文件直接从邮件服务器收集邮址，重点推荐邮件地址探索者和伊妹捕神，本站已经整理了一份比较全面的中国邮件服务器和国际邮件服务器的清单以及字典文件，如果您觉得本站提供的邮址不够，可以利用这种搜索软件自行搜索服务器邮址。
3、搜索硬盘、光盘邮址软件。快速搜索电脑硬盘、光盘、软盘中的文本文件、网页文件及*.eml格式文件中的电子邮件地址，重点推荐：小不点 Email地址提取大师和科蓝邮件地址搜寻工具。基于这种软件的用途，您还可以利用teleport等网站下载软件将那些供求信息BBS信息，“拉回”到 自己的电脑，然后用这种软件进行搜索邮址，可以得到大量的有效Email地址。
三、关于邮件地址和管理和验证
1、邮址管理软件。电子邮件地址列表筛选和管理软件，可以帮助客户管理好自己的电子邮件列表，避免发送大量重复垃圾邮件， 重点推荐：Mail List Management(MLM)和欧阳邮件列表管家。MLM软件是我们使用过的邮址管理软件中功能最强，速度最快的软件，100万的邮址几分钟就可以完成 过滤重复邮址、重新排序等。欧阳邮件列表管家则可以快速将一个很大的邮址文件分割成较小的文件，以方便群发。
2、邮址验证软件。采用模拟向被校验邮箱发信，而实际上又并没有发出的方式来对检查邮件地址的存在与否，重点推荐： Advanced Email Verifier和Advanced Maillist Verify。我们在实际使用中发现，很多验证有效的邮址，在群发的时候就是不能发送成功，这是由于邮件服务器设置的原因，所以，如果您需要建立一个自己 的高效率的邮址列表，可以直接使用免smtp服务器的软件导入邮址群发，将那些发送成功的邮址保存下来以便今后使用。
四、关于信息发布软件
由于现在对邮件发送的越来越多的限制，群发邮件很容易产生“垃圾邮件”，很多的人采用供求信息BBS进行推广。这样的软件现在也很多，比较有名的如 商务快车、环球商务信息发布系统、营销之星和网际营销等等。这些软件可以将您的信息发布至国内外上千个BBS站点或者新闻组。但这些软件相对比较贵。
]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/65.html/feed</wfw:commentRss>
		<slash:comments>1268</slash:comments>
		</item>
		<item>
		<title>Flickr照片搜索器</title>
		<link>http://blog.painiu.com/2008/07/64.html</link>
		<comments>http://blog.painiu.com/2008/07/64.html#comments</comments>
		<pubDate>Tue, 22 Jul 2008 02:22:10 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Widget插件]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[照片搜索器]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=64</guid>
		<description><![CDATA[好久在工作需要写了一个利用flickr api 写一个照片搜索器,网址:http://bbs.325206.com/pear/test.php
]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/64.html/feed</wfw:commentRss>
		<slash:comments>1256</slash:comments>
		</item>
		<item>
		<title>Apache2.2 configure &#8211; 编译配置帮助中文</title>
		<link>http://blog.painiu.com/2008/07/63.html</link>
		<comments>http://blog.painiu.com/2008/07/63.html#comments</comments>
		<pubDate>Fri, 18 Jul 2008 04:24:20 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/2008/07/18/63/</guid>
		<description><![CDATA[`configure&#8217; configures this package to adapt to many kinds of systems.
`configure&#8217; 配置这个包来适合多数系统.
Usage: ./configure [OPTION]&#8230; [VAR=VALUE]&#8230;
语法: ./configure [选项]&#8230; [变量=值]&#8230;
To assign environment variables (e.g., CC, CFLAGS&#8230;), specify them as VAR=VALUE.  See below for descriptions of some of the useful variables.
配置环境变量(例如,CC,CFLAGS),格式为VAR=VALUE. 看下面对这些可用变量的说明.
Defaults for the options are specified in brackets.
选项的默认值括在方括号之中.
Configuration:
配置:
-h, &#8211;help        [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/63.html/feed</wfw:commentRss>
		<slash:comments>1750</slash:comments>
		</item>
		<item>
		<title>Yupoo相册插件 phpwind UTF8版本</title>
		<link>http://blog.painiu.com/2008/07/60.html</link>
		<comments>http://blog.painiu.com/2008/07/60.html#comments</comments>
		<pubDate>Wed, 16 Jul 2008 11:04:59 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Widget插件]]></category>
		<category><![CDATA[phpwind]]></category>
		<category><![CDATA[yupoo]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=60</guid>
		<description><![CDATA[————–安装配置开始—————-
安装说明:
首先访问 http://www.yupoo.com 申请一个站长自己的api key
申请过程见图( yupoo申请api_step_x.jpg )
1.解压插件到hack文件夹下面，使目录保持 hack\pw_yupoo\
2. 编辑 hack\pw_yupoo\config.php
根据申请api最后一步获得的api key 和 secretKey 配置config.php文件
$apiKey=”b40a95b25e0451b8aa0120f5xxxxx”;
$secretKey=”gv8lthgvpjexxxx”;
3.修改( \js\wind_c_editor.js )[注意:下面有两个参数因虚拟主机服务器目录修改IMGDIR和HackDIR]
将如下代码复制这个文件最末尾(横线之间的代码):
———————————————-
function $(id) {
return document.getElementById(id);
}
function _attachEvent(obj, evt, func) {
if(obj.addEventListener) {
obj.addEventListener(evt, func, false);
} else if(obj.attachEvent) {
obj.attachEvent(”on” + evt, func);
}
}
function doane(event) {
e = event ? event : window.event;
if(is_ie) {
e.returnValue = false;
e.cancelBubble = true;
} else if(e) {
e.stopPropagation();
e.preventDefault();
}
}
var hiddenobj = new Array();
var pmwinposition = new Array();
function [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/60.html/feed</wfw:commentRss>
		<slash:comments>241</slash:comments>
		</item>
		<item>
		<title>Yupoo相册插件 phpwind gbk版本</title>
		<link>http://blog.painiu.com/2008/07/58.html</link>
		<comments>http://blog.painiu.com/2008/07/58.html#comments</comments>
		<pubDate>Wed, 16 Jul 2008 10:52:21 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Widget插件]]></category>
		<category><![CDATA[phpwind]]></category>
		<category><![CDATA[yupoo]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/2008/07/16/58/</guid>
		<description><![CDATA[&#8212;&#8212;&#8212;&#8212;&#8211;安装配置开始&#8212;&#8212;&#8212;&#8212;&#8212;-
安装说明:
首先访问 http://www.yupoo.com 申请一个站长自己的api key
申请过程见图( yupoo申请api_step_x.jpg )
1.解压插件到hack文件夹下面，使目录保持 hack\pw_yupoo\
2. 编辑 hack\pw_yupoo\config.php
根据申请api最后一步获得的api key 和 secretKey 配置config.php文件
$apiKey=&#8221;b40a95b25e0451b8aa0120f5xxxxx&#8221;;
$secretKey=&#8221;gv8lthgvpjexxxx&#8221;;
3.修改( \js\wind_c_editor.js )[注意:下面有两个参数因虚拟主机服务器目录修改IMGDIR和HackDIR]
将如下代码复制这个文件最末尾(横线之间的代码):
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
 function $(id) {
return document.getElementById(id);
}
function _attachEvent(obj, evt, func) {
if(obj.addEventListener) {
obj.addEventListener(evt, func, false);
} else if(obj.attachEvent) {
obj.attachEvent(&#8220;on&#8221; + evt, func);
}
}
function doane(event) {
e = event ? event : window.event;
if(is_ie) {
e.returnValue = false;
e.cancelBubble = true;
} else if(e) {
e.stopPropagation();
e.preventDefault();
}
}
var hiddenobj = new Array();
var pmwinposition = new [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/58.html/feed</wfw:commentRss>
		<slash:comments>281</slash:comments>
		</item>
		<item>
		<title>端口对照表</title>
		<link>http://blog.painiu.com/2008/07/57.html</link>
		<comments>http://blog.painiu.com/2008/07/57.html#comments</comments>
		<pubDate>Wed, 16 Jul 2008 10:49:48 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[端口对照表]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/2008/07/16/57/</guid>
		<description><![CDATA[端口对照表
http ======&#62; port 80 (Hyper Text Transfer Protocol)
ftp-data ==&#62; port 20 (File Transfer Protocol &#8211; Default Data)
ftp =======&#62; port 21 (File Transfer Protocol &#8211; Control)
POP3 ======&#62; port 110 (Post Office Protocol version 3)
SMTP ======&#62; port 25 (Simple Mail Transfer Protocol)
NNTP ======&#62; port 119 (Network News Transfer Protocol)
telnet ====&#62; port 23 (Telnet)
Gopher ====&#62; port 70 (Gopher)
IRC [...]]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/57.html/feed</wfw:commentRss>
		<slash:comments>180</slash:comments>
		</item>
		<item>
		<title>Yupoo相册插件 for Netvibes</title>
		<link>http://blog.painiu.com/2008/07/56.html</link>
		<comments>http://blog.painiu.com/2008/07/56.html#comments</comments>
		<pubDate>Sun, 13 Jul 2008 15:33:36 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Widget插件]]></category>
		<category><![CDATA[netvibes]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[Yupoo相册插件]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=56</guid>
		<description><![CDATA[安装事项:
其实安装很简单只需一个链接到netvibes,安装平时安装widget 步骤就可以&#8230;
我想跟你分享这个 Netvibes 的模块。想要加到你的页面请按下这个连结。
 
点击以下连接安装上述组件:
安装 UWA
 
]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/56.html/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>tar打包一个目录时，去掉其中的几个子目录</title>
		<link>http://blog.painiu.com/2008/07/55.html</link>
		<comments>http://blog.painiu.com/2008/07/55.html#comments</comments>
		<pubDate>Wed, 09 Jul 2008 06:03:56 +0000</pubDate>
		<dc:creator>数字人</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[编程技巧]]></category>

		<guid isPermaLink="false">http://blog.painiu.com/?p=55</guid>
		<description><![CDATA[tar cvfz chenxu.tar.gz dir &#8211;exclude dir/dir1 &#8211;exclude dir/dir2/dir3 可以陆续添加, 注意添加排队目录时不要加“/”根符号
]]></description>
		<wfw:commentRss>http://blog.painiu.com/2008/07/55.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
