2008年2月14日星期四

使用XMPP4r在RubyOnRails中集成IM功能

受到Frank文章的感染,决定把我使用XMPP4r在RubyOnRails中集成IM的过程按照其写的两篇文章的流程整理、分享给大家,谢谢Frank。

本文根据Frank的风格,结合我在“技能云”中使用的实际过程写的,分成如下几个大的章节:

一、XMPP概念以及原理简介
二、实现方法篇
三、结合“技能云”演示

本文采用Google在线文档编写、发布的,格式比较简洁,且能随时更新和完善,就不在重复贴在这里了,文章地址如下,请自行查看:

使用XMPP4r在RubyOnRails中集成IM功能

如果对文章有疑问或者有错误的地方,请在这里回复指出,我将尽快给予回复和完善,谢谢!

原文地址:http://iceskysl.1sters.com/?action=show&id=204

在RubyOnRails中实现syntax highlighter

在我们平时开发基于WEB的系统时,有的时候需要对需要展示的源代码做些格式化、语法分析和高亮着色, 比如在blog程序中贴技术文章时,在论坛中 讨论问 题的时候,不可避免的会贴出一些代码加以辅助说明,而如果能对该代码段进行语法分析和着色,效果会更加一目了然;Rails世界向来以选择的多样性著称, 如下列举几个可行的syntax highlighter,希望对您有所帮助。

一、什么是Syntax_highlighting
二、Syntax_highlighting的原理
三、几个可用的实现方法
1、GeSHi
2、Syntax_Highlighter
3、Highlight.js
4、Ultraviolet
5、ColourCode
6、CodeRay
7、SHJS
8、google-code-prettify
四、总结

本文采用Google在线文档编写、发布的,格式比较简洁,且能随时更新和完善,就不在重复贴在这里了,文章地址如下,请自行查看:

在RubyOnRails中实现syntax highlighter

如果对文章有疑问或者有错误的地方,请在这里回复指出,我将尽快给予回复和完善,谢谢!

2007年5月15日星期二


1. 将好想法变为现实
一个产品,您的想法够棒吗?想成为下一个Flickr或者Basecamp奇迹吗?我们可以助您一臂之力; 一群年轻人,喜欢挑战的年轻人,享受着您那完美的Idea.我们也可以带您一起体验产品实现的成就感和无限希望的快乐.
2. 敏捷开发和交付

想 法可行与否,最好的检验方法是快速的实现它,然后再讨论、细化,逐渐完善,直到最后一刻的完美; 仅仅一个星期的时间,按照传统的方式,您肯定还在来回不定的需求、臃肿不堪的文档、非常可笑的功能优先级上徘徊的时候,我们的一个新版本又发布了; 您就可以在此版本的基础上,逐步清晰您的想法.

3. 精悍的团队

团队并不是越大越好,当您看到我们以小团队形式实现您的想法的时候,你会由衷的感到“精良的小团队远比一大群‘人’更有战斗力“; 我们为您的产品装配最合适的团队,确保产品的质量和您的满意!

ROR技巧汇总


数据库关系:
一对一关联:has_one:单数 ; belongs_to:单数
一对多关联:has_many:复数 ; belongs_to:单数
多对多关联:has_and_belongs_to_many:复数 ; has_and_belongs_to_many:复数


=========
06.12.21
========
attr_accessor :password #创建一个可读写的属性

rake appdoc #rake命令生成HTML格式的文档

=========
06.12.22
=========
ActiveSupport:
ago()和from_now()可以根据当前时间(Time.now)计算相对时间

ActiveRecord 允许你用 set_table_name 指令取代默认的表名推导算法

属性的访问:
如果你希望得到一个属性的原始值,可以在属性名称后面加上:_before_type_cast

可以使用 read_attribute() 和 write_attribute() ,参数都是字符串形式的属性名称

在字段名后面加上一个问号:数值0、字符串"0"、"f"、"false"、空字符串、nil和常量false都解释为false,其他值都为true

新建纪录:
Order.new() + save() ; Order.create(params)
查询语句:
find(:all,conditions => "") ; find_by_sql("")
统计纪录:
count("") ; count_by_sql("")


=========
06.12.24
=========
多字段组合查询只有 _and_ 这样一种形式;不能在字段名之间用 _or_ 分隔。

除了 save() 方法之外,还可以用 update_attribute() 和 update() 方法来更新某几个特定字段的值

=========
06.12.26
=========
一对一关联:has_one:单数 ; belongs_to:单数
一对多关联:has_many:复数 ; belongs_to:单数
多对多关联:has_and_belongs_to_many:复数 ; has_and_belongs_to_many:复数
-------------------------------------------
belongs_to :父类
:class_name => "" #"Order"
:foreign_key => "" #"order_id"
:conditions => "" #"paid_on is not null"
:dependent => "" #字表中纪录不能独立于父表中的纪录而存在
:order => "" #判断如何对多条纪录排序
has_one :the same as belongs_to
--------------------------------------------
乐观锁:
1.在表中建立 lock_version 字段,默认为 0 ,乐观锁就建立了;
2.禁用乐观锁:ActiveRecord::Base.lock_optimistically = false
---------------------------------------------
计数器:计数器缓存 counter caching
1.在子模型对象的 belongs_to 声明中加上 :counter_cache 选项
2.在父表的定义中加上 "字表名称加上 _count 后缀" 字段,初始值必须为 0
----------------------------------------------
MYSQL使用InnoDB存储引擎才支持事务

事务:
begin
modelname.transaction(模型对象) do
...
end
rescue
...
end
-----------------------------------------
ActiveRecord补充

Acts As List:
acts_as_list :scope => :parent_id #指定该列表是针对每个父对象单独建立的
move_highter();move_lower();move_to_bottom();move_to_top() #这些方法定位
higher_item();lower_item() #前一个,后一个
first?() ; last?() #是否位于列表的前端或尾端

Acts As Tree
acts_as_tree :order => "name" #:order表示:在查找某个特定节点的子节点时,按照子节点的name字段排序
--------------------
字符串处理:
数组.compact.join(" ") #将数组中的字符串以" "连接
String.split(/,/) #将一个字符串分割为子字符串,然后将结果作为字符串数组返回
-----------------------------
Aggregation聚合
用于保存复合数据的类(譬如这里的Name类)必须符合两个条件:
1.必须有一个构造函数initialize(),其参数必须对应于它所映射的数据库字段;
2.必须为所映射的每个字段提供一个可读的属性 #attr_reader
class Name
attr_reader :first,:initials,:last
def initialize (first,initials,last)
@first = first
@initials = initials
@last = last
end
def to_s #以字符串的形式输出客户全名
[ @first, @initials, @last ].compact.join(" ")
end
end

class Customer < ActiveRecord::Base
composed_of :name, #把数据库字段映射到Name对象上
:class_name => Name
:mapping =>
[
[ :first_name, :first ] ,
[ :initials, :initials ],
[ :last_name, :last ]
]
end
------------------------------------
单表继承
继承体系中的类被映射到同一张表中!
父表中:1.type字段用来保存当前纪录对应的对象属于什么类型——按照ActiveRecord的约定;
2.除非一个字段是所有子类都拥有的,否则就必须让它允许null值


2007年5月2日星期三

1sters.com重新规划!

完成了博客部分的开发,新规划了下整体构架~
http://www.1sters.com/blog
还剩下是产品介绍部分和BUG缺陷部分~
另外值得一提的是“小虎”同学正在帮忙设计UI,真的很开心~