this space intentionally left blank

April 17, 2013

Filed under: meta»announce»delays

The Cruelty of One's Early Thirties

Normally, I try to have something written and posted here by Wednesday night each week, because I feel like that's the minimum I can write and still call myself a blogger. This week, unfortunately, between writing my textbook (highly recommended!) and trudging through Bioshock Infinite (not at all recommended!), my right wrist is probably in the worst shape it's been in for about five years now. To recover, I'm giving myself the week off from computers outside of work.

I figure you don't really need to know this, but if I write it up here, I'm more likely to stick to it.

While I'm complaining, my knees hurt and these kids won't stay off my lawn.

April 8, 2013

Filed under: fiction»litcrit

An Iain Banks Primer

Last week, Iain Banks announced that he has terminal cancer, with probably a year remaining to live. He'll hopefully see the publication of one more book, Quarry, before he goes.

Banks has long been one of my favorite authors, to the point that our living room bookshelves have several units devoted entirely to his work. I even had Belle bring me back paperbacks of his literary fiction from a trip to England, since those are still hard to find on this side of the pond. I'm tremendously saddened that he's doing so poorly, and I hope his plans to enjoy his remaining time as much as possible are a success.

If you've never really read any of Banks' work, and you'd like to see what the fuss is about now, where should you start? The answer seems to be fairly personal--especially within the science fiction genre, opinions often differ wildly on which books are better. This is my take, sorted between the two genres (literary and SF) that Banks called home.

Literary

  • The Wasp Factory: His debut novel, this very much introduces two common elements of Banks' fiction: twist endings, and sympathy for characters who are very much unsympathetic. The Wasp Factory centers on a young sociopath living in a Scottish village, who ritually tortures insects as a method of self-therapy. It's better than it sounds, but don't start here.
  • The Business: This is a better place for first-time readers. Banks uses this book to gently satirize capitalism, with its main character being a senior manager for the shadow company that runs most of the world behind the scenes, and would now like to buy its own country for tax purposes. It's a little fluffy, but also tremendously fun.
  • Walking on Glass: Published soon after The Wasp Factory, many of the same tics are present, but this time the story is told from multiple perspectives--one of which is entirely fanciful. I think this is the first of Banks' novels that I read, and it blew me away, but didn't hold up nearly as well on a second reading.
  • The Bridge: Is this science fiction, or literary? The bridge sees Banks learning how to combine the techniques from his previous two books, but leave off the twist ending in favor of more character development and discovery. I also love the chapters written in full-Scottish brogue as a parody of Conan-esque barbarian tales. This'll always be one of my favorites, and is a great place to jump in.
  • Dead Air: Of the literary side, this is the only title I'd actively skip. Banks can be a bit of a polemicist, which doesn't normally bother me, but in this book about a shock jock he lets the character rail on a bit more than is really justified. If you want a book about character redemption, you're better off with Espedair Street or The Crow Road.

Science Fiction

  • Player of Games: Generally considered the best intro to the Culture books, which is probably about right. It has all the elements of a great Culture yarn: huge set pieces, likeable characters who are dissatisfied with their utopian society, and the manipulations of the Mind AIs that actually run the Culture as a whole. It also serves as a fun, slightly-stacked argument in favor of Banks' socialist, post-scarcity future, with the capitalist aliens serving as skeptical audience stand-ins.
  • Use of Weapons: If The Bridge was just on the literary side of things but had a number of science-fictional elements, Use of Weapons is its counterpart. This is definitely SF, but it has elements of cruelty and experimentation that could easily have come from Walking on Glass. It also has a fascinating structure, since the chapters alternate between two different parts of the main character's life as a Culture mercenary, each shedding light and leaving clues for the other, until they merge together for a devastating conclusion. It also begins Banks' habit of showing how the Culture's utopian surface actually hides a number of much less savory choices being made for the greater good.
  • Against a Dark Background: One of my favorites from outside the Culture books. AADB follows a former soldier named Sharrow who is hired to find one of the Lazy Guns--demented superweapons that destroy their targets with sudden, completely random flights of whimsy. Since there's no continuity to worry about, Banks has a great deal of fun with one-off jokes, like the gang of solipsists that wander in and out, each convinced that everyone else is just a hallucination. It's also a merciless book when it comes to its characters, but not without reason.

