19 Jul 2009 @ 6:02 AM 

You know, programmers love to build layers, especially us (primarily) Java guys. For some reason, a language named after a caffeine-heavy beverage brings out the need to abstract away everything from everything else, to extend this and that, to build parts on top of parts on top of yet other parts.

The CIA uses layers to hide the truth. They tend to “abstract out”, so to speak, the field agents from the analysts, make it so that the truth is at least ten levels of indirection away. I guess the spooks are developers at heart!

I’ve known people who take the simplest of programming tasks and turn it into a monumental task, complete with implementation of 10 different patterns, 20 different interfaces because God knows we might need to implement a whole other way to add two integers together some day, and build delegates and DAOs and DTOs and VOs and Cheeri-o’s and O-rings and O MY GOD JUST STOP ALREADY!!

You know, layer cake is good. It’s real damned good actually. Look at my gut these days and that fact becomes obvious. But too much will clog your arteries and make your heart explode at age 35. Thus it is with software engineering (I’m not really sure what that means, but it sounded good as I typed it).

Then there’s loose coupling. It’s great to have small parts with very fine-meshed interfaces that can be connected in new and exciting ways to do all sorts of whiz-bang things. I’m all for that.

And then, there’s love and marriage.

You see, love, and most especially marriage, is a WHOLE lot software architecture, at least the type I’ve described here:

  • Of course, there’s the KISS principal in software design (Keep It Simple Stupid, for those living under the proverbial rock, a principal more and more developers and architects seem to either forget or just don’t get these days). There’s of course a “kiss” in marriage, but unlike the KISS principal, which can lead to elegant, easy-to-maintain software, the “kiss” in marriage usually leads to a creation that sucks the life out of you, is anything but elegant, and is a bitch to maintain.
  • Marriage is an exercise in bad SOA (Service-Oriented Architecture): the interface between the two entities is highly unknown, constantly changing and very confusing. I’m not talking about the PHYSICAL interface of course. No, that’s pretty simple for most people. Trying to get the two objects in a marriage to communicate however is an exercise in frustration under the best of circumstances. A wife’s interface changes constantly, is prone to blow up if you feed it the wrong information, and is unusable for about a week out of every month. A husband’s interface is usually easily distracted by anything that can be thrown, or can be shown on television, tends to not remember values from one request to the next (which is how HTTP works, but men don’t remotely as well as the protocol does) and usually have too simple a data type collection (grunt, groan, hmrph, that’s about it). No, husbands and wives, like a client calling a service with a poorly-documented external interface don’t communicate very well on most occasions.
  • In a marriage, as in a poorly-designed system, there isn’t enough separation of layers. Now, of course above I was saying how too many layers is a bad thing, but on the other hand, if there’s not quite enough abstraction between layers, that’s just as bad. Components that know too much about each other are difficult to maintain separately. Translation for the married crowd: no time apart from one another leads to nothing good. There has to be some degree of separation, some degree of space, some degree of personal freedom, or things won’t work, much like a change in one function can break an entire system if not abstracted quite enough.
  • Like in a lot of software written today, love and marriage has terrible error handling. When something goes wrong, it isn’t usually handled gracefully, the whole system just falls apart. Statistics say that 50%+ of all marriage ends in divorce, which means the system couldn’t be rebooted. I suppose modern computers have an edge there because a reboot tends to fix just about anything, at least in the Windows world.
  • Marriage in general, like so much software written today, is an exercise in anti-patterns. The whole point of sex is to perpetuate the species. As such, the seeds should be spread around as much as possible (this isn’t an argument for being promiscuous; it’s just a statement of biologic imperative and evolutionary truth). So whose bright idea was it exactly for two people to stick themselves together and never do right by their species by ensuring genetic diversity?!? I submit that’s an anti-pattern! Love, and certainly marriage, is exercises in two people giving things up to be together. That’s an anti-pattern! Of course, software engineering isn’t ENTIRELY like marriage:
  • The user interface of most software stays pretty static over the years. There are tweaks, sure, but most UI’s don’t change drastically over time, barring a complete rewrite of the application (which you can liken to getting divorced and then re-married). Husbands and wives, on the other hand, have interfaces that change drastically over time, and unlike software that can be re-written to have a prettier look for the marketing folks, married people don’t have it so easy. You got what you got, that’s the simple way to put it. When the hair, when the teeth fall out, when the fat hangs and the smells get more stringent, sorry, that’s the software you bought all those years ago, be happy with it!
  • When big development projects fail, lots of money is lost. There’s always plenty of blame to go around too. When a marriage fails though, it tends to be a lot less fair on one party or the other, and it tends to be the fault of one person or another. It’s nice to know where the blame should go I suppose, but not if you’re that target!
  • A successful development effort usually leads to someone wanting you to do more, better projects. With marriage, once you have that first success, so to speak, that tends to be it, no more come down the pipe. Not without running into the last point at least!
  • Aside from TurboTax, not many software projects will help you get more money back from taxes. Marriage does.

So you see, software development, love and marriage are all different sides of the same coin… a weird-ass three-sided coin I grant you, but the same coin none the less. So the next time you’re writing some software, think to yourself “hey, if I can do this, I can be in love and have a good marriage!” And always remember as you work through your marriage: “this is no harder than that trend analysis algorithm I wrote last week!” I think you’ll be a happier person for it.

(Disclaimer: I am a happily-married man, and a happily-employed software developer… any relation to your job or marriage, or anything resembling sanity here, is strictly a coincidence)

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 19 Jul 2009 @ 06:02 AM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized

 17 Jun 2009 @ 5:36 AM 

Recently I had a discussion with some online colleagues about JSON-P web services.  There was a post on Ajaxian about how Microsoft Bing wraps their JSON-P results in a try..catch block.  I thought this was a neat little addition to JSON-P, which I’ve felt for a long time is an extremely interesting little hack.

Now, the point I made was that while the try…catch thing was a nice addition, it of course didn’t address what I see as the biggest problem with JSON-P, and that’s having no way to really know if the request completed or not.  We tossed around some ideas and a couple of us pretty quickly and independently come up with the idea of having a concurrent timeout with the in-flight request.

Before I go any further, I’ll qualify this all by saying I strongly suspect this isn’t an original idea, but I do know that, at least in my case (I can’t say what goes on in the head of others, I can barely make sense of what goes on in mind!) that I thought it up on my own.

Be that all as it may, the point is that it’s a viable approach, but it needed some refinement.  So, I threw together some code today.  First, a JavaScript file:
[code lang="javascript"]

/**
 * JSONP makes JSON-P requests and do so with a timeout mechanism so you'll
 * always know whether the request was successful or not.
 */
