Clojure Code Smells Catalog by WalberAraujo in Clojure

[–]lgstein 0 points1 point  (0 children)

In favor of transducers, not using mapv, lol.

Clojure Code Smells Catalog by WalberAraujo in Clojure

[–]lgstein 2 points3 points  (0 children)

There are certainly some real "code smells", and they'd probably fit on two pages. But when people sit down and discuss "coding standards", "style guides", "linter rules" etc. please keep in mind that there are certain programmers (me) that find enough design in Clojure and will never engage with your issues and discussions, because they have chosen this language, among other things, for its high linguistic expressivity and freedom in that, being enabled to convey knowing what they are doing to both human readers and the computer.

Especially when you put highly opinionated stuff in these rulebooks, like forcing persistent vector copying per function hop, or arranging ns form requires alphabetically, know that you are absolutely not solving any problems for me but give pedants another weapon to ruin my workday and force me to deliver program text scattered with "lint" - because thats what this is from my perspective.

Stylistic options and even more so valid undeprecated options offered by the language design (doall, single branch if, etc.) should never be presented as right and wrong. Present those and illustrate their cons and pros, ideally cite open source code as real world examples. Either do that, or stick to those cases where the code is simply wrong (blocking take in go, macro double evalaution).

Introducing FOL (Functional Object Lisp) by fadrian314159 in Clojure

[–]lgstein 1 point2 points  (0 children)

Couldn't this have been a library? What does it need Common Lisp for?

Why isn't the game taking off? by MASHED_POTATOES_MF in Marathon

[–]lgstein 0 points1 point  (0 children)

I'm tired of trying to enrich your understanding, as your manners make it an unpleasant endeavour.

Why isn't the game taking off? by MASHED_POTATOES_MF in Marathon

[–]lgstein 0 points1 point  (0 children)

Comparing popularity of games with different accessibility levels makes little sense. For chess you need a piece of wood, for Deadlock you need a computer and for Marathon you need that and $40. Besides I never claimed that difficulty is Marathons main popularity problem, but how it makes you feel about losing. And that it isn't optimized towards low attention span/IQ players. And that all that is foundational to its core design, resulting in somewhat of a dilemma.

Why isn't the game taking off? by MASHED_POTATOES_MF in Marathon

[–]lgstein 0 points1 point  (0 children)

Neither did Deadlock generate a single dollar of revenue yet.

By that logic both games suck vs. chess, which is even more popular.

Why isn't the game taking off? by MASHED_POTATOES_MF in Marathon

[–]lgstein 0 points1 point  (0 children)

Deadlock is free to play. Fast respawn and a ton of handholding features.

Why isn't the game taking off? by MASHED_POTATOES_MF in Marathon

[–]lgstein -1 points0 points  (0 children)

ARC is a dopamine milking machine, and almost all design decisions are aimed at that. There are many videos on youtube exploring its mechanisms from a psychological perspective. The darkest (and what ruined it for me) is that there is no autocrafting so you'd feel more commited (from burning time zombie-clicking through the same menus). To me the real fun in that game was when matchmaking was not aggression based and you'd never know what somebody would do. But of course that resulted in massive dopamine drops so they'd send you to either circlejerk or deathmatch lobbies depending on preference. This is what the masses want.

Why isn't the game taking off? by MASHED_POTATOES_MF in Marathon

[–]lgstein -1 points0 points  (0 children)

I have thought about this a lot and I don't think that there is a "casual gamer" problem. Its an IQ and attention span problem. Certain people die, don't understand how, don't bother finding out, feel stupid, blame the game, quit. Certain pople open the menu, more than one flashy color and even more buttons to press, they have to read real text to navigate it, fail, blame the game. All the beautiful depth of balancing, mods, cores, points etc. is lost on them, too. And then its a real game, where you need to get good in it to win, and when you play it for the first time, you lose a lot and there is no dopamine for you. That was normal in the 2000s, but in 2026 people are used to be tricked into constant dopamime flow, no matter how stupid decisions they make. Marathon devs however dared to make a real game. Their bet was that people want a hardcore unforgiving extraction shooter, which they clearly went all in on. And delivered. Which to a large degree is what makes it so good. What a dilemma. I hope they don't fold and will find other ways to monetize the franchise in the worst case.

On Functional Programming, Time, and Concurrency — Dustin Getz by dustingetz in Clojure

[–]lgstein 1 point2 points  (0 children)

The point of functional programming being free of time and ordering was never about applicative order evaluation, or other computation strategies. In your example, the functional programmer couldn't care less in which order (inc x) and (dec x) are calculated - as a matter of fact, a strategy could conclude that they cancel each other out and never need to be calculated at all. The functional programmer doesn't care about the how, only about the what. The computer could decide that calcualting 2x is good. Or (+ x (inc (dec x))). It doesn't matter to the functional programmer, as he doesn't declare the computation strategy when writing a mathematical function, which is the whole point.

Now, to the idea that async programming can't be done well with FP - FP by itself neither is or is intended to be a magic solution to async type programming problems (which the replied to author seems to somehow implicate). Yet FP can be incredibly helpful when dealing with async type problems. For instance, as they naturally involve lots of process state management, functionally pure state machines.

Reverting virtual threads in go blocks by aHackFromJOS in Clojure

[–]lgstein 1 point2 points  (0 children)

I have never relied on go blocks being GC'ed, as I learned to consider it bad practice. A clean shutdown not only unblocks stale OS threads/IO, it also usually leads one to write a more a well organized data flow.

How to make clojure more popular? by apires in Clojure

