Tuesday, December 29, 2009

The Requisite Retrospective

As 2009 careens to an end, many folks are taking a look back, and I'm no different. It really has been a huge decade on so many levels. We've seen the terrorist attack of Sept. 11, 2001, constant low-intensity wars, the first non-Caucasian U.S. President, and rovers on Mars. The echos of the .com bubble at the start of the decade have settled and the full effects of the mortgage collapse will ripple into the next decade. Technology has seen dramatic, sweeping changes. Digital cameras have gone from proof of concept to ubiquitous. Digital and High Definition television came onto the scene only to be immediately challenged by streaming video. Cell phones have gone from bulky luxury items to indispensable, not to mention from phones to pocket Internet computers. Google got big and went public while the Internet survived Y2K scares and spawned social media. The iPod changed how we listen to music, and helped Apple become something more than a niche company. Pluto got demoted from being a planet, and it looks like the universe is expanding at an accelerating rate rather than slowing down. Two different space probes left the area of influence of our sun to enter interstellar space proper. Doctor Who regenerated.

On a personal level, it's been the decade where I entered my career, and held down a job for nearly nine years and counting. I've been through two surgeries, one of which really changed my life for the better. I moved into my first home, totaled my first car, and built a computer from parts, and participated in my first in-depth Bible study. I started to blog semi-regularly in 2005, switching to regularly in 2007. I managed to post weekly for over two years (producing very little original content in that time).

Looking back over the decade, what I most clearly see the faces of the people who have made my life what it is. Old friends from high school and college, folks from church who gave me insights into my faith, people from work who taught me the million things I have learned on the job and became friends in the process, and my ever-faithful family stand out as shining highlights in a world that has seen much darkness.

Looking forward has never been a particular specialty of mine, but it's always worth a try. The days of me regularly posting here ended a couple months ago so I could redirect my time to other pursuits, but I don't intend to let things here go completely fallow. The next decade will give us technological wonders beyond what we expect, though it's easy to predict that cable TV will face the full weight of the Internet that has already enveloped the print media and music industries. Our lives will continue to become more connected, with all the convenience and inconvenience that implies. Politics will likely continue to depress me. It's even remotely possible that I will finally send a text message.

Welcome to The Future everyone!

Sunday, December 27, 2009

Quote of the Moment

"I wish that, just once, some terrorist would try something that you can only foil by upgrading the passengers to first class and giving them free drinks."
--Bruce Schneier, in his Schneier on Security blog.

Wednesday, December 23, 2009

A Brief Dollhouse Epiphany

With only around three episodes left in Joss Whedon's latest show Dollhouse, I can finally pin a genre on it. It's a horror show. Considering it's always been about exploring the dark and desperate side of humanity, I suppose I shouldn't be as surprised as I am. But after this past week's pair of episodes, I can certainly say I have not been creeped out by a TV show this much in a long time. Possibly ever. The implications of a technology that can directly manipulate the human brain at the level of personality were bad enough in the first season, and have now been blown wide open. And they are truly scary. The idea of having your personality stored on a hard drive while your body is reprogrammed to do goodness only knows what is a magnificent horror premise. If you can watch without being disturbed then I'm not sure I want you anywhere around me.

However, "disturbing" doesn't exactly make for a great TV show pitch. And it doesn't help that the show didn't really come together well until after the first season. (Though you can make a case for the un-aired season one finale "Epitaph One" as being the real turning point.) A better writer than I am has a cogent summary of the missed potential on scifiwire. I could go into my own litany (why bring Paul into the second season when Boyd was already in a better position to fill the role he now plays?), but it's easy for an outsider to criticize. I'm no writer, just a viewer. And from my seat on the couch, Dollhouse had the potential to be better sci-fi than Battlestar Galactica, better even, perhaps, than Firefly, but that potential was not quite realized. However, us viewers will get a complete story out of it, which is better than most can manage.

Sunday, November 29, 2009

Quote of the Moment

My analysis is: “this place is [freaking] confusing” and I think I’m talking about the bookstore, but I’m actually talking about my brain.
–Michael Lopp, (author of Managing Humans) in his Rands in Repose blog.

Saturday, November 28, 2009

Quote of the Moment

Creativity is a lot like happiness. It shows up when you are thinking of something else.
--Bert Dodson, Keys to Drawing with Imagination

Wednesday, November 11, 2009

Could Go Be a New Beginning For Programmers?

Google has announced a new programming language called Go. Normally, I wouldn't look on a new language as a big deal. Really, programming languages are a dime a dozen these days, and me investing the time to really learn the nuances of one pretty much requires monetary compensation at this point. But, in this case there just might be something very, very interesting happening. You see, Go is positioned as a compiled-to-native systems language, and that to me is a huge, huge deal.

Right now, C and its offshoots C++ and Objective C rule the systems landscape. Java, C#, Python, Ruby, Pearl, and many, many other currently popular languages featuring more modern language features than the systems level C family all have one thing in common: they run on virtual machines. And virtual machines have to be loaded before they can run a program. This artificially increases both the start-up time and overhead necessary to run a program. What I'm saying here is that C is very fast at run-time. Sadly, C and friends don't have many of the modern features that make programmers happy, like automated memory management (a.k.a. garbage collection), concurrency support, closures, etc. (If you want to know what any of those things mean, try Wikipedia. If not, just know that programmers like having them.) Go is an attempt to provide the more modern programming features while retaining the pure speed of a fully compiled language.

As much as I love me some C, if Google's new language gains traction and becomes a truly useful system level tool, it could open a new level of productivity for crazy people like myself. And everyone likes it when their computer programs run faster.

Sunday, November 8, 2009

Thoughts Upon an Encounter with a Virus

The news this year has been full of stories about the H1N1 variant of the flu virus. The rate of contagion has reached official pandemic stages, though the flu season has barely started. H1N1 vaccines are scarce, and all the publicity has put the normal seasonal vaccine in higher demand as well. Worried parents, official office policies, and overwrought newscasters all react to the possibility of the virus causing real, serious problems. But H1N1 isn't what I'm writing about this evening. Thankfully, so far, I have not contracted a real flu. My main computer, however, did contract a virus. Given the increasingly digital nature of our lives, computer viruses can be just as annoying as the real ones.

Computer viruses, in all their various forms subvert the general utility of the computer for the purposes of crime or destructive mischief. The virus I got was of the former type. It included the ability to watch for inputs to certain sites to capture my login credentials. Luckily, since I have a hardware firewall, in the form of a router, separating my machines from the Internet, the evil thing should not have been able to communicate properly. It's still a worry though. I haven't run active virus software in years due to the horrible toll it takes on a computer's performance. Lately however, I had gotten complacent in my scanning. I became suspicious when the machine gave me an error at login that I hadn't seen before, and immediately installed Microsoft Security Essentials. It found and identified the little bugger, but it wasn't able to actually completely clean it out.

Like real viruses, computer viruses are changing constantly. Completely new viruses and variants of existing ones are constantly being released by the nefarious people who create them, and some even have the ability to change their own code to escape the detectors. This results in the same situation as real life: there aren't always ways to defeat a virus, and no antivirus product is completely effective. Sometimes the only way to cure an infected computer is to completely replace its hard drive(s). Yes, that's a bit like nuking it from orbit, but it's the only way to be sure. Happily for my computer a combination of two antivirus products (both free) and some research on the web appear, with reasonable confidence, to have gotten rid of my little infection. In any case, I'm back to being diligent about my antivirus scanning.

One of the consequences of everything in the computer being numbers is how simple it is to be destructive. Early in my computer science education I learned how to render a hard drive unreadable with one instruction, or go a long way toward erasing it with three. That's one of the reasons they teach ethics as part of a CS program. These days, both hardware vendors and software writers are much, much more aware of the danger of malicious code and the need for secure and defensive programming in general. But the beasts remain at the gate. Sending spam e-mails pulls in huge amounts of money for the criminals, and using infected computers (often called "zombies") to send them reduces their costs to essentially zero and makes them very difficult to track.

The lesson here is simple: the price of the Internet is eternal vigilance. Put another way, it's a spin on the lesson of the Tower of Babel: when computers are allowed complete communication, they can accomplish anything, even their own destruction. Fight the evil: run your virus scanners periodically, if your machine suddenly changes how it behaves scan it immediately. If the scanner finds something, punch it into Google and see if you can find a description of what it might do and how it spreads. Be aware of others you may have exposed.

Also, get a flu shot. Just in case.

Sunday, October 18, 2009

Something About Fall

