5,000 Hits

Back in 2006, when I first started this blog, I’d never expected to reach 5,000 hits. Like many of the other websites I’ve started or attempted to start, I’d expected to lose interest, or to be disheartened by the lack of traffic and give up. That didn’t happen, however, and I now find myself at something of a sentimental little milestone.

Wow. 5,000 hits. That’s ten hits a day. For some websites, that would be ridiculously small. But, as usual, I’m going to take my achievements where I can get them.

To mark the occasion, I present to you a small gift: 128 ampersands (sorry, that was the best I could come up with. Sleep deprivation always dampens my ability to choose gifts)




Review: “Sunshine”

I enjoy being cynical. Anybody who’s read even a handful of my posts will know that. But, like a character in a bad movie, I have a soft spot for certain things.

One of those is great science fiction. I was impressed by the writings of Arthur C. Clarke, Charles Stross, and Isaac Asimov. I was intrigued by Stanley Kubrick’s 2001: A Space Odyssey. And I was greatly moved by Danny Boyle’s Sunshine.

Sunshine is the story of a group of astronauts sent to deliver a bomb to “re-start” the dying sun. This plot sounds remarkably standard, and in a way it is, but then again, so is “Man wakes up in a post-civilized world, surrounded by zombies and struggling survivors,” and Danny Boyle managed to make that one come alive in 28 Days Later.

This may sound like disjointed gushing, but I honestly believe that Sunshine has to be one of the best science fiction films of the last ten or twenty years. The characters are very compelling, and unlike in most movies (science fiction or otherwise) of today, they actually feel like human beings. You come to feel for them, to understand them. Very rarely does one see that in movies these days.

The special effects are — and I feel like something of a fool for saying this — beautiful. Never before have I seen modern CGI used to such tremendous effect. The film manages to portray the sun’s incomprehensible brightness, and something of its great beauty as well. I never thought I’d say this, but for once, a movie left me with a profound appreciation for something.

The effects are impressive primarily because they mesh so well with the film’s overall artistic style. This style is incredibly rich and deep, and very compelling. I’m not sure how, but somehow, Sunshine manages to blend sound and light, letting our ears take over when the light gets too bright for our eyes to even comprehend. The movie makes light seem very substantial, very real, and dangerously beautiful.

This blurring between sound and light serves to accentuate the soundtrack, which is up to the extraordinarily high standards Boyle set in 28 Days Later. Frank Murphy and Underworld score the film with what has to be one of the most haunting soundtracks I’ve ever heard. Even the sound of a distress beacon is heavy with emotional impact, a lonely, heartbreaking sound that fits so well with the rest of the movie.

So, I’m several paragraphs into my review and already I’ve sung Sunshine‘s praises as though it were the god of my new religion. Make no mistake, the film is not a golden gift from the gods, but it gets about as close as any mainstream movie. Nonetheless, there were elements that bothered me. The movie developed a withering, aimless feel in its later scenes, and did not recover until somewhere near the end. There’s a rather oddly recurring villain who adds a confusing fundamentalist religious element to these scenes as well, and whom they might have done without. And, it fell victim to that omnipresent scourge, weak science.

In this case, however, I’m going to do something I’ve never done before, and will hopefully never do again: I’m going to forgive Boyle for his bad science. It’s a very rare thing when the characters are moving enough, the story is good enough, and the visuals are pretty enough to make me gloss over scientific omissions and mistakes, but that’s what happened here. Hell, I was even willing to ignore the fact that the film had sounds in the vacuum of space (which regular readers will know annoys me to no end). That’s how good the rest of the film is. It’s definitely a must-see for nerds and science-fiction fans. Normal people would probably enjoy it, too.

NOTE: Yes, I am fully aware that Sunshine came out in 2007. I’d intended to see it on the big screen (and I imagine it was even more incredible in the theater), but since there was less publicity than I’d been expecting, I somehow missed it when it was in theaters. Damn.

Unexpected Consequences

One of the things that’s always fascinated me the most about simulated evolution is the way in which simulated organisms have a tendency to exploit any loophole or weakness in your code for an evolutionary advantage. Although I’ve designed and attempted to design a handful of evolutionary simulations, I’d never until today seen an example of this Darwinian cleverness.