var JSONP = {

  /* Amount of time in seconds before a request is considered timed out. */
  timeoutSeconds : 5,

  /* Reference to the document's head tag. */
  headTag : document.getElementsByTagName("head").item(0),

  /* Collection of objects, one for each in-flight request. */
  requestObjects : { },

  /**
   * Call this method to fire off a JSON-P request.
   *
   * @param inConfig An object containing whatever parameters are needed to
   * make the remote call.  The attributes of this object are used to construct
   * a query string.
   */
  request : function(inConfig) {

    // Create unique ID for request.
    var requestID = "req_" + new Date().getTime();

    // Create request object and populate with internal data.
    var requestObject = { };
    requestObject.requestID = requestID;
    requestObject.callback = function(inResponse) {
      JSONP.callback(requestID, inResponse);
    };
    requestObject.realCallback = inConfig.callback;
    requestObject.onTimeout = inConfig.onTimeout;
    inConfig.callback = "JSONP.requestObjects." + requestID + ".callback";

    // Add query string to URL.
    if (inConfig.url.charAt(inConfig.url.length - 1) != "?") {
      inConfig.url += "?";
    }
    var queryString = "";
    for (var attribute in inConfig) {
      if (queryString != "") {
        queryString += "&";
      }
      queryString += attribute + "=" + inConfig[attribute];
    }
    inConfig.url += queryString;
    requestObject.inConfig = inConfig;

    // Now create the script tag for this request.
    var scriptTag = document.createElement("script");
    requestObject.scriptTag = scriptTag;
    scriptTag.setAttribute("src", inConfig.url);
    scriptTag.setAttribute("type", "text/javascript");

    // Now create the timeout.
    requestObject.timeout = setTimeout(function() {
      JSONP.timeoutElapsed(requestID);
    }, this.timeoutSeconds * 1000);

    // Kick off the request.
    this.headTag.appendChild(scriptTag);

    // Finally, put the requestObject in the collection.
    this.requestObjects[requestID] = requestObject;

  },

  /**
   * Internal intermediary callback that the JSON-P request calls.
   *
   * @param inRequestID The ID associated with the requestObject.
   * @param inResponse  The response from the remote server.
   */
  callback : function(inRequestID, inResponse) {

    // Get the request object associated with this request.
    var requestObject = JSONP.requestObjects[inRequestID];

    // Might not have a reqested object, if the request comes back after the
    // timeout period.
    if (requestObject) {
      // Clear the timeout so the request doesn't time out.
      clearTimeout(requestObject.timeout);
      // Call the specified callback.
      requestObject.realCallback(inResponse);
      // Delete the request object.
      delete JSONP.requestObjects[inRequestID];
    }

  },

  /**
   * This is called when a request timeout occurs.
   *
   * @param inRequestID The ID associated with the requestObject.
   */
  timeoutElapsed : function(inRequestID) {

    // Get the request object associated with this request.
    var requestObject = JSONP.requestObjects[inRequestID];

    // There should never be a case where there is no requestObject here,
    // but we'll check for it anyway, just in case I missed something.
    if (requestObject) {
      // Copy pertinent attributes of requestObject to a new object.
      var newRequestObject = { };
      newRequestObject.requestID = requestObject.requestID;
      newRequestObject.inConfig = { };
      for (var i in requestObject.inConfig) {
        newRequestObject.inConfig[i] = requestObject.inConfig[i];
      }
      // Delete the request object, but get onTimeout first.
      var onTimeout = requestObject.onTimeout;
      delete JSONP.requestObjects[inRequestID];
      // Now call the real timeout handler, if any.
      if (onTimeout) {
        onTimeout(newRequestObject);
      }
    }

  },

}; // End JSONP.

[/code]

Now, a test HTML file to use this:

[code lang="javascript"]

<body>

  <head>

    <script src="jsonp.js"></script>
    <script>

      function test1() {
        var config = {
          url : "http://search.yahooapis.com/ImageSearchService/V1/imageSearch?",
          appid : "YahooDemo", query : "Amanda Tapping", output : "json",
          callback : test1Callback, onTimeout : timeoutHandler
        };
        JSONP.request(config);
      }

      function badTest() {
        var config = {
          url : "gibberish", appid : "gibberish", query : "gibberish",
          output : "json", callback : null, onTimeout : timeoutHandler
        };
        JSONP.request(config);
      }

      function timeoutHandler(inRequestObject) {
        // Iterate its attributes
        var s = "";
        for (var i in inRequestObject) {
          s += i + " = " + inRequestObject[i] + "\n";
        }
        for (var i in inRequestObject.inConfig) {
          s += i + " = " + inRequestObject.inConfig[i] + "\n";
        }
        // Show the output.
        alert("REQUEST TIMED OUT - Request Object Dump: \n\n" + s);
      }

      function test1Callback(inResponse) {
        var outputString = "Total results returned: " +
          inResponse.ResultSet.totalResultsReturned + "<br>";
        for (var i = 0; i < inResponse.ResultSet.Result.length; i++) {
          outputString += inResponse.ResultSet.Result[i].Title + "<br>";
        }
        document.getElementById("divResponse").innerHTML = outputString;
      }

    </script>

  </head>

  <body>

    <input type="button" value="Make Request" onClick="test1();">
    <br><br>
    <div id="divResponse"
      style="width:400px;height:250px;border:1px solid #000000;overflow:auto;">
      Search results will appear here</div>
    <br><br>
    <input type="button" value="Make Bad Request" onClick="badTest();">

  </body>

</html>

[/code]

To use it, you simply call the JSONP.request() method.  You pass to this method an object that configures the call.  Only three of the attributes, strictly-speaking, are required.

  • url – The URL of the JSON-P web service to call.  This can end with a question mark, but it doesn’t have to.
  • callback – This is the function that will be called when the response comes back.
  • onTimeout – This is the function that will be called if the request times out.

The others are completely dependant on the JSON-P services you’re calling.  Here I’m toying around with Yahoo!’s search API.  You can also set the timeout attribute on the JSONP object if you want.  This is the number of seconds to wait for a response.  If no valid response comes back in that time, then the request is considered to have timed out and your onTimeout function will be called.

Now, there’s one flaw here that I just noticed: this code assumes the name of the parameter that tells the remote service the name of the callback function is itself named callback.  This is nearly always true of JSON-P services, but it doesn’t have to be.  I’ll probably make that update at some point, but I’m sure you can handle it yourself if need be :)

So, if you couple this approach with a JSON-P service that wraps the call in try…catch, then there’s only one situation left to deal with, and that’s HTTP error codes.  During my discussion, we all concluded there appears to be no way to deal with this until everyone is implementing JSONRequest.  This timeout technique though does give you a way to deal with them indirectly.  True enough, you still won’t be able to discern a 404 from a 500, but at least you can, after some time, handle not having gotten a response and thereby avoid hanging application UIs.

But hey, as a bunch of songs have said over the years: two out of three ain’t bad :) I think these two tricks make JSON-P services a heck of a lot more robust, and that can only be a good thing for mashup builders everywhere!

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 17 Jun 2009 @ 05:36 AM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized

 06 Jun 2009 @ 10:00 PM 

So, I’m working on a little side project at the moment… it’s a top secret, skunkworks-type thing that you can only hear about if you sign all sorts of papers and take an unmarked jet from McCarran to Area 51 :)

Because of its nature and what it has to be capable of, I have to write my code absolutely efficiently as possible. So last night I got to wondering if there was a difference in JavaScript between direct object attribute access and using accessor methods. So, is this faster…

var a = {
  attr : “frank”
};
alert(a.attr);

…or is this faster…

var MyClass = function() {
  var attr = “frank”;
  this.getAttr = function() {
    return atttr;
  }
};

Now, logically, my expectation was that the first approach would be faster. After all, there’s less code being executed and it is, deep down in the bowels of the interpreter, a much simpler operation. But, is that expectation correct? And even if it is, how big is the difference? Also, what’s the difference across various browsers? So, I threw together some very simple test code, and here it is:

Here’s the specs of the PC I ran this on:

  • Windows XP w/sp3 and all current patches as of 6/6/2009
  • Intel Core2 Duo 6600 @ 2.4GHz
  • 3G RAM
  • No applications other than browser running in foreground and all non-critical background processes shut down

And now, the results:

Firefox 3.0.10
Iterations Direct Accessor
50000 6 42
100000 12 83
200000 24 167
400000 48 331
1000000 119 826

IE 8.0.6001.18702
Iterations Direct Accessor
50000 16 63
100000 42 113
200000 87 222
400000 175 445
1000000 434 1117

Chrome 2.0.172.30
Iterations Direct Accessor
50000 1 1
100000 1 1
200000 3 2
400000 5 5
1000000 13 12

Opera 9.64 build 10487
Iterations Direct Accessor
50000 8 19
100000 16 37
200000 34 74
400000 69 147
1000000 170 367

Safari 4 public beta 528.17
Iterations Direct Accessor
50000 0 1
100000 1 2
200000 1 4
400000 3 9
1000000 7 22

All numbers are in milliseconds and have been rounded. The first number is the number of operations tests. So, that means that the test performed 50,000 operations each of direct attribute access and access via accessor method. The direct and accessor numbers are the average number of milliseconds that number of tests took, averaged over 10 test runs. So, for example, this is telling us that on Firefox 3.0.10, it took 6 milliseconds, on average, to perform 50,000 direct attribute accesses. It’s then telling us that is took 42 milliseconds, on average, to perform 50,000 attribute accessor calls.

There’s some possibly anomalous results there, although I’m convinced they aren’t incorrect. For example, in Chrome, it seems to take less time to use accessor methods when doing 200,000 or 1,000,000 iterations. I can’t imagine why that would be, but there’s the numbers. My best guess is it’s simply a rounding error and the difference is just about nothing.

