We're hiring!

We're actively seeking developers and designers for our Detroit & Ann Arbor locations.

Beyond Domain Experience – 3 Qualities of Great Software Teams

A shot from the Surgeon Simulator 2013 sim game.

Surgeon Simulator 2013

Let’s look at a hypothetical situation. You have a medical issue requiring surgery. While there are many surgeons that could get the job done, each one has their own level of ability and skill. Through their choices, the surgeon will affect overall “quality” of the operation — which procedure is used, cosmetic results, general odds of success, and how any unforeseen complications will be dealt with. The surgeon won’t have a complete picture of the situation until the operation is underway, and even then surprises are possible, so overall skill is essential.

If faced with this choice, how do you determine which surgeon to hire? It’s not easy when risks are (potentially) high and your technical understanding of the field is low. Your choice could have a potentially dramatic effect on the outcome, and there’s no going back.

I imagine that this is very similar to how it feels to be tasked with selecting a firm to develop custom software for your business.

Read more on Beyond Domain Experience – 3 Qualities of Great Software Teams…

Posted in Choosing Your Team | Leave a comment

“Subclassing” Ember Components

Recently, while working on an Ember.js app, I found that I wanted to create a reusable component that manages the editable state of content within it. That is, it would start out by displaying information (initializing its isEditing binding to false), and provide an “Edit” button that would set isEditing to true, so the content wrapped in the component could display its editing interface.

Naturally, I then wanted a way to “subclass” my EditableComponent so that I could create (for example) an AddressComponent that would display a mailing address read-only but allow you to edit it. What I struggled with was finding the best way to pull this off.

I had a few different ideas, two of which didn’t work. Read more on “Subclassing” Ember Components…

Posted in Web Apps | Tagged | Leave a comment

Profile of an Atom

atoms1

When you’re looking for a home for your career, one really important consideration is who you’ll be working with. What’s the culture like? What kind of people will you spend your time with?

I’ve worked at Atomic Object for a few years now — long enough to have observed and identified some characteristics that most, if not all, of the other Atoms have in common. In no particular order: Read more on Profile of an Atom…

Posted in Culture | Tagged | Leave a comment

Dynamically Generating CSS with Ember.js and Rails

I’m currently working on an Ember.js app that requires the color scheme to be customizable to match the branding of our client’s clients. Since our application’s CSS is being compiled by the Rails Asset Pipeline, and the colors would be fetched over an API call, this posed an interesting challenge.

Originally, there were many unknowns around how we would accomplish this. How would we recompile our SCSS? Would we wrap the Ember app under a Rails route that would insert customized CSS on the page? If we loaded the CSS via Ember, how would we insert it on the DOM?

Happily, the details all fell into place quite nicely. Here’s how we pulled it off:

1. Use the Application Route to Load the Custom Theme

Or use any other resource’s route. When loading the model for the route, we first make an API call to determine which colors to use, and then pull out the theme information and make a request to the Rails app that processes and returns the themed CSS as text. Then we create a model out of the two.

Read more on Dynamically Generating CSS with Ember.js and Rails…

Posted in Web Apps | Tagged , , | Leave a comment

Merging git Repositories Together

Until recently, my current project had maintained two distinct git repositories, one for each of the major components of the project. For a few reasons, we decided that it would be best to merge them into a single git repository.

Ideally, we wanted to do so in such a way that would preserve the full commit history of each of the two repositories. Fortunately it’s quite easy to accomplish this using a regular git merge.

Step 1: Preparing the Repositories

You probably don’t want to have the two repositories end up clobbering each other. For our project, we had separate repositories for the backend API and the frontend application. I simply made one commit for each repository that moved all the files into a subdirectory. I.e., all the files in the API repository were moved into the api/ subfolder, and all files in the frontend repository were moved into frontend/ Read more on Merging git Repositories Together…

Posted in Developer Tools | Tagged , | Leave a comment

Designing an Espresso Tamper for 3D Printing using OpenSCAD

Since getting our 3D printer, I’ve made a few attempts to learn how to properly use CAD software to design my own objects. Unfortunately, I haven’t had enough time to truly familiarize myself with any CAD program, which tend to be considerably complex and have steep learning curves.

Fortunately, for those of us with a programmer’s mindset, there is OpenSCAD. Essentially, it provides you a programming language for defining objects. This lets me use vim as my editor, something I’m quite comfortable with, while letting me see a live preview of my object as I save.

One of the things I’ve been meaning to design and 3D print has been a tamper for my espresso machine. Besides being useful, it’s also something very simple to design: a flat, circular base with a handle for pushing down on. Read more on Designing an Espresso Tamper for 3D Printing using OpenSCAD…

Posted in Extracurricular Activities | Tagged | Comments closed

Leveraging Your Intuition

Have you ever felt certain of something, despite not having any evidence to back up your hypothesis? That was probably your intuition guiding you. For good reason (i.e., intuition is often quite wrong about things that you aren’t fully educated on or internalized), people spend a lot of time learning how to set their intuition aside. I know there’s no way I would have passed Calculus or Chemistry without ignoring mine.

Read more on Leveraging Your Intuition…

Posted in Personal Optimization | Comments closed

Disable Hiding on your Mac OS App

While developing a Mac app as part of a broader project, we realized that we did not ever want our app to be hidden from the user. There are some pretty good reasons why we don’t want the user to ever forget that they have our app running. Ensuring that the app’s always visible and always on top, while a little annoying, ends up protecting our users’ privacy.

While you should probably never, ever need to do this in your own project, I’ve decided to share how I went about making this work seamlessly.

Scenario 1: Reacting to External Control

When a user is interacting with another app and selects “Hide Others” from the application’s menu, your app will automatically be hidden by the system. There are a number of events that you can listen to from the system that will give you an opportunity to force your application back on the screen, but the primary concerns are:

  • You don’t want to be rude and steal focus from the currently active application when you unhide yourself.
  • You don’t want your app to flicker off and back on the screen.

Read more on Disable Hiding on your Mac OS App…

Posted in iOS / OS X | Tagged | Comments closed

Exploring Lua Coroutines in ComputerCraft

minecraft-computercraft

minecraft-computercraft

A fellow Atom recently introduced me to the Minecraft mod ComputerCraft. ComputerCraft extends the game to include virtual computers that are programmable in Lua and capable of interacting with the game world. Needless to say, I found myself rather preoccupied with Lua that weekend.

Read more on Exploring Lua Coroutines in ComputerCraft…

Posted in Extracurricular Activities | Tagged , | Comments closed

Atomic Object Gets a 3D Printer

3dprinter

3dprinter

I’ve had an interest in 3D printing for a while, but couldn’t bring myself to drop a couple thousand dollars (or even several hundred) on a 3D printer without fully understanding their limitations or how they work. Eventually I realized other Atoms probably felt similarly, and I started gauging interest at our December SpinDown party. Read more on Atomic Object Gets a 3D Printer…

Posted in Extracurricular Activities | Tagged | Comments closed