March 2024

Job Queues

By Daniel Morrison

I got talking yesterday about async jobs in Rails and thought I’d put my thoughts on the blog too.

September 2023

“Wildebeests on charred grass.” Photo by Susan Jane Golding. Used under a Creative Commons CC BY 2.0 License.

Collapsing old Rails Migrations

By Daniel Morrison

I don’t like deleting old migrations in my Rails apps, but if I did, here’s how I’d do it,

March 2023

Photo by John Seb Barber on Flickr
Licensed under Creative Commons CC BY 2.0:

Five O'Clock  Somewhere

By Daniel Morrison

Some fun with Postgres to find users for whom it is a certain time.

Fix for Heroku Breaking Ancient Apps

By Daniel Morrison

Have a really old Heroku app that recently broke? We help with a handful. Here’s what we do to fix them.

August 2018

Photo © AJS Pimentel. Licensed under Creative Commons.

Keep Your Certificates Current Using Cron & Dead Man's Snitch

By Daniel Morrison

A rethinking of a 2015 post to keep certificates current. Now using cron and Dead Man’s Snitch.

July 2018

Part 3: ARKit Wall and Plane Detection for iOS 11.3

By Ben Lambert

Over the course of this series, we’ve been talking about ARKit wall and plane detection. Now that we can visualize our detected planes, we’re going to place 3D objects on them.

June 2018

Sketch Plugins, Baby!

By Patrick O'Dell

At Collective Idea we use Sketch for wireframing and UI design. That’s not all we use though. One of our designers breaks down his current favorite plugins.

Batch downloading analytic events from Google Analytics

By Jason Carpenter

Recording Google Analytics ‘events’ on the fly can be an unnecessarily heavy load for your server. One way to fix that though is by sending the ‘events’ to GA and then batch downloading them in a weekly job.

Unpacking opportunities behind tech buzzwords: IoT

By Daniel Morrison

You’ve heard of IoT, but do you know what it is really? We’ll share a few ways it is being used in the home, business, and the classrooms.

What's in a Templating Language, Part 2

By Jason Roelofs

In this post we take a deep dive into how Late implements parsing and evaluating a Late template. In what is often considered black magic, I’ll show that compilers are nothing more than lots of simple, easier-to-graps parts combined into larger complex systems.

May 2018

Getting Ready for GDPR at Collective Idea

By Sasha Wolff

Even though we’re an American company, the newly instituted GDPR affects how we collect data. Here are a few tweaks we made to Google Analytics for GDPR compliance.

We're Green Commuters and We Cannot Lie

By Sasha Wolff

It’s that time of year again when we compete against other businesses in the area to get in the most Green Commute Miles over a week long period. Here’s what we did and what we learned along the way.

Part 2: ARKit Wall and Plane Detection for iOS 11.3

By Ben Lambert

We’re using ARKit wall and plane detection for iOS 11.3. After detecting a plane, we can add an SCNPlane with a grid texture to visualize it better.

Working with JavaScript Objects

By Joshua Kovach

TIL that when you have a plain object and store instance variables on it, you’re actually setting a class variable across all instances. Here’s how to fix that.

April 2018

Part 1: ARKit Wall and Plane Detection for iOS 11.3

By Ben Lambert

The first step to building an ARKit app is detecting planes to place your 3D objects on. With iOS 11.3, you can now detect walls!

Join Us for Tulip Time

By Sasha Wolff

We’re inviting all of our friends and family to join us during Tulip Time. Our office is open for you to come co-work for the day!

March 2018

What About Elixir?

By Troy Spruit

Elixir is steadily making its way into our development stack. Using tools like Phoenix and Absinthe allow for the development of some very powerful API’s and abilities. Built in features allow for great performance, concurrency and presence monitoring. We’ll discuss some of our findings and why we’re excited about Elixir.

What's in a Templating Language, Part 1

By Jason Roelofs

Templating languages are ubiquitous across software languages and ecosystems. There are so many to choose from, covering many different use cases and requirements, but have you ever wondered what it takes to build one? Using Shopify’s Liquid as a comparison case, I’m starting a new learning experiment to understand how these tools work and what it takes to implement them. This journey will see us diving into lexers, parsers, compilers, and evaluation, combining data with a template to produce a final document.

February 2018

Virtual Town Hall Tools

By Allison McMillan

With a partially remote team and a meeting that requires full participation, here’s how we create a positive experience for everyone involved

Dead Man's Snitch is a ProgrammableWeb 2017 Noteable API

By Mac Fowler

Dead Man’s Snitch was recently included in a list of notable and interesting APIs for app development and DevOps engineers. It’s always a great opportunity to be included and highlight along side other great modern platforms.

January 2018

The Power of Animated Gifs

By Laura Mosher

Collective Idea loves animated gifs. We use them in nearly every form of communication we use on a regular basis. It was only a matter of time until we found a new use for animated gifs that brings value to our clients, customers, and development teams.

December 2017

Navigating your options when you need to grow your software team

By Andrew Bredow

When you’re building out a digital product and you need additional help, do you hire in-house or go with an outside consultant. We’ll look at the pros and cons of each decision.

RubyConf 2017: Coming Home

By Allison McMillan

RubyConf is where I got my start in the software world and because of that it “feels like going home”. This year the conference seemed homier than normal thanks to its great, overarching tone.

CABasicAnimation for animating strokes - Plus a bonus, gratuitous UI interaction

By Ben Lambert

CABasicAnimation is the backbone of UIView animation. Ever wanted to animate a stroke, shadow, 3d transformation, or other CALayer backed properties? CABasicAnimation is your answer.

Shedding Light on the Development Process

By Victoria Gonda

Did you know there are parallels between the lighting design process in dance and software development. Victoria Gonda, our resident dance expert and software developer breaks it down for you.

November 2017

Android Smartphone by is licensed under CC0

Using Espresso to Test Opening Links

By Victoria Gonda

On Android, we can use autolink to let users open links that are displayed in a text view. How can we write a test to make sure this functionality isn’t removed though? openLinkWithText is the key.

Securing the root user on macOS High Sierra

By Jason Roelofs

A developer in Turkey recently discovered that the High Sierra version of macOS has a serious vulnerability concerning the “root” user. Here’s what’s up and how to protect yourself.

My Experience at droidconSF 2017

By Victoria Gonda

DroidconSF proved to be a great conference. There were so many great things to learn, and people to meet. My experience there was definitely worthwhile.

The Very First KotlinConf

By Victoria Gonda

JetBrains held its first KotlinConf, and it was a huge success. With 1200 attendees, it was a great conference to both attend and speak at. There was much to learn about the language and how it is being used.

Ditch the AWS Service Dashboards for Terraform

By Kyle Magnuson

Terraform is a simple yet powerful tool. Let’s take a look at how it can be used to quickly create and manage an AWS Lambda function.

The truth about our Open Source

By Allison McMillan

Speaking at All Things Open made me think about our open source software, where we’re at, and where we’re going at Collective Idea

It’s time to stop ignoring the Discovery Phase

By Tres Trantham

Discovery is a crucial part of a digital project’s lifecycle because it’s where we collectively discover and share knowledge about a project’s goals with the client. It is in this phase that a project’s problem is defined, users are identified, and functionality is documented.

October 2017

Building Better Test Suites

By Jason Roelofs

Test suites are important tools to help ensure the correctness of your application, but the suites need to be architected, designed, and maintained to ensure the test suite itself doesn’t rot and become a burden. This post covers some high level concepts and architecture decisions that keep test suites maintainable.

Authentication With GraphQL, Relay, and Rails

By Jon Stokes

In this article, we’ll look at how you register users and log them in and out in a Relay-on-Rails application. This piece covers the back-end implementation, only, so you’ll need to know how to implement Relay mutations on your preferred client.

Hooray for Global Color Themes in Xcode!

By Ben Lambert

Ever wanted to change an application’s color palette in one place and have it update everywhere in Xcode, regardless if it’s used in storyboards or code? Xcode 9, iOS 11, and Color Assets are your answer.

When Strange Loop Makes Your Brain Melt

By Allison McMillan

Continued learning is hard and sometimes conferences, which should help with that, can be demoralizing. Here are some tips to let them empower you and not make you feel inadequate.

Write/Speak/Code: A Conference For Doers

By Allison McMillan

Conferences are great for learning and networking but the Write/Speak/Code conference encourages attendees to be doers on top of being participants. Learn one, Do one, Teach one.

Big Data Ignite 2017 Recap

By Mac Fowler

Big Data isn’t going away any time soon. After attending a local conference on the topic, I started to see a couple of major trends showing through, including the fact that enterprises are more interested in it than ever.

September 2017

Side Effects of Code Review

By Victoria Gonda

Code reviews are helpful for maintaining code quality and exchanging knowledge. They can also be a way to boost confidence and provide another meta way of educating.

Showing Off Some Projects at Collective Idea

By Daniel Morrison

Our team does a lot of very cool work, but we’re often barred from talking about it. So recently we decided to focus on some projects we can talk about and wrote up some case studies. Here are three.

Lessons to Continue Learning When it Comes to Software Development

By Joanie Davis

When working in software development, you learn new things almost constantly. Sometimes you learn the same lessons more than once. Using the story of a recent pairing session, I outline the most important lessons I’ve learned this summer as an intern at Collective Idea.

August 2017

Where you can find Collective Idea this fall

By Sasha Wolff

