Hacker Newsnew | past | comments | ask | show | jobs | submit | jgrodziski's commentslogin

Yes definitely agree, I own the Rotring 600 and 800 pencil and they are fantastic, as already said the ballpoint version is dependant on the refill. The construction is sturdy and they feel very robust and heavy. But... I've recently transitioned to Pilot Capless fountain pen and it's night and day with the write feeling: https://www.pilotpen.eu/our-products/capless/ with ink bottle refill. The nib size is important, I found the medium too large and landed on the fine nib size.


We also write about our choice of Clojure for application development here: https://defsquare.io/blog/why-we-bet-on-clojure


> - Incredibly slow

Almost as fast as Java, and for performance critic processes 99.9% of the time we bump on infrastructure performance problem BEFORE hitting the wall with Clojure (see https://clojure-goes-fast.com/blog/ for tips and tooling about performance)

> - Hosted on the JVM, so you're going to be dealing with Java eventually

For me it's a major selling point: JVM is battle tested and a wonder of engineering. The Java ecosystem richness is incredible (see tooling above for monitoring and profiling for an example). And the platform is constantly moving forward (see latest JDK with virtual threads, generational ZGC, etc.). And of course GraalVM... (https://www.graalvm.org)

> - No automatic tail call optimization because of the limitations of the JVM, so it feels like you're writing a mess of macros rather than real functional code

Never have been a problem and I don't see the point with macros, and code we write looks _very_ functional...


> JVM is battle tested and a wonder of engineering. The Java ecosystem richness is incredible (see tooling above for monitoring and profiling for an example).

This is all true.

That said, the way I can't help but feel is: keep that entire galaxy of insane bloat two and a half million miles away from me please. :p


The Clojure's approach is to favour libraries over frameworks. We use Clojure on various style of applications (mainly web and API based), hosted on widespread infrastructure technologies of Cloud Providers (Kubernetes, PostgreSQL, Kafka, etc.) and it's a breeze: here are our reasons for choosing Clojure https://defsquare.com/blog/why-we-bet-on-clojure

If you want to look at libraries where some people have settled, here are our _opinionated_ takes on libraries that we use on almost every project:

- HTTP: Ring is the de facto way to manage HTTP request (see https://github.com/ring-clojure/ring/wiki/Concepts) supplemented with various "Middlewares" for web-related concerns (security, logging, content encoding, etc. see https://github.com/ring-clojure/ring/wiki/Standard-middlewar...). Jetty and Aleph are common web servers (and https://github.com/clj-commons/aleph) that implement Ring interface.

- Routing: Reitit (https://github.com/metosin/reitit)

- Single-Page App: shadow-cljs for the build concerns (https://github.com/thheller/shadow-cljs), Reagent with Re-frame for complex/large app (https://reagent-project.github.io and https://github.com/day8/re-frame). Even if we now prefer using HTMX (https://htmx.org) and server-side rendering (Hiccup way of manipulating HTML is just amazing, https://github.com/weavejester/hiccup).

- Schema management: Malli (https://github.com/metosin/malli)

- Lifecycle management: Mount, Integrant or Component (https://github.com/tolitius/mount https://github.com/weavejester/integrant and https://github.com/stuartsierra/component)

- Config management: Aero (https://github.com/juxt/aero) and environ (https://github.com/weavejester/environ)

- Log: μ/log (https://github.com/BrunoBonacci/mulog)

- Time: https://github.com/juxt/tick

- Testing: https://clojure.github.io/clojure/clojure.test-api.html and Kaocha for the runner (https://github.com/lambdaisland/kaocha).

- Package and project management: tools.deps is simple and powerful (https://clojure.org/guides/deps_and_cli)

For infrastructure stuff (PostgreSQL, Keycloak, Solr, Kafka, etc.), just wrapping the underlying Java library or driver is often enough, and there are lots of wrappers for easing the integration. And we implement Hexagonal architecture style to put all of that in place.

Don't be afraid a libraries not moving a lot recently, it's a sign that the library is mature and battle-tested. Clojure is a joy to use every day :)


Mentioning μ/log and no mention of timbre (https://github.com/taoensso/timbre), that is an odd omission. Malli is a great mention, but there ought to be a mention of clojure.spec (https://github.com/clojure/spec.alpha) which has much more mindshare.


Yes I agree, timbre and clojure.spec are great and I used them a lot, nowadays I move to μ/log and Malli for instance. My comment was to provide some guidance for someone outside of the Clojure community to navigate in the library ecosystem. I updated my comment to reflect that it's an opinionated take and just that.


I use Keycloak a lot for authentication and authorisation and I like its flexibility and richness of features.

Running it in production is a no-brainer, the only problem we got was some bad behaviours of some clients that issue a token for every API call as it can put some stress on Keycloak, has to implements some rate limiting in front ok Keycloak to avoid that.

I try to ease its usage with Clojure with https://github.com/jgrodziski/keycloak-clojure I wrote some documentation about Keycloak concepts here: https://cljdoc.org/d/keycloak-clojure/keycloak-clojure/1.30....


There is also the jank language [0] that plays in similar fields.

> jank is a general-purpose programming language which embraces the interactive, value-oriented nature of Clojure as well as the desire for native compilation and minimal runtimes. jank is strongly compatible with Clojure.

[0]: https://jank-lang.org/


Understanding Computation by Tom Stuart is very good.

[https://computationbook.com]


wow how come I've never heard of that book before, it sounds awesome, thanks!


I made this introduction to DDD [0] with my friend Thomas a few years ago. It was specifically intended at developers and to be very practical.

[0] Video of the talk: https://vimeo.com/167722768


GraalVM issue an error if it can't resolve the proper method call or if another Thread is involved in the computation so I find it pretty safe to use. Of course, GraalVM doesn't exempt you from doing some tests.


I'm one of the few client here in France for a few days. I moved from Paris to a quite isolated area (Vercors mountains) with only ADSL (no mobile coverage), and it's night and day, I now get between 100 Mbps and 200 mbps with 30/40 ms latency... I don't have a lot of time with the service to give an exhaustive feedback, but for the moment I'm able to do video conferencing and call perfectly. And the setup experience is great!


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: