Blog已搬迁

新Blog地址:chenk85.com

Feed 输出:http://feeds.feedburner.com/red_world

a few interesting rails plugin

最近开发中遇到一些有趣的rails pulgin,好像国内连介绍都没有,所以打算写写。

Rails Widgets

http://www.seesaw.it/en/toolbox/widgets/

一个DSLful的Page widgets plugin,让你简单地在页面上添加各种widgets,如tab,nav等,这些似乎是现在页面上不可或缺的页面元素。这个框架旨在减少手工维护这些widgets的代价,手工维护的话,so buggy!

具体看其演示文档可以看到它是干嘛的。


Bj

http://codeforpeople.rubyforge.org/svn/bj

一个让Rails参与管理Server上后台进程(background job)的plugin。这样有什么好处呢?如果你前台Rails app是使用了后台的某些服务的,那这个插件就非常有用了。

不过这个plugin非常少资料,只能从它的README中获得比较多的信息。

……

Get Start Java Network App Dev

如果你要开发一个Java的network app,有很多不错的opensource project帮助你开始开发。

比较基础和底层的话可以试试HttpClient,hc.apache.org,按照它官方的教程,六步走。这个框架提供了Http访问的能力,加上Java的multithread能力,虽然效率不及noblocking io那么高但胜在文档资料多。这个一个初学者的好起点。

高级点的就是mina,mina.apache.org,一个高性能高扩展能力的network app框架。基于Java的nio,并发能力得以保证,并在比较高层次进行封装。不过这个东西文档不多是弱点。值得一提的是Logo,so Cool。

当你的network app需要大量的数据处理时,使用hadoop是个不错解决方案,hadoop.apache.org/。这个MapReduce实现,非常著名,不用我废话了:P Hbase是Hadoop的一个子项目,是Bigtable的实现。Hbase有Ruby的客户端,Hbase-ruby。

另hypertable也是一个值得注意的Bigtable实现,hypertable.org

现在的Network app常常需要有搜索功能,这时就需要Lunece,Solr,Nutch啦。Lunece也是不用介绍的。Solr很多人也熟悉,一个企业级搜索服务器,是Lunece的的扩展,提供了web管理界面等。Netch,一个通用型的Web搜索引擎,其实就一大Crawler,他的存储基于hadoop,原dadoop是其子项目。

以上的项目好像基本上都是Apache的Project,现在的Apache项目都有Wiki了,以前貌似没有,进步了。

这就是我最近开发Crawler遇到的几个Java Framework。

思考着Blog搬家

最近手头有点闲钱,想去注册一个域名和买个空间,放上自己的Blog,Wiki。等完成后就会结束自己的Blog搬家历史,从msn space,到csdn blog,到blogjava,再到ruby-lang.org.cn,现在到这里的blog.ubuntu.org.cn,如果自己没有资源,或者还会再搬。因为随着对Blog的使用时间增加,慢慢会清楚自己的对Blog的需求有什么。如果自己有资源,那很多需求就可以自己实现。

Blog可能会用typo,因为比较好折腾,如果用WP,自己想去改也会很麻烦。wiki,不知道会不会自己开发个,或者用instiki,再写些JavaScript,放在greasemonkey,然后就可以像Google Note那样,一选一点就可以把选中的资料加到wiki中。

不知道有什么比较好的Rails主机介绍。。。

最近真的很忙,每天大量的开发,还有学习着很多新的东西(从同事从网络从书本)。有两篇Blog想写,但是没有时间写,一篇是只写了一个开头的《Ruby GUI开发思考》还有一篇关于开发中的测试的心得和思考。本来还想着7月份,Weblog能过百篇,现在看来。。。

我太懒了:P

a bug in attachment_fu

attachment_fu ,一个Rails插件,帮助你轻松处理文件上传。

最近使用它时遇到一个bug,其中用到了它的s3存储管理,发现如果没有指定缩略的参数时更新会出错,看了一下原来是默认参数nil出的错,当在File#join路径时,会调用每个参数的to_s方法,这样nil.to_s当然就出错了。或许,大家使用s3存储,并使用了attachment_fu时都存的是缩略图,所以没有遇到这个bug吧。这个错误只出现在update时,报的错是type error。

