Skip to content

2016/2015 : 2 Years in Reading

December 26, 2016

Every year, I post a list of all the books I’ve read the previous year. Although these posts receive little fanfare or repeat traffic, I enjoy doing them for myself. Those interested can also read 2014, 2013, 2012, 2011, 2010 and 2009.

2015, unfortunately, was more video games and less reading, so I ended up skipping that year. I’ll be posting both 2015 and 2016 in separate spaces below.

I’m also posting this a little early…I may finish another book, but it’s unlikely.

One of the great things about Goodreads is the ability to sort books into virtual shelves. This allows me to list books that are of professional interest on my LinkedIn account. You can take a look at my Computers and Business, Design, Fiction, Photography, Poetry, and Science Fiction, Fantasy and Horror shelves, along with my Most Read Authors list.

This was also the first year I started seriously using my Kobo Touch for reading, and about a dozen or so titles below were read digitally.

The books – 2015

  • Saladin Ahmed. Engraved on the Eye.
  • Alain Badiou and Peter Engelmann (interviewer). Philosophy and the Idea of Communism.
  • Mike Barlow. When Hardware Meets Software.
  • Shumon Basar, Douglas Coupland and Hans Ulrich Obrist. The Age of Earthquakes.
  • Leigh Brackett. The Coming of the Terrans.
  • Ray Bradbury. Ray Bradbury: The Last Interview and Other Coversations. (The Last Interview)
  • Brassaï. Brassaï. (Thames & Hudson Photofile)
  • Patricia Briggs. Night Broken. (Mercy Thompson)
  • Jim Butcher. Skin Game. (The Dresden Files)
  • Adrienne Clarkson. Belonging. (Massey Lectures)
  • Wim Crouwel and Jan Van Toorn. The Debate.
  • William C. Dietz. Mass Effect: Deception. (Mass Effect)
  • Gardner F. Fox. Kyrik Fights the Demon World. (Kyrik)
  • Gardner F. Fox. Kyrik and the Lost Queen. (Kyrik)
  • Gardner F. Fox. Kyrik: Warlock Warrior. (Kyrik)
  • Daniel Handler and Maira Kalman. Hurry Up and Wait.
  • Jim C. Hines. Codex Born. (Magic ex Libris)
  • Jim C. Hines. Libriomancer. (Magic ex Libris)
  • Jens Hoffman. Curating From A to Z.
  • Robert E. Howard. Conan the Barbarian. (Conan)
  • Robert E. Howard. Kull. (Baen Robert E. Howard Library)
  • Robert E. Howard. Marchers of Valhalla.
  • Richard Kadrey. Killing Pretty. (Sandman Slim)
  • Drew Karpyshyn. Mass Effect: Ascension. (Mass Effect)
  • Drew Karpyshyn. Mass Effect: Retribution. (Mass Effect)
  • Chip Kidd. Judge This.
  • Marius Kociejowski. The Pebble Chance.
  • C. M. Kornbluth and Judith Merril. Gunner Cade.
  • Gabriel Garcia Marquez. Gabriel Garcia Marquez: The Last Interview and Other Coversations. (The Last Interview)
  • Joe McKinney. Mutated. (Dead World)
  • Kieran Shea. Koko Takes a Holiday. (Koko)
  • Kieran Shea. Koko The Mighty. (Koko)
  • Charles Stross. Saturn’s Children.
  • Kurt Vonnegut. Kurt Vonnegut: The Last Interview and Other Coversations. (The Last Interview)
  • Simone Weil. On the Abolition of all Political Parties.
  • Chuck Wendig. The Cormorant. (Miriam Black)

The books – 2016

  • Peter Adamson. Philosophy in the Islamic World.
  • Tony Allen. Typewriter: The History – The Machines – The Writers.
  • Anonymous. Camera Work.
  • Anonymous and Henry R. Martin (illustrator). Comic Epitaphs from the Very Best Old Graveyards.
  • Anonymous and Ruth McCrea (illustrator). The ABC of Chafing Dish Cookery.
  • J.G. Ballard. Running Wild.
  • Edna Beilenson and Vee Guthrie (illustrator). Festive Cookies.
  • Edna Beilenson and Vee Guthrie (illustrator). Holiday Party Casseroles.
  • Edna Beilenson and Vee Guthrie (illustrator). Holiday Punches: Party Bowls and Soft Drinks.
  • Edna Beilenson and Ruth McCrea (illustrator). The ABC of Canapes.
  • Edna Beilenson and Ruth McCrea (illustrator). The ABC of Cheese Cookery.
  • Edna Beilenson and Ruth McCrea (illustrator). The Merrie Christmas Cookbook.
  • Edna Beilenson and Ruth McCrea (illustrator). The Merrie Christmas Drink Book.
  • Leigh Brackett. Black Amazon of Mars.
  • Leigh Brackett. The Nemesis from Terra.
  • Marion Zimmer Bradley. Endless Voyage.
  • Patricia Briggs. Dead Heat.
  • Ryan Britt. Luke Skywalker Can’t Read.
  • Ingrid Burrington. Networks of New York.
  • Dan Cederholm. Sass for Web Designers.
  • James Cornell. Catastrophe Calamity & Cataclysm.
  • Philip K. Dick. Philip K. Dick: The Last Interview and Other Coversations.
  • Peter Driben. 1000 Pin-Up Girls.
  • Nora Ephron. Nora Ephron: The Last Interview and Other Coversations.
  • Gardner F. Fox. Kothar and the Conjurer’s Curse.
  • Gardner F. Fox. Kothar and the Wizard Slayer.
  • Gardner F. Fox. Kothar of the Magic Sword.
  • Gardner F. Fox. Kothar: Barbarian Swordsman.
  • Patty Hahne. The Pocket Guide to Prepping Supplies.
  • Ernest Hemingway. Ernest Hemingway: The Last Interview and Other Coversations.
  • Carl Hiaasen. Team Rodent.
  • Jim C. Hines. Goblin Hero.
  • Jim C. Hines. Goblin Quest.
  • Jim C. Hines. Unbound.
  • Kristin Hostetter. The 10 Essentials of Outdoor Gear.
  • Robert E. Howard. Solomon Kane.
  • Robert E. Howard. Swords of Shahrazar.
  • Jane Jacobs. Jane Jacobs: The Last Interview and Other Coversations.
  • Richard Kadrey. The Perdition Score.
  • Brendan Leonard. Peak Bagging.
  • Tim Lewens. The Meaning of Science.
  • Justin Lichter. Ultralight Survival Kit.
  • David Mason (editor). Why Booksellers Die Broke.
  • Joe McKinney. Dead City.
  • Joe McKinney. The Dead Won’t Die.
  • P. B. Medawar. Induction and Intuition in Scientific Thought.
  • Anaïs Nin. In Favor of the Sensitive Man.
  • Steve Perry and Stephani Perry. Aliens vs. Predator: Prey.
  • Lou Reed. Lou Reed: The Last Interview and Other Coversations.
  • Marc Riboud. Marc Riboud.
  • Arthur Rimbaud. Illuminations.
  • Jon Ronson. So You’ve Been Publicly Shamed.
  • Carlo Rovelli. Seven Brief Lessons on Physics.
  • Roy Scranton. Learning To Die in the Anthropocene.
  • Suzanne Swedo. Wilderness Survival: Staying Alive Until Help Arrives.
  • Chuck Wendig. Zeroes.
  • Robert Moore Williams. Jongor Fights Back.
  • Howard Zimmerman (editor). Ripley’s Believe It or Not!: Weird Inventions and Discoveries (100th Anniversary Edition).
  • Henk van Rensbergen. Abandoned Places.

Subjects

As per previous years, here are all the subjects I have in my personal database, and how they reflected in this year’s reading.

A new category this year is Everyday Carry, as I try to up my EDC game.

Subject 2009 2010 2011 2012 2013 2014 2015 2016 Total
Fantasy 6 17 9 33 14 13 11 11 114
Science Fiction 9 0 15 25 12 4 8 5 78
Photography 13 29 6 4 1 2 1 3 59
Poetry 14 10 7 6 2 2 0 1 42
Politics 17 2 6 5 5 1 2 0 38
Philosophy 11 9 4 4 2 2 1 1 34
Fiction 4 10 3 0 7 2 0 1 27
Computers 1 3 4 3 2 11 1 2 27
Essays 1 6 7 1 4 2 3 2 26
Interview 7 2 3 1 2 1 3 5 24
Book Arts 7 2 5 2 2 0 0 2 20
Business 5 3 4 2 3 1 0 1 19
Horror 0 0 0 0 5 8 3 3 19
Literary Criticism 8 1 4 1 0 0 0 0 14
Cooking 3 1 0 0 0 0 0 8 12
Art 3 0 2 2 1 1 1 1 11
Games 0 0 0 0 3 7 0 0 10
Religion 4 3 1 0 1 0 0 0 9
Design 0 1 1 0 4 1 2 0 9
Biography 3 2 2 0 0 0 0 0 7
Sociology 0 4 1 0 0 1 0 1 7
Science 1 0 0 1 1 0 0 4 7
Comics 0 0 4 0 2 0 0 0 6
Memoir 3 0 0 1 0 1 0 0 5
Quotations 1 1 2 0 0 0 0 1 5
Everyday Carry 0 0 0 0 0 0 0 5 5
Travel 3 0 0 1 0 0 0 0 4
History 1 0 0 0 1 0 0 2 4
Psychology 2 1 0 0 0 0 0 0 3
Architecture 0 0 1 2 0 0 0 0 3
Film 1 1 0 0 0 0 0 0 2
Sports 0 1 1 0 0 0 0 0 2
Music 1 0 0 0 1 0 0 0 2
Childrens 1 0 0 0 0 0 0 0 1
Drama 0 1 0 0 0 0 0 0 1
Humor 0 1 0 0 0 0 0 0 1
Mystery 0 0 1 0 0 0 0 0 1
Military 0 0 0 1 0 0 0 0 1
Writing 0 0 0 1 0 0 0 0 1
Unsorted 1 6 0 0 0 0 0 0 7
Totals 117 131 93 96 75 60 36 59 667

Authors

A few new authors on the most-read list, as well.

Author 2009 2010 2011 2012 2013 2014 2015 2016 Total
Robert E. Howard 0 0 0 19 9 6 3 2 39
Lord Dunsany 13 0 0 0 0 0 0 0 13
Gardner F. Fox 0 0 0 3 3 0 3 4 13
Jim Butcher 4 1 1 4 1 0 1 0 12
Terry Eagleton 2 5 1 2 1 0 0 0 11
Anonymous 2 4 1 0 0 0 0 3 10
Richard Kadrey 0 0 0 0 4 3 1 1 9
Patricia Briggs 2 0 1 1 1 1 1 1 8
Andre Norton 0 1 6 0 0 0 0 0 7
Leigh Brackett 0 0 0 4 1 0 1 2 7
Edna Beilenson 0 0 0 0 0 0 0 7 7
A. E. van Vogt 0 0 6 0 0 0 0 0 6
Chuck Wendig 0 0 0 0 0 4 1 1 6
Isaac Asimov 0 5 0 0 0 0 0 0 5
Steven Brust 1 4 0 0 0 0 0 0 5
Edgar Rice Burroughs 0 0 0 5 0 0 0 0 5
Clifford D. Simak 0 1 2 2 0 0 0 0 5
John Berger 2 2 0 0 1 0 0 0 5
Henry Kuttner 0 0 0 3 1 1 0 0 5
A. Lee Martinez 0 0 0 0 0 5 0 0 5
Jim C. Hines 0 0 0 0 0 0 2 3 5
Robert Adams 1 1 1 1 0 0 0 0 4
Irving Layton 0 0 2 2 0 0 0 0 4
Simon Critchley 0 2 0 2 0 0 0 0 4
J. F. Rivkin 0 0 0 2 2 0 0 0 4
John Scalzi 0 0 0 0 3 1 0 0 4
Joe McKinney 0 0 0 0 0 0 1 2 3

A book of lists

April 9, 2015

