天津福康纳米科技有限公司,电子烟,磁疗,远红外线产品。
十一 16

ruby for rails 摘录

分类:tech | 给我留言 |

实例变量使得单个对象可以记忆状态。实例变量的名字以@开头。实例变量仅仅对于它所属的对象来说是可见的。在一个特定类的某一方法中初始化的实例变量,与同一个类的其他方法定义中引用的同名实例变量是同一个。

class c
  def inst_var_init(value)
    puts "Setting an instance variable..."
    @ivar = value
  end

  def inst_var_report
    puts "Inspection the value of the instance variable..."
    puts @ivar
  end
end

初始化对象状态

class c
  def initialize(venue, date)
    @venue = venue
    @date = date
  end

  def venue
    @venue
  end

  def date
    @date
  end
end

=号方法和语法糖衣,Ruby允许定义以等号结束的方法。另外当解释器看到一个裸词后面有等号的时候。它会自动忽略等号前面的空格。从而得到一条单独的消息,例如 price= 。

class Ticket
  def price=(amount)
    @price = amount
  end

  def price
    @price
  end
end

字符串内建的split方法的示例

month, day, year = date.split('/')

ActiveRecord自动生成与数据库表的字段名相对应的设置方法。通过 params 方法,ActiveRecord 收集了所有属于 customer 的值, 并将它们成批地传递到新生成的 Customer 对象中。

customer = Customer.new(params[:customer])

自动生成属性方法,attr_accessor, attr_reader, attr_writer

常量的名字是以一个大写字母开头。可以在类外引用常量,Ticker::VENUES

class Ticket
  VENUES = ["Convention Center", "Fairgrounds", "Town Hall"]
end

每个类有自己的实例方法,可以继承链上面的类的实例方法。定义一个动作,就是给控制器类添加一个实例方法。

十一 14

回复一篇关于Ruby开发ucenter项目的帖子

分类:tech | 给我留言 |

写在前面:我忘了我je的密码了,就贴到自己博客吧。

帖子地址:http://galaxystar.javaeye.com/blog/210934

目前看官方可能不会在今年放出ruby的包了,不过从长远(非常长远啊)的角度看,这个ruby包还是有前途的,毕竟大量的网站可能会安装使用ucenter,与uc的互通是有必要的。

但是,ucenter的概念很简单,1-2个程序员完全可以用ruby来开发一套基于rails或其他框架的ucenter包来。

关键的关键,ucenter的理念对我个人影响很深,我在逐渐用这个方式来思考新的设计项目————-松耦合,目标是:每一个部分可以单独安装。

从近来对ucenter的了解,uc包含如下几个关键功能:用户验证(注册,登陆),web应用管理,积分换算,feed,好友,站内短信,黑名单等。(从uc_client包内的client.php可以看到这些)。其中的要点是要解决好积分换算和feed,uc是为多个系统服务的,之间的积分,金币换算非常重要。feed是要告诉各个应用,当前应用的当前用户的操作是什么。

不过这里有个问题,就是uchome将我们带进了一个弯路。uchome是一个代表性的uc应用,可是在开发上,比如实名,用户资料扩展,就对uc的定义产生了影响。例如,实名在别的系统无法使用,因为它不存在uc中,后果是如果每个应用都有一个关键的用户资料扩充或feed扩充,将会无法实现(我只能hack了)。

另外:ucenter设计真的合理吗?

所以,我想在下一个Rails项目之前,了解下facebook的设计,如果我能快速理解的话。希望来的朋友多提供宝贵看法,谢谢。

再补充些观点:uchome1.5的推出,必将在江湖上产生无数的sns应用,这对开发者是个好机会,基于uch的应用必将收到欢迎。但是同时,sns概念也将从火热转为平淡,没有灵魂的sns也将死去。所以,基于sns,或者是摒弃传统sns的开发,将会给web应用带来生机。庆幸,下一个项目就是这样的。。。。。

ps:很看好web game。

十一 14

TextMate中文教程之在项目中搜索

分类:TextMate | 给我留言 |

当你一次需要修改许多文件的时候,你可以选择 Edit -> Find -> Find in Project 快捷键 Shift+Apple+F 。虽然看起来略有不同,但是仍然和上一章的搜索对话框基本一样。

在输入搜索的信息之后,按一下回车键会触发搜索过程。TextMate会在整个项目中搜索匹配的文本,并把它们显示在搜索框的下面。你可以点选任意一个匹配记录,TextMate会自动跳转到该文件。

