Spring One – Keynote

For more posts from Spring One 2017, see the Spring One blog table of contents
Rob Mee (CEO)
  • Almost 3K atttendees [someone said about a third of attendees are pivotal employees]
  • 50% bigger than last year in Vegas

Onsi Fakhouri – head of R&D

  • Philosophy
    • learning is from feedback loops
    • velocity enables learning
    • need to push to production quickly
    • “go fast, forever”
    • emphasized choice
  • Announcements/what’s new [I’m not a Spring expert so hard to follow all the details; learned a lot though; also 23 announcements during 12 minutes didn’t help for pace]
    • Spring has been synchronous blocking I/O model
    • Spring 5/Spring Boot 2 – Reactor will bring async non-blocking I/O
    • Spring Tools 4 – IDE agnostic; helps for Spring Boot
    • PCF (Pivotal Cloud Foundry)
      • Pivotal Application Service (PAS) – formerly Elastic, added small footprint PAS (6 VMs vs 20)
      • BOSH – language/tooling for working with deployments and such, enables cloud foundry to work across platforms
      • cf push – command to deploy to cloud foundry
      • Can run polyglot apps
      • Adding .NET support
    • Adding Rabbit MQ support
    • Kubernetes
      • Want to be partner for all workloads
      • kubernetes great container for all workloads
      • Shouldn’t have to choose between Cloud Foundry and Kubernetes
      • Pivotal Container Service (PKS) [yes, “K” is for “container” – Kubernetes powered by BOSH – constant compatibility
    • PFS (pivotal function service)

Erich Gamma (Microsoft)

  • Acknowledged elephant in the room – MIcrosoft at a Java conference
  • Went through history of editors/IDEs – editor is light/fast vs IDE with more features
  • VS Code
    • editor with some IDE features like code understanding and debug functionality
    • need extensions to make this happen
    • run extensions in separate process so not vulnerable if poor extension. Communicate back to main process through RPC
    • long tail problem – need deep support for many languages
    • In 2016, announced language server protocol to communicate between editor and language server
    • Eclipse is one of the language servers for Java.
    • Other languages include Go, Python, Microsoft Languages and many more.
    • Pivotal is also a language server
    • Learned Rust is a language – it’s for systems [saw it in the list of languages supported]
    • Did demo of Java development and cf push from VS Studio

Phil Webb (Spring Boot Lead)

  • The Only Constant is Change
  • Spring is an integration framework, not DI. Spring combines technologies in a way that feels natural. Achieves through dependency injection.
  • “Software maintenance is not keeping it working like before. It is keep it being useful in a changing world.” – Nobody uses a cell phone from 20 years ago even if it were to work.
  • Spring initializr
    • say what technologies want and it creates a Maven POM or zip file of what need to get started. And keeps track of what people are choosing.
    • Covered limitations – doesn’t show if removed tech or if removed later.
    • ThymeLeaf in first place for view technologies followed by Freemarker
    • Removed Velocity from list if chose most recent version of Spring Boot. Velocity last released in 2010. Continuing support was a liability.
  • “A good developer is like a werewolf: Afraid of silver bullets”
  • Stagnate if say no to everything; volatile if say yes to everything. Want to be somewhere in between.
  • Kotlin
    • new JVM language by JetBrains.
    • Supported by latest version of Spring.
    • Also an Android language
    • Gradle overs DSL
  • Reactive – WebFlux
    • Alternative to Spring MVC
    • Doesn’t use Servlet API
    • Netty is default runtime. Can switch to Tomcat if want
    • non-blocking
    • WebClient – alternative to Spring Template.
    • Picture a swimming pool with ducks – they swim end to end. Not reactive. An obstacle in the lane slows down whole thread Can only scale by adding more threads which has cost. With reactive, it’s more like the runway at an airport; only used when take off/landing

Ranji Narine (Scotiabank) 

  • Led technology transofmration
  • 9K people in technology
  • Key goals – time to-market, cost and culture
  • Obstacles to velocity
    • Little code reuse
    • Time to do a code release
    • Teams optimized for organizational hierarchy
    • Infrastructure takes too long
    • Time/complexity/cost
  • Improvements
    • Created tech shop
    • APIs
    • Daily releases – CI/CD pipeline – 3K deploys per month
    • PCF (Pivotal Cloud Foundry)

Stephan Nicoll and Madhura Bhave (Spring Boot)

  • Live demo/live coding
    • Spring Initializr – can do from Bweb or from within Eclipse/IntelliJ
    • Java 9
    • WebTestClient – can mock or test against live server
    • Data repository using MongoDB
    • RestTemplate is a blocking API so WebClient to stream data instead
    • Reactor streaming code
  • Spring Boot 2.0
    • Actuators turned off by default because can show sensitive info
  • Showed animation of logo. Pixel art is fun.

Simon Wardley (Researcher)

  • Humorous – buzzword strategies
  • Maps –
    • position matters
    • can’t move San Francisco, but can move items on a “systems maps” or a ‘mind map” because not really a map
    •  need anchor – ex: compass

John Heveran (Liberty Mutual)

  • Goals
    • 60% workload in cloud
    • 75% tech staff write code
    • 50% apps have code to prod in a day
  • Need to be able to take risks
  • Learned
    • Be holistic
    • Think ambitiously
    • Don’t constrain yourself with decisions of the past
    • Did make mistakes but able to correct quickly and share lessons across org
  • Accomplished
    • In 10 weeks, converted 10 apps to new model
    • Reduced number of apps
    • Biggest mission critical app was 1.3 million lines of code

Spring One Live Blog Table of Contents

I’m going to attempt to live blog. The internet has been flakey so it might be “less than live”.  (Also, I’m only attending Day 1 of the conference)

All sessions will be on youtube.

Day 0

  • In the evening, they had lightning talks. I did one on FRC Java Robots. It’s my first time giving an Ignite talk (aside from practice.) It was fun and I did well.
  • They also had PowerPoint Karaoke. They set up 5 slides that you had to talk about for 15 seconds each without having seen them before. I tried this, it was fun and funny. Luckily they had Mac Presenter view on so at least you could see the next slide and create transitions.

Day 1

Day 2-3

  • n/a – I had a vacation planned so was only at this conference for one day

performance tuning selenium – firefox vs chrome vs headless

I’m the co-volunteer coordinator for NYC FIRST. Every year we are faced with a problem: we want to export the volunteer data including preferences for offseason events. The system provides an export feature but does not include a few fields we want. A few years ago, my friend Norm said “if only we could export those fields.” I’m a programmer; of course we can!

So I wrote him a program to do just this. It’s export-vol-data at Github. And fittingly, he “paid” me with free candy from the NYC FIRST office. Once a year we meet, Norm gives his credentials to the program and we wait. And wait. And wait. This year NYC FIRST had more events than ever before so it took a really long time. I wanted to tune it.

Getting test data

The problems with tuning have been:

  1. I have no control over when people volunteer for the event. It’s hard to performance test when the data set keeps changing.
  2. The time period when I have access to the event is not the time period that I have the most free time.

Norm solved these problems by creating a test event for me. I started over the summer, but then got accepted to speak at JavaOne and was really busy getting ready for that. Then I went back to it and someone deleted my test event. Norm solved that problem by creating a new event called “TEST EVENT FOR SOFTWARE DEVELOPMENT – DO NOT ENROLL OR DELETE, please. – FLL”. And one person did volunteer for that. But not a lot so it helped.

Performance tuning

I tried the following performance improvements based on our experience exporting in April 2017.

  1. SUCCESS: Run the program on the largest events first. (It’s feasible to manually export the data for small events. Plus those have largely people who also volunteered at a larger event.) This allows us to run for the events with the most business value first. It also allows us to abort the program at any time.
  2. SUCCESS: Skip events and roles with zero volunteers. For some reason, it takes a lot longer to load a page with no volunteers. So skipping this makes the program MUCH faster.
  3. SKIP: Add parallelization. I wound up not doing this because the program is so fast now.
  4. FAILED: Switch from Firefox driver to PhantomJS. I knew the site didn’t function with HtmlUnitDriver. I thought maybe it would work with PhantomJS – an in memory driver with better JavaScript support. Alas it didn’t.
  5. FAILED: Try to go directly to URLs with data. FIRST prevents this from working. You can’t simply simulate the REST calls externally.
  6. SUCCESS: Switch from  Firefox driver to Chrome driver. This made a huge difference in both performance and stability. The program would crash periodically in Firefox. I was never able to figure out why. I have retry/resume logic, but having to manually click “continue” makes it slower.
  7. UNKNOWN: I added support for Headless Chrome in the program. It doesn’t seem noticeably faster though. And it is fun for Norm and I to watch the program “click” through the site. So I left it as an option, but not the default.

Results

Like any good programming exercise, some things worked and some didn’t.  The program is an order of magnitude faster now that at the start though so I declare this a success!