« Kevin Ngo

One Year Working at NET

20 Apr 2012

Since my time at NET has been cut short by a season-ending injury to my car, I’d write about it so the memories aren’t overwritten when I’m down in California. It’s been a year since I started working at OSU’s Network Engineering Team (NET) as a programmer, and I have few words (mostly happy swearing) to say how awesome it’s been. I’d probably be lying face-down in in some ditch somewhere had I not been hired. I’ve met many smart people, picked up the art of hacking, been within three feet of Linus Torvalds, and nabbed an internship at Mozilla. NET is one of the sweetest places to work on campus, heck I’d might even work for free (don’t tell my bosses).

What is NET?

NET “provides data hosting, networking, phone services, and conferencing solutions for the OSU community”. Basically, NET keeps OSU’s network beating. Every time there’s slow Internet, NET lubes it up. And every time there’s outage or attack, NET is on the scene. Without NET, students would not be able to log onto Facebook. Oh, the tragedy. NET runs about three data centers on campus, two of which are in Kerr, with another data center on the way (plopping it right on top of some farmland).

I heard about the opening at NET from uberj who had already been working there. I told him, “I’m a pleb! I need to find a job and become awesome”. Funny thing, uberj was my TA for a freshman CS course that I was taking during my second year. We were in the same classes and that I was browsing a certain social news website. Lucky, had I taken that course as a freshman like everyone else, tested out of it, or had I not been browsing Reddit, I’d be probably be in that ditch I mentioned earlier. Or maybe perhaps I would have won the lottery.

Interview and Offer

I was interviewed by three people, two bouses and a student. At that point, I hadn’t realized that it was actually a programming job. Unfortunately, I acted as if I was interviewing for a helpdesk job. The best things I had programmed at the time were a lame network chat client, lame network tic-tac-toe game, a lame (and broken) DNS client, and some programming challenges. All I knew was C and Java, and their language was Python. I could program, but not towards anything practically useful (thanks OSU for teaching me how to draw smiley faces in Java). Though I wanted to learn, and I had a black belt in Google-Fu (yeah, that was on my resume). Apparently, that was enough.

Surprisingly, I found out I got the job via email one day while I was lounging around during spring break. I had been trying to step my game up and was in the middle of programming a heads-up poker system in Java (my secret first GitHub project). I dropped that pretty quickly. I look back at this job offer along with my Ford Family Foundation scholarship and upcoming Mozilla internship, and I think how extremely lucky to float life like this.

First Days

It was that sunny time of year fitting for shorts and polos. I buzzed into the loud humming of the data center, and walked into a small quieter room within the data center to meet my co-workers. Four people sat in front of long desk that ran around the edges of the room. It was sort of a really cool hackerspace. Not sure if I was ready for this. I went to introduce myself to one of the guys. He stares at me for a bit and turns away. He turns back around with a small scratch pad, “my name is David, welcome to NET bro!”. uberj turns around and tells me that he’s mute. “Oh…nice to meet you”, I say sort of surprisingly. He wasn’t mute. All of while this is happening, limed, the boss, is shaking is head disapprovingly at the massive trolling. It really was ‘welcome to NET, bro’.

I did not set too good of an impression showing up very late for work the next couple of days by oversleeping past noon. New hires are kept on sort of a tighter leash to…prevent certain repeatings of history.

Now let me do my Charles Dickens impression. Walking through the data center into the office was nostalgic. The hums and fans of the data center were loud, but calming like white noise, and it would muffle as I closed the door behind me into the office. I would buy a breakfast burrito and Arizona iced tea to start the day at 8am. I’d be the first one in, munching on my burrito and listening to VLC streaming music from my server in the dorms. Then thedjpetersen would walk in later and we’d peacefully code away.

Learning Python and Django

The days when I didn’t know Python, the concept of a web framework, or even HTML, those days were the dark ages. I started the lurk-and-learn phase of any new programming hire. I’d silently read over our codebase, maybe ask the occasional question. It was a “figure it out yourself, read the docs” kind of place, easily enough that’s what I had always done. I read over Learn Python the Hard Way, Dive Into Python, The Definitive Guide to Django, and watched the Google Python Classes. There weren’t any projects for me to do yet, so I just used my downtime wisely.

