Tuesday, November 17, 2009

Auditory Sophistication

Two weeks ago, we added a large new item to our home: a piano. It is a beautiful black upright piano. My wife and I have always wanted to buy one, and we determined that we could afford one this fall. So when pianos went on sell last month, we dove in.

Since then I've been enjoying my wife's playing. I wish I could play something that resembled music. But I'm content to just listen. Our home has some interesting acoustic properties which sends all the sound from downstairs to the upper floor. That has been annoying at times, but it means I can hear the piano from pretty much anywhere in the house.

I look forward to having music in our home. I feel that it brings a certain level of refinement, especially as classical pieces are played. Although they probably won't like it at times, I intend to insure that our children learn to play.

It is a very welcome addition to our home.

Saturday, October 31, 2009

Castles Uncrashed

After the recent debacle of my XBox 360's hard drive failure, I had resigned myself that my saved data was gone. So you can imagine my surprise when I fired up Castle Crashers the other day and found that my saved data was there!

Apparently the data for Castle Crashers is not saved on your hard drive or memory unit. Instead it is saved somewhere in the cloud of XBox Live. And I am certainly glad it is, because that was the most annoying save to lose.

Saturday, October 24, 2009

Death of a Hard Drive

Two weeks ago, my XBox 360 HDD decided to fail. I was playing ODST and got a "disk read error". I reset and played some more, only to have it freeze again.

Needless to say, this upset me quite a bit. I had heard about ODST disk read errors, but had not been bitten by one until then. I thought that's all it was -- an annoying pain for that game. So I tired off the console and didn't think much on it.

It wasn't until that night that I discovered how deep the trouble ran. My brother was coming over to play some ODST with me, so I fired up the XBox. A single red light appeared on the lower right of the ring.

"E68," said the XBox.

"Oh no. That can't be good," I said. 

The next 30-60 minutes found me searching for solutions online and repeatedly trying to resuscitate the dying HDD. But it was to no avail. It was dead, Jim.

My brother and I still had fun playing ODST Firefight, but we couldn't play with friends online and none of the medals went to my Bungie.net profile.

The unexpected loss of the hard drive left me grieving. Some research revealed that recovering my saved games would not be very likely. The most painful losses would be my Castle Crashers save and my RockBand 2 save.

I considered my options, all of them stupidly expensive.

  • I could forget about hard drives and get a memory card instead. Then I could play online, but wouldn't have all my RockBand downloads. The memory cards are cheaper than a new hard drive, but still cost way more than they should.
  • I could shell out the coin for a new HDD. This seemed like the best solution, but I was daunted by the expense.
  • I could splurge to get a new XBox Elite from Best Buy. I could then get their awesome replacement plan in case things went South. But then I'd have an extra console and a hole in my wallet.

Before making a decision, one of my best friends helped me test and then disassemble the old hard drive in the hopes of recovering some data. No dice. The failure was complete -- the drive is just a brick now. I very much appreciate my friend's help though. 

Finally last night I made a decision and bought a new hard drive. Unfortunately, Best Buy doesn't do their replacement plan on just the hard drives. Oh well.

So now I'm starting over. One nice thing about XBox Live is that it tracks what you've downloaded and let's you re-download those items anytime. Thus I'm back in business. I'm sure I'll miss my save data, but them's the breaks.

And so goes the tale of woe which is the Death of a Hard Drive.

Monday, September 28, 2009

ODST Review

Last week I dropped into Halo 3: ODST and I've really been enjoying it. (My wife would probably say I've been enjoying it too much and shouldn't stay up past midnight playing games, even if it is a Friday night). I've been sad to see it receive mediocre-to-bad reviews in the media, so I figured I'd put my opinion out there. I hope this review will tip the scales for some of my friends who haven't picked up the game--I need more friends to play Firefight with.

I've broken down my review around key points and provide counter arguments to many of the negative reviews.


Price
Most reviews need to get over themselves on this point, especially regarding the "Wasn't this a Halo 3 expansion?" crap. Both Microsoft and Bungie have been pretty clear that they decided to go beyond the scope of just an expansion.

Personally, I feel the price is just fine. It is right in line with all major polished games. Some people seem to think that Bungie "owes" them something -- as though because Bungie had previously built the Halo 3 engine they don't deserve as much money for a new game using it. As a software developer, I am more than happy to pay for good software and I'm keenly aware of the predicaments surrounding software often being under-valued.

But in any case, Bungie did update their engine for ODST, they added a new campaign, and they added a new multiplayer mode. And the stats available on Bungie.net go above and beyond what most games provide.

To me, getting the Halo 3 multiplayer maps is also a nice bonus. I hadn't bought any of them, so I feel like I got a good deal. But even without that, I'd still say ODST is worth the price (I still haven't put in the 2nd disc).


Campaign
I very much enjoyed the campaign. It reminded me of the original Halo: Combat Evolved -- I felt like I was exploring a new world again. Some people have brought up the "Halo 1" comparison as if it were a bad thing or that Bungie had somehow regressed. I disagree, feeling that they've taken the best of both worlds.

I'm a huge fan of the story in the original Halo. But somehow Halo 2 and 3 left me feeling quite unsatisfied. The overarching story was compelling, but it was ruined for me in the little details, contrivances, and the occasional terrible lines.

The ODST storyline really strikes a chord with me. You are dropped into a new setting very unlike the other Halo games (and no rehashed Forerunner levels -- seeya library!). You are given somewhat more leeway in how you go about completing your objectives. There is great voice acting and dialog. But the piece de la resistance is the atmosphere they create: the lost rookie in an occupied city; a fragmented squad trying to do the best they can.

Speaking of the squad, the Firefly casting is superb. They pay some excellent homage to the series, yet also manage to bring a very Halo feel to the characters. I agree with some reviews that they could have done more to develop the characters so you care more about the squad. But compared to the very two-dimensional Master Chief, the ODSTs have a lot going for them.

The combat dialog provided by the cast is fun to listen to, and also gives Firefight some nice flavor. Additionally I found that their dialog can also be very helpful, saying things such as, "Down to my last mag!" when you're running low on ammo. Sometimes I lose track of my ammo while in the middle of a fight, and that little audio clip really helps me out.


The Hub
The tasteless critics seem to think that the open-world hub area was just a play on Bungie's part to extend the duration of the campaign without adding any real substance. I can't understand this opinion. There is a great atmosphere and sense of exploration. It's the perfect setting for the story they are telling. It's true that the hub is somewhat light on combat, and I have no problem with that for the sake of the story!

Discovering the clues to what happened to the squad was compelling to me. I liked the idea that the city's AI, the Superintendent, had been recording events happening all over the city.

I also liked the optional "Sadie's Story". As a gamer who leans toward completionist, I found the search for these story bytes to be a very enjoyable treasure hunt. Unlike Assassin's Creed there are a reasonable number of items to find, and the Superintendent will assist the observant seeker.


ODSTs vs. Master Chief
Too many reviews are getting hung up over the differences between the ODSTs and the Master Chief. I can agree with some of these points. For example, why can't the ODSTs use equipment (e.g. bubble shield) but they can tote around a turret without breaking a sweat? It's pretty arbitrary.

But having said that, I enjoy the differences. I must vehemently disagree with the distinguished senator Justin McElroy of the site of Joystiq. He asked, in essence, "Who looked at the awesomeness of the Master Chief and asked for less?" Well, sir, I did.

I tire of the Master Chief. He's too powerful, and that cheapens the character. He's a one man army. From Halo 2 and 3, it would seem that he (almost) single-handedly saved Earth and defeated the Covenant and Flood. He's the superman of Halo, sans kryptonite.

I like that the ODSTs are capable, elite units, but not invincible. I like the challenge it brings, especially in Firefight.


Firefight
I love Firefight. I love cooperative gameplay, and this provides me some nice Halo multiplayer where I don't have to go up against 12-year-olds who are better than I. Having missed out on the Left 4 Dead and Gears 2 scenes, I'm ecstatic about the mode.

I was sad to see that only two of my friends have picked up ODST. I played Firefight by myself until I finally got a 2-player game going on Saturday. That game was awesome. Working together we were able to survive for quite a while -- and got the associated Firefight achievement to boot.


Conclusion
If you like Halo, you'll probably like ODST. If the original Halo was compelling enough to get you out to buy an XBox just to play it (as several guys I know did), then why are you quibbling over $60? Get it. It's worth it.

The campaign story is excellent. Put away your expectations of what a Halo story is "supposed" to be. Enjoy the audio magic of Nathan Fillion, Adam Baldwin, and Alan Tudyk. And most of all, play Firefight with me!

Friday, July 24, 2009

Iterative Programming

Programming in iterations is something that has always made sense to me at some level. If nothing else, I like seeing the change logs for each version of a program. But in the last few months I've had the idea on my mind quite a bit. I feel that my paradigm for programming is shifting.

It probably started when I got my new job and they kept asking about Agile development experience. Then later we had a week of official Agile training. I'd also been reading The Mythical Man-Month. Then the other day I also read a Coding Horror post about the same subject.

The main idea is that through iterative methods, software "grows" or "evolves". This is in contrast to the idea of "building" or "constructing" software.

As Mr. Brooks points out in his book, the analogy of "building" software is very compelling and can be very useful. It captures a lot of the careful planning and execution required when writing code. It also serves as a great metaphor as to why things are never just a "simple matter of programming".

But the building analogy falls short in many ways. It really fails to capture the mutable nature of programming. Code is not etched into stone tablets. It can be modified and bent to the will of the programmer as easily as I typed this post. Also, unlike a well designed and constructed building, you really never know if you've been building the software correctly until you've already done a good share of the work.

The emerging paradigm of "evolving" software seems a better fit. Like a plant, there are detailed structures and processes which go into programming. At each stage you can see gradual improvement. Each version or revision is the "offspring" of the one before. Good adaptations are kept while old or bad ones wither away.

This evolutionary process is driven by code changes made by programmers. A bug is fixed here, a new feature added there. Small tweaks are made all along the way. The skill set and demeanor of a successful programmer resembles a craftsman. He is a creative explorer rather than an assembly line worker.

It just makes sense to me. Iterative programming seems to have much better balance between documentation, planning, designing, and coding. You do enough of each of these to get to your current goal. Then you focus on the next step, the next feature, the next idea. Instead of getting lost in the pie-in-the-sky dreams, you're actually building your way to them. Of course, this means you have to be ready and willing to enter a chrysalis from time to time in order to change both inside and out.

I'm excited to see how iterative programming plays out in my own projects, at work, and in the industry in general.

Friday, July 10, 2009

Water Lilies

Water lilies float
in a still pond with their soft
lilac hues aloft.


This haiku came about because I was using a water lilies image which comes with Windows XP as a placeholder for a program I'm working on at work. For said program, I needed some text. It's amazing what the combination of being bored and tired at work can produce.

Wednesday, June 17, 2009

Aloha!

Sunday, May 31, 2009

Source-Sacrifice

Apparently my blog has come down with a bad case of journalitis -- a condition where it is neglected for long periods of time.

My wife and I really have been quite busy of late. I have started on an open source project which threatens to take forever to complete, even if I do spend all my free time on it each week. And we are also getting new floors.

I've come to find a new level of respect for those programmers out there who spend their time away from work on open source projects. I've found it to be very difficult, even though I am really passionate about the project. I imagine that many programmers have to sacrifice a lot of other things to work on their labor of love. Especially after they've put in 8 hours at their day job. But I cannot in good conscience sacrifice much of my time -- especially the time my wife needs me. So I do what I can and hope that it won't fall by the wayside like other projects that I've embarked upon.

One thing that will help this project though, is that I have other people already interested in it and working with me. None of them are programmers, but they are experienced in the kind of work. Thankfully, they will be able to help me with much of the non-programming work that I tend to ignore or procrastinate.

I have a long term dream that someday work on this project could be my day job. But I'm a little fearful to ask how long "long term" will actually be. The end goal is something almost too good to be true. So in the meantime, I'll just have to patiently and diligently work toward my goal.

I'm reminded of a quote from Trigun, "Every great journey must begin with a single enormous step."

Friday, April 17, 2009

Jetsettin'

It's been a few months since I took my new job. I've spent the time working on-site for one of our clients. It has been a good experience for me. The company is quite large -- we were drawn a small part of our org chart one time and it took up the entire wall. Based on what I've heard, I should be working for this client for a while to come.

I guess they have been pretty happy with my performance. My keen senses have picked up on that when they frankly told me so. They have assigned me to be the lead programmer for the upcoming project (which is based on the one I've been working on thus far). Then this week they asked me to travel out-of-state for two days to meet and work with the other departments we work with.

All in all, I am very excited about it. I'm glad that I've been able to earn their trust and demonstrate my ability. This kind of work isn't my #1 favorite -- I'm not actually writing or designing code -- but I'm doing my best at it. When I switched jobs a little while back, one of the main reasons I did it was to increase the breadth and depth of my experience. I think it is working.

The biggest drawback of it all is that I'll be away from my sweetheart. I suppose that these two days will give us a taste of what her upcoming Science Fair trip will be like. Separation-wise, that is.

I'll miss you while I'm gone sweetie!

Wednesday, April 8, 2009

STOP!

Yesterday morning after I dropped my wife off at work, I ran a stop sign.

I didn't mean to... I was just distracted somehow. Or maybe I didn't notice the sign (although I have driven on that road many times and should know by now that a sign is there.)

It freaked me out. Especially since it was a 2-way stop crossing a busy road. And just as I realized I had done it, I saw a police car up ahead on the other side of the road. Apparently he didn't notice my crime, because he just drove on by casually.

Everything turned out fine, I suppose. I wasn't pulled over. Even better, I wasn't in an accident. But I couldn't help thinking about how easily I could have been in trouble. The last thing I need is to be paying for causing a wreck.

Overall, I think I'm a pretty good driver. I try to be observant and obey the traffic laws. But this incident caused me to wonder how often I'm not paying attention while driving. It also gave me pause to consider that maybe the stupid drivers I often see on the road aren't really stupid after all. Perhaps they are just having a lapse of attention. Perhaps.

Thursday, March 5, 2009

Science Smorgasbord

Tonight I went to the local high-school science fair to be a volunteer judge. There were some really interesting projects there. There was one which was a Flash program for translating eye movement to a mouse cursor. There was an interesting one about what colors of (non-white) light you can see the best with in the dark (spoiler: green is apparently best. Though I thought I've heard/read something about red being good for not ruining your night-vision...). There was also a really good random number project which almost didn't make it because it looked like crap. Oh and number theory one about a possible relationship between several different famous sequences.

After all those projects, I thought it had been a pretty good night. But the best was yet to come. During the awards ceremony, the host teacher told a joke that completely cracked me up. As soon as I came home, I Googled that sucker and found it here (although I've modified it a bit to suit my own tastes).


A Mathematician, a Biologist and a Physicist are sitting in a street cafe when they notice two people go into the house on the other side of the street. After some time passes, they notice three people come out of the house.

The Physicist says, "The measurement wasn't accurate."

The Biologist concludes, "They have reproduced!"

The Mathematician: "Now, if exactly 1 person enters the house then it will be empty again."


Comedic. Gold.

Monday, February 23, 2009

Starting From Scratch? Never Say Never

While following my blog quest, I ran across an interesting article which told several compelling reasons why the PHP group is not just re-writing the PHP code from scratch for the upcoming PHP 6.

As I was sifting (or slogging, perhaps) through the comments, I found a link to an interesting article entitled, Things You Should Never Do, Part I by Joel. My curiosity sufficiently piqued, I started reading.

At the risk of over-simplfying, the author basically says, "Never rewrite your code from scratch." It's a bold statement. I can certainly appreciate the intention behind it. From my own experience, I know that rewriting code from scratch can be a long and daunting process.

Most programmers I know (with myself as a definite inclusion), tend to look back at their "old" code and think, "I could do that better if I rewrote it today." Sometimes the code really isn't very old at all.. only a few months. For the most part, I think that having that feeling is a good thing. It means that you've been learning. It means that you have the drive to improve yourself and your work. But acting on that feeling often leads to trouble, just as Joel says. I like how he points out that new code isn't necessarily better than old code -- old code does not rust.

I also concur with his assessment that so-called "old" code is better tested. It is more mature. And I see where I sometimes need to repent of saying that the legacy code is a mess. Joel hits the nail on the head when he identifies that old code looks messy because it is easier to write code than to read it.

So I agree with the spirit of the article. But I take umbrage with a particular word: never.

You (or a software company) should never rewrite their code from scratch? That I don't believe. Now I realize that Joel's article was written back in 2000. I haven't followed his blog to find out if there was a Part II, or if he recanted what he said. But I believe there are some instances where it can be a very good thing to rewrite your software from scratch.

After pondering for a while, I came up with the following list of times when rewriting your code may be beneficial:
  • When you are building something new. Not just a new version, mind you. A new product or perhaps a paradigm shift on an old product.
  • When you are adding new features which the old code cannot support without difficulty. Sometimes you can be painted into a corner by legacy code.
  • When you want to take advantage of new technologies or languages.


I find that Mac OS X is a great example of how rewriting code can be a good thing. Rather than take OS 9 (which was a mature piece of software with a solid background) and turn out a new-and-improved version, they scrapped it instead. They rewrote things from the ground up. They ended up with a terrific operating system... my favorite, in fact.

[I'm adding this aside to recognize that OS X was built on some "old" code, specifically UNIX and NeXT. Although it was not written completely from scratch, I think it still exemplifies the point I am trying to make.]

Now there was a painful transition from OS 9 to OS X. For a while the best programs were not available for OS X. Users clung on to the last vestiges of OS 9. But over time, new software emerged. I think many Mac owners are now glad that they don't have to worry about "Classic" mode anymore.

Personally, I think that this is something that Windows could benefit from. They've taken many pages from Steve Jobs' book, why not this one too? A lot of the issues (especially security issues) in Windows linger because of backward compatibility. But a new OS would mean that old programs wouldn't work anymore. Microsoft, Windows programmers, and users would all have to take a leap of faith. But it can be done.


Another example is with some software my previous company was developing. We had some legacy AS2 / C code which was really just a nightmare to maintain, let alone improve. We looked at the situation and decided that we should take advantage of the new AS3 and rewrite. The new product turned out much better than the old one, both for the user and programmer. That's not to say it was perfect, but a definite improvement.


There are probably some other times when a total code rewrite would be beneficial. So certainly we shouldn't say never. But that decision needs to be made cautiously, with eyes open to the risks. If possible, keep up development on the previous version of the software.

I suppose that the moral of the story is that there is a time and season for all things -- even rewriting code from scratch.

Thursday, February 5, 2009

Read, Think, Write, Learn

In trying to be a conscientious, career-minded programmer, one of my goals has been to keep abreast of the goings-on in the programming world. Keeping current and learning new things is really vital for the overall success of a programmer. It keeps you relevant, it keeps you from being pigeon-holed, and it helps you stay interested in developing software, to name a few reasons.

In pursuit of that goal, in the last few months I've been looking for interesting blogs and sites that are relevant to my work. There are a few that I felt are worth mentioning. In fact, you'll notice that I've even gone as far as to add links on my sidebar! (Go ahead, look over there.)

The first one I want to mention is the excellent Grant Skinner's gBlog. I was first introduced to this blog sometime a year or so ago when I was doing a lot of Flash work. At the time we were having some problems with our application which turned out to be memory / garbage collection issues. Enter the gBlog. Mr. Skinner has some very helpful information out there about memory management in ActionScript 3 (AS3). Now I may have run across his site before, but this time it stuck. Useful information and really cool demos? That's a site to not forget.

More recently (in the last month or so), I've started following another blog called Coding Horror written by Jeff Atwood. I have found this blog to be very interesting. He has great writing style that practically compels me to read it and he covers some, dare I say, delectable topics. Plus he is working on a very cool site: Stack Overflow.

The thing that I love about these two blogs is that while I might not agree with everything they write, they cause me to think about stuff I care about. And that, my friends, is worth its weight in kilobytes.

Monday, February 2, 2009

Weekend Warrior

This weekend I was very industrious. My usual routine involves me helping my wife clean the house and then avoiding any other thing which resembles work. But this Saturday was different.

I fixed our leaking toilet by replacing the flapper. Although the toilet mechanism isn't terribly complex, I was still worried that I hadn't properly diagnosed the problem. But ever since installing the new flapper we haven't heard any more of the tell-tale running water.

I installed a programmable, digital thermostat. This was a bit more like rocket-science... or perhaps defusing a bomb? But the instructions were very clear and I didn't even electrocute myself. Within a few minutes time I had removed the hold and installed the new. Now we can actually tell what temperature it is set at instead of the old-fashoned guesswork. And it was easy to set up for our schedule. I'm hoping to see some savings in the utility bills this year.

I built some shelf additions for our DVDs. We have a deep bookcase which is deep enough for two rows of DVDs. Each shelf is also pretty tall, so I got the idea to raise the back layer of DVDs so we could see the back row. So while I was out buying the flapper and thermostat, I picked up some wood and got it cut right there at the store. I probably should have planned it a bit better and measured the wood I purchased, because when I got home I was miffed to discover that the wood was not the size it had claimed to be! I don't know if it was mislabeled or what. But I salvaged the operation and now we have our DVDs shelved in all their glory.

It felt good to get so much done around the house! Not that I necessarily want to abandon my typical ways, but now and then I enjoy a little weekend handiwork.

Monday, January 19, 2009

New Year, New Job

Seeing that 2008 was a hard act to follow, the new year has come on stage with trumpeting fanfare and has presented me with a new job.

As I was not fully satisfied with my current job, I felt that I shouldn't snub any opportunities that came my way. This particular opportunity was audacious enough to call me up directly! Actually, I've gotten a couple of calls from people who have found my profile on LinkedIn. My new job came from one of these calls.

I interviewed in mid-December, but didn't hear back for almost a month. But eventually the job offer came. When I told my boss I'd be leaving my current job they gave me a counter-offer, but after considering my options the new job was just too appealing. Although it is somewhat intimidating, I feel like I've made the right decision for my career and family.

Although I am excited to get into a new job which will take programming more seriously, it will be kind of sad to leave my current job. I've made some good friends. I've enjoyed some fun projects. I've tried to make a difference. It was nice to know how valuable my manager believes I am. The fear of change has tried to deter me from changing jobs, but I have resisted.

In just one week I'll be starting my new job. It is kind of stressful and nerve-wracking, but also exciting.

. . .

Quit my job down at the carwash
Didn't have to write no one a goodbye note
That said, "The check's in the mail, and
I'll see you in church, and don't you ever change"...

Sunday, January 4, 2009

Reflections

The dawning of the new year has caused me to pause and reflect on all that has happened to me in 2008. There have been many changes, including some important life-changing ones which I had been pining for over the years. It was a wonderful year.

The biggest and best change of the year (not to mention my life) was getting engaged and married. It is strange how it seems so long ago, even though many weeks tend to fly by. My beautiful wife has made me so very happy. It is hard to imagine life without her now.

The other big change for me was getting laid off and finding a new job. Career-wise, this year has been a veritable roller-coaster! But I think I have been improving my skills along the way. Along with things I've been learning at work (like iPhone app programming!), I've also been working on my own projects and learning from there. Work has also brought about little things, like when I really got into using wikis.

Another change I've experienced is regularly going to the gym. Off and on over the years I've tried to be good about exercising, but in 2008 it actually happened over the whole year. That's another thing that I have my sweetheart to thank about.

Last year brought many good times in the way of games. At the beginning of 2008 I was still riding the wave of Gamevember 2007, playing Mass Effect and Assassin's Creed. Rock Band has been a lovely year-long experience. It is one game that my wife enjoys, and we've built up a decent collection of songs now. Then Rock Band 2 made it all the better. I've also enjoyed Spore, Castle Crashers, and others! There have also been some great non-video games such as Mexican Train and Quiddler.

It has also been a great year for music and movies. Between my wife, Rock Band, and Pandora, I've expanded my music selection quite a bit. For movies, I very much enjoyed Iron Man, The Dark Knight, Kung Fu Panda, and Wall-E (which I finally saw over Christmas). I also experienced some great older movies, like when my good friend gave me Yojimbo and Sanjuro.

Playing D&D with my friends has been just plain awesome. The game is very fun to play, and I've enjoyed being the DM. But it has also been really fun to be able to regularly get together with my friends.

Recently I've started reading again. I hope that this is something that I can carry over into 2009. There are always so many things that I want to do (including writing on this very blog), but I should try to make sufficient time for reading.

The 2008 holiday season was a joyful time spent with family. I love and appreciate my family so very much. I have especially enjoyed watching and playing with my nephew during his first year. It is fun to be an uncle.

Now looking forward, I'm excited for the things which the year 2009 will bring.