小编Ale*_*ard的帖子

推荐的宏为Clojure的defrecord构造函数添加功能?

defrecord 在clojure中允许使用自定义字段定义简单数据容器.

例如

user=> (defrecord Book [author title ISBN])
user.Book
Run Code Online (Sandbox Code Playgroud)

结果的最小构造函数只接受位置参数而没有其他功能,例如字段默认,字段验证等.

user=> (Book. "J.R.R Tolkien" "The Lord of the Rings" 9780618517657)
#:user.Book{:author "J.R.R Tolkien", :title "The Lord of the Rings", :ISBN 9780618517657}
Run Code Online (Sandbox Code Playgroud)

编写包含默认构造函数的函数总是可以获得更复杂的构造语义 - 使用关键字参数,提供默认值等等.

这似乎是宏提供扩展语义的理想方案.人们为了更丰富的defrecord建设而编写和/或推荐了哪些宏?

macros constructor record clojure

12
推荐指数
1
解决办法
1929
查看次数

Clojure:懒惰的魔法

几乎有2个相同的程序可以生成无限懒惰的random序列.第一个不会崩溃.第二次崩溃与OutOfMemoryError异常.为什么?

;Return infinite lazy sequence of random numbers    
(defn inf-rand[] (lazy-seq (cons (rand) (inf-rand))))    

;Never returns. Burns the CPU but won't crash and lives forever.    
(last (inf-rand))
Run Code Online (Sandbox Code Playgroud)

但是下面的崩溃很快:

;Return infinite lazy sequence of random numbers    
(defn inf-rand[] (lazy-seq (cons (rand) (inf-rand))))    
(def r1 (inf-rand))

;Crash with "OutOfMemoryError"
 (last r1)
Run Code Online (Sandbox Code Playgroud)

clojure lazy-evaluation lazy-sequences

11
推荐指数
1
解决办法
994
查看次数

Clojure名称空间管理 - 有没有办法保存和恢复clojure repl名称空间,导入等的状态?

Clojure有大量的函数/宏来处理命名空间和java包导入.对于我的(有限的)理解,命名空间的设置可以在clojure过程中被视为状态(repl).

当在REPL会话中迭代地工作时,特别是当(重新)加载源文件时,我发现很容易混淆 - 通常当我在命名空间配置中出错或语法错误时.其他时候我想尝试重构命名空间/别名/引用过滤器,但不能在不重新启动REPL的情况下轻松退出现有的命名空间状态.

例如,我希望能够检查点命名空间配置 - 例如在repl上加载代码主体之后 - 然后在尝试在REPL导入的某些库之后返回到"clean-slate",这样我就可以立即测试一个源文件,该文件作为ns宏的一部分导入该库中已过滤的方法子集.

人们可以推荐保存和恢复命名空间配置的方法吗?

state namespaces clojure read-eval-print-loop

11
推荐指数
2
解决办法
1091
查看次数

有关如何在Emacs中工作时注释PDF的建议?

许多科学论文,特别是生命科学论文,都以pdf格式出版.

我想在emacs中尽可能多地工作(尤其是org-mode).我知道DocView模式,至少让我在emacs中查看pdf.我怀疑它可以为我做更多,但我还没有超越简单地查看基于图像的pdf文件的渲染.

任何人都可以推荐使用pdf的方法,最重要的是链接到文件,发布文本和向pdfs添加注释(电子相当于边缘写作)?

编辑:只是为了澄清我不打算实际编辑pdf图像.相反,我想在组织文件中添加超链接或书签注释.我之前没有看过DocView的文本模式,这可能会给我我想要的但我不知道我是否可以书签/超链接到它.

pdf emacs annotations docview org-mode

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

什么是JOptionPane.showMessageDialog和swing.utils.invokeAndWait的(事件调度)线程安全用法?

我有一个简单的groovy脚本,从它的主要执行线程需要向用户显示一些对话框.

我的挥杆知识是有限的和生锈的,但我记得读到需要小心保持事件派发线程(EDT)上的GUI东西.

如果我只是JOptionPane.showMessageDialog从我的主线程中调用静态方法我是否正确地假设这会违反在EDT上保留GUI内容的正确做法?

我应该实际使用swing.utils.invokeAndWait方法,例如在下面的示例代码中?


void showHelloThereDialog() 
        throws Exception {
    Runnable showModalDialog = new 
      Runnable() {
        public void run() {
            JOptionPane.showMessageDialog(
               myMainFrame, "Hello There");
        }
    };
    SwingUtilities.invokeAndWait
       (showModalDialog);
}

Run Code Online (Sandbox Code Playgroud)

现在,上面没有做任何事情来在invokeAndWait完成后从消息对话框以外的其他内容中创建值.

