Skip to main content

My Home Server Setup

I talk a lot about concepts and theories on this blog, but it's rare that I talk about the way I do things.  In order to provide some insight into my life and so that you can understand my perspective before assuming anything about me, let me discuss a little about my home coding environment.

Windows Server 2012

At home I use Windows Server 2012 for my hosting.  Years ago I hosted on Windows 7 with IIS and even had an ubuntu server for a while.  I use Server 2012 because it's the latest and greatest from Microsoft and it keeps my skills up to date and my resume fresh.  I also use it because it's based on Windows 8, so it works well with touch-screens.  It makes it easy for me to remote in from my phone or tablet and not have to worry about a mouse or keyboard.

Virtual Box

I need Virtual Machines.  Whether it's for testing, or for hosting services that just don't host well on Windows.  I use Virtual Box for all my virtual machines mostly because it's free and I never had a need to "upgrade" to VMWare.  The machines host several applications including Minecraft.  Minecraft is one example of an application that uses significantly less resources in linux.

Ubuntu Server

I've explored other distributions of Linux, but there hasn't been a need to go further than this.  When I install Ubuntu Server on one of my VMs it asks me if I want to check a box to set it up as a LAMP server.  You just can't beat that.  It's clean and it keeps my bash skills up to date.  I try to keep the VMs up to date with the latest ubuntu version as much as possible.

SCM Manager

It was recently that I came across someone who had found a decent repository manager that was free that worked with Git.  I happily installed SCM Manager on one of my ubuntu VMs and have been thrilled with it ever since.  It gives me access to individual commits and merges and even the source code for the repository at each stage of development.  This was kinda tricky to set up such that my source control is hosted in windows but the manager does all of the work in linux, but it's clean in the end and doesn't require a large VM hard drive.  SCM Manager had a nice plugin to push check-ins over to Jenkins for automated builds, and so I picked up:


I use Jenkins as a continuous integration server.  This way all of my checkins in SCM Manager are automatically built so that I can show updates to my code hosted on the server immediately.  This is a recent piece for me but I've never been happier with a piece of software.  It's hosted on the same VM as SCM Manager in order to save issues with calling over the network.  They just hit each other back and forth over localhost.


I use TFS at work most places, and even SVN, but when I'm working on my projects I prefer git.  It's DVCS and it branches and merges smoothly, which is more than I can say for the other two I've listed.  It was a challenge using git on windows until google came out with git extensions.  This is a beautiful UI to work with.


I needed a way to work with requirements and collaborate on ideas with friends.  I have been using Trello because it was written by Joel Spolsky and I haven't really needed anything more than it.  These are just home projects after all.

PHP, C#, Java, Ruby, Node.js, Bash, Dart, LPC, ...

I truly believe in the Polyglot programming ideal.  I have scripts and sites in every language I can find to write them in.  You'll notice my list leans toward the new, rather than the old, and that's because I believe in moving forward rather than backward.  Sure, I could learn C in a few weeks and code assembly in a few months, but I have bigger projects to do, and I'll leave it to those who write new languages and apis to spend the time tweaking them to limit excess CPU cycles.  I got code to write.


Yes, I use a laptop for portability.  It's currently running Windows 7 but I plan to upgrade to 8.  It's a gaming laptop, the Asus G75VW 3d.  I upgraded it to use 32gb of ram (way more than I need, but as I said, I love virtual machines).  I upgraded the processor to 3920XM.  It has an upgraded wifi card that supports the blue tooth and some cooling and led upgrades from XoticPC.  DON'T BUY FROM THEM.  I've had the worst customer service experience of my life with them.  They incorrectly put together my laptop 3 times, and I had to pay to send it back for RMA (including insuring the very pricey hardware it cost me a lot to ship).  They give no ETAs on anything.  I am currently waiting on yet another RMA and it's been over a month and a half without so much as a phone call letting me know things were going ok.  The laptop is good, but don't buy from that company.  Enough complaining.  My laptop hosts some VMs with testing stuff, I store all the code in git repositories and I can always drop out and play a video game or two if I'm bored.  It's a great rig, if a bit heavy and short on battery life.

Nexus 7 + Galaxy Nexus Phone

I have the original google phone, the Galaxy Nexus, and the Nexus 7 tablet.  The tablet is blue tooth tethered to the phone so that it always has internet access.  I bought a logitech blue tooth keyboard so that I could code remotely without the laptop.  That's when I clearly found a need to get specific apps to work with.  First, I found that Jump Desktop was the only RDP app that worked correctly with my VirtualBox VMs and allowed me to remote over the internet instead of intranet restricted.  I like it so much I may buy it, it's only $5.  Then, I needed an application that allowed me to view code.  DroidEdit is the best application I've seen for working with code on Andriod.  A lot of linux guys who love VIM swear by Terminal IDE, but I think it's crap for various reasons which will take too long to list here.

Once I had an editor, I needed to be able to work with git.  After various attempts with many programs I sucked it up and bought AIDE.  The text editor is not nearly as good as DroidEdit, but it is the only git tool that allows you to push to remote repositories (albeit the paid version is required).  This was enough to get me able to work remotely on my code.  I also needed to do some image editing for sites, and Image Editor was enough for the basics here.  Finally, I keep track of my notes with google keep.  Spectacular little app, though I'm still looking for a decent whiteboard type app for android.  Most of them are like 8 steps to start up (start app, select drawing board, enable editing, switch config, etc).  I play Ingress, and have a number of other useful toy apps and music apps etc for my tablet and phone, but that's it for my development environment.


Post a Comment

Popular posts from this blog

Teams and Complexity

Let's pretend you're a car mechanic (I don't know, maybe you are).  But you don't work at some shop in town, you work at a bigtime auto-maker onsite at the factory.  You help build cars from scratch.  You work with a lot of other car mechanics, and various engineers of different levels.  If we were looking at the 1910s, you might be working for Henry Ford on one of the first ever assembly lines.  Either way, you have a specific part of the car you're responsible for.  Your skills probably extend beyond that, and you might work on a different part of the car each day as your manager moves you around to keep the factory efficient.

One of your coworkers, Bob, is a superb engineer.  He is very good at building cars, far better than you, and he does it faster than everyone else.  Your boss really likes him.  You often get stuck after him in the assembly line, so you know exactly what sorts of things he does.  He's not sloppy, but he likes to do things his way.  He w…

Managing Programmers

Working with other programmers is tricky.  That said, it's nothing compared to the job of managing programmers.  One of my favorite quotes about Perl is that (paraphrased) "a Perl developer is like a rockstar.  Now imaging having a bunch of rockstars in one room together and you will understand why you don't want an entire team of Perl developers."  It's not about Perl here though. What's important to understand is that any developer worth his salt is going to be like a rockstar.  And yes, there are a lot of professional developers out there who aren't worth their salt, but that's for another post another day.  Rockstar may not be the right term here, but think of it this way.  These guys are smart.  They may not be geniuses, but there's going to be things that they know that you don't and probably never will.

I've seen it more than once and it's not going to make some Product Managers happy, but I'm going to state a fact, an eleph…

Managing Developers is HARD

I've been a software dev for a long time.  I've also been running my own software company for a few years now.  This is important information because of why I do these things.  I am a sofware developer because I love learning.  I slack off when doing a job that bores me, and software development always has something new to experience which keeps me excited and interested.  Why start a software company then?  That puts me in the role of manager rather than developer.  The truth is simple.  I've worked for a lot of companies, and I don't see any of them doing a great job of managing their software development.  That's not to say none of them have done a good job, but no one out there seems to be doing a great job.

How are they different?
A lot of companies get this part right.  Software developers are different from other employees.  The distinction is important in the same way it's important to acknowledge that an insurance agent is different from a construction…