A few days ago, I threw together a simple little evolution simulator in NetLogo. Each of the agents in the simulation had three genes: xcor (position along the x-axis), ycor (position along the y-axis), breednum (the number of daughter agents it spawns when it reproduces), and killpropensity (how likely the agent is to kill a random nearby agent). The simulation produced some interesting — although not terribly fascinating — behavior: those agents that produced the most offspring had a tendency to dominate. There was an interesting dynamic between the “killer” agents and the “peaceful” agents. The killers tended to form low-density groups (since if any of them were too close together, they’d usually kill each other), while the “pacifists” formed dense blooms. For a while, the killers would hold back the pacifists, but eventually, the pacifists would encroach and squeeze out the killers altogether. A typical run looked like this:

The agents inherit the color of their parents, so the coloration isn’t exactly by “species,” but it’s pretty close. As you can see, the green agents are fast-breeding pacifists, rapidly encroaching on the slower-breeding killers toward the center.

Then — and this is where the unexpected behavior and exploitation of loopholes I was talking about comes in — I introduced a new variable: mutationrate. It controls, obviously enough, how rapidly the agents mutate. Very quickly, every run started to look like this:

As you can see, this blue species has very rapidly come to dominate. You can’t see it, but this species has a rather high mutation rate. It took me a while to figure out why the fast-mutators were at such an enormous advantage. Then, I remembered that, in this simulation, the agents were competing for space, and in such a competition, the fittest organisms would be the ones that can maximize the space filled by their offspring. Since x-position and y-position were treated as genes, they were being mutated right along with the other variables, and since a rapidly-mutating position allowed the agents to jump farther from their parents and fill space more rapidly, fast mutation was an enormous advantage. It was such an enormous advantage that, even though the extremely large mutations the fast-mutators experienced prevented the evolution of any other behavior (because those genes tended to get so randomized that they effectively didn’t get passed on), they were still far more successful than any of the other species.

After I corrected for this ludicrous advantage (by setting it so that mutation rate couldn’t work on the position genes), this is what I got:

For a moment, I thought I’d solved the problem, until I inspected some of the agents and discovered that they had stopped mutating altogether. The sneaky intelligence of the genetic algorithm strikes again! I suppose that mutating would become something of a maladaptive behavior once the organism had optimized all of its other behaviors, since, after optimization was reached, any organism that mutated could only be at a disadvantage.

I realized that the only fix for this would be to force the mutation rate to stay above 2 (it’s a peculiarity of the random-number-generation code I cobbled together for this simulation that, at a mutation rate less than 2, no mutations occur). I thought that all I’d get would be the simulation I started with, but I was pleasantly surprised to discover that there was actually quite a diversity of mutation rates, and that none of these rates was at a particularly huge advantage over any of the others. This is what a run of the fixed simulator produced:

Those numbers you see hovering over every agent are the mutation rate. It appears that there’s not really an advantage to having a mutation rate above the usual 2, but it does seem that there’s not a disadvantage, either. So I can finally call this simulation fixed.

This experience reminded me that there’s a reason genetic algorithms are so popular in AI research, and that brings us to the moral of this little story: Darwinian evolution is a lot smarter than us. When writing evolutionary simulations, if there’s a loophole or a workaround or an exploit to be found in your code, then evolution will find it. Plan accordingly.

NOTE: Someone requested an image with the organisms color-coded by “kill propensity.” Since you asked nicely, and since I agree that that would be a good image to have up here, here you go. The organisms that are the darkest have the lowest probability of killing their neighbors, and the ones that are closer to white are very likely to kill:

As you can see, the situation is as I described in the body of the post: the killers have too great a tendency to limit their own growth, and are easily out-competed by their more peaceful counterparts.

Writings Page — Up and Running!

As promised, I’m slowly beginning to merge this site with my two other blogs. Pursuant to that, I’m now posting some of my short stories on the newly-minted Writings page. I plan to update it semi-regularly — that is, on those rare occasions when I can actually get around to writing semi-regularly — so check it periodically. When I’ve finished my revisions on For Ardella (the novella I wrote for NaNoWriMo 2007), I’ll probably post that, too.

A warning: if there isn’t now, there will probably at some point in the future be stuff posted to the Writings page that is not suitable for very young readers (especially if I actually get around to posting For Ardella). There won’t be anything terribly pornographic or overwhelmingly vile and horrible, but I certainly wouldn’t recommend all of my stories for people younger than fifteen or so. But, if you think that you’re mature enough to handle mature themes like sex and death and all that good stuff, then go for it. You have been warned.

SimHeart Update

