Upload Available at Indy Reads Books

Upload is now available at Indy Reads Books, the only bookstore in downtown Indianapolis (911 Massachusetts Avenue). Profits from the bookstore go to the Indy Reads program:

Indy Reads is a not-for-profit organization that believes everyone should have an opportunity to learn to read. Their mission is to improve the literacy skills of adults in Central Indiana who read or write at or below the sixth grade level.

Their goal is to “Make Indianapolis 100% Literate.” Indy Reads is the only organization in Indianapolis which uses volunteers to provide basic literacy tutoring to illiterate and semi-literate adults. Their programming includes one-on-one tutoring, small group sessions, English as a Second Language (ESL) instruction, and “Literacy Labs” at neighborhood centers.
Thanks to Monica Oclander for making this great new connection!

By the way, Indy Reads Books accepts book donations, which they turn around and sell to help fund their literacy program.

Postcard from Columbus Carriage House

Just received this delightful postcard in the mail from Nancy Osterhaus, of Columbus, Wisconsin.  Nancy and her husband Wayne run a lovely bed & breakfast, the Columbus Carriage House, where I stayed for my recent three-day “writer’s retreat”.

So sorry I missed you when you left, Mark!  I sure hope you had a great trip back to Chicago.  Your book is wonderful — I’m in the staying-up-all-night-to-get-to-the-next-chapter phase!!  Good luck with your new book.  Take care — hope to see you again!

Nancy

Postcard from Nancy Osterhaus of Columbus Carriage House B&B

I was given the royal treatment during my stay at the B&B.  Nancy’s breakfasts are beautiful, delicious, and very satisfying, and I thoroughly enjoyed our long morning conversations.  I happened to be the only guest on this sleepy December weekend, so Nancy was kind enough to join me with her coffee and have a good long chat.

Poached pear to start my breakfast. Columbus Carriage House, Columbus, Wisconsin.

Nancy downloaded a copy of Upload to her Nook and started reading it during my stay, and I’m overjoyed to hear that it’s keeping her up late.  I wanted Upload to be a book enjoyed by readers who typically don’t go for sci-fi, and it sounds like it worked.  Nancy, I don’t think you could have possibly known this when you were writing me, but your postcard gave me a great sense of achievement — it confirmed that I succeeded in writing a book that rightly belongs in the science fiction section, but appeals to a broad audience.

By the way, Chicago writers, if you’re looking for a getaway, I highly recommend the Columbus Carriage House.  My wife did a lot of research — the weekend was a birthday gift for my 40th birthday, and she wanted to find the perfect place.  She was looking for an inn or B&B with wi-fi that was easily accessible via Amtrak, in a town where I could go for walks, have a few restaurant choices, and feel removed from the distractions of my responsibilities, social life, etc.  By taking the train, I could avoid the hassles of traveling by car or plane, and could settle into reading, writing, and reflection right away.  Of course, you don’t have to be from Chicago or be a writer — anyone who lives along the route of the Empire Builder and is looking for a getaway should consider the Columbus Carriage House.  You couldn’t ask for more welcoming hosts.

How to Become a Goodreads Author

Some of my fellow indie authors have found the process for becoming a Goodreads Author a bit obscure.  I thought it might be handy to write out the process in what I think is its simplest form:

1. Become a Goodreads member, if you aren’t already

2. Search for one of your titles

3. If your book isn’t on Goodreads, click the button at the bottom of the search results page… the one that says, “Still can’t find the book?  Add a new record”

4. Once your book is on Goodreads, search for yourself as an author

5. At the bottom of the basic author profile page for you, there should be a link that says, “Is this you?”  Click that and request approval.

Click here for Details on the Author Program.

Hope that helps!

Regex Pattern to Find Illegal Characters in ePub

Unsatisfied with the tools I’ve come across, I decided to build the ePub file for “Upload” from scratch.  I followed the detailed instructions in this very helpful article, and I ran into a problem when I got to the part where you’re supposed to “Package and check your EPUB”.  When I ran the epubcheck tool (java -jar epubcheck-3.0b5.jar Upload.epub), I got this output:

Epubcheck Version 3.0b5

Validating against EPUB version 2.0
ERROR: Upload.epub: I/O error reading OEBPS/content.html
ERROR: Upload.epub/OEBPS/toc.ncx(60,45): 'Chapter7': fragment identifier is not
defined in 'OEBPS/content.html'

After doing a bit of searching, I discovered that the I/O error was probably due to a character that is not valid XML content.  And the subsequent “fragment identifier is not defined” error stemmed from the fact that the I/O error had caused the epubcheck tool from reading past some illegal character in Chapter 6, since all of my chapters are in one XHTML file, “content.html”.

The problem, then, was locating the illegal character in Chapter 6 that was causing the I/O error.  I started with the brute-force approach: visually scan the content of Chapter 6 in search something that seems wonky.  This proved to be fairly tricky, and I realized that a simple regex search should uncover any characters outside the usual set of letters, numbers, and punctuation characters that one finds in a novel.  I opened my content.html file in good old Textpad, searched for illegal characters using the regex pattern below, and quickly discovered that I had copied-and-pasted a “smart quote” apostrophe from Word.  If you have additional punctuation, you may find that you have to tweak this pattern, but I hope it will at least get you pointed in the right direction:

[^-a-zA-Z <>"',./0-9:=\?&;#!()]

The basic idea is to look for any character that is NOT one of the common characters in U.S. English prose.

In case you are not familiar with regular expressions, I will give you a VERY brief breakdown of that pattern.

First off, the square brackets define a class of characters.  Typically, with square brackets, you’re telling the regex software to look for any character which falls within the defined class.  For example, this simple class definition matches any lower-case character:

[a-z]

However, that’s the white-list approach to searching: you’re defining the class of characters that you want to match.  What we really want here is to define a class of characters that we want to skip over, so that we can find the illegal characters.  This problem is easily solved by adding a caret (‘^’) as the first character in square brackets.  For example, the pattern below will match any character which is not a lower-case letter:

[^a-z]

This black-list approach allows you to define the class of characters you don’t want to match on.  If anything else comes along, match that instead.

Extending that concept, I came up with what proved to be a sufficiently large class of characters to catch any character in my novel that wasn’t “normal”.  Anything outside the “normal” class was probably something that XML doesn’t like, which would have to be replaced by either a “normal” character (e.g., a simple apostrophe instead of a smart-quotes apostrophe) or a special XML-encoded version of the character.  (There’s a pretty good list of XML-encoded characters on Wikipedia.)

So, with my handy-dandy regex pattern, I can search my novel for illegal characters, make substitutions as necessary, rebuild my ePub file, and then run it through epubcheck again.

Hope that helps!

Review of Upload by Richard Bunning

Upload grabbed my attention early on and wouldn’t let go… I loved the way that McClelland projected some of our current problems, on a quite feasible trajectory, into the future. We can all relate to this science fiction.  –Richard Bunning, Author of “Another Space in Time”

Read the review in its entirety:

My First Public Author Event

Thank you so much to everyone who attended my first “author event” at City Lit Books Thursday evening. It’s been a tremendous source of joy to discover that people take an active interest in books — that I can schedule an event to talk about my book and people actually walk away GLAD they went. That this is a phenomenon I can participate in just bowls me over, and makes me feel like I’ve finally found my voice.
Reading at City Lit Books – Photos and Collage by Jenny Moran

I was especially touched that Tina, whom my wife and I just met recently while having a truly remarkable dinner at Elizabeth Restaurant, drove in from the suburbs for the reading, and even convinced her son, her cousin, and her cousin’s son to come along.  Tina, you’re a woman of your word, and you made my night.

We also had a Seattle contingent attending via Skype, from just about the best place I can imagine a reading has ever been attending: Saké Nomi, easily one of the nation’s best sake bars (and retail shop).  Thanks to the wonders of modern technology, I now have this fun photo of me reading in Chicago, simulcast on the TV over the bar:

Discussing Upload at City Lit, in Chicago… simulcast on the TV at Saké Nomi in Seattle.  Photo by Jimmy Grisham.

 

The best part of the evening, for me, was the Q&A that followed the reading.  Everyone asked great questions, and the questions just kept coming… and I actually felt like I knew what the hell I was talking about!  When I started my software development career, almost twenty years ago, I often felt like a fake.  I felt like four years of college wasn’t enough, and I wasn’t sure I’d ever feel comfortable claiming expertise.  I think a lot of people starting a new endeavor feel this way — are you really qualified to be doing what you’re doing?  I expected to feel the same way at my first author event.  But I didn’t.  I absolutely suck at bullshitting my way through pretty much anything… and I didn’t have to.  There were a few times where I scrambled for coherent responses, but I felt like the answers were coming from honest reflection, not from some sense of what I “should” say, what a real author would say.  This was a huge confidence boost for me, and makes me eager to step into the role of “author” as public speaker, not just the person behind the printed words.  I wasn’t scared, I didn’t feel like I was faking my way through; I felt like I had something to say, I could say it with a fair degree of authority, and I could have fun doing it.  And best of all, people actually wanted to hear it.  Wow.

Kirkus Indie Review For Upload Is Live

“McClelland’s ambitious debut novel envisions a future in which the vanishing line between virtual reality and “organic life” causes an antisocial genius to conduct the ultimate evolutionary experiment… The author has a particular gift for describing the technological advances, brand names, pop-cultural references and unique detritus of a society dependent on machines for survival and ravaged by virtual-reality addiction… McClelland’s slick imagination remains in full gear until the novel’s unpredictable conclusion. A thoughtful tale resembling a sci-fi video game viewed in a funhouse mirror.” –Kirkus Indie

Check out the entire review.

The best part: the Kirkus reviews for “Ready Player One“, by Ernest Cline, and “Mona Lisa Overdrive“, by William Gibson, now list “Upload” as a suggested similar book.  While I don’t feel the folks at Kirkus Indie really “got” my book, it’s great to see it listed alongside such well regarded titles.

Double-Whammy At Century Guild Chicago: 40th Birthday + Book Release Party

I’m so excited for my 40th birthday party at the Century Guild Chicago pop-up gallery, TOMORROW, which my wife and I decided to make a double whammy: 40th Birthday + Book Release Party.  Thanks in advance to Nancy, for making it happen and being relentlessly awesome, to Jerry Suqi, for graciously offering his beautiful gallery space, to Tracy Kellner and Provenance Food & Wine for what will no doubt be a fabulous spread of wine and nummies, to Teresa Kirschbraun and City Lit Books for being on-hand to sell “Upload” (and for being the first brick-and-mortar store to carry my book!), and to all my friends who will be helping me celebrate two major life landmarks.

It’s no coincidence that the two events are being celebrated together.  It was the fact that Forty was looming so near that inspired me to make the final push to publish.  In a sense, I’m celebrating mortality’s success in forcing me to outwit trepidation.