我有一段时间有这个问题,所以我想我会请求你的帮助.
对于概念验证项目,我使用jPlayer创建了一个仅限HTML 5的last.fm播放器.它适用于Firefox,但在使用Chrome(Chromium)时无法使用html解决方案.
首先,Chrome尝试通过流网址获取mp3文件.在预先缓冲了一点之后,它总是尝试通过发出另一个HTTP请求来读取最后128个字节.现在的问题是last.fm流服务器似乎一次只允许每个文件一个连接,这导致两个http连接都失败.似乎Chrome/Chromium忽略了音频标签的preload ="none"属性.据我所知,标签只是对浏览器的推荐.
普通的mp3文件就像魅力一样.此外,当在浏览器中输入重定向的流式URL时,它开始播放.似乎last.fm使用原始URL作为一次性访问令牌/访问控制过滤器,而解析后的流URL有效一段时间.
有关完整的HTTP标头(已删除cookie),请参阅http://pastebin.com/rBAdL4X8.(由Chromium元素检查员复制).
有没有办法在浏览器中规避这个问题?
我想尽快读取1 GB大文件的所有行Stream<String>.目前我正在使用Files(path).lines()它.在解析文件之后,我正在进行一些计算(map()/ filter())起初我认为这已经是并行完成了,但似乎我错了:当按原样读取文件时,我的双CPU需要大约50秒笔记本电脑.但是,如果我使用bash命令拆分文件然后并行处理它,它只需要大约30秒.
我尝试了以下组合:
Files(..).lines().parallel().[...]约50秒Files(..).lines().parallel().[...]约30秒我使用大致相同的结果(1或2秒)多次运行这4次.它[...]只是一个映射和过滤链,toArray(...)最后用于触发评估.
结论是使用没有区别lines().parallel().由于并行读取两个文件所需的时间较短,因此分割文件会带来性能提升.然而,似乎整个文件是连续读取的.
编辑:
我想指出我使用的是SSD,所以实际上是在寻找时间.该文件总共有1658652(相对较短)的行.在bash中拆分文件大约需要1.5秒:
time split -l 829326 file # 829326 = 1658652 / 2
split -l 829326 file 0,14s user 1,41s system 16% cpu 9,560 total
所以我的问题是,Java 8 JDK中是否有任何类或函数可以并行读取所有行而不必先拆分它?例如,如果我有两个CPU内核,则第一行读取器应从第一行开始,第二行应从第一行开始(totalLines/2)+1.
Thunderbird的过滤机制很适合简单的事情.但我想做点什么
(如果邮件包含xy或发件人是yz)并且已读取状态,请移至垃圾箱
问题是,一个过滤规则只能匹配任何(= OR)或所有(= AND)过滤条件.我尝试解决这个问题,首先在第一个过滤器中使用不可能的标记组合标记所有消息,然后使用第二个过滤器将所有标记的+标记的消息移动到垃圾箱(如果它们被读取),但这种方法效果非常差,如有时消息没有被标记,有时标记的消息不会被删除.
所有这一切的目的是在我阅读它们后立即删除不重要或通知电子邮件.当然,我可以为它们中的每一个做一个单独的过滤器,但是如果我想要改变一些东西,那么对于所有> 20-30个过滤规则来说,它会变得乏味.
是否可能以某种方式破解过滤器配置或是否只使用一个过滤器进行复杂过滤?
顺便说一句.如果这可能很重要,我正在使用Gmail + IMAP.
在Eclipse Helios中,我想使用自定义背景颜色突出显示所选行,就像在纸上使用普通文本的文本标记一样.
我怎样才能做到这一点?有一个(稳定的)Eclipse插件吗?
今天我偶然发现了一些有趣的东西.假设以下Java 6类:
public class Ereasure {
public Object get(Object o) {
return null; // dummy
}
public static class Derived<T> extends Ereasure{
// (1)
@Override
public Object get(T o) {
return super.get(o);
}
// (2)
/*
@Override
public Object get(Object o) {
return super.get(o);
}*/
}
}
Run Code Online (Sandbox Code Playgroud)
如果您尝试编译上面的示例,编译器会说Ereasure.java:9:方法不会覆盖或实现超类型@Override中的方法如果删除@Override注释(这不应该是必需的!),它会说Ereasure .java:8:名字冲突:get(T)在Ereasure.Derived和Ereasure中的get(java.lang.Object)有相同的擦除,但都没有覆盖另一个这有点矛盾,因为T应该是对象和因此覆盖父类的get方法.
如果你离开(1)未注释和取消注释(2)所以(1)重载(2)它也不会工作.编译器输出:
Ereasure.java:15: get(T) is already defined in Ereasure.Derived
public Object get(Object o) {
Run Code Online (Sandbox Code Playgroud)
作为结论,T正在被设置为Object,但不能覆盖父get方法.
我现在的问题是,为什么至少有一个例子没有编译?
在解析YYYYMMdd日期时,例如2012年4月5日的20120405,最快的方法是什么?
int year = Integer.parseInt(dateString.substring(0, 4));
int month = Integer.parseInt(dateString.substring(4, 6));
int day = Integer.parseInt(dateString.substring(6));
Run Code Online (Sandbox Code Playgroud)
与
int date = Integer.parseInt(dateString)
year = date / 10000;
month = (date % 10000) / 100;
day = date % 100;
Run Code Online (Sandbox Code Playgroud)
月份的mod 10000是因为mod 10000导致MMdd而结果/ 100是MM
在第一个例子中,我们做3个String操作,3个"解析为int",在第二个例子中,我们通过modulo做很多事情.
什么更快?有更快的方法吗?
我必须编写一个单元测试来激发竞争条件,以便我可以测试我是否可能在以后解决问题.问题是竞争条件很少发生,可能是因为我的计算机只有两个核心.
代码如下所示:
class MyDateTime {
String getColonTime() {
// datetime is some kind of lazy caching variable declared somewhere(does not matter)
if (datetime == null) {
initDateTime(); //Uses lazy to initlialize variable, takes some time
}
// Colon time stores hh:mm as string
if (datetime.colonTime == null) {
StringBuilder sb = new StringBuilder();
//Now do some steps to build the hh:mm string
//...
//set colon time
datetime.colonTime = sb.toString();
}
return datetime.colonTime;
}
}
Run Code Online (Sandbox Code Playgroud)
说明:initDateTime为dateTime分配一个新实例,因此,datetime.colonTime之后为null(因为我们想要将其初始化为lazy,如前所述).现在,如果线程A进入该方法,然后调度程序在它运行initDateTime()之前就停止它.线程B现在运行getColonTime(),看到datetime仍为null并初始化它.datetime.colonTime为null,因此执行第二个if块,datetime.colonTime获取StringBuilder的值.如果调度程序停止此行和return语句之间的线程并恢复线程A,则会发生以下情况:由于A在调用initDateTime之前就已停止,因此A现在调用initDateTime(),这将重置 datetime对象,设置datetime.colonTime再次为null.线程A然后将进入第二个if块,但调度程序将在datetime.colonTime = sb.toString()之前中断A; 叫做.作为结论,dateTime.colonTime仍为null.现在调度程序恢复B并且该方法返回null. …
我正在尝试使用流行的jPlayer jQuery插件(http://jplayer.org)编写基于HTML 5的last.fm播放器.播放器在Firefox中运行良好.但是我遇到了一个问题:从last.fm API(http://last.fm/api)我得到一个带文件的网址的播放列表.在请求其中一个时,last.fm执行HTTP 302从play.last.fm重定向到类似" http://s03.last.fm/someurl/128.mp3 "的内容.
看起来html 5标签有相同的原始策略,因为jPlayer无法在Chrome和Chromium中播放该文件.如果jPlayer使用flash解决方案(使用"flash,html"代替"html,flash"),一切正常.
我在我的Ubuntu上安装了额外的编解码器,mp3播放很适合jPlayer演示.
流服务器不支持HEAD请求.我已经尝试执行正常的GET请求,然后尝试获取xmlhttprequest的"Location"标头,但它失败并出现安全性错误.
您可以在https://github.com/tburny/html5-lastfm-player找到我的(概念验证)项目的来源
这个问题有任何提示/解决方案吗?
我有一组用于验证的函数(规则),它将上下文作为参数,并返回"Okay"或带有消息的"Error".基本上这些可以返回Maybe(Haskell)/ Optional(Java)类型.
在下面我想验证一个Fruit(上下文)的属性,如果验证失败则返回错误消息,否则"Okay"/ Nothing.
注意:我更喜欢纯函数式和无状态/不可变的解决方案.实际上它有点像卡塔.
对于我的实验,我使用了Kotlin,但核心问题也适用于任何支持更高阶函数的语言(例如Java和Haskell).您可以在此处找到指向完整源代码的链接,也可以在最底部找到相同的链接.
鉴于具有颜色和重量的Fruit类,加上一些示例规则:
data class Fruit(val color:String, val weight:Int)
fun theFruitIsRed(fruit: Fruit) : Optional<String> =
if (fruit.color == "red") Optional.empty() else Optional.of("Fruit not red")
fun fruitNotTooHeavy(fruit: Fruit) : Optional<String> =
if (fruit.weight < 500) Optional.empty() else Optional.of("Too heavy")
Run Code Online (Sandbox Code Playgroud)
现在我想使用对相应函数的引用来链接规则评估,而不使用a将上下文指定为参数FruitRuleProcessor.处理规则失败时,不应评估任何其他规则.
例如:
fun checkRules(fruit:Fruit) {
var res = FruitRuleProcessor(fruit).check(::theFruitIsNotRed).check(::notAnApple).getResult()
if (!res.isEmpty()) println(res.get())
}
def main(args:Array<String) {
// "Fruit not red": The …Run Code Online (Sandbox Code Playgroud) 如何创建@Country“继承”@ConditionalOnProperty但预定义属性键的自定义 Spring (Boot) 注释?
给定一些共享公共接口的服务
interface WizardService {
void doMagic()
}
Run Code Online (Sandbox Code Playgroud)
以及通过 选择的一组特定于国家/地区的实现@ConditionalOnProperty(name = "country", havingValue = "[iso-code]"),即根据country属性的值选择实现
@ConditionalOnProperty(name = "country", havingValue = "de")
@Service
class WizardServiceGermany {
@Override void doMagic() { System.out.println("Simsalabim!"); }
}
@ConditionalOnProperty(name = "country", havingValue = "en")
@Service
class WizardServiceGreatBritain {
@Override void doMagic() { System.out.println("Wingardium Leviosa!"); }
}
Run Code Online (Sandbox Code Playgroud)
是否可以定义一个自定义 spring 注释,该注释name默认情况下始终将属性设置为“国家/地区”,以便我可以进行@Country注释?例如:
@Country("en")
@Service
class WizardServiceGreatBritain {
@Override void doMagic() { System.out.println("Wingardium Leviosa!"); } …Run Code Online (Sandbox Code Playgroud) java ×6
html5-audio ×2
jplayer ×2
last.fm ×2
date ×1
date-parsing ×1
eclipse ×1
generics ×1
gmail-imap ×1
haskell ×1
http ×1
imap ×1
java-8 ×1
jquery ×1
jvm ×1
kotlin ×1
parsing ×1
scala ×1
spring ×1
spring-boot ×1
thunderbird ×1