这里最好用的功能应该是替换。你可以使用 Replace All 按钮来替换全部匹配文本。或者你可以手动来一个一个的替换掉。用鼠标在下面显示搜索结果的地方点一条记录,你可以使用Shift或者Apple来选择或者删除多个匹配记录。当你选择了需要替换的记录之后,按一下 Replace Selected 按钮。就会替换掉刚才选择的那些记录。

搜索整个项目需要花很多时间。如果你有兴趣可以限制只搜索某些文件。你可以让TextMate创建一个新的临时项目。只包含你感兴趣想搜索的文件。搜索之后再销毁这个临时项目。利用 mate 命令你可以很容易的做到这些。 例如我想创建一个项目,仅包含 lib 和 test 文件夹下面的 ruby 文件,那么你需要在 Terminal 下面输入:

$ find {lib,test} -name ‘*.rb’ -print0 | xargs -0 mate

你也可以用鼠标做一样的事。拖动一些文件或文件夹到Dock,并放于TextMate的图标上。这告诉 TextMate 创建一个新项目并且过滤掉你不希望存在的。

当项目打开的时候,我可以搜索项目然后关闭它。当关闭项目的时候搜索也停止。这可以让我只在需要的时候才搜索并且能提高不少速度。

十一 10

ruby for rails 摘录

分类:tech | 给我留言 |
def all
  @order = params[:order] || "number"
  sort_proc = case @order
    when "author" then lambda {|r| [r.user.name.downcase, r.number]}
    when "status",
             "title", then lambda {|r| [r.send(@order).downcase, r.number]}
    when "number" then lambda {|r| -r.number}
  end
  @rcrs = Rcr.find(:all).sort_by &sort_proc
end

下面是一个 respond_to? 和 send 方法的例子

request = gets.chomp

if ticket.respond_to?(request)
  puts ticket.send(request)
else
  puts "No such information available"
end

参数的默认值

def m(a, b=1, *m)
end

m(1,2,3,4)

a = 1, b = 1, m = [3, 4]
十一 09

TextMate中文教程之搜索

分类:default | 给我留言 |

你可以通过Edit -> Find -> Find或者按Ctrl+F调出搜索功能。当你没有选择正则表达式功能的时候,这个对话框和其它Mac的应用程序使用方法一样。

你可以在Find字段输入一些想匹配的文本,并且在replace字段输入一些想用来替换的文本。因为Tab键盘会跳转到输入框的焦点而回车键会出发搜索动作。所以你不能输入这两个字符。当然如果你确实需要输入它们,你可以按Option+Tab键和Option+回车键来替代。当你想输入更多字符的时候,可以拖动对话框右下角的按钮。点一下淡蓝色的按钮可以开始搜索最近一个符合的条目了。按钮的名称是Next。

在你开始搜索之前可以用鼠标选择一下搜索选项或者使用快捷键,Ctrl+Apple+R, Ctrl+Apple+I, Ctrl+Apple+W。后面的章节会重点介绍正则表达式不过现在先让我们选择忽略大小写和循环搜索两个功能。

当你完成搜索定义,可以用回车键触发搜索功能。或者按Previous搜索前一个。我不太喜欢用Replace 或者 Replace
& Find 按钮。建议你用Σ按钮,它会告诉你Replace All一共发生了多少次替换。你可以用快捷键Ctrl+Apple+F触发Replace All功能。

需要注意下面这些常用的快捷键,都是你不需要打开搜索对话框就可以使用的。Apple+E 替换当前Find字段里面的文字。Apple+G,搜索下一个符合条件的单词。Option+Apple+F替换当前所选并定位到下一个符合条件的单词。Shift+Apple+E替换当前搜索字段。你可以用快捷键Shift+Ctrl+Apple+F触发Replace AlI In Selectionl功能。

十一 09

TextMate中文教程之扫描

分类:default | 给我留言 |

让我们通过一个例子来了解这个功能。TextMate有完备的发行说明,介绍了不同版本之间的新功能和改变。如果你想了解新特点:

  • 选择  Help -> Release Notes,在文字编辑窗口打开一个列表。
  • 按 Ctrl +S 注意在编辑栏的最下面出现了什么
  • 在其中输入 [ n e w ],注意你每输入一个字符TextMate都会自动帮你匹配搜寻文档中相应的字符
  • 按Ctrl+S 会在文档中搜索下一个相同的单词
  • 按Shift+Ctrl+S 后退至上一个
  • 按回车或者ESC键退出扫描功能

