
“Hey, Casey, I have a couple of friends that go to UVA. You mind if I ask them to go to dinner with us tonight?”
My friend Ben from school is coming down from the DC area to see me. We had already planned to go to dinner; he’s just sprung on me that he would like to bring along a couple of friends. I learn they’re friends of his from high school outside Richmond; as it turns out, they’re both women.
“Sure, Ben, why not?”
A smart guy, Ben presents it as a coincidence that we’re all going out; he just figured he’d see all his local friends at once. I later find out he’s intent on setting me up with one of his friends.
It’s January 2005. I’ve been living in Charlottesville for around 4 months. I’m fresh out of school and am working my first real job. My family lives 400 miles away in Connecticut. I’m, in more ways than ever, alone.
I’m okay with it though. I’m happy to have time to figure out what this new, adult, world is like. I wasn’t looking to meet anyone. Which, if my experience is any indicator, means I was about to embark on something awesome.
I was.
I was about to meet my wife.

With less flowing water than expected.
Fast forward a year and a half, and it’s June of 2006. I’m nervous as hell, because I’m about to propose to Erin.
I had a grandiose plan, including stopping for our favorite bagels, but as it turns out we were up too early even for the bagel shop. I was trying to get Erin to Richmond — an hour away — by some absurdly early hour. I had arranged for early access to our favorite park, so the only ones in there were us and the maintenance crew.
I had this amazing vision of proposing to Erin at the gazebo next to the waterfall.
Turns out, some waterfalls have off switches.
In a move that I’d come to deeply appreciate, Erin shrugged it off, said “who cares?” and moved on with life. I so deeply admire in her that ability to let things roll off of her.

A year and change later, Erin is now my wife. It is absurdly, horridly cliché to say so, but it was one of the best days of my life. Planning a wedding, if you haven’t tried it, is one of the most stressful things in the world. However, all our work was worth it. Our wedding went off largely without a hitch.
It rained that morning, and our wedding was intended to be outdoors. Erin’s reaction upon realizing it’s raining? “It’ll be fine.”
It was.
While another cliché, I mean it completely: I cannot imagine my life without Erin in it. Over the last ten years, we’ve been tremendously lucky. We’ve traveled to Europe on three different occasions. We’ve crossed the United States twice to visit California, and traveled to quite a few places in between.
So many memories were made on those trips. Every one of them, I absolutely cherish.
I also cherish the less remarkable memories, too. When I observed Erin teaching in her first year as a full-time teacher. Our trips to Sam’s to buy stuff… and score free samples. Our shared love of crappy food like Cici’s Pizza. Fighting an in-ground bees nest in our front yard by dressing up in as many sweatpants and sweatshirts as we could find, despite it being the middle of the summer.

