﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-tech.cap-随笔分类-ruby</title><link>http://www.blogjava.net/cap/category/2219.html</link><description>我在一望无际的路上</description><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 08:32:22 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 08:32:22 GMT</pubDate><ttl>60</ttl><item><title>ruby/rails中的中文处理(1)</title><link>http://www.blogjava.net/cap/archive/2006/12/14/87830.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Thu, 14 Dec 2006 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/12/14/87830.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/87830.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/12/14/87830.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/87830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/87830.html</trackback:ping><description><![CDATA[<p>由于当前的ruby并不支持unicode, 所以中文相关的处理在ruby中一直比较模糊,基本上是各自尝试的路子, 我也列出一些帮助自己整理思路</p>
<p><strong style="FONT-SIZE: 1.2em">utf8和unicode的关系</strong></p>
<p>utf其实是(Unicode Translation Format), 也就是unicode在传输时候的编码, 有utf8和utf16等多种编码, 其实uf8是一个对中文字很不友好的编码, 为什么呢,因为在utf8中, 一个中文是占用3个字节,而一个英文ascii字符却只占用1个字节, 这样一方面使得中文体积膨胀较厉害, 另外一方面也不能简单的通过计算字节数来推算字符数. utf16就比较正常, 每个字符占用两个字节.但是目前utf16已经后面的utf32应用较少, utf8 是比较公认的编码</p>
<p><strong style="FONT-SIZE: 1.2em">utf8 还是 gb2312/gbk</strong></p>
<p>我个人选择utf8,因为我觉得gb2312/gbk不是通用编码,如果使用可能还会有其他问题(比如多语言支持)</p>
<p><strong style="FONT-SIZE: 1.2em">转换编码</strong></p>
<p>我们需要require 'iconv' 库, 然后执行</p>
<p><code>Iconv.conv("utf8","GBK","....") #把字符由GBK转换为UTF8</code></p>
<p>当源字符集中含有非法编码的时候,我们需要告诉iconv忽略, 否则iconv会报错停止</p>
<p><code>Iconv.conv("utf8//IGNORE","GBK//IGNORE","....")</code></p>
<p><strong style="FONT-SIZE: 1.2em">utf8 的中文操作:</strong></p>
<p><strong>计算字符数:</strong></p>
<p>在默认的ruby环境下面, 需要执行</p>
<p><br/></p>
<p><code>require 'jcode'</code></p>
<p><code>$KCODE='u' # 或者$KCODE='UTF8' 两者是等价的</code><br/></p>
<p><strong>计算字符数:</strong></p>
<p>使用jsize或者jlength</p>
<p><code>"你好".size # 6</code></p>
<p>"你好".jsize # 2<br/></p>
<p><strong>截取字符操作</strong></p>
<p><code><code>"你好"[0,1] #乱码</code></code></p>
<p><code>"你好".scan(/./)[0,1].join # "你"</code></p>
<p><br/></p>
<p>当然还有另外一个办法:</p>
<p>利用utf16编码每个字都是2个字节(头还有两个字节)的特点,我们可以先把字符转换为utf16,然后按照[0,n*2+2]的方法截取前n个字符 (试验成功.求证中)</p>
<p><code>Iconv.conv("UTF8","UTF16",Iconv.conv("UTF16","UTF8","你好a中b文")[0,8]) #你好a</code></p>
<p><br/></p><img src ="http://www.blogjava.net/cap/aggbug/87830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-12-14 23:12 <a href="http://www.blogjava.net/cap/archive/2006/12/14/87830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby中文搜索支持的想法</title><link>http://www.blogjava.net/cap/archive/2006/12/10/86730.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Sun, 10 Dec 2006 10:15:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/12/10/86730.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/86730.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/12/10/86730.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/86730.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/86730.html</trackback:ping><description><![CDATA[<p>ruby下面中文分词的搜索如何进行?</p>
<p>目前开始考虑这个问题, <strong>目标是使用</strong><a href="http://ferret.davebalmain.com/api/files/TUTORIAL.html"><strong>ferret</strong></a><strong>,</strong> ferret是lucene搜索引擎的ruby版本, 凭借一点lucene的经验, 我个人是非常喜欢ferret的, 靠lucene强大的分词,index,search功能, 可以做出很多有趣的功能, 但是ferret有两个难点</p>
<ol>
<li>不支持中文分词,而且集成第三方分词对我来说较困难(没有开发c的经验,而且我知道的中文分词算法都是java版本)</li>
<li>有时候做索引会出错,好象是段地址错误, 因为ferret是在前台index, 所以错误也是在前台fastcig进程中, 感觉很不爽</li>
</ol>
<p><strong>原来的想法</strong></p>
<p>利用ferret 和lucene兼容的特点, 单独写一个java 类库, 定时对资源做索引,不过后来为了效率(<a href="http://ferret.davebalmain.com/trac/wiki/MyFirstBenchmark#conclusions:">index比lucene快</a>), 新版本的ferret放弃了和lucene兼容, 这个想法是不可行了</p>
<p><strong>更新后的想法</strong></p>
<p>利用<a href="http://myft.twomice.net/index.php?xname=ILBS301">mysql中文分词插件</a>,这个东西倒是很好,但是偏偏只支持mysql4.0,和mysql 5.1 beta, 刚好不支持我目前用的mysql5.0.x 由于没有现成版本可以用, 也只好放弃(这个插件只能用来全文搜索, 不像ferret还有其他好玩的功能)</p>
<p><strong>目前的想法:</strong></p>
<ol>
<li><strong>在ferret中通过<a href="http://rjb.rubyforge.org/">rjb</a>调用 <a href="http://www.google.cn/search?hl=zh-CN&amp;newwindow=1&amp;client=opera&amp;rls=en&amp;hs=XKL&amp;q=lucene+%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D&amp;btnG=%E6%90%9C%E7%B4%A2&amp;meta=">lucene的中文分词</a>然后再index</strong></li>
<li>需要index的model都增加一个属性indexed,新建或者更新的时候都把indexed设置为false</li>
<li>把java写好的中外分词通过rjb包装为一个drb service,或者干脆挂在resin上做http页面调用</li>
<li>在后台,单独的程序定时启动把所有未index的记录select出来(indexed=false), 然后逐一调用第二步开发的进行分词,即是过程中出错, 也不影响前台页面, 这里只改动ferret的ruby代码.</li>
<li>如果可能, 搜索程序通过远程协议来对keyword分词,然后再搜索</li>
</ol>
<p><strong>缺点</strong></p>
<ol>
<li>
<p style="MARGIN-LEFT: 2em">这个方案看上去比较恶心.很像一件到处是补丁的衣服, 目前没有时间慢慢去研究ferret中的c代码. 只好通过java来绕圈子</p>
</li>
<li>
<p style="MARGIN-LEFT: 2em">在后台运行index的话, 就无法实时搜索当前文章, 而是有一个延时, 不过我觉得这个好解决. 另外后台index 就算出错了也不影响前台页面, 大不了有些记录搜索不到而已</p>
</li>
<li>
<p style="MARGIN-LEFT: 2em">对keyword分词会有速度影响, 不过影响应该很小</p>
</li>
</ol>
<p style="MARGIN-LEFT: 2em"><br/></p><img src ="http://www.blogjava.net/cap/aggbug/86730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-12-10 18:15 <a href="http://www.blogjava.net/cap/archive/2006/12/10/86730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails  undefined method `use_transactional_fixtures=' 错误的解决</title><link>http://www.blogjava.net/cap/archive/2006/12/08/86316.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Fri, 08 Dec 2006 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/12/08/86316.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/86316.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/12/08/86316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/86316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/86316.html</trackback:ping><description><![CDATA[<p>最近新建立了一个rails project 想尝试一下test driven 开发, 于是就呼啦呼啦写了几个测试, 这个时候怪异的事情发生了 使用rake 调用测试或者直接执行ruby测试程序, 都会报如下错误</p>
<blockquote>
<p>undefined method `use_transactional_fixtures='</p>
</blockquote>
<p>真是非常莫名奇妙, 尝试检查mysql, 检查表类型都没有问题(innodb), 又进一步检查, 发现我的testcase实际上没有被注入rails的扩展, 全部变成了最普通的testcase, 真是郁闷! 当晚上google查了半天, 也没有解决</p>
<p>第二天上线咨询了cookoo 以后, 再度测试了一番, 发现新建立的rails project没有这个问题, 于是怀疑到安装的plugin有问题, 又把plugin全部删除, 问题依旧...(中间省略若干) ... 终于发现,原来是ZenTest 这个gem包导致, 尝试把ZenTest/test/test_help.rb 这个文件移走, 问题解决</p>
<p>接下来分析原因 , 发现我的project用到了cached_model , cached_model 会引入ZenTest, ZenTest中的test_help.rb和rails中的test_help.rb 重名, 由于cached_model 会先载入, 所以ZenTest把后者的test_help覆盖掉, 直接导致rails的环境无法加载</p>
<p>ZenTest(test_help.rb) Rails(test_help.rb) 两者无法共存,所以移走前者就好了<br/><br/><br/></p><img src ="http://www.blogjava.net/cap/aggbug/86316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-12-08 13:47 <a href="http://www.blogjava.net/cap/archive/2006/12/08/86316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修复并更新了ruby电子书的下载</title><link>http://www.blogjava.net/cap/archive/2006/12/04/85372.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Mon, 04 Dec 2006 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/12/04/85372.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/85372.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/12/04/85372.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/85372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/85372.html</trackback:ping><description><![CDATA[<p>前段时间我存放电子书的空间失效了, 现在重新找了空间,修复了链接,向之前下载不了的网友表示歉意 <a title="下载" href="/cap/articles/book.html" target="_top">进入页面</a></p>
		<p style="TEXT-ALIGN: right">最后更新2006-12-4</p>
		<p>
				<strong>The ruby way</strong> 更新到第二版</p>
		<p>
				<strong>Agile web development with rails</strong> 更新到第二版</p>
		<p>增加 <strong>Enterprise Integration with Ruby</strong></p><img src ="http://www.blogjava.net/cap/aggbug/85372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-12-04 15:30 <a href="http://www.blogjava.net/cap/archive/2006/12/04/85372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[招聘] rails工作机会国贸附近，建外ＳＯＨＯ</title><link>http://www.blogjava.net/cap/archive/2006/09/28/72572.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Thu, 28 Sep 2006 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/09/28/72572.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/72572.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/09/28/72572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/72572.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/72572.html</trackback:ping><description><![CDATA[<span class="postbody">公司简介: <br /><br /><a href="http://www.dogstart.com/" target="_blank">http://www.dogstart.com</a><br /><br />北京数字狗狗网络技术有限公司(狗Go网)于2004年7月在北京成立。狗狗网络成立之初就以WAP游戏为战略目标，宗旨在于为中国数以亿计的手机用户提供业内领先的网路服务和游戏服务。2005年1月，数字狗狗联合WAP天下，达成战略合作协议，将逐步推广狗GO网和《天下》网游。公司主要以研发为主，代理手机游戏为辅，结合多种娱乐渠道及方式，做手机增值服务行业的龙头企业。 <br />数字狗狗的娱乐门户站是一个以手机游戏为主，多种娱乐方式为集合的一家综合性娱乐站点。狗GO门户的目标是建设一个手机网络上最大的游戏娱乐社区，社区内包括大量手机游戏的介绍，试玩和游戏评论。让广大手机用户可以客观的来审视时下大部分流行的手机游戏，并且给玩家们一个交流的社区。 <br /><br /><a href="http://wap.dogstart.com/" target="_blank">http://wap.dogstart.com</a> 需要wap支持,比如opera浏览器 <br /><br />我们提供 <br /><br />1. 位于创新前沿的创业经历 <br />2. 平等，独立的工作伙伴关系和宽松、灵活的工作环境 <br />3. 具有竞争力的待遇,和未来的 <br /><br />我们的要求 <br /><br />1. 热爱写代码,能专研 <br />2. 愿意跟踪和学习最新的软件技术 <br />3. 具有自我管理能力,创新情结和创业心态 <br /><br />如果你有下面专长,那就更好了 <br /><br />1 熟悉linux操作系统, 能独立维护,编写shell <br />2 有web开发的经验, 熟悉html <br />3 了解ruby/rails, 有一定的开发经验 <br />4 熟悉数据库设计, 有基本的DBA能力和使用mysql的经验 <br /><br />目前在这家公司负责围绕mobile web的工作, 我们已经定下来用rails来开发, 欢迎各位大侠/有志向的菜鸟和我联系 <br />email: <a href="mailto:heyizhou@dogstart.com">heyizhou@dogstart.com</a></span>
		<span class="postbody">
		</span>
		<span class="gensmall">
				<br />
		</span><img src ="http://www.blogjava.net/cap/aggbug/72572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-09-28 14:21 <a href="http://www.blogjava.net/cap/archive/2006/09/28/72572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails 1.1 api chm 版本下载,照样支持索引和全文检索</title><link>http://www.blogjava.net/cap/archive/2006/04/05/39284.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Tue, 04 Apr 2006 17:21:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/04/05/39284.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/39284.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/04/05/39284.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/39284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/39284.html</trackback:ping><description><![CDATA[<p>rails 1.1 api chm 版本下载,照样支持索引和全文检索<br /><br /><a href="http://www.rubystart.org:8080/download/api_ror.zip">下载</a><br /><br /><br />PS: 1.0的还在<a href="/cap/archive/2006/03/22/36796.html">这里列出</a></p><img src ="http://www.blogjava.net/cap/aggbug/39284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-04-05 01:21 <a href="http://www.blogjava.net/cap/archive/2006/04/05/39284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cool! ruby版编码探测器[Universal Encoding Detector in Ruby]</title><link>http://www.blogjava.net/cap/archive/2006/03/29/38007.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Wed, 29 Mar 2006 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/03/29/38007.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/38007.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/03/29/38007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/38007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/38007.html</trackback:ping><description><![CDATA[以前一直想用java来作一个类似的东西, 今天看到ruby这边已经有了<br />-----<br />gem install <strong>chardet -y</strong><br />-----<br /><br />require 'rubygems'<br />require 'UniversalDetector'<br />require 'net/http'<br />Net::HTTP.version_1_2 <br />Net::HTTP.start( 'www.sina.com.cn' ) {|http|<br />&nbsp;&nbsp;&nbsp; data = http.get(&quot;/&quot;).body<br />&nbsp;&nbsp;&nbsp; p UniversalDetector::chardet(data)<br />}<br />它是python版本的移植,&nbsp; 居然有个confidence参数 , 偶测试了国内几个站点, 都很准确, 不过偶发现只要是utf8或者gb2312, 返回的confidence全部都是0.99, 只有国外某些纯ascii的网页会返回1.0<img src ="http://www.blogjava.net/cap/aggbug/38007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-03-29 11:39 <a href="http://www.blogjava.net/cap/archive/2006/03/29/38007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails 1.1 发布相关</title><link>http://www.blogjava.net/cap/archive/2006/03/29/38005.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Wed, 29 Mar 2006 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/03/29/38005.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/38005.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/03/29/38005.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/38005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/38005.html</trackback:ping><description><![CDATA[(<strong>UPDATED</strong>) 赞一个!&nbsp;&nbsp; 现在又得研究新东西了<br /><br /><a href="http://weblog.rubyonrails.org/articles/2006/03/22/rails-1-1-release-candidate-1-available">官方消息</a> 在这里&nbsp; <br /><br />
<ul>
    <li><a href="http://scottraymond.net/articles/2006/02/28/rails-1.1">新特性</a>的详细介绍 </li>
    <li><a href="http://clarkware.com/cgi/blosxom/2006/03/28">其他部分的改进</a>的介绍 </li>
</ul>
<strong>升级方法:</strong><br /><br />&nbsp;rails1.1需要rake 0.7的支持, 所以各位得附带升级rake, 不过有了gem, 升级简直就是不费力气,执行如下指令<br /><br />gem update rake<br />gem update rails -y<br />gem clean&nbsp; <br /><br />记得gem clean一定要做, 否则你的机器上会并存rails1.0 和rails1.1, 连rake也并存0.6x 和 0.7,&nbsp; 这会带来一些莫名其妙的问题<br /><br />最后不要忘记在你的rails项目中执行 rake rails:update 来升级rails项目的代码<br /><br /><strong>兼容性:&nbsp;</strong>&nbsp; rails1.0 和1.1的不兼容主要在plugin上, 各位用了plugin的朋友升级的时候多留意一下. 为稳妥起见, 最好去逛逛plugin各自的站点, 看看是否都提供了1.1的升级<br /><br />更新1: 在windows上如果要运行rails1.1的话, 请使用1.8.4版本的ruby,&nbsp; 虽然现在还没有正式的1.8.4 one-click-installer发布, 不过RC1也还可以用了, 记得升级的时候要先卸载旧的ruby1.8.2 , 卸载1.8.2的时候记得备份你编译好了的so文件<br /><br />更新2: rails1.1的兼容性问题比我想像得严重, 现在看到typo在1.1下无法运行,dreamhost早些时候升级rails也导致1.0的应用死掉. 现在被迫降到1.0了, 难道37singles的人只测试了自己的product?<br /><br /><br /><img src ="http://www.blogjava.net/cap/aggbug/38005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-03-29 11:17 <a href="http://www.blogjava.net/cap/archive/2006/03/29/38005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YARV on Rails ~~~~!</title><link>http://www.blogjava.net/cap/archive/2006/03/24/37178.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Fri, 24 Mar 2006 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/03/24/37178.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/37178.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/03/24/37178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/37178.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/37178.html</trackback:ping><description><![CDATA[还记得 上次我在blog中提到的那个 <a href="/cap/archive/2006/02/08/29908.html">YARV ruby虚拟机</a>  么<br /><br />本来以为YARV离实用还非常远, 但是从这个截图上看, 似乎YARV并非那么无用<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">var</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">www</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">rails</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">testsite </span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">usr</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">local</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">pkg</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">yarv</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">bin</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">ruby script</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">server<br /></span><span style="color: rgb(0, 0, 0);">=&gt;</span><span style="color: rgb(0, 0, 0);"> Booting WEBrick<img src="http://www.blogjava.net/images/dot.gif" /><br /></span><span style="color: rgb(0, 0, 0);">=&gt;</span><span style="color: rgb(0, 0, 0);"> Rails application started on http:</span><span style="color: rgb(0, 0, 0);">//</span><span style="color: rgb(0, 0, 0);">0.0</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">0.0</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">3000</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">=&gt;</span><span style="color: rgb(0, 0, 0);"> Ctrl</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">C to shutdown server; call with </span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">help </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> options<br />[</span><span style="color: rgb(0, 0, 0);">2006</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">02</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">20</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">40</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">23</span><span style="color: rgb(0, 0, 0);">] INFO  WEBrick </span><span style="color: rgb(0, 0, 0);">1.3</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />[</span><span style="color: rgb(0, 0, 0);">2006</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">02</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">20</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">40</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">23</span><span style="color: rgb(0, 0, 0);">] INFO  ruby </span><span style="color: rgb(0, 0, 0);">1.9</span><span style="color: rgb(0, 0, 0);">.0 (</span><span style="color: rgb(0, 0, 0);">2006</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">02</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">14</span><span style="color: rgb(0, 0, 0);">) [x86_64</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">linux]<br />[</span><span style="color: rgb(0, 0, 0);">2006</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">02</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">20</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">40</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">23</span><span style="color: rgb(0, 0, 0);">] INFO  WEBrick::HTTPServer</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">start: pid=25032 port=3000</span></div><img src="http://i.loveruby.net/d/images/yarv-rails.png" /><br />有人已经实现了在YARV 上跑起webrick和rails的首页(应用估计是没戏),  他的<a href="http://i.loveruby.net/d/20060220.html#p10">blog在此</a>(日文)<br /><br /><br /><img src ="http://www.blogjava.net/cap/aggbug/37178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-03-24 11:56 <a href="http://www.blogjava.net/cap/archive/2006/03/24/37178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails 1.1 RC1发布</title><link>http://www.blogjava.net/cap/archive/2006/03/24/37176.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Fri, 24 Mar 2006 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/03/24/37176.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/37176.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/03/24/37176.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/37176.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/37176.html</trackback:ping><description><![CDATA[<a href="http://weblog.rubyonrails.org/articles/2006/03/22/rails-1-1-release-candidate-1-available">OLD NEWS</a>&nbsp;&nbsp; <img src="http://www.blogjava.net/Emoticons/msn/wink_smile.gif" alt="" /><br /><br />准确的发布时间应该是2天前, Rails 1.1 从版本号上看来变化不大, 但是实际的有500多处, 实际上是比较大的升级了.<br /><br />按照原定计划,&nbsp; 正式的1.1应该是在本月出来,&nbsp; 考虑到2天前才发布RC1, 我觉得本月发布rails1.1的正式版本时间还是够紧的, 因为rails从1.0开始凸现爆发性的增长, 新出的1.1版本不能不考虑向前兼容性.如果不经过测试, 到时候肯定还得匆忙出一个1.1.1来修补bug, 好在rails现在有活跃的用户社区, 这个问题看来不用担心太多.&nbsp; <img alt="" src="http://www.blogjava.net/Emoticons/msn/regular_smile.gif" /><img src ="http://www.blogjava.net/cap/aggbug/37176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-03-24 11:47 <a href="http://www.blogjava.net/cap/archive/2006/03/24/37176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails 1.0 Api chm版</title><link>http://www.blogjava.net/cap/archive/2006/03/22/36796.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Wed, 22 Mar 2006 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/03/22/36796.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/36796.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/03/22/36796.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/36796.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/36796.html</trackback:ping><description><![CDATA[UPDATE: 下面是1.0的api , 1.1 的在<a href="/cap/archive/2006/04/05/39284.html">这里</a><br /><br />rails的在线api不好用:(,没有搜索功能,本地的gem doc也是一样的,于是捣鼓了一下<br /><br />本人制作的rails api文档, CHM格式,支持索引和全文搜索, 方便查看, 版本是最新的rails1.0 api ,  分为 <a href="http://www.rubystart.org:8080/download/nodir_api.ror.zip"><font color="#993300">无目录版</font></a>  和 <a href="http://www.rubystart.org:8080/download/api_ror.zip"><font color="#993300">有目录版</font></a> 两个 ( 有目录版本有三个html的链接没有处理好,推荐前者)<br /><br />[NOTICE] 提示一下, windows xp可能会不信任下载回来的chm文件导致显示异常, 请按照下图解除对chm的锁定<br /><br /><img height="466" alt="r_unlock.JPG" src="http://www.blogjava.net/images/blogjava_net/cap/5080/r_unlock.JPG" width="367" border="0" /><img src ="http://www.blogjava.net/cap/aggbug/36796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-03-22 10:52 <a href="http://www.blogjava.net/cap/archive/2006/03/22/36796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby fans小聚会: 见到了村长和xin rick</title><link>http://www.blogjava.net/cap/archive/2006/03/11/34800.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Sat, 11 Mar 2006 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/03/11/34800.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/34800.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/03/11/34800.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/34800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/34800.html</trackback:ping><description><![CDATA[昨天晚上终于见到了传说中的村长, 村长是rubycn的站长, 用ruby的时间很早, 本人才开始了解ruby的时候也是看的村长的blog.&nbsp;另外一位是xin rick, 在知名的外企工作, 也是一位牛人, 大家都是第一次见面, 技术话题聊得不是很多, 主要还是互相认识,呵呵<BR><BR>PS: 北京地区的ruby/rails fans目前来说还是少了, 形不成人气, 希望大家能更多联络联络<img src ="http://www.blogjava.net/cap/aggbug/34800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-03-11 11:34 <a href="http://www.blogjava.net/cap/archive/2006/03/11/34800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rubyweaver :  DreamWeaver的扩展</title><link>http://www.blogjava.net/cap/archive/2006/03/09/34522.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Thu, 09 Mar 2006 10:06:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/03/09/34522.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/34522.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/03/09/34522.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/34522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/34522.html</trackback:ping><description><![CDATA[<P><A href="http://www.ridingtheclutch.com/entry.cfm?id=58">RUBYWEAVER</A>&nbsp;是一个Dreamweaver的扩展, 支持ruby和rails的文件格式以及颜色高亮.目前的版本是1.0.0 for dreamweaver MX 2004, 现在就<A href="http://www.ridingtheclutch.com/downloads/rubyweaver.mxp">下载</A>吧</P><img src ="http://www.blogjava.net/cap/aggbug/34522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-03-09 18:06 <a href="http://www.blogjava.net/cap/archive/2006/03/09/34522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[LIBRARY] 茁壮成长的ruby扩展库</title><link>http://www.blogjava.net/cap/archive/2006/03/07/34027.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Tue, 07 Mar 2006 04:10:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/03/07/34027.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/34027.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/03/07/34027.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/34027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/34027.html</trackback:ping><description><![CDATA[<P>自从rails红火以后, ruby的社区明显比以前壮大了不少(小弟我也是因为rails才学习ruby的),所谓人多好办事, 各种ruby的扩展类库也如雨后春笋一般冒出来,他们的特点就是版本低(很少上1.0), 名字都取得很有个性, 主要的目的也是增强或者替换ruby内置的标准库, 下面列出几个我在用的</P>
<H3><A href="http://rio.rubyforge.org/">rio</A> : Ruby I/O Comfort Class</H3>
<P>rio就是一个ruby内置io类的包装, 主要的作用范围就是操作文件, 抓网页, 压缩解压, 处理CSV等等IO操作, 现在的版本是0.3.7, rio使用起来及其简单<BR>例子如下</P>
<P>拷贝或者增加内容到字符串对象中</P><PRE><CODE> rio('afile') &gt; astring      # copy
 rio('afile') &gt;&gt; astring     # append
</CODE></PRE>
<P>拷贝或者增加内容到文件中&nbsp;</P><PRE><CODE> rio('afile') &lt; astring      # copy
 rio('afile') &lt;&lt; astring     # append
</CODE></PRE>
<P>他的官方站点里面有详细的示例, 如果是经常要在linux上维护文件的朋友请不要错过.</P>
<H3><A href="http://rubyforge.org/projects/optionparser/">commandline</A>:命令行增强</H3>
<P>commandline是一个简化命令行界面的库,他直接替代内置的optparser来解析用户使用的参数,同时还能自动打印出标准的usage/version/help提示信息,还提供Unix, Gnu, X Toolkit三种风格支持<BR>使用commanline很简单,继承他的CommandLine::Application即可<BR>例子如下</P><PRE><CODE>class App &lt; CommandLine::Application

    def initialize
      version           "0.0.1"
      author            "Author Name"
      copyright         "2005, Jim Freeze"
      synopsis          "[-dhV] param_file out_file"
      short_description "A simple app example that takes two arguments."
      long_description  "app5 is a simple application example that supports "+
                        "three options and two commandline arguments."

      option :version
      option :debug
      option :help

      expected_args   :param_file, :out_file
    end

    def main
      puts "main called"
      puts "@param_file = #{@param_file}"
      puts "@out_file   = #{@out_file}"
    end
  end
</CODE></PRE>
<P>通过执行ruby xxx.rb -h指令就可以立刻看到标准的help被打印出来</P><PRE><CODE>  NAME

      xxx.rb - A simple app example that takes two arguments.

  DESCRIPTION

      xxx.rb is a simple application example that supports three options
      and two commandline arguments.

  OPTIONS

      --version,-V
          Displays application version.

      --debug,-d
          Sets debug to true.

      --help,-h
          Displays help page.

  AUTHOR:  Author Name
  Copyright (c) 2005, Jim Freeze
</CODE></PRE>
<H3><A href="http://rubyforge.org/projects/fastercsv/">fastercsv</A>:更快更简单的csv库</H3>
<P>顾名思义, 就是更快csv处理库, 偶看maillist上看到的评测是要快10倍(内置的实在太慢了,以至于fastercsv快它10倍还是比python版本的慢), 同时使用起来也比内置csv简单, 一看就会(除非你根本不知道csv是什么) <BR>比如读取一个csv文件</P><PRE><CODE>  FasterCSV.foreach("path/to/file.csv") do |row|
    puts row[0]
    puts row[2]
  end
</CODE></PRE>
<P>使用header支持读取cvs文件</P><PRE><CODE>  FasterCSV.foreach("path/to/file.csv",:headers=&gt;true) do |row|
    #第一行是header,会自动忽略
    puts row['fielda']
    puts row['fieldc']
  end
</CODE></PRE>
<P>需要提醒的是它使用require 'faster_csv',类名却是FasterCSV,不是很符合ruby的命名规则</P><img src ="http://www.blogjava.net/cap/aggbug/34027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-03-07 12:10 <a href="http://www.blogjava.net/cap/archive/2006/03/07/34027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>beta book读书俱乐部的构思</title><link>http://www.blogjava.net/cap/archive/2006/02/28/32934.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Tue, 28 Feb 2006 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/02/28/32934.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/32934.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/02/28/32934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/32934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/32934.html</trackback:ping><description><![CDATA[什么是beta book?<br /><br />现在的ruby相关图书都是通过pragmaticprogrammer.com(以下称pragprog) 来进行订购的,  pragprog的书的特点是每本书都是单独编译出来的,附带有购买者的信息, 同时支持在线升级.  他有很多书都是处于beta book的阶段, 也就是没有正式出版, 但是pdf已经成书可以阅读, 购买pdf以后可以定期去update为最新的版本(包括修改错误, 已经和最新版本的软件同步) 对于ruby和rails这样快速升级的技术, betabook的做法是很有道理的, 就拿Agile Web Development with Rails来说, 版本是从Beta,Beta 2,Beta 3,Candidate,P1.0,P2.0,P3.0,P3.1,P4.0 一路更新而来, 和rails版本同步 <br /><br />目前club的正版图书如下<br /><br /><a href="http://www.pragmaticprogrammer.com/titles/fr_rr/index.html">Rails Recipes</a> : 这本书是通过例子来一步一步介绍rails. 带有丰富的example和一步步搭建一个ruby web应用的各个方面的说明   <br /><br /><a href="http://pragmaticprogrammer.com/titles/fr_eir/index.html">Enterprise Interation with Ruby</a> : 这本书主要介绍了ruby和企业级应用集成的内容, 包括<strong>Oracle, MySQL,LDAP,XML,Sockets, HTTP,XML-RPC, SOAP, CORBA, RMI 等 </strong>这本书beta出来也有一段时间了,介绍的话题也是比较独家的 <br /><br /><a href="https://gettingreal.37signals.com/">Getting Real</a> : <br /><br />欢迎大家一起来购买这些电子书,发mail到 tomcap[at]gmail.com 说明自己的来意即可<br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/cap/aggbug/32934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-02-28 23:05 <a href="http://www.blogjava.net/cap/archive/2006/02/28/32934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YARV: 又一个ruby虚拟机</title><link>http://www.blogjava.net/cap/archive/2006/02/08/29908.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Wed, 08 Feb 2006 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/02/08/29908.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/29908.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/02/08/29908.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/29908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/29908.html</trackback:ping><description><![CDATA[<p>    <a href="http://www.atdot.net/yarv/">YARV</a>&#160;的全名是 Yet Another Ruby VM, 由日本人SASADA Koichi 另外实现的ruby虚拟机</p><p>    目前ruby的虚拟机是通过AST(abstract syntax tree) 来完成的,它的速度比较慢, 只能作一般纯脚本的解释工作, YARV的出现就是为了解决这个问题, 它是基于Stack VM来完成.主要的目的就是给ruby脚本提速</p><p>    下面的图片显示了使用YARV相对普通ruby虚拟机的速度提升率,YARV采用了多种方式来优化ruby的执行速度,列表如下</p><li>    Base: only Base VM</li><li>    DTC: Direct Threaded Code</li><li>    SI: Specialized Instruction</li><li>    OU: Operands Unification</li><li>    IU: Instructions Unification</li><li>    IMC: In-line Method Cache</li><li>    SC: Stack Caching</li><p>    <a href="http://www.flickr.com/photos/38856069@N00/97007128/" target="blank"><img height="191" alt="speed.JPG" src="http://static.flickr.com/31/97007128_7751cfff19.jpg" width="579" border="0"/></a></p><p>    从图表可以看到, YARV的速度提升是相当惊人的, 最快可以提升接近25倍</p><p>    当前YARV的版本还只是0.3.3,离实际运用还差很多, 希望ruby2.0的时候能够用上它</p><img src ="http://www.blogjava.net/cap/aggbug/29908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-02-08 12:00 <a href="http://www.blogjava.net/cap/archive/2006/02/08/29908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby中发送带附件,中文,html的email</title><link>http://www.blogjava.net/cap/archive/2006/02/06/29703.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Mon, 06 Feb 2006 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/02/06/29703.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/29703.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/02/06/29703.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/29703.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/29703.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: mailfactory是rubyforge上一个简单的邮件发送包, 通过它我们可以很方便的发送带附件和html格式的邮件,不过目前的mailfactory在支持中文上有一些问题, 需要打一个补丁.如下...&nbsp;&nbsp;<a href='http://www.blogjava.net/cap/archive/2006/02/06/29703.html'>阅读全文</a><img src ="http://www.blogjava.net/cap/aggbug/29703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-02-06 16:14 <a href="http://www.blogjava.net/cap/archive/2006/02/06/29703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Fastcgi到底是什么样的技术</title><link>http://www.blogjava.net/cap/archive/2006/02/06/29672.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Mon, 06 Feb 2006 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/02/06/29672.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/29672.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/02/06/29672.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/29672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/29672.html</trackback:ping><description><![CDATA[<p>    Fastcgi到底是什么样的技术 </p><p>    注:本人对LAMP,python了解不是很多,此文是我的个人理解,如果有误忘告知 </p><p>    自从接触rubyonrails以来,fastcgi这个技术标准就进入了我的视线,从技术角度看,fastcgi的优点还是很多的,作为一种替代cgi的技术标准, fastcgi有如下优点(稳定,安全,高性能,方便扩展) </p><ul>    <li>        <p>            从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.         </p>    </li>    <li>        <p>            从安全性上看, fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮,         </p>    </li>    <li>        <p>            从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与(注1)         </p>    </li>    <li>        <p>            从扩展性上讲, fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python...)         </p>    </li></ul><p>    但是让我感到迷惑不解的是,apache对fastcgi的支持mod_fastcgi简直就是一塌糊涂, 最新的稳定版本居然还是2003年的,snap也只到2004年, 在1.3下面还勉强可以用, 在apache2.0上更是被报告无法稳定运行.fastcgi在[lighttpd][]上表现还算不错, 但是lighttpd在用户群,兼容性上还不够主流(也就在linux上面表现不错, 没有正式的windows版本, solaris下面也有bug). 另外fastcgi也缺乏发展,让人有被废弃掉了的感觉.(ruby的dbi也是这个状况). 和其他日新月异的技术标准比, fastcgi地位尴尬 </p><p>    &#160;</p><p>    直到我看到这篇<a href="http://www.vmunix.com/mark/blog/archives/2006/01/02/fastcgi-scgi-and-apache-background-and-future/">文章</a>才明白,fastcgi真是的命苦.(呵呵,以下的内容取自该文章) </p><p>    &#160;</p><p>    从名字上看fastcgi是fast的cgi的,属于改良派.从理论上,他可以很多程序语言接口来开发动态web,但是这些程序语言每一个都是走完全革命的道路. java阵营就自己搞了一套j2ee server标准,要协作也直接找apache或者IIS谈,瞧不上fastcgi. aspx直接和IIS是亲兄弟,没有fastcgi的份. 剩下的php因为太流行(LAMP),和apache是铁哥们,一个mod_php就解决了,简单方便, python社区的牛人太多,精力旺盛,人家搞了个SCGI玩,和fastcgi比是有过之而无不及. 等到rails出山的时候, fastcgi真的算是老态龙钟了. </p><p>    &#160;</p><p>    rails的出现使得fastcgi重新焕发了青春, apache也开始重新构建新的mod_proxy_fcgi,但是它的前途还不能说是一片光明, 我觉得至少有以下几个问题 </p><ul>    <li>        目前的fastcgi和server沟通还不够智能,一个fastcgi进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦.这样做也使得fastcgi无法允许联机调试.     </li>    <li>        SCGI等类似技术的都可以替换fastcgi, SCGI在python中很成功,功能完备,目前SCGI也开始支持rails了     </li>    <li>        随着rails的流行,一个独立的mod_rails是可能出现的,而且ruby自身的webserver也开始涌现,以后极有可能自己搞一套东西连接主流的webserver.fastcgi设计的时候是想作common gateway interface(cgi)的,但是这个目标的现在看来已经不适合了     </li></ul><p>    总结: 我觉得fastcgi的前途不明朗, 但是目前来说,他也是rails唯一可以进入生产环境的工具,只用搞懂怎么配就可以了,没有必要深入研究. </p><p>    注1: 有时候逻辑也会参与图片的生成,这时候图片的IO处理就需要动态程序介入了,此时fastcgi技术上的优势虽然体现不出来,但是也不会比其他技术标准差 </p><img src ="http://www.blogjava.net/cap/aggbug/29672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-02-06 11:22 <a href="http://www.blogjava.net/cap/archive/2006/02/06/29672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>断网8天 , old news about ruby</title><link>http://www.blogjava.net/cap/archive/2006/02/05/29618.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Sun, 05 Feb 2006 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/02/05/29618.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/29618.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/02/05/29618.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/29618.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/29618.html</trackback:ping><description><![CDATA[<p>春节回家待了8天, 几乎都是在和家人亲戚朋友同学吃喝玩乐中渡过,返回北京以后,恶补了一下ruby相关的消息,对下面几个比较关注</p>

<ul>
<li><p>首先是沉寂了快一年的ruby <a href="http://rubyforge.org/projects/rubyinstaller/">One-Click Installer</a>在正月初二发布了新版本 1.8.4-16 preview1,随后很快又更新到preview2,preview3,正式版本应该不会等很久了</p></li>
<li><p>然后是 <a href="http://markaby.rubyforge.org/">markaby</a> 出到了0.3版,这个东西感觉上似乎是rails内置builder的改良版,也是使用用ruby语法习惯来写html的库,但是和builder主要关注xml标签生成不同,markaby更多关注的是html的生成,他的目的主要是替换一部分rhtml的职能. markaby既可以作为rails的plugin运行, 也可以独立使用. 目前markaby还在进一步演化当中 </p></li>
<li><p>然后又是一个新的lib <a href="http://rubyforge.org/frs/?group_id=1024">double x</a> 发布0.1, 这个lib是用来生成html,xhtml,xml的,有了它, 你可以轻而易举的给一个对象增加to_xml的方法.他的用法和markaby也很类似 </p></li>
<li><p>最后是 <a href="http://rubyforge.org/projects/mongrel/">mongrel</a> http server 发布了0.2.2,有了它, webrick的日子不多了(套用宋大姐的话说: 相当慢!,这里有一份<a href="http://redhanded.hobix.com/inspect/mongrelSGoingToKillWebrickGiveItAMonth.html">评测</a>) 其实mongrel的速度也不是很快,但是和webrick一比,还是要快一个数量级</p></li>
</ul><img src ="http://www.blogjava.net/cap/aggbug/29618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-02-05 17:06 <a href="http://www.blogjava.net/cap/archive/2006/02/05/29618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails读书笔记</title><link>http://www.blogjava.net/cap/archive/2006/01/24/29125.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Tue, 24 Jan 2006 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/01/24/29125.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/29125.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/01/24/29125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/29125.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/29125.html</trackback:ping><description><![CDATA[下面是我自己的一些rails读书笔记, 略为整理了一下 
<UL>
<LI><A HREF="/cap/articles/rails_ajax.html">rails笔记 ajax</A></LI>
<LI><A HREF="/cap/articles/rails_controller.html">rails笔记 active controller</A></LI>
<LI><A HREF="/cap/articles/rails_cache.html">rails笔记 cache系统 </A></LI>
<LI><A HREF="/cap/articles/rails_mail.html">rails笔记 actionmailer</A></LI>
<LI><A HREF="/cap/articles/rails_webservice.html">rails笔记: webservice</A></LI>
<LI><A HREF="/cap/articles/rails_util.html">rails笔记: 工具</A></LI>
<LI><A HREF="/cap/articles/rails_view.html">rails笔记: view</A></LI>
<LI><A HREF="/cap/articles/rails_test.html">rails笔记: 测试</A></LI>
<LI><A HREF="/cap/articles/rails_maintain.html">rails笔记 安全和其他</A></LI>
<LI><A HREF="/cap/articles/rails_relation.html">rails笔记 activerecord 关系</A></LI>
<LI><A HREF="/cap/articles/rails_activerecord_2.html">rails笔记 activerecord 2</A></LI>
<LI><A HREF="/cap/articles/rails_activerecord_1.html">rails笔记 activerecord 1</A></LI></UL><img src ="http://www.blogjava.net/cap/aggbug/29125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-01-24 17:08 <a href="http://www.blogjava.net/cap/archive/2006/01/24/29125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows环境下ruby连接mysql需要的驱动包</title><link>http://www.blogjava.net/cap/archive/2006/01/20/28731.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Fri, 20 Jan 2006 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/01/20/28731.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/28731.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/01/20/28731.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/28731.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/28731.html</trackback:ping><description><![CDATA[终于不需要手动去编译mysql的驱动了, 档案在<A HREF="/Files/cap/mysql-ruby-win32.rar">这里</A><BR><BR>一个4.1.15 <BR>一个5.0.15<BR><BR>把对应的文件(mysql.so)拷贝到ruby\lib\ruby\site_ruby\1.8\i386-msvcrt 下面即可<BR><BR><BR><img src ="http://www.blogjava.net/cap/aggbug/28731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-01-20 10:28 <a href="http://www.blogjava.net/cap/archive/2006/01/20/28731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新rails的UTF8插件</title><link>http://www.blogjava.net/cap/archive/2006/01/17/28272.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Tue, 17 Jan 2006 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/01/17/28272.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/28272.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/01/17/28272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/28272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/28272.html</trackback:ping><description><![CDATA[<P>ruby语言到目前为止还没有支持unicode,对于多语言的应用来说,rails支持unicode也比较麻烦.好消息是ruby的作者开始<A href="http://redhanded.hobix.com/inspect/futurismUnicodeInRuby.html">注意到</A>这个问题了,坏消息是一时半会,我们还得和第三方的lib打交道, 比如 <A href="http://www.yoshidam.net/Ruby.html#unicode">Unicode library</A>和<A href="http://redhanded.hobix.com/inspect/closingInOnUnicodeWithJcode.html">Unicode-aware String class</A> </P>
<P>现在有人出来UTF-8 Plugin for rails, 有兴趣的到<A href="http://www.fngtps.com/2006/01/encoding-in-rails">这里</A>看看, 对于非rails的应用,只使用它的<A href="http://julik.textdriven.com/svn/tools/rails_plugins/unicode_hacks/lib/string_overrides.rb">String class extensions</A> 也是可以的</P>
<P><STRONG>评论</STRONG>: 这样的plugin还是不够方便,用惯了java,总觉得对unicode的支持应该是透明的</P>
<P><EM>本文转自<A href="http://redhanded.hobix.com/inspect/unicodeLibForRuby18.html">http://redhanded.hobix.com/inspect/unicodeLibForRuby18.html</A></EM></P><img src ="http://www.blogjava.net/cap/aggbug/28272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-01-17 10:10 <a href="http://www.blogjava.net/cap/archive/2006/01/17/28272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails术语: Component, Plugin,Generator, Engine</title><link>http://www.blogjava.net/cap/archive/2006/01/14/28057.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Sat, 14 Jan 2006 15:49:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/01/14/28057.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/28057.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/01/14/28057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/28057.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/28057.html</trackback:ping><description><![CDATA[<ul>
<li><p>component</p>

<p>偏向显示一端, 是一组controller和view的集合,专注于显示界面,比如专门显示歌曲列表的 component, 各处页面都可以调用它显示歌曲列表</p></li>
<li><p>plugin</p>

<p>增强系统功能的模块, 专注于技术层面的功能,比如增强form-tag-helper,增强activerecord</p></li>
<li><p>generator</p>

<p>rails通过script提供的自动生成代码的包.一些第三方扩展也使用的genrator来生成代码</p></li>
<li><p>engine</p>

<p>是generator的继任者,专注于一个应用层面的功能,可以理解为和plugin的功能是正交的 ,比如一个登陆模块, 他只解决登陆这个业务层面的问题,engine的在用户下载以后是可以作自定义修改来配合自己的业务的</p></li>
</ul>

<img src ="http://www.blogjava.net/cap/aggbug/28057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-01-14 23:49 <a href="http://www.blogjava.net/cap/archive/2006/01/14/28057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ruby IDE : ActiveState Komodo 3.5.2 出来了 以及 注册机</title><link>http://www.blogjava.net/cap/archive/2006/01/13/27887.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Fri, 13 Jan 2006 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2006/01/13/27887.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/27887.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2006/01/13/27887.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/27887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/27887.html</trackback:ping><description><![CDATA[<P>升级居然要手动卸载以前版本, 不爽<BR><BR>注册机在<A HREF="/Files/cap/ActiveState.Komodo.v3.5.2.Professional.Incl.Keygen-SSG.rar">这里</A> </P><img src ="http://www.blogjava.net/cap/aggbug/27887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2006-01-13 11:42 <a href="http://www.blogjava.net/cap/archive/2006/01/13/27887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveState发布了新版本的Ruby IDE</title><link>http://www.blogjava.net/cap/archive/2005/12/03/22312.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Fri, 02 Dec 2005 17:16:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2005/12/03/22312.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/22312.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2005/12/03/22312.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/22312.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/22312.html</trackback:ping><description><![CDATA[<P>12月30号, ActiveState的发布了最新版本的IDE: Komodo 3.5.1<BR>这个IDE主要是对动态语言开发提供支持, 从这个版本开始,ruby终于得到正式的支持 <IMG height=19 src="http://www.blogjava.net/Emoticons/shades_smile.gif" width=19 border=0>&nbsp; (3.5版本只有正式的mac os版本,下面是它的截图,3.5.1是增加了对windows的支持)<BR><BR><IMG style="WIDTH: 601px; HEIGHT: 489px"  src="http://www.activestate.com/_images/screenshots/ss_Komodo_rails_large.jpg" border=0><BR><BR>这个真是一个对于ruby开发者的好消息, 一直以来,ruby都缺乏一个好用的开发工具, 自带的FreeRIDE 在windows上非常不稳定,速度不快,很容易退出.ruby还有一个专门支持vim的<A href="http://vim-ruby.rubyforge.org/">模块</A>,但是使用它让我感觉到我学习的不是ruby,而是vi. 其他第三方的ruby开发工具中,作得好的算<A href="http://www.jedit.org/">jedit</A>的<A href="http://www.jedit.org/ruby">ruby plugin</A>和<A href="http://www.eclipse.org/">eclispe</A>的<A href="http://rubyeclipse.sourceforge.net/">RDT</A> ,但是这个工具对于ruby都只能提供很原始的编辑功能, 商业版本的<A href="http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor.php">Arachno Ruby IDE</A>用起来花钱不说,功能也不怎么样.&nbsp;据说mac上面的<A href="http://www.macromates.com/">textmate</A>不错,但是遗憾的是我用的是<A href="http://pearpc.sourceforge.net/">windows<BR></A><BR>我选择用eclipse RDT来写,因为eclipse内置支持CVS (还算不错,起码比wincvs好用,靠这个我放弃了vim) ,对于ruby的开发工具,我不敢奢望能够作到<A href="http://www.jetbrains.com/idea/">IDEA</A>那样好用, 也许动态语言是不可能做到<A href="http://www.jetbrains.com/idea/features/code_editing.html">那样</A>. 但是代码格式化,即时检错(格式上的低级错误), 调试环境,版本控制等基本功能实现起来应该不算太难吧<BR><BR>现在Komodo给我们带来了一个新的选择,和以上的工具不同,Komodo的版本是3.5 (你喜欢0.x版本的软件吗?),而且他对python的支持也能<A href="http://www-128.ibm.com/developerworks/cn/linux/sdk/python/charm-14/">说明一点问题</A>,起码不是从零开始的&nbsp;,唯一的缺点是比较消耗资源. 不过<A href="http://myhard.yesky.com/memoery/358/2193858.shtml">问题不大</A>, 怎么样? 去<A href="http://www.activestate.com/Products/Komodo/?tn=1">试试</A>吧</P>
注册机在<a href='http://www.blogjava.net/Files/cap/ActiveState.Komodo.v3.5.2.Professional.Incl.Keygen-SSG.rar'>这里</a><img src ="http://www.blogjava.net/cap/aggbug/22312.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2005-12-03 01:16 <a href="http://www.blogjava.net/cap/archive/2005/12/03/22312.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Try Ruby! 大家一起来!</title><link>http://www.blogjava.net/cap/archive/2005/12/03/22309.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Fri, 02 Dec 2005 16:18:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2005/12/03/22309.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/22309.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2005/12/03/22309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/22309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/22309.html</trackback:ping><description><![CDATA[<H2>&nbsp;</H2>
<H2>想感受一下ruby却又不想费事的安装它? </H2>
<P>没有关系, 现在有了<A href="http://tryruby.hobix.com/">Try Ruby</A>站点, 只要你有浏览器你就可以立刻使用ruby了,Try Ruby提供了一个类似ruby的irb那样的交互环境, 还提供了一个简短的ruby教程.<BR><BR><IMG height=261 alt=o_tryruby.gif src="http://www.blogjava.net/images/blogjava_net/cap/2217/o_tryruby.gif" width=389 border=0><BR><BR><BR>怎么样? 还不马上去<A href="http://tryruby.hobix.com/">试试看</A><BR>----------------------------------------------------------<BR>ps: <A href="http://board.ruby-cn.org">ruby-cn</A> 上的cid73 告诉我, <A href="http://www.ruby.ch/interpreter/rubyinterpreter.shtml">这里</A>还有一个一次性运行整段代码的的ruby解释网页<BR>虽然比上面的简陋一点,不过也还不错啦<BR><BR></P><img src ="http://www.blogjava.net/cap/aggbug/22309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2005-12-03 00:18 <a href="http://www.blogjava.net/cap/archive/2005/12/03/22309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby的super语法,真是够灵活</title><link>http://www.blogjava.net/cap/archive/2005/11/29/21803.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Tue, 29 Nov 2005 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2005/11/29/21803.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/21803.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2005/11/29/21803.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/21803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/21803.html</trackback:ping><description><![CDATA[<P>和java不同, ruby中的super代替的并非是父类, 而是父类中和当前方法名相同的方法, 在ruby中, super的用法比较灵活, 使用super的时候, 如果不带任何参数(也没有括号), 实际上的作用是自动调用父类中的当前方法, 并且把当前参数也传过去, 也就是说<BR>super.thismethod(param1,param2...) 在ruby中可以简化为一个 super 就可以了, 真是非常方便<BR><BR>例子</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 97.18%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 130px; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;A&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;String<BR>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">def</SPAN><SPAN style="COLOR: #000000">&nbsp;to_s<BR>&nbsp;&nbsp;super</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">__</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;end<BR>end<BR><BR>a</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">A.new(</SPAN><SPAN style="COLOR: #800000">'</SPAN><SPAN style="COLOR: #800000">ok</SPAN><SPAN style="COLOR: #800000">'</SPAN><SPAN style="COLOR: #000000">)<BR>p&nbsp;a.to_s<BR></SPAN></DIV><BR>如果父类该方法的参数和子类不一样, 才需要显式的传入参数调用<BR><BR>注意事项,super.somemethod的语法在ruby中是没有的, 因为super已经是父类的方法了, 所以在使用super的时候,如果当前方法是新增的,那么是不能使用super指令的. 使用self代替即可(父类的方法直接继承到self中)<BR>&nbsp;
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;B&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">String<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">def</SPAN><SPAN style="COLOR: #000000">&nbsp;to_s<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;super</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">__</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;end<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">def</SPAN><SPAN style="COLOR: #000000">&nbsp;newmethod&nbsp;&nbsp; #new method<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;self</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">__</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;end<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>end</SPAN></DIV><BR><BR>另外,super指令是不理会方法访问控制的, 也就是说,super可以直接调用父类中的private方法,&nbsp; <IMG height=19 src="http://www.blogjava.net/Emoticons/75_75.gif" width=19 border=0>&nbsp;似乎有点灵活过头了<img src ="http://www.blogjava.net/cap/aggbug/21803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2005-11-29 11:44 <a href="http://www.blogjava.net/cap/archive/2005/11/29/21803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby中字符串的转码 使用方法以及注意事项 </title><link>http://www.blogjava.net/cap/archive/2005/11/28/21694.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Mon, 28 Nov 2005 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2005/11/28/21694.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/21694.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2005/11/28/21694.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/21694.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/21694.html</trackback:ping><description><![CDATA[<P>不同于java, ruby内部并不支持unicode(据说到2.0会支持, 但是没有确认) <BR>在字符编码处理上ruby是借助于Open Group的iconv库, 这个库在linux上似乎默认就有,&nbsp; windows上没有这个库, 解决方案在末尾<BR><BR>使用iconv很简单, 下面是把iso8859-1编码转换到GBK编码的例子</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">require&nbsp;</SPAN><SPAN style="COLOR: #800000">'</SPAN><SPAN style="COLOR: #800000">iconv</SPAN><SPAN style="COLOR: #800000">'</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>conv&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Iconv.new(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">GBK</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">ISO-8859-1</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>result&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;conv.iconv(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">hello</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>result&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;conv.iconv(nil)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>conv.close</SPAN></DIV>
<P>需要<FONT color=#ff0000>注意</FONT>的是转换以后还需要调用一下iconv(nil)来刷新未输出的数据 , 最后记得关闭conv<BR><BR>以上方式可以用block来简化</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">Iconv.open(toencoding,&nbsp;fromencoding)&nbsp;do&nbsp;</SPAN><SPAN style="COLOR: #000000">|</SPAN><SPAN style="COLOR: #000000">cd</SPAN><SPAN style="COLOR: #000000">|</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;input.each&nbsp;{</SPAN><SPAN style="COLOR: #000000">|</SPAN><SPAN style="COLOR: #000000">s</SPAN><SPAN style="COLOR: #000000">|</SPAN><SPAN style="COLOR: #000000">&nbsp;output&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;cd.iconv(s)}<BR>&nbsp;&nbsp;output&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;cd.iconv(nil)<BR>end</SPAN></DIV>
<P>当然,还有一种更简单的方式</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">Iconv.conv(toendocing,&nbsp;fromencoding,&nbsp;str)</SPAN></DIV>
<P>最后还要提醒一下, iconv接受编码是toencoding在前, fromencoding在后,&nbsp;不要记错了.偶就是因为这个问题被郁闷了半天<BR><BR><BR>题外话:&nbsp; ruby中很多功能都依赖于各种库, 比如这个iconv, 真是胶水语言的典型范例.<BR><BR>--------------------------------------------------------------------<BR>补充:&nbsp; windows下面iconv 的安装<BR><BR>到<A href="http://www.dave.burt.id.au/ruby/iconv.zip">这里</A>下载iconv安装包,&nbsp; 按照如下方式放置包中的文件就OK了<BR><BR>iconv.so -&gt;&nbsp;&nbsp;&nbsp; ruby\lib\ruby\1.8\i386-mswin32\<BR>iconv.dll -&gt;&nbsp;&nbsp; windows\system32\<BR>charset.dll -&gt; windows\system32\<BR><BR>更详细的说明见安装包中的README<BR><BR><BR><BR></P><img src ="http://www.blogjava.net/cap/aggbug/21694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2005-11-28 17:14 <a href="http://www.blogjava.net/cap/archive/2005/11/28/21694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby笔记 基于对象的类(object specific class) </title><link>http://www.blogjava.net/cap/archive/2005/11/19/20578.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Sat, 19 Nov 2005 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2005/11/19/20578.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/20578.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2005/11/19/20578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/20578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/20578.html</trackback:ping><description><![CDATA[<P>此笔记是为了帮助理解 "&lt;&lt;" 指令 <BR>ruby语言允许我们在一个对象的基础上定义类,使得我们可以单独扩展一个对象的行为,例子如下 </P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">test</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">hello</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #008000">#</SPAN><SPAN style="COLOR: #008000">普通string&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">normal</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">a.dup&nbsp;</SPAN><SPAN style="COLOR: #008000">#</SPAN><SPAN style="COLOR: #008000">还是普通string&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;test&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">def</SPAN><SPAN style="COLOR: #000000">&nbsp;to_s&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">value&nbsp;is&nbsp;#{self}</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">#</SPAN><SPAN style="COLOR: #008000">test对象已经被更新,&nbsp;normal保持不变&nbsp;</SPAN></DIV>
<P>运行完上述代码以后 </P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">normal.to_s&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">hello</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR>test.to_s</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">value&nbsp;is&nbsp;hello</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN></DIV>
<P>从这个例子上来看, 此时的test对象的类已经被扩展为新的to_s方法,但是这个扩展只能影响到test对象自己 ,其他的string对象还是原来的方法. </P>
<P>我的理解: 基于对象的类通过指令"&lt;&lt;" 来定义, 他能够扩展并且只能扩展被定义的对象, 同时不能影响系统中其他同类型的对象 <BR>"&lt;&lt;"指令可以用来临时修改一个对象,此外,这个指令还可以用来定义类的方法, 一般定义类方法是通过如下语法 </P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Test&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">def</SPAN><SPAN style="COLOR: #000000">&nbsp;Test.say&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">hello</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<BR>end<BR></SPAN></DIV>
<P>如果嫌需要写多次类名麻烦,可以通过self替换 </P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Test&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">def</SPAN><SPAN style="COLOR: #000000">&nbsp;self.say&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">hello</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<BR>end</SPAN></DIV>
<P>有了"&lt;&lt;"指令,还可以这样来 </P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Test&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;self&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">def</SPAN><SPAN style="COLOR: #000000">&nbsp;say&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">hello</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<BR>end</SPAN></DIV>
<P>上述三者的定义是等价的,而且在ruby源代码中很容易看到第三种用法<BR>&nbsp;<BR>解释: 在ruby中,每一个类都有一个唯一实例的metaclass. 类定义的方法都存在这个metaclass中 <BR>通过"&lt;&lt;"对这个唯一实例的metaclass作扩展,给metaclass增加方法和直接给这个类增加方法是一样的效果</P><img src ="http://www.blogjava.net/cap/aggbug/20578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2005-11-19 17:01 <a href="http://www.blogjava.net/cap/archive/2005/11/19/20578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rubygem的小细节</title><link>http://www.blogjava.net/cap/archive/2005/11/18/20409.html</link><dc:creator>tech.cap</dc:creator><author>tech.cap</author><pubDate>Fri, 18 Nov 2005 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/cap/archive/2005/11/18/20409.html</guid><wfw:comment>http://www.blogjava.net/cap/comments/20409.html</wfw:comment><comments>http://www.blogjava.net/cap/archive/2005/11/18/20409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cap/comments/commentRss/20409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cap/services/trackbacks/20409.html</trackback:ping><description><![CDATA[<P>我在linux上安装了rubygem以后， 发现一个问题，单独写的ruby文件无法以相对路径require gem上的包 <BR>比如 <BR>require 'something' 不行,必须以绝对路径 require '/usr/local....../something' 才可以 <BR>我查询了ruby的loadpath ("$:") ,发现这个路径并不在RUBY的loadpath中, 按道理说不能require是正确的 </P>
<P>但是为什么在我的windows上面或者在rubyonrails程序中的就可以这样require了呢,经过一番google再加上自己多次试验，终于发现了其中的缘故 </P>
<P>原来windowsXP下面有一个环境变量 RUBYOPT='rubygems' 而linux下面没有， 在linux下面加上RUBYOPT以后，发现可以工作, 进一步发现只要在require其他类以前先require 'rubygems' 程序也能自动识别gem包内的库， 看来，rubygems 对require函数作了手脚， 总结如下 </P>
<P>RUBYOPT中'rubygems' 实际上引用的是 ubygems.rb这个文件,在ubygems.rb中再require 'rubygems' 相当于作了一个alias </P>
<P>在rubygems.rb中, 对Kernel模块作了如下调整 <BR>1增加了require_gem的指令,这个指令支持按照指定版本号require <BR>2在文件末尾, require了 'custom_require' </P>
<P>在custom_require.rb中, 对require函数作了修改,代码如下 </P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">module&nbsp;Kernel&nbsp;<BR>&nbsp;&nbsp;alias&nbsp;require__&nbsp;require&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">def</SPAN><SPAN style="COLOR: #000000">&nbsp;require(path)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;require__&nbsp;path&nbsp;<BR>&nbsp;&nbsp;rescue&nbsp;LoadError&nbsp;</SPAN><SPAN style="COLOR: #000000">=&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;load_error&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@gempath_searcher&nbsp;</SPAN><SPAN style="COLOR: #000000">||=</SPAN><SPAN style="COLOR: #000000">&nbsp;Gem::GemPathSearcher.new&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;spec&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;@gempath_searcher.find(path)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gem.activate(spec.name,&nbsp;true,&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">=&nbsp;#{spec.version}</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require__&nbsp;path&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">raise</SPAN><SPAN style="COLOR: #000000">&nbsp;load_error&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<BR>&nbsp;&nbsp;end&nbsp;<BR>end&nbsp;<BR><BR></SPAN></DIV>
<P><BR>在上面的代码中, require函数被更新, 当不能从RUBY内部的loadpath中读取文件时, require会从gempath中查找, 这样require函数就能支持gem了 </P>
<P>结论: 要使用gem中的包, 3个办法 <BR>1 使用RUBYOPT='rubygems' <BR>2 先require 'rubygems' 或者 'ubygems' <BR>3 使用require_gem</P><img src ="http://www.blogjava.net/cap/aggbug/20409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cap/" target="_blank">tech.cap</a> 2005-11-18 11:56 <a href="http://www.blogjava.net/cap/archive/2005/11/18/20409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>