YOW Conference – Sydney 2018

This year was a celebration year – YOW has been running for 10 years! (I do remember being in an evening meetup 10 years ago in Sydney with Dave. He was testing the idea of having a conference and asking people if they’d come, and getting lots of nervous an uncertain looks.)

To me the consistent standard of talks is higher this year, than any of the other years of YOW I’ve seen over the last 10 years.

This is post sharing my experiences of the talks this year.

Thursday 29 Nov 2018

Kent Beck – 3X: Explore/Expand/Extract

@KentBeck

Kent is a hero for so many people. His methods were so influential. Along with the Agile Manifesto many people were given a vision that software development and delivery could and should be better.

The man in the flesh is none of that. He humbly explains the things he has learned, and even uses analogies from his career break.

This is a refreshing and inspiring talk. It is not what you expect.

Michael Nygard – Grinding the Monolith

@mtnygard


Always listen to the Clojure guys… they’re the out of the box thinkers! (This talk is not about Clojure).

Microservices were all the rage in tech talks a year ago, but the subject now can lead to an angry silence. Why?

They can be complex to build, complex to run and you only need them in some scenarios.

But Netflix did it!

What are the reasons and 8 successful and unsuccessful transition patterns? Michael delivers.

Kevlin Henney – 1968

@KevlinHenney


Kevlin is the kind of guy you’d want to go to the pub with, to hear some great stories. This talk feels like that. (Although I’m sure he’d love to have a beer and chat at the end of the day).

In the past I’d heard Kevlin roast SOLID design principles, so expectations were high.

This talk is a wonderful snapshot and encapsulation of Computer Science and Engineering history.

Sid Anand – Big Data, Fast Data @ PayPal

@r39132

Sid is a team leader who parachuted with a couple of guys into a part of Paypal that was bleeding and fixed it.

This is real. The legacy system diagrams are ugly.  The data contortions to make it work are eye-popping.

What I took away was that there are emerging some common patterns for real-time financial transaction customer experience at scale that aren’t simply ‘noSQL is the answer’.

Dave Cheney – Lessons learned building Kubernetes controllers

@davecheney

Everyone talks about Service Meshes. Some people have played with them. Dave commercialised it.

This is a technical story about and Aussie guy, part of a team who focused, and did the hard work of delivering. Good onya Dave.

Randy Shoup – Breaking Codes, Designing Jets, and Building Teams

@randyshoup

Have you ever wanted to visit Bletchley park and find out the environment that generated the computer? Have you ever wondered about the team culture at Lockheed’s Skunk Works that delivered the SR-71 Blackbird radar proof plane? What about the vibe at Xerox’s PARC that gave use the GUI, ethernet and WYSIWYG word processors?

Randy reckons you can have that in your team. Come and find out how.

Simon Raik-Allen – From the Caveman to the Spreadsheet and Beyond

@simonraikallen

Simon brings science fiction and recent IT nostalgia in a charming journey asking “What’s Next?” The William Gibson Neuromancer references are a strong theme.

The difference is, Simon delivers. I won’t spoil the surprise.

Anita Sengupta – The Future of High Speed Transportation

@doctor_astro


Anita is a rocket scientist and professor at the University of Southern California. When she speaks – the energy she projects makes you feel like you’re on one of those rockets.

Parachuting robots onto Mars? Done that. We’re onto something more interesting. [I won’t spoil the subject matter]

Anita finished by answering questions with flair, then when out of time, assuring everyone she’ll be grabbing a beer and that the conversations can continue.

Friday 30 Nov 2018

Jessica Kerr – The Origins of Opera and the Future of Programming

@jessitron

When you started your job, did you ever deal with an arrogant senior developer who didn’t facilitate an environment for learning?  Have you ever wondered why the renaissance was a big deal? Jessica links these two. This talk is breathtakingly original.

Jessica is a polished speaker with a lot of experience. I didn’t look at my watch for the hour of this talk.

This talk thematically links in with Randy Shoup’s talk on high performance teams and provides motivations and techniques do it.

Because the standard of this talk was so high, I dare to ponder how it could be better.  I couldn’t help feeling like Jessica stepped around a leadership model and a world view behind all this like it was the elephant in the room. Maybe it wasn’t appropriate for this audience.

Mikael Vidstedt – Java in a World of Containers

@MikaelVidstedt

Mikael is the hands on guy from Oracle, talking about new features in the JDK, showing you how to make your Java program run in a docker image more efficiently.

Now to be honest, making minimal docker images for java programs was a thing about 3 years ago.

