2008-07-23

Ruby写Servlet的小例子

关键字: ruby servlet
    Ruby也能写servlet?是的,没开玩笑,而且挺方便的,因为Ruby的标准库就自带了一个webrick,webrick本身又有一个serlvet容器,随时随地启动一个web server,实在是很方便。     先看个最简单的例子,输出hello到浏览器: require 'webrick' require 'net/http' include WEBrick class HelloServlet < HTTPServlet::AbstractServlet def hello(resp) ...
2008-06-14

JRuby中调用java带可变参数的方法

关键字: jruby 可变参数 java
    今天同事遇到的问题,用JRuby调用一个java方法,该方法使用了jdk1.5的可变参数。我一开始以为只要简单地将可变参数表示为数组即可,例如下面的两个java类: public class Echo{ public void echo(String name){ System.out.println(name); } } public class Test{ public void hello(String name,Echoargs){ System.out.println( ...
2008-05-08

Ruby中实现stream

关键字: stream 延时求值
     流是通过延时求值实现的,Ruby中实现stream也是可以做到,可惜就是没有尾递归优化。按照sicp,首要的是两个函数:delay和force: def mem_proc(exp) alread_run=false result=false lambda{ if !alread_run result=exp.call alread_run=true result else result end } end def force(d ...
2008-04-07

lua 5.0的实现(翻译)1,2,3部分

关键字: lua 实现
三个多月前翻译的,今天又找出来看看,后面的整理再发。  原文:http://www.tecgraf.puc-rio.br/~lhf/ftp/doc/jucs05.pdf 翻译:dennis zhuang (killme2008@gmail.com)  http://www.blogjava.net/killme2008 转载请注明出处,谢谢。   摘要:我们讨论了lua 5.0实现的主要新特性:基于寄存器的虚拟机,优化表的新算法以便(将表)用作数组,闭包的实现,以及coroutines(译注:协程) 关键字: compilers, virtual ...
2008-03-27

Ruby代码调整性能优化的几个Tip

关键字: 代码调整 性能优化
    数据都是在我的机器上测试所得,我的机器配置:AMD athlon 64 x2 Dual 4000+ 2.11Ghz,1.87G内存。cruby版本是1.8.6,jruby是1.1RC3。操作系统是xp sp2。 1、将繁忙的循环放在内层,比如下面的代码: a=0 for i in 0..1000 for j in 0..10 a+=(i+j) end end   替换成:for j in 0..10 for i in 0..1000 a+=(i+j) end ...
2008-03-24

使用JProfiler监控JRuby脚本的运行

关键字: jruby jprofiler
    jruby本质上也是启动一个jvm,然后去读Ruby脚本并解释执行(或者编译),因此jprofiler理所当然也可以去监控jruby脚本的执行。 执行      jruby hello.rb等价于执行: java -Xmx378m -Xss1024k -Djruby.home=/usr/local/jruby -Djruby.lib=/usr/local/jruby/lib Djruby.script=jruby org.jruby. ...
swf-util是一个使用Ruby读取swf头信息(高度、宽度、文件大小、帧数等等)、压缩和解压缩swf文件的工具类库,改写自java版本。项目主页:http://code.google.com/p/swf-util/协议:MIT License依赖BitStruct,请到这里下载安装bit-struct。使用例子:#read swf head require 'swf_util' header=SwfUtil::read_header("test.swf") puts header.inspect header.version header.frame_ra ...
    今天有点空闲,想想用Ruby写个NFA试试。从正则表达式构造NFA采用经典的Thompson算法:正则表达式 -> 后缀表达式 -> 构造NFA。构造了NFA后,用之匹配字符串。一句话,写了个玩具的正则表达式引擎,支持concatenation、alternation以及 *、?、+量词,不支持反向引用和转义符。测试了下与Ruby自带的正则表达式引擎的性能对比,慢了3倍。构造NFA没什么问题,主要是匹配运行写的烂,有空再改改。 nfa.rbmodule NFA class NFA def initialize(s ...
    读blog看到的一个小技巧,原文在这里。     我们常常处理这样的代码: name=person?person.name:nil      取某个对象的一个属性,先判断对象是否为nil,不是nil就返回对象属性,否则返回nil。这样的代码写多了比较恶心,是否有比较有趣的方式来减少代码?作者给出了一段代码: module ObjectExtension def nil_or return self unless self.nil? o = Object.new ...
2008-02-16

expectations——轻量级的单元测试框架

关键字: unit test expections
项目主页:http://expectations.rubyforge.org/安装的话:gem install  expectations它将测试分为state based和behavior based,语法很DSL,作者写了篇文章《implementing internal dsl in ruby》例子, state base test: # State based expectation where a value equals another value expect 2 do 1 + 1 ...
2008-02-15

JRuby中使用接口和抽象类

关键字: jruby 接口 抽象类
    要在JRuby中实现java接口,接口include进来,实现接口方法即可,例如实现java.lang.Runnable接口做线程处理: require 'java' include_class 'java.lang.Runnable' class TestRunnable include Runnable def initialize(name) @name=name end def run puts "hello,"+@name end ...
    过去写的那个利用google在线翻译的小脚本工具一 直在用,今天用的时候,突然想,我今年不是想加强下英语学习吗?那么把每天查过的单词保存下来,每天早上或者上班空闲期间花那么几分钟记忆复习下这些单词 不是很好,毕竟技术性文章翻来覆去运用的单词就那么多,过去没有注意积累,导致常常还得重新查,所谓提高也就放在口头上了。说改就改,脚本语言改起来就是 容易: #利用google在线翻译,翻译中文<->英文 #author dennis #version 0.2 require 'net/http' $contents=Hash.new ...
2008-01-31

JRuby的性能优化

关键字: jruby java ruby 性能优化
    越来越觉的JRuby是个很有前途的项目,结合Ruby的性感语法和java极其丰富的类库,况且有团队持续不断地修正bug、改进性能,这样的玩意完全有成为“少男杀手”的潜质。JRuby wiki上列出了性能优化的四条建议: 1、调优编译器,JRuby早就弃暗投明跟随XRuby走上了编译这条牛B的道路,将Ruby Script编译成字节码,因此这个环节是断断不能忽略的。 两种编译方式: AOT模式:直接生成class文件,脱了Ruby这层皮,咱就是人见人“爱”的java了。 JIT模式:充分利用成熟的jit ...
2008-01-27

为BitStruct添加list类型

关键字: bitstruct list类型 扩展
class BitStruct def self.list(name,element) module_eval <<-HERE rest :body def #{name.to_s}=(elist) e=Object.const_get(:#{element}) if elist.respond_to? :each and elist.respond_to? :[] and elist[0].is_a? e elist.each{ |value| self.body+=va ...
2008-01-25

Ruby处理二进制

关键字: 二进制 ruby bit-struct
    分析二进制协议或者存取二进制文件是个很常见的需求,Ruby的IO提供了对二进制的读操作,但是写入却只提供字符。并且读的操作也比较笨拙,例如,在c里面的话,我们一般是定义个struct,然后: fread(record, sizeof(record), 1, stream); 在java里,也是比较容易,特别是nio引入了ByteBuffer之后就更方便了。Ruby的话,我得自己确定读多少个字节,并自己“组装”成原始数据,这显然太麻烦了,幸好,我们有bit-struct :)     到主页 ...
读《Perl语言入门》(第四版,我买的书,网上有个翻译质量很高的电子版)的第10章的习题,人见人爱的猜数游戏,用perl写出来大概这样: python 代码   $num=int (1 + rand 100); print "I have a number,guess it?:\n"; while(<>) { chomp; next unless /\d+/; $_>$num? print &quo ...
2007-11-29

Lua学习小记——语言

关键字: lua
1.起点,经典hello world: print("Hello World") 这与大多数脚本语言没什么两样,总体来说如果你对JavaScript、Ruby、Python之类有所学习的话,LUA还是相当简单的 2.函数定义,类似JS,用begin end代替大括号: function fact (n)     if n == 0 then        return 1     else     ...
    hack有水平高低之分,最近看到一个blog,牛人的hack水平让你不得不服。情况是这样的,牛人在使用 mongrel_light_cluster的过程中,发现这个cluster违反了copy-on-write的语义,导致占用了太多的内存。根本原因在于Ruby的GC机制是marks all memory pages as dirty。为了减少内存的占用,让集群跑更多mongrel,牛人走上了hack之路,给c ruby打补丁,他也真的做到了。c ruby的GC使用的是mark and sweep(标记并清除)的垃圾收集算法,他发现在mark过程中使用了st ...
2007-09-29

Ruby的对象模型

关键字: 对象模型
    Ruby的对象模型,包含在下面这张图中:     首先要知道,Ruby中的类也是对象,类相比于其他对象特殊的地方在于能够产生对象,既然类是对象,那么它显然也有类,也就是所谓类的类,这个类的类在 Ruby中就是类的metaclass,图中的(OtherClass),(OtherClass)就是类OtherClass的klass(c层次), (OtherClass)存储了类的方法(类方法)和类的实例变量,并且是唯一的且不可实例化。在Ruby层次上我们想操作(otherclass)应该 类似: ruby 代码 &n ...
2007-09-27

Ruby变量在c ruby中的存储

关键字: c ruby 变量 st_table
    读完ruby hacking guide第6章,彻底总结下: 1.在Ruby中,类也是一个对象,因此有实例变量。类的实例变量、类变量、常量都是存储在RClass struct的iv_tbl中, struct RClass {     struct RBasic basic;     struct st_table *iv_tbl;     struct st_table *m_tbl;     VALUE super; }; ...
楼上的图才算是完整了,OtherClass类的实例是instance,instance的singleton类是(instance),继承自OtherClass,这个(instance)在ruby层次上无法见到。 rb_cObject = boot_defclass("Object", 0); rb_cModule = boot_defclass("Module", rb_cObject); rb_cClass = boot_defclass("Class", rb_cModule); metaclass = rb_make_me ...
2007-09-12

深入下Ruby中的String

关键字: Ruby String mutable
    Ruby语言中的String是mutable的,不像java、C#中的String是immutable的。比如        str1="abc"        str2="abc" 在java中,对于字面量的字符串,jvm内部维持一张表,因此如果在java中,str1和str2是同一个String对象。而在Ruby中, str1和str2是完全不同的对象。同样,在java中对于String对 ...
2007-09-04

ruby Tk版本的google翻译机

关键字: google 翻译
过去写的那个调用google翻译的翻译脚本,一直在用。那个版本只能处理单个单词,如果要翻译一行或者一段语句,尽管稍微修改下就可以,但失去了我想要 的便利性。今天看了看TK,顺手写了个GUI版本的,采用一次请求一个线程,倒是便捷不少。在windows上,你需要到这里下载安装ActiveTcl才可以运行。 代码如下: ruby 代码   require 'net/http'   require 'tk'   require 'logger'   ...
    阅读专家和牛人的blog已经是我学习的一种主要方法之一,我每天的必做的就是关注下dreamhead、gigix、江南白衣、robbin、李锟等牛 人的blog是不是有什么新文章。不过我非常讨厌安装商业公司的rss阅读器,我害怕他们是流氓软件!而且很多阅读器的文章格式与原文有较大差异从而导致 重要信息的丢失,我还是喜欢用firefox畅游网络,这导致我不得不一次一次地在各个blog间跳转,打开n个网页查找我关注的信息,一次两次也就罢 了,天天这样实在是太麻烦了,那么,有没有什么工具来简化我的工作,他能自动每天把我关注的所有blog的文章放在一个页面里,我每天 ...
    今天在javaeye论坛上看到有人有这个需求,顺手写了下。原理就是通过遍历Controllers目录,并用正则表达式取出Controller名和它所有的action。     @controllers=Hash.new     path="#{RAILS_ROOT}/app/controllers/"     Dir.new(path).entries.each do |f|  &nbs ...
XRuby是什么?它是一个编译器。与其它编译器一样,它完成的工作是将一种格式的语言转换成另一种。与大多数编译器不同的是,它是将Ruby的代码(.rb)转换成Java的bytecode(.class)。 Xruby是一群中国开发者维护的项目,它的目的如上所述。它的主页是http://code.google.com/p/xruby/。与JRuby不同,JRuby一开始是想使用java写ruby解析器,性能上是个大问题,当然现在也走上了编译这条路。而XRuby是第一个实现这种想法的人。 我翻译下了《XRuby Hacking Guide》,这篇文章是XRuby的入门指南。 介绍 ...
FCKEditor是一个开源的,功能强大的富文本编辑器,在官方主页上有提供ASP,JSP,ASP.NET,PHP等版本,目前还没有rails的版本(可以设置,主要是要自己实现上传等功能),不过有一个plugin来实现此功能,有上传文件、拼写检查的功能。1。首先到http://rubyforge.org/frs/?group_id=2038,下载0.3版本,解压缩后重命名文件夹为fckeditor,并放到你的应用的/vender/plugins下面,文件结构类似:--rblog    --vender      --plugins          --fckeditor             ...
读R4R,才读完第2章,前两章没什么新内容,算是复习吧 rails的lifecycle: 从浏览器发起一个请求的基本流程: A.server to dispatcher 服务器通过你指定的路径查找dispatcher,比如,你在apache配置: <VirtualHost www.r4rmusic.com>ServerName www.r4rmusic.comServerAlias r4rmusic.comDocumentRoot "/usr/local/share/railsapps/r4rmusic/public/"</VirtualHost> ...
来自railscn的讨论: http://www.railscn.com/viewtopic.php?t=2289   1 . eval   " obj = #{str}.new "     # 只能在irb中使用 2 . obj  =   eval   " obj = #{str}.new "   3 ...
ruby语言本身并没有提供abstract class和abstract method机制。这是ruby的spirit所决定的。但如果我们真的需要定义一个公共抽象类(或者抽象方法)来让子类来实现,又该如何做呢?     我们可以通过在调用方法时抛出NotImplementedError来防止方法被调用。如(来自《ruby cookbook》的例子):  class Shape2D   def area     raise NotImplemented ...
dennis_zane
搜索本博客
存档
最新评论