Papers & Presentations

Atoms frequently share what they know in journals, at conferences, and in classrooms.

Open Source

Open Source

Fair is fair. We use others’ good stuff and contribute our own software tools in return.

Active Projects

EMBEDDED SYSTEMS

CMock

An automated mock object generator for C. Generate mock object code useful for interaction-based unit testing in C.

greatest

A C unit testing library in 1 file. No dependencies, no dynamic allocation. ISC licensed.

heatshrink

A data compression library for C embedded/hard real-time systems.

HexString

Ruby String binary data conversion to/from hex strings. Provides two String extension methods: String#to_hex_string explodes a string of binary data into human-readable hex tuples, and String#to_byte_string converts a string of human-readable hex digits into the corresponding bytes.

Moxy

An automated mock object generator for C++. Generate mock object code that lets you write interaction-based unit tests for your C++ classes. Note: Moxy uses Python version 2.4, GCCXML, and pygccxml (a Python class that reads in the XML from the GCCXML tool and presents the data in a nice structure).

socket99

A wrapper library for the BSD sockets API with a nicer C99 interface.

theft

Property-based testing for C.

Unity

A unit test framework for C. A lightweight xUnit-style framework that possesses special features for embedded development.

JAVASCRIPT

Flexure

Flexure is a library for helping you manage data and communicate with servers in Ember.js. It's designed to fill the niche between when Ember Data is too heavy or opinionated for your needs, but raw ajax and javascript objects are not enough. Its primary goal is to help you get your data into Ember objects that you can do useful things with, like define computed properties or manage simple relationships.

jquery_expand

A structural template engine for jQuery.

jquery_expand_assets

A Sprockets processor that wraps html in a jquery.expand function. It is specifically meant to work within the Rails asset pipeline. The processor outputs CoffeeScript, so you'll need to have the result be processed by the CoffeeScript processor.

Node Decoder Ring

Allows you to use a JSON specification to decode Node.js Buffers into a Javascript object.

Save SVG as PNG

A small JavaScript library to convert browser-based SVGs into rasterized PNG files.

IOS & OSX

motion-objection

Wrapping Objection in RubyMotion

Objection

A lightweight dependency injection framework for Objective-C for MacOS X and iOS. For those of you that have used Guice objection will feel familiar. Objection was built to stay out of your way and alleviate the need to maintain a large XML container or manually construct objects.

RUBY & RAILS

autopsy

A Ruby gem for gathering helpful artifacts when Capybara tests fail.

Fire Poll

Simple polling in Ruby. When your block yields true, execution continues. When your block yields false, poll keeps trying until it gives up and raises an error.

PCAN-USB

A Ruby language wrapper for PEAK System Technik’s PCAN-USB, a USB CAN bus adapter. Download the Ruby gem and type: gem install pcan at the command prompt in the same directory you downloaded the gem to install.

PiecePipe

Helps you break your code into small interesting pieces and provides the glue for pipelining them together to provide elegant, readable code.

MISCELLANEOUS

MethodToDelegate

A C# library for partial application of methods into specified delegates.

odo

odo is an atomic odometer for the command line. It atomically updates a count in a file, which will be created if not present. The count is text-formatted (e.g. "00012345\n"), and will be accurately incremented or reset even when multiple processes attempt to change the counter at the same time.

Retired Projects

These projects are no longer being updated.

DeepSet

A small library that eases the processes of filling in deeply-nested data structures in .NET. We use it mostly in testing code for building complicated input and output data in a way that is easy to read and minimizes screen real estate in our editors. See this blog post for a description of its use.

Hardmock

Mock objects for testing Ruby code. We released this tool to give ourselves more control and expressiveness in our mocking code than we were finding with then-current tools. Though we are no longer advancing Hardmock, it has been updated to work in Ruby 1.9 and is still available for download on Github and Rubygems.org.

HASTE

High-level Automated System Test Environment Our automated system testing framework, Haste, is available under the LGPL.

KioskBrowser

A full-screen, kiosk-oriented browser that features an on-screen keyboard. It was developed using the KDE Libraries and is meant for use in touch screen kiosks where the main presentation layer is via HTML pages.

LaszloMock

Provides Mock Objects for laszlo objects in LzUnit tests by generating them on the fly using JavaScript’s prototype. Laszlo Mock is a great fit for Test Driven Development. Written for use with OpenLaszlo 3.3.3. Available under the terms of the Common Public License.