There’s also the matter of that zero for the 50,000 run of direct attribute accesses for Safari. This seems to indicate that Safari is in fact the winner in terms of raw speed for direct attribute access. That’s entirely possible I think, but again, the difference between that and Chrome for the same test is probably almost nothing and it’s simply a result of rounding.

(all of this is making me wonder why I did the rounding in the first place, but I digress)

Since no report of this nature would be complete with graphs, let’s see a couple. We’ll take each of the above data sets and show them graphically (click on each to see them full-sized)…

Now let’s see a composite of all of them together, just so we can easily compare all of them…

So, what conclusions can we draw from this? I think a couple…

  • The original expectation, that direct attribute access is faster, clearly holds. Further, in all browsers except Chrome and Safari, the progression as you increase the number of iterations is almost exactly double as the number of iterations doubles.
  • Chrome performs the best, with Safari an extremly close second (not exactly surprising). Firefox and Opera are somewhat comparable, although Firefox is definitely the winner. IE is the slowest, which I think most of us would have anticipated. Even MS’s latest and greatest is pretty significantly behind all its competitors.
  • The difference in Chrome between the two methods is virtually nill. This is frankly a big surprise to me. This is nearly true of Safari as well, but not quite.
  • Even IE, the slowest of the bunch by a country mile as they say, performs a million accessor operations in just barely over a second. Slowest for sure, but still, hey, it’s a million method calls in slightly more than a second!
  • Sort of continuing the previous point… the difference, in terms of absolute milliseconds, between the two methods for any given browser (other than Chrome and Safari, which are very close to identical) isn’t generally all that much. I purposely picked pretty large numbers in terms of the number of iterations… I mean 400,000 operations a second is pretty substantial… certainly modern JavaScript can eclipse that number, absolutely. The point though is that for many types of tasks, the difference won’t matter one bit. For example, a mouse click event handler likely won’t see any sort of real-world difference between the two methods, unless you’re doing an ungodly amount of work in response to that click, in which case your design might need some rethinking anyway :)

What implications does all of this have aside from the above points? I think two important ones. First, if you want absolutely top-notch performance you’d better stick with direct attribute access regardless of browser. I don’t think this is a surprise to anyone, me included, but it’s nice to see it proven out.

Now second though, Chrome (and Safari to a slightly lesser extent) gives us a possibility we didn’t have before and don’t really have with other browsers: the chance to write our code the “right” way with no regard to performance penalties. What I mean by the “right” way is that in many ways it’s desirable to use accessor and mutator methods on a class rather than have direct attribute access to the attributes for the same reasons we do data hiding in other languages: if the only way to mutate an attribute of an object is via some mutator method, there is (theoretically at least) more safety in that. Plus, the API is arguably more self-documenting (i.e., if there is no mutator for a given attribute then we implicitly know it’s a read-only attribute). With Chrome, and almost Safari, you can write your code that way and know it won’t kill your performance. I think this is a really big step forward for us JavaScript coders. I’d also expect this to be the case with the new JS engine in Firefox, although I didn’t pull down a nightly to try it.

(and as usual, IE is the bane of our existence, but I digress once more)

So, in the end, I don’t think I made any Earth-shattering discoveries here, mostly it just confirms what I (and probably the rest of the world) already thought was the case. Still, I think seeing some hard numbers gives a clear picture of the situation and I think this was a useful exercise in the long-run.

Comments are of course welcome…

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 06 Jun 2009 @ 10:00 PM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized

 11 May 2009 @ 3:01 AM 

So, this weekend saw the release of the Star Trek reboot from J.J. Abrams, genius behind Lost and Fringe, two shows I totally love.  Was it any good you ask? (ok, so no one actually asked me, but I have a blog so you’re going to get my opinion anyway!)

Creating your own shows is a great achievement.  Putting your own creations out there is tough enough, but taking something beloved by many, including yours truly, and making it your own, that’s an even taller order.  And we’re talking here about taking something that is not just beloved by many but which has become a part of the fabric of society, woven it at a pretty low level.  It’s amazing any time something from pop culture pulls that off, and not too many people or things do, but Star Trek is one of those rare beasts.

So, did J.J. screw the pooch, or did he manage to do what eludes nearly every other remake ever done?

Oh, he pulled it off.  Boy did he ever!

I’ve been trying to get my 9-year old son to watch Star Trek for a long time.  Every time, he gets bored and just flat-out can’t get into it.  I’ve tried every version of the show, every spinoff, every movie.  It just doesn’t do it for him (although, he did start to get into First Contact last week when I was flipping through the channels).  Well, I decided to take him to see the new movie.  I figured, if it’s really all I’m hearing, it’s got a shot to pique his interest.  In short, it did.  He loved it.

This movie is top-notch in every possible way.  It’s fantastically entertaining, has some good emotionally-grabbing parts and generally sets up for future installments, and I for one absolutely cannot wait for more.

Now, I’ve yet to see a negative review.  I mean, literally, every single review I’ve read, and I checked out quite a few over the past two weeks, has been raving.  You can definitely add mine to that pile.  So, I’m going to take a different tact… as great as this movie was, it wasn’t perfect.  Here’s some things that actually bugged me a bit:

  • The back story of Nero was not covered in nearly enough detail.  Now, I read the comic that sets up the movie, and that does a pretty great job of it, but that’s definitely missing from the movie.  It makes Nero a bit more unknown than I thought was a good idea.  Another 10 minutes of footage maybe would have done the trick I think.
  • The convenience of Kirk being marooned on the same planet as Spock, and right near the cave Spock happens to be in, was a little *too* convenient.  No, make that A LOT too convenient.  Now, it doesn’t so much bother me that he happened to be placed on the same planet… for all I know, that’s the only planet in the Vulcan system aside from Vulcan that is class M.  But finding Spock so easily (even if by accident as it was) stretched things a tad too far.
  • The look of engineering on board the Enterprise just didn’t feel right to me.  It felt a little too retro.  Now, I’m OK with it being more mechanical than, say, engineering on NCC-1701D.  That makes sense.  But it seemed a little TOO much… especially the water pipe system Scottie gets caught in.  That seemed REALLY out of place to me.
  • Not enough Scottie!  Simon Peg does an awesome job with the role, and I really wish he had gotten a lot more screen time.  I suspect that will be the case in the next movie, so I can easily forgive this, but it still would have been really nice to see more of him.
  • Chekov.  This is the character I didn’t feel worked too well.  It’s not that the actor did a bad job per se, it just wasn’t up to the level of the other actors, who I think uniformly did great.
  • The story was frankly a bit weak.  Now, I can let this go largely because this was an action movie first and foremost, and the story certainly wasn’t terrible, and I don’t think it was riddled with plot holes of anything like that.  It just wasn’t special in any way.
  • The look of the Enterprise was a little off.  I actually thought it looked a little Romulan at one point, the sweep of the pylons leading to the nacells.  It wasn’t ugly or anything, just a little… off.  I still think the Enterprise as seen in The Motion Picture is the definitive design for NCC-1701, and I wish they had just copied that.

To be clear, none of this in any way, shape or form ruined my enjoyment of the movie.  But, they were things I noticed that struck me as I watched.

So, what was so great about it?  Well, let’s see… the actors, except for Chekov as noted, did fantastic work.  I echo the sentiment that McCoy was most like the original character, but the differences in all of them never once bothered me, it all seemed right.  The FX were across-the-board fantastic.  I loved that in at least a couple of scenes they actually acknowledge the silence of space, although it would have been nice if they did that in all the space scenes (I understand that might have taken away from the action, so not a huge thing).  The changing of what we’ve previously known I think worked out great.  J.J. and company reset things and set themselves up for the future in a way that I don’t think has to piss anyone off.  Now, there’s of course some reasonable questions to be asking… like, since paradoxes were raised, isn’t it likely that the events in the movie would have caused Spock to never be in the position in the future that caused him to go back in time in the first place?  It’s temporaral paradoxes 101!