Collective Idea encourages all of it’s employees to take on professional development opportunities whenever possible. Here are a few conferences we’ll be at over the next couple of months and we hope to meet up with you!

Bang Bang: Drumming the nulls from your code

By Victoria Gonda

When converting Java code to Kotlin code, there’s a good chance you’ll see a bunch of double bang operators. Rather than leaving these to error, you want to make these places null safe. Here we discuss some options to handle null in Kotlin.

How We Develop Mobile Applications - Pt 4 - Android

By Victoria Gonda and Joshua Kovach

Learn to use Model-View-Presenter to define and test application behavior independent of the Android framework.

GraphQL + Relay Modern + Rails

By Jon Stokes

Are you a Rails developer looking to take the next step? Here’s how to add Relay, GraphQL and Relay on top of your favorite web framework.

July 2017

Photo courtesy of Mark Scheel

My 360|AnDev Review 2017

By Victoria Gonda

360AnDev is an amazing Android conference that takes place in beautiful Denver, CO. Here’s a collection of highlights of the 2017 event.

June 2017

Kotlin Uncovered: Part 5

By Victoria Gonda

We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post we’ll learn about extension functions, and how they work under the hood.

Adjustable Form Text Area with the contenteditable Tag

By Cameron Bass and Victoria Gonda

Finding the proper behavior for uncommon form inputs can be difficult. Here is how we incorporated contenteditable and Javascript to handle a large body of content gracefully without breaking the form styles and maintaining a good UX.

Kotlin Uncovered: Part 4

By Victoria Gonda

We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post, we’ll learn how having nullability built into the type system helps us.

May 2017

Coming Out of My Shell at RailsConf2017

By Denise Carpenter

I’m rather new to the world of software development. It’s something I truly enjoy and continue to dig deeper into. Just recently I had the opportuity to go to my first software conference, which was RailsConf 2017. Here’s my experience.

RailsConf 2017: An Organizer's Perspective

By Allison McMillan

As a conference organizer, the experience can be a bit different. Find out why in this post.

Kotlin Uncovered: Part 3

By Victoria Gonda

We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post, we learn about everything we get from Kotlin data classes.

Kotlin Uncovered: Part 2

By Victoria Gonda

We can learn a lot about Kotlin through decompiling the bytecode into Java. In this post, we learn about the power of Kotlin classes.

Team Tools Roundup

By Dana Jones

Our distributed team uses some really interesting tools to do the work we do. Check out our tool roundup to find some new tools to try yourself.

Kotlin: Uncovered - Part 1

By Victoria Gonda

We can learn a lot about Kotlin through decompiling the bytecode into Java. Follow along to learn about the different things we can learn through investigating Kotlin this way.

Diving into Web-Based Virtual Reality

By Allison McMillan

Learn where to start to create a simple virtual reality image and how to learn more

My First Conference Talk

By Victoria Gonda

This year I had the goal to try speaking at conferences (or at least a MeetUp), and I accomplished that goal. Here’s the story of my journey there.

DroidConBos 2017 Review

By Victoria Gonda

Boston just had their first Droidcon, and it was a great experience. There was a beautiful community, and so many things to learn. I was also privileged to share my first talk on the Kotlin programming language.

Tailoring Retrospectives by Using Core Values

By Allison McMillan

Incorporating your company’s core values into a regular workflow can be challenging. Here’s how we did that with our retrospectives at Collective Idea.

Working Remotely?

By Allison McMillan

If you’re just starting out as a remote worker or you’re just looking to improve your flow, these tips and tricks will help.

April 2017

Containers, Docker, and Kubernetes Part 3

By Jason Roelofs

You want to try out this Kubernetes thing but aren’t sure how to start? Great! In this post I go over how I structure my Kubernetes configs, how I apply them to clusters, how to deploy changes, and how to manage secret values.

Conferencing Success

By Allison McMillan

Conferences can be overwhelming. Use these tips to make the most of your conference experience.

How I Almost Put an iframe into a WebView

By Victoria Gonda

You don’t have to use an iframe to listen to JavaScript events on 3rd party webpages. Instead, the best solution just involves a little Kotlin.

Arduino Programming in Vim

By Chris Rittersdorf

Tips and tricks learned along the way as I learn how to build Arduino projects inside my favorite development tool, Vim.

March 2017

Lessons Learned in Lambda

By Chris Rittersdorf and Kyle Magnuson

We recently finished up a project that uses AWS Lambda. The project needed to crunch large sets of numbers in a small amount of time. Lambda turned out to be a good fit for doing exactly that. But, it involved some trial and error. Here are a few lessons we learned along the way.

Using Tmuxinator to automate your environment

By Troy Spruit

How to use Tmux and Tmuxinator to automate the creation of complex environments such as service oriented architectures.

Here's Where Collective Idea Will Be Over the Next Few Months


We’re participating in or attending conferences and events all around the country. See when and if we’ll be in a city near you!

Common sense UI design


Do you want to make your web designs seem familiar to your users? Check out some not so obvious ideas that can contribute to an easier to use interface for your website or application.

February 2017

Containers, Docker, and Kubernetes Part 2

By Jason Roelofs

You want to take the next step and move to containers, but still have some questions that Docker doesn’t answer? Take a look at Kubernetes, the container orchestration tool from Google!

Finding Productivity by Abandoning the Traditional To-Do List

By Brian Ryckbost

There are a number of tools and methods out there that help to manage your day. Here’s a look at what works best for me, and it doesn’t include the traditional to do list.

How to Write a More Effective Conference Proposal

By Allison McMillan

Looking to submit a conference proposal? These five tips will help you craft better proposals that will impress the reviewers in the future.

Productivity Tips and Tools

By Allison McMillan

Balancing a variety of professional and personal work tasks can be tough. To make sure nothing falls through the cracks, use these tips and tools to help keep yourself organized.

Unsolicited Critique

By Patrick O'Dell

One of the Collective Idea designers takes to the internet to assess and rework whatever he finds on the other side.

Guard is Your Friend

By Joshua Kovach

Test-driven development can be a little slow going, jumping between your code and your console, and targeting tests by line is prone to error. Use these tools and techniques to streamline your TDD.

Remote-friendly Retrospectives with Trello

By Dana Jones

Conduct collaborative, interactive meetings with people all over the globe. Trello is good for more than just software development and project planning.

Welcome Patrick O'Dell

By Daniel Morrison

We’re happy to add another designer to the Collective Idea team!

How We Develop Mobile Applications - Pt 3 - Android

By Victoria Gonda and Joshua Kovach

Learn how to use Test-Driven Development to interact with a remote JSON API using Retrofit, Moshi, and RxJava

Welcome Kyle Magnuson

By Daniel Morrison

It’s true… we hired another Hope College graduate.

January 2017

Welcome Sasha Wolff

By Daniel Morrison

We’ve added a marketing person to our team!

Welcome Troy Spruit

By Daniel Morrison

We’re very excited to belatedly welcome Troy Spruit to the Collective Idea family.

Hands On With The Maker Movement

By Victoria Gonda

This year we had the opportunity to teach students at Holland Christian High School about the Maker Movement, and how to become involved in it. We had a blast covering 3D modeling and printing, circuits and micro-controllers, robotics, programming, and IoT services.

Containers, Docker, and Kubernetes Part 1

By Jason Roelofs

You’ve heard of Docker and containers but are still not sure if they’re a good fit for your requirements. We take a look at the benefits and concerns of switching to containerized infrastructure.

Testing an Uploaded File in Rspec

By Victoria Gonda

Sometime you need to test how your code handles an uploaded file, but you don’t want to upload it in your test. Luckily, there’s an easy way to handle this.

Turbolinks Caching with JavaScript Modified Dom

By Laura Mosher

Don’t want duplicated markup in your document? There are a few ways to fix that. We’ll go through how to prepare your document for caching with Turbolinks.

An in-depth look at two RailsConf tracks

By Allison McMillan

RailsConf offers an opportunity to submit proposals directly related to specific tracks. Learn more about two of these tracks to get inspired and craft successful proposals.

Cropping Animated GIFs with MiniMagick

By Joshua Kovach

Cropping an animated GIF with crop will continue to use the original image’s canvas size. This cool trick will ensure the cropped image ends up the correct size.

How We Develop Mobile Applications - Pt 3 - iOS

By Chris Rittersdorf

Welcome back for the third post of our blog series on how we build mobile apps at Collective Idea. In the last installment we covered basic project setup. This time, we’ll discuss our first steps in fleshing out the application.

December 2016

Rainbow of Credit by Frankie Leon is licensed under the CC BY 2.0

Creating and testing Stripe Webhooks using StripeEvent

By Denise Carpenter

Today we’re using Stripe webhooks to listen for invoice.payment_failed. We’ll walk you through how to set this up step-by-step.

How We Develop Mobile Applications - Pt 2 - Android

By Joshua Kovach and Victoria Gonda

Now that you know what your mobile application will do and look like, it’s time to get your various environments set up. Here’s our list of things we check off at Collective Idea for creating an Android app.

Getting Started with Action Cable

By Victoria Gonda

With the inclusion of Action Cable in Rails 5, we can easily add WebSockets to our Rails applications. This post walks through how to set up Action Cable as a response to an action on an Active Record model.

How We Develop Mobile Applications - Pt 2 - iOS

By Tim Bugai

Now that you know what your mobile application will do and look like, it’s time to get your various environments set up. Here’s our list of things we check off at Collective Idea for creating an iOS app.

November 2016