About 5 years ago, I started to collect and sift through a bunch of literary awards, focusing on science fiction, fantasy, and horror. It slowly grew to incorporate children’s lit, mystery, and even some mainstream literary awards.

I’ve stalled out about a dozen times in the last 5 years, going strong for a week, then leaving it for months.

Finally, I decided if I didn’t publish it, it would be consigned to the dustbin of unfinished projects, and I already have too much stuff in there already.

So, now you can get it on Github. I’ve chosen Github because it allows me to tinker with the project whenever I like, and I don’t have to worry about various hosting services complaining about file types, etc. Just click into the /epub/ folder, select view raw, and you’ll get the final file.

Why epub?

I’ve wanted to learn more about epub for awhile. The HTML files are all hand-written, but the epub file is compiled by Sigil, a great open-source app for epub authoring.

Why awards?

Hey, I love lists. There are some great awards sites out there, but all of them list awards individually…you can’t see who won all the Hugo, Nebula and Booker awards in one consolidated list. Now you can.

The introduction of the book goes into a little more detail about the selection process, and what’s in there.

If you have links to other resources on the web, leave a comment! I’d love to hear from you. Additionally, I want to hear about your experiences with the file on various e-readers. Unfortunately, I only have 1 Kobo, and don’t have the cash to flip for the dozen other popular readers out there.

Happy reading!

2014: A Year in Reading

January 2, 2015

Every year, I post a list of all the books I’ve read the previous year. Although these posts receive little fanfare or repeat traffic, I enjoy doing them for myself. Those interested can also read 2013, 2012, 2011, 2010 and 2009.

One of the great things about Goodreads is the ability to sort books into virtual shelves. This allows me to list books that are of professional interest on my LinkedIn account. You can take a look at my Computers and Business, Design, Fiction, Photography, Poetry, and Science Fiction, Fantasy and Horror shelves, along with my Most Read Authors list.

This was also the first year I started seriously using my Kobo Touch for reading, and about a dozen or so titles below were read digitally.

The books

Arranged in alphabetical order, with series or imprints in parantheses.

Monte Beauchamp. Popular Skullture.

A great collection of vintage pulp, paperbacks and comic books featuring the skull motif. A great companion to some of the recent art books featuring art from the period.

Ken Binmore. Game Theory. (A Very Short Introduction)

Not very satisfying. This moved so quickly through subjects that is was difficult to follow the arguments.

Werner Bishcof. Werner Bishcof. (Thames & Hudson Photofile)

Jorge Luis Borges. Jorge Luis Borges: The Last Interview & Other Conversations. (The Last Interview)

The core of this book is an interview with Richard Burgin that really shines. Borges is one of the great conversationalists, and the whole book is suffused with his wit and almost encyclopedic knowledge. Highly recommended, and one of the stand-outs from The Last Interview series.

Jeff Bridges and Bernie Glassman. The Dude and the Zen Master.

I really wanted to like this one, but I couldn’t really get into it. It kinda fell back into a lot of wrote and basic notions of zen, and the anecdotes didn’t really ring true. While both Bridges and Glassman are truly great men, there wasn’t much in the way of new thinking on zen here.

Patricia Briggs. Frost Burned. (Mercy Thompson)

This has always been a well-paced series of quick but durable reads, but the latest installment picks up the pace and gives you a great story. Briggs has kept the series and the characters evolving, and Frost Burned ups the ante while giving Mercy a bigger role. Many favorite characters from past books return, and while the end isn’t in sight, I’m beginning to sense the series is over the half-way mark. Great urban fantasy with few off-key notes.

Warren Ellis. Gun Machine.

Ellis’ penchant for inventive profanity and truly bizarre characters is in full display here, but the story doesn’t deliver on its promise. A quick, entertaining read, nonetheless.

Nick Farwell. Minecraft: Redstone Handbook.

A sequel to the Beginner’s Handbook, this is all about Redstone and it’s various uses. Still too slight to be really useful, it nonetheless complements the first book well.

Brad Frost. Atomic Design.

Robert E. Howard. Beyond the Black River. (The Weird Works of Robert E. Howard)

More blood and guts from Howard, with many long Conan stories. The pace is swift, the action bloody and intense, but you’ll have to slog through the prejudices of an earlier age in spots.

Robert E. Howard. Conan: People of the Black Circle. (Conan)

A collection of classic Conan stories.

Robert E. Howard. People of the Dark. (The Weird Works of Robert E. Howard)

This series was issued twice, once in paperback and once in trade, both by different publishers who changed the order of the stories. This is the paperback issue, containing many classic Howard tales at his peak, all from Weird Tales magazine. This is why Howard is considered the founder of sword-and-sorcery, and one of the kings of the pulps. Non-stop action and chills. Plus, Conan!

Robert E. Howard. Skull-Face.

Aside from the notable title story, this is a collection of mostly pulp stories with the same villain, modeled after Fu Manchu. It’s not the greatest collection of Howard stories, but filled with action, nonetheless.

Robert E. Howard. The Road to Azrael.

Straight historical adventures from the author of Conan. Dry in many spots, this isn’t his best fiction. The pace is solid, but it’s missing some of the flair of the Conan/Kull tales. Not the best place to start with Howard.

Robert E. Howard. The She Devil.

Believe it or not, this is Howard’s porn. Most of the stories were originally featured in Spicy-Adventure Stories, a saucy pulp rag back in the 1930’s. While there’s no real porn in these, the stories have a breakneck pace. Fair warning: the treatment of women in these stories is horrible, with a lot of rape and torture. Indicative of it’s day, it isn’t easy reading now.

Foster Huntington. The Burning House.

This started as a blog and eventually became a book. Contributors were asked a question: if your house was on fire, what would you grab on the way out? The answers range the gamut of human emotions, needs, and wants. A truly international book with contributors from almost every continent and walk of life, I loved it. Every answer was subjective, and some of the photos will choke you up.

Alex Irvine. Marvel Vehicles: Haynes Owner’s Workshop Manual. (Haynes Owner’s Workshop Manual)

This isn’t as satisfying as Eliot Brown’s Handbook of the Marvel Universe work, but it has a lot of colourful anecdotes, and covers more recent vehicles. While it doesn’t provide any type of detail, it’s still a fun book.

K. W. Jeter. Real Dangerous Girl.

This was a dud for me. It took way too long to get started, and I couldn’t find a likable character. Your mileage may vary.

Richard Kadrey. Devil in the Dollhouse. (Sandman Slim)

A short story set in between novels, this is a ‘lost’ story of Stark in hell. Great, quick read.

Richard Kadrey. Kill City Blues. (Sandman Slim)

Sandman Slim’s growing up. While this book had it’s characteristic noir violence and dark humor, the characters are beginning to move away from the ‘shoot first and just keep shooting’ attitude that permeates the previous books. The stakes are raised, but so are the heroes. Kadrey is starting the set-up for the final run of the series (imho), and it sound like Slim is going to go out dragging half of hell with him.

Richard Kadrey. The Getaway God. (Sandman Slim)

It’s hard not to look at this as the end of the series. It’s definitely the end of the first arc of the Sandman Slim saga, if more books are forthcoming. I’m not sure if it’s the best ending, but it is epic and satisfying, nonetheless. Most of the plot lines are tied up, with a few loose dangling threads to push a new arc forward. Kadrey’s signature horror, black humor, and endlessly inventive profanity are on full display here.

Paul Krugman, George Papandreou, Newt Gingrich and Arthur B. Laffer. Should We Tax the Rich More?: The Munk Debate on Economic Inequality. (Munk Debates)

An engaging debate regarding the state of income inequality, Krugman/Papandreou arguing for more taxation and Gingrich/Laffer arguing for less. I’m biased in favor of Krugman’s arguments, but both sides came out swinging.

Henry Kuttner. The Mask of Circe.

A sci-fi re-imagining of the legend of Jason. Surprisingly good mix of time travel, genetic memory, alternate dimensions, and romance.

Tim Leong. Super Graphic.

A book of infographics covering comic books. If you’re familiar with the source material, the book is a lot of fun. However, many of the graphics are played for jokes alone. Based on a series of blog postings, I was hoping the book would have less obviously joke charts, and more based around actual data collection. While it’s a fun read, it didn’t add any more substance than the blog postings.

A. Lee Martinez. A Nameless Witch.

Understated humor, a great heroine, and a love story with a twist. Martinez’s twists on traditional fantasy tropes is fresh and unique, and his interest in characters over the mechanics of magic keeps the story moving. Not a fully-realized world, but there’s enough here to keep the story coherent.

A. Lee Martinez. Chasing the Moon.

This one didn’t ring true for me. The humor and characterization was there, but the story didn’t really convince me. An important part of fantasy is keeping the rules of your made-up world consistent, and that didn’t seem to happen here. I also think the book was a little overloaded with too much cast and too much strangeness for the sake of strangeness. Martinez is a great author, but you’d be better to pick up his other books before this.

A. Lee Martinez. Gil’s All Fright Diner.

A great read, funny as hell. It’s difficult to describe this one without spoilers, but if you like urban fantasy, this is a must-read.

A. Lee Martinez. In the Company of Ogres.

Martinez continually roots for the underdog, and Never Dead Ned is a true underdog. The twists and turns are not exactly new, but Martinez gives them all a fresh take. All the characters are fully fleshed out, and the constant bickering camaraderie is reminiscent of an old episode of M*A*S*H. It’s a good book.

A. Lee Martinez. Too Many Curses.

This is a good book, but there are a few false notes. Making the heroine the housekeeping kobold kept the story anchored. The humor is understated, and Nessy will grow on you.

Joe McKinney. Plague of the Undead.

On the surface, it’s just another zombie novel. But under the hood, McKinney relies on his real-world work in disaster mitigation and police training to deliver a realistic survival tale. On top of that, he adds some science-fiction notes to what is essentially, an action novel. It’s a quick read with a solid ending.

Rod McKuen. Seasons in the Sun.

I’ve seen McKuen poetry books in used bookstores for decades, and finally I had to pick a few up to satisfy my curiosity. This is sort of like reading a Hallmark version of Bukowski…not quite raw enough, but the honesty is there. There honestly isn’t enough here of quality to justify a full paperback.

Rod McKuen. Too Many Midnights.

Probably the last McKuen I’ll be slogging through. While there’s a degree of honesty here, not enough poems rise to the quality level needed to carry a full book.

Shawn Micallef. The Trouble with Brunch.

A series of inter-connected essays examining class from the perspective of brunch. I’m not sure if there’s much to see here. Micallef raises some interesting points, but the book only skims the surface; there isn’t any deep insight here.

Megan Miller. Minecraft Hacks.

Another beginner’s book. I’m addicted. This is about the same as most other books on the subject, but you’ll find the screenshots badly reproduced, and the recipes aren’t shown, only described. Like many other Minecraft books, this one is a few versions behind the game. Depending on what you want out the game, this may or may not be for you.

Megan Miller. Minecraft Hacks: Master Builder.

These are quick reads. If you don’t have any other Minecraft books to rely on, then it’s ok. But I’m not sure the brevity justifies the price tag.

Stephanie Milton. Minecraft: Combat Handbook.

Continuing Mojang’s series of tutorials on all things Minecraft. I typically give these books a low review because they are very slight. But this is intentional, as they are meant for a younger audience. The combat book focuses on mobs and pvp, and covers the basics well.

Matthew Needler and Phil Southam. Minecraft: Construction Handbook.

If you buy only one of the Mojang Minecraft strategy guides, this is the one. Covers a wide variety of structures, from simple to advanced. It doesn’t provide every single step required, but a good overview is provided with variations. Everyone playing survival will need to build multiple shelters, and this lets you do it in style.

Andrew O’Brien. Little Book of Video Games.

Stay away. While some of it is well-written, it’s full of typos, bad formatting and the like. Obviously a first effort with little to no quality control.

Dylan Richard. Learning from First Responders: When Your Systems Have to Work.

Ben Robinson and Marcus Riley. U.S.S. Enterprise: Haynes Owner’s Workshop Manual. (Haynes Owner’s Workshop Manual)

