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?"
...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
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)
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.
I say keep the legacy gear. If your websites work properly on machines with 800*600 displays and 56k modems, then they'll work fine for everybody.
When our name is on the back of your car, we're behind you all the way!
Windows XP, Windows Vista, Mac OS X 10.4, and Mac OS X 10.5. Linux is a little harder to get on there (EFI and all) and I'm not sure about BSD, Solaris, etc. Overall, it works well enough for me.
Triple booting a Mac isn't too bad; you can use Hybrid MBR/GUID. Quad booting and up is more difficult because you have to use MBR and get around the limitations of the Apple installer.
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.
Yes! With VirtualBox on Linux (and probably others), since you can route all traffic in a VM through a standard Linux NIC on the host, you can use iptables to do just that.
My blog
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?