emmett mcdow

nana 0.2.4: multi-workspace support, stability improvements

I set out to build nana for myself primarily, and hopefully others secondarily. I set out to make it as simple as possible, I didn't like all of the buttons, extensions, and bloat generally in other note-taking apps.

I had this initial idea, where I said "what if we made search so good, you don't need folders". Search is hard yes, but I didn't think you had to work too hard at it to do better than what existed out there already. I saw the concept of folders as an implicit admission that the search wasn't good enough.

As I've been using nana more and more, the more I found myself wishing for some sort of scoping of my notes. While I don't need folders to find what I want, different notes mean different things. Sometimes I just want a scratchpad, sometimes I want to write a journal entry, sometimes I want to publish a blog post. It's not a huge deal to have all these things next to each other organization-wise, but it kind of sucks for when I want to publish to my blog. I found myself writing the first draft in nana, and then copy-pasting the contents into a regular text editor so I could edit it with an LLM and publish it. The problem here was that often I would forget to update the version living inside nana. So the canonical version would be somewhere on my drive, while nana had the stale version.

Workspaces

Introducing the concept of workspaces. Now, you can add a "workspace", which is just another directory on your computer. This allows you to easily manage your data within nana, and separate the differnent types of writings you may do.

here's the workspaces dropdown up at the top

here's the workspaces dropdown up at the top

This limits what files you are editing at any time, and is tied to a directory on your machine.

Stability

I noticed that nana would periodically crash while using it, with no discernable cause. I thought it might be fun to mess around with fuzzing.

My options were to either use an off-the-shelf solution that I didn't understand, or just build a simple one myself. I think you can guess which option I chose.

I ended up making a pretty basic fuzzer for dve. It really just calls the interface of dve with random inputs. That produced a few crashes, which I fixed. Once I was convinced that level seemed to work, I further modified the fuzzer by making a setting where it would pass valid yet still random inputs. This gave another set of errors I fixed.

Hopefully I shouldn't have too many crashes moving forward, and if not, I can always make my fuzzer more complex.

One nice touch I added was the ability to replay seeds which caused crashes.