The folks at the NetLogo website have been gracious enough to include SimHeart in their “community models” page, and the result is that there is now a place where you can run the program in your web browser (assuming you have a recent enough version of Java installed). Now, you don’t have to download or install anything in order to run it.

You can find the SimHeart applet here.

Once again, many, many thanks to the creators of NetLogo.

SimHeart — Now Available for Download

All right, as promised, I’ve finally figured out a way that people can download SimHeart to play with it themselves. Many thanks to the folks at NetLogo for automating so much of the process, and thanks to MediaFire.com for the free file hosting.

The file is kind of large because, in order for it to work, I had to put a bunch of Java modules into the folder with it, but it shouldn’t take too long to download, even over a slow-ish Internet connection. When you’ve downloaded it, you’ll need to extract the file to your desktop. I recommend an unzipping program like WinZip or WinAce. The program should (major, major emphasis on should) work on Macs and PCs, but I make no guarantees.

To run the simulation, go into the folder into which you’ve extracted SimHeart, and double click on the HTML file there. It should open up in a new window, and you should see the simulation screen. If you don’t, either you don’t have an up-to-date version of Java, or something went wrong in the download process, or I made a mistake zipping the files. If you checked the previous two things, please leave a comment and describe the problem, and I’ll try to help, although I make no claims to be very good at this kind of thing.

Also, I must provide the obligatory legal disclaimer: I take no responsibility if this file somehow damages your system. To my knowledge, there is absolutely nothing in the file that should do so, but you never know, something might have gotten corrupted or damaged along the way. Also, this software is for entertainment purposes only, and should not be taken as any form of medical advice. I’m not sure why anybody would, but you never know.

Download SimHeart 2.0 here.

If you already have the latest version of NetLogo installed on your computer, you can download the muchhere. If you’re interested in this kind of thing, you should go ahead and download NetLogo (you can do that here). Not only will it allow you to download a much smaller file, but NetLogo comes with a whole cornucopia of fascinating little simulations, and there are more you can download from the Internet. smaller .nlogo file

Okay, apparently, that site decided to get rid of the file, so if you want to have a look at SimHeart, you can find it here, on the NetLogo community models page.

If you have trouble with either of these files, please let me know by commenting on this post. If you don’t want to do that for some reason, send an e-mail to asymptote [døt] inverse [át] gmail [døt] com (Sorry about all the weird characters in there, but that account gets enough spam as it is, without ever having broadcast the address on the Internet, so I figured I’d better obfuscate as much as possible).

I’ll try to update the files as I revise SimHeart, but I seem to be at a point where there’s not much more I can do with it, at least not without rewriting most of the code. I’ll be sure to post updates as they come.

Advertising Schizophrenia

Another odd title, I know, but it suits my subject.

You see, over the past year or so, I’ve noticed a very worrying trend in advertising. It isn’t as insidious as the ultrasonic “sound spotlights” (which can beam adverts at you that only you can hear (!)), or as dangerous as all the political advertising that’s going to be plaguing us in a few months, but it is still worrying: all the advertisers have gone insane.

I first began to notice this in car commercials. Then, it was restaurant ads. Now, it’s spread through most of the advertising community. It seems that the advertisers have gotten so good at manipulating us that they think they no longer need to design ads that actually make sense. Perhaps it’s some sort of attempt to bypass our reality filters and inject the “Buy our crap” message directly into our cerebral corticies, but either way, it’s damned annoying.

An example: the other day, I was sitting down with my parents to watch some television, when an advertisement for Kentucky Fried Chicken came on. It showed a bunch of jovial, racially-diverse young people sitting down and biting into Photoshop-enhanced chicken wings (that would probably rate as beauty queens, as far as fried poultry goes, and that, incidentally, look nothing like the real thing; but I guess I should be used to that by now), then, they acted surprised (incidentally, where do they get these commercial actors these days? It must be the suburbs, because only a white suburbanite is so good at dripping with insincerity), and said something like “Wow, I wasn’t expecting that!” Apparently, it was an advert for KFC’s new “Sauceless Hot Wing.” I wasn’t sure I’d heard that right, but I’ve seen the ad a few times since then, and that was, indeed, what I was seeing. What the hell!? Is this what the advertisers expect us to see as “innovation”? “Hey, look, we’ve got a hot wing without any sauce! Buy our crap!” And before someone counters, “Well, it’ll be nice not to get all that sauce on your hands,” allow me to provide a blistering rebuttal: No it won’t. The messiness of hot wings is part of their charm! It’s part of the experience! And people who really like hot wings don’t mind the sauce, anyway.

