Great Lakes Software Symposium

November 17 - 19, 2006 - Chicago, IL


Wyndham Northwest Chicago
400 Park Boulevard
Itasca, IL   60143
Map »

NOTE: You are viewing details about a past event. We will be back in ChicagoNovember 8 - 10, 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 - November 17


  Grand Ballroom 3-5 Chambers Alton Barrington Carlyle Windsor
12:00 - 1:00 PM REGISTRATION
1:00 - 1:15 PM WELCOME
1:15 - 2:45 PM

JavaServer Faces: A Whirlwind Tour

David Geary

What's New in Spring 2

Bruce Tate

Web Application Security Vulnerabilities

Neal Ford

Java Metadata

Jason Hunter

Creating, Telling, and Tracking User Stories

David Hussman

Working with Rules Engines

Venkat Subramaniam
2:45 - 3:15 PM BREAK
3:15 - 4:45 PM

Clean Up Your Code: 10 Java Coding Tricks, Techniques, and Philosophies

Neal Ford

JSF: State of the Art

David Geary

Effective Teams

Bruce Tate

Spring into Unit Testing

Venkat Subramaniam
4:45 - 5:00 PM BREAK
5:00 - 6:30 PM

Advanced Enterprise Debugging Techniques

Neal Ford

Three Technologies to Watch

Bruce Tate

Extreme Web Caching

Jason Hunter
6:30 - 7:15 PM DINNER
7:15 - 8:30 PM Keynote: Open Source from the Inside by Jason Hunter

Saturday - November 18


  Grand Ballroom 3-5 Chambers Alton Barrington Carlyle Windsor
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM

SOA: Next Wave of Enterprise Development or Return of the Son of CORBA?

Neal Ford

Introduction to Java threads

Brian Goetz

Ready, Set, Agile?

David Hussman
10:30 - 11:00 AM BREAK
11:00 - 12:30 PM

Real World Web Services

Scott Davis

Structuring concurrent applications in JDK 5.0

Brian Goetz

New Features in Java 5

Jason Hunter

Losing Battles and Winning Wars: Adopting Agile

David Hussman

The State of AOP

Ramnivas Laddad
12:30 - 1:30 PM LUNCH
1:30 - 3:00 PM

Introduction to the Spring Framework

Ben Hale

Introducing the Eclipse Rich Client Platform

Scott Delap
3:00 - 3:15 PM BREAK
3:15 - 4:45 PM

Java/EE Web Services and SOA @ Work: Architecture & Development

Tom Marrs

The Java Memory Model

Brian Goetz

Busy Developer's Guide to db4o

Ted Neward

The Spring Experience (in 90 minutes)

Ben Hale
4:45 - 5:30 PM BIRDS OF A FEATHER SESSIONS

Sunday - November 19


  Grand Ballroom 3-5 Chambers Alton Barrington Carlyle Windsor
8:00 - 9:00 AM BREAKFAST
9:00 - 10:30 AM

The Busy Java Developer's Guide to ClassLoaders

Ted Neward

Java/J2EE Architecture @ Work: EJB 3 vs Spring and Hibernate

Tom Marrs

