New York Symposium New York Information Technology Center June 24 - 25, 2011

Fri, Jun. 24, 2011 Room 2 Room 3 Room 4 Room 5 Room 6 8:00 - 9:00 AM REGISTRATION/BREAKFAST/WELCOME 9:00 - 10:30 AM Slimmed Down Software: Busy Java Developer's Sonar: Code Quality Programming HTML5 Concurrency without A Lean Approach Guide to Java 7 Metrics Made Easy Tim Berglund pain in pure Java Hamlet D`Arcy Ted Neward Matthew McCullough Venkat Subramaniam 10:30 - 11:00 AM BREAK 11:00 - 12:30 PM New Ideas for Old Code Busy Java Developer's Open Source Debugging NoSQL Smackdown! Collections for Concurrency Hamlet D`Arcy Guide to Games Tools for Java Tim Berglund Venkat Subramaniam Ted Neward Matthew McCullough 12:30 - 2:30 PM LUNCH & KEYNOTE 2:30 - 4:00 PM Pragmatic Architecture Java Boilerplate Busters Cascading through Hadoop: A Getting Started with Grails Programming in Functional Style Ted Neward Hamlet D`Arcy DSL for Simpler MapReduce Tim Berglund Venkat Subramaniam Matthew McCullough 4:00 - 4:30 PM BREAK 4:30 - 6:00 PM How to Select and Architectural Kata Workshop Resource-Oriented Cassandra: Radical Scala for the Intrigued Adopt a Technology Ted Neward Architectures : REST I NoSQL Scalability Venkat Subramaniam Peter Bell Brian Sletten Tim Berglund New York Software Symposium New York Information Technology Center June 24 - 25, 2011

Sat, Jun. 25, 2011 Room 2 Room 3 Room 4 Room 5 Room 6 8:00 - 9:00 AM BREAKFAST 9:00 - 10:30 AM Cryptography on the Resource-Oriented Integrating JVM Languages Complexity Theory and Busy Java Developer's JVM: Boot Camp Architectures : REST II Venkat Subramaniam Software Development Guide to Guava Matthew McCullough Brian Sletten Tim Berglund Ted Neward 10:30 - 11:00 AM BREAK 11:00 - 12:30 PM Simpler Cryptography Resource-Oriented Effective Groovy Gradle - Hands on Workshop The Busy Java with 3 JVM Libraries Architectures : RDF/SPARQL Hamlet D`Arcy Peter Bell Developer's Guide to Akka Matthew McCullough Brian Sletten Ted Neward 12:30 - 2:00 PM LUNCH & PANEL DISCUSSION 2:00 - 3:30 PM Testing with Spock Resource-Oriented Code Generation on the JVM: Decision Making Going with Distributed Venkat Subramaniam Architectures : RDFa Writing Code that Writes Code in Software Teams Brian Sletten Hamlet D`Arcy Tim Berglund Matthew McCullough 3:30 - 4:00 PM BREAK 4:00 - 5:30 PM Busy Java Developer's Resource-Oriented Requirements and Database Refactoring Git Workshop Guide to Android: Basics Architectures : Semantic SOA Estimating - state of the art with Liquibase Matthew McCullough Ted Neward Brian Sletten Peter Bell Tim Berglund New York Software Symposium -Session Schedule- (event schedule as of August 1, 2013) Friday, Jun. 24 8:00 - 9:00 AM : REGISTRATION/BREAKFAST/WELCOME 9:00 - 10:30 AM - Sessions Session #1 @ Room 2 : Slimmed Down Software: A Lean Approach by Hamlet D`Arcy Waterfall, Scrum, XP, Crystal... there are a lot of software methodologies on sale in the world today, but Lean Software brings something different to the table. This session uses practical examples to explain what makes software valuable and which parts are waste. Come explore how systems thinking can lead your team to deliver faster, create knowledge, and eliminate waste, and return to work Monday with news ideas about delighting your customers.

Session #2 @ Room 3 : Busy Java Developer's Guide to Java 7 by Ted Neward With the forthcoming release of Java7, a number of things come to fruition, both in the Java language and in the libraries, and it's important for Java developers to know what those features are, and how they change the game of writing Java code--or not.