In addition to these older titles, you may be interested in my reviews of Banks' newer work, including The Hydrogen Sonata, Surface Detail, Matter, and Transition.

March 27, 2013

Filed under: politics»issues»education

Free 'Til It Hurts

These "Academic Freedom Act" laws seem like a very good idea to me, but I wonder if we're taking them far enough. If the Discovery Institute and all manner of right-wing think tanks want to Teach the Controversy, why limit ourselves to evolution and climate change? With that in mind, I've assembled a new school curriculum that (finally!) acknowledges the complicated world beyond "facts" and "truth."

Social Studies: Students will learn about the checks and balances built into our democratic way of life, of course. But we shouldn't leave them ignorant of competing theories, such as David Icke's "lizard oligarchy," in case the queen of England really does turn out to be a giant space reptile bent on world domination. As high school seniors, students will also spend the semester learning about Ayn Rand's theory of radical selfishness, in the hopes that it will keep them from reading Atlas Shrugged in college and becoming insufferably tedious for about a year and a half.

History: Move over, eurocentric history! Take cover, afrocentric and multicultural history! Under new management, history class will approach the hard questions of the past with an open mind toward alternate theories. For example: did the holocaust really happen, or is it just the invention of a shadowy cabal working behind the scenes of our financial and entertainment industries? You know who I'm talking about.

Physical Education: Gym class doesn't change, but students who get sick will now be told that their humours are out of balance, and will be bled by on-site leeches. Coaches also have the option of blaming vaccines when the football team loses.

English: Given the predominance of "literacy" in the early grades, students will spend the second half of their primary education learning how to communicate pre-verbally, mostly by pointing and grunting. For many teenagers, this won't be much of a change. The curriculum will culminate with a trip to a local quarry, where the students will attempt to recreate the Lascaux cave paintings, thus teaching them the valuable life lesson that art is hard so why try anyway?

Math: I tried to think of something funny about math, and then I remembered that we still teach kids about "imaginary" numbers, and to add insult to injury we do so very badly. Math is weird, y'all.

Foreign Languages: One word: Esperanto. Ironically, in Esperanto, this is actually twelve words. It's the language of the future, people. William Shatner did a whole movie in Esperanto once. I've got a good feeling about this one.

You're welcome.

March 20, 2013

Filed under: tech»education

ASTIGBY

Working on my textbook continues to be a great opportunity to write interesting little snippets of interactive JavaScript. Today I'd like to draw your attention to a couple of new modules for doing annotated source walkthroughs that I'm calling Timelapse. They're located in the repo under js/meta/TimeLapse and js/meta/TLPlayer. There's also a demo history file located here.

There are lots of tools for doing diffs between two source files, but I'm not aware of any source control system (save Perforce, which we use at ArenaNet) that do a timeline view of all revisions since a file was first checked in, and none that store the entire revision history in a single, web-friendly format. This is a shame, because my goal for several parts of the textbook is to be able to "replay" the process of writing a script, to show how it develops from a few lines of simple code into larger and more functional units like functions and prototypes. It's possible that someone else has done something like this, but a cursory Google couldn't turn it up, so I made my own.

The syntax for the files that Timelapse uses is designed to be similar to a standard diff file, but to not collide with JavaScript for easy parsing. It's a line-by-line comparison format with two main types of line tags:

  • @x,y@ source line: In this case, the tagged line exists from revision x to revision y. Both x and y are optional--x defaults to the first revision, and leaving out y will mark the line as included through the end of the history.
  • @@c:x; comments @@: This tag marks a multiline comment for a single revision x. Everything between the semicolon and the closing @@ will be loaded but not shown with the rest of the source.

You don't have to write these files by hand, which is good, because they can get pretty nightmarish. Instead, I've written an authoring tool for putting in multiple revisions (or importing them, using the HTML5 file API), commenting them, and exporting them. Using Ace means the editor is friendly and includes source-highlighting, which is great. You also don't have to worry about writing an output parser: the TLPlayer module is not quite complete, but it's done enough to wire it up to a UI and let people flip through the file, with new lines highlighted in the output.

If you'd like to see a demo, I've started using it for the chapter on writing functions. My goal is to put at least one timelapse at the end of each chapter, so that readers can see the subject matter being used to build at least on real-world code script. By doing these as revision histories, I'm hoping to avoid the common textbook "dump a huge source example into the chapter" syndrome. I know when I see that, my eyes glaze over--I don't see any reason that it's any different for my students.