Hands by Incase is licensed under CC BY 2.0

Avoid parsing Rails controller params by using Metal

By Daniel Morrison

While looking at a controller today, I came to the conclusion it’s better to use ActionController:API instead of ActionController::Metal. Here’s why.

So You Want to Talk at Conferences

By Victoria Gonda

I thought it would be awesome to start speaking at conferences, but I wasn’t sure where to start. Here’s how I prepared for my first time at the podium.

Continuing Education at Collective Idea - RubyConf 2016

By Laura Mosher

When attending RubyConf 2016, I learned more than just additional gems about Ruby. I learned about continuing education and why it matters.

Even the Justice League Works Remotely

By Allison McMillan

Hiring remote developers who are not yet senior requires looking for certain critical characteristics. Learn what those are and what you should consider if you are hiring or looking for a remote position.

How We Develop Mobile Applications

By Tim Bugai

Developing a mobile application that works on both iOS and Android takes a bit of work. Here are some best practices to get you going.

macOS alternatives: What about SteamOS?

By Jon Stokes

After Apple’s October 27 Mac event, many people were left to wonder, “Should I think about a macOS alternative? What else is out there?”

Program Like a Dancer

By Victoria Gonda

The art of dancing and the act of programming are quite similar. How so? It’s the way both dancers and programmers respond to feedback.

October 2016

Troubleshooting Feature Specs

By Allison McMillan

Figuring out why your feature tests are failing can be difficult, especially when setting up the first few tests in the codebase.

Teaching the Future to Code

By Sasha Wolff

This past weekend we shared our coding knowledge with some eager 7th and 8th-grade girls ready to create their own websites with BitCampGR.

BitCamp GR at Collective Idea

By Laura Mosher

We are very excited to be hosting our very first BitCamp GR event this weekend in conjunction with Hope College Computer Science Department.

How to Create a Trending Hashtag

By Daniel Morrison

During the third and final Presidential Debate, the hashtag #TrumpBookReport was trending on Twitter. Turns out, I created this hashtag sensation, and I can teach you my tricks.

Retrofitting Espresso

By Joshua Kovach

You don’t need an IdlingResource, and sleep() is fickle. Make Espresso wait for your observables running on background schedulers with this one cool trick!

Your User Can’t Click Your Floating Action Button

By Victoria Gonda

An easy way to make your Android app’s main action more accessible for people using screen readers.

Bundler's Multiple Source Security Vulnerability

By Steve Richert

While working on a project, I discovered a major security vulnerability that affects all stable versions of Bundler.

4 Twitter Tips to Use at the Next Conference You Attend

By Sasha Wolff

Networking is taking place both online and offline at conferences big and small. Here are a few tips to help you out with virtual networking.

September 2016

A Survival Guide for Non-Writers Who Have to Write for the Web

By Jon Stokes

Writing for the web isn’t easy especially if it isn’t your full-time job. It doesn’t have to be painful though. Here are a few tips to help you survive.

Autocomplete your Rails Form using Selectize.js

By Victoria Gonda

When using Ruby on Rails Form Helpers, it could be useful to add an autocomplete feature to fields where users might reuse data. One way to do that is to use Selectize.js to create a dropdown and populate it with data from the user model.

Free SSL on Heroku

By Daniel Morrison

Starting today, Heroku has a new free SSL offering. Use it with Let’s Encrypt for a fully free SSL system.

Spacemacs: The Final Frontier for a Diehard Vim Fan

By Chris Rittersdorf

Collective Idea’s been bit by the Elixir bug recently. And in my research to configure its Alchemist tools, I’ve discovered an interesting text editor: Spacemacs. Spacemacs is an easy-to-install set of defaults for Emacs. And I love it! But, I’m a diehard Vim fanatic. How could I say something that sacrilegious!?

A New Way of Learning

By Victoria Gonda

Looking back, I now know there are a lot of that can’t be learned from a book or tutorial. Through working with others, I was able to build on my skills in a way I wouldn’t have been able to do in isolation.

My Ruby Epiphany

By Daniel Morrison

I’ve been using and teaching Ruby for many years now, but I recently had an epiphany about private methods.

4 Reasons Elixir is the New Hotness

By Andrew Bredow

Have you heard the buzz about Elixir? Look no further to see what all the commotion is about!

August 2016

To Do List by Adam Diaz is licensed under CC BY-SA 4.0

Keeping on Task using Dead Man’s Snitch

By Sasha Wolff

How to use webhooks and Dead Man’s Snitch to hold yourself accountable for getting things done.

I’m Sorry, But Stop Apologizing

By Victor Sirotek

Stop saying sorry all the time. Especially when there is no reason for it. Just say what you need to say.

How to Become a Better Pair Programmer - Part Four

By Dana Jones

In the last part of our four-part series, we look at a variety of roles one can take on during a pair programming session. Are you the researcher, tester, sounding board, or something else?

How to Become a Better Pair Programmer - Part Three

By Dana Jones

Pair programming isn’t always just about working with another person. Sometimes, partnering up on a project requires you to know more about how YOU work within the partnership.

Welcome Victoria Gonda

We’re very excited to welcome Victoria Gonda to the Collective Idea family.

July 2016

How to Become a Better Pair Programmer - Part Two

By Dana Jones

Part two of our four-part series on pair programming touches on the topics of the time involved when pairing, why you should keep your ego in check, and how to assume the best of your pair partner.

Solutions to Potential Upgrade Problems in Rails 5

By Jason Roelofs

The Rails 5 upgrade has a few changes that may cause confusion. We look at how to get around the disabling of autoloading and look at the new deprecation warnings.

How to Become a Better Pair Programmer - Part One

By Dana Jones

So what can you, as a well-meaning professional developer do to contribute more to your team? We have several suggestions for reaching your pair programming potential.

How Rails Can Reduce Your Monthly Headaches

By Victoria Gonda

Months can be difficult to work with when they have a differing number of days. Rails helps out with #month, but you still need to use caution.

Turning the Train into My Mobile Office

By Laura Mosher

Collective Idea encourages everyone to work where they are most productive; whether that means at home, a coffee shop, the office, co-working space, or train.

Efficient Learning for New Programmers

By Cameron Bass

Good practice tips for those who are new to programming and have limited time to complete ideas.

Celebrating Our Newly Expanded Office Space

By Daniel Morrison

This past year we expanded our office space and our team. We held a Grand Opening party to celebrate.

June 2016

Courtesy Chris Rittersdorf

Unlearning How to Type

By Chris Rittersdorf

A week ago I finished building an Ergodox keyboard as a way of easing RSI problems and having fun. However, in adjusting to this
new keyboard layout, I learned some valuable lessons about my personal development style instead.

How to Resync Your PostgreSQL Database Pointer

By Dana Jones

If you’re working with PostgreSQL and you’ve recently gotten a UniqueViolation error, you may just need to correct an out-of-synce database pointer.

Why We Support the Seamless Accelerator

By Sasha Wolff

West Michigan is home to the Seamless Accelerator, an initiative that aims to bring IoT startup ideas to market. Once component to the accelerator is resource partners like Collective Idea.

A Sense of Place

By Daniel Morrison

Out of all the places in the world we can set up shop to do software development, we’re in Holland, Michigan and thriving.

I Shared My Password Over Email

By Sasha Wolff

If you’ve ever needed to share a password before, don’t share them over email. Instead, here are a few options to check out.

Wyatt: The simple way to generate RSpec tests

By Denise Carpenter

As software developers, we like to work smarter, not harder. If you’re looking for a smarter way to generate RSpec tests, check out Wyatt.

Programmer in a 3D printer world

By David Genord II

A 3D printer can do more than just create fun objects. They can be programmed to solve every day problems.

Interview: Talking Middleman V4 and Front-end Dev with Thomas Reynolds

By Jon Stokes

Middleman was built by Thomas Reynolds over eight years ago as a way to build static sites with easy-to-use framework. I talk with Mr. Reynolds about a few new features for Version 4 of the tool.

Fun with SVG: CSS background-blend-mode Fallback

By Matt Slack

I want to use the new hotness, but Internet Explorer/Edge doesn’t support it yet.

May 2016

“Blue Planet Globe”: by “WikiImages”: is licensed under “Creative Commons CC0”:

Beyond YML Files - dynamic translations

By Dana Jones

The standard I18n implementation has you store your translation in .YML files in your project. This solution requires developer involvement and project redeployment any time a translation needs to change. Translations are data - not code - so a better solution is to empower an admin to make these changes herself.

Volunteering for BitCamp GR

By Laura Mosher

Volunteering at BitCamp GR, by Software GR, is an amazing day-long event to teach young girls software development.

How We Work: Space

By Daniel Morrison

Our space is a bit different than many offices, but is a reflection of how we work.

Creating a Mentally Healthy Work Environment

By Sasha Wolff

There are a number of things an employer can do to create and foster a happy and healthy workforce.

3 Excellent Reasons to Try Green Commuting

By Sasha Wolff

Air pollution is a problem that affects everyone. So to help combat the problem, we tried green commuting for a week. Here are our top tips!

GitHub's Price Hike and Why We're OK With It

By Daniel Morrison

GitHub is changing their prices for organizations. Here’s why you should stop worrying.

Pitfalls of a Legacy iOS Project

By Chris Rittersdorf

What seemed like a simple-reskinning turned into a much more involved project. It’s codebase that’s sat dormant for a few years, and that posed difficulty finishing tasks in the time we originally thought it would.

