小编ale*_*bit的帖子

如何创建一个可以通过方法调用稍后接收元素的Source?

我想Source在它上面创建一个和后来的推送元素,如:

val src = ... // create the Source here
// and then, do something like this
pushElement(x1, src)
pushElement(x2, src)
Run Code Online (Sandbox Code Playgroud)

建议的方法是什么?

谢谢!

scala akka akka-stream akka-http

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

具有功能编程的企业模式

有没有关于企业架构模式(la Fowler)的(集中)信息的良好来源,可能有示例和用例以及相当多的实用信息?例如,我已经看到GoF的许多设计模式都在一些SO帖子和其他网站上很快解释,以及与它们相关的实用信息.我要求从面向企业应用程序的更多功能范例中获取类似资源.

谢谢.

enterprise design-patterns functional-programming

22
推荐指数
1
解决办法
4195
查看次数

意外的特质行为

给出一个简单的代数数据类型Parent:

scala> sealed trait Parent
defined trait Parent

scala> case object Boy extends Parent
defined object Boy

scala> case object Girl extends Parent
defined object Girl
Run Code Online (Sandbox Code Playgroud)

我定义了一个特征:

scala> trait HasGirl { 
     |   val x: Girl.type
     | }
defined trait HasGirl
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个实现的case类HasGirl,但提供了一个xBoy.type.

scala> case class Thing(x: Boy.type) extends HasGirl
defined class Thing
Run Code Online (Sandbox Code Playgroud)

我曾预料到编译时错误,因为我没有看到x类型是如何Boy.type符合的val x: Girl.type.

这里发生了什么?

scala traits

18
推荐指数
1
解决办法
248
查看次数

应该从API返回CQRS命令的内容?

据我所知,在通过RESTful HTTP API公开的面向CQRS的API中,命令和查询通过HTTP谓词表示,命令是异步的并且通常返回202 Accepted,而查询获取您需要的信息.有人问我以下内容:假设他们想要更改某些信息,他们必须发送命令然后查询以获得结果状态,为什么要强制客户端发出两个HTTP请求,只需返回他们想要的内容即可单个HTTP请求中的命令的HTTP响应?

rest http cqrs

13
推荐指数
3
解决办法
3624
查看次数

如何在EMR实例中正确提供spark-redshift的凭据?

我们尝试使用spark-redshift项目,遵循提供凭据的第3条建议.即:

IAM实例配置文件:如果您在EC2上运行并使用IAM和实例配置文件对S3进行身份验证,则必须配置temporary_aws_access_key_id,temporary_aws_secret_access_key和temporary_aws_session_token配置属性以指向通过AWS Security Token Service创建的临时密钥.然后,这些临时密钥将通过LOAD和UNLOAD命令传递给Redshift.

我们的Spark应用程序从EMR集群运行.出于这个目的,我们尝试从此节点的内部实例获取临时凭证,getSessionToken如下所示:

val stsClient = new AWSSecurityTokenServiceClient(new InstanceProfileCredentialsProvider())        
val getSessionTokenRequest = new GetSessionTokenRequest()
val sessionTokenResult =  stsClient.getSessionToken(getSessionTokenRequest);
val sessionCredentials = sessionTokenResult.getCredentials()
Run Code Online (Sandbox Code Playgroud)

403 Access Denied即使策略sts:getSessionToken适用于EMR实例的角色,这也会引发.

然后我们尝试了以下两种选择.首先,使用AssumeRole政策:

val p = new STSAssumeRoleSessionCredentialsProvider("arn:aws:iam::123456798123:role/My_EMR_Role", "session_name")
val credentials: AWSSessionCredentials = p.getCredentials
val token = credentials.getSessionToken
Run Code Online (Sandbox Code Playgroud)

第二,投射结果InstanceProfileCredentialsProvider:

val provider = new InstanceProfileCredentialsProvider()
val credentials: AWSSessionCredentials = provider.getCredentials.asInstanceOf[AWSSessionCredentials]
val token = credentials.getSessionToken
Run Code Online (Sandbox Code Playgroud)

他们都工作,但这是预期的方式吗?是否有关于投射结果或添加AssumeRole策略的错误?

谢谢!

amazon-web-services emr amazon-redshift apache-spark aws-sdk

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

全球onStart on Play Framework 2.3.7无效?

对不起,如果这个问题变得愚蠢,但我根本找不到我的错误,我在SO和其他网站上已经检查了很多帖子.我使用Java设置了一个Play 2.3.7项目.我在app目录下的common包中创建了一个Global.java文件.在该文件中我覆盖onStart(和其他钩子),但我没有让它们工作.他们根本就不执行.这是Global.java文件:

package common;

import play.Application;
import play.GlobalSettings;
import play.Logger;

public class Global extends GlobalSettings {

    @Override
    public void beforeStart(Application application) {
        Logger.error("good bye cruel world");
        super.beforeStart(application);
        throw new RuntimeException("WTF");
    }

    @Override
    public void onStart(Application application) {
        Logger.error("good bye cruel world");
        super.onStart(application);
        throw new RuntimeException("WTF");
    }

    @Override
    public void onStop(Application application) {
        Logger.error("good bye cruel world");
        super.onStop(application);
        throw new RuntimeException("WTF");
    }
}
Run Code Online (Sandbox Code Playgroud)