Although I don't have a license on the textbook files yet (they'll probably be MIT-licensed in the near future), you're welcome to use these two modules for your own projects, and feel free to submit patches (the serialization, in particular, could probably use some love with someone with a stronger parsing background). I'd love to see if this is useful for anyone else, and I'm hoping it will help make this textbook project much friendlier to new developers.

March 13, 2013

Filed under: journalism»industry

Pay Me

They always want the writer to work for nothing. And the problem is that there's so goddamn many writers who have no idea that they're supposed to be paid every time they do something, they do it for nothing! ... I get so angry about this, because you're undercut by all the amateurs. It's the amateurs who make it tough for the professionals, because when you act professional, these people are so used to getting it for nothing, and for mooching...

--Harlan Ellison

Last week, Nate Thayer wrote a well-linked post about being asked to write for The Atlantic for free--well, for "exposure," which is free in a funny hat. It's gotten a lot of attention in the journalism community, including a good piece on the economics of web-scale journalism by Atlantic editor Alexis Madrigal.

I read this kind of stuff and think that I have never been happier to find a niche within journalism that makes me marketable. I mean, not that marketable: I had to switch industries when I moved out of DC, after all. But inside the beltway, I didn't have to freelance anymore, and I would have had plenty of options if I decided to leave CQ and head somewhere else. Data journalism was good to me, and I can't imagine having to go back to the scramble of being just a writer again.

But beneath that relief, I feel angry. And the fact that Madrigal can write a well-reasoned piece about why they're asking people to write for free doesn't make me any less angry. The fact that Ta-Nehisi Coates, who I respect greatly, can write about how writing for free launched the best part of his career, doesn't make me feel any less annoyed. I'm getting older but I'm still punk enough that when someone tells me the system is keeping us down, my response isn't to say, "well, I guess that's just how it is." The system needs to change.

Let's be clear: I don't expect writers to make a lot of money. They never have. People don't get into journalism because they expect to be rich. But writing--serious writing, not just randomly blogging on your pet peeves like I do here 90% of the time--is hard work. The long-form pieces that I've done have been drawn-out, time-consuming affairs: research, interviews, collecting notes, writing, rewriting, editing, trimming, and rewriting again. People think that writing is easy, but it's not, and it should be a paid job. (Even when it's not paid, it's not easy: I've been editing this post for three days now.)

