One man's ongoing quest to create a blogging system, the Mercury CMS, without the BS.


Long may you run 2017/09/03 14:07

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.


Tags: queue


Let's get rid of this 2017/09/02 20:00

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.


Tags: tags


Preview power! 2017/09/02 11:37

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.


Tags: previews


You can put away your magnifiers 2017/08/31 19:00

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.


Tags: CSS design


Tag renaming is now available 2017/08/30 19:00

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.


Tags: features progress tags


Now, where was I? 2017/08/20 14:00

It's been a while. I owe people an update.

It's been a while. I owe people an update.

No, the project is not dead! I have just been incredibly busy. But between here and there, I found time to do a few things:

There's still a lot left to do, though.

I'm trying to stake out strategic blocks of time to take care of each of these things in turn. Hope to be posting more often shortly.


Tags: bugs progress real life


An update for real this time (April 2017) 2017/04/09 10:00

Emerging from cryosleep, and facing issues.

I know, I know -- not fair of me at all to just vanish like that for months on end. I had a lot of real-life stuff, and that's made progress difficult on this project. Here's the biggest difficulties I'm facing now:

Read more


Tags: Docker deployment installer progress real life templates testing


See all previous posts