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:

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.

Comments

Post a Comment

Popular posts from this blog

How to identify a skilled programmer during an interview

How does one identify a skilled programmer?  No company that has interviewed me could tell the difference between myself and other programmers they'd interview.  The interview process is truly a game of luck in this industry--on both sides.  Both the programmer and the company are basing their actions entirely on luck.

Companies have come up with numerous methods to attempt to discern a good programmer from a bad one.  The best tricks they have include a series of math problems, algorithms, problem solving technique tests, and even obscure programming questions, some without definitive answers.  As an example: Is there an authoritative source of information on the core principles that define object oriented programming?  I've heard everywhere from 3 to 7.  In a field of research about a synthetic concept, an authoritative answer is almost impossible to obtain.

Programmers were then forced to study to the interview.  Careercup is one of my favorite sites for this.  This almost …

Dependency Injection - You're doing it wrong!

So I have worked at a lot of places and seen a lot of different styles of programming.  Early on in my career, I became acquainted with the concept of dependency injection.  It was a hard topic to grasp, but I have learned understand it deeply.  Now, when I step into a new application that uses it, I can very quickly see the flaws in the implementation, and there's a common one I want to talk about today: global singletons.  But we'll get to that in a minute.

What is Dependency Injection?
Dependency Injection is exactly what it sounds like.  You use it to inject your dependencies. The unique part about Dependency Injection though, is that you can do this at runtime.  Now this sounds fancier than it is.  By inject we don't mean they're downloaded for you.  You still have to have all of the parts installed where you want to run your app.

Dependency Injection is somewhat of a complicated topic to a newbie.  Let's start with defining the word dependency here.  Specific…

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…