Wednesday, August 6, 2014

Book Miner - Marvel's The Emerald City of Oz by Eric Shanower

q[Editor’s Note: Since this is reviewing a graphic novel that is an adaptation of a popular book, I will refrain from discussing the plot synopsis, as it would be redundant]
In which I review The Emerald City of Oz, adapted by Eric Shanower and illustrated by Skottie Young, based on the book by L. Frank Baum.

Overview

In Marvel’s The Emerald City of Oz, we have the last volume of Oz adaptations in this series. Since this series began, it has delighted me, and I have dutifully waited for the hardcover to come out for each volume.
I did not realize that this would be the last volume until I got to the last page. While it makes sense to end this venture on The Emerald City of Oz (wherein Glinda cuts off all Oz’s ties with the outside universe), I was disappointed at the reality of not seeing The Patchwork Girl of Oz and the other “Famous Fourteen.” I also was disappointed that we’d not see Trot and Cap’n Bill make their Oz debut (and disappointed that I couldn’t petition for Trot and Cap’n Bill adaptations as well). But, like Theodore Geisel said: “Don’t cry because it’s over, smile because it happened.”
That being said, I will definitely feel a pinch in my emotions when, nine months from now, there won’t be another Shanower/Young Oz book.

A neat thing to note is that the hardcover edition includes a free digital copy. I haven't yet tried to redeem mine, but I hope it's as painless as other more recent Disney digital copy redemptions (for the record, the original "Digital Copy" disc for Wall-E was the biggest pain of my life of digital copies).

Analysis

Comparing the art to this volume to that of the original, it still bears a striking similarity to the original Wattersonesque illustrations of Young. However, it has evolved. It’s not quite so rough around the edges, and the roughness that remains provides more aesthetic value than otherwise. However, it is noticeable. But this wasn’t the first thing I noticed when I finally got this book in my hands.
It was the thickness. While other volumes of this series were eight issues, this one was only five. This disappointed me, as not only was it my last chance to spend time with these iterations of the beloved characters, but it was three issues short of what I was expecting it to be. While I’m sure that there were Important Reasons for this, I do feel the plot was rushed to accommodate this condensed medium.
Beyond that, I loved the illustrations and the depictions of the characters and peoples introduced in this volume. I particularly enjoyed Guph’s portrayal, as a sort of pekingese Lorax. Shortly after reading this book, I watched the Cinar adaptation of the same book. Talk about night and day.
All in all, past the disappointments, I am pleased to include this volume among my series. In a way, it’s comforting to have one less thing to collect. Though, as much as I dislike Shanower’s illustrations[1] (not Young’s, mind you), I am considering strongly collecting his additional Oz works, ‘cause let’s face it, I’m a fan of Oz.
But if Marvel does decide to continue this series, as well as other great Baum classics[2], I’ll be there ready to buy ‘em, especially if they’re up there with the Shanower/Young series.

[1] Shanower’s illustrations are too “Prince Valiant” for my liking. I suppose I could get over it to read a few more Oz books.
[2] Please, oh, please let there be The Life and Adventures of Santa Claus.

Tuesday, August 5, 2014

The Gingham Sword - Introduction

In an effort to try to make this blog more predictable, and to get me to write more (I have a project I’m working on that I need to get back into, but I need to exercise my writing muscle first), I’m going to start serializing a story as I write it.
The story is called The Gingham Sword. If the title does not completely explain what the story’s about, allow me to explain.
If you’re not already aware, I am a huge fan of L. Frank Baum’s Oz books. Every time I find a new book, movie, comic, etc. about Oz, I am compelled to check it out. I’m also like this with pumpkin-flavored things.
So, I was reading something recently, I can’t quite remember what, but it dealt with adaptations of The Wonderful Wizard of Oz. I did not find anything in this article regarding an adaptation of a more fantasy setting (yes, I know, Oz is already Fantasy). Therefore, I put two and two together, and decided that I WOULD WRITE AN OZ FANTASY.
Since I find most Epic Fantasy uninteresting, I decided to make it a Sword and Sorcery tale.
The story is meant to be a reimagining of The Wonderful Wizard of Oz as a fantasy story. I will tag them all with "the gingham sword", and will try to add new “episodes” every Tuesday. Tuesday is my “writing” day, so if I feel compelled to write a post on writing, you may get one of those from time to time. But the rest of my Tuesday posts should be (drumroll please)
The Gingham Sword
by Jacob P. Silvia

Monday, August 4, 2014

Book Miner - The Shapeshifters' Library: Released by Amber Polo - Chapter 9

qChapter 9 is next in The Shapeshifters’ Library: Released by Amber Polo.

Synopsis

Cutter meets a local homeless woman who used to work for the library. Further, she waxes on why she hasn’t found true love, going on to describe her ideal man.
She finds the werewolf book club ladies harassing children, and has McCasson evict them. Meeting up with Lite, she gets a copy of Alice in Wonderland, only for it to bring up sad memories of her mother, for this was the last book she read to Cutter.
She discusses her parents with Chronus, indicating that both lived much more interesting lives than your typical library employee, with much of what they did shrouded in mystery.

Analysis

