[BUG] cross-thread violation on rb_gc()

Posted by Captain Zhan Wed, 13 May 2009 10:00:00 GMT

今天在mac os x leopard上安装typo时遇到
[BUG] cross-thread violation on rb_gc()
错误.
google了一下, 发下有可能是因为系统上安装了多个版本的ruby 引起的. 我的mac上的确有多个ruby: 一个是leopard原带的, 另一个是自己用macport安装的. 但是系统原带的ruby1.8.6已经在清理硬盘空间时给删除了, 文件快捷链接也都换了, 使用ruby -v也显示是1.8.7版的信息.
全系统搜索了一下, 竟然发现系统上还有个
/System/Library/Frameworks/Ruby.framework/Versions/Current/usr
里面带有ruby文件.
将它去除, 改成一个文件快捷链接到自己安装的那个ruby文件那里, 问题解决了.

Posted in  | Tags ,  | no comments

怎样看本地ruby gem的rDoc文档

Posted by Captain Zhan Mon, 11 May 2009 09:54:00 GMT

在本地查看rDoc文档其实很简单, 只要运行:
gem server
你就可以用浏览器通过 http://localhost:8808/ 网址查看所有已经安装的ruby gem的rDoc文档了.

Posted in  | Tags ,  | no comments

ruby中10进制和16进制的转换

Posted by Captain Zhan Mon, 29 Dec 2008 15:25:00 GMT

16进制到10进制:
>> "B0A0".hex
=> 45216

>> "B0A0".to_i(16)
=> 45216
10进制到16进制:
>> 45216.to_s(16)
=> "b0a0"

Posted in  | no comments

Ruby中如何复制对象 (deep clone)

Posted by Captain Zhan Sat, 13 Dec 2008 13:13:00 GMT

用Ruby复制一个对象(object)也许没有你想像的那么容易. 今天我google了半天, 做个总结吧.
先从最简单的开始, b = a 是复制吗? 看代码说话:
>> a= [0,[1,2]]
>> b=a
>> b[0]=88
>> b[1][0]=99
>> b 
=> [88, [99, 2]]
>> a 
=> [88, [99, 2]]
从上面代码发现, 一但修改b, 原来的a也同时被改变了. 甚至:
Read more...

Posted in  | no comments

用Benchmark测试不同ruby代码的运行速度

Posted by Captain Zhan Sun, 17 Aug 2008 15:20:00 GMT

如果比较功能相同的几组代码的运行速度, 可以使用ruby语言里的Benchmark模块.
(开始前 设置中文环境, $KCODE = 'u')
比如, 连接两个字串, 如:
str1 = "中国"
str2 = "一定强!!!"

可以使用+
?> str1 + str2
=> "中国一定强!!!"
也可使用
>> "#{str1}#{str2}"
=> "中国一定强!!!"
还可以使用<<
>> str1 << str2
=> "中国一定强!!!"
(注意这种方法会改变str1的值,
>> str1
=> "中国一定强!!!")

如果想要知道这三种方法哪一个速度更快, 就可以使用Benchmark比较.
先定义三个不同的方法:
Read more...

Posted in  | no comments

用ruby语言以句子为单位拆分一个字串

Posted by Captain Zhan Sat, 16 Aug 2008 12:41:00 GMT

目标, 用ruby语言以句子为单位拆分一个字串. 如:
给出字串:
s="这是一个句子,另一个句子.一个新句子!难道这不是另一个句子吗?"
将它分拆为:
 ["这是一个句子,"], ["另一个句子."], ["一个新句子!"], ["难道这不是另一个句子吗?"]
样式.
测试前将ruby的$KCODE环境变量设置为'u', 启动UTF8编码支持中文.
$KCODE='u'
尝试1:
>> s.split(/\.|,|\?|\!/)
=> ["这是一个句子", "另一个句子", "一个新句子", "难道这不是另一个句子吗"]
等同于:
>> s.split(/[.,!?]/)
=> ["这是一个句子", "另一个句子", "一个新句子", "难道这不是另一个句子吗"]
虽然分开了句子, 但失去了标点.

>> s.split(/([.,!?])/)
=> ["这是一个句子", ",", "另一个句子", ".", "一个新句子", "!", "难道这不是另一个句子吗", "?"]
用括号将正则组成一组, 标点出来了, 但和句子是分开的.