Matchure

A pattern-matching library for clojure. It offers if, cond, and function constructs and allows destructuring and matching for most built-in types.

OpenStep/VMWare Display Driver

An OpenStep display driver written to support the virtual display hardware in VMWare.

Systir

System testing in Ruby. Write and run automated system tests in a domain specific language (DSL) you design, as you need it.

Ruby DevOps - Lightweight Configuration Management

Presented by
Ruby DevOps - Lightweight Configuration Management
Ruby DevOps - Lightweight Configuration Management
at
West Michigan Ruby
|
August 2013
August 2013

Zip Code: Unpacking Data Compression

Presented by
Zip Code: Unpacking Data Compression
Zip Code: Unpacking Data Compression
at
Strange Loop
|
August 2013
August 2013

Macros! (Creating Lisp Macros with Clojure)

Presented by
Macros! (Creating Lisp Macros with Clojure)
at
Lambda Jam
|
June 2013
June 2013

The Code that Isn’t There

Presented by
The Code that Isn’t There
The Code that Isn’t There
at
QCon New York
|
May 2013
May 2013

Ruby, Meet iPhone

Presented by
Ruby, Meet iPhone
at
MobiDevDay Detroit
|
April 2013
April 2013

Nurturing Top-Notch Tech Teams

Presented by
Nurturing Top-Notch Tech Teams
at
Great Lakes Software Excellence Conference
|
March 2013
March 2013

Time-based Estimates Are for Suckers; Size-based Is the Way To Go

Presented by
Time-based Estimates Are for Suckers; Size-based Is the Way To Go
Time-based Estimates Are for Suckers; Size-based Is the Way To Go
at
Great Lakes Software Excellence Conference
|
March 2013
March 2013

Creating Context Scenarios

Presented by
Creating Context Scenarios
Creating Context Scenarios
at
GRDevDay
|
February 2013
February 2013

Atomic’s Speculative Development Story

Presented by
Atomic’s Speculative Development Story
at
D-NewTech
|
November 2012
November 2012

Using Types to Write Your Code for You

Presented by
Using Types to Write Your Code for You
Using Types to Write Your Code for You
at
1DevDay Detroit
|
October 2012
October 2012

Data Structures: The Code That Isn’t There

Presented by
Data Structures: The Code That Isn’t There
Data Structures: The Code That Isn’t There
at
Strange Loop
|
August 2012
August 2012

Mocking Your Way to the Bottom

Presented by
Mocking Your Way to the Bottom
at
Design East
|
August 2012
August 2012

Detecting Behavioral Zones in Local and Global Camera Views

Presented by
Detecting Behavioral Zones in Local and Global Camera Views
Detecting Behavioral Zones in Local and Global Camera Views
at
Machine Vision and Applications, Vol. 23, 2012
|
April 2012
April 2012

Node.js and Asynchronous Programming with Promises

Presented by
Node.js and Asynchronous Programming with Promises
Node.js and Asynchronous Programming with Promises
at
GR Web Dev
|
February 2012
February 2012

Visualization Is for Everyone

Presented by
Visualization Is for Everyone
at
GRDevDay
|
February 2012
February 2012

Big Visible Charts

Presented by
Big Visible Charts
, Nayan Hajratwala, Mike Schwedt, Jay Aho, Matt Green
at
Michigan Agile Enthusiasts
|
November 2011
November 2011

Building Ruby Applications – A Walkthrough

Presented by
Building Ruby Applications – A Walkthrough
Building Ruby Applications – A Walkthrough
at
GR Dev Day
|
October 2011
October 2011

Happy Makers Make Happy Customers

Presented by
Happy Makers Make Happy Customers
at
GR Day
|
October 2011
October 2011

JRuby, Rails, and Torquebox

Presented by
JRuby, Rails, and Torquebox
at
GRDevDay
|
October 2011
October 2011

Four Atoms: Four Different Web Development Frameworks

Presented by
Four Atoms: Four Different Web Development Frameworks
, John Van Enk
at
GRWebDev
|
September 2011
September 2011

Planning for Scale

Presented by
Planning for Scale
, Patrick Foley
at
Business of Software
|
September 2011
September 2011

Managing Balanced Team Projects

Presented by
Managing Balanced Team Projects
at
Balanced Team Conference
|
August 2011
August 2011