Session #3 @ Room 4 : Sonar: Code Quality Metrics Made Easy by Matthew McCullough You're serious about improving the quality of your code base, but with 10,000 lines of code, where do you start and how do you ensure the greatest ROI for the re-work your team members will perform? Sonar is an open source tool that brings together the best of breed static and dynamic analysis of Java projects. The result is a unified view of problematic areas of your code on a time-line basis, allowing the team to attack the problems with the best ROI, and maintain a more watchful eye for positive and risky trends in the codebase in the future.

Session #4 @ Room 5 : Programming HTML5 by Tim Berglund HTML5 wants to make some major changes to the way we deliver media over the web and the way we mark up our pages, but it also gives us a bunch of new stuff in the browser's programming model. To ignore these new JavaScript APIs is to give up on a richer browser UI and a lot of fun.

Session #5 @ Room 6 : Concurrency without pain in pure Java by Venkat Subramaniam Programming concurrency has turned into a herculean task. I call the traditional approach as the synchronized and suffer model. Fortunately, there are other approaches to concurrency and you can reach out to those directly from your Java code.

10:30 - 11:00 AM : BREAK 11:00 - 12:30 PM - Sessions Session #6 @ Room 2 : New Ideas for Old Code by Hamlet D`Arcy Left unattended software can expand into a complex, brittle maintenance nightmare. But don't despair! This session teaches strategies for modernizing even the most horrid code swamps, examining incremental refactorings and the dos and don'ts of testing legacy code. We'll also tackle the harder, cultural issues: how to inspire your co-workers and keep your moral high even on the dirtiest jobs.

Session #7 @ Room 3 : Busy Java Developer's Guide to Games by Ted Neward Games? What do games have to do with good business-oriented applications? Turns out, a lot of interesting little tidbits of user- interface, distribution, and emergence, found normally in the games we play, have direct implications on the way enterprise applications can (or should) be built.

Session #8 @ Room 4 : Open Source Debugging Tools for Java by Matthew McCullough This session will survey a wide range of tools across the Java space. We'll look at utilities such as VisualVM, jstatd, jps, jhat, jmap, Eclipse Memory Analyzer, jtracert, btrace and more. Open Source is not just a suite of libraries you consume within your application, but now reaches into the space of tools to help you troubleshoot and improve your applications. The price of these tools eliminates barriers to their use and their open source nature allows you to mix and match them into compositions that work well for your application's unique debugging needs.

Session #9 @ Room 5 : NoSQL Smackdown! by Tim Berglund You've read that the relational model is old and busted, and there are newer, faster, web-scale ways to store your application's data. You've heard that NoSQL databases are the future! Well, what is all this NoSQL stuff about? Is it time to ditch Oracle, MySQL, and SQL Server in favor of the new guard? To be able to make that call, there's a lot you'll have to learn.

Session #10 @ Room 6 : Collections for Concurrency by Venkat Subramaniam Traditional collections on the Java platform focused on providing thread-safety at the expense of performance or scalability. More modern data structures strive to provide performance without compromising thread-safety. Some of them require you to adopt to a different semantics or programming model. In this presentation we will explore some data structures that can help reach both thread- safety and reasonable performance. New York Software Symposium -Session Schedule- (event schedule as of August 1, 2013) 12:30 - 2:30 PM : LUNCH & KEYNOTE 2:30 - 4:00 PM - Sessions Session #11 @ Room 2 : Pragmatic Architecture by Ted Neward Building an application is not the straightforward exercise it used to be. Decisions regarding which architectural approaches to take (n-tier, client/server), which user interface approaches to take (Smart/rich client, thin client, Ajax), even how to communicate between processes (Web services, distributed objects, REST)... it's enough to drive the most dedicated designer nuts. This talk discusses the goals of an application architecture and why developers should concern themselves with architecture in the first place. Then, it dives into the meat of the various architectural considerations available; the pros and cons of JavaWebStart, ClickOnce, SWT, Swing, JavaFX, GWT, Ajax, RMI, JAX-WS, , JMS, MSMQ, transactional processing, and more.