Not as in-depth as Okuda and Sternbach’s original guide to the Enterprise-D, but it covers all Star Trek ships that had the name. It’s a fun book, and stands as a good companion to the original.

Richard Rosenbaum. Raise Some Shell.

A good history of the entire Teenage Mutant Ninja Turtles phenomenon, from the very beginning to the present day. The author is an unabashed fan, and his personal asides can be both annoying and charming. For both die-hard fans and those wondering what all the fuss is about.

Douglas Rushkoff. Program or be Programmed.

While this is a good general discussion of computer trends and literacy, it left me a little cold. While I think he has a generally good handle on his topic, I think he’s wrong about many specific points. Rushkoff is rooted in the computer culture that matured on the west coast long before the home computer revolution really took off, and that culture is reflected here as what computer culture ought to be everywhere, which it isn’t. I think it’s worth a read as a general introduction, but I wouldn’t stop here. There’s a worthwhile list of references at the end that helps round out the book.

Maurice Nathan Saatchi. Brutal Simplicity of Thought.

Not very useful. Supposedly a training manual for Saatchi employees, it said virtually nothing, and most of the insights were very tired retreads of folk knowledge and various maxims. Don’t waste time on this one.

Safari Content Team. .NET Bibliography.

Safari Content Team. Coding Bibliography.

Safari Content Team. Linux Bibliography.

Safari Content Team. Microsoft Enterprise Bibliography.

Safari Content Team. Software Testing Bibliography.

John Scalzi. Redshirts.

I don’t know what to say, other than, for me, this was pretty bad. It’s well-written, and the plot moves along, but it just left me cold. While the general premise is good, it just didn’t hold my interest. Your mileage may vary.

Will Shetterly. Cats Have No Lord.

Respectable fantasy fare. The characters are vivid, but the plot is sluggish and the locale a little cut-and-paste. Read it for the characters. This is connected to The Tangled Lands, which I believe is a odd type of sequel.

Will Shetterly. How to Make a Social Justice Warrior: On Identitarianism, Intersectionality, Mobbing, Racefail, and Failfans 2005-2014.

I had mixed feelings going through this. Shetterly doesn’t shy away from his own mistakes, noting his biases and what he feels he’s done wrong. He also blasts away at many people, without holding back. Having missed most of the events he describes, it’s difficult to know who’s right or wrong. But he makes a convincing, articulate argument for why the social justice movement is failing to bridge divides and present a cohesive counterpoint to the right. You will walk away loving or hating it, but you will be forced to think.

Simon St.Laurent. The Web Platform: Building a Solid Stack of HTML, CSS, and JavaScript.

Dennis Stone. A Life at the Airport: A Heathrow Photographer.

A collection of celebrity shots with commentary. There are some great shots, and some bad ones. The commentary by Stone on his process and years at the airport elevate this from being simply a collection of newspaper headline shots to something interesting.

Mandi Walls. Building a DevOps Culture.

Chuck Wendig. Blackbirds. (Miriam Black)

I’m not quite sure what to make of this one. Miriam is a foul-mouthed young psychic trying desperately to avoid her power, seeing the death of everyone she touches. Revealing the rest of the book is too many spoilers, but if you like Kadrey, you’ll probably like this. It’s a fast read, but I found it didn’t quite end as well as I would have liked.

Chuck Wendig. Mockingbird. (Miriam Black)

The second book in the series starts to bring the central character into focus, but still leaves a lot to be desired. I will probably read the third book, to complete it, but the pace is slow. There are a lot of good ideas in here, but the Mookie Pearl books are by far the superior series by Wendig.

Chuck Wendig. The Blue Blazes. (Mookie Pearl)

Hard-boiled prose, a convincing world, and full-realized characters combine in this explosive fantasy noir. Think Sin City meets Harry Dresden. This was hard to put down.

Chuck Wendig. Unclean Spirits. (Gods and Monsters)

Wendig wrote this as part of a shared world series, and the lack of commitment shows. Everything is there, but somehow nothing really clicks into the sharp focus you get with the Mookie Pearl or Miriam Black series. Many others have noted that the concept (every god there ever was exists and they’re fighting a secret war in the present) is a bit tired at this point. This is for completists only.

Adam Wiggins. The Twelve-Factor App.

Slavoj Žižek. Žižek’s Jokes.

A hodge-podge of humor quotes from various published and non-published works. It’s lop-sided, and doesn’t show off Zizek to his advantage. Too many of the jokes required a set-up that wasn’t printed in the book for lack of space. Not really worth it, despite there being a few choice zingers.

Subjects

As per previous years, here are all the subjects I have in my personal database, and how they reflected in this year’s reading.

Subject 2009 2010 2011 2012 2013 2014 Total
Fantasy 6 17 9 33 14 13 92
Science Fiction 9 0 15 25 12 4 65
Photography 13 29 6 4 1 2 55
Poetry 14 10 7 6 2 2 41
Politics 17 2 6 5 5 1 36
Philosophy 11 9 4 4 2 2 32
Fiction 4 10 3 0 7 2 26
Computers 1 3 4 3 2 11 24
Essays 1 6 7 1 4 2 21
Book Arts 7 2 5 2 2 0 18
Business 5 3 4 2 3 1 18
Interview 7 2 3 1 2 1 16
Literary Criticism 8 1 4 1 0 0 14
Horror 0 0 0 0 5 8 13
Games 0 0 0 0 3 7 10
Religion 4 3 1 0 1 0 9
Art 3 0 2 2 1 1 9
Biography 3 2 2 0 0 0 7
Design 0 1 1 0 4 1 7
Comics 0 0 4 0 2 0 6
Sociology 0 4 1 0 0 1 6
Memoir 3 0 0 1 0 1 5
Cooking 3 1 0 0 0 0 4
Quotations 1 1 2 0 0 0 4
Travel 3 0 0 1 0 0 4
Psychology 2 1 0 0 0 0 3
Architecture 0 0 1 2 0 0 3
Science 1 0 0 1 1 0 3
Film 1 1 0 0 0 0 2
Sports 0 1 1 0 0 0 2
History 1 0 0 0 1 0 2
Music 1 0 0 0 1 0 2
Childrens 1 0 0 0 0 0 1
Drama 0 1 0 0 0 0 1
Humor 0 1 0 0 0 0 1
Mystery 0 0 1 0 0 0 1
Military 0 0 0 1 0 0 1
Writing 0 0 0 1 0 0 1
Unsorted 1 6 0 0 0 0 7
Totals 117 131 93 96 75 60 572

Authors

A few new authors on the most-read list, as well.

Author 2009 2010 2011 2012 2013 2014 Total
Robert E. Howard 0 0 0 19 9 6 34
Lord Dunsany 13 0 0 0 0 0 13
Terry Eagleton 2 5 1 2 1 0 11
Jim Butcher 4 1 1 4 1 0 11
Anonymous 2 4 1 0 0 0 7
Andre Norton 0 1 6 0 0 0 7
Richard Kadrey 0 0 0 0 4 3 7
A. E. van Vogt 0 0 6 0 0 0 6
Gardner F. Fox 0 0 0 3 3 0 6
Patricia Briggs 2 0 1 1 1 1 6
Isaac Asimov 0 5 0 0 0 0 5
Leigh Brackett 0 0 0 4 1 0 5
Steven Brust 1 4 0 0 0 0 5
Edgar Rice Burroughs 0 0 0 5 0 0 5
Clifford D. Simak 0 1 2 2 0 0 5
John Berger 2 2 0 0 1 0 5
Henry Kuttner 0 0 0 3 1 1 5
A. Lee Martinez 0 0 0 0 0 5 5
Robert Adams 1 1 1 1 0 0 4
Irving Layton 0 0 2 2 0 0 4
Simon Critchley 0 2 0 2 0 0 4
J. F. Rivkin 0 0 0 2 2 0 4
John Scalzi 0 0 0 0 3 1 4
Chuck Wendig 0 0 0 0 0 4 4

Holiday Gift Guide 2014

December 15, 2014

Last-minute shopping? I can’t say this is a gift guide for everyone, but every year I offer up a little list of things I think are cool. Most are books. I can’t lay claim to all of these being recent, but they are to my taste.

Without further ado:

Alfred Stieglitz: Camera Work

This brings together highlights from the entire run of Stieglitz’s legendary magazine Camera Work, one of the first North American periodicals to feature photography in any way.
http://www.chapters.indigo.ca/books/alfred-stieglitz-camera-work/9783836544078-item.html

Was Superman A Spy?: And Other Comic Book Legends Revealed

http://www.chapters.indigo.ca/books/was-superman-a-spy-and/9780452295322-item.html

Why Does Batman Carry Shark Repellent?: And Other Amazing Comic Book Trivia!

http://www.chapters.indigo.ca/books/why-does-batman-carry-shark/9780452297845-item.html

Brian Cronin writes a regular blog on why comics developed the way they did, and both these books expand heavily on the same theme. These are a comic trivia-lovers dream.

Star Wars Costumes by Brandon Alinger

http://www.chapters.indigo.ca/books/star-wars-costumes/9781452138053-item.html
A coffee-table sized portfolio of the original trilogy’s costumes, in their full glory.

Geek-Art: An Anthology: Art, Design, Illustration & Pop Culture by Thomas Olivri

http://www.chapters.indigo.ca/books/geek-art-an-anthology-art/9781452140483-item.html
Another oversized-tome of creators re-interpreting geek culture in many different forms.

A Philosophy Of Walking by Frederic Gros

http://www.chapters.indigo.ca/books/a-philosophy-of-walking/9781781688373-item.html
I haven’t read this yet, but I’m an avid walker, and the book jacket blurb is enticing.

Radio Benjamin by Walter Benjamin

http://www.chapters.indigo.ca/books/radio-benjamin/9781781685754-item.html
We’ve had a flood of newly-translated Benjamin over the last 2 decades, and this is a transcript of his radio work in Germany.

Belonging: The Paradox of Citizenship by Adrienne Clarkson

http://www.chapters.indigo.ca/books/belonging-the-paradox-of-citizenship/9781770898370-item.html
The latest Massey Lecture by one of our more distinguished former Governor-Generals of Canada. I’m half-way through this, and like all Massey’s, it doesn’t disappoint.

Information Doesn’t Want to Be Free: Laws For The Internet Age by Cory Doctorow

http://www.chapters.indigo.ca/books/information-doesnt-want-to-be/9781940450285-item.html
I will say up-front that I’m not a fan of Doctorow. I doubt I’ll agree with very much in this book, but he at least is sane and hasn’t drunk the dot-com kool-aid like many others who weigh in on copyright and new economic models.

Thug Kitchen: Eat Like You Give a F*ck

http://www.chapters.indigo.ca/books/thug-kitchen-eat-like-you/9781770894655-item.html
Probably the most entertaining food blog currently in existence. Healthy food with attitude.

Cool Beer Labels: The Best Art & Design From Breweries Around The World by Daniel Bellon, Steven Speeg

http://www.chapters.indigo.ca/books/cool-beer-labels-the-best/9781440335204-item.html
A wonderful picture book of craft and small brewery labels from around the world. Great design, and great beer.

Camera Crazy by Buzz Poole, Christopher D. Salyers

http://www.chapters.indigo.ca/books/camera-crazy/9783791349558-item.html
A fun book of toy cameras, old and new. Quite a few of these are used by professionals daily.

The Sakai Project: Artists Celebrate Thirty Years of Usagi Yojimbo

https://www.darkhorse.com/Books/26-371/The-Sakai-Project-Artists-Celebrate-Thirty-Years-of-Usagi-Yojimbo-HC
This is a beautiful hardcover from Dark Horse featuring artists from around the world interpreting Stan Sakai’s rabbit ronin. Usagi Yojimbo has consistently been a high-quality comic for the last 30 years, and proceeds from the book will help defray medical costs of the Sakai family.

First Contact

May 1, 2014

Wil Wheaton has a new network show coming out, and he did a blog post asking for audience participation. Record a “first contact” story…your first encounter with a celeb you really wanted to meet, with the best stories being animated and presented on the show.

