Research Triangle Software Symposium

June 20 - 22, 2008 - Raleigh, NC


Marriott RTP
4700 Guardian Drive
Durham, NC   27703
Map »

NOTE: You are viewing details about a past event. We will be back in RaleighAugust 23 - 25, 2013.
View the event details here ».

Session Schedule

We are committed to hype-free technical training for developers, architects, and technical managers. We offer over 55 sessions in the span of one weekend. Featuring leading industry experts, who share their practical and real-world experiences; we offer intensive speaker interaction time during sessions and breaks.

About Sessions

Our sessions are designed to cover the latest in trends, best practices, and latest developments in Java application development. Each session lasts 90 minutes unless otherwise noted.

Friday - June 20


  Salon A Salon B Salon C Raleigh Durham
12:00 - 1:00 PM REGISTRATION
1:00 - 1:15 PM WELCOME
1:15 - 2:45 PM

Structuring concurrent applications in JDK 5.0

Brian Goetz

JavaServer Faces: A Whirlwind Tour

David Geary

Spring+JPA+Hibernate: Standards Meeting Productivity for Java Persistence

Ken Sipe

10 Tips for Getting Your Project Back on Track

Jared Richardson
2:45 - 3:15 PM BREAK
3:15 - 4:45 PM

Effective Concurrent Java

Brian Goetz
4:45 - 5:00 PM BREAK
5:00 - 6:30 PM

Beyond ACID: transactions management, in theory and practice

Brian Goetz

Credit Card Software Development: Recognizing and Repaying Technical Debt

Jared Richardson

Regular Expressions in Java

Neal Ford
6:30 - 7:15 PM DINNER
7:15 - 8:00 PM Keynote: Ancient Philosophers & Blowhard Jamborees by Neal Ford

Saturday - June 21


  Salon A Salon B Salon C Raleigh Durham
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM

"Design Patterns" in Dynamic Languages

Neal Ford

Groovy, the Blue Pill: Writing Next Generation Java Code in Groovy

Scott Davis

Caring about your Code Quality

Venkat Subramaniam
10:30 - 11:00 AM BREAK
11:00 - 12:30 PM

The Java Memory Model

Brian Goetz

Groovy, The Red Pill: Metaprogramming, the Groovy Way to Blow a Buttoned-Down Java Developer's Mind

Scott Davis

Filthy Rich Clients with the Google Web Toolkit, Part II

David Geary

REST : Information-Driven Architectures for the 21st Century

Brian Sletten
12:30 - 1:30 PM LUNCH
1:30 - 3:00 PM

Design Patterns in Java and Groovy

Venkat Subramaniam

Real World JSON

Scott Davis

RESTlet for the Weary

Brian Sletten
3:00 - 3:15 PM BREAK
3:15 - 4:45 PM

What's Going On? : Complex Event Processing w/ Esper

Brian Sletten
4:45 - 5:30 PM BIRDS OF A FEATHER SESSION

Sunday - June 22


  Salon A Salon B Salon C Raleigh Durham
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM

FP on JVM

Venkat Subramaniam

Beginning Object-Relational Mapping with Hibernate

Brian Sam-Bodden

Maintaining Project Integrity with JDepend, Macker, PMD, Maven, and other open source tools

David Bock

Software Project Estimation

Mark Johnson
10:30 - 11:00 AM MORNING BREAK
11:00 - 12:30 PM

SOAs Challenges

Ken Sipe

Getting to Acceptance: Validating your requirements with FitNesse

Mark Johnson
12:30 - 1:15 PM LUNCH
1:15 - 2:15 PM EXPERT PANEL DISCUSSION
2:15 - 3:45 PM

Monitoring Software Quality with Continuous Integration

Andrew Glover

Intermediate Maven

David Bock

Got Guice?

Venkat Subramaniam

Promoted to Technical Lead. Now what do I do?

Mark Johnson
3:45 - 4:00 PM BREAK
4:00 - 5:30 PM

Advanced Web Development With Grails

Jeff Scott Brown

Hacking - The Dark Arts

Ken Sipe

Practices of an Agile Developer

Venkat Subramaniam

Evolutionary SOA

close
Neal Ford

By Neal Ford

This session demonstrates that "Agility" and "SOA" complement each other quite well. Just because SOA is buzz-word compliant doesn't mean that you should throw good practices out the window. This session demonstrates how you can apply the principles of agility to building highly complex distributed enterprises.

Managers and ivory tower architects seem to think that all the rules that apply to "normal" software don't apply to SOA. Ironically, they matter even more. Agility and SOA are closely aligned because SOA is about building complex distributed systems and Agility is about effectively building complex software. This session unveils the pillars of successful SOA and how to achieve them in a testable, iterative fashion. It discussing testing strategies, how to make your architecture more robust and maintainable, and how to design an evolutionary architecture.



Test Driven Design

close
Neal Ford

By Neal Ford

Most developers think that "TDD" stands for Test-driven Development. But it really should stand for "Test-driven Design". Rigorously using TDD makes your code much better in multiple ways.

This session demonstrates how stringent TDD improves the structure of your code. I discuss TDD as a technique for vetting consumer calls, using mock objects to understand complex interactions between collaborators, and some discussions of improved code metrics yielded by TDD. This session shows that TDD is much more than testing: it fundamentally makes your code better at multiple levels.



Regular Expressions in Java

close
Neal Ford

By Neal Ford

Regular expressions should be an integral part of every developer?s toolbox, but most don?t realize what an important topic it is. Regular expressions have existed for decades, but many developers don't understand how to take full advantage of this powerful mechanism, either through command line tools and editors or in their development.

This session shows how to fully exploit regular expressions. It begins with the basic premise of how regular expressions work, then shows how to take advantage of the RegEx library built into the Java platform. This session shows how to use wildcards, escape characters, meta-tags, character class operators, look-aheads/look-behinds, and how to use the greedy operators effectively. It covers regular expressions from the beginning through to advanced usage, both in Java and in tools that support regular expressions. This session is packed with real examples of regular expressions (including a game show with no fabulous prizes).

