Alexa, Amazon Lambda, NASA and avoiding death

A long time ago when they first came out I was going to buy an (Echo)[]. Then I didn't. Then they got really cheap so now I have an (Echo)[].

It's the weekend and I've been writing a crazy amount of code for one of our projects. I needed a break. My son needed to learn a bit of Javascript. At (Atomic Jolt)[] we use (Amazon Lambda)[] for various client projects. Turns out you can add 'skills' to your Echo using (Amazon Lambda)[].

(NASA has an Open API)[] that lists near earth objects. Since it's important to know if you are going to die by astroid at any given moment we put it all together and now we have SpaceBall. Just have Alexa 'ask SpaceBall if we're all going to die and you'll get a list of objects near the earth on any given day.

If you're interested here's the code on (Github)[https://git...

Continue Reading →

The Balls Bouncying Around DisneyLand

Trip Log Day 1

We hop off the plane at L.A.X. with a dream and tickets to Disneyland. Welcome to the land of fame, excess, whoa! are we gonna fit in? Waited at the curb for Relay Ride to pick us up, here we are for the fifth time. Look off through the smog, and I see the Hollywood sign.

The traffic is all so crazy, everybody seems so famous. My tummy's turnin' and I'm feelin' kinda sick. Too much pressure and I'm nervous. That's when we turn on the radio and they're playing something vaguely familiar.

We sit, we drive, we sit, we drive in LA traffic. 15 miles is a short distance on the map. It's a short distance if you are in Utah. It's an hour and a half "drive" in Los Angeles. We arrive at our destination - the Walt Disney Concert hall. The architecture is jaw dropping. The parking lightens your wallet balancing out the effect. A quick scan of Google maps show the Griffith observatory is a only short distance. We are technical sort of peo...

Continue Reading →

Nasty React React-Router initialization bug

Over the past few days I've been tracking down a nasty bug in a React application. It's the kind of bug that manifests rarely in development but shows up enough on production that users hate you for it. At first we couldn't reproduce it which means we couldn't fix it. Then by luck and frustration I was typing as quickly as I could to run the 400th test and found that typing a new url really fast caused the browser to reload new content before it was finished loading previous content and boom everything broke. Specifically in this application the login is not handled by React. I would log in and before the browser had a chance to render the resulting page I typed in the url of the React application. This combination was enough to result in a console filled with these errors:

This error shows up once:

Warning: render(): Target node has markup rendered by React, but there are unrelated nodes as well. This is most commonly caused by white-space inserted around server-rende...

Continue Reading →

Course Setup Using Google Docs and the Canvas API

From my presentation at InstructureCon 2015:

About us

We're Atomic Jolt. We build cool stuff. We built some of the very first Canvas integrations using LTI and the Canvas API. We've been doing this as long as Canvas has been around. Anything you want Canvas to do that it doesn't already do we'll make it do it.

Demo Arigato simplifies the repetitive task of setting up the same courses, users, discussions etc. We created it for the sales team at Instructure, but you can use it in your Canvas instance as well.

Helpful resources:

Continue Reading →

Mountain Bike Gear Ratios 1x vs 2x setup

I spent some quality time on my Salsa Beargrease and on my Santa Cruz Blur last week. The Beargrease is an awesome bike. It's a lot of fun to ride and leaves you giggling as you bounce along the trail. It is however, fat. That doesn't mean it's slow but it is more bike to push up the mountain than your typical mountain bike. My Blur is a lighter but older bike. I bought it back in 2007. At that time it was high end, super awesome state of the art stuff. However, in it's old age I'm finding that it just doesn't hold up on the more technical parts of my favorite trail. On my last ride I clipped out 3 times to prevent donating skin and blood to the mountain. I don't clip out at all on the Fat bike in spite of it's lack of supension.

That's when I decided it's time to examine my options which leads me to the Ibis Ripley - quite possibly the sweetest bit of 29er technology to ever touch the dirt. It's a lustworthy steed. It will empty your bank ac...

Continue Reading →

Testing Software Bugs Me

Agile practices have pushed software engineers towards test driven development. The result has been an increase in project velocity and general happiness all around. However, at some point you will get a project that either lacks tests or has insufficient test coverage. Even on projects that have 100% coverage bugs will still manifest themselves. For example, the developer may have misunderstood the requirment during implementation. Their test might pass but the code it test is an expression of incorrect behavior.

For these reasons we still use staging servers and we still go through testing before a final release to production. It takes a special person to endure the procoess of testing the same software over and over. Finding bugs in software is not typically the job most developers long for so I'm greatful to our team members who diligently deal with the process each week.

Bugs don't always show up during QA either. The worst bugs make it to production and are typically foun...

Continue Reading →

I Didn't Attend React.js Conf

Unfortunately, I wasn't one of the lucky ones to win the React.js conf ticket lottery which means I didn't get a chance to rub shoulders with some of the most brilliant minds in Javascript.

I'm not bitter or anything. Jimmy Buffet once said, "I can go to movies and see it all there just the way that it used to be..." Thanks to the all this modern technology life is even better than it used to be. Now I can just go to YouTube and watch all of React.js conf 2015 while sitting here in my underwear. I don't recommend going to the movies and doing that.

The very fact that the conference sold out in seconds says something about the popularity of React.js. In case you're like me and also missed out you can get all the videos from the React.js Conf YouTube play list. If you don't have all day to watch them all here are the highlights that I think are worth spending 25 minutes (each) watching. You know you have time. Just stop checking Facebook in the bathroom ...

Continue Reading →


It's January. That means a couple of things:

  1. I'll be forgetting to write the correct year for several weeks.
  2. I'm older so the forgetting will probably last for more than several weeks.
  3. It'll probably be 3 months before I'll be outside on a road bike.
  4. I have 3 months to ride my fat bike.
  5. I have collected a year's supply of chocolate in my basement.
  6. The credit card bills from the holidays are due. Judgement day is coming.
  7. This is going to be a bit sappy. Don't feel obliged to read any further.
Once again we spent a bunch of money on a bunch of stuff. On Christmas that's the American way. I love it. I don't regret it. Finding the perfect thing that brings someone joy is a wonderful feeling. Now that several of our children are getting older you realize that you only have a few years of really magical (and extremely early) Christmas mornings.

A few months ago I was listening to a podcast on happiness. I'd read research on the topic of happiness bef...

Continue Reading →

Twitter, update_with_media, and the nasty Twitter::Error::Unauthorized (Could not authenticate you) issue

I've been playing around with the Twitter gem - yes this is what I do for fun. I was shocked to find out that all the cool kids are posting photos. I feel so stuck in the dark ages with just 140 characters. I set out to discover how to regain my hipster cred and since I am a lover of Ruby I started with the Twitter gem. The first bit of code that looked like this:

We're going to upload an image from a url so we include open-uri

require 'open-uri'

class TwitterApi

Helper method to setup the twitter client. I'm lazy so the keys and secrets are safely stored in a nice .yml file.

def self.client do |config| config.consumer_key = Rails.application.secrets.twitter['consumer_key'] config.consumer_secret = Rails.application.secrets.twitter['consumer_secret'] config.access_token = Rails.application.secrets.twitter['oauth_token'] config.access_token_secret = Rails.application.secrets.twitter['oauth_token_secret'] end ...

Continue Reading →

Heroku Database Limits

I've been using Heroku for years and it is a great service with great support. Our company, AtomicJolt uses it for all new projects since we an quickly bring up a new site on a free account and show it to our customers.

One problem we frequently run into is the database row limit when using the development plan. Once you hit 10,000 rows your database write permissions are turned off and you will start to see this error:

PG::Error: ERROR: permission denied for relation [table name here]

At that point you have a couple of options:

  1. Upgrade your database to a paid plan (which can get expensive fast).
  2. Reduce your rows to under 10k by deleting records. Then email [email protected] and as them to give you back permissions. They are really nice about it and fast to respond.
  3. Try out a different host. It's a bit more work but we're also loving Digital Ocean. They support Docker which makes deployment really simple.

Continue Reading →