Well, I don’t quite have a story that I can say is completely true…at least, my memory is a little fuzzy on the details. But here it is (with a few sidebars on what may not be up to snuff).

Around 12-14 years ago, Kevin Smith came to FanExpo, right around his run on Daredevil. I was in line waiting patiently for signatures. Suddenly, I felt a tugging on my lower pants leg. I looked down, and found myself looking at an older woman less than three feet tall. She said hi, and we started to chat.

Smith’s line was separated from the con floor by make-shift curtains, behind which were more celebs meeting fans. Many were Star Wars actors. This woman motioned to the curtain at some point and said “I’m with them”. I realized at this point that I was probably speaking to the wife of Kenny Baker (this is a point I never got clear…Warwick Davis was also there, so it could have been his wife…or just a friend or other relation of either). I was having a conversation with R2-D2’s wife (maybe). How cool is that?

It became very clear that this woman (who was nice and a great conversationalist) had never been to a con before, and was baffled by the entire experience. We ended up chatting about what was going on, cosplay, various things that happen on a con floor. My immediate impressions of her: very conservative, and not a deep fan of sci-fi. Fair play to that…it’s not for everyone, and these were first impressions of someone I’d known for five minutes.

At one point, we started talking about Kevin Smith, and she asked me to describe what he did. Given my impressions, I really didn’t want to talk about Smith’s, how shall we say, ‘unique’ brand of humor.

Karma must hate me. At that moment, everyone in the line shifted to one side just as she looked up the aisle to see Smith…who was in the middle of signing a young lady’s exposed breast. I knew, of course, that somehow I would end up getting blamed for this.

This, of course, summed up Smith’s oeuvre better than I ever could…all with a few swipes of a Sharpie.

The woman I was talking to walked back behind the curtain.

There you have it, Wil. Star Wars, comic books, boobs. What more could you possibly want?

Naming Code

January 28, 2014

There are a bunch of programming books that have dramatically effected how I write, organize, and maintain code, whether it’s an HTML template, a Javascript file, XML, Freemarker, PHP…anything I’ve been asked to use or fiddled with on my own.

I rarely think of myself as a programmer or an engineer, because most of the day-to-day activities in user interface “programming” largely consists of integrating the efforts of many different people and disciplines: graphic design, back-end applications, templates, information architecture, accessibility, internationalization, optimization, editorial guidelines…making a user interface involves a lot of cross-discipline work and ‘soft’ skills. This is generally how I’ve positioned myself over the years…as a generalist that specializes in communicating between the many different groups that come to the table to build a site, and integrating that in a way that benefits the client.

But you didn’t come here to read my LinkedIn mission statement. Let’s get back to it.

Both the Pragmatic Programmer and Code Complete are must-reads, although I’ll admit that Code Complete is so massive it may take a few tries to get all the way through (I read the first edition and that’s what I’ve linked to, but there’s a second edition out now). Seriously, you can kill small animals with this thing…it’s ideal for home defense.

One of the better books I’ve read, and one I keep coming back to over and over, is The Elements of Java Style, a collaborative effort by a group of coders that worked at Rogue Wave Software. Several permutations of those authors, in conjunction with a few new faces, have released similar versions for both C++ and C#. All the books are issued by Cambridge University Press, and all are awesome.

I don’t know much about Java, let me say that right off the bat. And most of the latter half of the book is advanced topics that only make sense for folks programming in Java. But the first half discusses code formatting, documentation style, and naming conventions that I’ve taken to heart over the years, and anyone who’s seen my CSS or Javascript will recognize this book’s influence on how I name things.

Which is, finally, what I want to discuss.

Naming conventions can truly make or break projects or teams. As someone who’s suffered through a half-dozen ASP Classic projects, all written in Hungarian Notation, VB style, I can tell you that not standardizing on something that makes sense for the whole organization can be disastrous. I’m going to wait for all the Hungarian enthusiasts to stop throwing strFruit at the monitor before we continue.

While I’m not going to copy verbatim what’s said in The Elements of Java Style, I’m going to share my interpretation of it here.

Classes/Superclasses/Modules: written in UpperCamelCase.

Methods/Functions/Subroutines: written in regularCamelCase.

Constants: All UPPERCASE.

Hashes/Dictionaries/Arrays/Collections: regularCamelCase.

All other variable types: regularCamelCase.

There’s two sets of extra distinctions. The first is that classes are nouns and methods are verbs. The second is that arrays are plural and variables that can only contain a single value (strings, numbers, boolean) are singular.

So, a really simple (useless except for demonstration purposes, actually) Javascript object would look like this:

AcmeWidget = ( function() {
	var acmeHammer = '',
	    acmeNails = [],
	    COYOTE = "Wily";

	dieDieDie = function() {
	    //TODO: obviously doomed-to-fail
	    //nefariously nefarious plan
	    //written entirely in regular expressions
	};
}());

The Javascript notation and formatting isn’t really relevant here. It’s how the names of the parts read. Making classes nouns and methods verbs make them easily distinguishable, even without the added capital letter in the front. You immediately know that a variable contains a collection because it’s pluralized. Constants are rarely an issue for me because I rarely use languages that have them, but once you’ve established the convention in a language that doesn’t support them, people can tell which variables they shouldn’t mess with.

The beauty of these conventions is that they don’t make any assumptions about the problem you’re trying to solve. You can use them to build a Javascript carousel or a heart monitor. The conventions make no assumptions about your problem domain, making them endlessly re-usable.

The best thing for me? A simple restriction to make them usable with CSS classes and id’s (no punctuation, can’t start with a number) makes the scheme easily extendable to CSS. Combine that with the fact that these conventions work in most server languages, and you only need to standardize on a single naming convention.

The Elements of Java Style goes on to make a few more suggestions, like standardizing on the names of throwaway variables (i, j, k, etc) and standard prefixes for methods that do the same thing (get/set/is). Most of these come from the Sun Java Style Guide now maintained by Oracle, and are part of the style guides for many other languages. Incorporating them shouldn’t be much of a problem, as they’ve entered programming folklore for the most part, anyway.

I’d suggest trying them for your next project, whether you’re writing in a procedural or OO language, writing CSS or Javascript. It does take a bit of time to get used to, but I love the flexibility and clarity I get from a few easily-remembered rules. They make reading the code I write a breeze when I come back to it weeks or months later.

Setting up a work box

January 10, 2014

I was recently awarded a brand-new laptop at work (yay!), which I now have to setup and migrate all my crap to (boo!). Of course, if you work in web development for even a few years, you have to go through this ritual at least once, if not more. I’ve been doing it for 18 years. I like to believe my box set-up kung fu is strong.

I’ve written a similar entry for a friend who doesn’t program, but needed software advice for his recently-purchased Windows laptop a while back. It lists a lot of software I wouldn’t install on a work box, but are great for home use. This is years old now, but I’d recommend many of the same programs today.

Of course, for programmers (even us webmonkeys), box set-up is Personal. Everyone does it differently. People will disown you for doing things a particular way. So, please be gentle in the comments section if you choose to tell me How Utterly Wrong I Truly Am.

Makin’ bacon

When I sign an employment contract, I believe there’s a tacit agreement in place: the employer has a reasonable right to assume that I will accept and use the software and hardware purchased for me to produce web sites or applications in return for money, and that I’ll use them responsibly and adhere to coding guidelines, no matter how much I may disagree with them personally. While I can make suggestions, the employer is paying me to do things their way. I’ve come across a lot of programmers who feel differently, but I just don’t believe this is professional conduct.

In my almost two decades doing webmonkey stuff, I’ve switched from Mac to PC at least half a dozen times. I’ve been given desktops and laptops. I spent a year on Mac System 7. Strangely, I’ve never had to use a Linux or Unix box at work. I’ve had tons of very disagreeable software rammed down my throat (I’m looking at you, Visual SourceSafe).

I’m not suggesting blind obedience, here. You do have the right to champion change and ask for things you’d like. You also have the right to ask about hardware/software during the interview. But, after you’ve signed the contract, you shouldn’t go rogue.

The zen of set-up

After doing dozens of set-ups, both at home and in the office, I’ve pared back my software needs dramatically. I try to do the minimum necessary for doing any type of productive work in a vanilla, generic setting, and only install additional stuff for the needs of each project.

So, the list below is pretty lame. It’s really designed for flexibility.

Write once, run everywhere

Just like the Java folks, I’ve come to embrace a couple of simple philosophies for software I rely on to pay my bills:

  • I prefer software that runs on all three major platforms (win, mac, linux)
  • I prefer free as in beer, as well as free as in freedom, in that order
  • I prefer hardware that can run as many operating systems as possible, either in dual-boot or virtualization
  • I prefer hardware that travels well

There are many outstanding software products that only work on one operating system, and using these can be a major productivity improvement. But I’ve been in situations where the shop I work for suddenly changes direction and forces the whole dev team to switch platforms. And then I’m stuck, learning a new tool, while deadlines don’t change. That’s bullshit. I want to learn a tool once, and have it work everywhere. The only thing I want to re-learn when I hot-swap an OS is the idiosyncrasies of that OS.

I support open-source as a concept, and think the movement has come a long way in the last decade. Generally, open-source has made the software landscape better, and you should consider donating time or money to these amazing individuals. But, in a work environment constrained by budgets, the price tag of software is more important to me than it’s philosophical openness. For instance, Komodo is a great editor, and I’ve had a lot of fun with it. But it’s price tag for the full IDE with source-control support built-in disqualifies me from asking my boss for it. Not when I can get a roughly analogous feature-set from Aptana/Eclipse for free. I want every conversation I have with my boss about budgets to count.

The move towards a mobile-first web means that testing, even if you’re building brochure-ware, has to happen on all three environments, and you need emulator support. The web development community has also embraced Unix/Linux-centric command-line toolsets to automate a lot of workflow and deployment tasks. Having a machine that runs all operating systems in either dual-boot or virtualization is a must-have. You’ll encounter shops that buy separate machines for each developer. Buying a single machine with a lot of horsepower is a better investment in the long-term. If the developer cares for it, it will last longer and cost less than two mediocre machines.

Employers are now much more open to tele-commuting, and many employers expect employees to present at or attend conferences. In addition, work/life balance is a hot topic, and many employers are more flexible about extended periods of working from home or on the road. A laptop makes the most sense in this scenario, even if desktops can deliver more power.

Webmonkeys only, please

A lot of the above won’t make sense in a variety of more traditional software approaches, where dedicated toolsets and more powerful hardware are needed. And that’s fine. I write HTML/CSS/Javascript/XML all day. I’m not compiling the latest EA game. You can get laptops with more than enough power to do webmonkey stuff. Granted, keeping them optimized can be a challenge, but that’s where individual choices matter.

Is he ever going to talk about software?

Ok, ok! Don’t get your IDE in a knot!

But first, my hardware choice (drumroll, please): a Mac laptop. Given the decision matrix I outlined above, a Mactop is the best current choice. I’ve seen devs produce hackintosh’s, but this is just too much damn work. I ask for as much RAM as I think I can get away with. I’m not as worried about the HDD…you can dump Windows and a Linux distro on even a meager hard drive without much effort.

In terms of software, this is the basic list I would have on a thumb drive if I was walking cold into a contract position at Webmonkey Corporation X.

Adobe CS isn’t on that list because there’s no way I can afford any of it. This is something I expect every employer to make available to developers. We have to cut graphics ourselves. Often, during refactoring, we’ll cut the same images over and over again, just a little bit differently each time. The back and forth with a designer will cost the company more than just buying the damn thing for everyone. Remember when I said I want every discussion surrounding software budgets with my boss to count? Adobe CS is why.

I use Aptana because a lot of shops are still running SVN, and Aptana is a solid IDE and SVN browser rolled into one, OS-agnostic, and free as in beer. I haven’t tried Git support in Aptana yet, because I haven’t worked for anyone that required it. If it’s as smooth as Aptana’s SVN support, I expect this to be my editor for awhile.

If I have the choice between Office or LibreOffice, I’ll pick Office. Web development is a multidisciplinary field, and I have to be able to read business docs with proper formatting intact. LibreOffice is the best alternative if you can’t get Office.

