Papers & Presentations

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

Presenter First Resources

MVP Graphical User Interface Testing

Open Source

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

Active Projects

Retired Projects

These projects are no longer being updated.

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
|

What is Presenter First?

Presenter First (PF) is a technique for organizing source code and development activities to produce fully tested applications from customer stories using Test-Driven Development. Though it can be applied in a variety of settings, it is most often used in GUI applications.

History

The core idea of Presenter First came when Mike Marsiglia and Brian Harleton were working on an application team at X-Rite. The pain they felt on adapting a large GUI application suite to the needs of a major customer drove them to create what later developed into and became known as Presenter First. David Crosby worked with Mike and Brian, wrestled with the problems of triad composition and instantiation, and refined the process and motivations for building Presenter First style. The "Burke Porter Dyno Host project was the first large project done in Presenter First style from inception.

Papers

"BIG, COMPLEX, AND TESTED? JUST SAY 'WHEN'"

Appeared in Better Software, February 2007

Better Software Magazine reprint (PDF)

"PRESENTER FIRST: ORGANIZING COMPLEX GUI APPLICATIONS FOR TEST-DRIVEN DEVELOPMENT"

The definitive technical description of Presenter First from the Agile International Conference, 2006.

Agile 2006 Conference paper (PDF)

Examples

  • Simple Java example of Presenter First (PDF) that illustrates the structure of a simple triad; uses jmock and junit for testing.
  • C# Presenter First example (ZIP); VS2003 project for a sliding puzzle game
  • Objective C/Cocoa Presenter First example (ZIP); Simple contact manager application
  • Java Presenter First + Adapter example – Java (ant-only and/or IntelliJ) Swing application that demonstrates the Adapter pattern extension to Presenter First, including how we can use an Adapter to encapsulate the usage of rich GUI library components via their built-in data bindings.
  1. Source and build files (ZIP)
  2. Compiled executable jar of the example (JAR) – "java -jar AdapterExample.jar" to run.
  • Presenter First in the context of GTK+ and C
  1. Find the code at pf_gtk on GitHub
  2. Companion articles describing the project can be found here: original article and updated for 2012

Resources

The original paper on Presenter First (PDF) was not formally published. It describes the core idea and many of the advantages of using this technique.

MVP/Presenter First Video Example by Brian Marick

Video Podcast series with Ron Jacobs of ARCast: Part 1, Part 2, & Part 3

Mocking tools such as NMock, OCMock, JMock, and HardMock are helpful in speeding Presenter First unit testing.

Visual Studio VB macros (TXT) for MVP navigation in C# projects (includes a Test file creator).

Christopher Atkins' approach to PF in ASP.NET: " Presenter First with POA"

Presenter First (MVP) Android Examples – Examples of how to implement the Presenter First pattern in Android based on the code from the book Android Programming: The Big Nerd Ranch Guide (2nd Edition).

Contributed Tools

" A Modeling Tool for the Presenter First Pattern" by Brooke Hamilton of FM Global

"Creating a DSL for Presenter First" – Brooke also provides an interesting write-up on his extension of Presenter First and how to describe the pieces using a succinct DSL