We’re two sleeps away from MidCamp and 😱. Despite the exhausting whirlwind of 2020/1 our team has been incredible and we have 4 awesome days planned. People talk about “chosen family”… well this is my “chosen project team”. We’re all here because we want to be, and it shows. 💙🎩🙌

Composer alias vs composer replace for downgrading/removing drush

I was wrestling with composer yesterday to try to get Drush 10 out of a project where I wasn’t ready for it (because while Aegir is amazing, drush 9+ support is still a WIP).

My first instinct was to use “alias”:

composer require drush/drush:"8.4.6 as 10.3.6" --update-with-all-dependencies

That worked, but I don’t actually need drush to be installed in my prod encironment at all, but it is in require in a dependency. That’s when Andrii told me about “replace”:

    "replace": {
        "drush/drush": "^10"

In… a fun loophole/feature, if you use replace but don’t specify a replacement, it acts like ignore.


I had a wonderful #OpenSource moment yesterday...

Our team at YMCA of the USA was midway through pushing updates to 150 sites on our Drupal PaaS offering when another Open Y partner agency’s team shared in Slack that they’d discovered a major issue with the code we were in the middle of deploying! 🙀 Even worse, when I started looking at the issue, it turned out to be a bug that I’d helped to introduce into the codebase. 🙀🙀

Over the course of yesterday, teams from around the world collaborated to push not one, but four fixes that we’d discovered. This was all made possible because the Open Y community has decided to work collectively, even as agencies competing for the same customers, in order to extend the YMCA mission into digital spaces.

Thanks to everyone who helped make these fixes possible. Our sites are better together!

The child decided to pack her own toys up to give herself for Valentines Day which she’s now calling Christmas because we haven’t taken our tree down. We all need a little more joy right now…

What were great virtual conference experiences people had this year? What did organizers do to make it more human and less of “just another Zoom meeting”?

We got walkie talkies…

Kid: Come in, Dad, over. Me: Rodger Rodger, over. Kid: Don’t call me Rodger!

Walkie jokes must just be built-in to our systems now. 😂

Composer tip for the day:

This will most likely fail and cause you endless pain and sadness.

composer require project/with-lots-of-dependencies:1.2.3

This will work. Makes developers happy.

composer require project/with-lots-of-dependencies:1.2.3 –update-with-all-dependencies

One year ago, on this day, I was drinking a beautiful beverage, indoors, in a place that is not my home.

I hope a year from now that those qualifiers seem mundane.

Kiddo got a Spirograph. I experimented by adding Sharpies to the mix.

If you DM a person...

I shared some advice in our work chat today:

If you DM a person you have one person helping you. If you ask in a group chat, you have the whole team collaborating.

If you give an answer in DM, you help one person. If you give an answer in a group chat, you help the whole team.

This isn’t a 💬 (quote), but a reflection of my own experiences working on highly collaborative teams and open-source projects.

She made homemade biscuits over the holiday. I put eggs, fried onions, and cheese in them. It was a delicious mess. 🥞🤤

A messy breakfast sandwich on a yelliw plate.

Custom domains, Cloudflare, and micro.blog

If you use Cloudflare for your domain as I do for froboy.org, you may have to make some modifications in order to get your domain set up with micro.blog:

  • In Cloudflare’s SSL/TLS settings, turn SSL “Off”.
  • In Cloudflare’s DNS settings, be sure to “grey-cloud” the CNAME and A record pointing to micro.blog.
  • Once micro.blog detects the DNS change and issues the certificate, leave Cloudflare SSL off. Micro.blog now has you covered!

The road ahead

I’ve been stuck in analysis paralysis about how to do a blog for about a year now… experimenting with Jekyll, looking into Hugo. My goal was to do as little development as possible, because this place should be about making words, not code.

Micro.blog looks super, and @manton has already been helpful in getting me set up. Here’s to the road ahead.

When is a number not `input type='number'`?

When it “only consist[s] of numbers but isn’t strictly speaking a number”. See Why the GOV.UK Design System team changed the input type for numbers for more details.

While Drupal supports #pattern on FormAPI elements, there’s no top-level property for #inputmode. That can be added via #attributes, like:

$form['textfield'] = array(
  '#type' => 'textfield',
  '#title' => 'Any number of digits',
  '#pattern' => '[0-9]*',
  '#attributes' => [
    'inputmode' => 'numeric',

I am here (and here’s a beer).