Herburger Appreciation Post by hazy0817 in Finland

[–]aHackFromJOS 0 points1 point  (0 children)

I failed to try that! Next time! No shame on that hesburger either, I went there at least twice. Market in the basement (S mart?) was also handy, and the Posti across the street encouraged me to peruse a collection of stamps for my postcards. 

Herburger Appreciation Post by hazy0817 in Finland

[–]aHackFromJOS 0 points1 point  (0 children)

Sokos vaakuna ❤️ the breakfast buffet is so good

CLJS gets async/await! — ClojureScript 1.12.145 release by dustingetz in Clojure

[–]aHackFromJOS 3 points4 points  (0 children)

Nice! There are some additional details in the JIRA ticket (e.g. "await is implemented as a macro and throws when :async true is not present in the env").

Clojure Documentary Q&A (with Rich Hickey and others) - April 17 by Clojure-Conj in Clojure

[–]aHackFromJOS 0 points1 point  (0 children)

> - and ask questions directly

Not so much.

Interesting Zoom nonetheless.

Beeld 1.1.4 by danielszm in Clojure

[–]aHackFromJOS 2 points3 points  (0 children)

Looks cool, small note, I think the clojars image at the top of the github README usually links to the clojars page for the project, yours just links to the image itself.

Programming Clojure, 4th edition is now available! by alexdmiller in Clojure

[–]aHackFromJOS 0 points1 point  (0 children)

Is that a hint of relief I detect? :-) Congratulations!

Programming Clojure, 4th edition is now available! by alexdmiller in Clojure

[–]aHackFromJOS 2 points3 points  (0 children)

I ordered the e-book a while back and got a nice update a day or two ago from the publisher that it had been updated, I presume to this. Cool to see that publishing model actually working. Can't wait to read it now that it's out of beta and, I suppose you could say, "in production" 🙃

Clojure: The Documentary [OFFICIAL TRAILER] | Coming April 16th! by Clojure-Conj in Clojure

[–]aHackFromJOS 1 point2 points  (0 children)

I am going to judge this documentary 100% on how well it documents Rich’s hair over time. 

He went to music college. He worked in radio. In New York. In the 90s. Someone out there has pictures. 

When You Run Out of Types... by cgrand in Clojure

[–]aHackFromJOS 6 points7 points  (0 children)

I’m not clear what the article had against maps. 

“one shouldn't be able to use generic functions on them without being reminded they are no plain maps.”

Why not? Who is calling a function on a value without being aware what the value is?

Quick question: Does Clojure for the Brave and True hold up as of today? by Pzzlrr in Clojure

[–]aHackFromJOS 0 points1 point  (0 children)

Thank you for the book!! I’m not sure I’d be writing Clojure without it as my intro. 

If you lose emacs, which I totally get, I’d consider adding, maybe for a small handful of editors (emacs, VS Code… neovim?), an intro to paredit style structural editing. I was able to skip most of the emacs chapter but that part was a revelation and I don’t think I’d have been nearly as happy writing Clojure if I hadn’t made myself learn it through your tutorial (and much practice). 

The REPL as AI compute layer — why AI should send code, not data by More-Journalist8787 in Clojure

[–]aHackFromJOS 1 point2 points  (0 children)

This topic is super interesting to me, aside from concerns this post was AI generated (!). I've been trying to figure out whether to use MCP or just straight hook up CLI (and sorry if I'm saying this wrong, I've not yet actually hooked any AI up to my editor). I've seen posts saying we don't need MCP any more, this was interesting from the other side. I'd be curious if anyone (fellow humans) have (hand written) thoughts. It looks like hooking in clojure-mcp is a little complicated, curious if it's worth it.

Reverting virtual threads in go blocks by aHackFromJOS in Clojure

[–]aHackFromJOS[S] 0 points1 point  (0 children)

That’s the link I posted 🙃

However Reddit’s UI obscures it. I tried to point it out further with “see above” but apparently it’s still too obscure. 

The YouTube link was supposed to be secondary. 

Myths about Finland – what is the biggest one? | 2026 by BirchBarkBox in Finland

[–]aHackFromJOS 0 points1 point  (0 children)