Now, ten years on, our lives and our relationship is changing dramatically. We aren’t just in it for ourselves and each other; we now have our son to worry about. While bringing him into this world was almost impossibly difficult, I am so deeply grateful to have had such a great teammate with me on this journey. I can’t imagine having survived this without Erin there to support me.
We still like to recognize our “dating anniversary”; we always have. In some ways, you could argue that it’s even more important than our wedding anniversary. Without this day in 2005, there would have been no wedding.
How do you really describe what your wife means to you? There’s a reason we all land on the same words and phrases.
She is my rock.
She keeps me sane.
She is my partner.
She is my best friend.
She is my everything.
They’re all so overused, but I could (and do!) say every single one of them. I’m not sure how to most effectively describe what Erin has meant to me. To describe, in words, the profound impact she has on my life every single day. To share, in text, how seeing her in the morning brightens even the darkest of days. To relate how it melts my heart to see her taking such good care of Declan — of our son.
In the end, all I can say is that I’m so deeply, deeply lucky to have found you, Erin.
You make me a better man, every day. You have every day since we officially started dating — every day since 16 January, 2005. Every one of those 3,652 days, I’ve found a new thing to love about you. Every one of those days, I’ve looked so forward to coming back home to you and spending time with you.
For these last ten years, and for the many more to come, thank you. Thank you for being a part of my life. Thank you for making me better in every measurable way. Thank you for, as I love to say, cooking us a beautiful baby. Thank you for beating my ridiculous expectations and being an even better mother than I could have dreamed. Thank you for always being by my side, no matter what.
Thank you for being you — for being the only one for me.
I love you.
It’s a week of milestones[1], it appears.
Today we released the 100th episode of the Accidental Tech Podcast.
If you had told me two years ago that I’d do a 12-episode run of a show about cars with my two friends, I would have chuckled, and shrugged it off.
If you had told me two years ago that I’d do a 100-episode run of a tech podcast, without missing a single week since March of 2013, I’d have laughed in your face.
And yet, here we are.
To anyone who has listened to even a few minutes of ATP, my most sincere thanks.
More on that soon. ↩
Over the last couple months, I’ve made a few changes to Camel. For anyone that may be interested:
- Support for a 404 page.
- Support for Markdown footnotes[1]
- Support for redirects like this one
All of these changes are over at Github.
Like these. ↩
Chrome has added emoji support to the latest developer builds. That means it should be coming soon to the real release. Owen Williams reports:
The bug in Chrome was fixed on December 11, which went into testing on Chrome’s Canary track recently. From there, we can expect it to move to the consumer version of Chrome in coming weeks.
I also particularly like the test demonstration/image at the end of the changelog.
Finally.
A 10-year veteran teacher, who just left teaching, describes some of the difficulties he faced:
…the business of education can be summed up as such: you’re expected to be a professional, but given neither the freedom nor the compensation or authority to justify such a position…
He continues:
…and the division of parents between those who have truly given up on education and those who will helicopter the shit out of their brats out of entitlement and desperation has become complete. There is no happy middle that I have seen.
Which leads to a stark — but probably accurate — conclusion:
Pay and respect have never been lower, and the sheer amount of sidework has never been higher. Only martyrs teach now in America.
Though the main reason Erin has taken a year off is because of Declan, the amount of abuse she took while teaching for eight years was definitely a factor. We haven’t decided if she’s going to go back to work next year or not, but I sure as hell hope not.
She’s not the only one of her peers that’s either left or nearly left. These aren’t just teachers. They’re great teachers. Driven away from the career they love, but cannot stand anymore.
I’m deeply worried about what’s going to happen when Declan comes of age. Over time, I’m getting less concerned whether there will be any good teachers left, and instead getting worried there won’t be any teachers left at all.
Teachers deserve better than this. All of them do.
I’m not sure what I can do about it, as an individual, other than vote in favor of local bills that will pump more money into the education system. Raise my taxes if you have to; the teachers and kids deserve it. I hope you feel the same way.
Link via Jamie Pinkham
I still have a private build of Fast Text on my phone, but I only typically use it for one reason: to tell my wife Erin that I’m on my way home. Since Fast Text is dead, and Workflow is the new hotness, I created a workflow that largely replaces Fast Text for me.
The workflow is as follows:
- Street Address, set to my home
- Get Travel Time, driving
- Set Variable “Time”
- If (the travel time) contains “minutes”
- Set text: “Leaving now; home in {Time}.”
- Otherwise:
- Set text: “Leaving now.”
- Send Message to Erin
Should you download the workflow, I’ve scrubbed our home address & Erin’s phone number, and I’ve changed its name to be a little more generic.
I use the if
because I wanted to make sure that the time I send to Erin is at least
semi-intelligible. When I tested while in the house, I’d often get no result, or a result
such as “6 seconds”.
Additionally, I also created a link to this workflow on my homescreen. When I want to let Erin know I’m on my way home, the process is:
- Unlock my phone
- Tap the
ETA to Erin
icon on my homescreen - Tap
Send
Honestly, this is an improvement over what Fast Text made possible. Progress is great.
UPDATED 2015-01-06 3:30 PM: As pointed out to me on Twitter, the variable I’m
creating in step #3 above isn’t necessary. I can remove it, and change the text in 4.1 to
Leaving now; home in {Input}
.
Marco wrote a very bold post regarding Apple’s yearly operating system release cycles. He calls for Apple to slow down:
I fear that Apple’s leadership doesn’t realize quite how badly and deeply their software flaws have damaged their reputation, because if they realized it, they’d make serious changes that don’t appear to be happening. Instead, the opposite appears to be happening: the pace of rapid updates on multiple product lines seems to be expanding and accelerating.
Unsurprisingly, I agree with Marco. I’m not sure, however, if Apple really has any other choice but to continue working at a breakneck pace.
Apple, for better or worse, is no longer the underdog. They’re no longer the plucky little guy picking a fight with the ox of a man already standing in the boxing ring. Now, they’re the ox.
As a result, any time Apple wavers — even the smallest bit — even justifiably — everyone pounces.
What would be the reaction if Tim Cook or Craig Federighi got on stage at WWDC and said “You know what guys; we’re stretched too thin. We’re going to pump the brakes, and start taking our time”?
The media would go nuts.
Apple is doomed!
Apple’s Engineering Talent Under Question as Federighi Slows Things Down
Investors Doubt Apple’s Ability to Innovate Since Rudimentary Releases are Declared “Untenable” by Cook
The media going nuts isn’t the end of the world. Shaking investors, and watching them walk away from AAPL may be. Whether we like it or not, Apple is a public company, and these things matter.
I’d like to think that I’d take a more nuanced stance on ATP, but I’m not sure I’m above a little fear-mongering myself. I sure hope I’d take the high road, but it’s anyone’s guess.
It was Apple that chose to establish this cadence, and chose to stick with it. Now, for better or worse, they may have backed themselves into a corner. When you’re that ox of a man standing in the boxing ring, the last thing you want to do is show weakness. To give the plucky little guy hope.
You may not feel like you can show weakness, even if you wanted to.
The Apple I’ve come to love wouldn’t give a crap. The Apple I love would do the right thing for its users and its developers, and slow down. The Apple I love would slow down, even though it’s the tough thing to do. The Apple I love would be brave.
Let’s hope that Apple is still the Apple of today.
In lamenting his recent litany of replacement credit cards, Dr. Drang makes an interesting prediction regarding the future of Apple Pay:
As I said after the September keynote, I like everything about Apple Pay and hope it’ll reduce the credit card fraud problem, but despite the cooperation of many banks I find it hard to believe Apple Pay will become ubiquitous. Apple users make up only a fraction of credit card users, and the banks will be forced to come up with their own solution. When that happens, if it’s done right, support for Apple Pay will fade.
I’ve written about Workflow recently, and how I’ve really enjoyed playing with it and seeing what I could accomplish. In speaking about it on a recent episode of ATP, I was asked what problems I was really solving with Workflow. I had answers, but admittedly, none of them were very good.
Now, I have a better example.
As with all egomaniacs podcasters, I check our download statistics regularly.
We use a Perl script that John wrote that will aggregate our numbers
and emit JSON. We can then put this URL into Panic’s wonderful app,
Status Board, and see a graph of our recent numbers
It should go without saying all these numbers are made up for the purposes of this post.

