One of the most crucial tools in our toolbox is VMware Workstation, which I've been recommending for years. The basic idea is that it lets you run a whole PC inside a window, with its own operating system and hard drive. Here's an old picture so you get the general idea:
Since 4.0 you've been able to run multiple machines in tabs, a nice addition.
Anyway, they've recently released version 5.0, which is a big leap forward. It has the very slick ability to store multiple snapshots and build up a tree of systems with slightly different configurations, sort of like object-oriented inheritence. That saves a ton of disk space when you need to test systems with only small variations.
Here's an example. The first thing that FogBugz Setup does when you run it is to test that all kinds of prerequisites are installed, like IIS and MDAC and VBScript. In order to develop and test that code, I need virtual machines that are missing the prerequisites, so I can test all the code paths.
With VMware 5, I can build a stripped down virtual machine containing, say, a minimum Windows 2000 installation without any of the prerequisites. Then I can take a snapshot of that, and install prerequisite 1. Then I can take another snapshot of that, and install the prerequisite 2. Eventually I end up with a bunch of snapshots with different configurations and I can go back or forwards to a particular configuration in one step.
Here's another example of why VMware is critical. Let's say I'm testing the upgrade code in FogBugz for upgrading, say, from FogBugz 2.0 to FogBugz 4.0. In about one minute I can be running a pristine copy of Windows 2000 that looks just like the day it was installed. Two minutes later, it's running FogBugz 2.0, and I take another snapshot. Now I run my upgrade code on that, and, of course, it fails, thanks to Murphy's law, but it leaves FogBugz in a "half-upgraded" state. The brilliant part of VMware is that I can click to go back to the 2.0 snapshot and in about 30 seconds I'm back to a pristine FogBugz 2.0 installation.
Our other major use for VMware at Fog Creek is for supporting Linux. FogBugz runs on all kinds of different distros and we use VMs to develop and test with them all.
Over the coming months our four summer interns are going to be developing a product that requires a server and two clients, so we'll need three VMs to simulate the complete environment. We bought high-end, dual-Xeon Dell workstations with dual monitors and 2 GB of memory each (that's our new standard developer workstation) which will make it easy and fast to simulate the complete production environment on every intern's computer. It's probably overkill and you can run VMware happily on less pumped-up computers, but if you're simulating a network of three machines VMware definitely benefits from lots of RAM and CPUs.
Thanks to Acorn Publishing Co., my latest book is now available in Korean!
Making Summer Plans
Yes, it's true... there will be a filmmaker, Lerone Wilson of Boondoggle Films, working out of the Fog Creek office this summer creating a documentary about our summer internships.
As I wrote earlier, "This summer, Fog Creek Software has hired four summer interns from Yale, Duke, and Rose-Hulman. Our selection process was extremely competitive, with over 800 kids applying for only four positions.
"Instead of wasting their talents giving them the usual dull and unimportant tasks of a typical summer internship, we decided to let the interns create a complete new software product, from beginning to end, over the course of one summer. With experienced software developers as mentors, the team will design, program, test, and roll out a complete software product over the course of one hectic summer, going from concept to paying customers in about ten weeks."
Now, I'll be the first to admit that this product will be a 1.0 version... the minimum thing that can possibly work. We've thought long and hard about the amount of code it will take, and we're fairly confident that three interns can get a beta version out in about 4 weeks. One chunk of the project is basically an enhancement to the "fogshop" ecommerce engine; another chunk is a couple of simple features added onto an existing open source program; the third chunk is possibly the simplest sockets-based server you can imagine that still does something useful. Each chunk would be a reasonable programming assignment in Yale CS323 or MIT EECS 6.001 (insiders will recognize these as two of the most challenging programming courses on the planet, but, hey, we hire the kind of people who love challenges).
The fourth intern is going to focus on product marketing so he will be working on a brand name, pricing, the website, advertising, and PR. The product we're building is something we need internally anyway, so it's almost worth the expense even if nobody buys it, but we think it should be useful to a lot of other people, too, so I see this as fairly inexpensive market research.
We'll keep a weblog so you can track the interns' progress, and, if we're lucky, at the end of the summer there will be a DVD documentary you can get to see the whole thing in living color.
Special thanks to Mark Lemmons and his crew at Thought Equity, who have offered to loan us an HDV camera for the production of this movie!
“It’s at this point you typically say, ‘Blistering Barnacles, we’ve got to get some consistent coding conventions around here!’ and you spend the next day writing up coding conventions for your team and the next six days arguing about the One True Brace Style and the next three weeks rewriting old code to conform to the One True Brace Style until a manager catches you and screams at you for wasting time on something that can never make money, and you decide that it’s not really a bad thing to only reformat code when you revisit it, so you have about half of a True Brace Style and pretty soon you forget all about that and then you can start obsessing about something else irrelevant to making money like replacing one kind of string class with another kind of string class.”
The main Joel on Software site is moving to a new server today. If you can read this, you're already looking at the new server. Instead of one reasonable-sized Dell PowerEdge hosting the site, there's now a stack of six beefy servers down at Peer1.
Former intern and future employee Ben Kamens (on the right) just graduated, and is setting off tomorrow on a cross country bicycle trip with his friend Greg Fleizach to raise money for charity. He's rigged up some kind of text-message-map-gateway thingamajig so you can track their progress. Good luck, guys!
Wall Street Survival 101
You have $100,000 to invest. Which government bond should you invest in?
Bond A, B or C?
Bond A pays 4.15%. If you buy this bond, you'll get a check for $4150 in interest at the end of every year for 10 years. With your last check, you'll get your $100,000 back.
Bond B pays 4.5%. You'll get a check for $4500 at the end of every year for 30 years, then with your last check, you'll get your $100,000 back.
Bond C pays even more! It's 4.75%, w00t. you will get $4750 at the end of every year for 10 years, then get your original investment back, unless the government decides they want to keep your money for a little longer, in which case you'll get another 20 years of $4750 before you get your money back.
Bond C is a little more complicated so let me explain. On the tenth anniversary, the government gets to decide whether to pay you your $100K back and owe you nothing, or keep your $100K for another twenty years and keep paying you the interest. The point being, the choice is up to the government.
But either way, with Bond C, you're getting MORE interest every year, whether they decide to keep your money for 10 years or 30.
So, it's stupid to buy bonds A or B, right? Bond C is obviously the better choice.
Hints: assume that you're a left-handed avocado farmer and therefore don't pay any tax. So ignore the tax implications. Then, assume that all the bonds are equally sound, backed by the "full faith and credit of the United States" which, in the financial world, means there is absolutely no chance of default. This is not a trick question.
The answer tomorrow.
Project Aardvark: “Our summer interns will have some light reading to do before they can get started.”
A lot of people were asking what books were on the pile for the interns. Actually those books are really optimized for Project Aardvark, for example, there's a book on OpenSSL and the Time Out guide to New York. However I do have a standard list of recommended reading for all programmers. I haven't updated it since 2002, but, you know what? These are timeless classics so I probably won't revisit it again for a few more years.
Now for a little tiny hint about yesterday's puzzler. I'll print the hint in white text so you can't see it if you're still working on the problem. Drag your mouse over the hint to see it.
<hint> Imagine ten years have passed, and put yourself in the shoes of the government. Under what circumstances would the government choose to prepay Bond C? </hint>.
Dan Bricklin Interviews Me
Dan Bricklin: "We talked about developers keeping track of where their code comes from and watching out for GPL code that shouldn't be there, why developers who read Slashdot and Eric Raymond are more likely to be at least somewhat aware of copyright issues than their managers who don't, differences between Windows and Unix when it comes to combining code (especially back in the days when the GPL was written), access to Microsoft source code, economics of Open Source, and more."
The interview is available as a 18MB MP3 file and runs about 38 minutes. Dan Bricklin was the co-creator of Visicalc, the world's first spreadsheet program.
Wall St. 101
"Remember that scam I explained to you last month?" Jared asked me over dinner, while reviewing my investments.
A month ago Jared had explained a clever scam Wall Street uses to rip off retail bond investors. He explained it very well. It all made sense.
"Well, you just fell for it!"
FogBugz 4.0 for Unix and Macintosh is finally shipping!
Project Aardvark: “I initially approached C# with a bit of trepidation. Although my bread and butter (and grades) depend on C++ and Java, anyone who knows me well knows that I’d much rather be working in one of the dynamic languages—especially Squeak Smalltalk or Ruby—than in any of the C descendents. My previous experiences with Microsoft languages (VisualBasic in all of its many varieties) did not exactly raise my expectations, and I was prepared for the worst.”
Benjamin Pollack: “I checked out the README, which said things ought to build just fine on VisualStudio.NET 2003, so I thought it would be a piece of cake to get running. Bzzzt! I hit F5, the build starts, and then dies with my least favorite error message in the entire world: Internal Compiler Error.”
P.S. If you were about to buy FogBugz 4.0, today is the last day of the introductory pricing, so hurry up!
1114 posts over 16 years. Everything I’ve ever published is right here.
There’s a software company in New York City dedicated to doing things the right way and proving that it can be done profitably and successfully.