Setting Up a Home Dev/Testing Environment?
An anonymous reader writes "I'm a Project Manager (hold the remarks) who recently decided that I want/need to get my dev skills more up-to-date, as more projects are looking for their PM's to be hands-on with the development. Looking around my house, I have quite the collection of older (read: real old — it's been a while) PCs — it's pretty much a PC graveyard. Nothing that would really help me set up a nice dev infrastructure for developing web/database apps. So, my question is as follows: Should I buy a number of cheaper PC's, or should I buy one monster machine and leverage (pick your favorite) virtual machine technology?"
You can setup multiple boot or VM environments for Windows, Linux, and of course Mac OS X. You can easily use that to learn just about anything you want to learn (aside from SPARC or Power assembly language)...
We were all warned a long time ago that MS products sucked, remember the Magic 8 Ball said, "Outlook not so good"
...I would go with the one system with Virtualization. You can download a copy of Xen as an installable OS or install RH 5.x with Virtualization. You can then backup the instances and if you blow something up restore quickly. It's also easier on the pocketbook.
The simple truth is that interstellar distances will not fit into the human imagination
- Douglas Adams
Virtual Machines are GREAT for Dev/Testing. You can setup machines with several different configurations, operating systems, etc., for testing and development. Plus, for N-tier web/database apps, you often want to be able to test a variety of different infrastructure choices for scalability and performance testing.
Nothing really beats the way you can change things around on-the-fly with virtual machines. It really gives you the ultimate in flexibility.
My blog
How about a beowulf cluster?
Depends what you're doing. For example, database servers virtualize poorly, but most other applications will run just fine that way. Everything besides your database machine could probably run as Xen paravirtualized servers on one or two machines.
That has the advantage of not producing as much heat and draws less power, which is an advantage unless you own some sort of stock in your local power utility.
"He may look like an idiot, and talk like an idiot, but don't let that fool you. He really is an idiot." - Duck Soup
Get started with what you have now. Buying a new tool won't make you a better programmer, you already have a computer of some sort so you have all that you need to get started. Just get started. After a while, if you like it, and do well, and think a better computer would help you be more productive, then consider maybe buying hardware. But don't look at it as a prerequisite, you don't need to start off that way. If you want to buy something now, it should be a book.
is competition good, or is duplication of effort bad?
What exactly are you looking to do? If your doing develpment with Java, Xen would be a natural choice, and the hardware you need to run a xen Dom0 and some linux guests is trivial. You can go virtual with older hardware. I have a dual Intel 700 with 2 gigs of SD ram running in the office that I use as my own web server and that I experiment with. Currently there are 3 guests running and they all run smooth as silk. CentOS 5 machines. Some of our devs have the same setup and use a guest as a build server and another one for testing and QA. If you want to run Paravirtualized hosts that is. If you are looking for fully virtualized hosts, you might have to splurge for some newer hardware (processor specifically). I might also look into KVM and Fedora since Xen is getting boxed with the release of RHEL6 I believe.
No, really? What is old? If you've got a couple of P-III in de 600MHz++ range, or even a couple P-IVs, you're golden. This is not going to be a heavy load system. It can't be, it's for you alone. I've got a couple of servers, an AMD64 3000+/2Gig which I got from a dumpster (originally 256Meg, but I had some RAM lying around), my old desktop, a P-III 800MHz/768Meg RAM serves as my parents server and I built a Duron 800Mhz/512Meg RAM for my sisters business running Debian/postgresql/SQLLedger.
Depending on what you call old, you have tons of options. However, if you want to talk power efficiency. In that case, buy a good (but not monster, those eat power) machine and virtualize. You'll realise soon enough how much power your virtualised "server" requires. It might be as little as 256Meg RAM running Debian-stable for your "test" servers.
Of course, I don't know what you want to do...
Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
Since it's a dev environment, check out Virtual box.
The simple truth is that interstellar distances will not fit into the human imagination
- Douglas Adams
that if you're a PM (and not something closer to a team lead) who is being asked to "get more hands-on" with the development you have bigger problems to worry about than setting up a proper dev environment. Your situation sounds very similar to the company I just got laid off from who let more than 60% of their IS consultants go (in an environment where 90% of the devs are consultants). They're now so top-heavy that it will be a wonder if there is any kind of release in the next 6 months.
Also you didn't exactly provide a lot of detail regarding what kind of development you need to do. Personally I have a single LAMP server set up for my own projects with Subversion for version control and a couple of Bash scripts for nightly backups to an offsite location.
God, schmod. I want my monkey man!
If you do go the VM route, consider using puppet to define your machine configurations. That'll make it much easier to build out more than one of each machine.
Along the same lines, if you don't want to run a bunch of machines or VMs yourself you could spin up new EC2 instances as needed, point them to your Puppet server, and have them built out - consistently and correctly - in short order. Good times.
The Army reading list
VM stuff is nice, but sometimes you need to have the "real thing" - sometimes stuff performs significantly differently when virtualized. Some VM stuff don't have good database performance.
:).
With two machines if you're doing web/database, one can be the client and the other can be the server.
No point getting "monster" stuff if you mean "high end", since it's diminishing returns once you get above a certain point.
Machines with 2GB or even 4GB of RAM aren't that expensive nowadays.
What I suggest you get are extra drives, and preferably easily removable/swappable drives.
Then you could have huge drives (good GB per $$$) with virtual machines in them, and you could swap them out for cheaper smaller drives with "real machines" in them and test different O/Ses and configurations without having to waste time reinstalling and updating.
A 3rd machine would be nice - so you can do work or post on slashdot etc without affecting your "real machine" benchmark tests
One machine, at least 2 monitors, and as much ram as you can afford.
With quad and octo core machines readily available, it's a no brainer. But go for the 64 bit version of your favorite OS and gobs of ram. A few hard drives in raid 5 or 10 always help. A great keyboard, mouse, and 3 monitors will complete the developers god box.
Really, CPUs are ridiculously fast, and it's all about the IO devices and memory today.
Blessed are the pessimists, for they have made backups.
If you are developing a desktop based application having multiple computers with a variety of different hardware and software configurations can be a huge help. You can virtualize servers on a beefy machine but mixing different hardware and software is critical for ensuring you're product works in the real world.
Contrary to what a lot of people are suggesting, you don't need extra computers at all (in fact, recycle all those old ones, they're only taking up space).
You don't need to worry about performance if you're just learning the basics, and so there's no reason for all kinds of over-engineered setups like separate development and testing environments and stuff. Spend too much time setting up all this junk and you won't have any time left to actually write code.
I do all my development on my laptop. I'm running Apache, MySQL, PHP, and Rails, most of which come stock with OS X, and that's all I need. Add VMware for testing sites in IE and you're done. If you're using Windows, check out WAMP; if you have a Mac, either try MAMP or use the stuff that came with the system (you'll have to install MySQL separately in this case, which is what I did); if you're running another *nix variant it's all just an apt-get or yum away.
I was working with 2GB RAM which was fine for everything but VMware and just yesterday upgraded to 4GB. Two is usable though, so don't even consider this a requirement. As far as that goes, don't worry about testing in IE at all if you're really just doing stuff to learn. Worry about that if/when you decide to make something public. Skip VMware and you can do it all in 1GB easy.
Web consulting +
Since you don't need boxes all the time and running using Amazon's EC2 seems to be the way to go:
http://aws.amazon.com/ec2/
Also gives you the ability to experiment at scale, while paying $0.10 / hour.
All weakness is within you, As is all courage.
Simple... Get an Intel based Apple...
Yeah, if you want OSX you'll need one.. but which one?
If OSX is going to be your primary OS, and you want to mostly work in OSX and virtualize everything else on top of it... by all means get a powerful mac, ideally a pricey tower so you can get some extra hard drives inside it etc, which makes multi-booting a lot less of a hassle for when you don't want to access linux/windows in VM.
You can setup multiple boot or VM environments for Windows, Linux, and of course Mac OS X.
Except you can't VM OSX desktop edition, and buying an ADDITIONAL copy of OSX Server for each VM is expensive, and doesn't really help you since, as an OSX developer you want to test your software on OSX client, and probably both 10.4, and 10.5, possibly even 10.3 -- DESKTOP editions, since that's what most users use.
So, my approach has been to buy a powerful PC, and do all the linux/solaris/bsd/windows stuff on that, and then to have an Apple laptop. You can get a very serviceable PC tower for the fraction of the price of a Mac tower, and if OSX isn't going to be your 'primary' OS its much more flexible way to go.
The money you save by buying a PC tower instead of a Mac one can then be thrown at at a Mac Mini and a cheap KVM... or in my case, I have an Apple laptop.
Doesn't matter whether you use Xen, Vmware ESXi, VMware Server, or whatever. Virtualization is how your customers will deploy your product, a way you can reduce costs, speed product cycles, and as a PM you should learn as much about it as you can.
So buy a well-specced out box, with 2-4 CPU cores, 4G - 16G of memory, several sata drives, and install a 64-bit linux with the virtualization solution of your choice.
From that point, create VMs as you need. You can even turn your existing machines into VMs with VMware converter.
As other posters have pointed out, you can donate or recycle the old hardware.
Good luck, and have fun!
I'd suggest picking up a decent (it doesn't have to be a monster, unless you're trying to replicate a powerful production server at your home) machine, and run some sort of virtual hosting on it.
I have a pretty weak machine that I use for development hosting - a crappy Intel Xeon 3050 (2MB l2 cache, 1.86GHz)and 8GB of DDR2-667 RAM. I put in 4 250GB drives, and run Xen Express 5 on top of it. I have two gigabit ethernet ports on it at the moment. I have 7 virtual machines running on it right now - 5 debian etch servers and 2 windows 2008 x86 servers. One of the 2008 servers is running Sharepoint Services, and the other is a domain controller. I messed around with Xen 4, but really decided to stick with Citrix' product with the 5.0 upgrade. I tried running VMWare Server 2.0 on the same computer (Ubuntu 8.04.1 LTS), and I have much better performance with Xen 5. Additionally, the XenCenter management tool is a lot nicer to work with - it makes connecting to iSCSI storage arrays (put a couple of large-capacity PATA drives in those old computers of yours, a $20 D-Link GigE card, and throw OpenFiler on them for a really easy, cheap SAN) stupidly easy. As I mentioned, the performance is nice - the SharePoint VM and DC both respond a lot better under Xen than it did under VMWare.
Regardless of what platform you choose, I'd suggest just get one decent computer (it doesn't even have to be particularly fancy - any dual- or quad-core around 2GHz with 8GB of RAM will do great) and put your VMs on there. Building and tearing down machines and networks is so much easier under a virtualized environment.
As a guy who makes his living testing software, I can tell you that the biggest boon to testing has been virtualization. The ability to have multiple environments running is great. The ability to painlessly restore them to a known good configuration saves hours daily. Snapshots are your friend.
Get a recent machine with plenty of disk. It doesn't need to be a monster - a mid range dual core or quad core is plenty. Several disks are better than a one, as it helps I/O bandwidth. Get enough space to hold your host os, and several VMs. More memory is better, and with 4GB kits running less than $50 get as much as you can. Use VMware/Xen/KVM to build the test environments you need, then snapshot/backup/copy them before installing any software you'll be testing.
Alternatively, if you're testing Linux apps, it might make more sense to get a vps - Linode.com has good ones. Less horsepower, but easy enough to reinstall. And no capital investment.
-- "Never underestimate the power of human stupidity." - R.A.H.
I don't care what anyone else says, in my experience virtualization sucks for most of the development process.
Years ago (20+?) IBM did studies that statistically proved that sub second response time was critical to productivity. As more and more stuff moves to the web we seem to have forgotten that fact, but it is in my experience very very true. Now I don't care how much money you spend, a virtualized development environment will never be as responsive as a native environment on the same hardware. Fast response time = productivity. You can keep a fast pace on your train of thought. Hit enter and wait 5 seconds for a response and your mind wanders. You lose your concentration.
Virtualization makes sense for replacing legacy hardware servers and for a portion of the development process, Quality Assurance/Testing. But keep the design and code writing native. Take your fastest machine and put your DEV IDE on it. Take your next fastest machine and put your database/web server on it. Or for a better model put them on separate machines, but keep your fastest machine for the IDE. And true, some can do great dev work without an IDE (like with vi/emacs & command line) but that is something for the very experienced, you know the type that has every API call memorized. The rest of us need robustness and the fast context sensitive help of a modern IDE.
slashdot troll = you make a compelling argument I do not like the implications of.
If you're developing web/database apps, you don't need virtualization. Just work with different user accounts, "dev" and "test" for instance, then have virtual hosts and point these to directories owned by those accounts.
Use SVN to check in code/database dump from the dev account, then log in as test and do a check-out and database-upload. Commence testing.
As an aside, you're a project manager so you probably have some feeling for the commercial side as well. Why not up the stakes a bit and get a small paid project as a freelancer? Get some designer to get you a PSD, get it sliced/based by a HTML guy and then proceed to code in the dynamic parts. Don't overdo it, a project in the $1000 to $2000 range is excellent for exercise.
8 of 13 people found this answer helpful. Did you?