Nobody Listens Anyway

Life is an optimization issue

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

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


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 before and I was pret...

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 goint 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']

  # This method posts a tweet and image to Twitter...

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.

Using The AvantLink API To Streamline Your Affiliate Efforts

Justin Ball


It Would Be Really Cool If...

Open All The Things!

Open All The Things

  • Open Source
  • APIs
  • Open Content

Open Source

Canvas LTI screenshot

  • Moved from installs to services
  • Developers read the code. Create better integrations
  • Result is a healthy community of applications

Open Content

  • Kahn Academy
  • MIT Open Courseware
  • Creative Commons

Users win with cool remixes

Organizations (and professors) win with brand recognition


Symbiotic Relationship

Developers imagine new features for your platform.

Platform wins new functionality and profits.

Developer wins large audience and profits.


Please implement OAuth

Everyone else is doing it

and standards make things easy


Cool Story Bro

The AvantLink API

AvantLink API documentation screenshot


Crossed 4000 miles for the year tonight

Tonight riding with the Logan Race Club up Blacksmith Fork Canyon I crossed 4000 miles so far for the year. Thanks to Shawn Collins and Affiliate Summit that's $4000 towards breast cancer research.

I love to ride, but each time I ride there's the added motivation that every mile is another dollar towards a cure.

We are amazing. Riding the MS150

When I was a kid I saved up and purchased a Specialized Rockhopper. For a 14 year old the $450 spent was all the money in the world. It bought Shimano Exage components and a rigid fork and frame. This was the early days of mainstream mountain biking. I immediately became a fan of Specialized sponsored Ned Overend. He was awesome then and none of the awesome has worn off.Everytime I find myself staring at another cyclists butt in a paceline I remember an article he wrote. In particular he stated that a really fit human body can output about 1/4 horsepower for a sustained period of time. I think about that when I ride.

Yesterday I rode 105 miles in the MS150. I finished it in 4 hours and 36 minutes which means that my average speed was 22.7mph. ...

Biking and Raising Money

I woke up at 5:51 this morning and rode hundred miles. I didn't mean to. I stayed up way to late. I didn't eat right. I'm filled with excuses.

Not meaning to ride sounds odd and it is. The act of riding is intentional and the number of miles ridden can't be an accident. Riding is a deliberate act requiring the unending rotation of one's legs.

It can hurt.

My intention was to ride 65 or 70 miles. My preparation matched that intention and my experience reflected my preparation. I ended up riding with another cyclist, Tony, who I have a great deal of respect for and who is much stronger than I am. He intended on putting in 100 miles. I can't resist miles on a bike and so I tagged along.

After riding around the Wellsville mountains and up through Sardine Canyon we made our way up Blacksmith Fork Canyon. It's a beautiful and very ...

Secure ElasticSearch behind Nginx using Docker on Digital Ocean

I've been a big fan of Elastic Search for a very long time. It's a great piece of software that can be used as an object database as well as a search index. I realize that's not the intention of the software but it works so I'm happy. Elastic Search doesn't have security built in so if you want to lock down your index (which is a good idea) then you'll need to run it behind a proxy. I briefly considered writing something in Go. There's a node.js proxy for Elastic Search but it hasn't been maintained in quite some time.

I want fewer moving pieces. Nginx provides basic authentication. I'm happy with that.

Digital Ocean is a new(ish) hosting company. They run on SSDs. They are pretty cheap and you can have a server running Docker in 55 seconds. I'm happy with that.

Mix all the above and you get a nice bit of software that you can be happy with after you figure out the mixing part. It goes something like this:


Setup an account on Digital Ocean and laun...