So, in short, this movie rocks!  J.J. and his team did it: the successfully rebooted a franchise that I for one thought could never be rebooted properly.  When I first heard they were doing a prequal I cringed big-time.  I NEVER wanted to see this.  Yet, there I was, wishing there was another four hours of movie to sit through, and totally anxious to see the next installment.  Best of all, I think my son is going to be psyched to see it right along with me… I may never be able to get him to sit through the originals, and while I think that’s his loss, I certainly won’t be ashamed that *this* is his Star Trek.  This Star Trek is worthy of all that came before it, without a doubt.

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 11 May 2009 @ 03:01 AM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized

 24 Mar 2009 @ 6:18 AM 

So, Battlestar Galactica ended this past Friday, and of course that loud sound you heard were billions of geeks suddently crying out in terror together at the prospect of having their Fridays available once more to not get dates.

So, what did I think of the final episode?  I know that’s the burning question in everyones’ mind, right?

Ahem.

Anyway… let me start by saying I f’ing LOVED the new series.  I’ll admit I wasn’t totally sold by just the pilot itself, but I am very thankful I gave it a shot when it went to series.  It’s been an amazing ride.  All the superlatives heaped on it I think are well-deserved.  A truly character-driven sci-fi drama with a multi-season story arch.  Fantastic.

Now, the finale… I think the first hour, or maybe hour and a half, was some of the best television ever produced, sci-fi or otherwise.  Truly phenomenal.  They had me the whole way…

…that is, until Cavil offed himself.  That’s when the tide turned and disappointment began to set in.

Now, you can rationalize his suicide ten ways to Sunday, and many of those rationalizations even make sense, but the bottom line is that you had a character that was AT HIS CORE driven by the need to survive, and he decides to kill himself because the situation didn’t look too great?  I get the feeling the writers were trying for an unexpected, shocking turn there.  And you know what?  Mission accomplished!  I didn’t see it coming… but I didn’t see it coming PRECISELY because it was completely out of character.  I’ve seen it suggested that if he had awoken in a resurrection pod, him being the only one hooked in and even knowing that the technology existed, that would have made it OK.  Actually, that would have made it freaking AWESOME, and would have fit PERFECTLY with the character.  But no, nothing that clever, just “Oh frack it-BOOM”.  Very poor writing.

Now, the whole God angle… let me clarify one thing: one of the things I really loved all along was how religion was a central theme.  I think exploring how faith fits into a sci-fi arena is something not frequently seen, and they did it very well in my opinion.

BUT

At the point where you say “fuck it, everything that happened was because of God”, you’ve totally jumped the shark.  No, you’ve jumped the fucker, had sex with it and didn’t call it the next day.  That’s probably the laziest answer the writers could possibly have come up with.  I really, truly believe they wrote themselves into a corner that only God could get them out of… hell, maybe that proves God exists, I don’t know :)

Think of it this way… and, keep in mind this applies to real life too… if God had a plan all along, and was guiding the actions of the characters in any way, shape or form, then what’s the point?  If free will isn’t truly free, then at the end of the day I don’t give a FRACK why any character did anything… in fact, for a character-driven work of fiction, getting to the end and saying “oh hey, free will didn’t mean shit the whole time” undoes all the fine character development you did because you’re telling the audience that everything that came before doesn’t matter one bit.

Now, let’s dicuss some specifics…

* Starbuck was apparently Jesus.  Umm, ok.  She disappears, and Lee goes “eh, nice knowin’ ya” and that’s that.  I guess people disappearing right in front of his eyes (yeah, I know his back was turned, but close enough) is no big deal to him any more.  As far as I remember, not even Jesus did that, and if he had I’m pretty sure people would have called it a miracle!

* Herra is apparently mother to us all.  I guess I’m generally OK with the basic idea… sort of.  Were the bones at the end hers or not?  If they were, then how exactly could she POSSIBLY be “mitochondrial eve”?  Unless she got busy with a few hundred guys like TEN MINUTES AFTER THEY LANDED.  So, maybe they weren’t hers?  Maybe just one of her descendants?  Reasonable, but then the writing was pretty piss-poor to not make this clear (in fact, it’s hinted that her parents’ bones were found near her… so either she died as a young child, those were her parents bones, in which case she couldn’t be the root of all human life, or she died way older, had a bunch of kids first, in which case those weren’t her bones… either the story is fucked up or the writers did a shitty job with it, take your pick).

* Everyone agrees with Lee?  REALLY?!?  So, they just spent a couple of years fighting for their lives, trying to keep the human race going, but when they finally find Earth they decide “you know, this survival thing is a hoot, but you know what would be more fun? Let’s make it as absolutely hard as we can!”  I mean, I sure as shit hope those people remember how to make antibiotics because most of them are likely to die shortly after landing without it!  Oh yeah, and let’s not forget that while they put themselves, tehnologically-speaking, on an equal footing with the native humans, the native humans have been living a rough-and-tumble life for a long time and know the land well… they stand a VERY good chance, in my estimation, of obliterating the new humans anyway!

* Where exactly is Bill Adama’s Raptor?  So, we know it couldn’t have self-piloted into the Sun because Anders had to control the fleet to do that.  So it’s got to still be on Earth.  There’s virtually no way he could have destroyed it entirely, something would likely have survived (I assume they built these things pretty well, being used in combat IN SPACE and all that).  It was only 150k years that passed at the end, that’s frankly not much time, geologically-speaking, so the chances that the land would have “eaten it up” isn’t likely.  Chances are extremely good it seems that a Raptor would have easily survived that time, virtually guaranteeing the human race is screwed again.  I dunno, doesn’t seem too responsible to me.

* Less just says “ok pops, have a good life” without so much as a SMALL argument?  Understanding his motivation is one thing, saying “ok, fuck it, this is the last time I’ll see you” is another.

* Let’s go back to the God thing for a moment… so, at the end, the “angel” version of Baltar says “It doesn’t like to be called that”.  Here’s my guess on what happened in the writer’s room: “Hey, I know, God made this all happen!” “Yeah, cool!” “Hey, new guy, you got something to say?” “Err, yes sir… I was just thinking… what it… ahem… what it God was… something else?” “Hmm… well, we’re lazy as shit and so we’re going to stick with the hold God Did It thing, but if you want to toss in a random hint at THE VERY END that imples that MAYBE it wasn’t God after all, I guess that’d be cool because audiences love to be MIND RAPED like that”.  My point: you can’t decide on God, the ultimate dues ex machina solution, but then at the last possible moment throw in something that is NEVER explained or explored that seems to imply that what you’ve set up all along is bullshit.  Oh, and by the way, if the answer is simply that Baltar was indeed referring to God, then God is a petty prick that worries about what some creature that GOD CREATED calls him?  Is that really what the writers meant to say?

* I’ve heard a lot of people saying things like “the genius of the ending is that it’s open to interpretation”.  That’s fanboy bullshit, that’s what that is, and here’s why: I can make up shit in my own head all day and night, and I can interpret it any way I want.  That’s called creativity.  When I invest multiple years of my life watching a work of fiction, I expect answers in the end.  Now, I don’t need REALISTIC answers, but they have to be SELF-CONSISTENT within the confines of the narrative.  Even IF you want to make the argument that God is such an answer, it doesn’t change the fact that it’s lazy and sloppy because it means the writers didn’t have the creativity to come up with something better.

* Galen killing Tory… now… this is tough because I think it made sense, it was a LITTLE unexpected, and frankly I could see myself acting the EXACT same way in that situation.  But, here’s my problem: all he had to do was stop himself for probably a few more seconds, and all would have been right with the world.  Instead, he gave into his anger and basically doomed two species (yes, apparently it all worked out in the end, but at the time he had to know he was effectively ending both the humans and the cylons).  It bothers me that he did what he did because again, while I could see myself reacting the same way, I can also very much see myself showing SOME restraint, just long enough.  I doubt anyone would have blamed him for doing what he did immediately AFTER the download of the data completed!  So, while I don’t I guess have a huge problem with this, it doesn’t quite sit right with me either… if this was my only complaint though I’d have no real complaint, put it that way :)

Folks, let’s get something straight: this is SCIENCE FICTION.  If nothing it that should mean that there are actual answers presened.  You can then debate whether the answers are any good, but there are answers none the less.  You can invent whatever type of world-rules you want within the story, and the answer should make sense within those rules.  GOD IS NOT SUCH AN ANSWER.

