Speakers
- Matt Stine
- Brian Sletten
- Ken Sipe
- Nathaniel Schutta
- Pratik Patel
- Matthew McCullough
- Neal Ford
- Tim Berglund
- Peter Bell
- Craig Walls
- Venkat Subramaniam
- Kris Zyp
- Nicholas C. Zakas
- Andrew Wirick
- Chris Wilson
- James Williams
- Greg Wilkins
- Meghan Wilker
- Mike Wilcox
- Dustin Whittle
- Estelle Weyl
- Johnny Wey
- Eric Wendelin
- Rich Waters
- James Ward
- David Verba
- Tom Valletta
- Johannes Ullrich
- Tenni Theurer
- Etienne Studer
- Steve Souders
- Deryk Sinotte
- John Simone
- Scott Shattuck
- Bill Scott
- Matt Schmidt
- Dylan Schiemann
- Christian Schalk
- Brian Sam-Bodden
- Terry Ryan
- Alex Russell
- Rob Rusher
- Rick Ross
- Tom Robinson
- Torrey Rice
- Aza Raskin
- Nandini Ramani
- Matt Raible
- Jason Porter
- Vic Patterson
- Andy Painter
- Noah Paci
- Aaron Newton
- Mark Murphy
- Rebecca Murphey
- William Morris
- Eric Miraglia
- Eric Miller
- Steffen Meschkat
- Dustin Machi
- Nancy Lyons
- Kevin Lynch
- Andrew Lombardi
- Howard Lewis Ship
- Brian Leroux
- Brent Laster
- Seth Ladd
- Nik Krimm
- Kenneth Kousen
- Sean Kane
- Tim Kadlec
- Christopher Judd
- Bruce Johnson
- Denise Jacobs
- Bob Ippolito
- Kevin Hoyt
- Molly Holzschlag
- Josh Holmes
- Mike Heath
- Les Hazlewood
- Erik Hatcher
- James Harmon
- Patrick Haney
- Stuart Halloway
- Clint Hall
- Wesley Hales
- Kevin Hakman
- Aaron Gustafson
- Arun Gupta
- Nate Grover
- Mike Girouard
- Jesse James Garrett
- Raju Gandhi
- Thomas Fuchs
- Aaron Frost
- Judson Flamm
- Connie Finkelman
- Jon Ferraiolo
- Szczepan Faber
- Cal Evans
- Ben Ellingson
- Nicholas Eddy
- Scott Dietzen
- Gabriel Dayley
- Luke Daley
- Adrian Cole
- Roy Clarkson
- Patrick Chanezon
- David Chandler
- Ludovic Champenois
- Max Carlson
- Pete Campbell
- Bob Byron
- Thomas Burleson
- Michal Budzynski
- John Brinnand
- Ryan Breen
- Simone Bordet
- David Boloker
- David Bock
- Rey Bango
- Tom Ball
- Dan Allen
- Brad Abrams
Howard Lewis Ship
Creator of Apache Tapestry
Howard Lewis Ship is the creator and lead developer for the Apache Tapestry project, and is a noted expert on Java framework design and developer productivity. He has over twenty years of full-time software development under his belt, with over ten years of Java. He cut his teeth writing customer support software for Stratus Computer, but eventually traded PL/1 for Objective-C and NeXTSTEP before settling into Java.
Howard is respected in the Java community as an expert on web application development, dependency injection, Java meta-programming, and developer productivity. He is a frequent speaker at JavaOne, NoFluffJustStuff, ApacheCon and other conferences, and the author of "Tapestry in Action" for Manning (covering Tapestry 3.0). Lately, he's been dipping his toes into alternate languages, including Clojure.
Howard is an independent consultant, offering Tapestry training, mentoring and project work as well as training in Clojure. He lives in Portland, Oregon with his wife Suzanne, and his children, Jacob and Olivia.
Presentations
Modern Application Foundations: Underscore and Twitter Bootstrap
We're all increasingly in the business of writing richly interactive applications using HTML and JavaScript … that's a given. But the devil's in the details, and most applications get those details wrong. Building visually attractive applications that work in all browsers takes a lot of work ... and good as jQuery is, as more logic moves to the browser, something as sophisticated as jQuery is needed for data, not DOM, and that's Underscore.
Applications are moving from the server into the browser, and that can be a good, and rewarding, thing ... but compared to the rich infrastructure available to any Java program, what's available to JavaScript running in the browser is pretty anemic. jQuery is great at manipulating the DOM, but rich client applications do a lot more than that, and too often, this leads to lots of code and lots of bugs.
Underscore is your client-side infrastructure: a set of unobtrusive functional programming tools that can make your JavaScript slick, performant, readable ... and compatible with older browsers.
However, Underscore doesn't make your application look pretty: that's the job of Twitter's Bootstrap: a standard set of CSS rules that give your applications a modern "Web 2.0" look and feel. Bootstrap is developed by experts to look good across all the major browsers. We'll dive into how to use Bootstrap: how to get good looking results up quickly, how all the CSS classes work together, and how to get even better results using the bundled jQuery plugins.
Testing Web Applications with Geb
If you build web applications and cringe at the phrase "but how are we going to test it?" you're going to love Geb: the browser automation and testing tool. Geb is a Groovy framework for testing web applications: it builds on Selenium, but draws ideas from jQuery and elsewhere to make it productive and fun to test your applications in-browser.
Geb is rich with ideas to keep your tests clear, concise and maintainable. It is useful in all major testing frameworks: JUnit, TestNG, and Spock. We'll see how to navigate around the browser, clicking links, submitting forms, and verifying results. We'll also see Geb Pages and Modules, which allow you to define elements inside a page once, and reference them across many tests. Basically, Geb removes the excuses for not testing your web application, and that's a great thing!
Backbone.js: Run Your Application Inside The Browser
Follow the trends and you'll notice that, increasingly, web applications are running in the browser. That can be great news … until you have to write the JavaScript for all that client-side behavior. Fortunately, a new breed of client-side MVC frameworks have emerged, including Backbone.js. You still have controllers, models, and views … just in the browser.
Backbone might seem familiar, especially to Rails developers: it has the models, controllers, and views you'd expect in a server-side framework … but it all runs in place, inside the browser. The server ends up as the source & sink of data. We'll investigate the basics of using Backbone, how to create dynamic, interactive views, and how to get and save data. We'll see how concise and readable the JavaScript can be, especially when using CoffeeScript. Much of the complexity of modern web applications simply falls away when all rendering and client logic moves to the browser … as long as you have a proper backbone to hang that logic on.
CoffeeScript: JavaScript Elegantly Refactored
Over the last few years, JavaScript has gained popularity with ever increasing speed. It has gone from being the "Red Headed Stepchild" of programming languages (as described by its creator, Brendan Eich), coded in ten days flat, and now ubiquitous in browsers, on servers, and inside smart phones. JavaScript fluency is increasingly essential for anyone doing anything for the web, yet for all the advances in adoption, JavaScript is full of syntactic and behavior weirdness ... full of hidden gotchas, odd special cases, and counter intuitive idioms.
CoffeeScript is "a little language that compiles into JavaScript" . CoffeeScript syntax is pragmatic and elegant, borrowing ideas from Ruby, Python, and elsewhere. CoffeeScript tackles the problems in JavaScript, but leaves its roots intact. The end result is a language that is elegant, readable and something you'll look forward to coding in.
Sure, Google and many others have proven that you can accomplish amazing things in JavaScript: but that doesn't make the language any prettier, or any easier to code in. Ordinary JavaScript leaves you open to any number of trivial coding errors that can cause you lots of grief at runtime; a missing comma, an extra newline, and suddenly your code does something completely wrong.
CoffeeScript grafts a new syntax onto JavaScript that works better with JavaScript's fundamentally functional nature, such as list comprehensions, function binding and destructuring assignment. It also adds features that really quickly become dear to you, such as string interpolation, heredocs (multi-line strings), extended regular expressions, and a proper class system.
CoffeeScript also includes a fair number of wonderful heresies ... such as jettisoning the curly braces of the C language world in exchange for Python-style indentation. In CoffeeScript, every statement (even an if ... then) is an expression whose result can be stored, and every function returns a value.
Despite all these features; CoffeeScript is fully interoperable with JavaScript, so you can easily use it with jQuery, Underscore, or whatever other frameworks you have cooking: browser-side or server-side. And for all the cool stuff it adds, the mapping to JavaScript is close enough that debugging is not a great challenge.
Whether you dabble in a bit of client-side logic or are hip deep in NodeJS, you owe it to yourself to take a peek at this elegant language that lets you keep what you like about JavaScript and improves on everything that makes you want to pull your hair out!
AngularJS: HTML the way You Want It
Call it "single page" or "rich client", but modern web applications have advanced far beyond the "click this link and wait for the page to render" approach. Clients demand that pages react immediately to the user: no waiting allowed. Frameworks like jQuery and Backbone may let you manage the DOM and respond to events ... but AngularJS goes far past that: it lets you seamlessly marry your data objects, controllers, and the UI together gracefully and naturally ... or create your own HTML elements or attributes as needed. Rather than work with HTML the way the W3C provides it, you can create the markup you want.
AngularJS, by Google, describes itself as a "Superheroic JavaScript MVW Framework" (that's "Model-View-Whatever"). AngularJS is about freedom: freedom from the annoyances related to working directly with the DOM (even through a layer of jQuery or Backbone), and freedom to define your own HTML vocabulary and make it Just Work. It reworks HTML to make dynamic views normal and natural, and was designed with interoperability, extensibility, and testability as top priorities.
We'll cover the basics of setting up a page with AngularJS and delve into its core concepts: templates, bindings, scopes, controllers, routing, partial templates, and its dependency injection framework. From there we'll discuss communication with the server as well as how to extend AngularJS.
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. Written for 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.
-
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. Written for 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.