CodeMash 2019

I think this was the 6th CodeMash that I have attended (judging by the number of hoodies in my closet). It is a cross-technology conference held the first full week of each January in Sandusky, OH, at the Kalahari resort and water park. It is a good chance to get a broader exposure to new technologies than you would normally get during the course of a year. It is broken up into 2 days of half-day workshops (called pre-compilers) and 2 days of one-hour session. Following is a summary from the sessions that I attended.

Pre-Compilers

Building Your First React App (Parts 1 & 2) - Steven Hicks

I came into CodeMash wanting to learn a modern framwork for building front ends. I had narrowed it down to React and Vue, with a slight leaning towards Vue. I attended the full day workshop on React and was very impressed. I had done the same thing a year earlier. The morning session I had been able to follow, but he had accelerated in the afternoon and had me lost quickly.

This year, Steven Hicks did a wonderful job of presenting the whole day and the framework seemed more comprehensible. This was in large part due to his diligence in preparing the easy-to-follow exercises. They are so good that you can follow them on your own here

Steven also did a talk on Getting Unstuck on Friday that I wanted to attend, but it conlicted with another talk that I wanted to see.

Getting Up and Running Quickly with Vue.js - Burton Smith

Vue, unlike React, only had a half day workshop devoted to it. Burton did a great job as a first-time presenter, but having just come off of Steven’s well-polished workshop it was hard not to let the way the workshops were presented color my judgement as to which framework to invest in.

This workshop was still profitable, although less structured than the React workshop. It seems that I will have to get my hands dirty on a project to see which of the two to move forward with.

Building Your First Voice Experience with Alexa -Jeff Blankenburg

I didn’t have high expectations for the Alexa workshop, but I did have in the back of my mind an idea for an Alexa skill that I would like to add to complement my Online Farm Markets website in the future. This half day workshop was extremely informative and blew me away. Not only did I learn more than I expected, but I was able to formulate the features that I wanted for my skill - and all but complete the skill - during the time he provided in the workshop. I was up until 2:30 that night adding the REST endpoints to my site so I could replace the hard-coded values left in my skill. I should be able to publish the skill in the near future.

Thursday Sessions

Connected Data & the Graph Database Landscape - Greg Jordan

This was a pretty good survey of the state of graph databases. The short of it is that Neo4j is the big player with a few others in the ready-for-production and up-and-coming status, and others that are not ready for use in production.

Gradle with Ketchup - Dave Lucas

Dave has been talking up Gradle recently, but we were not able to use it on our recent project, so I went to hear more about why he liked it so much. Now I can see why. My main takeaways were that they have invested a lot of effort into making sure that it runs fast and doesn’t repeat work that it has already done that hasn’t changed, and that it fails fast so you can fix issues quickly.

“Did you get my message?” - A comparison of several modern messaging platforms - Jack Bennett

This talk compared Kafka, RabbitMQ and ZeroMQ. The presentor was coming from a stock market background where high volume throughput is very important.

One interesting comment from a co-worker of his illustrated a point. The co-worker asked if anyone uses RabbitMQ anymore. He answered, yes, it is being used and it is a sign of a solid, mature product when there is not a lot of buzz about new features being added constantly. That is a quality that you are looking for in a tool like a messaging system.

git gone wild: how to recover from comon git mistakes - Magnus Stahre

I hate dealing with git when it goes bad. I always think that I can make it worse since I run those commands so infrequently.

Magnus has a dry, matter-of-fact presentation style, but the content of what he covered was very valuable. It would be nice to have a reference to use afterwards, but the extra exposure to those concepts and techniques was useful.

Learn the Art and Science of Troubleshooting - Paul Bort

The presenter looked like he was reading his talk from a script, so I thought I would be in for a long talk, but it was actually very interesting. He had a series of pictures that almost told its own parallel story to complement the talk.

One anecdote I remember was that he would see the building elevator door open twice when he went up, and would generally smell smoke when that happened. One day he was in the elevator with a co-worker who had just gone for a smoke break. She hit the ‘Floor 1’ button when she left the elevator. He was able to deduce that since the elevator door opened on its own without him calling it, the elevator didn’t realize that anyone had entered. So, when he pressed the button for floor the door opened again expecting him to be outside wanting to get it.

He gave several more examples of applying these troubleshooting principles in daily life and at work.

Flutter for Android Developers - Michael Yotive

My friend, Dave Lucas, went to a meetup recently and came back raving about Flutter, so I went to this talk to see what the fuss was about. The big win appears to be that it has native components that you are talking to so you get a better native experience across mobile devices. Since I am not an Android developer I left the session after I got a good sense of what made it different.

The Pi, Python, & Paintball? Innovating with Affordable Tech! - Barry Tarlton

Timer view This was the most fun presentation I attended. Barry was helping organize paintball games and needed a way to communicate when to start, end, or re-enter the game. He turned to Raspberry Pi’s, LED clock displays and speakers to fit timers into plastic ammo containers and place them on the field.

There were many issues that he had to deal with, such as time synchronization, message queueing, networking, remote ui, and even climate considerations.

Game internals De-fusing game He used similar tech to create an ammo box with a “bomb” that the kids can find in the house and defuse before the countdown timer goes off.

It was a fun experiment, though he mentioned that he wouldn’t like to travel through an airport with all of his gear and try to explain himself!

Generating Fractals in the Browser with Rust and WebAssembly - Ankur Sethi

Bummer! I was hoping for a quick “two-fer”. I want to learn about Rust, and I am really intereted in WebAssembly. The bummer part was that the speaker had notified in advance that he would have to cancel the talk, but that didn’t make it into the schedule update. So…a packed room of us left to look for another session. The good thing was that my second choice selection was just one room over.

Jump Into JSON. Rush Into REST. - Duane Collicott

This was an intro talk, but I attended anyway since I was having some difficulty getting the async portion of my REST call from my Alexa skill working properly. He didn’t cover anything to help me with that problem, but the talk was pretty good.

He had a nice setup in two browser pages to demonstrate what happens at each stage of the REST calls.

IQ Alumni Get-together

One of the nice things about CodeMash is being able to see many of the people that I have worked with over the years who are at other companies now. Thursday night our old team from IQ Innovations got together to catch up. Here is a pic of about half of us who were at CodeMash

IQ Alumni Get-together

Friday Sessions

Service Workers in the Wild - Graham Conzett

Wanting to turn my site into a Progressive Web App, this session filled in a nice piece of the puzzle. Graham works on the Smart Cities initiative building information kiosks around downtown Columbus. These are my raw notes for future reference.

<script>
  if ('servicework' in navigator) {
    navigator.serviceWorker.register('my-service-worker.js')
  }
</script>

this.addEventListener('fetch', function(event) {
  event.respondWith(
    fetch(event.request).then(function(response) {
      // cache
      return response
    }).catch() {
      //return from cache
    }
  )
}

Service worker has its own section of the Chrome devtools console for logging

It is faster if you return from cache first, and then perform the actual fetch as a fallback

Google has a tool called Workbox so you don’t have to write all the code from scratch

Strategies
  • Cache first
  • Cache only - useful for an installation step for assets that are not updated
  • Network first - for data where the freshest data is important
  • Network only - can be used for a default setting
  • Stale while revalidate
    workbox.routing.registerRoute(
        matchFaceJson,
        workbox.strategies.staleWhileRevalidate({
            plugins: [new workbox.broadcastUpdate.Plugin('ike-face-json-updates <example>')],
            cacheName: 'your-cache-name'
        })
    );

service workers don’t have access to the window object

Mapbox is a nice, less expensive alternative to Google Maps

Gotchas
  • Browser cache is still around - might be getting browser cache when you thought it was your cache
  • Browser support - IE just got support
  • Service worker scope
  • Update and install lifecycle - by default checks for a new service worker every 24 hours - does a binary compare
  • CORS - cannot look at headers and get 0 response code - difficult for caching

Rock Solid Components with Typescript and GraphQL - Matt Warger

Typescript and GraphQL are technologies that I am really itching to use. I am partway through a book on Typescript and am looking forward to a project where I can use this.

He really hammered home the importance of static types and how than enables the IDE to prevent you from making mistakes that you would have made otherwise.

He also had a movel presentation technique where it looked like he was using a stylus to mark up his slides in realtime.

Intro to Progressive Web Apps - Chris Lorenzo

Like I mentioned, I want to make my site a PWA, so this talk was spot on. It was fast paced, but it needed to be to get all of the material in. Again, here are my raw notes…

Benefits of Native
  • Available through stores
  • Can be monetized directly (minus 30%)
  • Allow for richer user experience and best performance
  • Can be used offline
  • Push notifications
Cons
  • Large file size
What is a Progressive Web App?
  • Provide a richer experience
  • Can be used offline
  • Allow push notifications

There is more that you can do with the web on Android than with iPhone (Apple has no incentive to canabalize the app store)

There is a navigator.online helper function

Chrome has navigator.connection.effectiveType to detect speed of network connection speed (2g, 3g, 4g, slow-2g)

Requirements
  1. Need a manifest json file - use a manifest generator app

    • use PWACompat for Apple
  2. Service workers for an offline experience

Mac OS Tip: You can option-click the notification icon to toggle the display of notifications (good for presentations)

Notifications
  • Notifications do not work on iPhone
Service Workers
  • Service workers run on a separate thread and have no access to the DOM
  • No global state, so need to persist in index db
  • Can sync from index db when connected to internet again

Visual Version Control with JetBrains IDEs - Paul Everitt & Maria Khalusova

I was already familiar with many of the tips they mentioned in this talk, but I have not used IntelliJ as my main tool for dealing with source control. This talk gave me a little more comfort so I may use it in my workflow in the future.

It reminds me, though, that I really like the SCM integration for git in VS Code.

The Two Question Code Quiz: How to Interview Programmers Effectively - Scott Connerly

  • Don’t ask an interview question unless you know why you are asking it
  • Rule of thumb: 2 tech interview per position, and 4-6 screening interview per technical interview
  • Has a 2 question tech interview
    1. Easy question just to see if they can do basic program
    2. Recursion (or pointer) question - see if they can think abstractly and formulate an approach to solving the problem

Sustainable Styles: Fundamental Principles of CSS Architecture - Nathan Rambeck

I wasn’t able to keep up with all of the details, but the link to the full presentation is above.

  • Base styles - applied to your bare CSS - can use normalize.css - don’t be heavy-handed, use a light touch here
  • Objects - layout of components
  • Components - self-contained pieces of UI
  • State
  • Javascript
  • Themes

Naming approaches

  • By Presentation - color, shape, size If you make a change you need to update the name
  • Content - submit, heading
  • Function (or purpose) - primary, cancel, decorative, content Function naming is preferred

Namespacing

  • Objects - .o-
  • Components - .c-
  • State - .is-, .has-

Oh, and one more thing…CTF!

This was the second year that I participated in the Capture the Flag tournament. Hacking-Lab runs a fun and challenging tournament that starts just over a week before CodeMash and goes through the last day. Last year I found all of the flags and submitted them, though many people beat me to the finish line.

This year I did several before CodeMash, but I had other tech I wanted to work on during the conference, so I didn’t finish. It was a great way to challenge myself and learn new skills. I especially appreciate that they make challenges that can be solved by using different system tools. That encourages participates to gain experience with these programs that they can make use of during their daily work.

Well done, CodeMash! Looking forward to another great conference in 2020.