Last week I was at SpringOne2GX (http://www.springone2gx.com/) in Washington, DC. Here are some takeaways on the various talks I attended along with my general impressions of the conference itself.

There was a wide range of topics organized by various tracks which worked out pretty well. At my day job, we have a large Grails 2 app which we are in the process of breaking up into services with a look to the future of probably Grails 3 and deploying/maintaining microservices perhaps with some containers. On our front end we have Ext JS 3 which will probably get rewritten once we finish with some of the server side changes. So, my general interests were upgrading to Grails 3, the current state of containers and managing microservices, some tidbits on Gradle and Groovy, and thoughts on modern Javascript frameworks which might work for us.

The general takeaways I had for the various talks I attended:

Deep Dive into the Groovy Compiler - Good presentation on how the compiler works. I had some knowledge on how compilers work in general but this helped very nicely on both compilers and AST transformations. Learned you can use Groovy Console to view the AST tree through different phases. Also learned that Java 9 will have a REPL (Read Evaluate Print Loop) tool to easily test/run small code snippets like Groovy Console.

Hands-On Migration from Grails 2 -> 3 - Wait until your major plugins are updated - Grails upgrade documentation should be pretty good to help you through. Speaker seemed to have some experience with migrations but not a ton - Google is your friend if you run into issues.

Developer Experience with Spring Cloud - Was not used to Spring Cloud so was a little hard to follow - probably should have had more background before going in. Looked a little at Lattice for running Cloud Foundry components on a smaller/local scale. Have been looking at what might be good to set up at work to manage microservices/containers so will add Spring Cloud/Lattice to the mix to investigate.

Create Elegant Builds at Scale with Gradle - Learned a few Gradle capabilities such as customizing the dependency resolution process. Some of the material seemed more focused on future versions of Gradle but seemed cool - versioning the full toolchain and some parts from Android such as buildTypes and productFlavors. Saw continuous building in action which I have not yet had a use for (yet). Heard about the new Eclipse integration for Gradle - Buildship.

The State of Securing RESTful APIs with Spring - Use HTTPS everywhere, use POST for sending sensitive data, not bad to use a session as long as you keep it lean. Spring Session using Redis was mentioned a few times.

Simple, Lean, Powerful HTTP Applications with Ratpack - Modern web framework built on Java 8. 1.0 just released which has some changes. Uses Google Guice for dependency injection vs. Spring but seemed to be configurable if you wanted to use Spring/both. Speaker seemed to have a good amount of experience but was unsure of some things - seemed like maybe there was some room for improvement in user docs/good examples but overall seemed like a good clean framework for simple apps that don’t want the weight of something like Grails.

Compile Time Metaprogramming with Groovy - Good explanation on creating custom AST transformations as well as how Grails uses AST transformations. Learned about @GrailsCompileStatic vs. @CompileStatic so that Grails dynamic finders won’t give compile errors as well as @Enhances to apply a trait across all controllers/services/combination/etc.. Also heard about the Grails @Transaction annotation. All of these I had vaguely heard about but never really understood what some of them did so definitely going to see if it makes sense to put any of them into practice at work.

Spring Boot Micro-services, Containers, and Kubernetes - Impressed with how the presentation went - Ray is a good speaker. Showed Docker Compose and Kubernetes - have heard about them but haven’t really used them. I was impressed when I first heard about Docker last year and have been following it ever since. There do seem to be some pains with all of the hype/explosive growth but the tools do seem to be maturing which is good. Will add Kubernetes to the list of potential ways to manage microservices/containers at work.

Convention over Configuration: the Gradle way - A good overview of various Gradle components including how you might set up integration testing since there is no single convention for integration tests. Also looked at how to create a plugin and how to use with a local snapshot. Some words on what is being worked on for Gradle 3 and how configuration can have dependencies as well so Gradle will understand a lot more on how the whole build is structured. At work we aren’t using Gradle a ton but will be using it more with the move to Grails 3 so it was good to see all of these things in action.

Richer Data History with Event Sourcing - Talked about storing all events/actions on an object to retain the full history instead of just the current values. The CQRS (Command Query Responsibility Segregation) pattern was mentioned - having a different model for updating information vs. reading it. For the types of projects I am used to, usually we just store the current information in the usual relational database structure and then have have some kind of audit table with the history of changes. That has worked pretty well so far so while I couldn’t see when I might make immediate use of this pattern, it was good to know about.

Comparing Hot JavaScript Frameworks: AngularJS, Ember.js, and React.js - Pretty much just going through the speaker’s scores for the frameworks across various categories. Seemed a little weird since he just had production experience with Angular and in the end the scores were very close anyway. Learned about TodoMVC which seemed like a good way to compare frameworks by seeing the same todo list implemented in each. So, probably just have to take the time to look at each one individually and figure out if any of them make sense to replace the large ExtJS app that we use now. Also mentioned were HTTP/2 for better performance, Track.js for logging client side JS errors, and using server side for initial page rendering and then regular single page app afterwards.

Reactive Web Applications - At work we’ve been looking at having fewer long running HTTP threads which seemed to mesh well with reactive programming. Currently though we mostly just spawn a separate thread and then poll for results from the front end vs. a long running Ajax call - perhaps looking at some WebSockets later. Reactive programming seems to be gaining traction with various libraries like RxJava. The API seems like it does take a little time to learn but seems for some situations it might be nice to have. Spring 5 should have support for non-blocking runtimes which is good as well.

Modern Frontend Engineering - Pretty much a fire hose of front end tools/frameworks which was good for taking notes and investigating further. Some I jotted down were Yeoman (app generator), Babel (for using ES2015 syntax now), JHipster (yeoman + spring boot + angularjs), phantomjs (headless browser testing), Semantic UI (human friendly HTML), ink (create emails readable by various devices), along with a few others. The most relevant one for me was probably Babel to check out when we upgrade our UI at work.

The conference pieces outside of the actual sessions were ok. Before this conference, the last conference I went to was a No Fluff Just Stuff (NFJS - https://nofluffjuststuff.com) one last November. Perhaps it has been a while since I have been to a bigger conference but this one seemed more sponsor/money oriented than I was used to and less of a community feel. There was the ‘passport’ which you had to get stamped by various vendors in order to get your conference jacket (which they ran out of as they warned), the Pivotal sponsorship seemed heavily felt, the food was ok but not great, and there was no easy app or provided printout to look at the schedule. Many of these things are just minor but combined they did have an effect on my conference experience.

So, overall, it was nice to hear various tidbits on components we use at work like Groovy, Grails, and Gradle, learn more about trending topics such as reactive programming, application deployment using Kubernetes and Spring Cloud, and getting a snapshot of current front end frameworks. Of course there were more talks I wished I could have attended but hopefully I'll find time to watch some of the videos later. Although I prefer the smaller scale of the local NFJS conferences, it was still great to hear from some of the big names in open source.