The following covers a few of the lessons we learned. That way you can be aware of pitfalls the next time you have to update a legacy iOS application.

Walk Through the Collective Idea Office

We’re in the middle of expanding our office in located in Downtown Holland. Before we unveil the office it its entirety, check out our previous [i] space in 3D!

CODE Film Review: Diversity in Computing

By Victoria Gonda

We held hosted a screening of CODE: Debugging the Gender Gap in Graves Hall on the Hope College campus, and are happy with the conversations it started about the lack of women and minorities in the computing industry. The film, and the discussion that followed emphasized two important efforts when approaching this issue: exposure and support.

April 2016

Rails + React + NPM: Another Option

By Jon Stokes

Most of the instructions I found for combining react-rails with browserify-rails and npm modules were at least a year out-of-date. But I finally got it all working, and it turns out that it’s pretty straightforward. In this bog post, I’ll show you how to use the convenient react-rails helpers to build views while using browserify-rails to bring in npm modules where and when you need them.

Movie Night!

By Victoria Gonda

Collective Idea and the Hope College Computer Science Department are working together to host a screening of CODE: Debugging The Gender Gap in Holland, MI. You are invited to gather with us to watch this film in Winants Auditorium in Graves Hall on April 18th at 7:00 pm.

How We saved the TSA $185,200. I mean 185,200 Bytes.

By Matt Slack

Multiple Personalities in Git

By Steve Richert

At Collective Idea, we use Git all the time. Right now, I have 50 Git repositories cloned on my computer and they fall into a few categories. My problem is that I need to commit from a different email address depending on which type of project I’m working on. I explored three ways to do this, looking for the least intrusive.

March 2016

Modern Javascript and Rails

By Jason Roelofs

Want to write ES6 and/or use JSX or any of a vast array of modern Javascript tools in your Rails app? What about also writing your Javascript tests with the same tools? It’s easy with Browserify-rails and Teaspoon!

February 2016

The NoCMS Manifesto

By Jon Stokes

I’ve been thinking a fair amount recently about life in a post-Wordpress world. Specifically, I’ve been pondering what a fully modern CMS might look like if it were designed in 2016 from mature, stable technologies with the goal of giving publishers the flexibility that they need to solve their number one problem. Of course, the number one problem in publishing isn’t slow page loads, nor is it the fact that Wordpress has a crufty UX while all the cool kids are doing edit-in-place. Performance and UX do matter, but by far the biggest problem in publishing right now is that it’s no longer clear how anyone will make money by typing things onto the Internet for other people to look at.

January 2016

The Late Train by Alex Becerra is licensed under CC BY 2.0

Painless Activity Streams in Rails

By Jon Stokes

There’s a better way to implement business logic, and track events in Rails.

WISP Trials: Waiting For the Balloons

By Jon Stokes

I used to think Google’s plan to give the world Internet via balloon was kind of looney. Then I moved to Texas and started a small hobby wireless ISP (WISP). Here are some things I learned about why American broadband is a fiasco, a fiasco that’s about to get way worse.

Let's Encrypt with a Rails app on Heroku

By Daniel Morrison

I needed to renew an SSL certificate today, so I used it as an excuse to try Let’s Encrypt for a free certificate for a Rails app hosted on Heroku.

PostgreSQL 9.5 Upgrade with Homebrew

By Daniel Morrison

PostgreSQL 9.5 was released yesterday and has a lot of cool new features. If you’re on Mac OS X and using Homebrew, you can upgrade with the steps below.

December 2015

Coding by Matthew (WMF) is licensed under CC BY-SA 3.0

Adding Uploadcare to Rails the Easy Way

By Jon Stokes

Back when I started working with rails, a typical rails app was a relational database that you provided a user-facing CRUD interface for. Now a typical rails app is a place where a bunch of REST APIs meet.

November 2015

Photo from Unsplash.

Fun with SVG: Embedding in CSS

By Matt Slack

You can embed readable SVGs inside of CSS. Really.
Updated with better Firefox support.

ILuminate at Grace Hopper Conference

By Victoria Gonda

Iluminate uses a combination of dance and technology to create stunning performances. Their use of wireless light technology on dark costumes creates an incredible show.

October 2015

Get Notified If You Forget to Visit a Website

By Spencer Toth

How to create a free website monitor that alerts you when you forget to visit any website.

September 2015

Internet Land Grab 2.0

By Jon Stokes

You’ve probably read that WhatsApp hit 900 million users with only 50 engineers. That’s not quite the whole story. Thinking of the effective size of the company’s engineering team is a useful reminder of what really matters.

Inside The Machine v2.0: Coming Soon With More ARM

By Jon Stokes

I’m working on a second edition of my book, and I’ll be doing all the work in a public github repo. The new edition will also replace PowerPC with ARM.

Why I Joined Collective Idea

By Jon Stokes

In which one of the Ars guys gets back into coding, and joins a great software team.

Bicycle Fleet

By Daniel Morrison

We’re launching a fleet of bicycles from our office!

August 2015

Photo © Julian Bleecker. Licensed under Creative Commons.

Keep Your Certificates Current Using Your Test Suite

By Daniel Morrison

How can our test suite tell us when a certificate expires? We’ll show you.

Welcome Dana Jones

We’re excited to welcome Dana Jones to the Collective Idea team!

Stubbing your Android Intents

By Victoria Gonda

When we stub an intent, we are able to intercept it so the intent is never sent to the system, and specify how it should respond. This can be helpful in your Android tests when you need to know if an intent was sent, but you don’t actually need the Activity to start. This can be accomplished by using espresso-intents.

July 2015

Photo © Matt Slack, used with permission.

Bi-Directional and Self-Referential Associations in Rails

By Joshua Kovach

I’ve been working on an application that works to match users together based on a complex set of criteria (read: big slow database query and in-memory processing). The core usage of the application revolves around these user matches, so I want to make sure that either the algorithm will run very fast or can be cached so that it’s not run every time a user visits their matches page.

The most important requirement for our matches is reciprocation. To solve this problem and meet all of the requirements, we can create a bi-directional, self-referential, self-syncing, many-to-many association between users using a has_many :through association with a join model to keep track of a user’s matches.

Rewriting History With Git Rebase, Reset, and Amend

By Eric Milford

Editing an existing commit in history with an interactive rebase, reset, and amend.

Quick Setup for Your Rails Apps

By Daniel Morrison

We need to make getting up and running with our Rails apps easier. Here’s my attempt.

5 Timesaving KISSmetrics Tips I Wish I Knew About

By Spencer Toth

Moving our SaaS conversion tracking from Google Analytics to KISSmetrics was a great decision, but there were a few things I learned that I wish I would have known before jumping in that would have saved time.

Tracking KISSmetrics Events Using Query Parameters

By Spencer Toth

Accurately tracking new signups, upgrades, and downgrades for a SaaS is extremely important. When our JavaScript Events broke and Google Analytics was no longer reliable, I moved all conversion tracking to KISSmetrics. Query parameters proved to be the simplest and most reliable way to accurately track Events in KISSMetrics.

June 2015

Testing for Android Intents Using Espresso

By Victoria Gonda

Using espresso-intents for testing Android Activity Intents

How To Get Alerts When a Sidekiq Instance Goes Down

By Jon Stokes

For those of us who use the popular distributed job queueing system Sidekiq, it’s a common problem: a Sidekiq instance containing a pool of workers dies, and the only way you find out about the problem is by checking the Sidekiq dashboard and seeing that you’ve got a ton of jobs backed up and fewer busy workers than expected. Luckily, there’s an easy way to get email alerts when one of your instances goes down, using Dead Man’s Snitch and a little bit of code inspired by the sidekiq\_snitch gem.

May 2015

How to Pluck Like a Rails Pro

By Eric Milford

The pluck method is a performant option to query columns from one or more tables. The ability to pass valid SQL directly makes it all the more handy.

Fixing Intermittent Failing Tests

By Daniel Morrison

Some tricks to help you fix tests that sometimes fail.

Scheduling Crowd-Sourced Entropy with Webhooks

By Steve Richert

I love writing gems. Lately, I’ve been particularly interested in tackling the big, important problems in math, like how can a computer generate a truly random number. I took this challenge head-on when I developed the fair_dice_roll gem.

How to Get Your Server to Email You After it Fails

By Spencer Toth

Running routine tasks like a server health check often sends an email every time it returns healthy. Overtime, they’re easy to ignore. But, what you really need to know is when these email stop sending. Using a new Dead Man’s Snitch feature, you can now easily monitor when an email isn’t sent and DMS will alert you.

Welcome Ray Brown

By Daniel Morrison

We’re very excited to welcome Ray Brown to the Collective Idea family.

Better Ruby Rounding

By Brian Hempel

Need to round to the nearest 30 minutes or up to the next 250 or some other fun rounding case? Ruby’s build-in round, floor, and ceil won’t help you, but the Rounding gem will.

April 2015

Bootstrap Your App

By Jason Roelofs

Insert your app’s bootstrapping into CI to ensure that setting up a new developer is one script invocation.

Streaming Data From Postgresland to Rubyland

By Brian Hempel

I recently gave a talk covering find\_each, pluck, and the PostgreSQL Cursor gem for the West Michigan Ruby Users Group.

How to use Sketch's revert feature — it's actually really awesome!

By Victor Sirotek

Over the last year, I have moved my entire workflow over to Sketch. The app is very versatile and removes the need for a number of apps that I was previously using simultaneously every day. If you design interfaces or vector graphics for screens, it will change your life.

