Tuesday, May 28, 2013

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:

Jenkins


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.

Git


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.

Trello

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.

Laptop


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.