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?"
Yes.
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?
Use two different virtual machines. One for dev, one for test. Which VM to use, is an exercise for the reader. /thread
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
Depends largely on what kind of project you're looking at to use as a refresher.
If it's some small project, then probably one of the computers you have laying around is sufficient (as long as it can run whichever dev toolset you're planning on using.
As far as testing environments - if you're just practicing, you probably only need a simple environment - like the same desktop used for dev. Or another machine with a clean environment (whatever your primary testing environment) All the way up to a beefy virtual server with multiple images of various environments.
Most it depends on what you're look for out of the experience. Are you looking to replicate what your team is doing? Or just brush up on Dev/Test methodologies?
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.
as more projects are looking for their PM's to be hands-on with the development
So now, not only do we have to deal with the long laundry list of tech skills, but we're now going to have to put PM on our resumes too?
Software dev is getting shittier and shittier every year.
This is very much an engineering problem. What's better for you depends very much on what kind of development you're doing and what your "measures of goodness" are.
Multiple machines generally work well when you're doing large builds that take tons of CPU for a long time (say, repeated builds of a Linux kernel or similar). The big reason for this is that the machine you're on isn't being eaten up by the background build.
VMs are better when you just need to test in multiple environments (and things like snapshots really help). This assumes, of course, that the virtual hardware is OK and you don't have specific hardware requirements for your tests.
There are loads of exceptions to the above and there will likely be loads of (totally reasonable) conflicting opinions.
My personal development environment is a hybrid of the two, since I have both hardware-specific and hardware-agnostic work to do. My guess is that, if you're doing normal business-type development, snapshots will be more useful than background performance. As a result, my blind recommendation is a VM box (not necesarily a monster), with as much RAM as you can stuff in there (proc and HDD are generally less important). Maybe separate your interactive dev box to a discrete machine and use remote access to the VM box.
"Time flies like an arrow; fruit flies like a banana." --Groucho Marx
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.
You know, you just aggravated my Freemanic Paracusia.
I hope you're happy.
I would advocate getting a VPS (i like slicehost) for $20 a month, where you can actually host a site, and play a bunch. Then just build and tune your apps on your laptop and deploy to the VPS. The downside is that the vps won't have much ram to kick around, but i am skeptical of server apps that need more than 256mb per instance to run as a dev env.
I built a 16 GB RAM + quad core Yorkfield box about two months ago. From Newegg, parts came to about $1,800. This gets me a 4 guest VM host reasonably cheap - AND - I'm not burning a lot of power (heat) doing it. (I did not load up on hard drives - one 750 GB SATA is going to have to be enough).
"The most sensible request of government we make is not, "Do something!" But "Quit it!"
Don't use your old PCs because they are worthless. Just donate, recycle, or sell them because it will be a major headache to install the OS, software, and keep them updated. Use VMWare player or Virtual PC (I use both of them) and you can download pre-built images. And one more benefit... using virtual machines will keep your electric bill lower than a bunch of old PCs.
I Heart Sorting Networks
Get a decent machine with a buttload of RAM and use your VM of choice. It's infinitely easier to clone VMs, archive them until you need them again, etc. than it is to re-install a different flavor of Linux on an old machine just to test something for 10 minutes.
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!
I use laptops for my home server needs. Really, most laptops have plenty of processor/disk space for my dev/test needs. The take up less space, use less power, are quieter, and don't heat the room like bigger iron.
If you are planning this for your house, consider the environmental impact as well.
I used to do the multiple machine thing. Between the noise, the heat (haven't turned my heater on in 3 years) and the electrical bill I decided I didn't like that approach anymore; and switched to a large machine with xVM.
Personally though, I agree with eison. Changing your hardware isn't going to make you a better programmer. I'd start with whichever machine you currently have that will be quickest for you to get started on... and as you start to feel like you need multiple machines, then consider which approach to take.
http://www.google.com/profiles/malachid
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.
If you are a PM then stay out of the code! Seriously it does not help for PM's to start getting into the code. Focus your time on usability and business requirements but please don't go thinking you will help anyone by getting your hands dirty. Just the fact you are asking this question means you are not the sort of person who should be coding.
I swear by VMWare. I have Ubuntu, Windows 2003 Server, Windows 2000 Server, Windows XP Professional, Windows Vista all setup in VMWare. I generally only use one system at a time since I don't have tons of ram. For the windows stuff I have to do I have SQL Server and IIS. The best part is that I can easily make backups of each system and take them with me on my laptop. I have never had VMWare fail on me.
256 MB of memory? At least a pentium something? Capable of running a couple of gb hard drive? If so, you are golden.
A DB machine, a web machine and your own laptop / desktop to actually write the code on. Separating the DB from the HTTP server on old hardware will make up for any speed issues. And seriously, with only a few test clients what you have is fine. The joy of web programming is it scales pretty nicely. If you can get it working with what you have you will be golden when new hardware is used.
As someone else pointed out, you are better off polishing the skills with what you and then perhaps investing in newer gear. No offense, but the assumption that you need speedy gear shows that you really are not up to sped with the the tech.
Perhaps it's my lack of experience specifically in the web services arena, but you didn't really give much information about the details of the sorts of things you'll be developing and testing. Are you developing proprietary server software or something like that with a lower level language? Are you using off the shelf components in a PHP/MySQL environment or something like that? Are you developing on Windows? Linux? Unix of some sort?
Honestly, I don't think the question can be answered usefully without more information.
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.
Monster. Machine. Three. Monitors. Virtual. PC.
Virtulization, definately. Buy a copy of VMware Workstation (totally worth the price) and have fun!
Don't spend money until you figure out that you can't achieve your goals without spending. You don't give many details about what sort of environment or development you want to do, but but as long as you can get the OS installed, it is probably good enough for home development.
However, don't leave those PCs on all the time. It will kick your electric bill up . . . unless you heat your house with electricity, then it will make no difference in the winter but hurt you twice as bad in the summer. Set up your little server closet or whatever on backups or power strips that allow you to kill the whole collection when you aren't using it.
I use virtualization for tons of stuff, but it really pays to have at least two machines handy in case something goes sour. Get a desktop and a laptop. Call it a day.
I have buckets of current computers around, but I mainly stick to a desktop, a laptop, and a server for all of my development. I could live with only two if I weren't doing pro audio/video.
I'll take you at your word that nothing you have would help you. Depending on what you're trying to accomplish, you may never even need to have multiple machines (physical or virtual) to give yourself the refresher you want. Even if you do, there's probably no good reason to invest in a "monster" machine, unless you have special needs you didn't mention. Absent those special needs, you can probably do just fine with a mid-level dual core machine and a close eye on your RAM needs. Also absent special needs, there's no good reason to invest in multiple new boxes just to teach yourself a few things. Virtualization is your friend, if you even need it.
But you know... ask a generic question, get generic advice.
In my experience, the PMs with the best understanding of the technology were the most successful. The ones to whom technology was indistinguishable from magic were the ones who had unreasonable expectations, and generally unsuccessful execution.
So, learn, understand, but remember that coding (beyond limited prototyping) generally isn't your job.
Without knowing what development your looking to this is all purely conjecture. Personally if your old boxes are P3/AthlonXP class then I really don't see the problem is using those, unless your expected to use huge databases and such like then you'll need a monster.
I'm considering getting a machine for development, for me since I have no machines lying around Asus Eee Box is perfectly suited. Using VNC via a secure link I can do any number of development stuff from anywhere in the world with all my usual tools pre-setup no matter what happens to my main machine.
besides setting up a development evironment - commandline, GUI, or otherwise - i would also include some plan for a separate code repository so that if you change your mind on the dev env. you won't have to move code all over the place. I would look into svnrepository.com which is about $5-10 a month. Or if you are looking to use your PC graveyard, maybe use them as a repository farm. This way you won't have to overthink your environment and can build up a trial dev env. and tear it down if it doesn't suit you with no fear of data loss.
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.
I set something up for myself for purposes similar to yours (although I'm not a PM). I've been doing a lot of Java and C/C++ development over the last year or so.
I use XenServer on a quad-core (2 dual-core) Xeon box with 4GB RAM and 1.5TB of disk space. I use a 3ware RAID card for the 5 disks (2 mirrored, 3 RAID 5). I run 2 Windows 2003 Servers, 2 Debian instances and a Windows XP Client (not always at the same time) on this one machine. My IDE runs on a Mac and the CLI.
I also rent a VM from linode.com. I have an IPSec VPN I use between my house and Linode.
So at home, I have 2 machines hosting 7 operating systems (the Mac also has a Windows VM I run on occasion). I run multiple databases (PostgreSQL) with no trouble - it's not the fastest, but it works for development. The flexibility you get by being able to copy/create/backup/restore VMs at your leisure definitely outweighs any performance hit.
I'm definitely an advocate of the VM route.
You can worry about running all the gear on your own, but unless the project involves managing virtual machines themselves, then you should just sign up for a VPS at one of the many hosting companies that exist, and installing something like Parallels or Vmware on your workstation. That way you can concentrate on what you really need to concentrate on - and server management isn't it.
I'm a Project Manager 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.
Is this actually true? Maybe it's because I tend to know about larger shops, but this doesn't seem to be the case as far as I can see. Having been both a development manager and a project manager, I'd say that having the PM also responsible for development tasks is a quick way to not have a very good outcome for either. However, I've always thought that our industry was one where management has been considered so unimportant that it was often left to untrained, part-time personnel.
That is all.
I run my own contracting business (one man strong!) doing OSX, iPhone/Touch, & Windows development. In most cases VMs work well. GPU and multiprocessing are two instances where there's room for improvement however. Because of this I've not been able to move entirely to a VM environment.
So I have two Apple laptops (G4 & MBP), a Mac Pro ('08), home built Vista/XP (x86 & x64) machine, and a home built W2k3 server. All machines were acquired out of necessity, purchased as needed.
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.
My server has 8GB of RAM (AU$250), an Intel QX6600 quad core cpu (AU$250), and an Intel Etherexpress 100 NIC (pull from old box). I can't seem to stress it out - it just runs great.
The reason I did this was:
I had a 42RU 19" rack full of desktop PC's I used to use, and the idea of spending money on them upgrading memory and CPU - and then having to pay the power bill turned out to be stupid.
I also saved a large amount of space, my server pulls 120 watts no matter what I throw at it, the noise level is down, it no longer heats the room (I'm in Australia and it's summer here), and it is a useful piece of contemporary software to get experience with. It's also much easier to spin up another server without having to make space for another PC.
It depends what you want to do, but for web development, most machine you can buy today will be good enough. The only thing you will want to do, is make sure you get at least 4 Gigs of RAM (1G for the OS and the other apps that will be running, 1G for your DB, 1G for your server and test process and 1G for your IDE).
If you want to spend more cash get a more screen real estate (dual 24" or dual 30" are great.)
It depends on HOW old.
Remember: Google is a mass collection of crappy computers.
They don't need to do a bunch of intense, drawn-out calculation.
If you're going to be doing development:
- Linux? You don't need a good computer
- Not Linux? If you try to do development on a somewhat new Windows box remotely, this is going to stink.
Hope this helps.
Pimped-out Mac Pro
The problem is a bit generic, as we do not know what "development" is. For most Linux based development (Web-display, or Database, or coding), as well as most Windows based development (Same set) - with a few exceptions, you don't need a very powerful machine, and can virutalize.
I will state, that you can purchase a DEV box to emulate Five "Serviceable servers" for less than $1,000.00:
For this purpose, "A Servicable Server" is: 2x 2GHZ Xeon processor, 75GB of storage space, and 2GB of memory.
CPU: $120+ (AM2+ QuadCore @ 2.3GHZ)
Motherboard: $70 (AM2+ Motherboard with 4x 240pin ddr2 memory slots,and SATA Raid 0,1)
Memory (8GB): $85 (Guess what kind)
Hard disk: $150 Say two 640GB drives configured in Raid0.
Backup: Say $120 for a esata disk drive at 750GB
Case, KBD, Mouse: Go use an old one...
Total cost: ~$550 to virtualize four-five "servicable servers", with backup.
The trick to this is this: it is unlikely that any individual machine will be maxing out resources at the same time as other machines. For example, The VMWare ESX rule of thumb for CPU is something like 1core = 4x 2year old CPU's. with other virtualization, I would suggest cutting that down to say.. 2.5-1, just to be conservative. ESX would get you fun stuff with memory, so you are going to take a hit in the memory department. What can I say: I lied, you only get something like 1.5GB of memory per VM. Unless you are using JAVA, you are unlikely to miss it. If you are really doing something resource instensive, get more memory: either duplicate this machine, or buy a better mobo.
For many applications, an older machine is fine - especially for development: I have seen many production Oracle, and MS-SQL databases running on 2GHZ hardware. Anything running on a 32GB OS (Windows 2000/2003 anyone?) can only see 3GB, and many places never max out the memory beyond the original purchase of up to 2GB.
Of course, the real answer is look at the requirements of the components of this project to see what you need. Then if you are virtualizing - remove some CPU, as you are unlikely to have multiple CPU stress servers.
$02, give me back my two dollars.
I've been really enjoying Amazon EC2
http://aws.amazon.com
Here's some advice:
VMware Workstation so testing on dated OS's works fine (or does Xen work with Windows 2000?)
64bit hardware (quad core) with 8gb of RAM (it's as cheap as possible) - more options to present to lower levels
Utilize the Virtual Appliances on VMWare.com - don't worry so much on the server setup - sometimes it's easier to grab a pre-built LAMP / .NET / Mono VM and get started on your topic rather than learn server setup best practices and such
I have to agree on the Macbook idea for an Apple client, but a MacMini also works.
I think we all have to assume that you're doing web based technologies, and you'll need to test all 4 platforms for functionality (Win2k/XP, Vista, Mac, Linux)
I would start catching up on how to do your job as a PM, you are now being asked to do the job you actually should be managing.
Buy yourself a decent workstation. No need to go overboard, anything relatively recent will work.
No need for any fancy VMs, just pick an OS you're comfortable with -- preferably something Unix-y (OS X or Ubuntu) -- Windows will work, too, but it'll be more frustrating unless you're developing .NET.
In my case, I develop mostly with Ruby -- not all Rails, but pretty much all frameworks follow the same pattern of embedding a webserver in the app. So there's no need for a separate server -- just fire up the app and open a browser to http://localhost:3000/
Need to test two clients? Open two browsers! Problem solved.
The time to worry about anything more than one workstation is when you've actually got an app ready to go. But if you need more testing than is available on that one workstation, you need to talk to your clients anyway, and figure out how they intend to deploy it -- or come up with something yourself.
The only other reason to do so is if you're building something more complex than the typical web/rdbms model that everyone seems to be doing. Even here, a lot can be done with a single machine -- run two Erlang nodes, for example -- before you have to start thinking about VMs.
And by the time that's not enough -- when you're actually considering simulating a small network -- you're probably at the point where you'll have to talk to some real live clients and find out how the app will actually be run. If you get to make that call, I'd suggest Amazon EC2 (and remember to shut your nodes down at the end of the day) -- but keep it modular; Amazon is lagging behind Moore's Law in pricing, which means better alternatives may surface, which means you want to thoroughly encapsulate anything Amazon-specific.
Don't thank God, thank a doctor!
When you say 'old' it depends what you want to run on them.
As a developer I use a whole range of systems, and I don't throw old machines away, I use them for testing.
I also have
A Pentium III machine with 512M of memory is quite capable of running a fairly complex website. I use them to test websites developed using the Drupal content management system. If your website won't load and run in 512M of memory - you are probably doing something wrong.
In the past I have used Xen VMs, but at the time I found it tricky to setup (from what I have seen it has improved a lot since then, so this may be a better option now). For setting up a simple test system, it worked out easier to fire up one of the old machines and run the tests on that.
If I need to setup a test system that other members of our team can access, I use rented VMs from one of the cloud providers, FlexiScale, SliceHost or Amazon EC2.
One thing I would recommend is that you never configure a machine by hand. Everything should be automatic, using shell scripts or equivalent to setup the machines. Everything, including the scripts for installing packages and configuring the system should be in source control.
To setup a new set of tests, I start by writing a shell script that will install and configure all the components needed to run the tests. It will take a while to create the first few scripts, but you will gradually build up a library of functions that you can re-use. Someone else has already mentioned using Puppet and Cobbler to achieve the same thing. Unfortunately they weren't around when I started doing this. I haven't used either of them yet, but I hope to experiment with them fairly soon.
Whichever system you use, automating the install and configuration will save you a huge amount of time in the long run. Using my library of configuration scripts, I can setup and configure a new test system in a matter of minutes. The configuration scripts are designed to be portable, so I can use the same tools on one of my local test machines, or on an external VM hosted by a cloud provider.
As to what I use the Pentium I machines for - stress testing. I write Java web services for a UK eScience project, processing large (Tbyte) data sets. One of the things I need to check is the webservice should never try to load the entire dataset into memory. It should process the data bit at a time, and free up resources as soon as it has finished with them. As a stress test, I deploy a webservice on one of the tiny 64M machines, and then run multiple clients on the bigger more capable machines to hammer it into the ground, repeatedly, day after day for a week. If my webservice can process Gbyte data sets on a Pentium I machine that only has 64M of memory - without grinding to a halt. Then I can be fairly confident that when the same webservice is deployed on a multi core machine with Gbytes of memory it will probably be able to cope with the kind of load our scientists intend to throw at it.
Summary : Keep the old machines and learn how to setup, configure and use them as test machines. In the process you will encounter many of the problems that your developers and sys admins have to cope with on a daily basis, and you will be much better placed to be able t
Your developer's box should be very beefy but you can typically run a development server on an older pc. I run IIS, Sql Server, Server 2003, & asp.net on an old 750. Boot up time is slow but app response lag time is minimal because there is only one person hitting it. Just make sure you load test on production style equipment all during the development cycle. You don't need surprises.
Get a large desk. Spend your money on one decent machine, like a MacBook Pro with 4GB, and one good 24" monitor. (By the way, we do "cutting edge" web development in our office, and that is our standard developer's setup: a MacBook Pro with an additional external monitor.)
Then you can use those other machines too. Take the best two or three of them, install Ubuntu or your favorite flavor of Linux on them, get one good network hub, and network them all together.
Then, install Synergy on all of them. Synergy is like a virtual KVM switch... it lets you use one keyboard and mouse to seamlessly work on all your computers. Put the monitors on your desk near your basic workstation setup (as described above), and you can just move your mouse cursor over to one of those screens, and now you are working on that computer! You can also copy-and-paste between machines.
This gives you the best of all worlds. If you want other OSes you can virtualize them on the Mac. But you can set up one or more of those Linux machines to be web or database servers on your network, offloading the server chores from your MacBook. And you can control them all with one keyboard and mouse.
Other than the cost of the MacBook setup itself, this is also very cheap. The only other cost is the network hub. Linux and Synergy are open-source, as are many of the newer development tools and database engines. I recommend Ruby on Rails very highly, but there are alternatives.
As for editors for development (if you are doing Web development you probably are not using an IDE, unless you go Visual Studio, which I do not recommend today), TextMate is very good. But believe it or not, the newer versions of VIM are very nice, and work cross-platform. So you can have nearly identical VIM editor setups on your Mac, Windows VMs (if you use those), and Linux.
Virtualization is the way to go for dev/test. You can build out machines quickly, tear them down, revert to a previous configuration, etc.. Though you can do the same with physical hardware, it's not as resource efficient.
My test/dev environment consists of two AMD 64-bit machines with 6G-8G apiece and about 500G of hard drive space. The base OS is CentOS 5.2 running Xen machines. It allows me to build separate web/app/db systems to mirror what a production setup would look like. Also, for Oracle development you can get a better idea of how things like RAC will look. I'm also running DRBD volumes between the physical machines which allows me to experiment with HA clusters.
Nice things to have (whether virtual or not) is to set up a central build host and LDAP server. For this, I created a virtual machine on my production server with FTP and HTTP access. I loaded all my CentOS, RedHat and other distros there. For CentOS/RedHat, for example, I loopback mount the ISOs to /var/ftp/pub/centos_5.2_x86 and put all the kickstart images in /var/ftp/ks. I can then build out a VM machine from scratch with just a command by doing a network install. For the LDAP server I used Fedora DS (or CentOS DS). The kickstart is set to use LDAP automatically. Finally, just install the autodir package with a standard config. You can then login to a new virtual machine moments after it's complete.
The central server can also house your source code repository. I'm using CVS for some projects and Subversion for others.
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.
Get 1 machine: 4 core or more, 8GB of ram or more, Terrabytes of drive storage.
Add your favorite 64 bit host OS.
Get VMWare. Create Virtual machines.
I went virtual about 1-1/2 years ago. I will never go back. I run multple multiple vm's each with their own VPN into 1) work, 2) client sites, 3) Hosting sites. I have a Visual Studio vm, a Linux server hosting subversion repository, Debian dev enironment, Linux server with Apache for testing web based apps. All on 1 machine.
One caveat... You can not do hardware (driver) development in virtual machines. Just sayin.....
Databases (Say Oracle, or Exchange) may not virtualize well, but hardware today overcomes that. VMware has some studies on Exchange that say: Expect a 40% hit. Similar documentation exists for Oracle, and other SQL systems.
I used to run a 6 year old Oracle system for a company that used it as a back-end for accounting. (Deltek Costpoint, 1500 employees) This system is a prime target for virtualization, if you give it fast enough disk IO.
As a practical matter, not only could it run in virtualization (and be supported by Oracle) - It did run in virutalization for DEV/Testing: on a ESX box with 8 other servers... This guy only needs it for DEV.
Of course, what he really needs to polish with this system is: his resume.
Don't give this another thought. Spend the money and get an SFF ( like a Shuttle ) with 8GB of RAM. Install the FREE VMWare server and load VMs that you need. No need to try Apple, Linux or Windows. Use VMWare to host these VMs. Works great!
Stick with what you already have. Personally, I am still using my desktop from 1999 as my development server: Pentium 333MHz and 512 MB, running fedora 8 server (no X), LAMP, SVN and a nameserver (Bind).
Compiling is "a bit" slow on the machine (if you need custom PHP/ Apache versions), but other than that, it is working great -- I'm the only user.
... for ergonomic reasons, if you use the developer's setup I recommended (MacBook Pro + another monitor), you will want to use an additional keyboard and mouse. Some of our people use the Apple USB keyboard + mouse, some use the Bluetooth. All work well. But that way you can hook up your laptop on a stand so its display is in line with the other monitors, and still have flexibility as to your keyboard and mouse positions.
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?
I would probably get two large-ish, but cheap, machines. Throw Xen on both and let them share a volume. This has the advantage that:
a) You don't spend much money
b) You have a backup machine if one burns down
c) You can play with moving domUs while they are running
d) You can install and play with a bazillion VMs
e) You can easily back up a whole system, do stuff and revert
Of course, you don't want to do this if your hardware needs are specific in any way.
"I'm a Project Manager who recently decided that I want/need to get my dev skills more up-to-date... Should I buy a number of cheaper PC's, or should I buy one monster machine and leverage virtual machine technology?"
You'll end up splitting your time between PM and development tasks, so you'll be coming up to speed for at least a year, and you simply won't need as much hardware as your developers. You won't be stressing your system as much as they stress theirs. With that in mind, consider spending the money on upgrading one of their systems, and using their old system for yourself. Ask them, they will know which of them could most use an upgrade.
If you end up with the best development system, you'll be seen as a pompous ass who thinks he's a developer, and you'll never get the support necessary to improve your skills.
A project manager trying to be a developer usually leads to the project manager trying to use their clout as a manager to make architectural decisions, often neglecting their project management duties at the same time. If you want to be a developer, you should stop working as a project manager and more into a junior development role on a different project. Working as a junior developer, you'll be able to get mentoring from the senior developers on the team and likely end up with a better perspective on the process. It's important that you do this on a different project so that you don't end up making junior-level development mistakes on senior-level development problems that you've identified as a project manager.
Use a laptop and install debian or ubuntu, keep it simple.
Was it 20+ years ago that you tried virtualization? If you can get VMWare ESXi going (have the hardware, that is) it is *just* like local, especially if you setup virtual networks. I guarantee you'll see faster speeds between two vnics than you could ever get out of a gb switch. And having to wait 5 seconds? Maybe if you've got 32 vista vms running on a single core p4... But personally I run 2 vms and the host just fine on my less-than-epic core2duo 4600 w/ 4gb of ram. And by 'just fine' i dont mean crysis testing, i mean real world usage of apps like Firefox/outlook. The real bottleneck is IO, as someone pointed out above. With snapshotting backups are ridiculously easy to implement and recover, and as such I have my vms on a simple raid 0 stripe. If it dies oh well, I have backups and worst case it takes 35minutes to completely reinstall. A coworker went all out and striped his across two raptor 10ks. I'd venture to say his VM's run faster than my native os (with no vms running). As long as you're not on id's team and using these VM's to test the nightly Rage builds, anything w/ HyperV or whatever built in is excellent in terms of performance. Hell, my year old t61 runs crappy vista w/ an xp guest and both run as best they can. (Actually, the xp guest is faster lol)
You can do what I have done: rent a powerful dedicated server and ssh or vpn via a netbook on 3G. Do all compiling etc on the server, it's much easier.
Actually, yes I tried it 30 years ago. Wrote some of the virtual memory paging code in IBM VM/370 - one of the original virtualizing products for multi million dollar mainframes. I also tried it earlier this month, both Microsoft's and VM Ware's. And while I don't have the same intimate knowledge of the code I used to have, I probably have a better understanding of what goes on in virtualization than most people.
But anyhow, your arguments are weak. You say it runs fine. I say it does not run as good as it would native. We are not contradicting each other in any way, but you are putting forth nothing to argue against my statement. And yet you claim it is me that sucks. Eat me asshole.
slashdot troll = you make a compelling argument I do not like the implications of.
As a PM I wouldn't think you would need a robust dev/test infrastructure at home. If you simply want to sharpen your skills in order to be a more valuable member of your development team (a worthy goal), I recommend getting a commodity desktop box (Intel proc, min 2GB RAM) and some free dev tools such as Eclipse, MySQL, .Net, etc. You can simply partition the disk to accommodate different platform requirements that your dev team might encounter. This is a much simpler, cheaper, and less house-of-cards-y way to get your feet wet again.
In short, spend more time in the sandbox and less time building and babysitting the sandbox. Every hour you spend in VM configuration is an hour lost.
Shame no-one told Oracle then because last time I checked Oracle Grid worked perfectly.