我确定我的缓冲区属性出了问题,但是我不清楚它是什么 - 它没有很好地记录应该去那里的东西,所以我猜是基于CVPixelBufferPoolCreate- 而Core Foundation对我来说几乎是一本封闭的书.
// "width" and "height" are const ints
CFNumberRef cfWidth = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &width);
CFNumberRef cfHeight = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &height);
CFStringRef keys[] = {
kCVPixelBufferWidthKey,
kCVPixelBufferHeightKey,
kCVPixelBufferCGImageCompatibilityKey
};
CFTypeRef values[] = {
cfWidth,
cfHeight,
kCFBooleanTrue
};
int numValues = sizeof(keys) / sizeof(keys[0]);
CFDictionaryRef bufferAttributes = CFDictionaryCreate(kCFAllocatorDefault,
(const void **)&keys,
(const void **)&values,
numValues,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks
);
AVAssetWriterInputPixelBufferAdaptor *adaptor = [[AVAssetWriterInputPixelBufferAdaptor
assetWriterInputPixelBufferAdaptorWithAssetWriterInput:writerInput
sourcePixelBufferAttributes:(NSDictionary*)bufferAttributes] retain];
CVPixelBufferPoolRef bufferPool = adaptor.pixelBufferPool;
NSParameterAssert(bufferPool != NULL); // fails
Run Code Online (Sandbox Code Playgroud) 我试图解析字符串"2/20/2012 12:00:00 AM"使用SimpleDateFormat,并且它似乎不是来了12点.
Date fromFmt = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aa")
.parse("2/20/2012 12:00:00 AM");
// Calendar months are 0-indexed
Date fromCal = new Date(new GregorianCalendar(2012, 1, 20, 0, 0, 0)
.getTimeInMillis());
System.out.println(fromFmt);
System.out.println(fromCal);
Run Code Online (Sandbox Code Playgroud)
输出:
Mon Feb 20 12:00:00 PST 2012
Mon Feb 20 00:00:00 PST 2012
Run Code Online (Sandbox Code Playgroud)
我希望他们两个都输出后者.我的格式字符串有问题吗?
(并且请没有人说'使用JodaTime'.)
我正在使用rest-client来POST一个非常慢的Web服务.我设置timeout为600秒,我已经确认它正在传递给Net :: HTTP @read_timeout和@open_timeout.
但是,大约两分钟后,我得到一个低级超时错误,Errno::ETIMEDOUT: Connection timed out - connect(2):
回溯的相关部分是
Operation timed out - connect(2) for [myhost] port [myport]
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `initialize'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `open'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `block in connect'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:88:in `block in timeout'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:98:in `call'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:98:in `timeout'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:878:in `connect'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:852:in `start'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:766:in `transmit'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:215:in `execute'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:52:in `execute'
Run Code Online (Sandbox Code Playgroud)
看起来抛出错误的代码行是
TCPSocket.open(conn_address, conn_port, @local_host, @local_port)
Run Code Online (Sandbox Code Playgroud)
好像底层connect(2)系统调用的超时时间大约是两分钟,而传递给Net :: HTTP的超时参数只能缩短它,而不能延长它.有没有办法修改套接字参数来设置更长的超时?
编辑添加:这似乎只是我们的AWS Linux服务器上的问题 - 在我的MacOS开发机器上,十分钟超时工作.我假设connect()MacOS/BSD上的默认超时时间更长,但我真的不知道.
如何处理并发ruby线程池中的异常(http://ruby-concurrency.github.io/concurrent-ruby/file.thread_pools.html)?
例:
pool = Concurrent::FixedThreadPool.new(5)
pool.post do
raise 'something goes wrong'
end
# how to rescue this exception here
Run Code Online (Sandbox Code Playgroud)
更新:
这是我的代码的简化版本:
def process
pool = Concurrent::FixedThreadPool.new(5)
products.each do |product|
new_product = generate_new_product
pool.post do
store_in_db(new_product) # here exception is raised, e.g. connection to db failed
end
end
pool.shutdown
pool.wait_for_terminaton
end
Run Code Online (Sandbox Code Playgroud)
所以我想要实现的是在任何异常的情况下停止处理(中断循环).
此异常也在更高级别的应用程序中获救,并且执行了一些清理作业(例如将模型状态设置为失败并发送一些通知).
在我的rails(v2.3.8)应用程序中,我有一个静态资源文件,我放在/public/myfile.kml不需要任何特殊的routes.rb设置对吗?
它可以在http:// localhost:3000/myfile.kml中正常运行
当我部署(对乘客)时,它出现在http://myserver/myappname/myfile.kml
到目前为止一切都很顺利......
我有一个视图(一个erb文件),它会喷出需要引用此文件的javascript.输出需要在localhost上是'/myfile.kml',在生产中需要'/myappname/myfile.kml',或者可能是上面的完整URL,或者可能是涉及一些'../../的相对url ../'(使用RESTful URL很尴尬).
我应该能够做一些像<%= url_for'myfile.kml'%>这样的事情吗?
或'<%= ROOT_URL%>/myfile.kml'
我知道这个问题有一个非常简单的答案,但说实话,我找不到运气.很多人都在谈论'root_url',但那是什么?我可以在视图中引用变量吗?这是未定义的.
在分析一个有问题的64位Java应用程序的过程中,我注意到分析器本身(YourKit)正在使用真正庞大的内存量.我在YourKit启动脚本中得到的是:
JAVA_HEAP_LIMIT="-Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m"
Run Code Online (Sandbox Code Playgroud)
天真地,假设一些开销,这将导致我猜测YourKit将使用最大可能超过4 GB的东西.但是,我在PS中实际看到的是:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dmoles 31379 4.4 68.2 14440032 8321396 ? Sl 11:47 10:42 java -Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m -XX:+HeapDumpOnOutOfMemoryError -Dyjp.probe.table.length.limit=20000 -Xbootclasspath/a:/home/dmoles/Applications/yjp-9.5.6/bin/../lib/tools.jar -jar /home/dmoles/Applications/yjp-9.5.6/bin/../lib/yjp.jar
Run Code Online (Sandbox Code Playgroud)
这是一个近14 GB的虚拟大小,驻留大小接近8 GB - 几乎是Java堆的3倍.
现在,我已经在我的开发盒上有足够的内存来运行它,但回到原来的内存问题,我正在尝试诊断:我怎么知道我必须使用多少Java堆?
显然,如果客户拥有16 GB物理RAM,那么告诉他们设置-Xmx为16 GB 并不是一个好主意.
那么合理的数字是多少?12 GB?8 GB?
我该如何估算呢?
我有方法:
def self.store(params)
params.each { }
end
Run Code Online (Sandbox Code Playgroud)
如果我传递一个哈希数组,它可以很好地工作:
params = [ { key: 'value' }, { key: 'value' } ]
Run Code Online (Sandbox Code Playgroud)
但是,我可能只想传递一个哈希,而不是哈希数组:
params = { key: 'value' }
Run Code Online (Sandbox Code Playgroud)
什么是最简洁的Ruby方法将哈希转换为哈希数组?
Array()方法是一种确保始终返回数组的方法,但是当传递Hash时,它会被转换为数组本身.
Array({ key: 'value' }) => [[:key, 'value']]
Run Code Online (Sandbox Code Playgroud)
我需要的:
{ key: 'value' } => [ { key: 'value' } ]
Run Code Online (Sandbox Code Playgroud)
有没有很好的方法来实现它,或者我是否必须使用is_a?(Array)进行手动类型检查?
我正在开发一个Grails/Backbone/Handlebars应用程序,它是一个更大的遗留Java系统的前端,其中(出于历史和可定制性的原因)国际化消息深藏在隐藏在几个SOAP服务背后的数据库中隐藏在各种内部Java库之后.从Grails图层获取这些消息很简单,工作正常.
但我想知道的是如何将(例如)国际化标签放入我的Handlebars模板中.
现在,我正在使用GSP片段生成模板,包括一个获取我感兴趣的消息的自定义标记,例如:
<li><myTags:message msgKey="title"/> {{title}}</li>
Run Code Online (Sandbox Code Playgroud)
但是,出于性能和代码布局的原因,我希望摆脱GSP模板并将它们变成直接的HTML.我看了一下客户端国际化选项,比如i18n.js,但它们似乎依赖于我没有得到的消息文件的存在.(我可能会产生它,但它会是巨大且昂贵的.)
到目前为止,我能想到的最好的事情就是将标签楔入Backbone模型,所以我最终会得到像
<li>{{titleLabel}} {{title}}</li>
Run Code Online (Sandbox Code Playgroud)
然而,这真的远离了在一个漂亮干净的RESTful JSON API之上构建Backbone模型的理想 - RESTful服务返回的JSON混乱了表示数据(即本地化标签),或者我必须做额外的工作将标签注入Backbone模型 - 并且使用演示数据混乱Backbone模型似乎也是错误的.
我认为,就干净数据和干净的API而言,我想要做的是编写另一个RESTful服务,它接受消息键列表和类似消息,并返回包含所有本地化消息的JSON数据结构.但问题仍然存在:
由于Ruby 2.0左右,可以使用常量私有private_constant,如果常量直接在声明模块之外使用,则会导致错误.
然而,constants和const_defined?仍返回私人常数,并const_get允许对它们的访问.有没有办法以编程方式识别私有常量并在运行时过滤掉它们?
(注意:Module.private_constant有什么作用?有没有办法只列出私有常量?它的答案并没有专门解决这种情况,而是相反(如何只列出私有常量).)
更新:看起来好像在Ruby 1.9和2.0中,constants确实只包含公共常量.从2.1开始,no-arg constants仍然只包含公共常量,但设置inherit为falsewith constants(false)(即,仅列出在此模块中定义的常量,而不是在其祖先模块中)具有暴露私有常量的副作用.
ruby ×4
java ×2
amazon-ec2 ×1
backbone.js ×1
calendar ×1
concurrency ×1
core-video ×1
date ×1
grails ×1
ios ×1
jvm ×1
net-http ×1
sockets ×1
swift ×1