But you never had the Oracle JVM guy telling you techniques and hacks you’d never heard of for shaving 10’s of megabytes off the remaining size of the docker images.

For this guy – the JDK not a fixed canonical tool to be used – he treats it casually as the output of a compilation. A thing to be sliced, diced and cooked up.

You may come out of this talk wanting to work for him.

Casey Rosenthal – Deprecating Simplicity

@caseyrosenthal


This guy lead the Chaos Engineering team at Netflix. He wrote the book on Chaos Engineering.  Yet he is calm, confident and well-reasoned.

Casey relates the problems with the 1986 Challenger Shuttle disaster to how large groups of people in a kitchen doing cooking,  deal with each other.

The best bit was at the end where he explained how to sell resilience engineering in your organisation by using a Winston Churchhill quote.

Brendan Gregg – Cloud Performance Root Cause Analysis at Netflix

@brendangregg


Brendan was introduced as ‘that guy you have have seen shouting at hard drives‘.  Brendan is an infrastructure guy and metrics geek – and has been given the world’s biggest scale infrastructure problems to analyse and solve at Netflix.

This talk is the full toolkit to analyse every performance problem that you could have on one of your servers. You get the list of techniques and the tools. (Even Brendan admits he can’t remember them all – and so shows you his diagrams he puts on his desk to remind him.)

Chris Richardson – Events and Commands: Developing Asynchronous Microservices

@crichardson


So you’ve got an existing microservice architecture and now one of your transaction boundaries crosses the line across two microservices? Oh you’d never do that. (Because it would be Terrifying!) But what if you have to?

Chris has fought that dragon and lived to tell the tale. In fact he has written a book about it. Come and get a very detailed look at several techniques and the tradeoffs associated with each).

Michelle Casbon – Kubeflow Explained: NLP Architectures on Kubernetes

@texasmichelle


Michelle confidently explained the sorts of problems you’d apply machine learning to. She comes across as polished and knowledgeable.

Then she rolls out this gem that connected with all parents:

“I was reviewing a pull request for this machine learning platform pipeline at home, and my five year old son was making paper aeroplanes and building bridges out of cushions…”

How does she manage this?

Then she goes back to showing you how to select particular machine learning model types for your problem and how you can see the correlation results in the pipeline.

Cat Swetel – The Metrics You Should Use (but probably don’t)

@catswetel


It’s a tough gig being last on the lineup but Cat delivers. She has a dry, rich sense of humour that tolerates no BS.

Other speakers in the past have touted fancy formulas or Deming quotes, as the way to bring manufacturing statistical discipline to agile workflows, but Cat gives the real thing. Not only has she read every Deming book – she even quotes a book from Deming’s friend (and then roasts him for it).

War stories galore, Cat points triumphantly to a lower dot in the middle of a multi-modal distribution (we just learned that term):

“See that!” see says triumphantly, “That was me!”

If you want to know what’s wrong with your estimation process, (with evidence including the authors and papers to back it up) Cat will smash it for you.

Conversations with Dave Thomas (conference organiser)

Dave moves from group to group during the lunches and tea breaks – and has such a rich background in technology. I find it such fun to draw upon it in conversation:

“Dave, you know how when Apple transitioned from the PowerPC to Intel, they ran a binary translator, Rosetta (in addition to dual binaries) to keep the the old apps running on their OS. Now that Intel x86 is running out of steam and ARM architectures are looking good – do you think binary translation will be the answer for backward compatibility or should they just go to virtual machines for emulation?

Dave didn’t miss a beat:

“Well in a former life I had worked in this. The solution that is the best of both worlds is really register machines. A company that has now folded that came close to that was Transmeta. ARM architectures do look good in terms of power consumption and CPU power. I expect that if they do go down that path virtual machines may solve that problem. But really they can push people to just recompile their apps for the new platform, and that would help them clean all the old apps off their platform that hold them back.”

I had the privilege of attending the speaker dinner – and without prompting several people stood up and said kind words about Dave. The one that struck me most was this:

“Dave has a heart for the developers in Australia. There is so much going on in technology, and he wanted to be able to bring that to Australian developers, so they wouldn’t be left out.

Summary

So your highly caffeinated boss asks you with a sharp-eyed expression on the day after you got back from the conference:

“So. What did you get out of it?”

You’ve got about 7 seconds to not bore him and make it sound valuable.

“It was great! They looked at high performance teams, Kubernetes and Docker, machine learning, resilient systems, better estimation and performance analysis techniques.”

Commit Level Coverage Reporting

What is it?

This enables coverage reporting showing lines not covered on each commit

Where is it?

https://github.com/juliangamble/commit-level-coverage-report

