<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Blurry Words</title>
 <link href="http://blurrywords.com/atom.xml" rel="self"/>
 <link href="http://blurrywords.com/"/>
 <updated>2011-01-12T19:20:10-05:00</updated>
 <id>http://blurrywords.com/</id>
 <author>
   <name>Mike Foster</name>
   <email>blog@blurrywords.com</email>
 </author>

 
 <entry>
   <title>Grey Matter Exploration...</title>
   <link href="http://blurrywords.com/2011/01/12/grey-matter-explorations.html"/>
   <updated>2011-01-12T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2011/01/12/grey-matter-explorations</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve started an exploratory writing process; a timed exercise as it’s called in Natalie Goldberg’s book, &lt;a href='http://www.amazon.com/gp/product/1590307941?ie=UTF8&amp;amp;tag=blurword-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1590307941'&gt;Writing Down the Bones&lt;/a&gt;. I bought this book after it received high praise in the &lt;a href='http://www.randsinrepose.com/archives/2010/12/13/seven_precious_books.html'&gt;latest post on Rands In Repose&lt;/a&gt;. Rands mentioned that he&amp;#8217;s on his third copy, mainly due to over use. After finishing it, and agreeing with Rands opinion of the book, I&amp;#8217;ve permanently allocated a spot for it on my Kindle - to avoid the unneeded deforestation.&lt;/p&gt;

&lt;p&gt;Every morning, for about 10 to 20 minutes, I just write. Punctuation doesn&amp;#8217;t matter. Grammar, spelling, it all goes out the window as the task requires you to keep writing no matter what. The goal of this process is to reach what is described in &lt;a href='http://www.amazon.com/gp/product/1590307941?ie=UTF8&amp;amp;tag=blurword-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1590307941'&gt;Writing Down the Bones&lt;/a&gt; as &amp;#8220;First Thoughts&amp;#8221;. First thoughts are raw material spouted by your brain. Usually these thoughts are polished up and censored before being released from the shackles of your mind, if released at all. An internal editor handles the polishing. The editor must be overthrown during this process; keeping the output flowing renders it incapable of locking things down. Any hiccups in that flow - fixing punctuation, typos, grammar - will allow the editor to jump in and shut down the first thoughts jail break. At least that’s how I understand the reasoning for the process.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been doing this for only a couple days now. I haven’t been doing it long enough to see the benefits of the process. But common sense tells me that of course this process will be beneficial to my writing. There’s no doubt. If you want stronger muscles, lift some weights. If you want to be good at &lt;a href='http://supermeatboy.com/'&gt;Super Meat Boy&lt;/a&gt;, then play the damn game until your thumbs bleed. And if you want to be a better writer, then write. Simple.&lt;/p&gt;

&lt;p&gt;One thing I have noticed so far during the exercise is that my fingers aren’t comfortable with it at all, at least not at this point. I think it makes them nervous. Being a software developer, I type a lot. Whether it&amp;#8217;s writing code, emails, technical specs; it&amp;#8217;s never ending. And with all that typing, there’s a certain level of accuracy I’ve come to expect from my fingers. They know what’s expected from them and they’re very good at producing at that level. Without the safety net of editing in place though, and being required to keep writing no matter what, that accuracy level has gone to shit. I stumble through my thoughts, becoming preoccupied with the train wreck taking place just beneath my nose. My fingers plead with my brain to allow them to just fix one typo. Just one little typo. The right pinkie starts his sneaky ascent up to the back space. “It won’t hurt anyone, just one little correction.” the fingers explain, “It’ll make us all feel better.” The brain does its best to keep everything flowing, but those ten little digits are persistent. The battle rages on. The typos pile up.&lt;/p&gt;

&lt;p&gt;I’m interested to see what I can produce once editing and finger nerves take a back seat to first thought production. I recommend you give it a shot yourself. See what uncensored thoughts flow out of you&amp;#8230;if you dare.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>When Fax Ruled the Future...</title>
   <link href="http://blurrywords.com/2010/12/31/when-fax-ruled-the-future.html"/>
   <updated>2010-12-31T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2010/12/31/when-fax-ruled-the-future</id>
   <content type="html">&lt;img align='right' id='post-image' src='/images/posts/needroads.png' /&gt;
&lt;p&gt;Between last night and this morning I’ve consumed a lot of &lt;em&gt;Back to the Future&lt;/em&gt; content. In celebration of the 25th anniversary, and to take part in the &lt;a href='http://www.tv.com/your-everything-guide-to-new-years-tv-marathons/story/20436.html'&gt;marathon television rituals&lt;/a&gt; associated with bringing in the New Year, AMC has been showing the trilogy every night this week. I took in the second one last night, which is my favorite of the bunch. It’s not the best of the trilogy, part one reigns supreme. However, two’s a much more endearing movie, mainly due to the future sequence that the film opens with. Looking at where we can go, what could be possible is far more interesting than looking back at what once was. Sure, being able to see your parents before they were your parents is somewhat intriguing. And sure, being able to experience a time that you’ve only heard about through twisted, idealized stories of yesteryear would be&amp;#8230; I guess eye opening is a good way to describe it. Maybe disappointing, depending on how skewed your elders’ memories of the good old days are. No matter what the experience, I don’t think it ranks even close to what it would be like to experience a time yet to even be conjured up.&lt;/p&gt;

&lt;p&gt;One of the fun parts of watching &lt;em&gt;Back to the Future 2&lt;/em&gt; is looking at how close our world resembles the imagination of the late 80s. We’re now a matter of hours from being only four years from the future that Doc, Marty and Jennifer visit. AMC did a great job of prefixing each of its commercial breaks with a look at the predictions made in the film, and which of those predictions came true so far. What I found interesting in my latest viewing was the technologies and everyday items that the people in the 1980s thought would stand the test of time and still be an integral part of daily life in 2015. Let’s take a look.&lt;/p&gt;

&lt;h4 id='laser_discs_trash_piles_near_the_landing_site_of_the_delorean'&gt;Laser Discs (trash piles near the landing site of the Delorean)&lt;/h4&gt;

&lt;p&gt;Growing up, my experience with laser discs was brief, but memorable. One of my parent’s friends had just bought a new laser disc player and we went over there to allow them to show it off. We watched &lt;em&gt;Terminator 2&lt;/em&gt;. I remember the sounds booming. I remember Arnold ripping around on his motorcycle. The T1000 latching on to the back of their car as they sped away; all this in picture quality I had never seen before. It was awesome. My 10 year old brain nearly exploded.&lt;/p&gt;

&lt;p&gt;It’s easy to recall why in 1987 LD seemed like the wave of the future. But it’s bulky, awkward size and high price tag made sure it would never catch on. Being the predecessor to DVD and Blu-ray is an ok consolation prize though…I guess.&lt;/p&gt;

&lt;h4 id='phone_booths_clusters_are_seen_throughout_the_town_square'&gt;Phone Booths (clusters are seen throughout the town square)&lt;/h4&gt;

&lt;p&gt;This one’s a little more baffling to me. The first generation of mobile devices was already in existence at the time this movie was being penned. They were nowhere near the mainstream yet, but they were there and by the early 90s, the down fall of phone booths was already under way. Can you remember the last time you saw a phone booth? No? Me neither.&lt;/p&gt;

