clojure

New to Clojure? Try the #beginners channel. Official docs: https://clojure.org/ Searchable message archives: https://clojurians-log.clojureverse.org/
Tamas 2020-12-22T04:35:49.325300Z

To complete the example :-): (data or {}).get("domain", {}).get("name", "bar") That being said these days I end up with a get-in function in python code.

👍 1
jumar 2020-12-22T07:18:39.325600Z

Also note that pmap will very likely run more than 2+cpus tasks at the same time due to chunking: https://github.com/jumarko/clojure-experiments/blob/master/src/clojure_experiments/experiments.clj#L556-L576

Pavel Shatyor 2020-12-22T09:59:43.326300Z

Hi everyone! 😉 Folks, Node Congress has CFP open. Please submit if have something to say. CFP is open until January 10 Join here — http://bit.ly/CFPNode

kari 2020-12-22T13:26:50.327900Z

Is https://github.com/MastodonC/kixi.stats the most used statistics library for Clojure nowadays?

Otis van Duijnen Montijn 2020-12-22T15:50:56.331500Z

I am trying to figure out what states a certain state of a state machine can transition to. I am now dealing with data that looks like this:

{:com.fulcrologic.fulcro.ui-state-machines/handler #unknown function (env)
 {return com.fulcrologic.fulcro.ui_state_machines.activate
  (env, new cljs.core.Keyword ("state", "button1", "state/button1", 936328262))}}
I need to extract the "state/button1" from this data. Does anyone have tips on how to do that?

borkdude 2020-12-22T15:54:08.332Z

it seems you are dealing with an opaque function object and not data?

Otis van Duijnen Montijn 2020-12-23T08:51:53.357600Z

It's CLJS

Otis van Duijnen Montijn 2020-12-22T15:56:10.332100Z

Do you know of any documentation on this I can use?

borkdude 2020-12-22T16:03:10.332300Z

documentation on what exactly?

Otis van Duijnen Montijn 2020-12-22T16:03:45.332500Z

I think I get what you meant now. Thanks for this. I probably need to call the function to figure out the return value

scottbale 2020-12-22T18:08:43.332900Z

What is the idiomatic way these days to implement a CLI in a project? I'm new to deps.edn - does it allow specifying a default main namespace, like the equivalent of :main in project.clj? I'm envisioning that a user could git-clone the repo and invoke some minimal clojure command to pass control to main method of intended namespace (which actually implements the CLI using tools.cli and provides usage info when invoked with no args, as per usual).

mike_ananev 2020-12-23T11:48:09.359900Z

@scottbale You may pick my template for app using cli https://github.com/redstarssystems/app-template

1
mike_ananev 2020-12-23T11:48:55.360200Z

This template adapted for IDEA. Use make for control.

clyfe 2020-12-22T18:21:15.333100Z

see -M (main) or -X (arbitrary fn) here: https://clojure.org/guides/deps_and_cli#_using_a_main https://clojure.org/reference/deps_and_cli

Ed 2020-12-22T18:27:36.333300Z

it looks a bit like javascript?? if you have a javascript function, you can call .toString on it to get it's source and parse that string? is that what you mean?

scottbale 2020-12-22T18:40:24.333500Z

Thanks. I'm still working my way through all that documentation. So in my example a user would have to know to invoke

clojure -M -m cli
at a minimum. My question is, can the cli namespace somehow be specified in deps.edn? Is there some even more minimal clojure command like
clojure -M
or like a way to have project specific usage resulting from clojure -?. Or is it just not designed|intended for that?

scottbale 2020-12-22T18:42:13.333700Z

I suppose it's a moot question, once the project were packaged up as a proper release, presumably a jar file with a start script.

clyfe 2020-12-22T18:43:00.333900Z

in an alias: :main-opts ["-m" "my.ns.with.main" "arg1" "arg2"]

clyfe 2020-12-22T18:43:55.334200Z

then: clj -M:thealias

borkdude 2020-12-22T18:56:04.334400Z

@scottbale If your CLI only uses clojure.core and tools.cli and some other commonly used libs, you could also consider babashka, since that is built with this usage in mind.

👍 1
borkdude 2020-12-22T18:57:43.334700Z

Another option (for regular JVM Clojure) is just writing a script which you can invoke directly, not with a main. Like here: https://gist.github.com/borkdude/e6f0b12f9352f3375e5f3277d2aba6c9

borkdude 2020-12-22T18:58:30.335Z

But typically (with deps.edn) you would write an alias with pre-defined main args like explained above.

scottbale 2020-12-22T18:59:43.335200Z

Thanks to you both, this is very helpful and exactly what I was wondering about: how is this typically done.

2020-12-22T20:31:29.336800Z

Don't think so

2020-12-22T20:34:11.337Z

Hum, actually it does seem popular. This one is as well: https://generateme.github.io/fastmath/fastmath.stats.html

2020-12-22T20:34:44.337200Z

Can't say which one is most popular though. I'd say both are production ready if that's what you're worried about

2020-12-22T20:45:35.337400Z

I guess it depends who the user you are targeting is

2020-12-22T20:45:52.337600Z

If a Clojure dev, then use an alias. Then they don't even need to git clone or anything

2020-12-22T20:46:10.337800Z

They just add the alias to their deps.edn user config, and now they can use it

👍 1
1
2020-12-22T21:06:17.338300Z

I think the difference is fastmath uses Java implementations under the hood, while kick.stat is fully implemented in Clojure using transducers.

Eugen 2020-12-22T22:32:46.347Z

I've also built a CLI with https://github.com/l3nz/cli-matic (features on top of tools.cli ) and I had a good experience.

👀 1
borkdude 2020-12-22T22:34:37.347300Z

docopt is also an option: https://github.com/nubank/docopt.clj (also works in babashka as a lib)

👀 1
✔️ 1