I'm not sure what it is. Maybe it's football season, the start of the new fall shows, the clearing of the allergens from the air, or the cooler temperatures, or all of the above. The revelation of the trees' colors doesn't have the pop of the fresh brightness of spring, but rather a muted blending that suggests a more mature, less garish complexity. The Halloween season gives an excuse to fire the imagination. Thanksgiving allows us to remember all that we have been given, and gather with those we love. What can I say, there's something about fall that agrees with my disposition.

Saturday, October 10, 2009

A Trip to Zombieland

Zombie movies are well trod territory by now. I don't care, I still enjoy them. But I'll be the first to admit their quality tends to be pretty low. It's too easy to go for the jump scare, or the gratuitous gore. But when done right, zombie movies can be immensely fun. Enter Zombieland, a movie squarely in the immensely fun catagory. Heck, Zombieland is easily the funniest movie I've seen in a long time, and it's a pretty darn good zombie movie too. Underneath the humor the sense of isolation that drives the genre is very present. Humor, danger, touching character moments, and blood-slavering dead people. What more can you ask out of the Halloween season?

Wednesday, September 16, 2009

Quote of the Moment

So I started out for God knows where. I guess I'll know when I get there.
--Tom Petty & the Heartbreakers, "Learning To Fly"

Sunday, August 30, 2009

There is Such a Thing as a Tesseract

In college, I learned that a tesseract is the four-dimensional analogue to the three-dimensional cube, in the same sense that the cube is the three-dimensional analogue of the two-dimensional square. This stuck in my mind quite clearly, because it wasn't the first time I had seen the unusual word before. Tesseract in my mind will forever be associated with the idea of a wrinkle in time, and the novel by the same name. A spate of cleaning in my parents attic gave me the opportunity to revisit Madeleine L'Engle's classic children's story and remind myself why it made such an impression on me.