I’ve used Fusion in the past, but VirtualBox is what I run now for Windows and Linux images. I always install an image of Linux Mint with the MATE desktop. It’s a little lighter than Ubuntu, and the Mac Terminal has some missing features. Mint gives me the ability to run a Linux distro without a lot of overhead. The free Windows distro’s on Microsoft’s site are ok, but I prefer a licensed copy. You never know when MS’s altruism will go away.

I install all the browsers, generally with no extensions except for Firefox, which I still use for primary development. I know most devs prefer Chrome cuz it’s faster, but I prefer Firefox because it’s a little behind the curve in terms of standards support. If it works there, it should work in Webkit, and then I only have to worry about IE. I used to download Amaya because it had support for more obscure specs, but I haven’t for awhile.

My can’t live without extensions for Firefox are Firebug with Yslow, the Web Developer Toolbar, and User Agent Switcher.

The Web Accessibility Toolbar for IE is another must-have. Not only for accessibility. This is one of the better dev tools for IE, even with the stuff built-in to IE 8+.

And, of course, I install Flash and Acrobat plug-ins.

I only run a few utilities. 7-Zip will open archives that even time forgot. Ditto for video with VLC. CCleaner is the best de-crudder for Windows, and there’s a Mac version as well. While I would prefer never to FTP files in development, it comes up, and Filezilla works.

Portable Apps for everything else! The only Windows-specific app on the list, I have it installed on a thumb drive with a big list of ‘just-in-case’ software, so I’m never caught up short with weird requests. Transferring it to a Windows image is child’s play. It’s also easy to migrate to something like Google Drive. I also download the OpenDisc ISO for Windows as a back-up. While I try to never use these things, I’ve received enough oddball requests to know that I don’t want to be searching for weird freeware to meet a deadline.

On a Mac, I make sub-folders inside Applications to install my stuff. That way, I don’t have an endlessly long list when I use the drop-down, and I can find it quickly when I need to dust off the machine and hand it back.

What? No command-line doohickeys? But…

Yeah, I know. I’m a GUI kid. I don’t go out of my way to create a personalized space in Terminal, and everyone’s production and development environment is different. I’ve done projects that had ASP Classic, .Net, PHP, RoR, Perl, and a dozen other home-baked stacks on the server. Hell, one project had a TCL back-end. Yeah…TCL! I don’t want to walk in and spend hours or days tinkering with Terminal only to be told that there’s a bunch of pre-baked tools to use with it.

In general, I won’t install Putty if I’m working on a Mac, because I’ll use OS X as my primary development environment, and Windows for testing only.

Everything else the boss pays for

The above is really, really lean, intentionally so. With the above, you can sit down and be productive pretty quickly if you’re only updating user interface code. Getting up to speed on specific CMS, database, and other middleware stuff is going to require you to talk to your project lead, and install that as required. I don’t want my basic set-up taking up so much space and resources that I can’t do that, or it gets in the way. Every project has a different tech stack. I want my box lean for that.

2013: A Year in Reading

January 4, 2014

Every year, I post a list of all the books I’ve read the previous year. Although these posts receive little fanfare or repeat traffic, I enjoy doing them for myself. Those interested can also read 2012, 2011, 2010 and 2009.

This year, I’m just listing the books in the order that they were read, as far as that was actually recorded. I’ve also been adding these books to my Goodreads account, which lists out as many books as I can remember reading throughout my life. True bibliophiles will scoff at the meagre 1400 records, but I split my time between books and comics.

One of the great things about Goodreads is the ability to sort books into virtual shelves. This allows me to list books that are of professional interest on my LinkedIn account. You can take a look at my Computers and Business, Design, Fiction, Photography, Poetry, and Science Fiction, Fantasy and Horror shelves.

Without further ado, here’s the books I read in 2013, starting with the first book of 2013 and ending with the last. I’ve noted series or imprint information in brackets after the title (for me, ‘imprint’ means things like Penguin Classics and ‘series’ means things like The Lord of the Rings trilogy).

2013: the books

George Lois. Damn Good Advice.
Yeah. Not so much. While this probably rings true for advertising and graphic design, it’s not the best advice for other professions. About half the book is reasonable, the rest a lot of self-aggrandizement. If you’re in a creative industry, you’ll love it.

Alain Badiou. Philosophy for Militants.
It dragged in places, but is well worth the price of admission. Canadian readers will find a brief interview where Badiou discusses the student protests in Quebec. While I don’t completely agree with his politics, I find he has a lot to say, and is willing to communicate in a way easily understood by non-specialists.

Robert E. Howard. The Incredible Adventures of Dennis Dorgan.
This is marketed as fantasy, but it’s really a series of comedic adventures of a drunken sailor who boxes his way across the Orient. Dorgan may not be bright, but he can hit.

J. F. Rivkin. Witch of Rhostshyl. (Silverglass)
This is where the series began to wander. While the story was there, it dragged. The characters remain compelling and fresh, and if you liked the first two books, you’ll love the continuation.

J. F. Rivkin. Mistress of Ambiguities. (Silverglass)
Not a convincing end to the series. I suspect there were more adventures in store for Nyctasia and Corson, cut short by sales numbers. Reading the whole series will be rewarding for completists, but the first two are gems on their own.

Robert E. Howard. Black Canaan.
A small collection of lesser-known stories. The quality is a bit uneven, but there’s a brief introduction by Gahan Wilson and a few gems.

Gardner F. Fox. Escape Across the Cosmos.
This was, admittedly, a bit absurd, even for low-brow science-fiction, but no less entertaining for that.

Patricia Briggs. Fair Game. (Alpha and Omega)
A decent read, but felt artificially long. A lot of the police procedure could have been shortened in favor of expanding the sub-plots. In general, Briggs pays attention to her supporting cast, and that makes her books worth the price of admission.

Leigh Brackett. Alpha Centauri or Die!
A good book. Brackett ended up in Hollywood, and her novels, full of crisp dialogue and suspense, with no wasted scenes, is why. The book is short, but a page-turner.

Noam Chomsky and David Barsamian (interviewer). Power Systems.
Chomsky has his head in the right place, even though I don’t agree with all of his conclusions. This book isn’t as strident as others he’s published, and like most of his political books, is very accessible. This includes conversations regarding his linguistic work and personal life, which are no less fascinating.

Teruhisa Kitahara and Yukio Shimizu (photographer). Robots Spaceships and Other Tin Toys.
A book from the art publisher Taschen, photographing the collection of a tin toy fanatic. Beautiful pictures of hundreds of vintage toys, including many knock-offs. There is the occasional toy that has the uglier aspects of that time period (racism, etc), but on the whole it’s a wonderful trip down memory lane.

Henry Kuttner. The Well of the Worlds.
Not quite what I was expecting, but not the worst read in the world. A lot of concepts that didn’t seem to be fully fleshed out. While it was a tremendous flight of imagination, it left you with the feeling the author hadn’t quite understood the mechanics of his world. A truly spectacularly kitschy retro cover by Alex Schomburg helps make the book.

Tom DeMarco and Timothy Lister. Peopleware: Productive Projects and Teams.
I can’t actually say I agree with everything advocated here. Of course, it was written during the 80’s, when the software industry landscape was very different. As such, it doesn’t cover issues that arise in inter-disciplinary teams (engineers, graphic designers, and architects of various stripes all working together), and other things that happen in the current industry. They are spot on when it comes to The Furniture Police, bad management practices, artificial deadlines, and other stupid artifacts of corporate culture.

Fritz Leiber. Swords and Deviltry. (Lankhmar)
This is the first of Fafhrd and Gray Mouser books, which eventually ran to 7 titles. I actually read the first two books in my twenties, but set them down. I’m attempting to finish the whole series this time around, but we’ll see how far we get. This, and Vance’s Dying Earth series were heavy influences on Gary Gygax, and hold a special place in the books that have influenced the role-playing game genre.

E. E. “Doc” Smith. Triplanetary. (Lensman)
The original pulp-era space opera that inspired them all. Full of the conceits, jargon, and cultural mores of the time period, this isn’t easy reading now. But Smith’s pacing is fast, and his imagination runs rampant. You may not get through all 7 books, but you can read this one as-is.

Jane Mount. My Ideal Bookshelf.
This started out as an Etsy project, where Mount would, for a fee, paint your “ideal bookshelf” if you sent her pictures of the books you wanted. For the book project, a large group of famous writers, architects, chefs, designers and actors were asked to provide their bookshelves and a brief essay by them follows each painting. The collection features an eclectic mix: Ishmael Reed, Michael Chabon, Malcolm Gladwell, and on and on.

Simon Armitage (editor). Short and Sweet: 101 Very Short Poems.
The title says it all. The titles are arranged in a ‘count-down’ from longest to shortest. While a bit of a mixed bag, the selection was interesting and hit the mark more often than they missed.

Rachel Andrews and Kevin Yank. Everything You Know About CSS Is Wrong.
A book that was slightly ahead of the technology it describes, it’s now a reasonably good primer on effective mobile and experimental desktop layout techniques. As older IE usage goes down, it will become even more relevant, and it’s brevity will make it a good resource.

Robert Musil. Flypaper. (Penguin Mini Modern Classics)
Musil is one of the great modern French masters, but finding short material from him is a challenge. This was very brief, collecting some of his more notable short stories. I’m not sure I like Musil, but I would recommend reading at least some of his work.

John Jakes. Brak the Barbarian.
A fairly pedestrian entry into the world of sword and sorcery. Nothing to write home about.

Wade Rowland. Saving the CBC.
A polemic on public broadcasting. While I can’t say I agree with all of his ideas, he makes many good points, and his suggestions on “saving” the CBC are at least rational and well thought-out. If you’re interested in the immediate future of the CBC, this is the book to read.

Robert E. Howard. Three-Bladed Doom. (El Borak)
A short novella in the “Indiana Jones” style of pulp adventure. I can’t speak to the accuracy of Howard’s view of the Middle East, but his straight-ahead, guns blazing style still grips you.

John Berger. Cataract.
Berger had surgery in both eyes to remove cataracts, and in this small illustrated essay he talks about the differences in perception before and after, and what that’s done to his world-view. A small gem, but maybe worth waiting for it to be collected into a larger volume.

Robert E. Howard. The Lost Valley of Iskander. (El Borak)
This is adventure fiction in the pulp tradition with a dash of Oriental flavor. Many of the depictions of middle-eastern culture are hopelessly wrong, but the adventure moves ahead at a frenzy pace.

Richard Kadrey. Sandman Slim. (Sandman Slim)
This book is such a genre bender that I’ve found it scattered in fiction, horror, and fantasy. No chapter breaks, no lag in action…nothing but action, mayhem, non-stop bad habits, and staccato dialogue so blue Slim’s swear jar is full before you get 10 pages in. Don’t miss this ride.

Richard Kadrey. Kill the Dead. (Sandman Slim)
As brutal as the first, and the stakes go up.

Richard Kadrey. Aloha From Hell. (Sandman Slim)
This is where the series starts to shift sideways. All the loose ends are tied up, and Eric Stark is left to chart something new. I suspect the next few books are going to be different, even though the trademark sarcasm is still there.

David Foster Wallace. The Last Interview and Other Conversations. (The Last Interview)
Not very satisfying, as Wallace was not a great interview subject. He didn’t seem to have much to say, and was very evasive. There isn’t much here to answer any questions you may have regarding his death and late career.

Richard Kadrey. Devil Said Bang. (Sandman Slim)

Neil Gaiman. Make Good Art.
It left me cold. Gaiman’s output has been sporadic and lop-sided over the last decade, and what should have been great was only so-so. The graphic design, while interesting, should have been followed by the complete text legibly typeset. Watch the video, and save your money for a good Gaiman book, like American Gods or Good Omens.

Rodolphe Durand and Jean-Philippe Vergne. The Pirate Organization.
There are really good points here, but the authors danced a line between supporting capitalism and hating it. Their main point, that organizations that operate in areas where law is grey or non-existant get to define the law through their operations more swiftly than the state can respond, is sound. Where the book fell down was the over-use of technical jargon and it’s brevity. Wait for the paperback.

