Central Iowa Software Symposium
August 5 - 7, 2011 - Des Moines, IA
View the event details here ».
Matt Stine
Enterprise Java/Cloud Consultant
Matt Stine is an Enterprise Java/Cloud consultant based in Memphis, TN. He is a twelve year veteran of the enterprise software and web development industries, with experience spanning the healthcare, biomedical research, e-commerce, and retail store domains.
Matt has spoken at conferences ranging from JavaOne to CodeMash and has published several articles for Agile Zone, GroovyMag and NFJS the Magazine, as well as the Selenium 2.0 DZone Refcard. Matt is also the founder of the Memphis/Mid-South Java User Group.
His current areas of interest include lean/agile software development, software architecture, mobile application development and functional languages.
Presentations
Effective Java Reloaded
Even with the recent explosion in alternative languages for the JVM, the vast majority of us are still writing code in "Java the language" in order to put bread on the table. Proper craftsmanship demands that we write the best Java code that we can possibly write. Fortunately we have a guide in Joshua Bloch's Effective Java.
In his foreward to the first edition, Guy Steele writes about the importance of learning three aspects of any language: grammar, vocabulary, and idioms. Unfortunately many programmers stop learning after mastering the first two. Effective Java is your guide to understanding idiomatic Java programming.
Effective Java is organized into 78 standalone "items," all of which will be impossible to cover in one session. Instead I've chosen a subset of the most important techniques and practices that are commonly missed by today's Java programmers. You'll pick from a menu and decide where we'll head. Regardless of the path we take, you'll leave this session thoroughly equipped to write better Java code tomorrow!
Rock SOLID Software
Object-oriented programming was formally introduced in the 1970's with the advent of Smalltalk. C++ took it mainstream in the 1980's, and Java carried it to the next level in the 1990's. Unfortunately, if you examine the vast majority of Java codebases, what you'll find is a bunch of C-style structs (a.k.a. JavaBeans) and functions. As these codebases grow, a number of design smells can potentially crop up, which in turn cripple our ability to respond to change. We need SOLID principles that we can apply to keep our software clean and malleable.
Robert C. "Uncle Bob" Martin identified several design smells in his book Agile Software Development: Principles, Patterns, and Practices:
- Rigidity
- Fragility
- Immobility
- Viscosity
- Needless Complexity
- Needless Repetition
- Opacity
We can reverse and in fact avoid these techniques by following the principles of SOLID software design:
- Single Responsibility
- Open-Closed
- Liskov Substitution
- Interface Segregation
- Dependency Inversion
You'll leave this session equipped to ferret out design smells and apply these principles on your next project.
C is for Continuous: Going Beyond Continuous Integration
You've got your build automated using Ant/Maven/Gradle and you're building and running your unit test suite every time you check-in. That's easy. In fact, with Jenkins you can do this in under 5 minutes.
However, if we want to move beyond "mere" Continuous Integration to Continuous Delivery, there are many other areas in which we need to achieve "push button" automation. This talk will survey many of these areas and tie everything together with an integrated case study at the end.
In this talk, we'll look at:
- Automated Provisioning with tools like Vagrant, Chef and Puppet
- Automated Database Migrations with Liquibase
- Automated Deployment with Capistrano
- Automated User Acceptance Testing with Selenium 2, Geb and Spock
- Using Jenkins to orchestrate the entire delivery process
Executable Specifications: Automating Your Requirements Document with Geb and Spock
One of the hallmarks of lean software development is the elimination of waste. Several of the key wastes in software development revolve around incomplete, incorrect, or obsolete documentation, especially documentation of requirements. One effective means of ensuring that your requirements documentation is complete, correct, and up-to-date is to make it executable. That sounds nice, but how do we get it done, especially in the world of modern, cross-browser web applications?
Executable web application specifications are within your reach through the combination of Spock, a testing and specification framework written for the JVM in Groovy, and Geb, an elegant Groovy wrapper around the powerful WebDriver browser automation framework. In this session we'll take a close look at Spock specifications for describing and verifying the behavior of our applications. We'll then examine how we can use Geb's implementation of the Page Object pattern and its "jQuery-ish" API for interacting with our web applications in WebDriver's range of supported browsers. Finally, by gluing these two technologies together via Geb's Spock integration, we'll automate the requirements specification for a simple web app.
The Seven Wastes of Software Development
One of the first principles of lean software development is the elimination of waste. Shigeo Shingo identified seven types of manufacturing waste in his "A Study of the Toyota Production System." Later, the Poppendieck's translated these to seven wastes of software development.
The seven wastes:
- Partially Done Work
- Relearning
- Extra Features
- Handoffs
- Delays
- Task Switching
- Defects
In this session, we'll examine each of these wastes and look at some of their common manifestations, both in our coding practices and in our development methodologies. We'll also examine strategies for eliminating each of these wastes from our development efforts.
Code Archaeology
Feature requests are steadily pouring in, but the team cannot respond to them. They are paralyzed. The codebase on which the company has "bet the business" is simply too hard to change. It's your job to clean up the mess and get things rolling again. Where do you begin? Your first task is to get the lay of the land by applying a family of techniques we'll call "Code Archaeology."
In this session we will learn how to systematically explore a codebase. We'll look at what tools are available to help us out, slinging some wicked shell-fu along the way. We'll look at "code islands" and "code bridges," and how to construct a "map of the code." We'll also examine the wisdom that thought leaders like Michael Feathers and Dave Thomas have leant to this subject.
Once we've gained a thorough understanding of what we have in front of us, we'll learn approaches for getting the system under test and refactoring so that we can start to pick up the pace and respond to user requirements without making a bigger mess. You'll leave this session well prepared to tackle the next "big ball of mud" that gets dumped on your desk.
Books
by
-
This book will review work from a number of researchers who have produced open source software addressing the need for data management, integration, analysis, and visualization to aid cancer research. With the advent of high-throughput technologies in biomedicine, the need for data management and appropriate data analysis tools in genomics has increased dramatically, joining clinical trials data as a major driver of informatics at cancer research centers. The gathering of this data requires careful encoding of metadata, usually through the use of controlled vocabularies or ontologies, as well as the linking of data from model organisms, done at both a physiological level (e.g., anatomy) and at a molecular level (e.g., orthology). This data will then find use within computational and statistical models, which require data pipelines and analysis systems, as well as algorithms, visualization methods, and computational modeling systems. We will introduce open source tools available for these aspects of the problem. The editors plan to divide the book into five sections, beginning with a section containing high level overviews of the field and key issues. This will include an introductory review of informatics in cancer research, followed by five overviews addressing issues in authentication and authorization, data management, data pipelines and annotations, algorithms and models, and the NCI caBIG initiative. This will be followed by sections dedicated to data systems, data pipelines, algorithms for analysis and visualization, and modeling systems. Each of these areas has seen publication of open source tools, ranging from the widely known R/Bioconductor package to little known but powerful systems such as SImmune for biochemical modeling. The area of laboratory information management systems has seen development of a number of unpublished but powerful systems, which we would also include. Three groups have agreed to provide chapters in this area (USC/Norris CAFE extensible clinical trials system, St Jude Unified LIMS, Fox Chase/British Columbia flow cytometry LIMS). While there has been a great deal of development of informatics tools that can be applied to problems in cancer research, there has not been adequate dissemination of details on these tools to the community. As such, there remains low adoption of all but a few tools. This book aims to increase overall adoption of tools by providing cancer center leaders and researchers with a single volume detailing both issues that must be addressed and tools that are ready for use.
- This book will review work from a number of researchers who have produced open source software addressing the need for data management, integration, analysis, and visualization to aid cancer research. With the advent of high-throughput technologies in biomedicine, the need for data management and appropriate data analysis tools in genomics has increased dramatically, joining clinical trials data as a major driver of informatics at cancer research centers. The gathering of this data requires careful encoding of metadata, usually through the use of controlled vocabularies or ontologies, as well as the linking of data from model organisms, done at both a physiological level (e.g., anatomy) and at a molecular level (e.g., orthology). This data will then find use within computational and statistical models, which require data pipelines and analysis systems, as well as algorithms, visualization methods, and computational modeling systems. We will introduce open source tools available for these aspects of the problem. The editors plan to divide the book into five sections, beginning with a section containing high level overviews of the field and key issues. This will include an introductory review of informatics in cancer research, followed by five overviews addressing issues in authentication and authorization, data management, data pipelines and annotations, algorithms and models, and the NCI caBIG initiative. This will be followed by sections dedicated to data systems, data pipelines, algorithms for analysis and visualization, and modeling systems. Each of these areas has seen publication of open source tools, ranging from the widely known R/Bioconductor package to little known but powerful systems such as SImmune for biochemical modeling. The area of laboratory information management systems has seen development of a number of unpublished but powerful systems, which we would also include. Three groups have agreed to provide chapters in this area (USC/Norris CAFE extensible clinical trials system, St Jude Unified LIMS, Fox Chase/British Columbia flow cytometry LIMS). While there has been a great deal of development of informatics tools that can be applied to problems in cancer research, there has not been adequate dissemination of details on these tools to the community. As such, there remains low adoption of all but a few tools. This book aims to increase overall adoption of tools by providing cancer center leaders and researchers with a single volume detailing both issues that must be addressed and tools that are ready for use.