thedjpetersen, who sat next to me, was working on a Django web application for managing DMCA takedown notifications. This would later become my adopted child, named Banhammer. Banhammer was only the frontend, the backend was a suite of scripts which we named Supergruntmaster9000 after a Dilbert strip. I would also later help in raising this child as well. One day, he gave me a small checklist of things that needed to be done for the site, to keep me busy. They were to make form fields persist after submitting, adding a field to a form, and humanizing a form field. Now I had never done anything on the web besides make stuff blink nor had I imagined I would ever become entangled in the web (see what I did there?).

Well after a day or two, I actually finished these tasks, to my own awe. It required some minimal understanding of MVC frameworks and Django templates, but damn was I proud. After that, I fixed the search functions by hacking on Haystack for a while, which felt monumental. From there, I just did more and more stuff, absorbing knowledge from thedjpetersen through osmosis. I continued to help build the web application (which would become quite a long-term thing with a larger scope). I adopted a set of Python scripts that, given search parameters, parsed massive network logs to track down hosts and did some hacking on that.

The Lonely Summer

Then as summer rolled around, everyone vanished. Everyone either graduated or got internships and jobs somewhere else. After about two months, I became the senior (and only) student manning the battle-stations. To keep myself from becoming lonely and from growing insane, I constructed cardboard/whiteboard versions of all of my former coworkers to converse with. We had some good times, right, guys? Right…? Okay, they were a bit quiet and stiff, but at least I had the OSL developers to talk to. Right, guys? Right…? :(

Well, at least I became so focused, I was practically vomiting code. I passed all previous NET students in number of commits in about four months (I am Commit King). I refactored and revamped all of the code to shiny new heights, added features like a boss, and tore down tickets like a madman. I started my own project, MongoDB network log dumping and searching with a Django web application which I worked on for a couple of months and is just now seeing the light of day. I named it netshed.

It was a fun and sunny summer filled with Steam games, coding, going to the gym, and LinuxCon. The college town of Corvallis, usually swarmed by students, was not swarmed by students. uberj soon came back to NET, and fall term was rollin’ round. There were now only two NET students, what used to be five. We needed some more firepower.

Being the Hirer and the Hiree

We spent several weeks racking a stack of resumes for new student hires, and then the interview gauntlet began. Over the course of a few days, we interviewed about 7-8 students. I even had to awkwardly interview the person who I had previously got the job over. Now, that doesn’t happen everyday. We picked up fridgei, who I had met on IRC where we talked about coding and poker and a murrown, a robotics guy with some sought-after skills in Python. I previously went more in-depth on what it’s like to interview others in my position as a student.

Around the same time, I myself was being interviewed by Mozilla, going through a series of three interviews. Talk about being on both sides of the table.

Cyder, the Future

I haven’t talked about this much, mostly because I try to actively repress it (with some help of medication), but I worked on a PHP web application called Maintain. I said PHP so you might know where this is going. Maintain is used on OSU to register hosts and devices onto the network and manage DNS and DHCP. It was written almost ten years ago in a homegrown PHP “framework”. The code is actually almost as ugly as the frontend which consists of tables all the way down, strewn in obnoxious shades of black and orange. Now, to be fair, this was ten years ago when the concept of a web framework was new and the Internet was a wild west. To be even more fair, it works very well (though it has some inherent flaws in its schema for DNS). It has the right idea with managing DNS through a web application in front of a database that pushes out to a nameserver. But it’s aging, and not like wine.

We talked to OSU Central Web Services, a Rails shop, to perhaps contract them to build it. They went through some meetings. In the end, our budget and their availability became an issue. So why not save $500,000 and have us students build it. We have the skills, we have the technology, and we’re relatively dirt-cheap.

uberj began to plan out the schema, set up the models, wrote many tests while I focused more on school. We named it cyder, a play on CIDR and a following of the recent trend of naming web applications after alcoholic drinks here. It was a bit rough getting each other into each other’s workflows. I had worked at NET for almost year, but we actually never really worked together. But thanks to Git branches and with him doing mostly backend and me doing more frontend, we got into the flow. And to this date, we’re still working on it. We’ve had a whole month of downtime, waiting to move to California, so Cyder has become a full-time thing. What’s cool is we could probably make it our senior engineering project. I will talk more about the project in later blog post about Django class-based generic views and Jinja2 template inheritance.

Thanks to limed, peterkir, chapmant, uberj for getting me into NET and thanks to thedjpetersen for teaching me stuff. And thanks to fridgei and murrown for adopting my babies, netshed and banhammer, they have found good homes. Woop woop.