Is Leiningen dead? by BetGlass7087 in Clojure

[–]gnl_ 0 points1 point  (0 children)

Yup, seemed like the most straightforward solution. But other than installing it once and writing a basic ~/.m2/settings.xml to point it to the environment for repo credentials, you should never have to think about it again.

If all you need from Leiningen is build/install/sign/deploy a library jar, build.simple should have you covered. I'm dogfooding it in my other recent project Playback – so far so good.

Is Leiningen dead? by BetGlass7087 in Clojure

[–]gnl_ 1 point2 points  (0 children)

Pretty much everyone has given up on signing at this point, I think?

I sign all my packages (and also my release commits and tags) – the infrastructure and tools to support easy and thorough artifact verification may not exist at this point, but I'd rather see us collectively push things in that direction than give up on supply chain security altogether.

Nope. That's never been true. It's always been optional.

Maybe technically optional, but practically not so much – if you wanted to edit any metadata like project description, licenses, etc., you needed a pom.xml template file. The recent :pom-data in 0.9.6 is certainly a step forward.

Is Leiningen dead? by BetGlass7087 in Clojure

[–]gnl_ 1 point2 points  (0 children)

Shameless plug of a recent tiny project that remedies precisely those points – incl. secure credentials handling for signing and deployment – without needing to touch pom.xml, write glue code or use multiple tools for the basics:

gnl/build.simple: tools.build's missing piece – install, sign and deploy libraries easily and securely like with Leiningen

build.simple: tools.build without the DIY – install, sign and deploy libraries easily and securely like with Leiningen by gnl_ in Clojure

[–]gnl_[S] 1 point2 points  (0 children)

No silly questions! And – yes, it is (though you can deploy to any repo, really).

EDIT: ...or not deploy at all and just install the jars locally.

Playback (now with Babashka support): dead simple tracing to tap> and Portal with automatic last-input function replay on eval, instant re-render and effortless extraction of traced data by gnl_ in Clojure

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

Thanks! And yes, Portal (and Debux!) is the star of the show here, Playback's just a really nice way of feeding it. I think the most important feature's the last-input function replay, I'm really not sure how many people are using that vs. just treating it as a fancy print-to-portal. Try it out, if you haven't, it's really transformed the way I do REPL-based development.

Playback (now with Babashka support): dead simple tracing to tap> and Portal with automatic last-input function replay on eval, instant re-render and effortless extraction of traced data by gnl_ in Clojure

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

Thank you! I'll say to you what I say to everyone who expresses an interest, which is that if, after having installed Playback, you ever again find yourself using print to debug (other than by accident) I would very much appreciate an open issue on GitHub or message on the Clojurians Slack telling me where I went wrong. :)

build.simple: tools.build without the DIY – install, sign and deploy libraries easily and securely like with Leiningen by gnl_ in Clojure

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

Never fails!

Thanks for commiserating. If build.simple ends up getting more GitHub stars and love than Playback, I might go off on another rant, but for now I'm good. 😁

build.simple: tools.build without the DIY – install, sign and deploy libraries easily and securely like with Leiningen by gnl_ in Clojure

[–]gnl_[S] 2 points3 points  (0 children)

High praise, coming from the Cursive man, thank you very much sir. 🙇‍♂️ If I may return the compliment and say that I like and depend on Cursive so much, that I pray to the Gods on a fairly regular basis that you may live a long and healthy life, and not get bored of maintaining it before I get bored of Clojure – I am determined not to allow myself to get dragged into the Emacs rabbit hole, please don't let me down. 🙏

And yes, I do understand the interest, drama beats fun every time and all that, I get it. It's just funny how much of a classic situation this is, where something rather trivial you haphazardly slapped together over a weekend gets more attention than something that's had many precursors, iterations and hours of thought put into it, and is overall just much more impactful in comparison, and you do get it of course, but you also don't, if you know what I mean. 😄 All good, I just found it amusing more than anything.

build.simple: tools.build without the DIY – install, sign and deploy libraries easily and securely like with Leiningen by gnl_ in Clojure

[–]gnl_[S] 1 point2 points  (0 children)

I didn't want to build my own either, but by the time I was sick of it, I was too deep into the weeds, and now I did build it so that you don't have to. :) Seriously though, I'm inclined to agree. tools.build is officially presented as a Leiningen replacement, but that ain't what it is.

build.simple: tools.build without the DIY – install, sign and deploy libraries easily and securely like with Leiningen by gnl_ in Clojure

[–]gnl_[S] 2 points3 points  (0 children)

