Resumes. A necessary evil.It’s that time of year again. Those of us graduating need to start focusing on job applications. The rest of us have to start searching for internships. One of the most troubling things about the resume is the software associated with it. Microsoft Word is a piece of crap. OpenOffice is nice, but still just as finicky. There’s a tool out there (for the hardcore) that makes writing the resume a breeze: it’s called the XML Resume Library. It’s allowed me to easily generate text, HTML and PDF versions of my resume.

The Trouble with Formatting

The one thing that plagued my resume was formatting. It never turned out quite right. No matter how much I fudged with the tab sizes, margin lengths and other inconsequential settings, my resume never turned out. Is it really that hard to not have my sections not split across page breaks?

A resume requires a bit more flair and professionalism than your 12-point Times New Roman double-spaced essay. Subtle shading is nice. Page-wide lines are cool.

XML Resume responds to the resume dillema by trumping convention with customization. Most resumes–if not all–will follow the same format and have the same sections: education, past jobs, achievements… Why throw a huge tool like Microsoft Word at a specific project where customization gets you nothing more than a different shade of gray? Resumes are necessary, but their excessive flair is pointless. Give me something that looks nice but not overly flashy. Stick with something that will save you time.

Know HTML? You Know XML

If you’ve ever peeked under the hood of a website, you already know XML. If not, you can learn it in a few minutes. Let’s take a look at a quick example:


This simple snippet of XML is the header of a (complete) resume according to the XML Resume Library spec. All it does is print my full name at the top of the page. Boring, but functional nonetheless.

To do something a bit more complicated such as create a job listing, you’ll have to nest tags a bit more. the entry for my job at Revision3 over the summer looks like the following:

<job targets="compsci,filmtv">
Snagged some on-camera time, worked on the now defunct Internet TV show popSiren, developed rough cut generating software saving 2 hours per episode per show

Not too bad. After navigating through the <’s and >’s, hopefully some of this starts making sense. If you’d like some further reading on this, check out the W3 Schools’ XML Tutorial.

For an example of a completed resume, check out my resume in XML format (do a right-click, save as).

Build Your Resume

Once you’ve gotten your XML crafted up in your favorite text editor (and saved the file as plain text), now it’s time to build your resume. Once you’re done with this step, you’ll have your resume in plain text, HTML and PDF formats. Schweet.

Unfortunately this is also where is gets dirty. You’ll need to install quite a few open source libraries to get everything to build correctly. On Windows, this will be a royal pain. I’ll briefly go over how to get the required software installed on Linux and Mac OS X.

Mac OS X

First, install MacPorts. MacPorts is a commandline software package installer. If you plan on doing stuff like this more often, I highly recommend getting MacPorts. It takes the open source software building headache off your hands.

Once you’ve got MacPorts installed, open up In a Terminal window, type

sudo port install xmlresume2x

Linux (Debian-based)

In Linux, just run

sudo apt-get install xml-resume-install

on the commandline.


You need to copy your XML-ified resume into the examples folder of the XML Resume Library project. If you can’t find the XML Resume Library folder on your system, just download the zip file from the XML Resume Library site and work from there. If you installed the necessary software packages from the above commandline instructions, you shouldn’t have any problems.

Magic Time

Navigate your commandline to the examples folder. To do this, you can use the cd command. As an example, my command will look like this:

cd /Users/msutton/Applications/xmlresume/examples

I’ve copied my mks-resume.xml file into the examples folder, so now I just type

gmake resume=mks-resume

If you’ve done everything up to this point correctly, your terminal will slowly explode with progress. If XML Resume completes without errors, you will have 3 files of use in your examples folder: mks-resume.txt, mks-resume.html and mks-resume.pdf. Now you can do what you please with them!

Why is this Better?

This works because it abstracts the model (what I’ve actually done) away from the view (how my resume looks). My number one problem with using a word processor is that an update to the content on my resume breaks the way my resume looks.

This is micro-application of the Model-View-Controller pattern. The individual is only responsible for the the Model of the resume: the accomplishments, past jobs, etc. The View is handled by the software.

Shortcomings to XML Resume Library

Obviously, this solution is not for everyone. This is probably for the most computer-savvy student that is frustrated beyond all belief with word processors.

While it is cool, the project has been forgotten for going on 5 years. The project never reached a “1.0″ release, so the documentation for the project is sparse. I had to browse through some document definitions to make sure I was using tags according to spec. To do that, you’ll need to make sense out of the DTD. It’s still got a rough-around-the-edges feel, moreso than your typical open source package. Maybe I’ll have to clean it up one of these days…


If you’re an true blue geek, you can also use this method to check your resume into your personal revision control system. Then you can keep track of several different version of your resume and never lose track of the changes you make.


So that’s XML Resume in a nutshell. Spend that extra time I just saved you networking.

And if you’ve been following the HackCollege way for some time now, you’d already have a blog which is better than resume.

What are your resume’s short-comings? Do you think something like XML Resume Library is the answer? Let us know in some comments!