小编dav*_*000的帖子

在Scala actor中访问共享资源的正确方法

在Java中,可以同步访问多线程环境中所需的共享资源的方法或块.

我想知道"Scala Actors"这样做的方式是如何工作的.

假设我有一个java.sql.Connection对象的连接池,我希望提供对它的线程安全访问.我将它实现为接收消息并向发送者发回连接的actor.

似乎有三种方法可以做到这一点:

  1. 使用未来
  2. 使用 !?
  3. 有需要的班级Connection也是演员

码:

sealed abstract class ConnectionPoolMessage
case class NewConnection extends ConnectionPoolMessage
case class CloseConnection(c:Connection) extends ConnectionPoolMessage

class ConnectionPool extends Actor {
  def act() {
    while (true) {
      receive() {
        case NewConnection => sender ! getConnectionFromPool
        case CloseConnection(conn) => returnConnection(conn)
      }
    }
  }
}

// Here, my "do stuff" method is all in one place, and I block waiting
// on the Future from the pool; however this could …
Run Code Online (Sandbox Code Playgroud)

concurrency scala actor

10
推荐指数
1
解决办法
1629
查看次数

不变性和共享参考 - 如何协调?

考虑这个简化的应用领域:

  • 刑事调查数据库
  • Person 是参与调查的任何人
  • Report 是调查的一部分信息
  • A Report引用主要Person(调查的主题)
  • A Report具有次要相关的共犯(并且在其他调查或报告中肯定是主要的
  • 这些类具有用于将它们存储在数据库中的ID,因为它们的信息可能随时间而变化(例如,我们可能会找到一个人的新别名,或者将一个感兴趣的人添加到报告中)

域名http://yuml.me/13fc6da0

如果这些存储在某种数据库中并且我希望使用不可变对象,则似乎存在关于状态和引用的问题.

假设我改变了一些关于a的元数据Person.由于我的Person对象是不可变的,我可能会有一些代码:

class Person(
    val id:UUID,
    val aliases:List[String],
    val reports:List[Report]) {

  def addAlias(name:String) = new Person(id,name :: aliases,reports)
}
Run Code Online (Sandbox Code Playgroud)

因此,我Person的新别名成为一个新对象,也是不可变的.如果a Report指的是那个人,但别名在系统的其他地方被改变了,我Report现在指的是"老"人,即没有新别名的人.

同样,我可能会:

class Report(val id:UUID, val content:String) {
  /** Adding more info to our report */
  def updateContent(newContent:String) = new Report(id,newContent)
}
Run Code Online (Sandbox Code Playgroud)

由于这些对象不知道是谁引用它们,因此我不清楚如何让所有"引用者"知道有一个新对象可用来代表最近的状态.

这可以通过让所有对象从中央数据存储"刷新"并且创建新的,更新的对象的所有操作存储到中央数据存储来完成,但这感觉就像是对基础语言的引用的简洁重新实现.也就是说,让这些"次要可存储物体"变得可变更为明确.因此,如果我向a添加别名Person,则所有引用者都会看到新值而不执行任何操作.

当我们想要避免可变性时,如何解决这个问题,或者这是不可变性无效的情况?

scala immutability

10
推荐指数
2
解决办法
755
查看次数

从 Rails 6 中的 bin/rails 路由中省略操作邮箱、activestorage 和导体路由?

我有一个全新的轨道6的应用程序,并没有任何东西config/routes.rb,输出bin/rails routes具有非常长的URL为ActiveStorage,动作邮箱,和指挥的大规模清单。

bin/rails routes作为一种文档形式完全无用,特别是因为 的选项bin/rails routes不允许过滤东西。

我不想省略 Rails 的这些部分,因为我可能需要它们。但我更喜欢这些路线 a) 如果我不使用它们就不存在 b) 不出现在bin/rails routes.

有谁知道如何使这项工作?

ruby-on-rails ruby-on-rails-6

10
推荐指数
2
解决办法
2122
查看次数

Java Web Deployment:构建代码,还是部署.war?

部署J2EE/Java Web应用程序的两种主要方式(以非常简单的方式):

将组装的工件部署到生产框

