2021s
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
Feb 25, 2021I 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...
Feb 18, 2021Our 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.

If you DM a person...
Jan 8, 2021I 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. 🥞🤤

Custom domains, Cloudflare, and micro.blog
Jan 6, 2021If 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
Jan 5, 2021I’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'`?
Jan 4, 2021When 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',
],
);