New England Software Symposium
September 11 - 13, 2009 - Boston, MA
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 - September 11
| Ashland | Middlesex | Carlisle | Concord | |
|---|---|---|---|---|
| 12:00 - 1:00 PM | REGISTRATION | |||
| 1:00 - 1:15 PM | WELCOME | |||
| 1:15 - 2:45 PM |
|
|
|
|
| 2:45 - 3:15 PM | BREAK | |||
| 3:15 - 4:45 PM |
|
|
|
|
| 4:45 - 5:00 PM | BREAK | |||
| 5:00 - 6:30 PM |
|
|
|
|
| 6:30 - 7:15 PM | DINNER | |||
| 7:15 - 8:00 PM | Keynote: Busy Developer's Guide to Iconoclasm by Ted Neward | |||
Saturday - September 12
| Ashland | Middlesex | Carlisle | Concord | |
|---|---|---|---|---|
| 8:00 - 9:00 AM | BREAKFAST | |||
| 9:00 - 10:30 AM |
|
|
|
|
| 10:30 - 11:00 AM | BREAK | |||
| 11:00 - 12:30 PM |
|
|
|
|
| 12:30 - 1:30 PM | LUNCH | |||
| 1:30 - 3:00 PM |
|
|
|
|
| 3:00 - 3:15 PM | BREAK | |||
| 3:15 - 4:45 PM |
|
|
|
|
| 4:45 - 5:45 PM | BIRDS OF A FEATHER SESSION | |||
Sunday - September 13
| Ashland | Middlesex | Carlisle | Concord | |
|---|---|---|---|---|
| 8:00 - 9:00 AM | BREAKFAST | |||
| 9:00 - 10:30 AM |
|
|
||
| 10:30 - 11:00 AM | MORNING BREAK | |||
| 11:00 - 12:30 PM |
|
|
|
|
| 12:30 - 1:15 PM | LUNCH | |||
| 1:15 - 2:15 PM | EXPERT PANEL DISCUSSION | |||
| 2:15 - 3:45 PM |
|
|
|
|
| 3:45 - 4:00 PM | BREAK | |||
| 4:00 - 5:30 PM |
|
|
|
|
By Ted Neward
History is littered with the stories of iconoclasts--people who truly stood out as pioneers, lateral thinkers, and in some cases, outright heroes--and their successes and failures. From the baseball management vision of Branch Hickey to the glassblowing vision of Dale Chihuly to the engineering design vision of Steve Jobs, iconoclasts have changed our world in subtle and profound ways, sometimes loudly, sometimes quietly.
For an industry that seems so ripe and so rife with "special personalities", it would seem that programming is tied up deeply with iconoclasm. But what defines the iconoclast, what demarcates the "true" iconoclast from the mere pretender, and how can we use the characteristics of the iconoclast to change our own immediate surroundings for the better?
By Ted Neward
Permissions, policy, SecurityExceptions, oh my! The Java platform is a rich and powerful platform, complete with a rich and powerful security mechanism, but sometimes understanding it and how it works can be daunting and intimidating, and leave developers with the basic impression that it's mysterious and dark and incomprehensible. Nothing could be further from the truth, and in this presentation, we'll take a pragmatic, code-first look at the Java security platform, including Permissions, the SecurityManager and its successor, AccessController, the Policy class and policy file syntax, JAAS, and more.
For an intermediate-level audience.
By Ted Neward
So you know the platform security model, and now you want to use it in new and interesting ways, like creating a custom Policy implementation, a custom Permission, or create a custom security context in which code will execute. Perhaps you even wish to make certain objects accessible only to those with the right permissions, or cryptographic key. Nothing could be easier, despite Java security's reputation as a dark and arcane place.
In this presentation, we'll pick up where the "Platform Security" talk leaves off, and demonstrate how to engage the security model of the JVM at a much deeper level, regardless of your favorite programming language: Java, JRuby, Groovy, Scala, ....
Prerequisite: The Busy Java Developer's Guide to Platform Security
By Ted Neward
For so many Java developers, the java.util.* package consists of List, ArrayList, and maybe Map and HashMap. But the Collections classes are so much more powerful than many of us are led to believe, and all it requires is a small amount of digging and some simple exploration to begin to "get" the real power of the Collection classes.
In this presentation, Java developers will see the basic breakdown of the Collection API designs, the relationship of the interfaces to the implementations, how to create a new Collection implementation, and how the new Collections introduced as part of JSR-166 (the concurrency JSR) and Java6 make their programming lives easier.
By Ted Neward
Even though the Java 7 JSR has yet to be formed, some interesting things are beginning to emerge from Sun about what Java7 may include when its formal release contents are finally made public.
In this presentation, we'll examine some of the forthcoming details, including some of the JSR-166 "add-ons" like the Fork/Join framework, some of the proposals for extensions to the JVM to support dynamic languages, and the so-called "closures" proposals circulating around.
By Mark Richards
One way to stop a conversation dead while at a party or gathering is to mention you are a software architect. Why? Because it takes about an hour (complete with Powerpoint slides) to explain what you do for a living. By then the person you are talking to is so bored they would rather sit in a corner licking nine-volt batteries. The problem is that no one inside or outside our industry really knows what a software architect is or what they do. In this highly interactive (and slightly humorous) session we will take a deep dive into the role a software architect plays in the IT industry. We will explore the characteristics an architect needs to have, and the elements that make a good architect and a bad architect. Through amusing antidotes and real-world examples, we will see how to become an effective software architect and help shape the industry in terms of the role and title of software architect.
Agenda
During the introduction we will talk about the roles an architect plays, architect certification, and the decisions an architect typically makes. We will then take a deep dive into the qualities of a software architect, including Leadership and Communications, Technical Knowledge and Breadth, Domain Knowledge, and Methodologies. Interspersed into the mix will be some amusing anecdotes of my experiences as an architect, with a few jokes and humor thrown in for good measure
Prerequisite: None
By Mark Richards
In the book "97 Things Every Software Architect Should Know" (O'Reilly, 2009) I wrote about the importance of design patterns as a useful means of communication between architects and developers. Equally important to patterns is an understanding of AntiPatterns - things that we repeatably do that produce negative results. AntiPatterns are used by developers, architects, and managers every day and are one of the main factors that prevent progress and success. In this session we will look at some of the more common and significant development and architecture antipatterns. Through coding and design examples, you will see how these antipatterns emerge, how to recognize when the antipattern is being used, and most importantly, how to avoid them. By attending this session, you will be part of a movement to reduce the AntiPattern catalog from hundreds of entries to only a few.
Agenda
- What are anti-patterns?
- Factors that cause anti-patterns
- Common software and architecture anti-patterns
I have selected 7 of the most common anti-patterns I see continually in the industry and in my travels. We will be going into the details of each of these anti-patterns.
Prerequisite: None
By Mark Richards
In previous years I have given sessions related to my book "Java Transaction Design Strategies", where I have reviewed the basics of programmatic and declarative transactions and outlined the basic patterns described in the book. In this new session for 2009 I will focus on some of the pitfalls encountered while dealing with transactions and then how to develop an effective transaction strategy. I will start this session by describing and illustrating some of the common pitfalls I continue to see in both Spring and EJB. I will then describe four common transaction strategies you can use and implement, including a transaction strategy for high-speed transactions, a transaction strategy for client orchestration, a transaction strategy for use with API's, and finally a strategy for highly concurrent environments.
Note: This session assumes you know a little bit about transactions and have been using them in either Spring or EJB. It is not intended to be an introductory session on how transactions work. You can obtain a free PDF download of my transaction book at http://www.infoq.com/minibooks/JTDS to quickly come up to speed with transactions.
Agenda
- Introduction
- Common Transaction Pitfalls
- API Transaction Strategy
- Client Orchestration Transaction Strategy
- High Concurrency Transaction Strategy
- High Speed Transaction Strategy
Prerequisite: Java, Spring or EJB; some knowledge of transactions and JTA.
By Mark Richards
There's no doubt about it - messaging is quickly becoming a standard part of most application architectures, particularly as more and more companies struggle to find ways to integrate heterogeneous environments due to mergers, acquisitions, or to streamline existing application portfolios. The Java Message Service (JMS) API allows Java applications to implement messaging using a standard API, therefore removing the dependency of any particular messaging provider. In this introductory session we will take a look at the basics of messaging and the JMS API. I will start by discussing the different messaging models, the structure of a basic JMS message, and the JMS API interfaces and how they interrelate. Then through interactive coding I will show the basics of sending and receiving messages using the point-to-point messaging model and how to do request/reply processing. NOTE: this session is meant to be an introduction to messaging and JMS - no prior JMS or messaging experience is needed for this session.
Agenda:
- Messaging Introduction
- JMS Message Types
- Primary JMS Interfaces
- Configuring Queues and Topics
- Sending and Receiving Messages
- Request/Reply Messaging
Prerequisite: None
By Mark Richards
This session covers some of the more advanced features of JMS messaging, and is intended for those who are familiar with JMS and messaging in general. Some of the topics I will be covering in this session include message grouping (where I will demonstrate sending a large JPG image using messaging), transacted sessions, client-based acknowledgement, and some various messaging design considerations and things to watch out for from a design and coding perspective. I will be doing live coding demonstrations to illustrate the techniques described in this session. Although this session is entirely JMS provider agnostic, I will be using ActiveMQ, a popular open source JMS provider, during the live coding demonstrations.
Agenda
- Details behind the acknowledgement modes
- Message grouping / sending images and documents
- Transacted sessions
- JMS Design Considerations
- Common Messaging Pitfalls
Prerequisite: Some knowledge of messaging and JMS would be helpful
By Nathaniel Schutta
Thanks to Ajax, JavaScript is cool again and developers are taking a second look at this much maligned language.
This session will give you an overview of this misunderstood language as well as opening your eyes to some of the excellent tools available to ease the pain of developing in this dynamic language.
By Nathaniel Schutta
We've all used web applications that had us screaming at their creators - unfortunately sometimes we're the ones being cursed. Believe it or not, there are some simple steps we can take to ensure that our users have a great experience.
We'll talk about the role of testing, easy ways to make a web site perform as well as where Ajax can help give a richer experience.
By Nathaniel Schutta
Being on a high performing team is a transcendent experience - unfortunately, many of us find more dysfunction than function. In this talk, we'll take a look at some of the common issues that face teams and discuss some ways of working towards a happy crew.
Being on a high performing team is a transcendent experience - unfortunately, many of us find more dysfunction than function. In this talk, we'll take a look at some of the common issues that face teams and discuss some ways of working towards a happy crew.
By Nathaniel Schutta
The single most important tool in any developers toolbox isn't a fancy IDE or some spiffy new language - it's our brain. Despite ever faster processors with multiple cores and expanding amounts of RAM, we haven't yet created a computer to rival the ultra lightweight one we carry around in our skulls - in this session we'll learn how to make the most of it. We'll talk about why multitasking is a myth, the difference between the left and the right side of your brain, the importance of flow and why exercise is good for more than just your waist line.
The single most important tool in any developers toolbox isn't a fancy IDE or some spiffy new language - it's our brain. Despite ever faster processors with multiple cores and expanding amounts of RAM, we haven't yet created a computer to rival the ultra lightweight one we carry around in our skulls - in this session we'll learn how to make the most of it. We'll talk about why multitasking is a myth, the difference between the left and the right side of your brain, the importance of flow and why exercise is good for more than just your waist line.
By Venkat Subramaniam
Domain Specific Languages (DSLs) are languages targeted at a particular problem and domain. They have context and are fluent. They help users of applications at various levels to easily communicate with your application. Developing DSLs, however, are not easy. You could easily get dragged into using parsers and tools with steep learning curve.
In this presentation, we will look at various options to create DSLs on the Java platform. We will focus on external DSLs–these give you the absolute flexibility to chose syntax, but involve the most work as well. We will look at various tools and techniques that can ease this development effort.
By Venkat Subramaniam
Java is a well established language, that has been around for more than a decade. Yet, programming on it has its challenges. There are concepts and features that are tricky. When you run into those, the compiler is not there to help you.
In this presentation we will look at various concepts that you will use in general programming with Java. We will discuss the issues with those and how you can improve your code. We will look at concepts you can do better and those you should outright avoid.
By Venkat Subramaniam
Scala is a static fully object-oriented, functional language on the JVM. While taking advantage of the functional aspects, you can continue to make full use of the powerful JVM and Java libraries.
In this presentation we will take a in depth look at what Scala is, its strengths, weaknesses, and why, when, and where you'd use it on your applications.
By Venkat Subramaniam
Projects often start out simple, but soon become complex and turn into a lose cannon. Organizations are struggling to maintain and evolve software. Poor code quality is a significant part of that problem. Improving the quality of code is critical to success of enterprise projects.
In this presentation we will discuss ways to identify code smell. We will discuss several
code smells and how to clean it up. We will also discuss proactive ways to avoid that smell
in the first place.
By Venkat Subramaniam
Testing is a key ingredient to the success of a project. However, testing becomes awfully hard when your application deals with dependencies and that is often the reality.
In this presentation we will discuss how to approach testing when the code has dependencies. We will discuss tools, techniques, languages, and principles that can help decouple, mock, and help us effectively test your application code.
By Venkat Subramaniam
In this presentation we will take a quick walk though the issues with concurrency and how the solutions provided in Scala and Clojure help address those.
The gaining popularity of multi-core processors has rekindled the
concurrency question: How do you effectively implement multithreaded
applications on the Java platform? The familiar approach in Java is to
create threads and to manage access to shared mutable state using
synchronized locks. This approach to concurrency is fraught with hard work
and uncertainties. Have you marked the appropriate methods synchronized,
did you decorate the relevant fields volatile, did you properly construct
the mutually exclusive regions of code, and is there a potential for
deadlock lurking in the code.
In this talk you'll learn about alternate ways to tackling concurrency on
the JVM. One approach i
By Craig Walls
In this session, I'll lead a guided tour through the latest that Spring has to offer. Whether you're a Spring veteran or a Spring newbie, there will be something new for nearly everyone.
It's been 8 years since Spring 1.0 was released. In that time it has gone from a modest open-source project to being a de facto standard Java application framework. Now, as Spring enters its 8th year, it continues its attack on Java complexity, packed with many new features such as:
First-class REST support
A new expression language
More options for annotation-driven bean wiring
Bean profiles
Declarative caching abstraction
Enhanced Java-based configuration
A new "c:" namespace
Unified property management
And much more
In this session, I'll lead a guided tour through the latest that Spring has to offer. Whether you're a Spring veteran or a Spring newbie, there will be something new for n
By Craig Walls
Writing tests is more than just writing JUnit test cases and hoping that they'll pass when your project is built. If you want assurance that your code is sound and provides the desired functionality, then you'll want to test it from every angle and run those tests as frequently as possible.
In this session, we'll look at a few testing tools that you may not be all that familiar with, including:
Infinitest : A continuous testing tool that reports test failures almost as quickly as you can break them.
Mockito : A relatively new tool for mocking objects in tests.
Concordion : A framework for writing FIT-like functional specifications, without the hassles of FIT.
jqUnit and JSTester : A xUnit-like framework for testing JavaScript.
Selenium : A framework for in-container testing of web applications.
If you're ready to elevate your testing prowess to the next level, come see how these tools can help.
By Craig Walls
In this session, we'll explore modular web application development using Spring-DM and OSGi. I'll dispel the myth that OSGi is hard and show you tips and tricks that make Spring-DM and OSGi development easy.
WAR files, the workhorse standard deployment unit for Java web applications, has been looking a little portly for a long time. Most WAR files contain not only servlets and JSPs, but are usually well-endowed with static content (such as CSS, JavaScript, and images), middle and backend support classes, and a WEB-INF/lib directory chock-full of third party libraries. Even simple web applications can carry around several megabytes worth of baggage.
Monolithic WAR files present some practical issues, including:
- Every WAR file carries its own copy of embedded libraries, increasing the footprint of each web application.
- Parallel development of application modules is hindered, as all module
By Craig Walls
Spring 3.0 introduced the Spring Expression Language (SpEL), an extremely powerful yet succinct way to wire non-trivial values into Spring beans. In this presentation, we'll explore SpEL in great detail and see how SpEL opens up a whole new realm of bean wiring possibilities.
Spring's brand of dependency injection is quite awesome. But there are times when simple bean references and static values won't cut it. Sometimes it makes more sense to wire bean properties with values that are evaluated dynamically at runtime.
That's where the Spring Expression Language (SpEL) comes in. SpEL is one of the most interesting of the many new features in Spring 3.0. With SpEL you can succinctly wire in values derived...
...from system properties
...mathematically
...from the values of other bean properties
...from the results of static methods
...from almost anything you can conjure up
Previously, most of these types of wiring could only be accomplished with more XML confi
By Scott Davis
"XML is like violence: if it doesn't solve your problem, you aren't using enough of it." (Anonymous)
XML is everywhere. Whether you are dealing with local configuration files (web.xml, struts-config.xml) or remote web services (SOAP, REST, RSS, Atom), the modern software developer needs to be able to request, slice, and dice XML with ease. That requires a set of razor-sharp tools that reduce the inherent complexity of the problem, not multiply it. Once you see XML tremble in fear at the awesome power of Groovy, you'll wonder what you ever did without it.
In this talk, we look at various Groovy tools to create, parse, and export XML. To read in XML, we'll explore the XmlSlurper and the XmlParser. To write out XML, we'll use the MarkupBuilder, StreamingMarkupBuilder, and the XmlNodePrinter. We'll go beyond simple Plain Old XML (POX) and demonstrate using namespaces, CDATA blocks, and more.
By Scott Davis
"The proof of the pudding is in the eating. By a small sample we may judge of the whole piece." (Miguel de Cervantes Saavedra)
Most Grails tutorials demonstrate how easy it is to build simple CRUD (Create/Retrieve/Update/Delete) applications. While skinning a database with a web front-end is undeniably one beneficial aspect of Grails, it isn't the only thing Grails is good for. As you'll see here, Grails can be used to build a wide variety of web applications. You won't see a single HTML table with "edit" and "delete" links, I promise.
In this talk, we look at a variety of Grails applications that go beyond the simple CRUD metaphor -- blogs, wikis, maps, portals, and more.
By Scott Davis
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction." (Albert Einstein)
REST and Resource-Oriented Architecture (ROA) are popping up in technical discussions more and more frequently. Here, you'll see practical examples of adding RESTful web services to your Grails application.
In this talk, we look at the native support for REST that Grails offers on the server side. We'll also take advantage of the networking and XML strengths of Groovy to build out a simple but powerful REST client.
By Scott Davis
"The challenge of modernity is to live without illusions and without becoming disillusioned." (Antonio Gramsci)
There are plenty of sarcastic "Web 2.0" checklists out there -- be perpetually in BETA, when in doubt add rounded corners, etc. While we can all laugh at the superficial aspects of the Web 2.0 revolution, there are plenty of serious aspects to it as well. Is your website mash-up friendly or hostile? Do you tell your visitors when things change (via RSS or Atom syndication), or do you expect them to check in daily for updates? Is your website a silo or a part of a larger ecosystem?
In this talk, we discuss what makes a "modern shiny Web 2.0" website look the way it does. But we go beyond simple look and feel as we catalog the common features in modern websites and show you how to implement them yourself.
By Scott Davis
"Tests don't break things; they dispel the illusion that it works." (Anonymous)
In this era of "Test-First" and "Test-Driven" development, the modern software engineer knows that testing is no longer an optional part of the process. You need to have the best tools at your fingertips: a set of utilities that maximize your results with a minimum of effort. Groovy offers Java developers an optimal set of testing tools.
In this talk, we use EasyB to gather user stories as executable documentation. We look at GroovyTestCases -- a drop-in replacement for JUnit TestCases that expand the pool of helpful assertions. We'll explore mocking and stubbing with Groovy. And we'll finally go public with Groovy's privacy "issues".
By David Geary
This session introduces JSF 2.0 fundamentals, with emphasis on new features in JSF 2.0.
JSF 2.0 has been a long time coming, but now that it's here, it boasts an impressive set of improvements over JSF 1.X, including standardization of Facelets as the default display technology, a much richer event model, and built-in support for Ajax. Come to this session to see how you can use Java's standard web application framework to create industrial-strength web applications.
This session will cover the following features of JSF 2.0:
Resources
Using Groovy
System events
Bookmarkable views
Templating
Prerequisite: Familiarity with JSF, or other component-based frameworks
By David Geary
This session covers two of the most important features of JSF 2.0: composite components and built-in Ajax.
JSF is a component-base framework. Components are a powerful reuse mechanism, but they were rendered nearly inconsequential in JSF 1.X, because components were so difficult to implement.
JSF 2.0 makes implementing cusomt components easy with a new feature that builds on Facelets and the new resource capabilities in JSF 2.0: composite components. This session shows you how to implement your own components with JSF 2.
Additionally, this session covers the built-in Ajax that comes with JSF 2.0. Come to this session to see how you can easily implement custom components with integrated Ajax capabilities.
Prerequisite: Familiarity with JSF, or other component-based frameworks. Familiarity with Ajax. This session builds on the JSF 2.0 Introduction talk, so it is helpful, although not required, if you attend the intro talk before coming to this session.
By David Geary
An introduction to Flex for Java developers.
Want to develop expressive web applications? Them come to this session and see what Adobe's Flex is all about. Flex has lots of similarities to Java-based web development, so you'll find it easy to learn, and powerful to use. Come to this session if you want to take your web application user interface to the next level.
This session will cover:
An introduction to Flex
ActionScript, HTTPService, and data binding
Drag and drop
Components
View state
Integrating with Java back ends
Prerequisite: Familiarity with Flex and at least one other web application framework
By David Geary
Learn to implement web applications with GWT.
Google Web Toolkit lets you create killer Java-based web applications using familiar Swing and AWT idioms. This session will introduce you to GWT and teach you the fundamentals of using this cutting-edge framework for creating rich user interfaces that run in a browser.
For most of this session, and the session that follows--GWT fu, Part 2--I will live code a desktop-like, ajax-based, web application that illustrates the awesome power of GWT. In this session, I will cover the following topics:
Widgets
Remote procedure calls and database access
Event handling
Ajax testing
Prerequisite: Familiarity with a component-based framework, preferably a desktop application framework
By David Geary
Learn to do amazing stuff with GWT.
This session picks up where GWT fu, Part 1 left off. In this session, I will continue live-coding the Places application. In taking the Places application to its exciting conclusion, I will cover the following advanced aspects of GWT:
Dialog boxes
Sinking events
DOM elements
Working with HTML
Modules
Image loading and busy cursors
Event previews
Timers
In this session, I focus primarily on implementing a viewport widget in a custom module, and using that widget in the Places application. When I'm done, we'll have a very cool web application that shows the awesome potential of Google Web Toolkit
Prerequisite: GWT fu, Part 1 is not a prerequisite for this session, but it will help if you have some familiarity with GWT.
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 t
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 sor
By Brian Goetz
Many developers believe that web frameworks "take care of" the details of concurrency, but this is only because most web applications make limited use of state. Stateful web applications also need to be careful about hazards like races. This talk will use the Java Memory Model to analyze common patterns of state management in web applications.
This talk builds on the concepts developed in The Java Memory Model to explore concurrency pitfalls in typical web and desktop Java applications. We'll see how common patterns for maintaining state in Java applications expose subtle vulnerabilities, and explore design techniques for building more robust applications as well as techniques for auditing typical server-side code for potential concurrency hazards.
Prerequisite: The Java Memory Model
By Brian Goetz
To many developers, garbage collection is black magic. Accordingly, there are is a lot of conflicting advice about what is good or bad for the garbage collector. In this talk, I look at how garbage collection is implemented in the HotSpot VM, and techniques for writing programs that exhibit good garbage collection behavior. Surprisingly, many of these techniques coincide with writing good, clean code.
This presentation covers:
- Basics of garbage collection in HotSpot
- Where the performance costs are in garbage-collected systems
- Coding techniques for reducing GC costs
- Finalization
- Techniques for tracking down "memory leaks"
By Brian Goetz
Ever wondered what happens to your bytecodes when they're executed by a Java Virtual Machine? This talk provides a peek "under the hood" of modern JVMs, exploring dynamic compilation, speculative optimization, garbage collection, and some hardware-specific optimizations.
While the earliest JVMs were interpreted, and as such got a bad rap for performance, the VM approach to program execution provides many avenues for optimization that are not possible in traditional, statically compiled languages. This talk attempts to give a sense of just what the JVM can do to squeeze extra performance out of typical Java programs.
A few important optimizations will be discussed in detail, using examples of
java code to show how the JVM makes common operations fast, or how it
transforms your program into something completely different that produces the same
result--in less time.
Topics include:
synchronization - why uncontended locks are (almost) free
compilation - h
By Stuart Halloway
Teams adopting agile should begin at a tactical level, but they shouldn't end there. The Agile Manifesto operates at many different levels. Learn to apply the principles of agile at a strategic level. Otherwise you can have a great agile ground game and still lose.
Many programming teams now embrace agile at the tactical level, which is the right place to begin. Applying the ideas in the Agile Manifesto, good teams embrace practices like
story point estimation
burndown tracking
technical expertise
behavior-driven development
daily standups
pair programming
continuous integration
spiking
refactoring
customer always available
well-understood roles
The Agile Manifesto can be applied at a strategic level, too. However, the tensions are different. Feedback cycles are longer, objectives and results are less clear, and roles and relationships are unknown or changing. In this talk you will learn how
By Stuart Halloway
Agile teams manage change and risk by apapting. But to adapt, you must identify opportunities for change and take them. Retrospectives are a fun, cost-effective way for your team to learn and change.
In this talk, we will begin by conducting a mini-retrospective, so that you get a feel for the basic process. Next, we will review the core principles of a retrospective, and use these principles to compare and contrast a variety of retrospective activities from the book Agile Retrospectives.
Next, we will explore a few retrospective activities in greater detail. These are some of the favorites that we use regularly at Relevance:
team radar
prioritize with dots
learning matrix
Finally, we will talk about how to tune retrospectives to the needs of your team at a specific moment in time. No two retrospectives are alike, and an experienced facilitator adds value by adapting a retrospective
By Stuart Halloway
In this talk, we will explore and compare four of the most interesting JVM languages: Clojure, Groovy, JRuby, and Scala. Each of these languages aims to greatly simplify writing code for the JVM, and all of them succeed in this mission. However, these languages have very different design goals. We will explore these differences, and help you decide when and where these languages might fit into your development toolkit. For more information see http://blog.thinkrelevance.com/2008/9/24/java-next-overview.
As we reach the middle of our second decade of Java experience, the community has learned a lot about software development. Many of our best ideas on how to use a Java Virtual Machine (JVM) are now being baked into more advanced languages for the JVM. These languages tend to provide two significant advantages:
They reduce the amount of ceremony in your code, allowing you to focus on the essence of the problem you are solving
They enable some degree of functional programming style. Think of it as a dash of verb-oriented programming to spice up your noun-oriented programming.
In this talk, we will explore and compare three of the most interesting new JVM languages: Clojure, Groovy, JRuby, an
By Stuart Halloway
Find out why Clojure is Java.next:
- Clojure provides clean, fast access to all Java libraries.
- Clojure provides all the low-ceremony goodness you know and love from dynamic languages such as Ruby and Python.
- Clojure includes Lisp's signature feature: Treating code as data through macros.
- Clojure's emphasis on immutability and support for software transactional memory make it a viable option for taking advantage of massively parallel hardware.
Clojure is a dynamic programming language for the Java Virtual Machine, with a compelling combination of features:
Clojure is elegant. Clojure?s clean, careful design lets you write programs that get right to the essence of a problem, without a lot of clutter and ceremony.
Clojure is Lisp reloaded. Clojure has the power inherent in Lisp,
but is not constrained by the history of Lisp.
Clojure is a functional language. Data structures are immutable, and most functions are side-effect free. This makes it easier to write correct programs, and to compose large programs from smaller ones.
Clojure simpli?es concurrent programming. Of course, Java itself has pretty good concurrency support. Bu
By Mark Johnson
The factory patterns and callbacks have been around for a long time as a technique to provide flavor specific code variations. But they are awkward and hard to update. Enter Groovy closures. Imagine having the ability to inject different coding flavors using code closures. If you need a different flavor, then just pass a different code block. Now imagine that all of this works on the JVM!
This session will use hands on examples to explore how to use and create closures. In addition, during the discussion we will also discuss when it is appropriate and inappropriate to use closures in your applications.
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. This presentation will cover 10 principles of software risk management necessary for project success.
During the discussion we will cover topics such as pragmatic approaches to risk capture, getting past resistance to publish risks, prioritizing risks, methods of documenting and monitoring risks to name just a couple. While this presentation is targeted to the Technical Lead and Development managers, it should also be of interest to developers and architects.



