tech.cap

我在一望无际的路上

置顶随笔 #

[置顶]修复并更新了ruby电子书的下载

前段时间我存放电子书的空间失效了, 现在重新找了空间,修复了链接,向之前下载不了的网友表示歉意 进入页面

最后更新2006-12-4

The ruby way 更新到第二版

Agile web development with rails 更新到第二版

增加 Enterprise Integration with Ruby

posted @ 2006-12-04 15:30 tech.cap 阅读(3486) | 评论 (6)编辑 收藏

2006年12月14日 #

ruby/rails中的中文处理(1)

由于当前的ruby并不支持unicode, 所以中文相关的处理在ruby中一直比较模糊,基本上是各自尝试的路子, 我也列出一些帮助自己整理思路

utf8和unicode的关系

utf其实是(Unicode Translation Format), 也就是unicode在传输时候的编码, 有utf8和utf16等多种编码, 其实uf8是一个对中文字很不友好的编码, 为什么呢,因为在utf8中, 一个中文是占用3个字节,而一个英文ascii字符却只占用1个字节, 这样一方面使得中文体积膨胀较厉害, 另外一方面也不能简单的通过计算字节数来推算字符数. utf16就比较正常, 每个字符占用两个字节.但是目前utf16已经后面的utf32应用较少, utf8 是比较公认的编码

utf8 还是 gb2312/gbk

我个人选择utf8,因为我觉得gb2312/gbk不是通用编码,如果使用可能还会有其他问题(比如多语言支持)

转换编码

我们需要require 'iconv' 库, 然后执行

Iconv.conv("utf8","GBK","....") #把字符由GBK转换为UTF8

当源字符集中含有非法编码的时候,我们需要告诉iconv忽略, 否则iconv会报错停止

Iconv.conv("utf8//IGNORE","GBK//IGNORE","....")

utf8 的中文操作:

计算字符数:

在默认的ruby环境下面, 需要执行


require 'jcode'

$KCODE='u' # 或者$KCODE='UTF8' 两者是等价的

计算字符数:

使用jsize或者jlength

"你好".size # 6

"你好".jsize # 2

截取字符操作

"你好"[0,1] #乱码

"你好".scan(/./)[0,1].join # "你"


当然还有另外一个办法:

利用utf16编码每个字都是2个字节(头还有两个字节)的特点,我们可以先把字符转换为utf16,然后按照[0,n*2+2]的方法截取前n个字符 (试验成功.求证中)

Iconv.conv("UTF8","UTF16",Iconv.conv("UTF16","UTF8","你好a中b文")[0,8]) #你好a


posted @ 2006-12-14 23:12 tech.cap 阅读(3993) | 评论 (5)编辑 收藏

2006年12月10日 #

ruby中文搜索支持的想法

ruby下面中文分词的搜索如何进行?

目前开始考虑这个问题, 目标是使用ferret, ferret是lucene搜索引擎的ruby版本, 凭借一点lucene的经验, 我个人是非常喜欢ferret的, 靠lucene强大的分词,index,search功能, 可以做出很多有趣的功能, 但是ferret有两个难点

  1. 不支持中文分词,而且集成第三方分词对我来说较困难(没有开发c的经验,而且我知道的中文分词算法都是java版本)
  2. 有时候做索引会出错,好象是段地址错误, 因为ferret是在前台index, 所以错误也是在前台fastcig进程中, 感觉很不爽

原来的想法

利用ferret 和lucene兼容的特点, 单独写一个java 类库, 定时对资源做索引,不过后来为了效率(index比lucene快), 新版本的ferret放弃了和lucene兼容, 这个想法是不可行了

更新后的想法

利用mysql中文分词插件,这个东西倒是很好,但是偏偏只支持mysql4.0,和mysql 5.1 beta, 刚好不支持我目前用的mysql5.0.x 由于没有现成版本可以用, 也只好放弃(这个插件只能用来全文搜索, 不像ferret还有其他好玩的功能)

目前的想法:

  1. 在ferret中通过rjb调用 lucene的中文分词然后再index
  2. 需要index的model都增加一个属性indexed,新建或者更新的时候都把indexed设置为false
  3. 把java写好的中外分词通过rjb包装为一个drb service,或者干脆挂在resin上做http页面调用
  4. 在后台,单独的程序定时启动把所有未index的记录select出来(indexed=false), 然后逐一调用第二步开发的进行分词,即是过程中出错, 也不影响前台页面, 这里只改动ferret的ruby代码.
  5. 如果可能, 搜索程序通过远程协议来对keyword分词,然后再搜索

缺点

  1. 这个方案看上去比较恶心.很像一件到处是补丁的衣服, 目前没有时间慢慢去研究ferret中的c代码. 只好通过java来绕圈子

  2. 在后台运行index的话, 就无法实时搜索当前文章, 而是有一个延时, 不过我觉得这个好解决. 另外后台index 就算出错了也不影响前台页面, 大不了有些记录搜索不到而已

  3. 对keyword分词会有速度影响, 不过影响应该很小