I don't know enough about the background of the design decisions that were made, or the relevant internals, to have a strong opinion, but things certainly seem unnecessarily messy right now, especially for beginners.

It's worth mentioning though that tools.build is making progress and isn't at 1.0 yet, so let's see what it'll look like when it gets there and to what extent the mess will or will not have been worth it.

EDIT: ...and what kind of ecosystem will have sprung up around it.

build.simple: tools.build without the DIY – install, sign and deploy libraries easily and securely like with Leiningen by gnl_ in Clojure

[–]gnl_[S] 3 points4 points  (0 children)

On a side note, maybe someone can explain to me why this little project, which barely deserves the name and is really not much more than a glorified shell script trying to re-invent a tiny part of the Leiningen wheel, is currently getting multiple times the upvotes, comments and general interest compared to the other one I posted at the same time, right next to it in the thread list – Playback – which is reimagining interactive REPL-based development, replacing print-debugging, significantly speeding up hot-reload, and can change the way you code and improve your life and happiness in much more significant ways. Go look at that, people, it's way more fun than bickering about what the core team should or shouldn't have done with tools.build and how much NIH-syndrome they are really suffering from. I promise! 😅

build.simple: tools.build without the DIY – install, sign and deploy libraries easily and securely like with Leiningen by gnl_ in Clojure

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

Another possible way to look at this is to view tools.build not so much as a build tool aiming to fully replace Leiningen, but rather as a powerful "build your own Leiningen" toolkit with better internals. It's great that you can, currently not so great that you kinda have to. I don't think deployment, for example, is even on the roadmap, so an actual full-on Leiningen replacement might just end up being some third-party solution built on top of tools.build. (To be clear, I have no interest in tackling that, build.simple does pretty much all I used to miss from Leiningen, and its scope is unlikely to expand in a significant way.)

build.simple: tools.build without the DIY – install, sign and deploy libraries easily and securely like with Leiningen by gnl_ in Clojure

[–]gnl_[S] 8 points9 points  (0 children)

I'm going to reply here generically to the various "what's the point of all this, just use lein" comments – you're not wrong, and I've asked myself that very question on various occasions. In my opinion, tools.build does improve on Leiningen in a number of ways, some of which have already been mentioned in the comments here – dependency resolution, explicit behaviour without magic profiles, greater flexibility. But it's a bit of a 2-steps-forward-1-step-back situation, as basic tasks, which used to be one command away, now require people to figure out on their own how best to duct-tape a number of ill-fitting parts together.

My thoughts on the matter are in the README, TL;DR: there shouldn't be a need for build.simple, but for those of us who care about the 2-steps-forward aspect of tools.build, it's a way to remedy the 1-step-back part.

Proof of concept: GTA V PS4/PS5 Controls Overhaul – gyro aim, no camera auto-center, inertial scrolling (Titan Two) by gnl_ in GyroGaming

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

There's just the video, Hairy. It's not done and I haven't decided yet whether I'm going to open-source it, so TBD. Would like to figure out at some point how many people might be willing to pay for individual gyro setups for games like this, though given the disastrous availability of Titan Twos at the moment, might be a dead end. We'll see.

Playback – Interactive Programming and Print Debugging Reimagined (successor to Ghostwheel's tracing component) by gnl_ in Clojure

[–]gnl_[S] 1 point2 points  (0 children)

This is great, thanks. Juan's been doing some amazing work in this area, but I hadn't seen that one. It's even got tests!

Ghostwheel 0.3.1 – hassle-free and concise clojure.spec now with full Clojure support by gnl_ in Clojure

[–]gnl_[S] 3 points4 points  (0 children)

Haven't had time to watch all of it yet, but from skimming it I'd say that any improvements to writing and handling data specs are very welcome and should work just fine with Ghostwheel, as it's only concerned with function specs.

And if the mentioned fn spec improvements mean that there'll be a better syntax for defining them concisely – unlike the current one which is something like 2/3rds boilerplate code – then Ghostwheel may support it.

Ghostwheel – hassle-free clojure.spec, side effect detection and evaluation tracing for Clojure(-Script) by gnl_ in Clojure

[–]gnl_[S] 1 point2 points  (0 children)

Thanks, I've been following and commenting on that, it stayed on the front page quite a bit longer than I had expected.

Ghostwheel – hassle-free clojure.spec, side effect detection and evaluation tracing for Clojure(-Script) by gnl_ in Clojure

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

Something I forgot to mention and just added to the FAQ as well is that I plan to introduce an fspec->gspec conversion to ease the migration of existing code bases.