WordPress memcached 3.0.0

Some software is so stable that it becomes stagnant. Yesterday’s update of the WordPress object cache drop-in for memcached flings it from both categories, back into active development where it is sure to capture the attention of WordPress site administrators around the world.

So much for drama and spin. All that really happened was this: I pushed a major-version update that finally allows `wp_cache_flush()` to work for WordPress sites using memcached. You probably shouldn’t care at all; you had better click away to a video of a suburban father longboarding with a short-legged dog.

In case you do care, it can only be because you belong to the elite club of techies who administer a WordPress site with the help of memcached. Our records on this population are scarce. By one estimate–surely a miscalculation–there are fewer than ten installations of this software in the world. You may call it hubris but I suppose the number might stretch well into two-digit territory.

What you few need to know is this: upgrading to 3.0.0 will instantly flush your entire cache. This will happen because the key format has changed. I didn’t bother writing any code to gradually migrate keys, nor do I offer any other strategy mitigate this potentially catastrophic effect. You should be keen enough to handle it.

Beyond that, you can look forward to fewer problems along the lines of WordPress getting stuck in a database upgrade loop. This is when you’ve upgraded your database but WordPress keeps insisting that you haven’t, locking you out of wp-admin. That’s what happens when `wp_cache_flush()` has no effect. That’s just how it was for multisite installations because memcached’s own flushing mechanism was too blunt for such use.

How it works is not too hard to invent. Cache keys are automatically prefixed with a number that pseudo-uniquely represents the current “flush count” of either the current site or the global cache. Flushing is accomplished by incrementing that counter so that stale entries are hidden to subsequent accesses. The counters are stored in memcached so they exhibit the same performance characteristics as the cache entries they marshal.

2016 is not the first time we have tried this. Eight or so years ago, the same strategy was attempted on what was and is the world’s largest WordPress installation. Sensing trouble, we backed away from the high road and skirted the problem by inserting proprietary code in our copy of WordPress. If you’re the type that wants to dive into the gory details of these hacks, we have a special place for you.

We revisit the high road now because time has taught us to lean into trouble. We cherish our scars and we regret having sustained so few of them over the years. Second, we want future projects to hold tighter to the ethos of open source software and pushing improvements upstream for all to enjoy.

Like all versions of WordPress and this drop-in extension, 3.0.0 is free of charge. It will cost you one or two cache reads every time WordPress generates a page. If you find this expense immodest then I hope you will contact me about your use case.

I hope 3.0.0 proves stable enough to vanish back into obscurity. If it gives you trouble, come find me and we can make 3.0.1 together.

Thanks to Peter Westwood for reviewing the code and suggesting an improvement.

Managing Challenging Behaviors in Neurotypicals

Restless Hands

