tag: streamful
Continuing https://www.calmabiding.me/post/2025-04-03-gzhh1rrf46ao9q2pow3j2 .. building the desktop app in the same language (ClojureDart is basically the same as Clojure) as the server app was a HUGE lift. It was basically a copy/paste with a few tweaks. I am super happy with how quickly it went.
Finally got the new client to be able to connect and get a list of streams from the server! That was a LOT. Especially with a custom transport protocol.
This interview with Senator Booker after his historic speech brought me to tears. I am moved even more to keep doing the work I’ve been doing. It’s not just about building a social network. It’s about building safe spaces for people to help each other out however they are able.
more inside...Big insights from today’s chat about Streamful
more inside...I feel like I've pretty much gotten to a place where I can rebuild this blog using streamful. It will be an interesting challenge! The only issue I have right now is that my only mac computer is super slow. Also, ios development is hard for me right now. But I shall do my best!
more inside...Today's main commit mostly simplifies the tests and documentation
A long ramble about why I’m likely going to drop the idea of federation from Streamful altogether.
more inside...Today’s commits get us almost all the way to being able to have a fairly full featured social networking system if it all runs on one server. Feels like all that’s left is notification of when aggregates change. They are all fairly large with a ton of refactoring but still only took a few hours. Pretty good!
Today I had no energy to add new functionality but I did to do some cleanup! Proud of myself as I uncovered some shortcuts I took that I'm not proud of. Had to back in test coverage! If I were really taking small steps and only writing enough code to make a test pass this would not have been necessary methinks. Yuck.
A bunch of commits and files showing how you can make threading happen in streamful. Likely these aggregators will end up being default for all servers. Tho they may evolve a bit, like, for example, only keeping the last X messages in a thread. The rest of them might end up being a search or something?
more inside...I continue to think more about how we make sense of data in various ways with this model.
more inside...Still working on aggregates — slowly but surely! I have successfully compiled text with only a whitelisted set of allowed symbols, which is quite handy. Figuring out how to do the hot swap from pending to active and retroactively applying them is next. It’s almost like I’m building a database engine. Which I am not at all qualified for. What could possibly go wrong?
This commit is quite thorough. It breaks down all the data structures and how one would produce a message that the streamful server could understand.
more inside...Today's coding session I decided I needed to write more tests. Which naturally led to adding a configurable maximum upload size. Which is good!
I'd call this.. exploratory unit testing. :-)
re this earlier post, I was wrong. Soon as I published it I found the energy to build a new thing (API for listing available streams). It took a surprisingly short amount of time (~36 minutes from start to push)!
Did some cleanup work today but didn't build anything new into streamful. But I think that's ok. The energy will return!
Added encryption but not in the usual way. More like SSH than TLS. The eventual intention is to use a combination of DNSSEC and TXT records to prove that a server belongs to somebody. The server's public key is in the TXT record! There is prior art of a similar approach.
So when you establish a session, we use the libsodium key exchange protocol to set up a secure session. Then all future messages are encrypted between client and server safely!
Well.. I hope. I am not a security person. But they say if you use libsodium you probably can't go wrong?
Ha!
This commit was a huge leap forward in my understanding of how Netty works under the covers. Namely, we were decoding arbitrary messages in a long running connection where sometimes you get a complete message and sometimes you don't. This was the moment when, for the first time, the "sometimes you don't" actually happened.
Today all I accomplished was protecting the privacy of a stream at a very basic level. Server admins can still see everything though. Wasn’t too terribly difficult!
Today I started in on storing and retrieving messages in a stream. Makes me wonder: how do I protect against malicious server admins hijacking my stream? Was thinking of having every message posted to a stream also including a hash of the stream’s “root message.” Trying to figure out how this can be hijacked if all messages are signed and can be verified by other clients.
Took a bit of a break but this morning I sketched out the basic storage mechanism for stream configuration.
more inside...The beginnings of public/private key authentication are in the code!
more inside...Long-ish post about the next steps on streamful — the bottom two layers are explained in more detail. Lowest layer is fairly stabilized!
more inside...I’ve done a lot more thinking about the thing I am itching to build. I’m tentatively calling it streamful. Finally figured out the elevator pitch when talking to my husband about it this morning…
more inside...It appears that the brain churn continues. I want this app to be ultra customizable. So you don’t have to pick a different app depending on what kind of social media you want. Events and microblogging? No problem. Threaded conversations? Absolutely.
Something nobody has ever considered yet? Why not?
So getting the primitives right will be critical!
My brain is currently churning on something that will replace the two apps I’ve built for blogging and event hosting. Hopeful that it will cause action soon!
Work in progress
This site was part of a larger effort to bring more of my digital life "in-house" so to speak. And of course I'm already working on a replacement. Follow along at streamful