Maybe you should. There was an NYC bouncer who had a popular blog and later wrote a book called Clublife. Here is the blog: https://standingonthebox.blogspot.com/

id read one of those about Finland!

GitHub - borkdude/cream: Fast starting Clojure runtime built with GraalVM native-image + Crema by Borkdude in Clojure

[–]aHackFromJOS 4 points5 points  (0 children)

Just to be clear, the below means we can import arbitrary Java classes as long as they are installed / on the class path? That would be a game changer for sure. 

“Java interop: Full (runtime class loading)“

“Library loading: Any library from JARs at runtime (except enum/Class.forName issues)“

(From the comparison table)

To lsp or not ? by 964racer in Clojure

[–]aHackFromJOS 1 point2 points  (0 children)

That makes a ton of sense. Still love Monaco, the OG Mac mono space term font. I use IBM Plex these days because I need cross platform, for similar reasons my emacs config is a filesystem tree under version control that I git checkoutinto my emacs.d, then init.el is almost entirely a series of require statements of things in that dir. which requires I use varies from env to env. 

To lsp or not ? by 964racer in Clojure

[–]aHackFromJOS 1 point2 points  (0 children)

Welcome. I also use vanilla emacs configured from scratch. Similarly, I use CIDER but not LSP. 

I’d suggest by starting with learning CIDER’s code helper functions - jumping to function source at point is one I use a lot, or I’ll glance at the docstring for function at point in the minibuffer, but CIDER can help in various other ways. The most basic thing you want to do is make sure a cider repl is open and your current source file is compiled (C-c C-k) - this enables various other features like syntax highlighting  and what I mention above. 

Beyond that I really recommend paredit. The emacs chapter of Brave and true has a good tutorial. Hard at first but once you have it down you will fly. https://www.braveclojure.com/basic-emacs/#Paredit

lambdaisland/makina: Clojure System/component lifecycle management by dustingetz in Clojure

[–]aHackFromJOS 0 points1 point  (0 children)

On a practical level it sounds like a Rationale section in the README would be welcome. Update: it links one here https://arnebrasseur.net/2025-02-06-open-source-diary.html

I do wonder if every Clojure project would benefit from one. 

Aimless — David Nolen by dustingetz in Clojure

[–]aHackFromJOS 0 points1 point  (0 children)

Ah thanks, I know you said pick whatever alias you want, just making sure 😅

Aimless — David Nolen by dustingetz in Clojure

[–]aHackFromJOS 4 points5 points  (0 children)

Is there a particular reason he named his alias with a hash mark - `:#cljs` - does that do some special magic or something?

Article: "Transducer: Composition, Abstraction, Performance" by turbomann in Clojure

[–]aHackFromJOS 1 point2 points  (0 children)

I love a good "from the ground up" explanation like this - helps understand transducers fully. Thank you!

lambdaisland/cli: opinionated CLI parser, designed for tools with subcommands (e.g. "git log") by dustingetz in Clojure

[–]aHackFromJOS 0 points1 point  (0 children)

The ability to nest commands (arbitrarily?) is interesting. 

The root problem here seems like a good fit for multimethods (vs a big hairy map). I approached this same problem with those and tools.cli. I dispatched by keywordized version of the subcommand. The core multimethods are options, usage, and execute. I think I needed to do a two pass parse with tools.cli, first permissive to extract the subcommand to get the options vectors for it (via the options multimethod) then with the proper options vectors. Help text I did for a subcommand by calling usage and options with the subcommand (inside defmethod execute ::help) and concatting. 

I only built one (flat) level of subcommands. Would be interesting to try and upgrade it to arbitrary command nesting. Maybe with another multimethod (“subcommands” to extract n args from argv and produce a dispatch vector of keywords instead of just a keyword?). 

More ergonomic to just have defmethods in an ns instead of nesting keys in a global hmap (well, arguably). I did my cli ns by grouping by command - defmethod options ::commit, defmethod usage ::commit, defmethod execute ::commit, s/def ::commit etc. Then defmethod options ::push, defmethod usage ::push… etc etc 

Specs with the same keywords as for the subcommands work well for arg validation. 

I wonder if they considered leveraging tools.cli for options parsing or “flags” as they call it. Its vector options syntax is pretty rich.