我们的应用有类似需求,不同的是用牛顿冷却算法,比你这个稍微复杂一点点,我们加了 2 个字段 initial_score 和 current_score 在内容创建地时候算一个原始分(根据用户等级,内容质量等),然后用 crontab 每天执行一次 sql: update xxx set current_score = initial_score * exp(timestampdiff(day, created_at, now()) * -0.12) 需要用到排序的地方就按 current_score 来排序就可以了。
hacker news 的算法因为不需要保留原始分,你只需要加一个字段,用 crontab 每小时执行一次 sql 计算既可。
apache deflate 模块支持 input gzip,只要配置一下,后端的 app server 就和普通的 http request 一样获取 params 就可以了。
nginx 不支持,可以在 rails 里面写个 middleware 来处理
ActiveSupport::Gzip.decompress(request.raw_post)
我们 iOS apns 后端就是用它的,之前叫 rapns,只支持 apns 和 gcm,现在改名了,加了很多其他服务的支持。
这么萌的妹子,可以兼职吗?
报名 +1
callback 能不能支持视频信息,我不是很确定,但你可以在收到 callback 以后调用他们的 avinfo api 来获取视频信息,然后保存下来,就是要多一次 api 请求。
最早七牛的照片上传也是无法在 callback 里面附带这些信息的,我提建议后他们很快就加上了,如果视频 callback 没有这个功能,你可以像他们提建议。
#5 楼 @liuhui998 我们视频上传目前只有在 app 客户端做的,是先在客户端计算出长度,大小,然后作为附属信息放到 callback url 参数。
照片是七牛支持在 callback 的时候,自动附上这些属性的。
因为调用的 sql driver 是执行单句查询,不支持加;的多句 sql 语句。 如果不用白名单过滤话,在你附上的文档里面已经解释了可以用 order 来做值猜测(不过没有人在数据库存明文密码吧...),还可以用来做复杂的 sql 计算实现 DDOS 目的。
这可以通过设计缓存的粒度来解决,我们的应用在 api 上也有类似你说的权限判断问题,比如用户访问一个地点,需要返回该用户是否收藏过这个地点以及该地点的其他信息,可以将这部分拆封开来,我们用的是 rabl 做模板输出,代码类似如下:
object @attraction
node :current_user_favorited do |a|
user_signed_in? && PoiFavorite.where(:poi_type => 'Attraction', :poi_id => a.id, :user_id => current_user.id).present?
end
extends "api/attractions/show_cache"
然后在 show_cache 这个文件里面,再可以用 Preload 减少 N+1 的查询:
object @attraction
ActiveRecord::Associations::Preloader.new(@attraction, :xxx => xxx).run
attributes :id, :name, :description, :lat, :lng
...
供参考
你需要定义一个 font_families,比如用微软雅黑,将字体文件放到这个路径下,
font_families["msyh"] = {
:normal => { :file => "#{FONTS_PATH}/msyh/msyh.ttf" },
:bold => { :file => "#{FONTS_PATH}/msyh/msyhbd.ttf" }
}
然后用这个字体来显示中文
font("msyh") do
font_size 75
text "中文测试", :align => :center
end
这个 gist 里面提到的 faraday 错误,正好前 2 天在测试 ruby 2.1 我们的代码也遇到了,搜索了一下 github,有相关 issue: https://github.com/lostisland/faraday/issues/328 根源在: https://github.com/geemus/excon/issues/358 具体的 ruby bug: https://bugs.ruby-lang.org/issues/9352
出生到现在,小时候同父母搬过 2 次家,自己成家以后就没搬过。 平均 18 年搬家一次,这记录在社区可以 top 3 了吧
看你的描述没有严格要求必须是间隔 4 秒,这就很简单了,写个 daemon 进程,抓一次,抓取时间设置个合理的 timeout,然后 sleep 4 秒。
排名第 2 的 Python 版本也很 cool 啊,不过用 ruby 只要一个函数,感觉有点作弊,哈哈:
"Happy new year to you!".sum
第一个可以用 delegate
class CACertificate < ActiveRecord::Base
attr_accessor :cert
delegate :subject, :xxx, :to => :cert
after_find do |record|
self.cert = OpenSSL::X509::Certificate.new record.raw
end
end
这个和分词有关吧,就例子里面的,如果在这个上下文: 南京市长江大桥在清明节视察了精神病院
那就是
南京 市长 江大桥
长就是 zhang 的音了...
所以还是不要带分词,让需要的人用分词好的结果再进入这个 gem 来获取拼音。
我翻了一下代码,我们用的是 Qiniu::RS.establish_connection!
是不是文档问题?
你试试看这个,我们网站就是用这个的。 https://github.com/liluo/omniauth-douban-oauth2
升级完毕,单元测试以及人肉测试中...
第一次做这种远程录音,中间 NG 多次,哈哈。
#5 楼 @small_fish__ nginx 改了 header,为了方便干掉各种恶意的后缀扫描爬虫
都是大学算法课教过的东西,第一题就是 DP 的经典例子:
def max_sum(a)
max, head, tail, current_head = 0, 0, 0, 0
sum = [[0, a.first].max]
1.upto(a.size - 1) do |i|
sum[i] = [0, sum[i-1] + a[i]].max
if sum[i-1] == 0 && sum[i] > 0
current_head = i
end
if sum[i] > max
max, head, tail = sum[i], current_head, i
end
end
p "#{a[head..tail]} => #{max}"
end
第 2 题翻书去...我也忘记了...