We're hiring!

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

Space Matters – Workplace Design Insights

Screen Shot 2014-06-19 at 4.06.39 PM

Space matters. And Atomic Object Grand Rapids is at the front end of an exciting workplace redesign to enable the human activity in our old building.

Recently, my colleague Matt Fletcher pointed me to a great book: Make Space: How to Set the Stage for Creative Collaboration by Scott Doorley and Scott Witthoft. This book is a wealth of creative workplace design ideas and is organized around “Tools,” “Situations,” “Design Template,” “Space Studies,” and “Insights.”

Along with lots of nuts-and-bolts, DIY design ideas, the book offers excellent perspectives on some of the important lessons of workplace design. Here are the “Insights” that most resonated with me as I head into the redesign of AO Grand Rapids: Read More »

Posted in Workplace | Leave a comment

Problem Solving at 200 Feet

rock-climbing

About a year ago I started rock climbing, and before I knew it, my approach to software development had changed. You see, rock climbing is predominantly made up of engineers, which I believe has to do with the problem-solving nature of both activities. But it’s more than just that. As I learned how to rock climb, the way I approached problems quickly changed. Read More »

Posted in Growing as Makers | Leave a comment

Three Great Talks from self.conference 2014

self.conference is a new technical conference right here in downtown Detroit. The inaugural event took place recently, and I had the opportunity to attend, along with several of my fellow Atoms.

One thing that struck me about the conference was the sheer breadth of topics, covering many different facets of technology. Naturally, there were technical talks about specific technologies and concepts, but there were also talks about people skills, empathy, teaching, career development, team and project management, design, social issues, philosophy, and more.

Here are my thoughts and interpretations of three of my favorite talks from self.conference 2014. Read More »

Posted in Growing as Makers | Leave a comment

A Month with the Atom Editor

atom editor

Vim is a good friend of mine. When we met during my freshman year of college at MTU, we quickly hit it off. I never looked back with any regret at my tiny TI-85 screen, Notepad, or QBasic where I first tinkered with bending computing devices to my whims. Since then I have tried other editors, and even used a few for extended periods for a variety of reasons (e.g., Kate because of its SSHFS and KDE tie-ins, Visual Studio for its strength with all things Microsoft). Still, through it all, Vim has been my go-to editor for nearly 15 years.

I have been using Atom almost exclusively for the past month — without vim-mode. This was an intentional decision on my part. I didn’t have any complaints about how Vim had been working for me prior to picking up Atom. It, along with our built-to-Atomic-tastes configuration, did great navigating the mixed mobile & web project environment I was working in. I was just feeling ready to try something different when Atom came on the scene — something that wasn’t vim and didn’t work like vim. Plus, I dig the name and logo. ;) I figured, at the worst, I’d return to Vim after a while with a renewed appreciation for everything that makes it, well, Vim.

So, how has it gone?

Atom’s Many Strengths

Overall, I’m very impressed with Atom. For an editor to work for me day-to-day, the little things have to work well. The tabs, split panes, fuzzy finder, tree view, search & replace, and keyboard shortcuts have generally worked as I expect in Atom. It has the basics well enough covered that my knowledge of the keyboard shortcuts is a larger limiting factor to my effectiveness.

The team at GitHub has done a lot right, I’ve enjoyed the experience of using it, and I think Atom is set up for a strong future.

Atom’s Extensibility

Atom is open source and has extensibility built in as a core value. We know this model can work, as evidenced by the longevity of Vim and Emacs. That gets high marks in my book.

Even better, the extensibility of Atom is extremely approachable. I haven’t done much with Vim or Emacs aside from configuring existing packages and extensions, either because I haven’t found the need or the time. Atom being a young application gave me plenty of reason, and my familiarity with web development made the time a small issue. I published my first package, project-colorize, within an hour or two of first looking at the package creation tutorial. Admittedly, the package only contains six lines of original code. But, that brings me to another point…

There are a lot of open source JavaScript libraries. The web has become a huge app platform over the past decade, with nearly all client-side code needing to be written in (or eventually become) JavaScript. I was able to build a package that I find useful and interesting with only six lines of new code, and I think that represents a huge amount of potential for rapid innovation. I’m excited to see what the package ecosystem develops into.

Packages

The core editor experience is solid, as it has to be, but the packages will make or break Atom. Here are a few I’ve been enjoying:

  • coffee-refactor – CoffeeScript refactoring package for Atom.
  • git-blame – Toggle git-blame annotations in the gutter of Atom editor.
  • zen – Distraction-free writing.
  • project-colorize – Color the tab bar background to differentiate between different open projects in Atom.

Drawbacks of Atom Editor

All that said, Atom is not perfect. It’s still a relatively young project, and there have been things that pushed me back to Vim briefly. They’ve all been pretty minor. A few examples include:

  • Needing to open files > 2mb
  • Wanting block selection with Vim’s familiar keyboard navigation
  • Atom crashing, usually due to a non-core package misbehaving

