<?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/"
	>

<channel>
	<title>互联网，请记住我 &#187; Ruby</title>
	<atom:link href="http://www.162cm.com/archives/category/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://www.162cm.com</link>
	<description>一米六二的北漂生活</description>
	<pubDate>Fri, 09 Jan 2009 11:52:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>神奇的DRb</title>
		<link>http://www.162cm.com/archives/680.html</link>
		<comments>http://www.162cm.com/archives/680.html#comments</comments>
		<pubDate>Sun, 17 Aug 2008 05:18:26 +0000</pubDate>
		<dc:creator>xurenlu</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[分布式]]></category>

		<guid isPermaLink="false">http://www.162cm.com/?p=680</guid>
		<description><![CDATA[前一阵研究用spread来承载数据分发,做的报价系统很失败。今天翻翻书，发现了DRb这个分布式ruby的实现。
一样地，直接上代码:
#! /usr/bin/ruby
require &#34;drb&#34;
class My
	def get(arg1)
		oo=Hash.new
		oo['data']='I am your baby'
		oo['time']=Time.new.to_i
		oo['arg']=arg1
		0.upto(1000) {&#124;i&#124;
			oo['dbf'+i.to_s]=rand
		}
		return oo
	end	
end
m=My.new
&#160;
DRb.start_service('druby://localhost:9999',m)
DRb.thread.join
这是服务器端的，我们用ruby server.ruby &#038; 运行它。
接着写客户端的:
#! /usr/bin/ruby
require 'drb'
require &#34;profile&#34;
DRb.start_service()
obj=DRbObject.new(nil,'druby://localhost:9999')
hash=obj.get('hi,iam polly')
puts hash.keys
puts hash.keys.length
然后运行ruby client.rb，我们就得到了另一个机器（例子中是同一台机器)某个进程中的一个运行结果。
酷吧。但是实际上,DRb运行的并不快。
]]></description>
			<content:encoded><![CDATA[<p>前一阵研究用spread来承载数据分发,做的报价系统很失败。今天翻翻书，发现了DRb这个分布式ruby的实现。<br />
一样地，直接上代码:</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">#! /usr/bin/ruby</li>
<li>require &quot;drb&quot;</li>
<li>class My</li>
<li>	def get(arg1)</li>
<li>		oo=Hash.new</li>
<li>		oo['data']='I am your baby'</li>
<li>		oo['time']=Time.new.to_i</li>
<li>		oo['arg']=arg1</li>
<li>		0.upto(1000) {|i|</li>
<li>			oo['dbf'+i.to_s]=rand</li>
<li>		}</li>
<li>		return oo</li>
<li>	end	</li>
<li>end</li>
<li>m=My.new</li>
<li>&nbsp;</li>
<li>DRb.start_service('druby://localhost:9999',m)</li>
<li>DRb.thread.join</li></ol></div>
<p>这是服务器端的，我们用ruby server.ruby &#038; 运行它。<br />
接着写客户端的:</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">#! /usr/bin/ruby</li>
<li>require 'drb'</li>
<li>require &quot;profile&quot;</li>
<li>DRb.start_service()</li>
<li>obj=DRbObject.new(nil,'druby://localhost:9999')</li>
<li>hash=obj.get('hi,iam polly')</li>
<li>puts hash.keys</li>
<li>puts hash.keys.length</li></ol></div>
<p>然后运行ruby client.rb，我们就得到了另一个机器（例子中是同一台机器)某个进程中的一个运行结果。<br />
酷吧。<strong>但是实际上,DRb运行的并不快。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.162cm.com/archives/680.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>文本挖掘,构造垃圾站[一]</title>
		<link>http://www.162cm.com/archives/629.html</link>
		<comments>http://www.162cm.com/archives/629.html#comments</comments>
		<pubDate>Thu, 01 May 2008 09:31:25 +0000</pubDate>
		<dc:creator>xurenlu</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[中文分词]]></category>

		<category><![CDATA[自然语言处理]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ror]]></category>

		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://www.162cm.com/?p=629</guid>
		<description><![CDATA[最近为ruby,ruby on rails的灵活和魔幻而着迷。爽。
上上周一个同事给我们介绍了自然语言处理的一些知识，觉得很不错。事实上虽然是雅虎公司的一名工程师，但是因为我不是搜索／邮箱／平台研发这些部门，基本上没有接触到比较深一点的东西，也许对于这些部门来说很简单的东西，对于我来说还是很难以理解的。
课后自己去找了些东西看了看，然后有这样一思路,可以用来构造一个垃圾站。
基本思路是:
     1.首先我需要一个spider.这个spider由两个部分完成，第一部分是由一个feed管理程序来不停地从网上读rss回来，第二部分是常规spider，跟nutch什么的spider无异.
     2.第二部分是预处理。这一部分包括：纯文本化、去垃圾。
     3.第三部分是运算:分词，关键词提取,提取相关文章。
     4.热点呈现,网站部分。
具体实现:
    rss 的spider要简单一些,但是根据抓回来的内容，也是很多质量不高的种子。比如新浪新闻的rss基本没有正文,而有些feedsky的种子后面跟着一个小尾巴(广告),需要处理。
   对于没有正文的，很简单,将之平均长度算出来，如果某个种子的平均长度都很短，就将这个种子丢弃。
   对于很多内容不咱的，但是广告链接一大堆的，也有办法:先纯文本化,一个文档就细化为一系列的段。html标签有的去掉了，有的换成空格了.这时将段按空格分组，如果没组长度都很短,即文章内容中若是大量充满着html标签，这样的多半是广告或是垃圾链接。
    比如这一段:
2006-09-11&#160; &#160;charon 写道&#160; 我现在对这类动态语言的非本质实现抱很大的怀疑态度。 最近除了这个新闻以外，IronPyton(python的.net版本)1.0也发布了。但看了一下，感觉虽然不是特别差，也是差得可以。也许这是给那些熟悉.net同时又想找一个动态语言的人一个选择？ 两个语法相同但是标准库有差异(jruby可能语法上也略有差异)，支持库有重大差异的语言，还能算是一个语言吗？ 当年不论出于什么原因，Sun对于MS污染java的行为举起了大棒，现在这几个开源社区的动态语言，却纷纷搞出这么些方言来，不好说阿。&#160; &#160;IronPython和JRuby可能还是不太一样的。dotnet平台实际上提供了自己统一的dotnet fraemwork类库，所谓不同的编程语言支持，更像是一种语法糖衣而已。但是JRuby其实实现了大部分ruby自己的库，用JRuby并非仅仅用一个ruby语法而已，关键是ruby本身的方便的库和rails框架，至于Java库的支持，只是辅助了。&#160; Sun对JRuby的支持表明了一种态度，这种态度是承认ruby在企业快速开发方面的优势，而对ruby提供更好的支持。而Microsoft支持的IronPython更像是用python语法写C#程序那种感觉，换汤不换药。&#160; &#160; &#160;charon 
&#160;&#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>最近为ruby,ruby on rails的灵活和魔幻而着迷。爽。<br />
上上周一个同事给我们介绍了自然语言处理的一些知识，觉得很不错。事实上虽然是雅虎公司的一名工程师，但是因为我不是搜索／邮箱／平台研发这些部门，基本上没有接触到比较深一点的东西，也许对于这些部门来说很简单的东西，对于我来说还是很难以理解的。<br />
课后自己去找了些东西看了看，然后有这样一思路,可以用来构造一个垃圾站。<br />
基本思路是:<br />
     1.首先我需要一个spider.这个spider由两个部分完成，第一部分是由一个feed管理程序来不停地从网上读rss回来，第二部分是常规spider，跟nutch什么的spider无异.<br />
     2.第二部分是预处理。这一部分包括：纯文本化、去垃圾。<br />
     3.第三部分是运算:分词，关键词提取,提取相关文章。<br />
     4.热点呈现,网站部分。<br />
具体实现:<br />
    rss 的spider要简单一些,但是根据抓回来的内容，也是很多质量不高的种子。比如新浪新闻的rss基本没有正文,而有些feedsky的种子后面跟着一个小尾巴(广告),需要处理。<br />
   对于没有正文的，很简单,将之平均长度算出来，如果某个种子的平均长度都很短，就将这个种子丢弃。<br />
   对于很多内容不咱的，但是广告链接一大堆的，也有办法:先纯文本化,一个文档就细化为一系列的段。html标签有的去掉了，有的换成空格了.这时将段按空格分组，如果没组长度都很短,即文章内容中若是大量充满着html标签，这样的多半是广告或是垃圾链接。<br />
    比如这一段:</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">2006-09-11&nbsp; &nbsp;charon 写道&nbsp; 我现在对这类动态语言的非本质实现抱很大的怀疑态度。 最近除了这个新闻以外，IronPyton(python的.net版本)1.0也发布了。但看了一下，感觉虽然不是特别差，也是差得可以。也许这是给那些熟悉.net同时又想找一个动态语言的人一个选择？ 两个语法相同但是标准库有差异(jruby可能语法上也略有差异)，支持库有重大差异的语言，还能算是一个语言吗？ 当年不论出于什么原因，Sun对于MS污染java的行为举起了大棒，现在这几个开源社区的动态语言，却纷纷搞出这么些方言来，不好说阿。&nbsp; &nbsp;IronPython和JRuby可能还是不太一样的。dotnet平台实际上提供了自己统一的dotnet fraemwork类库，所谓不同的编程语言支持，更像是一种语法糖衣而已。但是JRuby其实实现了大部分ruby自己的库，用JRuby并非仅仅用一个ruby语法而已，关键是ruby本身的方便的库和rails框架，至于Java库的支持，只是辅助了。&nbsp; Sun对JRuby的支持表明了一种态度，这种态度是承认ruby在企业快速开发方面的优势，而对ruby提供更好的支持。而Microsoft支持的IronPython更像是用python语法写C#程序那种感觉，换汤不换药。&nbsp; &nbsp; &nbsp;charon </li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; robbin&nbsp; &nbsp; &nbsp;浏览: 1653543 次&nbsp; 性别:&nbsp; &nbsp;来自: 上海&nbsp; &nbsp; &nbsp; 详细资料&nbsp; &nbsp; 搜索本博客&nbsp; &nbsp; &nbsp; &nbsp; 博客分类&nbsp; &nbsp; 全部博客 (119)&nbsp; &nbsp; 杂感 (38)&nbsp; &nbsp; Java (27)&nbsp; &nbsp; Ruby (31)&nbsp; &nbsp; System (5)&nbsp; &nbsp; JavaEye (19)&nbsp; &nbsp; &nbsp; 我的相册&nbsp; &nbsp; &nbsp; &nbsp;游乌镇&nbsp; 共 33 张&nbsp; &nbsp; &nbsp;其他分类&nbsp; &nbsp; 我的收藏&nbsp; (19)&nbsp; &nbsp;我的论坛帖子&nbsp; (4506)&nbsp; &nbsp;我的精华良好贴&nbsp; (97)&nbsp; &nbsp; &nbsp;最近加入圈子&nbsp; &nbsp; JavaEye沙龙&nbsp; &nbsp; 广州JavaEyer饭局群&nbsp; &nbsp; Ubuntu For Fun&nbsp; &nbsp; JavaEye水源&nbsp; &nbsp; 英语学习&nbsp; &nbsp; &nbsp; 链接&nbsp; &nbsp; javaeye&nbsp; &nbsp; &nbsp; 存档&nbsp; &nbsp; 2008-04&nbsp; (2)&nbsp; &nbsp;2008-03&nbsp; (6)&nbsp; &nbsp;2008-01&nbsp; (7)&nbsp; &nbsp;更多存档...&nbsp; &nbsp; &nbsp; 最新评论&nbsp; &nbsp; Warp framework - 一个相 ...&nbsp; </li>
<li>当然新的东西是可以尝试的，我 ... 吧？</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- by dhxyu&nbsp; &nbsp; 总结一下大家对JavaEye网 ...&nbsp; </li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;支持`~~ </li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- by hgz123&nbsp; &nbsp; 关于JavaEye网站未来发展 ...&nbsp; </li>
<li>javaeye前途无量！ 今天认真看了这篇文章，</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- by ahkai&nbsp; &nbsp; SAAS(软件即服务) 离我们 ...&nbsp; </li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;呵呵，在中国，我不看好这种模式，对个人也许有用，但在企业领域，恐怕很难推广。如楼 ... </li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- by zlxym&nbsp; &nbsp; 以无法为有法，以无限为有 ...&nbsp; </li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;呵呵，楼主还是单纯技术人员的创办思路。缺少营销、商业气味！这道也不是什么坏事，但 ... </li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- by cljhyjs&nbsp; &nbsp; &nbsp; 评论排行榜&nbsp; &nbsp; Warp framework - 一个相当有前途的Java轻 ...&nbsp; &nbsp; 《太阳照常升起》观后感&nbsp; &nbsp; 关于JavaEye网站未来发展的思考&nbsp; &nbsp; 从分布式系统的角度看REST&nbsp; &nbsp; Java已经过时了吗？&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [什么是RSS?]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;声明：JavaEye文章版权属于作者，受法律保护。没有作者书面许可不得转载。若作者同意转载，必须以超链接形式标明文章原始出处和作者。 </li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&amp;copy; 2003-2008 JavaEye.com.&nbsp; &nbsp;All rights reserved. 上海炯耐计算机软件有限公司 [ 沪ICP备05023328号 ]</li></ol></div>
<p>       这上面有的地方有很多空格，这一段就要去掉。当然可以再对段做分析，将一段中空格多的地方去掉。<br />
      好了经过整理，现在得到了质量稍好一点的文本了。我们进行分析分词。分词,我是在一个叫hightman的开发者的作品的基础上包装了一个ruby库,原文地址是http://www.hightman.cn/bbs/viewthread.php?tid=321.Ruby是一门很好的胶水语言，但是性能较差，因此对性能要求高的部分我选择用c封装ruby模块。<br />
     分好词了，我们再抽出一些实词，比如名词(联想集团)，动词(上市,IPO，收购),其实主要思路是跟IT、商业有关的（q我们事先整理一张表，将这些词放进来）,将无意义的词(很好，缓慢,深深地&#8230;)去掉，对频度，权值排个序，取出前20个，<br />
记为主题词。<br />
    现在这个也做好了以后我们将文本、主题词入库。再对每一篇文本计算相似文章。这个，我开始是打算就将关键词和文章都存入数据库，然后按照文章之间主题词的重合度来算，但是后来发现文章数越多这个计算就越复杂，并且运算量随文章数的增长而增长，而且增长更快（指数的而不是线性的增长).<br />
    后来想了个办法，我正好也需要一个全文索引，于是利用这个全文检索来完成。全文检索当然不是自己做，现成的有不少系统。用一篇文章的关键词去搜索，搜索结果中的文章就是这篇文章的相似文章。<br />
   至于热点事件挖掘，现在还不知道如何去实现一个demo.可能首先要依赖分词引擎的新词发现比较准确吧。<br />
   搞定以后，有一个问题，我的抓取和分析模块都在我的台式机上完成，但是我需要把数据传输到远程主机上。这点到后面也就用了不到100行代码搞定了（我自己手工写的代码，在40行以内!).因为，一个rails2.0的组件叫activerecord,还有一个叫activeResource,而rails的scaffold可以帮我生成rest协议的相关代码。需要我手工写的代码是:</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">for item in @items</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post=Post2s.new</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post.title=item.title</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post.md5=item.md5</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post.body=item.description</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post.rss_pub_date=item.pubDate</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post.service_id=&quot;blog&quot;</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;....</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post.save</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end</li></ol></div>
<p>简单明了，谁都看得懂.这是一段运行在我的台式机上的代码，但是他保存的时候，却与远程的主机交互将数据保存在了服务器上，走的是HTTP通道，数据交换格式是HTML/XML.<br />
Ruby 果然很适合用来替代很多难度不大但是需要大段废话的场合。<br />
下一篇就写如何搞中文分词的ruby包装。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.162cm.com/archives/629.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Ror 版博客即将到来</title>
		<link>http://www.162cm.com/archives/619.html</link>
		<comments>http://www.162cm.com/archives/619.html#comments</comments>
		<pubDate>Mon, 07 Apr 2008 12:12:00 +0000</pubDate>
		<dc:creator>xurenlu</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[ruby rails ror blog]]></category>

		<guid isPermaLink="false">http://www.162cm.com/archives/619.html</guid>
		<description><![CDATA[经过好几个周末的准备，Ror 版的博客即将到来了
要换掉Wordpress，其实没有什么理由。只是，我天生是小白鼠的命。rails升级到2.0后，实在忍不住，就自己做了一个博客。
当然，wordpress也有不少不对我胃口的地方:


皮肤系统太复杂。虽然我推荐用php本身做模板引擎，但我不喜欢这种模板方式，对UI/UE工程师来说太难了。这次我自己照着mozilla addons社区的样子自己做了皮肤。以后自己给自己做皮肤。新的博客程序，很容易制做新皮肤。
event based的插件方式很酷，可以说是插件成就了wordpress,但是，wordpress的代码太混乱了，结构化太差
js基于prototype,而有些插件又是jquery的。现在我最拿手的是YUI,另外比较顺手的一个是mootools,mozilla和UWA都在用的一个js library.这次的程序，我也会混用几种引擎，但主要以mootools为主。
文件上传，管理部分不太符合我的胃口。我要一个像册，还要一个作品下载模块。新的程序要内置文件上传和管理部分
wordpress用的人太多了，针对wordpress的spam程序太多了，防不胜防。但是现在的wordpress是我自己写的评论部分，spam少了很多.垃圾评论是新版博客程序一个重要考虑因素。如果可能，加入垃圾评论学习机制。
写的程序demo类的东西比较多,新程序要能有较好的支持。
&#8230;.对，除了上面的，还有重的特性:支持RestAPI,包含一个Ruby写的客户端，这样可以在终端中用vim写博客，然后发布。


嘿嘿。最最最重要的是,以后我的方向是前端工程师了&#8230;.呼呼。。。不知PHP程序员能不能成为一个牛B设计师呢?
]]></description>
			<content:encoded><![CDATA[<p>经过好几个周末的准备，Ror 版的博客即将到来了<br />
要换掉Wordpress，其实没有什么理由。只是，我天生是小白鼠的命。rails升级到2.0后，实在忍不住，就自己做了一个博客。<br />
当然，wordpress也有不少不对我胃口的地方:</p>
<blockquote>
<ol>
<li>皮肤系统太复杂。虽然我推荐用php本身做模板引擎，但我不喜欢这种模板方式，对UI/UE工程师来说太难了。这次我自己照着mozilla addons社区的样子自己做了皮肤。以后自己给自己做皮肤。新的博客程序，很容易制做新皮肤。</li>
<li>event based的插件方式很酷，可以说是插件成就了wordpress,但是，wordpress的代码太混乱了，结构化太差</li>
<li>js基于prototype,而有些插件又是jquery的。现在我最拿手的是YUI,另外比较顺手的一个是mootools,mozilla和UWA都在用的一个js library.这次的程序，我也会混用几种引擎，但主要以mootools为主。</li>
<li>文件上传，管理部分不太符合我的胃口。我要一个像册，还要一个作品下载模块。新的程序要内置文件上传和管理部分</li>
<li>wordpress用的人太多了，针对wordpress的spam程序太多了，防不胜防。但是现在的wordpress是我自己写的评论部分，spam少了很多.垃圾评论是新版博客程序一个重要考虑因素。如果可能，加入垃圾评论学习机制。</li>
<li>写的程序demo类的东西比较多,新程序要能有较好的支持。</li>
<li>&#8230;.对，除了上面的，还有重的特性:支持RestAPI,包含一个Ruby写的客户端，这样可以在终端中用vim写博客，然后发布。</li>
</ol>
</blockquote>
<p>嘿嘿。最最最重要的是,以后我的方向是前端工程师了&#8230;.呼呼。。。不知PHP程序员能不能成为一个牛B设计师呢?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.162cm.com/archives/619.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Rails 2.0的一些变化</title>
		<link>http://www.162cm.com/archives/613.html</link>
		<comments>http://www.162cm.com/archives/613.html#comments</comments>
		<pubDate>Sun, 23 Mar 2008 13:03:31 +0000</pubDate>
		<dc:creator>xurenlu</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[ruby rails activerecord erb rss route]]></category>

		<guid isPermaLink="false">http://www.162cm.com/archives/613.html</guid>
		<description><![CDATA[1.ActionView的变化：
       模板文件默认扩展名从.rhtml改成了.html.erb
      新的规则是:[动作名.扩展名.渲染引擎],因此黙 认模板文件就是类似view.html.erb.当然view.rhtml也能正常工作.
     比如我希望用户访问/post/rss/1.atom时，调用builder来解析，我的模板文件应该是rss.xml.builder.这个builder很方便，创建Rss时非常爽。语法像这样:

xml.instruct!
xml.rss(&#8221;version&#8221;=>&#8221;2.0&#8243;,
                &#8220;xmlns:dc&#8221;=>&#8221;http://purl.org/dc/elements/1.1/&#8221;) do
        xml.channel do
          [...]]]></description>
			<content:encoded><![CDATA[<p>1.ActionView的变化：<br />
       模板文件默认扩展名从.rhtml改成了.html.erb<br />
      新的规则是:[动作名.扩展名.渲染引擎],因此黙 认模板文件就是类似view.html.erb.当然view.rhtml也能正常工作.<br />
     比如我希望用户访问/post/rss/1.atom时，调用builder来解析，我的模板文件应该是rss.xml.builder.这个builder很方便，创建Rss时非常爽。语法像这样:</p>
<blockquote><p>
xml.instruct!<br />
xml.rss(&#8221;version&#8221;=>&#8221;2.0&#8243;,<br />
                &#8220;xmlns:dc&#8221;=>&#8221;http://purl.org/dc/elements/1.1/&#8221;) do<br />
        xml.channel do<br />
                xml.title &#8220;renlu.xu &#8217;s blog&#8221;<br />
                xml.link(url_for(:action=>&#8221;start&#8221;,:only_path=>false))<br />
                xml.description &#8220;My life My love&#8221;<br />
                xml.language &#8220;zh_CN&#8221;<br />
                xml.ttl 60</p>
<p>                for event in @posts do<br />
                        xml.item do<br />
                                xml.title(event.title)<br />
                                xml.description(event.body)<br />
                                xml.pubDate(event.created_at.to_s(:rfc822))<br />
                                xml.guid(event.id)<br />
                                xml.link(&#8221;http://&#8230;..#{event.id}&#8221;)<br />
                        end<br />
                end<br />
        end<br />
end</p>
</blockquote>
<p>2. 一些Helper改进了<br />
    我能感觉到的是，在生成表单时，生成时，用form_tag能生成一个表单，这个表单默认带了一个隐藏的域。这个域的值是一个加密的串，用来验证当前表单提交的合法性。这一点很好。yahoo的产品体系中，也有类似的检查，叫crumb机制。存有不包含crumb的from表单提交时，程序是不能通过安全审查的。<br />
3 Router的改进。<br />
     将用分号来区隔的方法去掉了。比如/post/view/1:edit这种就去掉了。统一成了斜线方式:/post/view/1/edit。<br />
     经过我测试，rails的route好像存在一个很可耻的Bug&#8230;..有些地址死活不能被认出来&#8230;<br />
    另外，route需要Sqlite3的支持。<br />
4  默认的数据库支持类型据说换成sqlite3了。render_text 被去掉了<br />
5&#8230; 不少Bug 仍然性格倔强地拒绝被修改&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.162cm.com/archives/613.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>糟糕的ruby库</title>
		<link>http://www.162cm.com/archives/490.html</link>
		<comments>http://www.162cm.com/archives/490.html#comments</comments>
		<pubDate>Sat, 06 Oct 2007 09:16:49 +0000</pubDate>
		<dc:creator>xurenlu</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.162cm.com/archives/490.html</guid>
		<description><![CDATA[题目其实错了。
ruby的确是个不错的语言,正如名字一般，像宝石一样。另一个语言也是，lua,名为月亮，也很棒。
但是我用ruby来构建一个微型的抓取/索引/检索系统,分词,存储，检索都没什么问题,但是在抓取HTML页面解析时出了问题:因为我用了一个库,这个库又依赖于另一个库&#8230;. 最后输出时输出一大篇大篇的出错信息，我只好加上ruby spider.rb 2&#62; /dev/null 才能看到我自己的调试信息。 试了一下，原来用begin rescue end 语句不太好用，仍然无法阻止错误信息的输出。
刚刚又发现,用gem  build  rlucene.gemspec来打包时，又莫名奇妙地出错了.
郁闷。ruby库的可靠性真不怎么样。
]]></description>
			<content:encoded><![CDATA[<p>题目其实错了。</p>
<p>ruby的确是个不错的语言,正如名字一般，像宝石一样。另一个语言也是，lua,名为月亮，也很棒。</p>
<p>但是我用ruby来构建一个微型的抓取/索引/检索系统,分词,存储，检索都没什么问题,但是在抓取HTML页面解析时出了问题:因为我用了一个库,这个库又依赖于另一个库&#8230;. 最后输出时输出一大篇大篇的出错信息，我只好加上ruby spider.rb 2&gt; /dev/null 才能看到我自己的调试信息。 试了一下，原来用begin rescue end 语句不太好用，仍然无法阻止错误信息的输出。</p>
<p>刚刚又发现,用gem  build  rlucene.gemspec来打包时，又莫名奇妙地出错了.</p>
<p>郁闷。ruby库的可靠性真不怎么样。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.162cm.com/archives/490.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
