We're hiring!

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

Graduating from CoffeeScript to LiveScript

CoffeeScript to the Haskell equals LiveScript

CoffeeScript is a nice syntactic alternative to JavaScript and, in the end, that’s all it is: syntax. CoffeeScript doesn’t offer anything not already found in JavaScript, no standard library nor any new operators. Looking for more in a compiles-to-JavaScript language, I stumbled across LiveScript.

Where CoffeeScript is a Ruby- and Python-inspired version of JavaScript, LiveScript is a Haskell-inspired version of CoffeeScript. Like CoffeeScript, LiveScript compiles to readable JavaScript about the same size as the original source file.

Here are a few reasons to explore LiveScript. Read more on Graduating from CoffeeScript to LiveScript…

Posted in Web Apps | Tagged , | Leave a comment

Considering a New Methodology? First, Understand the Question

Solutions are meant to solve problems.

In Douglas Adams’s Hitchhiker’s Guide to the Galaxy series, an advanced civilization builds a supercomputer to calculate “the ultimate answer to life, the universe, and everything.” After millions of years of calculation, the computer finally gives its answer: forty-two. Despite being an advanced civilization, it succumbed to the pitfall of getting an answer without first understanding the question.

We often fall into the same trap. I once worked on a development team that practiced Agile programming. Every now and then the team would debate whether we were really practicing Agile, whether we should do more Agile, whether we should abandon Agile altogether, and whether we should adopt some other methodology. The debates centered on personal preferences and impressions of team productivity. Alternatives were suggested based on what the team had tried before and who had what certifications. Never did our conversations start with understanding what problems the various disciplines were designed to solve. Neither did we begin with the most important question: what problems were we trying to solve? We jumped straight to the answers without first understanding the question. Forty-two. Read more on Considering a New Methodology? First, Understand the Question…

Posted in Project & Team Management | Tagged | Leave a comment

Saving Browser-based SVGs as Images

svg-to-png

I’ve spent a lot of time with D3 over the past several months, and while I’ve enjoyed it immensely, one thing had eluded me: saving visualizations as images. When I needed to turn a browser-drawn SVG (scalable vector graphic) into an image, I used FileSaver.js to save the content of the webpage’s SVG node as a file, then opened the file in Inkscape and rasterized to an image format. Unfortunately, this process often created discrepancies between how the visualization looked in the browser and how it looked in the final image.

While making a calendar as a gift over the holidays, I finally figured out how to save SVG content as an image directly from the browser. Not only is the workflow a lot smoother, but the results are much more consistent than processing the SVG through Inkscape. The core code for the process is laid out below, and the complete script is on GitHub. Read more on Saving Browser-based SVGs as Images…

Posted in Web Apps | Tagged , | Leave a comment

Adventures in Pair Programming – 2 Devs, 3 Computers

setup-diagram

For the last several months I’ve been pair programming every day, working with another developer on a Windows application. Both of us usually use Macs, so we’ve adopted a company Windows laptop to do the work, and as we’ve experimented with our pairing tools, we’ve learned a bit about how tools affect getting the job done.

Alternating Mac & Windows, Dvorak & Qwerty

When we started on the project, my pairing partner and I sat with our Macs in front of us and the Windows laptop in between, pushing the PC back and forth depending on who was driving. The keyboard and trackpad were unfamiliar, and despite weeks of using them, we still only tolerated them, frequently sighing at clicks we didn’t mean to make and keys we didn’t mean to hit.

Read more on Adventures in Pair Programming – 2 Devs, 3 Computers…

Posted in Developer Tools | Tagged | Leave a comment

Mental Math Tricks — Find the Day of the Week a Given Date Falls On

calendar

The ability to know what day of the week a given date falls on is usually associated with savants. But with a little memorization and some arithmetic, anyone can do the same. There are several techniques, some requiring more memorization than others, some requiring more arithmetic. The technique in this post requires memorizing 12 single-digit numbers for the year you’d like to use it on, but it requires less calculation than alternative methods (such as this one). Read more on Mental Math Tricks — Find the Day of the Week a Given Date Falls On…

Posted in Personal Optimization | Leave a comment

Hackers & Writers – Practicing the Non-Linear Arts