在这里,我们在.war其他地方创建(或其他),将其配置为生产(可能为多个框创建大量工件)并将生成的工件放置在生产服务器上.

  • 优点:生产箱上没有开发工具,可以直接重复使用工件,部署人员不需要构建过程的知识
  • 缺点:创建和部署工件的两个过程; 预先构建的工件的潜在复杂配置可能使进程难以编写脚本/自动化; 必须版本二进制工件

在生产框构建工件

在这里,用于在开发人员盒上本地构建和部署的相同过程用于部署到生产.

  • 优点:维持一个过程; 并经常使用经过严格测试/验证.在工件创建时可能更容易定制配置,而不是定制预先构建的工件后缀; 不需要版本化二进制工件.
  • 缺点:所有生产箱都需要潜在的复杂开发工具; 部署人员需要了解构建过程; 你没有部署你测试的东西

我主要使用第二个进程,不可否认(没有时间/优先级用于另一个部署过程).就个人而言,我不会购买诸如"生产盒必须清理所有编译器等"之类的论点,但我可以看到部署你测试过的逻辑(而不是构建另一个工件).

但是,Java Enterprise应用程序对配置非常敏感,感觉就像在配置工件的两个过程中遇到麻烦一样.

思考?

更新

这是一个具体的例子:

我们使用OSCache,并启用磁盘缓存.配置文件必须位于.war文件中,并引用文件路径.每条环境都有不同的路径.构建过程检测用户配置的位置,并确保放置在战争中的属性文件对其环境是正确的.

如果我们要使用构建过程进行部署,那么就需要为生产环境创建正确的配置(例如production.build.properties).

如果我们遵循"将组装的工件部署到生产框",我们需要一个额外的过程来提取(不正确的)OSCache属性并将其替换为适合生产环境的属性.

这创建了两个完成相同事情的过程.

所以,问题是:

  • 没有"编制生产"这是否可以避免?
  • 如果没有,这值得吗?"没有编译生产"的价值大于"不要重复自己"吗?

java deployment java-ee

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

vim path var,不包括**匹配的dirs

我最喜欢的vim功能之一就是能够做到这一点