Session #12 @ Room 3 : Java Boilerplate Busters by Hamlet D`Arcy Java has a reputation for boilerplate code: ubiquitous getters and setters, a verbose anonymous class syntax, and redundant declarations to name a few. It doesn't have to be this way! There are many ways to bust the boilerplate and this session provides a solid understanding of the most modern techniques. Come learn about inversion of control idioms, Proxy objects, code generation tools, and the latest libraries that both create and manage boilerplate code so you don't have to. A leaner, meaner codebase is yours for the taking.

Session #13 @ Room 4 : Cascading through Hadoop: A DSL for Simpler MapReduce by Matthew McCullough Hadoop is a MapReduce framework that has literally sprung into the vernacular of "big data" developers everywhere. But coding to the raw Hadoop APIs can be a real chore. Data analysts can express what they want in more English-like vocabularies, but it seems the Hadoop APIs require us to be the translator to a less comprehensible functional and data-centric DSL. The Cascading framework gives developers a convenient higher level abstraction for querying and scheduling complex jobs on a Hadoop cluster. Programmers can think more holistically about the questions being asked of the data and the flow that such data will take without concern for the minutia. We'll explore how to set up, code to, and leverage the Cascading API on top of a Hadoop sample or production cluster for a more effective way to code MapReduce applications all while being able to think in a more natural (less than fully MapReduce) way.

Session #14 @ Room 5 : Getting Started with Grails by Tim Berglund Grails is emerging as a standard JVM web framework in environments ranging from startups to the enterprise. It's a full-stack solution build on rock-solid components, fully relying on convention over configuration, and using the best application language the JVM has yet seen: Groovy. This is the place to be for web apps on the JVM. In this introductory talk, we'll get a whirlwind introduction to Grails, visiting seven things you need to know about the framework to get started.

Session #15 @ Room 6 : Programming in Functional Style by Venkat Subramaniam Functional Programming has been gaining popularity in recent times. If you've wondered what functional programming is or how you can make use of it, this session is for you.

4:00 - 4:30 PM : BREAK 4:30 - 6:00 PM - Sessions Session #16 @ Room 2 : How to Select and Adopt a Technology by Peter Bell What's the point attending a conference unless you do something with the knowledge you gain? In this session we look at practical strategies for selecting new technologies and proven approaches for driving adoption back at the office.

Session #17 @ Room 3 : Architectural Kata Workshop by Ted Neward Fred Brooks said, "How do we get great designers? Great designers design, of course." So how do we get great architects? Great architects architect. But architecting a software system is a rare opportunity for the non-architect. The kata is an ancient tradition, born of the martial arts, designed to give the student the opportunity to practice more than basics in a semi-realistic way. The coding kata, created by Dave Thomas, is an opportunity for the developer to try a language or tool to solve a problem slightly more complex than "Hello world". The architectural kata, like the coding kata, is an opportunity for the student-architect to practice architecting a software system.

Session #18 @ Room 4 : Resource-Oriented Architectures : REST I by Brian Sletten The first in a series of talks that are part of an arc covering next-generation information-oriented, flexible, scalable architectures. The ideas presented apply to both external and internal-facing systems.

Session #19 @ Room 5 : Cassandra: Radical NoSQL Scalability by Tim Berglund Want to go deep on a popular NoSQL database? Cassandra is a scalable, highly available, column-oriented data store in use at Netflix, Twitter, Reddit, Rackspace, and other web-scale operations. It offers a compelling combination of a rich data model, a robust deployment track record, and a sound architecture, making it a good choice of NoSQL databases to study first. New York Software Symposium -Session Schedule- (event schedule as of August 1, 2013) Session #20 @ Room 6 : Scala for the Intrigued by Venkat Subramaniam Scala is a statically typed, fully OO, hybrid functional language that provides highly expressive syntax on the JVM. It is great for pattern matching, concurrency, and simply writing concise code for everyday tasks. If you're a Java programmer intrigued by this language and are interested in exploring further, this section is for you.