Craig Ward. Popular Lies About Graphic Design.
A very good book on design, by an author that has strong opinions but a very quiet, simple style. He discusses many of the sacred cows of graphic design and presents a balanced view. This is all theory, with little technical discussion, and is all the better for it. Highly recommended.

Jacob Hoye (editor). Boards: The Art and Design of the Skateboard.
Lots of pictures, but not a lot of substance. An overview of historical and current board makers, types of boards, and major artists would have filled out the book in a more meaningful way for the unitiated. While the designs were awesome, the lack of context killed the book.

John Kuprenas and Matthew Frederick. 101 Things I Learned in Engineering School.
This was the first of the series that came close to capturing the same feel as Frederick’s original book regarding architecture. A great book for anyone in engineering, whether it’s physical or digital. While computer engineer’s won’t get as much as building engineers, it’s still full of relevant information regarding project management and problem solving. Highly recommended.

Daido Moriyama. Tales of Tono.
A very striking set of black-and-white images. I’m not sure if he succeeds or not, but the book is small, beautiful, and you’ll find yourself coming back to it over and over again.

Dennis Lee. The Gods.
I had some trouble with the all-over-the-place formatting. It felt like a literary conceit. While I love Lee’s essays on poetry, I felt he went a bit too far into a no-man’s land here.

Robert E. Howard. The Sowers of the Thunder.
This is historical fiction set during the Crusades. Not Howard at his best.

Robert E. Howard. The Gods of Bal-Sagoth.
Some truly good horror stories, along with a few unfinished pieces. The collection isn’t well-rounded as a result. The Baen Howard library has more focussed collections of his horror and fantasy tales.

Gore Vidal and Jon Wiener (interviewer). I Told You So: Gore Vidal Talks Politics.
It seemed like a lot of rambling without any coherence to me, but I’m also the first to admit that I’m not familiar with much of the subject matter (early 20th century American politics). There were good moments, but not quite enough for me.

Nina Katchadourian. Sorted Books.
I really wanted to like this, but I walked in with expectations set by the “Unpacking My Library” series, also by Chronicle. Sadly, this was a very poor read, and didn’t resonate as art to me.

John Buchan. The Thirty-nine Steps. (Wordsworth Classics)
This is largely regarded as the first ‘thriller’, and it’s fast pace and continuous chases make a good page-turner. Modern thrillers and ‘man-on-the-run’ movies and novels have much more action, but this is set in 1914, when things moved much more slowly. There are a few bits where the colloquialisms will get in the way, but don’t let that stop you.

Fritz Leiber. Swords Against Death. (Lankhmar)
The continuing adventures. First contact with Sheelba and Ningauble. Much fun was had by all.

Jonathan Lethem. The Disappointment Artist.
I think his diatribes against his ‘former’ nerd ways are his way of protesting too much. This is a deeply personal book, going through some of his most painful memories. It may not be the best introduction to his work, but if you enjoy the casual, conspiratorial essay mode, this one’s for you.

Robert E. Howard. Black Vulmea’s Vengeance.
Pirates of the Caribbean, over a half-century before the ride or the movies. Howard’s characteristic shoot first and keep shooting attitude reigns supreme, and the stories move quickly. Of note to Conan fans is that one of the stories was originally a Conan tale that was rejected and re-written.

Eric Schneider. Toy Instruments: Design Nostalgia Music.
A book of wonderful toys. It’s almost guaranteed that you’ll recognize or actually have owned at least one toy in this collection, if not more.

Fritz Leiber. Swords in the Mist. (Lankhmar)
This wasn’t very satisfying…the latter half of the book is one large novella that didn’t have much to offer. It felt as if the book was a series of connecting threads to the rest of the series.

Emmanuel Levinas, Philippe Nemo (interviewer) and Richard A. Cohen (translator). Ethics and Infinity.
This was a tough slog, and I have to admit to not understanding a fair portion of it. It’s a very technical interview, not necessarily meant for a layman or one not already familiar with his thought. That being said, the parts I did get were very inspirational and different. He’s worth a look into, but again, not for the faint of heart.

John Scalzi. Old Man’s War. (Old Man’s War)
Respectably written, with lots of action, tech, and some good story hooks; but it wasn’t really anything more than that. Scalzi keeps the book light and the pace fast. It will keep you hooked, but there aren’t any deep ideas or thoughts here.

John Scalzi. The Ghost Brigades. (Old Man’s War)
The second in the Old Man’s War books, this time focusing on a different set of characters. This book has lots of action, but it drags, mostly because this is the set-up for the next book. Removing John Perry from the middle of the series is a jarring note, and it’s hard to understand why any of this matters till the end of the book. The payoff, of course, is that you go into the next book prepared for an epic finish.

John Scalzi. The Last Colony. (Old Man’s War)
An ending that went by too fast. The series does end on a good note, but there’s the feeling that this should have been 2 novels, instead of the one. A bunch of plot threads are left hanging on the floor, and the action doesn’t really ramp up till the end. The whole series is respectable sci-fi, but it doesn’t quite reach any high notes (not for lack of tyring). I’d recommend the series, but I wouldn’t put it at the top of my list.

Gardner F. Fox. Conehead.
A fairly bad book. The plot, native settlers resisting colonial incursion, is popular in sci-fi and has been done much better by other authors. Fox’s explosive output (he supposedly wrote more than 300 novels prior to his death) probably contributes to the blandness of this book…it feels like a first draft.

Jonathan Crary. 24/7.
Clearer than most academic texts tend to be, but not clear enough to be targeted at non-experts. His argument starts at the commidification of sleep and the intrusion of work into every aspect of our lives, but he loses the argument half-way through the book and never really comes back. Crary could have used a strong editor to prune the book of unnecessary references and keep it on track. The book is worth reading, but it suffers.

Jim Butcher. Cold Days. (The Dresden Files)
It just felt wrong. It feels like Butcher is starting the final act of the series, and most of the set-up here is for the final showdown. I’ll read the series to the end, but this one has Dresden off-balance, fighting friend and enemy alike, and it’s very dark.

Terry Eagleton. Across the Pond.
I don’t know what to make of this one, largely because I can’t bring myself to agree with most of it. The humor, a trademark of Eagleton’s later books, is very forced and at times offensive. His use of Henry James and Alexis de Tocqueville as guideposts to modern America is also a little forced. This is for completists only.

Drew Karpyshyn. Mass Effect: Revelation. (Mass Effect)
Only for lovers of the game. Karpyshyn was the lead writer on Mass Effect 1 and 2, and this book is chock-a-block with all the information you’ve probably already read in the extensive worldpedia included with each game. This book is the prequel to the first game, outlining how Sovereign was discovered. Again, only for people who are truly in love with the game.

Will Eisner. Star Jaws.
A fairly horrible paperback of site gags combining Star Wars and Jaws. Released just after their theatrical debuts, it’s a cash grab only. But, it’s weird seeing something from Eisner in the 70’s.

Gardner F. Fox. The Hunter Out of Time.
Pedestrian golden-age sci-fi, with a time traveling twist.

Daniel Cohen. Strange and Amazing Facts About Star Trek.
Before we had the internet or blogs, people were paid to write short books about popular subjects, and we bought them in droves at supermarkets and drug stores across North America. Nothing to write home about, but it was a fun, quick read.

Stephen Emmott. Ten Billion.
Extremely brief, as the typography pads the book out considerably, but every page is worth reading. A book on the consequences of the population explosion, this should be required reading. If you think food and gas is expensive now, you won’t believe what’s in store for us.

David Trahair. Cash Cows, Pigs and Jackpots.
Trahair is a great writer on personal finances, and I love his balanced ‘no silver bullet’ approach. While this is not the greatest news to hear, it’s better advice than most get. Covering mortgages, retirement, and basic personal finance issues, I highly recommend this.

Ben Thompson. Badass.
Quite possibly the most awesome history book you’ll ever read. An incredibly liberal set of mini-bios for some of history’s most notorious generals, warriors and, well, badasses. You’ll laugh your ass off and learn something at the same time.

Robert E. Howard. The Black Stranger and Other American Tales.
A slightly unbalanced selection of horror stories, mostly set in modern times. There are many classics, but a few rarely-reprinted pieces as well. The quality is uneven.

Antoine de St.-Exupéry. Night Flight.
A good read. He was both a civil and military aviator, and his attention to detail and strong sense of atmosphere shine through here.

Alfred Bester. The Demolished Man.
A tight police procedural with a twist ending and a sci-fi setting. Bester wrote only a few novels during his life, and bizarrely, left everything to his bartender. The Demolished Man has those gritty notes, with a retro feel. Highly recommended.

Sean Howe. Marvel Comics: The Untold Story.
Very well written, covering Marvel from the very start to about 2011. Even at 400+ pages, Howe has to breeze through a lot of history, but he covers the high points well, and gives an unflinching look at how much of the creative process in a work-for-hire environment can be bankrupt. If you love comics, you’ll love this book.

David M. Ewalt. Of Dice and Men.
A very breezy introduction to Dungeons and Dragons by an unapologetic fanboy who, unfortunately, injects a little too much of himself into the book. That aside, it’s a fairly balanced history of the company, right up to the first press releases of the game’s fifth edition. A quick read…wait for the paperback.

Robert E. Howard. The Horror Stories of Robert E. Howard.
Ballantine started a new ‘collected works’ of Howard in over-sized volumes, each one covering a specific area of his work. This has many of Howard’s best horror-themed stories that are set close to modern times, along with his (frankly, not that great) poetry. If you’re looking to dive in, the Ballantine re-issues will keep you reading for awhile.

Alan Light. The Holy or the Broken.
This book covers the recent rise to fame of Leonard Cohen’s song Hallelujah, and from a purely journalistic standpoint, it excels. But I’m a fan of Cohen, going back more than 20 of my years on earth, and I was hoping for less journalism, more discussion of the song and the man. Light never seems to stop taking notes long enough to actually give a real opinion, rushing through a lot of early history, and spending the latter half of the book going over performance after performance, after performance. A good introduction, but light fare.

Daniel Goldberg and Linus Larsson. Minecraft.
A very breezy introduction to the phenomenon that is Minecraft, charting both the development of the game, but the rise Mojang, the European game industry, and the life of Markus Persson, Minecraft’s creator. It felt too long, and covered too many things I didn’t have much interest in. I’m sure die-hard fans of the game will love it, but it left me a little cold.

Nancy A. Collins. Magic and Loss. (Golgotham)
I was waiting for this one with bated breath. I love Collins’ horror writing, and this series got off to a great start. This third book sounds like the end of the series, though I can’t find an official announcement regarding the series stopping or continuing. Even though the end of the book felt a little rushed, do yourself a favor and pick up the whole series. If you like Jim Butcher or Patricia Briggs, you’ll love Golgotham.

Robert Bloch. Mysteries of the Worm.
These are stories set in the Cthulhu mythos, and while a few of the later stories stand out, most were written by a very young Bloch. This is probably not the best introduction to his work, but if you’re a Cthulhu fan, you’ll love it all the way through.

Stéphane Hessel. Time for Outrage.
A short political speech that didn’t really do anything for me. I’m not really sure what my expectations were going in, but it just didn’t feel right.

Michael Fairless. The Roadmender.
This short book was The Alchemist of it’s day. A book chronicling a few days in the life of a roadmender in rural England, it’s filled with simple wisdom and fairly strong on Christian mysticism. While the religious aspects of the book make it a tougher swallow today, the author’s main points on living a simple, frugal life of charity and contemplation still ring true. Written under a pseudonym of Margaret Fairless Barber, afflicted with illness and confined to a room for the great bulk of her life.

Hannah Arendt. Hannah Arendt: The Last Interview & Other Conversations. (The Last Interview)
The set of interviews collected here is a little lop-sided, and probably not showing Arendt at her best. While the book’s narrow focus on her German upbringing, response to Nazism and the Holocaust, and the founding of Israel show how her thinking evolved near the end of her life, there is much less general philosophy or politics.