It’s lazy writing, pure and simple, and it makes this show fantasy rather than science fiction.  I love fantasy as much as the next guy, but that’s not what we were watching all along.  Even when they brought in things like prophecy and destiny, there was always a hint that there was something intelligent behind it all… God by definition is beyond intelligence as we understand it, so that’s something different.

One theory that was tossed around for a long time would have solved virtually every problem nice and neat and made the ending something special… WE ARE ALL CYLONS.  Or, as things developed, we are all hybrids.  Either answer would have made pretty much everything logical and self-consistent.  All this “prophecy” and “destiny” stuff would have wound up being shared subconscious race memories and subconscious programming.  The whole repeating cycle idea would have made a ton of sense.  Some form of resurrection would have explained Starbuck nicely, and it would have explained Baltar always seeing Six (and vice-versa) in their heads.

Battlestar Galactica was a fantastic television show, one that I enjoyed watching immensely.  I think it was a very important bit of fiction and I don’t regret the time I spent watching it.  I DO however feel immensely let down by the ultimate conclusion.  That letdown is softened a bit by the fact that the first 3/4 of the finale were mind-bogglingly good!  But it’s that last quarter or so that kills me.  I haven’t even mention the fact that it got a bit preachy at the end, but I can let that go frankly.  I think the final God conclusion was the epitomy of lazy writing, which is shocking given how much care and obvious effort went into all the prior writing.  It’s almost as if a totally different group of people wrote the last 15-30 minutes of the finale than wrote the rest of the series.

And all of that is very sad to me because while I wouldn’t go so far as to say it ruined the show for me, it definitely degrades it greatly in my mind.  I can still say it’s a landmark series, all that sort of stuff, but frankly it went from being probably my second-favorite sci-fi show ever (behind only Babylon 5) to MAYBE my fourth or fifth favorite.  All because of the ending.

I guess you can say I have God to thank for ruining an otherwise remarkarble piece of art!

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 24 Mar 2009 @ 06:23 AM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized

 10 Feb 2009 @ 4:47 AM 

I’m going to do something now that I don’t do very often and frankly don’t like to do: I’m going to be deadly serious about something.

So, you’ve probably heard about Reyna Valentino, a Detroit mother who stands accused of multiple counts of torture and child abuse… haven’t heard the story?  Ok, here’s a link, prepare to be disgusted… you go read it and I’ll be here waiting for you.

http://www2.wivb.com/dpp/news/Hamtramck_girl_20090206

So, this was on the front page of Digg a few days ago, and I felt compelled to post a comment on it.  The premise of the comment is that this woman deserves to never be near her kids, or any other kids, for the rest of her life, and that I hope she rots in jail for the rest of her life.  I went so far as to say that maybe the district attorney should be seeking the death penalty (I don’t know if Michigan has the death penalty).  It seemed a little odd to me that attempted murder wasn’t one of the charges.

Now, here’s the thing that shocked me: I got dugg DOWN for these comments!  At least two people wrote to say they disagreed with me!

You see, as the arguments against me went, this woman was suffering from a mental illness.  You see, she had a chemical imbalance in her brain that caused her actions, and therefore we should feel sympathy for her and have understanding of her actions.

Well, what can I possibly say to that except FUCK THAT FUCKING BULLSHIT.

As I said in my Digg comment, there is a line that you simply don’t get to cross, most definitely where defenseless children are involved.  Whether there’s a legitimate medical condition at play that influences or even outright causes your actions, you don’t get to cross that line.  You don’t get to be excused, you don’t get to go on as if nothing happened just because you have some pills that supposedly fixes the problem.

FUCK THAT FUCKING BULLSHIT.

You see, in America, there’s always got to be an excuse for everything that happens.  Someone or something has always got to be to blame, it can’t ever be OUR fault after all!  No one simply says anymore “Hey, I screwed up, time to pay the piper”.  Look, I don’t like consequences any more than anyone else, hate to admit when I’m wrong.  But when I make a mistake, I say so, and I pay for my actions as necessary.  I don’t look for the nearest person or thing to deflect the blame that falls squarely on my shoulders.

This whole “mental illness defense” has become all too prevalent these days.  Do something illegal or just plain evil and, hey, no biggie, after all, there’s a chemical imbalance in your brain.  It’s not your fault.

Don’t misunderstand what I’m saying here: I’m in no way, shape or form pulling a Tom Cruise and saying that mental illness is imaginary.  Of course it’s not, it is 100% real.

What I AM saying though is that you don’t get to use that as an excuse for sticking your kid in an oven, burning their eyes with hot nails or beating them with a crowbar.  You get to FUCKING GO TO JAIL FOR THE REST OF YOUR FUCKING LIFE, that’s what you get.  Don’t give me any shit about “to this woman, she was simply cooking a turkey, her reality wasn’t actual reality, she probably didn’t even realize she was hurting her kids and it wasn’t her fault because she had a chemical imbalance”.  No, that may be the REASON it happened, it’s not an EXCUSE for it.

There’s a line you simply do not get to cross.

Look, my kids drive me absolutely bonkers sometimes.  I feel like just screaming at the top of my lungs for about an hour solid every other day.  But, I have this little thing in my brain that says “you know, cooking my kids like a turkey probably wouldn’t be the best course of action here”.  Most people, thankfully, have that governor in their heads too.  Most parents, no matter how crazy our kids make us sometimes, would never do the things this woman did. Not in a billion years, chemical imbalances be damned.

So, I suppose you can feel sympathy for her if you want on the grounds that she had a medical condition.  You can excuse her actions perhaps on the grounds that it wasn’t her fault because something in her brain wasn’t right.

Me, I call bullshit on that.

I’ll even say the unpopular thing here: a person THAT damaged has no place in civilized society as far as I’m concerned.  Even if you can convince yourself that there’s some magic pill that will fix everything, do you want to be the person that allowed her near her children when you find out she skipped her pills for a day and did it again?  That’s a risk that simply isn’t acceptable, so the legitimacy of the medical condition becomes irrelevant, the safety of the children is all that matters.

Simply put, there is a line you don’t get to cross, under any circumstances, for any reason.  This wasn’t an Al Qaueda operative we were trying to get information from.  This wasn’t the man that raped your 6-year old daughter that you were getting revenge on.  I’m not sure such actions would even be justified in those two cases.  This was a young child we’re talking about here.   So, before we have sympathy and understanding for the woman who perpetrated this heinous acts do you think we can maybe have some of that for the child who no doubt suffered horribly at her hands?  Do we really want to live in a society where someone can be excused for these types of actions against an innocent child under ANY circumstances?  Dear God I fucking hope not.

What’s shocking is that the people who read my comment on Digg didn’t see it that way, they in fact thought I was way off base.  I just don’t get that.  Well, I take that back, I totally get it: it’s that whole “but she was sick!” mentality at work.  It’s that whole “it can’t POSSIBLY be the fault of the person who did it” mentality.  Because in America, remember, no one is actually responsible for their actions any more.  It’s always someone else’ fault.  There’s always an excuse.  We just don’t believe in personal responsibility any more.  Witness the economic mess we’re in now if you need more evidence to support that view.

This whole thing is incredibly disgusting to me on so many levels.  I haven’t decided if what this woman did disgusts me more or the fact that ANYONE is willing to defend her actions on ANY grounds does.  It’s real close, I’ll tell you that, and the day that a seemingly accepted societal tendency is on par in terms of disgust as torturing an innocent child, something is SERIOUSLY FUCKING WRONG with the world.

Please, do me one little favor… whether you agree with what I’ve wrote here or disagree completely, PLEASE COMMENT ON IT.  I say this because I’d really love to tally how many people agree and how many don’t.  That tally would either depress the shit out of me or renew my faith in my fellow man.  Right now, from what I’ve seen on Digg, I can’t say I’m at all optimistic.

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 10 Feb 2009 @ 04:48 AM

EmailPermalinkComments (1)
Tags
Categories: Uncategorized

 07 Feb 2009 @ 4:00 PM 

This whole thing is likely to come of a bit conceited, but please believe me when I say I’m not trying to impress anyone and not trying to toot my own horn… not that I’d never do those things, I certainly would… it’s just that this entry isn’t about that at all, even if it may seem like it in some parts.

With that disclaimer in writing…

You know, I’m a pretty good programmer.  Sure, I’m probably not on the level of most of the top-tier guys, the Rod Johnsons and John Resigs of the world for example, but hey, how many people are?!?  Still, I’d say I’m probably better than many (to valid approximations of the word “better” anyway!)

I don’t mean any of this in a boastful way (hard as that may be to believe for those that know me!) I’m saying it because it sets up the discussion to follow, that’s all.

Now, one quality I have that I’m actually very proud of is that I’m a successful “generalist”.  This means that while you’ll always be able to find someone better than me in virtually any topic you choose to look at, you’ll probably have a tough time finding someone who is as good in as many different topics as I am.  I’ve always felt that good generalists are worth more than pure experts.  To be sure, sometimes you absolutely need a top-notch expert, someone that knows C++ like the back of their hand for example, as opposed to someone who’s just passable at it.  When I’m putting staff together you can be sure I’m thinking generalists all the way because it allows you to tackle things that are tougher to tackle if all you have are people who know A completely but who don’t know B and C at all.  Generalists are able to draw on a diverse background and set of experiences to reach conclusions are generate solutions that pure experts usually can’t, therefore a staff of generalists is usually more successful (unless you’re in an environment with a narrow focus of course, where experts tend to be more successful, but my experience is that those types of environments aren’t as prevalent as you may think).

I was asked by a colleague once how I got to be as good as I am at as many things as I’m good at.  Now, let’s put aside the obvious arrogance of accepting the premise of this question in the first place!  I respect that this colleague recognizes that not all developers are created equal.  This is in no way, shape or form boastful; it’s just a fact of every workplace.  That’s why you have lead developers and you have junior developers.  We all start out as junior developers, but good junior developers will recognize that they aren’t yet leads and will seek out what got the leads to where they are.  That’s what this colleague was doing.  So, I wanted to give them a real, legitimate answer that could at least potentially help them get to that next level.

So, I thought for a while, and ran through some possibilities in my head…

  • Is it as simple as God-given talent and aptitude?  No, that can’t be it because I’m frankly not THAT good!  While basic aptitude probably plays a role, I’ve seen developers who I would NEVER have guessed could code their way out of a paper bag and yet they weren’t at all bad at their jobs.
  • Am I simply smarter than everyone else?  HELL NO!  Most people that know me, I feel safe in saying, consider me a pretty sharp guy.  But I deal with people every day who I KNOW are intrinsically more intelligent than me, some of whom I’m a better programmer than, so it can’t be simple intelligence.
  • Is experience the wonder-drug here?  Well, clearly that is a factor… I’ve been doing this programming thing since I was about 9 years old, so that’s around 27 years in total.  Only about 13 of those though have been “professional”, where most would claim you truly learn the most, so that can’t be the only answer either.
  • Is education the key?  Definitely not: I never graduated college and only took a few Computer Science classes anyway, absolutely none of which taught me anything substantial that I didn’t already know.  Even in high school, while I was a solid B to B+ student the whole time without putting in much effort, I was rarely on any sort of honor roll, and was only about mid-range in my graduating class (if only I’d have put in SOME effort… oh the things you realize when you’re older)
  • Analytical ability.  Yes, that has impact for sure.  We all know developers who can’t debug to save their lives.  They can’t think through a problem logically and come to some sort of reasonable conclusion.  Give them a detailed enough spec and they can produce working code, but not GOOD code, and any deviation from the spec along the way proves difficult for them to handle.  They lack basic analytical ability, even to some extent the basic ability to think logically.  This most definitely is part of the answer, and a fairly big part, but again, it’s can’t be the ONLY answer.
  • Being “into it” at a young age.  I tend to discount this because while I think it’s true for some of us, I’ve met tons of developers who totally kick ass who’ve only been doing it a very short time (like 2-3 years in some cases).  While starting young I wouldn’t imagine ever hurts a developer, it’s probably not all that important either.

So, what makes me a developer that someone thinks to ask how I got to be as good as I am?  I didn’t have a definitive answer right away.  All of the above points probably factor into it, but none of their own is enough I think, and some are probably even debatable anyway.

Then it occurred to me… there was one thing I’d done A LOT of growing up that many other developers didn’t do, one thing that I still do today that not many developers do…

Video games.

Programming video games is an experience unlike virtually any other that I’m aware of.  You touch on so many different areas and have to learn so much that I think the outcome of the experience is your brain being wired a bit differently!  Especially if you do every detail of the game, from level design to graphics and sound to the underlying logic coding, you can’t help but learn a ton.

You need to figure out how to efficiently store all the multimedia assets so that it fits on your shipping media without killing the quality of the resources.  You need to do AI development.  You need to understand math to do graphics programming.  You need to design the world map and do level design and ensure that it’s all logical, solvable and fun at the same time.  You need to deal with compression algorithms and multithreaded design and network communications and audio/video and even write the story!  You often times need to manage multiple people, even for a little side-project, to get artwork done and voiceovers performed and code units integrated into the main baseline.  You need to create your own tooling, and you need to do all of this while ensuring that the performance of everything you do is stellar!

Even for simple games, this is not a task to be undertaken lightly!

It’s not about learning anything SPECIFIC either… I mean, learning Bresenham’s algorithm for drawing a line, or understanding how to put together a pursuit algorithm, none of that is likely to be directly applicable to coding an account balance transfer system for your next contract with a bank.  However, these things have underlying concepts and thought processes that can inform your thinking on the tasks you have to do at your regular day job.  They’ll also open up your mind to new solutions to problems that take bits and pieces from multiple topics in a way that many other developers can’t.  That’s what being a generalist is all about.  It’s more about practicing the ability to take seemingly unrelated bits of experience and information and synthesis it into a unique solution to a problem than it is about what you concretely know about anything at any given time.

Now, let’s be clear: none of the games I’ve ever made have been great.  It’s not like I’m churning out Halo or World of Warcraft or Guitar Hero here, so it can’t be about money.  I’m extremely proud of a couple of them (http://www.omnytex.com/products.shtml), K&G Arcade in particular, but the sales numbers say they weren’t very good, or AT BEST weren’t marketed well (hey, there’s something else you have to deal with!).  The thing is though that they don’t HAVE to be good for them to make you a better programmer.  No, check that: a better DEVELOPER.  It’s not just programming that creating games improves, it’s everything else that goes into being a developer because, let’s face it, programming, i.e., writing code, is a fairly small portion of what us developer/architects actually do.

I can remember the first game I ever wrote: the year, approximately, 1983.  It was based on the television show The A-Team and it was on my Timex Sinclair 1000.  I don’t remember much about the game, aside from the fact that it sucked beyond belief!  One other thing I do remember about it though is that the Timex Sinclair 1000 had 2k of memory and in order to make the game how I wanted it, I actually invented run-length encoding.  I obviously don’t mean “invent” as in I should own the patent on it now, it clearly wasn’t an original idea.  I mean “invented” in the sense of I didn’t know about it, in fact at that point had no way I COULD have known about it, yet that’s what it was.  I crammed something like 2k of graphics data alone into about 500 bytes, give or take, leaving me 1.5k for the game’s logic code.  In retrospect, that’s a pretty amazing achievement for a young kid doing a very early bit of programming.

But again, it’s not that I’m smarter than any other kid that age was… maybe I was to some extent, but not hugely so.  The difference is that I put myself in a situation where I had no choice but to improve if I wanted to succeed.  Making a game was that situation.  Few other projects at that time would have provided that challenge.  I guess at the end of the day it’s a question of evolution… evolution doesn’t necessarily mean growing a third arm because that’s advantageous for the species (it would be though, wouldn’t?!?)  Personal evolution is just as important.

Every one of the books I’ve written so far has had a chapter in it devoted to a game project.  That’s the case for a couple of reasons.  First, I believe my readers enjoy it. Second, I think they learn a lot from it because it frames the topic of the book in a different way than the other projects presented do.  Third, it’s frankly fun for me to work on, which is important when you’re writing a book because it’s a lot of work and having one chapter that you can cut loose a bit in is helpful.  Fourth, I know that in the process of writing that chapter I’ll learn something myself, and it hasn’t failed yet!

So, the point of all of this is simply that if you want to make yourself a better developer, a better generalist, start creating games today!  They don’t have to be great, and honestly, they mostly won’t be very good at all… you may produce one at some point that’s not bad, but generally they’ll suck.  Thankfully, that doesn’t matter in the least!  As long as you aren’t in it for the money it doesn’t matter one bit.  The process of creating a game will improve you as a developer more than any other single thing you can do, that’s my very firm belief.  I mean, you can waste four years in school, MAYBE learn a few things that are useful (the rest will be outdated by the time you get your degree, or else wasn’t terribly useful in the real world in the first place) or you can spend a few months creating a game that’ll teach you so much more.

I know which I’d choose :)

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 07 Feb 2009 @ 04:00 PM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized

 30 Jan 2009 @ 7:19 AM 