That’s all visual, and is great to show trends. Sometimes, I like to know actual numbers. Last night, it occurred to me I could parse the JSON that we use for that graph using Workflow, and have it perform the calculations for me. I wanted to calculate the lifetime average, as well as the average for the last 10 episodes.
The JSON that generates that graph, and that I used for Workflow, looks approximately like the following:
{
"graph" : {
"refreshEveryNSeconds" : 900,
"title" : "ATP",
"datasequences" : [
{
"datapoints" : [
{
"value" : "123456",
"title" : "88"
},
{
"value" : "126543",
"title" : "89"
}
]
}
]
}
}
You can get more information about the JSON schema on Panic’s site.
The workflow I wrote, without the requisite JSON URL, is here, but I’d like to replicate it below as best I can:
- Start with the URL of John’s script
- Translate the contents of that URL into a Workflow dictionary
- Get the value for the key
graph
- Get the value for the key
title
- Get the value for the key
datasequences
- Get the value for the key
datapoints
- Set that item (the array of
datapoints
) as the variableEpisodes
- Count the number of items in that array
- Set that count to the variable
Count
- Start with the number 0
- Set that number to the variable
Sum
- Start by getting the variable
Episodes
- Repeat with each episode:
- Get the value for the key
value
- Perform an addition with the variable
Sum
- Store the sum in the variable
Sum
- Get the value for the key
- Start by getting the variable
Sum
- Perform a division with the variable
Count
- Format that number to have only one decimal place
- Set that average to the variable
Lifetime
- Start with the number 0
- Set that number to the variable
Sum
- Start by getting the variable
Episodes
- Repeat 10 times:
- Get the variable
Count
- Perform a subtraction with the index of this loop
- Perform a subtraction with the number 1
- Set this to the variable
Item Number
- Get the variable
Episodes
- Get the item at index
Item Number
from the list - Get the value for the key
value
- Perform an addition with the variable
Sum
- Store the sum in the variable
Sum
- Get the variable
- Get the variable
Sum
- Perform a division with the number 10
- Format the number to only have one decimal place
- Set that average to the variable
Last Ten
- Start with the text:
Average Downloads\nLast 10: {Last Ten}\nLifetime: {Lifetime}
- Store that text in the variable
Message
- Show an alert with the body
Message
That is, admittedly, quite a few steps. The rough equivalent of the above, as written in Javascript, is below. The Javascript is quite a bit easier for me to understand — and write — than what I’ve done in Workflow.
Nevertheless, like I said in my previous post about Workflow, part of the appeal to me is making something complex work with relatively rudimentary tools. That’s exactly what I’ve done above.
In combination with Status Board, I can quickly and easily get either qualitative or quantitative data. Status Board provides me with a visual representation, while Workflow gives me quantitative information.
I am still really impressed with the power of Workflow, even if it comes at the price of being clunkier to work with than a true programming environment.
Erin and I always enjoy the holiday season; this year was no exception. Though we both come from rather tight-knit families, we’re busy, just like everyone else. I love the holidays because it compels us all to slow down and spend time with one another.
This year, the holidays were even better than usual for a couple reasons. For one, my parents have retired just 45 minutes west of us. For the first time ever, we could celebrate both holidays with both sides of the family, without a 6-10 hour car ride between.
But most importantly, this holiday was amazing thanks to our new arrival. Having geographically distant relatives meet Declan was amazing. Everyone’s reaction was unique, which made every introduction that much more special.
Here are a few of my favorite photos from this holiday season: