Eric Sund Software Engineer

About Me

Hello! 👋 I’m Eric Sund - a software engineer in Seattle, WA. 🗺️ I earned a Bachelor of Science in Computer Science and Mathematics at Simon Fraser University while also completing 5 technical internships. 🎓

I presently work as a software engineer at Akamai on internal infrastructure called the Kubernetes Product Platform to host Linode's cloud services. Prior to that, I worked on Linode Managed Databases and Ghost 👻, a web server for the Akamai CDN that handles ~1/4 of the world's Internet traffic.

I enjoy distributed systems, app development, 💻 low-level embedded systems and operating systems. I also have a knack for numerical methods 🔢 and scientific computing 🧪. Check out some of my projets below!

Apart from math and programming, I’m into backpacking ⛺, travelling 🎒, videography 📹, and indie rock 🎵! Shoot me an email if you’d like to meet up!

Technologies I know

C/C++

Java

C#

Python

Golang

Node, Typescript, React

PHP

Linux/UNIX kernel development

Kubernetes, Docker, Ansible, Terraform, Crossplane

AWS (Cloud Practitioner Certified!), GCP, Linode

Ruby on Rails

SQL

Places I've Worked

Akamai - Software Engineer II
Oct 2022 - Current

Akamai - Software Engineer I
Feb 2022 - Oct 2022

Akamai - Software Engineer Intern
Sept 2021 - Dec 2021

Akamai - DevOps Engineer Intern
May 2021 - August 2021

Hootsuite - Production Operations (DevOps) Engineer Intern
January 2019 - April 2019

Beanworks Solutions - Software Developer Intern
May 2018 - August 2018

Thinkific - Full Stack Developer/QA/Support Intern
April 2017 - March 2018

Teradici - QA Developer Intern
May 2016 - August 2016

Courses I've Taken

  • Embedded Systems
  • Dynamical Systems
  • Computer Vision
  • Quantum Computing
  • Numerical Analysis II
  • Numerical Analysis I
  • Data Structures & Algorithms
  • Networking
  • Database Systems
  • Operating Systems
  • Elementary Number Theory
  • Ring and Field Theory
  • Applied Group Theory and Permutations
  • Ordinary Differential Equations
  • Linear Programming
  • Computer Architecture
  • Data Structures & Programming
  • Object Oriented Programming with Java
  • Real Analysis I
  • Applied Linear Algebra
  • Calculus III
  • Probability & Statistics
  • Computational Linear Algebra (MATLAB)
  • Computational Calculus (MAPLE)
  • Discrete Mathematics II
  • Calculus II
  • Calculus I
  • Discrete Mathematics I
  • C/C++ Computing Laboratory
  • Intro to Computer Science II
  • Intro to Computer Science I

Projects

Beatboxer on an Embedded System

  • C
  • Multithreading
  • UDP networking
  • Bit-twiddling
  • ALSA audio
  • Web sockets
  • NodeJS, Jquery



Beatboxer lets a user playback some pre-made beats, or create their own! Beatboxer runs on physical hardware and connects your local network allowing for control by hand or by web. Here’s what the whole system looks like:

beatboxer

This project touched on a huge range of abstractions - from reading individual bytes in registers to showing content on the frontend.

Getting the MMA8452Q accelerometer working was a little challenging. The first 8-bit register you read in C is always 0xFF. To read something you care about (like x-y-z coordinates), you need to read multiple registers in one go with an 8-bit offset, to get an array of bytes. Each coordinate is stored as a 16-bit value across two registers - the LSB and MSB bits. By default, reading multiple bytes will skip the LSB, so you also need to write to other registers so this is turned off!

The audio was done using the ALSA C API. Pushing the joystick will queue new PCM samples for playback. A thread will load the samples into memory, and another thread will play them back. A third (heartbeat) thread will send/receive the current beat over UDP to the node web server so it can be displayed and controlled from the frontend!

Linux Driver to Flash Morse

  • C
  • Bit manipulation and masking
  • Kernel FIFO queues
  • Modifying and compiling a custom kernel
  • Custom device trees
  • – — .-. … . / -.-. — -.. . -.-.–



“Morse Driver” is a misc driver that runs on a custom Linux kernel. In Linux, hardware interaction is exposed via device driver files. Writing a string to /dev/morse-code will flash an onboard LED with the morse code equivalent. Reading will spit out the dot/dash equivalent of your strings in text. This is all stored in the kernel’s FIFO queue.

mountains

S-Talk (My own Netcat)

  • C
  • Multithreading
  • UDP networking
  • Dynamic memory allocation
  • Critical sections, mutexes and semaphores



S-talk lets two people instant message each other over the local area network. The beauty of this is the same single binary can be run by two different people on their own computers. I had a bit of multithreading going on:

  • Thread for grabbing keyboard input
  • Thread for displaying text on the screen
    1. This text comes from either typing a message, or receiving one from the other person
  • Thread for sending UDP packets
  • Thread for receiving UDP packets
There were some edge cases:
  • If you decide to send the whole Bee Movie script as a string, it’s way too long to fit in a single UDP packet, so
    1. chop it into several partitions
    2. add those partitions into a free list
    3. send each paritition as an individual packet until the free list is empty
  • When two users try to send at once, or receive at once, we need a mutex and signaler/waiter to handle it. This is a classic critical section problem.
I learned about dynamic memory allocation with a free list which proved to be extremely handy. Unlike malloc, I had tight control over where in memory my bytes were stored. I also implemented a UDP networking solution in C that ran on two threads. The whole thing worked with one socket - all you had to do was run the compiled binary on two different computers.

Using Chaos for Secure Communication and Data Encryption

  • MATLAB
  • Runge-Kutta and Euler's Numerical Methods
  • Lyapunov exponents and functions

I worked on a Dynamical Systems project which used chaos theory for data encryption and secure communication. Here's a link to the paper!