Key Session Points:

  • Regular expressions defined
  • Examples
  • Using the regex classes in Java
  • Regular expression techniques
  • Patterns
  • Groups and subgroups
  • RegEx Game Show!
  • Back references
  • Greedy, reluctant, and possessive qualifiers
  • Lookaheads and lookbehinds
  • Practical regular expressions
  • Best practices
  • Common Regex mistakes



  • Keynote: Ancient Philosophers & Blowhard Jamborees

    close
    Neal Ford

    By Neal Ford

    It turns out that ancient philosophers knew a lot about software -- did you know that Plato defined object-oriented programming? This keynote applies old lessons to new problems and old problems to new lessons. It describes why SOA is so hard, and why people in your company make bone-headed decisions. What other keynote includes Rube Goldberg, Aristotle, Dave Thomas, and Chindia?

    Plato, Aristotle, Occam, Rube Goldberg, Dave Thomas, and Demeter...with pictures!



    "Design Patterns" in Dynamic Languages

    close
    Neal Ford

    By Neal Ford

    The Gang of Four book should have been entitled "Palliatives for Statically Typed Languages", because the recipes it provides are cumbersome solutions to the problems it poses. Using powerful languages makes the solutions in the GoF book look hopelessly complicated. This session shows how to solve the same problems concisely, elegantly, and with far fewer lines of code using the facilities of dynamic languages.

    The Gang of Four book was actually 2 books: a nomenclature describing common software problems and a recipe book for solutions. The vocabulary they defined is still useful. The recipes are a disaster! Dynamic languages (like Groovy and Ruby) have powerful meta-programming facilities far beyond statically typed languages. It turns out that many of the structural design patterns in the Gang of Four book and beyond are much easier to solve with meta-programming. This session compares and contrasts the "traditional" approach of design patterns with a more nuanced meta-programming approach. Using language features creates cleaner abstractions with fewer lines of code and little or no additional structure. This session shows one of the many reasons that dynamic languages are such a hot topic.



    Code Metrics & Analysis for Agile Projects

    close
    Neal Ford

    By Neal Ford

    What does code + methodology have to do with one another? Everything! Agile projects focus on delivering working code, and tools exist to allow you to verify some quality metrics for your code. This session is a survey of tools and metrics that allow you to determine the quality of your code and strategies to "wire it" into your agile project.

    Agile projects focus on delivering code. The responsibility for the quality of that code lies with developers. Yet most developers have a poor sense of how to gauge the quality of code, both during development and forensically. This talk lives on the boundary between what is important in agile projects and ways to verify code quality. It is both a survey of tools and metrics and strategies for proactively applying these techniques to ongoing projects. I talk about the Hawthorne effect, analysis tools (both byte and source code), useful metrics, tools for generating metrics, and how to analyze raw data into actionable tasks.

    Session Topics:

    • The Hawthorne Effect
    • How Agility and Metrics Feed Each Other
    • Analysis Tools
      • FindBugs
      • PMD/CPD
    • Testing Metrics
    • Cyclomatic Complexity
    • Chidamber and Kemerer Object-oriented Metrics
    • JDepend
    • Code Change Risk Analyzer and Predictor for Java
    • Panopticode
    • Tools



    Introduction to JRuby

    close
    Neal Ford

    By Neal Ford

    This session describes JRuby, the 100% pure-Java implementation of the Ruby programming language. It covers the basics of programming with JRuby and examples of how to integrate it into existing Java projects.

    Like hamburger & fries and turkey & dressing, JRuby allows you to harness the awesome power of Ruby in your Java projects. This session describes the origins, capabilities, and limitations of JRuby, the 100% pure-Java implementation of the Ruby programming language. This session also demonstrates some areas where it makes sense to mixin Ruby and Java code: Rails on Java, testing, and dynamic programming. JRuby is a powerful implementation of Polyglot Programming, and this session shows you how to leverage this cutting-edge concept.

    Session Topics:

    • JRuby's origins
    • Calling Java from Ruby
    • Calling Ruby from Java
    • Limitations and pitfalls
    • Example usage
      • Rails on Java
      • Testing
      • Dynamic programming
    • The future



    Spring+JPA+Hibernate: Standards Meeting Productivity for Java Persistence

    close
    Ken Sipe

    By Ken Sipe

    Well the standards created EntityBeans.... yea. and the community created Hibernate. Fortunately the standards body learned some lessons and created JPA. JPA requires a vendor implementation and none make a better choice then Hibernate. Combined with Spring this trio is a powerhouse when it comes to developer productivity on applications requiring persistence.

    This session will look at in detail the persistence capabilities of the latest Spring 2.5 and how to provide data access capabilities, including nicely added features for unit tests. We'll focus the persistence discussion on JPA and examine a number of ORM mapping scenarios and how JPA maps to them. We'll focus on the spring integration including transactional capabilities.



    Spring 2.5 - Spring without XML

    close
    Ken Sipe

    By Ken Sipe

    Spring 2.5 is brand spanking new, with a number of fantastic features. With growth of large and complex Spring applications which struggle with xml manageability and with the added pressure of Guice and SEAM there is a push for less XML, with solution leaning towards annotations. Spring 2.5 adds to the toolset provided in Spring 2.0 to provide a development environment where XML is greatly reduced... or eliminated if you so choose.

    The session walks through the new Spring 2.5 enhancements, then dives deep into annotation oriented injection. The demonstrations include standard applications as well as a look at the new Spring MVC.



    Architecture and Scaling

    close
    Ken Sipe

    By Ken Sipe

    Scale... what is scale... how do you applications that are scalable. How do you know if the application scales?

    This session will look at server topologies and state management and how it affects scale. We'll detail a number of metrics to know and observe. In addition tools of the trade will be demonstrated such as jmeter.



    7 Habits of Highly Effective Developers

    close
    Ken Sipe

    By Ken Sipe

    Thoughts lead to words, words lead to action, actions lead to habits. In this session we'll sharpen the development saw in the process of understanding what makes a hyper-productive programmer. The focus will consist of developer habits and development processes.

    As described in the book "7 Habits for Highly Effective People", there are habits which are characteristic of highly effective people. Clearly there are hyper-productive developers which distinguish themselves from the development pack? what is it that makes the difference? What are the habits and practices of highly effective developers?

    This session will focus on individual developer habits, as well as team practices and the processes which result in high quality running software.



    SOAs Challenges

    close
    Ken Sipe

    By Ken Sipe

    SOA... Is it hype? What's real... and what's not? What is the right abstraction level?

    The purpose of this session is to challenge the practicality of SOA and discuss the questions that we need to answer about service oriented techniques, practices and tooling. What is the right abstraction level for a service? Where does PBEL fit? When is an ESB appropriate or not?

    Everyone seems to be blindly accepting the enterprise needs an ESB or SOA. This session will focus on the facts of software development and the challenges which exist today with SOA. Where are SOA techniques being abused? If you are interested in SOA this session is for you. If you are tired of the SOA hype this session is for you. Much of the discussion will stem from experienced based principles of software architecture, with a look at where SOA provides a solution and where it does not.



    Hacking - The Dark Arts

    close
    Ken Sipe

    By Ken Sipe

    A live Hacking demonstration exposing the tools and techniques used by Hackers.

    A look at the growing space referred to as ethical hacking or penetration testing. We'll look at example attacks which include: Client-side exploits Sql-Injections Brute force attacks Man-in-the-middle attacks Key logging



    REST : Information-Driven Architectures for the 21st Century

    close
    Brian Sletten

    By Brian Sletten

    There is a shift going on in the Enterprise. While still used and useful, the promises of the SOAP/WSDL/UDDI Service-Oriented Architecture (SOA) stack have failed to live up to their promise. A new vision of linked information is enveloping online and Enterprise users. The REST architectural style is squarely behind this thinking as a way of achieving low-cost, flexible integration, increased data security, greater scalability and long-term migration strategies.

    If you have dismissed REST as a toy or are unfamiliar with it, you owe it to yourself to see what is so interesting about this way of doing things.

    There is tremendous interest in REpresentational State Transfer (REST) as an architectural style for building scalable, flexible, information-driven architectures in the Enterprise. The success of the Web has caught our attention in the face of increased complexity and many failures with more traditional Web Services technologies. The problem is that it is difficult to sell a way to do things. Managers do not want to feel like they are innovating in the middleware space. They want to understand why they should deviate from the blue prints laid down by the industry leaders. They want to understand when they should use REST, when they should use SOAP and when they might fallback to regular old Java-based messaging. They want to make business-based technology decisions that lay a path to forward progress rather than paying for technological flux.

    This talk will introduce REST and walk through why it is so important and makes such a difference. We will talk about REST API design, security, long-lived systems, content-negotiation, contract enforcement, when REST might not make sense, etc.

    REST and the Web Architecture are the basis for many exciting things happening on the Web and within our organizations. You owe it to yourself to make sure you really "get it".

    This talk should be accessible to everyone but is probably intermediate level.



    RESTlet for the Weary

    close
    Brian Sletten

    By Brian Sletten

    If you have started to take a look at REST as way of exposing web services or managing information spaces, you may be frustrated by the support offered by legacy containers. There is no direct support for REST concepts in the J2EE specs (yet). XML-based configurations are so 1990's. Come learn about Restlets, a little API that has caught the attention of many in the RESTafarian community.

    The Restlet API was created by a guy who wanted object-level support for RESTful concepts, but didn't want to make the move to an advanced resource-oriented environment like NetKernel. He wanted his REST and conventional environments too. He also wanted a path to more modern containers that aren't tied to a blocking I/O model like the Servlet spec is.

    This talk will include a brief review of REST and its primary concepts and will then provide an introduction to the Restlet API and how it supports these ideas. It will then focus on standing up a REST-oriented infrastructure using the Restlet API and a variety of other open source tools to support a publish/find/bind infrastructure without touching SOAP/WSDL/ or UDDI.

    This talk will not try to convince you about using REST. If you aren't familiar with the concepts or want convincing, please come to the "REST" talk first.

    Prerequisite: REST (unless you are very comfortable with REST)



    What's Going On? : Complex Event Processing w/ Esper

    close
    Brian Sletten

    By Brian Sletten

    How well do you understand the dynamics of your applications? In our systems, we detect when simple things happen. Customers log in, people buy things, a stock is sold at a particular price, inventory shifts locations... all of these events mean little things, but what about the larger picture? Complex events are particular patterns of simpler events that suggest something deeper is happening. Do you know how you'd discover these bigger picture occurrences? Come hear how the Esper open source software represents a new class of complex event processing (CEP) frameworks that can be added to even high volume, high transaction systems.

    Trying to write software to track event occurrence is difficult to do correctly and almost impossible to do efficiently. The problem is that the higher volume and performance our systems get, the harder it becomes and the more important it is to highlight interesting or unexpected activity that isn't represented simply by a log entry.

    Complex Event Processing (CEP) and Event Stream Processing (ESP) systems are emerging as a new strategy for processing and detecting complex sequences of more rudimentary events that could have bigger implications to your production systems. While commercial software is starting to add this behavior, Esper represents one of the most accessible and widely-used frameworks for adding CEP/ESP capabilities to Java applications.



    A Thorough Introduction To Groovy

    close
    Jeff Scott Brown

    By Jeff Scott Brown

    Groovy is an agile dynamic language for the Java platform. The language and its libraries bring many things to the table to ease the process of building applications for the Java platform. This session provides a detailed run through Groovy with lots of code samples to drive home the power of the language.

    Dynamic languages provide a lot of power and flexibility compared to statically typed languages. Groovy brings that power and flexibility to the Java platform in a way that is totally compatible with all of your existing Java code, tools and infrastructure. This session covers all of the fundamentals of Groovy and gives developers a whole lot of practical information they need to get started with the language.



    Grails - Agile Web 2.0 The Easy Way

    close
    Jeff Scott Brown

    By Jeff Scott Brown

    Grails is a full stack MVC framework for building web applications for the Java platform. Grails makes web application development both fun and easy. This session covers all of the fundamentals of building web applications with Grails.

    Businesses need rich web applications and developers want to be able to build those applications without the pain that usually comes along with doing so. Grails addresses these needs very well. Grails demolishes many of the pain points that Java developers have almost (not quite) become numb to after years of suffering. This session covers all of the fundamentals:

    • Introduction To Grails
    • Domain Objects
    • Controllers
    • GSPs
    • Custom TagLibs
    • GORM


    Advanced Web Development With Grails

    close
    Jeff Scott Brown

    By Jeff Scott Brown

    Grails makes web application development both fun and easy. This session dives beyond the basics to cover advanced details of Grails that bring the really exciting features to your applications.

    Getting started building web applications for the Java platform is easy. Following that through to rich interactive applications that solve the business needs is more tricky. Grails goes the whole way to address pain points not only for simple applications but of real enterprise applications with real demands. This session steps through many of the advanced features of Grails that help get your applications through that last 20% that teams often struggle with.

    Prerequisite: Grails - Agile Web 2.0 The Easy Way



    Know your Java?

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Java has been around for well over a decade now. It started out with the goal of being simple. Over the years, its picked up quite a bit of features and along comes complexity. In this presentation we will take a look at some tricky features of Java, those that can trip you over, and also look at some ways to improve your Java code.

    Java features Set of tricks Tips to improve your Java code



    Caring about your Code Quality

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    We all have seen our share of bad code. We certainly have come across some good code as well. What are the characteristics of good code? How can we identify those? What practices can promote us to write and maintain more of those good quality code. This presentation will focus on this topic that has a major impact on our ability to be agile and succeed.

    Characteristics of quality code Metrics to measure quality Ways to identify and build quality



    Design Patterns in Java and Groovy

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    You're most likely familiar with the Gang-of-four design patterns and how to implement them in Java. However, you wouldn't want to implement those patterns in a similar way in Groovy. Furthermore, there are a number of other useful patterns that you can apply in Java and Groovy. In this presentation we'll look at two things: How to use patterns in Groovy and beyond Gang-of-four patterns in Groovy and Java.

    Patterns overview Implementing common patterns in Groovy Beyond Gang-of-four patterns in Java and Groovy Lots of examples



    DSL in Groovy

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    DSL or Domain Specific Languages focus on a domain or problem at hand. They're expressive, but their restricted scope keeps them simple and small from the user point of view. However, designing them is not easy. In this presentation we will explore the features of Groovy and show how they can be used to create DSLs.

    What's DSL? Characteristics of DSLs Types of DSLs Designing DSLs Groovy features that enable DSLs Examples of DSLs in Groovy Creating DSLs in Groovy



    FP on JVM

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Functional Programming Languages (FPLs) have been around for a long time. A lot of features that we get excited about in dynamic languages are common place in FPLs. FPLs are gaining importance due to various changes in our industry. What's exciting is that you can use them on the JVM. In this presentation we will dig into the details of what makes FPLs so interesting and look at ways to use them on the JVM?in your Java projects.

    What's Functional Programming? Why is Functional Programming suddenly important? Features of Functional Programming Functional Programming Languages JVM and FPLs Examples of Functional Programming features Examples of mixing Java and FPLs



    Got Guice?

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    In this presentation we will take a look at Google's dependency injection framework, discuss its features, capabilities, strengths, and weakness. We will then discuss where it stands in comparison to Spring.

    What's Guice? Features of Guice Using Guice Comparison to Spring



    Practices of an Agile Developer

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    You have worked on software projects with varying degree of success. What were the reasons for the success of your last project? What were the reasons for those that failed? A number of issues contribute to project success - some non-technical in nature. In this presentation the speakers will share with you practices in a number of areas including coding, developer attitude, debugging, and feedback. The discussions are based on the 2007 Jolt productivity award winning book with the same title as the talk.

    In this session you will learn about practices beyond what well know methodologies prescribe. While we reemphasize some popular practices, we will also discuss other often overlooked, but important practices - practices that contribute to success of projects.



    Maintaining Project Integrity with JDepend, Macker, PMD, Maven, and other open source tools

    close
    David Bock

    By David Bock

    How many times have you started a new project only to find that several months into it, you have a big ball of code you have to plod through to try to get anything done? How many times have you been the ?new guy? on an established project where it seems like the code grew more like weeds and brambles than a well-tended garden? With a few good structural guidelines and several tools to help analyze the code, we can keep our project from turning into that big ball of mud, and we can salvage a project that is already headed down that path.

    This talk will talk about everything from build processes, teamwork, and project structure through versioning, release plans, upgrde strategies, package dependencies, and more. Using real-world scenarios from two projects with 12-15 people working together over a 5-year time span, this presentation will offer advice based on multiple successful deliveries of real software.



    Intermediate Maven

    close
    David Bock

    By David Bock

    Maven is a build tool that does a lot, demos well, and leaves the build maintainers managing what seems like unbridled complexity. It doesn't have to be that way - Maven is driven by some strong 'build process methodology', and that complexity can become manageable by wrapping your head around it. Furthermore, you can migrate to Maven 'piecemeal', by mapping your existing ant build to the Maven Lifecycle and calling your existing Ant tasks - you can decide to sip the Maven kool-aid.

    Ideally, a build tool should be so simple and approachable that it fades into the project background and allows anyone to maintain it. Unfortunately, Maven's power comes at the expense of this ideal - Maven's philosophy is more like "the build process is so important that the people maintaining it should be steeped in the ways of Maven". This talk will give you the exposure you need without elevating The Maven Way to a religion.

    In this talk we will cover:

    Internals of the Maven POM Integrating Maven with Eclipse The Maven Build Lifecycle, and hooking your own goals into it Calling Ant tasks from Maven Extending your build with existing Maven Plugins Maven subprojects and the SuperPOM Writing your own Maven Plugins



    Groovy, the Blue Pill: Writing Next Generation Java Code in Groovy

    close
    Scott Davis

    By Scott Davis

    There are wild-eyed radicals out there telling you that Java is dead, statically-typed languages are passe, and your skills are hopelessly out-of-date. Those extremists are the same ones who don't bat an eye at throwing out years of experience to learn a new language from scratch, pushing aside a familiar IDE for a new one, and deploying to a whole new set of production servers with little regard to legacy integration.

    While this "burn the boats" approach to software development might sound exciting to some folks, it's giving your manager the cold shakes right now. What if I told you that there was a way that you could integrate seamlessly with your legacy Java code, continue to use your trusty IDE and stable production servers, and yet take advantage of many of the exciting new dynamic language features that those fanatics keep prattling on about? You'd probably say, "Groovy!" I would, too...

    This talk focuses on integrating Groovy with your legacy Java codebase in a way that wouldn't raise an eyebrow in the most conservative of organizations. We'll look at the dramatic reduction in line of code you can achieve by simply flipping your POJOs (Plain Old Java Objects) to POGOs (Plain Old Groovy Objects). We'll talk about calling Java classes from Groovy, and calling Groovy classes from Java. We'll look at Groovyc, the integrated compiler that manages Groovy/Java dependencies without a hiccup.

    Not once will I tell you to throw out the old in favor of the new. In each case, I'll show you how to integrate the new with the old. Don't throw out your Ant build scripts; mix in a bit of Groovy to spice 'em up. Don't toss out your existing unit tests. (You are unit testing, aren't you? AREN'T YOU?) If not, Groovy is the perfect excuse to get started with a new language in way that improves the quality of your Java application without actually putting the new code into production. That is, until you get hooked on doing things the Groovy way...

    If the Red Pill of Dynamic Languages scares the pants off of you (or your manager), don't worry about it. The Blue Pill still offers plenty of benefits. There is no other language on the JVM that offers you the level of deep Java compatibility such that you could rename your "dot J-A-V-A" files to "dot G-R-O-O-V-Y" and not skip a beat. Of course, they both end up with a "dot C-L-A-S-S" extension at the end of the day, so there's good chance that no one would ever be the wiser anyway. Groovy: funny name, serious software, and Java through-and-through.



    Groovy, The Red Pill: Metaprogramming, the Groovy Way to Blow a Buttoned-Down Java Developer's Mind

    close
    Scott Davis

    By Scott Davis

    This talk focuses on the ways that Groovy can turn a traditional Java developer's world-view upside down. We'll start by talking about how you can thumb your nose at The Man by leaving out many of the main syntactic hallmarks of Java: semicolons, parentheses, return statements, type declarations (aka Duck-typing), and the ever-present try/catch block. Then we'll look at features like operator overloading and method pointers that Groovy welcomes back into the language with open arms.

    The bulk of this session focuses on metaprogramming with Groovy. We'll add new methods to classes at runtime -- even if they were originally implemented in Java, and even if they were declared final. (Thanks, ExpandoMetaClass!) We'll call methods that don't exist and avoid the dreaded MethodNotFound Exception. (Thanks, invokeMethod!) We'll narrowly scope our metaprogramming shenanigans using Use blocks and Categories, and then cast our changes to the wind such that every instance of a class gets our added juice.

    If you are happy taking the Blue Pill, this talk is not for you. You can continue using Groovy as a slimmed-down dialect of Java -- an 'After' picture to Java's 'Before'. If, however, the Red Pill looks interesting, please join me. Remember, all I'm offering is the truth. Nothing more.



    Real World JSON

    close
    Scott Davis

    By Scott Davis

    JavaScript Object Notation is becoming a familiar delivery platform for Web 2.0 content. JSON gives you all of the flexibility of a RESTful web service without the hassle of trying to deal with deeply nested, complex XML in a language that is conspicuously lacking in native XML support. In this talk, we look at popular websites (like Yahoo!) that offer JSON output. We look at client-side JavaScript code that effortlessly consumes JSON in the browser. We even look at ways to easily generate JSON from Java Servlets (using JSON.org libraries) and the native support for JSON that Grails offers out of the box.

    This talk also gives us the opportunity to brush up on our JavaScript, as well as look at clever ways that JSON can work around Cross-Site Scripting issues.



    YSlow: Building Your Website for Speed

    close
    Scott Davis

    By Scott Davis

    How optimized is your website? YSlow, a FireFox/FireBug plugin, doesn't pull any punches. It gives any website an A, B, C, D, or F rating based on 14 individual analysis points. You'll be amazed (or depressed) at what YSlow thinks of your site. In this talk, we'll walk through these points step by step, learning what Yahoo! (the creator of this utility) does to keep its web properties running as quickly as possible.

    These points are nicely summarized in "High Performance Web Sites", by Steve Souders (a companion book to the plugin). The analysis points that YSlow looks at are programming language, server, and web framework agnostic. The lessons learned here are really a deep look into HTTP, taking advantage of the native capabilities of the protocol -- making the Internet work for you.



    JavaServer Faces: A Whirlwind Tour

    close
    David Geary

    By David Geary

    In April 2005, annual growth rates for jobs in JavaServer Faces, Struts, and Ruby on Rails were all at about 0%. Today, Struts' growth rate still hovers around 0%, but JSF and Rails have taken off. At the end of 2007, both JSF and Rails were growing at a rate of between 400-500% annually (according to indeed.com).

    JSF has passed the adoption tipping point, and is now the Java-based framework of choice, as is evidenced by its ecosystem. From vendors such as MyEclipse and RedHat to open source projects such as Seam, Facelets, and Ajax4JSF, JSF is where the action is.

    Come see why JSF is so popular. In this code- and demo-intensive session, I'll show you the fundamentals of JSF.

    This session is taught by a member of the JSF Expert Group for JSF 1.0 and 2.0., and co-author of the best-selling book on JSF: Core JavaServer Faces. David will take you through a whirlwind introduction to JSF including what JSF is, how it was developed, and how you can best take advantage of the technology. Here is a list of topics:

    Components, managed beans, value expressions, and static navigation i18n, CSS, and actions The Faces Context and Faces messages The JSF Event Model Using JavaScript with JSF

    This introduction to JSF also contains 5 live-code demos, where David will develop a simple, but robust application during the course of the session.

    Prerequisite: Some knowledge of Java-based web applications, such as Struts, is a plus, but is not required. If you have a significant experience with JSF, you probably already know most of what's covered in this session.



    Facelets

    close
    David Geary

    By David Geary

    Facelets is a combination of Tiles and Tapestry, and it's the hottest JSF-related open source project on the planet. It's popularity is well deserved, and in fact, much of what is in Facelets today will make its way into the JSF 2.0 spec due out in 2008. So not only can you come to this session and see some really cool demos that you can put to use in the real world, but you'll also be learning JSF 2.0 before it's even been defined! How's that for a ROI?

    This session is 90 minutes of nothing-but-Facelets, so we're going to cover a good bit of ground. You'll see all of the basics, such as templating, error handling and debugging, and some of the more advanced aspects, such as creating your own components and tag libraries.

    Prerequisite: Some knowledge of JSF is essential. If you're familiar with a templating framework, such as Velocity or Tiles, that's a plus, but not required.



    Filthy Rich Clients with the Google Web Toolkit, Part I

    close
    David Geary

    By David Geary

    The Google Web Toolkit (GWT) is truly a revolutionary framework that lets you develop Ajaxified web applications without knowing anything about Ajax or JavaScript. But the GWT goes way beyond basic Ajax by letting you implement desktop-like applications that run in the ubiquitous browser.

    In this, the first of a two-part session on the GWT, you will learn about the framework and its fundamental capabilities, such as: rapid development with project and application generators; the GWT widget hierarchy; remote procedure calls; the GWT's history mechanism, including its integration with the Back button and bookmarks; and integrating JavaScript frameworks, such as Script.aculo.us, with your GWT applications.



    Filthy Rich Clients with the Google Web Toolkit, Part II

    close
    David Geary

    By David Geary

    In the second part of this talk, you will learn how to extend the GWT by implementing custom widgets, including a scrolling viewport and a drag and drop framework. After discussing custom widgets, you will see how to integrate database access into your GWT applications, and how to deploy your GWT applications to external servers.

    You will also learn how to integrate GWT widgets into legacy applications built with web application frameworks such as Struts, JavaServer Faces, or Tapestry. The GWT is one of the most powerful Ajax frameworks on the planet, and one of the few that let you easily implement desktop-like applications that run in a browser, and because of that, it has gained incredible mindshare in a short period of time. Come to these two sessions on the GWT and see what all the buzz is all about.



    Monitoring Software Quality with Continuous Integration

    close
    Andrew Glover

    By Andrew Glover

    The practice of continuous integration facilitates early visibility into the development process by regularly conducting software builds, thus integrating disparate software pieces earlier than later, which often times minimizes the interval between when a defect is coded and when it is discovered. Given the automated nature of continuous integration spawned builds, software teams can now start to look at their build process as something more useful than a simple compile and test process.

    The practice of continuous integration facilitates early visibility into the development process by regularly conducting software builds, thus integrating disparate software pieces earlier than later, which often times minimizes the interval between when a defect is coded and when it is discovered. Given the automated nature of continuous integration spawned builds, software teams can now start to look at their build process as something more useful than a simple compile and test process. Builds can be augmented with a series of Software Inspectors, which report on various aspects of software quality, such as code complexity, code duplication and code dependences to name a few. In this presentation, attendees will learn about the practice of continuous integration and the available CI tools for Java. Furthermore, Software Inspectors will be examined and attendees will learn how to interpret the data they provide and how to take actionable items based upon that data.



    Tactical Continuous Integration with Hudson

    close
    Andrew Glover

    By Andrew Glover

    This session will walk attendees through a series of iterations on a fictional Java project where an automated build system is created that facilitates compilation, testing, inspection, and deployment. This build system is then plugged into the Hudson CI server and as features are coded using Agile techniques like developer testing, attendees will ultimately see firsthand how a Continuous Integration process reduces risk and improves software quality.

    The practice of Continuous Integration facilitates early visibility into the development process by regularly conducting software builds, thus integrating disparate software pieces earlier than later, which often times minimizes the interval between when a defect is coded and when it is discovered. Often times though, Continuous Integration is thought of as a tool, which leads to a false sense of ease when it comes to adopting a Continuous Integration process.

    This session will walk attendees through a series of iterations on a fictional Java project where an automated build system is created that facilitates compilation, testing, inspection, and deployment. This build system is then plugged into the Hudson CI server and as features are coded using Agile techniques like developer testing, attendees will ultimately see first hand how a Continuous Integration process reduces risk and improves software quality.



    Structuring concurrent applications in JDK 5.0

    close
    Brian Goetz

    By Brian Goetz

    JDK 5.0 is a huge step forward in developing concurrent Java classes and applications, providing a rich set of high-level concurrency building blocks.

    Prior to the release of JDK 5.0, the Java platform provided basic primitives for writing concurrent programs, but they were just that -- primitive -- and difficult to use properly. Building multithreaded applications on the Java platform's low-level concurrency primitives posed many traps for the unwary, and many developers were forced to reinvent the wheel by writing their own classes for thread pools, semaphores, and task schedulers.

    To help users create robust, scalable, and (most importantly) correct multithreaded applications, JDK 5.0 includes a rich set of high-level concurrency constructs, such as thread pools, semaphores, mutexes, barriers, and high-performance concurrent collection classes. Using these concurrency utilities will, in most cases, make your programs clearer, shorter, faster, easier to write, and more reliable. This session provides you with an overview of the new high-level concurrency utilities in the new java.util.concurrent package in JDK 5.0.



    Effective Concurrent Java

    close
    Brian Goetz

    By Brian Goetz

    The Java programming language has turned a generation of applications programmers into concurrent programmers through its direct support of multithreading. However, the Java concurrency primitives are just that: primitive. From them you can build many concurrency utilities, but doing so takes great care as concurrent programming poses many traps for the unwary.

    Based on the principles in the best-selling Java Concurrency in Practice, this talk focuses on design techniques that help you create correct and maintainable concurrent code.

    Presented in the style of Effective Java, this talk offers bite-sized items for effectively writing concurrent code, divided into three categories: writing thread-safe code, structuring concurrent applications, and improving scalability.

    Writing thread-safe code: - Encapsulate your data - Encapsulate any needed synchronization - Document thread-safety intent and implementation - Prefer immutable objects - Exploit effective immutability

    Rules for structuring concurrent applications - Think tasks, not threads - Build resource-management into your architecture - Decouple identification of work from execution

    Rules for improving scalability - Find and eliminate serialization



    Beyond ACID: transactions management, in theory and practice

    close
    Brian Goetz

    By Brian Goetz

    Transactions are the software building blocks of enterprise applications, but not all transactional systems are created equally. This talk covers the basics of what transactions are, why they are essential to building reliable enterprise software, the fundamental properties of transactions, and how transactions are supported and implemented in popular frameworks such as Java EE and Spring.

    Murphy's Law states that anything that can go wrong, will go wrong. And in enterprise applications, there are lots of things that can go wrong -- disks fill up or fail, systems crash, network connections go down, clumsy people trip over power cords. While you can't prevent failures from happening, you can prevent failures from corrupting your application data, and transactions are the standard way to structure application logic to enable reliable error recovery in the face of inevitable failures.

    This talk covers what transactions are, the various participants in local and distributed transactions, the role of transactions in enterprise technologies such as Java EE, Spring, and Web Services, how user code communicates its transactional requirements, and the behind-the-scenes magic how enterprise frameworks hide most of the implementation of transactions from applications.



    The Java Memory Model

    close
    Brian Goetz

    By Brian Goetz

    What's the worst thing that can happen when you fail to synchronize in a concurrent Java program? Its probably worse than you think -- modern shared-memory processors can do some pretty weird things when left to their own devices.

    Java was the first mainstream programming language to incorporate a formal, cross-platform memory model, which is what enabled the development of write-once, run-anywhere concurrent classes. It is the Java Memory model that defines the semantics of synchronized, volatile, and final.

    However, because the most commonly used processors (Intel and Sparc) offer stronger memory models than is required by the JMM, many developers frequently use synchronization and volatile incorrectly, but have been insulated from failure by the stronger memory guarantees offered by the processor architecture they happen to be deploying on. (The infamous "double checked locking" idiom is an example of this sort of error.)

    Understanding the Java Memory model is key to using the core concurrency primitives (synchronized and volatile) to develop thread-safe, efficient concurrent classes. We?ll cover what a memory model is (and why we should care), what synchronization really means, and what can really go wrong when we fail to synchronized correctly.



    Software Development Risk Analysis techniques

    close
    Mark Johnson

    By Mark Johnson

    Once you leave academic "hello world" projects, software development is full of unknowns which result in the high rate of project failure we see too often in industry. Reasons for a project failure will vary based on the stakeholder interviewed. This session will provide a software development risk framework and examples you can apply in your projects to reduce or at least soften the impact of failure.

    The Software Development Risk Analysis techniques presentation examines several tools taken from the Six Sigma world to identify and manage risks with the objective to avoid failures or at least soften the impact of failure. Because software development is a team exercise this presentation is targeted towards everyone from Software Development managers to hands on developers. During the presentation we will apply risk management techniques to several sample (and typical) software development project problem areas.



    Software Project Estimation

    close
    Mark Johnson

    By Mark Johnson

    As developers we dread when management requests a project estimate. Typically, you do not have the opportunity to understand all the requirements, the team composition is unknown, and you have been given until tomorrow end of day to produce an estimate. Several months later everyone is yelling at you about the software estimation errors encountered during the project.

    This presentation will cover some simple techniques for creating order of magnitude estimates. In addition, leveraging the cone of uncertainty the presentation will also cover techniques for managing management expectations.



    Getting to Acceptance: Validating your requirements with FitNesse

    close
    Mark Johnson

    By Mark Johnson

    How do you know when you are "DONE" and the assignment is complete? Well of course you are done when your requirements are complete. But it always happens that your interpretation differs from the customer/management's interpretation.

    This session will explore the use of FitNesse to create "Business" readable test cases before development even begins so you can agree with your customer as to what "DONE" means and prove that you have actually completed the requirements to specifications.



    Promoted to Technical Lead. Now what do I do?

    close
    Mark Johnson

    By Mark Johnson

    You have just received the much desired promotion to Technical Team Lead The team is waiting your direction. You What should you do now?

    This session uses discussion to explore common pitfalls encountered by new Technical leads as well as possible solutions.



    10 Tips for Getting Your Project Back on Track

    close
    Jared Richardson

    By Jared Richardson

    Software projects fail over and over for many of the same reasons. We'll look at some of the more avoidable problems and some solid ways to fix them, or avoid them in the first place.

    We'll talk about discovering what went wrong (and what went right!) with your last project, solving code integration issues, resolving lingering quality problems, establishing automated test suites, reining in soaring project requirements and more.



    Techniques 2009

    close
    Jared Richardson

    By Jared Richardson

    There are a number of great techniques you can use across technologies and projects. Come hear some of my favorite ways to move "beyond" and contribute a few of your own. We'll discuss topics ranging from glue languages to ditching your IDE to building your brain.

    In this session we'll discuss:
    - Move beyond tools - Glue languages - Inbox Zero - Learning to learn - Not being a cog anymore - Macro Object Orientation - Clean code - Looking smarter than you are - Open source tool stacks - Tighter feedback loops - Scripted deployments - Scripting databases - Virutalization And more...



    Credit Card Software Development: Recognizing and Repaying Technical Debt

    close
    Jared Richardson

    By Jared Richardson

    Technical debt has long been recognized in technical circles for years, but convincing your manager to budget time to repay "technical debt" has always been problematic. Let's couch the term technical debt concept in language more familiar to our managers: credit card debt.

    Like credit card debt, technical debt accumulates slowly over time, and usually takes just as long to pay off. The interest slowly builds up until you're no longer able to pay off the principle: your entire development cycle is devoted to just "paying the interest". We'll examine common types of technical debt and strategies to effectively communicating the problems, and their solutions, to your managers.



    Restoring Agility: Getting Your Team Back on Track

    close
    Jared Richardson

    By Jared Richardson

    An agile team is first and foremost "a team". When that gets lost in the rush to get a product out the door, the people suffer as well as the products. It's bad for the company, but even worse for the team members. We'll learn how to defuse some of the more common problems you'll run into on dysfunctional teams.

    Restoring trust and providing visibility is hard once you've been burned. It's not always possible, but we'll examine concrete steps you can take to start rebuilding your trust and your team.



    Build Teams, Not Products

    close
    Jared Richardson

    By Jared Richardson

    A great team builds great software, but how do you build a great team?

    Let's move beyond getting lucky and look at some key practices that will help you build your scattered cats into a well-oiled machine.



    How to Fail with 100% Test Coverage

    close
    Jason Rudolph

    By Jason Rudolph

    With an expressive language such as Ruby and with modern test practices, 100% C0 test coverage is readily achievable. But 100% coverage is meaningless without other supporting habits and practices. Over the last few years, we have taken dozens of projects to 100% coverage, and there are still plenty of things that can go wrong.

    We will look at examples of each of these problems (and others as well), and show how to prevent them from infecting your project.

    • Fragile Mocking
    • Incidental Coverage
    • The Ugly Mirror
    • Overspecification
    • Slow Tests
    • Underspecification
    • Shallow Tests
    • Invisible Code


    Beginning Drools - Rule Engines in Java

    close
    Brian Sam-Bodden

    By Brian Sam-Bodden

    Drools is an open source pure-Java implementation of a forward chaining rules engine. Drools can be used in a J2SE or J2EE application and allows you to express rules programatically or by building domain specific rule languages. Learn how Business Rules with Drools can make your Java applications more flexible and robust.

    Software development is expensive, when business rules are hard-coded in your application's source code, changes and additions to those rules translate to wasted time and money. Good object-oriented, component-based approaches can alleviate the burden of keeping up with changes in the business world but they still require that expert knowledge of the changes be passed from the decision makers to the business analysts and finally to programmers that need to implement these changes. Business Rule Engines and Business Rule Languages are based on the basic premise of separation of concerns by empowering business domain experts to express the rules of business in a way that it is directly usable by applications. Drools is an open source pure-Java implementation of a forward chaining rules engine. Drools can be used in a J2SE or J2EE application and allows you to express rules programatically or by building domain specific rule languages. Learn how Business Rules with Drools can make your Java applications more flexible and robust.



    Advanced Rules Programming with Drools

    close
    Brian Sam-Bodden

    By Brian Sam-Bodden

    In this session you'll learn some of the more advanced features of Drools; a pure-Java Rule Engine. This session will walk through the construction of an advanced Rules application covering such topics as:

    • Fine control and monitoring of a Working Memory session
    • Using Decision Tables
    • Advanced Rule Language Features
    • Building Domain Specific Languages
    • Managing your Rules

    Many of the problems that we deal with in enterprises around the world are not usually related to the particular infrastructure, framework or programming language chosen but rather to the evolution and maintenance of the business logic that governs those systems. All knowledge in an enterprise is handed down stream until it arrives at the programmer's door. With Rule based systems we can empower those with the business but there is still a fair amount of work to get the ideal architecture for a particular problem in place. In this session you'll learn some of the more advanced features of Drools; a pure-Java Rule Engine. This session will walk through the construction of an advanced Rules application covering such topics as:

    • Fine control and monitoring of a Working Memory session
    • Using Decision Tables
    • Advanced Rule Language Features
    • Building Domain Specific Languages
    • Managing your Rules

    Prerequisite: Beginning Drools



    Beginning Object-Relational Mapping with Hibernate

    close
    Brian Sam-Bodden

    By Brian Sam-Bodden

    Hibernate is an open source Object-Relational Mapping Framework that mostly automates the tedious and time-consuming task of persisting Java objects to a relational database. Hibernate is quickly becoming the preferred way for enterprise developers to overcome the object-relational impedance mismatch and a good alternative to the coarse-grained Entity EJBs, low-level raw JDBC, and by-committee specifications like JDO. Learn what your choices in the ORM arena, what to look for in an ORM tool, and how to get started with Hibernate for your next J2SE or J2EE project.

    Hibernate is an open source Object-Relational Mapping Framework that mostly automates the tedious and time-consuming task of persisting Java objects to a relational database. Hibernate is quickly becoming the preferred way for enterprise developers to overcome the object-relational impedance mismatch and a good alternative to the coarse-grained Entity EJBs, low-level raw JDBC, and by-committee specifications like JDO. Learn what your choices in the ORM arena, what to look for in an ORM tool, and how to get started with Hibernate for your next J2SE or J2EE project.

    In this session you will learn: - Understanding the O/R Impedance Mismatch - Techniques of O/R Mapping - Persistence Frameworks in Java - Architecting Persistence into your application - Hibernate Architecture and Overview - Installing and configuring Hibernate in J2SE - Hibernate in a J2SE application - Mapping Persistence Classes - Domain Models - Object Identity - Dealing with Inheritance and Schema Associations - Understanding the lifecycle of persistent objects - Understanding Hibernate usage in a J2EE application - Overview of advanced topics



    10 ways to use Hibernate effectively

    close
    Brian Sam-Bodden

    By Brian Sam-Bodden

    Learn 10 tried and true ways to improve the way you use Hibernate today. In this session you would learn about a collection of 10 tips, tricks, practices and tools that will make you more effective at designing, implementing, testing and tuning your application's Hibernate-powered object-relational layer.

    Learn 10 tried and true ways to improve the way you use Hibernate today. In this session you would learn about a collection of 10 tips, tricks, practices and tools that will make you more effective at designing, implementing, testing and tuning your application's Hibernate-powered object-relational layer.

    Some of the topics covered include: - Handling and implementing inheritance - Caching - Profiling your queries - Using filters for virtualization - Custom SQL for performance - Query caching - ... and more