Articles of clojure

我如何从Clojure中导出Java类(.jar)?

我是Clojure和Java的新手。 我有一个现有的Clojure项目,别人写道,我试图使用node-javaembedded到NodeJS中。 Clojure的 该项目定义了一个提供某些公共职能的名称空间,如下所示: (ns my.namespace (:require …etc…)) (defn dosomething …) (defn dosomethingelse …) 我用leiningen( lein jar和lein uberjar )build立了这个项目。 问题 node-java上的#import()文档说我需要像这样导入一个java类: const java = require('java'); var Test = java.import('Test'); 我怎样才能访问这些function(大概是Java类的静态方法?) 我接近这一切都错了吗? =) 更新 感谢Magos(下面的答案),我做了更多的进展。 原来我可以在(ns …)范围内使用(:gen-class :name my.name)来告诉它生成一个类。 如果我像这样添加一个configuration文件到project.clj: … :profiles { … :uberjar {:aot :all} } … 它会编译,我现在可以在Node中看到类。 不过,我仍然没有想出如何导出这些方法。 现在就在这个部分工作。

在Heroku上的Clojurescript

我喜欢编写Clojure webapps,但是在Heroku这样的平台上使用时,却有着无法接受的启动时间。 有没有人尝试在服务器端使用Clojurescript与节点例如? 这是否改善启动时间?

Javascript:将stringpath转换为格式化数组