On the surface, A Wrinkle in Time is a science fantasy story that contains other worlds, aliens, a great galactic threat, psychics, and my first encounter with one of the biggest cliches of pulp sci-fi (which I will not spoil here, in case you haven't read it). But the book also has real religious content, including several Biblical quotes. All of this is part of the reason the book remains just as impactful for me today as it did over two decades ago when I last read it. I think the thing that really stands out to me is the sheer amount of imagination on display. I'm not sure I've ever read a book that contains the combination of highly memorable characters and expansive world-building in such a small amount of space while sustaining an actual story.

This is one book that comes out of the attic and goes on the bookshelf, there to stay until it is read again. It's also a reminder (in case you missed the whole Harry Potter thing) that just because something is called a children's story, doesn't mean that it isn't good for adult readers.

Sunday, August 23, 2009

A Real Life Zombie Study

After heavy amounts of overtime yesterday, I feel like a zombie myself, so it seems the perfect time to link to the story of scientists analyzing a zombie outbreak.

Sunday, August 16, 2009

A Couple of Quick Notes

ArsTechnica's guide to facebook privacy is a nice resource in case you don't want everyone seeing everything, and a reminder of where to find some of the settings you want to turn off.

The fair use doctrine says it's legal for a person to make a backup copy of their own DVDs, but it's illegal to make and sell a tool that allows people to make backup copies of their own DVDs. Whowah?

On the Impact of Tools

"We've got the tools, and we've got the talent."
--Winston Zeddemore, Ghostbusters

In prepping for a trip this weekend, I pulled out my car's spare tire and made sure it was inflated correctly using a portable air compressor.

Earlier this week a colleague needed to sort a particular file, but it was too large to load properly in Excel or OpenOffice Calc. I was able to sort it with a text editor call VIM.

In drawing class we learned how softer graphite pencils can be used to create darker tones than hard graphite pencils. And we used them in concert to take advantage of the properties of both.

With some input from a friend, I took my hand-me-down guitar to a repair shop over the weekend and learned that it basically wasn't worth the money to repair. But playing a new guitar for the first time was astonishingly easier because the strings were at the proper height my old one never achieved.

All creative endeavors have one thing in common: if you are going to create something, you are going to use tools to help you do it. Indeed, tool use is a primary hallmark of our species, and we take it to some astounding ends. Cars, rockets, cell phones, computers, and software all help us achieve our everyday goals. Even the relatively simple tools we take for granted, like pencils, pens, scissors, paper, and pocketknives have a long developmental evolution. The right tools, at the right place, in the right hands, at the right time, can change the world.

So this week I was remind not to be afraid of investing time and money in good tools, at least basic ones, for the jobs and hobbies that are necessary or important to me. The long term improvement in the results will be well worth it.

Sunday, August 9, 2009

A Little Bit of Star Trek

August has arrived in force at last, and a sultry summer Sunday begins a new week. The past one was incredibly busy for me, with work devouring more than its normally allotted time. So in spite of it sitting in my player day after day, it took me until tonight to finish off the last episode of Star Trek season one.

The original has always been my favorite of the Star Trek series, and the first season is packed fairly solid with good episodes. And yes, I'd seen them all before, though not quite like this. This time around, I'm watching them in quality beyond what the makers of the show could have dreamed at the time: 1080p. The remastered, reworked, re-special-effected episodes are almost shockingly good looking. Listening to the commentaries and watching the new special effects, it's obvious that this was a labor of love by people who wanted to pass on a show that affected them deeply to a new audience. The care taken to preserve the sixties style in the new effects, even the quirks, shows a great reverence to the show and a deep respect for the fans.

Given how familiar the show is to me, and its age, I was expecting to be able to revel in the aspects that should inevitably seem campy to my supposedly more sophisticated eyes. I was expecting to see the relatively primitive make-up and effects of the time for the stage dressing they were. William Shatner's performance as Captain James Kirk has become such a part of the shared culture of sci-fi that we are more familiar with the exaggerated parodies than the original. And the other characters have become equally iconic. To my surprise and, frankly, delight I find the show holds up tremendously well for me. It's nice to watch the performances again for what they were. Shatner, Nimoy, Kelly, and all the rest took the writers' words and gave them a reality that still resonates. And for a brief moment, I can give in to the story and be just as captivated now as I was as a kid.

But I am older now, and inevitably I see things differently. Instead of focusing on cool ships, energy beams, strange aliens, and exotic worlds, I now see the things that Star Trek showed that were truly rare. Duty, honor, trust, respect, friendship, and ever fleeting love: these are the voyages of the starship Enterprise.

Thursday, August 6, 2009

Quote of the Moment

"You have the power to create worlds. Why would you just make one that already exists?"
--Sean Sands, in an essay on art style in video games.

Sunday, August 2, 2009

A Brief Retrospective

Well, July is past and gone. It's less than a month until football season. As we enter the hot, sticky run toward Labor Day, what have I learned so far this summer?

Recently, I read evidence the stock market is even more broken that I thought.

There are way too many people without jobs this summer. I really hope that turns around.

Apple owns the $1000+ computer market segment. Of course, that might be because the average sale prices for a Mac laptop or desktop are more than double those in the PC market. In a mostly unrelated note, heaven help me, I actually want the iPhone to come to Verizon.

Top Gear remains the height of awesome, even though I'm not a car guy. And in his off time, one of the presenters is building a house out of Lego brand building bricks.

Limeaid: rum; Lemonaid: gin; Gatorade: you're doing it wrong.

To properly appreciate The Daily Show and Wait, Wait Don't Tell Me, you need to keep up with the current news. Also vice versa.

Programming in my free time would require larger blocks of free time than I currently have.

I still prefer computer gaming to consoles. But even four years after my back surgery, I can't take sitting in a chair for 12+ hours a day. Maybe I need a better chair. On the subject of computer gaming, World of Warcraft isn't much of a single player game, but it gets better when you can group up with someone you know. It lives and dies by the Diablo loot drop style, which happens too slowly when you are on your own in the game. Great artwork job though. Also, Team Fortress 2 remains shockingly fun.


Waterfalls are pretty. Even small ones.

And while learning things is great, it's also good to keep a question or two handy going forward. Things like: will Chuck keep its fun quotient up in the third season? Should I get my old hand-me-down guitar repaired, or just get a new one that's in better shape? Are electric guitars easier on the poor typing hands than acoustics, and how does that play into the previous question's answer?

Personally, I'm ready to begin the run toward autumn. But I also don't want to forget the lessons and fun of the past couple of months. After all, it's been a pretty good summer so far.

Saturday, July 25, 2009

The Government, the People, the Businesses

Thanks to the political climate of the previous administration, government secrets have been much talked about. ArsTechnica reports on a NSA surveillance program so secret that it became virtually unusable. I won't say any more about this. (They are probably watching...)

Science issues also remain perpetually in the news, and a new Pew study sheds some light on why. It seems the public largely admires and trusts scientists, but their views on the conclusions of the scientific community differ. There is also a huge political divide. Again, thanks to the previous administration, this isn't exactly a surprise.

I have long believed that the stock market optimizes for the wrong variable (quarterly profit growth) with only secondary regard for quality or customer satisfaction. Software consultant and author Bruce Eckel writes about what it might be like if a business really, truly focused on its employees. I think he's making a mistake by leaving the customer out of the equation, but thinking differently about business would certainly seem to be a good idea in a steep recession time like this.

It would be easy to look at these three isolated stories, declare the Bush administration an Epic Fail, and move on. Sadly, I see a bigger pattern at work. What does one do when education, government, and industry all show signs of failure at the same time? Well, how about you folks with kids teach 'em how to learn, teach 'em compassion, teach 'em ethics, and give 'em a hug every night before bed. They're going to have a mess to deal with if we don't work it out. No pressure.

Let There Be (More Efficient) Light! Please.

Light bulbs are an obvious place for power savings that everyone can take advantage of. The best cost/value currently comes from compact fluorescent lights, but they have a couple of huge drawbacks. They don't emit a full spectrum of light the way an old fashioned incandescent bulb does, and they contain hazardous mercury vapor. Happily, other avenues are still being pursued including something that improves the efficiency of incandescent bulbs by thirty percent and last three times longer. Scientists are still working on my pick for eventual winner, light emitting diode technology (such as this breakthrough that can improve OLED efficiency by seventy five percent). Of course, we live in a capitalistic society and as the New York Times noted last year, how do you sustain a business on a product that lasts as much as a hundred times as long as current bulbs?

One Person's Solar Power Example, A Year On

I've linked a couple of times before to Loyd Case's personal experiment with solar power. Now his final story is up analyzing his year with solar power generation. A practical application shows that solar power for a single home isn't quite cost competitive yet, but it can really make a difference on a power bill. I wonder what the system would look like for folks that use a more normal level of power than Mr. Case's family.

Sunday, July 19, 2009

About Harry Potter and the Half Blood Prince

Basically, there are two types of people who could potentially see this post, those who are already watching the Harry Potter movies, and those who aren't. The first group knows the almost miraculous quality the movies have sustained, meshing a group of unknown, untested child actors with an all star cast of supporting actors from the generations that preceded them and having those children manage to grow in their craft as well as their stature before our eyes. Making one good movie is hard enough, making six that manage to not only stand up to one of the most beloved series of books ever, but actually compliment them is frankly astonishing. The Half Blood Prince manages to do something its predecessor Order of the Phoenix didn't quite do, compress it's giant book worth of source material into a coherent whole that didn't feel rushed or make you miss the things which were cut. Standouts include Alan Rickman's once again note perfect portrayal of Prof. Snape, a scene stealing Helena Bonham Carter, and Bonnie Wright's Jenny Weasley stepping out of the periphery in a big way.

By the time you read this, the movie will have already set all sorts of box office records. And really, those already involved in the series don't need any further encouragement. If by chance, you are in the group that hasn't started watching the movies, this is one time where following the crowd will net you some seriously good entertainment.

Headline Hunting, Sort Of

Maybe it's because I watched an old Star Trek episode called "Space Seed" over the weekend that the headline "Emphatic Khan claims world title" didn't make me think of boxing. Then again, I could just be a huge nerd, because to me, the phrase 'emphatic Khan' can only conjure up one image:


Sunday, July 12, 2009

Future Shock, Today

A few days ago, I attempted to order a couple pizzas over the phone as I have done dozens of times before. Instead of the usual human voice, I was greeted by an automated system. This prompted me to hang up. If I'm not going to talk to a human, if I'm going to be forced to interact with a computer, I might as well do it using a better interface than the phone. A quick web form later, and the pizzas were on their way.

Reports show sales down for stand-alone GPS devices because they are being displaced by "smart phones" with essentially the same capabilities. Fewer and fewer people are wearing a wristwatch because they use their cell phones like a pocket watch. Anecdotal evidence would indicate the phone part is the worst feature of the iPhone.

I have gadget lust for e-book readers, because currently, I have to clean off my bookshelves to make room for new reading material. Having books stored electronically solves the space problem (and a weight problem next time I move), and the readers wouldn't cause eye strain the way using a laptop to read does. But they also put my beloved book stores on the endangered list.

Currently, the iPhone and e-book readers are well outside my budget constraints, but they are also very young technologies (essentially production version 2 for both). We are less than six months from the year 2010, and you know what? If you stop and think, it kinda shows.

Sunday, July 5, 2009

Space Station Flyovers

Well, I just ran across this. The International Space Station is going to be flying over the US quite a bit this week. If you've got kids who would like to see the largest spaceship ever built with their own eyes (or binoculars or a telescope) take a look here for spotting info. Hey, maybe you would even get a kick out of it yourself.

There Is No News This Week

This week has been a vacation week for me. There will be no substantive post. Instead I give you this, which you may prefer in the long run...

Sunday, June 28, 2009

How Stack Overflow Makes Me Sad

Douglas Adams's novel The Restaurant at the End of the Universe describes a torture device so heinous that the planet where it is located became known as the most evil place in the universe. The device is called the Total Perspective Vortex, and it works by giving the poor soul put into it a glimpse of the entirety of the universe while showing them exactly what the victim is in relation to it. It is reportedly a horrific, mind blasting experience. Recently, I've been thinking about the Total Perspective Vortex often.

Like many programmers I do tend to surf the net while waiting on compile cycles to complete. And since the compile cycles on the product I'm currently working on are... non-trivial, I get the chance several times in the typical day. As a rule, I try to keep myself generally looking at programming topics. It is work time, after all, so I might as well try to expose myself to things that will improve my job skills. This tendency has led me to peruse a site called Stack Overflow. The site sprang from a partnership between Jeff Atwood and Joel Spolsky, both prolific and well known bloggers within programming circles who's work I already read and enjoy. Naturally, when they announced they were teaming up to create a web site where programmers could ask and answer questions, I was intrigued. The idea was sound, the implementation worked well, and their respective audiences gave the site the critical mass it needed to generate a large base of questions and answers quickly. Mr. Atwood even added an XBox 360 inspired achievement system to introduce and encourage behaviors on the site. Stack Overflow to all appearances has been a huge success so far.

As a programmer it's hard not to get excited about a site that allows you to tap the collective knowledge of a large number of people to help you. And since I actually answered a question, I can also say that it's a pretty huge rush to be able to help a random stranger using only the power of your brain. But this is also where things begin to break down a bit. There are a whole bunch of questions posted (over two hundred thousand at the time of this writing). The questions cover all manner of programming languages, platforms, tools, applications, and domains. When I browse through them, I am reminded just how big the programming field is, and how little I really know. Apparently Stack Overflow, to me, acts as a job specific version of the Total Perspective Vortex.

The character in Adams's book who was put into the Vortex just happened to be in a small simulation created just for him, so he survived the event because the machine told him he was actually important. I can take similar consolation from the idea that Stack Overflow was created for programmers like me who know next to nothing of the infinite set of topics out there, and who struggle to be able to write cogently about what little we do know. It's another place to practice the art and to learn new things. And in the end, isn't that what life, the universe, and everything is all about anyway?

Saturday, June 20, 2009

Fusion Reactions and Economic Reactions

In the imaginary sci-fi world that lives in my brain, power is often generated by "micro-fusion" reactors. In the real world, containing fusion reactions requires a massive amount of power and huge electromagnets to create the magnetic fields that keep the plasma fuel where it needs to be. This contributes to the continued failure of fusion plants to produce more power than they consume. A new theoretical discovery may begin to change that, if it works. A different configuration may allow fusion reactors to use magnetic fields an order of magnitued less powerful than current designs. They could also be much smaller, which would be nifty because smaller could also mean cheaper.

Speaking of cheaper, the economy is driving some interesting reactions as well. While these things aren't strickly "green" they have some green side effects. The money crunch in the California government has lead the govenor to call for the use of online textbooks instead of dead tree versions. If I had any sway at Amazon, I'd be attempting to get Kindles into the classrooms right now. Even at nearly $500 a pop for the big, fancy version, it wouldn't take long for them to be cheaper than textbooks. In any case, taking advantage of electronic resources just makes good sense, as long as concessions are made to ensure those resources are available to all students.

Some areas in the U.S. that have been emptied by the decline of manufacturing have started looking into even more extreme greening. They are talking about razing unused sections of cities and allowing them to be reclaimed by nature. This is one of those things that for me sounds both wacky and profound. One way or the other, the economy is certainly going to play a huge part in the changes that come over the next decade or two.

Back to the Usual (Lack of) Business

An impending major deadline at the office, and the resulting crunch mode has shut down work on EAR for the time being, and that means it's back to the normal brand of nonsense found here. But first, something a bit different...

I don't normally find my neighborhood in the local news. Like countless other townhouse communities across the nation, we're a pretty quiet bunch. This changed slightly when the farm animals started roaming around. I'd been hearing a rooster as I leave to go to work in the mornings for a long time, which wasn't a bother. The mocking birds are far louder when they sit on the fence outside my window. Seeing a turkey wandering around one weekday at lunch was an oddity. But it was the cow running past my front window one Saturday morning that really made me take notice (and briefly wonder if I had finally cracked). Mentioning it to a neighbor, I was told about the pony. And the calls to animal control. Things came to a head this week and here's the resulting story. I urge you to also read the comments afterward as the report left several key points out. (There's a reason I don't subscribe to the local newspaper.)

Wednesday, June 17, 2009

Just an Observation

Today I've seen a surprising number of people posting to the Internet via various means whether or not a software update for their phone has been completed. They seem excited. About a software update. For their phone.

Metaphorical Toto, we're not in metaphorical Kansas anymore.

Sunday, June 14, 2009

Analog Go Bye Bye

Did everyone survive the digital television transition?

Wednesday, June 10, 2009

The Summer Project 2009, Part 6: Interface Beginnings and Project Analysis


One of the oddest things about programming is how much work it takes to make something actually visible. Above, you see the beginnings of EAR's primary interface, with the account entry and selection section at the top, the transaction entry section at the bottom, and a swath of nothing in the middle where the register should eventually be. That folks, results from three weeks of spare time programming, mainly because it's been quite a while since I last visited the Java User Interface libraries some four versions ago.

Functionally, adding and renaming accounts works, as does adding transactions to accounts. (Of course, you can't see the results of that last bit in the UI.) User interface code consists of creating the little fiddly bits that make up the visible part of the program, and telling them where to put themselves and how to behave. The hard part is making sure they do what the user expects, making sure the data they produce is valid, and generally making the UI connect to the underlying data model in a way that is robust. After all, you don't want someone to be able to enter an amount of Thursday in a transaction. (In the interest of full disclosure, at the moment, you can type an amount of Thursday in EAR, and it will cause any attempt to add the transaction to quietly fail.) Unfortunately, I can't really think of much generally interesting to write about the details of this work. Unless you want to discuss the different forms and functions of the Java widgets or how they are laid out or how to use a Java enumeration to populate a drop-down selection box, there isn't really much to say here. Fortunately, I have something else to write about.

Periodically during the development of a project, it's a good idea to take a step back, evaluate, and see if things are moving in the right direction. Here's what I've learned so far.
  1. Sun has done a magnificant job with the Java documentation. Between the API specs and the tutorials, it's extremely easy for someone with a minimal amount of experience with the language (e.g. me) to answer questions without resorting to Google. Kudos.
  2. Yes, I can still program at home, and it's still fun. What I can't do is string three or four hours together to do it. That has severe productivity consequences.
  3. Writing about programming takes longer than programming. (This one hopefully reflects more on my writing ability than my programming ability.)
I'll admit, the last two are more germane to the discussion, but I couldn't let the first one pass without mention. Good documentation is a rare and beautiful thing. Anyway, the EAR is making progress steadily, but slowly. I set out on this project primarily to discover something about myself, and I've learned what I needed to know. Along the way I've picked up some new Java tricks. For me, the project has already accomplised its mission. Don't worry though, I can't quit until we at least make an attempt at displaying transaction registers, saving, and loading. That empty grey expanse in the middle of the UI is just ugly.

PS: Extra points if you are paying close enough attention to notice what part of the data model I've left off the user interface.

They Still Haven't Found What They're Looking For

It's been a while since I looked at the search terms that lead people to this site. (I'm small time, so looking doesn't take very long.) Someone actually searched on "javac ear" and ended up here. They didn't stick around. I guess my summer project wasn't what they were after. I'm not so sure how "norman matloff new york times" even directs here. Shockingly, they didn't stick around either. My favorite one for the past month has got to be "informal stream of consciousness." You can't get any better than that at describing what's going on here. Oddly, that person didn't stay long either. Maybe I wasn't informal enough?

Saturday, June 6, 2009

The Summer Project 2009, Part 5: a Data Model and a Screenshot

Writing code at last. First, we implement the pieces discussed in part 3. With our design in hand it's a fairly mechanical process, but already there are details to be filled in. I chose for now to go with simple things that would get me started but that may need to change later. For instance, here's the Portfolio class so far:


import java.util.*;

public class Portfolio{
public Portfolio(){
accountList = new ArrayList<account>();
categoryList = new ArrayList<string>();
}

public void addAccount(
Account theAccount
){
accountList.add(theAccount);
}

public ArrayList<account> getAccounts(){
return(accountList);
}

public Account getAccount(String accountName){
Account result = null;
for (Account anAccount : accountList){
if (accountName.equals(anAccount.getName())){
result = anAccount;
break;
}//if
}//for
return(result);
}

public void addCategory(
String theCategory
){
categoryList.add(theCategory);
}

public ArrayList<string> getCategories(){
return(categoryList);
}

private ArrayList<account> accountList;
private ArrayList<string> categoryList;
}


I'm representing the categories as strings (a simple, liner group of characters) rather than giving them their own class. Since the categories don't have any attribute other than their name, it seems OK for now, but it does have some implications. Without giving them some level of existence beyond just the text of their name, the rename operation becomes meaningless. Changing the contents of a string creates a new string, but changing the name of a category doesn't create a new category. It's a good example of the trade-off between complexity and functionality. Simple code is always better, except when it fails to deliver a needed capability. Whether this particular choice becomes a problem will depend on how often we need to rename categories.

This Portfolio object and the collection of objects it contains form the underlying representation of the program's data. It is, in theory, everything EAR needs to keep track of. In programming parlance, it's the data model. And while the data model is the core of the code, it's not the whole story. We still need a way to show the data to the user, and a way for the user to manipulate it. We need a User Interface, or UI for short.*

The skill of making a good user interface goes beyond what it takes to write good code. Once you bring in other people into the equation, you get into the realms of design, usability, and aesthetics. Programmers, being programmers, generally tend toward making legendarily bad user interfaces. However, I'm all we've got for this project, so we'll just have to see how it goes. I tend to start off with a couple of pencil sketches debating how to organize things before I dive in, and EAR is no different. But before we can even get to the main program, we have to decide what actually happens when the program is run. It seems to me we have to do one of three things when the program starts (not counting run in fear):
This piece is actually fairly easy to do. Java provides a built-in mechanism for asking a question with three possible responses. It's just a custom version of the yes/no/cancel dialog you've probably seen before. As always, there are some subtleties, such as making sure that the option to open the last portfolio used is selected when the program runs so you can just hit the space bar or enter to get on with things. Unfortunately, not all of these buttons are going to work right away. We haven't actually thought about saving and loading data yet, and we won't for a while. So for now, we'll have to stick with the third option. Next time, we'll start in on the main UI so we can have something to display when that third option is chosen.

* Formally, the data Model is joined by a Controller and any number of Views. These pieces respectively provide representation, manipulation, and presentation of data. They aren't necessarily separated in a program's code, but they can be, and it often makes for a better program. In practice, this pattern gets used often enough to have its own acronym: MVC for Model-View-Controller. Naturally, I will be taking the lazy approach by combining the controller and the views for EAR in the User Interface.

Saturday, May 30, 2009

You Didn't Have to Drag Me To Drag Me To Hell

The afternoon is beautiful, sunny, and warm today. Naturally, I went to sit in a dark theater and watch a horror movie. I was interested in Drag Me to Hell both because of its pedigree (written and directed by Sam Raimi of Evil Dead, Darkman, and Spider-Man fame) and because of its rating. It's a PG-13 horror flick. Horror writers who keep to the restrictions of the non-R rating can't fall back on excessive gore, nudity, or constant f-bombing to entertain an audience, they have to stick primarily to actually telling a story. The end results of these attempts usually end up being very good (The Ring, The Others, The Sixth Sense) or very, very bad (The Ring 2, The Grudge, Critters, almost everything the Sci-Fi channel shows on weekends). Happily, Drag me to Hell is one of the good ones.

I've seen the description "old school" in several reviews, and it's pretty appropriate. The movie is deliberately paced and uses the musical score to get the tension up. It's also very campy, but good campy, and more than a little over the top in places. Drag Me never goes quite as nuts as the Evil Dead series, but there are certainly moments that evoke Raimi's old franchise. While the plot is nothing really new (a selfish choice, a gypsy curse, a tormenting demon), and the big twist is very obvious, the way the elements are combined works very well for the film. There's a scene involving a set of dentures that left me both cringing and chuckling. In fact, Drag Me is packed with scenes that have the same effect. And really, what more can you ask of a campy horror movie?

The Summer Project 2009, Part 4: Tooling Along

The preliminary requirements are in hand, as is a data design. It's time to start putting this thing together. First up, we need a name. Sometimes program names come from marketing departments which have carefully researched the potential customer base, checked with legal to make sure the finely crafted and evocative branding isn't already trademarked or in use, and otherwise fully researched the situation. Mostly though, this doesn't happen until later, and some nutty programmer or manager just makes up a name. Silly acronyms are perennially popular. And so in that spirit, I dub Summer Project 2009 the Electronic Accounts Register. Yes that's right folks, if you are having trouble tracking your money, try sticking it in your EAR. With a name chosen, and a handy catch phrase, the actual writing can begin.

So what do I write it with? Like any craft, programming requires a set of tools. The better the fit between your tools and the task at hand, the easier it will be to accomplish. Unfortunately, it's nearly impossible to talk about programming tools without wading into a bit of a jargon swamp. We might as well get it out of the way.

Virtually all computer programs are written using one or more formally defined programming languages. These languages allow a programmer to control the computer without dealing directly with the streams of numbers that the machine actually uses internally. To be able to use a programming language, tools must be provided to translate the programming language into the stream of numbers the machine understands. These tools are called different things for different languages (compilers, interpreters, translators, and more) but they all work similarly. You feed in the programming language "source code," and the tools "build" the program.

I've chosen to write the application using the Java programming language. Java brings the ability to run on all the major consumer Operating Systems (e.g. Windows or Mac) without needing to rebuild the program for each one. And it has a quite extensive built in library for creating graphical user interfaces. Both of these allow me to keep external dependencies to a minimum. All I will need to develop and test the application is the standard Java software development kit, and all I need to run it is the Java Runtime Environment.

I'm going to be taking a fairly old school approach to writing the code: a simple text editor and command line tools. Most software development these days uses massive programs called Integrated Development Environments that gather a whole host of programming tools into one place. And they are quite nifty, but I'm yearning for something a bit simpler. For an app as small as this one will be I can get away, at least for now, with just sticking my source code files into a directory and running them through the tools manually.

Did I say manually? That's crazy talk. Typing all those commands over and over would be a highly repetitive waste of time. Luckily, programmers tend to be creatively lazy, so there are all sorts of tools out there to automate the process of running a bunch of source code through the things that build programs. I'm going to be using one such tool called rake. Basically, you provide a file that describes how the program is built from the source code, and rake does the typing for you. (And if writing the description file sounds awfully similar to how I've described programming, that's because it is.) Rake also has the ability to check and see what has changed since the last time the program was built and skip rebuilding pieces that don't need to be rebuilt. This can be a huge time saver in large projects. Since we've gone this far without seeing any code, so I'll show you the rake description file for the EAR project as it exists right now.*


task :default => [:build]

task :build => ['Ear.class'] do
end

task :run do
sh 'java Ear'
end

task :clean do
sh 'del *.class'
end

task :rebuild => [:clean, :build] do
end


file 'Category.class' => ['Category.java'] do
sh 'javac Category.java'
end

file 'CategoryValue.class' => ['CategoryValue.java', 'Category.class'] do
sh 'javac CategoryValue.java'
end

file 'Transaction.class' => ['Transaction.java', 'CategoryValue.class'] do
sh 'javac Transaction.java'
end

file 'Account.class' => ['Account.java', 'Transaction.class'] do
sh 'javac Account.java'
end

file 'Portfolio.class' => ['Portfolio.java', 'Account.class'] do
sh 'javac Portfolio.java'
end

file 'Ear.class' => ['Ear.java', 'Portfolio.class'] do
sh 'javac Ear.java'
end


If you stare at it long enough, you might even be able to tell what it's doing. Lines starting with "sh" are commands, just like you would type at a prompt if you were doing stuff manually. The arrow-like marks indicate dependencies. For example, the build task at the top depends on the Ear.class file. The Ear.class file (at the bottom) depends on the Portfolio.class file and the Ear.java file, and so on. As you may have already figured out, the files ending in ".java" are the source code, and the files ending in ".class" are the pieces of the actual program.

At last, with the tool chain in place, it's time to start writing the program.

* A word to my fellow rake users: I know full well the rakefile could be smaller and "simpler," but it sure makes for a straightforward example. Besides, I'm fairly new to rake myself, which means the more verbose version makes more sense to me too.

Sunday, May 24, 2009

Remember to Remember

"True heroism is remarkably sober, very undramatic. It is not the urge to surpass all others at whatever cost, but the urge to serve others at whatever cost."
--Arthur Ashe

To those who have gone before and those who are serving now, one small thank you.

Saturday, May 23, 2009

About That New Terminator Movie

I enjoyed it. Not as much as Star Trek, or Terminator 2, but more than Terminator 3. The trailer gives away the big twist in the movie, not that it's all that shocking to begin with. They've got that over-saturated-gray thing going too much in the wasteland. (Dear movie and video game industries, get a new shtick for ruins now please, this one doesn't look as good as you seem to think it does.) For those that care at all about such things, the movie appears to follow the continuity, such that it is, of the previous movies, completely ignoring The Sarah Connors Chronicles. Lots of action, big robots, nods to the previous movies, and not much else. Like Star Trek, this is a well trod property being done up as a big budget summer action flick. It's entertaining, but ultimately brings nothing new to the table.

The Summer Project 2009, Part 3: Data Design

For the first design pass, I want to simply get a basic representation of the required data and operations to see what they look like together. To start with, we'll need something to manage our accounts. For lack of a better term, call it a Portfolio. The Portfolio should allow us to add a new account and retrieve the existing accounts as a group or by name. We might as well keep the list of categories we are using here too, so we need a way of adding categories and retrieving them. That brings us to the accounts, which have a name and zero or more transactions. It should allow us to rename the account, add a transaction, and (eventually) retrieve transactions by any combination of date range and category. Which brings us to the slightly more complex transaction...

At first glance a transaction's data includes a date, a type (check, electronic transfer, charge, etc.), a number (optional), a payee, a category, a monetary total, and status for voided or reconciled. The tricky bit comes with the monetary total and category. They should probably be represented by one thing because we can't have a monetary amount without assigning it to a category. But it gets even more interesting if we allow split transactions, e.g. multiple category/amount pairs. I can't come up with anything clever to name the category/amount pair, so we'll just say Category/Value for now. Functionally, transactions should allow editing, voiding, and reconciling. Categories will start out as just a name and amounts as just a monetary value.

So the first draft of a simple functional specification broken down by class for the data types might look a little like this (plain font items are data, italics are functionality):

Portfolio:
  • Accounts
  • Categories
  • Add account
  • Get all accounts
  • Get account by name
  • Add category
  • Get all categories
Account:
  • Name
  • Transactions
  • Rename
  • Add transaction
  • Get all transactions
Transaction:
  • Date
  • Type
  • Number
  • Payee
  • Status
  • Category/Value
  • Note
  • Edit
  • Mark void
  • Mark reconciled
Category:
  • Name
  • Rename
Category/Value:
  • Category
  • Value
  • Edit
Obviously, this isn't any kind of formal specification, but it does give a nice concise summary of what the data will look like and be expected to do. And since we now have a spec in hand, it must be about time to start actually writing the program.

Sunday, May 17, 2009

The Summer Project 2009, Part 2: Notes on Design Methodology

A great deal of what we call programming is actually breaking down large concepts or problems into smaller ones (a.k.a. decomposition or factoring) and hiding details behind generalization (a.k.a. abstraction). Programmers wield these conceptual weapons against the dread beast complexity, and with our first attempt at requirements in hand we can start to see how they apply in practice. Formally, what we are talking about is how to go from Requirements to Design.

One of the most basic methods we use on initial approach to a problem is to break it down into "things" and "actions." For instance, from our requirements we have several things: account, transaction, category, monetary value, statement, and report. These are the nouns in the language of our problem. The actions are the verbs in that language. Our example has enter, assign, edit, void, reconcile, generate, etc. Notice that the verbs don't really have any meaning without acting on one of the nouns: enter a transaction or generate a report, for example. This is the basic insight behind a style of programming called Object Oriented: every action is tied to the thing being acted upon. (A sentence's verb acts on its object, whence object oriented). You build a program by implementing the objects and their interactions. Most objects have one or more special methods called constructors to create concrete instances of the thing the object describes. To create a transaction, you provide all the necessary data to a transaction constructor which returns an instance of the transaction object with the data you specified stored as fields within the object instance. To add that transaction to a particular account you would tell the account object to add a transaction, passing the transaction object instance to it as part of the command. Object orientation descends from the general theory of imperative programming, a paradigm that describes things via a series of command statements that cause changes to the system.

Of course, the objects and actions view of imperative programming isn't the only way to operate. For example, entity-relationship modeling is how database based systems are constructed, and it descends from the theory of declarative programming. Instead of a program issuing a series of commands to produce the result, the program states the information it wants without regard to how it actually goes about getting it. For example, the form would be similar to this: 'I want the total monetary amount spent under the medical category,' or 'get all transactions from the checking account for the last thirty days.' While this method may sound simpler, it isn't necessarily, and it requires greater infrastructure. (It has to be built on top of something that actually knows how to do the calculations necessary to get the results, usually a relational database management system.)

I can take an educated guess that most of the dedicated applications back in part 0 use the entity-relationship method of looking at the data. But for us at this point, there is no right or wrong choice. Either path will inform how the program is ultimately built. For the purposes of this series, I'm going to start out with the Object Oriented method. Next time, we will actually begin creating a design from our requirements.

Thursday, May 14, 2009

Never Leave a Loaded Limeric Laying Around

There once was a programmer from Nantucket
Who had a very large bit bucket.
He worked for a time
Perfecting his rhyme
But in the end decided, well [The editorial staff would like to apologize for the author's sudden turn. We assume it's the pollen. Or possibly goblins. Whatever it is, it isn't our fault. Nope, we weren't even here.]

Saturday, May 9, 2009

The Summer Project 2009, Part 1: Ye Olde Requirements Gathering

Computers, being machines, do what they are instructed to do, exactly as they are instructed, whether it's what you actually wanted or not. And you can't tell the machine what to do if you can't communicate what you want. Specifically. With every contingency covered. Formally, the task of documenting what software should do (or provide) for the user is called Requirements Gathering. Incorrect or incomplete requirements will lead to a project that doesn't meet its intended need. Overly inclusive or optimistic requirements can lead to epically long schedules and a complete lack of income. Imprecise requirements can lead to bad assumptions and headaches for everyone involved. Requirements gathering is crucial to the success of a software project, and the task goes on from before it is conceived throughout the construction of the software, and often even after a project is complete. It's also a difficult, often thankless task of trying to build a communications bridge between the people who create the software and the people who use it. Neither party tends to have a clear idea of the end goal, especially early in the process. Luckily for me, all the voices I need to hear for this particular project already live in my head.

Now that I've written a whole paragraph about how important requirements are, let me see if I can actually come up with some for my money tracker. Let me see... I need to be able to enter transactions, both coming in and going out, which assign monetary values to descriptive categories. These transactions each belong to a single account, but the categories are the same across all the accounts. There will be more than one account to track. Transactions should be editable, including the ability to void them. I should be able to mark a transaction as reconciled against a statement. Once transactions are marked as reconciled, they should no longer be (easily) editable. I would like to be able to generate reports for a given time period about income vs. outlay and for all the transactions per category across all accounts. That's probably plenty for starters.

I'm intentionally being very informal with these requirements. Sometimes, programmers have the luxury of having a nice, tight, technical set of functional requirements provided to us, but most of the time we don't. Instead, we start with a bit of ambiguity built in, and refine as we go (hopefully with input from all the necessary stakeholders). Next time, I'll look at some ways of figuring out what these requirements mean in the realm of a computer program.

Dracula as it Unfolds

Bram Stoker's Dracula has long been one of my favorite books, and one of the only ones I have ever read that successfully takes the form of a series of letters, journal entries, and doctor's dictations. (Apparently this writing style is technically known as epistolary.) As a result, all the entries are dated, beginning with May the third. A blogger has started posting the book's entries by date in "real time." I think that's a pretty cool idea.

Star Trek Capsule Review

I saw the new Star Trek movie yesterday. For those who might be interested, on the scale of Star Trek movies from V ("What does GOD need with a STARSHIP?", e.g. really bad) to II ("KHAAAAAN!" e.g. awesome), I put it up there with II.

It's going to be interesting to see how Star Trek fans react. It's definitely a different spin on the franchise than the last several TV shows. While the stakes are high, the movie never takes itself too seriously. McCoy and Scotty are played largely as comic relief, as is Chekov, who is there with full on stereotype Russian accent. But the characters are never incompetent, just younger than Star Trek fans will be used to. The reason for that, and the place for this new entry into the Star Trek cannon is explained in a way that perfectly fits into the Star Trek universe. The inspiration for the movie definitely comes from the old series and the movies that flowed from it (especially the previously alluded to Wrath of Khan), and not so much from the Next Generation and its subsequently spawned TV shows. On the whole I think it works better that way.

I have my nitpicks: Much of the movie was shot too close in. Did we really need the bit of Kirk as an angry kid? One scene came off completely contrived, though it had a good payoff. The design work was very uneven; some of the interior ship sets were ludicrous. While most of the Federation ships were given a beautiful retro-future makeover, with the shuttles and the Kelvin being particularly nice, the main enemy ship looked terrible and the new Enterprise was too bulbous in the nacelles for my tastes.

But for every superficial issue I had, there were things thrown in to make fans smile. All the lines that made the characters famous are there. The extreme sports skydiving scene that was so prominent in the trailers was a relatively minor, naturally handled part of the story. There was a green woman for Kirk to canoodle. The Kobiashi Maru. Klingon battle cruisers. Sulu the swordsman. There's even a cooing tribble in one scene for those paying attention.

In the end, this is a different take: a new Star Trek designed as a summer sci-fi action blockbuster. It's an homage, a knowing parody, and a relaunch all in one. Now we get to sit back and see how the box office feels about it.

Headline Hunting

Here's a little gem from the BBC: "Demons 'harmless,' says Vatican." The article is about the movie adaptation of Angels and Demons, but by leaving movie out of the headline, it gives a very different impression, don't you think?

Wednesday, May 6, 2009

Monday, May 4, 2009

Quote of the Moment

"And the skills issue is a red herring; any competent programmer, if given a chance to learn on the job, can become productive in a new software technology within a few weeks."
--Norman Matloff, in a New York Times opinion piece on the state of hiring and careers in computer science.

Saturday, May 2, 2009

The Summer Project 2009, Part 0: Do I Really Need to Do This?

The first question one should ask when confronted with a potential software project is: has someone already done this for me? Under normal circumstances, finding or buying a software solution is always going to be less expensive than developing one. I've got motivation to do this development as a learning exercise, but it never hurts to look at what others have done in the same domain. It's a small part of what business types call market research. To that end, here's a quick survey of the "competitors" for my new money tracking app.

Commercial standalone applications
Examples: Quicken, Microsoft Money
The industry leading solutions, if they can't do what you need you are probably running a small business, and they have a product to help you with that too. I've already explained that these are the basis of what I want, but without all the features I don't use, and maybe some changes for the things I do use. Keeping current with these apps requires repeated monetary expenditure, just as with all commercial software.

Open source standalone apps
Examples: Buddi, GnuCash
Loosly, "Open Source" refers to a type of software license that allows the user to modify the software for their own use. Often these programs are also available free of charge as well. Buddi comes very close to the vision of what I want, but both it and the less user friendly GnuCash use double entry accounting. For my purposes, double entry adds unnecessary complexity to what should be a simple concept.

Web apps
Examples: Mint, Wesabe
Web apps are the coming future that is already here. They can leverage powerful community knowledge and allow access from any machine that can talk to the Internet. And yet... Perhaps I'm a bit of a Luddite, but I don't put my financial information on the web. (Even though I know it's essentially already out there.) Also, I don't trust any web site to still be around in ten years. (Not even my bank, which seems a more reasonable position than it did a few years ago.) One of the best features of maintaining my own records is that I have all the history to look at.

DIY alternatives
Examples: Excel, OO Calc, etc.
Do it yourself bookkeeping using a spreadsheet program is a legitimate solution, but the overhead required to do data analysis can get rough. I don't really have the spreadsheet chops to take advantage of this option. Besides, it puts me right back into being dependent on a program that may change at any time. The largest advantage of this option is the ready and full access to your data.

Honestly, any of these could work, and all have advantages over something I make myself. But stopping now would hardly be educational.

Thoughts on Tomb Raider: Legend and Fallout 3

Tomb Raider: Legend and Fallout 3 are very different games, but that share one thing in common: they both almost worked for me.

Tomb Raider: Legend is probably best compared to Prince of Persia. Both are long running series that have 3D platforming, combat, and puzzle solving elements. Unlike Prince, Legend emphasizes the puzzle solving elements rather than the platforming. Tomb's combat is far better than Prince's, using a more familiar lock-on-target-and-dodge mechanism instead of Prince's button mashing. The environments in Legend are varied and pretty, and the puzzles just confusing enough to slow me down without requiring me to go to GameFAQs for a walkthrough. Tomb runs around eight hours of play time, so it's a bit on the short side. It could have potential replayability due to hidden loot and unlockables, if that's your thing. Lara, the lead character, is given a fair amount of personality (and unlike the Prince, she doesn't sound anachronistic), but the story is weak nearly to the point of being nonsense. Of course, the story is just there as token window dressing anyway. The biggest problem with the game is the one that Prince nailed perfectly: the camera. Throughout Legend, there are camera angles that were perhaps designed to show off the environment rather than facilitate the user's travel through said environment. This leads to numerous occassions where you just have to guess when to jump and hope that everything turns out OK. Naturally, that leads to a fair number of reloads. Legend gave a great first impression that faded somewhat as the game went on. It's a good game, but not a great one. Which brings me to Fallout 3.

I come into Fallout 3 biased in just about every possible way. I love a good computer role playing game, and I love a good post-apocalypse setting. Unfortunately, Fallout 3 is only one of those. The setting of Fallout 3 is right up my alley, and the best aspect of the game is stumbling across something interesting while travelling around its environment. My favorite example was opening up a Vault (think self contained village-sized fallout shelter) to find out, through exploration and a series of hallucinations, that psychotropic gas had been released into its air systems. The Fallout games have a storied history. Fallout 3 does its level best to live up to and expand the world of those games, and I think it succeeds admirably. Unfortunately, the game you have to play to explore that setting is less than fun. The combat system tries to please everyone by blending the turn-based style of the older games in the series with a real-time system. What results from that blend doesn't find the best aspects of either. And the combat happens far too often. The so-called wasteland is filled to bursting with enemies that constantly interrupt the best part of the game, the exploration. The primary plot arc has its highs and lows, and certainly the storytelling makes Legend look embarrising in comparison. Unfortunately, the finale of the game was so poorly handled that it negates a fair amount of goodwill. So much so in fact that the ending is going to be changed in an upcoming batch of downloadable content. Sadly, the art direction comes entirely from the school of oversaturated monochrome. And because it is a console game, there are a fair number of repeating underground and indoor environments that hurt the otherwise reasonably diverse scenery. I put around 25 hours into the game (and I know of at least one person who is over 60 hours in), so it's got depth going for it. Unfortunately, while the setting is brilliant, the writing solid, generally well handled, and even inventive in places, the game you have to play to get at those things never manages to get above mediocre. Personally, I'm hoping that the upcoming Fallout: New Vegas will feature a new game engine, because otherwise, I'll have to stick to my really old school interpretation of post-nuclear Vegas.

Wednesday, April 29, 2009

Headline Hunting

A little pop culture dissonance today with the headline: "Origins of wolverine in California genetically verified." Naturally, it took a beat for me to realize this has nothing to do with X-Men Origins: Wolverine, which opens this weekend.

Tuesday, April 28, 2009

Who Needs Plasma Rings When You Can Use Lasers?

There is more than one (theoretical) way to produce power through fusion. One of them is to use an array of lasers to fire a high enough energy pulse at a fuel pellet to compress it to the point where fusion occurs. Very science fiction-y. But it took a step closer to being reality with the development of a method that allows the lasers to fire as often as once every ten seconds. I still hope to live long enough to see a commercial fusion reactor become a reality, and it's nice to see that progress is still being made.

Sunday, April 26, 2009

The Summer Project 2009: Introduction

Once upon a time, there was a man who programmed computers as a hobby. He liked it so much, he pursued it as a career. But work days were long and programming was mentally taxing, especially when doing it for real people with real money at stake. Still, he loved it, and every once in a while, when the demands of work shifted away from the bits he liked most, the urge to program a little something for himself would rise again. And then one day, he thought about the people who asked him what being a programmer involved and decided to do something stupid. He would begin work on an application he had wanted to do for years, and he would write about the process of developing it. It would be his Summer Project.

Sadly, this little tale of foolishness is a true story. I should warn you at the outset that my track record with summer projects isn't exactly stellar. The image of a southerner sitting on the veranda in a rocking chair sipping iced tea as the sun dips toward the horizon is classic for a reason: it gets hot and humid here during the summer months, often we don't have enough energy to do anything else. But it's currently spring, the dogwoods and azaleas are into their fullest color, and I'm still optimistic.

The project itself will be a simple application to help me track my money. I've been using Quicken for that purpose for years, and it does the job well. It's also overkill for my needs, and annoying in its constant attempts to show me features I don't use. But the real reason I want to get rid of it is because it uses a proprietary data format. I can't read the data using any other means than Quicken itself. It won't even migrate properly from the Windows version of Quicken to the Mac version. At some point something in Windows will change, my version of Quicken will stop working, and all that history I've accumulated will become inaccessible. And I wouldn't mind an app that could run on more platforms than just Windows too. Just in case.

And that's really all for the setup. I make no guarantees about actually finishing anything, or even getting to significant coding. Heck, you may never see this mentioned again. Hobby projects are like that sometimes. The main point of the exercise will be to demonstrate the kinds of things a programmer does, and hopefully learn some things along the way. I'm also not entirely sure of the tone and depth of writing this will need. Hopefully, it won't be too excruciatingly boring.

New Nuc For China and a Solar Buildup

Nuclear power remains the single universally usable source of economical, non-fossil fuel power. Here in America, new nuclear plants are non-existent, but Westinghouse is building its first Generation 3+ nuclear reactor in China. Apparently, not everyone over there favors it, as the Slashdot links demonstrate.

Nuclear power isn't my first choice, but solar still struggles to get its act together. However, signs of improvement continue happening in both research and the commercial market. Scientists are testing a new technique that uses single celled algae to triple the efficiency of thin film solar cells. Thin film cells have certain advantages over the typical silicon cells we picture when we think solar, but they are currently only half as efficient as the silicon variety. As for the commercial side, solar cities are getting a boost from two very different areas: a new wholly solar powered community in Florida and Rome. That's right, the Pope is trying to go from consuming Italy's power to being a power producer.

Friday, April 24, 2009

A Designer Drug for Geeks

Take the shockingly popular, hugely compulsive hardcore MMO, World of Warcraft; add in the shockingly popular, hugely compulsive casual game Peggle. Millions of geeks just cried out in happiness, then were silenced. Because they couldn't log out.

Tuesday, April 21, 2009

Withdrawal Symptoms

Pressure is building in Iraq as well as America to put a date on the withdrawal of foreign forces. I suspect there are forces in America that would be just as happy if troop pullbacks started in late summer or early fall...

Sunday, April 19, 2009

Time Sheds Light on Two Stories

I've got two links for you today with a common thread of needing time to sort out the truth.

A decade has passed since the tragic school killings at Columbine High School in Denver. The story that emerged from those days of outcast boys who played too many video games, were members of the "trench coat mafia," and were ridiculed by other students remains a fixture in the cultural landscape. It's also completely wrong. In depth journalism now reveals a very different, and ultimately more frightening tale of a true sociopath and just how bad the situation could have been. I've been a cynic about the 24 hour news culture for a long time now, but the depths to which the reporting on Columbine was wrong astonishes me. This is one you need to read.

Luckily, the second story isn't nearly as ominous, though it does have ties to dark times of the Cold War. The name Area 51 conjures up legend and myth in equal proportion, and to this day it doesn't officially exist. But now the government has started declassifying the A-12 OXCART program (a progenitor of the SR-71). For the first time, people who were stationed at the famous Nevada desert base can talk about their time there, and the stories are fascinating.

Saturday, April 18, 2009

Thursday, April 16, 2009

Follow-up on Bandwidth Capping

It looks like the outrage of the consumers has won the day against Time Warner Cable's scheduled bandwidth caps. The battle is won, but no doubt the war will continue. Also in the good news column: the router firmware I installed to monitor my bandwidth works like a charm.

Sunday, April 12, 2009

Quote of the Moment

But on the first day of the week at early dawn, they went to the tomb, taking the spices which they had prepared. And they found the stone rolled away from the tomb, but when they went in they did not find the body.
--Luke 24:1-3

Happy Easter!

Saturday, April 11, 2009

This Just In: Monopolies are Bad for Consumers

Time Warner Cable has made the news for preparing to impose bandwidth caps with overage charges on their internet customers in three markets, including my home marked of Greensboro, NC. I'm not going to pretend to be neutral on this issue, since I'm obviously a heavy internet user. I'm against bandwidth caps, they will do nothing but raise my cable bill. I'm not the only one upset.

Stop the Cap! is a good clearing house for details, and it isn't exactly hiding its agenda either. Articles have shown up all over from people in the affected areas, including the local paper. People that use the internet to play games aren't happy. People that produce content for the internet aren't happy. And reporting shows that Time Warner is flat lying about why they are instituting the price increases (and make no mistake, a price increase is exactly what a bandwidth cap really is). It's also telling that the markets this "test" is happening in are areas where there isn't a comparable competitor to cable internet service, and Time Warner is the only cable provider.

All that said, I'm not entirely sure how much bandwidth I use on a monthly basis, but that's about to change. I've taken an old router that had a bad habit of resetting itself every few weeks and changed its internal software. One of the little things that router makers don't really like people to know is that the hardware for the $50 consumer router isn't much different from the far more expensive "business class" router. The software running on the router is a different story. The business class routers have far more options than the consumer ones, which is largely a good idea, since more features would just make an already confusing device even worse. On the other hand, thanks to Time Warner, I find myself in need of one of those advanced features: bandwidth monitoring. I have two computers and an XBox 360 attached to my internet connection, so having the router track bandwidth is going to give me a much more accurate picture far easier than I could get with another solution.

Enter the Open Source community and DD-WRT, router firmware* developed by people not involved with the routers' Original Equipment Manufacturers. DD-WRT runs on a wide variety of consumer routers, though using it voids your warranty. Installing the upgrade isn't quite trivial, but it's pretty close. If you can configure a wireless router (certainly if you have ever updated the firmware on one), then you already have the skills you need.

I'll at least be able to tell just how badly the coming change in cable rates will hurt me. Come on Verizon, you've got just over three months to get FiOS into the Greensboro market before the rate changes from Time Warner kick in. Make the deadline, and you could clean up.

*Firmware is software dedicated to the operation of a hardware device, such as a router or a remote control, among other things.

Friday, April 3, 2009

Quick Friday Updates; Like Twitter, but without the word limit

It's been a busy week, and I'm still recovering from my recent surgery, so instead of depressing news links, I have some random things that I might have posted short form this week.

Everyone have a good weekend!

Wednesday, April 1, 2009

The Stream in the Fishwrap

I'm proud to announce that two of my regular posting formats have been picked up by the News & Record for columns. Headline Hunters will be appearing monthly in the Life section, while Watching the Watchers will be replacing Maureen Dowd's column on the editorial page. Not to worry though, I will still be devoting myself to the regular updating of this page. At least until the advances from my book deals come through.

In other news, Slashdot has gone pink and Google has announced their dating service.

Sunday, March 29, 2009

On Church Unity, or Lack Thereof

A friend of mine has been participating in an exploration into starting a new church of his preferred denomination near his home. The process prompted him to write about one of the great questions about Christianity: why are there so many different denominations and what are the implications toward the faith as a whole? This is in part a response to what he wrote, and also and attempt to consolidate some of the things I have pondered on the subject over the past few years.

Personally, I'm a Methodist. Why? The basic tenants of the Methodist Church match my personal feelings. I suspect, I hope, that's a big reason why people choose the churches they choose. (Other reasons could include: it was close to home, you have a good kids' program, I was raised a [fill in denomination], all my friends go here, etc.) After some thought, I've come to believe that having different denominations is actually a good thing for the Church. For instance, I believe that Biblical Inerrancy and the related Sola Scriptura theologies can actually be dangerous to the Church. That doesn't mean that I can't acknowledge the comfort that people take in such beliefs, or the power of their faith that allows them to hold the beliefs. And it doesn't mean I'm right about the subject. What it does mean, is that the Methodist doctrine embodied by "Scripture, Reason, Tradition, and Experience" is a much better fit for me than some of the more Lutheran denominations.

People need different things. If someone can't in good conscience be a member of your congregation, isn't it a good thing that there is another across the street that might welcome him? In this way, splits between the denominations can help prevent endless doctrinal debates, and allow the Church as a whole to go on with its work. God has provided through his flawed people a place where I can go with my beliefs, and a place where others can go with theirs.

Here, I will reference the eloquent words of Romans 12, which were written about individual believers, but I think can be applied to the role of denominations in the wider Church:
"Each part gets its meaning from the body as a whole, not the other way around. ... Each of us finds ourselves fashioned into these excellently formed and marvelously functioning parts in Christ's body, let's just go ahead and be what we were made to be, without enviously or pridefully comparing ourselves with each other, or trying to be something we aren't."

This isn't to say we shouldn't worry about the correctness of our faith or the spiritual health of those around us. And I don't want to imply that I wouldn't love to see the denominations consolidate behind the true core tenants of our faith. But I do want to emphasize that denominational differences aren't as pronounced as they sometimes seem, and there's always something you can learn from someone who doesn't follow the same path you do. Even if it's just apologetics. Brian McLaren provides his story of learning about and from other denominations in the book A Generous Orthodoxy, and I found a great deal of food for thought in it.

What I'm trying in my meager way to get across here, is that if you are worried about the people around you (and you should be) and your denomination's place among other denominations and the world (and you should be), then there is always one simple thing you can do. Follow the example of Jesus: love one another. Believe me, doing that is hard enough to keep us all busy.

Thursday, March 26, 2009

Quote of the Moment

"There are no limits. There are only plateaus, and you must not stay there, you must go beyond them."
--Bruce Lee

Tuesday, March 24, 2009

Battlestars That Pass in the Night

I hesitate to write about the series finale of the latest incarnation of Battlestar Galactica. There's an old bit of advice, you see, about what to do when you don't have anything nice to say. After the second season, the show collapsed under a lack of forward planning. Each season's ending pushed the show further and further into dark corners I had no interest in exploring. The most interesting characters were railroaded out of the main plot. Later stories failed to maintain continuity and undermined the actions taken in earlier seasons. The finale played out along the same directions the rest of the show had been going: a story that for me was neither interesting nor held together. Executive producer Ron Moore said in interviews that the series finale finally came together when he realized it was a character story. In his words, "It's not about the plot." And that right there pretty much sums up the highs and lows of the series. For me, the new Battlestar is a squandered opportunity. But the truth is, for two years, there was nothing else on TV I looked forward to more.

My bias here is hard to top. I'm a complete nut for spaceships. I'm a total post-apocalypse junkie. That said, Battlestar took the idea behind a campy late 70's attempt to cash in on the popularity of Star Wars and treated the idea seriously. I love the concept, and as a kid I loved the old show. (It really doesn't hold up well to adult eyes.) In the first two years, before the show blurred the line between the humans and cylons, it was an outstanding example of some of the best traits of science fiction. It deserves all the accolates it got for treating real world subjects with frank respect. The spaceships and space battles were beautiful, yes, but the stories about people faced with holding their lives together under impossible conditions were well done. Religion and politics were treated with an equally open hand and left for the viewers to interpret. The very first one hour episode "33" stands as a brilliant, tense, dark masterpiece, and remains the single best episode. The arrival of the Battlestar Pegasus and its look at the choices made during a time of war stands as the high point of the series.

As always there are bad actors and good ones (I'll point out Michael Hogan as Saul Tigh as the exemplar for the good actors) and poor episodes along with the great ones. But for my money the first two seasons of Battlestar Galactica stand up well, not just when compared to other space operas like Star Trek, Babylon 5, and Firefly, but against TV drama in general. As for the last three seasons, I'm awfully tempted to say frack 'em. But that would be both crass and incomprehensable to people who haven't seen the show. What I'll say instead is: after a very promising start, I didn't like how the story played out, but there are plenty of people who disagree. Your milage may vary.