...terrible at writing about myself.
I started my career early at the age of 9 when I successfully broke my family's brand new 386SX/33 an hour after we got it set up. These days I tend to fix more than I break. I love to tinker and learn new technologies. Being outside and away from civilization is what truly relaxes me.
I've worked as a network engineer, a systems engineer, and general operations engineer. You'll find me at the intersection of the network, the systems, the code, and the interface (it's the magic center of the Venn Diagram).
These days I write Perl, PHP, NodeJS, C, or shell scripts depending on the project requirements. I build interfaces with HTML5, CSS3, and jQuery. I've been learning Backbone.js for a personal project. I tinker with electronics.
I guess some quick and (perhaps) interesting facts would be fun. You see how terrible I am at this? I'm not even really writing; I've been reduced to bullet-points.
- I'm married to a beautiful and wonderful woman.
- My cat is named Bear Claw because she's entirely brown and reminded be of a teddy bear when I first saw her. Yes, she has her own Facebook account (I'm one of those people).
- I have a 2004 Subaru Impreza WRX STi that I drive maybe once a week because I bike and take a train to work.
- The license plate on my car reads "PWNT" and I have to explain it more often than I'd like.
- It took 29 years for me to break my first bone... with the help of a drunk driver and large rock. I'm not going to count my nose since "I" didn't break it.
- I've reached into a 3-phase automatic transfer switch to manually switch it and survived. Thanks dad!
- To me, "The Game" is spotting drunk drivers and reporting them. I have zero tolerance for people who drive under the influence of drugs and/or alcohol.
- I started snowboarding when I crashed on skis and my head landed way too close to a tree.
- Taking photos is still something I love, even if I don't do it nearly as often as I'd like.
- I enjoy re-inventing the wheel sometimes. There is no better way to learn... or improve.
- Eventually I'm going to end up a grumpy old man telling whipper-snappers to get off my lawn.
- Inaccuracies in movies and television shows drive me insane, but my comments drive my wife even more insane.
- When I retired I think I'd like to take up gun-smithing.
I've worked at...
April 2014 – Present
Created scripts and tools to help the operations and engineering teams succeed. Handled on-call duties, dealing with attacks, database issues, storage cluster problems, network issues, and more. Managed servers, network, and infrastructure equipment remotely and physically. Pushed for IPv6 adoption by obtaining an allocation from ARIN and setting up transit and peering peering sessions. In shorted, attempted to program myself out of a job.
Senior Systems Engineer, Platform
November 2011 – April 2014
Scaled and managed a cloud service provider with the overall goals of decreasing latency and increasing reliability (100% overall uptime is hard to beat, but we tried). Used a variety of skills that include network engineering, system administration, programming, and fine tuning to help maximize our use of existing infrastructure and better use new hardware and IP services. Responsible for infrastructure that supported our core resolver services, web clusters, databases, and in-house developer virtual machines. Participated in an on-call rotation to deal with impacting issues in an expedient and thoughful manner.
April 2006 – November 2011
Managed an international IPv4 and IPv6 network backbone, established and maintained network peering relationships, assisted customers with provisioning and troubleshooting, wrote scripts to more easily accomplish my other job functions, and coded publicly and privately accessible services including a network looking glass, RWHOIS service, IPv6 tunnelbroker, and trouble ticket system. Provided one-on-one teaching to support engineers. Acted as escalation point for all customer calls.
July 2003 – April 2006
Provided direct support to web-hosting, colocation, and IP transit customers, escalating issues as necessary. Performed remote hands work for colocation customers. Created tools to help myself and others more quickly perform job functions.
I believe each language has a purpose. Sometimes these may overlap, but there are other distinguishing features that can set a language apart. I like each of the languages below for different reasons and for different projects. I'm not going to use Assembly to build a web application when I could very easily use PHP or NodeJS (that's not to say that you can't use Assembly, but you're slightly insane if you do). I probably wouldn't use PHP for CLI tool when Perl or a simple shell script would suffice. It comes down to knowing what each language is good at and using them accordingly.
A web design I am not, but I do know how to piece things together (this site is evidence of that). Give me a napkin with what you want, an image that you want converted to code, or a site that you want to copy and I'll happily kick it out. Original ideas are tough for me to come up with mainly because I favor function over all else; it was a true struggle for me to make this look good.
I've worked on it all with a lot of companies. I was a peering whore at Hurricane Electric (not a bad thing), I've dealt with more transit and transport companies that I can shake a stick at. Rebooted the wrong router (hostname in prompt please), found bugs in hardware the only way you can, and built things from the ground up.
- Brocade / Foundry
- Juniper VCS
- Network Architecture
- Network Engineering
- Network Security
Everyone has their preferred hardware. I'm no different, but I feel that the range of what I use sets me apart.
Some operating systems are better for certain tasks, so why limit yourself to just one?
I have my toolchest that I use damn near every day. This is what's in it.
My own personal ZSH theme built on top of Oh My ZSH. It has support for Git and SVN repository information in the prompt. It tracks the run-time of the last command in addition of exit code. Shows you how many backgrounded jobs you have. It pays attention to whether or not you're on a network filesystem and disables IO intensive operations. The list goes on.
As far as shell script libraries go, I think this is the best. Until now there have been two ways to build CLI functionality into scripts: getopt and doing it yourself. Most of the time you have to use both. Now you can define routes for your script much like you'd do with ExpressJS or some PHP REST frameworks. With the addition of options at the end of the routes you can include optional and unorder information that will still be parsed and passed.
Sometimes magic methods, sometimes built-in/predefined macros. This brings things like
__FUNCTION__ to NodeJS.
Quick and dirty interface to part of the libuv loop that drives NodeJS. You can only run the loop one time, but you can do it repeatedly. Why? So you can have your code "pause" while still allowing other events to process. This allows you to serialize asynchronous functions.
A NodeJS interface to Bird's
bird6ctl. No parsing is done, just communications and command queueing.
The horrific application that outputs every file operation for a mountpoint. An interesting use would be to slim down a Docker image by seeing what files are actually being used and removing the rest.
Dead simple framebuffer splash application that was written for use with a VM image. Only reads PPM images. No scaling.
Multi-GRE System allows you to create "channels" out of incoming GRE tunnel data and replicate it to multiple targets. It's written in Perl and makes use of raw sockets. It was a fancy hack at best.
Two-way integration for Nagios and PagerDuty allowing alert acknowledgements to travel in both directions in addition to providing a better Nagios-to-PagerDuty gateway.
A NodeJS-based network looking glass that I wrote in two and a half days (about 33 hours of work) from scratch while learning NodeJS. The first day I wrote the remote agent which handles talking with Bird and running local network utilities for ping and traceroute support. The second day was spent writing the backend of the interface. And least amount of time was spent on the UI. I'm not a designer.
My ongoing project to create a 64bit POSIX-compliant kernel from scratch using mostly C. So far my kernel loads via any Multiboot-compatible bootloader (GRUB2), sets up memory, initializes application processors, scans buses, and uses a built-in LUA interpreter for drivers. I only have it working in QEMU at the moment, but that's mainly due to my not wanting to write a bunch of drivers initially.
A very simple web application I wrote to help me split up our San Jose Sharks season tickets. Everyone pays for so many games, then ranks all the games by preference of attendance. Then I run the pick script to assign games to people. Dead simple.
A long-distance network link simulator that introduces a run-time configurable amounts of latency and loss between two Linux TUN or TAP interfaces.
Cheap RC "toys" have never been my thing. Sure they're fun, but control is so limited. The first time I drove an RC car with proportional steering and throttle I was hooked. This was the future! Luckily, I was right.
These days I mostly flying multirotors. The media and goverment call them "drones", but I don't. To me a drone has no pilot, remote or onboard, it follows either a predetermined flight path or uses collected information to create the flight path as it goes. Your Roomba is more of a drone than my multirotors. If anything what I have are UAVs, unmanned aerial vehicles.
I'd like to learn to fly planes so I've been messing around with aerofly RC. I'm gonna need more practice.
I've loved taking pictures for as long as I can remember. In high school a friend's dad was cleaning out a closet and found a Konica FT-1 Manual body still shrink-wrapped in its original box. I gave him $20 for it and bought some used lenses on eBay. I was smitten. Having never taken a photography class I learned about shutter speeds, film sensitivities, exposure, focus, and composition by doing taking photos and seeing the results. Best way to learn in my oh-so-humble opinion.
I love games that bring people together just as much as I enjoy games that I can play alone. Cards, boards, dice, computer, strategy, adventure... Games are fun.
Before I was a year old my parents took me to the lake. It's not something I can remember, but the proof is in the pictures. I could not walk or even get around on my own, but I feel like I fell in love with the outdoors. Growing up my brother, my sister, and I spent nearly every weekend of the summer at the lake with our parents; sometimes we camped. We went hiking. We went on bike rides, some of which were pretty long (Tour de Cure? Check!).
My love affair with the outdoors comes in many forms these days. I hike, bike, hunt, star gaze, take photos, and more. I can say with absolute certainty that my hobbies are not cheap; a fact my wife routinely reminds me of.
I've hiked in a lot of places and I've loved them all. It's my belief that there's no such thing as a bad hike (unless you count the stairs at Ohlone College because those just suck). The hike is even better if you can mix in some camping along the way.
I literally grew up going to the lake and I learned a lot about being a team player from it. Waking up early to help pack the cooler and the truck, loading and unloading the boat, ferrying gear between the boat and the beach... The list just keeps on going. So where do we go? Usually one of these three places:
The last time I was on snowskis I crashed and burned with my head landing inches from a tree... no helmet. The switch to a snowboard gave me (in my not-so-humble opinion) far more control. I'm not into huge tricks, jumps, or moguls; I want to have a nice ride down the mountain. And where do I get my nice rides?
One of the things I remember most from my childhood was getting to go hunting with my dad. My brother and I spent the weekend with our dad and his childhood friends. We were less concerned about killing things and more worried about having a good time together. That mentality still drives us today whether it's a one-day hunt or a week-long trip.