In June Journal, I left off with a thought to make toykv thread-safe and to implement simple compaction. I did get to thread-safety, which took a while, but I didn’t get to compaction. I did make several other improvements, however.

I also did some work on ai-codeexplorer. Here, I now have a work in progress UI using textual, a python terminal UI toolkit. I haven’t merged it to master yet as it’s incomplete. It was interesting to work with an event driven UI toolkit again, however, it’s been quite a long time since I’ve done that.

Overall, it wasn’t as productive as previous months, but school holidays do that to a person; there’s plenty of other things to do!

Read More…

Link
Enough With All The Raft

I really enjoyed this transcript of a talk. It’s an exploration of the design space of distributed consensus by Alex Miller, who I first came across several years ago when Cloudant were looking at FoundationDB; Alex was one of the primary authors. He knows his stuff. There are several great papers linked in the post.

This talk is an extension of my earlier Data Replication Design Spectrum blog post. The blog post was the analysis of the various replication algorithms, which concludes with showing that Raft has no particular advantage along any easy analyze/theoretical dimension. This builds on that argument to try and persuade you out of using Raft and to supply suggestions on how to work around the downsides of quorum-based or reconfiguration-based replication which makes people shy away from them.

Enough With All The Raft

Read More…

Maggie Appleton talks about something close to my heart: how can we use AI to help us think, rather than do the thinking for us?

But can’t we add a smidgeon of the harsh professor attitude into our future assistants? Or at least the option to engage it?

Sure, we can do this manually, like I did with Claude. But that’s asking a lot of everyday users. Most of whom don’t realise they can augment this passive, complimentary default mode. And who certainly won’t write the optimal prompt to elicit it – one that balances harsh critique with kindness, questions their assumptions while still being encouraging, and productively facilitates a challenging discussion. Putting the onus on the user sidesteps the problem.

Professor Bell and I are both frustrated that there is no hint of this critical, questioning attitude written into the default system prompt. Models are not currently designed and trained with the goal of challenging us and encouraging critical thinking.

A Treatise on AI Chatbots Undermining the Enlightenment

I really enjoy her “harsh professor” prompt, and am considering whether to use it in rapport.

Read More…

Post
June journal: toykv & zed, redux

At the end of Late May Journal: building things I said I didn’t need, I said:

I’m not quite sure what I’ll do next. I am starting to hanker a little after doing some more work on toykv, finishing up the range-scan functionality I never got working well. Somehow, the browser tab holding “Programming Rust” is still open after not having written any Rust for over a year now. Perhaps it’s time to blow the dust off and get back to it.

Like talking about tools and MCP servers inspired me to write Rapport’s MCP support, just thinking about toykv again stirred up enthusiasm for it.

And so, during June, most of my home coding project hours were spent rewriting much of toykv:

  • I updated the on-disk format to use a block-based storage layer.
  • I finished up the scan function that allows reading a range of keys. Previously you could only read a single key. The new block-based format involved writing a bunch of iterators that simplified completing this work.

Overall, this made toykv more … real. More like a real database would be structured on disk (though still far from being production quality).

I also found myself having another try at using Zed, as there are now efforts to use the increased focus on Vim functionality to support Helix style interaction.

Read More…

I spent my “projects time” in the latter half of May working on my AI apps, Rapport, codeexplorer and a bit on my other ai-toys.

First off, after saying that I wasn’t sure whether it was worth adding tool support to Rapport, I ended up going all the way and adding support for connecting to local MCP servers.

Second, I decided that codeexplorer deserved to graduate its own repository. It felt like it had outgrown being part of ai-toys.

Finally, I wrote a streamlit UI around the image generation capabilities of GPT-4o. No more “you must wait 15 hours to make more pictures of gigantic anime cats” error messages in ChatGPT for me!

Read More…