我有一个应用程序,它将关系信息存储在MySQL表中(contact_id,other_contact_id,strength,recorded_at).如果我需要做的就是显示联系人的关系,甚至生成两个联系人的共同联系人列表,这很好.
但现在我需要生成以下统计数据:'2011年1月强度为3或更高的双向连接总数是多少'或(假设每个联系人都是组的一部分)'哪个组的连接数最多?到其他团体等
我很快发现用于生成这些统计数据的SQL变得非常难以实现.
所以我写了一个脚本,对于任何给定的日期,它将在内存中生成一个图形.然后,我可以根据该图表运行我想要的任何统计数据.更容易理解,总的来说,性能更高 - 除了生成图形部分.
我的下一个想法是缓存这些图,这样我就可以在需要运行新的统计数据时调用它们(或生成后面的图形:例如,对于今天的图表,我采用昨天的图表并应用自昨天以来发生的任何更改).我尝试了memcached,它工作得很好,直到图形增长> 1 MB.
所以现在我正在考虑使用像Neo4J这样的图形数据库.
唯一的问题是,我没有一个图表.或者我这样做,但它随着时间的推移而变化,我需要能够以不同的参考时间查询它.
那么,我可以:
要么
我是图形数据库的新手,所以任何帮助/指针/提示都将受到赞赏.
我正在尝试使用apache bench在我的rails应用程序中加载测试创建操作,但是ab似乎没有发送POST数据 - 尽管它确实提交了POST而不是GET请求.
这是我运行的命令:
ab -n 1 -p post -v 4 "http://oz01.zappos.net/registrations"
Run Code Online (Sandbox Code Playgroud)
这是帖子文件的内容:
authenticity_token=M18KXwSOuIVbDPZOVQy5h8aSGoU159V9S5uV2lpsAI0
Run Code Online (Sandbox Code Playgroud)
rails日志显示POST请求,但不显示任何发布的参数:
Started POST "/registrations" for 10.66.210.70 at Thu Sep 09 17:48:06 -0700 2010
Processing by RegistrationsController#create as */*
Rendered registrations/new.html.erb within layouts/application (14.0ms)
Completed 200 OK in 24ms (Views: 14.6ms | ActiveRecord: 0.1ms)
Run Code Online (Sandbox Code Playgroud)
而来自浏览器的POST请求会导致此日志条目:
Started POST "/registrations" for 192.168.66.20 at Thu Sep 09 17:49:47 -0700 2010
Processing by RegistrationsController#create as HTML
Parameters: {"submit"=>"true", "authenticity_token"=>"AfNG0UoTbJXnxke2725efhYAoi3ogddMC7Uqu5mAui0=", "utf8"=>"\342\234\223", "registration"=>{"city"=>"", "address"=>"", "name"=>"", "zip"=>"", "optin"=>"0", "state"=>"", "email"=>""}}
Rendered registrations/new.html.erb within …Run Code Online (Sandbox Code Playgroud) 我有一个使用Ruby标准库中的Set类的数据结构.我希望能够将我的数据结构序列化为JSON字符串.
默认情况下,将序列化设置为数组:
>> s = Set.new [1,2,3]
>> s.to_json
=> "[1,2,3]"
Run Code Online (Sandbox Code Playgroud)
在尝试反序列化之前哪个是好的.
所以我定义了一个自定义to_json方法:
class Set
def to_json(*a)
{
"json_class" => self.class.name,
"data" => {
"elements" => self.to_a
}
}.to_json(*a)
end
def self.json_create(o)
new o["data"]["elements"]
end
end
Run Code Online (Sandbox Code Playgroud)
哪个效果很好:
>> s = Set.new [1,2,3]
>> s.to_json
=> "{\"data\":{\"elements\":[1,2,3]},\"json_class\":\"Set\"}"
Run Code Online (Sandbox Code Playgroud)
直到我把Set放入哈希或其他东西:
>> a = { 'set' => s }
>> a.to_json
=> "{\"set\":[1,2,3]}"
Run Code Online (Sandbox Code Playgroud)
知道为什么to_json当Set嵌套在另一个对象中时我的自定义不被调用?
我在我的网站上有一个搜索表单,允许用户搜索许多不同的方面,如城市,价格范围,大小等.
表单提交为GET,因此表单参数在URL中.
他们最终变得非常丑陋:
/搜索?UTF8 =✓&city_region =温哥华&property_type_id = 1&min_square_footage = 0&max_square_footage = 15000
(它们实际上更糟糕,因为搜索参数是模型的一部分,所以URL中也有很多编码的[和]和)
我想做的是让表单生成一个URL,如:
/搜索/温哥华/办公?square_footage = 0-15000
其中一些参数放在URL路径本身,而其他参数保留在查询参数中(以稍微可读的格式).
在rails应用程序中处理这个问题的最佳方法是什么?我能想到的就是在表单上使用javascript代码提交来操作表单提交的URL.
我有一个数据库表,其中包含来自Google Maps地理编码响应的地址.谷歌缩小所有方向(西 - > W,东 - > E等).
因此,如果我输入"100 West Pender Street"这样的地址,那么Google Maps返回的格式化地址就是"100 W Pender St",我将其插入到我的表格中.
现在,如果用户出现并搜索该地址,则以下所有内容应匹配:
pender street west pender street 100 pender 100 w pender 100 west pender
他们或多或少都这样做.然而,表中的"w"被忽略,因为它低于最小字长.落在东柏纳的地址在搜索结果中被赋予相同的权重("E"也被忽略).
处理这个问题的最佳方法是什么?
我怀疑将最小字长设置为1是"坏事".
我可以搜索并替换谷歌地址中的已知缩写(N,E,S,W,St,Ave,Dr等)并用它们的扩展替换它们 - 但是有一些街道名称,这不是有效(有些城市有单字母街道名称:J街等......)
此外,像"123 160 St"这样的地址根本无法搜索,因为街道号码(123)和街道名称(160)都低于最小字长.
MySQL FullText是正确的方法吗?Sphinx能提供更好的服务吗?
或者还有其他我尚未考虑的解决方案吗?请记住,用户的搜索查询不仅要匹配属性的地址,还要匹配其他文本列,例如属性名称和描述.
虽然我能够将PDF的特定页面转换为PNG,如下所示:
gs \
-dSAFER \
-dBATCH \
-dNOPAUSE \
-sDEVICE=png16m \
-dGraphicsAlphaBits=4 \
-sOutputFile=gymnastics-20.png \
-dFirstPage=20 \
-dLastPage=20 \
gymnastics.pdf
Run Code Online (Sandbox Code Playgroud)
我想知道我是否能以某种方式使用ghostscript的JOBSERVER模式来处理几次转换,而不必每次都产生启动ghostscript的成本.
来自:http://pages.cs.wisc.edu/~ghost/doc/svn/Use.htm
-dJOBSERVER定义
\004 (^D)以启动用于与通常在作业服务器下运行的Adobe PS解释程序兼容的新封装作业.-dNOOUTERSAVE如果-dJOBSERVER指定,则忽略该开关,因为作业服务器总是在保存级别下执行输入PostScript,尽管可以使用exitserver运算符从封装的作业中转义并执行,就像-dNOOUTERSAVE指定了一样.这也要求输入来自stdin,否则会导致错误
(Error: /invalidrestore in --restore--).示例用法是:
Run Code Online (Sandbox Code Playgroud)gs ... -dJOBSERVER - < inputfile.ps -or- cat inputfile.ps | gs ... -dJOBSERVER -注意:这
^D不会导致stdin上的文件结束操作,因为它可能会依赖于TBCP(标记二进制通信协议)的某些PostScript打印机导致带外^D信号在流输入数据中发出EOF信号.这意味着stdin上的直接文件操作,例如flushfile和closefile将影响^D流中的数据处理.
我的想法是在进程中运行ghostscript.该脚本将收到对pdf的特定页面的请求,并将使用ghostscript生成指定的图像.我不想每次都启动一个新的ghostscript进程.
我有一些代码将一堆图像加载到隐藏的img元素中,然后是一个Javascript循环,将每个图像放到画布上.但是,我想剪切每个图像,使其在放置在画布上时为圆形.
我的循环看起来像这样:
$$('#avatars img').each(function(avatar) {
var canvas = $('canvas');
var context = canvas.getContext('2d');
var x = Math.floor(Math.random() * canvas.width);
var y = Math.floor(Math.random() * canvas.height);
context.beginPath();
context.arc(x+24, y+24, 20, 0, Math.PI * 2, 1);
context.clip();
context.strokeStyle = "black";
context.drawImage(document.getElementById(avatar.id), x, y);
context.stroke();
});
Run Code Online (Sandbox Code Playgroud)
问题是,只绘制(或可见)第一个图像.
如果我删除剪切逻辑:
$$('#avatars img').each(function(avatar) {
var canvas = $('canvas');
var context = canvas.getContext('2d');
var x = Math.floor(Math.random() * canvas.width);
var y = Math.floor(Math.random() * canvas.height);
context.drawImage(document.getElementById(avatar.id), x, y);
});
Run Code Online (Sandbox Code Playgroud)
然后绘制我的所有图像.
有没有办法让每张图片分别剪裁?
我尝试将剪切区域重置为图像之间的整个画布,但这不起作用.
尽管 HTTP 规范规定标头不区分大小写;Paypal 及其新的自适应支付 API 要求其标头区分大小写。
使用 ActiveMerchant 的 paypal 自适应支付扩展 ( http://github.com/lamp/paypal_adaptive_gateway ) 似乎虽然标头全部设置为大写,但它们以混合大小写发送。
下面是发送 HTTP 请求的代码:
headers = {
"X-PAYPAL-REQUEST-DATA-FORMAT" => "XML",
"X-PAYPAL-RESPONSE-DATA-FORMAT" => "JSON",
"X-PAYPAL-SECURITY-USERID" => @config[:login],
"X-PAYPAL-SECURITY-PASSWORD" => @config[:password],
"X-PAYPAL-SECURITY-SIGNATURE" => @config[:signature],
"X-PAYPAL-APPLICATION-ID" => @config[:appid]
}
build_url action
request = Net::HTTP::Post.new(@url.path)
request.body = @xml
headers.each_pair { |k,v| request[k] = v }
request.content_type = 'text/xml'
proxy = Net::HTTP::Proxy("127.0.0.1", "60723")
server = proxy.new(@url.host, 443)
server.use_ssl = true
server.start { |http| http.request(request) }.body
Run Code Online (Sandbox Code Playgroud)
(我添加了代理线,这样我就可以看到 Charles 发生了什么 - http://www.charlesproxy.com/) …
我在尝试从Ruby访问Paypal的Adaptive Payment API时遇到了多个问题.
我最初遇到的主要问题是,Paypal要求他们的HTTP标头全部为大写,但Net :: HTTP不保留HTTP标头的情况(它将它们存储为'downcased'然后输出'大写' - 所以如果您设置标题'X-PAYPAL-SECURITY-USERID',它存储为'x-paypal-security-userid'并输出为'X-Paypal-Security-Userid').
当我尝试将API与这些错误的标头一起使用时,我收到"500000内部服务器"错误.
所以我monkeypatched Net :: HTTP来保留标题的情况.但现在我得到超时异常:
Timeout::Error (execution expired):
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:60:in `rbuf_fill'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/protocol.rb:104:in `read_all'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:2220:in `read_body_0'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:2173:in `read_body'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:2198:in `body'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:2137:in `reading_body'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1052:in `request'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:543:in `start'
Run Code Online (Sandbox Code Playgroud)
那么,回到我原来的问题:是否有人使用Ruby成功访问自适应支付API?如果是这样,你的秘密是什么?
ruby ×3
paypal ×2
apachebench ×1
api ×1
canvas ×1
clipping ×1
forms ×1
ghostscript ×1
graph ×1
html ×1
http ×1
javascript ×1
json ×1
mysql ×1
neo4j ×1
networking ×1
search ×1
sphinx ×1