good morning, may every macro you write be one a function couldnβt do today.
We have inline meta. We can do both
well, may your stack traces be unsurprising then π in all seriousness, have you found another use case for inline meta besides performance optimization?
I was under the impression that's the reason it exists to begin with
Happy hermaphrodite morning
Are you a bit of a gardening man? It's really nice to see everything come up this time of the year. Very nice flower.
Thanks. I would describe myself as a reluctant gardener. It's getting into me though. You?
I have a growing appreciation for it over time, although I'm very lacking in plant care skills.
I thought you were an Avant gardener?
π₯
After 25 years of living in a near-desert (California), I'm now somewhere that gets plenty of rain and plenty of sunshine so things grow really well (including the lawn which has to be mowed twice a week sometimes in the spring!). So I need to get out and start weeding my borders ready for summer, and get the big potted geranium back out on the patio to see if it has survived overwintering in the basement (cool, dark, water once every six weeks). Looking at the long range forecasts, we should not see any more freezes now until late autumn (although we might get a few single-digit nights before the month is out).
Morning friends
Good morning π
I feel like I have enough experience and knowledge about software to say that, practically speaking, all software has defects. Am I wrong?
It sounds like we work at the same place π
Nothing, really. The bug reports started dying out when users started accepting that the software just was βcorrectβ. The real underlying problem was that the requirements reflected years of negotiations and compounding changes over an organizational process, leaving corner cases and exceptions everywhere. They really should have simplified that instead of automating, but it was just too entrenched π€·ββοΈ.
I'm often surprised anything works at all. The internet, by all rights, shouldn't exist. It's a tower of mutable state, leaky abstractions, and shared-memory concurrency held together by overworked maintainers. So no, you're not wrong. All software has defects β most just hasn't been triggered yet.
I think the same, often! It's incredible that the internet is a thing. And, indeed, that many other things mostly work π
That reminds me of a song about celebrating that very fact (on a larger scale, though) TWRP - Life Party https://youtu.be/zRs1eoht5qw?si=F5moFzg2Y_nPg3hA
Sounds a bit like Daft Punk, nice!
hah yeah, guess they do π
Here's the lyrics that are apropos of our chat here, they're a bit difficult to make out initially through the vocoder; [Verse 1] Have you ever thought Of our place in the stars? How lucky we are Have you ever thought Of the sheer improbability That you were born? That I exist? That we can even question this? [Pre-Chorus] Think just how amazing it is that we are alive On this tiny little rock is where we all reside Thereβs a million billion trillion stars up in the sky But here we are [Chorus] (So please join me) Please join me, baby And you will see We can be happy on this life journey Now let me tell you how Just stick together (Take it from me) Take it from me, oh yeah Life is a party Itβll set you free and you will soon agree That even when its tough We can make it better
not sure who verbalised this first, but there's an old notion that, given time and eyeballs you can always find one more bug in a non-trivial piece of software, so the number of bugs is effectively infinite
https://en.wiktionary.org/wiki/Lubarsky's_law_of_cybernetic_entomology#English
I don't even feel pessimistic about it or anything, it's just a fact to me. Like gravity or whatever. It's just there.
I vividly remember painstakingly specifying a non-trivial piece of software (data processing), testing it exhaustively before shipping it to production. Only to see the bug reports come in, spending hours upon hours debugging. Every "bug" turned out to be the user simply not understanding what the software was doing (correctly) and having a different intuition about it.
That's another aspect of it. Even if you match the spec perfectly and account for all erroneous scenarios that you can derive from the spec or from common sense, nothing can guard you against opinions π
And not matching a particular opinion might be a defect, or not depending on the situation. If you've built a brilliant car, but people regularly crash it because they find it unintuitive, I'd certainly consider that aspect defective, regardless of how much work was put into the spec and development.
And opinions are not in unison, they contradict each other... So you may have be right and wrong with your above-mentioned implementation at the same time π What did you end up doing, @pdekruif? Figure out how to make it more intuitive, or educate users... Or both?
Let's not forget bugs of circumstances, e.g. just creative failure modes you never accounted for. A bug? Maybe, but certainly a fault.
Depends on how you define "defects", I suppose. And maybe "software" π
Let's celebrate that we get to live this moment! And that the internet, in spite of all that could go wrong, manage to let chat together here and, indeed, listen to a wealth of music πΆ TWRP - Life Party https://youtu.be/zRs1eoht5qw?si=F5moFzg2Y_nPg3hA
Relevant lyrics for what I'm talking about; [Verse 1] Have you ever thought Of our place in the stars? How lucky we are Have you ever thought Of the sheer improbability That you were born? That I exist? That we can even question this? [Pre-Chorus] Think just how amazing it is that we are alive On this tiny little rock is where we all reside Thereβs a million billion trillion stars up in the sky But here we are [Chorus] (So please join me) Please join me, baby And you will see We can be happy on this life journey Now let me tell you how Just stick together (Take it from me) Take it from me, oh yeah Life is a party Itβll set you free and you will soon agree That even when its tough We can make it better
Good morning β π
good morning
morning! β
good morning
Morning!
Morning!
Mooring
Goedemorgen
I'm looking for a new job, and all I can find are jobs I don't think I'd enjoy π
π
Not much! That I'll garuantee!
Exercising the God-given right to do f*-all is a good prospect π
did your old job end?
what would a job you enjoy look like?
Interestingly, I fear I would have the same problem. Like, Iβm getting so picky these days. Canβt have micro services, canβt do scrum, probably shouldnβt have an old-school SPA. Canβt be too enterprisy. I think the only solution for me now is to start my own business.
there's plenty of monolith datastar startup-y things around probably?
but even easier to create your own probably
Yah, but htey have to pay unreasonably well and let me go windsurfing/skiing whenever.
haha
what's your age again, if I may ask
And I canβt be working with super energetic positive weβre going to be the next unicorn kindβa people either. Need a certain amount of grumpyness.
55.
I was considering trying to move more into technical leadership (I mean I've already done a lot of that, it just wasn't usually what I was hired for), and then I look at job ads and it's all "you'll make sure people hit their token quota"
I think I'd go back to a lecturer/teacher role sooner than taking on something manager-ish, I don't think I would be happy
Managing the people I do is actually quite nice. Itβs more like a mentorship than please get your shit together and pack this sprint.
Anyways, time to go climbing.
I enjoy straddling technical and strategic, helping people succeed technically, making business understanble to devs and devs understandable to business... but the people above me in the hierarchy need to be somewhat sensible. And it seems in general these days the higher up the corporate ladder you look, the less sensible people get.
I guess not every company is pushing AI on their employees. My wife asked for Claude Code. She first has to prove if she's going to be more efficient with it, before they will give it to her. It was kinda surprising to me since I've also heard stories about companies that force their people to swallow AI
it was great to talk to people at DCD in person because it drove home to me what I already kinda assumed, that scepticism of AI dev tools is extremely widespread, and some of those sceptics are executives or technical leaders themselves and they want to see receipts... it's a minority that is really pushing for this stuff, but they tend be concentrated in the higher regions of company power. High on sillicon valley sci-fi, not really understanding the technology, but believing all the sales pitches about how inevitable and revolutionary it is.
yeah, I enjoyed the AI pushback on both confs
My contract comes to an end in August. And I have a similar problem as @slipset, i don't like Spring Boot/hibernate and React/Vue/next.js fronted. Or microservice.
A (technical) management role would be ok, as long as there isn't a lot of paperwork to do
For me https://coffeeandjunk.com/via-negativa/ is the best way (the only way?) to make decisions.
I just blame Rich π
buy an e-ink device and hammock, take time off for 2 years, who knows what'll happen ;P
I might be making a website. Any thoughts on the framework for a crud web site? Datastar is looking interesting (tho not sure how much @borkdude was trolling). The last time I tried to build something this small was on heroku 14 yet years ago
Datastar doesn't require SSE. If an action returns Content-Type: text/event-stream, you get SSE goodies. If your action returns Content-Type: text/html, it behaves like HTMX-style request/response. Attached screenshot is from https://data-star.dev/guide/getting_started.
Is anyone here using datastar in anger?
At least @dnolen that I know of.
Yes
In simple terms if you are using it to do streaming html immediate mode its basically this with some nice conveniences + signals + morph.
All of these demos use it: https://example.andersmurphy.com https://cells.andersmurphy.com https://checkboxes.andersmurphy.com
And we use it at https://instabooks.io (where dnolen works).
I'd add there's two ways to use it 1. As a simpler HTMX with request/response. Morph is the big improvement here. 2. Streaming HTML immediate mode rendering (how those demos use it and how we use it at work). This model is very much view = f (state) where you send down the HTML for the whole view on every change.
wow. I'm surprised that quickbooks has such a bad UI that there is a market for a faster UI, but well done
There's always a market for more responsive ( faster) UI
@andersmurphy so, what do you hate about datastar? (and what do you like about it π )
I agree with @borkdude about keeping it simple. And if I made add, I would prefer using HTML form primitives if it truly is just basic CRUD, no need for HTMX or any kind of JS in that case
There's a lot of good, fast Hiccup-based libs these days
and if you need a more interactive experience at some point it is easy to upgrade from one of those to a frontend lib using Hiccup (or HTMX).
I also made a little thing for interactivity using hiccup: https://github.com/borkdude/reagami only 5kb of JS
the thing about datastar and HTMX is that you keep all your state on the backend
but often I don't even want to have a backend. So it kinda depends what you need.
@otfrom Hate, I'd say mostly that it's got more stuff than you need (despite being 11kb). Like, if you use it with SSE/immediate mode, you don't need a lot of the library. I'd also say the SDKs are a distraction. You can use datastar by implementing one function (my demos only use patchElements), if you need more stuff it's a total of three functions. So the SDKS are a mistake as they make people think its more complicated than it is. I'd also argue it's not a framework. Signals are another distraction. Great when you need them, but can lure you into having more state on the client than you should. Common for people to have a ton of signals. I have 2-3 max and they are for high level things (scroll position, current focus etc). What do I like? I can keep all my state on the backend in one place, have view = f (state) over the network, have multiplayer and push out of the box (without having to change how I write views). Don't have to compile, build, bundle a fat client. Can write everything in Clojure/hiccup.
Oh and the hidden gem is that it's backend language agnostic so you get lots of cross pollination across language communities. Which is fun.
What are you using for things like oauth and authn/z?
Don't understand the question. Session cookies.
i.e unguessable random + lookup in a database
you could also look at https://biffweb.com/, which is kind of an opinionated off-the-shelve solution for web apps. it still uses htmx, but the author considers moving to datastar I think i've heard him say at the conj
^move to datastar is going ahead last I checked.
or https://caveman.mccue.dev/ which is a "framework" but only by being a tutorial on how to add stuff one by one to your app
ah nice, sqlite + datastar, sounds right for basic apps
(disclaimer: I haven't touched datastar so far)
The nice thing is sqlite + datastar scales right up for more complex stuff. They both get out of the way and clojure can do the heavy domain lifting.
it's also so nice operationally
The dream. litestream makes it even better.
^honestly the thing that made moving from postgres to sqlite viable for me
I'm not familiar, how does litestream help with that?
To the second streaming point in time backups to S3 and other block storage
Just chiming in that I use D* in anger. I've been fully immediate-mode pilled. Datomic tx-queue triggers batched client renders, nearly zero client side page. I definitely think it is simpler overall. It is less code, less moving parts. The code you see just makes sense.
> I thought datastar has everything htmx has, but more. This is how the author advertises it on X @borkdude is right, that is accurate and I am here
> the thing about datastar and HTMX is that you keep all your state on the backend this is inaccurate @borkdude, you keep state where it belongs. mouse movements are not owned by the backend, but MOST state is. HTMX though does want everything in the backend yet leaks backend state into your browser
yeah I meant application state, not local state of UI elements (which is sometimes frowned upon, but I'm not against it)
i figured but we get a lot of people that miss that while signals should be use sparingly... they are vital to keeping state in the right place
@ramblurr could you elaborate on what kind of application you're building? Is it something collaborative, given your use of Datomic tx triggers? Which choices/trade-offs did you make?
I wasn't trolling but my preference for "websites" is go static when possible so I don't have to "keep things running"
Same for me, but surely something needs to be running if it is crud (tho could go very old school that way)
the last interactive things I made ran on cloudflare, I made the "lambda" in squint, so I still didn't need to keep it running all the time. if you truly need a crud website with a local sql db, and doesn't have to be professional, I think nextjournal has a thing running here: https://docs.apps.garden/
and datastar I hear a lot of good stories about so I'd try it
If you just do request/response style, htmx would probably be simpler. Datastar is better suited for real time updates (like live dashboards and such), at the cost of being more complex (uses SSE, etc). Both are great tech in my humble opinion.
thank you for your nuanced answer. I thought datastar has everything htmx has, but more. This is how the author advertises it on X
he's on here as well I think:@delaneygillilan
It could be simple enough to be ring and hiccup
Tho something like collaborative editing could be good on some things
It is all very early
Start as simple as possible in that case π€·π»
Ray, you're forgetting the most important criterion for choosing between htmx and D* - who has the better meme game
I'm so out of it I don't know the answer
Interesting, thanks for that.
@pdekruif Apologies for the delay. It's a back-office application with your standard table/master/detail crud forms. Lots of forms. Quite a few complicated workflows. Nothing collaborative about it at all really, except a couple screens that are often pulled up by many users in meetings and benefit from "real time" updates. But that wasn't a requirement, just a nice property you get with this architecture. 100s of users, dozens active at any one time. Not big. Are you familiar with the philosophy behind cjohansen's Nexus and Replicant libs? I've taken that approach and applied it to the frontend and backend. View is a pure of function of my db + in memory ephemeral state. All writes happen as commands totally separate from the read path. Trade offs: I am putting more data into datomic than I usually would have, this will bite you eventually, but this dataset won't ever grow so large. Could easily use a different store for that data, but I don't want to add more operational complexity. And while it's not really a trade off, it's just a learning experience. After decade+ of the request+response model, you have to rewire a bit how you approach the frontend to work well.