posted @ 2006-12-10 18:15 tech.cap 阅读(2597) | 评论 (6)编辑 收藏

2006年12月8日 #

rails undefined method `use_transactional_fixtures=' 错误的解决

最近新建立了一个rails project 想尝试一下test driven 开发, 于是就呼啦呼啦写了几个测试, 这个时候怪异的事情发生了 使用rake 调用测试或者直接执行ruby测试程序, 都会报如下错误

undefined method `use_transactional_fixtures='

真是非常莫名奇妙, 尝试检查mysql, 检查表类型都没有问题(innodb), 又进一步检查, 发现我的testcase实际上没有被注入rails的扩展, 全部变成了最普通的testcase, 真是郁闷! 当晚上google查了半天, 也没有解决

第二天上线咨询了cookoo 以后, 再度测试了一番, 发现新建立的rails project没有这个问题, 于是怀疑到安装的plugin有问题, 又把plugin全部删除, 问题依旧...(中间省略若干) ... 终于发现,原来是ZenTest 这个gem包导致, 尝试把ZenTest/test/test_help.rb 这个文件移走, 问题解决

接下来分析原因 , 发现我的project用到了cached_model , cached_model 会引入ZenTest, ZenTest中的test_help.rb和rails中的test_help.rb 重名, 由于cached_model 会先载入, 所以ZenTest把后者的test_help覆盖掉, 直接导致rails的环境无法加载

ZenTest(test_help.rb) Rails(test_help.rb) 两者无法共存,所以移走前者就好了


posted @ 2006-12-08 13:47 tech.cap 阅读(1770) | 评论 (0)编辑 收藏

2006年12月4日 #

修复并更新了ruby电子书的下载

前段时间我存放电子书的空间失效了, 现在重新找了空间,修复了链接,向之前下载不了的网友表示歉意 进入页面

最后更新2006-12-4

The ruby way 更新到第二版

Agile web development with rails 更新到第二版

增加 Enterprise Integration with Ruby

posted @ 2006-12-04 15:30 tech.cap 阅读(3486) | 评论 (6)编辑 收藏

2006年9月28日 #

[招聘] rails工作机会国贸附近,建外SOHO

公司简介:

http://www.dogstart.com

北京数字狗狗网络技术有限公司(狗Go网)于2004年7月在北京成立。狗狗网络成立之初就以WAP游戏为战略目标,宗旨在于为中国数以亿计的手机用户提供业内领先的网路服务和游戏服务。2005年1月,数字狗狗联合WAP天下,达成战略合作协议,将逐步推广狗GO网和《天下》网游。公司主要以研发为主,代理手机游戏为辅,结合多种娱乐渠道及方式,做手机增值服务行业的龙头企业。
数字狗狗的娱乐门户站是一个以手机游戏为主,多种娱乐方式为集合的一家综合性娱乐站点。狗GO门户的目标是建设一个手机网络上最大的游戏娱乐社区,社区内包括大量手机游戏的介绍,试玩和游戏评论。让广大手机用户可以客观的来审视时下大部分流行的手机游戏,并且给玩家们一个交流的社区。

http://wap.dogstart.com 需要wap支持,比如opera浏览器

我们提供

1. 位于创新前沿的创业经历
2. 平等,独立的工作伙伴关系和宽松、灵活的工作环境
3. 具有竞争力的待遇,和未来的

我们的要求

1. 热爱写代码,能专研
2. 愿意跟踪和学习最新的软件技术
3. 具有自我管理能力,创新情结和创业心态

如果你有下面专长,那就更好了

1 熟悉linux操作系统, 能独立维护,编写shell
2 有web开发的经验, 熟悉html
3 了解ruby/rails, 有一定的开发经验
4 熟悉数据库设计, 有基本的DBA能力和使用mysql的经验

目前在这家公司负责围绕mobile web的工作, 我们已经定下来用rails来开发, 欢迎各位大侠/有志向的菜鸟和我联系
email: heyizhou@dogstart.com

posted @ 2006-09-28 14:21 tech.cap 阅读(2996) | 评论 (0)编辑 收藏

2006年4月5日 #

rails 1.1 api chm 版本下载,照样支持索引和全文检索

rails 1.1 api chm 版本下载,照样支持索引和全文检索

下载


PS: 1.0的还在这里列出

posted @ 2006-04-05 01:21 tech.cap 阅读(7191) | 评论 (13)编辑 收藏

2006年3月31日 #

java平台的rails: Groovy on Rails (Grails) 0.1发布了

ruby和rails大红大紫的时候, java的fans们其实也没有闲着, 搞出来了groovy作为对ruby的回应, 现在, 对rails的回应也到来了~~~~~~~~~~~~~~~ groovy on rails (Grails) 0.1 (是0.1 不是1.0) 发布了

