I was lucky to have attended CodeMash 2016 this past week and wanted to share my experience while I try to physically and mentally recuperate.
After dinner on Thursday, we helped kids with disabilities by hacking toys to make them accessible.
We also set a world record for the most people simultaneously playing Pong... using lasers, naturally.
There was lots of hardware stuff, including a new "Factory" workshop where people got to create all sorts of projects. There was also 3D-printing was going on all the time.
There were lots of fun activities: board games, the Artemis Bridge Simulator, the water park, mini golf, lightning talks, open spaces, and so on. There was plenty of food and drinks, many places to hang out, and of course it was all very family-friendly. Check out #codemash to get a sense for it.
This year I attended fewer talks on web development. Believe it or not I attended more talks than are listed below, all in two days. Between that and 14 hours of podcasts while driving to and from the conference, my brain is officially full.
Exploratory Data Analysis with R R is a specialized language used for data transformation, analysis and modeling / machine learning. Everything is vector-based and functional. Other data-focused tools exist like Tableau, SPSS and SAS but R is open-source and is being incorporated into tools like SQL Server 2016. The speaker gave an example of transforming dirty CSV data (data "munging") then performing various ad-hoc analysis on it using statistics and charts. R is a very powerful tool and the whole time I was thinking, this should be in the toolbelt of all business, science and engineering students. It's so much more powerful than something like Excel/Access for daily data gymnastics. Check out the corresponding PluralSight Course from the speaker.
RIOT – A React-like user interface micro-library: Riot is a small library that uses virtual DOM diffing like React. Unlike React, where you (optionally) use JSX to embed HTML-ish markup in your JS for each component which gets compiled to pure JS, in Riot, you write HTML which includes a script tag for your logic and that gets compiled down to pure JS. Riot also is extremely simple and seems worth checking out. Slides.
Modular Design: Developing, Maintaining, and Extending Component-Based CSS This was a great case study from Bit.ly about into how to apply BEM-inspired and related techniques to organize your SASS/LESS/CSS. The takeaway was to have only one CSS file per-component so that, despire some duplication, made the CSS very maintainable.
Recognizing patterns in noisy data using trainable ‘Functional’ State Machines Originating from a PhD thesis, this talk was about using a series of techniques for pattern recognition using F#, machine learning, evolutionary algorithms and so on. The example was how to recognize gestures from people wearing smart watches, which is hard when the user is also walking or driving on a bumpy road. One way to handle this is to design a FSM using guards and partial application in F# with some thresholds. GitHub Repo.
Deep Dive Into Deep Learning This was a great talk about some of the history, theory and recent breakthroughs in deep learning and some basic examples using F#. I learned about neural networks and things like how introducing randomness was a key to escaping local minima (false optimal outcomes) in models. There was even a demo of using a F# type provider for the R language!
How Compilers Work This talk involved walking through a custom compiler (lexer, parser, optimizers, etc.) that generated .NET IL from a toy language statement
(inc -1). It was an excellent talk, especially for me since I don't have a CS degree. It highlighted the importance of SRP, the security implications of compilers, and gave me an even greater appreciation for language designers.
Low-Ceremony Microservices with Elixir A demo of using GenServer in Elixir to create "microservices" as OTP Applications which run in the same (or separate) BEAM. Examples of supervision trees and stateful services were given.
Electronics 101 I'm a hardware novice so it was fun to learn about the basics of electronics including resistors, capacitors, digital/analog sensors and so on. Here's a recommended book.
Virtrual Actors The Actor Model is a way to achieve scale (concurrent computing) without needing to write risky multi-threaded code. Erlang and Akka are two popular examples of the actor model which are very powerful but can result in a lot of complexity (difficult to trace, supervision trees, addressing, etc.). Microsoft Research released a project called Orleans which is an implementation of "Virtual Actors" which abstracts many of these complexities. It's great for game backends, smart caches and stateful services. See also Azure Service Fabric. An example architecture was shown that wraps Virtual Actors behind a HTTP endpoint to provide the organizational benefits of microservices with the scale of actors.
Event-Driven Architecture This was a great sponsor session from a local consulting company about using "domain events" to build for the future. A common architectural challenge is when to design for scale. If you build a monolith first, you may suffer when refactor into services later. If you start with services first, you may be prematurely optimizing or spending too much money. One solution for this is an event-driven architecture, where you define enterprise-wide events like
OrderShipped and send them on an event bus / broker like RabbitMQ. Then you write services (of any size) to listen to this bus and publish messages on it. This allows you to scale and integrate with 3rd parties easily.
Document Databases Discusses the pros and cons of document databases (Mongo, Raven, Couch, etc.) and some real-world lessons learned. Document DBs are great for horizontal scale via sharding and some basic intra-collection querying but have some drawbacks like eventual consistency and relationship modeling. I've used document databases before and was already familiar with all these issues but was happy to hear others experienced the same trade-offs.
Merging Partitioned Data Without Conflicts (Ever!): The Magic of CRDTs So Conflict-Free Replicated Data Types are a new technique to manage data in distributed systems. These data structures perform merge operations on their internal immutable data sets and can tolerate duplication and invalid ordering. This is pretty cutting-edge stuff and is being used by products like Riak, the distributed KV store using Erlang. Slides.
By my count there were 193 regular sessions to choose from on Thursday and Friday. That doesn't include the two sets of talks given by sponsors. That's a LOT to choose from and could cause peope to have crippling FOMO. In my case, I downloaded the session data from their API and used a playoff system to choose a talk to attend for each session. It seemed to work pretty well.
This year to avoid a DoS attack on the Kalahari Resort's reservation hotline when tickets went on sale, the organizers opted for attendees to reserve a spot in line for a hotel reservation. This worked much better than last year. Naturally, priority for a room at the resort was given to attendees with four and three-day tickets, unlike me, so if you want a better chance of getting a room at the resort you may need to keep that in mind. Staying off-site isn't a big deal since there are plenty of hotels and free late night shuttle service.
The major themes I noticed this year were:
- Data is growing exponentially. I heard the same stats quoted in talks where something like more data will be generated in the next two years than in all of history. This means things like immutability, distributed systems, data science and machine learning will be essential for the forseeable future.
- "Microservices" and distributed systems continued to be hot topics. These are inherently complex and increasingly necessary. There's a big opportunity to build products that make this easier.
CodeMash continues to be a great community-driven conference for the money. Hopefully I'll be able to attend next year. Thanks to all the volunteers and sponsors who made it happen.