March 2015

Welcome Laura Mosher

By Daniel Morrison

We’re very excited to welcome Laura Mosher to our team!

Optimizing Rails for Memory Usage Part 4: Lazy JSON Generation and Final Thoughts

By Brian Hempel

Code to copy-paste so you can lazily serialize JSON and maybe even stream it to the client, and an argument for why we shouldn’t have to do any of this.

Optimizing Rails for Memory Usage Part 3: Pluck and Database Laziness

By Brian Hempel

Some ways to reduce memory usage as you gather records out of your database into Rubyland.

February 2015

Optimizing Rails for Memory Usage Part 1: Before You Optimize

By Brian Hempel

Part one of a four-part series which will show you how to optimize a memory-heavy Rails API action.

Optimizing Rails for Memory Usage Part 2: Tuning the GC

By Brian Hempel

Changing Ruby’s garbage collection parameters is the least invasive way to optimize your app’s memory usage.

Our 10th Birthday

By Daniel Morrison

Collective Idea turns 10 today!

Spring Is Dead to Me

By Steve Richert

Spring, as described in its README, is a Rails application preloaded. “It speeds up development by keeping your application running in the background so you don’t need to boot it every time you run a test, rake task or migration.” I want to focus on the first assertion in that description…

January 2015

Non-Message Flash in Rails

By Steve Richert

Flash messages were one of those little features that amazed me when I was first introduced to Rails. Developers often use Rails’ flash to display messages to their users, but messages aren’t the only reason to use flash.

Cucumber exiting with 0 on failure?

By David Genord II

Check your at_exit callbacks.

HIPAA Means Turning Off External Services

By Daniel Morrison leaks patient data to 3rd parties. Does your Healthcare startup do the same?

Encrypting Secrets with Chef Vault

By Jason Roelofs

Tools like Chef and Puppet make configuring servers repeatable and reliable. However, handling the private data, like server passwords and API access keys is still a difficult problem. Today we take a look at one solution available to the Chef community: Chef Vault.

December 2014

Transient Properties of the Realm

By Tim Bugai

Realm is a good alternative to CoreData for your iOS apps. Setting up properties to be stored in the database is as simple as defining them in a model. But what about those properties that you don’t want persisted?

Quickly Test Slow Uploads

By Daniel Morrison

How do you test a slow file upload? Force it to be slow.

A Not-So-Bad-Reminder to Blog More

By Spencer Toth

Reminding and motivating your team to write blog posts can be hard. Constantly nagging them won’t help much either. With a slightly more constructive approach, we hope to increase our blog posting to once per week by scheduling months in advance and sending a simple reminder if we get off track using this quick and automated “Recipe.”

November 2014

Let's Simplify Ruby

By Daniel Morrison

I want to make Ruby better by making it smaller. Who wants to help?

Teaching Your Database New Tricks

By Tim Bugai

Databases don’t come with complex field types like an image. That doesn’t mean we can’t store them in our database anyway.

String Interpolation: The Bad Parts

By Steve Richert

String interpolation in Ruby is great. It’s one of those niceties that I really miss whenever I venture into JavaScript land. But watch out! There are some lesser known “features” of Ruby’s string interpolation that can burn you… badly.

Wet Paint: Redesigning Dead Man’s Snitch

By Victor Sirotek

Wherein Victor offers reflections on redesigning the app to improve usability and aesthetics.

October 2014

Attending the Grace Hopper Celebration

By Maria Eguiluz

I attended the Women in Computing - Grace Hopper Celebration (GHC) in Phoenix, Arizona a couple of weeks ago. GHC is an annual conference where women in all stages of their career come together to talk about relevant topics both in computer science and on what being a woman in the technology field is like.

Simple Cocoa Configuration Using Swift Structures

By Chris Rittersdorf

Apple’s introduction of Swift to the Cocoa development toolbox has created a buzz amongst Cocoaheads. The language is flexible and lends itself to new patterns which traditionally Objective-C programmers are excited about. I got excited about a pattern that emerged while working on a new version of the Dead Man’s Snitch iOS app:* using Swift structs to store application configuration information*.

September 2014

Jewels by Peter Richardson is licensed under CC BY 2.0

How we write a Gemfile

By Daniel Morrison

Tips on how we like to organize Gemfiles and keep it clean.

August 2014

has_and_belongs_to_many Isn't Dead!

By Daniel Morrison

People are under the impression that HABTM relationships are deprecated because of the newer Has Many Through relationship. Both are good, and both have their place, but HABTM is still valid, vibrant, and useful!

Time to Bring Back Fixtures

By Jason Roelofs

Fixtures are great tools that have been sadly overlooked for a long time in the Rails world. Lets start using them again.

Why Isn't Ruby Rescuing My Exception?

By Brian Hempel

By default, Ruby only rescues subclasses of StandardError to allow the really bad stuff to halt your program.

July 2014

Recommended Security Setup for AWS

By Jason Roelofs

Amazon Web Services runs an every growing percentage of the Internet, which means AWS accounts are more so a target of those-we-will-not-name. This post outlines the recommended minimal setup we at Collective Idea now apply to every Amazon account to ensure sufficient security.

June 2014

Finding MIA Cursor in iTerm

By Maria Eguiluz

Have you ever been distracted while working in terminal and lost your cursor? Then, once you focus your attention back to your work, had to scan frantically and repeatedly through a mass of text for the small, blinking rectangle? iTerm has a sweet new feature that lets you zero in on the location of your cursor letting you find it quickly and efficiently. Just press Command-/ and your screen fades around your MIA cursor. The longer you hold down the keys, the more drastic the contrast between the fading and the location of your cursor, pinpointing you to its exact location!

May 2014

DNS, ELBs, ANAMEs, and TTLs, Oh My!

By Daniel Morrison

We had an issue this morning with Dead Man’s Snitch which led to some surprising issues with ANAME DNS records.

April 2014

On Documentation-Driven Development

By Steve Richert

I love designing and developing APIs. In building a great API, the design and development processes demand equal attention. The problem is that popular development approaches don’t emphasize the design process. You may be familiar with the concepts of “test-driven development” and “behavior-driven development”, but let’s talk about the lesser-known concept of “documentation-driven development”.

Segmentation faults on Travis CI caused by libxml-ruby

By David Genord II

If ruby is segmentation faulting on Travis CI, try updating libxml

March 2014

Regarding Rockstars

By Steve Richert

A potential client asked us recently: “What makes you rockstars?” The question had us stumped and it took a while for us to realize why. Here’s how we responded:

We’re not rockstars. We’re the roadies.

February 2014

Public Methods != Public API

By Steve Richert

I love designing and building APIs. Usually those APIs are in the form of REST web services. A lot of care goes into the interface of a web service because it’s how your application is presented to the outside world. But what about the interfaces of your internal code?

Welcome Chris Rittersdorf

By Daniel Morrison

We’re very excited to welcome Chris Rittersdorf to Collective Idea!

A Simple Pair Programming Setup with SSH and Tmux

By Tres Trantham

Here at Collective Idea, we do a lot of pair programming. We also believe in remote working. When pairing with any of our remote developers, we typically use a combination of SSH and tmux. There are a lot of good articles on this type of setup, but we've settled on an easy solution that works well.

Selective Restore in MongoDB

By Jason Roelofs

MongoDB makes it really easy to selectively restore deleted or lost data from a backup dump without doing a full restore.

False positives on Travis CI with CodeClimate / SimpleCov

By Jason Roelofs

The latest version of SimpleCov has a bug that ignores test exit statuses.

Finding Insight Through Humor: Negative Keywords

By Spencer Toth

Understanding what keywords visitors use to find your website will help you optimize your AdWords Campaigns…even if it involves snitching for the DEA.

January 2014

Tuesday Tinkering: Try something new

By David Genord II

Last week we held or first, hopefully of many, hardware hacking event dubbed Tuesday Tinkering.

Are your Google Tags Installed Correctly?

By Spencer Toth

Often, people are left unsure if their Google tags have been installed correctly on their website. This simple tool helps troubleshoot installation of tracking codes and tags to see if yours are working correctly, or better yet, to see if you’re being tracked.

Mocking HTML5 API's Using PhantomJS Extensions

By Ryan Glover

Recently one of our projects called for using the browser’s Geolocation API. We were excited about this project. However, we had an immediate concern about how to test a feature that interacts with one of the browser’s built in APIs.

Today in Silly Apps

By Daniel Morrison

A couple years ago we built a really simple web app to track data loss now it tracks when you’re sick too. Here’s our silly app of the day.

Welcome Tres Trantham

By Daniel Morrison

We’re happy to announce that Tres Trantham has joined the Collective Idea family.

A PostgreSQL Sandbox Using VIM and tmux

By Chris Rittersdorf

!If you’re like me, you’ve let ActiveRecord hold your hand for way too long. And when it comes time to write advanced PostgreSQL queries, you need to experiment in the REPL to find what you’re looking for. Add this trick to your toolbox to make working with the PostgreSQL REPL simpler.

December 2013

The Marriage of Figaro… and Rails

By Steve Richert

Two years ago and 264,309 downloads ago, I wrote the Figaro gem. I had been using the pattern for some time already and was frustrated that something so simple wasn’t already included in Rails. And now, finally, it is! Well… sort of.

Getting Pushy…

By Tim Bugai