But this rant isn’t just about fat-fried poultry. Car ads, too, are getting worse and worse. None of them make any sense, or if they do, their messages are painfully obvious. So, apparently they think we’ve become so simpleminded that all it’ll take for us to buy a new car is a bunch of loud music, pretty people, and nice graphics. Well, actually, now that I think about it…that probably is all it’ll take to get most people to buy a car. Sorry, I forgot I was dealing with Americans here.

Well, since I’m already railing against advertising, I thought I might as well rail against something more serious: pre-movie advertising. A week or two ago, I went to see Aliens vs. Predator: Requiem (the disastrous result of which can be found here). Before the movie, there was the standard parade of random advertising. This parade has been getting longer and longer, to the point where it has approximately the same length as an actual parade, and is just about as boring. Then, an ad that was recognizably one of the new (schizophrenic) ads came on. It was loud, it was fast, and it was terrifying. The noise and the flashing lights drowned out my thoughts, and I got the extraordinarily unsettling feeling that somebody was trying to crowbar their way into my brain. So, since they haven’t figured out how to actually manipulate our minds (yet), they’ve done the next best thing and figured out how to make it impossible to think. Wonderful. Before long, I’m sure we’ll be seeing ads promoting Ingsoc and reminding us that Big Brother is watching.

Those are my (disjointed) thoughts.

SimHeart 2.0

It seems that every time I sit down to work on my heart-simulation project, I get a lot more done than I was expecting. In my last post on the subject, I talked about how I wanted to integrate a more realistic model of the atrioventricular (AV) node, the little bundle of nerve fibers that carries the contraction impulse from the atria at the top of the heart to the ventricles on the bottom. Apparently, I’d entirely misjudged the difficulty of this effort, since, once the solution occurred to me, I was able to implement it in about five minutes.

Here’s what I did. As I said before, each cell in the simulation has two variables assigned to it: ARefrac, which determines whether or not an atrial impulse can pass through the cell; and VRefrac, which determines whether a ventricular impulse can pass through. I solved the AV-realism problem by simply introducing a global variable called AVRefrac that determines whether or not the AV node can accept an impulse. Basically, every time a simulated electrical “spark” strikes the simulated node, as long as AVRefrac is equal to or less than zero, it sets AVRefrac’s value to a user-specified constant I call AV-delay. So, basically, now the ventricles can only respond as fast as the AV node will allow, just like a real heart! When I saw how beautifully my little fix had worked, I was thrilled!