所以我试图使用github API并将其转换为dynatree使用。 我正在寻找使用JavaScript。 但是,如果在Ruby,ClojureScript等中更容易完成,那也可以。 所以Github api返回的东西看起来像: { "sha": "a1f28431d5ee1a00361ff7e1e2dc91172d5bbabd", "url": "https://api.github.com/repos/Jonovono/c/git/trees/a1f28431d5ee1a00361ff7e1e2dc91172d5bbabd", "tree": [ { "mode": "100644", "type": "blob", "sha": "b81f704ee24f08f5f3e00675a9912da79274c3bc", "path": ".gitignore", "size": 114, "url": "https://api.github.com/repos/Jonovono/c/git/blobs/b81f704ee24f08f5f3e00675a9912da79274c3bc" }, { "mode": "100644", "type": "blob", "sha": "c6231c2f161f50bededaaac624a7a96db6179e9a", "path": "Makefile.am", "size": 40, "url": "https://api.github.com/repos/Jonovono/c/git/blobs/c6231c2f161f50bededaaac624a7a96db6179e9a" }, { "mode": "100644", "type": "blob", "sha": "ca41e5b8fb710b4ae7a2cdb35cdbafb143382dc2", "path": "README.md", "size": 2194, "url": "https://api.github.com/repos/Jonovono/c/git/blobs/ca41e5b8fb710b4ae7a2cdb35cdbafb143382dc2" }, […]

如何不完整的ClojureScript? (范围)(迭代)等

我正在尝试最近使用ClojureScript而不是Clojure。 当我编译和运行node.js (.log js/console (range 10)) 我有 $ node app { meta: null, start: 0, end: 10, step: 1, __hash: null, 'cljs$lang$protocol_mask$partition1$': 0, 'cljs$lang$protocol_mask$partition0$': 32375006 } 我有点惊讶地看到这个简单的代码不起作用。 这是由于我的具体环境? 我希望如此,如果这是我的问题,请告知。 这里是编译的js: cljs.nodejs = {}; cljs.nodejs.require = require; cljs.nodejs.process = process; cljs.core.string_print = cljs.nodejs.require.call(null, "util").print; var rxcljs = {core:{}}; console.log(cljs.core.range.call(null, 10));

ClojureScript Electron app __dirname返回nil

我正在用ClojureScript写电子应用程序,并得到这个奇怪的行为: (ns hello-world.core (:require [cljs.nodejs :as nodejs])) (nodejs/enable-util-print!) (def electron (nodejs/require "electron")) (def app (.-app electron)) (defn on-ready [] (prn (js* "__dirname"))) ; => nil (defn -main [& args] (prn (js* "__dirname")) ; => "/Users/alex/source/electron-cljs/out" (.on app "ready" on-ready)) (set! *main-cli-fn* -main) 正如你所看到的,__dirname在-main函数中parsing得很好,但是在我的电子“ready”callback函数中返回nil。 为什么不在callback里面工作?

如何将Macchiato clojurescript应用程序部署到Heroku免费帐户?

我尝试通过以下命令创buildMacchiato(ClojureScript模板)的空白应用程序: lein new macchiato abc cd abc git init heroku create git add –all git commit -m "Initial" git push heroku master heroku run lein package 但应用程序崩溃。 我应该怎么做免费的Heroku上运行Macchiato / ClojureScript空白应用程序? 来自Heroku的一些日志: 2017-09-20T14:20:18.982364+00:00 heroku[web.1]: Starting process with command `node target/release/abc.js` 2017-09-20T14:20:21.393478+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them. 2017-09-20T14:20:23.735706+00:00 app[web.1]: […]

不能有RabbitMQ Clojure客户端工作

我有我的RabbitMQ实例的2个客户端,但我没有设法使Clojure版本工作。 我可能错过了一些RabbitMQconfiguration,但无法弄清楚什么。 我的交换是数据,队列是警报。 任何想法在Clojure版本中缺less什么? 工作Node.js RabbitMQ客户端 var amqp = require('amqplib/callback_api'); amqp.connect('amqp://192.168.99.100', function(err, conn) { conn.createChannel(function(err, ch) { var ex = 'data'; ch.assertExchange(ex, 'direct', {durable: true}); ch.assertQueue('', {exclusive: true}, function(err, q) { console.log(' [*] Waiting for logs. To exit press CTRL+C'); ch.bindQueue(q.queue, ex, 'ALERT'); ch.consume(q.queue, function(msg) { console.log(" [x] %s: '%s'", msg.fields.routingKey, msg.content.toString()); }, {noAck: true}); […]

我的安全devise听起来如何?

我有一个特定的安全需求,这意味着我正在编写更多与安全相关的代码。 如果我正在做的事情是由某个图书馆解决的,请告诉我,我立即放弃执行。 我有一个用Java编写的服务器(实际上是Clojure)和一个用JavaScript编写的客户端(实际上是ClojureScript),它作为一个Electron应用程序来运行。 我需要各种客户端应用程序来通过服务器交换信息,以便能够访问这些信息:我需要端到端的encryption。 为了实现端到端encryption,我希望在客户端生成一个私有的公钥对,然后公钥和私钥的encryption版本将被上传到服务器。 然后,通过做一个挑战响应,在这个响应中,客户端签署一段随机数据,服务器validation它,服务器将authentication用户。 注册过程包括生成一个椭圆曲线Diffie Hellman密钥对,具体来说,根据https://security.stackexchange.com/questions/78621/which-elliptic-curve-应该-I-使用 生成后,生成一个16字节的盐,然后我pbkdf2密码872791次与盐,keylen 32和使用sha512。 使用哈希密钥,我用aes-256-ctrencryption私钥。 最后一步是连接salt长度,salt和encryption的私钥并发送给服务器。 我假定所有这一切都发生在TLS安全通道HTTPS上,通过CA以通常的方式validation服务器证书的有效性。 将来我可能会使用证书locking来增加安全性。 这是一个健全的devise? 它看起来安全吗? 是否有任何或所有这些我可以委托给维护良好的第三方开源库? 我的实际代码: (def elliptic-curve-name "secp521r1") ; https://security.stackexchange.com/questions/78621/which-elliptic-curve-should-i-use (def encryption-algorithm "aes-256-ctr") ; http://lollyrock.com/articles/nodejs-encryption/ (def hash-bytes 32) (def salt-bytes 16) (def pbkdf-digest "sha512") (def iterations 872791) (defn encrypt-text [text key] (let [salt (.randomBytes crypto salt-bytes) salt-string (.toString salt "base64") hashed-password (.pbkdf2Sync […]

尝试运行简单的hello world的.js输出时,得到“无法设置属性undefined的错误”clojurescript

我正在编译: (ns example.hello) (js/console.log "Hello from ClojureScript!") 有了这个configuration: (defproject lein-cljsbuild-example "1.2.3" :plugins [[lein-cljsbuild "0.2.9"]] :cljsbuild { :builds [{ :source-path "src-cljs" :compiler { :output-to "war/javascripts/mainz.js" ; default: main.js in current directory ;:optimizations :simple :target :nodejs ;:pretty-print true }}]}) 哪个输出的文件太大而不能放在这里,但是会给出错误: goog.debug.Error = function(opt_msg) { ^ TypeError: Cannot set property 'Error' of undefined at Object.<anonymous> (/Users/myuser/Clojure/cljstest/war/javascripts/mainz.js:503:18) at Module._compile […]

ClojureScript NodeJS程序不会接受控制台参数

考虑下面的clojurescript程序: (ns node-test.core (:require [cljs.nodejs :as node])) (defn -main [& args] (println "args: " args) (let [one (first args) two (second args)] (println "one: " one) (println "two: " two))) (set! *main-cli-fn* -main) 问题:如果我没有优化编译这个程序,按预期工作。 例: $ node program.js 1 2 => args: (1, 2) one: 1 two: 2 如果我使用高级优化编译程序,那么我的程序不会识别参数: $ node program.js 1 2 => […]