I know, it's been quiet here. Real life has been taking priority. But I've been working slowly on a few things:
.zippackages. This will make it easier to freshen up the default theme in the repository, minimal as it is.
Queuing, performance, UI, preview management, and more.
Time for a check-in. It's been a bit.
What to do about blockers and long-runners?
One thing I've been wrestling with on and off is how to deal with long-running operations that are potentially blocking. For instance, deleting tags. If you have to delete a tag and re-queue 200 pages because of the deletion, the re-queuing operation can be quite expensive, and it can hang input for a long time.
The current solution I have for this is to allow such operations to be operator-batched. That is, we do the queuing and deletion in batches of, say, 25 or 50, with either the operator re-confirming at the end of each batch or using an AJAX page to keep things humming. It's not ideal, because it brings up all kinds of questions of how to lock things that are not necessarily directly affected by these operations (what if someone adds a tag to a page while it's being deleted?). But I'd rather have some plan for how to do this properly in the long run than no plan at all.
Tag deletion is now live.
I just landed a new feature: deleting tags. Rebuilds are also intelligently queued to handle both pages and archives affected by the change.
Next up is a way to merge tags on rename. Shouldn't be too difficult.
A new way to look at work in progress.
I just landed some improvements to the ways previews are generated. There's a new field in the FileInfo table (which lists all the physical files generated for a given blog), which holds the path to the last preview generated for a given fileinfo entry. This makes it easy to mop up after them when we don't need them anymore, and to allow them to be persistent if we want to allow that option in the future.
The site works properly on mobile.
Somewhere along the way I never properly added the
<meta name="viewport" content="width=device-width, initial-scale=1.0"> declaration that makes the site more readable on mobile. It's in now. Silly me.
New feature, just landed.
I landed a commit last night that allows tags to be renamed across a blog. When you do so, all pages affected by those changes are automatically queued for republishing.
One tiny drawback of implementing this right now: There's still no mechanism for locking pages for editing. It's possible renaming a tag while a page is being edited could have weird side effects.
To offset that, I added a little safeguard. if you attempt to edit a tag used by a page that has itself been modified (or even just opened) in the past hour, you'll get a warning. It's not a perfect solution but it's a nod in the right direction.