Monday, January 28, 2013

New story out

Daily Science Fiction published my flash story, "Draconic Motivation," a week ago in their e-mail list.  It came out on their website earlier today.  It's a silly little story, but I liked it, and apparently I wasn't the only one.  Read it here.

Saturday, January 26, 2013

New stuff, a lot of work

I managed to acquire quite a bit of new stuff in the past couple of weeks.  So much so, that it's been keeping me from getting work done.

One of those items is a Kindle Fire HD.  I knew I wanted one as soon as it had been announced, as it fixed many of the annoying things about the original.  I received a couple of Amazon Gift Cards for Christmas, and this seemed the perfect use for them. My first impression of the new Fire was that it was sleeker than the old one.  I got the 32 GB 7" version, since I liked the 7" form factor of the original Kindle Fire.  But in comparison to the new one, the old Fire is clunky and boxy.  I'll do a more thorough review later, once I peel myself away from Final Fantasy III for the Kindle long enough to experiment with some of its other capabilities.  Now I just need to figure out what to do with my old Kindle Fire.

The other thing that arrived this week is a desk.  I ordered the Versa Center from VersaTables and spent some time this week putting it together.  I got this desk because I was buying a desk treadmill from Lifespan, and needed a standing desk to use with it.  The Versa Center isn't really a standing desk, but each and every shelf is adjustable to any height, so I was able to make it into a standing desk.
Treadmill and Versa  Center
From the treadmill, I have a good view of the television in my living room, which is hooked up to one of my computers (the one I mostly use for gaming).
The view of the television, and my wireless keyboard.
I really liked the Versa Center's flexibility, but I'm reluctant to recommend it to others.  There are no fixed mount points--all the shelves clamp onto the poles on either side of the desk, and it took two people, a measuring tape, and a level to get the two sides of each shelf lined up. Nor was there any indication of the angle that the components clamp on, so getting them parallel was an iterative process of  eyeballing it, bolting in the shelves and support bars, and then adjusting so you could get the other side bolted in. And even then, I don't think the tolerances were quite right--I still wasn't able to line it up well enough to get all the screws in.  But I think I'm at the point where it's good enough for now.  I can now walk on the treadmill while writing this post on my laptop (I suppose I could use the computer connected to the television, but that's for games).     I haven't quite decided whether I'm comfortable with the distance, or whether it's worth going through the expense and trouble of installing a keyboard arm.

I like having a treadmill desk, but I still miss by old treadmill.  I got rid of it when I moved into my previous apartment.  The old treadmill was significantly bigger, and wouldn't have worked with a desk anyway, as its lowest speed was 2.5 mph, which is too fast to comfortably write.  Right now I'm walking at 1.2 mph, which works for me, and I may pick up the pace a bit more, but I doubt I can comfortably type above 2 mph, and certainly not while running.  But at least I could run on my old treadmill.  The new one only goes up to 4 mph, which is just a light jog.
My old treadmill.

Saturday, January 19, 2013

Review of A Memory of Light by Robert Jordan and Brandon Sanderson


I was going to write a long review of the final book of the Wheel of Time.  But, really, I'm not sure that much more needs to be said.  The Wheel of Time has been an important mainstay of epic fantasy for over 20 years.  Begun by Robert Jordan with the publication of The Eye of the World, after his death it was completed by Brandon Sanderson with the last three novels: The Gathering Storm, The Towers of Midnight, and A Memory of Light.  At least portions of the final novel were written by Robert Jordan before his death, though I won't hazard a guess as to which portions.  The Wheel of Time has had ups and downs.  I personally didn't get into it until the third book, The Dragon Reborn, and there were certainly books along the way that were significantly below par.  Some of the novels around books seven to nine  seemed to contain no significant plot developments, and the whole book seemed to be spent catching up with each character, reminding you of what they were up to, and then switching to the next.  But then things began to pick up just before Robert Jordan died, and Brandon Sanderson was able to bring it to a conclusion.

The whole final book centers around Tarmon Gaidon, the Last Battle.  It's actually about a series of battles, on numerous fronts.  And if you find battle scenes boring, then you're going to have difficulty with this one.  There's one 200 page chapter about a single battle.  It is the main one, and deserves a lot of attention, but still, that's a long time to spend on a single battle. Rand al'Thor, the main character, has what is actually a pretty minimal part on this front.  He's too focused on his own struggle with the Dark One, which is a lot more personal and focused--practically a duel, though one fought with ideas and the threads of reality, not swords or magic.  But many of the major characters, and most of the minor ones, are involved in the battle, including Lan, Elayne, Egwene, Suiane, Gareth, Tuon, Gawyn, Galad, Faile, Olver, and especially Mat, in the role we always knew he would have.  Now, I've said before that Brandon Sanderson doesn't really seem to get Mat, and that shows up in the early parts of the novel, but in the Last Battle he seems to be in fine form, showing the sort of mad brilliance we expect from him when it comes to war.

I won't say the battle dragged, because it kept me up all night trying to finish it, but there were moments where I wished Brandon would pick up the pace.  On the bright side, everybody had a role and a chance to shine in this book.  They needed to.  On the other hand, not everyone's role was what I might have wished.  Perrin managed to miss the big battle in the south, and only showed up for the showdown in the North, a smaller but equally important battle.

One of the requirements of the final book in a series is to fulfill all the promises given in the previous ones.  As there were a lot of prophecies, that was a lot to fulfill, and not all of them were met in a very satisfying way.  Suiane's and Gareth Bryne's, for example.  Or Alivia's.  In some places it felt like shortcuts were taken to get the prophecy resolved, but I suppose that was inevitable, given the scope of this vast series, and exactly how many promises there were to fulfill.

But ultimately, I was satisfied with the ending.  Not everyone survived, and in some cases I was surprised by who did and who didn't, but that was satisfying in its own way.  And the last chapter contained a couple of final surprises that I think were worth waiting for.

Wednesday, January 16, 2013

Redundancy Checker update

A week ago, I discussed my travails in getting my Java program working.

After some hunting, I've found an improved version of the RTFEditorKit at this site--an AdvancedRTFEditorKit. It's still not perfect, and it still loses smart quotes, but it does allow you to subclass its classes, which is something the old RTFEditorKit did not allow. You could subclass the kit itself, but not any of the classes it used to do the real work, which is what I needed. By subclassing the new RTFReader, I may be able to do some preprocessing and post processing in order to deal with the idiosyncrasies that are showing up. Unfortunately, some experimenting showed that my original idea (replacing \'93 with \ldblquote) won't work, though I suppose I could replace it with straight quotes.

It's all very annoying.  The whole idea of object oriented programming is that I wouldn't have to write an RTF reader from scratch.  I'm beginning to wonder just how much time I'm willing to dedicate to this.

Saturday, January 12, 2013

Book Review at Black Gate

My first book review of a self-published book is up at Black Gate.  First up, Tiger Lily by K. Bird Lincoln.

In other news, I just finished A Memory of Light, the final book of the Wheel of Time series, begun by Robert Jordan and completed by Brandon Sanderson.  I expect that I'll be writing a review, after I get some sleep.

Saturday, January 05, 2013

Redundancy Checker

As I mentioned in my last post, I've been spending some time learning Java.  In addition to the exercises suggested by the book I'm using, I've also been working on my own project, developing it as my book (Head-First Java) covered each topic that I needed.  I've finally reached the sections on the GUI and saving objects, which means that I have now completed a working alpha version of the code.

Here's what it looks like:
Screenshot from Redundancy Checker
Redundancy Checker loads an RTF file, and scans it.  Every time it finds a word or phrase used repeatedly in close proximity, it marks it as a redundancy and highlights it in the text.  That produces the output above.

You can also change the settings, controlling for how close the words or phrases need to be, and what words should be skipped for being too common:

The Options window

Finally, you can edit the text and save it.  So the program works, and does all the things I set out to do, but it doesn't necessarily do them well.  The biggest issue is that the RTFEditorKit in Java is buggy.  It doesn't read smartquotes properly, and it can lose other basic formatting too.  So loading a file, editing it to fix the redundancies, and saving it  isn't really an option.  I'm not sure how, or even if, I can fix it.  I suppose I could make my own RTF parser, but that would be quite a pain, and I don't really think it would be worth the time.

Update: One thing I've realized is that the source code for the RTFEditorKit is available. Rather than replacing it, I could edit the original. I'd have to check to see how the code was licensed. I should probably create a class that extends the kit, and then only modify the methods I need to.

Thursday, January 03, 2013

New Year's Resolutions

These are a bit late this year, but I hadn't really come up with them before now.  I'm actually not much of a fan of New Year's Resolutions.  When I decide to do something, I do it, and don't worry about making silly promises to myself.  I'm usually pretty good at disciplining myself that way.  That said, there are a few things I intend to do this year, of various levels of difficulty.  I'll list them in order of easiest to most difficult.

  1. Finish my RedundancyChecker program.  Off and on I've been teaching myself Java.  One might think I'd already know such an important and popular language, and if I were a real programmer, rather than an Electrical Engineer who graduated just before Java became popular, that would probably be the case.  But no, I'm just learning Java now.  Of course, I do know C++, which Java was based on, so it's not really that difficult.  In the course of learning it, I've been writing a simple program called RedundancyChecker.  It's purpose is to improve my writing.  I've discovered that I have a tendency to repeat myself in my writing, using the same words and phrases repeatedly.  I usually manage to catch myself in the revision process, but I'm writing this program to give myself some computer assistance.  It searches through an RTF document, finds examples of repeated words and phrases, and highlights them.  Just today, I've got it working in loading and scanning a file, and highlighting the redundancies.  However, it doesn't allow me to edit the RTF and save it.  That's mostly because Java's RTFEditorKit is buggy, and it manages to lose smart quotes in the process of reading the file, so I'd be very reluctant to replace anything I've painstakingly written and formatted with the output from this Java program.  I suspect that I'll be spending more than a little time trying to find a workaround.  Other than that, it's mostly polishing, and adding features such as an editable common word list and adjustable phrase length and proximity parameters.  So this is almost done.
  2. Exercise more. When I started this job about a year and a half ago, I had to decide between writing and exercising, because I didn't think I had time for both.  I chose writing.  Now it's time to see if I can put some exercise back in my schedule, preferably by finding a form of exercise I can do while writing.  A treadmill or bicycle desk would be ideal.
  3. Write more consistently. I go through phases with this.  I'd like to spend at least an hour every weeknight writing.  Unfortunately, my weeks are often interrupted by things like travel, or visiting with friends, or a late night at work, or our weekly Church small group.  I can't avoid all of them (and probably shouldn't), but my plan to make up for it on the weekends keeps running into difficulties, especially when I'm supposed to make up three nights worth of writing.  But the biggest problem is not the unavoidable interruptions, but the sheer laziness that causes me to skip a night, or slack off and spend only half an hour on writing, or blog instead.  That I can help, and if I can consistently write for an hour three weeknights each week, then making up the two nights I unavoidably missed on Saturday is a lot more reasonable.