<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A Game Developer&#039;s Saga</title>
	<atom:link href="http://bantamcity.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://bantamcity.com/blog</link>
	<description>An uphill journey of a struggling game developer</description>
	<lastBuildDate>Thu, 05 Jun 2014 19:06:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How I got rid of cable TV</title>
		<link>http://bantamcity.com/blog/general/how-i-got-rid-of-cable-tv/</link>
		<comments>http://bantamcity.com/blog/general/how-i-got-rid-of-cable-tv/#comments</comments>
		<pubDate>Sun, 10 Mar 2013 18:39:30 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Cord Cutter]]></category>
		<category><![CDATA[Cord Cutters]]></category>
		<category><![CDATA[Getting rid of cable TV]]></category>
		<category><![CDATA[How I got rid of cable]]></category>
		<category><![CDATA[How I got rid of cable TV]]></category>
		<category><![CDATA[How to cut your cable bill in half]]></category>
		<category><![CDATA[How to get rid of cable TV]]></category>
		<category><![CDATA[Hulu Plus]]></category>
		<category><![CDATA[Magic Jack Plus]]></category>
		<category><![CDATA[Mohu Leaf]]></category>
		<category><![CDATA[Netflix]]></category>
		<category><![CDATA[Plex]]></category>
		<category><![CDATA[Replacing cable TV]]></category>
		<category><![CDATA[Saving money on cable TV]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=296</guid>
		<description><![CDATA[First a little background: My wife and I were paying $180 per month to the cable company, which included phone, internet and a basic television package&#8230; yes, one of the infamous &#8216;bundles&#8217;!  It all started by signing up for one of the alluring &#8216;everything for $99&#8242; deals&#8230; fast forward a year (when the introductory rate [...]]]></description>
			<content:encoded><![CDATA[<p>First a little background: My wife and I were paying $180 per month to the cable company, which included phone, internet and a basic television package&#8230; yes, one of the infamous &#8216;bundles&#8217;!  It all started by signing up for one of the alluring &#8216;everything for $99&#8242; deals&#8230; fast forward a year (when the introductory rate had expired) and bill started slowly creeping up each month, strange fees started appearing and after years of calling them to negotiate better rates, I just couldn&#8217;t take it anymore!</p>
<p>I kept reading more and more about so called &#8216;cord cutters&#8217; so a few months ago I decided to take the plunge.  With my new setup (which I&#8217;ll outline below),  I can watch almost all of the shows I used to watch with cable television and tons of content I never had access to before, at a fraction of the cost.</p>
<p><span style="text-decoration: underline;"><strong>Prerequisites:</strong></span></p>
<ol>
<li>For the setup I&#8217;m going to describe, you&#8217;ll still need high-speed internet and for me the best option was my cable company (one way or another they find a way to take your money).  Other options include fiber providers like AT&amp;T Uverse or Verizon Fios, but no matter which one you go, this will run you about $45-65 per month (mine was about $60).  If this is already over your monthly budget, see my Cheapo Alternative at the bottom.</li>
<li>If your high speed internet modem doesn&#8217;t include a wi-fi router you&#8217;ll need one of those too.  Fortunately mine did, but if not you can find these pretty cheap at Best Buy or similar stores.</li>
</ol>
<p><span style="text-decoration: underline;"><strong>Replacing Cable TV:</strong></span></p>
<ol>
<li>The most important purchase you&#8217;ll make for this setup, the <a href="http://gan.doubleclick.net/gan_click?lid=41000613802463429&amp;pubid=21000000000626553" target="_blank">Roku</a> box.  I decided to go with the Roku 2 XD model because of its wi-fi support, but it looks like they&#8217;ve recently released the Roku 3.  Without making any more purchases this will give you a ton of free content in the form of hundreds of &#8216;Roku Channels&#8217; including popular services like Pandora and Crackle.  This is a one time cost of about $70, and zero monthly fees.</li>
<li>OK, so now you have a bunch of free music/shows/movies but probably not exactly what you had in mind.  So the next step for me was to sign up for both <a href="http://gan.doubleclick.net/gan_click?lid=41000613802463370&amp;pubid=21000000000626553&amp;lsrc=17&quot;" target="_blank">Netflix</a> and <a href="http://www.hulu.com/plus" target="_blank">Hulu Plus</a>.  Roku has channels for both.  Netflix is amazing for everything that&#8217;s more than a season or two old.  This is what you&#8217;ll use to catch up on shows/seasons you&#8217;ve missed (e.g. they have the first two seasons of The Walking Dead, but not the latest).  As another example, I&#8217;m a big sci-fi fan and Netflix has every episode of every Star-Trek series&#8230; I know&#8230; awesome.  You can also use their mobile app to stream content when you&#8217;re out of the house.  So Netflix doesn&#8217;t have the latest shows/seasons, does this mean you have to wait a year to see the next season of your favorite shows?  No, this is where Hulu Plus comes in.  Hulu is pretty much the only place to find current shows/seasons that will stream to Roku or other set top boxes.  Monthly cost, $16 ($8 each for Netflix/Hulu).</li>
<li>You&#8217;re in pretty good shape now&#8230; you&#8217;ve got current shows, can catch up on older seasons/shows and have a bunch of other content, but what about live news, weather and sports?  Roku has some channels for all of these but the content is either out of date and/or costs additional money.  Enter the <a href="https://store.gomohu.com/the-leaf-indoor-hdtv-antenna.html" target="_blank">Mohu Leaf</a>!  This indoor antenna is about the size of a piece of paper and almost as thin.   The number/quality of channels you get will depend on how close you live to the television stations.  I live about 30 miles away from most of them and I was able to pull in 14 channels including most of the major network channels (CBS, NBC, ABC, FOX, etc), plus local news and weather, most of which are in 1080p HD!  The best part is the one time purchase of about $40 and no monthly cost.</li>
<li>At this point you&#8217;ve got pretty much everything you&#8217;ll need, but if you still don&#8217;t have everything, read on.  DISCLAIMER: I don&#8217;t condone <a href="http://en.wikipedia.org/wiki/Torrenting" target="_blank">torrenting</a> and the following information can be used to stream any media, not just illegally downloaded material.  Roku has a channel for <a href="http://www.plexapp.com/" target="_blank">Plex</a> media server which allows you to stream any video/audio content from your PC or home media server to your TV.  This is a great feature to have if you have a bunch of content sitting on your PC that you&#8217;d like to watch without sitting hunched over your computer.  Cost $0.</li>
<li>So now you&#8217;ve got everything TV-related covered, but what about phone service?  Most people will decide to just use their cell phones, but my wife likes the idea of having a home phone so I signed up for <a href="http://www.magicjack.com" target="_blank">Magic Jack Plus</a>.  The &#8216;plus&#8217; version doesn&#8217;t require a computer and you just plug one end into your router and one end into your portable phone and you are good to go, not to mention the call quality is pretty good.  The device has a one time cost of about $70 with the first year of service included and every year after running about $30 which comes to less than $3 per month (about $20 less than most VOIP services).</li>
</ol>
<p><strong><span style="text-decoration: underline;">The Cheapo Alternative:</span></strong></p>
<p>If the setup above sounds too expensive and/or complicated and all you need is basic television (CBS, NBC, ABC, FOX, etc) and you live less than 50 miles from these major television stations, see #5 above.  You can watch the news, weather, sports and quite a few popular network shows and save a bundle on your monthly costs.</p>
<p><span style="text-decoration: underline;"><strong>Summary:<br />
</strong></span></p>
<p>If you take the time to add up everything above, you&#8217;ll see that I&#8217;m saving almost $100 a month and I&#8217;ve recouped all of my initial costs in only a month or two.  If you don&#8217;t need everything I mentioned above you may be able to save even more money.  I hope this post helps you decide to take the plunge like I did.  When you see the extra <a href="http://www.urbandictionary.com/define.php?term=hundo" target="_blank">hundo</a> in your pocket each month, you wont regret it.</p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/general/how-i-got-rid-of-cable-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is it possible to make an MMO in Torque Game Builder (TGB)? &#8211; Part 2</title>
		<link>http://bantamcity.com/blog/game_development/is-it-possible-to-make-an-mmo-in-torque-game-builder-2/</link>
		<comments>http://bantamcity.com/blog/game_development/is-it-possible-to-make-an-mmo-in-torque-game-builder-2/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 15:07:37 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[java mmo server]]></category>
		<category><![CDATA[t2d]]></category>
		<category><![CDATA[tgb]]></category>
		<category><![CDATA[tgb mmo]]></category>
		<category><![CDATA[tgb mmorpg]]></category>
		<category><![CDATA[tgb performance]]></category>
		<category><![CDATA[torque 2d]]></category>
		<category><![CDATA[torque game builder]]></category>
		<category><![CDATA[torque game builder mmo]]></category>
		<category><![CDATA[torque game builder mmorpg]]></category>
		<category><![CDATA[torque game builder performance]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=288</guid>
		<description><![CDATA[You might remember my more optimistic part 1 post.
Well, I&#8217;m about 300ish hours into my MMO development (part time over the past year or so) and the other day I decided to finally do some performance testing&#8230; way too late to be doing this sort of thing btw.  I didn&#8217;t think too much of it [...]]]></description>
			<content:encoded><![CDATA[<p>You might remember my <a href="http://bantamcity.com/blog/game_development/is-it-possible-to-make-an-mmo-in-torque-game-builder/" target="_blank">more optimistic part 1 post</a>.</p>
<p>Well, I&#8217;m about 300ish hours into my MMO development (part time over the past year or so) and the other day I decided to finally do some performance testing&#8230; way too late to be doing this sort of thing btw.  I didn&#8217;t think too much of it before because the GG engines are touted for their networking layer, so I figured it should be able to handle the tiny packets that I was sending back and forth with no problem.</p>
<p>I started my testing with what I thought was a modest number of players for an MMO&#8230; 1000.  Not too high, not too low.  The server grinded to a halt! and suddenly I got that &#8216;Oh shit! What have I done?!&#8217; feeling.  So just to get a better measurement, I dropped it to 500, then 100 and finally to 50 before things started to perform normally.  Ouch!  Now, I&#8217;m not trying to get <a href="http://www.gamasutra.com/php-bin/news_index.php?story=21738" target="_blank">EVE Online numbers</a>, but 50?!?!  My stomach sank a little as I thought about all of the wasted work and all of the work I would have to do to rewrite the server.</p>
<p>How could something awarded for its networking ability come up so short?  Well, it wasn&#8217;t the networking causing the bottleneck at all.  What I failed to consider was not networking, but the processing cycles needed.  Apparently, TGB doesn&#8217;t make the greatest server for a synchronous MMO.  The inherently single-threaded processing and the speed of torque-script were drastically overestimated on my part.</p>
<p>I can probably performance tune the TGB server more and move some things into native C++, but in the end I decided it would be easier to rewrite the whole server in Java which is my native language <img src='http://bantamcity.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />    While most people still have a negative impression of Java performance-wise, 1.6 is quite fast and it can usually be further <a href="http://www.amazon.com/gp/product/0596003773?ie=UTF8&amp;tag=bancitgam-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596003773" target="_blank">performance tuned</a>.</p>
<p>Moral of the story: performance test early so that you can change technologies if necessary and not have to rewrite a ton of code.</p>
<p>I haven&#8217;t finished writing the server yet, but I will post an update once I do some early performance testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/game_development/is-it-possible-to-make-an-mmo-in-torque-game-builder-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Saturn Doesn&#8217;t Start When Its Cold (or Hot)</title>
		<link>http://bantamcity.com/blog/general/my-saturn-doesnt-start-when-its-cold-or-hot/</link>
		<comments>http://bantamcity.com/blog/general/my-saturn-doesnt-start-when-its-cold-or-hot/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 14:22:03 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[car problems]]></category>
		<category><![CDATA[ion doesn't start]]></category>
		<category><![CDATA[saturn doesn't start]]></category>
		<category><![CDATA[saturn issues]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=282</guid>
		<description><![CDATA[About a year ago (right after the warranty ran out on my Saturn) I went out to my car&#8230; put the key in&#8230; turned it&#8230; nothing.  I&#8217;m a fairly mechanical guy and it was a cold day so my gut told me that it was the battery (or so I thought at the time).  I [...]]]></description>
			<content:encoded><![CDATA[<p>About a year ago (right after the warranty ran out on my Saturn) I went out to my car&#8230; put the key in&#8230; turned it&#8230; nothing.  I&#8217;m a fairly mechanical guy and it was a cold day so my gut told me that it was the battery (or so I thought at the time).  I got out the charger, hooked it up and waited.  After about 10 minutes, I turned the key again and voila!  The car started.</p>
<p>After this happened a few times I replaced the battery.  To my surprise, the problem persisted, and not only that, but I started realizing that it only happens when its cold!  I checked over all of the power connections and everything looked good, so I turned to the All Knowing&#8230; Google!</p>
<p>I searched a bit and found out the real problem.  Apparently there is what I consider a design flaw in the anti-theft system.  The ignition measures the resistance of the key and if it doesn&#8217;t match the resistance that it was calibrated to then it triggers the anti-theft system and you can&#8217;t even <em>attempt</em> to start the car for another 10 minutes&#8230; yikes!  In extreme cold (or heat), the resistance of the key/ignition changes and the security system thinks that you are a thief!  I took the car to Saturn and they told me that it would cost some hundreds of dollars and I refused!  This isn&#8217;t just any abnormal malfunction!  From reading the amount of people that has this problem on the internet this is a problem that GM should have fixed years and years ago&#8230; I guess that&#8217;s why GM is in trouble and Saturn has gone out of business.</p>
<p>The Solution?  For older models, I remember reading that there was a work-around that includes starting the car and modifying some wiring, but for a newer model like mine (2006 Ion), I was out of luck.</p>
<p>I tried various things until I found one that worked:  I started bringing a lighter in the car with me and warming up the key and ignition before I tried starting it the first time (see disclaimer below).  The other important part is to turn the key very slowly (such that there is an even amount of tension on it) until the car starts.</p>
<p>I&#8217;ve even gotten to the point of breathing heavily on the key (the same way you do when you warm your hands up on a cold winter day) and then turn the key very slowly (such that there is an even amount of tension on it) until the car starts&#8230;. this seems to do the trick.</p>
<p>Not the most elegant solution, but it will save you some money.</p>
<p><strong>DISCLAIMER: I take no responsibility for you starting yourself, your car, or any of your stuff on fire!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/general/my-saturn-doesnt-start-when-its-cold-or-hot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Write Maintenance-Free Software</title>
		<link>http://bantamcity.com/blog/game_development/how-to-write-maintenance-free-software/</link>
		<comments>http://bantamcity.com/blog/game_development/how-to-write-maintenance-free-software/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 22:06:53 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[good coding processes]]></category>
		<category><![CDATA[good development processes]]></category>
		<category><![CDATA[good programming practices]]></category>
		<category><![CDATA[low maintenance code]]></category>
		<category><![CDATA[low maintenance software]]></category>
		<category><![CDATA[maintenance free code]]></category>
		<category><![CDATA[maintenance free software]]></category>
		<category><![CDATA[work flow tips]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=268</guid>
		<description><![CDATA[In my full-time job as a software developer I encounter a ton of code that is not only hard to read/understand, but is very high maintenance as well.  It doesn&#8217;t matter how quickly you can write code if it&#8217;s bad code, because over the lifespan of the software you are probably going to spend way [...]]]></description>
			<content:encoded><![CDATA[<p>In my full-time job as a software developer I encounter a ton of code that is not only hard to read/understand, but is very high maintenance as well.  It doesn&#8217;t matter how quickly you can write code if it&#8217;s bad code, because over the lifespan of the software you are probably going to spend way more time debugging/fixing code than you spent writing it in the first place.  In this post I hope to give you a few tips that could drastically increase the readability of your code and decrease your project&#8217;s short/long term maintenance.</p>
<p><strong>Standard Techniques:</strong></p>
<ul>
<li><a href="http://www.amazon.com/gp/product/0672330164?ie=UTF8&amp;tag=bancitgam-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0672330164" target="_blank">Object Oriented Programming</a> (OOP) &#8211; concepts such as encapsulation, cohesion, and coupling are key concepts to understand.  Modeling data structures after real world objects has been around since the 60s, and widely used since the 90s but you still find people that refuse to do it.
<ul>
<li><span style="color: #3366ff;">Tight Encapsulation</span> &#8211; this is a way to separate the public, potentially user-facing interface from the internal implementation of an object.  This is achieved by using different access modifiers such as public, private, etc.  It is very common to find public variables in an object that get accessed by other objects&#8230; this is bad.  If you then need to add new variables or change the way an object works internally (and you will), it creates a ripple effect and you now need to update all of the code for each of the objects that access the changed object.  The objective with encapsulation is to develop a stable public API for a particular class such that you can change the internal workings of that class (private methods and variables) without having to update the public interface.  What this accomplishes is that now you don&#8217;t have to update any of the other objects that are calling into the changed object&#8230; this equates to lower maintenance.</li>
<li><span style="color: #3366ff;">High Cohesion</span> &#8211; this basically means that all of the responsibilities (methods) of a particular class are very closely related to each other.  The more focused a class&#8217;s purpose is, the less it will need to be maintained and the more reusable it will be.  For instance, if you had a Computer class, it could have a turnOn method and a compute method, but it shouldn&#8217;t have a print method.  Instead you would have a Printer class that has a print method that the Computer object may call.</li>
<li><span style="color: #3366ff;">Loose Coupling</span> &#8211; this means that one class should not know too much about another class, more specifically, class A should not know anything about the implementation of class B.  This is achieved through tight encapsulation and good API design.  Class A should only know what class B wants the public to know about it.  Think of each class as strangers to each other class&#8230; you only give access to things (public methods) that you want the stranger to have access to and you never show the stranger your privates <img src='http://bantamcity.com/blog/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' />   When classes are too &#8216;friendly&#8217; with each other (exposing things that should be private) it causes the same kind of ripple effect mentioned above.</li>
</ul>
</li>
<li><span style="color: #3366ff;">Class/Variable/Method Naming</span> &#8211; names that you use in your software should clearly reflect their purpose and for the love of god, please don&#8217;t abbreviate unless its a well known acronym.  ssPos could be anything from space ship position to seriously stupid piece of shit&#8230; ok, its probably not that, but you get the point. spaceShipPosition would be a more appropriate name.  You would know exactly what it was when you look at it a month/year from now.  Some argue that the long length of these variable names will slow down your coding process&#8230; it wont&#8230; especially with most IDEs having some form of code completion these days.  Class names starting with an uppercase letter and variables/methods starting with a lower case letter and both continuing with camelCase is quickly becoming the widely accepted standard (IMO), but even if you don&#8217;t follow this at least be consistent.  Don&#8217;t use ufoCount in one place and alien_count or BulletCount in another.</li>
<li><span style="color: #3366ff;">Don&#8217;t Hard-Code</span> &#8211; its very easy while programming to start &#8216;hard-coding&#8217; values directly into your code.  For instance, you have an condition that looks like &#8216;if(userCount &gt; 100)&#8217; in 3 or 4 places.  When in reality it should be &#8216;if(userCount &gt; MAX_USER_THRESHOLD)&#8217; and setting a constant called MAX_USER_THRESHOLD = 100.  Now if you want to allow more users, you simply update the constant value (or even better, put this in a config file as mentioned below) instead of updating it everywhere and potentially missing one.  Your code shouldn&#8217;t contain any hard-coded values unless they are what I call &#8216;universal truths&#8217;.  For instance, &#8216;if(userCount &gt; 0)&#8217;, there&#8217;s no need to replace the number 0 with a constant called ZERO_USERS. 0 is 0&#8230; its never going to change.  This includes array sizes too.  You should try not to  make your arrays a constant size unless the size is dynamically created.  Instead you should try to use objects that can expand as entries are added (in Java &#8211; ArrayList, etc).  If for some reason you need to use a fixed size array you can then create one by using the size of the list (in Java &#8211; &#8216;new String[arrayList.size()];&#8217;)</li>
<li><span style="color: #3366ff;">Commenting</span> &#8211; we all hate to do it, but you would be surprised at how foreign your code looks a year from now (even less time if you don&#8217;t follow some of the stuff mentioned above).  I&#8217;m guilty of leaving my code comment-free from time to time, but I try to comment anything thats not immediately obvious to me.  Also, make sure your comments clearly describe what is happening, not just &#8216;//do stuff&#8217;.</li>
<li><span style="color: #3366ff;">Refactoring</span> &#8211; we all have deadlines and time crunches to worry about so there are going to be times when you need to write a quick and dirty piece of code&#8230; it works, but it irks you to your core (the good programmers out there know what I&#8217;m talking about).  When you write code like this, mark it somehow (for instance, Eclipse/Java uses FIXME comments) and this will be an indicator that you need to come back to it when you have more time.  When you do come back to it, write it in a nice low maintenance way and test it to make sure it does the same thing that the old code did.  The more of these little bits of ugly code you leave in, the harder to maintain the software becomes!</li>
</ul>
<p><strong>Advanced Techniques:</strong></p>
<ul>
<li><span style="color: #3366ff;">Configuration Files</span> &#8211; there are times when you have a ton of small little pieces of code that do pretty much the same thing except for small differences here and there.  Extract out the commonalities and write one piece of code that does the common parts for everything, then extract out the differences and put them in some form of configuration file (I prefer XML).  Now when the piece of code that is common runs, it can read from the configuration file to act on any differences.  An easy example is if you often have to change a hard-coded start/end date in your code in 4 different places, put the start/end dates in a config file and add code in those four places to read from the config file (which can be cached for speed).  This cuts down the number of places from 4 to 1 and removes the need to recompile.  The down side to using config files is that most of the bugs you find will end up being typos in the config file.  Also, don&#8217;t go crazy and extract <em>everything</em> otherwise you will end up writing your own scripting language.</li>
<li><span style="color: #3366ff;">Reflection</span> &#8211; this is a fairly new concept to most programmers, but this allows objects/variables/methods to be used/called just by knowing the name/signature of it at run-time (as opposed to design-time when you would normally do this).  This combined with the Configuration Files section above could cut down on code drastically and virtually eliminate needing to update/compile your code.  For instance, you write a game that has user definable player characters (different look, different actions, etc).  Using the above mentioned techniques you could let the user create a config file that describes the player.  This config file could have one entry for a jpeg file for the character&#8217;s look and another entry that has a class/method name for the character&#8217;s action.  Now using reflection you could actually create the class that the user wrote and call their method&#8230; Nice!  Most newer languages support reflection and even a lot of scripting languages used in game engines support it (but probably don&#8217;t call it reflection).  Its a powerful thing to have in your mental toolbox.</li>
<li><span style="color: #3366ff;">Inversion of Control (IoC)</span> &#8211; this concept basically entails the reusable parts of your code calling your customized code instead of what is traditionally the other way around.  I can&#8217;t really do the subject justice, so you can read more about it here: <a href="http://en.wikipedia.org/wiki/Inversion_of_control" target="_blank">http://en.wikipedia.org/wiki/Inversion_of_control</a>.  What I can say is that it will increase the reusability and extensibility of your code quite a bit.  The most common forms of this are Factory Patterns and Dependency Injection.  This paradigm will make your software easier to unit test and easier to replace modules.  This should replace the need for static classes and singletons (for the most part).</li>
</ul>
<p><strong>Mindset Shift:</strong></p>
<ul>
<li> <span style="color: #3366ff;">Maintenance on the Brain</span> &#8211; writing low-maintenance software requires a mindset shift.  Every time you design a piece of software or write a line of code, you need to be thinking, &#8220;Have I designed/written this in a way that will require future changes?&#8221;.  If you&#8217;re answer is something like, &#8220;Yeah, I&#8217;ll need to change this whenever the PayPal API changes or whenever the total user count exceeds 1000 or whenever I write a new mission, etc&#8221;, then take a step back and figure out how to accomplish the same functionality in a way that doesn&#8217;t need to be changed in the same scenario.  Rinse and repeat until you&#8217;ve removed all of your maintenance problem areas.  You may not be able to get rid of all maintenance areas, but using this process you should be able to minimize future maintenance.</li>
<li><span style="color: #3366ff;">Make the Time</span> &#8211; It&#8217;s hard to get into this mindset because initially you&#8217;ll be thinking, &#8220;I&#8217;m already behind schedule, I don&#8217;t have time to rewrite that code.&#8221;  See the refactoring section above.  You need to get past this short-sighted attitude and make the time.  In the long run you will reap the benefit of this extra effort many times over.</li>
<li><span style="color: #3366ff;">Be a Rockstar </span>- This mindset is something that separates the superstar developers from the button-mashing, copy-and-paste coders.  Adopt this mindset as a way of life and be proud of your maintenance-free code!</li>
</ul>
<p>Hopefully the above tips have shifted your thought process in the right direction and I won&#8217;t have to look at code like this from you:</p>
<pre>// time it
if(nElpsdTm &gt; 16400) {    &lt;--- really hate the brackets here btw <img src='http://bantamcity.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
      Tmp = nElpsdTm;
      nElpsdTm = 500;
      sndMsgWTm(nElpsdTm);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/game_development/how-to-write-maintenance-free-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is it possible to make an MMO in Torque Game Builder (TGB)?</title>
		<link>http://bantamcity.com/blog/game_development/is-it-possible-to-make-an-mmo-in-torque-game-builder/</link>
		<comments>http://bantamcity.com/blog/game_development/is-it-possible-to-make-an-mmo-in-torque-game-builder/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 17:29:13 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[tgb]]></category>
		<category><![CDATA[tgb mmo]]></category>
		<category><![CDATA[tgb mmorpg]]></category>
		<category><![CDATA[torque game builder]]></category>
		<category><![CDATA[torque game builder mmo]]></category>
		<category><![CDATA[torque game builder mmorpg]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=254</guid>
		<description><![CDATA[I hear this asked here and there throughout the Garage Games forums and once in a while in various other game development forums. So what&#8217;s the answer?
Honestly I can&#8217;t say for sure, but my current project is an MMO(RPG) and I&#8217;m using TGB to develop it.  Anyone who has used TGB might be thinking, &#8220;That&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I hear this asked here and there throughout the Garage Games forums and once in a while in various other game development forums. So what&#8217;s the answer?</p>
<p>Honestly I can&#8217;t say for sure, but my current project is an MMO(RPG) and I&#8217;m using TGB to develop it.  Anyone who has used TGB might be thinking, &#8220;That&#8217;s suicide!&#8221;, but I think its possible and sooner or later (at the rate I develop games, definitely later) I&#8217;ll find out for sure!</p>
<p>I know TGB can be used to make quality games, so what more is there to consider in making an MMO?  Besides the sheer size of the project, the biggest thing that comes to mind is networking/data architecture to support thousands and thousands of players.</p>
<p>With that, here are some of the things I&#8217;ve already considered:</p>
<ul>
<li><strong>Will TGB&#8217;s &#8220;turn-based networking&#8221; be an obstacle?</strong> The networking that comes with TGB was initially referred to as turn-based networking which to me implies that it is kind of slow/laggy, but in reality its more of an RPC-based networking so as long as you don&#8217;t need real-time ghosting for something like a twitch-based game, I think TGB may be able to hold its own.</li>
<li><strong>Can TGB handle that many concurrent connections?</strong> I asked this question a few different ways on the GG forums and the big shots tell me that the only realistic limit is the bandwidth and server hardware.  I guess if they are wrong then by the time I find out for myself it would be way too late to change to a different engine and you&#8217;ll surely find me hacking away at TGB source code to try and make it work.</li>
<li><strong>Does TGB have DB support?</strong> No, but there are some community source code mods that make it pretty painless to add SQLite support and it took me all of a couple hours to get this working. I hate making source code mods to TGB, but this one was definitely worth it&#8230; you simply can&#8217;t make an MMO without DB support.</li>
<li><strong>How much bandwidth will the server need?</strong> This is one thing that worries me because its not something that I can easily test.  As far as bandwidth goes, EQLive published EverQuest&#8217;s usage years ago as being about 1 KB/s per user download and .25 KB/s upload.  While I&#8217;m sure today&#8217;s MMOs (WoW, etc) use way more than that, I&#8217;m also estimating that my MMO will use quite a bit less than that as it doesn&#8217;t require as much information to be sent as often (in theory).  TGB also has a way to &#8216;tag&#8217; strings between the server and each client such that subsequent sending of the same string gets sent as a tag ID rather than continuing to resend the same string over and over again.  This should cut down on the bandwidth usage.</li>
<li><strong>How will I scale up the server as more players join?</strong> Most likely I will host the TGB server myself until the beta is underway and then scale up to a VPS or Dedicated server as needed.  The server will need to be Windows based (mostly because that is my development platform).  I also need to be able to scale up quickly in case I get an honorable mention on one of the big gaming news sites, but I also don&#8217;t want to break the bank while I&#8217;m anxiously waiting for that to happen.</li>
</ul>
<p>All-in-all I think I&#8217;m going to have my hands full for a long time, but I wouldn&#8217;t even try this if I didn&#8217;t think it was possible.</p>
<p>If you&#8217;re considering using TGB or another GG engine to make an MMO, check out this awesome list of discussions on the subject:<br />
<a href="http://www.garagegames.com/community/forums/viewthread/84535" target="_blank">http://www.garagegames.com/community/forums/viewthread/84535</a></p>
<p>Even if you&#8217;re not going with TGB, here is a huge list of things to consider when making an MMO:<br />
<a href="http://www.devmaster.net/forums/showthread.php?t=11656" target="_blank">http://www.devmaster.net/forums/showthread.php?t=11656</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/game_development/is-it-possible-to-make-an-mmo-in-torque-game-builder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Look and Feel for Bantam City Games</title>
		<link>http://bantamcity.com/blog/game_development/bantam-city-games-look-and-feel/</link>
		<comments>http://bantamcity.com/blog/game_development/bantam-city-games-look-and-feel/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 14:18:14 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=221</guid>
		<description><![CDATA[Sorry for the lack of posts in the last couple weeks&#8230; The 24 Hour Game Experiment got me thinking about what it would be like to be a full-time game developer.  What would I do first?  What&#8217;s most important?  When I thought about it, the first thing I would do is redesign the main website [...]]]></description>
			<content:encoded><![CDATA[<p>Sorry for the lack of posts in the last couple weeks&#8230; <a href="http://bantamcity.com/blog/game_development/the-24-hour-game-experiment/" target="_blank">The 24 Hour Game Experiment</a> got me thinking about what it would be like to be a full-time game developer.  What would I do first?  What&#8217;s most important?  When I thought about it, the first thing I would do is redesign the main website to be more customer friendly and less &#8216;corporate&#8217; looking.  I also wanted to get a better way to gather newsletter customers.  Lastly, I wanted to get some kind of up-sell system going.  After realizing that these are the first things I would do, I stepped back and said, &#8220;Well, why don&#8217;t I just do these things now!&#8221;  It&#8217;s not like they are huge time-consuming tasks like creating an MMO <img src='http://bantamcity.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So, I haven&#8217;t done the newsletter part or the up-sell part yet, but I&#8217;m just about done giving the site a face lift (some of the ToW pages still need to be revamped).  So take a look around the <a href="http://www.bantamcity.com" target="_blank">Bantam City Games</a> site and let me know what you think.  For those of you too lazy to click the link and browse around, here&#8217;s a screen shot of the main page.</p>
<p><a href="http://www.bantamcity.com" target="_blank"><img class="alignnone size-full wp-image-223" title="bantamcity" src="http://bantamcity.com/blog/wp-content/uploads/2009/11/bantamcity.png" alt="bantamcity" width="451" height="447" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/game_development/bantam-city-games-look-and-feel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 24 Hour Game Experiment &#8211; Conclusion</title>
		<link>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-conclusion/</link>
		<comments>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-conclusion/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 22:08:53 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=206</guid>
		<description><![CDATA[Well&#8230; the experiment is over.  I&#8217;m sure it comes to no surprise to most of you, that I did not finish the game in time.  I think realistically I would need another 72 man hours to make this game sell-able.  The problem is that it took me about 2 weeks to get in just 24 [...]]]></description>
			<content:encoded><![CDATA[<p>Well&#8230; the experiment is over.  I&#8217;m sure it comes to no surprise to most of you, that I did not finish the game in time.  I think realistically I would need another 72 man hours to make this game sell-able.  The problem is that it took me about 2 weeks to get in just 24 man hours and by the time I put in another 72 it would be way too late to get the game out for the holiday rush.  Not to mention some of the publishers I&#8217;ve contacted say that their queues are already jam-packed for the rest of the year.</p>
<p>With that being said, the project wasn&#8217;t a total waste.  Here are my observations:</p>
<p><strong>The Good:</strong></p>
<ul>
<li>I was able to include mouse-controlled game play, splash screens, menu, credits (all with screen transitions and some with final artwork), in 24 man hours.  That&#8217;s a huge accomplishment and quite frankly a credit to <a href="http://bantamcity.com/blog/game_development/torque-game-builder-review/" target="_blank">Torque Game Builder</a>.</li>
<li>I think a Christmas-themed game was a good choice from a sell-ability standpoint.  My thought here was that it should be easier sell a &#8216;less complex&#8217; game when it is properly themed.  I don&#8217;t think anyone buys a Christmas game expecting to play it for months and months.</li>
<li>I found a really cool site for generic vector graphics that can be reused in games (I found out that not all royalty-free sites have this type of licensing option).  <a href="http://www.vectorstock.com" target="_blank">www.VectorStock.com</a></li>
</ul>
<p><strong>The Bad:</strong></p>
<ul>
<li>24 hours is obviously too short a time to finish a game.  I half knew this going in, but &#8216;The 96 Hour Game Experiment&#8217; just doesn&#8217;t have the same ring to it <img src='http://bantamcity.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':grin:' class='wp-smiley' /> </li>
<li>I started the experiment way too late in the year to get a Christmas-themed game to market (especially with me being <em>extremely</em> part time).</li>
<li>I underestimated the amount of time it takes to test the game&#8217;s fun factor and throw away parts that aren&#8217;t fun and come up with/test new ideas.  This is where I spent the final hours.</li>
</ul>
<p><strong>The Ugly:</strong></p>
<ul>
<li>Another unfinished project gets put on the shelf <img src='http://bantamcity.com/blog/wp-includes/images/smilies/icon_mad.gif' alt=':mad:' class='wp-smiley' />  (at least until next year)</li>
</ul>
<p>Overall, I&#8217;m glad I did the experiment and I hope to do another one at some point next year (with more realistic expectations).  This project made me realize how much I really can get done in such a short amount of time and that maybe being a part-timer isn&#8217;t the best way to go.  I&#8217;ll be putting some serious thought into how I can devote more of my time to game development in the near future.  For now, its back to working on my MMO&#8230;</p>
<p>I hope you enjoyed following along with the experiment and decide to stay tuned to see what&#8217;s next!</p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-conclusion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 24 Hour Game Experiment &#8211; Update 4</title>
		<link>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-4/</link>
		<comments>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-4/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 10:46:13 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=193</guid>
		<description><![CDATA[Since I went back to work on Monday, my game development time is limited again, but over the last couple of days I did squeeze in about 4 more hours which brings me to 19 total.  This is the painful thing about being a part-time game developer.
Anyway&#8230; I added some production quality art into the [...]]]></description>
			<content:encoded><![CDATA[<p>Since I went back to work on Monday, my game development time is limited again, but over the last couple of days I did squeeze in about 4 more hours which brings me to 19 total.  This is the painful thing about being a <a href="http://bantamcity.com/blog/game_development/developing-games-in-your-spare-time/" target="_blank">part-time game developer</a>.</p>
<p>Anyway&#8230; I added some production quality art into the game (but still need to redo Santa and the houses) and finished up the Main Menu with some flashy artwork and here&#8217;s what I have so far:</p>
<p><img class="size-full wp-image-194 alignnone" title="MainMenuScreenShot" src="http://bantamcity.com/blog/wp-content/uploads/2009/10/MainMenuScreenShot.png" alt="MainMenuScreenShot" width="452" height="338" /></p>
<p><img class="alignnone size-full wp-image-195" title="InGameScreenShot" src="http://bantamcity.com/blog/wp-content/uploads/2009/10/InGameScreenShot.png" alt="InGameScreenShot" width="452" height="338" /></p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The 24 Hour Game Experiment &#8211; Update 3</title>
		<link>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-3/</link>
		<comments>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-3/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 18:11:22 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=181</guid>
		<description><![CDATA[I didn&#8217;t get a chance to work at all yesterday, but today I spent about 4.5 hours so its been a total of 15 hours and I&#8217;m starting to feel the crunch&#8230;
I have most of the game play worked out, but the game seems too simplistic right now.  It feels too much like one of [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">I didn&#8217;t get a chance to work at all yesterday, but today I spent about 4.5 hours so its been a total of 15 hours and I&#8217;m starting to feel the crunch&#8230;</p>
<p>I have most of the game play worked out, but the game seems too simplistic right now.  It feels too much like one of those flash games that you play for a few minutes at lunch&#8230; so I guess that means I need to enhance the game play a bit.</p>
<p>Most of the artwork is still placeholder stuff, and there&#8217;s no audio at all, so I need to get moving on that.  I think I&#8217;ll concentrate on the in-game art next.</p>
<p>I added an end-of-level stats screen which turned out pretty nice:</p>
<p><img class="alignleft size-full wp-image-182" title="24HourGameExperimentScreenShot14" src="http://bantamcity.com/blog/wp-content/uploads/2009/10/24HourGameExperimentScreenS.png" alt="24HourGameExperimentScreenShot14" width="451" height="354" /></p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 24 Hour Game Experiment &#8211; Update 2</title>
		<link>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-2/</link>
		<comments>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-2/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 23:39:52 +0000</pubDate>
		<dc:creator>Bruno Campolo</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://bantamcity.com/blog/?p=173</guid>
		<description><![CDATA[Another 4 hours have passed and I didn&#8217;t feel nearly as productive this time&#8230; in fact right now I&#8217;m realizing that I wasn&#8217;t very productive at all for the last hour or so&#8230; mostly muddling around on various royalty free illustration sites looking for good images.
That&#8217;s my cue to pack it in for the night [...]]]></description>
			<content:encoded><![CDATA[<p>Another 4 hours have passed and I didn&#8217;t feel nearly as productive this time&#8230; in fact right now I&#8217;m realizing that I wasn&#8217;t very productive at all for the last hour or so&#8230; mostly muddling around on various royalty free illustration sites looking for good images.</p>
<p>That&#8217;s my cue to pack it in for the night and hopefully I&#8217;ll be ready to go for tomorrow and/or Sunday.</p>
<p>Not too much to show for myself this round, but I did fix a bunch of issues with the game play mechanics and here&#8217;s a nice screen shot of the credits:</p>
<p><img class="size-full wp-image-174   alignnone" title="Credits" src="http://bantamcity.com/blog/wp-content/uploads/2009/10/Credits.png" alt="CredtsScreen" width="451" height="343" /></p>
]]></content:encoded>
			<wfw:commentRss>http://bantamcity.com/blog/game_development/the-24-hour-game-experiment-update-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