Growing Your Embedded Application Organically with Ceedling and Friends

Presented by
Growing Your Embedded Application Organically with Ceedling and Friends
Growing Your Embedded Application Organically with Ceedling and Friends
at
AgileConf
|
July 2011
July 2011

Typography Geekout

Presented by
Typography Geekout
at
GRWebDev Grand Rapids
|
June 2011
June 2011

Lightweight Project Tracking with Burn Charts

Presented by
Lightweight Project Tracking with Burn Charts
Burn Charts
at
SoftwareGR
|
May 2011
May 2011

Between Freelance and Corporate America: Sustainable Companies for Smart and Creative People

Presented by
Between Freelance and Corporate America: Sustainable Companies for Smart and Creative People
at
TEDx Traverse City
|
April 2011
April 2011

Ruby for Desktop Applications? Yes we can.

Presented by
Ruby for Desktop Applications? Yes we can.
at
Grand Rapids Java User Group
|
April 2011
April 2011

Embedded Test-Driven Development in C with Ruby

Presented by
Embedded Test-Driven Development in C with Ruby
at
Great Lakes Software Excellence Conference
|
March 2011
March 2011

Extreme Design: The Secrets to Successful Design Pairing

Presented by
Extreme Design: The Secrets to Successful Design Pairing
Extreme Design: The Secrets to Successful Design Pairing
at
Great Lakes Software Excellence Conference
|
March 2011
March 2011

Trash Your RFP: How to Select the Best Vendor

Presented by
Trash Your RFP: How to Select the Best Vendor
at
Great Lakes Software Excellence Conference
|
March 2011
March 2011

Way Better Error Handling in C Using CException

Presented by
Way Better Error Handling in C Using CException
Way Better Error Handling in C Using CException
at
Great Lakes Software Excellence Conference
|
March 2011
March 2011

Integrating Design and Development to Make Great Software

Presented by
Integrating Design and Development to Make Great Software
at
Agile and Beyond
|
February 2011
February 2011

HTML5 Offline

Presented by
HTML5 Offline
at
GRWebDev
|
December 2010
December 2010

Crafting Your Mobile Strategy

Presented by
Crafting Your Mobile Strategy
at
Michigan Emerging
|
October 2010
October 2010

30-50% of You Are Lousy Estimators – Here’s How to Get Better

Presented by
30-50% of You Are Lousy Estimators – Here’s How to Get Better
at
1DevDay Detroit
|
September 2010
September 2010

Sustainability = f(idea, execution, culture)

Presented by
Sustainability = f(idea, execution, culture)
at
TEDx Grand Valley
|
July 2010
July 2010

Running a Ruby Application with jruby-complete

Presented by
Running a Ruby Application with jruby-complete
at
West Michigan Ruby Users Group
|
February 2010
February 2010

Introduction to Flex

Presented by
Introduction to Flex
Introduction to Flex
at
Great Lakes Software Excellence Conference
|
October 2009
October 2009

The Agile Alternative

Presented by
The Agile Alternative
The Agile Alternative
at
Great Lakes Software Excellence Conference
|
October 2009
October 2009

Agile: It’s More Than Just Makeup

Presented by
Agile: It’s More Than Just Makeup
Agile: It’s More Than Just Makeup
at
Great Lakes Software Excellence Conference
|
October 2008
October 2008

Delivering Software Certainty

Presented by
Delivering Software Certainty
at
Great Lakes Software Excellence Conference
|
October 2008
October 2008

Agile Project Management for Embedded (or Burning Your Gantt Charts)

Presented by
Agile Project Management for Embedded (or Burning Your Gantt Charts)
Agile Project Management for Embedded (or Burning Your Gantt Charts)
at
Embedded Systems Conference, Boston
|
September 2008
September 2008

Feature-Driven Design Using TDD and Mocks

Presented by
Feature-Driven Design Using TDD and Mocks
Feature-Driven Design Using TDD and Mocks
at
Embedded Systems Conference, Boston
|
September 2008
September 2008

Effective Rails Testing Practices

Presented by
Effective Rails Testing Practices
Effective Rails Testing Practices
at
Windy City Rails
|
August 2008
August 2008

Refactoring Your Rails Application

Presented by
Refactoring Your Rails Application
, Zach Dennis
at
RailsConf
|
May 2008
May 2008

An Automated Mock Object Generator for C++