A few months ago, we built an iOS App for Dead Man’s Snitch. The drive behind making it a native application was to take advantage of the Apple Push Notification System. When the App went live to our customers via the App Store it quickly became clear that we were missing notifications sent from Dead Man’s Snitch.

November 2013

Ruby 2 SSL Verification Failed?

By Jason Roelofs

Many users are having OpenSSL validation issues with Ruby 2.0 across various platforms. Turns out there are multiple issues at hand, each requiring different fixes.

Background Job Monitoring for Atheists

By Steve Richert

I’m a Rails developer but I’m not much of an Ops guy. So when it comes to server monitoring, I want a simpler solution than God. God is a “Process Monitoring Framework in Ruby” and while I know it’s awesome, sometimes it’s not quick and dirty enough for my liking.

Demographics & Interest Reports not working in Google Analytics? Here’s what you need to know.

By Spencer Toth

If you’re having trouble enabling the Demographics & Interest Reports in Google Analytics, here’s what you need to know. Instructions on enabling the reports are also covered.

Welcome Spencer Toth

By Daniel Morrison

Today we’re thrilled to announce the addition of Spencer Toth to the Collective Idea team. Spencer is joining us to take our marketing and strategy to new levels.

Factory Girl without Active Record

By Steve Richert

Factory Girl has been around for more than five years now and has become the standard for building and saving valid model data for your test suite. Out of the box, Factory Girl plays nicely with the major ORMs: Active Record, Mongoid, DataMapper and MongoMapper. But what about those pesky models that fall outside of your ORM? Fear not… Factory Girl’s got you covered there too!

October 2013

Why we gave a cron job monitor a personality.

By Victor Sirotek

Architecting a brand for Dead Man’s Snitch.

Debugging Firefox Failures on Travis

By Jason Roelofs

When strange failures are plaguing Firefox during Travis CI test runs, get a hold of Travis Support, they’ll help you out!

Using NSData for your network messages

By Tim Bugai

One of the hurdles you have to overcome when building an app like Downside is how to handle network messages. Apple provides several different ways of adding networking to your apps including GameKit and the new Multipeer Connectivity framework in iOS 7. Each of them require you either send or receive an NSData blob.

August 2013

Install Flash for Travis CI Builds

By Brian Ryckbost

Installing flash plugin on Travis CI is simple and quick. Here’s how.

Welcome Victor Sirotek

By Daniel Morrison

We’re excited to welcome Victor Sirotek to our team!

July 2013

Collective Idea Acquires Dead Man's Snitch

By Daniel Morrison

Today we’re very excited to announce that we’ve made a new product acquisition: Dead Man’s Snitch.

Travis CI with Rails 2.3.18 and Ruby 1.9.3

By Jonathan Pichot

Ruby 1.9.3 on Travis CI now includes a RubyGems version greater than 2.0. This breaks Rails 2. Here’s how to fix it.

June 2013

Building Awesome Rails APIs: Part 1

By Daniel Morrison

After teaching an Advanced Rails class last week, I realized that we use a lot of patterns internally to build great APIs in Rails that many people don’t know about. We didn’t invent most of them, but we use them with great success, so we need to start sharing.

Rack::Cache, tmp/cache, and running out of inodes

By Jason Roelofs

Rack::Cache + custom user content + multiple releases + time == dead servers.

May 2013

Batch Number Increment in Vim

By Eric Milford

How to use Vim’s sub-replace-expression command to batch increment a set of numbers.

Turning Off

By Daniel Morrison

Now is the time to disconnect. Not forever, not always, but we need to disconnect so we can reconnect with the world.

April 2013

Meet Downside, our First iPhone Game!

By Daniel Morrison

I’m extremely excited to introduce Downside, our first foray into building a game for iOS.

February 2013

Conference Season: 2013

By Daniel Morrison

We’re gearing up for Conference Season. Want to see us in the flesh? Avoid us? Here’s the start of our schedule so you can plan accordingly.

Becoming a Rubyist

By Jonathan Pichot

I joined Collective Idea six months ago. In that time, I’ve had the chance to throw myself into a new language. Just like learning a new spoken language, learning a new programming language means learning a new way of thinking. Here are some of my reflections on becoming a Rubyist.

January 2013

Chrome Profile Settings and Capybara 1.1 Stable

By Brian Ryckbost

Custom profile settings for Chrome used with Capybara 1.1 stable seem to be getting ignored. Here’s my quick workaround.

Long Lost Allocation

By Steve Richert

There’s a great little method in Ruby that you might not be familiar with. It’s used all the time but it’s hardly ever called directly. The method is Class#allocate.

Reverse Search with Elasticsearch

By Jason Carpenter

Elasticsearch has an amazing feature called Percolation, which allowed us to save the complicated searches of the Group Portfolio into an index, then when a new project is added, we can ‘search the searches’ to return the Group Portfolio ID.

Running HAProxy behind Amazon's ELB

By Jason Roelofs

You can run HAProxy behind Amazon’s ELB for increased control over traffic to your web servers. The following tweaks will help with stable, sustainable performance in such a setup.

December 2012

Inter-Service Authentication with SSL

By Steve Richert

At Collective Idea, we love building web services. Oftentimes we also build the client applications that consume those services.


One of the major challenges with a service-oriented architecture is authenticating communication between the client and the service as well as between services.

So We Bought a Printer

By Daniel Morrison

After doing a bit of boring research, we bought a printer. Here’s hoping this helps someone in the same boat!

Desks 2.0

By Steve Richert

At Collective Idea, we’re hard at work moving into a bigger, new and improved office space. We have big plans for the space, including refinished hardwood floors, Flor carpet, Nest thermostats and more. But before all the bells and whistles, we need to be able to… work.

Building Office 2.0

By Daniel Morrison

A little peek behind the scenes about how we built out our new office.

Office 2.0

By Daniel Morrison

We’ve officially move to our new office, and have lots to share on the process.

Playing with Go: Embarrassingly Parallel Scripts

By Jason Roelofs

We can write parallel execution scripts in any language, but some work much better than others. Google’s Go makes embarrassingly parallel tasks almost trivial to write.

November 2012

Down Boy: How to easily throttle requests to an API using Redis

By Ryan Glover

Easy way to make sure all of your workers are smart about staying under an API threshold and daily limits.

Running a high volume Rails app on Heroku for free

By David Genord II

In 3 easy steps you can setup a rails app on Heroku that can easily handle 200 requests per second and 100 concurrent connections, for free.

Fully automated, almost free backups

By Daniel Morrison

One of our clients was recently burned by their hosting company not providing the backups they expected. As we helped transition them to a new system, I focused on setting up solid backups and am very pleased with the results: Fully automated, offsite backups for under $2/month.

Tests Still Slow? Might be bcrypt!

By Jason Roelofs

How Google’s perftools led me to add a single line of code that cut test suite run times in half.

You Still Have to Test on the Server

By Daniel Morrison

It doesn’t matter how good your test suite is, you have to run through on your server to know it works.

October 2012

Install your own PhantomJS on Travis CI

By Eric Milford

Poltergeist requires at least PhantomJS 1.7.0. Travis CI provides 1.6.1. Here’s how to bump your version of PhantomJS.

Fun with Unicode Math in Ruby √

By Daniel Morrison

We had way too much fun with Ruby and Unicode, and the result is that you can now join in the fun with our unicode_math gem.

A Different Approach to Gem Development

By Steve Richert

Not too long ago, I had the idea to write a gem (as I often do) to wrap elasticsearch with some smart conventions for Active Model. First step: name the gem.

Keep your AWS environments separate with IAM users and groups.

By Jason Roelofs

Amazon’s IAM service lets you restrict and secure access to your AWS data and services to individual users or groups allowing you to have multiple environments (staging, production, etc) under the same AWS account without worry.

September 2012

Pick a Side

By Daniel Morrison

I noticed a strange JavaScript loading fallback today. Often simplicity can trump having fallbacks.

Welcome Jonathan Pichot

By Daniel Morrison

Today we welcome Jonathan Pichot to the team, and we’re very excited to do so!

August 2012

Fighting off a DDoS

By Daniel Morrison

Harmony has been fighting a DDoS attack for over a month, and we’re sharing a bit of how we fixed it.

Welcome Eric Milford

By Daniel Morrison

Welcome Eric Milford to the team.

July 2012

The @Font-Face Firefox Fiasco

By Brian Ryckbost

Firefox doesn’t allow references to web fonts hosted on another domain. A quick workaround is to Base64 encode your truetype fonts for optimal rendering.

June 2012

Where's Your Business Logic?

By Jason Roelofs

Can you point to a single place in your application and say “here is where we implement our business rules and use cases”, or are your use cases spread out across controllers, models, libs and elsewhere? Do you have fat models, fat controllers, and/or a massive lib directory? Is adding new features quick and easy or painful and time consuming? I have a solution to your pain.

Benchmarking Rails on the Retina MacBook Pro

By Brian Hempel

How much of a speed boost is the new Retina MacBook Pro’s Ivy Bridge i7? A lot–if you’re coming from a Core 2 Duo!

The Password Rant

By Daniel Morrison

LinkedIn screwed up, but you can be smarter. When you store a password, you’re holding a key to untold secrets. The goal is to keep that key safe from everyone, even you.

Getting Artistic w/ RubyMotion

By Tim Bugai

Sure, making apps that communicate with a server somewhere is interesting, but what about your creative side?

Delete Your Email Rules

By Daniel Morrison

