小编Dav*_*ave的帖子

Git工作流程 - 更改分支和慢速重新编译

我在一个大型Scala项目上工作,我们使用Git进行版本控制.我的工作流程是在我自己的分支中处理新功能并在需要时切换.各种版本的代码都在自己的分支中.一切都很标准.

如果我必须修复某个版本的代码中的错误,我将切换到正确的分支,修复错误,提交然后切换回我所在的位置.

问题是虽然git在我转到另一个分支后立即进行,我必须重新编译代码.这需要几分钟.然后修复bug,切换回我自己的分支并再做一次重新编译,这需要几分钟.这似乎打败了Git这么快的目的.

有人遇到过这种情况么?有没有办法解决它.我确定这不是Scala特定的问题(尽管Scala在编译时速度很慢).

3年多后更新

在过去的几年里,我一直在使用@djs的答案(git-new-workdir).它对我来说非常好用.我有一个主目录和几个其他目录(如生产,下一个发布等),当我需要在那里工作时,我切换到.开销非常小,这意味着您可以快速切换到说,生产,测试某些东西,然后切换回您正在处理的内容.

更新7年以后

看起来git-worktree是git-new-workdir的替代品.使用:

cd ~/git/my-repo
git worktree add ~/git/my-linked-repo
Run Code Online (Sandbox Code Playgroud)

git branch scala recompile git-worktree

22
推荐指数
2
解决办法
1911
查看次数

java web start替代方案

我们正在寻找Java web start的替代方案,它可以有效地执行相同的操作,只是更好地实现.我们遇到了大麻烦.我们有一些XP桌面办公室,所有办公室都略有不同,到目前为止只有少数办公室没有认真调整.问题与不能很好地使用代理设置(使用Java控制面板中的直接连接允许它工作),拒绝在设置"-Xmx"之类的参数时运行但在不运行时运行正常(直到它运行内存不足)和其他我们无法解决的奇怪问题.

Web开始工作的方式正是我们想要的,即连接到具有应用程序的服务器,下载任何已更改的内容,保留jar缓存等.其他团队在这里使用'clickonce'作为他们的C#应用​​程序,它确实有效地同样的事情,但似乎没那么麻烦.

我确信我们并不是唯一遇到这种情况的人,但搜索并没有真正显示任何替代方案.我们已经考虑编写一个存根本地应用程序,它本质上只是一个URLClassLoader,它可以动态地通过网络加载我们的应用程序,但不幸的是,它与其他办公室相比太慢了.有人有主意吗?

谢谢

更新

如果有人对最终发生的事情感到好奇,我们在一个月左右的时间里给了webstart但是继续遇到问题所以我们实现了自己的版本.它基本上只是一个存根,它有一个指向Web服务器的URL类加载器.这是<200行代码,它已经运行了好几个月.这不是理想的,但在有人改进webstart之前我们会坚持下去.

更新2018年

所以,几年后,我正在研究一个同样问题的新项目.这次我们使用的是getdown,而不是编写我们自己的webstart实现.我们发现这是对网络开始的巨大改进,它对我们来说非常好.

java deployment urlclassloader java-web-start

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

Scala:XML解析命名空间属性

在下面的示例中,如果具有名称空间前缀,如何访问属性"id"?

scala> val ns = <foo id="bar"></foo>    
ns: scala.xml.Elem = <foo id="bar"></foo>

scala> ns \ "@id"                   
res15: scala.xml.NodeSeq = bar
Run Code Online (Sandbox Code Playgroud)

以上工作正常.根据下面的文档应该工作但它没有.

scala> val ns = <foo xsi:id="bar"></foo>
ns: scala.xml.Elem = <foo xsi:id="bar"></foo>

scala> ns \ "@{xsi}id"                   
res16: scala.xml.NodeSeq = NodeSeq()
Run Code Online (Sandbox Code Playgroud)

全部在Scala 2.8.0.final上

干杯

答: 似乎xml中没有xlmns你无法访问该属性.因此,对于上面的示例,它需要位于xlm命名空间内.例如:

scala> val xml = <parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <foo xsi:id="bar"></foo></parent>
xml: scala.xml.Elem = <parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <foo xsi:id="bar"></foo></parent>

scala> xml \ "foo" \ "@{http://www.w3.org/2001/XMLSchema-instance}id"
res3: scala.xml.NodeSeq = bar
Run Code Online (Sandbox Code Playgroud)

xml scala

13
推荐指数
1
解决办法
4474
查看次数

慢斯卡拉断言

我们最近一直在分析我们的代码,我们遇到了一些恼人的热点.他们是在形式

assert(a == b, a + " is not equal to " + b)
Run Code Online (Sandbox Code Playgroud)

因为其中一些断言可能在代码中被称为字符串concat开始加起来的次数很多.assert定义为:

def assert(assumption : Boolean, message : Any) = ....
Run Code Online (Sandbox Code Playgroud)

为什么不定义为:

def assert(assumption : Boolean, message : => Any) = ....
Run Code Online (Sandbox Code Playgroud)

这样它会懒洋洋地评估.鉴于它没有定义,是否有一种内联方式调用断言与一个懒惰评估的消息参数?

谢谢

performance profiling assert scala preconditions

12
推荐指数
2
解决办法
1519
查看次数

派生的Scala案例类,具有相同的成员变量作为基础

这样做有更好的方法吗?

scala> case class A(x : Int)
defined class A

scala> case class B(override val x : Int, y : Int) extends A(x)
defined class B
Run Code Online (Sandbox Code Playgroud)

我用B扩展A并添加一个额外的成员变量.不要override val在x之前写字会很好.

scala

9
推荐指数
1
解决办法
5448
查看次数

更好地检查Scala中的匹配

scala> class A
defined class A

