Year in review
This year flew by with a couple life changing family events, several projects shipped at work, and a lot of learning.
Family
We took two family trips to Florida this year to visit Natalie’s parents. The first trip was after her father found out he had cancer and the second trip was to help her mom pack up and move after he passed away. Of course these weren’t easy trips but I cherish the time we had with them.
Adalyn is growing up faster than I can comprehend most days. She’s opinionated, independent, and can be sweet and then harsh in the span of a few seconds. Right now I’m trying to learn how to help her concentrate on a task or project for more than a few seconds at a time.
In August Natalie and I celebrated our tenth wedding anniversary (and fifteenth year together). My mom flew in to take care of Adalyn so that Natalie and I could get away for a few days. We flew to Portland and had a great time exploring a new city kid free!
The final piece of big news is that Natalie is pregnant and due in April!
Work
I can’t go into detail about most of my projects now that I’m on the security team at GitHub. I still write blog posts regularly but they only get posted to a private work blog. What I can talk about here is some of the cool tech I’ve been learning and using.
React, GraphQL, and design
One of my responsibilities is building workflow tools for a team of analysts. Most of these workflows are queues and the analysts have to review items in the queue as quickly as possible.
We chose Rails with webpacker and a React frontend implemented in Typescript that reads from a GraphQL API using the Apollo client library. We’ve been able to build super fast and information rich user interfaces with this tech stack and we’re loving it for the most part.
One thing that hasn’t worked great has been combining multiple API’s into a single unified GraphQL API, specifically re-exposing the GitHub Platform in our apps GraphQL API. We’ve had to duplicate a lot of the objects the GitHub Platform exposes and whenever we want to expose a new object or field we have to touch half a dozen places in our codebase.
Thankfully the folks over at Apollo have built a server side solution but it’s implemented in javascript so we’re planning on swapping out Rails in our stack for a node app. We believe schema stitching will have a significant impact on our development speed and maintainability.
I’ve also spent a good deal of time reading about user interface design and applying that knowledge to the analyst workflows. I started by reading through this site from 1999 by Jenifer Tidwell and am now reading her book Designing Interfaces: Patterns for Effective Interaction Design.
Machine learning
We’ve deployed multiple models to production now and have pipelines for training, testing, tuning, and deploying new models. While I haven’t been very involved with the actual model building process I have been spending a lot of my time developing new features for us to use in our models.
During model development our ML stack is Presto, Jupyter, and scikit-learn. When it’s time to put things into production we use Airflow to train and tune models on a regular schedule and then the models are deployed as microservices in our kubernetes cluster.
Stream processing
Over the past few months we’ve switched to publishing our signals as protobuf messages to kafka so that we can use any number of consumers and start experimenting with stream processing.
We’re currently running two types of stream processors. The first is a Ruby app using the Racecar gem. This app has let us experiment quickly with new streams and has helped us enable everyone on the team to do some basic stream processing.
The second one we’ve been experimenting with is Flink. It is way faster and has many more features than our simple ruby consumer app but we’re still ironing out the development process for the rest of our team as you have to write Flink apps with Java, Scala, or Kotlin. Our initial spike with Flink was in Scala but recently we’ve been writing apps with Kotlin which I think we’ll end up preferring to Scala or Java.
2017 Reading List
- A Man on the Moon: The Voyages of the Apollo Astronauts
- Cyberspies: The Secret History of Surveillance, Hacking, and Digital Espionage
- Into the Black: The Extraordinary Untold Story of the First Flight of the Space Shuttle Columbia and the Astronauts Who Flew Her
- Hidden Figures: The American Dream and the Untold Story of the Black Women Mathematicians Who Helped Win the Space Race
- The Marvelous Pigness of Pigs: Respecting and Caring for All God’s Creation
- Apollo 8: The Thrilling Story of the First Mission to the Moon
- Radical Candor: Be a Kick-Ass Boss Without Losing Your Humanity
- The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change
- Fullstack React
- The Complete Redux Book
- Rules of Machine Learning: Best Practices for ML
- The Manga Guide to Linear Algebra
- Deep Learning
- Introduction to Apache Flink: Stream Processing for Real Time and Beyond
- Learning Apache Flink
- Stream Processing with Apache Flink
- Kafka: The Definitive Guide
- Mastering Redis
- The Tao of Microservices
Stop, Start, Continue for 2018
I need to stop hurting my health with snacks and sugary drinks and stop working late nights and being immobile for hours on end staring at my laptop.
I would like to start exercising consistently, finding medical help for ongoing pain, spending more time playing with Adalyn and hanging out with Natalie, and interviewing again.
I’m going to continue studying machine learning and learning new technologies while consistently shipping at work, supporting my family and my teammates, and taking time to reflect and evolve.
Thank you!
Thank you to everyone who helped me through 2017, especially Natalie and Adalyn, my parents, and my teammates at GitHub