Here’s a collection of random thoughts I’ve had over the past few days… this should give you a nice insight into just how wacky the inside of my skull is!

  • Cerberus, the multi-headed dog in Greek and Roman mythology, guards the gateway to Hades… why exactly does the entrance to Hades need guarding?!?  Are there THAT many people trying to get in? (I actually did some research here… as it turns out, it’s a common misconeption that Cerberus guards the gateway… in fact, he guards the gates of Hades to prevent those that have crossed the river Styx from ever crossing back over… he’s making sure no one gets OUT, which makes *A LOT* more sense!) – A bit of trivia: the firewall protecting my home network is named Cerberus :)
  • If the United States is ever to be invaded by another country, I hope it’s Ukraine.  Why?  Have you seen their prime minister? http://i35.tinypic.com/2yjzmdk.jpg
  • I thought I’d clear this up for anyone who wasn’t sure… Dark Matter n. An invention of cosmologists to explain why the hell their equations don’t work out as they want them to.  To be clear: I’m not at all saying dark matter doesn’t exist… I have no clue whether it does or not. All I’m saying is that the experts don’t have a clue either! All they know for sure is things don’t add up like they expect, and the only explanation they can come up with to explain it is to invent some entity that may or may not exist that makes it all balance out…  Hey, wait a minute… when did scientists get religion?!?
  • Speaking of math… I was on the Tower of Terror ride last year at Disney World, and I noticed something… the flash a bunch of images at you throughout the ride meant to scare you… ghosts and such… but, they also flash E=MC^2 three separate times!  Proof that math is, in fact, scary!
  • I object to any list that has Battlefield Earth on it as a “top xxx worst movies of all time”, as I see all too often. If ever there was a craptacular campfest that is a blast to watch, that’s it. There’s so much unintentionally funny stuff in it that I find it very enjoyable to watch.  For example… Terl’s (John Travolta) conclusion that humans’ favorite food is rat because that’s what the “escapees” went for right away is in and of itself brilliant because it reminds me of a great joke:  A scientist has a flea. He fires off a gun and the flea jumps. He pulls off one of the flea’s legs and again fires the gun and again the flea jumps. He does this two more times and each time the flea jumps. After removing the fourh leg and firing the gun however, the flea does not jump. He fires the gun a few more times just to be sure.  The scientist then concludes that fleas hear through their legs.  The rat thing is the same sort of joke, and I find it very funny, as is the case with much of that movie. So, worst xxx film of all time? No way, it’s just good in a way that was in no way, shape or form intended!!
  • I tell my wife this constantly: if you’re attacked and you get the best of the attacker, DON’T F’ING STOP until there’s no way they can physically come back at you. You don’t necessarily have to kill the person, and legally you’re probably better off not killing them, but I don’t know, cutting off both arms and legs seems pretty safe too.  Ironically, I think it was the remake of the Texas Chainsaw Massacre that they tried that and it didn’t work… I might have the wrong movie, but I remember one of the bad guys having a hammer embedded in his brain, and that was only after a bunch of other stuff that would have killed any one of us, and he still got up and came after the hapless victims, so maybe it’s not the perfect strategy in ALL cases :)
  • I was asked it I’d go into space, given all the risks involved… I’ll go a step further: I have a wife and two kids, all of whom I love dearly. But, and I’ve told my wife this: if I was ever beamed aboard the Enterprise and the captain (whichever one it happened to be!) said I could go explore the galaxy with them, I wouldn’t even ask to go back down to Earth to say goodbye to my family, I’d just ask “where’s my station, dude?”. Surprisingly, my wife even understands! Not sure my kids would, but that becomes my wife’s problem :)
  • Cracked.com rules, and here’s why: http://www.cracked.com/article_15816_5-most-horrifying-bugs-in-world.html … I’ve read it numerous times and I still crack up every time!
  • The latest episode of UFO Hunters (a show most people who know me would think I love, but surprisingly it’s just OK for me… sometimes) they were talking about the rather sudden jump in UFO sighting in Great Britain over the last two years or so.  Now, it all could be real of course, but… might it just be a coincidence that the new Dr. Who has been really popular over just the last few years?  I didn’t watch the whole episode, so I don’t know if any of the sightings were of a flying Titanic or hundreds of evil flying garbage cans, but I’d be willing to bet they were :)
  • When I was a kid I snuck to watch the movie Alien and it scared me so bad I slept in my parents’ room for a week.  But, I’ll tell you what: vegetables are 10 times scarier it turns out: http://www.framebox.de/creations/3d/salad/
  • Anyone who says The Temple of Doom is their favorite Indiana Jones movie should promptly be ignored.  If they say Kingdom of the Crystal Skull is their favorite they should promptly be SHOT!
  • I still say Velcro is the long sought-after proof that aliens exist and that we recovered technology from a crashed craft at Roswell… I mean, does anyone actually think us pitiful humans could have invented something this awesome ourselves?!? I think not!!
Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 30 Jan 2009 @ 07:21 AM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized

 02 Jan 2009 @ 6:37 PM 

This was originally posted on 8/17/2008 on my old blog and is reposted now.  I promise though, original content coming soon!

———-

My son is eight years old. The other day I called him into my home office. I showed him the wallpaper I had just created (wow, I gotta admit, I wasn’t aware of the trick for having a “single” wallpaper span two or three monitors… sweet!). On one monitor I have a beautiful Hubble photo of galaxy M101, a spiral galaxy. On the other monitor I have M104, my personal favorite, the Sombrero galaxy.

I asked him if he knew what he was looking at. “Some stars?”, he said. “No, a galaxy”, I replied. “Oh”, he murmured. “Oh?!? Don’t you get it? That’s BILLIONS of suns!”, I cried. “Uh-huh”, he said.

He wasn’t impressed. Not in the least.

I thought about his reactions not just to those pictures but to many of the cool things I’ve shown him lately, and it occurred to me that there’s a very sad trend there: kids today aren’t impressed by anything it seems. The amazing has become commonplace to them, and very little holds the kind of wonder that many things used to be for me and others my age.

