Dark Noise is in the App Store πŸ₯³

Today I released my first app to the App Store, Dark Noise. It's a simple yet powerful way to play ambient noise to help you sleep, focus, or relax.

This is the part where I'm supposed to tell you about a brilliant revelation I had that led me to solve a problem you don't even know you have. But I cannot, because that's now how all of this went down.

The truth is, Dark Noise started as a simple learning exercise and has turned into something more. I chose to build an ambient noise app because I'm very picky, and there wasn't one in the store that fit exactly what I wanted: simple, fast, and fun. There are a lot of options out there, many of them quite good, but I think I've landed on a balance of those three attributes that is truly unique.

Simple

Player and sound picker screenshots

From the beginning, Dark Noise was designed to be simple to use. I primarily use ambient noise to help me sleep, and I wanted to make something that was really easy to use at night, half-asleep without my glasses on.

The main player page has a simple big play button that stands out in the dark. And a quick swipe down will reveal all of the different noises that can be played with a tap.

Fast

Favorites, Siri, and widget screenshots

At the end of the day, an ambient noise app's job is to start a sound, and then get out of the way as fast as possible, so I designed Dark Noise to have multiple ways to quickly start your favorite sound.

You can add and reorder your favorite sounds to a section that always shows at the top of the selection page. Siri Shortcuts integrations allows you to create a shortcut to start any specific sound using only your voice, even through a HomePod! And a customizable widget and Home screen quick actions allow you to quickly activate a noise before opening the app.

Fun

Dark Noise themes

Something I learned from the wonderful weather app Carrot is that a utility app can be delightful to use. I wanted to try to make Dark Noise something that is fun to open up and interact with.

I loaded it up with multiple themes, and (way to many) custom app icon options, but the thing that I'm really proud of is all of the custom animations. Each noise has a custom icon that comes to life when you start playing it. And the buttons throughout the UI have little animations peppered throughout to make the app fun and fluid to navigate.

I'm really proud of how Dark Noise came together, but it wouldn't be close to what it is today without all of the help I've received along the way. First from my friends at work who've essentially let me leech Swifty wisdom from them over the last 8 months. And also from the iOS developer / enthusiast community. Over 900 people have joined the beta and provided me with countless bug reports, feature ideas, and marketing advice. I can't express enough how helpful this has been and it's inspired me to try to lift others up more than I do.

This is just the beginning and I'm excited to see where Dark Noise goes from here. As always, I'd love to hear your thoughts and feedback on Twitter or on the Dark Noise Subreddit

The Principles of Dark Noise

At the beginning of this year I started working on my first indie app to release in the App Store called Dark Noise. It's an ambient noise app for iPhone and iPad.

At first, I had a giant list of feature ideas and no idea how to distill them into a focused product. So I started by forcing myself to pick 3 principles to guide the design.

I eventually landed on these core principles:

  • Configurability

    • Targeting pro users who want as many options and hooks to work the app into their workflow as possible
  • Speed

    • Opening app to playing sound should be as fast as possible with no compromise since this is the 99% use case
  • Keep it dark (expect fat fingers)

    • Most users will probably be using this in a dark environment, possibly without their glasses on or half asleep. Keep that in mind.

After creating the principles, I took my list of feature ideas and tried to slot them all into one of those principles. If they didn't fit, I tossed them in the backlog.

Dark Noise Principles in Action

Keeping these principles in mind as I tried to design and form an MVP was really helpful. I have a tendency to get overly excited by an idea and drop whatever I'm doing and build it. Often that's a bad idea, but sometimes it's good!

Whenever I had the thought of adding a bunch of custom app icons referencing podcasts I like, I realized it was something that might actually resonate with the pro users I was targeting. And seems to have done just that!

Dark Noise App Icons

This also played into my pricing decisions as that market tends to prefer paying up front and is a little more averse to ads. That's not to say I won't add a free tier in the future (in fact I probably will) but it's something I'm always keeping in mind as I make these decisions.

Anyway, I'm not an expert at this, heck I'm barely a beginner, but maybe you'll find my thought process interesting nonetheless.

This post is an attempt to make a more permanent record to this tweetstorm from a few weeks ago.

Thinking With Portals

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 ecosystem1 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.


  1. I actually have done a bit of mobile development back in the day with Windows Phone πŸ˜‚, but for the most part I've been up and down the web stack for my career.

    ↩

Control Your Christmas Tree Lights with Google Home

Google Home

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").

Google Home App Screenshot

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).

  1. From the Google Home main page, tap on the avatar icon on the bottom right of the screen
  2. In the "Google Assistant" section, tap on "... More Settings"
  3. Tap on the "Assistant" Tab
  4. Tap "Routines"

Phew, ok, so hopefully you're now on a screen that looks something like this.

Google Home Routines

Now, let's create a new custom routine.

  1. Tap the blue "+" floating action button on the bottom right
  2. 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:

  1. Tap ADD ACTION
  2. Tap popular actions
  3. Check the box next to "Adjust lights, plugs, and more"
  4. Tap the settings gear next to "Adjust lights, plugs, and more"

    • Your smart plug should show here
  5. Tap on your smart plug
  6. Select "Turn on" from the popup menu
  7. Tap back
  8. Tap "ADD" in the top right corner (I constantly forget this one)
  9. 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.

Google Home Routines With New

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.

  1. Tap on your custom routine
  2. Tap "ADD MEDIA"
  3. Check the "Music" radio button
  4. Tap the gear icon next to "Music"
  5. 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.

  1. Open your custom routine
  2. Tap "ADD ACTION"
  3. Type into the text field "Play https://www.youtube.com/watch?v=L_LUpnjgPso on TV"
  4. Tap "ADD" on the top right
  5. 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!

Keep Tinkering

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 @chuckyc17.

Apple vs Apple: The New OS War

Apple vs Apple

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 think1), 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.


  1. While there are definitely some things I simply cannot do in iOS yet, I bet I can do more of my computing on an iPad than I currently think.

    ↩