As Ellison says, when publications can get the work for free, it makes it really hard to be paid for your writing. I'm not sure I'd phrase it with the same antipathy for "amateurs" (let's be clear: Ellison is a terrifying human being that I happen to agree with in this particular case), but it's certainly true that the glut of people willing to write for free causes a serious problem for those of us who write (or have written) for a living. They're scabs, in the union sense: they take work that should be paid, and drive down the cost of labor (see also: unpaid musicians).

And journalism is an industry increasingly dependent on free writing labor (or, even worse, perpetual unpaid internships instead of paid staff). As Cord Jefferson (in, of all places, Gawker) notes,

All in all, the creative landscape is starting to look more toxic than it's been in our lifetimes: Artists with million-dollar checks in their pockets are telling other artists that they shouldn't expect to get paid; publications are telling writers that they shouldn't expect to get paid, either; and meanwhile everyone wonders why we can't get more diversity in the creative ranks. One obvious way to reverse media's glut of wealthy white people would be to stop making it so few others but wealthy white people can afford to get into media. But in the age of dramatic newsroom layoffs and folding publications, nobody wants to hear that.
When your publishing model depends on people writing for free, there are a lot of people who aren't going to get published. I couldn't afford internships during college, meaning that I had a hard time breaking in--but I was still relatively lucky. I worked in office jobs with flexible hours and understanding bosses. If I wanted to take an early lunch break in order to do a phone interview, I could. I had evenings free to work on writing and research. I could take jobs that paid 10¢ a word, because I only had a day job. A lot of people don't have that chance, including a disproportionate number of minorities.

It adds insult to injury when you look at some of the people who are published precisely because they could afford internships and writing for free. Sure, it's wrong to base an argument on a few highly-visible outliers. But it's hard not to be a little furious to see the NYT sending good money to Tom Friedman (the obvious travesty), or Roger Cohen, or David Brooks when the industry claims it can't offer new writers recompense. It burns to see The Atlantic insisting that paying people isn't sustainable when they gave Megan McArdle (a hack's hack if there ever was one) a career for years, not to mention running propaganda for the Church of Scientology. If you're going to claim that you're trying as hard as you can to uphold a long-standing journalistic legacy in tough economic times, you'd better make sure your hands are clean before you hold them out in supplication.

I am skeptical, personally, of claims that the industry as a whole can't afford to pay writers. I have heard newsroom financials and profit margins, both for my own employer and for others. The news is no longer a business that prints money, but it remains profitable, as far as I can tell--if not as profitable as management would often like. Perhaps that's not true of The Atlantic: I don't know the details of their balance sheet, although this 2010 NYT article says they made "a tidy profit of $1.8 million this year" and this 2012 article credits them with three years of profitability. That's an impressive bankroll for someone who claims they don't have the budget to pay writers for feature work.

That said, let's accept that I am not an industry expert. It's entirely possible that I'm wrong, and these are desparate times for publications. I can't solve this problem for them. But I can choose a place to stand on my end. I don't work for free, unless it's explicitly for myself under terms that I completely control (i.e., this blog and the others that I fail to maintain as diligently), the same way that I don't take gigs from paying musicians just because I like playing in front of an audience.

Coates may defend working for free, because it got him a guest spot at the publication where he now works. But to me, the most important part of the story is that he got that spot on the strength of his blogging, which drew the attention of other writers and editors. You want exposure? There's nothing wrong with making it for yourself. Please start a blog, and hustle for it like crazy. But don't let other people tell you that it's the same as a paycheck--especially when they're not working for "exposure." They're on salary.

Is there a chance that, as with Coates and so many others, that exposure could lead to better gigs? Sure, the same way that a musician might get discovered while playing folk covers at a Potbelly sandwich shop. But it's a lottery, and pointing to successful writers who came up that way ignores the order of magnitude more that wrote for exposure and promptly sank into obscurity. You can't pay your rent with publicity, and you never could. We're professionals, and we should demand to be treated that way.

March 6, 2013

Filed under: tech»education

JavaScript for the Web Savvy: Now Browseable

I haven't had a chance to do more than plan a few topics to write about here, since I've been working hard on my textbook. You can now browse the built pages on GitHub without needing to check out the repo. This is a pretty handy way to publish a website. It's not particularly attractive yet, but there are two-and-a-half chapters up so far, and more on the way. I guess those long bus commutes are good for something, right?

In addition to the text, browsing the repo's /js directory will expose a few interesting AMD modules now that I've started building the interactive parts of the book as well. Given my plans for various visualizations and live quizzes, I suspect the script package may be as interesting as the book for a lot of people by the time I'm done. Here's most of what I've got so far:

  • dom/Delay: This module implements lazy-loading for interactives, so that they don't start running until the specified element is scrolled into view. There's a partner package to this, dom/Visible, that will enable events for when an element enters or leaves visibility, but I haven't started that one yet.
  • dom/Stage: It's no secret that I hate the Canvas API, so this module implements a poor man's ActionScript display tree. You can create sprites and textboxes, and attach them to each other in a heirarchy. Stage also takes care of handling rotation, translation, and scaling for you, so you only have to express drawing instructions in terms of local coordinates.
  • meta/Evil: An eval() that's relatively safe. It uses a function constructor to run the code in a safe scope, and adds a "return" statement to the last line. If it fails to compile or run correctly, it returns an object with an "error" property. I use this in a lot of the examples so far, and it should be fine as long as the user doesn't type "while (true);" into the box.
As always, please feel free to file issues and pull requests against the textbook--bearing in mind that it's a work in progress. The overall structure, which you can see on the table of contents, parallels my class progression pretty closely, but I'm amenable to shifting sections around if there's a good argument for it. I'm also thinking about ways to handle the interactive experience--for example, should inline exercises be hidden behind a link so that the text flows better? I'm not aware of anyone who's writing the same kind of "live" teaching document that I am, so this is uncharted territory for us all.

February 28, 2013

Filed under: tech»education

JavaScript for the Web Savvy

On Tuesday, I published a repo to GitHub containing a JavaScript textbook that I've started writing under the working title JavaScript for the Web Savvy. As soon as I have some more work committed, I'll create a GitHub Pages version for easy viewing, but right now you'll need to pull the repo to read the built pages (or build them for yourself). I wanted to go ahead and get the drafts out as I work on them, in order to incorporate any feedback students and other readers might want to offer.

In order to build the book, you'll also need NodeJS with Grunt, grunt-contrib-less, and grunt-contrib-watch installed. In addition to using LESS and RequireJS, I've written the World's Worst Template system to reduce boilerplate. The repo contains fully-built versions of the site, so you don't need to build it to read, but it would be helpful for pull requests and testing.

Why write another JavaScript textbook? Ever since I started teaching a year ago, I've been looking at the most commonly-recommended books for my students to use. This isn't easy: technical books are hard to evaluate, since they may be hard to find and they're incredibly expensive. Those I have tried tend to get ruled out for several reasons:

  • They're out of date. The original textbook for the course had students using document.write(), adding scripts in the head, and (worst of all) updating document.body.bgcolor to change a background. I couldn't get away from it fast enough. Modern JavaScript has evolved quickly, and students need a book that has kept up with it.
  • They're aimed at experienced developers. My current textbook choice is David Flanagan's The Definitive Guide. It's a great book, and I chose it because that way students can get a valuable reference using their financial aid. But it's not a good book for beginners. Hopefully, by the end of the class, students aren't beginners, and it makes more sense to them, but that doesn't help them when they're struggling.
  • They only teach JavaScript the language, or a specific JavaScript library, not both. Eloquent JavaScript is a perennial favorite among the web developer comunity, but it's primarily focused on functional programming in JavaScript, not web development. It's hard to keep students' attention without the web side of things--but likewise, I don't want to create a bunch of jQuery developers who don't know the difference between an object and an array. I need a book that covers pragmatic, practical JavaScript.

My goal with JavaScript for the Web Savvy is to write a smart, accessible textbook for people who know a little HTML/CSS, but want to start adding JavaScript to the mix--including the common case of people who know just enough to add a jQuery plugin to the page, but not enough to troubleshoot when something goes wrong. It will teach coding using the actual tools used by real web developers, like the browser console. I also want to experiment with visualizations and interactive elements for common trouble spots where students struggle, like loops and functions. Finally, I want it to be free and freely-available, so students without a lot of money aren't having to pony up for expensive technical books they may or may not use after the class is over.

As I'm working on this project, I'll commit to the repo and update GitHub. If anyone wants to file pull requests for things that are technically wrong, confusing, or need more explanation, please feel free. Contributors will get their names in a credits section, although I will have to ask that copyright be assigned to me as a precaution, in case I ever wanted this to see print. If nothing else, I hope people find it to be useful as a resource. Teaching has become one of the most rewarding parts of our move to Seattle, and I don't see any reason that should be limited to just my classroom.

February 14, 2013

Filed under: music»artists»thao

We the Common

On Friday, Thao and the Get Down Stay Down played a show at the Sonic Boom near our apartment in Seattle. The shop was completely packed, which was a pleasant surprise. Seeing a Thao Nguyen concert, even in abbreviated record-shop form, is always a treat: live, she performs with a kind of abandon that privileges energy over accuracy, and you really get the full impact of her voice, which can veer from a mutter to a howl in the space of a beat.

The best parts of her new album, We the Common, are the songs that let that voice greedily cover its full range. The titular opening number is a stompy rallying cry that builds from a choppy banjo riff until it soars into a wordless chorus. "The Day Long" showcases the quieter, spookier side of the album, but is no less effective: it has a kind of marching melancholy that's weirdly danceable. In between, there's the jaunty swing of "The Feeling Kind," which wouldn't be out of place on the band's first album.

The production remains top-notch: they seem to have picked up a few tricks from Thao's collaboration with Mirah (especially the Tune-Yards'-produced "Eleven"), but applied it to her particular brand of indie rock. "Every Body" mixes a spiky ukelele with synth bass, and while it may just be that I've been listening to a lot of Stop Making Sense lately, I hear a touch of the Talking Heads in the punchy, over-distorted "City," probably in the call-and-response that closes it out. It's becoming one of my favorite songs on the CD, along with the boozy wall of sound that is "Age of Ice."

Fittingly, the most skippable tracks involve times when Nguyen's voice is either kept to a single mood (the dirge-like "Clouds for Brains") or, more bizarrely, paired with Joanna Newsom on "Kindness Be Conceived." Newsom's folky, child-like voice is an acquired taste I've never found appealing, and it tips an otherwise inoffensive song over into tweeness.

We the Common isn't as dark as Know Better, Learn Faster, but it's still not what I'd call cheerful. It's probably not as political as the title sounds, either, although with her elliptical lyrics that's hard to know for sure. But it remains tightly-crafted songwriting wrapped around a unique, powerful voice. I think it's a must-listen, but don't take my word for it: check out their short performance on KEXP and see what you think.

February 8, 2013

Filed under: tech»web

LESS Is More

Last night I gave a presentation for Seattle Central's Byte Club (and other interested students) on using LESS to write better, easier-to-maintain stylesheets. The lecture was recorded in a Google Hangout, which means that you can watch it yourself, if you're interested in LESS or if you've ever wondered what it's like to be trapped in a classroom with me for an hour:

The audio is a little wonky, it's a little hard to see sometimes, and I don't know why the one guy in the classroom with me insisted on keeping his webcam on the entire time (if I'd thought about it, I would have had him turn the camera on me, instead). But all in all, I think it turned out pretty well.

February 6, 2013

Filed under: tech»web

Unsavory

Every year at the Super Bowl, for many years now, it's traditional for GoDaddy to remind everyone that they're a horrible company run by a creepy, elephant-hunting misogynist. This year was no different. The good news is that I was working on the Soul Society website on Sunday, so I didn't actually see any of their ads. The bad news is that Soul Society is hosted on GoDaddy (cue ironic record scratch).

The thing about GoDaddy is that they are fractally gross: everything about them gets more distasteful the more you dig into it. There is no part of their operation that does not make you want to take a shower after interacting with them--neither the advertising, nor the sales experience, nor the admin panels, and certainly not the actual hosting.

It should be enough that the company was run, for years, by a horrible, horrible person who kills elephants for sport, supports torturing Guantanamo Bay detainees, and is a relentless self-promoter. You should look no further than its incredibly sexist advertising, which manages to be both repulsive and badly produced. The fact that they originally came out in favor of SOPA just rounds out the list of offensive behavior.

But if, despite all those reasons, you go to sign up for an account (as many people, including many of my students, end up doing), chances are that you'll end up overpaying due to an intentionally-confusing sales process. The upsell actually doesn't stop at the first purchase. Every time I interact with the site, I'm forced to wade through a morass of confusing ads and sale links masquerading as admin panels. Everything on GoDaddy leads to a shopping cart.

GoDaddy also parcels up its crappy service into smaller pieces, so they can force you to pay more for stuff that you should get for free. As an example, I have an urbanartistry.org e-mail address for when we need a webmaster link on the site. For a while, it was a separate mailbox, which meant that I never checked it. Then I missed a bunch of e-mails from other UA directors, and decided to redirect the e-mail address to my personal account. On most mail providers, this is a free service. On GoDaddy, you can set up a forward, but an actual alias costs an additional fee (for all the disk space it... doesn't use?). Which means, technically, that my mail is piling up on their servers, and at some point they'll probably figure out some new reason to screw it up.

And let's not pretend the hosting you get after all this hassle is any good. The server is a slow, underpowered shared account somewhere, which means you don't get your own database (have fun sharing a remote MySQL instance with a bunch of other people, suckers!), and you can't run any decent versioning or deployment software. The Apache instance is badly configured (rewrite rules are overridden by their obnoxious 404, among other things). Bandwidth is limited--I have never seen slower transfers than on GoDaddy, and my SFTP connection often drops when updating the site. It's a lot of fun debugging a WordPress theme (already not the speediest of pages) when your updates get stuck in a background window.

I don't write a lot of posts like this, because I've got better things to do with my time these days than complain about poor service somewhere. There's a lot of repulsive companies out there, and while I believe in shame-and-blame actions, there's only so many hours in the day. I'm trying to have a positive outlook. But it is rare that you find something that's so awful you can't think of a single redeeming quality, and GoDaddy is that company. If you're in the market for any kind of web service, and you haven't already been convinced to go elsewhere, let me add my voice to the chorus. Lifehacker's post on moving away from the company is also a great reference for people who are already customers. I'm probably stuck with them, because Urban Artistry has more important things to worry about than their hosting, but you don't have to be.

Future - Present - Past