改用scan
>> s.scan /.+?[.,?!]/
=> ["这是一个句子,"], ["另一个句子."], ["一个新句子!"], ["难道这不是另一个句子吗?"]
成功了!!

如果一定要这样:
>> s.scan(/(.+?(\.|\?|\!))/).collect{|p|p[0]}
=> ["这是一个句子,另一个句子.", "一个新句子!", "难道这不是另一个句子吗?"]
也是可行的.

Posted in  | no comments

Rails string字符串相关转换

Posted by Captain Zhan Fri, 25 Apr 2008 15:42:00 GMT

总结字串转变到其它与它相关的object的方法. 在这里整理分享一下, 希望能帮助到你.

变量相关
读取
instance_variable_get("@name")     #返回@name值
设置
instance_variable_set("@name", "三国演义") #@name =  "三国演义"
method相关
string到method名
send
book.send("name") #返回 book.name值
注意: book.send("name") = "三国演义" 会出错.
但可以:
book.send("name=", "三国演义") #book.name = "三国演义"

单复数转化
string复数化
pluralize
可用于生成table_name
"country".pluralize #=> "countries"
Read more...

Posted in  | no comments

半semantic, 数据的价值和数据显示

Posted by Captain Zhan Sat, 22 Mar 2008 13:38:00 GMT

让机器读懂之前先让人读懂!
出发点?
 数据的价值不一, 因此不应该用同样的方式显示这些数据.
 
价值?
价值针对不同个体应该是不一样的, 有条件最好做到面向不同个体(根据IP地址, 性别, 年龄, 历史记录), 如果做不到就尽量力求满足最大群体.

数据怎样的价值?
有用?/没有用?
重要?/不重要?
要紧?/不要紧?

不同的显示?
文字:字体, 字体大小, 颜色, 底色... 直接改用图标?
位置,:左上角?  扔到最下面?

方案
数据和显示的对接
数据输出时附带显示模式信息, 对准备好的view pattern直接对接
out => (data, view_options)
@title, @content, @sidebar, @item.name, @item.content 变量名直接附带意义

比rails更rails
使用统一的column名, 如name, content...
使用统一的变量名, 如@title, @item...
使用统一的view patterns, 如用来显示列表的index页面, 换到哪个model一样使用.
使用统一的view 局部pattern(最简单, google, wikipedia化, 实用, 可以指出数据的重要性, 美观不是第一的, 美观还费带宽和美工), 如可以重复使用的list显示pattern, comments显示pattern....

Posted in ,  | no comments

期待或关注中的Ruby on Rails相关图书

Posted by Captain Zhan Fri, 09 Nov 2007 00:38:00 GMT

我把我关注的Ruby on Rails的图书列在这里,做个提醒。
The Rails Way (Addison-Wesley Professional Ruby Series)
Pro ActiveRecord: Databases with Ruby and Rails (Pro)
Advanced Rails Recipes: 72 New Ways to Build Stunning Rails Apps
Agile Testing with Ruby and Rails
Professional Ruby Collection: Mongrel, Rails Plugins, Rails Routing, Refactoring to REST, and Rubyisms
Scaling Rails: Building Giant Websites
Foundations of RSpec: Behavior-Driven Development with Ruby and Rails
Advanced Rails




Posted in  | no comments

Open MDB file on Ubuntu, convert it to CSV, import it to Rails

Posted by Captain Zhan Fri, 05 Oct 2007 08:44:00 GMT

Open MDB file on Ubuntu, convert it to CSV, import it to Rails
MDB is a data file format used by Microsoft Office Access. To open and view MDB files on ubuntu, you can install a tools named mdbtools :

sudo apt-get install libmdbtools mdbtools mdbtools-gmdb

This will also install MDB viewer, and you can use it to open and view MDB files. It also can be used to export tables to CSV(Comma-separated_values) files.

And here is an example importing CSV data into Rails model:
require ‘csv’
CSV::Reader.parse(File.open('/path/to/file', 'rb')).each do |row|
    Production.create(:name => row[1],
        :price => row[3])
end

Posted in ,  | no comments

Older posts: 1 2 3 ... 6