<?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>寂静的深海 &#187; 代码</title>
	<atom:link href="http://www.deepseath.com/?feed=rss2&#038;tag=%E4%BB%A3%E7%A0%81" rel="self" type="application/rss+xml" />
	<link>http://www.deepseath.com</link>
	<description></description>
	<lastBuildDate>Mon, 29 Jan 2024 09:55:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>MySQL5.0升级到5.5</title>
		<link>http://www.deepseath.com/?p=1056</link>
		<comments>http://www.deepseath.com/?p=1056#comments</comments>
		<pubDate>Wed, 08 Feb 2012 15:43:27 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[日积月累]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[升级]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=1056</guid>
		<description><![CDATA[服务器又出故障了，这次比较彻底——系统文件丢失:( 不得已重做了系统。 趁着这个重做系统，决定将MySQL自5.0升级到5.5。 先是安装MySQL，然后，配置my.ini，如果没特别需求的话，可以使用默认的就行，日后运行起来再根据具体情况进行优化。 关闭MySQL5.5。 将MySQL5.5默认安装的数据表进行备份（避免万一），然后将MySQL5.0的全部数据库文件直接Copy到MySQL5.5的数据库储存目录内。 此时如果你启动MySQL的话可能会看到类似 mysql.user has no `Event_priv` column at position 29 的错误（由于本文是在操作之后写的，具体的报错代码记的不是很清楚了……） 这是由于数据文件是MySQL5.0的，与标准的MySQL5.5数据文件格式不符，此时需要对数据进行升级操作。 先启动MySQL5.5 执行： mysql_upgrade 可能会有一些警告信息，可以忽略。 现在数据文件就升级完毕了，如果不太放心的话，可以执行： mysqlcheck -u root -p --databases [数据库名] 或者 mysqlcheck -u root -p --all-databases 检查具体的数据库文件状态。反正我全部执行了一下，没发现什么问题，MySQL5.5升级完毕^_^]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=1056</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP的json数据编译和解译，字符编码无关。</title>
		<link>http://www.deepseath.com/?p=1016</link>
		<comments>http://www.deepseath.com/?p=1016#comments</comments>
		<pubDate>Fri, 11 Nov 2011 03:23:48 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[实验室]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[中文]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=1016</guid>
		<description><![CDATA[这里只就PHP5.2.0+以上版本而言，因为JSON扩展是自PHP5.2.0才开始引入的。早期版本没有默认引入。 json现在应用比较广泛，主要是由于ajax技术的原因。json可以很方便的传输具有属性的数据格式，方便前端进行解析处理，更好的将数据流量传输降低并且也能使前后端尽可能的分离。 貌似自06年开始我在做的项目如果客户不强烈要求的情况下，我都会使用UTF-8进行编码开发，UTF-8开发会有很多好处，比如前、后端数据传输很方便无须额外的编码开销，另外储存的字符也比较直观，虽然有数据容量的浪费，但在目前储存如白菜价的环境下，容量问题应该不大。 在使用UTF-8编码的时候，json_encode/json_decode可以很方便的处理（虽然编译后的数据中的中文看起来很怪异，但因为也不需要直接使用数据所以也无所谓），因为PHP自带的json扩展库只支持UTF-8编码。 但有的时候客户强烈选择使用GBK/GB2312进行编码的情况下，自带的json就应付不了了。所有涉及到中文的经过编译后会变成null。 在不考虑使用第三方的扩展或者其他类库处理的情况，可以自己写一个变形函数来处理。 原理其实就是将数据的字符进行编码，比如使用rawurlencode()、urlencode()或者base64_encode()等函数进行编码，然后输出的时候再进行解码。 当然了，也可以用另一种途径，就是直接将数据字符进行编码转换，统一转换为UTF-8，然后使用json扩展函数进行处理，不过，这样处理可能会有一些意外发生（比如字符编码错误），另外，程序内的几个字符编码间来回转换看起来也不太好。 我处理的时候，利用urlencode进行编码（其实也可以使用rawurlencode()或base64_encode()，不过base64编码容量会比较大一些）。一般就是重写几个函数：json_encode()、json_decode()、ulrencode()、urldecode()。 首先要重写一下urlencode()和urldecode()，因为php自带的这两个函数只能对字符串进行处理，对于数组无法处理。而我们大多情况下其实就是处理数组。 其次要重写json_encode()和json_decode()，主要是将字符串编码进行还原，其实如果是js需要的话，可以不用重写。 主要代码： function djson_encode($data){ //重写json_encode，将数据使用urlencode进行编码 return json_encode(durlencode($data)); } function djson_decode($data){ $data = json_decode($data,true); $out = array(); foreach ( $data AS $key=&#62;$value ) { $out[durldecode($key)] = durldecode($value); } return $out; } function durldecode($string){ if ( is_array($string) ) { $array = array(); foreach ( $string AS $key=&#62;$value [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=1016</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于SQL注入的监测</title>
		<link>http://www.deepseath.com/?p=977</link>
		<comments>http://www.deepseath.com/?p=977#comments</comments>
		<pubDate>Mon, 26 Sep 2011 15:55:50 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[程序人生]]></category>
		<category><![CDATA[Discuz]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[思路]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=977</guid>
		<description><![CDATA[网站被挂马，有一个方式就是对某个帐号进行提权操作，比如针对非管理用户提权至最高管理员的权限。 事后可以发现被提权的用户帐号，但检查经由哪个文件注入的是个麻烦的事情，特别是针对开源的文件结构比较复杂的程序来说。 以前有个思路，一直未实现，今天处理了一个，是针对Discuz!5.5（很老的一个版本了^^）的，处理思路就是事后诸葛亮。 对于此类的提权操作，其根本原因就是通过SQL去变更待提权的帐号的管理标识，如果程序对于涉及变更帐号权限的SQL查询都能有一个记录的话，这样日后一旦发现有未知的提权操作的时候便会相对容易的发现注入口是什么，大体也能进行应对处理，总比盲目的去查找注入文件要容易一些，当然，这个其实只是“事后诸葛亮”的做法，并不是根本的防御措施，真正想要防御其实还是程序开发的时候多考虑一些，比如，外部的输入要验证数据类型、进行字符转义等等，这不在本文讨论范围。 就Discuz!而言，所有的SQL操作都是经由数据类层进行操作的，这样就提供了一个比较方便的方式，我们可以在数据查询方法中加入一个判断，判断当前进行的操作是否是在更新用户表的权限字段，如果是，则记录下来相关的信息并保存到日志文件内，方便日后查询处理，针对Discuz!5.5我是按照如下的方式处理的，其实其他版本的Discuz!或者Discuz!X乃至其他类似的程序都可以利用这样的方式进行。 针对Discuz!5.5代码如下： &#60;?php /* @ By Deepseath 2011-09-26 @ 记录用户管理权限发生变动时的相关信息 */ if ( preg_match('/UPDATE\s+[`]*'.$GLOBALS['tablepre'].'members[`]*\s+SET(.+)/is',$sql,$match) &#38;amp;&#38;amp; preg_match('/[`]*\s*adminid[`]*\s*=\s*/is',$match[1],$m) ) { //判断当前执行语句是否为members表包含adminid的更新 $sql_md5 = md5($sql);//唯一查询md5值 $logfile = DISCUZ_ROOT.'./forumdata/log_adminid/'.$sql_md5.'.log';//日志储存的文件 if ( !file_exists($logfile) &#124;&#124; time() - filemtime($logfile) &#38;gt; 1800 ) { //如果查询日志文件不存在或者日志文件距离当前时间超过1800秒，则记录查询日志 if ( !is_dir(DISCUZ_ROOT.'./forumdata/log_adminid/') ) { //日志目录不存在则创建 @mkdir(DISCUZ_ROOT.'./forumdata/log_adminid/',0777,true); } if ( $fp = @fopen($logfile,'ab') ) [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=977</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP的Snoopy.class.php</title>
		<link>http://www.deepseath.com/?p=884</link>
		<comments>http://www.deepseath.com/?p=884#comments</comments>
		<pubDate>Wed, 17 Aug 2011 08:01:11 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[程序人生]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTP协议]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snoopy]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=884</guid>
		<description><![CDATA[使用PHP读取HTTP页面基本使用Snoopy，使用简单方便易用。 最近在使用过程中发现一些问题，读取某些服务器的时候会发现获取不到页面内容。 留意Snoopy的Header请求头的时候发现，对于HOST请求是类似 HOST: hostname:port 看代码，只要端口存在，就使用该方式发送请求。 但观察浏览器请求时发现如果端口为80的时候，会省略掉端口号。 按这个方式改造一下Snoopy的代码，加入判断端口号，如果端口号为80的情况下，则直接使用 HOST: hostname 否则使用 HOST: hostname:port 这样改写代码后上面的问题就解决了。 问题的原因不太清楚，呵呵，对于HTTP协议始终就是模棱两可一知半解，实用至上主义，问题解决就不管了。 另外，还有一个问题就是，自官方下载到的Snoopy.class.php的编码问题，这个文件使用的是“阿拉伯语（Windows）”进行编码的，至少在这个编码下查看没有乱码。 为了方便日后改写代码，我是利用阿拉伯语（Windows）打开，然后Copy无乱码的代码另存为UTF-8编码，方便日后更改处理。]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=884</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用fastcgi_finish_request提高页面响应速度</title>
		<link>http://www.deepseath.com/?p=851</link>
		<comments>http://www.deepseath.com/?p=851#comments</comments>
		<pubDate>Wed, 13 Apr 2011 16:23:27 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[日积月累]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[服务]]></category>
		<category><![CDATA[转载]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=851</guid>
		<description><![CDATA[当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法. 听起来可能有些茫然,我们通过几个例子来说明一下： &#60;?php echo '例子：'; fastcgi_finish_request(); /* 响应完成, 关闭连接 */ /* 记录日志 */ file_put_contents('log.txt', '生存还是毁灭,这是个问题.'); ?&#62; 通过浏览器访问此脚本, 结果发现并没有输出相应的字符串,但却生成了相应的文件.由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行！ 合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子： &#60;?php echo '例子：'; file_put_contents('log.txt', date('Y-m-d H:i:s') . &#34; 上传视频\n&#34;, FILE_APPEND); fastcgi_finish_request(); sleep(1); file_put_contents('log.txt', date('Y-m-d H:i:s') . &#34; 转换格式\n&#34;, FILE_APPEND); sleep(1); file_put_contents('log.txt', date('Y-m-d H:i:s') . &#34; 提取图片\n&#34;, FILE_APPEND); ?&#62; 代码里用sleep模拟一些耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志. 末了给您提个醒,Yahoo在Best Practices for Speeding Up Your [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=851</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>触摸计算机10年纪念</title>
		<link>http://www.deepseath.com/?p=775</link>
		<comments>http://www.deepseath.com/?p=775#comments</comments>
		<pubDate>Sat, 11 Sep 2010 12:59:51 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[心情日记]]></category>
		<category><![CDATA[FrontPage]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[动画]]></category>
		<category><![CDATA[成长]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[网络]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=775</guid>
		<description><![CDATA[今天是俺接触计算机、接触网络的整整第10年。2000年9月11日，俺第一次接触计算机接触网络，那个时候的自己笨笨的看着花花绿绿的屏幕，无论如何都想象不到未来的日子，会靠这个小东西来维持生计^_^ 始终觉得做一份工作可能首先是兴趣。 虽然当时未觉得，但现在回想起来，在我第一次接触计算机的时候就已经注定是靠他作为日后生计的工具了。最值得回味的是，记得刚开始接触的时候就被这个“聪明”的东西吸引了，踅摸着，这玩意儿为啥这么厉害？我能不能弄一弄呢？当时，买机器对于家境不是特别好的我来说几乎就是奢侈，所以大部分时间都用在学校机房里面了，学校机房速度慢但花费非常低，不过后来有一些限制了，就跑去学校附近的网吧，由于网吧平时上网相对贵，所以大多数我都选择通宵——“包宿”，跟寝室几个同学一起去，从晚上10点多左右到第二天早上7点左右，印象中好像是8元钱，别人一般是聊天或者玩游戏，我始终着迷于花花绿绿变来变去的网页，然后就想着法的琢磨，因为专业与计算机无关，加之也没有什么学习的途径，所以刚开始着实比较费劲，后来偶然发现浏览器居然有“源文件”，哈哈，这个东东很好，照葫芦画瓢，在记事本写代码，然后运行，看着表格变色、变换觉得特有成就感，后来知道了office了解了还有个做网页的工具FrontPage，写起来就更方便了，再后来突然发现还有能做动画的东东——Flash，像模像样的鼓捣起来竟也能做出当时觉得特有感觉的MTV，呵呵…… 整整十年，想想都觉得有意思，想要写写其中的过程，却又发觉好像是流水帐，算了，不写了。 只觉得时间过得非常非常快，快的连自己都不敢相信…… 路永远都是在前方，过去只是一个回忆，无论好与坏、得与失，都是值得未来做为谈资的素材。 10年纪念给自己纪念一下，虽然未达到曾经自己梦想的高度，却也觉得是个时间点，期待下个十年的今天会是我值得炫耀的日子^_^]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=775</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery处理同级事物的一个方式</title>
		<link>http://www.deepseath.com/?p=772</link>
		<comments>http://www.deepseath.com/?p=772#comments</comments>
		<pubDate>Fri, 10 Sep 2010 07:00:28 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[实验室]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=772</guid>
		<description><![CDATA[呵呵，标题有点绕，不知道这样表达是否达意。其实就是同类型（级别）的事件触发的判断处理而已，还搞不明白？-_-!我的表达有问题，那就看下面的代码吧： &#60;table&#62; &#60;tr id="data_3"&#62; &#60;td&#62;row1&#60;/td&#62; &#60;td&#62;Row2&#60;/td&#62; &#60;td&#62;&#60;button type="button" class="_operation"&#62;编辑&#60;span class="is_hidden"&#62;(e)&#60;/span&#62;&#60;/button&#62; &#60;button type="button" class="_operation"&#62;删除&#60;span class="is_hidden"&#62;(d)&#60;/span&#62;&#60;/button&#62;&#60;/td&#62; &#60;/tr&#62; &#60;tr id="data_10"&#62; &#60;td&#62;row2&#60;/td&#62; &#60;td&#62;Row2&#60;/td&#62; &#60;td&#62;&#60;button type="button" class="_operation"&#62;编辑&#60;span class="is_hidden"&#62;(e)&#60;/span&#62;&#60;/button&#62; &#60;button type="button" class="_operation"&#62;删除&#60;span class="is_hidden"&#62;(d)&#60;/span&#62;&#60;/button&#62;&#60;/td&#62; &#60;/tr&#62; &#60;/table&#62; 要处理上面的每行数据的“编辑”和“删除”按钮。我通过下面的jQuery处理： /*&#60;![CDATA[*/ $(function(){ $('._operation').live('click',function(){ var    str_op    =    (($(this).text()).match(/\((e&#124;d)\)/i)); var    op        =    str_op[1]; var    pObj    =   [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=772</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>更换了博客的风格</title>
		<link>http://www.deepseath.com/?p=749</link>
		<comments>http://www.deepseath.com/?p=749#comments</comments>
		<pubDate>Tue, 27 Jul 2010 16:06:34 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[心情日记]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[插件]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=749</guid>
		<description><![CDATA[总想换个风格，但一直很懒，今天想好好休息一下，无聊中在一个网站看到一款主题还不错，就给安装上了。没做什么太大的修改——太懒。 另外因为时常 要发一些代码，因此终于安装了Syntax Highlighter and Code Colorizer for WordPress插件，现在页面的代码会好看一点点了。以前也安装过但觉得使用很麻烦，不过总看着那些乱乱的代码也挺闹心的，还是决定安装这款插件了。只是去掉了一些不常用到的语言。 安装这款风格也是因为原来的风格使用Syntax Highlighter and Code Colorizer for WordPress插件 的时候会有一些怪怪的显示问题，代码很乱。 新风格看起来还不错，先对付着吧，改天看到好看的再换，自己真的实在太懒了，不愿意动手做@_@]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=749</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>页面嵌入JavaScript脚本的URL“and”符号</title>
		<link>http://www.deepseath.com/?p=599</link>
		<comments>http://www.deepseath.com/?p=599#comments</comments>
		<pubDate>Mon, 08 Feb 2010 12:38:18 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[程序人生]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=599</guid>
		<description><![CDATA[在HTML页面中嵌入JavaScript脚本代码，如果代码内包含一些URL中的“and”符号（&#38;），或者包含HTML元符号（用于输出结构的），如果不对javascript代码区进行注释声明处理，那么就不符合W3C标准当然也就不能通过w3c检测。 比如： &#60;script type="text/javascript"&#62; var test='http://www.foudang.com/tag/?tag=%E5%81%87%E8%B4%A7&#38;p=2'; &#60;/script&#62; 是不可以的，但如果将 &#38; 替换为 &#38;amp; 是可以通过w3c验证的，不过，由于javascript处理URL会将&#38;认为是变量的间隔符，如果改为 &#38;amp; 那么实际上面的URL将会被处理为tag=xxx 和 amp;p=2。 这个时候可以使用注释声明： &#60;script type="text/javascript"&#62; /* &#60;![CDATA[ */ var test='http://www.foudang.com/tag/?tag=%E5%81%87%E8%B4%A7&#38;p=2'; /* ]]&#62; */ &#60;/script&#62; 或者： &#60;script type="text/javascript"&#62; //&#60;![CDATA[ var test='http://www.foudang.com/tag/?tag=%E5%81%87%E8%B4%A7&#38;p=2'; //]]&#62; &#60;/script&#62; 都可以。 PS：事实上，我之前也有过“另类”的一种解决方法，对于HTML标签字符，我写到外部的js文件内；对于URL我就使用一个函数去构造，用起来也倒很方便，但现在看来有点弱智，呵呵。因为很早之前刚接触W3C的时候一味追求通过验证，根本没仔细研究过，为了标准而标准来着，这是很不好的一个方式……]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=599</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>看到一个人的博客想写的……</title>
		<link>http://www.deepseath.com/?p=581</link>
		<comments>http://www.deepseath.com/?p=581#comments</comments>
		<pubDate>Tue, 19 Jan 2010 14:34:25 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[程序人生]]></category>
		<category><![CDATA[Function]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=581</guid>
		<description><![CDATA[先说一段引子吧，我特喜欢用Opera，虽然还有一些不尽如人意的地方，但越来越喜欢上这个浏览器了。最爱用的功能就是RSS（Opera叫做网摘订阅功能），我订阅了n多的RSS列表，呵呵，大多数都是技术类的，毕竟现在信息量太大找也不好找，而且有的时候忙着也没空满网络乱翻，订阅这个时不时阅读一下挺好的^_^ 话说，今儿读到一篇来自博客园的某位PHPer看样子应该是新注册博客园的，发了个博文具体名字不写了，反正是关于求3值最大数的函数的，不知道是自己写的还是转载的，反正函数是： function sum_3($a,$b,$c){ $a&#62;$b?$max=$a:$max=$b; return $max&#62;$c?$max:$c; } 虽然是小函数，可这样的写法实在…… 为什么不这样写？ function sum_3($a,$b,$c){ return max($a,$b,$c); } 即便不用内置的max函数，也可以这样： function sum_3($a,$b,$c){ return $c &#62;= ($tmp = ($a &#62;= $b) ? $a : $b) ? $c : $tmp; } 就我自身能力而言，就写代码来说，个人倾向于，尽最大可能使用内置函数避免走弯路也避免出bug。 闲来无事胡诌一番，实在是此人的博客无法评论，不吐不快于是自己发泄到自己的博客上来了，呵呵~~~]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=581</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>五种开源协议的比较和说明</title>
		<link>http://www.deepseath.com/?p=546</link>
		<comments>http://www.deepseath.com/?p=546#comments</comments>
		<pubDate>Sat, 19 Dec 2009 10:57:36 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[网络文摘]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[开源协议]]></category>
		<category><![CDATA[版权]]></category>
		<category><![CDATA[知识]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=546</guid>
		<description><![CDATA[为了节省开发周期，大多都会选择一些开源的框架或者工具，涉及到好多好多，比如编辑器CKEditor（原来叫FCKeditor）就是使用GPL, LGPL and MPL协议，而经常用到的jQuery却是GPL和MIT。长久来除了对BSD了解外其他的确有点模棱两可，看到一篇文章介绍几种开源协议的说明感觉不错，摘下来留着学习…… BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”，可以自由的使用，修改源代码，也可以将修改后的代码作为开源或者专有软件再发布。 但”为所欲为”的前提当你发布使用了BSD协议的代码，或则以BSD协议代码为基础做二次开发自己的产品时，需要满足三个条件： 如果再发布的产品中包含源代码，则在源代码中必须带有原来代码中的BSD协议。 如果再发布的只是二进制类库/软件，则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。 BSD 代码鼓励代码共享，但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码，也允许使用或在BSD代码上开发商业软件发布和销售，因此是对 商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议，因为可以完全控制这些第三方的代码，在必要的时候可以修改或者二次开发。 Apache Licence 2.0 Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似，同样鼓励代码共享和尊重原作者的著作权，同样允许代码修改，再发布（作为开源或商业软件）。需要满足的条件也和BSD类似： 需要给代码的用户一份Apache Licence 如果你修改了代码，需要再被修改的文件中说明。 在延伸的代码中（修改和有源代码衍生的代码中）需要带有原来代码中的协议，商标，专利声明和其他原来作者规定需要包含的说明。 如果再发布的产品中包含一个Notice文件，则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可，但不可以表现为对Apache Licence构成更改。 Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。 GPL 我们很熟悉的Linux就是采用了GPL。GPL协议和BSD， Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用，但不允许修改后和衍生的代 码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux，包括商业公司的linux和linux上各种各样的由个人，组织，以及商 业软件公司开发的免费软件了。 GPL协议的主要内容是只要在一个软件中使用（”使用”指类库引用，修改后的代码或者衍生代码）GPL 协议的产品，则该软件产品必须也采用GPL协议，既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题， 还可以享受免费的优势。 由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议，对于使用GPL协议的开源代码，商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。 其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。 LGPL LGPL 是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用（link）方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并 发布和销售。 但是如果修改LGPL协议的代码或者衍生，则所有修改的代码，涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因 此LGPL协议的开源 代码很适合作为第三方类库被商业软件引用，但不适合希望以LGPL协议代码为基础，通过修改和衍生的方式做二次开发的商业软件采用。 GPL/LGPL都保障原作者的知识产权，避免有人利用开源代码复制并开发类似的产品。 MIT MIT是和BSD一样宽范的许可协议，作者只想保留版权，而无任何其他了限制。也就是说，你必须在你的发行版里包含原许可协议的声明，无论你是以二进制发布的还是以源代码发布的。]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=546</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>常用HTTP状态代码和解释说明</title>
		<link>http://www.deepseath.com/?p=529</link>
		<comments>http://www.deepseath.com/?p=529#comments</comments>
		<pubDate>Thu, 28 May 2009 05:48:07 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[日积月累]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[服务]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=529</guid>
		<description><![CDATA[来自 Google 的一篇帮助内容，略有修改。 如果向您的服务器发出了某项请求要求显示您网站上的某个网页，那么，您的服务器会返回 HTTP 状态代码以响应该请求。此状态代码提供了有关请求状态的信息，且为请求方提供了有关您网站和请求的网页的信息。 一些常见的状态代码为： 200 &#8211; 服务器成功返回网页 404 &#8211; 请求的网页不存在 503 &#8211; 服务器暂时不可用 以下提供了 HTTP 状态代码的完整列表。点击链接可了解详细信息。您也可以访问有关 HTTP 状态代码的 W3C 页来了解详细信息。 1xx（临时响应） 用于表示临时响应并需要请求者执行操作才能继续的状态代码。 代码 说明 100（继续） 请求者应当继续提出请求。服务器返回此代码则意味着，服务器已收到了请求的第一部分，现正在等待接收其余部分。 101（切换协议） 请求者已要求服务器切换协议，服务器已确认并准备进行切换。 2xx（成功） 用于表示服务器已成功处理了请求的状态代码。 代码 说明 200（成功） 服务器已成功处理了请求。通常，这表示服务器提供了请求的网页。 201（已创建） 请求成功且服务器已创建了新的资源。 202（已接受） 服务器已接受了请求，但尚未对其进行处理。 203（非授权信息） 服务器已成功处理了请求，但返回了可能来自另一来源的信息。 204（无内容） 服务器成功处理了请求，但未返回任何内容。 205（重置内容） 服务器成功处理了请求，但未返回任何内容。与 204 响应不同，此响应要求请求者重置文档视图（例如清除表单内容以输入新内容）。 206（部分内容） 服务器成功处理了部分 GET 请求。 3xx（已重定向） 要完成请求，您需要进一步进行操作。通常，这些状态代码是永远重定向的。Google [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=529</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>五.一快乐！</title>
		<link>http://www.deepseath.com/?p=469</link>
		<comments>http://www.deepseath.com/?p=469#comments</comments>
		<pubDate>Thu, 30 Apr 2009 11:37:41 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[心情日记]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[北京]]></category>
		<category><![CDATA[天津]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[电影]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=469</guid>
		<description><![CDATA[又到五.一节了，似乎放假与我无关，所以对这天也没什么太大的企盼，这两年已经慢慢习惯了。天天都是放假、天天都是工作日，虽然不喜欢某些外来词，不过对于“宅”似乎还是有点中意，哈哈。因为我现在发现我就比较宅。没什么事的时候甚至两、三个月都不会下楼（当然排除有时候扔垃圾、到报箱取报纸什么的）。很多时候，习惯了一个人静静坐在电脑前对着满屏幕红绿蓝相间的代码，然后沉思于开发的思路。偶尔也会烦也会很累，然后就会看看电影，玩玩小游戏，要不就鼓捣点什么新鲜玩意儿，我不是个能承受压力的人，但绝对是一个会释放压力的，否则，楼下的石板路早就被我从6楼上踩成血肉模糊多少次啦，哈哈。 看着刚刚完成的小项目，觉得很欣慰，虽然试验的性质比较多一些，不过目前一切良好，自己定下了一个时间，那就是以三个月为期限，应该会迈上一个新台阶的。马上继续开发新的东西，暂时不想公开^_^ 明天也许能放松一下，哈哈，看球赛。这样的半工作半休息日子很多时候其实很适合看球赛，虽然现在不像以前那么能熬夜看了，不过一般的比赛能赶上的，不太晚的，都会去看。明天是中超第七轮，因为亚冠的原因，所以提前开赛。有两场重头戏，一个是天津泰达主场迎战来访的山东鲁能，另一场是北京国安主场面对作客的上海申花，这是０８年中超四强参加亚冠下轮比赛前的一次的碰撞。媒体说会比较好看，不过，个人觉得未必会好看，呵呵。主要是四队都有双线作战的疲惫，而且除了山东鲁能外的其他三支球队，都多少有些各种问题。无论如何，作为客居在天津的东北人，还是比较支持天津泰达的，希望他们能触底反弹，重新找回赛季开始时的威猛！！ 五.一期间打算再次调整作息，为五月、六月的新规划做准备。希望０９年顺顺利利，有更好更多的收获。 注意劳逸结合，规律的作息，是好的计划的开始！！]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=469</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>工作的状态</title>
		<link>http://www.deepseath.com/?p=78</link>
		<comments>http://www.deepseath.com/?p=78#comments</comments>
		<pubDate>Wed, 20 Feb 2008 14:28:43 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[心情日记]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=78</guid>
		<description><![CDATA[　　最近就一直处于一个很糟糕的工作状态，没有任何工作的欲望，甚至只要看到代码脑袋就痛，手里积压着三个项目，都是很着急的，可今天试图强迫自己去写点，可真的无论如何都进行不下去，脑子乱得要命。其实心理是十万着急#$^&#38;$&#38;*% 　　真的很烦…… 　　到底该如何调整呢？]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=78</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
