Tuesday, December 25, 2007

Merry All That

This is what I used to listen to on Christmas Eve as a young lad growing up in what was, practically speaking, Canada. It is quite a listen, and you should check it out.

On the one hand, thinking of this thing that I used to listen to on CBC Radio on Christmas Eves long ago and being able to immediately have it is the greatest thing about modern life. On the other hand, it was nice to happen upon these things by accident, too.

Wednesday, December 19, 2007

Amazon SimpleDB

Hey look, I'm blogging again! Amazon Web Services launched (or rather, announced) Amazon SimpleDB Service last Thursday. My part in the launching of particular web services is usually pretty minor--in this case they came to me on Wednesday and we had the following conversation:

Them: Hey, can you make it so that nobody can sign up for Amazon SimpleDB?

Me: Um. Yes. Yes, I can do that.

(I suspect that this is not funny to anyone except me, to whom it is hilarious). SimpleDB is a service about which (for some definition of "a lot," "people," and "excited,") a lot of people are excited, so for the first time we've launched a service that you can't actually sign up for yet (go here to see that, indeed, I made it so you couldn't sign up for it) in order to, as far as I can tell, build up the hype first.

I get all of my practice explaining these things these days by telling Mrs. Transient Gadfly about them, so here is the mtg-approved explanation of why SimpleDB is pretty cool. A relational database is a collection of tables of information that are linked in some way. For instance, say (utterly hypothetically) that you teach some level of college. You might want to have some information about your students. You'd create a table called students, with columns like "First Name," "Last Name," "Birthdate," "Address," and so on. You'd also probably want to create some sort of unique identifier, like "Student Id," since different students could have the same birthday, or be identical twins who are both named "Chad" because their parents are debilitatingly insane. Then you'd create a table called "Grades" that has a column for the name of the assignment, the grade on that assignment, and also a column for Student Id to match the grades to the student. This makes your database a relational one--the tables show information, but there's a way to relate them, since the Student Id in the Students table corresponds to the one in the Grades table. Now you can do a query, which involves going to your database and typing things like this:
select s.first_name, s.last_name, g.letter_grade from students s, grades g where s.student_id = g.student_id and g.assignment_name = 'response paper 1';
The query above a simple example of "SQL" ("Structured Query Language," pronounced, "Sequel,") and it's the standard language used for getting information out of relational databases . Both humans and computer programs that want information from this kind of database use it, it's pretty flexible and you can do a lot of things with it. Also, it's more or less a sentence: you can read it and, while you might not quite speak that language, you can get the gist of what it says.

Trying to run a database like this has a lot of problems, where "has a lot of problems," is code for, "costs a frickin' crapload of money." First of all, you usually have to get somebody to design one for you, for a definition of "somebody" equal to "a person who makes upwards of $150 an hour...."

Calvino: Do you think TG is over-using this, "noun, for a defintion of noun that equals something different than the generally accepted definition of noun" construction?

The Stoat: Yes, for a definition of, "yes," that means, "the fall of Roman Imperialism."

...followed by the cost of the hardware and the cost of maintaining it and keeping it backed up for when your server's hard drive dies, all of which tends to be expensive. So while there's pretty much no way to get around this general headache and cost if you happen to be a large and/or complicated organization, it's a kerfuffle of a problem for small-to-medium businesses that need to keep relational data and run queries, one which has, in the past, led otherwise perfectly sane people to use Microsoft Access.

Much like Amazon S3 lets you offload the responsibility of making sure your data is correctly backed up and always available over to Amazon, Amazon SimpleDB does the same thing with your database. SimpleDB doesn't reach the complexity of a relational database that you'd query via SQL, but in this case that might be a good thing. It doesn't require you to employ a database administrator, and you don't have to worry about your server crashing. As with all Web Services, it's limited in speed by the pipe you have going from your machine to the interwebs, but for small to medium applications that's not really a problem anymore.