So, my simulated heart is now more realistic than ever. For example, I did a few runs with the refract-length value (the value that determines how quickly cells recover their ability to fire after each firing) set very short so that arrhythmias would occur frequently, so that I could study their effects. Before long, my simulated heart went into atrial flutter/fibrillation (a condition where the small pumping chambers at the top of the heart expand and contract quickly and chaotically, often leading to a dangerously fast ventricular rate. I was amazed to see something very similar to the many atrial-fibrillation EKG’s I’ve looked at:

(Note: in the simulated EKG, I’ve separated the atrial and ventricular signals, since whenever the ventricular rate got very fast, it obscured all the atrial activity, and I wanted to be able to study the atrial activity as well)

Given my tendency towards oversimplified simulations that produce peculiar behavior, the resemblance this bears to real supraventricular tachycardia (fast heart rate caused by the atria, which is often seen in atrial flutter or fibrillation) was frankly, surprising. After about half a second of atrial flutter, the atria begin to fibrillate, producing that classic irregular ventricular response.

Note the extremely high ventricular rate that shows up towards the end of the ECG. That’s a rather unrealistic product of my simulation, since whenever one of the waves of excitation collided with the back of a previous wave, it had a tendency to collapse into a tachycardic or fibrillatory spiral.

There are some forms of supraventricular tachycardia that terminate on their own. They’re called “paroxysmal” supraventricular tachycardia, and my simple little simulation actually managed to produce a run of it!

Some forms of atrial fibrillation occur in the presence of heat block (which, in its most common form, is basically a very slow AV node that doesn’t conduct every impulse that passes to it). In those cases, the fibrillation is frequently asymptomatic or minimally symptomatic, since the heart doesn’t end up racing. When I set the AV-delay parameter higher than usual, I observed this very same phenomenon.

Eventually, the aforementioned wave-collision problem had become annoying enough that I decided to re-write part of the simulation so that there was a small probability that an electrical spark could actually cross a cell that had not entirely recovered. That solved a lot of my problems.

In the re-written simulation, atrial fibrillation still produces that classic irregular ventricular heartbeat, and this time, since the waves are more collision-tolerant, the behavior doesn’t immediately degenerate into ventricular fibrillation, which gives me a chance to actually study it properly.

More updates as they’re warranted. And for those reader(s?) who are wondering what the hell has been wrong with me lately, don’t worry, I’ll be turning the blog over to my old cynical, sarcastic self very shortly.


I was sitting around without much to do, so I opened up SimHeart and let it run in the background. When I checked in on it again a few minutes later, I’d discovered some very interesting behavior:

Apparently, some of the standard sort of atrial fibrillation had started, then, spontaneously self-organized into a coordinated wave spiraling cyclically through the atria. You can see the wave in the screenshot.

This really grabbed my attention, so I watched it for a while, and discovered that, strangely enough, the wave was quite stable.

Not even the normal sinus beats, which occasionally inserted themselves in the path of the wave, were very good at disrupting it. Not long after this screenshot, it degenerated rather suddenly into normal atrial fibrillation.

Then, while having a look at the pictures a few minutes later, I realized something: my simulation had produced true atrial flutter. What I saw before and called atrial flutter was really just organized fibrillation. This, though, exhibits all the classic features of atrial flutter: rapid atrial waves with a sawtooth shape. In this case, since I had the ventricular response set to be fairly quick, it turned into quite realistic atrial tachycardia.

I tried to save the state of the simulation so that I could study it later, but as there are some features of NetLogo with which I’m not entirely familiar, I wasn’t able to do it. So, for now, I guess I’ll just keep running HeartSim in the background until I see that rhythm again.

The Simulated Heart

For the past few months, I’ve been playing around in a program called NetLogo that allows you to simulate agent-based emergent systems with pretty much no effort whatsoever. Being something of a cardiology nerd, I had the idea a while ago to build a vastly simplified model of the electrical conduction in the heart. With the Belousov-Zhabotinski reaction in mind — which appears in James Gleick’s excellent book Chaos, which also has a chapter on the electrical waves of the heart, which is probably what sparked my inspiration in the first place — I set out to build a simple electrical-wave model. What I got was competent enough. At the beginning of the simulation, a single “spark” in the center of the simulation grid would produce a radiating wave. Sometimes, a defect on the front of that wave would cause the wave to dimple, and then to curl in on itself, producing a self-sustaining oscillation.

Some time later, when I began to get interested in cardiology — especially cardiac arrhythmias — I began to realize that my simple little model produced some behavior that was actually strangely comparable to that of a real heart. So, I modified it to be even more heart-like. I programmed the simulator to generate an initial spark at the center of the grid every fifty time steps or so. As I watched the waves propagate across the screen, I was, frankly, mesmerized. For a while, the waves would march along. Then, one of them would go wobbly, curl in on itself, and start oscillating rapidly. It bore a great deal of similarity to some of the real computer simulations of electrical activity in the heart that I’d seen, specifically to those that generated ventricular tachycardia.

With this as an impetus, I spent many hours revising and playing with my system. I recently downloaded the newest version of NetLogo, and decided that it was time to re-write the heart simulator, which had been mangled and cluttered beyond recognition by the process of incremental revision — something that happens to most of my programs.

This newest version — Version 3, by my count — is my most complete yet. A simulated beat travels through the simulated atrium (in the simulation, the atrial activity is represented by yellow waves), then hits the simulated AV node — the part of the heart’s conduction system that connects the atria (the upper chambers) and the ventricles (the lower chambers) — hangs around for a moment, then starts to propagate as a new wave (this one red) through the simulated ventricles. I’ve observed quite a lot of fascinating and remarkably heart-like behavior in my simple model. I’ll run through some of it here.

This is the main screen. All those buttons and sliders set up the simulated heart’s various parameters. If you can see it in this image, the “refract-length” slider controls how quickly the cells become able to fire again after each firing. The quicker that interval, the more easily the heart will go into fibrillation. That’s why I built in the handy little “defibrillate” button you can see to the right of the display.

As I did a run of the simulation to produce an image for this post, I was lucky enough for the simulation to do something interesting almost immediately. Note the oddly distorted third beat. That’s actually the result of an extra breakaway wave in the simulated ventricles. In real life, we call things like that “palpitations” or “premature ventricular contractions.” When the model’s heart rate is faster, you can actually observe the compensatory pause that comes after most premature ventricular contractions.

A final note on this image: in order to make the pretty EKG-like display, I had to cheat a little. In reality, the small waves represent just as much activity as the large ones (since the two grids are exactly the same size) but since the atria are a lot smaller than the ventricles in a real heart, I thought it would be a good idea to de-emphasize their activity a bit. This also has the benefit of making my fake EKG look a lot more like a real one. I’m currently working on a way to make the conduction in the simulated atria more realistic.

Here, the simulated heart degenerates into the deadly arrhythmia known as ventricular fibrillation. In this often-fatal arrhythmia — which is the primary cause of sudden cardiac arrest syndromes — the ventricles, which represent the majority of the heart’s mechanical pumping power, simply begin to wiggle and wobble randomly, rather than beating in an organized fashion. The result is that no blood gets to the body and the brain, and death results in about ten minutes.

I observed quite a lot of fibrillation of one kind or another in my simulated heart. Since I intentionally set the refractory time short — that is, the cells recovered their firing ability quickly — the waves had a strong tendency to curl in on themselves and break up into spirals. These spiral waves quickly degenerated into clusters of randomly-oscillating cells. About two-thirds of the way through the run, you can see that the fibrillation suddenly stops. That was the result of me pressing the “defibrillate” button, which sends ninety percent of the cells into the refractory phase, unable to fire until they recover. Towards the end, you can see that the “normal sinus rhythm” returns.

I’m actually quite pleased with this little simulation. It wasn’t terribly hard to build — then again, nothing in NetLogo is — and it produces interesting results. Here are my current goals for it:

  • Change some of the parameters so that they better reflect the physical disparities between the atria and the ventricles.
  • Improve my model of the AV node so that it discharges more realistically. Currently, it simply causes the electrical particles to pause for a moment, after which they are released. This means that, unlike the real AV node, my simulated one has a “memory,” and rather than discharging all at once like the real version, it simply discharges in the same order as the pulses that strike it.
  • Incorporate some kind of system to simulate damage to the heart.
  • Refine the electrical model so that the simulation is capable of producing ventricular tachycardia — a dangerous but more organized cousin of ventricular fibrillation in which a single self-sustaining oscillating spiral causes the ventricles to contract too fast to pump effectively. At the moment, the simulated ventricular tachycardia tends to degenerate into ventricular fibrillation almost immediately, making it difficult to study.
  • Make the translation between the simulated heart and the simulated EKG more realistic, so that it produce something more like a real EKG.
  • Make the model more analog. I’m hoping that this will solve a lot of my problems, but it’s probably going to be one of the hardest features to implement, with the possible exception of the better AV node simulation.

I’ll post updates as they come, and I soon hope to have a Java version of the simulator uploaded so that other people can play with it.

Happy New Year, 2008

I’m aware that this isn’t exactly the most original post ever written, but it didn’t seem right to simply ignore the new year altogether.

I’ve got big plans for 2008. This year, I’m going to experience new things. I’m going to get out there and be part of the world. As cheesy as that sounds, damn it, I’m gonna do it! So there!

Here are a few things I’m looking forward to in 2008:

  • Voting in my first presidential election.
  • Being annoyed at the available candidates in my first presidential election.
  • Celebrating my 20th birthday. Three decades down, probably six more to go!
  • Finally being old enough to start complaining about how easy the younguns have it. Yes, I know that’s usually reserved for people in their sixties, but at the pace things are going today, we twenty-year-olds feel like we’re in our sixties.
  • A whole slew of scientific discoveries.
  • The government’s denial of the ramifications of about half of those discoveries.
  • A whole slew of new films.
  • Being able to ruthlessly shred those films with criticism for being clichéd dross.
  • A potential film adaptation of Cormac McCarthy’s The Road.
  • Being blissfully ignorant of the next season of American Idol.
  • All the celebrities that we’ll get to see crash and burn.
  • Ignoring the news coverage of those celebrities’ fiery falls from grace. (Like they ever had any grace to begin with…)
  • And finally…writing a whole bunch of bleakly cynical blog posts!

According to the Chinese calendar, 2008 is the Year of the Rat. As strangely appropriate as that may be, being an election year and all, I prefer to think of 2008 as the Year of the Cynic. That is to say, this is my year!

I wish you all the very best in the new year!