Is there an example project?

https://github.com/juliangamble/jacoco-example-project

Why you would use this

[Workplace with a million line codebase and 100s of developers working on it.]

Tech Lead: “We really want to get the coverage up on this codebase – more tests will give us more feedback about the code.”

Developer: “Well that’s lovely, but I really need to ship my feature – I’ll make sure my stuff is covered as best I can.”

Tech Lead: “Ok – how much coverage are you aiming for?”

Developer: “I’ll make sure the lines I touch have coverage.”

Tech Lead: “Ok – how will you measure that?” ….

Now obviously:

(a) this codebase is a candidate for modularisation and

(b) sonar does give you feedback on coverage at a commit level – but sonar doesn’t give you a way to know what the commit-level coverage is prior to pushing your changes. ie – if you’ve missed some coverage on the lines you’ve changed – there isn’t a way to know before pushing.

This change is trying to solve the problem of knowing “for the lines I have touched – what coverage have I got? What lines have I missed?”

How to setup and use in your project

Add the following into your pom.xml

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>com.github.juliangamble</groupId>
                <artifactId>commit-level-coverage-report</artifactId>
                <version>1.0</version>
                <executions>
                    <execution>
                        <id>post-unit-test2</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report-on-commit-coverage</goal>
                        </goals>
                        <configuration>
                            <!-- Optional - sets the path to the file which contains the execution data. -->
                            <!-- <dataFile>${project.build.directory}/coverage-reports/jacoco.exec</dataFile> -->
                            <!-- Sets the output directory for the code coverage report. -->
                            <outputDirectory>${project.reporting.outputDirectory}/</outputDirectory>
                            <daysBackToCheck>100</daysBackToCheck>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Then run this:

mvn clean test

Example Result

----
Commit: caaa32f8c8eff580b4760f60dbf021d6e03935c3 - Sun Jul 16 20:48:50 AEST 2017 - Julian Gamble - [dev] first drop

source file name: /com/machiavellian/MyApplication.java
Intersection of line changes with coverage (lines we care about): 4
covered lines: 3
Coverage for commit: 75%
Lines not covered: 1
src/main/java/com/machiavellian/MyApplication.java:11         return firstArg - secondArg;

----
Commit: 57bfb7956b501afca5fc101753d6e284d448f4ce - Sun Jul 16 20:53:59 AEST 2017 - Julian Gamble - [dev] adding new method

Intersection of line changes with coverage (lines we care about): 1
covered lines: 1
Coverage for commit: 100%
Lines not covered: 0
----
Commit: acf35680891d1f853a226035981c1ac18d9f50a2 - Sun Jul 16 20:55:58 AEST 2017 - Julian Gamble - [dev] adding coverage

Intersection of line changes with coverage (lines we care about): 0
covered lines: 0
Coverage for commit: 0%
Lines not covered: 0
----
Commit: 9c42a1ab1e8db57e31e17837120da6dc257dbb72 - Sun Jul 16 20:56:23 AEST 2017 - Julian Gamble - [dev] adding divide method

Intersection of line changes with coverage (lines we care about): 1
covered lines: 0
Coverage for commit: 0%
Lines not covered: 1
src/main/java/com/machiavellian/MyApplication.java:19         return firstArg / secondArg;

----

Result File Location

target/site/coverage-per-commit.txt

Presenting at YOW LambdaJam in April 2016

In April I had the privilege of Presenting at YOW LambdaJam in Brisbane and doing a follow-on workshop.  My title was Distributing State over the Network in Clojure with Raft (in Clojure). It was a lot of fun.

The talk was about the power of the Raft consensus protocol for replicating state over the network. Using examples in Clojure, seeing how to apply this in the context of a multi-user multi-instance application. Seeing how this has future implications for the use of WebRTC.

IMG_9499

 

 

 

Clojure Recipes Published

My book Clojure Recipes just got published and is for sale on Amazon!

