June 30th 2018 saw the first Java Unconference in Manchester UK, organised by members of the Manchester Java Community - held at the AutoTrader office just outside the city centre (yes, it really has cars in it!). On a blazing hot summer’s day, 40 members of the Java community came together to speak with each other and learn. Most of the visitors were from the North-West, but others had travelled from London, Oxford, Bath and even as far as Las Vegas!
As this was a single-day event (most unconfs are several days long) it needed tight organisation and Alison, Nick and Debbie from JManc did very well. Personally I would have been happy if more people had come to the social meetup the night before, but that’s a small complaint.
The unconference format is participant-driven - topics are suggested and chosen by the participants. There were a wide variety of proposals on Java, Scala, ethics, community management, live-coding and more. The only problem with this format is that I always want to go to every session and there’s only one of me! I made a few notes from the sessions I went to, including some handwritten on a tablet which is a skill I really want to improve (inspired by Julia Evans and Denise Yu).
Keynote: Simon Maple - Common Security Vulnerabilities You Wish Your Application Didn’t Have
Simon had travelled up from London to take part in JManc - he gave a fun talk doing some live hacking of a few webapps he had created, by exploiting vulnerabilities found by Snyk. For me there were two key points:
- Firstly: exploiting a vulnerability is easy. None of what he showed was more complicated than a single curl command, and CVE data about exploits is widely available.
- Secondly: It’s pronounced “Snick”.
TBH I was a bit confused about why an “unconference” would have a keynote, but with Simon’s relaxed style and the fun content it worked pretty well.
Dependency Injection Anti-Patterns
Inspired by the antipatterns book this was a group discussion of people’s struggles and successes with DI, and how DI compares with Inversion of Control and Polymorphism.
Generally the feeling was that DI a powerful and useful technique although some people had struggled with specific tools and situations. The problem which we spent the most time discussion was how DI tools can obscure behaviour, especially when used to implement business logic (eg in chain-of-command style work pipelines). We spoke about how to identify dependencies,how many is too many and when it was appropriate to bypass DI and call another unit directly.
Personally, learning about IoC and DI led to a fundamental change in how I develop software and unlocked other things like TDD, so I was surprised to hear people complaining about it, but it was really interesting to hear other people’s take on it.
Docker and K8S with Java
This is a favourite topic of mine, as you will see if you read my other posts. Generally there seemed to be a bit of confusion about terminology and technology: Docker vs Docker Swarm vs K8S; Containers vs Images; Containers vs VMs. A couple of issues about developing with Docker:
- What point during the dev process do we need to build containers? Every time we want to run tests? Every commit? Just during CI/CD? Just during deployments?
- People struggled with MiniKube for developing and testing K8S applications locally. I feel their pain.
- Docker on Windows/Mac is not so easy. I don’t feel this pain, as a long-time linux user!
- Some people had been bitten by breaking changes in Docker in the past
- What is the future for Docker (the company) now that K8S is de-facto container orchestration engine…?
I was happy to be able to share what I knew about how containerizing a JVM impacts ergonomics.
I think this was a good session which cleared up a lot of things for people.
Provided by AutoTrader this was more than pizza and coke - a healthy lunch & a good chance to catch up with people who had been in other sessions during the morning.
Oracle JDK vs OpenJDK vs Azul vs IBM vs RedHat etc - and what is AdoptOpenJDK?
This was a session I had proposed so I was moderating and didn’t take as many notes as I would have liked. We discussed what goes into a Java distribution (Java lang, core libs, JVM & tools) and how these differ between the various releases of Java. Simon found a few stats about the relative popularity of each JDK - the surprise for me is that the vast majority of people use Oracle JDK. I think that going forward most people will be best served by using an OpenJDK build, and AdoptOpenJDK is going to be the place that most people get their builds from.
We cleared up terminology:
- TCK: Technology Compatibility Kit, you need to pass this to call your product “Java” (and you need to pay Oracle to take the test)
- JSR: Java Specification Request, an update to the Java Language
- JEP: Java Enhancement Proposal, a major change to the JVM
- JCP: Java Community Process, which discusses and approves JSRs and JEPs
Jim Gough was on hand to explain the history of AdoptOpenJDK through Adopt a JSR to where it is now, and Brian Benz gave his thoughts on how serverless lets cloud providers tune a JVM for their infrastructure to the benefit of their users.
Overall this cleared up a lot of things for me, and I was pleased that several people voted it as the most useful session of the day.
- AdoptOpenJDK produces regular builds of OpenJDK for people to use freely
- If you don’t want to pay for Java you should use OpenJDK, but you will have to upgrade every 6 months as nobody backports features or security fixes (at the moment)
- If you want Long Term Support, you have to pay a vendor (RedHat, Oracle, IBM, Azul, etc)
- If you use a specific product heavily it makes sense to consider using that company’s JDK (eg WebSphere & IBM JDK)
- Commercial JDKs have different trade-offs in resource-usage and performance characteristics
The Only Way is Ethics
(OK I admit it took me too long to get the pun in the title) So Debbie Roycroft from Co-op Digital introduced this topic - she had given workshops on ethics in software in the past which sound great. There is a difference between Morals (internal beliefs about right and wrong) and Ethics (rules of behaviour in society). This was a tough session - everyone agreed there are numerous ethical problems in software today, but nobody could suggest any workable solutions.
A few interesting observations:
- About the VW engineer who is in prison - he was surely not the only person doing wrong, and has been thrown under the bus (phrasing!). If your company is asking you to do unethical/illegal things, then how can you trust them to behave ethically and back you up if they are caught (hint: you can’t).
- Threat of resignation against your employer needs an enormous amount of privilege.
- Is there a connection between the ethics of a corporation and the interpersonal ethics of its employees?
Summary: inform yourself and think critically about your role in what your company does, and your company’s role in society. Also look out for content coming from CO:ED Ethics conference in a couple of weeks.
Nick Ebbitt introduced the topic of Test Doubles, which stand in for real components at test-time (cf Stunt Doubles). Mocks, Fakes, Stubs, Dummies, Spies, oh my! What are they all? Where does jMock and Mockito fit in here? How to test interactions with external services?
One interesting project which came up was TestContainers which lets you add a containerised database (or anything) to your tests as a JUnit rule, to make integration testing easier. Great idea.
To close out the day we spent a half-hour discussing what we had learned during the day, which sessions had gone well etc. This is a nice way to close out the day followed by a group photo and decamping to a local bar for food and drinks (sponsored by Co-op Digital).
This was my second un-conference, and I was again struck by how different it is to a non-un-conference (ie a regular conference). I had as many great and educational conversations in one day with 40 people than I would at a multi-day event with thousands of people. Of course there weren’t the big thought-provoking talks that good conferences provide, nor the huge vendor pitches - although there was a pretty good swag table.
For getting to understand other people’s problems and helping each other, seeing cool projects and building a community beyond the people we see every day, I think the unconference format is amazing - the sub-title of this post (I didn’t feel like an idiot) is a quote from the retrospective which highlights how everyone is a contributor at an unconf - everyone brings their unique experience and viewpoint and we all learn together.
I would also like to thank the attendees from Manchester and London Java Communities for their help and advice in how we can better run South West Java.
See you next time!