I’m Phil Rau, and among other things I’m a techie. I try to find technical solutions to problems, and get information out to people, including this site. I developed this site to describe in detail my professional and personal experiences, list accomplishments, and interests. I hope that this will give a better understanding of me as a whole.
I’m a graduate of North Carolina State University, class of 2003, with Bachelors of Science in Electrical Engineering and Computer Engineering. Since then I’ve worked in a number of programming jobs, from web applications to full-fledged programs, across numerous languages and operating systems, though Linux is what I prefer and use frequently.
Since 2006 I’ve worked at Cisco Systems, Inc. primarily as a programmer. I have since branched out into sysadmin work – managing the hosting environment and support software – as well as devops and database management.
I’m a big fan of automation and integration between differing systems. I enjoy designing workflows that pull together and offer various operations across systems depending on the user’s needs.
I do programming, devops, sysadmin, etc. as a career and as a hobby, maintaining a homelab system at home. Some of my hobbies that aren’t tech related are astronomy, homesteading, DIY/crafting, camping & hiking.
I am an Eagle Scout, having earned that rank in September of 1995. I’ve been a part of the Scouting program since 1987, with some breaks due to college, family, etc. After aging out I continued as an adult leader, continuing my growth and contributing to the growth of others. Most of my hobbies and interests have their root in my experiences with Scouting, as well as the desire to continue learning.
I do all of my development on Linux systems, primarily as my daily driver, though I have also done so through SSH sessions. I'm comfortable operating within a terminal, as well as using Vim, which is my primary development environment. Through plugins installed using Vundle, I've built up a development environment that allows me to edit multiple files, run syntax checking as I make modifications, as well as see and navigate through uncommitted changes. When developing and testing, I typically set up Docker containers for databases and other dependencies, though I do sometimes install them through the system package manager.
Generally, once I get a good feel for code, I can navigate portions of it mentally, seeing workflows in the code that lead to desired functionality or defects to be fixed. This is helpful with debugging as I'm often able to quickly track down the series of events that lead to an issue, lay it out to others, and effect a fix.
For a bit over the past decade I have been working on Ruby on Rails projects - both professionally and for some personal projects. I find it easy to spin up a new project, and the extra functionality provided by the library of gems allow me to implement whatever features I need. Some components used in these projects are:
Some noteworthy accomplishments from my time working on Ruby on Rails:
Previously, I had worked on PHP projects, though none using an MVC pattern. They had all been procedural, and custom built from the ground up - including Javascript and CSS. Some items I worked on include:
As part of my current role I have taken on DevOps tasks, building up our coding infrastructure to modern standards. I created Docker images of our code and infrastructure for feature testing, which ultimately led to using Kubernetes to deploy them to testing and production environments. Prior to this we had been using Apache with Passenger, a setup I helped create and maintain until we switched architectures. On other projects I had helped maintain a standard Apache installation.
I have taken on a sysadmin role for my team, setting up and managing Linux servers to run our applications I also host and maintain support applications for development and testing. When something goes wrong, I can connect to the system and review logs to determine the cause, repair the problem, and communicate the details with my team.
I've used a few relational databases over the years. In recent years I've primarily used PostgreSQL and Oracle, including a migration from the latter to the former. Interation with the databases involved either using ActiveRecord models in Rails, designing more complex operations using Arel, or executing plain SQL statements against the database. I've managed views, materialized views, and functions/procedures to manage data, from local and remote sources, directly in the database for use by others.
I've used Redis mostly as a dependency for Sidekiq, though I've developed a couple small features that use it (using the ohm gem).
I've also used MySQL in a PHP environment. This involved writing SQL statements that were run directly against the database to query data, or perform update operations.
Accomplishments:
Much of the work I've done professionally I also enjoy personally. I have a homelab set up where my goal is to manage it similarly to a professional environment. I run a series of VMs and LXC containers in a Proxmox cluster, with an NFS server set up for mass storage. Some systems I use provide LDAP, DNS, Postfix, and Syslog. I have a few self-hosted sites I maintain (including this one) as well as other software like GitLab and Haproxy. I have a database server that primarily runs PostgreSQL, but also has MySQL and Redis for applications that require them. Much of the common setup utilizes Puppet for management. This helps me keep my skills fresh, as well as provide services for my family.
Some personal development projects I've worked on: