小编Rob*_*ell的帖子

在Clojure中持久保存地图/结构的最简单方法是什么?

显而易见的方法是从Clojure Contrib加载JDBC支持并编写一些函数将map/struct转换为表.这样做的一个缺点是它不是很灵活; 对结构的更改将需要更改DDL.这意味着编写DDL生成(艰难)或手动编码迁移(无聊).

有哪些替代品?答案必须是ACID,排除序列化到文件等.

persistence clojure

8
推荐指数
3
解决办法
2400
查看次数

我如何使用Clojure的独特之处?集合上的功能?

Clojure 与众不同?方法不采用集合,而是采用args列表

(distinct? x)
(distinct? x y)
(distinct? x y & more)
Run Code Online (Sandbox Code Playgroud)

因此(distinct?0 0 0 0)正确返回false,而(distinct?[0 0 0 0])返回true.我该如何使用不同的?在一个集合上,以便传递一个集合[0 0 0 0]将返回false,因为该集合包含重复项?

我确实意识到该函数正在正常运行,但我正在寻找一种技巧来将它应用于集合的内容而不是args列表.

作为一种解决方法,我目前有

(defn coll-distinct? [coll]
   (= (distinct coll) coll))
Run Code Online (Sandbox Code Playgroud)

但我觉得我错过了一种更优雅的方式重复使用

clojure

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

在Tomcat 5上控制WEB-INF/lib中jar的类路径排序?

我有一个在Tomcat 5.0中运行的遗留Web应用程序.

这个Web应用程序在WEB-INF/lib中有两个jar,比如说Foo-2.0.jarBar-2.0.jar.Bar-2.0.jar实际上包含了一个Foo-1.0.jar.Bar也是一个死的项目,意味着没有升级,没有来源,但对应用程序仍然很重要.

该应用程序的最新版本需要Foo-2.0.jar来处理其他一些内容.在类路径中同时具有Foo-1.0.jarFoo-2.0.jar会产生冲突,特别是ClassDefNotFound类型的错误,其中稍后在2.0中添加的类无法在1.0中找到,等等.

在Eclipse中,简单的解决方案是右键单击您的Project,单击Properties > Java Built Path > Order and Export并将Foo-2.0.jar移到Bar-2.0.jar之上,以便首先解析它.

如何在Tomcat的WEB-INF/lib中为jar实现这种类型的路径排序?

java tomcat jar classpath

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

在Emacs + Slime + Clojure + Windows设置中,无法加载clojure-auto

我按照这个非常有用的指南来设置这个开发环境.运行emacs.bat时,我在Emacs中收到以下错误:

文件错误:无法打开加载文件,clojure-auto

不幸的是,我对Clojure和Emacs都是全新的,所以任何有助于确定从哪里开始寻找都会有所帮助.

另外,作为旁注,指南的最后一步是:

使用emacs.bat文件启动Emacs.然后,只需键入"Mx slime",REPL就会出现,然后你就可以了.

根据Emacs文档,Mx将是Meta key + x.但是,目前还不清楚Windows中的Meta键.它谈到控制,但那将是C + x,所以我认为它是Shift.我也试过M +!认为这是一个shell命令,但没有运气.也许有人可以在评论中证实.

更新:来自评论中的dfa:"meta is Alt"有效.谢谢.

更新: Rayne非常有用的信息:

如果你的emacs经验继续走错路,不要放弃Clojure.对于Eclipse的IDEA Clojure-dev总是有La Clojure,我个人最喜欢的是NetBeans的Enclojure.

windows emacs clojure slime

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

什么免费的JVM实现具有最好的PermGen处理?

我在Sun的JRE6中运行Tomcat6,并且每对夫妇都部署了OutOfMemoryException:PermGen.我已经完成了PermGen解决方案的谷歌搜索,并尝试了许多修复.没有工作.我读了很多关于Oracle的JRockit的好东西,以及它的PermGen分配大小如何(与Sun的128M相比)虽然它没有解决问题,但它允许我在PermGen异常之间重新部署100次而不是2现在的时间.

JRockit的问题是在生产中使用它需要购买价值数千美元的WebLogic.还有哪些其他(免费)选项可以更宽容PermGen扩展?以下JVM如何在这个领域做?

  • IBM JVM
  • 打开JDK
  • blackdown的
  • kaffe的

...其他?

更新:有人问我为什么认为PermGen max是128M.原因是因为每当我尝试将其提升到128M以上时,我的JVM都无法初始化:

[2009-06-18 01:39:44] [info] Error occurred during initialization of VM [2009-06-18 01:39:44] [info] Could not reserve enough space for object heap [2009-06-18 01:39:44] [395 javajni.c] [error] CreateJavaVM Failed

奇怪的是它没有尝试为对象保留空间,尽管我不确定它是"堆"而不是"堆".

