If you’ve ever visited this blog before—& gosh, I sure hope you have!—then you’re probably noticing that things are very different here. Over the past couple of weeks, I’ve been migrating from WordPress to Jekyll & Octopress. Besides the new (pretty default, which I will change) look, you should also see speedy page loads. Why? Because while WordPress creates dynamic, PHP- & MySQL-driven websites, Octopress instead generates static sites, which will always load much faster. That’s a huge win for you & for me.
So besides speed, why else did I switch to Octopress?
WordPress is really nice, but it’s a lot of stuff. I wanted something leaner & meaner.
My entire site is on my Mac. I write here, check out how things look, re-generate the site at any time, & then use rsync to send the changes to my server. Having everything local & under my control is really nice.
By the way, everything is written in Markdown, which I use for almost everything I write. I could use Markdown with WordPress, but it was an add-on; with Octopress, it’s how you’re expected to write.
My entire site is versioned with Git. Another bonus.
Octopress takes care of a lot of the things you have to worry about with a straight Jekyll install. I’m always looking for the lazy alternative, so Octopress sounded much better than just Jekyll.
Based on all the people using Jekyll & Octopress (just a smidge compared to the huge numbers using WordPress, but still, enough that they’re both viable projects), it appears that they’re going to be around a while.
Octopress embraces responsive design & therefore looks good on a variety of different devices. WordPress does too, but I think Octopress does a slightly better job.
It just makes sense to me: move the dynamic stuff onto my computer, & serve the static results to visitors on the Web. That provides the best of both worlds.
It was fun learning a new system!
With the switchover to Octopress, I’ve put in place several new features:
I’ve turned on commenting, which use Disqus. We’ll see how it goes. If it becomes a spam haven, I’ll revisit my decision.
I’ve instituted categories. I realized a few months in that I should have been using them, but it just seemed like too much work to retroactively add them in WordPress. When I moved over to Octopress, I went through and added a bunch.
The RSS feed is different. If you subscribed to the old feed, you’re OK for now, as I put in place a redirection that points to the new feed. Really, though, you should subscribe to the new feed, which is located at http://www.chainsawonatireswing.com/atom.xml.
I’m really happy with the new system, & I hope you find it better too!
For quite some time I’ve been relying on The Wirecutter when I need to purchase almost anything tech-related. If friends or students ask me which TV to buy—or practically anything, really—I tell them to look it up on The Wirecutter & get whatever it recommends. For those of you who don’t know, what distinguishes The Wirecutter is that it only recommends the best thing to get in a particular category. Instead of having to wade through so-called “reviews” that compare & contrast 5 or 10 or 20 items in a mish-mash that never strongly favors one thing over another, The Wirecutter cuts to the chase, which is great.
Well, now The Wirecutter has a sister site: The Sweethome, which focuses on the best household items. I’ve been reading the stuff on there, & it’s just as great & useful. If you’re looking for an appliance, tool for the garage, or kitchen implement, The Sweethome should be your first stop.
It’s a fact of life: everyone needs a resumé. But if you’re in academia, you also need a curriculum vitae, more commonly known as a CV. Wikipedia defines it this way1:
In the United States and Canada, a CV is used in academic circles and medical careers as a “replacement” for a résumé and is far more comprehensive … A CV elaborates on education to a greater degree than a résumé and is expected to include a comprehensive listing of professional history including every term of employment, academic credential, publication, contribution or significant achievement.
CVs tend to be long & complicated documents. When I started out 15 years ago or so, I did what most people do at first: I used Word. I very quickly realized that Word was going to be a terrible, bloated tool for the job, & it also concerned me that I’d be locking up an important file in a proprietary format. I also tried OpenOffice.org, but it still felt bloated & overly complex to me.
Then it hit me: use HTML! I code it by hand & teach it, so creating a CV in HTML (with a splash of CSS) wouldn’t be that hard. And that’s what I’ve done for the last 10 years or so, & I very quickly learned to hate it. Here’s why:
Editing a long, complicated HTML document is no fun (& no, I’m not going to use a WYSIWYG—that’s for wimps).
Because it was a pain to edit, I rarely updated my CV (& I really should—I give a lot of talks).
Re-ordering sections was arduous.
Printing to PDF was also a pain. Basically, I would open the HTML file in Firefox (because it’s the only browser on Mac OS X that allows you to customize the header & footer), change the header & footer, print, then change the header & footer back.
Because it was a pain to print to PDF, I rarely did so.
I finally said “Enough!” & decided I needed to try something else. But what? My goals were:
Easy to edit, which would encourage more frequent updating
Easy to re-arrange and re-emphasize sections of the CV
Not to depend in any way on proprietary formats or software
Quick to produce output, especially in PDF
After some cogitation, it hit me: Markdown documents that are converted & arranged using Pandoc, the “general markup converter” & Swiss army knife of markup documents. After a few days of fiddling, I got it to work, & it works well, perfectly meeting all of my goals (you can see sample output at the very end of this post).
This is a long post, but it’s actually a pretty simple system once you try it. I know this works on a Mac, & it would be trivial to set it up on a Linux box. If you use Windows, the bash shell script that does the work will obviously not run unless you install something like Cygwin.
Let’s jump in & learn how to generate a CV (or resumé, if you really wanted) using Pandoc & Markdown!
For this whole scheme to work, you have to first install Pandoc. Easy enough—just head over to http://johnmacfarlane.net/pandoc/installing.html & download Pandoc. It comes with a nice installer, so in no time you should be finished with that task. On my Mac, the pandoc binary is installed at /usr/local/bin/pandoc, & I have the following in my ~/.profile so it’s in my PATH:
1
export PATH=/usr/local/bin:$PATH
Directory Structure
I’m assuming you create the following two folders in your home directory:
~/CV/
~/CV/Builds/
You can put the directories someplace else more to your liking, but then you’re going to have to make some changes to my script below.
Markdown
I’m assuming you already know Markdown & have a text editor to write it in. For my CV, I created the following files in ~/CV/Builds/:
articles.md
books.md
clients.md
cv.md
description.md
education.md
experience-business.md
experience-teaching.md
experience-writing.md
interviews.md
organizations.md
presentations.md
references.md
skills.md
training.md
Of these, cv.md is required. The others are optional, depending upon your needs.
cv.md
Place the following inside cv.md:
12345
# R. Scott Granneman
39 Summit Place • Webster Groves, MO 63119
scott@granneman.com • www.granneman.com • www.ChainsawOnATireSwing.com
314-780-0489 (c) • 314-644-4900 (w)
Note there are 2 spaces to create a line break after the ZIP & the URLs, & a blank line after the phone numbers. Oh, and those dots are created by pressing Command+8 on a Mac.
This is all you put in cv.md. Everything else is broken up into the other files. Let’s look at a few of those so you get the idea of what to put in them.
description.md
A very optional section, this is the very first thing that will appear after the contact info in cv.md. In my case, it’s a brief four paragraph long summation of my background & skills. It’s pretty simple Markdown, as you can see in this truncated example:
1234567
Scott Granneman is an author, educator, and small business owner.
Scott has written five books, co-authored one, and contributed to two. …
As an educator, Scott has taught thousands of people of all ages on a wide variety of topics. …
As a Principal of WebSanity, he works with businesses and non-profits …
Nothing special here, except that there is no header to introduce this section, as I want it to flow right after the previous info.
Now on to actual labeled sections in the CV.
education.md
This is one of the key sections in any CV (or resumé): your educational background. My case is kind of weird: I got my B.A. & M.A at the same university & then worked for another 5 years on a Ph.D. there to boot!
1234567891011
## Education
**Washington University in St. Louis**
Ph.D. course work, 17th Century British Literature, 1990–1995
M.A., English, 1989–1990 (2005)
B.A., 1985–1989
Majors: English Literature, Education
Minor: History
I use simple bolded text to distinguish the university, which would obviously be even more helpful if there was more than one university to list! Again, there are two spaces after each of the first two lines in the B.A. block to create line breaks.
articles.md
This part of my CV lists all the articles I’ve written (duh). Here’s the relevant Markdown, greatly truncated.
123456789101112131415
## Publications: Articles
Links to articles available at http://www.granneman.com/writing/.
“In the Cockpit of JetS3t”
*Linux Magazine* (June 2007): 10
“Security Analogies”
SecurityFocus (29 May 2007)
“Vista Outsmarts Linux”
*Linux Magazine* (April 2007): 28-31, 52
“Surprises Inside Microsoft Vista’s EULA”
SecurityFocus (27 Oct. 2006)
Again, the section name uses a level 2 header. Also, there are two spaces for a line break after each article title.
You might notice I’m not converting the link at the top into a clickable URL. I didn’t do that because the eventual home of this document is going to be a PDF, & I didn’t want any links to show up in that document (I just think they’d distract & look ugly in that format).
experience-business.md
I work in three areas—education, writing, & business—so my CV has to cover everything I’ve done in all of them. Instead of running all my various work experiences together in one long, mixed-together list, I broke things up into 3 documents:
experience-business.md
experience-teaching.md
experience-writing.md
Breaking things up into 3 documents makes it easier to update the files, & also makes it easy for me to re-order things. If I’m applying for a teaching position, then experience-teaching.md goes first; if I’m delivering a talk to a group, I’ll usually put experience-business.md first; & if a publisher needs validation, then I move experience-writing.md to the front.
Here’s what experience-business.md looks like:
12345678910111213141516
## Professional Experience: Business {#experience-business}
WebSanity, St. Louis
Principal, 2001–Present
* Create dynamic websites using a Content Management System which allows non-technical end users to manage content on their own websites
* Administer UNIX-based Linux & Mac OS X servers
* Write bash shell scripts to perform maintenance tasks
* Wrote & maintain 200+ page help manual for clients
Atisma Technologies, Inc., St. Louis
President & Chief Application Officer, 1999–2001
* Created Virtual Registrar, world’s first fully Web-based school information system delivered via the Application Service Provider model
* Co-founded 12-person company to develop & serve the software
* Wrote requirements documents describing application in detail for developers’ use
After each business & location, there are 2 spaces to create a line break. Other than that, it’s a lot of bulleted lists.
CSS
You’ll need to use Cascading Style Sheets for the HTML output (although they’re ignored by the PDF output). I created a file named granneman.css in ~/CV/Builds/ that contained the following:
123456789101112
<style>body{font-family:"Source Sans Pro","Lucida Grande",Calibri,Helvetica,sans-serif;}h1{font-size:2.5em;margin-bottom:10px;}li{margin-bottom:.3em;}</style>
There’s not much to this file. Most of it is just to make the generated HTML look nice & readable.
LaTeX
To generate the PDF, Pandoc uses LaTeX. As part of that process, Pandoc allows you to include a custom preamble in the output that controls what appears in the PDF. Now, I don’t know much about LaTeX (though I’d sure like to learn more), but I was able to figure enough out to get the output I wanted.
To do it, I created a file named granneman.tex in ~/CV/Builds/ that contained the following:
12345678910111213
\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}\usepackage{fancyhdr}\pagestyle{fancy}\pagenumbering{arabic}\lhead{\itshape R. Scott Granneman}\chead{}\rhead{\thepage}\lfoot{}\cfoot{\today}\rfoot{}\thispagestyle{empty}
Let me walk through the important options I set in the file:
\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}
I found that the default margins were too big, so I reduced them to 1 inch on all 4 sides.
\lhead{\itshape R. Scott Granneman}
This prints my name in the top left of the header in italics, except for the first page.
\rhead{\thepage}
This prints the page number in the top right of the header, except for the first page.
\cfoot{\today}
This prints today’s date in the center of the footer, except for the first page. The format is like this: May 25, 2013.
The shell script
I created a shell script named cv.sh & put it in ~/bin. I think it’s well-commented, but I’ll cover anything that might not be totally clear after the listing.
#!/bin/bash#=====================================================================# FILE: cv.sh# USAGE: Run manually to generate my CV# DESCRIPTION: Uses Pandoc to pull together Markdown documents# & process them with Pandoc to generate my CV# AUTHOR: Scott Granneman (RSG), scott@ChainsawOnATireSwing.com# VERSION: 0.2# CREATED: 05/11/2013 11:50:30 CDT# REVISION: 05/15/2013 09:59:30 CDT #=====================================================================##### Variables# # Directory for CVcvDir=/Users/scott/CV
# Directory for CV BuildscvBuildDir=/Users/scott/CV/Builds
# Name of the CV filecvName="Scott Granneman - CV - $(date +%Y-%m-%d)"##### Create HTML files for each Markdown file# for i in $(ls $cvBuildDir/*md) ; doecho$i# Get the name of the file, sans extension, for generating HTML filecvBuildName=$(basename "$i" .md)# Convert to HTML pandoc --section-divs -f markdown -t html5 -o $cvBuildDir/$cvBuildName.html $idone##### Join the HTML files into one HTML CV# pandoc -s -H $cvBuildDir/granneman.css --section-divs -f markdown -t html5 \-o "$cvDir/$cvName.html"\-A $cvBuildDir/description.html \-A $cvBuildDir/education.html \-A $cvBuildDir/experience-teaching.html \-A $cvBuildDir/experience-writing.html \-A $cvBuildDir/experience-business.html \-A $cvBuildDir/books.html \-A $cvBuildDir/articles.html \-A $cvBuildDir/presentations.html \-A $cvBuildDir/interviews.html \-A $cvBuildDir/training.html \-A $cvBuildDir/organizations.html \-A $cvBuildDir/clients.html \-A $cvBuildDir/skills.html \$cvBuildDir/cv.md
##### Convert the HTML CV into PDF CV# pandoc -H $cvBuildDir/granneman.tex "$cvDir/$cvName.html" -o "$cvDir/$cvName.pdf"##### References# # Convert to HTMLpandoc --section-divs -f markdown -t html5 -o "$cvBuildDir/references.html""$cvBuildDir/references.md"# Convert HTML to PDFpandoc -H $cvBuildDir/granneman.tex "$cvBuildDir/references.html" -o "$cvDir/Scott Granneman - References - $(date +%Y-%m-%d).pdf"##### Cover Letter# # Convert to HTMLpandoc --section-divs -f markdown -t html5 -o "$cvBuildDir/cover-letter.html""$cvBuildDir/cover-letter.md"# Convert HTML to PDFpandoc -H $cvBuildDir/granneman.tex "$cvBuildDir/cover-letter.html" -o "$cvDir/Scott Granneman - Cover Letter - $(date +%Y-%m-%d).pdf"
When you use this script, you’ll obviously need to change the variables to match your username & directory structure.
Throughout the script you’ll see $(date +%Y-%m-%d), which generates today’s date in this format: 2013-05-25. This is appended to the final HTML & PDF files, so they look like this: Scott Granneman - CV - 2013-05-24.pdf.
Create HTML files for each Markdown file
Let’s start with the section labeled Create HTML files for each Markdown file. It takes each Markdown file—articles.md, books.md, clients.md, & cv.md, for instance—& converts it into a new HTML5 file. For example, cv.md goes from this Markdown:
12345
# R. Scott Granneman
39 Summit Place • Webster Groves, MO 63119
scott@granneman.com • www.granneman.com • www.ChainsawOnATireSwing.com
314-780-0489 (c) • 314-644-4900 (w)
To this HTML:
1234
<sectionclass="level1"id="r.-scott-granneman"><h1>R. Scott Granneman</h1><p>39 Summit Place • Webster Groves, MO 63119<br/>scott@granneman.com • www.granneman.com • www.ChainsawOnATireSwing.com<br/>314-780-0489 (c) • 314-644-4900 (w)</p></section>
Obviously, this is not a standalone HTML file. There’s no <head> block, for instance, and not even a DTD or <html> to start things off. But that’s fine, as you’ll see shortly.
Notice also that Pandoc helpfully creates a class="level1" for first level headers, and also adds an id for each header automatically, with the value for the id attribute based on the contents of the header. See—more selectors for CSS!
Let’s zoom in on the line in this section of the shell script that does the heavy lifting:
--section-divs
Wraps each section (delineated by a 2nd level header or below) in <section> elements (<div> if I wasn’t using HTML5). I do this in case I want more precise CSS selectors. In reality, my CSS doesn’t take advantage of these sections—but it could!
-f markdown
Convert the file from Markdown. Theoretically, this is unnecessary, but I found that it helps.
-t html5
Convert the file to HTML5.
-o $cvBuildDir/$cvBuildName.html
This outputs the HTML5 file into the same Builds directory as the Markdown file that’s being converted.
$i
This is the Markdown file that is being converted.
Join the HTML files into one HTML CV
The Join the HTML files into one HTML CV section of the script is next. In this part, those individual, non-standalone HTML files that we just generated are joined together into one big standalone HTML file. In other words, in the previous section we converted files like articles.md, books.md, clients.md, & cv.md into articles.html, books.html, clients.html, & cv.html; in this section, we’re combining articles.html, books.html, clients.html, cv.html, & all the others into one file named Scott Granneman - CV - 2013-05-25.html.
The really cool thing is that Pandoc lets me control the order those sections appear in the final, big HTML file. Normally you convert one file type to another using Pandoc, but Pandoc also allows you to append other files onto the first file, in the order in which you specify them. So look again at the code in this section of the script:
The file we’re actually converting is cv.md2, which is specified at the very end. It’s being output to "$cvDir/$cvName.html" (the quotation marks are there to catch spaces), specified near the beginning. But in between, I indicate that I want to append (via each -A) other files, and the order in which I list them is the order in which they will be added to $cvName.html.
Need to re-order the contents of my CV so that my business experience appears before my teaching experience? No problem—I just move -A $cvBuildDir/experience-business.html \ ahead of -A $cvBuildDir/experience-teaching.html \.
That, by the way, is why I have each option on a separate line, with the \ at the end: to make it easier to see the order sections are in & then to re-order them if necessary.
There are a few new options to the pandoc command that I need to mention:
-s
Tells Pandoc to create a standalone HTML5 document, with <html> & <head> & everything else needed to exist as a complete webpage.
-H $cvBuildDir/granneman.css
The -H tells Pandoc to insert the named file into the header of the document; in this case, to place the contents of the CSS file at the end of the <head> section that’s created since this is a standalone file.
Convert the HTML CV into PDF CV
This next section turns that big standalone HTML file into a beautifully-formatted PDF, courtesy of LaTeX. It’s a really short & simple command:
I had to fool around a bit & put the options in the order you see in order to get this command to work. Note the -H, which inserts granneman.tex into the header of the file.
What about references & a cover letter?
I created a single file for each, both in ~/CV/Builds/:
references.md
cover-letter.md
In turn, I convert each Markdown file into an HTML5 document, & then convert that HTML5 document into a PDF. It’s all based on what I just showed you, so it’s pretty easy.
The cover letter
I’m not going to show the Markdown for the references, but there are a few things special about the cover letter, so here it is:
Scott Granneman
39 Summit Place
Webster Groves, MO 63119
May 26, 2013
Professor Lorem Ipsum
Major University
123 Main Street
St. Louis, Missouri 63119
Dear Professor Ipsum:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
I have attached my curriculum vitae and a list of references. Thank you for your consideration. I look forward to hearing from you soon.
Yours,
Scott Granneman
scott@granneman.com
314-780-0489
There are two spaces to create line breaks in all the appropriate places. The big thing to note are the 3 that I include at the end. Those are there to create enough space for me to drop in my scanned signature in the PDF3.
The final product
I have to say, I’m really pleased with the system I’ve created here. Whenever I need to update my CV, I simply edit the appropriate Markdown file, & then I run cv.sh. A few seconds later, I have an HTML file for each Markdown file, and I also have a CV, cover letter, & list of references in both HTML & PDF—& the PDFs look great. Here’s a complete list of all the files I’m talking about, along with their paths:
~/CV/Builds/articles.html
~/CV/Builds/articles.md
~/CV/Builds/books.html
~/CV/Builds/books.md
~/CV/Builds/clients.html
~/CV/Builds/clients.md
~/CV/Builds/cover-letter.html
~/CV/Builds/cover-letter.md
~/CV/Builds/cv.html
~/CV/Builds/cv.md
~/CV/Builds/description.html
~/CV/Builds/description.md
~/CV/Builds/education.html
~/CV/Builds/education.md
~/CV/Builds/experience-business.html
~/CV/Builds/experience-business.md
~/CV/Builds/experience-teaching.html
~/CV/Builds/experience-teaching.md
~/CV/Builds/experience-writing.html
~/CV/Builds/experience-writing.md
~/CV/Builds/granneman.css
~/CV/Builds/granneman.tex
~/CV/Builds/interviews.html
~/CV/Builds/interviews.md
~/CV/Builds/organizations.html
~/CV/Builds/organizations.md
~/CV/Builds/presentations.html
~/CV/Builds/presentations.md
~/CV/Builds/references.html
~/CV/Builds/references.md
~/CV/Builds/skills.html
~/CV/Builds/skills.md
~/CV/Builds/training.html
~/CV/Builds/training.md
~/CV/Scott Granneman - Cover Letter - 2013-05-24.pdf
Now all I need to do is send the 3 PDFs in ~/CV/ to whomever needs them, & hopefully fame & fortune (or at least a new opportunity) will follow. Again, if you’d like to see the finished products, here you go:
Note that Wikipedia prefers résumé; however, resumé is also acceptable & makes more sense to me, so that’s what I use.↩
If you’ve been paying really close attention, you’ll notice that it was unnecessary in the previous section to convert cv.md to cv.html, as we’re doing the same thing here. I don’t mind, though, as it makes the first section easier to write, it doesn’t add any overhead, and I like having that section as an individual HTML file, even if I don’t strictly need it.↩
It’s Free Book Fri… no, Saturday! Today’s book is a fantastic collection of short stories by one of the fathers of science fiction, H. G. Wells. Here’s the info; the link is at the bottom of this post.
I ran across a digital copy of The Short Stories of H. G. Wellsat Project Gutenberg Australia, but it needed some fixing up. So I did the following:
Cleaned up the HTML
Changed over all straight apostrophes & quotation marks to their curly equivalents
Converted any special characters (em dashes & ellipses, for instance) to their UTF-8 equivalents
Published by Ernest Benn Ltd. in 1927, The Short Stories of H. G. Wells is not a complete collection of the writer’s short fiction (even though it clocks in at well over 1000 pages!). Featuring 62 stories (about two-thirds of his output) and the world-famous novella “The Time Machine,” this anthology contains most of the short works that Wells is remembered for today.
The Short Stories of H. G. Wells is divided into sections that correspond to previously published collections of Wells’ stories.
The Time Machine and Other Stories: This is not a previously-published book, but is instead a collection assembled for this book. Besides the ground-breaking “The Time Machine,” seven of Wells’ other stories are here, including “The Empire of the Ants,” “The Door in the Wall,” and “The Country of the Blind.”
The Stolen Bacillus and Other Stories: Originally published as The Stolen Bacillus and Other Incidents, these 15 stories were originally published between December 1893 and March 1895. Key stories are “A Deal in Ostriches,” “The Triumphs of a Taxidermist,” “The Lord of the Dynamos,” and “The Flowering of the Strange Orchid.”
The Plattner Story and Others: Includes stories originally published in a collection of the same name, plus five additional stories. Famous works include “The Red Room,” “The Argonauts of the Air,” “The Apple,” and “A Slip Under the Microscope.”
Tales of Time and Space: Five science fiction stories that first appeared in a collection of the same name. “The Star” is great, and “The Crystal Egg” has inspired writers for generations, but this also includes two longer works: “A Story of the Stone Age” and “A Story of Days to Come.”
Twelve Stories and a Dream: 13 stories from the eponymous collection, including “The Truth About Pyecraft,” “Mr. Ledbetter’s Vacation,” “The Magic Shop,” and “The Inexperienced Ghost.”
I’m providing a download of the exported Calibre entry for the book, which will import right away into Calibre. If you don’t have Calibre, you should be able to just pick the format you want & use that with your e-book reader of choice.
My outline for the description & a few of the phrases came from the very helpful & information [review left by Dave42](http://www.amazon.co.uk/review/R2CXJVQU2ZBI20/ref=cm_cr_dp_title?ie=UTF8&ASIN=B00085ZSSQ&channel=detail-glance&nodeID=266239&store=books) at the UK Amazon. Thanks for a well-done review, Dave42!↩
Back in 2010 I wrote a really great book that didn’t get the sales I’d have liked: Mac OS X Snow Leopard for Power Users. Unfortunately, the book had the great fortune to come out just before Lion1 was announced, rendering it obsolete immediately (but hey, feel free to go ahead & buy a copy!). C’est la vie.
Someone mentioned SSBs on a mailing list I frequent, and it reminded me that my book contained an intro to the subject, which you can read below. Some information is out of date now, but it’s still a good overview of the idea.
SSBs: Site Specific Browsers
The web browser is probably the most important software tool developed in the last two decades. Over that time, web browsers have added new features that many now consider essential: tabs, auto-fill, and extensions, to name just a few. But sometimes the added features and complexity can actually get in the way of productivity, which is why there’s been a movement in the last couple of years to create SSBs—Site Specific Browsers (although I prefer defining them as Single Site Browsers myself).
An SSB is still a web browser at its core, but it’s a vastly simplified browser with the menus and toolbars removed, and instead of using it to visit any old website you wish, you use it for a specific, single site (hence the name!). In other words, instead of having Facebook open in one tab and Gmail open in another and TUAW open in still another, you’d create a Facebook SSB, and a Gmail SSB, and open those separately, like they are actual apps on your Mac. You would use the Facebook SSB only to access Facebook, and you would use the Gmail SSB only to access Gmail. You typically create SSBs for web apps—such as Facebook and Gmail—and not for websites, such as TUAW, or The New York Times, or Techmeme.
I know many of you reading this are thinking to yourself, “Why the heck would I use an SSB? Why don’t I just open Facebook or Gmail as a tab in my web browser of choice and use that?” There are actually very good reasons to consider using an SSB instead of a tab in your usual web browser:
Minimize distractions: Other tabs can distract you from your research and work. By segregating the web apps that tempt you and eat your time, you can get more done in your web browser. Think of this also as a separation of purpose—treat web apps like they’re apps that deserve their own program, and your web browser as a general- purpose device.
Web apps that act like desktop apps: Your SSB apps go in /Applications, just like every other app on your Mac (by and large). You can drag the SSB for Facebook to your Dock and launch it, or you can use Spotlight to search for the Gmail SSB. Basically, you launch your SSB like any other app, because to your Mac, your SSBs are just other apps.
Stability: If the SSB crashes or locks up, your regular web browsers keep on going, and vice versa.
Autostart favorite websites: If, after you log in to your Mac, you always open your web browser so you can see Gmail or another web app, then you can instead set your Gmail SSB to launch on log in (Apple > System Preferences > Accounts > Login Options).
Different accounts in different SSB apps: If you have to keep separate sets of credentials for work & personal accounts for web services, no need to log in and out repeatedly—just set up a Prism SSB for one of the accounts, and the passwords & cookies will stay as they need to be.
As you can see, there are substantial benefits to using SSBs. At the least, try one for yourself and see if it meets your needs. To give you some ideas, here are a few sites that work well as SSBs (besides Gmail and Facebook, since I already mentioned them):
Addendum to the book: Several of the following sites are dead (tech moves fast!). In those cases, I’m removed the hyperlinks.
Google Buzz (https://mail.google.com/mail/?shva=1#buzz if you don’t use Google Apps; if you use Google Apps, at this time you can’t use Buzz, but that will change eventually)
Google Reader (https://www.google.com/reader/view)
Quake Live (free online Quake—woot!; use for the website and download <www.cocoia.com/QuakeLiveIcon.zip> for the SSB icon)
Toodledo (the best to-do web app out there; use )
Basically, any website that’s really a Web app makes a good candidate for an SSB. Think about the sites you visit every day and try them out using one of the SSB software tools that I’ll cover next.
Lion was the successor to Snow Leopard, remember.↩
I recently installed Windows 8 on my Mac as a virtual machine using Parallels. Do I need to install virus/security software to protect my VM?
Here’s my answer back:
Short answer: Yes.
Longer answer: Hell yes!
Longest answer: It’s Windows, ain’t it?
For anti-virus, I just tell people to install Microsoft’s free offering. It works well enough, it’s free, it auto-updates, & it doesn’t use an obscene amount of system resources.
I really like the music I can stream & download from Wolfgang’s Vault. It’s all live concert tracks from hundreds of great bands & artists, in a wide variety of genres: Rock, Blues, Country, Jazz, & Folk. For $3 a month (that’s nothin’!) I can stream as much music as I want, download concerts for $5 a pop, & in addition, I get to download two shows a week for free. All in all, quite a deal.
The only problem is that the default download app is a Java-based hunk o’ crap. It literally would never work for me, & would instead spin & spin. Finally I filed a bug with tech support, & I was told to try the legacy Mac download app, which does work. It only has two problems:
I have to sign in. Every. Single. Time. Not a huge biggie. I use the mighty TextExpander to quickly fill in my email & my password, so that’s only mildly annoying.
The app pukes two files into my home directory: cvdm.dat & cvdm.err. While the app is running, it also adds cvdm.pid, but at least that file is deleted when you quit the app. The other two stay behind, cluttering up my otherwise neat & organized home directory. And if you delete those two files, your Preferences are deleted as well. Lovely.
I finally got sick of those files staring at me every time I’m using Path Finder or, far more rarely, Finder. So I decided to write a shell script that would fix the problem. To invoke it, I use Alfred 2, but really, you don’t need it, as the shell script works just fine by itself. But if you use Alfred (or LaunchBar, or the fantastically wonderful Keyboard Maestro), you can call the shell script using it for that extra bit of laziness.
In the script you’ll notice that I use terminal-notifier, a Ruby gem that works with the Mac OS Notification Center. If you want to use it, you’ll need to install the gem first:
“Hey,” they’re thinking, “why didn’t you just use cat cvdm.pid to get the PID? After all, the app generates that file only when it’s running, so surely it contains the PID, right?”
To which I reply, “Oh my gosh, you & I had the exact same thought! But guess what? It turns out that cvdm.pid is 0 bytes & doesn’t contain squat. How convenient! Hence my fallback on an old standby.”
At this point, you can stop & just use the script. To open the Concert Vault Download Manager (CVDM) & unhide those files it uses:
1
$ ~/bin/wolfgang.sh open
To close the CVDM & hide the files:
1
$ ~/bin/wolfgang.sh quit
That’s all well & good, but it’s too much typing. Let’s set up Alfred to make this quicker & easier.
The Alfred workflow
I upgraded to Alfred 2 the day it came out, & couldn’t be happier. It’s an excellent upgrade to an already fantastic product. It’s very different that the original Alfred, however, so if you’re still using that, you’re going to have to figure out how to set things up yourself (that said, it’s fairly close to what I’m doing here, so it’s not hard).
Open Alfred’s Preferences & go to Workflows. Create a new Workflow by going to + > Templates > Essentials > Keyword To Script.
In the list of Workflows you’ll see a new one: Keyword to Script, by Unknown. Double-click it to open its Details. Enter the following:
Workflow Name: Manage Wolfgang’s Vault Downloader
Description: Open or Quit Wolfgang’s Vault Download App
Bundle ID: com.granneman.wolfgang
Created By: Scott Granneman
Website: http://ChainsawOnATireSwing.com
For the icon, I searched Google Images for “Wolfgang’s Vault logo” & used one of the ones I found.
Press Save. It should now be named Manage Wolfgang’s Vault Downloader, by Scott Granneman.
Double-click on the Keyword input so it opens. Enter the following:
Keyword: wolf
Check the box in front of With Space
Select Argument Required from the dropbown menu
Title: Manage Wolfgang’s Vault Downloader
Subtext: Enter "open" or "quit"
Press Save.
Double-click on the Run Script action1 so it opens. Enter the following:
Replace USERNAME with your Mac OS username & press Save.
Hover over the Keyword input until the little nub appears on its right side. Click on it & drag the resulting line to the little nub that appears on the left side of the Run Script action until they’re connected. It should look like this:
If you don’t want to do all of the steps above, you can just download the workflow & double-click to install it. Be sure to double-click on the Run Script action & change USERNAME, though!
You’re finished! Time to test our new Workflow.
To open the Concert Vault Download Manager (CVDM) & unhide those files it uses, open Alfred (I use Command+Space2) & type the following:
1
wolf open
To close the CVDM & hide the files:
1
wolf quit
And there you go. I hope this shows a way to get around a particular annoyance that really shouldn’t exist at all. A little shell scripting, a little Alfred, & voilà! you can hide some sloppy work by others.
Some of you Alfred 2 users may be wondering why I didn’t use the Terminal Command action instead. The reason: I didn’t want a new tab to open in iTerm 2, my terminal app of choice, every time I used this Workflow.↩
Yes, I know that’s the default for Spotlight. Once I started using Alfred years ago, I quickly realized that I would hardly ever need to use Spotlight directly again, so I re-mapped Command+Space to open Alfred. To open Spotlight, I use Alt+Space.↩
A person I’d never spoken with before emailed me today with a complaint about HP (I get these often because of a post I wrote years ago that got a lot of attention: HP’s Horrible, Unhelpful, Incompetent Tech Support and Service). I always enjoy reading the messages I get, & I try to help as best I can1.
I mentioned in my reply that I now use Macs. My correspondent replied in part:
But Apple apparently is in the same decline trend as HP, if not worse.
Huh? I wrote back:
Out of curiosity, on what do you base your idea that “Apple apparently is in the same decline trend as HP”?
Here’s what he told me:
Wall Street Journal articles. Apple has been losing money by the billions…a little bit more than HP…but from different processes. Apparently HP is due to bad investments/mergers and takeovers while Apple is due to bad CEO leadership or lack of since Jobs died.
My two accountants confirmed my WSJ interpretation of articles on Apple and HP.
Oh boy. I wrote back the following. I have no idea if it will make a difference.
Oh, that’s funny. The WSJ often does a really bad job reporting about Apple (& other companies too). I wouldn’t take what it say re: Apple to be good guidance.
Here are a few articles that explain what I’m talking about (the last one kind of sums it up):
Apple isn’t losing money at all. They have over $100 billion IN CASH. Their stock is going down, but that’s more due to weirdness in the stock market & a misunderstanding of Apple’s business by analysts. Stock going down != losing money.
So, while it might not be a good time to invest in Apple’s stock, it’s certainly as good a time as any for someone to look at buying an Apple product, if that would float your boat. It did mine. :)
People in the tech industry who follow Apple know when the Journal is spewing BS, but your average reader won’t. It reminds me of how I used to read Consumer Reports before I got into tech, & their reviews seemed to make sense. Then, after I was in this business for a while, I started realizing that their reviews of computers & phones were often completely full of crap2. But your average reader isn’t gonna know that at all.
And based on all those emails I get, it’s still not a good idea to buy a computer from HP. I wouldn’t. No frickin’ way.↩
When it comes to reviews of refrigerators & cars & stoves, Consumer Reports is still great. But not computers & other such devices.↩
I’m on a mailing list for UNIX enthusiasts here in St. Louis, & a member posted this the other day:
I DO count MacOS X as UNIX. However, I know there are some of our users who object claiming that the fact that it is NOT completely Open Source disqualifies it from our respect.
I responded thusly:
Speaking as both a Linux and Mac user, Mac OS X is more UNIX than any Linux is. This is a fact.
From [http://en.wikipedia.org/wiki/UNIX03](http://en.wikipedia.org/wiki/UNIX03):
“The Single UNIX Specification (SUS) is the collective name of a family of standards for computer operating systems to qualify for the name “Unix”. The SUS is developed and maintained by the Austin Group, based on earlier work by the IEEE and The Open Group. … Beginning in 1998, a joint working group known as the Austin Group began to develop the combined standard that would be known as the Single UNIX Specification Version 3 and as POSIX:2001 (formally: IEEE Std 1003.1-2001). It was released on January 30, 2002. …
Darwin is an open source operating system: it is essentially the open source subset of Mac OS X. Darwin is compliant with the SUS 03. …
Linux aims to be compliant, but as certification is expensive, no Linux distribution has been registered as SUS compliant.”
(Of course, I consider Linux to be a variant of UNIX, as anyone with a brain does.)
Anyone who says that Mac OS X is not a UNIX is putting their biases before fact.
Open Source != UNIX. The two have absolutely nothing, strictly speaking, to do with each other.
Tables can be incredibly useful when they are used to display data, but what can be even more useful is the ability to sort the data in the table by columns. On this page we’re going to learn how to sort tables by simply clicking on the column headers. Click once to sort ascending (A-Z) and a second time to sort descending (Z-A).
To perform this magic, we’re going to use tablesorter.js, which builds off of jQuery.
I hope you find it helpful. My plan this summer is to write up about 20 of these one-page tutorials on a variety of subjects, so my students can work through them at their own paces. I think it will be good for everyone.