Pragmatic Usability (aka, Software Engineer's Guide to Usability)

Nathaniel Schutta

A Scrum Experience

Pete Behrens
10:30 - 11:00 AM BREAK
11:00 - 12:30 PM

Groovy: The Next Generation of Java

Scott Davis

Agile Tooling: Team to Enterprise

Pete Behrens
12:30 - 1:15 PM LUNCH
1:15 - 2:00 PM EXPERT PANEL DISCUSSION
2:00 - 3:30 PM

Applied Design Patterns

Brian Sletten

Creating Polished Swing Applications

Scott Delap

Effective Enterprise Java: State Management

Ted Neward
3:30 - 3:45 PM BREAK
3:45 - 5:15 PM

Testing Strategies for Web Applications

Ramnivas Laddad

Ajax, Flash, and Java - Choosing The Right Rich Client Technology for Your Next Project

Scott Delap

Regular Expressions in Java

Neal Ford

Easing into Agile

Scott Davis

Introducing the Semantic Web

Brian Sletten

Web Application Security Vulnerabilities

close
Neal Ford

By Neal Ford

This session highlights common mistakes made by web programmers, stating the problems and avoidance techniques.

Building secure web applications is difficult. Common trivial mistakes in other programming environments break web applications. This session highlights common mistakes made by web programmers, stating the problems and avoidance techniques. The material in this session is derived from the Open Web Application Security Project (OWASP) and other sources. It covers the OWASP top 10 list of vulnerabilities (including examples). It also demonstrates some (legal!) hacker tools that malicious developers use against you. This session includes case studies showing complete attacks, from vulnerability acquisition to compromise. It also covers open-source tools (such as Stinger) that automate some of the security jobs for developers. This session is designed to scare you – but in a good way!

Key Session Points:
* OWASP List of Vulnerabilities

  1. Insecure configuration management
  2. Denial of service
  3. Insecure storage
  4. Improper error handling
  5. Injection flaws
  6. Buffer overflows
  7. Cross site scripting flaws
  8. Broken authentication and session management
  9. Broken access control
  10. Unvalidated input

    • Security Tools and frameworks
    • Case Study: Hacking Oracle through a browser
    • Case Study: Cross-site scripting
    • Case Study: SQL Injection


Clean Up Your Code: 10 Java Coding Tricks, Techniques, and Philosophies

close
Neal Ford

By Neal Ford

This session delivers 10 techniques for improving your code, whether you are freshly graduated or a grizzled veteran.

Even the most competent programmer falls into habits and coding ruts. This session delivers 10 techniques for improving your code, whether you are freshly graduated or a grizzled veteran. It is derived from many sources, including other languages (Smalltalk, Lisp, Java, and others), and techniques and idioms we have developed teaching developers. It also consolidates information from books that delve into the craft of writing good software. The goal is to create code that is easier to read, maintain, debug, and enhance.
Key Session Points:

  1. Names of Things
  2. Composed Method
  3. Apply the Unix Philosophies
  4. Syntactic Stuff
    • Constants
    • Enumerations
    • Common Methods: equals() && hashcode()

  5. Orthogonality
  6. Compactness
  7. The Pragmatic Rules
  8. Template Method
  9. Bad Inheritance
  10. Decoupling with Interfaces


Advanced Enterprise Debugging Techniques

close
Neal Ford

By Neal Ford

This session discusses techniques and tools for debugging enterprise applications (without using System.out.println()!)

It's an interesting dilemma – we have the best tools for software development ever, yet developers are still debugging enterprise applications using ystem.out.println()! This session discusses techniques and tools for debugging enterprise applications. It shows how to perform remote debugging through all the major IDEs, either on the same machine or across a network. It also shows how to debug using the command-line jdb debugger (the only one guaranteed to always be available).This session shows how to debug web, EJB, and lightweight enterprise applications. It discusses class loaders, interactive enterprise debugging with Groovy, and how to automate repetitive tasks using JWebUnit and Selenium, making the computer do work for you instead of vice versa (how many times do you have to walk multiple pages through a web application to get to the point where you can debug it?). This session shows you how to automate these and other common debugging tasks. The goal is to make hunting and eliminating bugs in complex applications much easier.

Key Session Points: • Setting up remote debugging in IDE's    o Eclipse    o IntelliJ • Effective remote debugging • When it's all you've got: jdb and enterprise applications • Forensic debugging using loggers • Debugging web applications    o Inspector    o Bookmarklets • Debugging EJB • Debugging in lightweight frameworks • Interactive Debugging with Groovy • Automating debugging tasks    o JWebUnit    o Selenium



SOA: Next Wave of Enterprise Development or Return of the Son of CORBA?

close
Neal Ford

By Neal Ford

Is Service Oriented Architecture the next wave of distributed computing or just the same old crap in a shiny new package? This session provides an overview of what most people agree is the definition of SOA. I talk about SOA, ESB, CORBA, your MOM, and a bunch of other acronyms.

This session is a pragmatic look at SOA from a developer perspective, including such (never talked about) topics like tranports, granularity, versioning services, transformations, and whether you should be doing this or not. I show lots of slides with diagrams and talk about how to evolve towards an SOA. SOA can work if you ignore the hype and focus on the real meat: building loosely coupled message-based applications. This session discusses just that.



Testing with Selenium

close
Neal Ford

By Neal Ford

This session describes the use and workings of Selenium, the open source web user interface testing tool.

Selenium is one of the most powerful functional testing frameworks to come from the open source world in a long time. This session covers all aspects of Selenium, starting from its origins as an internal user-acceptance testing tool through testing Ajax applications. This session covers Selenium functionality, syntax of the test scripts (both HTML and the scripting language), keywords, testing techniques, recording tests, creating extensions, and testing Ajax applications. Selenium is the premiere testing tool for Ajax, so I show several examples of the power of Selenium combined with Ajax.

Key Session Points

  • Selenium origins and background
  • Installation
  • Building tests
  • API overview
  • The Selenium IDE
  • Testing Ajax Applications
  • Future directions


The Productive Programmer

close
Neal Ford

By Neal Ford

This session shows you how to become a more productive programmer every day by using tools that you didn't know you already had.

<grizzled-programmer>
Why, in my day, we didn't have any fancy Gooey tools -- we did everything from the command line and we liked it. And, we got a lot more done than all you point-and-click monkeys
<grizzled-programmer>

Have you ever noticed that some old-school developers can run rings around you at the keyboard? Have you ever seen a 2 week problem become a 2 hour solution because someone knew a better way to solve it? This session is about all the command line and other tools that are extremely powerful yet widely neglected in today's graphical environments. This session shows you how to take advantage of those tools whether you run Windows, *Nix, or Mac. It focuses on specific recipes to make your job easier. I'll show you how to get around your computer in a hurry (no more clicking around in trees), how to find anything fast, how to manage projects and artifacts from the command line, how to automate the repetative tasks you find yourself doing every single day, how to stop repeating yourself, and how to stop repeating yourself. This session is guaranteed to improve your developer productivity by an order of magnitude.

Key Session Points

  • Creating a common environment
  • The Unix philosophy (without Granola or sandals)
  • Automating common programming tasks
  • Getting around in a hurry
  • Searching techniques
  • Text techniques
  • Project management from the command line
  • Stop repeating yourself
  • Tying it together


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



  • Busy Developer's Guide to db4o

    close
    Ted Neward

    By Ted Neward

    Tired of writing object-table mappings? For years, Java developers have wrestled with the problems of storing objects into relational format and retrieving them back again; for all that Hibernate and JDO and other O/R tools make it easier (though not easy) to do, isn't there another way? In this presentation, we'll explore an alternative approach, real object persistence, using the db4o toolkit (www.db4objects.com).

    We'll build a small object model, store a few objects, retrieve them using the different retrieval APIs db4o provides, and talk about the implications of object (as opposed to object/relational) persistence. We'll also talk about its applicability (and the drawbacks) in the larger world of enterprise applications, as well as its suitability for agile apps and mobile device apps.



    The Busy Java Developer's Guide to ClassLoaders

    close
    Ted Neward

    By Ted Neward

    If you've ever gotten a ClassCastException and just knew the runtime was wrong about it, or found yourself copying .jar files all over your production server just to get your code to run, then you probably find the Java ClassLoader mechanism to be deep, dark, mysterious, and incomprehensible. Take a deep breath, and relax--ClassLoaders aren't as bad as they seem at first, once you understand a few basic rules regarding their operation, and have a bit more tools in your belt to diagnose ClassLoader problems. And once you've got that, and hear about ClassLoaders' ability to run multiple versions of the same code at the same time, and to provide isolation barriers inside your application, or even compile code on the fly from source form, you might just find that you like ClassLoaders after all... maybe.

    For a beginning to intermediate Java audience.



    The Busy Java Developer's Guide to Annotations

    close
    Ted Neward

    By Ted Neward

    Want to get the soup-to-nuts story on Java annotations? In this presentation, we'll first talk about what annotations provide to the Java language. After setting ourselves a conceptual basis to operate from, we'll look at the language definition for Java annotations, from how to use them to how to define them. Finally, we'll take a look at the other side of annotations, consuming them at source-level (using "apt", the annotation processing tool), class-level (using a bytecode toolkit such as BCEL), and at runtime (using enhancements to the Reflection API made in Java5).

    For an intermediate Java audience.



    Effective Enterprise Java: State Management

    close
    Ted Neward

    By Ted Neward

    Managing state--both transient state (like your shopping cart) and your durable state (like your order placements, your inventory management forms, and so on)--is tricky in an enteprrise application. In this talk, we'll examine some of the trickiness, both high-level and low-.

    We'll talk about the various forms of data persistence, including "procedural-first", "relational-first" and "object-first" approaches. We'll also talk about the costs of data-access logic, and ways to mitigate those costs. In short, if you store or use data in an enterprise Java application (be it J2EE or Spring or otherwise), you'll want to be here.



    Java6: Exploring Mustang

    close
    Ted Neward

    By Ted Neward

    Mustang, the Java6 release, is out, and even if you're not looking to adopt the new platform right away, it's important to know what's there so you can start to plan for it. In this presentation, we'll go over the major new features of the Java6 platform, including the new integrated XML services capabilities (JAX-WS and JAXB), dynamic/scripting language support (javax.script), new JVM "attach" capabilities, new annotations supported by the javac compiler, and more.

    For an audience comfortable with some prior Java experience, preferably familiar with Java5.



    Foundations of Ajax

    close
    Nathaniel Schutta

    By Nathaniel Schutta

    Seemingly overnight, Ajax has gone from an obscure acronym to, well, having conferences devoted to it. People are often surprised when they learn that Ajax isn't really anything new - so if it's yesterday's technology, why all the hype? This talk will examine the course of events that led up to the current love affair with richer client applications. We'll talk examine the technologies that power an Ajax application and discuss how to work with them - and then we'll examine a number of frameworks that will do much of the heavy lifting for us!

    Once we understand the techniques of Ajax, we'll touch on where (and where not) it's appropriate for your application finishing off with some common gotchas.



    Pragmatic Usability (aka, Software Engineer's Guide to Usability)

    close
    Nathaniel Schutta

    By Nathaniel Schutta

    While some companies have the luxury of a full time usability team, most of us have to make do on our own. Sure, it might be easier (and more comfortable) to focus on all the hip back end goodness, but if your user interface makes users yack, your product is doomed.

    This talk will provide an overview of usability from the perspective of the software engineer.



    Introduction to NetKernel : Software for the 21st Century

    close
    Brian Sletten

    By Brian Sletten

    Imagine the simplicity of REST married to the power of Unix pipes with the benefits of a loosely-coupled, logically-layered architecture. If that is hard to imagine, it may because the architectures available to you today are convoluted accretions of mismatched technologies, languages, abstractions and data models.

    NetKernel is a disruptive technology that changes the game. It has been quietly gaining mind share in the past several years; people who are exposed to it don't want to go back to the tired and blue conventions of J2EE and .NET. Not only does it make building the kinds of systems you are building today easier, it does it more efficiently, with less code and a far more scalable runway to allow you to take advantage of the emerging multi-core, multi-CPU hardware that is coming our way.

    Come see how this open source / commercial product can change the way you think about building software.

    NetKernel makes the things you are doing now easier, but also makes new types of systems possible.

    A wise man once said, "XML is like lye. It is very useful, but humans shouldn't touch it." If you've had to incorporate XML into your project by hand, you have probably been burned by getting too close. NetKernel turns this wisdom on its head and encourages you to use XML like the liquid data stream you want it to be.

    But, XML is only part of the story. Resource-oriented computing is a generalized and revolutionary approach to modern, flexible systems. There is less code to write, but it is more fun to do. Orchestration of existing services and data sources is faster, easier and more encompassing than with more conventional technologies.

    This talk will help explain what NetKernel is (app server? pipeline tool? embedded SOA?) and, through a comprehensive set of examples, give you a glimpse at a deeper software reality than you might have thought possible.

    Disclaimer: There will be no blue pills given to you to make you forget what you have seen. Come with an open mind.



    Applied REST

    close
    Brian Sletten

    By Brian Sletten

    REST sounds like such a simple thing. But, what is it really? How do you convince your boss to let you try it when she has been sold on the equation SOAP = SOA + P(rofit)? How do you go about building, deploying, publishing and orchestrating web services without the (Un)Holy Trinity of SOAP, WSDL and UDDI?

    This talk will thoroughly examine this REST phenomenon in terms of its history, its goals, its consequences and where it fits into the Big Picture of SOA. We will also look at exposing existing tools/APIs through RESTful APIs.

    If you find yourself interested in talking about REST without people dismissing it as trivial (yeah, but what is it?!?!), unsaleable (yeah, but I am trying to solve problems, not buy tools!) or not SOA (<insert your own joke here -- that one leaves me speechless>), come on by.



    Applied Design Patterns

    close
    Brian Sletten

    By Brian Sletten

    Just about every modern software developer has a copy of the Gang of Four "Design Patterns" book sitting on a shelf; many of them have actually read it. The dark secret of the patterns community is that there is often a large gulf between whiteboard simplicity and real-world complexity. Language choice plays a part in the design (and even importance) of patterns. The situation is made even more confusing by the fact that many of the core patterns have now been "voted off the island" for one reason or another. This talk will give a pragmatic overview of the motivations behind design patterns and will focus on applying a handful of the GOF patterns to example scenarios in Java, Ruby and C#. A quick introduction to the role AOP plays in changing the patterns landscape will also be covered.

    Attendees will learn about
    The benefits and history of patterns in software
    How language choice affects pattern implementations
    Applying a handful of GOF patterns in code examples
    Why there is no DP4J available

    Rating: Intermediate
    Category: Architecture/Languages, Core Java, .NET
    Prerequisites: Basic Java or C# skills



    Introducing the Semantic Web

    close
    Brian Sletten

    By Brian Sletten

    Just as the world is feeling comfortable with the Web, Tim Berners-Lee et al inform us that what we have seen so far is just the beginning. His original plans at CERN were larger and grander. The Semantic Web is the new vision of machine-processable documents and metadata to improve search, knowledge discovery and data integration and management. While there are many naysayers chiding such grand visions, there are also pragmatic and useful technologies emerging that can be applied today.

    Attendees will learn:

    The history and motivations behind the Semantic Web The technology stack that will make it happen (including RDF and OWL) An overview of tools and technologies that are beginning to satisfy the vision

    This talk stands on its own, but feeds into the "Experiencing the Semantic Web" talk which is more hands on.

    Rating: Intermediate
    Prerequisites: This is all so new, most engineers will find something to excite them.



    Working with Rules Engines

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Rule based programming allows us to develop applications using declarative rules. These can simplify development in applications where such rules based knowledge is used for decision making.

    In this presentation we will take a look at the tools and techniques for developing rule based applications. We will take a look at open source tools, discuss their strengths, capabilities, and limitations.



    Spring into Unit Testing

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Test Driving Development is a valuable technique that has several benefits. However, unit testing is hard when your code has dependencies-this often becomes a quick excuse to give up on TDD. This example driven Zero Powerpoint (ZePo) presentation will help you spring into unit test your Spring applications. We will look at techniques to realize good unit testing, and focus on effective use of mock objects and frameworks to help you toss mock objects for your spring application.

    TDD Benefits Pragmatics of Unit Testing Mock Objects Hand tossing Mock Framework to create mock objects Unit Testing Spring Applications



    Refactoring your code - a key step in agility

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Refactoring is one of the core practices in Agile Software Development. Refactoring is based on some core principles that apply to more than writing good code. But, what's refactoring? Why should you do it? How do you go about doing that? What tools are available to successfully refactor your App?

    In this presentation we will address each of these questions. We will take an examples based approach to look at code that can benefit from refactoring. We will discuss how to identify a case for refactoring. Then we will use tools to help us refactor.



    Groovy for Java Programmers

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Object-oriented scripting languages, or agile dynamic languages, as some like to call those, are gaining programmers' attention. Groovy bring this excitement to the Java platform with its ability to generate byte code. You can use Groovy instead of Java for some parts of your application. By learning it, you can switch between the languages where you consider fit.

    In this session we will learn what Groovy is. We will take an example driven approach to look at interesting features. We will see how a piece of code you would write in Java can be written, elegantly, using Groovy. In addition to the current features, we will also discuss the state of the language and tools.



    Get Groovier with Grails

    close
    Venkat Subramaniam

    By Venkat Subramaniam

    Inspired by the Ruby on Rails project, Grails brings the ease of web development and "convention over configuration" to the Java platform. We will learn how to create web applications using Grails, how to integrate it with Hibernate, and how to Ajax it, all using the built in features of Grails. This section assumes that you are familiar with Groovy or you have attended the “Groovy for Java Programmers” session. The session will be example driven with live coding where we will build a web application from scratch.

    In this session you will learn *How to create web application using Grails * Understand Grails Conventions * Learn how to use the code generators and how to manual create domain models, controllers, and view * AJAX your application * Integrate with database



    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 speaker will share with you practices in a number of areas including coding, developer attitude, debugging, and feedback. The discussions are based on the 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.



    A Scrum Experience

    close
    Pete Behrens

    By Pete Behrens

    Scrum is a very easy agile framework to understand, but is very difficult in practice. Why is that?

    For one, Scrum requires compressing an entire software lifecycle into very short time increments of 2-4 weeks in length. It requires cross-functional team commitment, discipline, communication, and collaboration to accomplish their goals. These changes are difficult and often expose organizational and environmental issues that must be addressed for the team to be successful.

    This session brings focus to the Scrum heartbeat - the sprint. After a brief introduction of the Scrum framework and a focus on the sprint, we will be taking an experiential hands-on journey through a full sprint with your newly formed team.

    This session incorporates all of the components of the sprint including sprint planning, daily standup meetings, product development and integration work days, and a sprint review and retrospective. This brief exposure will illustrate many of the issues and difficulties that surface in Scrum and what your team can do to be more effective.



    Agile Tooling: Team to Enterprise

    close
    Pete Behrens

    By Pete Behrens

    "YAGNI (You Ain't Gonna Need It)" and "Doing the simplest thing possible" are mantras of agile development. A white board, sticky notes, and flip chart paper are by far the best tools for individual teams. However, when coordinating work across 10 - 50 teams across 12 time zones, more tooling is required. Learn how agile enterprises are leveraging tooling to manage their portfolios, projects and products.

    Teams are often distributed, offshore and dependent on other teams which require assistance to effectively manage. Furthermore, IT governance requires additional oversight in project and portfolio management for tracking investments, return on investments and reporting status to the business and other executive stakeholders.

    This session walks through various phases of the agile software lifecycle and provides tooling examples used to help facilitate each phase. Examples from two 300+ agile development organizations will be referenced to provide a context for the discussion. Specific agile project management tools discussed include VersionOne, Rally and Microsoft Team System, ScrumWorks, Conchango ScrumVSTS, XPlanner, ExtremePlanner as well as traditional workflow tools and manual tools.

    UPDATE: With over 500 responses to our recent tooling survey, we have incorporated the tooling results from companies across the world are using to enable, manage and scale their agile processes.

    NOTE: While there are many agile tools available for code refactoring, automated tests, automated builds, and test-driven development; this session focuses on agile project management tools for managing portfolios, projects, iterations, teams, tasks, and other project artifacts.



    Agile Enterprise Architecture: The role of the architect

    close
    Pete Behrens

    By Pete Behrens

    Are you overrunning your architectural runway? Many companies struggle with their ability to retain their architectural integrity when they transition to agile methods. Emergent Architecture (the other EA) can lead to cowboy coding and ad-hoc design decisions that emerge into a poor overall architecture.

    Enterprise Architecture (EA) has been a tried and true approach to address these architectural needs throughout the organization, yet this approach often leads to a heavy-handed, document-rich, control-oriented culture lacking ability to keep pace with today's dynamic business environment.

    Attempting to integrate an agile process with an Enterprise Architecture approach can be like mixing oil and water - they just don't work together. This session evaluates alternatives in balancing Agility and EA and proposes an architectural approach to build an Agile Enterprise Architecture into your organization.

    This session begins with an evaluation of the strengths of Enterprise Architecture and Agility and various approaches in the industry today that are attempting to balance the two. Enterprise Architecture (EA) means more than technology - it includes business architecture, information architecture, operational architecture, organizational architecture, technical architecture and infrastructure architecture.

    There are many EA models available today including the Zachmann Framework, McGovern/Stevens Model, and the Federal Enterprise Architecture (FEA) framework just to name a few. Each of these frameworks provides a valuable perspective on EA, but all of them depend on your organization to execute them effectively and require adjustments to increase their agility.

    We will look specifically at the architect's role in an agile process to retain application integrity and enable organizational agility to meet the changing business needs.



    Holistic Testing

    close
    Scott Davis

    By Scott Davis

    Mark Twain once said, "Everyone talks about the weather, but nobody does anything about it." Do you feel the same way about Unit Testing? Are you actively testing your code, or are you just thinking about testing your code... some day... once you get some more free time...

    Unit testing offers benefits beyond the obvious. A happy side effect of writing unit tests is that your code ends up being better architected. By forcing you to be a consumer of your own code outside of the context of the main application, you end up seeing your code in a different light. Hidden dependencies get flushed out early. Good unit tests force your code to be more loosely coupled and highly cohesive.

    This presentation is a survey of the testing ecosystem. A good testing infrastructure should include more than just JUnit. Cobertura, a test coverage tool, shows you how much of your code base is being tested. Writing test cases in Groovy adds a measure of flexibility that makes working with XML (and string data in general) a piece of cake. EasyMock allows you to test interfaces instead of implementations (and also avoid having to hand-code and maintain your own mock objects). We'll also look at functional testing libraries like HttpUnit, DbUnit, and JUnitPerf that allow you to test how your code behaves out in the wild, interacting with real subsystems instead of just mocks.

    Most importantly, you'll see these tools live in action -- real code examples instead a simple slideware overview. Rather than looking at each tool in isolation, you'll see how they interact and complement each other. Rather than just talking about testing, we'll (finally) do something about it.



    Real World Web Services

    close
    Scott Davis

    By Scott Davis

    In this talk, we'll survey the web services exposed by leading websites (Google, Yahoo, Amazon, eBay) and discuss how they are driving the AJAX revolution. You'll see examples of RESTful, SOAP, and JSON web services, as well as the strengths and weaknesses of each.

    Everyone seems to be talking about AJAX and Web 2.0 these days. While the UIs of AJAX-enabled websites such as Google Maps and Flickr are undeniably cool, they wouldn't exist without a strong SOA/Web Services infrastructure behind the scenes.

    "Web Services" is an overloaded term. While SOAP is a mainstay in the web services world, there are other equally valid flavors (REST, JSON) that accomplish the same goal -- decoupling the data from the presentation layer, the platform, and even the programming language used.

    Rather than talking about web services in the abstract, this talk shows examples of each flavor of web services as it is used in the wild by leading web companies. They have all taken slightly different approaches to the same problem. We'll compare and contrast their public-facing offerings.

    There is no one "right way" to expose your API via web services. After this talk, you should have a better idea of the relative strengths and weaknesses of each variant.



    Groovy: The Next Generation of Java

    close
    Scott Davis

    By Scott Davis

    This is the year of the dynamic scripting language. Ruby (and Rails) has won the hearts and minds of many independent software developers. JavaScript is experiencing a renaissance thanks to the wild success of AJAX and websites like Google Maps. And Groovy (JSR-241) brings the same level of excitement and "scripting goodness" to the Java platform.

    In this presentation, we take a very pragmatic "prove it in code" approach to learning Groovy. Since the syntax is (almost) identical to Java, we can dive right in from the very beginning, learning the "syntactic sugar" as we solve real world problems.

    You'll learn how easy it is to install Groovy and get started working with it. You'll tackle file I/O, reading and creating text files. You'll create and parse XML and HTML. You'll interact with databases. You'll create Groovlets (servlets sprinkled with Groovy-dust). And finally, you'll get a brief introduction to Grails (hint: the 'G' is silent).



    Easing into Agile

    close
    Scott Davis

    By Scott Davis

    How do you get started with an Agile development methodology? Everyone has been talking about eXtreme Programming for years, but how do you get it introduced to your team? Many times, you're not simply transitioning from from one methodology to another -- you're introducing a methodology for the first time. Adding structure to a previously unstructured endeavor. Adding a touch of discipline where programmers once roamed free.

    This presentation talks about how to introduce Agile practices slowly. Think of it as refactoring your team iteratively. If you drop 25 new "best practices" on developers all at once, the chances of getting any of them to stick is slim. If you start with one practice and get buy-in on it, sneaking in the next one (especially if it is complementary) is far easier.

    • starting with source control
    • easing into iterations with XPlanner
    • is your team ready for pair programming?
    • writing your first unit tests
    • evaluating your code base for unit test coverage


    Introducing the Eclipse Rich Client Platform

    close
    Scott Delap

    By Scott Delap

    Rich client application development using Java can be intimidating giving the vast flexibility in application design and structure. It also can be frustrating to create the large number of support services (persistence, menus, event and job frameworks) that a large scale rich client applications needs. The Eclipse Rich Client Platform is one project attempting to solve these issues by providing a core infrastructure that not only provides the day to day services a rich client application developer needs, but also providing a suggested path to guide you down the road of designing your application. This presentation introduces both the Eclipse RCP and the tools provided by the Eclipse IDE that assist developers in writing RCP apps.

    Rich client application development using Java can be intimidating giving the vast flexibility in application design and structure. It also can be frustrating to create the large number of support services (persistence, menus, event and job frameworks) that a large scale rich client applications needs. The Eclipse Rich Client Platform is one project attempting to solve these issues by providing a core infrastructure that not only provides the day to day services a rich client application developer needs, but also providing a suggested path to guide you down the road of designing your application. This presentation introduces both the Eclipse RCP and the tools provided by the Eclipse IDE that assist developers in writing RCP apps.

    How can a RCP Framework help my application? Menus Events Jobs etc.. Introducing Eclipse RCP The base of the Eclipse IDE Actively Developed Leveraged By Many Projects ... Eclipse RCP Services Plugins Core based on OSGi Extensions Menus/Toolbars/Actions Jobs View Framework Tools Support Plugin Editors Product Definition ... Deployment One Click Webstart Deployment Support Multiple Platforms



    Creating Polished Swing Applications

    close
    Scott Delap

    By Scott Delap

    Too often, Swing applications are slow, ugly, and hard-to-maintain. It turns out that it doesn't have to be this way. Swing can be used to create highly-responsive, beautiful applications that are very maintainable. If this isn't consistent with your own experience, don't feel bad; its not very obvious how to make Swing sing.

    In this session, I explore three topics that lead to much better Swing applications:

    • Proper Swing threading
    • High-quality third-party Swing look-and-feels
    • Good practices for coding Swing applications

    In the threading portion of the session, I explain Swing's event handling architecture and its implications for Swing applications. Understanding this topic is crucial to creating highly-responsive Swing apps. I demonstrate how to use this knowledge in the form of many live-coded examples, and I show how frameworks like SwingWorker and FoxTrot can make this easier. Java's default look-and-feel, Metal, is awful (and in my opinion, the "Ocean" theme in JDK 5.0 doesn't do enough to improve it); you should stop using it immediately. But creating good-looking applications is sadly more than slapping in a look-and-feel; you must also take care to understand the principles behind attractive layouts. I spend the second part of this session exploring how to make your Swing applications look great through a combination of third-party look-and-feels and layout techniques.



    Ajax, Flash, and Java - Choosing The Right Rich Client Technology for Your Next Project

    close
    Scott Delap

    By Scott Delap

    Today's users are beginning to demand richer and richer application experiences. Plain html pages simply don't cut it anymore. Applications like Google Maps (Ajax) and Yahoo Maps (Flash) show how the UI experience can be pushed to the next level. As an IT manager, how do you decide which route to take however? Should you use Ajax because it is the new "it" technology. Is Flash a viable option with its 95%+ browser availability? Perhaps Java deployed through web start is really the best choice in contrast to what the buzz would lead you to believe. This presentation takes a look at these three core rich client technologies from both deployment/user experience and ease of development perspectives.

    Today's users are beginning to demand richer and richer application experiences. Plain html pages simply don't cut it anymore. Applications like Google Maps (Ajax) and Yahoo Maps (Flash) show how the UI experience can be pushed to the next level. As an IT manager, how do you decide which route to take however? Should you use Ajax because it is the new "it" technology. Is Flash a viable option with its 95%+ browser availability? Perhaps Java deployed through web start is really the best choice in contrast to what the buzz would lead you to believe. This presentation takes a look at these three core rich client technologies from both deployment/user experience and ease of development perspectives.

    Meet the Players Java Swing Swt Example Apps Ajax Ajax 101 Example Apps Flash Flash 2006 Laszlo Flex Example Apps User Experience Java Ajax Browser Issues Back/Forward Hyperlinks Flash Deployment Java Web Start Ajax Cross Browser Issues Flash Development Java Tool Support Http Invocation UI Libraries Swing Swt Ajax XMLHttpRequest XML DOM's Javascript Can Struts Developer's Get This? Flash Laszlo Flex Playing Nice in the Browser Conclusions Applications that Work Well with Java Applications that Work Well with Ajax Applications that Work Well with Flash



    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.



    JSF: State of the Art

    close
    David Geary

    By David Geary

    In 2005, JSF hit its stride, as evidenced from overwhelming support from both vendors and the open-source community. JSF 1.0 had plenty of holes, but open-source projects have arisen to address those needs. This session takes a look at three of those projects: Tomahawk (MyFaces component library) FaceletsSeam

    MyFaces is an open-source implementation of the JSF spec. In addition, MyFaces developers got a little carried away and also developed a useful set of custom components that you can use in your own applications, regardless of whether you use MyFaces as your JSF implementation. Those components are now packaged separately from MyFaces under the name Tomahawk.

    Facelets is an open-source project from java.net that lets you implement views with Tapestry-like HTML pages. That technique is a powerful feature that lets graphic designers and software developers work separately in parallel.

    Seam is a framework from JBoss that provides a component model that unifies the EJB and JSF component models. Seam makes great use of annotations to meld EJBs and JSF components in a seamless fashion (thus the name).

    Lots is happening in the JSF space. Come to this talk and learn about these three exciting open-source projects.



    Ajaxian Faces

    close
    David Geary

    By David Geary

    JavaServer Faces is a perfect platform for implementing Web 2.0 interfaces with Ajax. This session explores how you can use these two potent technologies--JSF and Ajax--together to create applications that look and behave like desktop applications but run in the browser.

    JavaServer Faces, with a mature component model and flexible lifecyle, is a perfect platform for implementing Web 2.0 user interfaces with Ajax. This session explores using JSF and Ajax to create applications that act like desktop applications but run in a browser.

    We'll start with a quick look at implementing basic Ajax in a JSF application. Then, once your bloodthirst has been slaked, we'll dive deeper into Ajaxian Faces dynamics with a form completion demo that requires its implementor to understand two simple, but vital facts about JSF.

    If you're savvy, you probably use client-side validation to augment your server side validation logic, which parenthetically, is no no-brainer in either of the leading web application frameworks, JSF or Rails. But anyway, client-side validation is old school. All the cool developers nowadays use Ajax to implement realtime validation, where you sneak a trip to the server as an unwary user types into your input fields. But to accomplish that, we'll have to dive even deeper into JSF, with concerns such as accessing view state and accounting for client-side state saving.

    All of this Ajax development is great fun, but most of it is best relegated to components and frameworks, which are the topics that will wrap up our session. We'll see how to keep your JavaScript separate from your JSF components and how to pass JSP tag attributes all the way through to JavaScript. Finally, we'll take a look at Ajax4jsf, a JSF component library with a tag library that blends Ajax into JSF in a natural, intuitive way without having to write JavaScript.

    As web developers, we've been handcuffed long enough by the shackles of Web 1.0 development. Come to this session and see the brave new world of Web 2.0 development with one of the hottest web application frameworks.



    The Google Web Toolkit, Part One

    close
    David Geary

    By David Geary

    Developing highly interactive web applications, for the most part requires knowledge of a wide array of technologies: HTML, CSS, JavaScript, XMLHttpRequest, JSP, JSF, etc.

    With the Google Web Toolkit (GWT), Google turns that notion of development on its head. Instead, you implement Ajax applications by writing almost entirely in Java. You use an AWT-like API, which the Google compiler compiles to JavaScript that runs on the client.

    In the early days of Java, application development with the AWT was relatively simple. You had to have a decent understanding of Java and AWT fundamentals, but once equipped with such knowledge, you could dive in and develop some impressive applications.

    Ten years later, we have, in so many respects, gone significantly backwards. We've shoehorned technologies such as HTML into shoes for which they were never intended, and for our efforts, we have a mismatch of disparate technologies that one needs to knit together for a truly interactive web application.

    This is the first session of a two-part presentation on the GWT, where I'll concentrate on GWT basics: implementing Ajax-enabled applications in Java, internationalization, testing, and remote procedure calls.



    Introduction to Java threads

    close
    Brian Goetz

    By Brian Goetz

    The Java language included support for threads and concurrency from day 1, but writing correct multithreaded programs is not easy. This session will cover the how and why of using threads in Java.

    Programming is hard, but concurrent programming is harder. Concurrent programs are at risk for all the safety, liveness, and performance hazards that sequential programs are. But there are also many hazards that apply exclusively to multithreaded programs, such as race conditions, stale data, and deadlock.

    If an object is going to be accessed from multiple threads, it should be thread-safe. The requirement for thread-safety is often introduced into Java programs not by explicit use of threads within the program, but by the use of frameworks, such as Servlets and Swing, which create threads and call application components from those threads.

    This class will cover what is thread safety, how to create thread-safe classes, and what costs and benefits you can expect to encounter by using threads in your programs.



    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.



    Java Performance Myths

    close
    Brian Goetz

    By Brian Goetz

    Performance myths about the Java platform abound, from the general "Java is slow", to the more specific "reflection is slow", "allocation is slow", "synchronization is slow", "garbage collection is slow", etc. Many of these myths have their root in fact (in JDK 1.0, everything was slow); today, not only are many of these statements not true, but Java performance has surpassed that of C in many areas, such as memory management.

    In this class, we'll look at some common Java performance myths, identify where they came from, and explore the platform changes that have rendered them no longer true. Many common performance hacks don't actually help, and some can seriously hurt performance. The result is that clean code that follows common usage patterns generally shows far better behavior on modern JVMs than code laden with tweaks designed to "help" the JIT or garbage collector. More often than not, this well-intentioned assistance has the unfortunate effect of undermining many common JIT optimizations, resulting in slower -- not faster -- code.



    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.



    Squashing bugs with FindBugs

    close
    Brian Goetz

    By Brian Goetz

    Does your program have bugs, despite unit tests, integration tests, and code reviews? You bet. Are you using static analysis as part of your QA process? If not, you're probably missing out on some bugs that can be caught before they bite your customers.

    The cost of finding a bug increases dramatically the longer it lurks without being discovered. Fortunately, today?s development tools (IDEs and compilers) can identify many potential bugs within a few seconds of their creation, resulting in higher quality code and more productive programmers. However, even the best programmers can create bugs that are very hard to spot if they make it through their first few minutes of their existence.

    Until recently, automated code analyzers have not been very useful for mainstream developers. Most code analysis packages focused either on stylistic issues (such as indenting and variable naming), or on formal correctness proofs (which require an investment in specification that few developers can afford to make.)

    FindBugs, an open-source tool developed by Bill Pugh and David Hovermeyer of the University of Maryland, has raised the bar for ease-of-use and effectiveness of automated code analysis for finding bugs. FindBugs has been able to find many serious bugs in production software, including Eclipse, JBoss, Apache Tomcat and Sun's JDK implementation, with an impressively low false-positive rate compared to other approaches.

    This session will explore how static code auditing tools work, how it is easy to write bug-detector plugins to find new bug patterns, presents some common bug patterns and fun "find the bug" puzzles, and shows how code auditing tools can easily identify them.

    Every developer will want to have these tools in their toolbox.



    Introduction to the Spring Framework

    close
    Ben Hale

    By Ben Hale

    In this day and age, it's pretty hard to be a Java developer and not have heard of the Spring Framework. The question is, what exactly is Spring? Well, you don't have to look any further. This session aims to answer the questions of what Spring is as well as why you might want to use it and what it can do for you.

    The session will start by focusing on what Spring is, and what it is not. It'll help you understand some of the big-picture problems facing Java developers today and how Spring helps solve them. After we've covered the basics, we'll start a whirlwind tour of the support facilities Spring provides and how they can help you build a robust application in a short amount of time.

    Even if you don't know how Spring can help you, come by and take a look. Spring is incredibly broad, there really is something for everyone.



    The Spring Experience (in 90 minutes)

    close
    Ben Hale

    By Ben Hale

    In this interactive session Ben walks you through the experience of building a simple Spring-powered application from the ground up.

    You will learn how to use Spring to assemble an application system from a set of focused, loosely-coupled components. You'll see how Spring enables agile development by allowing you to start simple, validate architectural choices early, and scale up infrastructure as requirements demand.

    Expect live coding with a supporting business case. This "big picture" session focuses on teaching how to get the most mileage out of the Spring Framework as you can.



    The Spring Experience (in 90 minutes)

    close
    Ben Hale

    By Ben Hale

    In this interactive session Ben walks you through the experience of building a simple Spring-powered application from the ground up.

    You will learn how to use Spring to assemble an application system from a set of focused, loosely-coupled components. You'll see how Spring enables agile development by allowing you to start simple, validate architectural choices early, and scale up infrastructure as requirements demand.

    Expect live coding with a supporting business case. This "big picture" session focuses on teaching how to get the most mileage out of the Spring Framework as you can.



    Spring Web Flow Jumpstart

    close
    Ben Hale

    By Ben Hale

    Have you ever developed a web application with a long user action based on form input? Did you curse the Java community for their inability to address this very common application type? Well, attend this session about Spring Web Flow and you'll curse no more.

    In this session we'll learn about a new(ish) Spring sub-project, Spring Web Flow. Spring Web Flow is an innovative new framework for declaratively modeling web application user interactions. We'll start with an exploration of some web development issues and then take a look at the value proposition that Web Flow brings to the table. Once everyone is comfortable with that, we'll jump straight to code. We'll start by exploring some of the features that SWF has and then we'll finish with a live coding example where the audience will help write the application.



    Java Metadata

    close
    Jason Hunter

    By Jason Hunter

    Java's new Metadata facility introduced in J2SE 5.0 defines a way to attach decorations to classes, fields, methods, and even packages that can be extracted by the compiler or runtime tools to provide advanced functionality. Think of metadata as an extended @deprecated flag, or think of XDoclet++. In this tutorial session you'll learn how Metadata fits in the Java platform (and how it compares to the C# platform). We'll cover how to use the metadata attributes provided in the core J2SE libraries and how to write your own. We'll also show a bit of what's coming in JSR-181, tasked to define standard metadata attributes for web services.

    Attendees should be skilled Java programmers ready to see what's possible in the latest release and learn to make the most of it.



    Greasemonkey: Ajax For One

    close
    Jason Hunter

    By Jason Hunter

    Greasemonkey is a Firefox extension with a hook to let you run your own JavaScript after each page loads. People have written hundreds of Greasemonkey scripts, each using Ajax techniques, to do everything from making a static page dynamic to changing a page's style to integrating comparison pricing on Amazon pages and giving Google search results easy keyboard shortcuts. Greasemonkey lets you take back control of the web browsing experience -- and teaches you Ajax while you're at it.

    In this talk we'll look at about a dozen useful Greasemonkey scripts. Each script provides a benefit in its own right, but like good engineers we'll dissect them to see what makes them tick.

    Some scripts we'll cover:

    • Tracing XMLHttpRequest activity on a page
    • Avoiding the Slashdot effect with auto-links to mirrors
    • Replacing a page's CSS design
    • Making hidden form fields visible in the page
    • Auto refreshing pages
    • Browsing the web through Google's cache
    • Adding keyboard shortcuts to Google's search results
    • Auto-selecting ad-free print versions of online articles
    • Working around Google's protection of Google Book Search images
    • Comparing book prices inline
    • Downloading all the images behind thumbnails
    • Using Platypus for graphical page editing of pages you don't own!

    Attendees leave this talk having more power over their web browsing and a great tool to get going with Ajax for one.



    Extreme Web Caching

    close
    Jason Hunter

    By Jason Hunter

    Web Caching is very important for high traffic, high performance web site but few people know all the professional-level strategies. In this talk I'll share some of the tricks of the trade, including advanced tips from Yahoo's Mike Radwin.

    We'll start with the basics: using client-side caches, conditional get, and proxies. Then we'll talk about more advanced features: how best to handle personalized content, setting up an image caching server, using a cookie-free domain for static content, and using randomization in URLs for accurate hit metering or sensitive content.

    Attendees should have experience or interest in how the web works and in cajoling the web into doing their bidding.



    Open Source from the Inside

    close
    Jason Hunter

    By Jason Hunter

    Open source isn't about a license, it's about human interaction and individual motivation. I've seen open source from all sides. I've been an individual contributor and a project leader. I've worked on commercial and open source efforts, and have both helped commercial projects go open and designed ways for open projects to absorb commercial codebases. I've been on the front lines in the Apache/Sun negotiations on open source Java that ended on the JavaOne keynote stage with Scott McNealy. In this talk, I'd like to share my favorite stories in and around open source and the lessons they teach us.

    • What it was like to take the servlet engine Tomcat from a Sun internal project to an Apache open source project

    • How Jakarta changed Apache's character

    • How not to think about Apache

    • The pros and cons of leading the JDOM project

    • Why JDOM is not part of Apache

    • Why my latest coding work isn't open source

    • How companies can best utilize open source and open source ideas

    • The past, present, and future of open source Java



    New Features in Java 5

    close
    Jason Hunter

    By Jason Hunter

    The new Java 5 release introduces a number of significant Java language enhancements: generics, typesafe enums, autoboxing, an enhanced "for" loop, a static import facility, and a general-purpose metadata facility. This talk gives an overview of the changes and helps you understand what all the funny new syntax means.

    The main new language topics covered:

    • Generics, also called "parameterized types", which let you specify the type of objects used in a collection, among many other things.

    • Autoboxing, that lets you implicitly convert from primitives to reference types, and vice-versa.

    • An Enhanced For Loop, that lets you iterate over arrays or collections with half the code as before.

    • Typesafe Enums, to create object-oriented, extensible enumerated values.

    • Static Imports, to put into scope static methods and fields.

    • Varargs, that allows methods to accept an arbitrary number of parameters.

    • A Metadata Facility, allowing decoration to classes and methods for later tool consumption. Covered in more depth in the "Java Metadata" talk.

    • Random new Library Features, like the ability to control external process launching, output formatting, and input scanning.

    This talk describes the proposed changes and shows how they work together to improve the Java language. We also take breaks to see how closely Java matches the C# designs!

    Attendees are assumed to be competent Java programmers.



    Creating, Telling, and Tracking User Stories

    close
    David Hussman

    By David Hussman

    The participants of this session will become agile customers and product owners, using personas to create stories for a sample product development.

    The questions around user stories are many, and the list grows larger as their popularity of increases. Many organizations are on their path to adopting stories as requirements vehicles, possibly struggling with story writing as well as finding a way to fit them into their organization. Along with writing stories, this session will cover connecting with product owners and a short review of several tools for tracking and managing user stories.



    “Show Me the Numbers” - Agile Planning Tools and Techniques

    close
    David Hussman

    By David Hussman

    This session will focus on tools and techniques for tracking an agile project plan from creation to project completion.

    As agile grows, so too do the questions for how to track and communicate progress within the project community as well as to upper management and others interested in progress. We will create a simple plan in a planning tool, and run a mock project, showing how to estimate and use agile planning to communicating progress, addressing missed estimates, scope modifications, and more.



    Automating Business Value with FIT and FitNesse

    close
    David Hussman

    By David Hussman

    The presentation will briefly discuss stories, the origin and authoring of story tests, and a demonstration of how FIT and FitNesse (FIT living within a Wiki) can be used to automate acceptance tests.

    Agile communities consider stories “done” when the acceptance tests (also called story tests) are shown to the customer. Originally, this was a manual process, but in recent years, several frameworks have been created to automate this process, providing acceptance testing all the benefits of automated unit testing. One of the most popular of these if called FIT, created by Ward Cunningham.



    Ready, Set, Agile?

    close
    David Hussman

    By David Hussman

    As with many methodologies, moving agile into an organizations poses larger challenges. Before jumping in, it helps to ask a few questions before "racing toward agility". This session will provide 3 tactical steps that can help your adoption of agile.

    There are many factors outside the developer world that can crash all the benefits of agile without regard to its success. This session will provide ways to select agile practices, create a transition plan for adopting agile, and bring people together before trying to adopt new techiniques that are part of agile development. Various tools and techniques will be discussed, and at least part of the session will include Q/A for the presenter to field specific questions about your organization.



    Losing Battles and Winning Wars: Adopting Agile

    close
    David Hussman

    By David Hussman

    Adopting agile is different for each company, but most companies will go through some amount of change during the adoption of agile.

    This session will discuss some of the most common difficulties for adopting agile and provide various plans of attack. The session will start with a listing of issues for the session participants, and some portion of the session will be dedicated to an open forum where the presenter will address the issues collected.



    The State of AOP

    close
    Ramnivas Laddad

    By Ramnivas Laddad

    A lot is happening in the field of Aspect-oriented programming (AOP). AspectJ and AspectWerkz, the two leading AOP implementations, have merged, bringing in their respective strengths. The merged version, AspectJ 5, adds many new features aimed at simplifying writing and deploying aspects. The new features include an annotation-based and XML-based syntax to define aspects, support for new Java 5 concepts, and load-time weaving. The tools support for AOP continues to improve, as well. Further, the most popular IOC framework, Spring, enables integrating aspects written in AspectJ. There is also serious discussion and preliminary work going on to support AOP right into the VM itself. All in all, there is a lot to learn about the changes in the exciting field of AOP. This session is designed to help you get up to date with all these changes.

    This session provides a guided tour of the new things in the AOP world. It explains new features in AspectJ along with the practical considerations in utilizing each of them. The presentation explores the fundamental synergy between AOP and metadata to understand right (and wrong) utilization of metadata-based crosscutting. Load-time weaving (LTW) enables adding aspects to your existing applications deployed in any application server with a minimal effort. The presentation shows how to utilize LTW to improve your productivity considerably, even if you don't yet subscribe to the AOP philosophy and don't want to use AOP in production. The presentation also demos the latest AspectJ Development Tool (AJDT) in Eclipse (that has improved a lot) to make Java developers feel home when developing with aspects. The presentation includes many demos to reinforce the concepts learned, as well as give a feel for what it would be like to apply aspects written using new features.

    This session is particularly targeted at developers with good familiarity with AOP concepts and the AspectJ language. It is recommended to attend the “Introduction to Aspect-oriented programming with AspectJ” session or read articles and/or books that introduce AOP and AspectJ to obtain the prerequisite.



    Spring AOP in Depth

    close
    Ramnivas Laddad

    By Ramnivas Laddad

    Support for aspect-oriented programming is an important part of the Spring framework. It is the AOP support that allows keeping implementation of functionality such as transaction management and security out of your POJOs. While many developers only use aspects provided with Spring, once you understand how it all works, you can make a better use of those aspects, extend them, and write brand new aspects.

    This session focuses on Spring AOP implementation. We cover topics such as Advice, Pointcuts, Advisors, proxy configuration, proxy factory bean, the autoproxy mechanisms, and the introduction mechanism. We will also examine many aspects shipped with the framework itself. While Spring’s AOP solution is sufficient in a typical enterprise application, there are situations where we need more full-fledged AOP support. Therefore, we will discuss using AspectJ with Spring and how to leverage the dependency injection mechanism with AspectJ aspects.

    This session is targeted for enterprise application developers who want to gain in-depth understanding of Spring's AOP feature. After attending this session you will gain a solid understanding of Spring AOP, standard aspects shipped with the framework itself, and how to write new aspects. Some familiarity with the Spring framework, gained by attending other Spring talks or reading about Spring, is recommended.



    Domain Driven Design with AOP and DI

    close
    Ramnivas Laddad

    By Ramnivas Laddad

    Domain Driven Design (DDD) suggests dealing with complex software system using a domain model and preserving the model in implementation. Since domain model entities have rich behavior, so should their software implementation artifacts. A direct mapping between domain model and software artifacts create simple-to- understand, inexpensive-to-implement, and easy-to-evolve systems.

    While the idea behind DDD isn't new and the value is easily understood, many implementations do not adhere to its principles. This disconnection may be due to many obstacles in implementing it. Combining Dependency Injection (DI) with a full-fledged aspect-oriented programming (AOP) system such as AspectJ help overcome many obstacles.

    The traditional DI mechanism allows injecting dependencies into coarse-grained objects such as services exposed to the application level. However, it cannot do the same for fine-grained domain objects, which are not exposed in the same manner. The DI and AOP combination overcomes this limitation allowing creation a web of domain objects mirroring the model. Now domain classes can implement rich behavior by collaborating with dependent objects, instead of acting as mere data carriers. Further, domain concepts such as security, change tracking, and business rules are crosscutting in nature. AOP allows expressing these concepts directly using aspects.

    In this session, we will examine the need for domain driven design, obstacles in achieving it, the basics of enabling behavior-richness for domain objects, and patterns of usages. This session will also present several examples that show the power behind the techniques. The knowledge gained through this session will enable you to readily apply domain driven design in your systems.



    Testing Strategies for Web Applications

    close
    Ramnivas Laddad

    By Ramnivas Laddad

    Ever wondered if you can automate testing of your web application, but couldn't produce a satisfactory solution? If so, this is the session for you! Attend this session to understand the alternatives you have for unit and functional testing of web applications.

    Testing a web application is a complex task. You must not only ensure that each unit is working as expected, but also ensure that your application works correctly on all target browsers and operating systems. The sad fact is that not all browsers behave in the expected, standards-compliant manner. Performing all tests manually is not only cumbersome, but also error-prone and expensive. This necessitates automated testing of the application inside all relevant browsers. With the increasing use of Javascript and AJAX, automated functional testing is becoming even more important.

    This presentation will show strategies for testing web applications. It will cover both unit testing as well as functional testing. For unit testing, it will discuss the mock object approach. Since unit testing is necessary, but not sufficient, the presentation will discuss tools available for functional testing. It will also study a specific tool -- Selenium -- that simplifies functional testing. During this session, we will do live coding to solidify the concepts learned.



    Java/EE Web Services and SOA @ Work: Architecture & Development

    close
    Tom Marrs

    By Tom Marrs

    Have you tried to deploy J2EE Web Services and thrown up your hands in frustration at the lack of tool support? Do you want to know how to develop and deploy Java EE-compliant Web Services so that they work every time? Would you like to see how to develop/deploy Web Services in Spring with XFire? Are you wondering if SOA is just hype and fluff? Do you think SOA is just marketing's re-packaging of Web Services? Would you like to know how Web Services and SOA (Service-Oriented Architecture) fit together? If so, then this talk is for you.

    The new Java EE 5 Web Services standard and Spring/XFire were both designed for interoperability and simplicity. We'll show how to develop a POJO (Plain Old Java Object) as a Web Service using each technology stack. We'll also show how to design Web Services and how this fits with SOA. This presentation covers:
    * Web Services Overview * Business Reasons for Using Web Services * Java EE 5 and Web Services (including Java EE 5 annotations) * Implementing/Deploying a Java EE 5 Web Service * Implementing/Deploying a Spring/XFire Web Service * Developing a Web Service Client * Web Services Architecture and SOA

    Intended audience: Experienced Java/EE architects & developers



    Java/J2EE Architecture @ Work: EJB 3 vs Spring and Hibernate

    close
    Tom Marrs

    By Tom Marrs

    You've used EJB in the past and been disappointed - it was too heavy and difficult to use. Like Bruce Tate, maybe you've gone from "Bitter" to "Better, Faster, Lighter". With EJB 3 shipping in early 2006, maybe it's time to take another look. We'll compare EJB 3 with alternative frameworks - Spring and Hibernate - to see if EJB 3 has closed the gap.

    Spring and Hibernate seem to fill the void left by previous J2EE specifications - the need for simple development, deployment, and testing. The EJB spec committee listened to the Spring and Hibernate communities, and the result is EJB 3. But does it deliver? With the widespread use of Spring and Hibernate, does EJB 3 matter anymore?

    If you're curious about these issues, this talk is for you. This presentation covers:

    • Architecture Overview
    • Architectural Issues (Transactions, Connection Pooling, Configuration)
    • The Problems with EJB 2.1 (and earlier)
    • Improvements in EJB 3
    • EJB 3 limitations
    • Spring - Everything You Always Wanted
    • Session Beans versus Spring Beans
    • Hibernate
    • CMP Entity Beans versus Hibernate
    • What Spring and Hibernate don't have
    • Testability Issues - In-Container & Out-of-Container

    We'll walk through each issue and debate the pros and cons. Just like an eye doctor appointment, we'll try to answer - "Which is better: technology 1 or 2?"

    Intended audience: Experienced Java/J2EE/Spring/Hibernate developers and architects



    What's New in Spring 2

    close
    Bruce Tate

    By Bruce Tate

    In this session, we'll review the new features of Spring 2.0. If you've been using Spring 1.x, you'll want to hear about the improvements.

    This material comes directly from Interface21. The SpringFramework version 2.0 brings tremendous maturity to one of the most successful Java projects of our time. In this session, you'll see

    • Radical improvements in the simplicity of context definitions
    • Much better AspectJ integration
    • Unified user interface strategies, and the continued emergence of WebFlow.


    Effective Teams

    close
    Bruce Tate

    By Bruce Tate

    Most conferences will try to tell you that the secret to good software development lies with a process, or a technology, or an architecture. Here's a dirty little secret. You can build working software with an outdated two tier archtiecture, a waterfall process and COBOL. How? By building a great team. These techniques were used to build one of the most unique and complex up and coming Ruby on Rails sites.

    By far, the biggest factor in the success or failure of a software project is the quality of your team. Build a great team first, and great software will follow. In this session, we'll explore ways to build effective teams for modern software development. Whether you're a project manager or a technical lead, you need to know how to build the most effective team possible. In this session, we'll look at all aspects of team building, including

    • What team sizes are optimal for software projects?
    • What tools can help your team communicate?
    • How does development process come into play?
    • How do you build better software faster?


    Three Technologies to Watch

    close
    Bruce Tate

    By Bruce Tate

    The state of the art is progressing rapidly, and dynamic languages are driving the revolution. Find out about these topics that will be central to programming. We'll discuss continuation servers, metaprogramming frameworks and functional langauges.

    Seaside provides a much richer web development experience than you can find in Java today. Learn how continuations can radically improve your web development experience, and learn what Java frameworks are doing about it.

    The programming world is abuzz over the Rails framework, but how many of the ideas are exclusive to Rails? We'll look at Active Record, and discover the fundamental innovations that let it happen. What improvements might be made by Java persistence frameworks, and where does Active Record come up short?

    Concurrent programming will come to a head with the introduction of multiprocessor systems. We'll discover just how broken conventional langauges are. Also, see how functional languages solve this problem.



    Where Agile meets Argyle: New processes in established companies

    close
    Bruce Tate

    By Bruce Tate

    Agile programming is a collection of core principles and techniques that allow software developers to create lighter, more responsive applications, and to have fun doing it. Many established organizations are either openly or sub-conciously hostile to many of the principles of Agile development.

    We'll explore the intersection of these new practices and old-world sensibilities, relying on real-world case studies to illustrate some of the compromises that are necessary to bridge the gap. In addition to technical and process aspects, we'll also spend some time talking about the business aspects, such as how Agile development affects contracts.



    Java/Ruby Integration with JRuby and ReST

    close
    Bruce Tate

    By Bruce Tate

    You can have rapid web development with Rails without losing access to your critical Java code. With the explosion of the Ruby programming language, more developers will need a strategy for letting Java and Ruby interoperate. This session explores two strategies: JRuby and Rails-based web services.

    Both Java and Ruby do certain things well. Ruby tends to build web based user interfaces, complete with AJAX integration, very quickly. Java has thousands of libraries and millions of lines of legacy code. How can you combine the two? We'll explore three approaches.

    An ambitious integration framework is also under development. The JRuby project recognizes the value of the best possible integration between Java and Ruby. As of today, 90% of the test cases for the Ruby language are passing for JRuby. How much is possible, and what's missing?

    Finally, closures and a fantastic XML API make Ruby a fantastic framework for doing integration work with web services. Often, coarse grained integration is enough.

    Come learn how to have your cake and eat it too.