super-cheap PIC programmer
PIC microcontrollers are neat things. They are essentially a computer on a chip, their instruction set is easy to learn, and they can do a lot for cheap. However, Microchip wants you to pay upwards of $100 for a device to program the chips. You can get a third-party device for much less, maybe $30-40, but as always there is someone who finds a way to do the job for mere pennies.
build your own
It's possible to build a PIC programmer with only three resistors, some wire, a female DB9 serial port, and some free time. A fellow over at the PicBasic forums (here) came up with the following schematic.
schematic

Don't forget to supply your PIC with +5v (or 3.3v if you use an LF model). If you don't do this, you will read all FFFF's from the PIC.
You can make a 5v power supply using a 7805 IC (google it) and a wall wart. You could also use 3 AA batteries.
software
You'll need to use a freeware program called WinPic800 to program your PICs. You can get it here:
http://www.winpic800.com
You'll need to select the type of programmer as "JDM". If WinPic can't open your com port, make sure you have the right com port selected, and make sure nothing else is running that may be hogging the serial port. ActiveSync does this, just kill the process WCESCOMM.EXE.
notes/errata
This programmer won't work with the following:
- Most laptops
- USB to Serial adapters
- Some recent desktops
The reason for all these, is that your serial port needs to supply +/-12v as per the RS232 specs. The devices listed above don't cut the mustard. Experimentation may be required.
I've only used this with PIC16F628A and PIC16F877A chips, theoretically all pics supporting In-Circuit Serial Programming (ICSP) should work. Some pics may need you to connect the PGM pin to GND/Vss because they might be expecting low-voltage programming. We are using high-voltage programming (Mclr = 13v.)
100% ROHS non-compliant