十一 07

[jquery]近来jquery的两次应用

分类:default | 给我留言 |

最近的开发,都和Rails无关,但是两次用到了jquery。上次做完一个项目后,买了2本js的书,打算好好学下jquery和js,可惜看了前几章就又没时间专心看了。这两次也是借着一点点了解,解决了2个jquery的应用。不忙的时候,一定要认真复习一遍。

1、用jquery解密淘宝图片地址

从淘宝过来的数据,图片地址是加密的。查的资料上看,可以用一段js代码解密,可问题是那段代码需要点击后才会解密。我的程序里需要直接显示图片。怎么办?

下载淘宝图片解密js文件

解决办法是,将拿回来的加密字串放到js的方法里,将解密结果更新img的src属性。所以在上面那个文件提供的方法下面,加上了jquery的方法。做了个典型的方法调用。

$(document).ready(function() {
	var whoback = "";
	whoback = '$results[image]';
	var iamback = Button1_onclick(whoback);
	$('#taobao_pic').attr('src', iamback);
	$('#image_url').attr('value', iamback);
});

2、wslide插件

这是一个可以实现新闻列表分页显示的jquery插件,地址:http://www.webinventif.fr/wslide-plugin/

可惜没有上,下一页按钮。页面是法文的,不懂。所以用完这个,真的需要找时间专心看一下那两本书了。《jquery基础教程》和《精通javascript》。

写在最后:感谢最近的几位朋友与我联系开发的意向。感谢大家的信任。目前答应了俩个朋友的邀请,在这个月中(结束手头两个项目)跟他们谈合作的细节。每个项目周期可能在2周左右。真的很期待。我会在这个过程中不断充实自己。再次感谢大家,感谢wordpress,以及这次博客界面的改版,mac真的可以带来好运。

十一 05

TextMate中文教程之使用emacs中常用的快捷键

分类:default | 给我留言 |

就像你前面看到的一样TextMate支持一些emacs常见的快捷键。

  • Ctrl+D 删除光标右侧的一个字符
  • Ctrl+T 调换选中文本的顺序,如果没有选择任何文本则对换光标左右字符的位置。并且将光标置于下一个位置
  • Ctrl+K 删除光标到行尾的文字
  • Ctrl+Y 复制出删除的最后一次文本
  • Ctrl+O 不移动光标插入新的一行

当然这些快捷键在Mac系统中的其它应用中也可以使用,比如Mail。

十一 01

[php]uchome中的两个字段含义的解释

分类:default | 给我留言 |

在uchome的spacefield表中,有两个看似明确,实际很别扭的两个字段名,friend和feedfriend。

在处理feed的时候,这两个字段经常会让人搞混乱,一时想不起来意思。

其实friend是表明该空间的好友,这和blog的friend不一样,blog的friend是定义的blog的开放级别。

feedrfriend,基本上和friend是同样内容,但是当设置屏蔽时,会从这个表中去掉被屏蔽的人的id,所以,这个字段保存的是可以查看该空间feed的id。

那么,现在我在做的是增加同组查看功能,比如,设置某一个组只能本组人查看,外组的人无法查看任何消息。这时,就用上了这里的方法。

未完,待续

31

[php]uc实名认证的修改,使其他系统调用uch的实名

分类:default | 给我留言 |

写在前面:jp加入本站后,博客立刻火了起来。我奥运会后一直在做php的开发,而且是专门研究,hack康盛的uch,uc和supesite,给客户做php的站,一直没有做Rails的开发,有点遗憾。不过jp带着我还算没太落后,碰到好的Rails项目肯定还会继续Railser的开发的。

这是一篇笔记,边写边整理代码,比较复杂。贴在这里吧。

uc有个问题,就是在uch打开实名认证时,其他与uc通信的应用,仍旧显示uc里的username字段,而独uch显示认证的名字。为了使整站统一,需要在别的应用里显示uchome_space.name字段的内容。

思路:
1、在uc_members中增加name和namestatus字段。

ALTER TABLE `uc_members` ADD COLUMN `name` char(20) NOT NULL default '';
ALTER TABLE `uc_members` ADD COLUMN namestatus tinyint(1) NOT NULL default '0';

