<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[鑫的方向]]></title> 
<link>http://www.xinlogs.com/index.php</link> 
<description><![CDATA[记录自己走过的轨迹]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[鑫的方向]]></copyright>
<item>
<link>http://www.xinlogs.com/Mourning-CSS-SETUP/</link>
<title><![CDATA[哀悼日网站和bo-blog变灰色设置]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Wed, 21 Apr 2010 00:33:13 +0000</pubDate> 
<guid>http://www.xinlogs.com/Mourning-CSS-SETUP/</guid> 
<description>
<![CDATA[ 
	<p>根据国务院文件，5.19-5.21为全国哀悼日，在此期间，全国和各驻外机构下半旗志哀，停止公共娱乐活动，外交部和我国驻外使领馆设立吊唁簿。5月19日14时28分起，全国人民默哀3分钟，届时汽车、火车、舰船鸣笛，防空警报鸣响。 Admin5与很多草根网站都将整站换成素装。并建议中国所有站点更换为素装。<br />
为方便站点哀悼，特提供css滤镜代码，以表哀悼。以下为全站CSS代码。</p>
<div class="codeText"><span class="copyCodeText" onclick="copyIdText('code_9157');" style="cursor: pointer">复制内容到剪贴板</span>
<div id="code_9157">
<ol class="dp-css" style="border-bottom: 0px; border-left: 0px; list-style-type: none; margin-left: 5px; border-top: 0px; border-right: 0px">
    <li class="alt"><span><span>html&nbsp;{&nbsp;filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);&nbsp;}&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" />
<script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script>
</div>
<p>使用方法：这段代码可以变网页为黑白，将代码加到CSS最顶端就可以实现素装。建议全国站长动起来。为在地震中遇难的同胞哀悼。</p>
<p>如果网站没有使用CSS，可以在网页/模板的HTML代码&lt;head&gt;和&lt;/head&gt; 之间插入：</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">XML/HTML 代码</span><span class="copyCodeText" onclick="copyIdText('code_9247');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_9247">
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">style</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>html{filter:progid:DXImageTransform.Microsoft.BasicImage(</span><span class="attribute">grayscale</span><span>=</span><span class="attribute-value">1</span><span>);} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">style</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" />
<script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script>
</div>
<p>有一些站长的网站可能使用这个css 不能生效，是因为网站没有使用最新的网页标准协议</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">XML/HTML 代码</span><span class="copyCodeText" onclick="copyIdText('code_7852');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_7852">
<ol class="dp-xml">
    <li class="alt"><span><span>&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;&quot;-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN&quot;&nbsp;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="tag">&lt;</span><span class="tag-name">html</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/1999/xhtml&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" />
<script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script>
</div>
<p>请将网页最头部的&lt;html&gt;替换为以上代码。</p>
<p>有一些网站FLASH动画的颜色不能被CSS滤镜控制，可以在FLASH代码的&lt;object &hellip;&gt;和&lt;/object&gt;之间插入：</p>
<div class="codeText"><span class="copyCodeText" onclick="copyIdText('code_3112');" style="cursor: pointer">复制内容到剪贴板</span>
<div id="code_3112">
<ol class="dp-c">
    <li class="alt"><span><span>&lt;param&nbsp;value=</span><span class="string">&quot;false&quot;</span><span>&nbsp;name=</span><span class="string">&quot;menu&quot;</span><span>/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&lt;param&nbsp;value=</span><span class="string">&quot;opaque&quot;</span><span>&nbsp;name=</span><span class="string">&quot;wmode&quot;</span><span>/&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" />
<script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script>
</div>
<p>最简单的把页面变成灰色的代码是在head 之间加<br />
&nbsp;</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">XML/HTML 代码</span><span class="copyCodeText" onclick="copyIdText('code_7466');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_7466">
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">style</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;text/css&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>html&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;FILTER:&nbsp;gray &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span class="tag">&lt;/</span><span class="tag-name">style</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" />
<script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script>
</div>
<p>下面再看看如何给上面这些应用到bo-blog的页面中呢。</p>
<p>首先我们到bo-blog的根目录找到我们的template模板目录，在其中找到我们使用的模板所采用的CSS文件。在文件最后加入</p>
<div class="codeText"><span class="copyCodeText" onclick="copyIdText('code_7962');" style="cursor: pointer">复制内容到剪贴板</span>
<div id="code_7962">
<ol class="dp-xml">
    <li class="alt"><span><span>html&nbsp;{&nbsp;filter:progid:DXImageTransform.Microsoft.BasicImage(</span><span class="attribute">grayscale</span><span>=</span><span class="attribute-value">1</span><span>);&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" />
<script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script>
</div>
<p>另在哀悼日或遇难的新闻，所有专题和主题 图片上不能使用红色标题。</p><br/>Tags - <a href="http://www.xinlogs.com/tags/%25E5%2593%2580%25E6%2582%25BC%25E6%2597%25A5/" rel="tag">哀悼日</a> , <a href="http://www.xinlogs.com/tags/css/" rel="tag">css</a>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/playframework-helloworld/</link>
<title><![CDATA[playframework--helloworld程序编写]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Thu, 07 Jan 2010 05:43:37 +0000</pubDate> 
<guid>http://www.xinlogs.com/playframework-helloworld/</guid> 
<description>
<![CDATA[ 
	<p>本文参考官方<a href="http://www.playframework.org/documentation/1.0/firstapp">http://www.playframework.org/documentation/1.0/firstapp</a>教程，基本上是翻译</p>
<p>转载请注明<a href="http://www.xinlogs.com/">http://www.xinlogs.com</a></p>
<p>在安装完playframework框架后，我们就可以编写一个helloworld程序来看看playframework框架是如何工作的了。</p>
<p>我是在C:盘的当前用户目录下，建立了一个playframework目录。在命令窗口，进入这个目录</p>
<p><img alt="" src="attachment.php?fid=42" /></p>
<p>在c:usersbaboplayframework目录下输入下面命令，创建项目</p>
<div class="codeText"><span class="copyCodeText" onclick="copyIdText('code_125');" style="cursor: pointer">复制内容到剪贴板</span>
<div id="code_125">
<ol class="dp-xml" style="border-bottom: 0px; border-left: 0px; list-style-type: none; margin-left: 5px; border-top: 0px; border-right: 0px">
    <li class="alt"><span><span>play new helloworld </span></span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>然后play框架会提示你输入程序的全名称，这里就输入helloworld即可</p>
<p><img alt="" src="attachment.php?fid=43" /></p>
<p>play new helloworld会在当前目录下，创建一个helloworld目录，用来保存项目的全部文件。</p>
<p>下面运行我们新创建的项目，进入项目的目录helloworld，输入play run</p>
<p><img alt="" src="attachment.php?fid=44" /></p>
<p>当看到入上图提示，证明项目已经跑在9000端口等我们访问了。让我们打开浏览器输入<a href="http://localhost:9000/">http://localhost:9000</a>访问下看看</p>
<p><img alt="" src="attachment.php?fid=45" /></p>
<p>看到上图显示的默认欢迎界面，说明我们的项目已经成功创建。下面我们看看play框架是如何显示出这个页面的</p>
<p>play框架里，你创建项目以后，程序的入口点在 <b>conf/routes</b> 文件。这个文件定义了程序全部可以被访问的URL地址。如果你打开 <b>conf/routes</b> 文件，你会看到第一个&lsquo;route&rsquo;信息就是如下语句<br />
&nbsp;</p>
<div class="codeText"><span class="copyCodeText" onclick="copyIdText('code_6240');" style="cursor: pointer">复制内容到剪贴板</span>
<div id="code_6240">
<ol class="dp-xml" style="border-bottom: 0px; border-left: 0px; list-style-type: none; margin-left: 5px; border-top: 0px; border-right: 0px">
    <li class="alt"><span><span>GET / Application.index </span></span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>以上语句，告诉play框架，当web服务器收到一个访问 / 路径的的GET请求，就调用Application.index的java方法。实际上Application.index方法是<strong>controllers.Application.index</strong>的简写，因为controllers package 已经被import进来。</p>
<p>一个play框架程序的每个URL都会有入口点，我们叫这些方法Action。定义这些方法的类，我们叫做 <b>'controllers'。</b></p>
<p>下面我们看看 <b>controllers.Application</b> controller。 打开<b>helloworld/app/controllers/Application.java</b> 文件:</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">Java 代码</span><span class="copyCodeText" onclick="copyIdText('code_9784');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_9784">
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span> controllers; </span></span></li>
    <li>&nbsp;</li>
    <li class="alt"><span class="keyword">import</span><span> play.mvc.*; </span></li>
    <li>&nbsp;</li>
    <li class="alt"><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> Application </span><span class="keyword">extends</span><span> Controller { </span></li>
    <li>&nbsp;</li>
    <li class="alt"><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> index() { </span></li>
    <li><span>render(); </span></li>
    <li class="alt"><span>} </span></li>
    <li>&nbsp;</li>
    <li class="alt"><span>} </span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>我们可以看到Application的父类是 <b>play.mvc.Controller</b> 类。这个类为controllers提供了很多有用的方法, 像<b>render() </b>方法，我们用在index action里。</p>
<p>这个index action 被定义为一个 <b>'public static void' </b>方法. action方法是static的, 因为controller类从来都不会有实例. 总是返回void类型.</p>
<p>默认的index action 很简单: 它调用<b>render() </b>方法告诉Play框架去返回一个模板页面.用一个模板生成http响应是最常见的方法(但不是就这一个种方法)。</p>
<p>模板是在 <b>/app/views</b> 目录下的一个简单的text文件. 因为我们没有指定一个模板, 所以这个action将用一个默认的模板: <b>Application/index.html</b></p>
<p>让我们看下模板文件的内容，打开<strong>helloworld/app/views/Application/index.html</strong> 文件:</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">XML/HTML 代码</span><span class="copyCodeText" onclick="copyIdText('code_8842');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_8842">
<ol class="dp-xml">
    <li class="alt"><span><span>#{extends 'main.html' /} </span></span></li>
    <li><span>#{set title:'Home' /} </span></li>
    <li class="alt">&nbsp;</li>
    <li><span>#{welcome /} </span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>模板的内容看起来很简洁。实际上你看到的全是Play标签。它常接近JSP标签。上面的 <b>#{welcome /}</b>标签，就是生成我们在浏览器看到的默认欢迎页面。</p>
<p>这个<strong>#{extends /}</strong> 标签告诉Play框架这个模板继承于另外一个叫 <b>main.html</b>的模板文件。模板继承是一个很棒的概念，在用于创建复杂网页的共用部分重用上。</p>
<p>打开 <b>helloworld/app/views/main.html</b> 模板:</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">XML/HTML 代码</span><span class="copyCodeText" onclick="copyIdText('code_8740');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_8740">
<ol class="dp-xml">
    <li class="alt"><span><span>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span><span class="tag">&gt;</span><span> </span></span></li>
    <li>&nbsp;</li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">html</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/1999/xhtml&quot;</span><span> </span><span class="attribute">xml:lang</span><span>=</span><span class="attribute-value">&quot;en&quot;</span><span> </span><span class="attribute">lang</span><span>=</span><span class="attribute-value">&quot;en&quot;</span><span class="tag">&gt;</span><span> </span></li>
    <li><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span> </span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>#{get 'title' /}</span><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span><span> </span></li>
    <li><span class="tag">&lt;</span><span class="tag-name">meta</span><span> </span><span class="attribute">http-equiv</span><span>=</span><span class="attribute-value">&quot;Content-Type&quot;</span><span> </span><span class="attribute">content</span><span>=</span><span class="attribute-value">&quot;text/html; charset=utf-8&quot;</span><span class="tag">/&gt;</span><span> </span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">link</span><span> </span><span class="attribute">rel</span><span>=</span><span class="attribute-value">&quot;stylesheet&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;text/css&quot;</span><span> </span><span class="attribute">media</span><span>=</span><span class="attribute-value">&quot;screen&quot;</span><span> </span></li>
    <li><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;@{'/public/stylesheets/main.css'}&quot;</span><span> </span><span class="tag">/&gt;</span><span> </span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">link</span><span> </span><span class="attribute">rel</span><span>=</span><span class="attribute-value">&quot;shortcut icon&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;image/png&quot;</span><span> </span></li>
    <li><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;@{'/public/images/favicon.png'}&quot;</span><span> </span><span class="tag">/&gt;</span><span> </span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span><span> </span></li>
    <li><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span> </span></li>
    <li class="alt"><span>#{doLayout /} </span></li>
    <li><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span> </span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span><span> </span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>看到<strong>#{doLayout /}</strong> 标签了吧，它就是<strong>Application/index.html</strong> 文件内容被插入的位置</p>
<p><strong>创建一个表单</strong></p>
<p>下面我们将从一个可以输入我们名字的表单来开始写我们的程序。</p>
<p>编辑 <b>helloworld/app/views/Application/index.html</b> 模板，如下所示</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">XML/HTML 代码</span><span class="copyCodeText" onclick="copyIdText('code_8433');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_8433">
<ol class="dp-xml">
    <li class="alt"><span><span>#{extends 'main.html' /} </span></span></li>
    <li><span>#{set title:'Home' /} </span></li>
    <li class="alt">&nbsp;</li>
    <li><span class="tag">&lt;</span><span class="tag-name">form</span><span> </span><span class="attribute">action</span><span>=</span><span class="attribute-value">&quot;@{Application.sayHello()}&quot;</span><span> </span><span class="attribute">method</span><span>=</span><span class="attribute-value">&quot;GET&quot;</span><span class="tag">&gt;</span><span> </span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;text&quot;</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;myName&quot;</span><span> </span><span class="tag">/&gt;</span><span> </span></li>
    <li><span class="tag">&lt;</span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;submit&quot;</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;Say hello!&quot;</span><span> </span><span class="tag">/&gt;</span><span> </span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span> </span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>我们使用@{...} 符号让Play框架自动生成可以调用Application.sayHello action的URL。现在，刷新下我们的浏览器。</p>
<p><img alt="" src="attachment.php?fid=46" /></p>
<p>我们得到了一个错误，因为我们引用的 Application.sayHello action不存在。让我们在helloworld/app/controllers/Application.java文件里创建它。</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">Java 代码</span><span class="copyCodeText" onclick="copyIdText('code_2733');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_2733">
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span> controllers; </span></span></li>
    <li>&nbsp;</li>
    <li class="alt"><span class="keyword">import</span><span> play.mvc.*; </span></li>
    <li>&nbsp;</li>
    <li class="alt"><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> Application </span><span class="keyword">extends</span><span> Controller { </span></li>
    <li>&nbsp;</li>
    <li class="alt"><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> index() { </span></li>
    <li><span>render(); </span></li>
    <li class="alt"><span>} </span></li>
    <li>&nbsp;</li>
    <li class="alt"><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> sayHello(String myName) { </span></li>
    <li><span>render(myName); </span></li>
    <li class="alt"><span>} </span></li>
    <li>&nbsp;</li>
    <li class="alt"><span>} </span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>我们在action方法里声明了<strong>myName</strong>参数，它将被自动填充上来自表单提交的HTTP <strong>myName</strong> 参数。</p>
<p>现在我们在访问<a href="http://localhost:9000">http://localhost:9000</a>显示如下</p>
<p><img alt="" src="attachment.php?fid=47" /></p>
<p>在文本框输入你的名字，然后提交，你会发现一个新的错误。</p>
<p><img alt="" src="attachment.php?fid=48" /></p>
<p>这个错误显而易见，Play框架调用sayHello action方法的默认模板，但是这个模板不存在。让我们创建<strong>helloworld/app/views/Application/sayHello.html</strong>文件</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">XML/HTML 代码</span><span class="copyCodeText" onclick="copyIdText('code_3443');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_3443">
<ol class="dp-xml">
    <li class="alt"><span><span>#{extends 'main.html' /} </span></span></li>
    <li><span>#{set title:'Home' /} </span></li>
    <li class="alt">&nbsp;</li>
    <li><span class="tag">&lt;</span><span class="tag-name">h1</span><span class="tag">&gt;</span><span>Hello ${myName ?: 'guest'}!</span><span class="tag">&lt;/</span><span class="tag-name">h1</span><span class="tag">&gt;</span><span> </span></li>
    <li class="alt">&nbsp;</li>
    <li><span class="tag">&lt;</span><span class="tag-name">a</span><span> </span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;@{Application.index()}&quot;</span><span class="tag">&gt;</span><span>Back to form</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span> </span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>然后刷新浏览器页面，显示如下</p>
<p><img alt="" src="attachment.php?fid=49" /></p>
<p>我们看到了sayHello.html文件里使用了groovy的<strong>'?:'</strong>操作符。当我们<strong>myName</strong>没有没有被填充的时候，它默认用'guest'填充myName。</p>
<p>到这里，我们的HelloWorld程序已经可以正常运行了。但是我们还有几个问题需要解决。</p>
<p>如何显示更好的URL，这个对于SEO还是比较重要的。</p>
<p>如何自定义LayOut</p>
<p>如何对输入的字符进行验证</p>
<p>如何自动测试。</p>
<p>后面我们慢慢实现。</p>
<p>&nbsp;</p><br/>Tags - <a href="http://www.xinlogs.com/tags/hellowrold/" rel="tag">hellowrold</a> , <a href="http://www.xinlogs.com/tags/playframework/" rel="tag">playframework</a> , <a href="http://www.xinlogs.com/tags/java/" rel="tag">java</a>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/bo-blog-insert-googleadsense/</link>
<title><![CDATA[bo-blog 2.1.1如何加入google广告条]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Thu, 31 Dec 2009 02:52:01 +0000</pubDate> 
<guid>http://www.xinlogs.com/bo-blog-insert-googleadsense/</guid> 
<description>
<![CDATA[ 
	<p>刚开始使用的bo-blog的时候也不知道如何加入google广告条，经过这几天的咕哝，现在已经成功在右边和下面加入。方法记录如下</p>
<p><strong>右侧边栏加入google广告</strong></p>
<p>进入后台管理-&gt;常规管理-&gt;模块配置</p>
<p>点击左侧的新建/编辑项目 如图</p>
<p><img alt="" src="attachment.php?fid=39" /></p>
<p>然后在手动添加项目中选择侧边模块，确定。如图</p>
<p><img alt="" src="attachment.php?fid=40" /></p>
<p>确认后，进入到新增/编辑项目页面</p>
<p>项目名称--这个是在后台编辑的时候，给自己分辨模块用的，随意命名。我的叫做googleadsense，注意：只能字母和数字</p>
<p>项目描述--随意填写</p>
<p>抬头文字--显示在首页侧边栏上，我的叫做广告栏，根据个人情况写</p>
<p>栏目内容--这里写入google的广告代码就可以了</p>
<p>这个办法最容易，不用修改模板。如果加入后，首页显示google广告栏，里面内容是白的，不要着急，过段时间就可以显示了。我第一个广告大约在30分钟后，才正确显示出来。</p>
<p><strong>博客底部加入google广告</strong></p>
<p>底部加入广告，也可以用上面类似的办法，通过加入底部模块实现。但是我尝试了，不好对齐，而且有的模板会破坏底部风格。所以我没有用添加底部模块的办法。</p>
<p>我采用直接修改模板的elements.php文件方法。</p>
<p>到bo-blog的template目录下，找到自己使用的模板文件夹，我用的neowin2，所以对应目录就是neowin2</p>
<p>在模板目录下，打开elements.php文件。找到文件里的displayfooter位置，在displayfooter段里面加入google广告代码。入下所示</p>
<div class="codeText">
<div class="codeHead"><span class="lantxt">PHP 代码</span><span class="copyCodeText" onclick="copyIdText('code_8194');" style="cursor: pointer">复制内容到剪贴板</span></div>
<div id="code_8194">
<ol class="dp-c">
    <li class="alt"><span><span class="vars">$elements</span><span>[</span><span class="string">'displayfooter'</span><span>]=&lt;&lt;&lt;eot </span></span></li>
    <li><span>&lt;div </span><span class="keyword">class</span><span>=</span><span class="string">&quot;clear&quot;</span><span>&gt; &lt;/div&gt; </span></li>
    <li class="alt"><span>&lt;/div&gt; </span></li>
    <li><span>&lt;div </span><span class="keyword">class</span><span>=</span><span class="string">&quot;content-box-b&quot;</span><span>&gt; </span></li>
    <li class="alt"><span>&lt;div </span><span class="keyword">class</span><span>=</span><span class="string">&quot;content-box-b-r&quot;</span><span>&gt; </span></li>
    <li><span>&lt;div </span><span class="keyword">class</span><span>=</span><span class="string">&quot;content-box-b-l&quot;</span><span>&gt;&lt;/div&gt; </span></li>
    <li class="alt"><span>&lt;/div&gt; </span></li>
    <li><span>&lt;/div&gt; </span></li>
    <li><span>/* 下面为google广告代码 */ </span></li>
    <li class="alt"><span>&lt;center&gt; </span></li>
    <li><span>&lt;script type=</span><span class="string">&quot;text/javascript&quot;</span><span>&gt;&lt;!-- </span></li>
    <li class="alt"><span>google_ad_client = </span><span class="string">&quot;pub-2759888315234430&quot;</span><span>; </span></li>
    <li><span class="comment">/* 728x90, ... 09-12-21 */</span><span> </span></li>
    <li class="alt"><span>google_ad_slot = </span><span class="string">&quot;9531615827&quot;</span><span>; </span></li>
    <li><span>google_ad_width = 728; </span></li>
    <li class="alt"><span>google_ad_height = 90; </span></li>
    <li><span class="comment">//--&gt; </span></li>
    <li class="alt"><span>&lt;/script&gt; </span></li>
    <li><span>&lt;script type=</span><span class="string">&quot;text/javascript&quot;</span><span> </span></li>
    <li class="alt"><span>src=</span><span class="string">&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;</span><span>&gt; </span></li>
    <li><span>&lt;/script&gt; </span></li>
    <li class="alt"><span>&lt;/center&gt; </span></li>
    <li class="alt"><span>/*google广告代码结束*/ </span></li>
    <li><span>&lt;div id=</span><span class="string">&quot;footer&quot;</span><span>&gt; </span></li>
    <li class="alt"><span>&lt;div id=</span><span class="string">&quot;footer-r&quot;</span><span>&gt; </span></li>
    <li><span>&lt;div id=</span><span class="string">&quot;footer-l&quot;</span><span>&gt; </span></li>
    <li class="alt"><span>&lt;div id=</span><span class="string">&quot;footer-misc&quot;</span><span>&gt; </span></li>
    <li><span>Skin By &lt;a href=</span><span class="string">&quot;http://www.neowin.net/&quot;</span><span> target=</span><span class="string">&quot;_blank&quot;</span><span>&gt;Neowin&lt;/a&gt;&lt;br /&gt; </span></li>
    <li class="alt"><span>Transplanted By &lt;a href=</span><span class="string">&quot;http://blog.meiu.cn/&quot;</span><span> target=</span><span class="string">&quot;_blank&quot;</span><span>&gt;Lingter&lt;/a&gt; </span></li>
    <li><span>&lt;/div&gt; </span></li>
    <li class="alt"><span>&lt;div id=</span><span class="string">&quot;footer-copyright&quot;</span><span>&gt; </span></li>
    <li><span>{section_foot_components} </span></li>
    <li class="alt"><span>&lt;div id=</span><span class="string">&quot;processtime&quot;</span><span>&gt; </span></li>
    <li><span>&lt;/div&gt; </span></li>
    <li class="alt"><span>&lt;/div&gt; </span></li>
    <li><span>&lt;div </span><span class="keyword">class</span><span>=</span><span class="string">&quot;clear&quot;</span><span>&gt;&lt;/div&gt; </span></li>
    <li class="alt"><span>&lt;/div&gt; </span></li>
    <li><span>&lt;/div&gt; </span></li>
    <li class="alt"><span>&lt;/div&gt; </span></li>
    <li><span>&lt;/div&gt; </span></li>
    <li class="alt"><span>eot; </span></li>
</ol>
</div>
<link rel="stylesheet" type="text/css" href="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/insertcode.css" /><script language="javascript" src="http://www.xinlogs.com/editor/fckeditor/editor/plugins/insertcode/excute.js" type="text/javascript"></script></div>
<p>上面的代码就是在博客下面，footer信息的上面，加入一条google广告。效果可以参考<a href="http://www.xinlogs.com">www.xinlogs.com</a>的样子</p><br/>Tags - <a href="http://www.xinlogs.com/tags/bo-blog/" rel="tag">bo-blog</a> , <a href="http://www.xinlogs.com/tags/google%25E5%25B9%25BF%25E5%2591%258A/" rel="tag">google广告</a> , <a href="http://www.xinlogs.com/tags/%25E6%25A8%25A1%25E6%259D%25BF%25E4%25BF%25AE%25E6%2594%25B9/" rel="tag">模板修改</a>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/playframework-installation-guide/</link>
<title><![CDATA[playframework--Installation guide 安装手册【翻译】]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Wed, 30 Dec 2009 10:30:02 +0000</pubDate> 
<guid>http://www.xinlogs.com/playframework-installation-guide/</guid> 
<description>
<![CDATA[ 
	<h1 id="Installationguide">Installation guide 安装手册</h1>
<h2 id="aPrerequisitesa"><a>Prerequisites</a> 前提条件</h2>
<p>To run the play framework, you need <a href="http://java.sun.com">Java 5 or later</a>. If you wish to build play from source, you will need the <a href="http://bazaar-vcs.org/">Bazaar source control client</a> to fetch the source code and <a href="http://ant.apache.org/">Ant</a> to build it.</p>
<p>要运行Play框架，你需要Java 5以后的的JDK。如果你想从源码构建play框架，你需要用Bazaar源码控制的客户端去获取源代码并用Ant创建它。</p>
<p class="note">If you are using MacOS, java is just built-in. If you are using linux, make sure to use either the Sun-JDK or OpenJDK (and not gcj which is the default java command on many linux distro). If you are using Windows, just download and install the latest JDK package.</p>
<p class="note">如果你用MacOS系统，java是内建的。如果你用Linux系统，确定你使用的是Sun-JDK或者OpenJDK（不要是gcj，很多linux发行版默认都用gcj作为默认的java环境）。如果你用Windows系统，只要下载并安装最新发行的JDK包。</p>
<p>Be sure to have java in the current path (try to type <b>java -version</b> to check). Play will use the default java or the one available at the <b>$JAVA_HOME</b> path if defined.</p>
<p>确定java在当前路径（可以通过在命令行输入<strong>java -version</strong>检查）。Play框架将调用默认java或者一个在<strong>$JAVA_HOME</strong>环境变量声明的路径里的java。</p>
<p>The play command line utility uses python. So it should work out of the box on any UNIX system. If you&rsquo;re running Windows, don&rsquo;t worry, a python runtime is bundled with the framework.</p>
<p>play框架的命令行工具是用python写的。所以它应该可以在任意Unix系统上工作，如果你是Windows系统，别担心，一个python的运行环境已经内建在框架里了。</p>
<h2 id="aDownloadthebinarypackagea"><a>Download the binary package</a> 下载二进制包</h2>
<p>Download the latest <a href="http://download.playframework.org/">play binary package</a> and extract the archive. For convenience, you should add the framework installation directory to your system PATH. If you&rsquo;re on UNIX, make sure that the <em>play</em> script is runnable (otherwise simply do a <b>chmod +x play</b>). That&rsquo;s all.</p>
<p>下载最新的play框架二进制包并解压缩。为了方便，你应该将play框架的安装目录添加到你系统的path环境变量里。如果你用unix，确认play脚本可以运行（否则可以执行<strong>chmod +x play</strong>）<strong>.</strong></p>
<p class="note"><strong>Tip 建议</strong><br />
<br />
If you need to rebuild the framework for whatever reason, run <strong>ant</strong> from the <strong>$PLAY_HOME/framework</strong> directory.</p>
<p class="note">如果你需要重建框架，从 <strong>$PLAY_HOME/framework</strong> 目录运行<strong>ant</strong>。</p>
<h2 id="aBuildfromthelatestsourcesa"><a>Build from the latest sources</a> 从最新源码建立</h2>
<p>To benefit from the latest improvements and bug fixes, you may want to compile play from sources. You&rsquo;ll need a <a href="http://bazaar-vcs.org/Download">Bazaar client</a> to fetch the sources and <a href="http://ant.apache.org/">Ant</a> to build the framework.</p>
<p>为了最新的改善和bug修复，你也许想从源代码编译play框架。你将需要一个Bazaar客户端去获取源代码并用Ant建立play框架。</p>
<p>From the command line:</p>
<p>通过下面的命令行建立</p>
<pre><code># bzr checkout lp:play
# cd play/framework
# ant
</code></pre>
<p>The Play framework is ready to use.</p>
<p class="note">lp:play currently aliases to http:bazaar.launchpad.net/%7Eplay-developers/play/1.0/</p>
<h2 id="aUsingtheplaycommanda"><a>Using the play command</a> 是用play命令</h2>
<p>When the framework is correctly installed, open a shell and execute <strong>play</strong>.</p>
<p>当框架正确安装后，打开一个shell并执行<strong>play</strong></p>
<pre><code>$ play
</code></pre>
<p>You should see the play default message:</p>
<p>你应该看到play的默认信息</p>
<p><img border="0" alt="" src="http://www.playframework.org/documentation/1.0/images/help" /></p>
<p>You can get more help on any specific command using <strong>play help any-command-name-here</strong>. For example, try:</p>
<p>你可以获得更多帮助在任何具体命令上用 <strong>play help any-command-name-here例如，尝试</strong></p>
<pre><code># play help run
</code></pre>
<h2 id="aCreatinganewapplicationa"><a>Creating a new application</a> 创建一个新的应用</h2>
<p>Use the <b>new</b> command to create a new application. You must give a non-existent path where the application will be created.</p>
<p>用<strong>new</strong>命令创建一个新的应用。你必须给一个不存在的名字，才可以创建应用（就是给一个以前没有的项目名字）</p>
<pre><code># play new myApp
</code></pre>
<p><img border="0" alt="" src="http://www.playframework.org/documentation/1.0/images/guide1-1" /></p>
<p>Will create a new application. Start it with:</p>
<p>创建一个新的应用，用下面命令</p>
<pre><code># play run myApp
</code></pre>
<p>You can then open a browser at <a href="http://localhost:9000">http://localhost:9000</a> and see the default page for the application.</p>
<p>你可以用浏览器访问 <a href="http://localhost:9000">http://localhost:9000</a>并看到应用的默认页面。</p>
<p><img border="0" alt="" src="http://www.playframework.org/documentation/1.0/images/guide1-2" /></p>
<p class="note"><b>Your play environnement is ready</b><br />
&nbsp;</p>
<p class="note"><b>你的play框架已经准备好了</b></p>
<p class="note"><b>关于如何使用play框架，可以参考视频</b></p>
<p class="note"><b><a href="http://www.xinlogs.com/playframework-video/">http://www.xinlogs.com/playframework-video/</a></b></p><br/>Tags - <a href="http://www.xinlogs.com/tags/playframework/" rel="tag">playframework</a> , <a href="http://www.xinlogs.com/tags/installation/" rel="tag">installation</a> , <a href="http://www.xinlogs.com/tags/guide/" rel="tag">guide</a> , <a href="http://www.xinlogs.com/tags/play%25E6%25A1%2586%25E6%259E%25B6/" rel="tag">play框架</a> , <a href="http://www.xinlogs.com/tags/%25E5%25AE%2589%25E8%25A3%2585%25E6%2589%258B%25E5%2586%258C/" rel="tag">安装手册</a>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/playframework-video/</link>
<title><![CDATA[playframework--开发视频]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Sun, 27 Dec 2009 14:53:33 +0000</pubDate> 
<guid>http://www.xinlogs.com/playframework-video/</guid> 
<description>
<![CDATA[ 
	<a href="http://www.playframework.org/">www.playframework.org</a>网站上本来首页有一段大约10分钟的视频。内容是10分钟开发一个web程序，包括数据库的curd操作。<br />但是由于视频是放在了<span style="color: #800000"><a href="http://vimeo.com/">http://vimeo.com/</a><br /></span><span style="color: #000000">国内正常情况下访问不到。<br />我在浏览首页的时候，发现可以通过<a href="http://www.playframework.org/">www.playframework.org</a>下载mp4的视频观看。<br />下面给出下载地址，感兴趣的朋友可以下载观看<br /></span><span style="color: #800000">http://download.playframework.org/presentations/screencast.mp4<br /><br />视频截图<br /><img src="http://www.playframework.org/images/screen.png" border="0" /></span><br/>Tags - <a href="http://www.xinlogs.com/tags/playframework/" rel="tag">playframework</a> , <a href="http://www.xinlogs.com/tags/%25E5%25BC%2580%25E5%258F%2591%25E8%25A7%2586%25E9%25A2%2591/" rel="tag">开发视频</a> , <a href="http://www.xinlogs.com/tags/play/" rel="tag">play</a> , <a href="http://www.xinlogs.com/tags/javaweb/" rel="tag">javaweb</a> , <a href="http://www.xinlogs.com/tags/%25E5%25BC%2580%25E5%258F%2591%25E6%25A1%2586%25E6%259E%25B6/" rel="tag">开发框架</a>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/playframework/</link>
<title><![CDATA[playframework--play！java on rails框架]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Sat, 26 Dec 2009 15:59:46 +0000</pubDate> 
<guid>http://www.xinlogs.com/playframework/</guid> 
<description>
<![CDATA[ 
	今天看程序员，发现了play！framework这个java web框架。<br />以前也接触过SSH框架，struts+spring+hibernate。。。看着每一个部分那厚厚的参考书。。我就害怕。<br />后来就看了一阵子ruby on rails。彻底喜欢上了那种简洁的风格，约定优先配置也很棒。<br /><br />知道发现play框架，才知道原来java也可以这样简洁。play框架扔掉了J2EE的各种规范。。。完全像rails一样简洁了<br /><br />Play！的主要特性： <ul><li>&nbsp;&nbsp;&nbsp; 简单的开发周期。该框架可自动编译和重新装载已改变的源文件。 </li><li>&nbsp;&nbsp;&nbsp; 智能绑定HTTP参数到Java方法参数。 </li><li>&nbsp;&nbsp;&nbsp; 基于Apache Mina的快速HTTP服务器(<a href="http://mina.apache.org/" target="_blank"><span style="color: #006699">http://mina.apache.org</span></a>)。 </li><li>&nbsp;&nbsp;&nbsp; 一个基于Groovy的强大的模板引擎，可实现多层继承，定制用户标签等功能。 </li><li>&nbsp;&nbsp;&nbsp; 优秀的错误报告功能：发生异常时，该框架会直接显示出错误的源代码，甚至是模板代码。 </li></ul><p>目前playframework网站的资料也比较全。从安装入门到开发实例应有尽有。我打算有时间慢慢翻译过来，发布在我的博客上。也是对自己学习的一种激励。<br /><br /><br /><strong>官方网站<br /></strong><a href="http://www.playframework.org/" target="_blank">http://www.playframework.org/</a><br />&nbsp;<br />各种实例<br /></p><h2>Yet Another Blog Engine</h2><p>The final application from the <a href="http://www.playframework.org/documentation/1.0/guide1">play guide</a> tutorial.</p><p><img src="http://www.playframework.org/documentation/1.0/images/yabe" border="0" width="1050" height="612" /></p><h2>Forum</h2><p>A simple forum application using JPA.</p><p><img src="http://www.playframework.org/documentation/1.0/images/forum" border="0" width="996" height="649" /></p><h2>Jobboard</h2><p>A full faetured job board application that uses the CRUD module to automatically generate the administration area. </p><p><img src="http://www.playframework.org/documentation/1.0/images/jobboard" border="0" width="996" height="649" /></p><h2>Chat</h2><p>An HTTP based chat application. We use the asynchronous request model to be able to handle a lot of simultaneous connected users without resources waste.</p><p><img src="http://www.playframework.org/documentation/1.0/images/chat" border="0" width="996" height="649" /></p><h2>Stock watcher</h2><p>Based on the default GWT tutorial, it shows how to use GWT within a play application.</p><p><img src="http://www.playframework.org/documentation/1.0/images/stocks" border="0" width="996" height="649" /></p><h2>My lists</h2><p>A clone of the the well known 37Signals TadaList application built using the Google App Engine support. It uses Siena as persistence engine.</p><p><img src="http://www.playframework.org/documentation/1.0/images/lists" border="0" width="996" height="649" /></p><br/>Tags - <a href="http://www.xinlogs.com/tags/play%25EF%25BC%2581/" rel="tag">play！</a> , <a href="http://www.xinlogs.com/tags/playframework/" rel="tag">playframework</a> , <a href="http://www.xinlogs.com/tags/javaweb/" rel="tag">javaweb</a> , <a href="http://www.xinlogs.com/tags/javaonrails/" rel="tag">javaonrails</a> , <a href="http://www.xinlogs.com/tags/javaweb%25E6%2595%258F%25E6%258D%25B7%25E5%25BC%2580%25E5%258F%2591%25E6%25A1%2586%25E6%259E%25B6/" rel="tag">javaweb敏捷开发框架</a> , <a href="http://www.xinlogs.com/tags/java/" rel="tag">java</a>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/post/42/</link>
<title><![CDATA[从百度空间转移到spaces live]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Mon, 21 Dec 2009 00:53:09 +0000</pubDate> 
<guid>http://www.xinlogs.com/post/42/</guid> 
<description>
<![CDATA[ 
	<div id="msgcns!4986F8F322CC617B!651" class="bvMsg"><p>本来打算购买一个在美国的VPS，来自己架设个blog程序用的，但是老婆说我太糟蹋钱了，不让玩。只好选择live spaces的25G免费空间了。</p><p>为了这次转移，我写了一个小程序帮忙。</p><p>现在已经把原来<a href="http://hi.baidu.com/babodx">http://hi.baidu.com/babodx</a>的博客内容全部搬到了<a href="http://babodx.spaces.live.com/">http://babodx.spaces.live.com</a></p><p>而且还申请了一个域名玩，可以直接通过<a href="http://www.xinlogs.com/">www.xinlogs.com</a>访问</p><p>这次域名是在<a href="http://www.namecheap.com/">www.namecheap.com</a>直接用美元买的，据说这样比较保险。国内的域名服务商信誉很差。</p><p><strong>转移步骤</strong></p><p>我的想法是先用一个程序把百度空间上，我的博客全部保存到本地。然后在用个程序把保存下来的内容发送到spaces live上，就完成了转移。</p><h1><strong>一、将百度空间的博客保存到本地</strong></h1><p>首先用程序抓取百度空间的博客内容</p><p>这个程序并不完全是我自己写的，我参考了很多人的文章和程序。参考如下</p><h4><a href="http://www.agileprogrammer.com/dotnetguy/articles/BlogImporterInRuby.aspx">Blog Importer in Ruby</a></h4><h4><a href="http://crafterm.net/blog/articles/2006/09/22/blog-content-migration-from-movabletype-to-typo-using-xml-rpc">Blog content migration from MovableType to Typo using XML-RPC</a></h4><p><a href="http://cxc200026.blog.163.com/blog/static/342686720092895235567/">lsblog的改进版本</a></p><p>根据前人的经验，我写了一个程序，根据用户名抓取百度空间的博客，然后保存为用户名.xml文件</p><p>文件格式如下</p><p><a href="http://babodx.spaces.live.com/default.aspx?_c01_BlogPart=blogentry&amp;_c=BlogPart&amp;handle=cns!4986F8F322CC617B!651#">-</a> &lt;baidu_space total=&quot;<strong>70</strong>&quot; id=&quot;<strong>babodx</strong>&quot; pagecnt=&quot;<strong>7</strong>&quot;&gt; </p><p><a href="http://babodx.spaces.live.com/default.aspx?_c01_BlogPart=blogentry&amp;_c=BlogPart&amp;handle=cns!4986F8F322CC617B!651#">-</a> &lt;page blogcnt=&quot;<strong>10</strong>&quot; index=&quot;<strong>0</strong>&quot;&gt; </p><p><a href="http://babodx.spaces.live.com/default.aspx?_c01_BlogPart=blogentry&amp;_c=BlogPart&amp;handle=cns!4986F8F322CC617B!651#">-</a> &lt;item href=&quot;<strong>http://hi.baidu.com/babodx/blog/item/fb1ebcb14ea2075d08230218.html</strong>&quot;&gt; </p><p>&lt;date&gt;2009-07-12 00:23&lt;/date&gt; </p><p>&lt;title&gt;ubuntu server 9.04 终端乱码问题&lt;/title&gt; </p><p>&lt;category&gt;Linux&lt;/category&gt; </p><p>&lt;body&gt;&lt;p&gt;安装了ubuntu server 9.04，安装的时候选择了中文环境。&lt;/p&gt; &lt;p&gt;因为server是没有桌面的，发现终端里面显示提示信息，出错信息都变成乱码了。&lt;/p&gt; &lt;p&gt;解决办法&lt;/p&gt; &lt;p&gt;修改/etc/default/locale文件&lt;/p&gt; &lt;p&gt;将zh_CN修改为en_US&lt;/p&gt;&lt;/body&gt; </p><p>&lt;/item&gt; </p><p>用ｉｔｅｍ标签来包含每个博客，用date,title,category,body分别代表发表时间、标题、分类、内容。 </p><p>RUBY代码主要参考了lsblog的改进版。 </p><p><a href="http://cid-4986f8f322cc617b.skydrive.live.com/self.aspx/.Public/saveblog.rb">savelog.rb</a>下载 </p><p>只要提供用户名，就可以将全部博客保存为ｘｍｌ文件 </p><p><strong>二、将本地保存的xml文件，上传到spaces live空间</strong> </p><p>这里遇到很多麻烦，以至最终这部分没有能用程序实现。 </p><p>我的想法是用ruby调用metaweblog api接口来发送blog到spaces live空间 </p><p>可以参考 </p><p><a href="http://msdn.microsoft.com/en-us/library/bb259702.aspx">Windows Live Spaces MetaWeblog API</a> </p><p>后来发送简单的文本已经可以实现了。但是问题出在对ｂｏｄｙ的处理，从百度空间抓过来的ｂｏｄｙ是ｈｔｍｌ代码，里面包含了文章和图片的引用。 </p><p>如果直接用ＭｅｔａＷｅｂｌｏｇ　ＡＰＩ发送，这些ｈｔｍｌ就直接显示在ｂｌｏｇ上面了，而不是应该有的格式。 </p><p>我查看了一些文档，也没有找到解决办法，因而只要放弃了。 </p><p>后来是手动通过live writer把本地的blog.xml发送到live spaces空间的。那个累呀。。。。 </p><p><strong>待解决问题</strong> </p><p><strong>一是如何让程序自动发送html格式的blog内容到live spaces空间。</strong> </p><p><strong>二是如何处理博客里面的图片，原来图片都是放在百度空间的，如果在live spaces引用，会出现错误。</strong> </p><p><strong>ruby可以直接从百度抓图片，问题还是如何上传到live spaces</strong> </p></div><div class="footerLinks">2009/7/17 16:00&nbsp;</div>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/post/41/</link>
<title><![CDATA[rails配合fckeditor实现文本编辑工具条]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Mon, 21 Dec 2009 00:52:26 +0000</pubDate> 
<guid>http://www.xinlogs.com/post/41/</guid> 
<description>
<![CDATA[ 
	<div id="msgcns!4986F8F322CC617B!225" class="bvMsg"><p>主要参考了<br /><a href="http://blog.caronsoftware.com/articles/2006/08/07/fckeditor-plugin-for-rails">http://blog.caronsoftware.com/articles/2006/08/07/fckeditor-plugin-for-rails</a><br /><a href="http://www.blogjava.net/rocky/archive/2006/11/04/rails-fckeditor-integration.html">http://www.blogjava.net/rocky/archive/2006/11/04/rails-fckeditor-integration.html</a></p><p><strong>安装</strong></p><p>下载<a href="http://rubyforge.org/projects/fckeditorp/">http://rubyforge.org/projects/fckeditorp/</a>项目的 FCKEditor Plugin for Rails，将下载的文件加压缩后，保存到fckeditor文件夹中</p><p>将fckeditor文件夹拷贝到自己项目的vendor/plugins目录下</p><p>运行rack fckeditor:install</p><p>然后在需要用到这个插件的页面，输入&lt;%= javascript_include_tag &quot;fckeditor/fckeditor&quot; %&gt;或者将这句话添加到app/view/layouts/下的对应文件中</p><p><strong>使用</strong></p><p>需要使用这个工具条的地方，输入</p><p>&lt;%=fckeditor_textarea(&quot;post&quot;, &quot;body&quot;, :toolbarSet =&gt; 'Simple', :width =&gt; '100%', :height =&gt; '500px' )%&gt;</p><p>注意fckeditor_textarea的一个参数post必须是action传过来的一个实体类，如果action没有传过来，就会提示出错</p><p>比如我这里用到了post,我的action如下</p><p>def new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @post = Post.new<br />&nbsp;&nbsp;&nbsp; end</p><p>第二个参数，body对应表单里的字段</p><p>第三个参数toolbarSet=&gt;&quot;Simple&quot;为工具条风格，这个风格可以在public/javascripts/fckcustom.js文件里面定义（修改后，要关闭浏览器再开才起作用）</p><p>第四、五个参数，代表文本区域的大小</p><p><strong>图片上传</strong></p><p>默认安装后，图片上传不能用，需要修改vendor/plugins/fckeditor/app/controllers/fckeditor_controller.rb文件的upload_file action如下</p><p>def upload_file<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @new_file = params[:NewFile]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @url = upload_directory_path<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftype = @new_file.content_type.strip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ! MIME_TYPES.include?(ftype)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @errorNumber = 202<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts &quot;#{ftype} is invalid MIME type&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise &quot;#{ftype} is invalid MIME type&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = current_directory_path + &quot;/&quot; + @new_file.original_filename<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File.open(path,&quot;wb&quot;,0664) do &#124;fp&#124;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileUtils.copy_stream(@new_file, fp)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @errorNumber = 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rescue =&gt; e<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @errorNumber = 110 if @errorNumber.nil?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Fix provided by Nicola Piccinini -- <a href="http://superfluo.org/">http://superfluo.org</a><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; render :text =&gt; %Q'&lt;script&gt;window.parent.OnUploadCompleted(<a href="mailto:#{@errorNumber}, &quot;#{UPLOADED+&quot;/&quot;+params[:Type]+&quot;/&quot;+@new_file.original_filename} &quot;);&lt;/script&gt; ">#{@errorNumber},&#92;&quot;#{UPLOADED+&quot;/&quot;+params[:Type]+&quot;/&quot;+@new_file.original_filename}&#92;&quot;);&lt;/script&gt;'</a><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; end</p><p>关于工具条具体某个工具怎么显示，提供那些功能，可以在public/javascripts/fckeditor/fckconfig.js文件里面定义</p></div><div class="footerLinks">2007/4/27 10:21</div>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/post/40/</link>
<title><![CDATA[rails实现图片验证码]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Mon, 21 Dec 2009 00:51:52 +0000</pubDate> 
<guid>http://www.xinlogs.com/post/40/</guid> 
<description>
<![CDATA[ 
	<p>写在了babo.javaeye.com了</p><p><a href="http://babo.javaeye.com/blog/72298">http://babo.javaeye.com/blog/72298</a></p>
]]>
</description>
</item><item>
<link>http://www.xinlogs.com/post/39/</link>
<title><![CDATA[rails下使用sqlite3]]></title> 
<author>babo &lt;admin@yourname.com&gt;</author>
<category><![CDATA[编程语言]]></category>
<pubDate>Mon, 21 Dec 2009 00:51:20 +0000</pubDate> 
<guid>http://www.xinlogs.com/post/39/</guid> 
<description>
<![CDATA[ 
	<div id="msgcns!4986F8F322CC617B!223" class="bvMsg"><p>参考<a href="http://wiki.rubyonrails.org/rails/pages/HowtoUseSQLite">http://wiki.rubyonrails.org/rails/pages/HowtoUseSQLite</a></p><p><strong>安装SQLite</strong></p><p>SQLite 是一个轻量级的sql风格数据库.可以执行大部分sql92标准</p><p>SQLite全部安装只有244kb,包括命令行客户端和DLL文件</p><p>SQLite不用安装服务进程，就像Access数据库一样使用方便</p><p>安装只需要2个文件</p><ol><li>SQLite <span>DLL</span> </li><li>SQLite command-line client for creating tables </li></ol><p><span style="font-family: 新宋体"><span style="font-family: Arial">添加</span>sqlite3.exe</span> 和<span style="font-family: 新宋体">sqlite3</span><span style="font-family: Courier New">.dll</span> 到系统的path下，我放在了c:&#92;windows&#92;system32下了</p><p><strong>安装sqlite3-ruby.gem</strong></p><p>gem install sqlite3-ruby</p><p>Attempting local installation of 'sqlite3'<br />Local gem file not found: sqlite3*.gem<br />Attempting remote installation of 'sqlite3'<br />Select which gem to install for your platform (i386-mswin32)<br />1. sqlite3-ruby 1.1.0 (mswin32)<br />2. sqlite3-ruby 1.1.0 (ruby)<br />3. sqlite3-ruby 1.0.1 (ruby)<br />...<br />&gt;<br /><br />选择 1 安装sqlite3-ruby 1.1.0(mswin32) </p><p>现在好像2才是sqlite3-ruby 1.1.0(mswin32),总之选择(mswin32)就对了</p><p><strong>安装图像管理工具（也可以不用，直接用命令行也很方便）</strong></p><p><a href="http://sqlitebrowser.sourceforge.net/">http://sqlitebrowser.sourceforge.net/</a></p><p><strong>创建数据库</strong></p><p>进入项目所在目录，比如我的项目是testsql</p><p>d:&#92;work&#92;testsql&gt;sqlite db&#92;test.db</p><p>上面命令就在db目录下，创建了一个test.db数据库</p><p><strong>配置database.yml文件，访问test.db数据库</strong></p><p>development:<br />&nbsp;&nbsp; adapter: sqlite3<br />&nbsp;&nbsp; database: db/test.db</p><p>&nbsp;&nbsp; #username: root<br />&nbsp;&nbsp; #password: <br />&nbsp;&nbsp; #host: localhost</p><p>后面如何操作，就和使用mysql数据库一样了。</p><p>建立数据表可以用db:migrate来完成</p></div><div class="footerLinks">2007/4/19 10:19&nbsp;</div>
]]>
</description>
</item>
</channel>
</rss>