我希望网站上的excel文件在点击时在Excel中打开,不会保存在桌面上,或者在浏览器中嵌入打开等等.现在显然这一切都取决于每个用户的所有配置,但最好的内容类型是什么和其他设置,以实现大部分时间?
我有一个旧的2.1.1 Ruby on Rails应用程序,系统升级为使用Ruby 1.8.7.它最初使用1.8.5左右.
我想出于性能原因将它升级到Ruby 1.9.x,也可能升级到更新的Ruby on Rails.
我找不到任何简单的不同Ruby版本和Ruby on Rails版本之间的兼容性图表.
2.1.1将与Ruby 1.9.x一起使用吗?如果没有,我需要在多长时间内升级它,以及我可能会遇到什么样的问题?我的应用程序对数据库层做了很复杂的事情,但其余部分相当简单.
标准grep
/ pcregrep
等可以方便地与二进制文件一起用于ASCII或UTF8数据 - 是否有一种简单的方法可以让它们尝试UTF16(最好是同时,但反过来会这样做)?
我试图获得的数据无论如何都是ASCII(库中的引用等),它只是找不到,因为有时两个字符之间有00,有时则没有.
我没有看到任何方法在语义上完成它,但是这些00应该可以解决问题,除了我不能在命令行上轻松使用它们.
Perl使用GC的引用计数,并且很容易意外地进行循环引用.我看到我的程序似乎使用了越来越多的内存,并且它可能会在几天后溢出.
有没有办法在Perl中调试内存泄漏?附加到程序并获取各种类型的对象将是一个良好的开端.如果我知道哪些对象比预期的要多得多,我可以检查所有对它们的引用并希望修复泄漏.
这可能是我第十次实施这样的事情,而且我从未对我提出的解决方案百分百满意.
使用mysql表而不是"正确"的消息传递系统的原因很有吸引力,主要是因为大多数应用程序已经将一些关系数据库用于其他东西(对于我一直在做的大多数事情,它往往是mysql),而很少有应用程序使用消息传递系统.此外 - 关系数据库具有非常强大的ACID属性,而消息传递系统通常没有.
第一个想法是使用:
create table jobs( id auto_increment not null primary key, message text not null, process_id varbinary(255) null default null, key jobs_key(process_id) );
然后入队看起来像这样:
insert into jobs(message) values('blah blah');
出列似乎是这样的:
begin; select * from jobs where process_id is null order by id asc limit 1; update jobs set process_id = ? where id = ?; -- whatever i just got commit; -- return (id, message) to application, cleanup after done
表和入队看起来不错,但出队有点困扰我.回滚的可能性有多大?还是被封锁了?我应该用什么键来制作O(1)-ish?
或者,我正在做什么更好的解决方案?
我有一组哈希(MD5的前64位,所以它们是非常随机分布的)我希望能够看到一个新的哈希是否在一个集合中,并将它添加到一个集合中.
集合不是太大,最大的将是数百万个元素,但是有数百个集合,所以我无法将它们全部保存在内存中.
到目前为止我有一些想法:
我错过了一些非常明显的东西吗 任何提示如何实现良好的基于磁盘的哈希表?
我真的很困惑为什么它在索引期间一直死于java.lang.OutOfMemoryError,即使它有几GB的内存.
有没有一个根本原因,它需要手动调整配置文件/ jvm参数,而不是只计算可用的内存量并限制自己的内容?除了Solr之外没有其他程序会遇到这种问题.
是的,每次发生此类崩溃时我都可以继续调整JVM堆大小,但这一切都是如此倒退.
以下是最新此类崩溃的堆栈跟踪,以防相关:
SEVERE: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:216)
at org.apache.lucene.index.TermBuffer.toTerm(TermBuffer.java:122)
at org.apache.lucene.index.SegmentTermEnum.term(SegmentTermEnum.java:169)
at org.apache.lucene.search.FieldCacheImpl$StringIndexCache.createValue(FieldCacheImpl.java:701)
at org.apache.lucene.search.FieldCacheImpl$Cache.get(FieldCacheImpl.java:208)
at org.apache.lucene.search.FieldCacheImpl.getStringIndex(FieldCacheImpl.java:676)
at org.apache.lucene.search.FieldComparator$StringOrdValComparator.setNextReader(FieldComparator.java:667)
at org.apache.lucene.search.TopFieldCollector$OneComparatorNonScoringCollector.setNextReader(TopFieldCollector.java:94)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:245)
at org.apache.lucene.search.Searcher.search(Searcher.java:171)
at org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:988)
at org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:884)
at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:341)
at org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:182)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:195)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1316)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:338)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:241)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud) 假设file.txt.gz
有2GB,我想看到最后100行左右.zcat <file.txt.gz | tail -n 100
会经历所有这些.
我知道压缩文件不能随机访问,如果我剪切让我们说它的最后5MB,那么剪切后的数据将是垃圾 - 但是可以gzip重新同步并解码其余的流吗?
如果我理解正确,gzip流是一个简单的命令流,描述输出什么 - 应该可以与之同步.然后是最近未压缩数据的32kB滑动窗口 - 如果我们从中间开始当然是垃圾,但我猜它通常会快速填充真实数据,从那时起减压是微不足道的(好吧,从文件的开始到结束,一些东西可能会一遍又一遍地被重新复制,因此滑动窗口永远不会清除 - 如果它只是常见的话会让我感到惊讶 - 如果发生这种情况,我们只需要处理整个文件.
我不是非常渴望自己做这个gzip hackery的亲戚 - 以前没有人做过,因为处理损坏的文件,如果没有别的?
或者 - 如果gzip真的不能这样做,是否有任何其他流压缩程序可以像它一样工作,除了它们允许重新同步中流?
编辑:我发现zlib的纯Ruby重新实现,并在浏览窗口内打印它以打印字节数.事实证明事情确实会被反复复制很多,即使在5MB以后,滑动窗口仍然包含来自前100个字节的内容,以及整个文件中的随机位置.
我们甚至无法通过读取前几个块和最后几个块来解决这个问题,因为那些第一个字节没有被直接引用,它只是一个非常长的副本链,并且找出它所指的内容的唯一方法是通过处理这一切.
基本上,使用默认选项我想要的可能是不可能的.
另一方面,zlib具有Z_FULL_FLUSH
清除此滑动窗口以进行同步的选项.所以问题仍然存在.假设zlib偶尔同步,是否有任何工具可以读取它的结尾而不处理它?
fma(a,b,c)
相当于a*b+c
除了不舍入中间结果.
你能不能给我一些算法的例子,这些算法可以从避免这种舍入中获益?
这并不明显,因为我们避免的乘法后的舍入往往比加法后的舍入更少有问题,而我们没有.