This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2024-03-14
Channels
- # aleph (4)
- # announcements (10)
- # babashka (21)
- # beginners (67)
- # biff (7)
- # calva (4)
- # clojure (40)
- # clojure-europe (11)
- # clojure-gamedev (17)
- # clojure-losangeles (3)
- # clojure-madison (1)
- # clojure-nl (1)
- # clojure-norway (78)
- # clojure-uk (3)
- # clojurescript (83)
- # core-typed (18)
- # cursive (1)
- # datalevin (2)
- # datomic (2)
- # gratitude (2)
- # hyperfiddle (56)
- # introduce-yourself (1)
- # london-clojurians (1)
- # matcher-combinators (10)
- # membrane (161)
- # polylith (16)
- # portal (4)
- # reitit (4)
- # releases (3)
- # ring (2)
- # shadow-cljs (9)
- # squint (2)
- # timbre (10)
- # xtdb (14)
- # yamlscript (1)
how do people compare performance increases/decreases across time/versions? i have a library that i'm considering changing with some speed decreases and i want to be able to see across time how i've gained/lost performance to know what the best way to go is
Don't know the actual answer but there are GitHub bots/actions/whatever that compare difference in test coverage. Perhaps something like that exists for performance, or can be adapted to it.
First you need a performance regression suite You want to make sure it runs reliably in the same environment every time (sometimes a run matrix, CPU, OS, JVM version) and compare results every commit
running in CI is good. I'll have to look around to see if anyone's doing this in clojure already
third party tools like which track time of running functions (for example NewRelic). tests (to build confidence) but for real in production: • compare A vs B • or with bigger scale run N k8s pods (instances) with ver A and 1 with version B (canary) Depends how difficult is to make performance tests, but sometimes it is impossible to reconstruct production in full scale.
this is for a cli app/library i develop, so no deployment, just running from the terminal
but in general third party tool and wrap fn which you are interested in to measure that
it's a static analysis/linting library, so no
If you want to test CLI invocation e2e use hyperfine For specific functions I'd use jmh
Hello. I am writing an application for use at a pub. Barcode scanners are used to work up a bill, identify the customer, and generate a ledger entry. The logic is simple and written already with core.async, so the I/O is replaceable. Input layer for the finished product should be straightforward, but in the meantime I want to write a demo where the user input is mouse clicks. I’m picturing a crude drawing of a bar scene with clickable zones. Doesn’t matter if it runs in the browser or elsewhere. I’m seeking advice on how to proceed, and for the sake of discussion what if I were/had a {2D,3D} artist and wanted to create an interface accordingly. If I were to proceed right now I imagine I would use SVG in the browser.
> image maps that is nice, I didn't knew about it
The app will be real but the input layer is barcode scanners—no GUI needed. The demo input layer is mouse clicks
Security related question for the senior clojure developers: Do you have tools or habbits you would recommend to use in tracking security releases. Personally I'm thinking of automating a clj-watson check. But are there other approaches you would recommend?
Have you modified it to work with clojure or extended it with another system? the readme doesn't list clojure package support unless i'm completely blind
There's multiple layers to this, and you in a way have to workaround Clojure being a language that's not really supported by any security-related software out of the box, that said:
• as part of my workflow, whenever dependencies change, a pom.xml
is automatically updated and checked in - that works with GH's Dependabot
• container image scans are useful, but if you use the standard approach of including only the uberjar and the JDK in final build stage
• something like Detectify to run periodical checks about web applications is quite useful
• finally, nothing can really replace an annual pentest
We didn’t modify it. It finds and checks jars in our uberjar. Perhaps to your point, it’s probably more apt to finding Java CVEs than clojure, but this is still helpful
Thank you both, you've given me something to think about and discuss upwards.
We use clj-watson at work.
Late to the party but we use https://github.com/rm-hull/nvd-clojure as a part of our build process.
If we upgrade java to 21, do we need to worry about the pinned threads issue? We’re using clojure 1.11..1 atm.
Just don’t use virtual threads, plenty of other positive gains to be gained by using java 21 considering, in my experience the transition was smooth once I stopped trying to make fibers work to solve a problem that I had solved with core async and thread pools
We've had JDK 21 in production for a while (but we tend to update the JDK as each new version appears -- not just for LTS versions). We ran into a couple of memory leaks in JDK 19 and had to rollback to JDK 18 until JDK 20 came out with the fixes, but mostly it's all been smooth sailing. One gotcha is that if you build your uberjars on JDK 21, they may not run on JDK 20 or earlier due to a new interface added to the collection class hierarchy in Java 21, so beware of upgrading in the "usual" dev / CI / staging / production order (depending on where you build uberjars).
Should we hold of until 1.12 comes out of alpha?
depends heavily on what you're doing
if you're not using virtual threads, then no difference
ah awesome
thanks
even if you are using virtual threads, it's likely only an issue if you are passing unrealized seqs or delays that block for I/O