# line 196
def full_filename(thumbnail = nil)
  File.join(base_path, thumbnail_name_for(thumbnail))
end

我已经fix了这个bug,并ci到attachment_fu在github的repo。

fix s3 no thumbnail update error bug

mark一篇文章,关于如何在github上ci path:
http://railsontherun.com/2008/3/3/how-to-use-github-and-submit-a-patch

这是我第一次向开源项目提交代码^_^

about clound computing

Clound computing is so fun. Lots of times it‘s used in web 2.0 servces, as i know, like Yahoo, Google app, Amazon S3 + EC2, etc.

MapReduce,Hadoop,Hbase,Bigtable,Skynet,Solr,…

I need learn more about nutch-solr-hadoop-hbase-weka recently.

I had a kind of holiday in the summer but I couldn’t really relax. I’ve been on the go all this month. -_- But I have learnt much^_^

第6个学期结束

今天考完试拉。大学就剩下一年了,唉呀呀。

下面开始发牢骚。

每次考试完了之后总会觉得考试很假,都是学期初看完了书和相关的东西,比较有兴趣的东西才会去深入研究。但身边大多数人不是这样,一般都是到了最后一周左右时间才开始背书,一般这类同学都会得到比较高的分数。这与老师的出题方向也有关,出题基本都是作业题,就算什么也不会,考试前去背背作业就能拿很高分。记得中央台还报道过学校这里考试前打印店就非常热闹,其实最后一两天打印都是字特别小的“资料”。

中午发现了这个东西挺搞笑:http://www.cnbeta.com/articles/59918.htm

原来做游戏的是比魔鬼还魔鬼,应该去枪毙。其实我一直就认为现在社会上很多奇诡的问题和国人的经济水平,文化水平不高有关。想想小时候家里的电器还不多,就电冰箱电视机,想买本十万个为什么还要和爸妈讲几天。然后忽然到了小学到了中学,再到大学,一时间生活完全变了,物质水平面目全非,精神水平也不敢恭维。这种变化速度国人无法适应。他们说游戏是毒品,他们就是为了赚钱让你玩更长时间,他们还在高楼大厦里,这个逻辑如果放到其它行业其实也是成立的。

还想到一个事情,如果中国不存在盗版软件或者盗版没那么猖獗,计算机会不会不那么流行。在国外来说,现在正常人使用的计算机,应该是软件贵过硬件。

目前国人的所谓家长群体,认为上网就是玩游戏,用电脑就是玩游戏。特别是目前大学生这个群体,很多人买计算机就是买了一部多功能游戏机,目的主要是娱乐。这是个性价比超低的买卖,花五千块去买部计算机打游戏看A片还不如花一千买部psp爽。但大部分人还是买了,用的是家长的血汗钱,就算是家庭经济水平不高的同学也为了面子也会购入计算机,理由是查资料。然后大学宿舍楼就会出现这样的喊声:“XX,建图阿”,“XX,我在X场X桌”,学生会为了娱乐(不单游戏,还有其他),逃课,通宵等等。大学生玩游戏时一般也会有比较多噪音出来,比如我常听见的“你会不会的阿?”,“你们这群傻13/垃圾”,“那么厉害不去打第一名”,“我踢,我踢,看你们还敢打我”……祖国未来的花朵就是这么成长的。

最近sourceforge还给封了。

这个世界太假拉。

发完牢骚,该干嘛干嘛去,END

FxRuby初体验Part4

之前的:FxRuby初体验Part1Part2Part3

到了PictureBook的V0.4了。这个版本算是基本的功能都做足了,包括了加上了相册选择,相册持久化等等。

#album_list_view.rb
require 'fox16'
 
include Fox
 
class AlbumListView < FXList
  attr_reader :album_list
  def initialize(p, opts)
    super(p, :opts => opts)
  end
  def switcher=(sw)
    @switcher = sw
  end
 
  def add_album(album)
    appendItem(album.title)
    AlbumView.new(@switcher, album)
  end
   
  def album_list=(albums)
    @album_list = albums
    @album_list.each_album do |album|
      add_album(album)
    end
  end
