是否有任何API或工具可以让我自动将APK上传到Google Play?我想自动将自定义应用程序发布到我的帐户,无需任何手动步骤或图形界面.
我四处搜索但找不到任何用于执行此操作的API(仅限android-publisher,但它不支持发布,尽管它的名称).有没有人解决这个问题,看起来像一个基本功能?
我想知道是否有任何想法的方法将多个InputStream链接到Java(或Scala)中的一个连续的InputStream中.
我需要它是解析我从FTP服务器通过网络加载的平面文件.我想要做的是获取文件[1..N],打开流然后将它们组合成一个流.所以当file1结束时,我想从file2开始读取,依此类推,直到我到达fileN的末尾.
我需要按特定的顺序读取这些文件,数据来自遗留系统,该系统在barches中生成文件,因此一个数据依赖于另一个文件中的数据,但我想将它们作为一个连续流来处理,以简化我的域逻辑接口.
我四处搜索并找到了PipedInputStream,但我并不认为这是我需要的.一个例子会有所帮助.
我有这个问题,我每次都要解决这个问题.我无法使用for comprehension来映射Future中包含的内容.
例:
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
val f = Future( List("A", "B", "C") )
for {
list <- f
e <- list
} yield (e -> 1)
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
error: type mismatch;
found : List[(String, Int)]
required: scala.concurrent.Future[?]
e <- list
^
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,它工作正常:
f.map( _.map( (_ -> 1) ) )
Run Code Online (Sandbox Code Playgroud)
如果我不能通过使用for comprehension来做到这一点,那么它在我的另一个例子中是否适用于我不进行flatmap的原因?我正在使用Scala 2.10.0.
在下面的示例中,我得到了例外 java.util.NoSuchElementException: Future.filter predicate is not satisfied
我想Future( Test2 )在检查if( i == 2 )失败时获得结果.我如何处理过滤器/如果处理组成期货的理解?
下面是一个在Scala REPL中工作的简化示例.
码:
import scala.concurrent.Future
import scala.util.{ Try, Success, Failure }
import scala.concurrent.ExecutionContext.Implicits.global
val f1 = Future( 1 )
val f2 = for {
i <- f1
if( i == 2 )
} yield "Test1"
f2.recover{ case _ => "Test2" }
f2.value
Run Code Online (Sandbox Code Playgroud) 我目前正在教自己Drools Expert/Flow以及GWT.我想使用Drools Flow作为事件/命令总线和业务规则引擎来实现应用程序不同部分之间的松散耦合.
到目前为止,我已经从我的测试用例中获得了Expert和Flow,但是我很难确定如何在Web容器中最好地实现Flow.
我是否应该将所有脚手架放入无状态会话EJB并让每个请求从头开始设置所有内容然后运行流/规则?这似乎浪费了我的资源.我是否可以存储单个知识会话并在Web请求之间共享该会话,同时访问它,该方案是否可以扩展并且是否是线程安全的(我的猜测是否定的)?汇集知识会议是一个好主意吗?
我要求的基本上是否有上述的最佳做法?文档和示例虽然非常好,但在这些特定点上并不清楚.
我确实读过一些关于Drools Grid的东西,不确定这是否能解决我的问题,而且似乎正在开发中.如果我的问题不清楚,请说出来.
BR Magnus
我观察到,当我向Play Framework Form-class添加超过18个参数时,我得到一个很长的(并且对我来说难以理解)编译错误.
这是文件限制吗?我需要在表单帖子中接收多达29个参数.我没有决定参数的设计和数量,因为我正在从开放标准实现协议.
我这样映射:
val registration = Form(mapping(
"client_type" -> nonEmptyText,
"client_id" -> optional(nonEmptyText),
... up to 29 args, all optional(nonEmptyText)
){ (clientType, clientId ...) => RegistrationRequest(clientType, clientId ...) }
{ req => None })
Run Code Online (Sandbox Code Playgroud)
我的策略是以这种方式进行映射,而不是应用/取消应用,并创建一个案例类的层次结构.原因是在Case类中解决了22个参数限制,这是我遇到的第一个看似任意的限制.最多18个args映射工作,之后我得到一个很长的编译错误.
可以在此处找到错误消息(包括太长时间):https://gist.github.com/2928297
我正在寻找关于如何解决这个限制的建议.我知道在Post表单中发送29个参数是不好的设计,但它应该仍然可行.
哈克/变通方法/解决方案
好的,这是我的黑客一起解决方法(写这篇文章比实施花了更长的时间,我在这上面砍了大约30分钟)
我编写了预处理请求参数的函数,并添加了一个组前缀来对某些参数进行分组.然后我使用生成的Map [String,String]并继续使用表单类进行处理,像往常一样进行验证等.这允许我在映射中使用嵌套的case类,并且低于18 params限制.
当心:未来的丑陋代码!我可能不应该像这样显示早期的hacky代码,但我希望它能帮助其他想要解决方法的人.
def preprocessFormParams(prefix:String, replace:String)(implicit request:Request[AnyContent]):Map[String, String] = request.body.asFormUrlEncoded.map( _.filterKeys( _.startsWith(prefix)).map( m => m._1.patch(0, replace, prefix.length) -> m._2.head )).getOrElse(Map.empty)
def unprocessedFormParams(prefixes:Set[String])(implicit request:Request[AnyContent]):Map[String, String] = request.body.asFormUrlEncoded.map( _.filterKeys( !prefixes.contains(_) ).map( m => m._1 -> m._2.head )).getOrElse(Map.empty) …Run Code Online (Sandbox Code Playgroud) 我的目标是从 API 请求交易并将其存储到数据库中。响应是分页的,我想读取每一页并批量存储交易。
因此,对于一个请求/响应周期,我希望在获取下一批之前处理结果并将其存储到数据库中。
我如何在 fp-ts 中以惯用的方式执行此操作?我注入实际的 HTTP 获取调用,(url:string, init:RequestInit) => TE.TaskEither<Error, Response>以保持其可测试性。
到目前为止,我已经测试了 RxJS 和 fp-ts,即使我让它工作也有点复杂。
确实尝试了递归函数和生成器,但我没有成功地对其进行延迟评估。
是否有任何现有的 fp-ts 示例显示了一个延迟评估的流,其中每个元素都依赖于前一个元素?
有没有办法在sbt中下载并打包所有提供的依赖项在一个jar中,我可以在启动时将其添加到应用程序的类路径中?
我正在使用sbt-assembly,但生成的jar对于我的口味来说太大了:16 Mb,包括Scala-lang,Akka和Spray.我计划构建大约10-15个小型独立服务,每个服务都是一个jar,并且不想在我创建新版本部署时继续将16 Mb文件上传到s3(目前是我的repo).
当我排除Scala语言和上面提到的其他罐子时,我的装配罐会下降到大约1 Mb.所以我想要实现的是有一种方法来提供只有提供的依赖项和scala语言的胖jar,所以当我启动它时,我可以将它添加到我的服务的类路径中.
我可以从我的常春藤缓存中获取每个库,手动部署它们并将它们添加到类路径中,但基本上我希望每当我更改版本并上传它时都能够构建一个新的组装jar.
我想到了另一个项目依赖的单独项目,包含我提供的所有罐子,但有更简单的方法吗?
根据要求进一步澄清:
我的更大目标是自动部署到云服务器.我首先使用sbt-assembly在本地构建,例如生成service-a.jar,service-b.jar等.然后我将这些同步到s3,所以如果只更新service-a.jar,那么只会将该文件上传到S3.接下来,我指示我的ec2服务器下载更改的文件并重新启动任何新服务.
当使用sbt-assembly时,我会得到一个包含所有依赖项的胖jar(就像onejar一样).然而,将该jar上传到s3需要很长时间,而16Mb中的15Mb只是常见的依赖项.所以我的想法是将所有这些共享依赖项放入一个很少更改的独立jar中,并在启动时提供类路径上的那些java -cp "deps.jar;service-a.jar" org.myapp.StartApp.
我只是不想亲自手动管理这些普通的罐子.我想利用我现有的构建并使用sbt/ivy依赖管理系统为我下载正确的文件,并准备一个我可以单独分发的软件包.
到目前为止,我提出的所有解决方案到目前为止都显得过于复杂,尤其是当我仍然需要能够运行测试等时(因此在sbt构建文件中没有"提供").其他建议是受欢迎的.
我无法让Akka调度方法在Heroku中正常工作.它在本地工作正常,并打印出"Heartbeat"到日志.
这是有问题的文件:https://github.com/magnusart/actor-test/blob/master/app/Global.scala和下面的代码段.
override def onStart(app: Application) {
Logger.debug("Starting application")
Akka.system(app).scheduler.schedule(2 seconds, 10 seconds) {
Logger.debug("Heartbeat")
}
}
Run Code Online (Sandbox Code Playgroud)
完整的应用程序在此处(为此目的而隔离,也在actor-test.herokuapp.com上). https://github.com/magnusart/actor-test
启动后发生的事情是我Starting application在日志中看到的,之后我没有看到任何进一步的信息:
2012-05-26T16:29:40+00:00 heroku[web.1]: Starting process with command `target/start -Dhttp.port=43943 -Xmx384m -Xss512k -XX:+UseCompressedOops`
2012-05-26T16:29:41+00:00 app[web.1]: Play server process ID is 3
2012-05-26T16:29:42+00:00 app[web.1]: [debug] application - Starting application
2012-05-26T16:29:42+00:00 app[web.1]: [info] play - Starting application default Akka system.
2012-05-26T16:29:42+00:00 app[web.1]: [info] play - Application started (Prod)
2012-05-26T16:29:42+00:00 app[web.1]: [info] play - Listening for HTTP on …Run Code Online (Sandbox Code Playgroud) 鉴于我可以创建一个具有自我类型的特征并限制实现并提供对这样的成员的访问:
trait A { def a:String }
trait B { def b:String }
trait C {
self: A with B =>
lazy val c:String = a+b
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能将这个概念带入模式匹配.我知道下面的方法不起作用,但是它只是缺少一些语法糖还是有限制可以防止这种情况发生?
case class AB( a:String, b:String ) extends A with B
val ab = AB("a","b")
ab match {
case ab@(A & B) => ab.a + ab.b
}
Run Code Online (Sandbox Code Playgroud)
这些不那么优雅的版本有什么用呢
ab match {
case a:A => a match {
case b:B => a.a + b.b
}
}
def checkInstanceOf(obj:AnyRef) =
obj.isInstanceOf[A] && obj.isInstanceOf[B]
ab match …Run Code Online (Sandbox Code Playgroud) scala ×6
future ×2
akka ×1
android ×1
api ×1
apk ×1
architecture ×1
build ×1
drools ×1
drools-flow ×1
filter ×1
fp-ts ×1
google-play ×1
heroku ×1
inputstream ×1
io ×1
java ×1
publish ×1
recursion ×1
sbt ×1
self-type ×1
stream ×1
typescript ×1