Saturday, Jun. 25 8:00 - 9:00 AM : BREAKFAST 9:00 - 10:30 AM - Sessions Session #21 @ Room 2 : Cryptography on the JVM: Boot Camp by Matthew McCullough Does your application transmit customer information? Are there fields of sensitive customer data stored in your DB? Can your application be used on insecure networks? If so, you need a working knowledge of encryption and how to leverage Open Source APIs and libraries to make securing your data as easy as possible. Cryptography is quickly becoming a developer's new frontier of responsibility in many data-centric applications.

Session #22 @ Room 3 : Resource-Oriented Architectures : REST II by Brian Sletten The second in a series of talks that are part of an arc covering next-generation information-oriented, flexible, scalable architectures. The ideas presented apply to both external and internal-facing systems.

Session #23 @ Room 4 : Integrating JVM Languages by Venkat Subramaniam Quite a few languages have raised to prominence on the JVM. A frequently asked question is "How do I integrate my Java code with these?" This session answers that very specific question.

Session #24 @ Room 5 : Complexity Theory and Software Development by Tim Berglund Some systems are too large to be understood entirely by any one human mind. They are composed of a diverse array of individual components capable of interacting with each other and adapting to a changing environment. As systems, they produce behavior that differs in kind from the behavior of their components. Complexity Theory is an emerging discipline that seeks to describe such phenomena previously encountered in biology, sociology, economics, and other disciplines.

Session #25 @ Room 6 : Busy Java Developer's Guide to Guava by Ted Neward "The Google Guava project contains a host of new features/classes for use by the Java programmer. Intended as a drop-in supplement for the standard JDK APIs, Guava provides features like immutable and forwarding collections, some concurrency utilities, more support for primitives, and so on.

10:30 - 11:00 AM : BREAK 11:00 - 12:30 PM - Sessions Session #26 @ Room 2 : Simpler Cryptography with 3 JVM Libraries by Matthew McCullough Cryptography at first seems like a daunting topic. But after a basic intro and the leverage of the Java Cryptography Extension (JCE), it seems downright feasible to add encryption and decryption capabilities to your application. Developers weren't satisfied with just the JCE and its plug-in concepts though. Over the last few years, framework architects have made strides in either wrapping or re-writing the approachable JCE in more convenient APIs and fluent interfaces that make effective and accurate crypto down right simple. Explore three of these libraries -- Jasypt, BouncyCastle and KeyCzar -- and how they can be leveraged to make your next Java cryptography and data security effort a simple exercise and not a tribulation.

Session #27 @ Room 3 : Resource-Oriented Architectures : RDF/SPARQL by Brian Sletten The fourth of a series of talks that are part of an arc covering next-generation information-oriented, flexible, scalable architectures. The ideas presented apply to both external and internal-facing systems.

Session #28 @ Room 4 : Effective Groovy by Hamlet D`Arcy "Effective Java" by Joshua Bloch is the gold standard for how to write correct and idiomatic Java code. Wouldn't it be great if the same thing existed for Groovy? Well here it is. This interactive, live coding session discusses what separates good Groovy code from the bad, what makes some code great, and how best to use the many available libraries. We'll also look at several static analysis tools for Groovy that aid in these pursuits. This session appeals to both those with a Java knowledge looking to learn Groovy and advanced Groovy programmers looking to learn more.

Session #29 @ Room 5 : Gradle - Hands on Workshop by Peter Bell In just 90 minutes, we'll install Gradle and develop a range of build scripts. Whether you're just looking to improve your builds or to create sophisticated project automation scripts, get some hands-on experience with the framework that won a Springy at SpringOne2GX for "Most Innovative Product/Project". New York Software Symposium -Session Schedule- (event schedule as of August 1, 2013) Session #30 @ Room 6 : The Busy Java Developer's Guide to Akka by Ted Neward With the rise of multi-core processors, and their growing ubiquity (on client machines, to say nothing of the server machines on which Java applications most frequently execute), the need to "program concurrently" has risen from "nice-to-have" to "mandatory" requirement, and unfortunately the traditional threading-and-locking model is just too complicated for most Java developers--even the brightest of the lot--to keep track of with any degree of reliability. As a result, numerous new solutions are emerging, each of them with their own strengths and weaknesses, leaving the Java developer in a bit of a quandary as to which to examine.