得益于java成熟而强大的虚拟机,数据库驱动和第三方类库, grails并不需要自己从头实现太多的东西, 从本质上来讲,grails是集成包装了Spring ,Hibernate ,SiteMesh等基础的库, 向外提供统一的基于grooy语言的接口,这些接口都不用怎么仔细设计,只要照着rails现在的api抄写即可,从这个方面来看,我觉得Grails要模仿甚至超过rails都是不难的/

此外, Grails额外提供的功能还包括 Aop支持, 动态的Taglib, Jsp和Groovy Servers Page(GSP)支持等等java扩展过来的技术, 有了grails, 我们就可以立马在java成熟而强大的虚拟机上, 在java成熟而强大的数据库驱动上, 在java成熟而强大的第三方类库上, 以rails的方式来写应用了!!! 多么开心的事情啊.

等等等等~....我们现在能得到的还只是0.1版....为什么搞到现在才是0.1版本呢,速度真是缓慢的说. 我记得rails还在0.x的时候就有听到了grails的消息, 现在rails都1.1了, 我们能看到的居然还是0.1版本. 如果grails真的只是包装一下spring,hibernate,sitemesh等成熟的类库的话, 我实在想不出半年多以来(好像都快1年了)grails的开发者都在作些什么? 唯一可能的问题应该出在groovy上, 这个语言成熟了么? robbin说groovy进展缓慢有内幕... 好奇ing, 实在不行干脆用jruby得了, 起码人家这个月又升级了.

posted @ 2006-03-31 02:58 tech.cap 阅读(3917) | 评论 (12)编辑 收藏

2006年3月29日 #

cool! ruby版编码探测器[Universal Encoding Detector in Ruby]

以前一直想用java来作一个类似的东西, 今天看到ruby这边已经有了
-----
gem install chardet -y
-----

require 'rubygems'
require 'UniversalDetector'
require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start( 'www.sina.com.cn' ) {|http|
    data = http.get("/").body
    p UniversalDetector::chardet(data)
}
它是python版本的移植,  居然有个confidence参数 , 偶测试了国内几个站点, 都很准确, 不过偶发现只要是utf8或者gb2312, 返回的confidence全部都是0.99, 只有国外某些纯ascii的网页会返回1.0

posted @ 2006-03-29 11:39 tech.cap 阅读(2753) | 评论 (0)编辑 收藏

rails 1.1 发布相关

(UPDATED) 赞一个!   现在又得研究新东西了

官方消息 在这里 

升级方法:

 rails1.1需要rake 0.7的支持, 所以各位得附带升级rake, 不过有了gem, 升级简直就是不费力气,执行如下指令

gem update rake
gem update rails -y
gem clean 

记得gem clean一定要做, 否则你的机器上会并存rails1.0 和rails1.1, 连rake也并存0.6x 和 0.7,  这会带来一些莫名其妙的问题

最后不要忘记在你的rails项目中执行 rake rails:update 来升级rails项目的代码

兼容性:   rails1.0 和1.1的不兼容主要在plugin上, 各位用了plugin的朋友升级的时候多留意一下. 为稳妥起见, 最好去逛逛plugin各自的站点, 看看是否都提供了1.1的升级

更新1: 在windows上如果要运行rails1.1的话, 请使用1.8.4版本的ruby,  虽然现在还没有正式的1.8.4 one-click-installer发布, 不过RC1也还可以用了, 记得升级的时候要先卸载旧的ruby1.8.2 , 卸载1.8.2的时候记得备份你编译好了的so文件

更新2: rails1.1的兼容性问题比我想像得严重, 现在看到typo在1.1下无法运行,dreamhost早些时候升级rails也导致1.0的应用死掉. 现在被迫降到1.0了, 难道37singles的人只测试了自己的product?


posted @ 2006-03-29 11:17 tech.cap 阅读(2656) | 评论 (4)编辑 收藏

2006年3月24日 #

YARV on Rails ~~~~!

还记得 上次我在blog中提到的那个 YARV ruby虚拟机  么

本来以为YARV离实用还非常远, 但是从这个截图上看, 似乎YARV并非那么无用

/var/www/rails/testsite % /usr/local/pkg/yarv/bin/ruby script/server
=> Booting WEBrick
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[
2006-02-20 10:40:23] INFO  WEBrick 1.3.1
[
2006-02-20 10:40:23] INFO  ruby 1.9.0 (2006-02-14) [x86_64-linux]
[
2006-02-20 10:40:23] INFO  WEBrick::HTTPServer#start: pid=25032 port=3000

有人已经实现了在YARV 上跑起webrick和rails的首页(应用估计是没戏),  他的blog在此(日文)


posted @ 2006-03-24 11:56 tech.cap 阅读(2527) | 评论 (0)编辑 收藏

仅列出标题  下一页