Stephanie Milton. Minecraft Beginner’s Handbook.
A quick read with not much information. Bought mainly for kitsch value. There are better books out there on the game, but this one has a bit of charm to it the others lack.

Subjects

Subject 2009 2010 2011 2012 2013 Total
Fantasy 6 17 9 33 14 79
Science Fiction 9 0 15 25 12 61
Photography 13 29 6 4 1 53
Poetry 14 10 7 6 2 39
Politics 17 2 6 5 5 35
Philosophy 11 9 4 4 2 30
Fiction 4 10 3 0 7 24
Essays 1 6 7 1 4 19
Book Arts 7 2 5 2 2 18
Business 5 3 4 2 3 17
Literary Criticism 8 1 4 1 0 14
Interview 7 2 3 1 2 15
Computers 1 3 4 3 2 13
Religion 4 3 1 0 1 9
Biography 3 2 2 0 0 7
Art 3 0 2 2 1 8
Comics 0 0 4 0 2 6
Design 0 1 1 0 4 6
Horror 0 0 0 0 5 5
Sociology 0 4 1 0 0 5
Cooking 3 1 0 0 0 4
Quotations 1 1 2 0 0 4
Travel 3 0 0 1 0 4
Memoir 3 0 0 1 0 4
Psychology 2 1 0 0 0 3
Architecture 0 0 1 2 0 3
Games 0 0 0 0 3 3
Science 1 0 0 1 1 3
Film 1 1 0 0 0 2
Sports 0 1 1 0 0 2
History 1 0 0 0 1 2
Music 1 0 0 0 1 2
Childrens 1 0 0 0 0 1
Drama 0 1 0 0 0 1
Humor 0 1 0 0 0 1
Mystery 0 0 1 0 0 1
Military 0 0 0 1 0 1
Writing 0 0 0 1 0 1
Unsorted 1 6 0 0 0 7
Totals 117 131 93 96 75 512

Authors

Author 2009 2010 2011 2012 2013 Total
Robert E. Howard 0 0 0 19 9 28
Lord Dunsany 13 0 0 0 0 13
Terry Eagleton 2 5 1 2 1 11
Jim Butcher 4 1 1 4 1 11
Anonymous 2 4 1 0 0 7
Andre Norton 0 1 6 0 0 7
A. E. van Vogt 0 0 6 0 0 6
Gardner F. Fox 0 0 0 3 3 6
Isaac Asimov 0 5 0 0 0 5
Leigh Brackett 0 0 0 4 1 5
Steven Brust 1 4 0 0 0 5
Edgar Rice Burroughs 0 0 0 5 0 5
Clifford D. Simak 0 1 2 2 0 5
Patricia Briggs 2 0 1 1 1 5
John Berger 2 2 0 0 1 5
Robert Adams 1 1 1 1 0 4
Irving Layton 0 0 2 2 0 4
Simon Critchley 0 2 0 2 0 4
Henry Kuttner 0 0 0 3 1 4
Richard Kadrey 0 0 0 0 4 4
J. F. Rivkin 0 0 0 2 2 4

Creating a Checklist

September 17, 2013

In comics, you go to sales and conventions with your ‘want list’, a list of all the back issues that you want to buy. I’ve seen people use all sorts of things from hand-written paper to printed output from apps to desktop apps that had a mobile app that would sync when you got back home. The most extreme I’ve seen is a guy who came with a big thick binder filled with Excel reports…this guy had a big want list.

Also, a lot of people have worked out ‘pull’ lists with stores. This is slang for setting up a store membership and giving them a list of issues that you want to buy every month. They order a copy just for you and ‘pull’ it out of the stock they receive before it goes on sale and leave it behind the counter, along with anything else on your list. You show up on when you can and buy.

Because I’ve created my own custom system for tracking my comics, I decided that writing out my want and pull lists full-hand on paper was getting old, and that I should just create a custom web-page for it. The current advances in HTML 5, particularly offline storage and the application cache make it possible to make a single web page ‘sticky’, leaving it in your list of apps and allowing you to view and work with it, even when your device isn’t connected to the internet.

So that’s what I did. The screenshots below show you how the app looks.

This is what the page looks like when it first loads…a list of comics I’m looking to buy, a tabbed interface to get to the pull screen, and some button functionality to maintain a running tally of what I’ve bought when I’m out in the field, so to speak.

need-screen

This is the pull tab, much more static then the previous screen, mainly for checking in the store if something is on my list. Note that you see the last issue I’ve bought after the title, useful for helping me determine whether I’ve bought the book on the stands or not (in an age of multiple covers and other gimmicks, it’s easy to buy the same book twice).

pull-screen

So, going about this pulled me in a lot of directions at once, but things have finally settled down, and I have a page that relies on the following:

  • HTML 5
  • CSS 3
  • XSLT/PHP and SSI on the server, with a small dash of Apache configuration
  • Javascript

A mix of PHP and SSI is strange, but I’m using PHP exclusively to generate the XSLT reports and for nothing else, so it stayed. The SSI is there strictly to add the reports and a dash of time formatting.

The usage is fairly simple: once downloaded via the application cache and stored via offline storage, the app is fairly static. When I’m at a convention and am hunting for back issues, I consult the first tab. If I actually buy a back issue on the list, I tap the number, changing the colour of the button. This tells me I’ve bought the issue when consulting it later. When I’ve finshed updating my files at home, I connect my device to the net and re-request the page, triggering the cache to refresh the page with the new data.

This seems simple enough, but I chased my tail for months (I did this in bits and pieces when I had time), doing version after version with bugs and weird behavior until I finally got all the pieces in order. The application cache was one of the larger sticking points, as detailed in this article.

I’m going to walk through the HTML and Javascript for this, and leave the CSS out…there isn’t much there worth talking about…it’s fairly standard fare.

The HTML

Here’s the HTML for the main page, with SSI intact:


<!DOCTYPE html>
<html lang="en" manifest="manifest/manifest.manifest">
<head>
	<meta charset="utf-8" />

	<meta name="viewport" content="width=device-width" />
	<meta name="apple-mobile-web-app-capable" content="yes" />
	<meta name="format-detection" content="telephone=no" />

	<link rel="icon" type="image/png" href="xtra/favicon.png" />
	<link rel="apple-touch-icon" type="image/png" href="xtra/iphone_icon.png" />
	<link rel="apple-touch-startup-image" type="image/png" href="xtra/iphone_startup.png" />

	<link rel="stylesheet" media="screen" href="xtra/want.css" />

	<title>Need it, Pull it.</title>
</head>
<body>
	<header>
		<h1>Need it, Pull it.</h1>
		<nav>
			<ul>
				<li class="need">Need it</li>
				<li class="pull">Pull List</li>
			</ul>
		</nav>
	</header>
	<section>
		<div class="bag" id="need">
			<h2>Need it</h2>
			<!--#include virtual="/XMLDatabases/transform.php?type=Comics&report=wantlist_wanted"-->
		</div>
		<div class="bag" id="pull">
			<h2>Pull List</h2>
			<!--#include virtual="/XMLDatabases/transform.php?type=Comics&report=wantlist_buylist"-->
		</div>
	</section>
	<footer>
		© <!--#config timefmt="%Y-%m-%d" -->
		<time pubdate="pubdate" datetime="<!--#echo var="DATE_LOCAL" -->">
			<!--#config timefmt="%Y" --><!--#echo var="DATE_LOCAL" -->
		</time>
		Jeff Wyonch
	</footer>

	<script type="text/javascript" src="xtra/zepto.min.js"></script>
	<script type="text/javascript" src="xtra/want.js"></script>
	<script type="text/javascript">$(document).ready(bootstrap);</script>
</body>
</html>

I have CSS at the top and Javascript at the bottom, for all the performance goodness that entails. I also had to add a meta tag to turn off auto-detection for phone numbers, because my iPod was somehow determining ‘132’ was a phone number. I also have the shiny new HTML 5 header, section, footer, and time elements, so the page is a little more semantic than the usual sea of div‘s.

The XSLT reports are fairly simple, too.

The want list outputs a series of the following:


<h3><span class="title">Akiko. V1.</span><span class="pub">Sirius.</span></h3>
<ul class="clear">
	<li>47</li>
	<li>48</li>
</ul>

And the pull list is roughly the same without the issues a tweak to the title:


<h3>
	<span class="title">X-Men. V4.</span>
	<span class="pub">Marvel.</span>
	<span class="lastBought"># 3.</span>
</h3>

You’ll also notice I used Zepto, an almost feature-complete clone of jQuery, with a seriously reduced footprint in regards to filesize. Zepto was designed for use with modern mobile devices, and drops support for IE entirely, and early versions of Firefox, Webkit, and Opera. I consider this a decent tradeoff, given all I have is an iPod Touch right now. If I really needed this to work on a Windows phone, swapping back for jQuery wouldn’t involve much effort.

Finally, at the bottom, I have a fairly standard jQuery-like onload invocation. Because I’m not doing much more than a few simple effects and localstorage checks, there isn’t really a need to do anything more complex than a simple old-school boot loader at the bottom of the page.

The Javascript

I generally start off building Javascript with either pseudo-code, a checklist of features, or both. I find it helps immensely to have a skeleton of some sort prior to rolling up your sleeves.

While the skeleton changed a dozen times or more for this app, here’s what it looked like at the end:


/*
STEPS
~~~~~~~~

Boot
*- can we run in this browser?
*- create localstorage object to store ids
*- if it already exists, toggle classes on all matched items
*- set up interface

Clicking a tab
*- standard toggle behavior

Clicking an issue
*- compare ids to localstorage
*- if issue hasn't been bought, add to localstorage and toggle to bought
*- if issue has been bought, remove from localstorage and toggle to unbought

Cache update
*- if there's an update,
	*- show message
	*- empty temp and localstorage
	*- force-reload page

*/

Anything finished gets a ‘*’ as I go along.

The Nude Bomb

Ah, how I’ve been waiting to bring up a reference to the first time Maxwell Smart was featured in a film. As a bizarre sidenote, there is a fight in an amusement park that has the Cylons from the original Battlestar Galactica. But…back to the point.

Nowadays, we’re told that if we don’t wrap our Javascript in anonymous functions the World. Will. End. Global variables are even worse…they’ll blow up the sun.

And, well…no. While larger applications need that type of organization, small ones don’t. I feel programming approaches should shape themselves to the contours and size of the task at hand.

In the case of this application, there was so little code it didn’t make sense to go the full route. I can always ramp up to something more complex later, but only as I need it.

So, you’re going to see at least one global variable and a whole bunch of naked (get it? naked?) functions sitting in the global scope here. You’ll also notice that wrapping it all up in an anonymous function bow would be fairly simple if that time ever came. If you can’t look at commando Javascript without blushing, stop reading now.

Tools first

The first thing I’m going to do is add a slew of utilities. Full disclosure: these were added as I needed them, but for the sake of expediency here, I’m going to pretend these were all here from the start.


/* General Utilities */

function isLocalStorage() {
	return ('localStorage' in window) && window['localStorage'] !== null;
}

function isApplicationCache() {
	return !!window.applicationCache;
}

function strip( string, mode ) {
	if ( !string ) return;
	var mode,
		space = /[\s]+/g,    // normalize whitespace
		lead = /^\s+/,       // trim leading whitespace
		trail = /\s+$/,      // trim trailing whitespace
		ends = /^\s+|\s+$/g; // trim leading/trailing whitespace
	switch( mode ) {
		case 'T': string = string.replace( ends, '' );   break;
		case 'L': string = string.replace( lead, '' );   break;
		case 'R': string = string.replace( trail, '' );  break;
		case 'S': string = string.replace( space, ' ' ); break;
		default : string = string.replace( space, ' ' ).replace( ends, '' );
	}
	return string;
}

function echo( string, mode ) {
	if ( !string ) return;
	if ( !mode && typeof console == 'undefined' ) mode = 'A';
	switch( mode ) {
		case 'W': document.write( string ); break;
		case 'A': alert( string );          break;
		default : console.log( string );
	}
}

