<isd>
Yeah, turns out a lot of development can happen in 5 years.
<ocdtrekkie>
Who knew? Heh. Awesome thing is this package should be a lot more maintainable than the original one.
<ocdtrekkie>
So shouldn't be five years between releases going forwards.
<isd>
I should write up a blog post about the `patches/` directory thing
<isd>
Good to document best practices for packaging.
<isd>
(The hedgedoc and mediawiki packages work this way now too)
<ocdtrekkie>
Yeah, we should do more blogs in general too. I haven't done any master branch merges because we haven't talked about procedure there, but with Cloudflare Pages in, should be trivially deployable.
<ocdtrekkie>
I want to do kinda a new app recap at some point, we have some good new packages. I am hoping to get one or two of my in progress ones sorted soon.
_whitelogger has joined #sandstorm
XgF has quit [*.net *.split]
XgF has joined #sandstorm
xet7 has quit [Remote host closed the connection]
xet7 has joined #sandstorm
mnutt_ has quit [Remote host closed the connection]
mnutt has joined #sandstorm
mnutt has quit [Ping timeout: 255 seconds]
mnutt has joined #sandstorm
mnutt has quit [Remote host closed the connection]
mnutt has joined #sandstorm
mnutt has quit [Remote host closed the connection]
mnutt has joined #sandstorm
mnutt has quit [Remote host closed the connection]
mnutt has joined #sandstorm
mnutt has quit [Ping timeout: 260 seconds]
<isd>
I came across https://penpot.app/, if someone wants to play with porting a clojure app (*cough* TimMc *cough*)
<TimMc>
haha
mnutt has joined #sandstorm
<TimMc>
Not something I have personal interest in, but I'd be happy to help out if someone wants Clojure-specific help.
<TimMc>
I don't actually do much with Clojure these days. I'm more into Kotlin.
mnutt has quit [Remote host closed the connection]
mnutt has joined #sandstorm
mnutt has quit [Ping timeout: 258 seconds]
<ocdtrekkie>
I think it's one of those nasty localStorage-based apps, IIRC
<isd>
I hadn't really looked very carefully
<isd>
It's not the sort of thing I would use heavily either, but it came up in my mastodon feed, and I went "ooh, clojure"
xet7 has quit [Remote host closed the connection]
mnutt has joined #sandstorm
<ocdtrekkie>
I pretty much look at every new open source web app I see and look long enough to filter it into my head between "uses localStorage" and "could be a Sandstorm app"
<ocdtrekkie>
Unfortunately many of the new popular ones are the former, PWAs have really inspired people to store all sorts of crud in the browser for no good reason.
<ocdtrekkie>
Packaging 2048 to use Sandstorm storage instead of localStorage felt like writing a whole application in itself, and that was for literally two fields per user.
<TimMc>
Sounds like there's a dire need for an adapter layer.
<ocdtrekkie>
For anything significantly above, a non-automatic way of patching localStorage is still probably super painful.
<TimMc>
To be fair, 2048 really does seem like it should just use localstorage.
<ocdtrekkie>
There's a longstanding issue about it, I forget the exact reasons it was difficult to address, but it's been brought up a bunch of times.
<ocdtrekkie>
Ah, but the Sandstorm app has high scores. ;)
<TimMc>
:-P
<TimMc>
As soon as you want to use remote storage, you have to think about desynchronization, concurrency, transactionality, all sorts of nonsense.
<ocdtrekkie>
tbh, even storing a single user high score in the browser irks me because then I can't try to beat my record anywhere else.
<ocdtrekkie>
Wordle stats for me are spread across like four different devices, and hence, I can't fathom their purpose.
<ocdtrekkie>
And yeah, I think a bit part of the issue is automatically patching over localStorage in a way that still ensures data isn't lost.
<ocdtrekkie>
I think Laverna was originally built for localStorage and Jason did a blog post about adapting it to Sandstorm.
<TimMc>
I think that autopatching would just lead to a lot of trouble.
mnutt has quit [Remote host closed the connection]
<TimMc>
Fundamentally, accessing a datastore across the network requires more logic and what-ifs than using localstorage.
<TimMc>
"Read and then write" is no longer a simple operation.
<TimMc>
If you just change it to a read and an unconditional write, you've introduced bugs.
<TimMc>
s/write/write across the network/
<TimMc>
I think you could do it if you introduced the following restrictions:
<TimMc>
1) Client takes a lock on the backend when it starts up.
mnutt has joined #sandstorm
<TimMc>
2) Client loses the lock when it disconnects.
<TimMc>
3) Writes and even reads can only happen while the lock is held.
<TimMc>
4) On reconnect, client can try to reacquire the lock, but if any writes have come through in the meantime, the client is instructed to reload first (to clear any internal state).
<TimMc>
Anything looser than that is asking for trouble.
<isd>
I think the thing that was hard is that the localStorage API is synchronous. We could just build on top of synchronous XHRs, but that seems like a recipe for laggy UI interactions.
<isd>
But basically every other API that does IO is async, so it's hard to do much of anything.
mnutt has quit [Remote host closed the connection]
mnutt has joined #sandstorm
<ocdtrekkie>
GitHub issue is #91
<isd>
Also, Jacob Weisz, occasionally 2048 locks up on me for a bit.
mnutt has quit [Ping timeout: 260 seconds]
<ocdtrekkie>
I suppose that makes sense, though I never had any issues.
<ocdtrekkie>
I stopped playing when I won.
<isd>
I don't play much anymore either
<isd>
..but I was hitting it like every-other game.
<ocdtrekkie>
In what way did it lock up? The only time I've had issue is when the window focus isn't on the frame, aka, the arrow keys aren't being sent to the game window.
<isd>
I've had that happen too, but I've also had it happen and then clicking in the window (sometimes repeatedly) doesn't fix it, but eventually it starts responding again
<ocdtrekkie>
Interesting
<ocdtrekkie>
I suppose that could be based on a storage request getting stuck somehow.
<ocdtrekkie>
It does load and save the entire game state on every change.
<ocdtrekkie>
Though "entire game state" for 2048 is not a particularly large text string.
mnutt has joined #sandstorm
mnutt has quit [Ping timeout: 258 seconds]
garrison6 has joined #sandstorm
garrison has quit [Read error: Connection reset by peer]