scala> class B
defined class B

scala> val a: A = new A
a: A = A@551510e8

scala> a match {
     | case _: B => println("unlikely")
     | case _ => println("no match")
     | }
no match
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,编译器不应该告诉我其中一个案例永远不能匹配吗?一个稍微复杂的例子最近引起了我的注意,导致了一个应该被编译器捕获的不必要的bug.

编辑:

只是为了更清楚这个问题.由于某种原因,我无法看到Scala中这是不可能的吗?(我可以理解这些类型是否使用泛型和类型擦除导致问题,但这看起来非常直接.)如果这不是不可能的,是否有正当理由这不是Scala?如果不是什么时候加入?;)

compiler-construction scala pattern-matching typechecking

9
推荐指数
1
解决办法
1024
查看次数

Java8中的Kerberos/SPNEGO服务器端身份验证更改

我正在尝试将应用程序从使用java7u51更改为java8u40,但SSO身份验证失败.客户端没有更改,它使用JNA Windows调用(Secur32.INSTANCE.InitializeSecurityContext)但服务器不再接受票证.服务器代码没有改变,但它使用的标准java库似乎已经改变了.服务器在linux下运行.

服务器代码如下.在我的Windows机器上,我写了一个包含票证的文件,以便我可以运行下面的代码进行测试.我有一个非常高的clockkew设置,以便我可以测试票.我已经使用java7u51编写了客户票,以防万一,但没有帮助.当我在java7中运行以下服务器代码时,相同的票可以正常工作.

失败的位是isEstablished返回false.没有有用的调试信息.isEstablished返回false意味着需要更多轮次,但并非如此,我认为不应该如此.

有谁知道这个现在会在java8中失败的原因?这不仅仅是更新40的问题,它在早期的Java 8版本中失败了.

谢谢

Properties.setProp("sun.security.krb5.debug", "true")
Properties.setProp("java.security.krb5.realm", "xxxx")
Properties.setProp("java.security.krb5.kdc", "xxxx")
Properties.setProp("java.security.krb5.conf", url(getClass, "/krb5.conf.auth").toExternalForm)
Properties.setProp("java.security.auth.login.config", url(getClass, "/jaas.conf.auth").toExternalForm)
Properties.setProp("javax.security.auth.useSubjectCredsOnly", "true")

val loginCtx: LoginContext = new LoginContext("Server", new LoginCallbackHandler(password))
loginCtx.login()
val subject = loginCtx.getSubject
val ticket = StringIO.readStringFromFile(new File("/tmp/ticket"))
val decoder: BASE64Decoder = new BASE64Decoder
val serviceTicket = decoder.decodeBuffer(ticket)

val user = Subject.doAs(subject, new PrivilegedAction[Option[String]]() {
  def run = {
    try {
      val manager = GSSManager.getInstance
      val context: GSSContext = manager.createContext(null: GSSCredential)
      val arrayOfBytes …
Run Code Online (Sandbox Code Playgroud)

java kerberos spnego java-8

9
推荐指数
1
解决办法
1895
查看次数

Java鼠标在屏幕上的任何位置移动

我确信这是可能的,但我所有的搜索都是空白的.

在Java中,是否可以在Java应用程序之外注册鼠标运动事件?因此,如果鼠标指针移动到屏幕上的任何位置,我会收到回电.轮询可以实现近似,MouseInfo.getPointerInfo但必须有更好的方法.

谢谢

解释用例:它仅用于宠物项目,但基本上在鼠标触及屏幕边缘时触发事件.我还在想,如果你试图超越屏幕的边缘,可能会触发不同的事件.为此,我认为鼠标运动监听器可能更合适.

java swing mouseevent

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

Scala 2.9中的案例类和代理行为

在将我们的代码迁移到Scala 2.9时,我们发现大量的代码无法正常工作并且无声地失败.我们将其跟踪到扩展代理不相等的案例类.在我们的代码中,我们不直接扩展Proxy,我们只是在扩展Proxy的库中扩展类.

任何帮助将不胜感激.

在2.8

scala> case class Test(a:String) extends Proxy {
     |   def self = a
     | }
defined class Test

scala> 

scala> val label = new Test("bla")
label: Test = bla

scala> println(label == label) // this is TRUE
true

scala> println(label == "bla")
true
Run Code Online (Sandbox Code Playgroud)

在2.9

scala> case class Test(a:String) extends Proxy {
     |   def self = a
     | }
defined class Test

scala> 

scala> val label = new Test("bla")
label: Test = bla

scala> println(label == label) // …
Run Code Online (Sandbox Code Playgroud)

scala case-class scala-2.8 scala-2.9

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

Scala 2.8 TreeMap和自定义排序

我正在从scala 2.7切换到scala 2.8并使用订购.它看起来很直接,但我想知道我可以减少一点点冗长.例如:

scala> case class A(i: Int)
defined class A
scala> object A extends Ordering[A] { def compare(o1: A, o2: A) = o1.i - o2.i}
defined module A
Run Code Online (Sandbox Code Playgroud)

如果我然后尝试创建一个TreeMap,我会收到一个错误

scala> new collection.immutable.TreeMap[A, String]()
<console>:10: error: could not find implicit value for parameter ordering: Ordering[A]
       new collection.immutable.TreeMap[A, String]()
       ^
Run Code Online (Sandbox Code Playgroud)

但是,如果我明确指定对象A作为排序它可以正常工作.

scala> new collection.immutable.TreeMap[A, String]()(A)
res34: scala.collection.immutable.TreeMap[A,String] = Map()
Run Code Online (Sandbox Code Playgroud)

我是否总是必须明确指定顺序或是否有更短的格式?

谢谢

scala treemap scala-2.8

6
推荐指数
3
解决办法
8879
查看次数