Presented by
An Automated Mock Object Generator for C++
An Automated Mock Object Generator for C++
at
Great Lakes Software Excellence Conference
|
October 2007
October 2007

Convincing the Executive: Economic Arguments for Agile Software Development

Presented by
Convincing the Executive: Economic Arguments for Agile Software Development
at
Great Lakes Software Excellence Conference
|
October 2007
October 2007

Enhancing Embedded Development with Ruby

Presented by
Enhancing Embedded Development with Ruby
Enhancing Embedded Development with Ruby
at
RubyConf
|
October 2007
October 2007

Evolving into Embedded Development

Presented by
Evolving into Embedded Development
, William Bereza, Mike Karlesky
at
Agile Conference
|
July 2007
July 2007

Improving the Embedded Development Process

Presented by
Improving the Embedded Development Process
, Bill Bereza
at
O’Reilly Open Source Convention
|
June 2007
June 2007

Mocking the Embedded World: Practical TDD, Continuous Integration, and Design Patterns

Presented by
Mocking the Embedded World: Practical TDD, Continuous Integration, and Design Patterns
at
Embedded Systems Conference
|
April 2007
April 2007

Mocking the Embedded World: Test-Driven Development, Continuous Integration, and Design Patterns

Presented by
Mocking the Embedded World: Test-Driven Development, Continuous Integration, and Design Patterns
Mocking the Embedded World: Test-Driven Development, Continuous Integration, and Design Patterns
at
Embedded Systems Conference, Silicon Valley
|
March 2007
March 2007

Presenter First – Big, Complex, and Tested? Just Say "When"

Presented by
Presenter First – Big, Complex, and Tested? Just Say "When"
at
Better Software Magazine
|
January 2007
January 2007

Fostering Excellence in IT Services through Quality and Innovation

Presented by
Fostering Excellence in IT Services through Quality and Innovation
at
Great Lakes Software Excellence Conference
|
September 2006
September 2006

Perils and Pitfalls of Agile Adoption

Presented by
Perils and Pitfalls of Agile Adoption
Software Development Best Practices, Boston
at
|
August 2006
August 2006

Presenter First: Organizing Complex GUI Applications for Test-Driven Development

Presented by
Presenter First: Organizing Complex GUI Applications for Test-Driven Development
, Brian Harleton (X-Rite), Greg Pattinson (Burke Porter Machinery), Curt Stienstra (Burke Porter Machinery)
at
Agile 2006
|
June 2006
June 2006

Effective Test-Driven Development for Embedded Software

Presented by
Effective Test-Driven Development for Embedded Software
, Michael Karlesky, William Bereza
at
IEEE Electro/Information Technology Conference
|
April 2006
April 2006

Agile Intro + Story-Driven Development

Presented by
Agile Intro + Story-Driven Development
at
XP West Michigan (Now SoftwareGR)
|
December 2005
December 2005

Acceptance Test Automation to Support Story-Driven Development: From Customer Stories to Greenbar

Presented by
Acceptance Test Automation to Support Story-Driven Development: From Customer Stories to Greenbar
, Karlin Fox
at
Indianapolis Quality Assurance Assn. Conference
|
September 2005
September 2005

Sane Software Development

Presented by
Sane Software Development
at
Smith Aerospace
|
February 2005
February 2005

Agile Project Management in Extreme Programming Projects

Presented by
Agile Project Management in Extreme Programming Projects
at
Project Management Institute, Western Michigan Chapter
|
April 2004
April 2004

Make Haste, Not Waste: Automated System Testing

Presented by
Make Haste, Not Waste: Automated System Testing
Ralph Palmer (Burke Porter Machinery)
at
XP Agile Universe
|
June 2003
June 2003

Better Living Through Extreme Programming

Presented by
Better Living Through Extreme Programming
at
Assn. of Information Technology Professionals
|
September 2002
September 2002

OO Testing: From Academia to the Real World

Presented by
OO Testing: From Academia to the Real World
at
Uppsala University
|
April 2002
April 2002

Interaction-Based Testing: Beyond Classical Unit Testing

Presented by
Interaction-Based Testing: Beyond Classical Unit Testing
Interaction-Based Testing: Beyond Classical Unit Testing
at
Dr. Dobb’s Architecture & Design World
|

The Mock Object Approach to Test-Driven Development

Presented by
The Mock Object Approach to Test-Driven Development
at
Embedded.com
|