在application.conf中,这是相关部分,默认情况下注释:

# Define the common.Global object class for this application.
# Default to common.Global in the root package. …
Run Code Online (Sandbox Code Playgroud)

java scala sbt playframework playframework-2.3

8
推荐指数
2
解决办法
3621
查看次数

我可以为某些演员的自动名称添加前缀吗?

我有一些Akka项目,我有以下场景:我有很多演员,我希望有一个人类可读的名字,但与此同时,我不希望自己为每个演员生成唯一的名字.那么,有没有办法告诉道具或演员系统用自动生成的名称作为特定字符串的前缀?

例如,我有一些演员大师,他创造了一些类型为工人的孩子.我希望每个孩子的名字都以"worker-"开头,所以我可以在日志中轻松跟随.另外,如果可能的话,我想知道是否还有其他方法可以更精细的方式为演员命名.

提前致谢.

编辑:这是我想要的一个例子

目前,您有两种选择,我可以看到:

1)使用自动生成的名称创建actor

ActorRef myActor = mySystem.actorOf(MyActor.props());
Run Code Online (Sandbox Code Playgroud)

2)使用用户指定的名称创建actor

ActorRef myActor = mySystem.actorOf( MyActor.props(), MyNamingAPI.getSomeNewName() );
Run Code Online (Sandbox Code Playgroud)

1)很糟糕,因为在日志中我不知道谁是谁.2)是坏的,因为我必须编写/使用我自己的API,因为如果其他人使用我的actor项目作为子系统,他将不得不小心不重复名称或使用不同的actor系统.所以,它不便携.

我想如果Akka支持的话:

ActorRef myActor = mySystem.actorOf(MyActor.props(), "my-actor-%");
Run Code Online (Sandbox Code Playgroud)

其中%符号表示自动生成的ID.

java scala actor akka

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

是否有任何技巧可以在定义的同一文件中使用宏?

我有以下代码:

object Macros {

  import scala.language.experimental.macros
  import scala.reflect.macros.blackbox

  def hello(): Unit = macro hello_impl

  def hello_impl(c: blackbox.Context)(): c.Expr[Unit] = {
    import c.universe._
    reify {
      println("Hello World!")
    }
  }
}


object Main {

  def main(args: Array[String]): Unit = {
    Macros.hello()
  }

}
Run Code Online (Sandbox Code Playgroud)

它抛出以下编译错误:

Error:(21, 17) macro implementation not found: hello
(the most common reason for that is that you cannot use macro implementations in the same compilation run that defines them)
    Macros.hello()
                ^
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法"欺骗"编译器,以便在定义它们的同一个文件中使用宏扩展?我的动机如下:我喜欢用Scala编写代码,最近我在网上判断Codeforces中提交了一些问题,而且一些Scala结构变得很慢.所以,我想创建一些宏扩展,以便快速执行这些构造.但我不能提交多个文件.

谢谢!

scala scala-macros scala-2.11

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

(num + mod)%mod语句的需要是什么?

ans = (ans + mod) % mod该计划中声明的必要性是什么?

假设mod = 10^9+7.该功能计算a到的功率b下模操作为O(log(n))的复杂性:

long long power(long long a, long long b)
{
    if (b == 0) 
        return 1ll;
    long long ans = power(a, b/2);
    ans = (ans * ans) % mod;
    ans = (ans + mod) % mod;
    if(b % 2 == 1)
        ans = (ans * a) % mod;
    ans = (ans + mod) % mod;
    return ans;
}
Run Code Online (Sandbox Code Playgroud)

c c++ algorithm math

6
推荐指数
1
解决办法
238
查看次数

如何使用commons-beanutils对beanutils依赖项进行重复数据删除?

我有一个具有多个依赖项的项目,最终导致依赖于以下各项(我从sbt-dependency-graph plugin中获得了这些依赖项):

  • commons-beanutils:commons-beanutils:1.7.0
  • commons-beanutils:commons-beanutils-core:1.8.0

因此,当我尝试使用sbt-assembly构建胖JAR时,它将失败,并出现以下重复数据删除错误:

[error] deduplicate: different file contents found in the following:
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils/jars/someuser-beanutils-1.7.0.jar:org/apache/commons/beanutils/BasicDynaBean.class
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar:org/apache/commons/beanutils/BasicDynaBean.class
Run Code Online (Sandbox Code Playgroud)

由于我需要两个依赖项,因此我尝试使用以下规则对其中之一进行着色:

ShadeRule.rename("org.apache.commons.beanutils.**" -> "shadedstuff.beanutils.@1").inLibrary("commons-beanutils" % "commons-beanutils" % "1.7.0").inAll
Run Code Online (Sandbox Code Playgroud)

但是然后我得到以下错误:

[error] deduplicate: different file contents found in the following:
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils/jars/someuser-beanutils-1.7.0.jar:shadedstuff/beanutils/BasicDynaBean.class
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar:shadedstuff/beanutils/BasicDynaBean.class
Run Code Online (Sandbox Code Playgroud)

好像对两个工件都应用了阴影处理。如何遮蔽特定的伪影?

dependencies sbt maven-shade-plugin sbt-assembly

6
推荐指数
1
解决办法
972
查看次数