I remember around 10th grade, I found a science magazine in the school library where some scientists from IBM had written out IBM in Xenon atoms! They used what was then a new kind of microscope (a Scanning-Tunneling Microscope if I remember correctly to move INDIVIDUAL ATOMS around. I was blown away.

Well, I found a similar picture for my son. He wasn’t thrilled. He actually said “So what?”. I said “You’re looking at atoms, and someone was able to move them around how they wanted”, to which he replied “Ok.”

OK?!??!?

Now, granted, he’s only 8, so his brain just doesn’t have the frame of reference to truly get some of this stuff. Much of it goes over his head. I understand that. But it’s more than that, and it’s not just him. Every single day he is surrounded by marvels of technology that a mere 50 years ago was just so beyond the scope of what was possible and known to most people. I mean, a little under 50 years ago the first electronic calculator was born. A (relatively) small device that could do mathematics for you? People couldn’t believe it! Now, if your PORTABLE PHONE can’t do differential calculus it’s a piece of junk!

Now we have microSD cards that can store 32Gb of data (maybe more, who can keep up any more?) and it’s no big deal to him. I try to give him a frame of reference by showing him a STACK of old hard drives from maybe 10 years ago… I tell him “All those drives TOGETHER only has about 4Gb of data, so this one tiny little card has 8 times as much space”. He looks at me as if to say: “Dear man… thank you for trying… thank you for caring… but so f***ing what??”

I’ve also tried introducing my son to “old” computers, the C64, Atari, those kinds of machines. He likes some of the games, he’s big into video games, but it’s just not the same as it was for me. These were literally life-altering events for me, getting each of those computers and learning what they could do. Hacking code to all hours of the night, getting the memory map for the thing and figuring out what sequence of POKE statements generated various colors and sounds. All that was amazing to me. To him though, they’re just toys.

Now, I’m not looking for the same kind of paradigm shift in thinking that they were for me, but I wonder what it would take for that sort of thing to occur for him at all? I mean, would a Star Trek-style transporter do it? Would a Bishop-style android do it? He wasn’t even as thrilled with his first plane ride as I thought he’d be, as I was when I finally got to go on a plane at about age 19… I wonder if a trip to the moon would be any big deal to him?

I think it’s so easy to take for granted all the human race has accomplished, not to mention all that nature has to offer. We all do it to some degree I think, but the days of sitting around the ONE black-and-white television in the house and being amazed at what you were seeing are long gone. The days of those electronics kits that let you built a simple radio and that being exciting to a child are long gone. The days of looking up at the night sky and seeing the moon and being just utterly floored by the fact that people have walked on it are long gone. The amazing is now commonplace, and that sense of wonder and amazement that my generation had (hopefully still has!) is gone. I believe my generation may wind up being the last that has the pleasure of that sense of discovery, that sense of amazement at what’s possible, what’s been accomplished and simply what IS or MAY BE (maybe The Neverending Story had it right: maybe The Nothing is taking over).

I don’t know what it will take for this new generation to have those same experiences… I know it’s a heck of a lot more than it took for me, and I don’t see anything like that on the horizon. Generation Y has my sympathies.

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 02 Jan 2009 @ 06:37 PM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized

 15 Dec 2008 @ 6:18 AM 

This was originally posted on 10/5/2007 on my old blog and is reposted now because… well, because I’m too lazy to write a new entry today!

———-

WARNING!!  This is one of my patented “not suitable for all audiences” posts… profanity, depraved thoughts, insanity, all are on display here.  If you are easily offended by what is meant to be humorous, go away now!!

You know, this is going to sound horrible, but… I find myself laughing at people’s deaths sometimes. Not because they died, I feel as much sympathy for people and their families as anyone. It’s just that sometimes the manner of peoples’ demises is just funny as hell.

Come on, you know I’m right, especially when outright stupidity is involved. Of course there is the Darwin Awards for things like this, but when someone finds out I find them amusing I frequently get asked “how would you feel if it was YOU? Wouldn’t you be upset looking down, or up as the case may be, at people laughing at your death?”

The short and simple answer is it depends on how I die! Here’s my feeling… if I die in some incredibly stupid or bizarre way that tickles your funny bone, laugh your ass off! It’s if I get killed by a drunk driver or am in the mall when Al Qaeda decides to bomb it, then I would hope you’d keep it in check (at least in public). Deaths like that deserve your sympathy, regardless of who the unfortunate victim was.

But, those guidelines are likely not solid enough for some people, so, I’ll make it simple for you… Below is a list of ways that, if I meet my end in them, you are hereby free from sin is you bust a gut at my expense… Also note that in at least some of these cases, such a high degree of stupidity would have to be involved that you might be LEGAL OBLIGATED to laugh at my death!

  • If I am working at a zoo and feed 14 animal laxatives and 200 tons of grain to an elephant and then suffocate under a mound its dung while trying to administer a enema to said constipated elephant, you are free to laugh at my death.
  • If I stick my tongue on a telephone pole in the dead of winter and either die of starvation five days later, or of blood loss when I try to cut my tongue off to escape, you are free to laugh at my death.
  • If a fireball engulfs me while lighting a cigarette on my way to Taco Bell for the nights’ second round of beef and bean Burritos, you are free to laugh at my death (think about it…)
  • If I carve a nice pattern into my face because I wore a tie while working near a spinning lathe, you are free to laugh at my death.
  • If we discover that our parents were telling the truth and all that gum I swallowed (and continue to swallow) did in fact built up as a giant ball in my lower intestine and blocked my digestive system, eventually exploding in a mess of fecal matter inside me, you are free to laugh at my death.
  • If I develop a sever case of lactose intolerance, cease eating and drinking all milk products, and then die of a nutritional imbalance caused by the lack of milk in my diet, you are free to laugh at my death.
  • If I am electrocuted as a result of a short circuit in the automatic electric toilet flusher I install and the electricity travels up through my stream of pee and stops my heart, you are free to laugh at my death.
  • If my doctor tells me I have to lose weight and I proceed to eat nothing but salads for a month and then wind up choking on a dry piece of lettuce, you are free to laugh at my death.
  • If I decide I want to cheat on my wife because I have a sick need to know what sex feels like with a 500-pound woman and I am subsequently suffocated while performing the deed with said monstrous heffer, you are free to laugh at my death.
  • If, in an attempt to jump over a puddle on the sidewalk I slip on a patch of ice and bash my skull wide open on a hot dog stand in New York City, you are free to laugh at my death.
  • If I stroke out while squeezing out a particularly solid pound of fecal matter after a trip to Old Country Buffet, you are free to laugh at my death.
  • Anything involving a door mouse, a barrel of fish, a rainy day in Jacksonville, Florida and at least 20 jars of peanut butter (creamy, it won’t be funny if it’s chunky!), you are free to laugh at my death.
  • If I eat a package of popcorn kernels, because I like to do that sometimes, and then die from hundreds of small holes in my gut because I went into a tanning bed shortly thereafter, you are free to laugh at my death.
  • If I try to duplicate that A-Team episode where they attach a bunch of garbage bags to a lawn chair and then use hair dryers to inflate them and fall to my death from 200 feet up because the extension chord wasn’t long enough, you are free to laugh at my death.
  • If my skull is crushed by the frozen waste dumped from an airplane lavatory, you are free to laugh at my death.
  • If I light my arm on fire lighting the BBQ, which I could have survived except that the can in the shed that I thought had water in it actually had gasoline in it, you are free to laugh at my death.
  • If while playing on my trampoline I get a bit overzealous in my attempts to pull off a triple back tuck and fly off and impale myself on the picket fence surrounding my flower bed, you are free to laugh at my death.
  • If my wife puts an entire box of baking soda in the toilet in an attempt to get the remnants of the last beef and bean barrio Taco Bell run cleaned up, but neglects to tell me, and I then proceed to load’er up with pee, you are free to laugh at my death (Get it? Baking Soda and urine, which is acidic, chemical reaction, explosion, ‘nough said).
  • If on a very hot day while mowing the lawn I decide to try and drink from my power washer and blow the back of my head off, you are free to laugh at my death.
  • If after getting sprayed by a skunk I decide to take a bath in gasoline, because of course gasoline can be an excellent cleaning agent, but then decide to try and cover up the smell with candles and incense, you are free to laugh at my death.
  • If I blow myself up by leaving the top down on my BBQ grill for five minutes while the propane builds up and then quickly open in and toss a match in, you are free to laugh at my death. (Incidentally, this is the one item on this page that I’ve actually come close to doing once or twice… I’m kinda dangerous when it comes to grilling!)
  • If I’m ever in a buffet and the place goes up in flames but I stay behind to fill my plate one last time to eat outside while everyone else escapes and I wind up a roast ON the buffet table, you are free to laugh at my death.
  • If I dehydrate in a hot tub, lose consciousness and then drown, you are free to laugh at my death.
  • If I am eaten alive by sharks because I forgot to take the package of Slim Jims out of my swimming trunks before going into the water, you are free to laugh at my death.
  • If I drop dead of a heart attack while riding a stationary bike because my doctor told me I have to get in shape, you are free to laugh at my death.

And there you have it. My wife says it’s morbid, but shouldn’t we laugh at something that is as absolutely inevitable as death is? What the hell else can you do in the face of the Reaper? Besides, as the Darwin Awards prove, when stupidity is involved or just incredibly bizarre bad luck, don’t we almost have an obligation to laugh?!?

Thinks its worth sharing? Go for it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Slashdot
  • StumbleUpon
  • email
  • Reddit
  • RSS
  • Twitter
Posted By: fzammetti
Last Edit: 15 Dec 2008 @ 06:18 AM

EmailPermalinkComments (0)
Tags
Categories: Uncategorized





 Last 50 Posts
 Back
Change Theme...
  • Users » 1
  • Posts/Pages » 24
  • Comments » 9
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight