小编Mik*_*378的帖子

Scalac行为 - 无用的扫描?

在Martin Odersky的"Scala编程"一书中,它解释了为什么scalac看起来很慢的原因(第114页):

原因是每次编译器启动时,它都会花时间扫描jar文件的内容并进行其他初始工作,甚至在查看您提交给它的新源文件之前.

每次编译开始时扫描jar文件的编译好处是什么?实际上,如果大多数开发人员使用FSC(快速Scala编译器)来避免这种默认行为,为什么scala的作者没有删除这些扫描?

为什么javac表现不一样?

java compiler-construction scala compilation

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

处理对象字段验证的最佳方法=>要么/尝试(scala 2.10)/ ValidationNEL(scalaz)

让我们假设一个使用构建器模式构造的对象.

此构建器模式将包含一个build侧重于字段验证然后转换为目标类型的方法.

可以使用以下方式实现此验证:

  • Either[FailureObject, TargetObject] 类型
  • Try[TargetObject] (Scala 2.10的新功能)
  • Validation[FailureObject, TargetObject]或者ValidationNEL[FailureObject, TargetObject]来自scalaz图书馆

我读到Validation过度Either类型的一个主要优点是Validation可以"开箱即用"累积故障.

但那"新" Try方式呢?我注意到,Try有"一元"的方法开箱也是一样的map,flatMap等...什么是真正与任何一种类型的不帮助失踪Projection.

因此,我想象每个字段验证方法返回a Try[FieldType],更确切地说,在任何失败的情况下,a Try[SpecificFieldExceptionType]; 这个嵌套的包含String消息字段和rootCause字段,可以在整个build方法中累积.

使用Scala 2.10,可以或应该Try练习替换scalaz验证库以进行简单验证,例如构建器模式涉及吗?

**编辑****

通过阅读Try源代码,它听起来Try不能累积多个异常,因此面向失败快速.甚至Try.flatMap返回可能的先前失败,因此没有积累的概念:

def flatMap[U](f: T => Try[U]): Try[U] = this.asInstanceOf[Try[U]]
Run Code Online (Sandbox Code Playgroud)

相反ValidationNEL,处理累积功能.

任何确认?

scala exception-handling builder-pattern scalaz7

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

Bootstrap 3 /显示模式不能与javascript方式一起使用

我使用Bootstrap 3.0 的Modal功能.

我有这个代码:

<a data-toggle="modal" href="/myNestedContent" data-target="#myModal">
  Open the modal containing the content
</a>

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
//nested content will be inserted here
</div>
Run Code Online (Sandbox Code Playgroud)

当我点击锚点(链接)时,整个工作=>我看到带有内容的模态.

但是,当我使用Javascript方式(而不是链接)来显示这样的模态:

$('#myModal').modal('show'); 
Run Code Online (Sandbox Code Playgroud)

我只看到淡化效果而没有显示模态...

当我开始点击链接,那么调用javascript,它的工作原理.(副作用?)

当我以javascript方式开始时,即使链接仅显示没有模态的淡入淡出效果.

可能是..来自modalJavascript方法的错误?

有关信息,我使用的脚本的声明顺序正确:

<script src="//code.jquery.com/jquery.js"></script>
<script src="javascripts/jquery.form.min.js"></script> 
<script src="javascripts/bootstrap.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

javascript jquery modal-dialog twitter-bootstrap twitter-bootstrap-3

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

当Angular指令的名称真的很重要时

我刚刚从Angular遇到一个奇怪的行为:

这是场景:

在注册表单中,我想检查电子邮件的唯一性(通过http调用服务器).
因此,我创建了一个名为emailUnique其客户端代码的指令:

<form name="form" novalidate>
<!-- some other fields -->
<input name="email" type="email" ng-model="user.email" required email-unique/>
</form>
Run Code Online (Sandbox Code Playgroud)

对于帖子的其余部分,让我们假设用户正在输入:michael,这显然不是有效的邮件.

让我们看一下我的指令代码的有趣部分,触发我感兴趣的行为:

angular.module('directives.emailUnique', [])
    .directive('emailUnique', function () {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function (scope, el, attrs, ctrl) {
                ctrl.$parsers.push(function (viewValue) {
                    console.log(viewValue);   //What do you expect here for viewValue? answer below
                });
            }
        };
    });
Run Code Online (Sandbox Code Playgroud)

在给出答案之前,乍一看,答案在逻辑上是:

undefined 
Run Code Online (Sandbox Code Playgroud)

为什么?因为:

  • 我们精确的type="email"属性而不是简单type="text"
  • michael 不是有效的邮件.
  • Angular的编译器应该符合经典的HTML行为.

经过测试,答案undefined如预期.我的完整指令的逻辑将基于此,整个工作正常.

现在,让我们重命名指令:emailUnique成为somethingUnique.
客户现在: …

javascript forms html5 angularjs angularjs-directive

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

Play Framework 2.X和阻止数据库调用

我有点困惑.

文档:

播放默认线程池 - 这是默认线程池,其中执行Play Framework中的所有应用程序代码,不包括一些迭代代码.它是Akka调度程序,可以通过配置Akka进行配置,如下所述.默认情况下,每个处理器有一个线程.

是否造福包裹在阻塞数据库调用Future,在调用Future本身被由包裹async控制器(它返回),为了让默认线程池处理其他用户的请求?

它只是将阻塞代码移动到另一个线程(来自专用的ExecutionContext)中,但保留Action未阻塞.

我遇到过这篇文章,但我对给出的答案并不满意.
实际上,如果我让数据库在默认线程池中调用阻塞,那么在此期间它是否可能阻止处理不依赖于数据库的其他用户请求?

注意:我的数据库(Neo4j)没有异步驱动程序.

asynchronous scala nonblocking playframework playframework-2.3

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

将iOS键盘上的"完成"按钮翻译成其他语言

使用Cordova/Phonegap,翻译iOS虚拟键盘上的"完成"按钮的最简单方法是什么?

例如,我的iPhone配置为使用法语.
但是,该按钮仍显示"完成"按钮,而不是经典的法语改编词:"确定".

translation ios cordova

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

桥模式 - Java编译的好处?

设计模式 - 可重用面向对象软件的元素书中说:

在只有一个实现(一对一)的情况下,创建一个抽象的实现者类是没有必要的.这是桥模式的退化情况; Abstraction和Implementor之间存在一对一的关系.然而,当类的实现中的更改不得影响其现有客户端时,这种分离仍然有用 - 即它们不应该被重新编译,只需重新链接.

我对编译时间的好处表示怀疑,因为我无法想象Java中的一个案例,即实现中的更改会重新编译其超类(在本例中为abstract).

例如,如果我们有X扩展Y并且客户端执行:

Y y = new X();  
Run Code Online (Sandbox Code Playgroud)

X中的更改并不意味着重新编译Y(当然,如果我们不想更改X的方法签名)

使用Bridge Pattern时完全相同:

YAbstraction yabstraction = new YRefinedAbstraction(new XImplementor());
Run Code Online (Sandbox Code Playgroud)

XImplementor中的更改并不意味着重新编译YAbstraction.

因此,根据我的说法,这种好处不会发生在Java中,并且需要一对一=>无桥模式.

也许子类强制超类的更改要在其他语言中重新编译?喜欢SmallTalk和C++?

你有什么看法?

java design-patterns bridge compilation

5
推荐指数
1
解决办法
544
查看次数

比较组按 VS 过分区按

假设一张表CAR有两列CAR_ID (int)VERSION (int).

我想检索每辆车的最大版本。

所以有两种解决方案(至少):

select car_id, max(version) as max_version 
  from car  
 group by car_id;
Run Code Online (Sandbox Code Playgroud)

或者 :

select car_id, max_version 
  from  ( select car_id, version
               , max(version) over (partition by car_id) as max_version
            from car
                ) max_ver  
 where max_ver.version = max_ver.max_version
Run Code Online (Sandbox Code Playgroud)

这两个查询的性能相似吗?

sql oracle database-performance

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

使用DDD的域服务和应用程序服务的命名约定

在DDD方法中,命名域服务组件和应用程序服务组件的最佳实践是什么?

例如,我应该在我的应用程序层中有一个名为RoomReservationService的服务,并且在我的域层中还有一个名为RoomReservationService的服务; 第一次委托给对方?

实际上,当一个应用程序服务没有收集很多域服务时,这意味着我找不到它们之间的不同名称,我如何命名它而不引起任何混淆?

java domain-driven-design naming-conventions

5
推荐指数
1
解决办法
1887
查看次数

WebSocket 推送数据库更新

网络上大多数涉及 WebSocket 的文章都是关于内存聊天的。
我对不太即时的聊天感兴趣,这种聊天是持久的,就像博客帖子的评论一样。

我有一个由两台服务器组成的集群,处理客户端请求。
我想知道处理将数据库更新推送到相应客户端的最佳策略是什么。

当我使用 Heroku 来处理这个集群(由 2 个网络测功机组成)时,我显然阅读了本教程,旨在构建一个在所有客户端之间共享的聊天室。

它使用 Redis 来集中传入的消息;每个服务器侦听新消息以通过 websocket 连接传播到 Web 客户端。

我的用例的不同之处在于我有一个 Neo4j 数据库,将任何客户端写入的每条消息持久保存到其中。
我的目标是通知特定房间的每个客户,客户刚刚保留了新消息/评论。

使用与上面链接的教程类似的架构,如何仅过滤新消息以传播给用户?有没有一种简单有效的方法来告诉Redis:

“(WebSocket 说)当我的客户端启动 websocket 连接时,我会注意查询所有持久消息并将它们发送到客户端,但是我希望你(Redis)向我提供所有新消息,但我没有发送给客户,以便我能够提供它们。”

如何防止Redis在每次建立websocket连接时发布整个会话?这会导致重复,因为数据库查询此时已经提供了现有内容。

architecture heroku websocket redis playframework-2.2

5
推荐指数
1
解决办法
7283
查看次数