Today I removed all of my rules in It is easier than you think, you just have to get less email.

The Shape of Complexity

By Brian Ryckbost

When working alone and tasked to solve a problem or implement a feature, I seem to follow a similar pattern of clarity, leading to confusion and frustration, and back to clarity.

May 2012

Welcome Brian Hempel

By Daniel Morrison

Welcome Brian Hempel (officially) to the team.

Welcome Jason Roelofs

By Daniel Morrison

Jason Roelofs joins the Collective Idea team today and we couldn’t be happier.

Using RubyMotion with

By Tim Bugai

One eventuality in the mobile development space is that you will, at some point, find yourself in need of a backend service for your app. In this blog post, I go over how to use as your backend service.

5 Awesome Things About RubyMotion

By Tim Bugai

Last week HipByte released RubyMotion and although I was originally skeptical, I’ve grown to really like it.

April 2012

Collective Idea acquires Harmony from GitHub

By Daniel Morrison

We’re very excited to announce that Collective Idea has acquired Harmony from GitHub. Harmony is an amazing app for building websites, and we’re very excited to help guide it to continued greatness.

Welcome David Genord II

By Daniel Morrison

Welcome David to the Collective Idea team!

Walken on Rails

By Daniel Morrison

Our new screencast series features narration by Christopher Walken.

March 2012

Your identity ≠ Your code

By Zach Moazeni

As developers, we like to solve problems and get a kick out of that feeling that seemingly comes out of nowhere: “Yes! I solved it. I am all that is awesome!”. While we all want to improve, it is difficult not to equate “this could be better” with “you should have been smarter”.

February 2012

Keyboard Shortcuts in Spine

By Brian Ryckbost

Keyboard shortcuts are a wonderful way to introduce efficiencies into an application. Here’s a quick rundown of how I integrated Keymaster into a recent Spine project.

Finish Weekend in Ann Arbor

By Daniel Morrison

We’re bringing Finish Weekend to Ann Arbor!

CoffeeScript Routing, part deux

By Tim Bugai

Adding named parameters to the CoffeeScript router

January 2012

Photo by Tambako the Jaguar, used under Creative Commons

Testing File Downloads with Capybara and ChromeDriver

By Steve Richert

At Collective Idea, we Cucumber, Capybara and ChromeDriver… and alliteration. But we recently encountered an issue with a very Ajaxy Rails app where we need to test a file download and assert its content.

Standalone Javascript Routing

By Tim Bugai

A recent project has us using spine.js as well as a few other JavaScript libraries. Though spine.js comes with its own routing, it conflicts with pjax. The solution was to roll our own.

Slow it Down

By Daniel Morrison

Most of the time, you test your apps on a fast connection, especially when working on a local machine. Most of your clients/visitors/customers aren’t so lucky, but how do you simulate their connection speed?

If you have installed Xcode on Lion, you have access to a very cool tool called Network Link Conditioner.

Refactored for Efficiency

By Tim Bugai

Refactoring your code is for more then keeping it DRY. It also gives you a chance to make it more efficient.

Give pry a Try

By Daniel Morrison

One of the things holding us back from developing on Ruby 1.9.3 has been ruby-debug. So after many people suggested we try it, we gave pry a shot. I don’t know why we didn’t before; it is quick, easy, and allows a wide range of Ruby versions.

Welcome Ryan Glover

By Daniel Morrison

We’re thrilled to welcome Ryan Glover to the team.

Capybara, Cucumber and How the Cookie Crumbles

By Steve Richert

I use Capybara and Cucumber to test my Rails apps, but cookie management can often be difficult… until now.

The Big Three-Oh

By Brian Ryckbost

Delayed Job 3.0 was released over the holidays. Here’s a rundown of what’s new and what’s changed.

December 2011

Type it Faster!

By Daniel Morrison

Dear Everyone, update your keyboard settings so I don’t see you taking forever to delete a few characters.

November 2011

Likes vs. Favorites

By Daniel Morrison

I like lots of things, but only have a few favorites.

I am 9 programmer-years old

By Jason Carpenter

I am about 9 years old in “Programmer Years”. Like dog-years, the conversion from human-years to programmer-years is about 7x. Thinking about programmer development this way helps offer some lessons on growing into a fully mature developer.

Changing Your Stripes

By Tim Bugai

Using Stripe to take credit cards online.

October 2011

Install Ruby 1.9.3 with libyaml on CentOS

By Brian Ryckbost

Get Ruby 1.9.3-p0 installed with libyaml on CentOS to avoid warnings.

Thinking about Ruby's Symbols

By Daniel Morrison

Symbols in Ruby are confusing to new users.

Starting is Easy. Finishing is Hard.

By Steve Richert

Finish something at Finish Weekend!

What's "new" in Ruby

By Brian Ryckbost

A quick introduction to Class.allocate, a class method you can use to allocate space for a new object and skip initialization of that object.

September 2011

Photo by Tambako the Jaguar, used under Creative Commons

Use Chrome with Cucumber & Capybara

By Daniel Morrison

Swapping out Firefox for Chrome is easier than you think!

ASCII Logo Guidelines

By Daniel Morrison

On the proper use of [i].

HSL color selector using HTML5 and CSS

By Matt Slack

Here’s a fun little color selector input that you can use in Safari, Chrome and Opera without an extra javascript, or fancy libraries. It looks pretty nice too.

If You Can't Tie A Knot, Tie A Lot

By Brian Ryckbost

In which I use a phrase from a Sailor as the basis for this blog post on over-programming.

Welcome Tim Bugai

By Daniel Morrison

Welcome Tim to the Collective Idea team.

August 2011

Double Clicking in Capybara

By Brian Ryckbost

Need to define a capybara step for double clicking an element? Here’s what we came up with.

Calendar About Nothing Invades My Shell

By Brian Ryckbost

A quick introduction to a weekend project: Inspired by my terminal outputting the last login date, shows the date of your last open source contribution as tracked by Calendar About Nothing.

Test Multiple Rubies by Combining Bundler and RVM

By Zach Moazeni

I have read several opinions that are either pro-Bundler or pro-RVM, but despite the current debate they do not have to be mutually exclusive.

Leading the Open Source Ruby Community

By Brian Ryckbost

A look into leadership and how it ties in to the open source community. It’s more than superiority; it is social influence and deeply impacts how we communicate and work on projects.

Simultaneous Capybara Sessions in Cucumber

By Steve Richert

There’s something very satisfying about watching your Cucumber test suite run (and pass), especially when the tests are running in your browser. I can’t help but think, “Man, I’m glad I don’t have to do all of this myself.” That’s especially true when your testing requires multiple sessions. The old me would fire up a couple different browsers and get to work. But that was the old me.

Command Line Feedback from RVM and Git

By Zach Moazeni

If you’re like me, most of your day is working in Git and RVM. I am frequently typing `git branch` to remember what branch I’m on, and `rvm gemdir` to remember what ruby version and gemset I’m using. With all those wasted cycles, there has to be a better way. And there is.

July 2011

Rails 3.1 Hackfest this Saturday

By Zach Moazeni

There’s a Rails Hackfest this weekend and we are opening our doors to Rails devs who want to participate.

Speaking and Teaching at Lonestar Ruby Conf

By Zach Moazeni

I’m going to be speaking and teaching at Lonestar RubyConf this year. Look us up if you’re attending.

The Search for Speedier Javascript Scenarios

By Brian Ryckbost

Try out capybara-webkit for faster javascript scenarios.

Test Your API with Cucumber and json_spec

By Steve Richert

At Collective Idea, we do a lot of work with RESTful JSON APIs. They can be a joy to build but a pain to test. We’re currently working on a project that’s all API all the time, so we developed some reusable Cucumber steps for testing. Now, we’ve abstracted all that goodness out into its own gem… json_spec.

June 2011

Get Your Conditions in Order

By Steve Richert

It’s programming 101 but it’s easy to miss in practice. If a condition has multiple expressions, some may never be evaluated. Use that fact to your advantage.

Prepping your Gemfile for Rubinius

By Chris Gaffney

Rubinius 2.0 is on it’s way and it’s shaping up to be a serious contender. Adding support for Rubinius to your gem should be pretty painless.

Here at [i] it’s common for us to depend on support utilities like ruby-debug or perftools. Fortunately Rubinius comes with a very solid debugger and profiler. The best solution I’ve found is to use Bundler’s :platform rules to limit what libraries get loaded.

The Billy Baldwin of Conditional Assignment

By Steve Richert

For those of you who don’t know, Billy Baldwin is the lesser-known and generally-less-useful little brother of famed actor Alec Baldwin.

In the world of Ruby’s conditional assignment operators, ||= is Alec Baldwin; charming and versatile. But not many people know about ||=’s little brother… the &&= operator.

Automatic Login Links

By Steve Richert

Scary, I know, but hear me out. Implemented correctly, an automatic login link can be just the ticket to appease those pesky, forgetful, real-world users.

Reusable Cucumber Steps

By Zach Moazeni

Mike Swieton recently posted Never say “Click” advocating the use of custom steps over browser-centric ones. I firmly disagree with with the consequences of that strategy.

“You don’t know the power of the Dark Side” …er… Maybe ya do?

By Jason Carpenter

In very few types of consulting do you wield such power and influence over the success or failure of the clients objectives as you do in software development. Intensifying the your power, is that fact that often the client is oblivious to that influence. This is a simple reminder how not to be seduced by the dark side.

