You can subscribe to updates via the Atom Feed. I
don't maintain a mailing list any more.
Show them something good(29 Oct 2024) Insights on standing out as an engineer seeking work, inspired by a Nashville musician, my boss's blog, and personal career experiences.
Keep reading...
Moving On: Reflections on My Journey at BRINC(22 May 2024) After a year at BRINC, where I stood up the web app team and built the first version of LiveOps, I'm moving on to a new role at PostHog. I reflect on the things I learned, the things I liked and didn't like, and what I'm looking forward to in my new role.
Keep reading...
Getting the blog back together(29 Apr 2024) My triumphant return to blogging, some notes on bringing this site back to life, and setting the stage for what's coming next.
Keep reading...
Announcing circle: a Haskell client for Circle's REST API(29 Nov 2022) Announcing my first Haskell package: circle! This package implements a Haskell client for Circle's REST API. It supports all V1 endpoints to let users create and manage accounts, wallets, and users; and send fiat and cryptocurrency between them. Hopefully this makes building a Haskell application that uses Circle's REST API much easier!
Keep reading...
Data validation in Haskell with newtypes, smart constructors, and aeson(31 Oct 2022) I'm working on a library that is wrapping an HTTP API, and I'm heavily leveraging aeson for working with the JSON returned and sent to that API. This post describes how I implemented field validation on the type level using Haskell newtypes and hand-rolled ToJSON and FromJSON instances.
Keep reading...
Reflections on my career in 2020(11 Jan 2021) 2020 felt like a particularly long year for a variety of reasons, and one of the reasons it felt long for me was because I changed companies twice after 5 years at Qualtrics! After starting the year there, I did a stint at 47 Degrees before joining Mercury at the start of December. Since this was the first time in my career that I'd actually changed companies, I wanted to write down some of my reflections on what I learned (both good and bad) throughout the process.
Keep reading...
I drove into the sunrise today and it felt like hope(10 Dec 2020) Today I drove 12 hours from Seattle WA to Ogden, UT. This was a first for me. While I was no stranger to road trips, I'd never driven 12 hours straight before, and even though I had all day to do it, I was nervous that I wouldn't pull it off.
Keep reading...
Implementing Dark Mode for my Website(04 Dec 2020) Now that both Windows and Mac have native dark modes for their respective operating systems, I figured I was overdue for enabling a dark mode on my personal website. Specifically, I wanted a site that inherited the dark mode settings from the user's operating system so that they didn't have to toggle in on the my website itself. Also, I wanted a solution that used pure CSS so that I didn't have to add any additional javascript to my site and modify any DOM elements at runtime. In this post, I cover how to configure dark mode based on your browser's OS, and how I went about picking CSS for dark mode that made sense for my page.
Keep reading...
Building a Fantasy Football Draft Assistance Algorithm: Part Two(19 Nov 2020) Constructing a Fantasy Football draft assistance algorithm using Gaussian Kernel Density Estimation (Gaussian KDE) Part Two: Building the User Interface. Given my cross-sectional dataset from a variety of different fantasy football prediction sources, I implemented a DAsHA, a tool into which I could feed (a) the current draft position and (b) players already picked, and return as much data as possible for me to pick the best player that round.
Keep reading...
Building a Fantasy Football Draft Assistance Algorithm: Part One(13 Nov 2020) Constructing a Fantasy Football draft assistance algorithm using Gaussian Kernel Density Estimation (Gaussian KDE) Part One: Collecting, Cleaning, and Preparing the Data. In order to beat my friends outperform the recommendations provided my fantasy football platform, I needed to create an cross-sectional dataset of projected player performance across a variety of different sources.
Keep reading...
Getting Started in Open-Source(15 Oct 2020) As a software engineer at 47 Degrees, I'm ostensibly a member of the open-source community, since 47 Degrees spends a lot of time and resources on maintaining a few hundred libraries in Scala, Haskell, Kotlin, and Swift. However, unlike other folks at the company who were involved in open-source before they joined, I was never involved in a significant open-source project before joining.
Keep reading...
My Note-Taking Process(03 Sep 2020) The other day I was asked about my approach towards packaging up my knowledge into a format that's worth sharing: 'My question to you is at what point do you package up what you have learnt to share with others? I’m a software dev and forming a habit of writing what I have done seems like it might distract me out of flow if i’m to take notes to share later when i’m working, consequently, I think i’m a little exhausted after coding to write something decent. That’s the little quagmire I find myself in at the moment, I wish to share, just don’t have the method. Any tips?' It was a great question, I figured it deserved an involved response, and when I finished writing my thoughts I'd written almost 500 words.
Keep reading...
ValidatedNel in the Wild(24 Aug 2020) I'm keeping my streak alive and I wrote another blog post for 47 Degrees, this time a technical deep dive into a PR I made where I rewrote the error reporting in an sbt plugin to use error accumulation. There's a bunch of code examples that I cite from the blog post that guide the content.
Keep reading...
47 Days at 47 Degrees(11 Aug 2020) I recently wrote a blog post for my new company about my initial impressions working there for the first month and a half. I ramble about several topics, including asynchronous working patterns, impostor syndrome, and the importance of seeking out work that's outside of my comfort zone.
Keep reading...
macOS Catalina 10.15.4: Development Setup for my new Mac(06 Jun 2020) I bought a new personal laptop recently and I'm starting a new job soon, which means that I'm going to have a few new Mac laptops to set up in the near future. So, I figured it would be prudent to write my new Mac setup steps before I get the new computers and publish these steps somewhere so that I can easily get up and running with my new machine. My configurations isn't too crazy, but it is custom, and I think I have enough 3rd-party development and productivity tools installed that it's worth a blog post to cover all of the bases. On a final note, I'm primarily a backend/distributed-systems/data engineer, so my needs mostly revolve around Scala, Java, Go, Node, Python, and Haskell. YMMV!
Keep reading...
Setting up a Functional Scala REPL with Ammonite(09 May 2020) One of my favorite tools in the Scala ecosystem is Li Haoyi's Ammonite, which is a tool that enable first-class scripting support in Scala. You can use Ammonite to run Scala code in the REPL, as scripts, or even as a system-level shell as a replacement to something like Bash. It's a great tool and one I use daily when writing Scala. My favorite thing to use it for is for advanced REPL support -- Scala is my favorite language and Ammonite lets me whip up little Scala scripts and run them in the command line as I used to do with Python or Node.
Keep reading...
Installing Jekyll and its Toolchain on macOS Catalina(22 Mar 2020) This post is for people like me: folks who want to install Jekyll on Mac OS Catalina, have run into dumb errors along the way, and just want one place where all the steps are laid out in an easy-to-follow way.
Keep reading...