The first two functions are copied verbatim from Mark Pilgrim’s amazing Dive into HTML 5 site. These are the only two checks I need to make to ensure the browser can run the code, for now. If I port the app to things other than an iPod, I can always add Modernizr later. For efficiency’s sake, this is all I need for now.

The strip and echo functions are things I wrote myself, and while there’s no brain surgery here, I use them over and over in projects. I prefer to have all my regular expressions in variables so I can comment them (this gives my brain a mental kick when I come back to them later). While both of these functions can be whittled down to only the functionality I need, I use them so often I just paste them in to my code.

Boot to the head

Every time I code a bootstrap function, The Frantics play in my head. I’m going to declare my single global variable, and my bootstrap function next.


var temp = '';

function bootstrap() {
	if(capable()) {
		/* hide interface till ready */
		$('section').children().hide();

		/* set up localstorage  */
		setLocal();

		/* assign listeners */
		$('header nav ul li').click(showTab);
		$('#need').delegate('ul li','click',processIssue);

		/* all is ready, show interface */
		$('section #need').show();
	} else {
		return;
	}
}

Again, no brain surgery. The lone global var here is really just a space to hold the only variable I’m actually going to store in localstorage, so I can manipulate it in memory while the app’s running.

The bootstrap function takes care of running the compatibility check right at the start, then sets up the environment and checks the state of the app (have I actually bought any comics). I’m going to walk through these in blocks, starting with the compatibility check first.

Can we even run this thing?

The app is so small that I really only needed to check whether it could be run once.


function capable() {
	/* return boolean if browser can run the app */
	var ready = false, local = isLocalStorage(),
	cache = isApplicationCache();
	if (local && cache) ready = true;
	return ready;
}

All this does is return true or false. The bootstrap function either quits or continues to run. Easy peasy. This streamlines all the remaining code, giving us a filesize savings. Scaling up from here can only go so far…at some point, this would have to check for only the really large pieces of functionality needed, or be refactored.

Setting up localstorage

After making sure all the tabs are hidden until the interface is set up, the next step is determining the state of the application: is the localstorage variable we need present and does it have content? If it does, we need to make sure issues that have been bought are displayed properly in the interface.


function setLocal() {
	if (localStorage['bought'] == undefined) {
		localStorage['bought'] = '';
	} else {
		temp = localStorage['bought'];
		if (localStorage['bought'] != '') {
			paintIssues();	
		}
	}
}

function paintIssues() {
	var issues = localStorage['bought'].split(' '),
		i, loop = issues.length, item;
	for (i = 0; i < loop; i++) {
		item = parseInt(issues[i]);
		$("#need li").eq(item).toggleClass('bought');
	}
}

At this point, to understand what’s going on here, I need to explain what’s being stored in localstorage. A string. That’s it. That’s all I need.

Every time I tap an issue, all I’m doing is storing the DOM position of what was tapped as a space-seperated integer inside a string. The bought variable inside localstorage looks something like 0 5 9 12 22.

I can hear people’s teeth grinding right now…he’s using the DOM POSITION?!! Well…yeah. Remember, the app, once downloaded, doesn’t change until it’s refreshed only after I’ve updated the files back at the server. So, the DOM here is stable until the application cache signals an update, at which point locastorage is wiped anyway.

This is the only loop in the whole application. One of the great things about localstorage variables is that they can only be strings, so you can manipulate them with the built-in string functions in Javascript. As a sidenote, I know I could use the ECMAScript trim method instead of my own utility, but using a custom function helps scale this if I need it to work on other platforms with older versions of Javscript installed.

Making issues tapdance

The next part of bootstrap sets up listeners for the tabs and delegates listeners for all the issue buttons. Again, I’m using the DOM position to create a unique ID for each issue. On tap, the issue button’s display state toggles to either bought or unbought, and the change is stored in localstorage. The temp global var is also updated.


function processIssue() {
	var no = $('#need li').index(this);
	$(this).toggleClass('bought');
	if ( $(this).attr('class') == 'bought') {
		store(no);
	} else {
		remove(no);
	}
}

function store(no) {
	var bool = there(no);
	if ( bool == false ) {
		temp = temp + ' ' + no;
		temp = strip(temp);
		localStorage['bought'] = temp;
	}
}

function remove(no) {
	var bool = there(no);
	if ( bool == true ) {
		temp = temp.replace( no, '' );
		temp = strip(temp);
		if (temp == undefined) temp = '';
		localStorage['bought'] = temp;
	}
}

function there(no) {
	if (temp.indexOf( no ) == -1) {
		return false;
	} else {
		return true;
	}
}

While I could have incorporated the logic of the there method into the two preceding functions, that’s code duplication, which I try to avoid whenever possible. And yes, I could’ve used a ternary operater there (and in several other places), but I find them hard to read.

And…that’s about it

Well, almost. I still have to add the last function to toggle the main pull and need tabs.


function showTab() {
	$('section .bag').hide();
	$('#' + $(this).attr('class')).toggle();
	return false;
}

And…now it’s done. The whole Javascript library (apart from Zepto) clocks in at about 166 lines (including the huge comment at the start) and roughly 3K before minimization.

Adding the cache manifest

The last step to making this all work offline is adding the cache manifest. In order to get this working, I had to add some Apache configuration; first, to get Apache to serve the .manifest filetype with the correct MIME type, and then make it parsable via SSI. Here’s the manifest.manifest file:


CACHE MANIFEST

CACHE:
../xtra/favicon.png
../xtra/iphone_icon.png
../xtra/iphone_startup.png
../xtra/zepto.min.js
../xtra/want.css
../xtra/want.js

<!--#include virtual="/XMLDatabases/transform.php?type=Comics&report=cachebust"-->

The SSI include here adds a few lines to the end of the manifest file:


# Wanted : 347
# Series Wanted : 38 
# Buylist : 41

These are comments meant to do only one thing: make the browser aware that the cache manifest file has changed. Even if every file listed in that manifest has changed, unless the manifest file itself changes, the browser won’t signal an update. Because these numbers will change when I update files at the server, this accomplishes the goal with the minimum of fuss.

App updates

As it turns out, there’s one last bit of Javascript we need to add. Now that the manifest file is in place, and will alert the browser to an update, we need to make sure the user applies the update. All that happens when the cache manifest changes is an internal event…unless you program a response to the event, the browser will not download new files and update the app.

The last bit of code was found on the net in quite a few tutorials, and even though it doesn’t match the programming style of the rest of the Javascript, it’s workable for now.


window.applicationCache.addEventListener('updateready', function(e) {
	if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
		window.applicationCache.swapCache();
		if (confirm('A new version of this page is available. Load it?')) {
			temp = '', localStorage['bought'] = '';
			window.location.reload();
		}
	} else {
		// Manifest didn't change.
	}
}, false);

After I come home from a hard day of conventioning, I update my files with the back-issue goodies I bought, triggering the manifest to change. When I load the page on my iPod while it’s connected, it triggers the updateready event, which brings up a dialog to reload the app. If I click ‘yes’, the localstorage and global variables are reset to empty strings and the page reloads with the newly downloaded appcache files.

Last thoughts

I learned quite a bit about working with offline apps, but know I still have a long way to go. Some of the resources linked to in the article will help with general HTML 5 app stuff.

Unfortunately, the only way to add the code to github would be to add the megabytes of XML and XSLT files that support it underneath, and I don’t think those would be an appropriate use of github.

There are a lot of general tweaks that could be made to this, and I’ll probably revisit it in the future.

I’d love to hear feedback regarding this. Remember to be gentle in the comments area.

Cleaning up my longboxes

July 7, 2013

I’ve been looking at my “pull list”, the list of comics I buy regularly on Wednesdays, and it’s creeped up to over 50 titles, which is breaking the bank, not in a small way. Now, a fair portion of my list is mini-series and books that are published bi-monthly or even quarterly, but it’s still a big list, even for that.

Over the years, I’ve gotten into the habit of buying books until there’s enough of them to read in big batches, a reason why this crept up on me almost invisibly. Over the weekend, I sorted out my longboxes and took a long look at what I’ve been buying over the last 6-8 months, and have come to the inescapable conclusion that Marvel and DC just aren’t doing it for me right now.

I’ve thrown up my hands in disgust, at both Marvel and DC, several times over the decades, publicly vowing that “enough is enough” and I would never return. And, of course, I always come back.

I won’t throw my hands up again, but I am walking away from them for awhile.

DC seems to be a nightmarish swamp of bad decision-making, merging both Wildstorm and most of Vertigo back into the main DC Universe for seemingly no discernible reason. None of the “New 52” revamps are working out. There’s enough Bat-people to create another branch of the US armed forces.

Marvel’s current flagship product, the Avengers line, was going along fine under Bendis. I loved the writing, and although it dragged in spots and occasionally sagged under the weight of yearly tie-ins and too many concurrent titles, I liked it. It brought me back to Marvel. They’ve moved Bendis to the X-titles (where he seems completely lost) last year, and doubled the Avengers titles on the market. When you add retailer incentive covers, bi-weekly publishing schedules, and every major character having at least two titles, the whole Marvel line becomes expensive. Layer onto that the fact that Marvel never cleaned up all the fractures in their universe after Onslaught, and are now blithely rewriting history to make the comics look more like the movies, and you have a fairly large mess on your hands.

What I’m having trouble understanding is why both companies, who right into the 1980’s boasted alternative titles to superheroes, will now produce nothing else. Right into the 1960’s, DC’s had a ton of non-cape titles floating around, and Stan Lee’s written as many Millie the Model scripts as he has for Spiderman.

Both companies have access to creators who want (and are capable) of writing something other than capes (Matt Fraction, Warren Ellis, Brian Michael Bendis, Brian Wood).

I have nothing against superheroes. Some of my favorite comics are superhero comics: Miller’s run on Daredevil, the Byrne/Cockrum/Claremont X-Men’s, Miller’s Dark Knight, Bendis’ run on Avengers and Powers.

But, I’m tired of having to collect 10 titles a month just to understand what’s going on in just one corner of either the DC or Marvel universe. And how many times can you watch Thor and Hulk beat the crap out of each other?

I’ll also say this: I’m moving into my mid-40’s, and part of this griping is age-related, pure and simple. Comics have evolved, along with printing and distribution, and “my” comics died out in the 1980’s. Some of this is nostalgia.

Over the summer, I’m going to be paring down my list and focusing on reading some of the books I’ve accumulated over the last year. It looks like I’ll be reading very little superhero titles.

I can say, IMHO, that these are some of the best titles on the market right now:

The Massive (Dark Horse): Brian Wood’s eco-disaster comic is a direct descendant of his equally brilliant DMZ and Channel Zero before it. The characters are sharp, the artwork is consistently dazzling, and his ability to create a near-future world from current trends is amazing.

Saga (Image): Brian K. Vaughan and Fiona Staples have built a science fantasy to rival Moonshadow and Starstruck. This is probably the most amazing book on the market right now. You Should Go Buy This.

The Manhattan Projects (Image): What if all the cold-war scientists (Einstein, Oppenheimer, Feynman, Fermi, von Braun) wanted to rule the world? And got away with it? Jonathan Hickman takes this premise and amps the suspense with every issue.

East of West (Image): another Hickman book. This time, Death has come to Earth searching for…his wife? And killing everyone who gets in his way.

Hawkeye (Marvel): Matt Fraction’s take on what Hawkeye does when he isn’t in his tights is probably the best book Marvel is publishing right now. From the bumbling Russian track-suit mafia to his budding relationship with Kate Bishop (another super-archer) to the incomparable Pizza Dog, this book is like mixing Tarantino’s Pulp Fiction with Whedon’s Avengers. I’m on this ride till it crashes into Dr. Doom’s castle.

Rachel Rising (Abstract): Terry Moore walked away from Strangers in Paradise and followed it up with Echo, a great sci-fi series. He’s now writing a horror romp with Rachel Rising. Like Echo, I suspect you’ll find references back to SIP in this, but Moore’s consistent monthly schedule, beautiful art, and tight plots make reading his work a joy. You know ahead of time that the book will move consistently forward and keep you on your toes.

I have many other books I’m collecting right now, but those are the ones I wait for every month.