[This is a long overdue repost from my old blog. It is both satire and very serious. It is satire in that it is very closely modeled on actual articles I see frequently online, and it borrows much of the tone and phrasing of those articles. It is serious in that I very much hope it will make the people who write, read, and share those articles think a little more deeply about what it feels like to be one of the people that those articles are about. It is also serious in that it is legitimate and honest advice for autistic people who find the actions of non-autistic people stressful and exhausting– as most of us do at times. We,  as much as anyone else, deserve to have that stress and frustration openly acknowledged. But I also hope that by turning the spotlight back on the majority, I can…

View original post 345 more words

After Sabbatical at Automattic

In May of my 10th year at Automattic the company adopted a paid sabbatical policy: 5 years on, 3 months off. It wasn’t easy to consider how to spend this opportunity. It took a couple of weeks to decide that my first sabbatical should be personal, free-form and soon.

The policy was still new and evolving. One early amendment was a planning requirement: if taking 3 months off, give notice 3 months in advance. I got in before that went into effect (or abused my senior privilege, maybe) and chose July, August and September of 2015.

It took the month of June to clean up after myself, document things and pass leadership of our in-house Hadoop projects to Xiao Yu. I offered to be on call for emergencies but Xiao knew that it was just the workahol talking. No ping would issue.

The first couple of weeks were a period of withdrawal. Soon I was able to stop scanning my inbox for important requests. One work-related tweet momentarily elevated my pulse but it was actually nothing.

We took the kids to Vermont to visit friends and family for a month. This was our shortest Vermont summer trip to date. We used to stay for fall foliage but the kids are in school now. Automattic lets me work from anywhere so I would just rent office space and keep working. But this time it was a real summer vacation for the whole family.

On the way home we crossed into Canada to see Niagara Falls. That’s one box checked, but probably worth doing again in a few years.

Other than a few Swift tutorials and false starts with iOS ideas, I didn’t code at all. Everything I did was in Xcode so my Emacs hands will need some exercise.

One significant event was my oldest child starting kindergarten. Every weekday morning at 7:15 we walk to school. This is my first externally enforced daily routine in more than ten years. This rekindled my interest in knowing what time it is throughout the day. So I got an Apple Watch.

Automattic can change a lot in just three months. People come and go, projects advance, priorities evolve. Three things are making the reintegration easy: full documentation, good search and great coworkers. It’s good to be back.

Want to work here or work with me? Apply!

Adding Songs to Baby Dance

The girls (3 & 4) have a tiny subset of my music library on their devices. It’s time to update their playlist which I named Baby Dance back when they were babies. They hear songs they want from my library and ask for them. Some I added by request, some by paternalartistic edict. Might as well give them a good dose of the stuff that’ll be making them roll their eyes after they become convinced that all parents are lame. Mom will let me know if I accidentally added anything that doesn’t belong.

The Beatles – Love Me Do, Penny Lane, Help!
Ben Folds – Still Fighting It
Blind Melon – No Rain
Bob Dylan – Leopard-Skin Pill-Box Hat, Just Like a Woman
Bob Marley – Three Little Birds
Cake – Short Skirt/Long Jacket
Caribou – Andorra (album)
Carole King – I Feel The Earth Move
Construction Joe – Lizard
The Dave Brubeck Quartet – Time Out (album)
Erik Satie – Three Gymnopédies 1-3
Frank Turner – Dan’s Song
Jack Johnson – Mudfootball
Jamiroquai – Cosmic Girl
Manitoba/Caribou – Up In Flames (album)
Outkast – My Favorite Things
Phish – Stealing Time From The Faulty Plan, Esther, Tweezer, Chalk Dust Torture
Queen – You’re My Best Friend
Shawn Wasabi – Marble Soda
Soundtrack – Broken Flowers (Ethiopian jazz)
Soundtrack – Waking Life (tango)
Thievery Corporation – The Mirror Conspiracy (album)
UB40 – The Way You Do The Things You Do
Underworld – Dubnobasswithmyheadman (album)

They already have a lot of songs and kids’ albums but I’m always looking for recommendations.

Two kinds of NUX

To me there are two different ways to read the term “NUX”.

* (NU)X is the experience provided to new users. (New User)’s Experience
* N(UX) is when any user experiences something unfamiliar. Novel (User Experience)

“NUX” commonly means (NU)X. We use “new users” to refer to people who are signing up and starting to use the service. “NUX” therefore refers to the signup flow and maybe some early interactions.

I prefer to think in terms of N(UX) because it’s user-centric and personalized. (NU)X is an onboarding process with an end whereas N(UX) treats novelty from the viewpoint of the user throughout their lifetime. You can apply N(UX) thinking to (NU)X but that’s not where it ends. And not every (NU)X is a N(UX).

Examples

we should try to offer the right variation for individual users

New users all look pretty much the same on arrival: just a bunch of unauthenticated HTTP requests for a signup page. When you know nothing about the individual users you can’t differentiate between them to sort them into signup variations. The more you know about them, the better you can tailor their experience. Do they need a guide? A map? A hint? A challenge? No help at all?

It looks like you are trying to start a blog. Can I help?

Clippy was a good idea that became an ironic cliché because it was too eager to help. It kept repeating its distracting wiggle onto the screen long after the user stopped needing its simplistic instruction. Good help can come from an automated agent if it doesn’t take the form of an attention-starved acrobat.

Please listen carefully as our menu options have changed.

This ubiquitous admonition is annoyingly disingenuous. They don’t actually keep track of whether you have called and listened to the menu since the latest update. Good help remembers what you already know.

 Yellow! Yellow! Yellow! Yellow!

Have you ever noticed a newly installed traffic signal on your daily commute? Commuters are terrible at noticing because they are conditioned by familiarity to be less alert. This is why new traffic lights are magnets for accidents. Where I live, road crews typically give commuters a few days of flashing yellow to alert them. Blogging about a change isn’t enough; respecting the habits of seasoned users saves lives.

Pleas

With N(UX) you can see that every user slips in and out of familiarity. Even tenured users and the developers themselves go through N(UX) now and then. My WordPress.com account is ten years old and I’m constantly getting N(UX)ed.

Knowing whether a given user is in unfamiliar territory depends on knowing where the user has been and whether the territory has changed. Depending on how comfortable they are with novelty, they’ll either need a guided tour or be happy with a hint.

N(UX) is not a yes-or-no question, a one-way ramp or a single fact for each user. It is a record of a relationship between a person and software, a profile that maps familiarities and predilections. The software has a “mental model” of the person and adjusts itself to suit them, or offers instruction when needed.

For a start, ask the beginning user if they want help. Just not too acrobatically.