More User-centric Routes: Rails 2

By Steve Richert

Writing routes that are conditional upon whether a user is logged in is easy with Rails 3 but if you find yourself (as many of us do) stuck with a Rails 2 app, here’s how to achieve the same fancy routes without the latest Rails.

Be a Better Storyteller

By Brian Ryckbost

It’s no secret that we love user stories. We’re behavior driven and focus our daily tasks around user actionable stories. But near the launch of a project, or the end of a milestone, things can get hairy. Unmaintainable even. And workflow from the team can suffer, especially if there’s anyone working remotely.

May 2011

User-centric Routing in Rails 3

By Steve Richert

Have you ever noticed that the GitHub homepage is different once you log in? I’m not talking about little changes here and there. It’s a completely different page. I have no idea how GitHub does this but I’ll venture a guess and demonstrate how to achieve the same effect.

Testing with Sunspot and Cucumber

By Zach Moazeni

Testing with sunspot with cucumber can be tricky since you need to manage the solr process separately. This post introduces a new gem “sunspot_test” and how to easily use it.

Welcome Jason Carpenter

By Daniel Morrison

Meet Jason, a smart mechanical engineer turned programmer.

On Stand-Up Desks

By Daniel Morrison

We have been using stand-up desks almost exclusively for over a year. Some thoughts and tips.

Quick Win: JavaScript async

By Daniel Morrison

Do you know the difference between defer and async in your script tags? You will very soon.

April 2011

Language Matters

By Keith Gaddis

Last week the Ruby and Rails twitterverse had an eruption of debate on the choice of testing frameworks. My thoughts come down to this: language matters.

Bundler makes contributing to ruby gems easier

By Zach Moazeni

After using Bundler for the past few months, I love it. It turns managing project dependencies and deployment into a piece of cake. However after coming across a particular dependency declaration, something clicked in my head that made me like it even more.

March 2011

Using Solr and Sunspot to Search Within Words

By Zach Moazeni

In my previous post I mentioned that out of the box Solr breaks up the search indexes on whitespace. This post will outline how you can configure Solr to search within words.

Tweet later with Delayed Job

By Brian Ryckbost

Schedule a tweet for the future using Delayed Job and the Twitter gem. Plus, some goodies on how to test it with Cucumber!

Off to SXSW 2011

By Daniel Morrison

A bunch of our team will be at SXSW as usual. Find us and say hi!

Full Text Searching with Solr and Sunspot

By Zach Moazeni

Full text searching can be a tricky subject. Luckily there are a number of great tools out there that are much better than doing “… content like ‘cars’ …”. One excellent tool that we have used on numerous projects is Solr along with the Ruby library Sunspot.

Exploring Solr and Sunspot

By Zach Moazeni

We have experienced a lot of success using Solr and Sunspot for full text searching on our Rails projects. And like our Cucumber series, we’re going to start a series of related posts just on Sunspot/Solr.

Geocoding with Graticule and SimpleGeo

By Brian Ryckbost

SimpleGeo was added as a geocoder to Graticule in early January. Here’s a quick example on how to make use of the service.

February 2011

The Michigan Lean Startup Conference

By Brian Ryckbost

The Michigan Lean Startup Conference is an event designed to unite those interested in what it takes to succeed in building a lean startup taking place Thursday, May 19, 2011 8:00 AM — 5:00 PM

When Refactoring Goes Bad

By Daniel Morrison

Refactoring is an important part of any project, but what happens when it doesn’t work?

HOW TO: SSH Aliases

By Zach Moazeni

Use SSH a lot? This is a great tip to reduce unnecessary keystrokes and notes

Welcome Zach Moazeni

By Daniel Morrison

Zach Moazeni joins the Collective Idea team.

January 2011

HOW TO: Setup a new local & remote Git Branch

By Daniel Morrison

HOW TO: Setup a new local & remote Git Branch

Clever Custom Datatypes with MongoMapper

By Daniel Morrison

A whole world of rich objects is within your reach with MongoDB.

December 2010

Welcome Steve Richert

By Daniel Morrison

Welcome Steve to the Collective Idea team.

The Next Step

By Keith Gaddis

Every relationship has a “next step”.

2010: The Open Source Tools that Made it Great

By Daniel Morrison

My list of open source tools that made a big impact on our work this year.

Spreedly Integration Testing with Cucumber

By Brian Ryckbost

Integrating Spreedly into an application is straightforward. Testing it with Cucumber, however, was a little less so. Here’s how we did it.

November 2010

SSL with Rails

By Daniel Morrison

Lots of people have been wondering about SSL after seeing Firesheep in action. Here’s how to get started with Rails.

Stop writing imaginary code.

By Keith Gaddis

One of the hardest aspects of development for me has always been anticipating the code I’m going to need to write to solve a problem. BDD saves me from the hassle.

Practical Cucumber: Stakeholders

By Brandon Keepers

Stakeholders may or may not care about cucumber scenarios, but there is still value in having developers write them.

The Cheapest MBA You Can Get

By Brian Ryckbost

Skip the theory. Start doing something. Be the case study.

Validate the Idea

By Brian Ryckbost

Evaluate and validate your idea or side-project before you start coding.

Quick Win: Zendesk

By Daniel Morrison

Now, I don’t know anything about ZenDesk, but I know a JS snippet when I see it. And I also know I can make it better. Here’s my quick win of the day:

October 2010

Not Getting Things Done

By Daniel Morrison

We all have different issues that keep us from trusting todo apps. What about you?

September 2010

Welcome Chris Gaffney

By Daniel Morrison

Meet Chris, the newest member of our team.

gemfiles and branches

By Brian Ryckbost

Specify a branch for a git repository in your gemfile.

Practical Cucumber: Organization

By Brandon Keepers

Nobody knows how to organize cucumber features and steps. Every project has it’s own conventions–that is, if it has conventions at all. Here is a pattern that works for us.

Practical Cucumber: Factory Girl steps

By Brandon Keepers

Although they’ve been around for a while, very few people know that factory_girl comes with some really useful cucumber steps.

Practical Cucumber: Scenario-specific steps

By Brandon Keepers

Cucumber steps are meant to be reused. Keep them generic so you don’t have to work too hard.

Practical Cucumber

By Brandon Keepers

We love Cucumber but often see it poorly used and misunderstood. We are beginning a blog series about “Practical Cucumber” to give you tips and tricks and keep you out of a pickle.

They Stole My Idea!

By Daniel Morrison stole my idea! So why am I happy instead of mad? Because ideas are worthless.

Our Notes on Remote Pairing

By Daniel Morrison

Relevance posted some notes on remote pair programming so here are ours too.


By Brandon Keepers is a collaborative to-do list for work, home and life. Delegate tasks. Receive tasks. Complete tasks. Let’s do this.

August 2010

JSON Microformat Converter

By Brian Ryckbost

Turning microformats formatted as JSON into .vcf and .ics files for a Chrome extension.

Heroku-ing with multiple personalities

By Keith Gaddis

I recently transitioned a client site from my own account on Heroku to their account – which means to manage that site effectively, I need to be able to use Heroku with multiple accounts. Here’s how I did it.

Happy Git Commits

By Brandon Keepers

Being happy makes us more productive. Add some happiness to your git commits.

Clicking any element with Cucumber and Capybara

By Brandon Keepers

We’ve been testing a lot of Javascript heavy apps these days with Cucumber and Capybara, and sometimes you just need to click on something that isn’t a button or a link.

July 2010

Software never stays still

By Brandon Keepers

Software is an evolving, living being.

Much ado about nothing

By Keith Gaddis

What do Google’s AppInventor, JavaBeans, and Myspace all have in common? They’re all misguided attempts at putting development in the hands of non-developers.

Good projects in need of loving maintainer

By Brandon Keepers

We can’t give each of our projects all the love they deserve, so it’s time to let some go.

Houston, we have a problem.

By Keith Gaddis

Think the plethora of open Rails jobs is good for Rails developers? Think again.

Post your weekly top 5 artists to Campfire

By Brian Ryckbost

A simple Ruby script to post your top 5 weekly artists from to a Campfire room.

June 2010

Living in the Moment

By Daniel Morrison

Are sports black & white, or is there room for human fallibility?

Stop lying.

By Keith Gaddis

“I don’t have time to test” seems to be somewhat of a recurring theme in hurried projects. Stop lying to yourself—and your clients.

Reflections on MongoDB

By Brandon Keepers

We have used MongoDB on several production and play projects over the last year. Here’s what we think about it.

sitemap.xml in Harmony

By Daniel Morrison

We added a Google Sitemap to our Harmony-powered site. Here’s how to do it.

How to choose a Rails contractor

By Keith Gaddis

How do you know you’re hiring a good Rails developer?

Meet Keith Gaddis

By Keith Gaddis

The latest team member at Collective Idea.

Clever Background Changes

By Daniel Morrison

Our backgrounds change, but they’re not random. We’re more clever than that. Let me explain…

On an Agile Space

By Daniel Morrison

Our workspace helps us work, and for the first time we have one of our own.

Quarter-inch Holes

By Brian Ryckbost

Theodore Levitt, Economist and Professor at Harvard Business School, once told his M.B.A. students, “People don’t want to buy a quarter-inch drill. They want a quarter-inch hole.”

Our Collective Ideas

By Brandon Keepers

All of us at Collective Idea have shared our ideas separately over the years, but never with any form of consistency. We feel that it is time to be intentional about sharing our ideas as a company.