2、uch的source/cp_profile.php 82行后,增加同步更新uc实名字段。
//同步更新uc主表实名

update_uc_table('uc_members',Array('name'=>$setarr['name'], 'namestatus'=>$setarr['namestatus'], 'uid'=>$_SGLOBAL['supe_uid']));

3、管理后台 admin/admincp_space.php 批量管理实名时,同步更新uc表
75行后:
//同步更新uc表,单个用户

update_uc_table('uc_members',Array('name'=>$setarr['name'], 'namestatus'=>$setarr['namestatus'], 'uid'=>$uid));

需要在 source/function_common.php 中添加一个方法。和updatetable一样的,取消了table的前缀。

function update_uc_table($tablename, $setsqlarr) {
global $_SGLOBAL;

$setsql = $comma = '';
foreach ($setsqlarr as $set_key => $set_value) {
$setsql .= $comma.'`'.$set_key.'`'.'=\''.$set_value.'\'';
$comma = ', ';
}
$where = $comma = '';
if(empty($wheresqlarr)) {
$where = '1';
} elseif(is_array($wheresqlarr)) {
foreach ($wheresqlarr as $key => $value) {
$where .= $comma.'`'.$key.'`'.'=\''.$value.'\'';
$comma = ' AND ';
}
} else {
$where = $wheresqlarr;
}
$_SGLOBAL['db']->query('UPDATE '.$tablename.' SET '.$setsql.' WHERE uid='.$setsqlarr['uid']);
}

//122行后,批量更新

case '1':
//通过实名认证
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET namestatus='1' WHERE uid IN (".simplode($_POST['uids']).") AND name!=''");
$_SGLOBAL['db']->query("UPDATE uc_members SET `namestatus`='1' WHERE uid IN (".simplode($_POST['uids']).") AND name!=''");
$url .= 'namestatus=0';
$createlog = true;
break;
case '2':
//取消实名认证
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET namestatus='0' WHERE uid IN (".simplode($_POST['uids']).")");
$_SGLOBAL['db']->query("UPDATE uc_members SET `namestatus`='0' WHERE uid IN (".simplode($_POST['uids']).")");
$url .= 'namestatus=1';
$createlog = true;
break;
case '3':
//清空姓名
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET name='',namestatus='0' WHERE uid IN (".simplode($_POST['uids']).")");
$_SGLOBAL['db']->query("UPDATE uc_members SET `name`='' WHERE uid IN (".simplode($_POST['uids']).")");
break;

4、在需要的应用中,修改方法其实应该放到uc_client中但是我未找到一个很重要的方法究竟在哪定义,就是uc_client/client.php 中的 call_user_func 方法,我需要hack这个方法,来将name和namestatus属性包装进来,但是没找到,高手指点下呗。答:最终,还是在modoer里修改了user class,而且在feed的时候,还要使用实名,就只能这样hack了。不过还是没有明白这个call_user_func方法是怎么调用的。
所以用了个土办法。这里有个设置问题,当实名未认证时,是否显示该实名。

$tmp = Array();
$tmp = $db->get_one('SELECT name, namestatus from uc_members where `username`="'.$user->username.'"');
if($tmp['namestatus']){
$user->name = $tmp['name'];
}else{
$user->name = $tmp['name']."(未认证)";
}

这里还有个顾虑就是,在这个新系统中,是否沿用uch的认证机制,如果需要,这个改动讲很大,还是依附于uc过来的数据处理。

其实完美的方案应该该是完全放到uc_client中,但是我4里的问题我还没解决。目前的只是按照常规的方法hack相关代码解决的。

modoer是开源的点评程序,非常出色,从代码里学到很多知识,不仅是php,可能对今后开发Rails都有帮助。在此感谢作者的工作!!!

广告下自己的新站:

时尚51区

7#娱乐圈

7#早新闻

对了,我们现在用的新插件是这个,http://code.google.com/p/syntaxhighlighter,非常强

  • 信息发布
  • 最新留言
  • 热评日志
我的2010,新的开始啦

稍后把团队的介绍放上,呵呵。
关于 里克
里克:本名李伟,全职SOHO开发,技术顾问
长春互联 技术总监
邮件:liwei@echangchun.net
QQ:5175486
MSN:liwei78@live.com
某高潜力SNS网站团队成员
对iphone和android的开发很感兴趣