据推测,groovy'闭包'实现Runnable将使代码比上面更简单.

需要invokeAndWait吗?如果是这样,有人请举一个正确实现的例子,以获得像使用groovy的confirmDialog之类的结果?

java groovy user-interface swing event-dispatch-thread

6
推荐指数
3
解决办法
2778
查看次数

来自clojure a与非标准迭代java API的互操作

我在clojure中使用java类,它为包含一系列记录的特定于域的二进制文件提供检索API.

java类用文件初始化,然后提供一个.query方法,该方法返回一个只有一个方法的内部类的实例.next,因此不能很好地使用通常的java集合API.外部类和内部类都不实现任何接口.

.query方法可以返回null而不是内部类.该.next方法返回一个记录字符串,如果没有找到其他记录,则返回null,它可能在第一次调用时立即返回null.

如何在不编写更多java类的情况下使这个java API在clojure中运行良好?

我能想到的最好的是:


(defn get-records
  [file query-params]
  (let [tr (JavaCustomFileReader. file)]
    (if-let [inner-iter (.query tr query-params)] ; .query may return null                                                               
      (loop [it inner-iter
             results []]
       (if-let [record (.next it)]
         (recur it (conj results record))
         results))
      [])))
Run Code Online (Sandbox Code Playgroud)

这给了我一个结果向量来处理clojure seq抽象.是否有其他方法可以使用lazy-seq或使用协议从Java API中公开seq?

iteration clojure seq clojure-java-interop

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

IO阻塞进程是否会在"顶部"输出中显示100%的CPU利用率?

我有一个可以在不同数量的进程上并行化的分析.预计事情将是IO和CPU密集型(如果有人好奇的话,非常高吞吐量的短读取DNA对齐.)

运行它的系统是48核linux服务器.

问题是如何确定最佳的过程数量,以便最大化总吞吐量.在某些时候,这些过程可能会成为IO限制,因此添加更多过程将没有任何好处,也可能是有害的.

当达到这一点时,我能从标准系统监控工具中判断出来吗?top(或者可能是不同的工具)的输出是否能够区分IO绑定和CPU绑定进程?我怀疑IO上阻止的进程可能仍然显示100%的CPU利用率.

linux io cpu performance

4
推荐指数
2
解决办法
3701
查看次数

首先使用git还是通过SVN学习版本控制?

目前我是使用SVN的一部分.我们正在考虑转向git.我亲自使用了git(实际上我正在使用git-svn桥接回主SVN存储库),所以我确信它的好处.

一个问题是git比SVN更复杂.我们有一些全新的人,他们需要从一开始就学习版本控制.有没有人有通过直接跳入git教授版本控制的经验?我想知道它是否会太多,或者是否更容易不必忘记基于SVN的期望.

有没有人有任何方法的经验 - 直接跳到git,或先熟悉svn?

svn git version-control

3
推荐指数
2
解决办法
1265
查看次数

鉴于磁盘速度很慢,多个核心在运行中解压缩对性能有意义吗?

过去,磁盘压缩是以牺牲效率为代价来增加存储空间的,但当时我们都在单处理器系统上.

目前,还有额外的核心可能与处理数据并行地进行解压缩工作.

对于I/O绑定应用程序(特别是读取大量顺序数据处理),可以通过仅将读取和写入压缩数据写入磁盘来提高吞吐量.

有没有人有任何支持或拒绝这个猜想的经验?

architecture compression performance multicore disk

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

如何使用Oracle 10g来获取表访问指标?

我们有一个遗留/生产数据库.它一直在不断发展和使用,支持一个已经发展了10多年的网站.数据库由多种技术访问 - perl cgi,php和java webapps.

积累了很多琐事.我希望进行一次重大的重构.我确信有些部分是完全遗留的(显而易见的是零行的表).要确定哪些部分使用最多,我的首选策略是检测数据库,而不是通过大量潜在的访问组件.

oracle(10g)是否能够在每个表上设置触发器来报告访问的时间和频率?有人能指出我如何做到这一点或其他一些机制来实现同样的目标?

(请评论其他策略的建议,以帮助在此senario中进行数据库重构).

testing oracle legacy instrumentation monitoring

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

bean函数不返回完整的属性映射

继续在Clojure上爬行,现在使用Java GUI.如何获取GridBagConstrains的属性映射?该bean函数不会返回完整的地图:gridx, :gridy, :fill等等......

user=> (import '(java.awt GridBagConstraints))
java.awt.GridBagConstraints
user=> (def gbc (GridBagConstraints.))
#'user/gbc
user=> (bean gbc)
{:class java.awt.GridBagConstraints}
Run Code Online (Sandbox Code Playgroud)

一如既往地感谢您的帮助.

user-interface awt clojure javabeans

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