<?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.zhujun.org/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zhujun.org</link>
	<description>邪恶获得胜利的唯一条件，就是善良的人们保持沉默。</description>
	<lastBuildDate>Sun, 05 Feb 2012 06:34:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>谷歌首页圣诞节音乐演奏Doodle源代码</title>
		<link>http://www.zhujun.org/web/google-doodle-holiday11-source-code/</link>
		<comments>http://www.zhujun.org/web/google-doodle-holiday11-source-code/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 07:30:46 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[Google Doodle]]></category>
		<category><![CDATA[圣诞音乐]]></category>
		<category><![CDATA[源代码]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=492</guid>
		<description><![CDATA[提供了从Google首页提取的圣诞音乐演奏Doodle源代码，包括在线演示和JavaScript源代码打包下载。]]></description>
			<content:encoded><![CDATA[<p>谷歌就是谷歌，在2011圣诞节来临之际推出了又一Doodle神作。</p>
<p>你可以通过点击六种颜色的按钮点亮Doodle里的字母，之后doodle就开始自己播放《铃儿响叮当》了。同时整个背景也变成黑色，配合闪亮的彩灯，非常漂亮。</p>
<p>面对这么有收藏价值的Doodle，当然要把它扒下来，放在自己博客上炫一下了。</p>
<p>下面是我从Google首页上抠下来的圣诞音乐演奏源代码，去掉了一部分无关代码，在Chrome/FF下测试通过，在IE6下勉强通过，但不知为何没有声音。仅供喜欢这个Doodle的朋友收藏，Google保留所有权利。<br />
<span id="more-492"></span></p>
<h4>Google 圣诞演奏音乐 Doodle 在线演示：</h4>
<p><iframe src="/wp-content/uploads/holiday11/index.html" height="500px" width="800px" style="overflow:hidden;position:relative;left:-80px;*width:680px;*position:static;*left:0;" frameborder="0" scrolling="no"></iframe></p>
<p>由于整个Doodle比较大，所以你需要至少800px，才能将整个页面展示出来，否则只能像上面的演示那样，一部分内容被遮挡了。</p>
<h4>Google 圣诞演奏音乐 Doodle 源代码打包下载：</h4>
<p><a href="/wp-content/uploads/holiday11/holiday11.zip">Google圣诞演奏音乐源代码</a></p>
<p>只要使用iframe 引用 &#8220;index.htm&#8221; ，就可以把整个电吉他效果加到你的独立博客或网站中去了。<br />
如，在你的博客中添加如下代码：<br />
<code>&lt;iframe src=&quot;/uploads/holiday11/index.html&quot; height=&quot;500px&quot; width=&quot;800px&quot; style=&quot;overflow:hidden&quot; frameborder=&quot;0&quot; &gt;&lt;/iframe&gt; </code>BSP（博客服务提供商）会过滤大部分HTML代码，所以此方法主要适用于独立博客。</p>
<h4>Google 圣诞演奏音乐 Doodle 不发声的解决方案：</h4>
<p>你也可以在本地直接打开index.html 来演奏音乐，不过会由于Flash安全设置而无法发声，解决方法：</p>
<ol>
<li>上传全部文件到服务器，然后用网址的形式打开，可以正常发声，通过IE/FF/Chrome测试。</li>
<li><a href="http://www.macromedia.com/support/documentation/cn/flashplayer/help/settings_manager04.html" rel="nofollow" target="_blank">http://www.macromedia.com/support/documentation/cn/flashplayer/help/settings_manager04.html</a><br />
打开全局安全设置面板，在这个页面上会加载本地的Flash设置，选择“编辑多个位置&#8211;添加位置”，将holiday11.swf.swf所在文件夹加入到信任路径里，就可以本地播放了。</li>
<li>在本地用浏览器打开holiday11.swf，右键&#8211;全局设置&#8211;高级&#8211;受信任位置设置，找到并添加holiday11.swf.swf即可。（感谢网友罗汉果提供）</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/google-doodle-holiday11-source-code/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>发送 Google Plus (Google+) 邀请</title>
		<link>http://www.zhujun.org/web/free-google-plus-invitation/</link>
		<comments>http://www.zhujun.org/web/free-google-plus-invitation/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 09:37:49 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Plus]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=477</guid>
		<description><![CDATA[免费发送Google Plus (Google+) 的邀请和成功登入Google Plus的经验。]]></description>
			<content:encoded><![CDATA[<p>好多天前就收到了Google Plus 的邀请，不过登录的时候 Google 表示服务器压力很大，暂不开放。</p>
<p style="text-align: center;">
<img class="aligncenter" src="/wp-content/uploads/2011/07/keep-me-posted.png" alt="google plus keep me posted" width="325" height="308" /></p>
<p>于是，接下来每天都来看一下，每天都点那个Keep Me Posted的按钮，终于在今天上午可以直接登入了。</p>
<p>进去以后试着给朋友发了一下邀请，他立马收到，并且可以直接加入Google Plus，貌似今天又开放了，所以需要Google+的同学赶紧留下你的Google账户吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/free-google-plus-invitation/feed/</wfw:commentRss>
		<slash:comments>89</slash:comments>
		</item>
		<item>
		<title>Google首页电吉他Doodle源代码</title>
		<link>http://www.zhujun.org/web/google-doodle-guitar-source-code/</link>
		<comments>http://www.zhujun.org/web/google-doodle-guitar-source-code/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 11:32:59 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[源代码]]></category>
		<category><![CDATA[电吉他]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=462</guid>
		<description><![CDATA[提供了朱俊从Google首页提取的电吉他和最新带录音回放的电吉他源代码，包括在线演示和JavaScript源代码打包下载，以及一些网页提供的吉他谱。]]></description>
			<content:encoded><![CDATA[<p>为了纪念电吉他之父莱斯·保罗（Les Paul，1915年6月9日－2009年8月13日）诞辰96周年，Google Doodle又出神作，首页的Logo被设计成一个电吉他形，并且鼠标滑过会弹出美妙的音乐，当你按下键盘图标时，还可以直接用键盘弹奏这个“电吉他”。</p>
<p>弹了几下，发现自己很有音乐天赋呢，于是决定保存下来，永久收藏。</p>
<p>下面是我从Google首页上抠下来的电吉他源代码，去掉了无关代码，仅供喜欢这个Doodle的朋友收藏，Google保留所有权利。<br />
<span id="more-462"></span></p>
<h4>Google 电吉他 在线演示：</h4>
<p><iframe src="/wp-content/uploads/guitar/google-guitar.htm" height="300px" width="660px" style="overflow:hidden" frameborder="0" scrolling="no"></iframe></p>
<div style="color:red">Google 6月10日再度更新，在www.google.com推出了带录音回放功能电吉他，按下原来的键盘图标就可以，弹完以后再按一次，点播放键。</div>
<h4>带录音回放功能的 Google 电吉他 在线演示：</h4>
<p><iframe src="/wp-content/uploads/guitar/recordable-guitar.htm" height="320px" width="660px" style="overflow:hidden" frameborder="0" scrolling="no" ></iframe></p>
<p>录音以后会出现类似 “http://www.google.com/webhp?tune=EAwiYAgkBETAQmAgJAA*” 这样的直接播放URL，把“http://www.google.com/webhp” 替换成你自己的电吉他URL，同样可以自动播放。</p>
<h4>Google 电吉他 源代码打包下载：</h4>
<p><a href="/wp-content/uploads/guitar/google-guitar.zip">Google电吉他源代码</a><br />
上面压缩包中已经包含了新的带录音回放功能的电吉他（recordable-guitar.htm）和老的电吉他（google-guitar.htm）。</p>
<p>只要使用iframe 引用 &#8220;google-guitar.htm&#8221; 或者 &#8220;recordable-guitar.htm&#8221; ，就可以把整个电吉他效果加到你的独立博客或网站中去了。<br />
如，在你的博客中添加如下代码：<br />
<code>&lt;iframe src=&quot;/uploads/guitar/google-guitar.htm&quot; height=&quot;340px&quot; width=&quot;660px&quot; style=&quot;overflow:hidden&quot; frameborder=&quot;0&quot; &gt;&lt;/iframe&gt; </code>BSP会过滤大部分HTML代码，所以此方法主要适用于独立博客。</p>
<h4>Google 电吉他 不发声的解决方案：</h4>
<p>当然你也可以在本地直接打开 google-guitar.htm 或 recordable-guitar.htm 来弹奏吉他，不过会由于Flash安全设置而无法发声，解决方法：</p>
<ol>
<li>上传全部六个文件到服务器，然后用网址的形式打开，可以正常发声，通过IE/FF/Chrome测试。</li>
<li><a href="http://www.macromedia.com/support/documentation/cn/flashplayer/help/settings_manager04.html" rel="nofollow" target="_blank">http://www.macromedia.com/support/documentation/cn/flashplayer/help/settings_manager04.html</a><br />
打开全局安全设置面板，在这个页面上会加载本地的Flash设置，选择“编辑多个位置&#8211;添加位置”，将guitar11.swf所在文件夹加入到信任路径里，就可以本地播放了。（感谢网友Top Fun留言）</li>
<li>在本地用浏览器打开guitar11.swf，右键&#8211;全局设置&#8211;高级&#8211;受信任位置设置，找到并添加guitar11.swf即可。（感谢网友罗汉果提供）</li>
</ol>
<h4>Google 电吉他 谱子：</h4>
<p>网友们（找不到最原始出处，抱歉）提供了好多谱子呢，这里挑几首简单的，先按下键盘图标，然后用键盘弹，记得关闭输入法。</p>
<dl>
<dt>两只老虎 （我的最爱^_*）</dt>
<dd>TYUT TYUT UIO UIO OPOIUT OPOIUT UWT UWT</dd>
<dt>沧海一声笑</dt>
<dd>POUYT UYTEW WEWETYUOP PPOUYTY</dd>
<dt>隐形的翅膀</dt>
<dd>358787 6568321 11186532122 358787 6568321 1118653211</dd>
<dt>天空之城（优美）</dt>
<dd>
6787807 365685 254573 874477 6787807 365685 34878908 876756 1232352 5878007 678789855 43213 376321 21253 376321 21276</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/google-doodle-guitar-source-code/feed/</wfw:commentRss>
		<slash:comments>202</slash:comments>
		</item>
		<item>
		<title>对短网址程序YOURLS 1.5的两个新修改</title>
		<link>http://www.zhujun.org/web/two-hacks-of-yourls-v15/</link>
		<comments>http://www.zhujun.org/web/two-hacks-of-yourls-v15/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 12:15:19 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[YOURLS]]></category>
		<category><![CDATA[短网址]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=433</guid>
		<description><![CDATA[在短网址程序 YOURLS V1.5 汉化版的基础上继续改进，修正了首页没有copy短网址链接的Bug，同时给出了替换快速分享框里分享链接的方法。]]></description>
			<content:encoded><![CDATA[<p><a href="http://yi.si" target="_blank">Yi.Si 短网址</a>原本只是一个YOURLS 1.5汉化版的演示站点，但后台可以看到有不少网友在使用Yi.Si，同时也有朋友咨询一些汉化版的问题，于是决心把它改的更好。<br />
<span id="more-433"></span></p>
<h3>一、修正首页没有copy功能的Bug</h3>
<p>有朋友留言，首页生成短网址后，在“您的短网址”下面的框框里鼠标移过时无法显示copy图片及实现copy功能。<br />
而在管理后台，在条目后面的actions点击share后显示出来的“您的短网址”那里是可以显示copy图片及实现copy功能的。这个应该怎么改？</p>
<p>发布时确实注意到了这个问题，但看到作者提供的前台首页同样没有Copy功能，就没有在意。</p>
<p>今天研究了一下，在网站首页，也就是index.php 的head标签中增加如下代码：<br />
<code>&lt;script src="&lt;?php yourls_site_url(); ?&gt;/js/common.js?v=&lt;?php echo YOURLS_VERSION; ?&gt;" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script src="&lt;?php yourls_site_url(); ?&gt;/js/ZeroClipboard.js?v=&lt;?php echo YOURLS_VERSION; ?&gt;" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;ZeroClipboard.setMoviePath( '&lt;?php yourls_site_url(); ?&gt;/js/ZeroClipboard.swf' );&lt;/script&gt;<br />
</code><br />
同时将<br />
<code>&lt;script src="&lt;?php echo YOURLS_SITE; ?&gt;/js/jquery-1.3.2.min.js" type="text/javascript"&gt;&lt;/script&gt;</code>改成<br />
<code>&lt;script src="&lt;?php echo YOURLS_SITE; ?&gt;/js/jquery-1.4.3.min.js" type="text/javascript"&gt;&lt;/script&gt;</code>即可。<br />
效果如图所示：<br />
<img class="size-full" src="http://www.zhujun.org/wp-content/uploads/2011/02/yourls-copy.gif" alt="YOURLS 复制短网址效果" /><br />
要注意的是，载入jquery的script标签必须置于其它script标签前面。</p>
<h3>二、修改YOURLS快速分享框的代码</h3>
<p>YOURLS 添加短网址后，会出现快速分享框，方便用户分享短网址到Twitter、Faceook、和FriendFeed。<br />
由于众所周知的原因，这些世界前十大的网站，都是“反动”且无法访问的，需要替换成新浪微博、开心网等有中国特色的web2.0服务。</p>
<p>替换方法：</p>
<ol>
<li>打开includes子目录下的functions-html.php文件；</li>
<li>搜索&#8221;share_links&#8221;，定位到搜索框的代码；</li>
<li>将<code>&lt;a id="share_tw" href="http://twitter.com/home?status=&lt;?php echo $_share; ?&gt;" title="Tweet this!" onclick="share('tw');return false"&gt;Twitter&lt;/a&gt;<br />
&lt;a id="share_fb" href="http://www.facebook.com/share.php?u=&lt;?php echo $_url; ?&gt;" title="Share on Facebook" onclick="share('fb');return false;"&gt;Facebook&lt;/a&gt;<br />
&lt;a id="share_ff" href="http://friendfeed.com/share/bookmarklet/frame#title=&lt;?php echo $_share; ?&gt;" title="Share on Friendfeed" onclick="javascript:share('ff');return false;"&gt;FriendFeed&lt;/a&gt;</code>替换成自己的分享代码或者第三方服务如addthis、jiathis的分享代码即可。</li>
</ol>
<p>效果如图所示：<br />
<img class="size-full" src="http://www.zhujun.org/wp-content/uploads/2011/02/yourls-share.gif" alt="YOURLS 快速分享短网址效果" /></p>
<p><strong>PS:反应jiathis不能把分享内容改为分享框里面的东东，只出现默认网页的title和网址呢的朋友。</strong><br />
主要是jiathis的配置不对，记得加上类似下面的语句：<br />
<code>&lt;script type="text/javascript"&gt;<br />
var jiathis_config = {<br />
url: "&lt;?php echo $shorturl; ?&gt;",<br />
title: "&lt;?php echo $title; ?&gt;"<br />
}<br />
&lt;/script&gt;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/two-hacks-of-yourls-v15/feed/</wfw:commentRss>
		<slash:comments>108</slash:comments>
		</item>
		<item>
		<title>分享 YOURLS V1.5 汉化版</title>
		<link>http://www.zhujun.org/web/release-yourls-v15-chinese-version/</link>
		<comments>http://www.zhujun.org/web/release-yourls-v15-chinese-version/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 13:07:13 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[YOURLS]]></category>
		<category><![CDATA[短网址]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=410</guid>
		<description><![CDATA[忙里偷闲对YOURLS 最新的1.5版本进行了一些修改和汉化，发布出来供大家分享，包括YOURLS 1.5 汉化版的简介、安装说明、Nginx伪静态规则和下载地址。]]></description>
			<content:encoded><![CDATA[<p>前两天忙里偷闲对YOURLS 最新的1.5版本进行了一些修改和汉化，应邀发出，不敢独享。</p>
<h3>YOURLS 简介</h3>
<p>YOURLS是一套优秀的短网址程序。<br />
由PHP编写，使用JQuery框架，充分利用的AJAX技术。开源，免费，GPLv3。</p>
<ol>
<li>支持架设成私有或公用的短网址系统；</li>
<li>支持自定义短网址或随机生成；</li>
<li>对每个短网址都有较详细的访问统计；</li>
<li>后台可以编辑、删除、新增、统计短网址。</li>
</ol>
<h3><span id="more-410"></span>YOURLS V1.5 汉化版简介</h3>
<ol>
<li>汉化了部分提示信息；</li>
<li>增加了一个简洁、漂亮的前台中文界面；</li>
<li>修正部分用户在后台无法编辑和删除短网址的Bug；</li>
<li>修正其它一些小Bug；</li>
<li>保留的原作者的官网链接（网上流传的1.43汉化版去掉了官网链接，完全不尊重作者劳动啊）。</li>
</ol>
<div>
<h3>YOURLS V1.5 汉化版安装说明</h3>
<div id="_mcePaste">
<ol>
<li>解压下载的安装包</li>
<li>将 includes/config-sample.php 拷贝至 user/config.php</li>
<li>创建数据库及对应用户</li>
<li>编辑 user/config.php</li>
<li>上传程序和配置文件</li>
<li>访问http://yoursite.com/admin/</li>
</ol>
</div>
</div>
<h3>YOURLS V1.5 Nginx 伪静态配置脚本</h3>
<p><code>location /<br />
{<br />
if (!-f $request_filename){<br />
set $rule_0 1$rule_0;<br />
}<br />
if (!-d $request_filename){<br />
set $rule_0 2$rule_0;<br />
}<br />
if ($rule_0 = "21"){<br />
rewrite ^/([0-9A-Za-z]+)/?$ /yourls-go.php?id=$1 last;<br />
}<br />
rewrite ^/([0-9A-Za-z]+)\+/?$ /yourls-infos.php?id=$1 last;<br />
rewrite ^/([0-9A-Za-z]+)\+all/?$ /yourls-infos.php?id=$1&amp;all=1 last;<br />
}</code></p>
<div>这个是伪静态规则是网上抄来的，针对老版本的，不过1.5一样可以使用，没有问题。</div>
<div>看到官网上给出的新版Apache Rewrite 规则，相当的简单，翻成Nginx的应该一样简单，等有空自己试过再分享出来吧。</div>
<p></p>
<h3>YOURLS V1.5 汉化版下载地址</h3>
<div>已经投递到ChinaZ了，A5也自动收录了。</div>
<div>
<ul>
<li>下载地址1：<a rel="nofollow" href="http://down.chinaz.com/soft/28426.htm" target="_blank">http://down.chinaz.com/soft/28426.htm</a></li>
<li>下载地址2：<a rel="nofollow" href="http://down.admin5.com/php/70202.html" target="_blank">http://down.admin5.com/php/70202.html</a></li>
</ul>
</div>
<h3>关于YOURLS的其它</h3>
<div>YOURLS Google Code 官网地址：<a rel="nofollow" href="http://code.google.com/p/yourls/" target="_blank">http://code.google.com/p/yourls/</a></div>
<div>我搭建的YOURLS 1.5 演示站点：<a href="http://yi.si" target="_blank">http://yi.si</a> ，意思的拼音，还算简短、好记吧。</div>
<p></p>
<div>和作者OZH联系过，人非常好，对Bug的响应很及时，还有一堆待增加的Features和新的开发计划，所以大家可以放心使用，绝不是那种没人管或者停滞开发的项目。</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/release-yourls-v15-chinese-version/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>解决YOURLS 1.5 无法编辑和删除短网址的问题</title>
		<link>http://www.zhujun.org/web/resolve-yourls-cannot-edit-or-delete-links/</link>
		<comments>http://www.zhujun.org/web/resolve-yourls-cannot-edit-or-delete-links/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 13:44:56 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[YOURLS]]></category>
		<category><![CDATA[短网址]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=403</guid>
		<description><![CDATA[YOURLS是一个不错的PHP短网址程序，但1.5新版本中很多用户无法在后台编辑和删除短网址，这篇文章给出了这个Bug产生的原因和解决方法。]]></description>
			<content:encoded><![CDATA[<p>YOURLS是一套优秀的开源PHP短网址程序。你可以把它架设成私有或公用的短网址系统，支持自定义短网址或随机生成。另外，该系统对每个短网址都有较详细的访问统计。</p>
<p>通过简单的几步安装成功后，我被漂亮的后台吸引了，作者基于JQuery框架，充分使用了AJAX技术。</p>
<p>不过杯具的是我发现在后台无法编辑或者删除短网址，而添加和统计则没有问题。<br />
<span id="more-403"></span><br />
Google了一遍以后，发现很多人都有类似的问题，比如该项目在Google Code的官方论坛上就有用户求助：http://code.google.com/p/yourls/issues/detail?id=587 。</p>
<p>作者给出的答案是 http://code.google.com/p/yourls/wiki/EndlessSpinningIcon ， 和我碰到的问题不太一样，因为我没有出现不停的旋转图标，而是点击后直接没有反应。</p>
<p>看了一些其它的短网址程序，都不太喜欢，于是决定自己Debug一下。</p>
<p>借助 FireBugs, 我发现点击编辑按钮时， AJAX 调用返回 “omg error”，是admin-ajax.php中下面的代码返回的:<br />
<code>case 'edit_display':<br />
yourls_verify_nonce( 'edit-link_'.$_REQUEST['id'], $_REQUEST['nonce'], false, 'omg error' );</code></p>
<p>因为 $_REQUEST['nonce'] 是空值，所以yourls_verify_nonce函数总是验证失败。</p>
<p>这个问题是 insert.js 中如下代码导致的：<br />
<code>var nonce = get_var_from_query( $('#edit-button-'+id).attr('href'), 'nonce' );</code></p>
<p>调试后发现，JQuery 没法选中指定ID，如果用 getElementById() 代替JQuery 选择器，则一切OK.</p>
<p>这时我发现编辑按钮的ID是形如 “1234.000000″这样的形式，因为包含 “.”，所以JQuery 选择器老是失败。</p>
<p>开始找生成ID的代码，发现是在 functions.php 的 yourls_string2int 函数中。</p>
<p><code>function yourls_string2int( $string, $chars = null ) {<br />
if( $chars == null )<br />
$chars = yourls_get_shorturl_charset();<br />
$integer = 0;<br />
$string = strrev( $string );<br />
$baselen = strlen( $chars );<br />
$inputlen = strlen( $string );<br />
for ($i = 0; $i < $inputlen; $i++) {<br />
$index = strpos( $chars, $string[$i] );<br />
$integer = bcadd( $integer, bcmul( $index, bcpow( $baselen, $i ) ) );<br />
}<br />
return yourls_apply_filter( 'string2int', $integer, $string, $chars );<br />
}</code></p>
<p>这个函数将字符认为是36或者62进制的数字，然后转化成10进制。(36还是62在config.php中可以定义)</p>
<p>查了PHP手册后，发现bcadd这个函数有个可省的参数scale，用来指定相加以后的小数点位数。<br />
而小数点位数的缺省值由bcscale()全局设定，这就是为什么有的用户无法编辑删除，而作者却无法重现这个Bug的原因。</p>
<p>所以，解决方法很简单，只要把includes目录下的functions.php中<br />
<code>$integer = bcadd( $integer, bcmul( $index, bcpow( $baselen, $i ) ) );</code>这行改成<br />
<code>$integer = bcadd( $integer, bcmul( $index, bcpow( $baselen, $i ) ) ,0 );</code>上传、覆盖、刷新就可以了。</p>
<p>如果你不想手动修改，这里有一个修改过的functions.php文件，下载、解压、覆盖原文件即可。<br />
<a href="/wp-content/uploads/2011/functions.zip">functions.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/resolve-yourls-cannot-edit-or-delete-links/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Google Instant和百度框计算</title>
		<link>http://www.zhujun.org/web/google-instant-baidu-box-computing/</link>
		<comments>http://www.zhujun.org/web/google-instant-baidu-box-computing/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 06:25:45 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=358</guid>
		<description><![CDATA[介绍了什么是Google Instant和什么是Baidu Box Computing （百度框计算），并给出了这两种新技术的截图示例和比较。]]></description>
			<content:encoded><![CDATA[<p>这几天，世界最大的搜索引擎Google和国内最大的搜索引擎百度，分别给我们带来了两种新技术：Google Instant 和 Baidu Box Computing （百度框计算）。</p>
<p>经过一些了解和试用，让我们分别来看看这两种技术和对比。<br />
<span id="more-358"></span></p>
<h3>什么是Google Instant</h3>
<p>Google 给出的定义是 “Google Instant is a new search enhancement that shows results as you type.”，即你在打字的时候谷歌就给出提示并实时返回搜索结果。</p>
<p>在我看来，Google Instant是Google Suggestion 和实时搜索技术的结合。</p>
<p>让我们来看个例子：<br />
<img class="aligncenter size-full" src="/wp-content/uploads/2010/09/google-instant-llk.gif" alt="Google Instant 搜索示例" width="694" height="673" /></p>
<p>当用户打开Google 搜索，刚刚键入“连”字，Google根据你的搜索习惯和其他用户的搜索量，就直接在搜索框给出“连连看”的提示，并实时返回了搜索结果。用户甚至不需要按回车或者搜索按钮。</p>
<p>Google Instant 可以为用户的每次搜索节约2-5秒时间，Google估计，如果全球每人都使用Google Instant这项新技术的话，每天可以节约3.5亿秒。</p>
<h3>让我们再来看看什么是百度框计算</h3>
<p>百度框计算为用户提供基于互联网的一站式服务，是一种最简单可依赖的互联网需求。框计算（Box Computing）是2009年8月18日，百度董事长兼首席执行官李彦宏先生在“百度技术创新大会”上提出的全新技术概念。这是百度的定义。</p>
<p>来看一个例子：<br />
<img class="aligncenter size-full" src="/wp-content/uploads/2010/09/baidu-box-computing.gif" alt="百度框计算示例" width="607" height="700" /></p>
<p>还是搜索连连看，用户在键入完“连连看”三字并回车后，出来了一个百度的“框”，框里的内容由百度的合作伙伴提供，用户可以直接在框里玩连连看的Flash版本，框下面才是其它网站的内容。<br />
许多站长担心，那些不和百度合作的网站将损失大量流量，然后很快死去；而那些同百度合作的网站一样也会损失大量流量，然后慢慢死去。<br />
甚至有人预言，中国国内只需要、只剩下百度一个网站的日子不远了。</p>
<h3>Google Instant和百度框计算的简单比较</h3>
<p>从上面的介绍可以看出，Google倾向于加快用户的搜索速度，期望能让用户更快的找到并达到目标网站。<br />
百度更倾向于提供一站式服务，期望用户能更多的停留在百度自己的页面上。</p>
<p>从用户角度来说，一站式服务固然有它的好处，我们只需要上百度一个网站就可以获取所有资讯，享受所有娱乐，完成所有目标。</p>
<p>可是不要忘记，我们本身就是单一的受害者，单一的体系、单一的思想曾深深地伤害过我们，互联网是天生自由的，互联网应该是百花齐放、百家争鸣的。</p>
<p>未来会怎么样？哪种技术将大获成功？让我们拭目以待吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/google-instant-baidu-box-computing/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>独立博客创建教程 &#8211; 域名篇</title>
		<link>http://www.zhujun.org/web/register-your-own-domain/</link>
		<comments>http://www.zhujun.org/web/register-your-own-domain/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 13:55:36 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[个性域名]]></category>
		<category><![CDATA[独立博客]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=344</guid>
		<description><![CDATA[独立博客创建教程之域名篇，包括为什么要注册顶级域名，域名相关知识，常见顶级域名后缀的介绍和注册注意事项等。]]></description>
			<content:encoded><![CDATA[<p>注册一个顶级域名是开始独立博客的第一步，有人说“好域名不一定成就一个好网站，但好网站通常拥有一个好域名”。<br />
所以为自己的博客挑选一个独一无二的域名吧。<span id="more-344"></span></p>
<h3>什么是域名</h3>
<p>貌似是个很小白的问题，不过真要完全解释清楚，会牵涉到很多知识，可以写几篇论文了。</p>
<p>维基百科对域名的定义：域名（Domain Name），是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称，用于在数据传输时标识计算机的电子方位（有时也指地理位置）。</p>
<p>汗，好拗口，看些例子就明白了：google.com 、www.google.com.hk 、translate.google.cn 。</p>
<h3>顶级域名和二级域名</h3>
<p>这两个定义国内外不一样，本文使用国内的定义。</p>
<p>国外把 .com 、.net 这种后缀称为 Top-level domain ，把 google.com、wikipedia.org 中的google和wikipedia称为Second-level domain。</p>
<p>国内把163.com、sina.com.cn 这种称为顶级域名，而把 news.163.com 、blog.sina.com.cn 这种称为二级域名。<br />
大部分网站的地址都是www.xxx.xx，其中的“www”同样是一个二级域名。</p>
<p>一般国内的BSP (Blog Service Provider) 会免费给你一个二级或者三级域名 ，如：sinofreebird.blogchina.com 、 ssnly100.blog.163.com 。</p>
<h3>为什么要注册顶级域名</h3>
<ul>
<li>拥有域名的所有权<br />
你在各大博客网站注册的二级、三级域名，只有使用权，没有所有权，对方随时可以回收你的域名。而自己注册并续费顶级域名，意味着你拥有这个域名，并可以出售给他人。</li>
<li>拥有域名的管理权<br />
自己管理顶级域名，意味着你可以设立无数个二级域名。<br />
如：www.yourdomain.com 作为个人门户，blog.yourdomain.com 作为博客， work.yourdomain.com 作为网上工作平台。</li>
<li>拥有自己的域名邮箱<br />
域名邮箱比免费邮箱更能让人产生信任感，如： webmaster@yourdomain.com、www@yourdomain.org 。</li>
</ul>
<h3>通用顶级域名和国家地区顶级域名</h3>
<p>常见的通用顶级域名后缀有：.biz .com .edu .gov .info .int .mil .name .net .org .pro 等。<br />
通用顶级域名一般向全世界互联网用户开放注册，不以地域作为限制，但可能会对申请人的性质、行业有限制，比如 .edu 只面向教育机构，.gov 只面向政府机构。</p>
<p>常见的国家地区顶级域名后缀有：.cn（中国大陆）、.de（德国）、.us（美国）、.eu（欧盟）、.hk（香港）、.la （老挝）、.cc（科科斯群岛）等等。<br />
大部分国家地区顶级域名对全世界开放注册，但也有相当一部分后缀只对该国公民和企业开放。</p>
<p>更多的后缀，参见维基百科上的说明：<a href="http://zh.wikipedia.org/zh-cn/%E5%9F%9F%E5%90%8D" target="_blank">http://zh.wikipedia.org/zh-cn/域名</a></p>
<h3>如何选择顶级域名</h3>
<p>那么多顶级域名后缀，究竟该选择哪种注册呢？</p>
<p>一般首选 .com，其次 .org 和 .net ，因为这些域名使用最广泛，方便用户记忆，在搜索引擎中也有较高的权限。<br />
但这些域名，你能想到的前缀大部分已经被注册了，所以你可以尝试其它较生僻后缀，某些前缀和后缀，可以组成很酷的<strong>个性域名</strong>，比如<em> kevin.name、t.md、niu.bi 、fla.sh、goo.gl、del.icio.us、va.vb.vc</em> 等等。</p>
<p>另外，一些特别的域名可以创造出特别的email地址，比如：<em>wo@niu.bi 、ni@sha.bi 、julie@willyoumarryme.com</em> 。</p>
<h3>如何注册顶级域名</h3>
<p>常见的后缀如.com/.net/.org 一般在7-8美元一年。注册商首选<a rel="nofollow" href="http://www.godaddy.com" target="_blank">GoDaddy</a>和<a rel="nofollow" href="http://smallbusiness.yahoo.com/domains/?p=BESTDEAL" target="_blank">Yahoo</a>，前者不时送出一些$0.99的特价优惠码，续费也不贵；后者则随时可以以$1.99注册首年，续费较贵，但可以转出。</p>
<p>GoDaddy和Yahoo的域名注册步骤很简单，无非就是这么四步：</p>
<ol>
<li>注册网站帐户</li>
<li>查询域名是否已被注册</li>
<li>没有被注册则加入购物车</li>
<li>付款。</li>
</ol>
<p>英文不好的童鞋可以搜索详细的图文教程，另外Yahoo只支持 PayPal/信用卡 付款，GoDaddy还额外支持支付宝。</p>
<p>较少见的国别后缀如 .ai/.bi/.cc/.de/.la/.lu/.me/.se/.sh/.tv/.vc 等等价格较高，一般从十几美元至100欧元一年不等。注册商也千奇百怪，不同的注册商价格差很多，另外，有些oneman的注册商还存在着抢夺你域名的风险，所以需要选择官方注册局或者大的注册商。</p>
<p>查询某个域名是否被注册，可以上<a rel="nofollow" href="http://www.101domain.com/" target="_blank">http://www.101domain.com/</a> 101domain几乎支持所有的域名后缀，但不推荐在该网站注册，一是因为价格高，二是因为他们很多后缀是手工操作，注册过程慢，而且存在抢注风险。</p>
<p>我收藏着一些个性域名，如果看中某个后缀却不知去哪里注册便宜又放心的话，可以咨询我。</p>
<h3>注册域名注意事项</h3>
<ul>
<li>不要在国内注册商处注册域名<br />
国内注册商的劣迹有：<br />
随时听从有关部门命令，Hold你的域名，导致你网站无法访问。<br />
制造域名转出障碍，拒绝提供转移码，除非你邮寄一大堆资料和表格过去，让你感觉域名不是你自己的。</li>
<li>不要注册 .cn 结尾的域名。<br />
由于一些SB的SB政策，cn域名在一年内从1200多万个减至600多万个。<br />
除非你不怕备案麻烦，不怕域名被Hold，不怕域名被回收，否则还是暂时敬而远之的好。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/register-your-own-domain/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>独立博客创建教程</title>
		<link>http://www.zhujun.org/web/create-your-own-blog/</link>
		<comments>http://www.zhujun.org/web/create-your-own-blog/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 08:45:43 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[独立博客]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=336</guid>
		<description><![CDATA[独立博客创建教程，介绍了独立博客的概念、优点等内容，把创建过程简单地分成注册域名、购买空间、安装程序三步。]]></description>
			<content:encoded><![CDATA[<p>一直想写套完整的独立博客创建教程，今天看到有朋友在论坛求助，打算分享我的一些经验和建议。</p>
<h3>什么是独立博客</h3>
<p>在新浪、网易等BSP那里可以免费开通博客，独立博客和上诉博客最大区别在于：</p>
<ul>
<li>你注册并拥有自己的博客域名，域名是你一笔隐形的财富。</li>
<li>你购买并拥有自己的博客空间，可以充分DIY、随意捣腾。</li>
<li>你撰写并负责自己的博客内容，没有人可以删除你的文章，除了你自己。</li>
</ul>
<h3>为什么要有独立博客</h3>
<p>独立博客有很多好处，比如拥有自己的品牌（域名），交到志同道合的朋友，可以赚取自己应得的广告费，而不是像韩寒那样为新浪免费打工。</p>
<p>但在我看来，独立博客最大的优点是，她让你不必再看管理员眼色行事，不必替换那些可笑的敏感词；她培养你独立的思想，帮助你拥有独立的人格。而在天朝，上述这些都是很奢侈的事情。<span id="more-336"></span></p>
<h3>如何创建独立博客</h3>
<p>创建一个独立博客只需要三步：</p>
<ol>
<li><a href="/web/register-your-own-domain/">注册一个顶级域名</a>。<br />
首选 .com，其次 .org 和 .net ，如果想不到合适的前缀，可以尝试个性域名，比如 kevin.name、t.md、niu.bi 、Fla.sh、va.vb.vc、等等。</li>
<li>购买一个博客空间。<br />
购买或和朋友合租一个虚拟主机、VPS、甚至独立主机。</li>
<li>安装、设置独立博客程序。<br />
WordPress、Bo-Blog等博客程序都拥有详细的安装教程。</li>
</ol>
<p>额，好简略的独立博客创建教程，一点也不完整，好吧，我会就这三步再写三篇详细的文章。</p>
<p>不过先提醒性急的朋友，不要在国内域名商处注册域名，不要购买国内的博客空间，否则就等着被折腾吧，还不如去新浪开博呢。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/create-your-own-blog/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>PHP学习笔记2 &#8211; 用文件来存取数据</title>
		<link>http://www.zhujun.org/web/php-study-notes-storing-retrieving-data/</link>
		<comments>http://www.zhujun.org/web/php-study-notes-storing-retrieving-data/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 10:45:51 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[学习笔记]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=295</guid>
		<description><![CDATA[PHP学习笔记之存取数据部分，主要介绍了用文件而非数据库的方法保存和读取数据，包括打开、创建、关闭、读、写、锁、删除文件等内容。]]></description>
			<content:encoded><![CDATA[<p>PHP学习笔记第二章，主要包括打开/创建/关闭/锁定/删除文件，从文件中读/写数据等内容。<br />
<span id="more-295"></span></p>
<h3>一、打开文件</h3>
<p>文件操作的基本步骤是：打开文件&#8211;&gt;读/写文件&#8211;&gt;关闭文件，其中打开文件是第一步。</p>
<h4>1、使用 fopen() 打开文件</h4>
<p>fopen() 函数定义：<br />
<code>resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )</code></p>
<p>fopen() 函数示例：<br />
<code>$handle = fopen("/home/rasmus/file.txt", "r");<br />
$fp = fopen("$_SERVER['DOCUMENT_ROOT']/../orders/orders.txt",'w'); </code><br />
注意，使用绝对路径时，Linux下是/xxx/，而Windows下是x:\xxx\，一般推荐使用相对目录。</p>
<h4>2、打开文件模式</h4>
<p>和c语言类似，fopen()同样通过mode参数来确定打开文件的访问类型。</p>
<table>
<tbody>
<tr>
<th>mode</th>
<th>说明</th>
</tr>
<tr>
<td>&#8220;r&#8221;</td>
<td>只读方式打开，将文件指针指向文件头。</td>
</tr>
<tr>
<td>&#8220;r+&#8221;</td>
<td>读写方式打开，将文件指针指向文件头。</td>
</tr>
<tr>
<td>&#8220;w&#8221;</td>
<td>写入方式打开，将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;w+&#8221;</td>
<td>读写方式打开，将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;x&#8221;</td>
<td>创建并以写入方式打开，将文件指针指向文件头。如果文件已存在，则 fopen() 调用失败并返回 FALSE，并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;x+&#8221;</td>
<td>创建并以读写方式打开，将文件指针指向文件头。如果文件已存在，则 fopen() 调用失败并返回 FALSE，并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;a&#8221;</td>
<td>写入方式打开，将文件指针指向文件末尾。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;a+&#8221;</td>
<td>读写方式打开，将文件指针指向文件末尾。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;b&#8221;</td>
<td>和其它模式组合使用，以二进制方式打开文件，是推荐且默认的方式。</td>
</tr>
<tr>
<td>&#8220;a+&#8221;</td>
<td>和其它模式组合使用，以文本方式打开文件，只在Windows下有效，不推荐。</td>
</tr>
</tbody>
</table>
<h4>3、其它注意点</h4>
<ul>
<li>可以打开ftp和http协议的文件，也可以在php.ini关闭allow_url_fopen来禁止打开远程文件。</li>
<li>Linux打开文件必须注意该文件的读写权限问题。</li>
</ul>
<h3>二、读写文件</h3>
<p>打开文件后，可以用相关函数读取和写入数据。</p>
<h4>1、读取文件内容常用函数</h4>
<p><code>string fgets ( resource $handle [, int $length ] )</code>从文件指针开始读取一行，且最大长度不超过length，length默认为1024</p>
<p><code>string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] )</code>同fgets，但会过滤除allowable_tags参数外的HTML和PHP的标签。</p>
<p><code>array fgetcsv ( resource $handle [, int $length [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape='\\']]]] )</code>同fgets，但解析 CSV 字段，返回数组。</p>
<p><code>string fgetc ( resource $handle )</code>从文件指针开始，读取一个字符。</p>
<p><code>string fread ( resource $handle , int $length )</code>从文件指针开始，读取指定长度的内容。</p>
<p><code>int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )</code>打开文件并读取整个文件内容至输出缓存，然后关闭文件。</p>
<p><code>int fpassthru ( resource $handle )</code>读取文件指针当前位置到文件结束的数据至输出缓存。</p>
<p><code>array file ( string $filename [, int $flags = 0 [, resource $context ]] )</code>将全部文件内容读入一个数组中，每行内容成为一个数组元素。</p>
<p><code>string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen = -1 ]]]] )</code>将全部文件内容读入一个字符串中。</p>
<h4>2、写文件常用函数</h4>
<p><code>int fwrite ( resource $handle , string $string [, int $length ] )</code>从文件指针开始，写入最大长度为参数length的字符串内容。</p>
<p><code>int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )</code>打开文件（如果不存在则创建文件），写入data，关闭文件，会覆盖原文件内容，除非指定FILE_APPEND参数。</p>
<h4>3、文件指针操作函数</h4>
<p><code>bool rewind ( resource $handle )</code>将文件指针的位置倒回文件的开头。</p>
<p><code>int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )</code>将文件指针的位置移动到参数whence和offset 所指定的位置。</p>
<p><code>int ftell ( resource $handle )</code>返回文件指针的位置，注意PHP的文件指针是从0开始计数的。</p>
<p><code>bool feof ( resource $handle )</code>判断文件指针是否已经指向文件末尾。</p>
<h3>三、其它文件操作相关函数</h3>
<p><code>bool fclose ( resource $handle )</code>关闭打开的文件。</p>
<p><code>bool file_exists ( string $filename )</code>检查文件或目录是否存在。</p>
<p><code>int filesize ( string $filename )</code>返回文件大小。</p>
<p><code>bool unlink ( string $filename [, resource $context ] )</code>删除指定文件。</p>
<p><code>bool flock ( resource $handle , int $operation [, int &amp;$wouldblock ] )</code>锁定文件，在NFS和FAT等文件系统上无效。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/php-study-notes-storing-retrieving-data/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

