<?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>robertbao&#039;s website &#187; firefox</title>
	<atom:link href="http://www.robertbao.com/post/tag/firefox/feed" rel="self" type="application/rss+xml" />
	<link>http://www.robertbao.com</link>
	<description>robertbao的个人网站</description>
	<lastBuildDate>Sat, 24 Jul 2010 03:59:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Performancing扩展也不满足需要</title>
		<link>http://www.robertbao.com/post/986</link>
		<comments>http://www.robertbao.com/post/986#comments</comments>
		<pubDate>Thu, 30 Mar 2006 01:14:23 +0000</pubDate>
		<dc:creator>robertbao</dc:creator>
				<category><![CDATA[WORK]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[试了Firefox的一个扩展Performancing，做得非常漂亮&#8230;
开启BlogAPI接口，选择XML-RPC Engine为Blogger类型，在Performancing中输入XML-RPC地址：http://www.robertbao.com/xmlrpc.php，用户名/密码，很容易地就可以和本站连接，并且可以获得分类目录。
基本的功能都有了，编辑、发表、保存等等，而且这种工具最大的好处就是&#8220;一次写贴，处处发表&#8221;，通过自设不同的接口，可以发表同一篇文章到你的各个不同的Blog上。其它好处就不多说了，我不满意的是：
1、还是不支持本机路径图片上传；
2、不支持文章中未提到的链接发送trackback。
不知道我说的对不对，或者有哪位高人用过这东东，给个指点&#8230;
相关文章

2006-03-30 &#8212; 本站CSS还是有点小问题 (2)
2006-01-04 &#8212; 我使用的Firefox插件 (0)
2005-11-10 &#8212; Monkeygrease的一个示例 (1)
2005-11-10 &#8212; 用Monkeygrease进行Server端的代码注入 (2)
2005-05-18 &#8212; Firefox已经是访问Boing Boing最多的浏览器 (1)

]]></description>
			<content:encoded><![CDATA[<p>试了Firefox的一个扩展Performancing，做得非常漂亮&#8230;</p>
<p>开启BlogAPI接口，选择XML-RPC Engine为<strong>Blogger</strong>类型，在Performancing中输入XML-RPC地址：<a href="xmlrpc.php">http://www.robertbao.com/xmlrpc.php</a>，用户名/密码，很容易地就可以和本站连接，并且可以获得分类目录。</p>
<p>基本的功能都有了，编辑、发表、保存等等，而且这种工具最大的好处就是&ldquo;一次写贴，处处发表&rdquo;，通过自设不同的接口，可以发表同一篇文章到你的各个不同的Blog上。其它好处就不多说了，我不满意的是：</p>
<p>1、还是不支持本机路径图片上传；</p>
<p>2、不支持文章中未提到的链接发送trackback。</p>
<p>不知道我说的对不对，或者有哪位高人用过这东东，给个指点&#8230;</p>
<h3>相关文章</h3>
<ul class="related_post">
<li>2006-03-30 &#8212; <a href="http://www.robertbao.com/post/985" title="本站CSS还是有点小问题">本站CSS还是有点小问题 (2)</a></li>
<li>2006-01-04 &#8212; <a href="http://www.robertbao.com/post/1010" title="我使用的Firefox插件">我使用的Firefox插件 (0)</a></li>
<li>2005-11-10 &#8212; <a href="http://www.robertbao.com/post/905" title="Monkeygrease的一个示例">Monkeygrease的一个示例 (1)</a></li>
<li>2005-11-10 &#8212; <a href="http://www.robertbao.com/post/904" title="用Monkeygrease进行Server端的代码注入">用Monkeygrease进行Server端的代码注入 (2)</a></li>
<li>2005-05-18 &#8212; <a href="http://www.robertbao.com/post/172" title="Firefox已经是访问Boing Boing最多的浏览器">Firefox已经是访问Boing Boing最多的浏览器 (1)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.robertbao.com/post/986/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>本站CSS还是有点小问题</title>
		<link>http://www.robertbao.com/post/985</link>
		<comments>http://www.robertbao.com/post/985#comments</comments>
		<pubDate>Thu, 30 Mar 2006 00:57:52 +0000</pubDate>
		<dc:creator>robertbao</dc:creator>
				<category><![CDATA[PASTIME]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ie]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Sai，上一篇文章中那个链接，在IE下显示良好，会自动断行，在Firefox下怎么就要在一行里显示完呢？把整个左边栏扩得很大&#8230;
本站的CSS还是有问题啊&#8230;现在也没时间研究这个了&#8230;这不同浏览器的适应性真是有够烦人&#8230;
相关文章

2006-08-22 &#8212; 开启IE中的动画播放选项 (1)
2006-08-21 &#8212; IE下透明PNG图片的显示 (3)
2006-04-28 &#8212; Microsoft推出IE7插件网站 (12)
2006-03-30 &#8212; Performancing扩展也不满足需要 (0)
2006-01-04 &#8212; 我使用的Firefox插件 (0)
2005-12-16 &#8212; 网站数据分析 (0)

]]></description>
			<content:encoded><![CDATA[<p>Sai，<a href="http://www.robertbao.com/post/984" target="_blank">上一篇文章</a>中那个链接，在IE下显示良好，会自动断行，在Firefox下怎么就要在一行里显示完呢？把整个左边栏扩得很大&#8230;</p>
<p>本站的CSS还是有问题啊&#8230;现在也没时间研究这个了&#8230;这不同浏览器的适应性真是有够烦人&#8230;</p>
<h3>相关文章</h3>
<ul class="related_post">
<li>2006-08-22 &#8212; <a href="http://www.robertbao.com/post/1064" title="开启IE中的动画播放选项">开启IE中的动画播放选项 (1)</a></li>
<li>2006-08-21 &#8212; <a href="http://www.robertbao.com/post/1063" title="IE下透明PNG图片的显示">IE下透明PNG图片的显示 (3)</a></li>
<li>2006-04-28 &#8212; <a href="http://www.robertbao.com/post/1048" title="Microsoft推出IE7插件网站">Microsoft推出IE7插件网站 (12)</a></li>
<li>2006-03-30 &#8212; <a href="http://www.robertbao.com/post/986" title="Performancing扩展也不满足需要">Performancing扩展也不满足需要 (0)</a></li>
<li>2006-01-04 &#8212; <a href="http://www.robertbao.com/post/1010" title="我使用的Firefox插件">我使用的Firefox插件 (0)</a></li>
<li>2005-12-16 &#8212; <a href="http://www.robertbao.com/post/938" title="网站数据分析">网站数据分析 (0)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.robertbao.com/post/985/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>我使用的Firefox插件</title>
		<link>http://www.robertbao.com/post/1010</link>
		<comments>http://www.robertbao.com/post/1010#comments</comments>
		<pubDate>Tue, 03 Jan 2006 21:39:00 +0000</pubDate>
		<dc:creator>robertbao</dc:creator>
				<category><![CDATA[WORK]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[
这里介绍一下我使用的Firefox插件，一来跟大家分享，二来给自己做个备忘：

Web Developer：Web开发者的福音，可以查看源代码，CSS，JavaScript等网页信息
All-in-One Gestures：定制鼠标手势，通过鼠标实现常用浏览功能
Fasterfox：对Firefox进行性能和网络优化
Tab Mix Plus：加强默认的标签分页浏览功能
SearchStatus：显示当前网页的Google Pagerank和Alexa排名等
Performancing：Blog写作工具


使用Firefox插件时有几点注意一下，能大大加快你的Firefox速度：

对你没用的插件不要装，用的少的暂时停用，长期不用的就卸载。记住：Firefox越精干，它就越快。 
如果Firefox实在慢得不行，十有八九是因为装的插件或主题的原因。此时用安全模式启动（Windows菜单的Firefox程序组里有这一项，或者用启动命令 &#8211;safe-mode），逐一卸载插件，看看哪个插件被卸载情况会有好转。

其他的一点小建议：
在Firefox地址栏中输入about:config
1、加入一个boolean类型的键：config.trim_on_minimize，并设置为true，可以在最小化时自动释放内存；
2、修改键browser.sessionhistory.max_total_viewers，把值修改为3或更小，这是页面前进/后退中保存的页面数，默认是-1(无限)。

#更新记录



日期
版本
说明


2006-01-04
0.1
初稿


2007-03-06
0.2
加入小建议，加入Performancing插件



相关文章

2006-03-30 &#8212; Performancing扩展也不满足需要 (0)
2006-03-30 &#8212; 本站CSS还是有点小问题 (2)
2005-11-10 &#8212; Monkeygrease的一个示例 (1)
2005-11-10 &#8212; 用Monkeygrease进行Server端的代码注入 (2)
2005-05-18 &#8212; Firefox已经是访问Boing Boing最多的浏览器 (1)

]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.robertbao.com/image/firefox_logo.png" style="WIDTH: 298px; HEIGHT: 96px" height="110" alt="firefox_logo.png" width="322"/></p>
<p>这里介绍一下我使用的Firefox插件，一来跟大家分享，二来给自己做个备忘：</p>
<blockquote><ul>
<li><a href="http://www.google.com/search?q=Web Developer" target="_blank">Web Developer</a>：Web开发者的福音，可以查看源代码，CSS，JavaScript等网页信息</li>
<li><a href="http://www.google.com/search?q=All-in-One Gestures" target="_blank">All-in-One Gestures</a>：定制鼠标手势，通过鼠标实现常用浏览功能</li>
<li><a href="http://www.google.com/search?q=Fasterfox" target="_blank">Fasterfox</a>：对Firefox进行性能和网络优化</li>
<li><a href="http://www.google.com/search?q=Tab Mix Plus" target="_blank">Tab Mix Plus</a>：加强默认的标签分页浏览功能</li>
<li><a href="http://www.google.com/search?q=SearchStatus" target="_blank">SearchStatus</a>：显示当前网页的Google Pagerank和Alexa排名等</li>
<li><a href="http://www.google.com/search?q=Performancing" target="_blank">Performancing</a>：Blog写作工具</li>
</ul>
</blockquote>
<p>使用Firefox插件时有几点注意一下，能大大加快你的Firefox速度：</p>
<ol>
<li>对你没用的插件不要装，用的少的暂时停用，长期不用的就卸载。记住：Firefox越精干，它就越快。 <br/></li>
<li>如果Firefox实在慢得不行，十有八九是因为装的插件或主题的原因。此时用<strong>安全模式</strong>启动（Windows菜单的Firefox程序组里有这一项，或者用启动命令 &#8211;safe-mode），逐一卸载插件，看看哪个插件被卸载情况会有好转。</li>
</ol>
<p><strong>其他的一点小建议：</strong></p>
<p>在Firefox地址栏中输入about:config</p>
<p>1、加入一个boolean类型的键：config.trim_on_minimize，并设置为true，可以在最小化时自动释放内存；</p>
<p>2、修改键browser.sessionhistory.max_total_viewers，把值修改为3或更小，这是页面前进/后退中保存的页面数，默认是-1(无限)。</p>
<hr id="hr"/>
<p><strong>#更新记录</strong></p>
<table width="600">
<tbody>
<tr>
<td>日期</td>
<td>版本</td>
<td>说明</td>
</tr>
<tr>
<td>2006-01-04</td>
<td>0.1</td>
<td>初稿</td>
</tr>
<tr>
<td>2007-03-06</td>
<td>0.2</td>
<td>加入小建议，加入Performancing插件</td>
</tr>
</tbody>
</table>
<h3>相关文章</h3>
<ul class="related_post">
<li>2006-03-30 &#8212; <a href="http://www.robertbao.com/post/986" title="Performancing扩展也不满足需要">Performancing扩展也不满足需要 (0)</a></li>
<li>2006-03-30 &#8212; <a href="http://www.robertbao.com/post/985" title="本站CSS还是有点小问题">本站CSS还是有点小问题 (2)</a></li>
<li>2005-11-10 &#8212; <a href="http://www.robertbao.com/post/905" title="Monkeygrease的一个示例">Monkeygrease的一个示例 (1)</a></li>
<li>2005-11-10 &#8212; <a href="http://www.robertbao.com/post/904" title="用Monkeygrease进行Server端的代码注入">用Monkeygrease进行Server端的代码注入 (2)</a></li>
<li>2005-05-18 &#8212; <a href="http://www.robertbao.com/post/172" title="Firefox已经是访问Boing Boing最多的浏览器">Firefox已经是访问Boing Boing最多的浏览器 (1)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.robertbao.com/post/1010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monkeygrease的一个示例</title>
		<link>http://www.robertbao.com/post/905</link>
		<comments>http://www.robertbao.com/post/905#comments</comments>
		<pubDate>Thu, 10 Nov 2005 05:50:56 +0000</pubDate>
		<dc:creator>robertbao</dc:creator>
				<category><![CDATA[WORK]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[上面说了Monkeygrease的基本用法，这里有一个示例，用于表示可变大小的文本域。
Javascript代码如下，保存为resizeabletextareas.js：
var resizeTa={loaded:null,TAlength:0,init:function(){if(resizeTa.loaded){return;}else{resizeTa.loaded=true;var _1=document.getElementsByTagName(&#34;body&#34;)[0];if(_1){window.addEventListener(&#34;load&#34;,resizeTa.pageload,true);}}},pageload:function(_2){resizeTa.doc=_2.originalTarget;resizeTa.TA=resizeTa.doc.getElementsByTagName(&#34;TEXTAREA&#34;);resizeTa.TAlength=resizeTa.TA.length;if(resizeTa.TAlength==0){return;}else{resizeTa.rootElem=resizeTa.doc.getElementsByTagName(&#34;HTML&#34;)[0];var i=resizeTa.TAlength;while(i&#8211;){resizeTa.newdiv(&#34;5&#34;,&#34;1&#34;,&#34;gripH_&#34;,i,&#34;w&#34;);resizeTa.newdiv(&#34;1&#34;,&#34;5&#34;,&#34;gripV_&#34;,i,&#34;n&#34;);resizeTa.newdiv(&#34;10&#34;,&#34;10&#34;,&#34;gripX_&#34;,i,&#34;se&#34;);}resizeTa.newdiv(&#34;0&#34;,&#34;0&#34;,&#34;showCursor&#34;,&#34;&#34;,&#34;w&#34;);CursorDiv=resizeTa.doc.getElementById(&#34;showCursor&#34;);CursorDiv.removeEventListener(&#34;mousedown&#34;,resizeTa.activate,true);CursorDiv.style.left=&#34;0px&#34;;CursorDiv.style.top=&#34;0px&#34;;resizeTa.posdivs();window.addEventListener(&#34;resize&#34;,resizeTa.posdivs,true);}},newdiv:function(w,h,id,nr,cu){var _9=resizeTa.doc.createElement(&#34;div&#34;);_9.setAttribute(&#34;ID&#34;,id+nr);_9.setAttribute(&#34;STYLE&#34;,&#34;position:absolute;width:&#34;+w+&#34;px;height:&#34;+h+&#34;px;cursor:&#34;+cu+&#34;-resize&#34;);_9.addEventListener(&#34;mousedown&#34;,resizeTa.activate,true);resizeTa.rootElem.appendChild(_9);},getposition:function(i){var _b=resizeTa.TA[i];var _c=_b.offsetLeft;while(_b.offsetParent){_c+=_b.offsetParent.offsetLeft;_b=_b.offsetParent;}_b=resizeTa.TA[i];var _d=_b.offsetTop;while(_b.offsetParent){_d+=_b.offsetParent.offsetTop;_b=_b.offsetParent;}return [_c,_d];},posdivs:function(){var k=resizeTa.TAlength;while(k&#8211;){curPos=resizeTa.getposition(k);resizeTa.doc.getElementById(&#34;gripH_&#34;+k).style.left=curPos[0]+resizeTa.TA[k].offsetWidth-3+&#34;px&#34;;resizeTa.doc.getElementById(&#34;gripH_&#34;+k).style.top=curPos[1]+&#34;px&#34;;resizeTa.doc.getElementById(&#34;gripH_&#34;+k).style.height=resizeTa.TA[k].offsetHeight-8+&#34;px&#34;;resizeTa.doc.getElementById(&#34;gripV_&#34;+k).style.left=curPos[0]+&#34;px&#34;;resizeTa.doc.getElementById(&#34;gripV_&#34;+k).style.top=curPos[1]+resizeTa.TA[k].offsetHeight-3+&#34;px&#34;;resizeTa.doc.getElementById(&#34;gripV_&#34;+k).style.width=resizeTa.TA[k].offsetWidth-8+&#34;px&#34;;resizeTa.doc.getElementById(&#34;gripX_&#34;+k).style.left=curPos[0]+resizeTa.TA[k].offsetWidth-8+&#34;px&#34;;resizeTa.doc.getElementById(&#34;gripX_&#34;+k).style.top=curPos[1]+resizeTa.TA[k].offsetHeight-8+&#34;px&#34;;}},activate:function(e){resizeTa.doc=e.target.ownerDocument;resizeTa.TA=resizeTa.doc.getElementsByTagName(&#34;TEXTAREA&#34;);CursorDiv=resizeTa.doc.getElementById(&#34;showCursor&#34;);resizeTa.TAlength=resizeTa.TA.length;var _10=e.target.getAttribute(&#34;ID&#34;).split(&#34;_&#34;);curTarget=_10[0];curTA_Nr=parseInt(_10[1]);resizeTa.doc.addEventListener(&#34;mouseup&#34;,resizeTa.deactivate,true);switch(curTarget){case &#34;gripH&#34;:resizeTa.doc.addEventListener(&#34;mousemove&#34;,resizeTa.resizeta_h,true);break;case &#34;gripV&#34;:resizeTa.doc.addEventListener(&#34;mousemove&#34;,resizeTa.resizeta_v,true);break;case &#34;gripX&#34;:resizeTa.doc.addEventListener(&#34;mousemove&#34;,resizeTa.resizeta_x,true);break;}CursorDiv.style.width=resizeTa.rootElem.offsetWidth+&#34;px&#34;;CursorDiv.style.height=resizeTa.rootElem.offsetHeight+&#34;px&#34;;CursorDiv.style.cursor=e.target.style.cursor;},deactivate:function(){resizeTa.doc.removeEventListener(&#34;mouseup&#34;,resizeTa.deactivate,true);switch(curTarget){case &#34;gripH&#34;:resizeTa.doc.removeEventListener(&#34;mousemove&#34;,resizeTa.resizeta_h,true);break;case &#34;gripV&#34;:resizeTa.doc.removeEventListener(&#34;mousemove&#34;,resizeTa.resizeta_v,true);break;case &#34;gripX&#34;:resizeTa.doc.removeEventListener(&#34;mousemove&#34;,resizeTa.resizeta_x,true);break;}CursorDiv.style.width=&#34;0px&#34;;CursorDiv.style.height=&#34;0px&#34;;resizeTa.posdivs();},resizeta_h:function(e){curPos=resizeTa.getposition(curTA_Nr);resizeTa.TA[curTA_Nr].style.width=e.pageX-curPos[0]+&#34;px&#34;;},resizeta_v:function(e){curPos=resizeTa.getposition(curTA_Nr);resizeTa.TA[curTA_Nr].style.height=e.pageY-curPos[1]+&#34;px&#34;;},resizeta_x:function(e){curPos=resizeTa.getposition(curTA_Nr);resizeTa.TA[curTA_Nr].style.width=e.pageX-curPos[0]+2+&#34;px&#34;;resizeTa.TA[curTA_Nr].style.height=e.pageY-curPos[1]+2+&#34;px&#34;;}};window.addEventListener(&#34;load&#34;,resizeTa.init,false);
在monkeygrease.xml中加入如下规则：
&#60;rule enabled=&#34;true&#34; name=&#34;Resizeable Textarea&#34; url-pattern=&#34;\/.*&#34; insert-at=&#34;head-end&#34;&#62;&#160;&#160; &#160;&#60;![CDATA[&#160;&#160; &#160;&#60;script type=&#34;text/javascript&#34; src=&#34;/yourScriptPath/resizeabletextareas.js&#34;&#62;&#60;/script&#62;&#160;&#160; &#160;]]&#62;&#60;/rule&#62;
这句话&#60;script type=&#34;text/javascript&#34; src=&#34;/yourScriptPath/resizeabletextareas.js&#34;&#62;&#60;/script&#62;就自动加入到客户端获得的html代码的head区域的后部。
这段JS只在Firefox下有效，实际上这篇文章跟Monkeygrease相关性不大，主要就是展示这段代码。
相关文章

2009-01-25 &#8212; OperaTor&#8211;带Tor的浏览器 (1)
2007-04-03 &#8212; weblogic与httpd整合 (0)
2006-08-18 &#8212; Web2.0样式的logo (2)
2006-05-18 &#8212; Google Web Toolkit发布 (4)
2006-03-30 &#8212; Performancing扩展也不满足需要 (0)
2006-03-30 &#8212; 本站CSS还是有点小问题 (2)

]]></description>
			<content:encoded><![CDATA[<p>上面说了Monkeygrease的基本用法，这里有一个示例，用于表示可变大小的文本域。</p>
<p><strong>Javascript代码如下，保存为resizeabletextareas.js：</strong></p>
<p>var resizeTa={loaded:null,TAlength:0,init:function(){<br />if(resizeTa.loaded){<br />return;<br />}else{<br />resizeTa.loaded=true;<br />var _1=document.getElementsByTagName(&quot;body&quot;)[0];<br />if(_1){<br />window.addEventListener(&quot;load&quot;,resizeTa.pageload,true);<br />}<br />}<br />},pageload:function(_2){<br />resizeTa.doc=_2.originalTarget;<br />resizeTa.TA=resizeTa.doc.getElementsByTagName(&quot;TEXTAREA&quot;);<br />resizeTa.TAlength=resizeTa.TA.length;<br />if(resizeTa.TAlength==0){<br />return;<br />}else{<br />resizeTa.rootElem=resizeTa.doc.getElementsByTagName(&quot;HTML&quot;)[0];<br />var i=resizeTa.TAlength;<br />while(i&#8211;){<br />resizeTa.newdiv(&quot;5&quot;,&quot;1&quot;,&quot;gripH_&quot;,i,&quot;w&quot;);<br />resizeTa.newdiv(&quot;1&quot;,&quot;5&quot;,&quot;gripV_&quot;,i,&quot;n&quot;);<br />resizeTa.newdiv(&quot;10&quot;,&quot;10&quot;,&quot;gripX_&quot;,i,&quot;se&quot;);<br />}<br />resizeTa.newdiv(&quot;0&quot;,&quot;0&quot;,&quot;showCursor&quot;,&quot;&quot;,&quot;w&quot;);<br />CursorDiv=resizeTa.doc.getElementById(&quot;showCursor&quot;);<br />CursorDiv.removeEventListener(&quot;mousedown&quot;,resizeTa.activate,true);<br />CursorDiv.style.left=&quot;0px&quot;;<br />CursorDiv.style.top=&quot;0px&quot;;<br />resizeTa.posdivs();<br />window.addEventListener(&quot;resize&quot;,resizeTa.posdivs,true);<br />}<br />},newdiv:function(w,h,id,nr,cu){<br />var _9=resizeTa.doc.createElement(&quot;div&quot;);<br />_9.setAttribute(&quot;ID&quot;,id+nr);<br />_9.setAttribute(&quot;STYLE&quot;,&quot;position:absolute;width:&quot;+w+&quot;px;height:&quot;+h+&quot;px;cursor:&quot;+cu+&quot;-resize&quot;);<br />_9.addEventListener(&quot;mousedown&quot;,resizeTa.activate,true);<br />resizeTa.rootElem.appendChild(_9);<br />},getposition:function(i){<br />var _b=resizeTa.TA[i];<br />var _c=_b.offsetLeft;<br />while(_b.offsetParent){<br />_c+=_b.offsetParent.offsetLeft;<br />_b=_b.offsetParent;<br />}<br />_b=resizeTa.TA[i];<br />var _d=_b.offsetTop;<br />while(_b.offsetParent){<br />_d+=_b.offsetParent.offsetTop;<br />_b=_b.offsetParent;<br />}<br />return [_c,_d];<br />},posdivs:function(){<br />var k=resizeTa.TAlength;<br />while(k&#8211;){<br />curPos=resizeTa.getposition(k);<br />resizeTa.doc.getElementById(&quot;gripH_&quot;+k).style.left=curPos[0]+resizeTa.TA[k].offsetWidth-3+&quot;px&quot;;<br />resizeTa.doc.getElementById(&quot;gripH_&quot;+k).style.top=curPos[1]+&quot;px&quot;;<br />resizeTa.doc.getElementById(&quot;gripH_&quot;+k).style.height=resizeTa.TA[k].offsetHeight-8+&quot;px&quot;;<br />resizeTa.doc.getElementById(&quot;gripV_&quot;+k).style.left=curPos[0]+&quot;px&quot;;<br />resizeTa.doc.getElementById(&quot;gripV_&quot;+k).style.top=curPos[1]+resizeTa.TA[k].offsetHeight-3+&quot;px&quot;;<br />resizeTa.doc.getElementById(&quot;gripV_&quot;+k).style.width=resizeTa.TA[k].offsetWidth-8+&quot;px&quot;;<br />resizeTa.doc.getElementById(&quot;gripX_&quot;+k).style.left=curPos[0]+resizeTa.TA[k].offsetWidth-8+&quot;px&quot;;<br />resizeTa.doc.getElementById(&quot;gripX_&quot;+k).style.top=curPos[1]+resizeTa.TA[k].offsetHeight-8+&quot;px&quot;;<br />}<br />},activate:function(e){<br />resizeTa.doc=e.target.ownerDocument;<br />resizeTa.TA=resizeTa.doc.getElementsByTagName(&quot;TEXTAREA&quot;);<br />CursorDiv=resizeTa.doc.getElementById(&quot;showCursor&quot;);<br />resizeTa.TAlength=resizeTa.TA.length;<br />var _10=e.target.getAttribute(&quot;ID&quot;).split(&quot;_&quot;);<br />curTarget=_10[0];<br />curTA_Nr=parseInt(_10[1]);<br />resizeTa.doc.addEventListener(&quot;mouseup&quot;,resizeTa.deactivate,true);<br />switch(curTarget){<br />case &quot;gripH&quot;:<br />resizeTa.doc.addEventListener(&quot;mousemove&quot;,resizeTa.resizeta_h,true);<br />break;<br />case &quot;gripV&quot;:<br />resizeTa.doc.addEventListener(&quot;mousemove&quot;,resizeTa.resizeta_v,true);<br />break;<br />case &quot;gripX&quot;:<br />resizeTa.doc.addEventListener(&quot;mousemove&quot;,resizeTa.resizeta_x,true);<br />break;<br />}<br />CursorDiv.style.width=resizeTa.rootElem.offsetWidth+&quot;px&quot;;<br />CursorDiv.style.height=resizeTa.rootElem.offsetHeight+&quot;px&quot;;<br />CursorDiv.style.cursor=e.target.style.cursor;<br />},deactivate:function(){<br />resizeTa.doc.removeEventListener(&quot;mouseup&quot;,resizeTa.deactivate,true);<br />switch(curTarget){<br />case &quot;gripH&quot;:<br />resizeTa.doc.removeEventListener(&quot;mousemove&quot;,resizeTa.resizeta_h,true);<br />break;<br />case &quot;gripV&quot;:<br />resizeTa.doc.removeEventListener(&quot;mousemove&quot;,resizeTa.resizeta_v,true);<br />break;<br />case &quot;gripX&quot;:<br />resizeTa.doc.removeEventListener(&quot;mousemove&quot;,resizeTa.resizeta_x,true);<br />break;<br />}<br />CursorDiv.style.width=&quot;0px&quot;;<br />CursorDiv.style.height=&quot;0px&quot;;<br />resizeTa.posdivs();<br />},resizeta_h:function(e){<br />curPos=resizeTa.getposition(curTA_Nr);<br />resizeTa.TA[curTA_Nr].style.width=e.pageX-curPos[0]+&quot;px&quot;;<br />},resizeta_v:function(e){<br />curPos=resizeTa.getposition(curTA_Nr);<br />resizeTa.TA[curTA_Nr].style.height=e.pageY-curPos[1]+&quot;px&quot;;<br />},resizeta_x:function(e){<br />curPos=resizeTa.getposition(curTA_Nr);<br />resizeTa.TA[curTA_Nr].style.width=e.pageX-curPos[0]+2+&quot;px&quot;;<br />resizeTa.TA[curTA_Nr].style.height=e.pageY-curPos[1]+2+&quot;px&quot;;<br />}};<br />window.addEventListener(&quot;load&quot;,resizeTa.init,false);</p>
<p><strong>在monkeygrease.xml中加入如下规则：</strong></p>
<p>&lt;rule enabled=&quot;true&quot; name=&quot;Resizeable Textarea&quot; url-pattern=&quot;\/.*&quot; insert-at=&quot;head-end&quot;&gt;<br />&nbsp;&nbsp; &nbsp;&lt;![CDATA[<br />&nbsp;&nbsp; &nbsp;&lt;script type=&quot;text/javascript&quot; src=&quot;/yourScriptPath/resizeabletextareas.js&quot;&gt;&lt;/script&gt;<br />&nbsp;&nbsp; &nbsp;]]&gt;<br />&lt;/rule&gt;</p>
<p>这句话&lt;script type=&quot;text/javascript&quot; src=&quot;/yourScriptPath/resizeabletextareas.js&quot;&gt;&lt;/script&gt;就自动加入到客户端获得的html代码的head区域的后部。</p>
<p><strong>这段JS只在Firefox下有效，实际上这篇文章跟Monkeygrease相关性不大，主要就是展示这段代码。</strong></p>
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-01-25 &#8212; <a href="http://www.robertbao.com/post/1176" title="OperaTor&#8211;带Tor的浏览器">OperaTor&#8211;带Tor的浏览器 (1)</a></li>
<li>2007-04-03 &#8212; <a href="http://www.robertbao.com/post/1194" title="weblogic与httpd整合">weblogic与httpd整合 (0)</a></li>
<li>2006-08-18 &#8212; <a href="http://www.robertbao.com/post/1060" title="Web2.0样式的logo">Web2.0样式的logo (2)</a></li>
<li>2006-05-18 &#8212; <a href="http://www.robertbao.com/post/1050" title="Google Web Toolkit发布">Google Web Toolkit发布 (4)</a></li>
<li>2006-03-30 &#8212; <a href="http://www.robertbao.com/post/986" title="Performancing扩展也不满足需要">Performancing扩展也不满足需要 (0)</a></li>
<li>2006-03-30 &#8212; <a href="http://www.robertbao.com/post/985" title="本站CSS还是有点小问题">本站CSS还是有点小问题 (2)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.robertbao.com/post/905/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用Monkeygrease进行Server端的代码注入</title>
		<link>http://www.robertbao.com/post/904</link>
		<comments>http://www.robertbao.com/post/904#comments</comments>
		<pubDate>Thu, 10 Nov 2005 04:33:40 +0000</pubDate>
		<dc:creator>robertbao</dc:creator>
				<category><![CDATA[WORK]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[program]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[最近看到了一些Monkeygrease的东西，将Greasemonkey的两个词颠倒，倒是不错的命名方法，可以利用一下Greasemonkey的知名度。
实际上Monkeygrease本来就号称是服务器端的Greasemonkey(在 Firefox 浏览器端执行用户Javascript代码来修改增强web页面)，它们的目的都是相同的，不过实现方式不一样，Greasemonkey是基于用户的、客户端的，Monkeygrease是基于代理、服务器端的。
既然在服务器端采用这种方式，面向客户端的都是一样的效果，没有了Greasemonkey的基于用户的可定制性，为什么不直接在服务器端修改本身的站点代码呢？关于这个问题，它的网站上有回答：对于许多web应用来说，有些不容易改进、有些不方便定制、有些看不到源代码、有些很复杂需要专业知识才能定制。
Monkeygrease是一个简单的servlet filter，它将Javascript，CSS或其它的元素插入到html页面上，就像在html代码中作AOP注入。使用Monkeygrease可以增强web的某些方面：

改变web页面的观感 
加入DHTML/AJAX效果 
文本框加入WYSIWYG 
整合进上下文相关的其它网站内容 
增强页面的可用性

对于如何开始Monkeygrease应用，下面做个简单的说明：
1、下载Monkeygrease。
2、将monkeygrease.jar放入WEB-INF/lib目录下。 
3、修改web.xml，加入下面的过滤器：
&#60;filter&#62;&#60;filter-name&#62;Monkeygrease&#60;/filter-name&#62;&#60;filter-class&#62;org.manalang.monkeygrease.MonkeygreaseFilter&#60;/filter-class&#62;&#60;init-param&#62;&#60;param-name&#62;confReloadCheckInterval&#60;/param-name&#62;&#60;param-value&#62;0&#60;/param-value&#62;&#60;/init-param&#62;&#60;init-param&#62;&#60;param-name&#62;commentsOn&#60;/param-name&#62;&#60;param-value&#62;true&#60;/param-value&#62;&#60;/init-param&#62;&#60;init-param&#62;&#60;param-name&#62;logLevel&#60;/param-name&#62;&#60;param-value&#62;2&#60;/param-value&#62;&#60;/init-param&#62;&#60;/filter&#62;&#60;filter-mapping&#62;&#60;filter-name&#62;Monkeygrease&#60;/filter-name&#62;&#60;url-pattern&#62;/*&#60;/url-pattern&#62;&#60;/filter-mapping&#62;
4、在monkeygrease.xml文件中定义规则。规则中url-pattern属性支持正则表达式；insert-at属性定义注入区域，如head-begin、head-end、body-begin、body-end；规则的节点内容通过CDATA表示，Javascript、CSS等代码就插入在这里，例如：
&#60;![CDATA[&#60;script type=&#34;text/javascript&#34; language=&#34;javascript&#34;&#62;&#60;!--window.onload = function() {&#160; alert('Hello World!!!');};--&#62;&#60;/script&#62;]]&#62; 
&#160;&#160; 下面是一个monkeygrease.xml的示例：
&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;&#60;mg:monkeygrease xmlns:mg=&#34;http://monkeygrease.org&#34;xmlns:xsi=&#34;http://www.w3.org/2001/XMLSchema-instance&#34;xsi:schemaLocation=&#34;http://monkeygrease.org http://monkeygrease.org/monkeygrease.xsd &#34;&#62;&#60;rule enabled=&#34;true&#34; name=&#34;Sample rule 1&#34; url-pattern=&#34;/.*&#34; insert-at=&#34;head-begin&#34;&#62;&#60;![CDATA[&#60;!-- Whatever you insert here gets injected as the first item in the &#60;head&#62; section --&#62;]]&#62;&#60;/rule&#62;&#60;rule enabled=&#34;true&#34; name=&#34;Sample rule 2&#34; url-pattern=&#34;/.*&#34; insert-at=&#34;head-end&#34;&#62;&#60;![CDATA[&#60;!-- Whatever you insert here gets [...]]]></description>
			<content:encoded><![CDATA[<p>最近看到了一些Monkeygrease的东西，将Greasemonkey的两个词颠倒，倒是不错的命名方法，可以利用一下Greasemonkey的知名度。</p>
<p>实际上Monkeygrease本来就号称是服务器端的Greasemonkey(在 Firefox 浏览器端执行用户Javascript代码来修改增强web页面)，它们的目的都是相同的，不过实现方式不一样，Greasemonkey是基于用户的、客户端的，Monkeygrease是基于代理、服务器端的。</p>
<p>既然在服务器端采用这种方式，面向客户端的都是一样的效果，没有了Greasemonkey的基于用户的可定制性，为什么不直接在服务器端修改本身的站点代码呢？关于这个问题，它的网站上有回答：对于许多web应用来说，有些不容易改进、有些不方便定制、有些看不到源代码、有些很复杂需要专业知识才能定制。</p>
<p>Monkeygrease是一个简单的<a href="http://java.sun.com/products/servlet/Filters.html" title="http://java.sun.com/products/servlet/Filters.html"><u>servlet filter</u></a>，它将Javascript，CSS或其它的元素插入到html页面上，就像在html代码中作AOP注入。使用Monkeygrease可以增强web的某些方面：</p>
<ul>
<li>改变web页面的观感 </li>
<li>加入DHTML/AJAX效果 </li>
<li>文本框加入WYSIWYG </li>
<li>整合进上下文相关的其它网站内容 </li>
<li>增强页面的可用性</li>
</ul>
<p>对于如何开始Monkeygrease应用，下面做个简单的说明：</p>
<p>1、下载<a href="http://monkeygrease.org/_media/code/monkeygrease-0.11.zip?id=download&#038;cache=cache"><u>Monkeygrease</u></a>。</p>
<p>2、将monkeygrease.jar放入WEB-INF/lib目录下。 </p>
<p>3、修改web.xml，加入下面的过滤器：</p>
<p><span class="sc3"><span class="re1">&lt;filter<span class="re2">&gt;</span></span><br /><span class="re1">&lt;filter</span>-name<span class="re2">&gt;</span>Monkeygrease<span class="re1">&lt;/filter</span>-name<span class="re2">&gt;</span><br /><span class="re1">&lt;filter</span>-class<span class="re2">&gt;</span><br />org.manalang.monkeygrease.MonkeygreaseFilter<br /><span class="re1">&lt;/filter</span>-class<span class="re2">&gt;</span><br /><span class="re1">&lt;init</span>-param<span class="re2">&gt;</span><br /><span class="re1">&lt;param</span>-name<span class="re2">&gt;</span>confReloadCheckInterval<span class="re1">&lt;/param</span>-name<span class="re2">&gt;</span><br /><span class="re1">&lt;param</span>-value<span class="re2">&gt;</span>0<span class="re1">&lt;/param</span>-value<span class="re2">&gt;</span><br /><span class="re1">&lt;/init</span>-param<span class="re2">&gt;</span><br /><span class="re1">&lt;init</span>-param<span class="re2">&gt;</span><br /><span class="re1">&lt;param</span>-name<span class="re2">&gt;</span>commentsOn<span class="re1">&lt;/param</span>-name<span class="re2">&gt;</span><br /><span class="re1">&lt;param</span>-value<span class="re2">&gt;</span>true<span class="re1">&lt;/param</span>-value<span class="re2">&gt;</span><br /><span class="re1">&lt;/init</span>-param<span class="re2">&gt;</span><br /><span class="re1">&lt;init</span>-param<span class="re2">&gt;</span><br /><span class="re1">&lt;param</span>-name<span class="re2">&gt;</span>logLevel<span class="re1">&lt;/param</span>-name<span class="re2">&gt;</span><br /><span class="re1">&lt;param</span>-value<span class="re2">&gt;</span>2<span class="re1">&lt;/param</span>-value<span class="re2">&gt;</span><br /><span class="re1">&lt;/init</span>-param<span class="re2">&gt;</span><br /><span class="re1">&lt;/filter<span class="re2">&gt;</span></span><br /><span class="re1">&lt;filter</span>-mapping<span class="re2">&gt;</span><br /><span class="re1">&lt;filter</span>-name<span class="re2">&gt;</span>Monkeygrease<span class="re1">&lt;/filter</span>-name<span class="re2">&gt;</span><br /><span class="re1">&lt;url</span>-pattern<span class="re2">&gt;</span>/*<span class="re1">&lt;/url</span>-pattern<span class="re2">&gt;</span><br /><span class="re1">&lt;/filter</span>-mapping<span class="re2">&gt;</span></span></p>
<p>4、<span class="sc3">在monkeygrease.xml文件中定义规则。规则中url-pattern属性支持<a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html"><u>正则表达式</u></a>；<span class="re0">insert-at属性定义注入区域，如</span><span class="st0">head-begin、head-end、body-begin、body-end；规则的节点内容通过</span>CDATA表示，Javascript、CSS等代码就插入在这里，例如：</span></p>
<p><span class="sc3"><span class="sc2">&lt;![CDATA[<br />&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;<br />&lt;!--<br />window.onload = function() {<br />&nbsp; alert('Hello World!!!');<br />};<br />--&gt;<br />&lt;/script&gt;<br />]]&gt;</span> </span></p>
<p><span class="sc3">&nbsp;&nbsp; 下面是一个monkeygrease.xml的示例：</span></p>
<p><span class="sc2"><span class="re1">&lt;</span>?xml <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span>?<span class="re2">&gt;</span><br /><span class="re1">&lt;mg</span>:monkeygrease xmlns:<span class="re0">mg</span>=<span class="st0">&quot;http://monkeygrease.org&quot;</span><br />xmlns:<span class="re0">xsi</span>=<span class="st0">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><br />xsi:<span class="re0">schemaLocation</span>=<span class="st0">&quot;http://monkeygrease.org http://monkeygrease.org/monkeygrease.xsd &quot;</span><span class="re2">&gt;</span><br /><span class="re1">&lt;rule</span> <span class="re0">enabled</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;Sample rule 1&quot;</span> <span class="re0">url-pattern</span>=<span class="st0">&quot;/.*&quot;</span> <span class="re0">insert-at</span>=<span class="st0">&quot;head-begin&quot;</span><span class="re2">&gt;</span><br />&lt;![CDATA[<br />&lt;!-- Whatever you insert here gets injected as the first item in the &lt;head&gt; section --&gt;<br />]]&gt;<br /><span class="re1">&lt;/rule<span class="re2">&gt;</span></span><br /><span class="re1">&lt;rule</span> <span class="re0">enabled</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;Sample rule 2&quot;</span> <span class="re0">url-pattern</span>=<span class="st0">&quot;/.*&quot;</span> <span class="re0">insert-at</span>=<span class="st0">&quot;head-end&quot;</span><span class="re2">&gt;</span><br />&lt;![CDATA[<br />&lt;!-- Whatever you insert here gets injected as the last item in the &lt;head&gt; section --&gt;<br />]]&gt;<br /><span class="re1">&lt;/rule<span class="re2">&gt;</span></span><br /><span class="re1">&lt;rule</span> <span class="re0">enabled</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;Sample rule 3&quot;</span> <span class="re0">url-pattern</span>=<span class="st0">&quot;/.*&quot;</span> <span class="re0">insert-at</span>=<span class="st0">&quot;body-begin&quot;</span><span class="re2">&gt;</span><br />&lt;![CDATA[<br />&lt;!-- Whatever you insert here gets injected as the first item in the &lt;body&gt; section --&gt;<br />]]&gt;<br /><span class="re1">&lt;/rule<span class="re2">&gt;</span></span><br /><span class="re1">&lt;rule</span> <span class="re0">enabled</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;Sample rule 4&quot;</span> <span class="re0">url-pattern</span>=<span class="st0">&quot;/.*&quot;</span> <span class="re0">insert-at</span>=<span class="st0">&quot;body-end&quot;</span><span class="re2">&gt;</span><br />&lt;![CDATA[<br />&lt;!-- Whatever you insert here gets injected as the last item in the &lt;body&gt; section --&gt;<br />]]&gt;<br /><span class="re1">&lt;/rule<span class="re2">&gt;</span></span><br /><span class="re1">&lt;/mg</span>:monkeygrease<span class="re2">&gt;</span><br /><span class="re1">&lt;/xml<span class="re2">&gt;</span></span></span></p>
<p><span class="re2">5、将monkeygrease.xml放入WEB-INF目录下。</span></p>
<p><span class="re2">6、<strong>初始的客户端浏览的html代码：</strong></span></p>
<p><span class="sc0">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;<br /><span class="re1">&lt;html<span class="re2">&gt;</span></span><br /><span class="re1">&lt;head<span class="re2">&gt;</span></span><br /><span class="re1">&lt;title<span class="re2">&gt;</span></span>Test<span class="re1">&lt;/title<span class="re2">&gt;</span></span><br /><span class="re1">&lt;meta</span> <span class="re0">http-equiv</span>=<span class="st0">&quot;Content-Type&quot;</span> <span class="re0">content</span>=<span class="st0">&quot;text/html; charset=iso-8859-1&quot;</span><span class="re2">&gt;</span><br /><span class="re1">&lt;/head<span class="re2">&gt;</span></span><br /><span class="re1">&lt;body<span class="re2">&gt;</span></span><br />This is a test <br /><span class="re1">&lt;/body<span class="re2">&gt;</span></span><br /><span class="re1">&lt;/html<span class="re2">&gt;</span></span></span></p>
<p><strong><span class="re2">在</span><span class="sc3">monkeygrease规则应用注入内容后的html代码：</span></strong></p>
<p><span class="sc0">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;<br /><span class="re1">&lt;html<span class="re2">&gt;</span></span><br /><span class="re1">&lt;head<span class="re2">&gt;</span></span><br /><span class="coMULTI">&lt;!&#8211; Whatever you insert here gets injected as the first item in the &lt;head&gt;</span> section &#8211;&gt;<br /><span class="re1">&lt;title<span class="re2">&gt;</span></span>Test<span class="re1">&lt;/title<span class="re2">&gt;</span></span><br /><span class="re1">&lt;meta</span> <span class="re0">http-equiv</span>=<span class="st0">&quot;Content-Type&quot;</span> <span class="re0">content</span>=<span class="st0">&quot;text/html; charset=iso-8859-1&quot;</span><span class="re2">&gt;</span><br /><span class="coMULTI">&lt;!&#8211; Whatever you insert here gets injected as the last item in the &lt;head&gt;</span> section &#8211;&gt;<br /><span class="re1">&lt;/head<span class="re2">&gt;</span></span><br /><span class="re1">&lt;body<span class="re2">&gt;</span></span><br /><span class="coMULTI">&lt;!&#8211; Whatever you insert here gets injected as the first item in the &lt;body&gt;</span> section &#8211;&gt;<br />This is a test <br /><span class="coMULTI">&lt;!&#8211; Whatever you insert here gets injected as the last item in the &lt;body&gt;</span> section &#8211;&gt;<br /><span class="re1">&lt;/body<span class="re2">&gt;</span></span><br /><span class="re1">&lt;/html<span class="re2">&gt;</span></span></span></p>
<p>完了，就是这么简单。不过看起来实用价值不大。</p>
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-11-11 &#8212; <a href="http://www.robertbao.com/post/1208" title="程序员的高效实践">程序员的高效实践 (2)</a></li>
<li>2009-09-01 &#8212; <a href="http://www.robertbao.com/post/1206" title="程序员的自我修养">程序员的自我修养 (1)</a></li>
<li>2009-08-15 &#8212; <a href="http://www.robertbao.com/post/1205" title="程序员的自动化">程序员的自动化 (0)</a></li>
<li>2008-09-15 &#8212; <a href="http://www.robertbao.com/post/1199" title="轻量级统一会计系统">轻量级统一会计系统 (0)</a></li>
<li>2008-09-03 &#8212; <a href="http://www.robertbao.com/post/1197" title="一个小型工作流系统介绍">一个小型工作流系统介绍 (0)</a></li>
<li>2008-07-05 &#8212; <a href="http://www.robertbao.com/post/1198" title="项目组餐饮结算系统">项目组餐饮结算系统 (0)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.robertbao.com/post/904/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