Edit-Revise

One of the most visible parts of Atomic Object is this blog, Atomic Spin. Untold numbers of potential clients and employees contact us because of what they read on Spin and what high regard they have for it.

Spin’s success isn’t an accident; it’s a group effort. Everyone at Atomic is asked to contribute regular posts, and though it may be unusual to ask programmers to write, it’s more unusual to have so many programmers who are so good at writing. One of the things that sold me on working for Atomic Object was how well their programmers expressed themselves on the company blog.

Programmers aren’t natural-born writers. Some love to write, but others are happy to express themselves solely through code.

Spin isn’t a good blog because Atomic is made up of unusually good writers. Spin is so good because Atomic is made up of unusually good programmers. Like good writers, good programmers insist on expressing their ideas as clearly as possible. Programmers use code, and writers use language, but the underlying skill is the same. The medium is the easy part. The hard part is learning to express yourself. Read more on Hackers & Writers – Practicing the Non-Linear Arts…

Posted in Personal Optimization | Tagged , | Comments closed

D3 is for Drawing – JavaScript Data Visualization with D3.js

D3.js is an excellent library for creating in-browser data visualizations. It’s harder to get started with D3 than with other JavaScript graphing libraries, but where other libraries support only a few types of graphs, D3 provides endless possibilities. Using D3 is the most fun I’ve had with a JavaScript library, possibly because it isn’t just a graphing library but a full-fledged drawing library.

Read more on D3 is for Drawing – JavaScript Data Visualization with D3.js…

Posted in Web Apps | Tagged , | Comments closed

Challenges to Innovation: Fear, Friction, & Compatibility

One of the aspects of Atomic that makes it successful as an innovation services company is that it’s made up of people who enjoy trying new things. In my experience, this is very unusual — most people resist change.

Innovation is a gamble, and everyone isn’t a gambler. Even if the benefits eventually outweigh the costs, the costs still come first. You have to spend time, energy, money, and other resources before you gain. It’s often easier to sidestep innovation and keep doing it the same old way.

The costs of innovation can be seen in big new ideas, practices, and technologies, but also in small innovations.

dvorak

Moving the Keys Around

A couple months ago, my co-worker Al announced he was planning to learn the Dvorak keyboard layout. Even though learning a new keyboard layout is a big change for a programmer, several of us at Atomic have made the switch and now use Dvorak every day. Read more on Challenges to Innovation: Fear, Friction, & Compatibility…

Posted in Extracurricular Activities | Comments closed

How to Automate Your Human – Forming Good Development Habits

As developers, we prefer to automate wherever possible. Usually we automate computers, but it’s also possible to automate humans. Humans, after all, come with their own built-in automation system called “habit formation,” and we can cultivate helpful habits if we understand how habits form. Here’s an example from personal experience.

At Atomic Object, we’re very dedicated to test-driven development. The project I’m currently working on has 113 files of tests for a project with 154 files of logical code. Most code files are verified by a corresponding test file, so it’s important to update the appropriate tests before making changes to the code. Coming from a project that put more emphasis on full-stack integration tests rather than file-by-file unit tests, it was easy to forget to update the unit tests before diving into the code. Correcting this tendency required a bit of habit hacking.

Charles Duhigg’s excellent book The Power of Habit lays out a three-step framework for forming a habit. First, you need a trigger, something that cues you to carry out a routine. When you finish the routine, you need to receive a reward. Once you know the trigger, the routine, and the reward, the habit will start to form.

Read more on How to Automate Your Human – Forming Good Development Habits…

Posted in Personal Optimization | Comments closed

An Introduction to Scripting Tmux Key Bindings

Tmux is a powerful terminal multiplexer, and its built-in support for scripting allows you to create new features according to your own workflow.

I spend most of my day in Tmux, at the command line, grepping through codebases and editing files with Vim. I copied and pasted or re-typed file names for a long time before I realized how irritated I was that I couldn’t merely click on a file name and immediately open that file to the given line.

An IDE would have that functionality, and being firmly in the camp of command line as IDE, I set out to right this wrong.

Read more on An Introduction to Scripting Tmux Key Bindings…

Posted in Developer Tools | Tagged , , , , | Comments closed