小编Dav*_*les的帖子

AVAssetWriterInputPixelBufferAdaptor返回空像素缓冲池

我确定我的缓冲区属性出了问题,但是我不清楚它是什么 - 它没有很好地记录应该去那里的东西,所以我猜是基于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)

core-foundation core-video ios avassetwriter

8
推荐指数
1
解决办法
6479
查看次数

SimpleDateFormat未正确处理上午12点

我试图解析字符串"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'.)

java calendar date simpledateformat

8
推荐指数
1
解决办法
6783
查看次数

在AWS Linux上增加RestClient/Net :: HTTP中的connect(2)超时

我正在使用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 sockets amazon-ec2 net-http

8
推荐指数
1
解决办法
257
查看次数

处理并发ruby线程池中的异常

如何处理并发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)

所以我想要实现的是在任何异常的情况下停止处理(中断循环).

此异常也在更高级别的应用程序中获救,并且执行了一些清理作业(例如将模型状态设置为失败并发送一些通知).

ruby concurrency multithreading concurrent-ruby

8
推荐指数
1
解决办法
2146
查看次数

在Rails 2 ERB视图中为/ public中的文件生成URL

在我的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',但那是什么?我可以在视图中引用变量吗?这是未定义的.

ruby-on-rails-2

7
推荐指数
1
解决办法
1万
查看次数

估计64位Java中的最大安全JVM堆大小

在分析一个有问题的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?

我该如何估算呢?

java jvm memory-management

7
推荐指数
1
解决办法
1万
查看次数

接受散列或哈希数组作为Ruby方法的参数

我有方法:

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)进行手动类型检查?

ruby ruby-on-rails

7
推荐指数
1
解决办法
1981
查看次数

Backbone和Handlebars的服务器端国际化

我正在开发一个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数据结构.但问题仍然存在:

  1. 指示(可能在模板中)给定视图需要哪些消息键的最佳方法是什么?
  2. 什么是正确的数据格式?
  3. 如何将本地化消息导入Backbone视图?
  4. 是否有任何现有的Javascript库可以提供帮助,或者我应该开始制作东西?
  5. 是否有更好/更标准的替代方法?

grails internationalization backbone.js handlebars.js

7
推荐指数
1
解决办法
941
查看次数

Swift运算符的优先级是什么?

我想查找一些运算符的优先级.是否有某个列表?我还没找到一个.

swift

7
推荐指数
2
解决办法
2499
查看次数

仅迭代公共Ruby常量

由于Ruby 2.0左右,可以使用常量私有private_constant,如果常量直接在声明模块之外使用,则会导致错误.

然而,constantsconst_defined?仍返回私人常数,并const_get允许对它们的访问.有没有办法以编程方式识别私有常量并在运行时过滤掉它们?

(注意:Module.private_constant有什么作用?有没有办法只列出私有常量?它的答案并没有专门解决这种情况,而是相反(如何只列出私有常量).)


更新:看起来好像在Ruby 1.9和2.0中,constants确实只包含公共常量.从2.1开始,no-arg constants仍然只包含公共常量,但设置inheritfalsewith constants(false)(即,仅列出在此模块中定义的常量,而不是在其祖先模块中)具有暴露私有常量的副作用.

ruby private-members

7
推荐指数
1
解决办法
94
查看次数