Review: Preludes and Nocturnes
Review of Preludes and Nocturnes (The Sandman #1.0) by Neil Gaiman (9781563892271)★★★★(https://b-ark.ca/MESkM8)In 1916, Dream is captured and encased in a glass globe in a failed attempt by a fictional Edwardian magician (very much in the vein of Aleister Crowley) named Roderick Burgess to bind Death and attain immortality. Dream bides his time for decades until Burgess dies. Afterwards, his son Alexander becomes Dream's new captor. Finally, in 1988, Alex's guards grow careless and the guards watching him fall asleep in his presence, allowing Dream to use the sand from their dream to his benefit. When the guards awake and break the seal Dream was in, he is then able to escape. Dream punishes Alex by cursing him to experience an unending series of nightmares. The rest of the story concerns Dream's quest to recover his totems of power, which were dispersed following his capture: a pouch of sand, a helm and a ruby. The pouch is being kept by a former girlfriend of John Constantine's. Once that is recovered, Dream travels to hell to regain the helm from a demon, where he incurs the wrath of Lucifer (an enmity that will have major repercussions later in the series). The ruby is in the possession of John Dee, a.k.a. Doctor Destiny, a supervillain from the Justice League of America series. He has warped and corrupted the ruby, rendering Dream unable to use it, and with it he nearly tears apart the Dreaming. However, thinking that it will kill Dream, Dee shatters the ruby, inadvertently releasing the power that Dream had stored in the ruby and restoring Dream to his full power. The collection ends with "The Sound of Her Wings", an epilogue to the first story-arc. This issue introduces a character who has become one of the series' most popular and prominent personalities: Dream's older sister Death. She is depicted as an attractive, down-to-earth young goth girl, very unlike the traditional personification of death, and spends the issue talking Dream out of his brief post-quest depression.
While the first story arc of the Sandman series is fairly straightforward quest fare, you can see why the series gained the success it did. Gaiman is, of course, a fanastic writer, and the mythos he creates, here, is truly intriguing. But it is the final issue in the collection, The Sound of Her Wings, where the series truly takes off. The entire plotline is sweet and subdued, infused with a depth of emotion lacking in the previous tales. And Gaiman’s vision of the anthropomorphic personification of Death is brilliant, quirky and original,kand serves as a pitch-perfect contrast to the reserved Morpheus.
Review: Jurassic Park
Review of Jurassic Park (Jurassic Park #1.0) by Michael Crichton (9780394588162)★★★(https://b-ark.ca/4Uag_W)An astonishing technique for recovering and cloning dinosaur DNA has been discovered. Now humankind’s most thrilling fantasies have come true. Creatures extinct for eons roam Jurassic Park with their awesome presence and profound mystery, and all the world can visit them—for a price.
Until something goes wrong. . . .
In Jurassic Park, Michael Crichton taps all his mesmerizing talent and scientific brilliance to create his most electrifying technothriller.As a general rule I tend to enjoy Crichton’s writing style (the man had a real flair for action and pacing, which is probably why his work has been so successful), but in this case I couldn’t help but be turned off by his decision to use Ian Malcolm as a mouthpiece for continuously waxing philosophical about the evils of modern science and technology. Of course, one could argue Mary Shelley did the same back in the day, but the difference is she pulled it off with style and panache, while Crichton comes across as heavy-handed and bloviating… not to mention just plain wrong most of the time.
Now, one could argue that perhaps I’m tainted by the fact that in his later years Crichton became a vocal anti-AGW (human-caused global warming) advocate, and ended up providing large quantities of vacuous, incorrect ammunition for those looking to reinforce their own anti-AGW beliefs. But despite this, I thoroughly enjoyed both The Andromeda Strain and Sphere, and in neither of those cases did I feel I was being preached to. Not so with Jurassic Park.
So while Jurassic Park was, I think, successful as an action/sci-fi book, those successes were more than offset by Crichton’s total lack of subtlety.
Community Garden?
So, out of a certainly level of idle curiosity, a few months back I decided to contact my community league1 to find out what would be involved in getting a Community garden started in my area. Community gardens are, to me, an intriguing concept: get access to some land (either city property or donated private property), get members of the local community together, and then grow food! Of course, it’s particularly interesting to me as a guy who’s always lived in a small house with little to no room for a garden, leaving a community garden as the only option I’d have to get access to a decent sized plot of land. And I suspect, deep down, I’m actually a closet hippy yearning for a commune…
Of course, there’s no shortage of community gardens in the city, but gaining access to them can be tough, and none are particularly close to my home. Meanwhile, I live along a rather large hydro corridor, which means a ton of seemingly under-utilized greenspace, in a neighbourhood dominated by small homes with tiny yards, or high density residential in the form of three-story condo blocks who, needless to say, have no yard at all. So it would seem like the kind of area where a community garden would flourish.
And so I emailed my local community league, and then promptly put the whole idea out of my mind. I tend to have a short attention span like that. So colour me surprised when a few weeks later I received a reply from the current league webmaster indicating that she’d be very happy to bring the idea to the league board… she just had one question: would I be willing to take point on this project?
And it may be totally crazy, but… I said yes. So, she’ll be bringing the topic up to the board this week, and all signs indicate that they’ll provide their support, which means the ball may actually start rolling on this.
Uhoh.
-
Fun fact: community leagues in Edmonton are quite powerful compared to similar organizations in other cities (Edmonton was also the first city in Canada to adopt these kinds of organizations). If you want to have an influence on politics in your area, the two most important things you could possibly do are a) vote for your city councillor, and b) get involved in your community league, as they typically handle park development (including skating rinks, playgrounds, and so forth), manage local community programs, and get involved in land use and transportation issues. ↩
-
Sometimes You Actually Have To Rewrite It
So, a couple years back I started doing some subcontracting work for a buddy of mine who runs a little ColdFusion consultancy. As part of that work, I took ownership of one of the projects another sub had built for one of his client, and the experience has been… interesting.
See, like PHP and Perl, ColdFusion has the wonderful property of making it very easy for middling developers to write truly awful code that, ultimately, gets the job done. And so it is with this project. My predecessor was, to be complementary, one of those middling developers. The codebase, itself, is a total mess. Like, if there was a digital version of Hoarders, this code might be on it. But, it does get the job done, and ultimately, when it comes to customers, that’s what matters (well, until the bugs start rolling in).
Of course, as a self-respecting(-ish) developer, this is a nightmare. In the beginning, I dreaded modifying the code. Duplication is rampant, meaning a fix in one place may need to be done in many. Side effects are ubiquitous, so it’s difficult to predict the results of a change. Even simple things like consistent indentation are nowhere to be found. And don’t even dream of anything like automated regression tests.
Worse, feeling no ownership of the code, my strategy was to minimally disturb the code as it existed while implementing new features or bug fixes, which meant the status quo remained. Fortunately, around a year ago I finally got over this last hump and made the decision to gradually start modernizing the code. And that’s where things got fun.
One of the biggest problems with this code is that data access and business logic are littered throughout the code, with absolutely no separation between data and views. And, remember, it’s duplicated. Often. So the first order of business? Build a real data access layer, and do it such that the new code could live beside the old. Of course, this last requirement was fairly easy since there was no pre-existing data access layer to live beside…
So, in the last year, I’ve built at least a dozen CFCs that, slowly but surely, are beginning to encompass large portions of the (thankfully fairly simple) data model and attendant business logic. Then, as I’ve implemented new features or fixed bugs, I’ve migrated old business logic into the new data access layer and then updated old code to use the new object layer. Gradually, the old code is eroding away. Very gradually.
Finally, after a year of this, after chipping away and chipping away, finally, while there’s still loads of legacy code kicking around (including a surprising amount of simply dead code… apparently my predecessor didn’t understand how version control systems work–if you want to remove code, remove it, don’t comment it out!), the tide is slowly starting to turn. More and more often, bugs that need to be fixed are getting fixed in one place. New features are able to leverage the object layer, cutting down development time and bugs. And some major new features coming down the pipe will be substantially easier to build with this new infrastructure in place. It’s really incredibly satisfying, in a god-damn-this-is-how-it-should-be sort of way.
The funny thing is, this kind of approach goes very much against my natural instincts. Conservative by nature, I’m often the last person to start rewriting code. However, if there’s one thing this project has taught me (along with a couple wonderfully excited, eager co-workers), it’s that sometimes you really do have to gut the basement to fix the cracks in the foundation. And sometimes, you just gotta tear the whole house down.