Category Archives: Uncategorized

2018

Previously: 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009.

Another year draws to a close, and I’m pleasantly surprised that, on reflection, this one turns out to look all right.

I get the sense – mostly from reading the newspaper – that anxiety and malaise are the zeitgeist for 2018. Always a man on the cutting edge, I felt this way myself in, say, 2016. But over these past few years, I’ve moved toward a place of peace. One of the dominant narratives in my personal life in 2018 has been a continued, purposeful disengagement from the constant connectedness and “convenience” that seems to define modern life for most folks. This means: no social media; no smart phones; no online news; online commerce only when absolutely impossible to do offline, and no Amazon at all; very little internet use, really, beyond what’s necessary for work; very little TV. As I’ve moved past the initial cleansing phase and re-identified some pre-Internet rhythms, it’s become clear to me that the anxiety of constant connection is mostly manufactured. The companies that build your intentionally addictive devices, crank out nonstop content, funnel the content you produce into their proprietary streams, sell your information and your attention and your habits to advertisers – they use FOMO, convenience-as-birthright, apocalypticism, and other forms of anxiety as a marketing tactic, to ensure your continued participation in their economy. When you begin to recognize and appreciate this fact, the associated anxiety kinda melts away.

Instead of internetting, I’ve filled my time and attention in various ways in 2018.

  • I’ve been taking drawing classes – mostly figure drawing – for the last two years or so, and have discovered lots of joy and a little bit of talent in this area. Learning to see as an artist has been a totally new experience for me, like discovering a sixth sense, and I feel like it’s caused me to engage with the world in a different way than I did before.
  • I recently started doing yoga. As a big and very unflexible person, I never figured I could or should. But it’s been a really interesting way to learn about what my body can do. Just as importantly, it’s been a much more effective strategy for engaging with meditation and purposeful breathing, something I’ve struggled to do before in isolation.
  • I had a really excellent reading year. I read quite a bit more than last year, and my hit rate for really good books was abnormally high. I read a handful of interesting biographies of historical American politicians and a stack of Pulitzer-winning novels. I was especially affected by John Updike’s Rabbit Angstrom novels, which resonated so much with me that I found it hard to pick up another novel for several months after I finished them.
  • I learned to solve a Rubik’s Cube for the first time in August, and since then, I’ve learned to solve it pretty quickly – I average under 30 seconds. This is kinda goofy, but for me it’s been a bit like learning to draw – a new way of visualizing and engaging with objects in the world.
  • For the first time in years, I took real vacations! A total of almost four weeks where I was completely AFK, no email, no work, no screens. I spent most of this time gloriously homebound, reading books, doing chores, reestablishing my house as a place of relaxation.

In terms of work, I had a pretty productive year. My participation in WordPress has been scaled way back. This is partly about me and my shifting interests and energies, and partly about the evolution of that project in directions that leave me without an obvious role. After some time away, I became more involved in BuddyPress toward the end of the year, and look forward to plowing through a couple more BP-focused projects in the beginning of 2019. I did some interesting client work and launched some meaningful projects. There was a period over the summer where I felt fairly despondent about the state of my work, but I’m catching a bit of a second (third? twelfth?) wind as I head into the new year.

As usual, the things I’ll remember most about the year are closely tied to my wife and kids. Not much I can say in a blog post to express this, aside from suggesting that the emotional energy and focus that I conserve by disengaging with Modern Life gets mostly channeled back to my home.

I have the sense that 2019 will be a bookend year for me in many ways, as I head toward a 2020 that’ll contain my fortieth birthday, my tenth wedding anniversary, my wife’s PhD graduation, my tenth year of doing professional software work. As I approach that corner, I’m looking to do another round of meaningful and interesting work, and to sink deeper into the world around me instead of the WorldWide Web. Happy new year 😀

Improved ‘equalto’ validation for Parsley.js

I’ve been playing with Parsely.js for form validation on a client project. It’s pretty nice, but I was unhappy with the ‘equalto’ implementation. ‘equalto’ allows you to link two fields whose entries should always match, such as when you have password or email confirmation fields during account registration. parsley-equalto is not symmetrical. If you enter some text into A, and enter non-matching text into B, B will not validate. If you correct B so that it matches A, then B will validate. So far, so good. But if you correct A so that it matches B, it won’t change the validation.

So I wrote a custom implementation that triggers validation on the paired field, making the link between the fields symmetrical. It’s pretty ugly (to avoid recursion) and doesn’t have any error handling, but it should point you in the right direction. (I’ve called it iff, which you can look up.)

The markup:

<input
  name="password"
  id="password"
  data-parsley-trigger="blur"
  data-parsley-iff="#password-confirm"
  data-parsley-iff-message=""
/>

<input
  name="password-confirm"
  id="password-confirm"
  data-parsley-trigger="blur"
  data-parsley-iff="#password"
  data-parsley-iff-message="Passwords must match."
/>

The validator:

var iffRecursion = false;
window.Parsley.addValidator( 'iff', {
    validateString: function( value, requirement, instance ) {
        var $partner = $( requirement );
        var isValid = $partner.val() == value;
        if ( iffRecursion ) {
            iffRecursion = false;
        } else {
            iffRecursion = true;
            $partner.parsley().validate();
        }
	return isValid;
    }
} );

WordCamp Chicago 2016 slides

I just finished giving a talk at WordCamp Chicago titled “Backward Compatibility as a Design Principle”, in which I discussed WordPress’s approach to backward compatibility, how it’s evolved over the years, and its costs and benefits when compared to the alternatives. I’m not sure that the slides are very helpful in isolation, but someone asked me to post them, and I am not one to disappoint my Adoring Fans. Embedded below.

wc-chicago-2016

download as pdf

2015

Previously: 2014, 2013, 2012, 2011, 2010, 2009.

I wrote one year ago that 2015 would be a hard year. And so it was. Here’s the requisite Dec 31 braindump.

In January, I became a dad again. Seeing my two kids grow together and become friends has been one of the privileges of my life. But the logistics of having two kids is pretty different (and much more exhausting) than when you’ve got just one child. The process of finding balance is ongoing.

The other big event of the year is that, in July, our family moved from New York City to Chicago. Moving sucks. It’s expensive, it’s disorienting, it’s inconvenient. My possessions were in limbo with the moving company for something like 13 days. Practicalities aside, it’s hard to leave NYC. While I grew up in the Midwest, I spent my entire adult life in New York and feel like a New Yorker. There’s something about New York that features more prominently in its residents’ inner ideas about who they are than when you live in, say, Ohio. In the same way as when I left graduate school, I’ve had to face this miniature identity crisis by reevaluating those aspects of my former life that are actually (ie, not just conventionally) central to what makes me tick, and then find a way to fit them in the context of my new life. This project is also ongoing 🙂

Partly in response to my man-without-a-country malaise, and partly out of philosophical motivations, I poured myself into free software contribution in 2015. More than 50% of my working year was spent doing unpaid work on WordPress, BuddyPress, and related projects. (More details.) I’m a vocal proponent for structuring your work life in such a way that it subsidizes passion projects, though numbers like these make me wonder whether there’s a limit to how far this principle can be pushed. I guess I’ll continue to test these boundaries in 2016.

One of the things I’d like to do in 2016, as regards work balance, is to find more ways to work with cool people. I am a proud lone wolf, but sometimes I feel like there’s a big disconnect between my highly social free software work and my fairly solitary consulting work.

Happy new year!