我使用1024MB初始和1536MB最大堆启动JVM.

我会关闭这个问题,因为它已被回答,即."切换是无用的",而是问为什么我的Sun JVM会因为更大的PermGen设置失败?

java jvm permgen

7
推荐指数
2
解决办法
7071
查看次数

如何在Clojure Box(Emacs)中取消评估?

感谢Project Euler,我最近陷入了长时间运行的计算,我想知道如何中止评估并返回到REPL提示符.我正在运行Emacs 的标准Clojure Box版本.我尝试了明显的REPL>中断Lisp进程Slime>中断命令,但都没有终止执行并返回我的REPL提示符.

emacs clojure slime read-eval-print-loop

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

您如何在Clojure特定语言或函数语言中实现一般的设计?

我更喜欢使用Lisp变体(Clojure或Scheme的奖励积分)的例子,因为这是我最熟悉的,但任何有关DBC功能性语言的反馈当然对更大的社区都有价值.

这是一个显而易见的方式:

(defn foo [action options]
    (when-not (#{"go-forward" "go-backward" "turn-right" "turn-left"} action)
              (throw (IllegalArgumentException.
                     "unknown action")))
    (when-not (and (:speed options) (> (:speed options) 0))
              (throw (IllegalArgumentException.
                     "invalid speed")))
    ; finally we get to the meat of the logic)
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个实现的是合同逻辑掩盖了核心功能; 在条件检查中,函数的真正目的会丢失.这与我在这个问题中提出的问题相同.在像Java这样的命令式语言中,我可以使用嵌入在文档中的注释或元数据/属性来将契约移出方法实现.

有没有人考虑在Clojure中添加合同到元数据?如何使用高阶函数?还有哪些其他选择?

scheme functional-programming design-by-contract clojure

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

工作流引擎有哪些替代方案?

我们正在重写一个大型遗留系统,该系统大量(错误地)使用工作流引擎.展望未来,我想考虑新应用程序的工作流引擎的替代方案.一个非常有趣的可能性是基于空间的架构 +规则引擎.还有哪些其他范例?

我会提到这个应用程序根据国家/地区/等方式编排了许多不同调整的复杂文档发布工作流程,但是如果可能的话,我想保持答案更加通用.

编辑:我为此问题添加了赏金以获得更多反馈.我想听听实际实施工作流程替代方案的人的意见.如果没有产生任何结果,我会接受BPEL的答案,尽管我对技术本身完全不了解.

architecture workflow

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

在CouchDB中实现外键的惯用方法是什么?

让我举一个简单的例子:你有一个订单和一个购物车.我设想坚持这一点的一种方法是保存订单文档和购物车文档.订单文档可以有一个名为"shopping-cart"的字段,其值是相关Cart文档的UUID.我可以想象的另一种方法是使用"shopping-cart"字段保存Order文档,该字段包含整个Cart的关联数组.换句话说,我没有将Cart明确地保存为独立文档,而是将Cart文档嵌入Order文档中.

如果我们稍后决定购物车应该是持久性的,那么返回的用户会发现他的半成品购物车在会议期间等待他?我想我们可以将这两种方法结合起来,在购物车不完整时将其分开,并在最终确定/购买时将其嵌入订单文件中.

虽然我担心CouchDB没有外键约束,但这两种方法都可行.在第一种方法中,Cart文档可能会被删除,从而使您的数据集损坏.

你如何决定使用哪种方法?这些方法中的一种对CouchDB来说更具惯用性吗?有没有我错过的方法?

我是CouchDB的新手,所以我很难看到具有或多或少标准化结构的优点/缺点.

couchdb foreign-keys

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

使用Commons FileUpload的DiskFileItem上传大文件时,如何避免OutOfMemoryErrors?

使用Commons FileUpload 1.2.1将大型(> 300MB)文件上传到servlet时,我得到OutOfMemoryErrors.这看起来很奇怪,因为使用DiskFileItem的全部意义是防止(可能很大的)文件驻留在内存中.我使用的默认大小阈值为10KB,所以应该将所有内容加载到堆中,对吧?这是部分堆栈跟踪:

java.lang.OutOfMemoryError
       at java.io.FileInputStream.readBytes(Native Method)
       at java.io.FileInputStream.read(FileInputStream.java:177)
       at org.apache.commons.fileupload.disk.DiskFileItem.get(DiskFileItem.java:334)
       at org.springframework.web.multipart.commons.CommonsMultipartFile.getBytes(CommonsMultipartFile.java:114)
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我缺少一些配置吗?除了增加堆大小之外,还有什么提示/技巧可以避免这种情况?

我真的不应该增加我的堆,因为理论上应该从这个操作加载到内存中的最多是10KB多一点.另外,我的堆max(-Xmx)已设置为1GB,应该足够了.

java heap servlets out-of-memory apache-commons-fileupload

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