ClojureRecipesBook
I’ve been working on it for quite a while – I hope you find it useful!
(Or even better – I hope you know a friend that might find it useful.)
A little context in the form of Q&A below.
Q&A
Haven’t we got enough Clojure books already?
I asked this of Stuart Sierra when he was in down under 2 years ago. He responded “we have enough ‘introduction to Clojure books’ but there is room for other types of books”.
Who is it for?
This is a book for people who ‘learn by doing’. It’s for that guy in the office who is interested in Clojure, and wants to use it to hack on a project this weekend. (The assumption is you’re familiar with Lisp-style parens, but not much more.)
The book contains ‘starter projects’ for various use-cases of a small-to-medium size – it will hold your hand enough to get you started, and then free you up to take your project as you choose. Each one is self-contained, and assumes little Clojure knowledge, and explains the code as you go.
What? Clojure Recipes? Isn’t there already a Clojure book in this format?
I signed the contract in December 2012 with Pearson. At that time there wasn’t a Clojure book in this genre.
Then Ryan Neufeld announced he was writing a Clojure book in 2013. I got in touch with Ryan and Justin Gehtland about the situation. They were both amazingly generous and supportive, and clarified they could see differences in the books intended purpose and content. I caught up with Ryan last year at the Clojure Conj and he was warm and encouraging.
I came away feeling really positive about the Clojure community. Everyone wants to ‘grow the pie’ of involved people.

2014 Year in Review

This year past I had the privilege of speaking at Clojure Conj in Washington DC.  This was a blast.

Eric Normand

I also had the opportunity to speak at YOW LambdaJam in Brisbane.  Lots of great people to talk to here.

20140508_151751

I also helped lead ClojureBridge in Sydney.

Leonardo

I also gave four talks at clj-syd:

  1. Transducers – What are they?
  2. Hindley Milner in Clojure
  3. Adding Typed Clojure to An Application
  4. Applying the paradigms of core.async in Clojure

 

I’ve also been working on a book: Clojure Recipes.

Why ClojureBridge is Awesome

We ran Clojurebridge in Sydney today. I was surprised by how well it turned out. I’m writing to capture the essence of this experience.

What ClojureBridge is Not

I’ve experienced several training courses paid by for by work. There is kind of a vibe on these that whilst you’re keen to learn, you’re also having a “day off” work – so there is lack of intensity about the day.

I’ve also been to a couple of training courses that I paid for myself. For these you’re generally using your own annual leave, and have a sense of doubt (and/or suspicion) about whether the trainer is really up to scratch.

In both these situations – there is an sense of self-interest that just drags the day down.

Why ClojureBridge is Different

Clojurebridge today was different to this because everyone came out of interest in the subject matter, and in contributing to the day. It was a Saturday which had a sense of ease about it. Attendees had given up their personal time because they wanted to be there, but it lacked the commercial pressure of a paid-for course.

In addition the course materials and programme have a strong theme of inclusion, newbie-friendliness and gentle pace.

My experience – the people

Clojurebridge aims to be inclusive of women and minority groups. I honestly had absolutely no idea who would rock up.

I chatted with a merchant banker who was changing careers. There were uni-students keen to get into what functional programming was about. There were financial services types who had done a decade of OO on legacy platforms and were looking for something different. There were several people who had never done programming before and just had a computer and a web browser.

The most surprising thing was the couple-pattern. We had six couples rock up and spend the day programming together.

Everyone was really positive, willing to chat, share experiences and ideas.

My experience – the day

I rocked up to Thoughtworks in Sydney last night having worked through the training materials to do the ‘night-before installfest’. (We forked the training materials to fix some typos, and also provide some explanation of the materials for people who only knew metric units and not imperial, and also to adapt the example questions from the US tax systems to the Australian GST system).

We welcomed everyone with cupcakes. These were consumed eagerly, there was no lazy semantics.

Screen Shot 2014-12-20 at 9.53.17 pm

We spent the evening eating pizza, installing the JDK, Leiningen and Lighttable. (Interestingly enough the Windows machines proved the most problematic, and I am totally going to do a pull request to fix this). This was all done with a drink in the hand.

I helped install Leiningen on two Windows machines with a Polish language setting. It turns out if you squint until the writing goes fuzzy, then you can just rely on muscle memory and it all works the same!

clojurebridge installfest

The following morning we welcomed people with muffins and coffee and got into it. The pattern of the material was to introduce a topic for 10-15 minutes, and then leave 40 mins for an exercise, and start again with the next topic. The mood was relaxed, with time for conversation.

Late morning we wandered out as a group down to Circular Quay and grabbed a coffee and it retained this relaxed social fun vibe.

clojurebridge julian data structures

We finished the day having a drink and reflecting on the day.

retro time

I left early for dinner with my family, but it sounds like the party rocked on into the night.

after party

What is required from you

I won’t say that if you rock up to a ClojureBridge as a trainer or attendee, you can kick-back and it will be all roses. It works because of what you bring to contribute, your curiosity, your energy, enthusiasm and willingness to learn. As a trainer it works because of your patience, your passion for the topic, your empathy, listening skills or just calm critical-thinking-skills working under pressure.

Conclusion

You should do this! It’s so much fun.

 

(Did I mention I’m writing a book called Clojure Recipes?)