I suppose we can start with the interesting lives of librarians. This is the premise of one of my favorite book series, A Series of Unfortunate Events, where a bunch of noble librarians who have unusually interesting lives battle a group of book burners led by an unusually hairy individual, all of whom originate from the same group. I understand that book readers versus book burners is a common trope among books by and about those who appreciate literature, yet at the same time, if you remind me of something I like but fall far short from being just as amazing, you’re not going to hold my interest.
Once again, why Cutter doesn’t realize why the werewolf book club group are evil is beyond me. It’s way too suspicious, if you ask me.
Further, I’m amused by the fact that Cutter’s “ideal man” is basically Chronus. Let’s see where that goes. As long he’s not secretly her estranged father, it’ll probably work out well. The discussion of The Shaggy Dog could hint at either of these cases.
Once again, Polo uses Dewey-speak. Let’s analyze it:

Number
Polo
Dewey.info
363.5
homeless
housing
636.71
female dog (yeah, really)
breeds of dog
This does get annoying, especially when it’s off the mark like this.
And so is the fact that a number system is “under copyright.” Last I checked, the definitions of Dewey Decimal System, while in some ways “proprietary” shouldn’t be protected by copyright. Isn’t the point of a system like this meant to propagate information? Doesn’t putting it behind a paywall defeat that purpose?
I end my rant.

Friday, August 1, 2014

How To Make Good Use of C# Expressions

If you use Entity Framework, or really anything that returns an IQueryable, and you want to perform LINQ operations on that Enumerable, you’ve probably discovered several things that just don’t work.
This is mostly due to the fact that with Entity Framework, your LINQ statements must be translatable into SQL. Therefore, you’re pretty much limited to using Expressions in your LINQ methods.
I make use of this technology regularly, and I will admit, at first, the subtle paradigm shift threw me for a loop. While I’m not out to demystify IQueryables, I am out to share a “better practice” I discovered while using Entity Framework to help provide consistent filtering to your collections.
Say you have a collection of objects with the following definition:

public class Cat {
    public int ID { get; set; }
    public string Name { get; set; }
    public bool IsAlive { get; set; }
    //...
}
You’ll probably find yourself writing the following code more than once:

cats.Where(c => c.IsAlive);
Or possibly:

cats.Where(c => c.Name.ToLower().Contains(query.ToLower());
(for some string query)
If you’re like me, then you probably don’t want to write this any more than you need to. Since you’re using IQueryables, you have a few options, really. You could write extensions to your IQueryables, or you could do something cooler. That’s where Expressions come in.
For example, say you want a reusable query to search for living cats. This is fairly straightforward, but making a reusable query is not too much more difficult.

public static Expression<Func<Cat, bool>> CatsAreAlive = (c) =>
    c.IsAlive
    ;
//…
var livingCats = cats.Where(CatsAreAlive);
This is great if you ever anticipate your criteria for living cats to change. Such as if you added a DateTime? DateOfDeath to the cat object. Then you would only have to change your CatsAreAlive expression, and everywhere that called it would be updated:

public static Expression<Func<Cat, bool>> CatsAreAlive = (c) =>
    c.IsAlive
    && c.DateOfDeath != null
    ;
//…
var livingCats = cats.Where(CatsAreAlive); // no zombies plz
Or say you want a reusable query to search cats by name. As you can see from the LINQ above (third from top), this is a little cumbersome to have to write each time you want to search for cats.
Using an expression, you can do the following:

public static Expression<Func<Cat, bool>> CatNameLike(string query) {
    return (c) =>
        c.Name.ToLower().Contains(query.ToLower())
    ;
}
//…
var queryCats = cats.Where(CatNameLike(query));
Then if you add a string Nickname to the cat, you only have to change it once.

public static Expression<Func<Cat, bool>> CatNameLike(string query) {
    return (c) =>
        c.Name.ToLower().Contains(query.ToLower())
        || c.Nickname.ToLower().Contains(query.ToLower())
    ;
}
//…
var queryCats = cats.Where(CatNameLike(query));
Awesome.
You can do this with any LINQ expression, such as Selects:

public static Expression<Func<Cat, SelectListItem>> CatsForDropdownList = (c) =>
    new SelectListItem() {
        value = c.ID.ToString(),
        label = c.Name,
    }
    ;
//…
var dropdown = cats.Select(CatsForDropdownList);
OrderBys:

public static Expression<Func<Cat, string>> NameOrder = (c) =>
    c.Name.ToLower().StartsWith("the ") ? c.Name.Substring(4) :
                                          c.Name
    ;
//…
var herdedCats = cats.OrderBy(NameOrder);
And any other IQueryable LINQ extension. The important point thing to note is that LINQ expressions that don’t require an argument should be defined as Parameters, while ones that do should be defined as Methods. This isn’t required, they all could be Methods. It’s just prettier (IMHO) to not see all those empty parentheses.
One additional cool thing you can do once you’ve defined these Expressions is to make use of them as Functions in other contexts. For example, say you want to check a single Cat object for a matching name (I can’t provide a good example, but I’m sure it could happen). You could do the following:

public static bool NameLike(this Cat cat, string query) {
    return CatNameLike(query).Compile()(cat);
}
(I couldn’t resist an extension method)
While this is a roundabout way of running this query, it gives you a definite advantage: you only had to write the name matching logic once, and when you decide to change it (say you add a FirstName and a LastName too), you only need to change it once, and it will be available everywhere.
I recommend implementing these static methods and parameters in a static class, so you can keep them all together. Or putting them in classes by type (e.g., Filters, Sorts, Selects, etc.).
I must end by saying that while I prefer this method for its apparent elegance, I’m always open to suggestions on how to do it more elegantly. I’d be glad to hear your opinion on the matter.