Category Archives: Uncategorized

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