set path=/my/project/root/**
Run Code Online (Sandbox Code Playgroud)

然后使用

:find SomeClassFile.java
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,我在那个级别有一些生成的目录,我无法移动并希望从这些搜索中排除.我似乎无法弄清楚如何排除这些目标.任何人都知道如何做到这一点?

vim

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

根据prefs显示/隐藏iphone UI元素 - 如何?

我的iPhone应用程序中有一个简单的表单.表格通过IB和典型布线布局和管理(即我不是以编程方式创建此表单).

仅当设置了特定首选项时,才应显示其中一个字段(及其关联标签).

可以将字段和标签的alpha设置为0并在这种情况下禁用它们.问题是这个现在看不见的字段下方的字段会保留在同一个地方,并且会有一个很大的空白区域.我的目标是让屏幕看起来都处于正常状态.

有没有办法以编程方式删除(或添加)UI元素,并让下面的那些向上或向下移动以腾出空间?或者我应该考虑为第二种情况制作一个完整的其他NIB文件?(而且,如果我这样做,是否有一种简单的方法来分享共同的元素?)

显示两个控件的当前UI

同时使用http://img.skitch.com/20100704-bm41w6wtqkdgh1da99ihb7g32d.jpg

通过alpha == 0隐藏可选控件的UI

使用Alpha隐藏http://img.skitch.com/20100704-q2sxrj3nf6ya68wp6ubn86n2pa.jpg

所需的UI隐藏了可选控件

隐藏时所需http://img.skitch.com/20100704-82r876pgctee8gb51ujg1dwj7k.jpg

iphone cocoa-touch interface-builder

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

如何在iPhone上正确处理Core Data保存错误以及用户体验?

所以,我有一个用于存储,搜索和操作数据的基本应用程序.基本的CRUD操作.在我存储或更新此数据的代码的各个地方,我基本上都有这个:

NSError *error;
if (![self.managedObjectContext save:&error]) {
  // TODO: Handle this error
  NSLog(@"Error while saving data %@, %@", error, [error userInfo]);
}
Run Code Online (Sandbox Code Playgroud)

当这些事情出现时,大多数人会做什么,用户体验明智?

想到的唯一一件事就是UIAlertView用一个模糊的信息突然出现一些可怕的信息; 不确定如何恢复这些东西.

为了论证,我们假设我的模型几乎没有验证,因此可能发生的唯一错误可能是可怕的错误或编程问题.

有关用户体验的任何好主意吗?

iphone user-interface user-experience core-data

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

编写一个ruby命令行应用程序; 最好的办法吗?

我有一个命令行Ruby应用程序我正在开发,我想允许它的用户提供将作为过程的一部分进行过滤的代码.基本上,应用程序执行此操作:

  1. 读入一些数据
  2. 如果指定了过滤器,则使用它来过滤数据
  3. 处理数据

我希望过滤过程(步骤2)尽可能灵活.

我的想法是用户可以提供一个Ruby文件,设置一个已知的常量来指向实现我定义的接口的对象,例如:

# user's filter

class MyFilter
  def do_filter(array_to_filter)
    filtered_array = Array.new
    # do my filtering on array_to_filter
    filtered_array
end 

FILTER = MyFilter.new
Run Code Online (Sandbox Code Playgroud)

我的应用程序的代码将执行以下操作:

array_that_might_get_filtered = get_my_array()
if (options.filter_file)
  require options.filter_file
  array_that_might_get_filtered = FILTER.do_filter(array_that_might_get_filtered)
end
Run Code Online (Sandbox Code Playgroud)

虽然这会起作用,但感觉很俗气,似乎应该有更好的方法来做到这一点.我还认为过滤器的形式是为已知类添加已知名称的方法,但这似乎也不正确.

Ruby中有更好的成语吗?

ruby idioms

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

RESTEasy不会使用自定义Spring ContextLoader映射我的Spring bean

  • RESTEasy 2.0.1GA
  • Java 1.6
  • Spring 3.0.3

我已尽力而为,无法做出正在发生的事情.我有一个Spring MVC应用程序,但是我想在Spring MVC应用程序之外提供一些RESTEasy端点,但是在同一容器中,最终能够连接相同的bean.

作为第一步,我只是试图在容器内部站起来RESTEasy,为Spring配置的bean提供请求.我已经从说明书中试过了样板,并尝试了手动设置,但无济于事.

@Resource
@Path("/")
public class NeighborComparison {

    private String foo;

    @GET @Path(value="customer") @Produces("text/plain")
    public String getNeighborComparison() {
        return "foo";
    }
}
Run Code Online (Sandbox Code Playgroud)

web.xml

<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/api</param-value>
</context-param>

<listener>
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>

<!-- NOT configuring SpringContextLoaderListener because I declare my own, so if I do, everything
     blows up, plus  all it actually does is sanity check configuration -->
<listener>
    <listener-class>com.example.MyCustomContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>Resteasy</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

applicationContext.xml

<bean …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc resteasy

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

将rails应用程序部署到非root上下文 - restful_auth无效

我在http://www.naildrivin5.com/scalatour上运行一个rails应用程序.它工作正常.当我使用登录应用程序时restful_authentication,我会被带到http://www.naildrivin5.com而不是应用程序.奇怪的.

这似乎是我错误配置了一些东西.此外,还有一些地方我正在手工创建一些网址,我需要访问"应用程序上下文根"(即scalatour在我的情况下)才能正确地形成URL.我最终把它扔进了我的配置,但这似乎是错的.

带有Passenger的Apache运行Rails应用程序:

Apache conf:

<VirtualHost 69.89.3.135:80> 
  DocumentRoot /somewhere/naildrivin5.com/html
  ServerName naildrivin5.com 
  RailsBaseURI /scalatour  
  PassengerPoolIdleTime 5 
  # other things not related
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

passenger.conf:

LoadModule passenger_module /usr/share/passenger/ext/apache2/mod_passenger.so 
PassengerRoot /usr/share/passenger 
PassengerRuby /usr/bin/ruby 
PassengerLogLevel 2 
Run Code Online (Sandbox Code Playgroud)

/somewhere/naildrivin5.com/html/scalatour符号链接到我的Rails应用程序的public文件夹.

该应用程序工作正常,除了身份验证,使用restful_authentication.登录后,我被带到了Web服务器根目录,而不是应用程序根目录.

我应该如何/可以配置它,如何在运行时访问它,以及如何最好地配置我的本地开发环境来执行此操作(或不关心它)?

apache ruby-on-rails passenger ruby-on-rails-plugins

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