12:30 - 2:00 PM : LUNCH & PANEL DISCUSSION 2:00 - 3:30 PM - Sessions Session #31 @ Room 2 : Testing with Spock by Venkat Subramaniam Spock is an awesome tool that exploits Groovy AST transformation to provide elegant, fluent syntax for writing automated unit tests and functional tests. In this presentation we will learn how to use Spock to unit test both Java and Groovy code.

Session #32 @ Room 3 : Resource-Oriented Architectures : RDFa by Brian Sletten The fifth in a series of talks that are part of an arc covering next-generation information-oriented, flexible, scalable architectures. The ideas presented apply to both external and internal-facing systems.

Session #33 @ Room 4 : Code Generation on the JVM: Writing Code that Writes Code by Hamlet D`Arcy "The Pragmatic Programmer" admonished us all to "write code that writes code": use code generators to increase productivity and avoid duplication. Today's language communities have clearly caught on, as more and more frameworks generate code at compile or runtime. This session covers Project Lombok, Cofoja, Spring Roo, GContracts, Groovy++, and more. We'll reviews the different approaches, including examples of how and why we'd want to do this. Come see how these frameworks are using things like Java and Groovy AST Transformations, AspectJ intertype definitions, and ASM bytecode generators. You'll get an in-depth look at language tools and production deployed AST Transforms and code generators. Audience: developers searching for cutting edge solutions to increasing team velocity.

Session #34 @ Room 5 : Decision Making in Software Teams by Tim Berglund Alistair Cockburn has described software development as a game in which we choose among three moves: invent, decide, and communicate. Most of our time at No Fluff is spent learning how to be better at inventing. Beyond that, we understand the importance of good communication, and take steps to improve in that capacity. Rarely, however, do we acknowledge the role of decision making in the life of software teams, what can cause it to go wrong, and how to improve it.

Session #35 @ Room 6 : Git Going with Distributed Version Control by Matthew McCullough Many development shops have made the leap from RCS, , ClearCase, PVCS, CVS, BitKeeper or SourceSafe to the modern Subversion (SVN) version control system. But why not take the next massive stride in productivity and get on board with Git, a distributed version control system (DVCS). Jump ahead of the masses staying on Subversion, and increase your team's productivity, debugging effectiveness, flexibility in cutting releases, and repository redundancy at $0 cost. Understand how distributed version control systems are game-changers and pick up the lingo that will become standard in the next few years.

3:30 - 4:00 PM : BREAK 4:00 - 5:30 PM - Sessions Session #36 @ Room 2 : Busy Java Developer's Guide to Android: Basics by Ted Neward Android is a new mobile development platform, based on the Java language and tool set, designed to allow developers to get up to speed writing mobile code on any of a number of handsets quickly. In this presentation, we'll go over the basic setup of the Android toolchain, how to deploy to a device, and basic constructs in the Android world.

Session #37 @ Room 3 : Resource-Oriented Architectures : Semantic SOA by Brian Sletten The sixth in a series of talks that are part of an arc covering next-generation information-oriented, flexible, scalable architectures. The ideas presented apply to both external and internal-facing systems.

Session #38 @ Room 4 : Requirements and Estimating - state of the art by Peter Bell A chance for experience agile developers to learn and share state of the art tips for improving requirements gathering and project estimation.

Session #39 @ Room 5 : Database Refactoring with Liquibase by Tim Berglund Most teams manage database change using an ad-hoc system of SQL migration scripts manually applied to various development, staging, and production servers. Some even contrive automated processes, but rarely does this surplus build engineering deliver value directly to the customer. We should be writing applications, not build tools. New York Software Symposium -Session Schedule- (event schedule as of August 1, 2013) Session #40 @ Room 6 : Git Workshop by Matthew McCullough Git is a version control system you may have been hearing a bit about lately. But simply hearing more about it may not be enough to convince you of its value. Getting hands on experience is what really counts. In this workshop, you'll bring your Windows, Mac or Linux laptop and walk through downloading, installing, and using Git in a collaborative fashion.