&lt;h4 id='newspapers_docs_future_predictor'&gt;Newspapers (Doc&amp;#8217;s future predictor)&lt;/h4&gt;

&lt;p&gt;It’s no secret that newspapers and magazines are in serious trouble. Making it through 2011 alive is the goal of the industry right now; forget about making it to 2015.&lt;/p&gt;

&lt;p&gt;The Internet was there in the 80s, but it wasn’t until the 90s when it started its meteoric rise. But still, a median like the newspaper that requires massive consumption of a natural resource should always be considered in danger of being supplanted in the future.&lt;/p&gt;

&lt;h4 id='fax_machines_future_marty_and_jennifers_house'&gt;Fax Machines (Future Marty and Jennifer’s house)&lt;/h4&gt;

&lt;p&gt;Fax machines are still part of the business world in a diminished capacity. It has a slim chance of existing in 2015, but it will never be, and never was, at the prevalence depicted in part two. Marty gets fired, he has fifteen different faxes going off to tell him about it. I don’t think I’ve even seen a total of fifteen fax machines in my entire life.&lt;/p&gt;

&lt;p&gt;The fax machine had its placed, and still does. Unfortunately for the fax, not for us though, another technology (email) was lurking in the dark, primed for the head shot and exclamatory tea-bagging.&lt;/p&gt;

&lt;p&gt;So, what can you take away from this post? I didn’t write this post to nitpick at the movie. Don’t get me wrong, it’s fun to pick this stuff apart, but it’s not the point here. I’m using the flick to make a point about the perils of an ever evolving world. Paradigm blindness. “This is how we’ve always done it”-syndrome. It’s a defense mechanism against the laser discs and fax machines of the world. But, it cripples you to being open to the planet shakers and world shattering advancements. If you’re a consumer, this isn’t a huge deal. It’s the difference between being an early adopter and catching on once the new technology is in the mainstream. Not a big deal; it probably saves you a bunch of cash and heartbreak when a new product doesn’t catch on. However, if your in the business world with this mindset, it&amp;#8217;s a much bigger problem. You’ll always be playing catch up; no way of getting ahead, no way of hitting it big if you aren’t at least willing to explore new ways and new developments.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>When We Last Spoke...</title>
   <link href="http://blurrywords.com/2010/10/31/relaunch-post.html"/>
   <updated>2010-10-31T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2010/10/31/relaunch-post</id>
   <content type="html">&lt;img align='right' id='about-mii' src='/images/posts/frank.png' /&gt;
&lt;p&gt;Blurry Words has long lain dormant while dust and comments of porn links and penis enlargement offers settled on its inanimate frame. The posts have grown stale, and an overwhelming stench hangs in the air. It&amp;#8217;s either decay, or&amp;#8230;no, it&amp;#8217;s definitely decay.&lt;/p&gt;

&lt;p&gt;Deep in the bowels of the site a furnace roars to life. Blasts of heat and power roar through the outer extremities. Lights begin to flicker. An old timey record player can be heard in the distant as it slowly begins to play NSync&amp;#8217;s, &amp;#8220;Bye, Bye, Bye&amp;#8221;. Blurry Words arises from its indefinite slumber.&lt;/p&gt;

&lt;p&gt;Welcome to the Halloween relaunch of Blurry Words. It feels good to be back. I hope you didn&amp;#8217;t miss me too much. The archives say that the last time I posted it was October of last year. Younglings have this innate capability to torpedo pretty much anything; all with a smile, or a laugh, or a steaming pile of unmentionable in their diaper.&lt;/p&gt;

&lt;p&gt;Beyond that, I&amp;#8217;ve been extremely busy. Work. School even. Some play. A good video game will trump a new blog post nine times out of ten. But now I&amp;#8217;m recommitted. I have my wife to thank for that. She threatened to disallow the auto-renewal of my server space to take place. This immediately awoke the five year old version of me inhabiting my subconscious. Because, even though I&amp;#8217;m not interested in it right now&amp;#8230;actually, I am interested in it right now. Give it back.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;ll be good to get back to writing posts. I really enjoyed scraping them together back when I was actively spewing. I found it fulfilling and surprisingly beneficial. My writing skills got better; something that was noticeable at the day job. My fingers were able to express ideas that my mouth just couldn&amp;#8217;t. That mouth of mine; it&amp;#8217;s pretty horrible at the whole communicating thing.&lt;/p&gt;

&lt;p&gt;But lately, I&amp;#8217;ve felt the writing skills slipping. Composing technical specs and impact analyzing was becoming a less fluid process. My writing muscles have digressed in to a soft, mushy mess around my mid-section. It&amp;#8217;s time to hit the gym.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;ve been to BW before, you might&amp;#8217;ve noticed that the site got a bit of a redesign. I&amp;#8217;ve spent the last few weeks banging the dust off, hanging up some air freshener, and basically just revitalizing the ol&amp;#8217; stomping ground. I ripped out her previous engine (WordPress), which was more of a hindrance to my process than anything else, and replaced it with a kick ass little tool that does everything I need in a way that I seem to enjoy (Jekyll).&lt;/p&gt;

&lt;p&gt;As I said, the layout and visual design is completely revamped. My goal was to simplify and have a clean reading area for the posts. I recently read through &lt;a href='http://www.esquire.com/archive/features/chuck-klostermans-america/0/10/'&gt;Chuck Klosterman&amp;#8217;s Esquire archive&lt;/a&gt;. The thing about Esquire&amp;#8217;s site is that it is horrendous for reading articles. There&amp;#8217;s animated ads flashing away on the right, a noisy side bar to the left; it&amp;#8217;s a horrible experience. So, I started opening up the articles in their provided Print view. Much better. That&amp;#8217;s how articles are meant to be read on the internet. And even though the old BW design was nowhere near the travesty that Esquire&amp;#8217;s is, I feel really good about this new one.&lt;/p&gt;

&lt;p&gt;So there you have it. Blurry Words, back in action. Hopefully I can avoid all this Meta conversation in the foreseeable future and just bang out some interesting posts. Until then, enjoy Klosterman&amp;#8217;s Esquire articles, if you haven&amp;#8217;t already.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Partial Functions and Enforcing Extension</title>
   <link href="http://blurrywords.com/2009/10/10/partial-functions-and-enforcing-extension.html"/>
   <updated>2009-10-10T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/10/10/partial-functions-and-enforcing-extension</id>
   <content type="html">&lt;p&gt;I like playing around with other programming languages from time to time, just to see how or what they do differently than the core languages that I work with every day.  So this morning I was spending some time with C#.  I&amp;#8217;ve actually done some development in C# in the past.  About three years ago now, I think it was that long ago&amp;#8230;maybe longer, I used it to develop both a Sprite Editing tool and a Level Designer.  So I&amp;#8217;m &amp;#8220;familiar&amp;#8221; with the language, but basically have etch-a-sketched what makes it unique from Java.&lt;/p&gt;

&lt;p&gt;My rediscovery of C# got me thinking about function modifiers, mainly because C# and Java have countering approaches to handling virtual functions.  In Java your a virtual function unless declared otherwise by using the final modifier (private methods are probably not considered virtual either).  But in C# it&amp;#8217;s the exact opposite.  Your virtualality (is that a word?) needs to be explicitly declared by using&amp;#8230;wait for it&amp;#8230;the virtual modifier.&lt;/p&gt;

&lt;p&gt;Another difference is in the subclasses.  Again, C# seems to be much more explicit about this kind of stuff.  You must use the override modifier to declare that your overriding a virtual function.  In Java you really don&amp;#8217;t have to do anything, just make sure you have the same name and parameters.  Sure, that @Override thing&amp;#8217;s been tacked on to newer versions of Java.  This helps the compiler make sure that the virtual method actually exists in the superclass, but you don&amp;#8217;t have to use it if you don&amp;#8217;t want to.  C# makes you use it, which in turn ensures of your intentions.&lt;/p&gt;

&lt;p&gt;Are these differences a big deal?  Not really.  My preference would probably be with the way C# accomplishes it, as it allows you to be more explicit in your intentions without being anymore verbose about it, which results in clear, easier to maintain code.&lt;/p&gt;

&lt;p&gt;But the purpose of this post is where my mind went when considering the way virtual functions are handled in both languages.  There happens to be a big hole in the amount of control that the superclass can take over its virtuals.  In both languages, actually any language I&amp;#8217;ve worked with for that matter, the superclass has little to no control on whether or not the subclass inherits the functionality provided by a virtual function.  If the subclass feels it needs the superclass&amp;#8217;s implementation as well as some additional stuff, then it can easily call upon the provided code by doing super.FuncName() in Java or base.FuncName() in C# within the overridden function.  But, what if the superclass wants to force the subclass to use the code its virtual function has provided?  What if it just wants to provide the subclass with the ability to extend a method and not completely override it?  &lt;strong&gt;Both languages need what I&amp;#8217;m calling, the partial function modifier.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For those that haven&amp;#8217;t stop reading, a partial function would be a function declared and defined by the superclass that provides some functionality that needs to be a part of every subclass&amp;#8217;s implementation of that function.  The subclass would only be able to extend, using the extend modifier of course, the function and provide further logic that is specific to the subclass&amp;#8217;s needs.  Similar to an abstract class, the partial function would be required to be extended, or have its class marked abstract, as by marking a function as partial the superclass is basically saying, &lt;em&gt;&amp;#8220;Hey, this method, the code it implements&amp;#8230;it&amp;#8217;s required but the function is still unusable unless you provide the functionality needed to complete it.&amp;#8221;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s a usage example to show&amp;#8230;what else, it&amp;#8217;s usefullness.  Let&amp;#8217;s say you have an abstract GameState class.  This class should be inherited by every different game state that your game has.  You&amp;#8217;d probably have a subclass for the main menu, gameplay, submitting highscores, and so forth and blah.&lt;/p&gt;

&lt;p&gt;The GameState class will need to define methods for loading, drawing and updating.  Each method will need to be implemented by every subclass.  You start off by making all three of the methods abstract.  But then you start creating some subclasses and realize that each and every call to Update should query for actions by the user.  Did they press a key, did they select something&amp;#8230;stuff like that.  So you turn the Update method into a virtual method (lets think in C# on this one) and implement the querying functionality for the user&amp;#8217;s actions.  Now each subclass just needs to override Update and call base.Update() within it in order to take advantage of the functionality provided by the superclass.&lt;/p&gt;

&lt;p&gt;That seems like a perfectly acceptable way of implementing the Update function.  But what ends up happening from then on is that every time you create a new game state and go about setting up your Update method, you forget that you need to make the base.Update call.  So you start testing the new state, no user input works and you smack yourself in the head for forgetting that same stupid call once again.  Now if you had a partial function, the burden is on the superclass to make sure that that part of the code is implemented every time.  And the superclass has no problem with that&amp;#8230;mainly because, well, it&amp;#8217;s SUPER.  Sorry, that&amp;#8217;s lame but I&amp;#8217;m leaving it in.&lt;/p&gt;

&lt;p&gt;Anyways, would a partial method modifier really save you oodles of time&amp;#8230;probably not.  But the point is more that the superclass should be able to control this kind of circumstance, not the subclass.  And right now the subclass is piloting the ship.  Partial methods ensure that the vital code of a method, and we can assume that it is vital because otherwise there wouldn&amp;#8217;t be a reason to force the subclass into using it, is being run before anything else the subclass might tack on to execute.  A little more complexity can be hidden and a little less burden can be put on the subclasses, neither of which are ever bad things.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The BlackBerry JDE Can't Find javac...</title>
   <link href="http://blurrywords.com/2009/09/19/The-BlackBerry-JDE-Cant-Find-java.html"/>
   <updated>2009-09-19T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/09/19/The-BlackBerry-JDE-Cant-Find-java</id>
   <content type="html">&lt;p&gt;The overall process for installing the JDE is straight forward, just download and follow the installation instructions that follow. However, after you create the de facto &amp;#8220;Hello, World!&amp;#8221;&amp;#8221; application and you attempt to compile, you may run into the following error:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I/O Error: Cannot run program &amp;#34;javac&amp;#34;: CreateProcess error=2, The system cannot find the file specified &lt;br /&gt;Error while building project&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not a great way to start, but not a huge problem to fix. Most modern day IDEs now ask for the installation location of your Java Development Kit (JDK) during the installation process. However, the JDE relies on the system to inform it of where the JDK is located. This means that you need to make sure that you specify your JDK’s bin directory in your PATH variable. You can do this permanently by opening up the &amp;#8220;Systems Properties&amp;#8221; dialog and under the &amp;#8220;Advanced&amp;#8221; tab clicking on the &amp;#8220;Environment Variables&amp;#8230;&amp;#8221; button. Now find the PATH variable in the &amp;#8220;Systems Variables&amp;#8221; list and add &amp;#60;PATH TO JDK HOME&amp;#62;/bin to it.&lt;/p&gt;

&lt;p&gt;Once your done with that, reload your JDE and compiling should commence with only issue that are of your own doing.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Bing vs. Google...The Results Show!</title>
   <link href="http://blurrywords.com/2009/09/12/bing-vs-google-the-results-show.html"/>
   <updated>2009-09-12T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/09/12/bing-vs-google-the-results-show</id>
   <content type="html">&lt;p&gt;Let’s be blunt about this. No reality competition cliff hangers. No right after this commercial break. Let’s just dive right in for those that have no interest in staying ‘til the end.&lt;/p&gt;

&lt;p&gt;Basically, from my perspective&amp;#8230;Google’s still king!&lt;/p&gt;

&lt;p&gt;As I stated in &lt;a href='http://www.blurrywords.com/2009/06/15/bring-it-on-bing-vs-google.html' title='Bring It On! Bing vs. Google'&gt;my previous post&lt;/a&gt; to set up my intentions for this comparison, I made Bing my default search provider in Chrome for what I consider a &amp;#8220;significant&amp;#8221; length of time. That turned out to be a couple of months. If Bing gave me search results that were useful relative to my needs, then it got a tick mark. If it didn’t, I jumped over to Google to see what its take on the same search would be. If Google came up with something useful, it got the tick mark.&lt;/p&gt;

&lt;p&gt;It should be noted that I realize this isn’t a very scientific process. Trust me, I’ve had it pointed out to me several times by those that noticed the accumulation of tick marks on my whiteboard. I get it, it’s a bit hack. But at the same time, determining which search engine provides better results is a completely subjective process that could never truly be scientifically analyzed anyways. So, I deem my process good enough for my needs and good enough to blog about.&lt;/p&gt;

&lt;p&gt;As you might have guessed from me giving away the punch-line at the start of this post, Bing was a bit of a disappointment. It turns out that about 30% of the time Bing gave me an answer that I didn’t find useful and Google was able to provide something better. That’s a fairly significant amount of the time, certainly not good enough to be named my default going forward&amp;#8230;.or to even give it a chance at a one to one comparison with Google. It just didn’t cut it.&lt;/p&gt;

&lt;p&gt;Beyond the 30% fail rate though, what really started to bother me about Bing was its rigidity and inability to cope with my mistakes. Mistakes like me making a typo. Where Google seamlessly adapts to such a mistype by its users, Bing responds with something like so:&lt;/p&gt;

&lt;p&gt;&lt;img alt='Bings Failure' src='/images/posts/bing_checkstyle.png' /&gt;&lt;/p&gt;

&lt;p&gt;Not being able to adapt and push forward through such a typo is just not acceptable anymore. Google handled it perfectly without any further effort out of me. It recognized that there was a 99% chance that I was talking about &lt;a href='http://checkstyle.sourceforge.net/'&gt;checkstyle&lt;/a&gt;, a software development tool for adding code convention checking to your build process, and gave me the results for its assumption. While on the other hand, Bing just stood there with a dumb look on its face like it had no freaking idea what the hell I was talking about.&lt;/p&gt;

&lt;p&gt;So Google’s officially back as my default browser. Though this comparison was enough to convince me of its superiority, you shouldn’t let it convince you. As I said, I had this test on my whiteboard for two months. Anyone that saw it had an opinion on this and some of those opinions were that Bing definitely supplied more natural, useful results than Google. You basically just need to figure out what works best for you and go with it. Bing has a lot of functionality and is far superior than all past challengers of Google’s space. But for me, it still falls short.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00012</title>
   <link href="http://blurrywords.com/2009/09/07/blur-00012.html"/>
   <updated>2009-09-07T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/09/07/blur-00012</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve reorganized Blurry Words again.  Now all Blurs will be inline with the rest of my post.  I&amp;#8217;m mainly making this change as I&amp;#8217;ve had a few blurs that went unwritten due to the fact that I had no space to include an image or another type of media.  Though I liked having the blurs on the left sidebar, this should allow a little more flexibility, which is the main reason for having the blurs in the first place.&lt;/p&gt;

&lt;p&gt;Also, I hope to have some new useful content up here in the near future.   My wife gave birth to our daughter four weeks ago today.   On top of that we just bought a house as well.   So, it would be an understatement to say that I&amp;#8217;ve been preoccupied.&lt;/p&gt;

&lt;p&gt;But, I do want to get back to it.   I have the conclusion to my &lt;a href='2009/06/15/bring-it-on-bing-vs-google.html'&gt;Bing vs. Google comparison&lt;/a&gt; and I plan to add a new subcategory to the BlackBerry category called, &lt;strong&gt;BlackBerry Gotchas&lt;/strong&gt;.  These will be shorter posts that allow me to document quirks and other nuisances of BlackBerry development that are not always so obvious and may cause developer some undesired grief (and possibly already have for myself).&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00011</title>
   <link href="http://blurrywords.com/2009/08/06/blur-00011.html"/>
   <updated>2009-08-06T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/08/06/blur-00011</id>
   <content type="html">&lt;p&gt;There’s something about Xbox achievements that drives the way I play. Chasing achievements is part of the experience and definitely extends the life of a game. The whole system has been a huge success. With that said, the point of this Blur is to bitch about how &lt;strong&gt;the achievement system is wrecking Horde Mode in Gears of War 2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With the latest Dark Corners downloadable content, tied with a great deal to bundle it with the rest of the released map packs, I jumped back in for some more Gears this week. I was done, I put it a way to spend some more time with my other neglected games. But, now I’m back&amp;#8230;damn you Epic.&lt;/p&gt;

&lt;p&gt;Horde mode has been my focus. And, because I’m hugely driven by achievement earning, my decision on which map to play is completely driven by &lt;strong&gt;Gamerscore Greed&lt;/strong&gt;. And, it’s not just me. It seems like the whole community is thinking the same thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting a complete 5 man team of randoms is now officially impossible&lt;/strong&gt;. Players don’t get the map they need, they drop. You usually end up with 2 or 3 guys trying to take on the horde, which becomes nearly impossible around level 9 or 10 (yes, playing with friends that you communicate with makes it less impossible, but with a bunch of silent randoms&amp;#8230;no way).&lt;/p&gt;

&lt;p&gt;Since most achievements revolve around reaching level 10, this turns into a pretty frustrating experience. Quite a waste of time. I’m sure this wasn’t the intended behavior, but it surely has created an annoying monster.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00010</title>
   <link href="http://blurrywords.com/2009/07/26/blur-00010.html"/>
   <updated>2009-07-26T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/07/26/blur-00010</id>
   <content type="html">&lt;p&gt;I finally remembered to take in a live 1 vs. 100 last night.  It took sticking a big orange post-it to the tv for me to remember, but I remembered.  And it was worth the effort, even if I didn&amp;#8217;t get to be THE ONE, or in the Mob, the audience is still a pretty fun experience.  You&amp;#8217;re paired up with three other randoms and you compete against them for fun and pride, but you&amp;#8217;re also striving to be one of the top scorers in the audience for the round.  This results in prizes&amp;#8230;free XBLA games!&lt;/p&gt;

&lt;p&gt;Anyways, it worth checking out.  Hopefully I&amp;#8217;ll make it to the mob next time, but even if I don&amp;#8217;t it&amp;#8217;s still fun to answer some trivia questions, yell at The One to take the money and get your avatar dancing (hint: pound the shit out of &lt;strong&gt;Y&lt;/strong&gt;).&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00008</title>
   <link href="http://blurrywords.com/2009/07/19/blur-00009.html"/>
   <updated>2009-07-19T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/07/19/blur-00009</id>
   <content type="html">&lt;p&gt;Limit the width of your posts.  The blogs that dynamically adjust the width of their posts to match the window resolution usually results in me not reading them.  Sorry, but it&amp;#8217;s unpleasant to read a 700 word post on one line.  That&amp;#8217;s a bit of an exaggeration, but with larger resolutions you can still end up having horribly formatted posts.&lt;/p&gt;

&lt;p&gt;Supposedly 70 to 80 characters per line is optimal.  I don&amp;#8217;t think you have to go that narrow, but have some kind of max boundary.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java's Coding Convention Hmmms...</title>
   <link href="http://blurrywords.com/2009/07/11/javas-coding-convention-hmmms.html"/>
   <updated>2009-07-11T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/07/11/javas-coding-convention-hmmms</id>
   <content type="html">&lt;p&gt;I spent an hour or so the other night refreshing my knowledge of Sun&amp;#8217;s official coding convention for Java.  Obviously these are just suggestions and you don&amp;#8217;t have to follow them at all, though I&amp;#8217;ve made it clear that I would be in full support of a language that did enforce such a standard in my post &lt;a href='/2008/11/26/standard-style-why-not.html'&gt;standard style post&lt;/a&gt;.  Nevertheless, there are a few suggestions in the documentation that make me wonder why support wasn&amp;#8217;t just built into the language for them even if they didn&amp;#8217;t want to completely support a coding convention through the compiler.&lt;/p&gt;

&lt;p&gt;The fact that these are part of the convention says to me that someone at least considered these items possible problem areas.  Were they banished to the convention in order to avoid building any barriers that might deter C/C++ programmers from adopting Java in the early years?  Maybe the convention just came later.  Or maybe it has been edited several times since the language was originally developed and these items were just oversights that can&amp;#8217;t be fixed at this point.  This is certainly a possibility considering how easily a convention can be changed compared to the language itself.&lt;/p&gt;

&lt;h4 id='_falls_through_'&gt;/* falls through */&lt;/h4&gt;

&lt;p&gt;I think switch case statement fall-through is a bad thing in its only supported form, as I mentioned in my &lt;a href='/2008/11/20/simple-rules.html'&gt;simple rules post&lt;/a&gt; from a while back.  It shouldn&amp;#8217;t be allowed without the compiler being able to have some kind of control over it, and I think Sun knows this.  The switch statement below is directly from the coding convention.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    switch (condition) {
    case ABC:
        statements;
        /* falls through */

    case DEF:
        statements;
        break;

    case XYZ:
        statements;
        break;

    default:
        statements;
        break;
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In my opinion the &lt;code&gt;/* falls through */&lt;/code&gt; comment is just hack.  Imagine you have a wall in your house where a 2x4 is missing.  So, at one position on the wall there is a span of 32 inches without a beam and the wall is a little less stable in that vertical strip, a little less likely to support weight.  So, to avoid a drunken idiot, or just a normal idiot, from breaking through the wall, you write in big red letters, &amp;#8220;Weak Spot&amp;#8221; in the problem area.  Problem solved, unless the drunken idiot didn&amp;#8217;t notice it, as he was too busy crashing through your new lamp that you just picked up at IKEA over the weekend.&lt;/p&gt;

&lt;p&gt;An open manhole cover is another, possibly more realistic analogy.  It&amp;#8217;s likely that an open manhole cover will have some kind of visual warning similar to the &lt;code&gt;/* falls through */&lt;/code&gt; comment.  Possibly orange cones.  The only difference is the manhole is only open temporarily, it&amp;#8217;s not a permanent situation.  Also, they use bright orange cones, an object out of the ordinary.  Comments are usually all over the place in code and quickly are filtered by your SEP field.&lt;/p&gt;

&lt;p&gt;There might be nothing they can do about it now considering that there are way too many applications out there developed with Java that might just stop working if they made such changes to the language, but it is still a pretty hack solution to the issue.  They would serve new developers better by just telling them not to use case fall-through.&lt;/p&gt;

&lt;p&gt;In the most hindsite, snooty, Monday morning quarterback way, they should have done something like this.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    switch (condition) {
    case ABC:
        statements;
        continue;
    case DEF:
        statements;
        break;

    case XYZ:
        statements;
        break;

    default:
        statements;
        break;
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Use the &lt;code&gt;continue&lt;/code&gt; keyword to allow case fall-through.  Or they could&amp;#8217;ve created a &lt;code&gt;fall&lt;/code&gt; keyword; maybe even, gasp, a &lt;code&gt;goto &amp;amp;lt;case&amp;amp;gt;&lt;/code&gt; type of implementation.  Anything that gives the compiler control over case fall-through is better than nothing&amp;#8230;er, having a &lt;code&gt;/* falls through */&lt;/code&gt; comment.&lt;/p&gt;

&lt;h4 id='statements_always_use_braces'&gt;Statements Always Use Braces&lt;/h4&gt;

&lt;p&gt;I always use braces&amp;#8230;always.  I can&amp;#8217;t stand the look of of the following in my code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    if(condition)
        doSomething();&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It just comes off as messy to me, not uniform with the rest of the code. I think it&amp;#8217;s perfectly acceptable in a language like Python as code blocks are defined by indentation, not opening and closing curly brackets.  But, in languages that rely on braces, you shouldn&amp;#8217;t be allowed to define a code block any other way.  And again, it seems the developers of Java agree with this.  Section 7.2 of the coding convention states:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Braces are used around all statements, even single statements, when they are part of a control structure, such as a &lt;code&gt;if-else&lt;/code&gt; or &lt;code&gt;for&lt;/code&gt; statement. This makes it easier to add statements without accidentally introducing bugs due to forgetting to add braces.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I&amp;#8217;m going to chalk the decision to not put this in the language up to staying inline with the supported syntax of C/C++.  Programmers are fussy prima donnas.  You don&amp;#8217;t mess with their preferences, even if there preferences are completely wrong.&lt;/p&gt;

&lt;p&gt;The fact that this isn&amp;#8217;t a part of the language isn&amp;#8217;t a big deal, but if I see an if statement missing curly brackets in code I&amp;#8217;m working on,  I&amp;#8217;m compelled to add them.  And you should be too.&lt;/p&gt;

&lt;h4 id='public_private_protectedwhy_not_package'&gt;Public, Private, Protected&amp;#8230;why not Package?&lt;/h4&gt;

&lt;p&gt;Recently I&amp;#8217;ve been seeing this a lot in code I&amp;#8217;ve been working on.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    /*package*/ class SomeClass {
        public String someVariable;
        /*package*/ Object someVariable2;
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It irritates the shit out of me.  If you spend ten freaking minutes working in Java it&amp;#8217;s likely that you will learn, or figure out that the absence of an access modifier makes the member/class public to the package, but private to the world.  But, it does make me wonder why they didn&amp;#8217;t just go the extra step and make a &lt;code&gt;package&lt;/code&gt; access modifier.  It neatly falls in line with the length and first letters of the other access modifiers; it seems like it would have been a natural part of the language.  Also, it would keep my code looking slightly more uniformed.  The variable name for private, protected and public variables all start in nearly the same location.  Then you have the package variables that start way before anything else&amp;#8230;or at least a couple of characters.&lt;/p&gt;

&lt;p&gt;I know, this one&amp;#8217;s a bit nitpicky.  Unlike the other two, having a &lt;code&gt;package&lt;/code&gt; modifier doesn&amp;#8217;t help fend against introducing defects.  It&amp;#8217;s completely a visual preference of mine.  It doesn&amp;#8217;t matter.  However, putting the &lt;code&gt;/*package*/&lt;/code&gt; is way worst than just having nothing at all, so just don&amp;#8217;t do it.  All that says to me is that the programmer was too stupid to remember that the member would only be able to be accessed by other members of the package.  You don&amp;#8217;t want me thinking you&amp;#8217;re stupid, do you?&lt;/p&gt;

&lt;h4 id='anyways'&gt;Anyways&amp;#8230;&lt;/h4&gt;

&lt;p&gt;I understand that creating a flawless language is hard, if not impossible.  I also understand that this stuff is subjective and you may not agree with it.  And I also realize that even if Sun now believes this stuff should be enforced by Java&amp;#8217;s compiler that it will never happen due to the fact that many companies and developers rely on their shit being consistent with what is already available.  But, that doesn&amp;#8217;t mean I can&amp;#8217;t point out their flaws from atop my safe little mountain of hindsight.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00008</title>
   <link href="http://blurrywords.com/2009/06/27/blur-00008.html"/>
   <updated>2009-06-27T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/06/27/blur-00008</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve been experimenting with Linux over the past month.  &lt;a href='http://www.linuxmint.com'&gt;Linux Mint&lt;/a&gt; to be precise.  Just Quickly, it&amp;#8217;s been five years since I&amp;#8217;ve used Linux, which happens to correspond with graduating from college.  So, I figured I would take my now not used desktop and do some exploring.  I&amp;#8217;m very happy with the experience so far, but that&amp;#8217;s for another post.&lt;/p&gt;

&lt;p&gt;What I wanted to mention was that even in its pre-release developer state, &lt;a href='http://www.google.com/chrome/intl/en/linux.html'&gt;Google Chrome Linux&lt;/a&gt; is still the best internet browser I&amp;#8217;ve fired up.  &lt;a href='http://www.mozilla.com/en-US/firefox/firefox.html'&gt;Firefox&lt;/a&gt; is solid but feels a bit sluggish, and &lt;a href='http://www.opera.com/'&gt;Opera&amp;#8217;s&lt;/a&gt; page rendering is embarrassingly slow.  I was starting to think it was my connection, or something with Linux&amp;#8230;not true.  Chrome friggin&amp;#8217; rips, just as you may have come to expect from it on other platforms.  Being pre-release you run the risk of it being a bit buggy, but I haven&amp;#8217;t had any issues to this point and I certainly wouldn&amp;#8217;t let that stop you from giving it a try.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The Bad of Warnings as Errors</title>
   <link href="http://blurrywords.com/2009/06/24/the-bad-of-warnings-as-errors.html"/>
   <updated>2009-06-24T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/06/24/the-bad-of-warnings-as-errors</id>
   <content type="html">&lt;p&gt;I&amp;#8217;m going to go out on a limb here to make a point that treating warnings as errors can be a bad thing.  I think there is a place and a time for such requirements.  When code has reached the testing or maintenance part of its life-cycle, treating warnings as errors makes a lot of sense.  It results in higher quality, more accurate code, cleaner build results and possibly a better overall product (though I don&amp;#8217;t see how a rogue unused import statement would make any difference when it comes to the perceived quality of the product).&lt;/p&gt;

&lt;p&gt;With that said, it has no place in the implementation process.  Instead of a tool for writing better code, it has the ability to manifest itself into a big waste of time and a destroyer of the elusive &amp;#8220;flow&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Recently I&amp;#8217;ve been working on a feature that requires communication between a couple of different layers.  In one layer I&amp;#8217;ve set up an event listener/dispatcher to listen for events from the other layer.  The dispatcher then calls upon an event processor that does what is needed for each event and passes the results back to the other layer through a callback function.  I created an interface to wrap the callbacks so I can set up a test environment that points to some fake callback functions until the other layer&amp;#8217;s actual callbacks are in place.  I then created a variable for the callbacks within the event processor with the intent on using it later, but before that it was just to define my class design a little more clearly within the code.&lt;/p&gt;

&lt;p&gt;Before getting the callback stuff working, I needed to get the event communication between the two layers working properly.  I spent about an hour working out the details before I attempted to build and see how well I had progressed.  All my syntax seemed fine, thanks to the power of the modern IDE.  So I was pretty sure it would at least compile.  Running properly was a completely different story, but I thought I would at least have a build that I can get on the device and start debugging. I fired off the build and about five to six minutes later&amp;#8230;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compiler&lt;/strong&gt; &lt;em&gt;&amp;#8220;You dumb shit. The variable callback is never used. I could just keep building and let you off with a warning&amp;#8230;screw you, bitch. Error!&amp;#8221;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Okay, so my compiler isn&amp;#8217;t that big of a douche, but it might as well be as it just puked on a warning during a build process that takes around 10 to 15 minutes to complete, depending on what you changed, all because of a variable being unused.  A variable that I expected to be unused at this point as it is just there as a place-holder for me to visually see the design of my future implementation.  Any flow I had going is completely shot at this point, as you might have expected.  There&amp;#8217;s nothing else for me to do but let out a sigh, comment out the variable, start the build again and go get some coffee.&lt;/p&gt;

&lt;p&gt;When I returned the build had aborted&amp;#8230;again!  This time it&amp;#8217;s due to a package being imported that isn&amp;#8217;t being used; the same package needed for the callback variable that I just commented out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compiler&lt;/strong&gt; &lt;em&gt;&amp;#8220;Hey idiot, you don&amp;#8217;t use this package. Error, bitch!&amp;#8221;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now that&amp;#8217;s twice the compiler has called me bitch.  Twice!  All I can do is go the rout of Jim Carrey in Liar Liar; piss, moan, bend over, take in tailpipe.  Comment out the import statement, start the build process and make some notes in my notebook to write a post complaining about warnings as errors.&lt;/p&gt;

&lt;p&gt;So, you can see my point about it being a bad thing.  Anything that decreases your productivity needs to be considered a bad thing.  The question that I&amp;#8217;ve been pondering though is, is it worth turning warnings being treated as errors off in my local environment during the implementation stage of a new feature?  Do I dare risk becoming the ass hole that broke the nightly build because I didn&amp;#8217;t turn warnings as errors back on before submitting my changes to the depot?  Yeah, that&amp;#8217;s all I want is to be the jerk that thinks he&amp;#8217;s better than treating warnings as errors.  I don&amp;#8217;t think so.&lt;/p&gt;

&lt;p&gt;So, I&amp;#8217;m dealing with it.  I&amp;#8217;ve made some adjustments in my IDE to make it more obvious that I have potential warnings that will break a build process.  Mainly, I&amp;#8217;ve adjusted the color of the squiggly line color from a barely visible whiteish yellow to the blazing red of the error messages.  I&amp;#8217;m thinking this might need to change to a different color to avoid me having to decipher whether the marked code is actually an error or a warning, but &amp;#8220;you&amp;#8217;re freaking screwed&amp;#8221; red is fine for now.&lt;/p&gt;

&lt;p&gt;I also use a lot of &amp;#8220;// TODO&amp;#8221; comments now to layout the skeleton of classes.  It&amp;#8217;s not as pretty, but at least the IDE generates a nice task list based on them for me to reference.  All and all I&amp;#8217;m still not for treating warnings as errors so early in the development process, but sometimes a slightly less productive setting for yourself can be much better than possibly slamming your whole development team&amp;#8217;s productivity against a brick wall.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00007</title>
   <link href="http://blurrywords.com/2009/06/16/blur-00007.html"/>
   <updated>2009-06-16T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/06/16/blur-00007</id>
   <content type="html">&lt;p&gt;Even if Bing falls short in my search engine battle to the death with Google, you should check out its map utilities.  Here&amp;#8217;s a link to the &lt;a href='http://www.bing.com/maps/default.aspx?v=2&amp;amp;amp;FORM=LMLTCP&amp;amp;amp;cp=skh5jqgzpf3b&amp;amp;amp;style=o&amp;amp;amp;lvl=1&amp;amp;amp;tilt=-90&amp;amp;amp;dir=0&amp;amp;amp;alt=-1000&amp;amp;amp;phx=0&amp;amp;amp;phy=0&amp;amp;amp;phscl=1&amp;amp;amp;scene=12472257&amp;amp;amp;encType=1#JndoZXJlMT1FbXBpcmUrU3RhdGUrQnVpbGRpbmcmYmI9NDAuNzU4NDQ5NjMxOTM2OSU3ZS03My45ODQ1ODQzNDM3MjI4JTdlNDAuNzU0NDkzMDgxNzA2NSU3ZS03My45ODg2NTc3NDQ0MzQy'&gt;Empire State Building in Bing’s Maps&lt;/a&gt;.  I’ve heard this isometric view described as SimCity-ish.  It’s a fun feature, worth the time required to give it a look.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Bring It On! Bing vs. Google</title>
   <link href="http://blurrywords.com/2009/06/15/bring-it-on-bing-vs-google.html"/>
   <updated>2009-06-15T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/06/15/bring-it-on-bing-vs-google</id>
   <content type="html">&lt;p&gt;My wife asked a question the other night after seeing one of &lt;a href='http://www.youtube.com/bing'&gt;Microsoft&amp;#8217;s new Bing commercials&lt;/a&gt;.  You know the ones; the commercials that really don&amp;#8217;t tell us anything useful about Bing, but reflects how awful all other search engines are and how they leave their users interpretting rambling non-sense.&lt;/p&gt;

&lt;p&gt;She wondered, &amp;#8220;How is it a decision maker? What does it decide for me?&amp;#8221;&lt;/p&gt;

&lt;p&gt;The question is a valid one.  How is Bing being a &amp;#8220;decision maker&amp;#8221; any value to me?  What a completely freaking useless description of this new service.  It doesn&amp;#8217;t reflect whether the service does anything positive for its users, it just makes decisions; good or bad, useful or not, it decides stuff.  BING!!!&lt;/p&gt;

&lt;p&gt;Even though Microsoft&amp;#8217;s marketing campaigns continue to bite the big one, Bing still deserves a crack at taking Google down.  Google&amp;#8217;s been great, but every champion needs to defend its title against legit challengers in order to retain its status.  So, last week I set Bing as my default Browser in Chrome; you&amp;#8217;ve gotta love the irony in that.  I&amp;#8217;m going to keep it set this way for the next month or so and then report back on how I feel about Bing compared to Google.&lt;/p&gt;

&lt;p&gt;Since it&amp;#8217;s the new guy, Bing will need to prove itself.  And because of that, Bing gets first crack at each search.  If it can&amp;#8217;t supply a result that I&amp;#8217;m satisfied with, then I&amp;#8217;ll jump over to Google to see what its take is on my query.  It&amp;#8217;s Bing&amp;#8217;s job to avoid this from happening, not Google&amp;#8217;s job to prove that it can match or better every search that Bing gets right.  The number that Bing gets right is not the challenge here; it&amp;#8217;s how often Google can successfully swoop in and provide a relatively correct result to my query. I define correctness as a result that is useful within the top 5 to 10 results.&lt;/p&gt;

&lt;p&gt;This isn&amp;#8217;t a very scientific approach, but it will surely answer for me whether Bing stands up to what we all know Google can do.  After I&amp;#8217;ve reached a personal conclusion, I&amp;#8217;ll report back with my findings and opinions.  Let&amp;#8217;s get it on!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00006</title>
   <link href="http://blurrywords.com/2009/06/14/blur-00006.html"/>
   <updated>2009-06-14T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/06/14/blur-00006</id>
   <content type="html">&lt;p&gt;The &lt;a href='http://www.blackberrypartnersfund.com/09contest'&gt;2009 BlackBerry Developer Challenge&lt;/a&gt; has been announced.  Being unable to legally participate myself, I thought I would pass the data along.  There&amp;#8217;s a chance to win $100,000 in cash and prizes, and to get your work some exposure at the BlackBerry DevCon in November, certainly seems worth a couple of months of effort if you have the idea and the time.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00005</title>
   <link href="http://blurrywords.com/2009/06/03/blur-00005.html"/>
   <updated>2009-06-03T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/06/03/blur-00005</id>
   <content type="html">&lt;p&gt;I thought about having a full post about the E3 console manufacturers&amp;#8217; press conferences.  I planned to talk about what games looked awesome, what new tech looked interesting, maybe make fun of the unprecedented, historically significant ability for every talking head to monumentally over sell everything.  Hey Don Mattrick, the sequel to World War I is considered historically significant; the sequel to Modern Warfare, another rev of Rock Band, some more use of the Halo property&amp;#8230;not so much.&lt;/p&gt;

&lt;p&gt;But, after watching them all it just didn&amp;#8217;t seem worth it.  Between Natal, which I&amp;#8217;m pessimistically optimistic about, Wii Motion Plus and Nintendo&amp;#8217;s other interactive gizmos, and Sony&amp;#8217;s wand thingy and camera, which looked frustratingly painful to use, all consoles have now officially adopted motion control.  The problem is that the new car smell of what the Wii brought to gaming is gone and copies are not that exciting.&lt;/p&gt;

&lt;p&gt;Anyways, this is what you need to know.  There will continue to be awesome games coming out around Christmas.  All consoles will soon allow you to wave uncontrollably at your television.  That&amp;#8217;s about it, not worth the five hours of viewing.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Marvel's Digital Comics Service Reviewed</title>
   <link href="http://blurrywords.com/2009/05/30/marvels-digital-comics-service-reviewed.html"/>
   <updated>2009-05-30T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/05/30/marvels-digital-comics-service-reviewed</id>
   <content type="html">&lt;p&gt;About a year and a half after its launch, Marvel is graced with a review of its &lt;a href='http://www.marvel.com/digitalcomics.html'&gt;digital comics service&lt;/a&gt; from none other than Blurry Words.  The excitement that must be running through the brains of the Marvel execs; to see their company&amp;#8217;s name across the top of this post, how exciting for them.  What a thrill!  What a moment!&lt;/p&gt;

&lt;p&gt;(the sound of confused crickets chirping)&lt;/p&gt;

&lt;p&gt;Anyways, I&amp;#8217;ve been playing around with the service for about a month now. I&amp;#8217;ve read through about  40 or 50 books and I have to say that I&amp;#8217;m sold.  It&amp;#8217;s not a perfect service at this point, the set of tools available need some more work, some additional features, but nothing that can&amp;#8217;t be improved over time.&lt;/p&gt;

&lt;h4 id='the_basic_parts'&gt;The Basic Parts&amp;#8230;&lt;/h4&gt;

&lt;p&gt;There&amp;#8217;s two major parts to the service; the Digital Comic Reader and the Account Manager.  In my opinion both will be equally important to the overall experience and to the overall success of the service.  However, at this point the comic reader is way beyond the manager.  That&amp;#8217;s not completely unexpected considering the service is all about reading comics digitally,  but once you get the users in the seats with the glitz of the reader, you need to keep them fulfilled with the entire experience.&lt;/p&gt;

&lt;h4 id='so_what_about_the_reader'&gt;So What About The Reader&amp;#8230;.&lt;/h4&gt;

&lt;p&gt;The reader is a very robust, easy and intuitive experience.  It provides three different reading modes; the static one and two panel modes, both equipped with zoom capabilities, and the Smart Panel mode, the bread and butter of the service.  Smart Panel mode works by having each book define the optimal viewing position and zoom level for each region of each page.  Using the left and right arrow keys, you seamlessly transition and auto-zoom to each sequential region of the comic you&amp;#8217;re reading.  If you want to zoom out and see the full page, hit the down arrow.  To zoom back in to the last viewed region, hit the up arrow.  It&amp;#8217;s a great experience.  It stays out of your way and lets you enjoy the book.&lt;/p&gt;

&lt;p&gt;The smart panel mode isn&amp;#8217;t perfect though.  First, it&amp;#8217;s not friendly with all viewing aspect ratios.  The viewer defaults to your screen resolution.  On my machine, with the resolution set at 1920x1200, the bottom of the page&amp;#8217;s often get cut off.  This is easily fixed by adjusting the reader window to a more agreeable aspect ratio, but you would hope they could make it so that the default resolution looks at your screen resolution and adjusts its spawn size to the closest resolution that is an appropriate aspect ratio.  Or, do a better job of supporting all screen resolutions&amp;#8230;which ever&amp;#8217;s easier.&lt;/p&gt;

&lt;p&gt;Another issue has to do with the dialog bubbles.  In a lot of the books they aren&amp;#8217;t part of the page, they&amp;#8217;ve been formatted using vector graphics to overlay the pages.  This is for a separate feature available in the one and two panel modes that allows you to mouse over each dialog bubble to have them zoom in for easier reading.  The problem is that they don&amp;#8217;t always align properly, which isn&amp;#8217;t usually a problem but in some books the text wasn&amp;#8217;t removed from the page.  So when its misaligned you can see both bubbles.  Also, some times, not often, the bubbles are so badly misaligned that it&amp;#8217;s hard to tell who is saying what.  This makes reading a little annoying, but not that big of a deal.&lt;/p&gt;

&lt;p&gt;&lt;img alt='Marvel Civil War' src='/images/posts/civil-war-cover-thumb.png' /&gt;&lt;/p&gt;

&lt;p&gt;Finally, it seems to hang a lot when using the reader with Google Chrome; something that will be fixed with time I&amp;#8217;m sure, giving how new Chrome is.  Firefox seems to work fine though, no hang ups even after days of having the same instance of the reader open.&lt;/p&gt;

&lt;p&gt;All of these issues can be fixed, as long as Marvel is willing to put the money into making a the service better, which you would expect would be the case considering the heavy web-advertisement campaign they have going.  But, even if these issues aren&amp;#8217;t addressed, none of it is a big enough deterrent to not praise the overall experience of the reader.&lt;/p&gt;

&lt;h4 id='then_theres_the_management_page'&gt;Then There&amp;#8217;s The Management Page&amp;#8230;&lt;/h4&gt;

&lt;p&gt;The Account Management functionality on the other hand is passable at best.  It has several different ways of browsing through the collection, you can rate each book you read, and it allows you to mark your favorites (neither from within the reader though), but that&amp;#8217;s about it.  My biggest complaint is that there isn&amp;#8217;t a way to track what books you&amp;#8217;ve read.  I&amp;#8217;ve been using the favorites list to accomplish that, but I would love to have both capabilities.  There&amp;#8217;s also no way to see your recent reading history, meaning there&amp;#8217;s no way other than remembering the last book you read to pick up from where you left off.  I&amp;#8217;ve just been leaving the reader open to accomplish this, but that&amp;#8217;s not always possible, and it&amp;#8217;s certainly not ideal.&lt;/p&gt;

&lt;p&gt;Another thing that bothers me about the manager is that when I do rate a book it doesn&amp;#8217;t show me what I rated it.  It takes my rating and adds it in to the global score and then just displays that global score.  I&amp;#8217;m guessing they&amp;#8217;re not even tracking this metadata for each individual user, but I would love to see what my own opinion of the book was, not just what the rest of the world thinks.  Maybe they could show the world&amp;#8217;s opinion with yellow stars and then overlay my score with transparent red stars?&lt;/p&gt;

&lt;h4 id='what_else_would_i_like'&gt;What ELSE Would I Like&amp;#8230;&lt;/h4&gt;

&lt;p&gt;I would love to see the listing for the entire series, whether the book has been digitized yet or not.  That way users could use this service as a complete management system not only for their online reading, but also for what hardcopy books they&amp;#8217;ve read and own (assuming the missing management features mentioned previously existed).&lt;/p&gt;

&lt;p&gt;Also, having a voting system for which books should be digitized next would be fun as a community feature, and a useful way 1) for Marvel to know what its paying customers really want the most from the digital service, and 2) empower the subscribers by letting them know that they are molding the content that Marvel is supplying through this service.  Both are vital to the success of a user-centric service such as this.&lt;/p&gt;

&lt;h4 id='so_what_am_i_saying'&gt;So, what am I saying&amp;#8230;&lt;/h4&gt;

&lt;p&gt;The reader is great and the account manager is passable but could be a much richer experience for paying subscribers.  With that said, I highly recommend checking it out.  You can read a ton of books for free to give it a try, and after you get hooked, the service is dirt cheap, 10 bucks a month or 5 bucks a month if you pay for the whole year.  Just to be able to read the older issues that would be impossible to find, and impossible to afford if you could find them, makes this service worthwhile.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00003</title>
   <link href="http://blurrywords.com/2009/05/25/blur-00003.html"/>
   <updated>2009-05-25T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/05/25/blur-00003</id>
   <content type="html">&lt;p&gt;Finally, Mac is World Champion of the WORLD!!!  The young Mac has dethroned the long time champ, Mr. Sandman, with a shocking Knock Out in the 3rd round.  Mac has a staggering record of 13-39, and even though Mr. Sandman granted him 23 rematches, Mac declined Sandman’s request to step in the ring again.  Instead, a match with the legendary Glass Joe has been scheduled for later this afternoon.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.penny-arcade.com/comic/2008/10/1/'&gt;The Mega Man 9 Effect&lt;/a&gt; applies to PunchOut!! for me.  I haven’t tried it with Wii motion controls, but why would you want to?  This is pattern recognition and reaction at its best.  Maybe I’ll eventually give the Wii experience a try, but for now I’m happy with nostalgia.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00002</title>
   <link href="http://blurrywords.com/2009/05/23/blur-00002.html"/>
   <updated>2009-05-23T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/05/23/blur-00002</id>
   <content type="html">&lt;p&gt;To show the useless nature of the Blurs, I thought I would express my opinions on the latest Terminator movie, Terminator Salvation.  It&amp;#8217;s a movie I was looking forward to for a while, finally a look at the actual war that ensues after Judgment Day.  Unfortunately, it was a bit disappointing.&lt;/p&gt;

&lt;p&gt;For one, Christian Bale was not good.  This is something I can’t ever remember saying before, but that damn heavy breathing voice, the voice I refer to as his &amp;#8220;Batman&amp;#8221; voice, was on overdrive for the entire movie.  It&amp;#8217;s distracting, and annoying, stop doing it Bale.&lt;/p&gt;

&lt;p&gt;The other disappointing part was the scale.  I wanted to see Lord of Ring size armies of Skynet soldiers hunting the human rebellion.  Instead, we only ever saw two or three Terminators attacking at a time.  The war just felt like a skirmish at best.&lt;/p&gt;

&lt;p&gt;There was some good, but it really falls short of my high expectations.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blur &#35;00001</title>
   <link href="http://blurrywords.com/2009/05/23/blur-00001.html"/>
   <updated>2009-05-23T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/05/23/blur-00001</id>
   <content type="html">&lt;p&gt;I came across Mike Gunderloy&amp;#8217;s blog, &lt;a href='http://afreshcup.com/'&gt;A Fresh Cup&lt;/a&gt;, and I liked his formatting.  He has normal posts, but then he also has micro-posts called &amp;#8220;Double Shots&amp;#8221;.  I&amp;#8217;ve called shorter posts &amp;#8220;Blurs&amp;#8221; since the beginning, but I&amp;#8217;m now going to formally define it to be a micro-post.  These will be quick opinions or observations living on the left side of Blurry Words.  They&amp;#8217;ll have less than 150 words and usually be useless, but will give me an outlet to keep posts flowing.  Let’s see how it works out.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>BlackBerry Java - Arithmetic Comparisons</title>
   <link href="http://blurrywords.com/2009/05/02/blackberry-java-arithmetic-comparisons.html"/>
   <updated>2009-05-02T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/05/02/blackberry-java-arithmetic-comparisons</id>
   <content type="html">&lt;p&gt;This investigation took me longer than I had hoped to get to a conclusion, mainly because the results I was getting weren’t matching my expectations.  I started off by comparing the speed of arithmetic calculations between the BlackBerry Java’s native &lt;code&gt;float&lt;/code&gt; implementation and its static class implementation for fixed point math, &lt;code&gt;Fixed32&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When first faced with the need to store fractional values, I gravitated towards the &lt;code&gt;Fixed32&lt;/code&gt; class for two reasons; the first being that I’ve always had to use a fixed point implementation when developing mobile application as floats and doubles are not usually available.  The second reason was that I believed the &lt;code&gt;Fixed32&lt;/code&gt; class existed for a reason, that reason being that the float implementation was so horribly slow that this additional fixed point implementation had to exist to compensate.&lt;/p&gt;

&lt;p&gt;It turns out that the &lt;code&gt;Fixed32&lt;/code&gt; class is legacy code of the BlackBerry platform, implemented early on before floats and doubles could be properly supported.  And, the truth was that the &lt;code&gt;float&lt;/code&gt; multiplication and division implementations are faster than the &lt;code&gt;Fixed32&lt;/code&gt; implementation’s, though &lt;code&gt;float&lt;/code&gt; addition and substraction was still slower due to the fact that &lt;code&gt;Fixed32&lt;/code&gt; is developed to use the integer addition and subtraction operators with no other processing.&lt;/p&gt;

&lt;p&gt;These were the preconceptions that I had when developing my own test.  The problem that was hanging me up was that I was seeing better performance out of the float’s add and subtract operators than the Fixed32&amp;#8217;s use of the integer operators.  I couldn’t figure out how this could be.  Look how simple this code is, what could I be doing wrong?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    public class TestConstants {
        // ...
        public final static int X_MUL_DIV_VALUE = Fixed32.parseFixed32(&amp;quot;1.84&amp;quot;);
    }

    public class Fixed32Add extends CodeBlock {
        // ...
        public void run() {
            int xResult = 0;
            for(int i = 0; i &amp;amp;lt; TestConstants.NUM_OPERATIONS; i++) {
                xResult += TestConstants.ADD_VALUE_X;
            }
        }
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So I decided to expand the test and cover arithmetic with all native numerical types, the additional types being &lt;code&gt;byte&lt;/code&gt;, &lt;code&gt;short&lt;/code&gt;, &lt;code&gt;long&lt;/code&gt;, and &lt;code&gt;double&lt;/code&gt;.  Once I did that, it became clear what the problem was.  Without &lt;code&gt;Fixed32&lt;/code&gt; being involved, the integer addition/subtraction operators were about 3 times faster than the floating point operator.&lt;/p&gt;

&lt;p&gt;There was a sneaky little issue that is nearly impossible to see if you’re not looking for it.  Here’s the code change first:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    public class TestConstants {
        // ...
        public final static int X_MUL_DIV_VALUE = Fixed32.parseFixed32(&amp;quot;1.84&amp;quot;);
    }

    public class Fixed32Add extends CodeBlock {
        // ...
        public void run() {
            int xResult = 0;
            int value = TestConstants.ADD_VALUE_X;
            for(int i = 0; i &amp;amp;lt; TestConstants.NUM_OPERATIONS; i++) {
                xResult += value;
            }
        }
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The compiler handles the final variables, replacing each reference to the final variable with the code on the right of the declaration, resulting in the parse function being called for every iteration of the loop.  As I said, sneaky.  It’s something to be aware of when declaring final variables.  If you have a native value, the inline processing performed on final variables can be quite beneficial.  However, with objects and function calls to generate the value of the final variable, it can result in additional processing  and memory that hides behind a mask that makes it hard to see.  Just keep it in mind.&lt;/p&gt;

&lt;p&gt;Anyway, below are the result tables, one for each device (Curve, Bold and Storm, NUM_OPERATIONS = 5000).  As stated at the beginning, float multiplication/division is faster than Fixed32 multiplication/division.&lt;/p&gt;

&lt;h4 id='blackberry_curve_8320'&gt;BlackBerry Curve 8320&lt;/h4&gt;
&lt;table&gt;
    &lt;tr class='header'&gt;
        &lt;td width='25%'&gt;Variable Type&lt;/td&gt;
        &lt;td width='25%'&gt;Add/Sub (ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Mult (ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Div (ms)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;Fixed32&lt;/td&gt;
        &lt;td width='25%'&gt;204&lt;/td&gt;
        &lt;td width='25%'&gt;1372&lt;/td&gt;
        &lt;td width='25%'&gt;1788&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;float&lt;/td&gt;
        &lt;td width='25%'&gt;700&lt;/td&gt;
        &lt;td width='25%'&gt;548&lt;/td&gt;
        &lt;td width='25%'&gt;1184&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;double&lt;/td&gt;
        &lt;td width='25%'&gt;1104&lt;/td&gt;
        &lt;td width='25%'&gt;824&lt;/td&gt;
        &lt;td width='25%'&gt;4376&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;long&lt;/td&gt;
        &lt;td width='25%'&gt;260&lt;/td&gt;
        &lt;td width='25%'&gt;260&lt;/td&gt;
        &lt;td width='25%'&gt;528&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;int&lt;/td&gt;
        &lt;td width='25%'&gt;196&lt;/td&gt;
        &lt;td width='25%'&gt;200&lt;/td&gt;
        &lt;td width='25%'&gt;248&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;short&lt;/td&gt;
        &lt;td width='25%'&gt;240&lt;/td&gt;
        &lt;td width='25%'&gt;220&lt;/td&gt;
        &lt;td width='25%'&gt;272&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;byte&lt;/td&gt;
        &lt;td width='25%'&gt;220&lt;/td&gt;
        &lt;td width='25%'&gt;232&lt;/td&gt;
        &lt;td width='25%'&gt;272&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
&lt;h4 id='blackberry_bold'&gt;BlackBerry Bold&lt;/h4&gt;
&lt;table&gt;
    &lt;tr class='header'&gt;
        &lt;td width='25%'&gt;Variable Type&lt;/td&gt;
        &lt;td width='25%'&gt;Add/Sub (ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Mult (ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Div (ms)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;Fixed32&lt;/td&gt;
        &lt;td width='150'&gt;153&lt;/td&gt;
        &lt;td width='150'&gt;597&lt;/td&gt;
        &lt;td width='150'&gt;776&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;float&lt;/td&gt;
        &lt;td width='150'&gt;317&lt;/td&gt;
        &lt;td width='150'&gt;242&lt;/td&gt;
        &lt;td width='150'&gt;550&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;double&lt;/td&gt;
        &lt;td width='150'&gt;514&lt;/td&gt;
        &lt;td width='150'&gt;366&lt;/td&gt;
        &lt;td width='150'&gt;1931&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;long&lt;/td&gt;
        &lt;td width='150'&gt;114&lt;/td&gt;
        &lt;td width='150'&gt;117&lt;/td&gt;
        &lt;td width='150'&gt;225&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;int&lt;/td&gt;
        &lt;td width='150'&gt;96&lt;/td&gt;
        &lt;td width='150'&gt;90&lt;/td&gt;
        &lt;td width='150'&gt;114&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;short&lt;/td&gt;
        &lt;td width='150'&gt;102&lt;/td&gt;
        &lt;td width='150'&gt;102&lt;/td&gt;
        &lt;td width='150'&gt;125&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;byte&lt;/td&gt;
        &lt;td width='150'&gt;104&lt;/td&gt;
        &lt;td width='150'&gt;107&lt;/td&gt;
        &lt;td width='150'&gt;127&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
&lt;h4 id='blackberry_storm'&gt;BlackBerry Storm&lt;/h4&gt;
&lt;table&gt;
    &lt;tr class='header'&gt;
        &lt;td width='25%'&gt;Variable Type&lt;/td&gt;
        &lt;td width='25%'&gt;Add/Sub (ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Mult (ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Div (ms)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;Fixed32&lt;/td&gt;
        &lt;td width='150'&gt;135&lt;/td&gt;
        &lt;td width='150'&gt;863&lt;/td&gt;
        &lt;td width='150'&gt;1089&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;float&lt;/td&gt;
        &lt;td width='150'&gt;379&lt;/td&gt;
        &lt;td width='150'&gt;293&lt;/td&gt;
        &lt;td width='150'&gt;694&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;double&lt;/td&gt;
        &lt;td width='150'&gt;599&lt;/td&gt;
        &lt;td width='150'&gt;420&lt;/td&gt;
        &lt;td width='150'&gt;2424&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;long&lt;/td&gt;
        &lt;td width='150'&gt;150&lt;/td&gt;
        &lt;td width='150'&gt;155&lt;/td&gt;
        &lt;td width='150'&gt;284&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;int&lt;/td&gt;
        &lt;td width='150'&gt;131&lt;/td&gt;
        &lt;td width='150'&gt;137&lt;/td&gt;
        &lt;td width='150'&gt;162&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;short&lt;/td&gt;
        &lt;td width='150'&gt;150&lt;/td&gt;
        &lt;td width='150'&gt;150&lt;/td&gt;
        &lt;td width='150'&gt;170&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='150'&gt;byte&lt;/td&gt;
        &lt;td width='150'&gt;146&lt;/td&gt;
        &lt;td width='150'&gt;144&lt;/td&gt;
        &lt;td width='150'&gt;172&lt;/td&gt;
    &lt;/tr&gt;   
&lt;/table&gt;
&lt;p&gt;To conclude, make conscious choices about which variable types are right for your arithmetic needs.  If you plan to do a lot of addition and subtraction with fractional outcomes, the Fixed32 class may still be your best bet (if accuracy is not all that important).  However, you’re better off using native floats with multiplication and division. Finally, be careful with final variables.  They’re built in a way to cause problems and hide inefficiencies if care isn’t taken.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>BlackBerry Java - Avoid String Concat</title>
   <link href="http://blurrywords.com/2009/04/16/blackberry-java-avoid-string-concat.html"/>
   <updated>2009-04-16T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/04/16/blackberry-java-avoid-string-concat</id>
   <content type="html">&lt;p&gt;To better my knowledge of the BlackBerry platform and its implementation of Java, as well as to share some useful information on Blurry Words, I&amp;#8217;ve setup this sub-category of Mobile Development.  Deem yourself introduced to the BlackBerry Java category.  Though the name is a general blanket to anything I might be interested in covering for the platform, don&amp;#8217;t consider this category a good place to learn the basics.  This is in no way an introductory tutorial, more of a study into what works best with the BlackBerry implementation of Java.  There are plenty of great sources out there to get you started, I don&amp;#8217;t see a need for me to add to that.  If you are here looking for a starting point to BlackBerry development though, check out the official &lt;a href='http://na.blackberry.com/eng/developers/'&gt;BlackBerry Developer Site&lt;/a&gt;.  It&amp;#8217;s full of tutorials and example code, everything you need to get going.&lt;/p&gt;

&lt;p&gt;Also, for full disclosure, I&amp;#8217;m a software developer at Research In Motion.  I&amp;#8217;ve been with the company for about 6 months at the time of writing this post (though I&amp;#8217;ve been working in mobile development for nearly five years now).  All the development and experimentation that I do in order to provide hard data with my posts is done using only the external development tools provided by RIM.  Blurry Words related activities are performed from a personal laptop dedicated to the content of the blog.  This is done in order to avoid any cross contamination between RIM&amp;#8217;s internal development tools/knowledge and what is provided to the public.&lt;/p&gt;

&lt;p&gt;With that, let&amp;#8217;s get into the topic of this inaugural post, avoiding String concatenation.  String concats are usually one of the core parts of an application.  Every app needs to collect information and provide it back to the user, which in most cases is impossible to do in a meaningful way without being able to concatenate strings.  The BlackBerry Java implementation has a few different ways of accomplishing this task; the String operators + and +=, the String.concat() function,and using StringBuffer.append() to build the string before converting it to a String object (StringBuilder, which basically made StringBuffer obsolete as part of J2SE 1.5, is not part of J2ME or the BlackBerry version of Java).&lt;/p&gt;

&lt;p&gt;The question to answer is which method is best from an optimization point of view?  Without benchmarking, most Java developers already know the answer.  The StringBuffer class exists for a reason.  As String&amp;#8217;s mutable side kick, StringBuffer exists to perform string manipulation with streamlined memory allocation, something immutable objects like String can&amp;#8217;t accomplish.  Don&amp;#8217;t misunderstand, immutable objects are highly preferable, where mutable objects should be minimized due to their difficulty to implement and possibilities for abuse, as described in &lt;a href='http://www.amazon.com/gp/product/0321356683?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=0321356683'&gt;Joshua Bloch&amp;#8217;s Effective Java&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Immutable classes are easier to design, implement, and use than mutable classes.  They are less prone to error and are more secure&amp;#8230;Classes should be immutable unless there&amp;#8217;s a very good reason to make them mutable.  Immutable classes provide many advantages, and their only disadvantage is the potential for performance problems under certain circumstances.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He goes on to say that small value objects should always be immutable and that bigger valued objects, or any object that may require multistep operations, like String, should be immutable with a mutable companion class to perform the operations.  The reason for this is that an immutable object can never be altered.  So, at each step of an operation a new object would need to be created, leaving the possibility for large amounts of garbage and as a result, degraded performance.  The immutable sidekick should be developed to provide the same results without having the memory creation overhead.  Hence the String and StringBuffer partnership, a perfect pair to test and provide hard proof of the goodness of this development approach.  Here&amp;#8217;s the code that was used to test each method.&lt;/p&gt;

&lt;h4 id='string__operator'&gt;String += Operator:&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;    private String strcatTest() {
        String test = &amp;quot;&amp;quot;;
        for(int i = 0; i &amp;amp;lt; StrcatSettings.NUM_CONCATS; i++) {
            test += StrcatSettings.CONCAT_STRING;
            test += StrcatSettings.CONCAT_STRING;
            test += StrcatSettings.CONCAT_STRING;
            test += StrcatSettings.CONCAT_STRING;
            test += StrcatSettings.CONCAT_STRING;
        }
        return test;
    }&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id='stringconcatstring'&gt;String.concat(String):&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;    private String strcatTest() {
        String test = &amp;quot;&amp;quot;;
        for(int i = 0; i &amp;amp;lt; StrcatSettings.NUM_CONCATS; i++) {
            test = test.concat(StrcatSettings.CONCAT_STRING);
            test = test.concat(StrcatSettings.CONCAT_STRING);
            test = test.concat(StrcatSettings.CONCAT_STRING);
            test = test.concat(StrcatSettings.CONCAT_STRING);
            test = test.concat(StrcatSettings.CONCAT_STRING);
        }
        return test;
    }&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id='stringbufferappend'&gt;StringBuffer.append():&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;    private String strcatTest() {
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i &amp;amp;lt; StrcatSettings.NUM_CONCATS; i++) {
            sb.append(StrcatSettings.CONCAT_STRING);
            sb.append(StrcatSettings.CONCAT_STRING);
            sb.append(StrcatSettings.CONCAT_STRING);
            sb.append(StrcatSettings.CONCAT_STRING);
            sb.append(StrcatSettings.CONCAT_STRING);
        }
        return sb.toString();
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In order to benchmark these functions, each was implemented in its own class extending CodeBlock, an abstract class I created that provides one method, called run(), to be overridden.  The code that you want to test/benchmark should be implemented within/through run().  Then all the different implementations are registered within a separate class called ComparisonTest, which wraps calls of each version of run() inside of benchmark timing code.  I don&amp;#8217;t get fancy with the timing, just the wall clock approach.&lt;/p&gt;

&lt;p&gt;The tests are then run on a few different BlackBerry devices to 1) see how the devices compare, and 2) to make sure the results match in separate environments.  I also use this code to obtain memory allocation and code size statistics.  I use the BlackBerry JDE&amp;#8217;s memory profile for allocations statistics and an application called &lt;a href='http://www.ej-technologies.com/products/jclasslib/overview.html'&gt;jclasslib bytecode viewer&lt;/a&gt; to see how much bytecode was generated by the different tests.&lt;/p&gt;

&lt;h4 id='timing_results'&gt;Timing Results&lt;/h4&gt;

&lt;p&gt;As expected, StringBuffer lived up to the expectations laid upon it earlier in the post.  Below shows the timing results collected on three different BlackBerrys, the Curve 8320, the Bold and the Storm.  Using StringBuffer to append each String first and then creating and returning a String object at the very end of all the processing resulted in a significant performance improvement over either of the String methods.&lt;/p&gt;
&lt;table&gt;
    &lt;tr class='header'&gt;
        &lt;td width='25%'&gt;Test&lt;/td&gt;
        &lt;td width='25%'&gt;Curve 8320(ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Bold(ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Storm(ms)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;String +=&lt;/td&gt;
        &lt;td width='25%'&gt;37196&lt;/td&gt;
        &lt;td width='25%'&gt;2658&lt;/td&gt;
        &lt;td width='25%'&gt;5829&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;String.concat()&lt;/td&gt;
        &lt;td width='25%'&gt;13116&lt;/td&gt;
        &lt;td width='25%'&gt;1376&lt;/td&gt;
        &lt;td width='25%'&gt;2801&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;StringBuffer.append()&lt;/td&gt;
        &lt;td width='25%'&gt;312&lt;/td&gt;
        &lt;td width='25%'&gt;89&lt;/td&gt;
        &lt;td width='25%'&gt;119&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;These results show the cumulative runtime time of 10 runs of concatenating the string, &amp;#8220;String Concatenation Comparison Testn&amp;#8221; 500 times.  It&amp;#8217;s a hard test to get an accurate idea of what is going on though as so much garbage is created that you can&amp;#8217;t be sure what is going on with the garbage collector during any run.  I do request the garbage collector be run and yield the thread before each test, but there is still no way to be sure it doesn&amp;#8217;t get fired off during the test.  Here are some results from 100 runs of 50 concatenations.&lt;/p&gt;
&lt;table&gt;
    &lt;tr class='header'&gt;
        &lt;td width='25%'&gt;Test&lt;/td&gt;
        &lt;td width='25%'&gt;Curve 8320(ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Bold(ms)&lt;/td&gt;
        &lt;td width='25%'&gt;Storm(ms)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;String +=&lt;/td&gt;
        &lt;td width='25%'&gt;5312&lt;/td&gt;
        &lt;td width='25%'&gt;844&lt;/td&gt;
        &lt;td width='25%'&gt;1471&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;String.concat()&lt;/td&gt;
        &lt;td width='25%'&gt;1324&lt;/td&gt;
        &lt;td width='25%'&gt;185&lt;/td&gt;
        &lt;td width='25%'&gt;339&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='25%'&gt;StringBuffer.append()&lt;/td&gt;
        &lt;td width='25%'&gt;388&lt;/td&gt;
        &lt;td width='25%'&gt;98&lt;/td&gt;
        &lt;td width='25%'&gt;131&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;What you can take from this is that as the String objects grow in size, the performance of the String concatenation operator and function gets progressively worse, an expected result considering larger and larger String objects will be created each time.  At the same time, the StringBuffer&amp;#8217;s append method&amp;#8217;s performance remains comparable in both test cases.&lt;/p&gt;

&lt;h4 id='memory_and_garbage'&gt;Memory  and Garbage&lt;/h4&gt;

&lt;p&gt;As mentioned above, what&amp;#8217;s really slowing down the += operator and the String.concat() function is the fact that a new objects must be created for each concatenation in order for the String object to be immutable.  The StringBuffer isn&amp;#8217;t constrained by these rules.  The only time additional objects need to be created during the StringBuffer appending process is when the byte array that stores all the characters needs to be expanded.  This process results in a new, larger byte array being created, the content of the original array being copied into the new array and the original array becoming garbage.  I note this as you can avoid this reallocation by providing a good guess to exactly how many characters you will be appending during the process.  That way the amount of reallocating that is needed for the byte array is cut down, possibly completely removed from the process.&lt;/p&gt;

&lt;p&gt;Before discussing further, lets look at the memory results.  This is one run of each test, performing only 50 concatenations during the run.  The table shows the number of objects created during the processing and how many bytes were needed in total for all the created objects.  Note, there might have been other objects created during the test.  However, I focused just on String, StringBuffer and byte[] as those are the main objects being created relating to concatenation. &lt;table&gt;
    &lt;tr class='header'&gt;
        &lt;td width='33%'&gt;Test&lt;/td&gt;
        &lt;td width='33%'&gt;Objects Created&lt;/td&gt;
        &lt;td width='33%'&gt;Memory Used (bytes)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='33%'&gt;String +=&lt;/td&gt;
        &lt;td valign='top' width='33%'&gt;308 Objects
        (String: 106, StringBuffer: 51, byte\[\]: 151)&lt;/td&gt;
        &lt;td align='left' valign='top' width='33%'&gt;406,524 bytes
        (String: 60,392, StringBuffer: 1960, byte\[\]: 344,172)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='33%'&gt;String.concat()&lt;/td&gt;
        &lt;td align='left' valign='top' width='33%'&gt;110 Objects
        (String: 110, StringBuffer: 0, byte\[\]: 0)&lt;/td&gt;
        &lt;td align='left' valign='top' width='33%'&gt;48,500 bytes
        (String: 48,500, StringBuffer:0, byte\[\]: 0)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td width='33%'&gt;StringBuffer.append()&lt;/td&gt;
        &lt;td align='left' valign='top' width='33%'&gt;14 Object
        (String: 3, StringBuffer: 1,
        byte\[\]: 10)&lt;/td&gt;
        &lt;td align='left' valign='top' width='33%'&gt;7,268 bytes
        (String: 1,376, StringBuffer: 20, byte\[\]: 5,872)&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;&lt;/p&gt;

&lt;p&gt;The first thing I found interesting about these results, which you may have expected looking at the timing results, is that the String concat() function and the String concat operator are implemented differently.  The += and the + actually use a StringBuffer to perform their concatenations, resulting in a ton of StringBuffer and byte[] garbage.  The concat function avoids using the StringBuffer (though I&amp;#8217;m note sure how it accomplishes this) and avoids all the extra overhead of allocating a new instance of it every time, easily responsible for its better performance.  Nevertheless, neither compares with creating 14 objects and only 7200 bytes of data during the processing, which is what we get from the StringBuffer.append() method.&lt;/p&gt;

&lt;p&gt;One final note on the memory allocation for both of the String class concatenation methods.  Both created a blank String object for each concatenation.  I don&amp;#8217;t know what it is used for, but it is just another piece of garbage cluttering up the heap that doesn&amp;#8217;t exist when using the StringBuffer&amp;#8217;s append function.&lt;/p&gt;

&lt;h4 id='application_size'&gt;Application Size&lt;/h4&gt;

&lt;p&gt;Finally, just as frosting on the cake, using the StringBuffer to do the concatenation actually results in a smaller bytecode size. Well, at least compared to the += String operator, which results in 119 bytes worth of bytecode.  The StringBuffer.append implementation shown above results in only 62 bytes of bytecode.  The String.concat() implementation results in 54 bytes of bytecode, but we can match that by chaining StringBuffer.append() calls together, as seen below:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    private String strcatTest() {
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i &amp;amp;lt; StrcatSettings.NUM_CONCATS; i++) {
            sb.append(StrcatSettings.CONCAT_STRING).
               append(StrcatSettings.CONCAT_STRING).
               append(StrcatSettings.CONCAT_STRING).
               append(StrcatSettings.CONCAT_STRING).
               append(StrcatSettings.CONCAT_STRING);
        }
        return sb.toString();
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This results in 54 bytes of bytecode as it avoids the local variable sb from having to be loaded for each append.  Each load results in two extra bytecodes, one to load the variable and the other to pop it once its processing is complete.  From a timing standpoint the chained implementation is nearly identical to the default implementation, though it was consistently about 2-5 milliseconds slower.&lt;/p&gt;

&lt;h4 id='conclusion'&gt;Conclusion&lt;/h4&gt;

&lt;p&gt;Though immutable objects should be used whenever possible, sometimes the loss of performance is just not acceptable.  However, that doesn&amp;#8217;t mean to shy away from immutable classes, only to partner them with a mutable sidekick to do all the dirty work when improved performance is required.  Finally, in a mobile environment, creating objects should be avoided at all cost.  It&amp;#8217;s an expensive task that is felt in everything from the battery consumed to the responsiveness perceived by the user.  String is a nasty way of ramping up the amount of objects being created by your app.  Avoid its functionality.  Just remember, StringBuffer is there for a reason…use it.&lt;script src='http://www.assoc-amazon.com/s/link-enhancer?tag=blurword-20&amp;amp;o=1' type='text/javascript' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Filtering Product Noise</title>
   <link href="http://blurrywords.com/2009/03/22/filtering-product-noise.html"/>
   <updated>2009-03-22T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2009/03/22/filtering-product-noise</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve been lacking topic matter over the last few weeks.  My last post was about a month ago.  It&amp;#8217;s not that I&amp;#8217;ve lost interest in blogging, I&amp;#8217;ve just been having trouble coming up with posts that are worth posting.  It&amp;#8217;s a bit frustrating, but it turns out that it&amp;#8217;s solvable&amp;#8230;I think.&lt;/p&gt;

&lt;p&gt;There are two things that changed recently that could be causing this problem.  The first, I&amp;#8217;ve been doing some research and prep development for the Mobile Development category I&amp;#8217;ve introduced over the last couple of posts.  I see it being a nucleus of Blurry Words in which the rest of my garbage orbits around.  However, it needs some prep work out of me in order to be useful.  So, maybe my mind is wrapped around this and not providing any bandwidth for other random blurs to make there way to my fingers.  It&amp;#8217;s definitely a possibility but probably not the cause.&lt;/p&gt;

&lt;p&gt;I think the more likely reason is that I stopped carrying the notebook that I jot ideas down in.  Oops.  It wasn&amp;#8217;t on purpose.  It lives in my laptop bag and we just got new desktop machines in the office, leaving the laptop, and the notebook, next to my couch.  Headsmack!&lt;/p&gt;

&lt;p&gt;I started taking my notebook with me again this past week.  Low and behold, an idea for a post bloomed, and you&amp;#8217;re looking at it.  Product noise, more specifically filtering that noise.  Basically what I&amp;#8217;m talking about is the infinite amount of different stuff, different crap that is trying to be sold to us at any given moment of our lives.  There&amp;#8217;s just too much crap in the world and every item that doesn&amp;#8217;t interest us is a barrier to buying the crap that we really want.  There needs to be a way for us to avoid the junk that there&amp;#8217;s no chance in hell we will ever buy.&lt;/p&gt;

&lt;p&gt;This idea came on Thursday, when I felt the need for some new music.  &lt;a href='http://www.amazon.com'&gt;Amazon&lt;/a&gt; Digital Downloads to the rescue.  After downloading a couple of new albums, I started looking through the bargain bin, the albums for $4.99 or less.  I&amp;#8217;m sure there are some gems in there, I can feel it.  The problem is that I have an attention span of about 5 pages.  After that I give up and move on to something else.  However, there is hundreds of pages that are only sorted by how much they cost.  Page 79 could have something right up my ally and I would never know it even existed.&lt;/p&gt;

&lt;p&gt;This type of experience isn&amp;#8217;t limited to Amazon.  I&amp;#8217;ve noticed the same thing this weekend as I was searching through realtor listing.  I kept having déjà vu moments when viewing houses that I wasn&amp;#8217;t interested in the last time I did a search.  It makes my search process just that much more painful.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s also been a huge complaint in the mobile application space for years now.  Take the Amazon example above and factor in huge data charges, slow connections and a tiny little screen and forget the user ever getting to page 5.  Page 1 is where the sales are made and beyond that, you might as well not exist.  If you add in the fact that only big licensed products get the page 1 placement from the wireless carriers, original IP is a costly, waste of time, even if the application is brilliant.&lt;/p&gt;

&lt;p&gt;So, how do we fix this?  Well&amp;#8230;we can&amp;#8217;t.  One person&amp;#8217;s pile of steaming dog poop is another person&amp;#8217;s, &amp;#8220;YAY, A PILE OF STEAMING DOG POOP!!!&amp;#8221;&amp;#8221; (sorry, I&amp;#8217;ve been pet-sitting for my parents&amp;#8217; dog this weekend. Dogs are so fascinated by other piles of poo&amp;#8230;well, at least this one is).  The companies can&amp;#8217;t be left to filter out what people want, because they just don&amp;#8217;t know.  They might know what&amp;#8217;s trendy and what&amp;#8217;s currently selling well.  They may be able to recommend some products based on past purchases, but there is nothing they can do when you get the urge to just browse.  There is just no way for them to know what you&amp;#8217;re looking for in that situation, but I believe that they could very easily supply the user with the tools to filter out what you aren&amp;#8217;t looking for, over time ripping down barriers to purchase.&lt;/p&gt;

&lt;p&gt;Back to my Amazon dumpster diving example.  What if at the bottom of each page there was a button? I recommend it be labeled &lt;em&gt;Hide This Crap&lt;/em&gt;. It would take that pages content and send it to your version of Bizarrazon where every product you couldn&amp;#8217;t care less about lives in harmony.  I think two things would happen.  First, each time a user clicks that button, a small barrier to selling that user something during their future searches is torn down.  Instead of looking at the same first 5 pages over and over again, the user now starts from page 6 the next time they&amp;#8217;re searching for bargain deals.&lt;/p&gt;

&lt;p&gt;Second, I believe this small action would work as a positive reinforcement for the user to continue their search further into the piles of crap.  It&amp;#8217;s similar in nature to the &lt;a href='http://en.wikipedia.org/wiki/Grind_(gaming)'&gt;MMO grind&lt;/a&gt;.  It&amp;#8217;s boring.  It&amp;#8217;s tedious.  However, there is a positive, measurable gain that keeps the user pushing through it.  The MMO player levels up their character, allowing them to progress further through the campaign.  While the online shopper is creating a filter of crap, which guarantees that their future searching will be that much more streamlined, saving them valuable time.&lt;/p&gt;

&lt;p&gt;I can see content creators having a problem with this (though if your content is good you shouldn&amp;#8217;t have to worry about it) and I can see stores like Amazon not wanting to cause a rift with their partners.  But, the fact is that there is no way in freaking hell that I am going to buy &lt;a href='http://www.amazon.com/Clapping-Songs/dp/B0011GXCJI/ref=sr_1_376?ie=UTF8&amp;amp;amp;s=dmusic&amp;amp;amp;qid=1237760532&amp;amp;amp;sr=1-376'&gt;Clapping Songs, by The Hit Crew&lt;/a&gt;, the fact that I know it exists is enough.  Allow me to filter it from my existence and make it easier for me to spend my money on the stuff that I want to spend it on.  How about it?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Mobile Optimization Overview</title>
   <link href="http://blurrywords.com/2009/02/24/mobile-optimization-overview.html"/>
   <updated>2009-02-24T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/02/24/mobile-optimization-overview</id>
   <content type="html">&lt;p&gt;When someone says an application needs to be optimized, you probably think that it must need to be faster.  Though speed is a big part of the optimization needed to develop a mobile applications, or any application for that matter, it is hardly the only type of optimization you will face.  Here are some others categories of optimization that will influence the final outcome of any mobile application project.&lt;/p&gt;

&lt;h4 id='heap_usage'&gt;Heap Usage&lt;/h4&gt;

&lt;p&gt;Heap usage is my personal favorite part of optimization.  Not only do you have to worry about how much memory your application uses at its peak, you have to be aware of how it loads that memory, and how often it loads it.  Heap fragmentation can be a much more serious issue than running out of memory, depending on your platform.  If you are running out of memory you can just cut something, problem fixed.  Heap frags a different animal.&lt;/p&gt;

&lt;p&gt;Heap frag is when the application loads memory in a way that breaks the heap up into small, non-continuous chunks.  Since all memory has to be loaded in one continuous block, you run the risk of not being able to allocate a larger object.  What makes this issue so difficult and fun in a language like Java is that you have little control of how and where a block of memory is loading in the heap, or how the garbage collector goes through and cleans up unused objects (which you can be sure will differ from one manufacturer to another).  It&amp;#8217;s quite a tricky problem to battle, but I love tinkering with it.&lt;/p&gt;

&lt;p&gt;Also, memory allocation is slow.  How often and when you allocate objects will have a direct affect not only on the state of the heap, but also on the application performance from a speed and battery consumption standpoint.&lt;/p&gt;

&lt;p&gt;Finally, the memory profiler is your best friend.  It lets you take a look at exactly how your memory is loaded, how and when it&amp;#8217;s cleaned up, and which part of the application is doing the most damage.  Become familiar with the one available for your development language, it&amp;#8217;s your best bet when optimizing heap usage.&lt;/p&gt;

&lt;h4 id='application_size'&gt;Application Size&lt;/h4&gt;

&lt;p&gt;When I started working in the mobile industry it wasn&amp;#8217;t uncommon to have to keep the app size under 64K.  Actually, as of February 2008 many game developers I spoke to at the GDC reported that they still needed to target 64K devices in Europe.  Though generally it is not this constrained anymore, application size is still much more of a variable with mobile applications then it is with other platforms.  The amount of storage space a device has is greatly dwarfed compared to a PC or a server.  In a high-end smart phone you may have a gig of device memory with an SD card slot that can support between 8 and 16 gigs.  That&amp;#8217;s the high-end phones.  That&amp;#8217;s not what your average customer is going to be carrying.&lt;/p&gt;

&lt;p&gt;On top of that, how long and how much it costs to download your application has to be taken into consideration.  If your app is too large, this might be a barrier that potential customers can not get past.  All-you-can-eat data plans and 3G networks should help with this issues, but for now I think it is still a valid optimization worth its costs.&lt;/p&gt;

&lt;h4 id='speed'&gt;Speed&lt;/h4&gt;

&lt;p&gt;There are two types of speed, actual speed and perceived speed.  The overall speed of the application is important, but no where near as important as how fast the user perceives an application to be, especially within the mobile environment.  Lots of things lag by nature in the mobile space, things completely out of your control.  Connectivity for one.  Your app could sit for several minutes while communication occurs with the server.  How you handle these types of situations will be key to keeping your users happy.  If they are left sitting there with no notification that some kind of processing is happening, they are going to think the app either crashed or is incredibly slow.   It is an important subject matter, one that is constantly being researched and constantly needs to be taken into consideration when developing mobile apps.  The general rule of thumb&amp;#8230;if the processing time is going to take more than 2-3 seconds, you better notify the user.&lt;/p&gt;

&lt;p&gt;But, overall application speed is important too.  If the application lags, if user input doesn&amp;#8217;t feel &amp;#8220;snappy&amp;#8221;, doesn&amp;#8217;t supply immediate feedback based on their action, the user is going to feel frustrated.  The profiler is again your best friend as there is no better way to get an understanding of what is going on under the hood.  Whether it&amp;#8217;s a slow implementation of an algorithm, how memory is being allocated and used, how data is being passed around, the profiler will be able to show you a good place to start investigating.&lt;/p&gt;

&lt;h4 id='battery_life'&gt;Battery Life&lt;/h4&gt;

&lt;p&gt;Battery life is a tricky one.  Just ask the manufacturers.  They are constantly getting hammered in reviews for this very issue.  And, as mobile applications become a bigger part of the wireless industry, the affect on the battery is going to be more in the hands of third party developers creating the applications.  Let me tell you right now, if you have an app that is chewing through the battery of a device, the manufacturers and the carriers are going to be pissed.  User&amp;#8217;s are going to be pissed.  No one is going to buy your application, no one is going to be willing to sell your application.  Battery life is the most important issue in the mobile industry.  If your use of the battery is unacceptable, nothing else matters.&lt;/p&gt;

&lt;h4 id='user_interaction'&gt;User Interaction&lt;/h4&gt;

&lt;p&gt;Finally, mobile devices have very limited input capabilities for their users.  Even with a full QWERTY pad, it is no comparison to sitting at a desktop machine with a mouse and a keyboard in which you can use all ten fingers instead of two clumsy thumbs.  So, optimizing the user experience is a very important part of the process.  And with so many different input methods available now, the previously mentioned QWERTY pad, SureType, touchscreen and the classic numeric pad, several different approaches will need to be taken to provide the best experience for all of your customer.&lt;/p&gt;

&lt;p&gt;All of these subjects are important, some more than others, some are actually getting less important as the industry matures, but all are still important and worth talking about.  My next Mobile Development post will tackle a more specific topic related to optimizing mobile apps.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The Mobile Development Category...</title>
   <link href="http://blurrywords.com/2009/02/16/the-mobile-development-category.html"/>
   <updated>2009-02-16T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/02/16/the-mobile-development-category</id>
   <content type="html">&lt;p&gt;I really need to talk more about what I know, that being mobile application development.  Let&amp;#8217;s call this post the start of an actual category on Blurry Words, the &lt;strong&gt;Mobile Development Category&lt;/strong&gt;.  I hate the idea of having categories, because they put an obligation on me to write something related to a specific topic.  As you can see by reading through some of my posts, I rarely ever write about related subject matter.  I&amp;#8217;m all over the freaking map.  However, I figure if there is ever going to be a topic that I can consistently write about, and should have a consistent stream of new data on, that would be the mobile industry and developing mobile apps.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a complicated platform to target, the mobile platform.  It&amp;#8217;s plagued by device fragmentation.  No two devices are the same; whether it is a difference in heap size, screen size, battery life, connectivity options, development languages, the same dev language interpreted differently by each manufacturer; it is a cluster fuck of an industry right now.  There are efforts to remedy this, the Android platform being one example, but it is just making it worse for the near future.  The effort for change only increases the fragmentation, with the hope of eliminating it eventually.  We shall see.  I&amp;#8217;m hopeful, but the only problem is that at least a half dozen organizations all had the same brilliant idea to unify the platform at the same time, which seems to set up the industry to move away from one fragmented environment towards another.  As I said, we shall see&amp;#8230;&lt;/p&gt;

&lt;p&gt;Having said all this, I love being apart of this industry.  It&amp;#8217;s exciting and fresh and in need of so much further growth that you can&amp;#8217;t keep up with it.  Right now it&amp;#8217;s a bitch, a real struggle, but who wants to be in a situation where everything&amp;#8217;s already figured out?&lt;/p&gt;

&lt;p&gt;Plus, mobile applications are on the verge of being mainstream.  I would say we are in the elbow of exponential growth towards mobile apps being an every day part of the lives of the masses.  Here&amp;#8217;s a few observations that I believe reflect this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wireless Carriers are starting to offer &amp;#8220;all you can eat&amp;#8221; data plans.  Cell phones are obviously mainstream, but the apps that run on them are not, with one of the main reasons being the cost incurred to download an application.  I&amp;#8217;m fairly certain that the internet&amp;#8217;s turning point coincided with a similar move away from the &amp;#8220;pay by the minute&amp;#8221; model.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Two of the most socially recognizable technology giants, Apple and Google, are now involved in the industry.  That alone injects a ton of money towards R&amp;#38;D.  But, it also brings a huge number of people that will already buy anything related to the company.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;And BlackBerry, one of the most successful platforms for mobile applications to date, though limited mainly to the business sector, has gone on the offensive to push their product more into the consciousness of consumers.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It&amp;#8217;s an industry ready to explode.  And it&amp;#8217;s in need of as many developers as possible to share their past experiences.  Dialog is important, because not only is rapid growth accomplished by building on the work done by the early adopters of an industry, the growth is stabilized by learning from the mistakes and experiences of those same developers.&lt;/p&gt;

&lt;p&gt;So, here&amp;#8217;s me doing my part&amp;#8230;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Yammer's a Great Idea</title>
   <link href="http://blurrywords.com/2009/02/12/blurring-about-yammer.html"/>
   <updated>2009-02-12T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/02/12/blurring-about-yammer</id>
   <content type="html">&lt;p&gt;I was going to write a long, boring post about how great &lt;a href='http://www.twitter.com'&gt;Twitter&lt;/a&gt; would be for the workplace.  I was going to write about how many times I&amp;#8217;ve run into an issue, collect data on the issue, sent the data to the appropriate party, just to find out that they were already aware and working on the issue.  I was going to talk about how Twitter could greatly streamline communication by avoiding situations like the one above.  I was going to write all this, but then this &lt;a href='http://www.techcrunch.com/2009/02/12/yammer-reaches-beyond-corporate-firewalls-open-sources-iphone-application/'&gt;post by Tech Crunch&lt;/a&gt; appeared.  This is exactly what I&amp;#8217;m looking for.  So, now I&amp;#8217;m just going to try to talk my company into &lt;a href='https://www.yammer.com/'&gt;Yammer&lt;/a&gt; and post a picture of my new cat, Gabby, instead.&lt;/p&gt;

&lt;p&gt;&lt;img alt='gabby' src='/images/posts/gabby.jpg' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Standard Naming Conventions</title>
   <link href="http://blurrywords.com/2009/02/08/thoughts-on-naming-conventions.html"/>
   <updated>2009-02-08T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/02/08/thoughts-on-naming-conventions</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve always been a big believer in using a robust naming convention.  I&amp;#8217;ve used a modified, slimmed down version of &lt;a href='http://msdn.microsoft.com/en-us/library/aa260976.aspx'&gt;Hungarian Notation&lt;/a&gt; for years now, and I swear by it.  I love having all the information I need immediately available in the variable&amp;#8217;s name.  No need to leave the code I&amp;#8217;m working on, no need to hover the mouse on the variable, it is there for me to reference at my leisure.  That&amp;#8217;s why I&amp;#8217;ve relied on a naming convention for so long.&lt;/p&gt;

&lt;p&gt;However, there are huge problems with naming conventions as well.  First off, naming conventions break the DRY (Don&amp;#8217;t Repeat Yourself) principle.  If, for example, you need to change a variable from a char to a String, you run the risk of forgetting to refactor the variable&amp;#8217;s name, making the variable provide faulty information to other programmers relying on the naming convention.&lt;/p&gt;

&lt;p&gt;Another point against it, if a team does not define a naming convention, or even if they do have a naming convention but don&amp;#8217;t actively enforce it, several sub-naming convention will sprout.  Some classes will use one naming convention, others will use a different one.  It will create a confusing mess of conflicting standards.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s probably other issues as well, but the biggest problem you face with upholding a standard such as this is how it becomes exponentially harder to manage as the codebase and the number of programmers working on the codebase grows.  My notation was used strictly at a small start-up, that&amp;#8217;s why it was manageable.  But, when you have multiple teams, working in multiple locations, all with their own sub-policies and procedures, you&amp;#8217;re facing a optimal situation for any standard to fail.&lt;/p&gt;

&lt;p&gt;However, in this instance I do believe there is a remedy, at least in theory, and I don&amp;#8217;t believe abandoning naming conventions is the answer.  I return to an idea talked about in a previous post of mine, &lt;a href='http://www.blurrywords.com/2008/11/26/standard-style-an-oxymoron.html'&gt;Standard Style&lt;/a&gt;.  Every day programmers waste time deciphering unfamiliar syntax and are constantly back referencing variables that don&amp;#8217;t immediately provide feedback of their purpose.  These are wasted cycles that could easily be avoided.  The thing is, as stated in the post on standardizing style, you have to take the burden of upholding a standard or procedure out of the programmer&amp;#8217;s hands.  It&amp;#8217;s time to throw the burden on the computer, more specifically the compiler.&lt;/p&gt;

&lt;p&gt;If you don&amp;#8217;t agree with the above statement, that&amp;#8217;s fine.  Let&amp;#8217;s digress for a moment.  I&amp;#8217;m sure we can all at least agree that we should be writing code in a way that some other programmer, two years after you have left the company, is able to understand what it is that you did, what the code does.  We break shit into different classes, avoid letting our functions get unwieldy, provide informative names for our variables; we do our best to organize code in a workable structure.  This stuff is common practice, used  to make code more maintainable.  But, why is it that we rarely look lower than that to increase our efficiency?  Why don&amp;#8217;t we examine the raw nature, the meat and potatoes of writing code (actually, I&amp;#8217;m sure IDE developers do a lot of this)?  You could do all the things mentioned earlier in this paragraph in order to create a maintainable application, but if you and the programmer two years from now don&amp;#8217;t code in the exact same format, don&amp;#8217;t use the exact same naming convention, a ton of time is going to be spent adapting to a new way of viewing the same old thing.  It&amp;#8217;s wasteful, it&amp;#8217;s inefficient and it forces us to venture outside the problem domain.&lt;/p&gt;

&lt;p&gt;Trivial differences are time consuming.  Syntax formatting, naming conventions (though not the actual descriptive part of the variable name), these are trivial in my opinion.  I really don&amp;#8217;t care what naming convention is used (as long as it&amp;#8217;s informative), or how my code is formatted, as long as these things are consistent.  And that&amp;#8217;s the key point, that&amp;#8217;s the magic word that basically ties this blasphemy all together&amp;#8230;consistency.  There&amp;#8217;s just too many programmers for consistency to be a possibility if the task is left in programmer&amp;#8217;s hands.  It needs to be something built-in to the compiler.  Any other method, scripts, peer-review, anything that does not 100% force our hands will not work.  It&amp;#8217;s time to make more robust compilers, compilers that don&amp;#8217;t just make code readable for the computer, but also makes code readable and consistently formatted for us.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Windows Live Writer Review</title>
   <link href="http://blurrywords.com/2009/01/31/windows-live-writer-blur.html"/>
   <updated>2009-01-31T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/01/31/windows-live-writer-blur</id>
   <content type="html">&lt;p&gt;I thought I would scratch out a quick blur about &lt;a href='http://download.live.com/writer'&gt;Windows Live Writer&lt;/a&gt;.  I&amp;#8217;ve been using it to post for about the past four or five entries and I am pleased with my experience so far.  Posting in a rich, offline application is a much better experience, in my opinion, then writing posts in the web browser.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s three ways to view your content; Edit, Preview, which provides an accurate rendering of your site locally, and Source for when you might need to plug-in some custom formatting for the post.  Editing actually shows the post as you write in the standard layout that it will be displayed on your blog, accurate colors and formats included, minus the side, top and bottom parts of your blog.  The one thing I see that is missing, or at least I haven&amp;#8217;t found it, is a shortcut key between the three editing tabs (&lt;strong&gt;Update&lt;/strong&gt;: there are keyboard shortcuts to move between the three editing views under the View main menu).  Not a big thing though as you mainly stick to the Edit tab and only roam into the others sparingly.&lt;/p&gt;

&lt;p&gt;A formatting toolbar exists at the top with all the post formatting you would expect.  Nothing out of the ordinary, nothing unexpected, which is exactly what I&amp;#8217;m looking for.  I like the fact that Live Writer is geared towards blogging and doesn&amp;#8217;t get in your way with any extra functionality that would be useless relative to writing a blog post.  Having said that, at the same time it is highly extendable and customizable through plug-ins.  Actually, as I was writing this post it came to mind that I didn&amp;#8217;t have a built-in way of adding code snippets to a post in Live Writer.  But, taking 5 seconds to search through the plug-ins revealed three just on the first page.  So, I&amp;#8217;m sure I can find one that meets my needs.&lt;/p&gt;

&lt;p&gt;Finally, the nicest thing about Live Writer, the thing that breaks down any barrier to entry for bloggers, is its seamless integration with many of the most popular blogging applications.  It supports Windows Live Spaces and SharePoint accounts, but also the others you would expect; WordPress, TypePad, Blogger and then the general &amp;#8220;all others&amp;#8221; option.  You just choose &amp;#8220;Add Blog Account&amp;#8230;&amp;#8221;&amp;#8221; from the Blogs Menu, choose your blog type, and give it your URL, username and password.  It takes care of the rest.  From then on you just need to press the big &lt;strong&gt;Publish&lt;/strong&gt; in the top left corner and it magically sends the post to your server.  It will open your web browser after publishing just so you can confirm your post made it in one piece, though that feature can be disabled if you trust that it will be delivered or if it just sounds annoying to you.&lt;/p&gt;

&lt;p&gt;One note on WordPress, and maybe other blogging software.  In order for Live Writer to be able to remote publish your post, XML-RPC publishing protocol must be enabled.  You can enable this from your WordPress control panel, under Settings and the Writing tab.&lt;/p&gt;

&lt;p&gt;Anyways, I was going to look at several offline options for writing posts, but I&amp;#8217;m so content with Live Writer that any more searching would be a waste of time for me.  I don&amp;#8217;t know if it is the best overall blog writing software available, but I do recommend it as a viable solution.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Tinkering Around With Undervolting</title>
   <link href="http://blurrywords.com/2009/01/30/tinkering-around-with-undervolting.html"/>
   <updated>2009-01-30T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/01/30/tinkering-around-with-undervolting</id>
   <content type="html">&lt;p&gt;I got a laugh out of &lt;a href='http://www.penny-arcade.com/comic/2009/1/30/'&gt;this Penny Arcade comic&lt;/a&gt; today.  Ah, the ridiculously hot laptop.  We all know and love the scorching heat radiating from the bottom as we hen peck away on the couch.  The timing of this strip was serendipitous for me as I&amp;#8217;ve spent a couple of nights this week undervolting a laptop of mine, which is a term used to describe the process of lowering the voltage used to power your processor.  Being massed produced, processors are usually set to be powered at a default, stable voltage level.  However, at least in laptops, this level is usually overkill, hence the molting undercarriage.&lt;/p&gt;

&lt;p&gt;I figured I would give undervolting a shot as I have a laptop that had different parts start failing on it, the battery, the built-in wireless, a machine not being used that is perfect for testing shit.  The processor in it is a AMD Turion 64 running at 1.8 GHz.  The default voltage was set to 1.075.  Without the machine blue screening on me, I was able to lower the voltage to a stable 0.925 volts.  The decrease in temperature of the processor was inline with the voltage drop, going from about 136 degrees Fahrenheit down to about 120 degrees when sitting idle.  When running a stress test, the temp went from in the 180s to around 158 degrees.&lt;/p&gt;

&lt;p&gt;The other cool thing about the software I was using, &lt;a href='http://cpu.rightmark.org/products/rmclock.shtml'&gt;RMClock Utility&lt;/a&gt;, was that you could set it up for On Demand Performance.  The processor could be set to run at a lower speed when the tasks running on the machine did not require top performance.  This lowered the temperature to about 115 degrees when at rest, and writing a blog post on the machine did not require the full power to kick in. I set it up to run at the lowest, 800 Mhz being powered at 0.800 volts when power wasn&amp;#8217;t needed.&lt;/p&gt;

&lt;p&gt;The difference in temperature is definitely noticeable and well worth it in my opinion.  However, I warn against doing it at the same time, as it seems kind of dangerous.  You can plan on blue screening or having the machine just zonk out on you quite a few times before you find the lowest stable voltage.  I have yet to try it on a machine that I actively use, and would certainly not attempt it without backing up my content first.  Just be aware of the danger if you want to give it a shot.  Here are some links that can guide you through the process if you are interested in giving undervolting a try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.nordichardware.com/Articles/?page=1&amp;amp;amp;skrivelse=465'&gt;Nordic Hardware: Undervolting a Laptop&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://winhlp.com/rmclock.htm'&gt;AMD Cool &amp;#38; Quiet – how to do it right&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id='update'&gt;UPDATE:&lt;/h4&gt;

&lt;p&gt;I&amp;#8217;ve been having some instability issues with the On Demand Performace function of RMClock.  I found two stable voltages for 800 Mhz and 1.8 Ghz.  When switching back and forth between the speeds though, the machine tends to BSoD after a while.  Running at one or the other is perfectly stable.  So now I just switch to the slower speed manually when performing a task that doesn&amp;#8217;t benefit from top performance.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>IDE Feature - Function Variable View</title>
   <link href="http://blurrywords.com/2009/01/21/ide-feature-function-level-view.html"/>
   <updated>2009-01-21T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/01/21/ide-feature-function-level-view</id>
   <content type="html">&lt;p&gt;I have a new IDE feature that I want.  Maybe it exists, but I&amp;#8217;ve yet to come across it in any of the IDEs that I&amp;#8217;ve used.  I was reading through Smart Bear Software&amp;#8217;s FREE book, &lt;a href='http://smartbear.com/codecollab-code-review-book.php'&gt;Best Kept Secrets of Peer Code Review&lt;/a&gt;.  The book centers around convincing you that you need to be doing peer code review at your company.  There&amp;#8217;s several essays in the book, and it ends with a small, but tasteful pitch for Smart Bear&amp;#8217;s very own product, &lt;a href='http://smartbear.com/codecollab.php'&gt;Code Collaborator&lt;/a&gt;, a robust, efficient and organized tool for peer code review.&lt;/p&gt;

&lt;p&gt;We happen to use Code Collaborator where I work.  So, I&amp;#8217;ve already drank the code review and using Code Collaborator cool-aid.   However, the book, more specifically some of the studies in the book, did spark some ideas, one being this new IDE feature I mentioned at the top.  Basically, what I&amp;#8217;m looking for is a list of the variables used in the function that I&amp;#8217;m working on or attempting to get up to speed with.  The study on &lt;a href='http://se.naist.jp/achieve/pdf/151.pdf'&gt;code review and eye movement&lt;/a&gt; sparked this need of mine.  The researchers studied the eye movement of an individual during a code review session, to see exactly how programmers work their way through unfamiliar code, understanding how programmers hone in on defects.&lt;/p&gt;

&lt;p&gt;The paper reveals that several interesting eye movement patterns emerged during the study.  The pattern of my interest was called &lt;em&gt;Retrace Declaration Pattern&lt;/em&gt;.  Here&amp;#8217;s what the study had to say on it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When a reviewer reaches a code line where a variable is firstly used, within a short period the reviewer often looks back to the declaration line of the variable. We define this eye movement as retrace declaration pattern&amp;#8230;Statistics show that the number of variables causing the retrace declaration pattern is 51.8 percent of the total number of variables. The retrace declaration pattern can be interpreted as a cognitive action that the reviewer reconfirms the data type of the variable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pay attention to what you do when comprehending code.  I know I refer back to the initial declaration of variables obsessively, especially when there is no naming convention or a convention not familiar to me.&lt;/p&gt;

&lt;p&gt;The study only used local variables in short functions.  So, the variables were always in view.  There was no use of class member variables or global variables, nothing that would be declared elsewhere.  The IDEs I use, &lt;a href='http://www.eclipse.org/'&gt;Eclipse&lt;/a&gt;, &lt;a href='http://msdn.microsoft.com/en-us/vstudio/default.aspx'&gt;Visual Studio 08&lt;/a&gt;, and &lt;a href='http://www.jetbrains.com/idea/'&gt;IntelliJ IDEA&lt;/a&gt;, all have ways of allowing the user to view declarations without actually opening the variable&amp;#8217;s file.  Eclipse has a Declaration Window, which shows the declaration code of whatever variable the cursor is on.  Visual Studio&amp;#8217;s method is similar.  Known as the Code Definition Window, it shows whatever the last variable the cursor came across was.  And, in IDEA you can do a Quick Definition Lookup using the shortcut Ctrl+Shift+I.&lt;/p&gt;

&lt;p&gt;These are all useful, but they have two problems.  The first is that none of these options are passive.  In each instance you need to identify which variable you want more information on.  The other problem is that you can only get feedback on one variable at a time.  I would use these functionalities to get more information if needed.  However, a passive list that just shows the variable&amp;#8217;s name and data type for each variable active in the function would be much more useful.&lt;/p&gt;

&lt;p&gt;Anyways, would it kill me not to have this function variable view? No, it hasn&amp;#8217;t yet at least, but it would be a small efficiency gain I would gladly embrace.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Building Houses, Building Games</title>
   <link href="http://blurrywords.com/2009/01/18/building-houses-building-games.html"/>
   <updated>2009-01-18T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/01/18/building-houses-building-games</id>
   <content type="html">&lt;p&gt;One of the very first chapters in &lt;a href='http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=0735619670'&gt;Code Complete&lt;/a&gt; is about metaphors and how they can help us to understand a problem by relating to something else we already understand.  The book suggest that the current best metaphor that we have is construction work.  I tend to agree as I’ve often compared the work I’ve done in software to my high-school days when I used to work construction for the summers.  To be more specific, I’ve always thought game development was like building houses.  They both have a general structure that we expect.  With a house you expect a roof, a kitchen, bathrooms, bedrooms and general protection from the elements.  With games you expect menus, a heads-up display, gameplay mechanics, and goals that you need to achieve to be successful.  Both have a solid structural concept that we’ve come to expect and feel comfortable with.&lt;/p&gt;

&lt;p&gt;But what really makes this metaphor work is how in both cases the final result is unique.  Don’t get me wrong, the amount of customization level may differ from project to project.  Some times there are lower cost specs houses, cookie cutter buildings, in which houses are mass produced and may just differ in color or the position of a wall or two.  You often see neighborhoods like this in which everything looks similar, but slightly different.  We see this in gaming as well.  Take an established genre, an established gameplay mechanic and reskin the models and the environments to make a different enough experience that you will be able to make some profit.  For instance, how many first person shooters in which you are a marine fighting a crap load of vicious alien monsters exist?&lt;/p&gt;

&lt;p&gt;Then there are the high-end, highly customized houses in which sick amounts of money have been pumped into the construction.  These houses still follow the basic model and understanding that I listed above, but the house will be uniquely designed by an architect to have its own look and feel.  It will have custom moldings, custom appliances and cabinetry; every detail, small or large, will be carefully thought out and crafted.  This level of game development exists too.  We see new ground breaking genres and gameplay mechanics, high quality, thoroughly designed, epic games with tons of hours of gameplay and story.  I think of &lt;a href='http://www.amazon.com/gp/product/B000P46NKC?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=B000P46NKC'&gt;Resident Evil 4&lt;/a&gt;.  I see the problem of using an example where the name implies that there were 4 others before it, but RE4 reinvented itself and came up with a mechanic that has been adapted and reused by a ton of other titles since then.&lt;/p&gt;

&lt;p&gt;I’m sure you can extend the metaphor further.  However, there is a part of the metaphor that not everyone recognizes.  The first time I ever thought of this metaphor it had more to do with dealing with the customer than the actual construction that took place.  In both house building and game development, communicating the process can be difficult to the individuals involved that only have a high-level understanding of what is going on.  With building, after getting the house framed, work can appear to come to a stand still for the next few weeks.  Once you get the walls up you will need to start doing preparatory work for the utilities, the dry wall, the exterior finish work.  From a home owner’s point of view it will appear that nothing is going on, the progress has ceased to move forward.  They will not notice the &lt;a href='http://www2.dupont.com/Tyvek/en_US/index.html'&gt;Tyvek&lt;/a&gt; the house is wrapped in to keep it from leaking, or the runner pieces on the walls and ceiling that the drywall needs to be attached to.  All this preparation takes a lot of time, more time than it will take to make it all look pretty.  But, the guy paying the bill doesn’t understand this.  Don’t worry though, once the outside has pretty siding, and all the ugly framing work is hidden away behind a superficial shell, the owner will be happy.&lt;/p&gt;

&lt;p&gt;Same thing with games.  When developing the mobile game based on &lt;a href='http://www.hiphopimmortals.com/'&gt;Hip Hop Immortals&lt;/a&gt;, we had a game based on painting graffiti all around the map.  Your guy would get chased by security guards and have cleaning crews  come and destroy their work.  It was your job to get the entire map tagged with your art.  There were several mini-games in HHI, so there was a bunch of artwork needed and the other mini-games had priority on that front.  I had the gameplay mechanic completely in place for the graffiti mini-game before I even received any artwork.  We sent off an early proof of concept with long rounded rectangles holding the place of the artwork.  To be honest, they kind of looked like giant turds walking around, it had some accidental comedic elements to it.  When this was shown to the publisher the response was basically shock at how little we had done.  The thing is, other than fixing a couple of bugs, the programming for graffiti was done.  I just had to plug the artwork into place and the mini-game was done.  Nevertheless, because of the lack of artwork, graffiti was perceived to be way behind schedule.&lt;/p&gt;

&lt;p&gt;In the end, no matter how naive the customer, it’s still your fault if they don’t understand your vision.  The world responds to visuals more than anything, especially with the higher level business type.  So, even if it is inconvenient to your development, your construction process, taking time to make your product look pretty is a necessity.  You will never sell Joe MBA on an algorithm alone.  A pretty user interface, a coat of paint on the walls, some kind of art, even programmer art, can make all the difference when trying to sell the guys with the money.  If your artists aren’t available, draw something yourself.  Try &lt;a href='http://www.inkscape.org/'&gt;Inkscape&lt;/a&gt;.  Vector graphics can make even programmer art look passable enough for a proof of concept.  Anything is better than a giant turd walking around.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blurring From Seat 2D...</title>
   <link href="http://blurrywords.com/2009/01/07/blurring-from-seat-2d.html"/>
   <updated>2009-01-07T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/01/07/blurring-from-seat-2d</id>
   <content type="html">&lt;p&gt;This post comes to you from 30,000 feet above the Atlantic.  I’m on my way to France for work.  We need to do some testing of the software I’ve been working on, on the Vodafone networks.  So, my first visit to Europe will be for work.  I doubt I’ll get to see much as today is Tuesday, technically its Wednesday now; I work all day Thursday and Friday, and will be leaving early morning Saturday.  About 24 hours of travel for 16-18 hours of work.  I don’t know how people do this on a regular basis.&lt;/p&gt;

&lt;p&gt;Actually, I shouldn’t complain so much.  My seat got upgraded to Business Class Elite (say it in Don Lafontaine’s voice).  That’s the only way I could possibly be writing this right now.  Using a laptop in the peasant’s class is just not possible.  The biggest problem with this upgrade though is that I don’t know how I can ever return to coach now that I know what I’m missing.  I’m 6’ 3’’ and I can’t reach the seat in front of me!  Free drinks, a nice dinner service with multiple courses, free new release movies, I need to make more money.&lt;/p&gt;

&lt;p&gt;Anyways, here’s a couple of random blurs from my day just to make this post take a little more of your time and still be a complete waste in the end:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Only 3 out of 10 Delta Trivia players know that Jason from Friday the 13th’s last name is Voorhees.  That’s sad.  Or am I just getting old?&amp;lt;/li&amp;gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Viigo is a great RSS feed reader for the Blackberry, and maybe other devices too, but I can only vouch for the Blackberry version.  There are a few little quirks to it as it is still a rather young app I believe, but it is actively being developed and you can easily submit bugs and feature request from the app itself.  I’ve been using it for a few weeks now, but today I realized how vital an app it has become for me. I spent a lot of the day catching up on my feeds as I hopped from airport to airport.&amp;lt;/li&amp;gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;This blur isn’t from the plane but, something I experienced driving around Grenoble.  The lines separating the left side of the road from the right side of the road are white here.  If you are not from the states, the dividing line is yellow for traffic going opposite directions, white for traffic going the same direction.  Talk about a two inch heart attack, the first time I turned right on a road and noticed the line was white and had cars coming at me from the other direction, made me nearly mess my pants.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Z2K</title>
   <link href="http://blurrywords.com/2009/01/02/z2k.html"/>
   <updated>2009-01-02T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2009/01/02/z2k</id>
   <content type="html">&lt;p&gt;I found the &lt;a href='http://zuneinsider.com/archive/2008/12/31/30gb-zune-issues-official-update.aspx'&gt;bricking Zune&lt;/a&gt; problem over the last couple of days pretty funny.  People were freaking out like the world was ending or something.  Flame wars were breaking out all over the place.  Apple being bashed, Microsoft being bashed.  People need to chill.&lt;/p&gt;

&lt;p&gt;Anyways, I&amp;#8217;ve been messing around with SVG and &lt;a href='http://www.inkscape.org'&gt;Inkscape&lt;/a&gt; over the past couple of weeks.  So, check out this little comic strip I put together.  I think it&amp;#8217;s funny, that&amp;#8217;s all that counts.  And, you&amp;#8217;ll notice that it is an image file instead of an SVG file.  Both Firefox and Chrome didn&amp;#8217;t show the text.  So, I just exported it instead.  Enjoy!&lt;/p&gt;

&lt;p&gt;&lt;img alt='30 Gigs of Fury' src='/images/posts/30_gigs_of_fury1.png' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blurry Words '08 Gaming Review</title>
   <link href="http://blurrywords.com/2008/12/30/gaming-blur-2008.html"/>
   <updated>2008-12-30T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/12/30/gaming-blur-2008</id>
   <content type="html">&lt;p&gt;One more day until 2008 wraps.  So, it is time to review my year in gaming.  This is in no way a comprehensive look at the year in video games, mainly because I wasn&amp;#8217;t able to play half the games that came out this year.  No, it is just my look back on the year and what I liked and what left me a bit unsatisfied.&lt;/p&gt;

&lt;p&gt;One more thing, this only covers games that came out in the 2008 calendar year, eventhough I spent a shitload of hours playing titles like Call Of Duty 4 and Ratchet &amp;#38; Clank during the year.  I don&amp;#8217;t want to blur the lines between the years, just sticking to actual 2008 titles. On that note, lets get crackin&amp;#8217;.&lt;/p&gt;

&lt;h4 id='game_of_the_year'&gt;Game of the Year&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.bizarrecreations.com/games/geometry_wars_retro_evolved_2/#trailer'&gt;Geometry Wars: Retro Evolved 2&lt;/a&gt; - This was an easy one.  There was no game in 2008 that I was (was? try am!) more addicted to than Retro Evolved 2.  They took an amazingly fun, classic gameplay mechanic and turned it into a robust, infinitely replayable gaming experience.  It invoked so many &lt;img alt='Geometry Wars 2' src='/images/posts/geowars2.jpg' /&gt; responses from me; elation to get a hard achievement or beat a personal highscore, frustration (meaning controller slamming) when I would fuck up or make a stupid move and die.  I don&amp;#8217;t know how many times my wife told me to calm down while playing this game.  Plus, in sequence, ranked 490 in the world.  Yeah, that&amp;#8217;s right.  And no, there was not only 500 people ranked&amp;#8230;hundreds of thousands!  It&amp;#8217;s the best world ranking I&amp;#8217;ve ever had at anything.  By far!  Play this game.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id='disappointment_of_the_year'&gt;Disappointment of the Year&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.amazon.com/gp/product/B000FQ2D5E?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=B000FQ2D5E'&gt;Metal Gear Solid 4: Guns of the Patriots&lt;/a&gt; - First, I&amp;#8217;m a huge fan of the series.  MGS and MGS2 are two of my favorite games of all time.  MGS3 has my favorite boss battle of all time, the one against &lt;em&gt;The End&lt;/em&gt;.  However, I just couldn&amp;#8217;t get into MGS4.  I couldn&amp;#8217;t.  I feel like I&amp;#8217;m just missing something.  It got a frigging 10 on Gamespot.  What the hell is wrong with me?  With that said I think &lt;a href='http://www.penny-arcade.com/comic/2008/6/11/'&gt;this&lt;/a&gt; comic at Penny Arcade reflects exactly how I feel.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id='just_friggin_great'&gt;Just Friggin&amp;#8217; Great&lt;/h4&gt;

&lt;p&gt;Three games fall into this category for 2008.  These games did what they did, and they did extremely well.  They all kept my interest for huge hourage and all three were well worth the $60 price tag.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.amazon.com/gp/product/B000MUXLOK?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=B000MUXLOK'&gt;Burnout Paradise&lt;/a&gt; - I&amp;#8217;m still very much playing this game as it is a long one, and the races/obstacles become pretty damn hard as you near the end.  But, the cars are awesome, the gameplay is fun and rowdy, and I still haven&amp;#8217;t tried Bikes expansion for whatever reason.  This was my first experience with the Burnout franchise and I&amp;#8217;m mad at myself for not trying it earlier.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.amazon.com/gp/product/B000X1TC0U?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=B000X1TC0U'&gt;Dead Space&lt;/a&gt; - This game made me think of about 4 or 5 other games.  The mechanics feel like Resident Evil 4, a slower, more methodical shooter.  The environment reminds me of Quake 4, especially the cutscenes that happen in a glass room.  The weapon upgrade system reminds me of Bioshock and Final Fantasy X.  And, of course the main character reminds me of Mr. Bubbles from Bioshock.  Even the ability to slow shit down reminds me of something, but I can&amp;#8217;t quite figure it out.  It&amp;#8217;s like they had a brainstorming session about some of the more popular games recently, took the best mechanics from each and came up with a brilliant original IP.  I can&amp;#8217;t believe this came out of EA.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.amazon.com/gp/product/B000ZK9QD2?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=B000ZK9QD2'&gt;Gears of War 2&lt;/a&gt; - Not much changed from the first, but what really had to change?  The one big thing that changed is balance in the multiplayer.  I can actually hold my own online with randoms this time.  That was impossible last time around.  I&amp;#8217;m glad they didn&amp;#8217;t monkey with it too much.  It was a great time the first time around, and they just polished it up and made it just that much better.  But, from now on they should go to an episodic format, which they won&amp;#8217;t.  As with Halo 3, Gears 3 will not change much as well, and turn people off.  Think about episodic releases guys.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id='more_let_downs'&gt;More Let Downs&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.amazon.com/gp/product/B000PS4X7S?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=B000PS4X7S'&gt;Left 4 Dead&lt;/a&gt; - To be fair, I haven&amp;#8217;t given this game much time yet.  I played through the first scenario in single player mode though, and I was a bit bored and didn&amp;#8217;t have a desire to fire it up again.  This weekend I plan to take it online with some friends, maybe it will be more enjoyable.  Who knows.  All I know is that I love zombie related stuff.  I love the movies, the Resident Evil series, and I had high hopes for this one.  The biggest problem with it is a lack of suspense.  I was never on edge, never scared once.  That&amp;#8217;s not the essence of zombie stuff.&amp;lt;/li&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PS HOME&lt;/strong&gt; - Not much to say.  I was at the GDC keynote two years ago when Sony announced it.  I predicted boredom then (I said something about how we will be able to wait in virtual lines to play games!).  So, can I really call this a let down if I saw it coming?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id='not_great_but_pretty_damn_good'&gt;Not Great, but Pretty Damn Good&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.amazon.com/gp/product/B00149IL9I?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=B00149IL9I'&gt;De Blob&lt;/a&gt; - De Blob is just a lot of fun.  The control schemes are a bit repetitive, but it doesn&amp;#8217;t matter as it is still enjoyable.  This is what I expect from Wii games.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.amazon.com/gp/product/B00127PZCS?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=B00127PZCS'&gt;MLB 08: The Show&lt;/a&gt; - The best baseball game I&amp;#8217;ve played since MLB 99.  I still didn&amp;#8217;t make it through a full season without simming some games, but it was still quality baseball.  One thing Sony, fix the damn crash related to specific wireless router conflicts.  That&amp;#8217;s just silly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://www.thatgamecalledrez.com/'&gt;Rez HD&lt;/a&gt; - It wasn&amp;#8217;t really what I expected, not sure if I really expected anything, but it was still fun.  Not much I can say about it.  Just give it a try if you have a couple of bucks to spare.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That&amp;#8217;s it.  I played a few others that I was completely indifferent to.  I played them once, was bored and never picked them up again.  I didn&amp;#8217;t feel disappointed, just passively forgot about them.  So, they aren&amp;#8217;t worth bringing up in this column.&lt;/p&gt;

&lt;p&gt;Finally, as with every year there were a few games I didn&amp;#8217;t get to in 08 that I&amp;#8217;m penciling for 09.  Resistance 2 and Condemned 2 were both on my radar.  Unfortunately so were Resistance and Condemned when they came out.  So, there&amp;#8217;s four games.  Then there is Star Wars: The Force Unleashed.  A mediocre rating (average around 7.5) knocked it down a few priority pegs.  Same goes for Lego Batman, but I hope I get to both.  And, off the top of my head for 2009, the only game that immediately comes to mind is Resident Evil 5.  It&amp;#8217;s about time, it&amp;#8217;s only been like four years since the last installment.&lt;/p&gt;

&lt;p&gt;Happy New Year!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Huge Mobile News...</title>
   <link href="http://blurrywords.com/2008/12/22/huge-mobile-news.html"/>
   <updated>2008-12-22T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/12/22/huge-mobile-news</id>
   <content type="html">&lt;p&gt;What&amp;#8217;s the number one complaint in almost any high-end mobile device review?&lt;/p&gt;

&lt;p&gt;Anyone?&lt;/p&gt;

&lt;p&gt;Battery life!  The top of the line devices never last long before needing to be tethered to the wall.  They have so many other uses beyond just making phone calls, but even when just making calls you can probably only expect between 6-10 hours of constant talking time before recharging is needed.  And, this isn&amp;#8217;t even considering 3G networking, which barrels through lithium ion like Kobayashi through hot dogs.  The more our phones need to do, the more our battery life will suffer.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href='http://www2.carleton.ca/newsroom/info-brief/carleton-engineering-student-creates-innovative-invention-to-prolong-battery-life/'&gt;Atif Shamim&lt;/a&gt;, an engineering student at Carleton University who has quietly came up with the greatest breakthrough in cellphone technology that I&amp;#8217;ve seen in the 5 years I&amp;#8217;ve spent working on mobile devices.  Anyone interested in 12x battery life?  Any takers?&lt;/p&gt;

&lt;p&gt;I have little understanding of what exactly his system is or how it does what it does.  The only details I&amp;#8217;ve seen so far is that it doesn&amp;#8217;t use wires to connect the circuits to the antenna, it does it all wirelessly, which supposedly cuts down battery consumption big time.  On top of that, the news says his system would be much cheaper to manufacture than the current methods.&lt;/p&gt;

&lt;p&gt;Sounds to good to be true, right?  Maybe.  I can&amp;#8217;t say, it doesn&amp;#8217;t seem that way right now, but it is way too early to tell the ramifications of this invention.  All I know is that I&amp;#8217;m keeping my eye on it, and I bet the big boys, the Apples and Nokias, the RIMs and HTCs, are already attempting to position themselves just to get a peak at what Atif has achieved.&lt;/p&gt;

&lt;p&gt;One final thought.  How did this take nearly a month to come across my consciousness?  I don&amp;#8217;t think I&amp;#8217;m that much out of touch.  I read the &lt;a href='http://www.smartbrief.com/ctia/'&gt;CTIA SmartBrief&lt;/a&gt; every day.  I read tech blogs.  How did I miss this?  How is it not getting more penetrating coverage?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Vector Graphics - Part 1, Intro</title>
   <link href="http://blurrywords.com/2008/12/16/vg-part1.html"/>
   <updated>2008-12-16T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/12/16/vg-part1</id>
   <content type="html">&lt;p&gt;Over the weekend I decided to start the research stages of a hobby project.  By the end of the day on Sunday, after collecting a ton of data and brainstorming exactly what I wanted to do, even writing a post that I decided not to publish, which outlined many of the goals for the project, I was overwhelmed and disenchanted.  What I wanted to do, the amount of time and effort was just daunting; way too much work for one man to tackle, on the weekends.&lt;/p&gt;

&lt;p&gt;Come Monday, sitting at my desk, I gained some optimism for the project.  My mistake was that I was trying to fit the entire turkey in my mouth at once and it just lead to me choking on it.  What I needed to do was carve it up and take it one piece at a time.  Maybe rip off a leg and start gnawing away at it.  Don&amp;#8217;t even think about the rest of the bird until you have finished that first leg.&lt;/p&gt;

&lt;p&gt;So, the first leg is going to be vector graphics research, starting with &lt;a href='http://www.w3.org/Graphics/SVG/'&gt;SVG&lt;/a&gt;, Scalable Vector Graphics.  SVG is a standard defined by W3C, the World Wide Web Consortium.  Here&amp;#8217;s the briefing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;SVG is a language for describing two-dimensional graphics and graphical applications in XML. SVG 1.1 is a W3C Recommendation and forms the core of the current SVG developments. SVG Tiny 1.2 is the specification currently being developed as the core of the SVG 1.2 language (comments welcome). The SVG Mobile Profiles: SVG Basic and SVG Tiny are targeted to resource-limited devices and are part of the 3GPP platform for third generation mobile phones. SVG Print is a set of guidelines to produce final-form documents in XML suitable for archiving and printing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Being a W3C standard, it has web development in mind.  However, I&amp;#8217;m looking to use it to define 2D graphic resources in a game engine.  Being XML, it can be easily parsed and interpreted in any environment, on any platform, all you need to do is write the parser and the engine to interpret the different Vector pieces and manipulations.&lt;/p&gt;

&lt;p&gt;So, that&amp;#8217;s going to be my first step with this pet project of mine.  Right now I&amp;#8217;m reading through the SVG documentation, attempting to become an &amp;#8220;expert&amp;#8221; on the subject, or at least get an idea of what it&amp;#8217;s all about.  After I feel comfortable with the standard I plan to start working on the parser and interpreter.  I need to create a basic windows application in order to test and debug the interpreters output.  So, I&amp;#8217;m currently researching this as well.  There&amp;#8217;s several ways I can take this.  Qt? wxWidgets? Java? C# .NET?  The last two are probably eliminated as Java and C# are the languages that I spent the most time in the last 3 years.  I&amp;#8217;m either looking to get back to doing some C/C++ or trying something different, maybe Python.  We&amp;#8217;ll see.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m going to make this a mini-series of posts on Vector Graphics and my development.  So, the next post will have more information and opinions on the SVG standards and where the research took me.&lt;/p&gt;

&lt;h4 id='update'&gt;Update&lt;/h4&gt;

&lt;p&gt;This side project idea is fizzling for me.  For one, I&amp;#8217;m pretty swamped, but the other reason why I have lost some motivation is that I&amp;#8217;m finding a lack of forward progress in vector graphics at this time.  Other than Flash, the rest of the vector graphics efforts are being pursued half-heartedly at best.  Maybe I&amp;#8217;ll pick it back up a few months down the line, at that time maybe there will be some better support for things like OpenVG and the SVG standard at that time.  I was hoping to rely on open standards to create a vector graphic game engine, not actually have to implement these standards myself.  Don&amp;#8217;t get me wrong, I would love to tackle implementing APIs for all my needs, but as with most of the world, who has the time to do everything by themselves.  If you were searching the web for Vector Graphics and it lead you to this post, check out this question I posted on Stackoverflow.com.  For how short the list seems, it is pretty comprehensive at the time of this post.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Archive Links</title>
   <link href="http://blurrywords.com/2008/12/11/archive-links.html"/>
   <updated>2008-12-11T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/12/11/archive-links</id>
   <content type="html">&lt;p&gt;I&amp;#8217;m working on getting my archive setup as the main page is getting pretty long. Something I like to do when I discover a new blog is to read through the blog&amp;#8217;s post archives. I figure if the poster had one intriguing enough post to bring me to their blog, they probably had some others in the past. I just like to be caught up before going forward.&lt;/p&gt;

&lt;p&gt;The way I track my progress through a large archive is by the links.   You read it, it&amp;#8217;s considered visited, it changes colors and automatically marks my place for the next time I visit.  However, there are some blogs that don&amp;#8217;t change their link colors when they are visited.  I understand the style gain in a post, but define separate link parameters for the blog.  It&amp;#8217;s an easy css change that takes down an annoying barrier that might otherwise keep readers from checking out your past posts.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Char-Broiled Zombie Programmer</title>
   <link href="http://blurrywords.com/2008/12/09/char-broiled-zombie-programmer.html"/>
   <updated>2008-12-09T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/12/09/char-broiled-zombie-programmer</id>
   <content type="html">&lt;p&gt;In one of the recent &lt;a href='http://itc.conversationsnetwork.org/series/stackoverflow.html'&gt;Stackoverflow podcasts&lt;/a&gt;, I believe it was episode 31 to be precise, the discussion turned to programmers burning out.  The conversation stemmed from this &lt;a href='http://stackoverflow.com/questions/273299/how-do-you-pull-yourself-out-of-a-programming-slump'&gt;post&lt;/a&gt;.  It got me thinking whether I&amp;#8217;ve actually ever been burnt out because of programming.  The thought process took a while as I can think of tons of instances when I&amp;#8217;ve been in a funk about work, about the content I was working on or the deadline that had me slamming away at a project for 80+ hours a week.  The problem is that I&amp;#8217;m not sure any of these instances of despair were related to programming specifically.  I can actually think of several times when I was in a state of char-broiled zombie mode and would still be interested in looking into a some other language or development platform, something programming related that has nothing to do with the work I was doing.  So, in my own personal situation, I don&amp;#8217;t see myself ever burning out on programming and/or software development, only on a project or working environment.&lt;/p&gt;

&lt;p&gt;The way I see it is that programming is like professional sports in a lot of ways.  We always have a project that has an end goal, like a season and its championship.  But, at the end of each season there&amp;#8217;s always  one grizzled old vet that swears that this is the year they are going to hang it up.  However, after a few months away from the constant grind of a long season, that same player is itching to throw the spikes, the pads, the shorts back on and get ready for another long, suffering season.  Obviously Brett Favre comes to mind.  For those that really love it, walking away is just not that easy.  And, even after the body gives out on them, making it impossible to play at a competitive level, a lot of them turn to coaching, or broadcasting, or something else related to the sport they dedicated their entire life to.  The young guys aren&amp;#8217;t immune to this burnout either though.  The fact is everyone starts to eat shit at the end of a season, or a demanding project, because when you are truly dedicated to success and you truly love what you do, you give everything you can to reach the end goal.&lt;/p&gt;

&lt;p&gt;But, it&amp;#8217;s hard for me to believe that if someone loves programming, or sports for that matter, they would point their lack of desire at the activity.  In sports, it is the strain on the body, the mental drain of constantly being tired from rigorous practices and game days, long hours studying the opponent, long stretches away from their families.  The same type of stuff happens in programming to cause us to lose our drive coming down the stretch.  Here are some that I&amp;#8217;ve pinpointed from my own career so far.&lt;/p&gt;

&lt;h4 id='crunch_mode'&gt;Crunch Mode&lt;/h4&gt;

&lt;p&gt;The biggest culprit of burnout.  We&amp;#8217;ve all been through it, the 80+ hour weeks for several months in a row to make a superficial deadline.  How about a crazy crunch just to watch the game/app sit on the shelf for several months after completion&amp;#8230;been there, down that, TWICE!  I can definitely see why lukewarm developers wouldn&amp;#8217;t want to stick around after a soul crushing crunch.  But, the ones that truly love it always come back for more&amp;#8230;just maybe not at the same company.&lt;/p&gt;

&lt;h4 id='boring_dredge_work'&gt;Boring Dredge Work&lt;/h4&gt;

&lt;p&gt;We all need to take part in the maintenance, or maybe you spend several months getting shuffled around to projects that need all hands on deck to kill bugs and get the app out the door.  Most of the creative stuff, the stuff we crave, happens at the beginning of the project.  Long periods of this, even ones with sane hours, can become mundane and drain your desire to work.  Before the recent career change I spent 6 months or so in this mode.  Being a small company I spent that time jumping on to help get the games finished, ported and out the door.  Three different projects in that time, all grunt work.  We need to tackle things that are interesting to keep it fresh.&lt;/p&gt;

&lt;h4 id='different_development'&gt;Different Development&lt;/h4&gt;

&lt;p&gt;At the end of last week I got added to a new project team.  For the first time in my professional life the project will not be a game.  I&amp;#8217;m siked!  I love game development, but I&amp;#8217;m in need of another challenge, something completely unique, with a completely different set of challenges.&lt;/p&gt;

&lt;h4 id='thelanguagetechnology'&gt;The Language/Technology&lt;/h4&gt;

&lt;p&gt;I&amp;#8217;ve been working in JavaME exclusively for about 3 years now (well, not exclusively as I have spent some time developing tools, Windows apps with C#).  The same environment, the same language, the same platform, it can certainly help in burning us out.  In my case, this type of burnout surfaces as the desire to work on another platform, in another language.  Lately I&amp;#8217;ve had an itch to do some web development, that might explain the blog.  The funny thing is that I was completely spent on web dev when I graduated from college.  Never ever wanted to do it again.  We&amp;#8217;re fickle, interests change.&lt;/p&gt;

&lt;h4 id='being_micromanaged'&gt;Being Micromanaged&lt;/h4&gt;

&lt;p&gt;This one is a bit more subtle, until it drives you so nuts that you just have to leave the company.  We all have ideas of how things should be developed, but often we are not allowed to express these ideas as someone else, someone not as close to a project as you might be, thinks they know better.  It&amp;#8217;s a frustrating way to work when you are constantly being undermined.  I&amp;#8217;ve suffered through it first hand at the first company I ever worked for&amp;#8230;less than three years later and I know of no one at the office where I used to work.  Smart people want to have an intellectual and creative say in what they are working on, burnout will ensue if they aren&amp;#8217;t allowed to.&lt;/p&gt;

&lt;p&gt;Those are the major ones that I was able to pinpoint in the 15 minutes I sat down to think about it.  The last thing that I have a theory on has to do with recovery time.  The ones that really love it will always come back to it.  However, maybe as you age it takes longer to recover from a strenuous period of activity.  We know this happens with the body, why wouldn&amp;#8217;t the brain suffer from the same thing?  Maybe the young junior programmers only needs a week before they are ready to jump back into crunch.  I know in college I would pull an all-nighter to finish a project, drive to work and develop web pages all day.  If I tried that today I would probably fall asleep on the way and end up parked inside a Best Buy.&lt;/p&gt;

&lt;p&gt;Finally, I&amp;#8217;ve only been at this professionally for 5 years now&amp;#8230;check back with me in another 5 to find out how I feel then.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Standard Style, why not?</title>
   <link href="http://blurrywords.com/2008/11/26/standard-style-why-not.html"/>
   <updated>2008-11-26T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/11/26/standard-style-why-not</id>
   <content type="html">&lt;p&gt;For most of our lives, being slightly different is a good thing.  We all have the same basic outline for clothes, but usually you are dressed differently than everyone else.  Everyone has some variation of a car, but seeing a car identical to yours is not all that common.  We desire to be unique, to have a slight variation on our existence.  Unfortunately, this is not a good thing when it comes to writing code.&lt;/p&gt;
&lt;div style='float:right;'&gt;
&lt;p&gt;&lt;img alt='I am Jacks random movie reference' src='/images/posts/fc_backg.jpg' /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;When given a choice, everyone is going to find a slightly different way of accomplishing the same things, as shown with the clothes and cars examples above.  Code formatting is not an exception to this rule; everyone&amp;#8217;s preferred formatting differs. Some put an open curly bracket on a new line, while others leave it on the same with a space after the closed parentheses, while others leave it on the same line without a space after the closed parentheses. Then there is the format that has class curly brackets on a new line, but function curly brackets on the same line.  And you know there is some random guy out there that just has to be way different, who likes to line up their curly brackets in the middle of the name of the function it belongs to. Come on, this is stupid.  It&amp;#8217;s time to evolve and realize you&amp;#8217;re not your fucking khakis&amp;#8230;er, code formatting, you&amp;#8217;re not your fucking code formatting.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not the only one to think this way.  Entry numero uno in &lt;a href='http://www.joelonsoftware.com'&gt;Joel&lt;/a&gt; Spolsky&amp;#8217;s &lt;a href='http://www.amazon.com/gp/product/1590595009?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=1590595009'&gt;The Best Software Writing I&lt;/a&gt; is on this very subject, written by &lt;a href='http://www.artima.com/weblogs/index.jsp?blogger=arnold'&gt;Ken Arnold&lt;/a&gt;.  He states:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For almost any mature language (C, Java, C++, Python, Lisp, Ada, FORTRAN, Smalltalk, sh, Javascript, ect.) coding style is an essentially solved problem, and we ought to stop worrying about it.  And to stop worrying about it will require worrying about it a lot at first, because the only way to get from where we are to a place where we stop worrying about style is to enforce it as part of the language.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is absolutely the way to go.  Get all of us some nice code styling uniforms and make this a non-issue once and for all.  I intend to devote a lot of time in this blog talking about small steps to being more productive.  However, this would be a huge one for everybody.  The fact that I can feel myself absorbing an entire block of code instantly when it is formatted in a way that is familiar to me, is huge.  When it is an unfamiliar formatting, I end up having to read the code one line at a time, and that is just to get an idea of whether it&amp;#8217;s the block of code that I need to be looking at in the first place.  I believe it&amp;#8217;s like any physical activity.  Over time your body builds muscle memory for familiar tasks so that your brain doesn&amp;#8217;t constantly need to be thinking every time you do it.  Your brain delegates the tasks to the rest of the body.  It&amp;#8217;s the same with coding, and unfamiliar formatting makes it impossible for your brain not to be involved.&lt;/p&gt;

&lt;p&gt;The best solution that I currently have for this is in Eclipse, other IDEs might also have this.  Eclipse has a functionality that you can turn on that will properly format your code when you save or build.  Your company can supply a couple of XML files that define exactly what the code formatting should be, and that&amp;#8217;s it.  Everyone writes code that is formatted exactly the same.  This helps a lot to 1) guarantee people format their code the same way before checking it in to source control and 2) help new hires organically adjust to coding in the new style.  Being a new hire myself, I don&amp;#8217;t write code exactly to the specifications that the company expects.  This functionality helps me to ease into the proper formatting and allows my brain to adjust gradually and without any extra thoughts dedicated to it.  My code styling is evolving to match that of my new gig and my brain is evolving to the patterns it looks for in the code I&amp;#8217;m working with.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t see any reason why a compiler couldn&amp;#8217;t have this functionality built-in.  You try to compile source code that doesn&amp;#8217;t match the required code style for the language, it auto-formats it for you&amp;#8230;no errors at all.  Easy as that.  It&amp;#8217;s something that truly needs to be considered as projects are just becoming too complex, and code style is just one more unneeded complexity.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>5 Random Blurs...</title>
   <link href="http://blurrywords.com/2008/11/23/5-random-blurs.html"/>
   <updated>2008-11-23T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/11/23/5-random-blurs</id>
   <content type="html">&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;  I was out looking for some Christmas gifts on Friday and realized how great a job Sony did in the HD media war.  First, they overpriced their format so much that the general public had to believe that it was far far superior to HD-DVD.  It just had to be.  The overpricing can be seen by the fact that the original players were over a grand while the PS3 came with it standard, at $600.  That&amp;#8217;s the second smart thing they did.  Having it as part of the PS3 gave them an immediate early adopter install base, and a rather large one at that.  Now, with the competition defunct, the players are cheap enough that no one thinking about buying a new movie player would think twice about choosing the Blu-Ray player over a DVD player, especially considering the biggest barrier to buy a Blu-Ray player, backwards compatibility with the DVD format, doesn&amp;#8217;t exist.  Nice work Sony, nice work.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;  The credits at the end of Gears of War 2 are great.  Instead of just having scrolling names, they gave each of the core members a chance to dedicate, quote and thank people.  This is an excellent job of giving the developers the face time and recognition that they deserve.  And, the fact that half of them made reference to a bad ass crunch period, it&amp;#8217;s nice that these guys can say thanks to their families for putting up with the long hours.  Great job with recognizing the people behind the game, Epic.  I hope more studios adopt this.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;  I find it funny how no one is talking about how low gas prices are getting again.  It seems like everyone is afraid of jinxing it.  I&amp;#8217;ve seen sub $2s this week, something I haven&amp;#8217;t seen since leaving NYC 3 years ago.  So, now everyone can blame me when it starts going back up.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;  Netflix on XBox 360. Yes! Yes! Yes!  The new experience is okay (my Mii looks much more like me than my 360 Avatar), but Netflix on the 360 is frigging brilliant.  I just signed up for Netflix a couple of weeks back, and didn&amp;#8217;t consciously realize this was coming this month.  Such a great surprise.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;  Entourage episodes always feel too short.  It&amp;#8217;s the only show that I get this phenomenon with.  Every time it ends I&amp;#8217;m caught off guard by it.  It should definitely be an hour show.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>
 
 <entry>
   <title>Simple Rules...</title>
   <link href="http://blurrywords.com/2008/11/20/simple-rules.html"/>
   <updated>2008-11-20T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/11/20/simple-rules</id>
   <content type="html">&lt;p&gt;There’s only a couple of things that I stick to when it comes to writing code.  I don’t keep a long list of todos as each situation seems to require a different way of doing things.  But, these things are fundamental and easy to keep in the back of your mind as you hack away at an implementation.&lt;/p&gt;

&lt;p&gt;First,&lt;/p&gt;

&lt;h4 id='write_the_least_dangerous_code_possible'&gt;Write the least dangerous code possible.&lt;/h4&gt;

&lt;p&gt;There is always several ways to attack a problem.  Some are sure to be more maintainable, easier to work with down the line.  Dangerous code is the solutions that result in code that can easily cause problems as soon as someone not familiar with the code attempts to edit it, or you attempt to edit it yourself in the not-so-distant future.&lt;/p&gt;

&lt;p&gt;You know some of the code I&amp;#8217;m talking about.  The type of code that as soon as you edit it, something completely unrelated breaks in the system.  This type of code is referred to in the Pragmatic Programmer as being highly coupled.&lt;/p&gt;

&lt;p&gt;Coupling is dangerous and it can be tough to prevent or even realize that you are doing it.  It&amp;#8217;s just something that you should be aware of as you program.  You should be asking yourself how is this going to become entangled in the rest of the app if I do it this way.  How can I do it so it won&amp;#8217;t ( I avoid using the word encapsulate here to avoid making it seem like I&amp;#8217;m talking about object oriented programming as I don&amp;#8217;t believe OOP is the right solution for every problem, even with coupling problems)?&lt;/p&gt;

&lt;p&gt;Beyond a topic as big and complicated as coupling there are other ways of coding dangerously.  For instance, case fall-through.  I&amp;#8217;m not talking about case stacking, which is case fall-through in which no code is in between the falling case statements.  The cases are just stacked on top of each other as they all share the same functionality.  The case fall-through I&amp;#8217;m referring to is when you have one case that does something and then falls into the case below it to do another part of needed functionality.  Now this is dangerous code.  Things can go wrong.  For one, someone might see this and think it is a bug.  Case statements end with breaks, this needs a break, the code is broken that easily.  Another is that someone adding a new case might not see that a case falls into another case and proceed to add a new case in between the two cases (that’s a lot of cases in one sentence).  Another easy break, no pun intended.  The thing about this is that coding this way is easily avoided by breaking common functionality out into functions.  It actually makes the switch statement easier to read, there&amp;#8217;s more benefits by avoiding case fall-through.  Just don’t do it.&lt;/p&gt;

&lt;p&gt;There’s many more dangers, including just difficult approaches where an easier implementation would have sufficed.  Avoid them all if possible, if realized.&lt;/p&gt;

&lt;p&gt;Next,&lt;/p&gt;

&lt;h4 id='write_code_that_is_easy_as_possible_to_debug'&gt;Write code that is easy as possible to debug.&lt;/h4&gt;

&lt;p&gt;Which is easier to debug. This:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    public int getSomething(){
        return (calculateThis(getValueOne(), getValueTwo(),
                calculateSomethingElse()));
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Or, this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    public int getSomething() {
        int value1 = getValueOne();
        int value2 = getValueTwo();
        int value3 = calculateSomethingElse();
        return calculateThis(value1, value2, value3);
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The latter is of course, but why?  Basically I’m talking about debugging with break points.  As you step through your code with a debugger, the first one makes it very very painful.  Say you wanted to step into calculateThis(), in the first example you would first have to step through the other three functions to get to it.  In the second example you could just step over the first three functions and ignore what they do.  It cuts down on the number of key presses needed and the amount of code that needs to be viewed.  It just makes your life a little bit simpler.&lt;/p&gt;

&lt;p&gt;The only thing that trumps both of these things is optimization.  I’ve worked on embedded software for nearly 5 years now and I know you are going to run across instances when writing difficult code can result in big gains on the memory or speed front. Here’s a fun one, not too bad. Instead of:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    int[] _iaX = new int[numRect];
    int[] _iaY = new int[numRect];
    int[] _iaW = new int[numRect];
    int[] _iaH = new int[numRect];
    // ...
    for(int i = 0; i &amp;lt; 10; i++){
        _iaX[i] = 0;
        _iaY[i] = 0;
        _iaW[i] = _screenW;
        _iaH[i] = _screenH;
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can do:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    final static int X_INDEX = 0;
    final static int Y_INDEX = 1;
    final static int W_INDEX = 2;
    final static int H_INDEX = 3;
    
    int[] _iaRect = new int[numRect * 4];
    // ...
    int offset = 0;
    for(int i = 0; i &amp;lt; 10; i++){
        offset = (i * 4);
        _iaRect[ offset + X_INDEX ] = 0;
        _iaRect[ offset + Y_INDEX ] = 0;
        _iaRect[ offset + W_INDEX ] = screenW;
        _iaRect[ offset + H_INDEX ] = screenH;
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Obviously this is not as nice as the former, but it is really good on memory.  Each array has several bytes of overhead when initialized.  So it saves a bunch if you have a shit load of rectangles in your apps.  But, I tried to make the implementation as readable as possible and hid the implementation from others, hoping no one else will have to deal with it, only reap the benefits.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Power Editing...</title>
   <link href="http://blurrywords.com/2008/11/14/power-editing.html"/>
   <updated>2008-11-14T00:00:00-05:00</updated>
   <id>http://blurrywords.com/2008/11/14/power-editing</id>
   <content type="html">&lt;p&gt;One of my favorite  books, the one that really opened my eyes about programming is &lt;a href='http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;amp;amp;tag=blurword-20&amp;amp;amp;linkCode=as2&amp;amp;amp;camp=1789&amp;amp;amp;creative=9325&amp;amp;amp;creativeASIN=020161622X'&gt;The Pragmatic Programmer: From Journeyman to Master&lt;/a&gt;.  I would recommend it to anyone, especially new graduates as it covers so many things that are just not addressed when in school, things that young programmers take for granted.  It&amp;#8217;s a great book and will be at the top of my book list, if I get around to making one.&lt;/p&gt;

&lt;p&gt;Anyways, in the chapter on basic tools, there is a section called &lt;em&gt;Power Editing&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Choose an editor, know it thoroughly, and use it for all editing tasks.  If you use a single editor (or set of keybindings) across all text editing activities, you don&amp;#8217;t have to stop and think to accomplish text manipulation: the necessary keystrokes will be a reflex.  The editor will be an extension of your hand; the keys will sing as they slice their way through text and thought. That&amp;#8217;s our goal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It also mentions in this chapter that, at the time of the writing of the book, which wasn&amp;#8217;t that many years back, a big number of programmers they had met were still using Notepad as there default editor of choice.  I remember this out of many of my peers back in the school years, which was only 5 years ago.  It amazed me then and it still amazes me now.  I found Visual C++ 6 before I understood even the very basics.  I couldn&amp;#8217;t write an email in Notepad, forget coding in it.  This isn&amp;#8217;t to say that a slimmed down editor like Notepad isn&amp;#8217;t part of my everyday life.  Actually, I use Notepad2 a dozen times a day for quick little stinger activities, but not for full blown editing purposes.&lt;/p&gt;

&lt;p&gt;But, I digress.  I actually wanted to talk about Eclipse.  Working on the Blackberry platform, you have two standard choices supported by RIM, the Blackberry JDE and Eclipse with the Blackberry Plug-in .  I&amp;#8217;ve spent my last three years working with Netbeans, &lt;div style='float:right;'&gt;
&lt;p&gt;&lt;img alt='Eclipse Logo' src='/images/posts/eclipse-logo-white-300x174.jpg' /&gt;&lt;/p&gt;
&lt;/div&gt; so I wasn&amp;#8217;t immediately open to either option.  The Blackberry JDE is stable and does what it needs to do well.  However, it isn&amp;#8217;t very robust when it comes to editing, nothing like what I&amp;#8217;ve come to expect from an IDE.  So, I gravitated to Eclipse, and what I&amp;#8217;ve learned is that the differences between Netbeans and Eclipse have narrowed greatly over the past few years.  In my opinion they are both pretty damn good and customizable enough that they could fit any programmer&amp;#8217;s preferences.  However, Eclipse is still a bit of a pain to get setup and configured properly.  It took me a few days, and it was well worth it at the end, but I&amp;#8217;m the only guy in my team not using the JDE.  It&amp;#8217;s enough of a pain to turn off new users, it has quite a barrier of entry that would have made a commercial software fail a long time ago.&lt;/p&gt;

&lt;p&gt;The best thing about switching to Eclipse to me isn&amp;#8217;t any new feature or anything that it does differently than Netbeans.  No, it&amp;#8217;s the fact that I get a fresh start with a brand new editor.  There are two points made in the &lt;em&gt;Power Editing&lt;/em&gt; section that are actually fighting against each other in reality.  First, use one editor.  As the quote above says, know it and know it well.  Second, the editor needs to be configurable, extensible and programmable.  Unfortunately, humans get accustomed to their environment and that&amp;#8217;s that.  Exploration, reconfiguration is no longer needed or even wanted.  Why leave the comfort zone when it&amp;#8217;s working so well?  Actually, that question is probably further than most would even get. I don&amp;#8217;t think it&amp;#8217;s laziness.  I just think it&amp;#8217;s a sense of security, a sense of safety in a super complicated environment/industry.  The only way to break out of it is to change editors, to become uncomfortable and feel the need to explore to regain the previous security.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s where I am now,  Having to change IDEs has forced my hand and I now really want to know Eclipse better than Netbeans.  When I read &lt;em&gt;The Pragmatic Programmer&lt;/em&gt; for the first time I was already completely at home with Netbeans and though I saw the wisdom, nodding my head in approval as I read the chapter, I never really took it to the next step to figure out what more I could do with Netbeans.  But now I&amp;#8217;m not taking my editor for granted.  Eclipse is going to be my one editor, the one that becomes the extension of my hand, and it&amp;#8217;s going to be for quite some time.  However, I have seen the way cracking open a new tool can help open your eyes.  So even though I plan to keep Eclipse as my default, I plan to explore other editors to keep it all fresh, to see what Eclipse is missing, what I might be missing in Eclipse.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve only been working with Eclipse for a month and I&amp;#8217;m still turning over boulders with the new job.  But, I am taking notes and I&amp;#8217;ll have other posts as I go with IDE/Eclipse related productivity gains I&amp;#8217;ve found.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blurry Halloween...</title>
   <link href="http://blurrywords.com/2008/10/31/the-horror-category.html"/>
   <updated>2008-10-31T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2008/10/31/the-horror-category</id>
   <content type="html">&lt;p&gt;Happy Halloween!&lt;/p&gt;
&lt;div style='float:right;'&gt;
&lt;p&gt;&lt;img alt='Halloween Horror Nights 2008' src='/images/posts/hhn_2008.jpg' /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;I love me some horror-fiction. Whether it&amp;#8217;s a good horror movie, a video game like BioShock or the Resident Evil series, or an annual event like Halloween Horror Nights at Universal Studio, which I attend every year (lots of drinks, lots of scarin&amp;#8217;&amp;#8230;enough said), I can&amp;#8217;t get enough horror related shit.&lt;/p&gt;

&lt;p&gt;So, in respect to the holiday, make sure you get your dose of Halloween, maybe Halloween 2, tonight.  Avoid Halloween 3 though as it is an abomination of the Halloween series, the horror genre as a whole for that matter.  It doesn&amp;#8217;t even involve Michael Myers.  Actually, it&amp;#8217;s in an alternate universe in which Halloween is just a movie (you see the original on a couple of different TVs throughout the film).  It&amp;#8217;s terrible.  I don&amp;#8217;t remember when it came out, I was too young, but if anyone ever reads this blog and does remember, do you know if there was any kind of backlash?  They took an established brand, with an established monster, and completely went in the opposite direction with it.  This 180 turn seems like it might have got some fans pissed off, it got me upset when I first saw it.  It still makes me wonder how they ever got the go ahead to make more Halloween movies.  But, maybe my hindsight is the problem here.  Maybe it wasn&amp;#8217;t that well established at number three.  Maybe it was still early enough to mess around with the property.  Either way, it was a mistake.&lt;/p&gt;

&lt;p&gt;Anyways,  since it&amp;#8217;s Halloween, Gamespot posted an article, &lt;a href='http://www.gamespot.com/features/6199869/index.html'&gt;Flavors of Fear&lt;/a&gt;, that takes a look at some of the greatest horror-themed games of all time.  It&amp;#8217;s really good&amp;#8230;enjoy!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Best Use of Wasted Time...</title>
   <link href="http://blurrywords.com/2008/10/29/best-use-of-wasted-time.html"/>
   <updated>2008-10-29T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2008/10/29/best-use-of-wasted-time</id>
   <content type="html">&lt;p&gt;Increasing productivity is a tough task.  I&amp;#8217;m not an expert on the subject, but I do understand that world shattering changes that increase everyone&amp;#8217;s productivity by huge percentages don&amp;#8217;t come along every day.  Most productivity gains are small, incremental steps that happen on a daily basis when smart, hard working people keep their minds open and aware of their environment and how they are manipulating it.  That&amp;#8217;s why I decided to write about it.  It&amp;#8217;s an attempt to keep my mind more aware, more attentive to what I&amp;#8217;m doing, to how I&amp;#8217;m attacking problems, how I&amp;#8217;m using my time, how time is being wasted during my day.  Having a goal to be more productive is not always enough to keep the focus up; maybe having a blog category about it will help.&lt;/p&gt;

&lt;p&gt;One of the things that probably adds up to a couple of hours a week in wasted time for me is waiting for emulators to load.  If you work in the mobile industry you know exactly what I&amp;#8217;m talking about.  Depending on the manufacturer, I usually end up waiting any where between 20 seconds and a minute plus just while an emulator loads.  If you take into account the fact that I probably have to launch the emulator 15-30 times a day, I&amp;#8217;m looking at the possibility of losing up to 10% of a standard 40 hour work week waiting on emulators.&lt;/p&gt;

&lt;p&gt;The gut check response is to find a way around loading the emulator every time.  I asked around to see if there was any way we could leave an emulator running and just reload the application each time.  No dice.  Everyone pretty much had the same response.  They had looked into it themselves and came up with no solution; we are stuck with this wasted time.&lt;/p&gt;

&lt;p&gt;So I was left with the task of figuring out how I could put this time to use.  The conclusion I came to was simple, a head smacker, something I should have thought of years ago, but didn&amp;#8217;t.  I started using this time to cleanup the Javadoc comments in the code.  I&amp;#8217;m a big believer in self documenting code, but usually skimp on keeping the Javadocs up to date, if I write them at all.  If I do finally get around to writing them, it&amp;#8217;s several months down the road and is usually a tedious, day long process, which results in really lame, uninformative documentation.  Not good.  This is a great solution.  There is nothing else you can do in that time, productive or not.  So you sit there and wait.  Basically, I&amp;#8217;m replacing one boring, tedious task – waiting – with another boring, and tedious task – code commenting.  At least the latter is a productive, boring, tedious task.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Damn Stinking Fn...</title>
   <link href="http://blurrywords.com/2008/10/22/damn-stinking-fn.html"/>
   <updated>2008-10-22T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2008/10/22/damn-stinking-fn</id>
   <content type="html">&lt;p&gt;I got a new IBM ThinkPad with the new job.  So far, so good&amp;#8230;it&amp;#8217;s not a bad machine at all.  I really like it, except for one thing.  The frigging Fn key.  For some reason IBM thought that they would shake things up and switch the positions of the Fn and Ctrl keys on the left side of the keyboard.  NOW THAT&amp;#8217;S NOT ANNOYING AT ALL.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s probably been this way forever, maybe it was this way first and the other way is wrong (and in that case, I apologize to IBM and redirect this rant to the others who decided to make this superfluous change), but what&amp;#8217;s the point of not having something like this standardized?  Sometimes things get changed just for the sake of change, and that change is not usually helpful to anyone.  From a business perspective, there is no financial benefit whether it is one way or the other.  It doesn&amp;#8217;t save IBM any money at all.  I would be more in support of removing the Caps Lock key then just changing key positions; at least that saves some key parts while removing a key that is nearly obsolete.&lt;/p&gt;

&lt;p&gt;At the same time, swapping the Fn and Ctrl keys doesn&amp;#8217;t help the computer&amp;#8217;s user be any more efficient; actually it has slightly inconvenienced me over the last couple of days.  Why make pointless changes?  Is it just to be different, unique?  I don&amp;#8217;t get it&amp;#8230;it doesn&amp;#8217;t make any sense.&lt;/p&gt;

&lt;p&gt;Obviously this is a small thing, a tiny aggravation in my life that I will eventually adjust to.  Unfortunately, once I do feel accustomed to the key positioning, I&amp;#8217;ll have to jump over to my Dell laptop to do something.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Getting Started...</title>
   <link href="http://blurrywords.com/2008/10/19/and-so-it-begins.html"/>
   <updated>2008-10-19T00:00:00-04:00</updated>
   <id>http://blurrywords.com/2008/10/19/and-so-it-begins</id>
   <content type="html">&lt;p&gt;Screw it, let&amp;#8217;s get this thing going. Being days away from leaving an industry that I&amp;#8217;ve spent my whole career in has pushed me past whatever barriers were stopping me from writing this first post. I&amp;#8217;m changing industries. It&amp;#8217;s a weird feeling, but it&amp;#8217;s just time to move on, to try something different, something familiar yet outside of the comfort zone. Something I&amp;#8217;ll feel at home with from day one, but at the same time, flooded with change. There&amp;#8217;s a lot changing for me, and I want to write; not just about going forward, but everything I&amp;#8217;ve gone through, accomplished, failed at, learned, going to learn. Maybe my experiences can be helpful, but that&amp;#8217;s not what this is about. It&amp;#8217;s for me to process my work, my life, to better my writing, a trace of what I&amp;#8217;ve done, and will do.&lt;/p&gt;

&lt;p&gt;By the way, welcome to Blurry Words&amp;#8230;another blog, another idiot&amp;#8217;s opinions and experiences, and maybe some random junk here and there.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been developing mobile games for four and a half years. I&amp;#8217;ve run the gauntlet in that time of different working environments. I&amp;#8217;ve been with a big company, possibly the biggest of the big in the mobile games industry. Actually, they probably weren&amp;#8217;t that big at the time, and the office I was at was just a small satellite studio. Next I freelanced for a while, worked with some big publishers and got my assed kicked around a bit. From there I joined a startup – took on the role of tech director – with a goal of developing high quality, innovative games that pushed the mobile boundaries.&lt;/p&gt;

&lt;p&gt;By the way, I&amp;#8217;m a programmer&amp;#8230;&lt;/p&gt;

&lt;p&gt;So, why the change? The best way I can think to describe it is that I was hit with the perfect storm of change conditions. Coming from the west was a flailing industry turning its back on quality and being strangled to death by an unstoppable force. From the north, a big company that I find to be an interesting opportunity opened a brand spanking new office in my area and actually wants me to join them. And finally, coming from every direction, a big stinking financial crap out&amp;#8230;there you go.&lt;/p&gt;

&lt;p&gt;By the way, device fragmentation – the unstoppable force – device fragmentation.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve thought about starting this blog for about eight months, but there was always an excuse in the way; the biggest being crazy work hours and wearing multiple hats, attempting to make a startup succeed. But, no more excuses. It&amp;#8217;s time. I feel like I have something to say, things that need to be said, things that might be helpful, even entertaining. Let&amp;#8217;s see where it goes.&lt;/p&gt;

&lt;p&gt;Again, welcome to Blurry Words.&lt;/p&gt;</content>
 </entry>
 
 
</feed>

