我有一个顶级的core.async go循环.我希望它无限期地运行,至少直到我用CTRL-C或杀死或类似信号来阻止它.我目前正在使用java.lang.Runtime/addShutdownHook,如下所示:
(ns async-demo.core
(:require [clojure.core.async :as async
:refer [<! >! <!! timeout chan alt! go]]))
(defn run [] (go (loop [] (recur))))
(.addShutdownHook (Runtime/getRuntime) (Thread. #(println "SHUTDOWN")))
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
如果我启动REPL (run)然后它启动并在后台线程中运行.当我退出REPL时,我看不到所需的关机消息.
但是,当我运行时lein run,go循环立即退出并显示"SHUTDOWN".
这也不是我想要的.
我不一定希望找到适用于所有JVM的解决方案.我在Mac上开发并部署到Ubuntu,所以我想找到适合两者的解决方案:
Mac JVM:java版"1.7.0_45"Java(TM)SE运行时环境(版本1.7.0_45-b18)Java HotSpot(TM)64位服务器VM(版本24.45-b08,混合模式)
Ubuntu JVM:java版"1.7.0_25"OpenJDK运行时环境(IcedTea 2.3.10)(7u25-2.3.10-1ubuntu0.12.04.2)OpenJDK 64位服务器VM(版本23.7-b01,混合模式)
我正在试验Sesame和Virtuoso Triplestores.在Moment中,我使用Sesame Java API将RDF数据添加到Triplestores.
我的RDF数据代表不同的东西,如Videodata,Userdata等.目前我可以将一个视频的RDF(标题,描述,位置等)添加到Triplestore
但是如何更新商店中的RDF?
例如,如果我使用芝麻的REST接口并使用更新的RDF进行PUT请求,则首先删除存储中的所有内容.
当我使用带有更新数据的POST(例如视频标题已更改)时,将存储标题(旧的和新的).
你如何与三重商店合作?也许我想念一些必要的东西.
编辑:
我现在在每个RDF条目中使用Virtuoso中的Sesame和Graphs中的Context.这种更新方式我可以先清除上下文并再次添加.当我为两个Triplestores使用Sesame API时(我们仍然不知道我们将使用哪一个),代码看起来完全相同.
ValueFactory f = rep.getValueFactory();
URI uri = f.createURI(urn);
con.clear(uri);
con.add(reader,this.baseURI, RDFFormat.RDFXML,uri);
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助
在我的应用程序中,我使用Resque来调整图像大小.如果图像在调整大小队列中,我想显示"调整大小图像"图标.
这意味着我需要能够找到与队列中特定模型ID相关的所有当前作业.现在我这样做:
Resque.peek(:resize, 0, 100).find_all { |job| /#{model.id}/.match(job["args"][0]) }
Run Code Online (Sandbox Code Playgroud)
这是愚蠢的.但有没有办法查询Resque队列以找到第一个参数等于[id]的所有作业?
提前致谢.
我正在使用Mongoid(v3)来访问MongoDB,并希望执行此操作:
db.sessionlogs.update(
{sessionid: '12345'}, /* selection criteria */
{'$push':{rows: "new set of data"}}, /* modification */
true /* upsert */
);
Run Code Online (Sandbox Code Playgroud)
这在mongo shell中工作正常.它也正是我想要的,因为它是一个单一的原子操作,对我来说很重要,因为我会调用它.我不想做两个操作 - 获取然后更新.我通过mongoid尝试了很多东西,但无法让它工作.
如何将MongoID取出并将此命令发送到MongoDB?我猜测在Moped级别有一些方法可以做到这一点,但该库的文档基本上不存在.
我该怎么办才能doc再次获得?
brew install --devel leiningen
lein new app yeehaw
cd yeehaw
; edit project.clj and replace "1.4.0" with 1.5.0-RC1"
lein repl
yeehaw.core=> (doc map)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: doc
in this context, compiling:(NO_SOURCE_PATH:1:1)
Run Code Online (Sandbox Code Playgroud)
请注意,命名空间中doc仍然可以使用常用的REPL功能user,但是在我的应用程序命名空间中将它放在我的指尖是很好的,至少在REPL中是这样.
我想提出一个简单的改变Emacs的,以便next-buffer和previous-buffer我所绑定于命令(C-x <RIGHT>和C-x <LEFT>将跳过*Messages*缓冲区.
我正在使用Emacs 24和Emacs入门套件.
我已经阅读了以下相关问题和答案,但它们不是我想要的:
以下是它们不起作用的一些原因:
*Messages*完全杀死或阻止.(add-to-list 'ido-ignore-buffers "^\*Messages\*"帮助我C-x b(ido-switch-buffer)但不改变方式next-buffer和previous-buffer行为.我正在开发一个用户添加他们的Gmail帐户的应用程序,我在他们的电子邮件上做了一些分类工作.
我希望在收到任何已注册帐户的新电子邮件时收到通知.
一个解决方案是通过IMAP继续轮询帐户并保存我提取的最后一个电子邮件日期,以检查是否有新邮件,但这有很多开销.
知道如何监控Gmail并在收到新电子邮件时收到通知并将其与Rails应用程序集成吗?是否有扩展可以做到这一点,并发送一个帖子请求到我的Rails应用程序,例如?
ruby ruby-on-rails classification push-notification gmail-imap
我有以下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>analyze</id>
<goals>
<goal>analyze-only</goal>
</goals>
<configuration>
<failOnWarning>false</failOnWarning>
</configuration>
</execution>
<!--Copy the dependencies so ant build has the same versions-->
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/lib</outputDirectory>
<overWriteIfNewer>true</overWriteIfNewer>
<stripVersion>true</stripVersion>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<excludeTransitive>false</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
上面的配置会转储同一文件夹中的所有内容.我尝试通过添加测试配置来排除测试范围但是给出了错误:
未能执行目标org.apache.maven.plugins:Maven的依赖关系的插件:2.6:项目pcgen复制依赖(复制依赖):不能排除测试范围,这将排除一切.
有没有办法将测试依赖项与其他依赖项分开,以便我可以复制到不同的文件夹?
我正在使用Rails 4.0.0.beta1.我添加了两个目录:app/services和test/services.
我还添加了这个代码,基于阅读railties的testing.rake:
namespace :test do
Rake::TestTask.new(services: "test:prepare") do |t|
t.libs << "test"
t.pattern = 'test/services/**/*_test.rb'
end
end
Run Code Online (Sandbox Code Playgroud)
我发现rake test:services运行测试test/services; 但是,rake test不运行那些测试.看起来应该如此 ; 这是代码:
Rake::TestTask.new(:all) do |t|
t.libs << "test"
t.pattern = "test/**/*_test.rb"
end
Run Code Online (Sandbox Code Playgroud)
我忽略了什么吗?
我想测试一个使用gensyms的宏.例如,如果我想测试这个:
(defmacro m1
[x f]
`(let [x# ~x]
(~f x#)))
Run Code Online (Sandbox Code Playgroud)
我可以用宏扩展......
(macroexpand-1 '(m1 2 inc))
Run Code Online (Sandbox Code Playgroud)
...要得到...
(clojure.core/let [x__3289__auto__ 2] (inc x__3289__auto__))
Run Code Online (Sandbox Code Playgroud)
这对于一个人来说很容易验证是正确的.
但是,我如何以实用,干净的自动化方式对其进行测试?gensym不稳定.
(是的,我知道特定的宏观例子并不引人注目,但问题仍然是公平的.)
我意识到Clojure表达式可以被视为数据(它是一种同性语言),所以我可以像这样分开结果:
(let [result (macroexpand-1 '(m1 2 inc))]
(nth result 0) ; clojure.core/let
(nth result 1) ; [x__3289__auto__ 2]
((nth result 1) 0) ; x__3289__auto__
((nth result 1) 0) ; 2
(nth result 2) ; (inc x__3289__auto__)
(nth (nth result 2) 0) ; inc
(nth (nth result 2) 1) ; x__3289__auto__
)
Run Code Online (Sandbox Code Playgroud)
但这很笨拙.还有更好的方法吗?也许有数据结构'验证'库可以派上用场?也许解构会让这更容易?逻辑编程?
更新/评论: …