Fork me on GitHub
#clojure
<
2020-12-22
>
Pavel Shatyor09:12:43

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 Marttila13:12:50

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

didibus20:12:29

Don't think so

didibus20:12:11

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

didibus20:12:44

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

didibus21:12:17

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

Otis van Duijnen Montijn15:12:56

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?

borkdude15:12:08

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

Otis van Duijnen Montijn15:12:10

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

borkdude16:12:10

documentation on what exactly?

Otis van Duijnen Montijn16:12:45

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

Ed18:12:36

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?

scottbale18:12:43

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).

scottbale18:12:24

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?

scottbale18:12:13

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.

clyfe18:12:00

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

clyfe18:12:55

then: clj -M:thealias

borkdude18:12:04

@U07PUGBA6 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.

👍 3
borkdude18:12:43

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

borkdude18:12:30

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

scottbale18:12:43

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

didibus20:12:35

I guess it depends who the user you are targeting is

didibus20:12:52

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

didibus20:12:10

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

👍 3
3
Eugen22:12:46

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.

👀 3
borkdude22:12:37

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

👀 3
✔️ 3
hiredman05:12:56

depending on how simple your tool is, you may not even bother with aliases or a deps.edn at all

hiredman05:12:27

for example https://git.sr.ht/~hiredman/lions doesn't have a deps.edn at all, and the README just lists a bunch of different clj -X ... invocations

👍 3
mike_ananev11:12:55

This template adapted for IDEA. Use make for control.