I’m optimistic that this is more than a fling. There are still things that Atom just can’t do for me that Vim can (e.g., remote pairing, work in a non-GUI environment), but over time I expect that list will shrink. I’m expecting to continue using Atom as my primary editor for a good while longer, and hope to find some time to put together another interesting package or two. Thanks for sharing your efforts with us all, GitHub team and contributors!
 

Posted in Developer Tools | Tagged | Leave a comment

Doodles with Meaning – The Art of Sketchnoting

sketchnote

When I went to college, I had no idea how to take notes, so I did what I thought I was supposed to do: I wrote everything down. For four years of college, I wrote paragraphs and outlines of class lectures, and other than studying for tests, I never looked at those notes again. When I graduated and said goodbye to all those lectures and tests, I stopped taking notes. Life’s tests, after all, are open-book.

But last October I started taking notes again. Midwest UX was held here in Grand Rapids, and one of the workshops was titled “Drawing What You Mean – In Real Time”. The presenter, MJ Broadbent, revealed the secrets of a kind of note-taking I had never heard of. It was called sketchnoting, and I was shocked that no one had told me about it sooner. Read More »

Posted in Growing as Makers | Leave a comment

5 Linux Filesystem Utilities for Diagnostics

A great deal of the time, I work on the command line — usually logged into a remote system, doing some tasks or troubleshooting some problem. Quite often, this involves checking or manipulating something on the filesystem.

There are dozens of filesystem utilities. Most are well-known file manipulation utilities such as mv, rm, touch, mkdir, etc. However, there are several less familiar, but very powerful tools that I find myself using on a nearly daily basis. The following Linux filesystem utilities are ones I find particularly helpful for diagnosing issues and gathering information to solve problems.

Free Disk Space

Finding the amount of available free disk space is important — especially if a system has a low capacity hard drive or typically runs close to the margins. Whenever I start seeing strange failures on a system, one of the first things I check is disk utilization. The df command allows me to quickly check if a system is running near disk capacity. Read More »

Posted in DevOps & System Admin. | Tagged | Leave a comment

5 Atoms Join Ann Arbor & Grand Rapids Teams

In the past few months, five new Atoms have joined our molecule – two in Ann Arbor and three in Grand Rapids. I asked each of them to tell me a little about themselves and to share their favorite thing about Atomic Object so far.

Tabitha Blanski

“I love the smart, interesting, reliable people I work with. I look forward to coming into work, especially on pair lunch days, when I consider who I might talk to in greater depth. I appreciate the smiles and the kindness. I am grateful for all of the willing advice and help, when I have questions. AO’s community is really something special.”

As Atomic’s second Marketing Coordinator, Tabitha is responsible for answering sales calls, writing case studies, producing Atomic’s internal newsletter, and managing photography and videography. She also helps with all other marketing tasks, including Atomic Spin, trade show materials, and creating Atomic’s new website (currently in the works). Read More »

Posted in News & Events | Leave a comment

Ruby Queue Pop with Timeout

While writing some ruby scripts to handle asynchronous messages to and from some external hardware I ran into a problem. I wanted to wait on a queue of responses until I either got a response, or a timeout expired. Unfortunately this turned out to be a bit harder than I expected. The two most common answers when I search for “ruby queue pop with timeout” or “ruby queue timeout” are to either use some variant of “run it in a separate thread and toss in an exception when you want to stop” (such as ruby’s Timeout), or to use the non-blocking pop, with something like:

def pop_with_timeout(q, timeout)
  start_time = Time.now
  t = start_time
  loop do
    begin
      return q.pop(true) 
    rescue ThreadError => e
      if t < start_time + timeout
        sleep 0.01
        t = Time.now
      else
        raise e
      end
    end
  end
end

which actually works, but is ridiculous. Read More »

Posted in Ruby | Tagged | 2 Comments

My Favorite Emacs Add-Ons

I love Emacs. I’ll take it hands down over vim, Sublime, Atom, and company any day. I thought I would take some time to list some of my favorite bits of Emacs and how I use them in my daily workflow.

1. Magit

Magit is an Emacs interface for git. Beyond that, it’s the best interface for git I have ever used — better than the git CLI or third-party apps like SourceTree. Magit reduces most git commands (and all of their cryptic flags) to a series of one-character shortcuts. It also introduces interactive status and log buffers that are comparable to any other git gui out there (and better than many). The best part is that version control becomes part of my editing workflow and requires no context switching. Overall I find that it massively speeds up and simplifies my git workflow and encourages me to use my VCS to its fullest extent. Read More »

Posted in Developer Tools | Tagged , | Leave a comment

Lights, Camera, Action, Bugs!

I recently read about what might be one of the worst movies ever made and clicked through to read some reviews and find out why it was so bad. Doing so, I discovered a list of bloopers appearing the film.

Reading about these bloopers was really useful and reminded me about some of the test techniques I use. Read More »

Posted in Exploratory Testing | Leave a comment