end
   
#picture_book.rb
$KCODE = "U"
require 'fox16'
require 'yaml'
   
include Fox
   
require 'album'
require 'album_list'
require 'photo'
require 'photo_view'
require 'album_view'
require 'album_list_view'
   
class PictureBook < FXMainWindow
  def initialize(app)
    super(app, "Picture Book" , :width => 600, :height => 400)
    add_menu_bar
    begin
      @album_list = YAML.load_file("picturebook.yml" )
    rescue
      @album_list = AlbumList.new
      @album_list.add_album(Album.new("My Photos" ))
    end
    splitter = FXSplitter.new(self,
      :opts => SPLITTER_HORIZONTAL|LAYOUT_FILL)
    @album_list_view = AlbumListView.new(splitter, LAYOUT_FILL)
    @switcher = FXSwitcher.new(splitter, :opts => LAYOUT_FILL)
    @switcher.connect(SEL_UPDATE) do
      @switcher.current = @album_list_view.currentItem
    end
    @album_list_view.switcher = @switcher
    @album_list_view.album_list = @album_list
  end
   
   
  def create
    super
    show(PLACEMENT_SCREEN)
  end
   
    def add_menu_bar
      # 创建一个菜单栏的实例
      menu_bar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
      # 创建一个菜单栏项
      file_menu = FXMenuPane.new(self)
      FXMenuTitle.new(menu_bar, "文件" , :popupMenu => file_menu)
      # 下面是一个创建菜单栏项和所关联动作的绑定
      import_cmd = FXMenuCommand.new(file_menu, "导入..." )
      import_cmd.connect(SEL_COMMAND) do
        dialog = FXFileDialog.new(self, "导入图片" )
        dialog.selectMode = SELECTFILE_MULTIPLE
        dialog.patternList = ["JPEG Images (*.jpg, *.jpeg)" ]
        if dialog.execute != 0
          import_photos(dialog.filenames)
        end
      end
      new_album_command = FXMenuCommand.new(file_menu, “New Album…” )
      new_album_command.connect(SEL_COMMAND) do
        album_title = FXInputDialog.getString(”My Album” , self, “New Album” , “Name:” )
        if album_title
          album = Album.new(album_title)
          @album_list.add_album(album)
          @album_list_view.add_album(album)
          AlbumView.new(@switcher, album)
        end
      end
     exit_cmd = FXMenuCommand.new(file_menu, “退出” )# 一个简单的退出项
     exit_cmd.connect(SEL_COMMAND) do
      store_album_list
      exit
    end
  end
     
  def import_photos(filenames)
    filenames.each do |filename|
      photo = Photo.new(filename)
      current_album.add_photo(photo)
      current_album_view.add_photo(photo)
    end
    current_album_view.create
  end
 
  def current_album_view
    @switcher.childAtIndex(@switcher.current)
  end
   
  def current_album
    current_album_view.album
  end
   
  def store_album_list
    File.open(”picturebook.yml” , “w” ) do |io|
      io.write(YAML.dump(@album_list))
    end
  end
 
end
 
if __FILE__ == $0
  FXApp.new do |app|
    PictureBook.new(app)
    app.create
    app.run
  end
end

剩下的晚上再写。。。

Recent Posts:
  1. FxRuby初体验Part3 - 2008-07-02
  2. FxRuby初体验Part2 - 2008-07-01
  3. FxRuby初体验Part1 - 2008-07-01
  4. 有眼不识RoR - 2008-06-27
  5. 使用Skinny Spec的一个小技巧 - 2008-06-26
  1. 我的梦想

    我的梦想是成为世界级的软件开发者。。。 联系我请mailto: chenk85 AT gmail.com 或者加我MSN: chenk85 AT live.cn
  2. 标签

  3.  

    07月 2009
    « Aug    
     1234
    567891011
    12131415161718
    19202122232425
    262728293031  
  4. 文章分类

  5. 存档页

  6. 评头论足

    • 功能