Speakers
- Dan Allen
- Aaron Bedra
- Tim Berglund
- Rohit Bhardwaj
- David Bock
- Stevie Borne
- Jeff Brown
- James Carr
- Scott Davis
- Jeremy Deane
- Keith Donald
- Michael Easter
- Robert Fischer
- Neal Ford
- Brian Gilstrap
- Andrew Glover
- Brian Goetz
- Stuart Halloway
- David Hussman
- Mark Johnson
- Dave Klein
- Scott Leberknight
- Tiffany Lentz
- Howard Lewis Ship
- Chris Maki
- Matthew McCullough
- Alex Miller
- Ted Neward
- Michael Nygard
- Pratik Patel
- Mark Richards
- Brian Sam-Bodden
- Srivaths Sankaran
- Nathaniel Schutta
- Aleksandar Seovic
- Ken Sipe
- Brian Sletten
- Matt Stine
- Venkat Subramaniam
- Burr Sutter
- Vladimir Vivien
- Mark Volkmann
- Craig Walls
- Richard Worth
Howard Lewis Ship
Creator of Apache Tapestry
Howard is the author of Tapestry in Action for Manning Publications (which covers Tapestry 3.0). He lives in Portland, Oregon with his wife Suzanne, a novelist, and his son, Jacob.
Howard is an independent consultant, offering Tapestry training, mentoring and project work as well as training in Clojure.
Blog
Live Service Reloading in Tapestry 5.2
Posted Monday, March 15, 2010
A common question I get during Tapestry training sessions is: Why can't Tapestry reload my services as well as my pages and components?. It does seem odd that I talk about how agile Tapestry is, with the live class reloading, and how nicely OO more »Procrastination and JavaOne 2010: See you in 2011!
Posted Monday, March 15, 2010
Well, that's what I get for waiting until the la more »Why Eclipse leaves me wanting
Posted Thursday, March 11, 2010
I think I've come to understand why Eclipse leaves me always feeling a bit frustrated. Yes, it is more stable than IDEA, uses less memory, has some documentation, and a lot of acc more »Java Champion
Posted Monday, March 8, 2010
You might call it petty, you might call it vain, but I've aspired to be recognized as a Java Champion for the last couple of years. The process by which you are selected for this is a bit secretive, but I've finally gotten the nod and joined the more »March of Progress
Posted Monday, February 22, 2010
Or should that be "Late February of Progress". I have to say I'm a bit envious right now of Rich more »Evolving the Meta Programming in Tapestry 5
Posted Friday, February 19, 2010
I've set a goal of removing Javassist from Tapestry 5 and I've made some nice advances on that front. Tapestry uses Javassist inside the web framework layer to load and transform component classes. All that code is now rewritten to updated API more »Live reloading of Tapestry services?
Posted Thursday, February 11, 2010
During today's Tapestry Training at SkillsMatter, the question about live class reloading for Tapestry services came up. Now, my normal response is to talk about class loaders, and mysterious class-cast exceptions it would cause, and the need more »Devoxx: Clojure Talk Now Available
Posted Thursday, February 11, 2010
A full video of my Devoxx 2009 talk, Clojure: Functional Concurrency for the JVM is now available: The talk runs about 40 minutes and does not include the questions and answers from the end. You can see I was just a touch jetla more »Paris Clojure Talk
Posted Monday, February 8, 2010
I had a terrific time spreading the word about Clojure tonight, followed by some fun and spirited discussions over dinner. People are intrigued by Clojure, even as they struggled with a strategy for bringing it into their organization. Clojure more »Commited to Tapestry
Posted Monday, February 8, 2010
Quite a few people have commented on Ten Years of Tapestry, many to note some of the many other great projects being built with Tapestry as a foundation. We keep a list of tutorials and extensions on the Tapestry home page, with many other sit more »Ten Years of Tapestry
Posted Thursday, February 4, 2010
I recently realized that the first prototype of Tapestry was written ten years ago! It all started as a home project in my living room, with the original inspiration coming from some brief exposure to WebObjects. Even the "new" codebase, Tape more »Presentations
Introduction to Tapestry 5
Tapestry 5 is a complete rewrite of Tapestry from the ground up. It takes everything good about Tapestry and cranks the volume up to eleven, while removing the frustrating parts of using Tapestry. This session takes the wraps off this new and innovative t more »Guerilla Unit Testing Part 1: TestNG
Part one (of two) covers the TestNG unit testing framework, and shows how it integrates with Selenium (for integration testing). more »Guerilla Unit Testing Part 2: The Weird and Wonderful EasyMock
In part two (of two) we go in depth on EasyMock, the weird and wonderful tool for creating mock objects on the fly. We'll do a good bit of live coding as we examine how to use, tame and extend this powerful tool. more »Inversion of Confusion: What's up with all these containers?
A guide to the concepts behind Inversion of Control and a discussion of the similarities and differences between the best known of the containers, including Spring, HiveMind, Plexus, T5 IoC and Guice. more »Pragmatic Patterns with Tapestry 5 IoC
Everyone likes the Gang of Four design patterns, but it's not always clear just how to make use of them in your day to day coding efforts. Hidden inside Tapestry 5 is an Inversion of Control (IoC) container that is structured around several common patter more »Groovy Tapestry
Groovy is a great programming language for removing the programming clutter of the Java programming language and getting to the essence of your code. Tapestry is a great web framework for removing the clutter of web development and getting to the essenc more »Advanced Tapestry 5
Go a bit deeper into Tapestry 5 and see the challenges and solutions you'll face when building real applications. This includes integration with Hibernate, managing server-side state, creating reusable components and libraries, and integrating and encaps more »Clojure: Functional Concurrency for the JVM
Talk about strange bedfellows: what happens when you mix one part Lisp (one of the oldest computer languages), one part Java (so young, yet so well adopted), a healthy serving of functional programming, and add a state-of-the-art concurrency layer on top? more »Clojure Deep Dive
Clojure packs a tremendous amount of power into a very small package. Clojure inherits the power and elegance of Lisp, and in this session we'll explore the features that make Clojure so attractive: macros, multimethods, meta-data, and an overview of Cloj more »Relax your data with CouchDB
CouchDB is serious software heresy: ditch your relational database, ditch rows and tables and foreign keys, ditch Hibernate and ORM. Ditch SQL and JDBC. Replace it with "semi-structured" data stored as JSON (JavaScript Object Notation). more »Brew up a rich web application with Cappuccino
Cappuccino is a rich web framework that all but redefines what's possible in the web browser. It brings the heritage and richness of the Apple Objective-C language and runtime directly into the browser, as Objective-J (Objective JavaScript). Cappuccino ap more »Exploring Clojure's Libraries
Clojure is a functional programming language, and comes packaged with functions galore. Add in Clojure Contrib (the community library) and you end up with an overwhelming set of options. We'll explore many of the key functions and highlight the ones you r more »Tapestry 5 is a complete rewrite of Tapestry from the ground up. It takes everything good about Tapestry and cranks the volume up to eleven, while removing the frustrating parts of using Tapestry. This session takes the wraps off this new and innovative technology, showing off important new features such as live class reloading (the ability to change your Java classes and continue using the application without interruption or redeployment), the simplified coding model, and the total lack of XML. This session is of interest to those already using Tapestry 4, and those new to Tapestry and ready to jump on the bandwagon.
Tapestry 5 really does take everything great about Tapestry and crank it up, all with the goal of making your job as a web developer easier. Being able to change your classes at will within a running application is just the tip of the iceberg; Tapestry 5 is designed to break down the barriers to developer productivity by simplifying every aspect of creating a web application.
Tapestry 4's base classes and abstract methods are all gone, replaced with pure POJOs and a handful of annotations. All the XML configuration of Tapestry has been removed as well. Tapestry 5 practices convention over configuration with a vengeance, introducing smart defaults and intelligent logic to let Tapestry do the right thing.
Part one (of two) covers the TestNG unit testing framework, and shows how it integrates with Selenium (for integration testing).
In part one of this two part session, we'll discuss the basics of unit testing and show how to use TestNG. We'll discuss how to use the tool, organize tests, and collect results, as well as integrate with IDEs, Ant and Maven. Lastly, we'll see advanced uses of TestNG combined with Selenium to automate integration testing within a test suite.
In part two (of two) we go in depth on EasyMock, the weird and wonderful tool for creating mock objects on the fly. We'll do a good bit of live coding as we examine how to use, tame and extend this powerful tool.
Unit testing with only gets you so far; even when you've refactored your code and hidden all your implementations behinds interfaces you are still stuck with the problem of testing the individual pieces. If you've hit this point and despaired, know that there are tools to help ... including the weird and wonderful EasyMock. We'll discuss unit testing in general, and how EasyMock is used to to generate mock objects, allowing you test each class in isolation. We'll be doing some live coding to show you step-by-step how to build up a unit test, interpret EasyMock's baffling error messages, and set yourself up for easy reuse of testing code.
A guide to the concepts behind Inversion of Control and a discussion of the similarities and differences between the best known of the containers, including Spring, HiveMind, Plexus, T5 IoC and Guice.
There's been a small explosion of IoC (Inversion of Control) containers over the last few years. It's not as confusing as the volume of web frameworks, but there is a lot of choices to be made. This session will identify the core features of an IoC container, and explain why using a container is such a powerful, enabling idea. We'll then cover some common cases, such as creating services with dependencies. Lastly, we'll discuss the pros and cons of each container, including how well they play with each other.
Everyone likes the Gang of Four design patterns, but it's not always clear just how to make use of them in your day to day coding efforts. Hidden inside Tapestry 5 is an Inversion of Control (IoC) container that is structured around several common patterns (Chain of Command, Strategy, Decorator and Filter Chain will be covered). This isn't academic navel-gazing ... this is about leveraging the common patterns so that you can write code you can easily test, and about creating frameworks and toolkits that can be easily extended.
We'll see how Tapestry uses these patterns, and go from there into how you can apply the same techniques to your own projects, resulting in better, cleaner, more testable code.
This session also serves as an introduction to the Tapestry 5 IoC container.
Groovy is a great programming language for removing the programming clutter of the Java programming language and getting to the essence of your code. Tapestry is a great web framework for removing the clutter of web development and getting to the essence of your application. Use them together and the whole is more, and more productive, than the sum of the parts!
We'll be using building and inspecting a Tapestry application written exclusively in Groovy: pages and components, Hibernate entities, and new services. We'll see all the advantages and skirt around a few minor pitfalls.
Go a bit deeper into Tapestry 5 and see the challenges and solutions you'll face when building real applications. This includes integration with Hibernate, managing server-side state, creating reusable components and libraries, and integrating and encapsulating JavaScript as components, and advanced customization of built-in components.
Tapestry is a rich environment for developing web applications; it manages all the busy work for you, but then gets out of your way. When building applications, you are frequently faced with challenges such as tracking what the user is up to, formatting, editing and validating data, or creating fancy JavaScript interfaces. We'll cover the tools Tapestry provides for all of these, and get a peek into Tapestry's holistic approach to building applications, and show how easy it is to build up libraries of components along the way.
Talk about strange bedfellows: what happens when you mix one part Lisp (one of the oldest computer languages), one part Java (so young, yet so well adopted), a healthy serving of functional programming, and add a state-of-the-art concurrency layer on top? That's Clojure, which "feels like a general-purpose language beamed back from the near future."
Clojure embraces functional programming with immutable data types and first class functions. It is fully interoperable with Java. Clojure's approach to concurrency includes asynchonous Agents, and Software Transactional Memory. Clojure is fast, elegant, dynamic, and scalable: a language for the future, today. This session introduces the challenges of concurrency. We then explore the nature and syntax of Clojure and show how Clojure bridges between the imperative programming style of Java and the functional programming world. Finally, we introduce the constructs in Clojure that support highly scalable, highly concurrent applications without locking or blocking.
Clojure packs a tremendous amount of power into a very small package. Clojure inherits the power and elegance of Lisp, and in this session we'll explore the features that make Clojure so attractive: macros, multimethods, meta-data, and an overview of Clojure's rich built-in library.
We'll also go into more detail about Clojure/Java interop, and explore Clojure's ability to create new Java classes on the fly, and take a look at Clojure's evolving "contrib" library.
Prerequisite: Clojure: Functional Concurrency for the JVM.
CouchDB is serious software heresy: ditch your relational database, ditch rows and tables and foreign keys, ditch Hibernate and ORM. Ditch SQL and JDBC. Replace it with "semi-structured" data stored as JSON (JavaScript Object Notation). CouchDB is a restful store from JSON documents, written in Erlang, that's fast, easy and replicated. The API is simple, RESTful HTTP requests. Find out why it might just be a great solution for your evolving data needs.
CouchDB takes a radical take on what it means to store information abandoning the constraints of tables, rows and third-normal form: CouchDB is modeled on the real world, where a document is entirely self contained. Without rows and tables, data can evolve easily over time, adding and changing document content almost at will.
CouchDB is written in Erlang, a popular functional programming language that is well known for its scalability and reliability. CouchDB databases can be replicated to any number of nodes and its basic design encompasses common problems with replication (such as conflicting updates). CouchDB's vision includes rich Ajax clients, in browser, communicating directly to CouchDB: a two tier solution.
Cappuccino is a rich web framework that all but redefines what's possible in the web browser. It brings the heritage and richness of the Apple Objective-C language and runtime directly into the browser, as Objective-J (Objective JavaScript). Cappuccino apps look and act like Desktop Mac OS X Applications -- a very high bar to set! In many ways comparable to Google Web Toolkit, Cappuccino is simpler and less obtrusive.
Like coding in JavaScript but hate the DOM? Cappuccino is for you; it replaces the rag tag DOM APIs with a slick, streamlined, cross-browser model based on the venerable AppKit libraries that power Mac OS X and the iPhone. It adapts Objective-C's syntax (itself derived from Smalltalk) to JavaScript, giving up nothing in the process. It gives great results quickly, and without all the gotcha's of traditional client JavaScript. We'll take a peek at a potential downside (debugging) and a huge upside (the upcoming Atlas interface builder).
Clojure is a functional programming language, and comes packaged with functions galore. Add in Clojure Contrib (the community library) and you end up with an overwhelming set of options. We'll explore many of the key functions and highlight the ones you really need day to day.
Of particular interest are Clojure's testing library, the pretty printing library and the monads library (don't be scared!) ... but once you pull back the covers, there is a tremendous amount in there! We'll focus on libraries and functions used day to day when building real applications and frameworks in Clojure.
Prerequisite: Clojure Deep Dive
Books
by Howard M. Lewis Ship
- The creator of Tapestry details how to use this new framework's components to create rich web-based GUIs using links, images, and HTML forms. The challenges of web application development are discussed, such as managing server-side state properly, application localization, and maintaining synchronization between the client web browser and the application server. At the same time, the benefits of a clean separation between presentation logic and business logic and how well Tapestry succeeds in keeping these two concerns apart are identified. Targeted to new Tapestry users and even developers new to creating web applications in general, this guide includes extensive notes on development "gotchas", including common Tapestry errors and how to fix them. Advanced techniques are covered as well, including creating entirely new components, integration with traditional servlet and JSP applications, and creation of client-side JavaScript. Finally, a complete J2EE application, the Virtual Library, is presented and analyzed in detail.