我觉得 lt 是看起来不错,但是使用起来却有点不直观,重新学习和习惯的成本比较高;以前尝试过一次之后就放弃了
买之前打个电话,联系个销售顾问,她就一下子可以帮你全部搞定,从下单到付款 ^_^
#16 楼 @ChanceDoor 真正重构的话就应该试图去除这些分支,可能就要引入不少设计模式上的东西了;就这个问题我可能就会采用链式的简化处理方法,基本原理就是
login_result = 动态令牌检查器 && 验证检查器 && 过期时间检查器
这其中的每一个检查器都可以封装成一个完整的对象并在其中处理逻辑和错误,并返回 bool 之类的标志以便决定下一个检查器;好处是 caller 完全移除 if-else,具体每个检查器的判断逻辑也很简单
我没用过 devise,以上说法也只是根据一般代码的设计思路而言,不一定真正适用你的具体场景。
至于放哪儿,实际上我觉得根据你的场景而言,首先这一段逻辑你会重用么?它是否是属于业务层的逻辑?或者是其他要考虑的?然后再决定是放在 controller,还是 model,是否需要封装成一个 class,或者是要变成 lib,更或者是 module...
#14 楼 @ChanceDoor 有一种减少流程分支层次的方法是错误先行,此后就可以省去正确的分支;当然这不不一定是一种很好的重构策略,只能算是一种编码风格; 如果重构的话就应该试图去除这些分支,可能就要引入不少设计模式上的东西了。
比如登陆界面需要先调用一个动态令牌的API,
如果动态令牌不通过
动态令牌错误
调用devise的用户名密码验证,
验证不通过
用户名密码错误
判断账号是否存在过期时间,
如果过期时间为nil,
就写入当前时间并成功登陆,
判断是否过期
过期
过期错误
成功登陆
其实不限于 ruby 的,iTunes 上有很多好的 Podcast 可以看的,制作又精良,顺便还可以学英语
我也看到了,可是没觉得那个一定要收的。。。不知道大家为什么那么喜欢 CMM2
#9 楼 @ashchan @lufeihaidao 这个倒是的,经常加班,但是也经常不用上班那么早,还时不时有个三连休啥的,而且有时候还可以只要一个月的工作时间到 140 个小时就可以了吧
无需要日语等级,只要有 offer 给你就可以过去了;如果有朋友什么之类的在那边,就简单了,去个中国人多的公司,可能都不一定需要总是日语交流的。 日本生活压力还好,再怎么花了每个月总可以省个一两万人民币的
我一朋友刚去时候就是上面这个状况
只做了原理性质的重构,里面具体的操作上估计有问题,比如 sql 的拼接 LZ 的新旧数据库我发现 column name 都是一样的,这样完全不必要硬写 sql 的;如果不一样的话弄个映射也可以避免;此外重构就是把处于不同抽象层次上的逻辑封装到不同的方法中。
发现和楼上的基本重复了。。。
#!/usr/bin/env ruby
# encoding: utf-8
#copy tag from test env to prod env
require 'mysql2'
class TagCopy
def transfer_tag_by_key(tag_key)
open_db
results = load_old_tags(tag_key)
uuid = get_uuid_from_new_db
srid = get_srid_from_new_db
results.each do |old_tag|
transfer_tag old_tag, uuid[0], srid[0]
transfer_child uuid[0],old_tag["id"] if has_child(old_tag)
end
close_db
end
def transfer_child new_pid, parent_id
results = load_old_childs_for_parent(parent_id)
results.each do |row|
uuid = get_uuid_from_new_db
transfer_tag(row,uuid[0],new_pid)
transfer_child uuid[0],row["id"] if has_child(row)
end
end
def transfer_tag(row, id, parent_id)
miss_colums = %w(site row_num sort_no ad_quantity)
miss_colums_values = row["row_site"] || 0, row["row_num"] || 1, row["sort_no"] || 0, 0
all_columns = ["id", "parent_id", common_columns, miss_colums].flatten.join
all_columns_value = [id, parent_id, common_columns.collect{|col| row[col]}, miss_colums_values].flatten
insert_sql = "insert into yitian_b2c_db.tbl_cms_tags (#{all_columns.join(',')}) values (#{all_columns_value.join(',')})"
@to_db.query(insert_sql)
end
private
def has_child
row["child"] >0
end
def common_columns
%w(no tag_key tag_name tag_url tag_desc structure type isleaf child level brand_no category_no channel_no other_no enable_more image_size)
end
def old_db
Mysql2::Client.new {:host => "192.168.xx.xx",
:port => 3306,
:username => "mysql",
:password => "mysql",
:database => "mydb"
}
end
def new_db
Mysql2::Client.new {:host => "192.168.xx1.xx2",
:port => 3306,
:username => "root",
:password => "root",
:database => "mydb"
}
end
def load_old_tags(tag_key)
param = @from_db.escape(tag_key)
sql = "select #{common_columns.join(',')} from tbl_cms_tags where tag_key = '#{param}'"
@from_db.query(sql)
end
def load_old_childs_for_parent(parent_id)
sql = "select #{common_columns.join(',')} from tbl_cms_tags where parent_id = '#{parent_id}' "
results = @from_db.query(sql);
end
def get_uuid_from_new_db
@to_db.query("SELECT REPLACE(UUID(),'-','')", :as => :array).to_a[0]
end
def get_srid_from_new_db
@to_db.query("select id from tbl_cms_tags where tag_key ='ol_main'").to_a[0]
end
def close_db
@from_db.close
@to_db.close
end
def open_db
@from_db ||= from_db
@to_db ||= to_db
end
end
TagCopy.new.transfer_tag_by_key("ol_index")
RP 啊,我买时用的卡刚好几个月前过期了,换了新卡,还没在 linode 上使用
个人觉得这种搜索如果数据量多了优先考虑搜索引擎吧,然后缓存就变简单了,只需要根据搜索出来的 id 直接取缓存就可以了
其实楼主这个问题很不错的,在应用中有不少人经常用这个方法来处理map
中对象的转换和封装的。它可以更一般化
class Class
def to_proc
proc(&method(:new))
end
end
这样就可以根据需要随意的创建对象了,只有有对应的构造方法
[{:name => 'Tom'}, {:name => 'Jerry'}].map(&User)
或者做类型转换,
User.all.map(&UserWrapper)
哈哈,我也是,别的都看懂了,就是不知道 Array.new 传这两个参数的用法。
建议重新排版并且将标题中的错别字改正,效果会更好
如果你不准备买新的话,建议升级,特别是换 SSD 之后性能飙升,做开发完全没问题。
我上个本跟你一样,09 年的 467 机型,换 ssd 和内存之后一直用到 12 年底,没有任何性能上的问题。
我当时换的 160G SSD,而且我没有拆光驱,直接把原硬盘给拆了,如果你不要在上面装很多音乐或者视频之类的话完全够用了。
价格之类的一淘宝就知道了。。。LZ 真懒啊!
@dave 错误同楼上,注释掉之后仍跑不起来,原因未知
撇去前面基于 JVM 的框架不谈,对比 go 和 ruby 的数据发现基本刚好对应前不久那个从 30 台服务器到 2 台服务器的差距
参数顺序错了,ftp 地址对应 url, -O 对应本地存储的文件名
wget ftp://10.1.111.111/1.txt -O 1.txt
赞同文中的不少观点,没有最好的技术,只有合适的技术,合适的技术不仅仅关于出现的地方,也跟时间有关;rails 亦然,同一个应用开始时候使用 rails 是个很好的选择,那么在需要的时候用更好的技术替换 rails 也是一个好的选择。
去 Rails 化个人也在一定程度上赞同,所谓去并不是抛弃不用,而是应该不惟 rails;不可否认 rails 成就了 ruby,但是这也使得很多人惟 rails 化了
出问题时候 dns 无法解析 l.ruby-china.org,不过别的域名正常,很奇怪,电脑上也没有进行任何别的设置
不过右拍云的应该没有这么不稳定吧,而且大家似乎也没碰见过,我再查查是不是自己这边的问题
我也用的 apple tv, 小米的盒子感觉除了娱乐没有太大的用途,那个 airplay 支持貌似也不是太好。
apple tv 现在也能直接看优酷等网络视频,不过我更喜欢它的 airplay 和 itunes 里面直接可以访问到的各种学习资源