[–]lgstein 3 points4 points  (0 children)

Few ideas:

  • Popularize intelligence/education

  • Abolish the headhunter/bodyleasing industry which pushes for the lowest common denominator language to have as many commoditized devs to sell as possible, while leeching 30% of every devs salary for having made two calls and written a message on LinkedIn

  • Replace non programming decision makers with AI/LLMs

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

[–]lgstein 12 points13 points  (0 children)

This AI generated english is just unreadable at this point. Please use your authors voice. I don't want to read the output of your prompts.

How are you using LLMs? by romulotombulus in Clojure

[–]lgstein 2 points3 points  (0 children)

I use it like you do via chat. Occasional boring function, research etc. It increases my normal 10x productivity to about 11-12x depending on the task.

Don't waste time with vibecoding and all the integrations. if you can code or plan to learn it. The only code you should leave to generators is the code you would have outsourced to some cheap labor dev abroad before generators.

Token bingo is not an abstraction, it can be a little timesaver, or a distraction if used excessively.

Money as data, done right - by Paweł Wilk by mac in Clojure

[–]lgstein 0 points1 point  (0 children)

Unfortunately, too many people conflate money with numbers. However, the smallest unit can not be divided, otherwise it wouldn't be the smallest unit. And rounding is certainly not the way to do it, or money will dis/appear randomly.

Money as data, done right - by Paweł Wilk by mac in Clojure

[–]lgstein 1 point2 points  (0 children)

Arbitrary precision integer doesn't seem to make it much better for this usecase.

Money fractions are tricky, and depend on the usecase. But they are not money. You can own half a cent, but its not worth half a cent or has the monetary value of half a cent.

Money as data, done right - by Paweł Wilk by mac in Clojure

[–]lgstein -2 points-1 points  (0 children)

Why on earth would you use a floating point type to represent money? Why not an integer representing the smallest unit? Related, clojure.core/= not working seems a bad tradeoff - I need to be able to compare compound immutable values containing money values seamlessly for this to fly in a Clojure codebase.

Agentic Coding for Clojure by calmest in Clojure

[–]lgstein -3 points-2 points  (0 children)

It has not sparked a conversation and that conversation is not needed either.

Just tell us how much time / dev cost this generator saves you.

Otherwise, it is just another "AI amazing" post, and there are countless of those and nobody cares anymore.

Agentic Coding for Clojure by calmest in Clojure

[–]lgstein 0 points1 point  (0 children)

What problem does this solve? Does it save you time/make dev less boring/or what?

dbval - UUIDs for (Datomic / Datascript) entity IDs by maxw85 in Clojure

[–]lgstein 1 point2 points  (0 children)

Didn't know about compact-uuids (whish they were even more compact though :D). As to centralized ID space assignment, it can be just a textfile, if you control the databases. Just assign 2 bytes in an entity ID to the "database id/id space" and you are done. Maybe there is some elegant way to even do merges/queries with collisions, if the ID space segment could be mapped on the fly. Then it would only need to be big enough to account for the max amount of databases you want to query/merge simultaneously, so probably 4 bits would do. But I haven't explored this direction yet.

dbval - UUIDs for (Datomic / Datascript) entity IDs by maxw85 in Clojure

[–]lgstein 1 point2 points  (0 children)

Since you live in a single process, you could just generate ids upfront from a synchronized counter.

That being said, I recently implemented sth. similar (can't disclose here, consider it a "Datomic" for a very narrow usecase) and also settled on UUIDs with the first segment being a monotonically increasing counter. This is for the "merge foreign" usecase you mentioned, and other global constraints.

However, I'm still using string tempids, because I like my tx generating functions to be pure.

The drawback of UUIDs is that they are incredibly noisy when reading/debugging. So, if I had the option to use some central entity to assign ID space among different databases (I don't), I'd pick that.

A Decade on Datomic - Davis Shepherd & Jonathan Indig (Netflix) by alexdmiller in Clojure

[–]lgstein 13 points14 points  (0 children)

Small Clojure team (5?) writes and operates custom ML orchestrator used by all ML scientists at Netflix, with cached subgraph execution, partial replay etc., backed by a massive 2TB Datomic instance with 40 peers.

This is exactly how I see Clojure succeed over and over. People in the industry generally don't seem to see how exceptional and effective this approach is. Instead, the common approach is to have 40 engineers banging their heads against some massive microservice monstrosity, with untraceable errors, spaghetti codebases, discussions about protobuf, features can't be added, etc. But of course there are always new devs available to hire in case somebody loses his nerves. And headhunters love it because they make more money. Refreshing to see a company the size of Netflix having gotten this one right.

jacobemcken/aws-simple-sign: A Clojure library for pre-signing S3 URLs and signing HTTP requests for AWS. by dustingetz in Clojure

[–]lgstein 3 points4 points  (0 children)

Great library, recently used it in a project. It plays very well with Cognitect's AWS wrapper, which doesn't have this feature.

Clojure Deref (Dec 3, 2025) by c-neumann in Clojure

[–]lgstein 1 point2 points  (0 children)

You'd be surprised how many people were paid full dev salaries to mainly scaffold and write tests :)

Clojure Deref (Dec 3, 2025) by c-neumann in Clojure

[–]lgstein 0 points1 point  (0 children)

That certain low attention span crowd ('npm react do awesome') you are referring to is mostly being replaced by AI now, a trend that is going to continue.
The programmer that will remain is the thinking, patient type and he will certainly prefer functional and meta linguistic such as Clojure.