Being able to learn a new software language, framework, pattern, or platform has been one of the cornerstones of my career. I’m generally pretty quick to pick something new up, and I get distracted easily so I end up doing this a lot.
I bring this up because at the beginning of this year I moved into iOS development, a whole new ecosystem where I didn’t know the language (Swift), framework (UIKit), or any of the tooling (Xcode), and in the last week I reached one of my favorite milestones of learning a new skill: thinking with portals.
In Valve’s 2007 game Portal, you have to solve a series of puzzle’s using a unique “Portal” gun that allows you to arbitrarily place portals on the walls, and you can jump through them. While simple on the surface, it’s deceptively complicated, and at first you sort of fumble your way through the mechanic to make it through the challenges.
Eventually you will suddenly realize you’re brain automatically looks at a puzzle and starts calculating portal placements and jump trajectories, and the game’s robot narrator praises you with the phrase “Now you’re thinking with portals”.
This same phenomenon occurs every time I learn a new software development skill. I’m not talking about the part where you know you can fumble your way through any problem with enough time, though that is exciting as well. This is the part where your brain automatically thinks within the framework or pattern you’re using in the background, and instead you’re free to focus on the actual design or engineering problem at hand.
This over the last week, I’ve stopped spending my time figuring out how to do something on my iOS projects, but instead figuring out the best design that I should do. It’s a subtle difference, but it’s deeply satisfying to finally cross that threshold.
The beginning of learning a new skill is always daunting, but I know that, if I stick with it, eventually I’ll reach the Thinking With Portals moment and that’s one of the greatest feelings in the world.
A couple of years ago when we set up our Christmas tree, we bought a cheap little RF light switch to plug our tree into so we didn’t have to climb underneath the tree to turn on and off the lights. In the last year, we acquired a Google Home Mini, and I decided we could try to make our Christmas tree experience a little smarter.
After a bit of experimentation, I can now say “Hey Google, It’s Christmas Time” and my tree lights up, Christmas music starts playing, and my TV turns on and starts playing a fireplace. Check it out!
So, let’s talk about how I set this up.
Control the Lights
To start, I want to control the lights through my Google Home, and to do that, I need something that will connect my dumb tree lights to my WiFi, and ultimately Google Assistant. There are hundreds of smart plugs on Amazon, but you want to make sure you get one that’s compatible with Google Assistant. I got this one from Gosuna, but I think the same instructions will apply with any smart plug.
To set it up, I just plugged my tree lights into the smart plug, and the smart plug into the wall. I followed the instructions that came with my plug to get it hooked up to Google Home (which included downloading their app) but ultimately you need your smart plug to show up in the Google Home app page like below (I’ve nicknamed mine “Decoration Lights”).
Now you should be able to tap the “On” / “Off” buttons in the Google Home app and see that your Christmas tree lights turn on and off correctly. You should also be able to say “Ok Google, Turn on the Decoration Lights” and it should control the lights as well.
Set Up a Routine
So you can now control the tree with your voice, but “Turn on the Decoration Lights” is pretty boring and hard to remember. So let’s make this a bit easier using something Google calls Routines.
Fair warning, Google has frequently moved things around the Google Home app, and I’m using an iPhone, so these directions might not be exactly the same for your app (let me know if not and I’ll try to update this post).
- From the Google Home main page, tap on the avatar icon on the bottom right of the screen
- In the “Google Assistant” section, tap on “… More Settings”
- Tap on the “Assistant” Tab
- Tap “Routines”
Phew, ok, so hopefully you’re now on a screen that looks something like this.
Now, let’s create a new custom routine.
- Tap the blue “+” floating action button on the bottom right
- Tap the “Add commands” button
This is where you pick the command you want to say to your Google Home to trigger this routine. So here you can type “It’s Christmas Time” and tap save.
NOTE: You can add multiple phrases to trigger the same routine. Simply tap the “Add commands” button again and tap the blue “+” floating action button to create another phrase.
Now, to tell your Google Home what to do when you say this command:
- Tap ADD ACTION
- Tap popular actions
- Check the box next to “Adjust lights, plugs, and more”
- Tap the settings gear next to “Adjust lights, plugs, and more”
- Your smart plug should show here
- Tap on your smart plug
- Select “Turn on” from the popup menu
- Tap back
- Tap “ADD” in the top right corner (I constantly forget this one)
- Now tap “Save” in the top right corner
You should now be back on the Routines page, but with your new Routine at the top of the list.
You should be able to use this on your Google Home now. Just say “Ok Google, It’s Christmas Time” and your lights should turn on.
Add Some Music
Alright, now you have a custom routine, but it’s only doing one action. Let’s make things more interesting by playing some Christmas music as well as turning on the lights.
- Tap on your custom routine
- Tap “ADD MEDIA”
- Check the “Music” radio button
- Tap the gear icon next to “Music”
- And type into the text box “
Christmas Radio” (or whatever command you would use to trigger a custom playlist or album)
- This will use whatever music service you’ve set up as the default.
Give it a shot. Say “Ok Google, It’s Christmas Time” and your lights should turn on, and Christmas music should start playing out of your speaker.
Put a Fire on the TV
Ok, this is probably the trickiest one, and may not work for many of you. Let’s start by explaining how I have my TV setup.
I have a Chromecast (1st generation) plugged in to an HDMI port on my TV, but powered by plugging into the wall, not the TV’s usb port (this is important). My TV supports HDMI-CEC, which is a spec that allows devices like BluRay players, video game consoles, and Chromecasts control your TV over HDMI.
In my case, my TV will allow my Chromecast to turn on the TV and switch to the input my Chromecast is connected too. But it will not allow my Chromecast to turn off my TV for reasons unknown.
If your TV does not support HDMI-CEC then you will have to manually turn on your TV and switch it to the Chromecast’s input.
Alright, with that aside, here’s how I set up the fireplace within my new Routine.
- Open your custom routine
- Tap “ADD ACTION”
- Type into the text field “
Play https://www.youtube.com/watch?v=L_LUpnjgPso on TV”
- Tap “ADD” on the top right
- Tap “Save” on the top right
Typing into that text box let’s you arbitrarily type any command you can say to your Google Home. So you could type “Play Fireplace on TV” here and Google will search Youtube and find a fireplace to put on your TV.
But what if you want to play a specific video? Since we’re typing into this command instead of talking out loud to our Google Home, we can actually clarify a specific Youtube video URL to play instead of just doing a search.
To do that you first need to get the URL for that video by tapping “share” in the Youtube app or just copying the url from the browser. Then you can just paste that URL into the command “
Play [insert-url-here] on TV”.
If you have multiple TVs in the house, you might also have to specify which TV such as “Play Fireplace on living room TV”.
Now when you say “Ok Google, It’s Christmas Time”, your tree lights should turn on, music should start playing from your speaker, and your TV should turn into a fireplace!
So now that you have the basic building blocks, you should be able to expand on this idea quiet a bit.
You could create a new routine called “Cancel Christmas” that turns off the lights, fireplace, and music. Or you could add an action to ask Google Home to tell you how many days till Christmas.
Routines are a bit confusing, and the current Google Home app certainly doesn’t make that process easier, but it can be really powerful. Even with just a couple pieces of smart hardware you can build up some impressive workflows pretty quickly.
Hopefully this was helpful! Please let me know if any of these directions don’t work or you have any other ideas. Best place to reach me is on Twitter at @_chuckyc.
In the last couple years, I’ve heard iPad users frequently bemoan the professional community not “taking them seriously”. This reached a fever pitch with the release of the new (and pretty great looking) iPad Pros and the onslaught of reviews deeming the new device amazing but “still an iPad”.
As someone deep in the Mac ecosystem but definitely interested in iOS, I’ve always regarded these complaints as people being overly sensitive. When people say they can’t do “real work” on an iPad, I’ve always translated that to mean they can’t do “their work” on an iPad. I assumed nobody outside of internet trolls were actually saying that people who use iPads aren’t “real” professionals..
Then I read this tweet from senior editor at The Verge, Tom Warren
Granted, Tom’s primary focus is Windows news, but I think this goes to show that this sentiment of the iPad as a toy is not relegated to comment section flame wars, but actual influential members of the prominent tech press.
It feels like we’re entering a bizarre OS war reminiscent of the Windows vs Mac or Android vs iOS days, complete with passionate angry “fans” attacking the each other as being “stuck in the past” or “using toys to try to do real work”. Only this time both platforms, iOS and MacOS, are owned by the same company.
It’s weird because I don’t really see them as competing platforms as much as complementing platforms. A Mac, an iPad, and an iPhone make an incredible combination. It’s more like an iMac vs a MacBook. People with desktop computers don’t usually make fun of laptops being underpowered. And laptop users don’t usually make fun of desktop’s lack of portability. And many people have both!
Admittedly none of this matters. It’s probably just typical Twitter / Tech Blog drama. But on behalf of non-iPad users everywhere, I’m sorry for the jerks out there. iOS is not ready to replace my Mac (I don’t think), but that doesn’t mean it’s not ready for anybody. Personally, I’m hoping iOS 13 and Marzipan lead to a glorious future where iOS and MacOS can frolic together, hand in hand, into the glorious computing future.
It’s been a while since I wrote a blog. A quick look at my old Blogger account shows my last post was August 5, 2012. That was 2 jobs, 2 kids, and 1 house ago!
I’m not sure why I stopped, but over the last couple of months I’ve found myself wanting to write again. Unfortunately the task of getting a blog up an running again has always stopped me. Last week I finally decided to jump in and build a new site.
I had really good experience with Gatsby building the website for my podcast A-Town FM so I decided to use it again, and boy I’m glad I did. I’ve had so much fun putting the site together over the last week that I’ve completely forgotten what the article I wanted to write was that sparked me to build this in the first place.
For some reason I’ve always had an easy time starting projects, and putting the time in to truly build them out. But when it comes time to actually release them to the world, the need to get it just right freezes me up to the point that I often don’t release at all.
I’m hoping by releasing this post with this (probably buggy) version of the site to the world, I’ll get over that hump and just enjoy adding to it over time.