<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="wordpress/2.3.3" --><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Toni Westbrook dot Com</title>
	<link>http://www.toniwestbrook.com</link>
	<description>Sharing Software Development Knowledge With You</description>
	<pubDate>Sat, 04 Jul 2009 22:24:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ToniWestbrookDotCom" type="application/rss+xml" /><item>
		<title>Network Any Vintage Computer! (Kind Of)</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/HNQ3aIEAW3s/148</link>
		<comments>http://www.toniwestbrook.com/archives/148#comments</comments>
		<pubDate>Fri, 03 Jul 2009 08:11:28 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[RetroComputing]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/148</guid>
		<description><![CDATA[The idea of computers communicating with each other has fascinated me from the very beginning.  When I was little, the world of networking was a "mysterious" one, as I didn't own a modem until I was 12 and had only experienced the idea of computers talking to each other from TV and movies (read: [...]]]></description>
			<content:encoded><![CDATA[<p>The idea of computers communicating with each other has fascinated me from the very beginning.  When I was little, the world of networking was a "mysterious" one, as I didn't own a modem until I was 12 and had only experienced the idea of computers talking to each other from TV and movies (read: War Games).  When I finally did get my first 2400bps, I got huge into BBSes and ran my own (Pig Pen Forever!), learned everything I could about serial communication and modems.  Then when I was older and had access to equipment, I got into Ethernet, TCP/IP, and the wonderful world of modern day networking.  But it always goes back to that magic of seeing something pop-up on your screen that didn't originate from the local machine - it came from somewhere else, either another computer in the room, or half way across the world.  </p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/07/iigs.jpg' title='PortServer - Example'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/07/iigs.jpg' alt='PortServer - Example'  align=right style="width:260px; margin-left:15px" /></a>Because of this, a favorite activity of mine is connecting my vintage machines up in one way or another so they can share data and download programs from the rest of my network.  These connections range from a sophisticated TCP/IP stack over Ethernet on my Amiga 4000, to a simpler TCP/IP over PPP over serial on my Apple IIGS, to a very simple Kermit over serial on my Osborne-1.  </p>
<p><b> The Problem With This </b></p>
<p>With the exception of the Amiga which actually makes use of Ethernet, there are a few issues with this setup - all of which originate from these links being RS-232 serial.</p>
<ol>
<li>RS-232 is physically point to point, each end needs a dedicated serial port for that connection.</li>
<li>RS-232 is also logically point to point, a device can only directly communicate with the device on the other end of the serial link.</li>
<li>Assuming the computers are DTE devices, a crossover adapter (null modem) needs to be used on the serial connection to flip the send/receive pins.</li>
<li>Serial cables tend to be bulky and expensive, especially when you add in gender changers and null modems.  Add a few of them and you have cables everywhere.</li>
</ol>
<p><b> A Neat Solution </b></p>
<p>While the best way to tackle this situation is obtain a native Ethernet network card/adapter for the machine in question, this can be difficult, expensive, or impossible in many cases since for many of the lesser known vintage machines, network cards were simply never made, and there isn't enough of a community to build one.  Luckily though, most vintage machines tend to have serial port - wouldn't it be great if we could convert that serial port into an Ethernet port?  Or even better, include a range of network oriented services integrated into that network port?</p>
<p><b> Enter the Digi PortServer </b></p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/07/digi_portserver_ts_2_mei.jpg' title='PortServer - Photo'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/07/digi_portserver_ts_2_mei.jpg' alt='PortServer - Photo' align="left"style="margin-right:15px" /></a>For the record, I'll say that I have no affiliation with Digi, I just think they have a really cool product and wanted to share it.  Digi produces a line of hardware devices known as the "PortServer" which basically converts a serial port into a network port.  What's better, it can combine multiple serial ports onto a single network connection, so 8 machines can be plugged in over a serial link, which connect to the network via the PortServer only using a single network cable.  More importantly, the PortServer supports the following to make networking vintage machines a reality:</p>
<ol>
<li>Virtual COM/TTY ports - Digi provides drivers that create a virtual COM port on your Windows box (or TTY on your Linux box) which transparently connects over a network to a PortServer serial port.  So you can be two countries away, but as far as Windows, your software, and the software sitting on your vintage machine is concerned, you are connected over a hard serial link.  This is great for applications made for serial communication that need a com port.</li>
<li>Outgoing TCP connections - The PortServer can be set to automatically connect to an IP and port when serial traffic originates on the vintage computer - e.g. when I open my terminal up on my Apple IIGS, the port server will automatically connect the serial port to a telnet session on my Linux box, or on my favorite BBS.</li>
<li>Incoming TCP connections - The PortServer can listen for connections made on a specific port, and then connect that traffic to the vintage computer - e.g. I can telnet to port 2002 on my PortServer from my Linux box, and it will connect me to the serial port of my Osborne 1. Now you can access your vintage machine from at work!</li>
<li>Modem Emulation - The Port Server can emulate a Hayes compatible modem, while passing traffic via TCP - which means you can run your favorite old BBS like new over telnet without fear of strange compatibility issues or rewriting any code.</li>
<li>PPP - The PortServer supports the PPP protocol, which means if you have a machine capable of speaking PPP (such as an Apple IIGS running Marinetti), your PortServer can take care of handling the PPP traffic.  There are configuration options for IP address assignment and negotiation attributes in the PortServer setup.</li>
<li>Chat Mode - The PortServer can also combine multiple sessions together at once, so more than one computer can be connected to your vintage machine at the same time.  This can be a good way to monitor traffic or create a shared environment for 2+ person communication.</li>
<li>Lots more - The PortServer also has options for serial printers, industrial applications, power over serial, remote waking, wireless, users and security - the list goes on and on.</li>
</ol>
<p>I had known that serial IP extenders existed, but when I finally picked up one of the Digi boxes, I was truly amazed by how many options the firmware provides - it's really impressive.  </p>
<p><center><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/07/digi-wireless.jpg' title='PortServer - Wireless'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/07/digi-wireless.jpg' alt='PortServer - Wireless' style="width:200px" /></a><br />
<i> A 4 port wireless Digi PortServer</i></center></p>
<p><b> It's Not All Roses </b></p>
<p>There are a few issues though:</p>
<ol>
<li> Latency - since the data is being converted from a hardwired RS-232 to packet based back to RS-232, there is definitely an increase in latency, and issues with the network can mean lost or slow data, which isn't a problem for a direct, hardwired link.</li>
<li> RJ-45 Ports - The PortServers don't have DB-9 ports, rather RJ-45 ports akin to Cisco or other networking equipment console ports.  They understandably do this so any range of converter cables can be used with a wide variety of ends, but in most cases you'll just want a DB-9.  I ordered a two port PortServer and it came with a single RJ-45->DB-9 cable, so I'll need to get/build another if I want to use the other serial port on the box simultaneously.</li>
<li> Price - They can get a bit expensive.  A two porter can go anywhere from $250-$340 depending on the options it's equipped with.  Also available are 4 port, 8 port, and 16 serial port models, the latter which gets close to $1200.  However, depending on how many machines you actively would like "networked", 2-4 would probably suit most peoples' needs - I know I'll be fine with 2.</li>
</ol>
<p><b> The Sky's the Limit </b></p>
<p>I've only had mine hooked up for the last few hours, and already I'm thinking about a dozen uses for this thing.  And while it isn't a miracle product for anything modern that features a network jack - it is an amazing buddy for vintage computers in need of network communication.  </p>
<p>Well, I'm off to surf some BBSes on my Osborne-1!  </p>
<p><a href="http://www.digi.com">Digi Official Website</a></p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/HNQ3aIEAW3s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/148/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/148</feedburner:origLink></item>
		<item>
		<title>Ghostbusters: The Video Game</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/dvyfGpwfVyU/145</link>
		<comments>http://www.toniwestbrook.com/archives/145#comments</comments>
		<pubDate>Tue, 30 Jun 2009 21:55:55 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/145</guid>
		<description><![CDATA[Before going any further, I'll preface this by saying I am a insanely huge Ghostbusters fan.  It's been my favorite movie since I first saw it when I was little, and all subsequent 5 billion viewings.  I'm surprised my C64 Ghostbusters disk still works from the number of times I played the game, [...]]]></description>
			<content:encoded><![CDATA[<p>Before going any further, I'll preface this by saying I am a insanely huge Ghostbusters fan.  It's been my favorite movie since I first saw it when I was little, and all subsequent 5 billion viewings.  I'm surprised my C64 Ghostbusters disk still works from the number of times I played the game, and I have a large portion of the action figures - moreso than anyone should have.  I even dressed up as Egon for Halloween when I was 10, and had a Staypuft plush toy.  Without mentioning how I own the entire series of The Real Ghostbusters on DVD (oops), I think it's safe to say I'm a fanatic.  </p>
<p>That being said, I'm going to try my best to give a non-biased review of the game.  And there were some issues I noticed along the way, so I feel that I'm doing a just critique.</p>
<p><b> Basic Info </b></p>
<p>Ghostbusters: The Video Game was developed by Terminal Reality and Threewave Software (for PC/XBox/PS3 versions), and published by Atari and Sony.  Its publishing history is a bit bizarre and probably warrants its own post - suffice it to say, it changed hands through mergers until it ended up with Activision, who made the choice not to publish it (Please note, I'll keep this post professional and make no mention of Activision's market research team apparently inhaling a large number of drugs that day, or the fact that Activision in general is slightly higher than amoebic dysentery on my list of favorite things).  Atari grabbed it up.  </p>
<p>It was/will be released for PC, PS3, XBox 360, Wii, PS2, and PSP.  </p>
<p>I purchased and played the PC version via Steam.</p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/06/slimer.jpg' title='Ghostbusters - Slimer'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/06/slimer.jpg' alt='Ghostbusters - Slimer' style="width:100%" /></a></p>
<p><b> The Good </b></p>
<p>First off, the best part is: it's GHOSTBUSTERS.  Seriously, that just scores a lot of points right there.  But without going too fanboy - it features all the original voice cast (Bill Murray, Dan Aykroyd, Harold Ramis, Ernie Hudson, Annie Pots, William Atherton), and features other well known actors (Brian Doyle-Murray, Alyssa Milano).  The script was written in part by Aykroyd and Ramis (the former who stated "this is essentially the third movie." [game informer]).  </p>
<p>The story is fun and interesting and visits a lot of locations, characters, and mythologies from the original two films.  Some of it is a bit contrived, but overall it flows pretty well.  The music is mostly all from the original movie, which is great - I enjoyed it quite a bit.  Some people have said it gets repetitive, but I've heard that music so much in my life regardless that it doesn't wear on me.  </p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/06/staypuft.jpg' title='Ghostbusters - Staypuft'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/06/staypuft.jpg' alt='Ghostbusters - Staypuft' align=right style="width:285px;margin-left:15px" /></a>Most importantly, the game play is A LOT of fun.  A serious amount - the physics engine developed for the game, the "Infernal Engine", is the absolute <b>BEST</b> I have ever seen in any game.  Virtually any item can be broken/burned/moved/etc, and movement is incredibly realistic.  They did a really nice job with it - I hope it gets used in more games to come.  It must also be fairly efficient, as it didn't tax my processors as much as Left 4 Dead or other recent games do.  Big score on that.  And the mechanics of actually catching and trapping the ghosts is just a crapload of fun - from the little guys to (semi spoiler) the Staypuft Marshmallow man.  It made me feel like I was actually a Real Ghostbuster (LOLZ).</p>
<p><b> The Bad </b></p>
<p>Okay - the big one that has set the forums aflame: <b>There is no multiplayer in the PC version</b>.  This was a big shock to everyone, as it was pretty much advertised during the pre-order weeks as having multiplayer.   A lot of people, including myself, were pretty ticked off about it, and Atari has done virtually no damage control.  Hopefully there will be a patch - this would be a great game for LAN parties.</p>
<p>A lot of people have reported some major issues with saving/restoring games (I experienced a bit of this), slowdowns/lockups, and issues installing it.  Also, for those purchasing the PS3 version, they'll notice it looks quite a bit fuzzier and lower-res than its PC or XBox counterpart.  </p>
<p>Lastly, and this one especially bugged me, the code used to process mouse acceleration is the same as what's used to process joystick acceleration.  Because of this, moving the mouse slowly doesn't fine-control your character, it simply doesn't have any effect at all.  You need to budge the mouse quite a bit to get your character to move normally, which is not great for an action game.  </p>
<p>I appreciate the extra time being taken to bump up the gameplay and creepiness, they did an AWESOME job, but there have been enough reports of issues to know that QA was not quite where it should have been on this one.</p>
<p><b> The Ugly </b></p>
<p>Really, the lack of PC multiplayer was the only thing that was a major bummer.  Overall, I really enjoyed this game - and I want to keep enjoying it, which is why I hope they patch it for multiplayer - the physics and gameplay are awesome, and would be fun for a LAN party or online play.  </p>
<p><b> So Who You Gonna Call? </b></p>
<p>If you are a Ghostbusters fan, or just want to try a new game, I highly suggest this one - it's great to see new light brought to old characters with a continued storyline, and the gameplay is just a blast.  Overall, if you're shooting for the best balance of multiplayer and good graphics, pick up the XBox version.  If you're shooting for the best possible graphics and have a bumpin' gaming rig, pick up the PC version and jack up the settings - and hope they'll release a patch one day.  But regardless of what system you go for, GET THIS GAME NOW!  </p>
<p>And an important safety tip while playing:  Don't cross the streams - it would be bad.  </p>
<p><a href="http://www.ghostbustersgame.com"> Ghostbusters: The Video Game Official Site </a></p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/dvyfGpwfVyU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/145/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/145</feedburner:origLink></item>
		<item>
		<title>5 Reasons for Putting Your Personal Code Into Subversion</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/rJB_sPJ1JMo/144</link>
		<comments>http://www.toniwestbrook.com/archives/144#comments</comments>
		<pubDate>Sat, 27 Jun 2009 05:12:32 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/144</guid>
		<description><![CDATA[If you've ever programmed for an organization with multiple developers, you've most likely used some kind of system to synchronize, combine, and version code.  Without a such a tool, changes to the same files amongst two or more people can get very confusing and hard to manage very quickly.  However, even if you're [...]]]></description>
			<content:encoded><![CDATA[<p>If you've ever programmed for an organization with multiple developers, you've most likely used some kind of system to synchronize, combine, and version code.  Without a such a tool, changes to the same files amongst two or more people can get very confusing and hard to manage very quickly.  However, even if you're just dealing with your own, personal projects, a code repository is still a must.</p>
<p><b> 1 - Versioning </b></p>
<p>One of the most powerful aspects of subversion is the ability to track changes to your code.  I can't count the number of times in the past where I'd make a change to my source and totally botch the program up.  And often times, I wouldn't realize the screw up until later on, when it was too late to remember exactly when it had started acting up.  With your code versioned (using copious comments), it is easy to look through the history of changes, revert back to a version or just grab the specific lines of code you need.</p>
<p><b> 2 - Multiple Backups</b></p>
<p>Though it is, of course, possible to manually back up your code, the nice thing about working with a repository is the ease in maintaining backups.  First off, if you're actively working on a project, you'll have two copies already - your working copy, and the copy in the repository.  And when you backup the repository, you'll be grabbing all your versions and comments at the same time.  Combined with having all your repositories in one location that can be easily be grabbed, this makes for an easy to manage solution.</p>
<p><b> 3 - Synchronize Code Between Multiple Computers </b></p>
<p>Like many people, I have both a desktop and a laptop (well, a netbook), and when at home, I of course prefer the large screen of the desktop.  But I also am a fan of enjoying a cup of tea and a little programming at the cafe around the corner from me.  Because of that, having code on my netbook is a necessity.  Subversion allows me to quickly and easily synchronize my code between both machines, no problem.</p>
<p><b> 4 - Secure Method of Remotely Accessing Code </b></p>
<p>Related to #3, since SVN can integrate with SSH, it provides a method of securely accessing your code from anywhere in the world.  Though I'll normally sync my code to my netbook at home, if I get in a jam and ever need to grab my code from another machine, or if I forget to update my code at home, I have the ability to do so.  And since it uses SSH, I simply need to map 1 port on my firewall, no crazy set up required.  </p>
<p><b> 5 - Integration With Popular IDEs </b></p>
<p>With Subversion being so popular, many IDEs and other tools have plugins to integrate the use of a svn repository directly into the program.  Visual Studio, Eclipse, Anjuta, and Emacs all have subversion plugins/support.  Additionally, Windows, OS X and Linux all have utilities to integrate SVN into the file managers/explorers (E.g. TortoiseSVN for Windows).  With all these plugins, it makes using subversion a snap.</p>
<p>So if you haven't already, take a day some weekend and move your source over into Subversion - it'll take a little time depending on how much code you have, but you'll be happy you did in the long run - it's a fantastic tool, whether dealing with 50 developers or just yourself.</p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/rJB_sPJ1JMo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/144/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/144</feedburner:origLink></item>
		<item>
		<title>Classic Gaming Review - Quackshot</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/Z1s3ZAzCQGg/141</link>
		<comments>http://www.toniwestbrook.com/archives/141#comments</comments>
		<pubDate>Thu, 25 Jun 2009 22:14:42 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/141</guid>
		<description><![CDATA[A Fun Activity to Share
One of the interests my girlfriend and I share is our love of gaming, specifically retro gaming.  She did a lot of Genesis gaming when she was a kid, while I was exposed mainly to C64 and Nintendo gaming, so we have a fun time sharing our favorites with the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>A Fun Activity to Share</strong></p>
<p>One of the interests my girlfriend and I share is our love of gaming, specifically retro gaming.  She did a lot of Genesis gaming when she was a kid, while I was exposed mainly to C64 and Nintendo gaming, so we have a fun time sharing our favorites with the other and playing through them together.  It's a pretty relaxing and fun way to spend a rainy Saturday.  Recently, we decided to tackle Sega's Quackshot.  </p>
<p><b> Quackshot Specifications </b></p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/06/quackshot.jpg' title='Quackshot Box'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/06/quackshot.jpg' alt='Quackshot Box' align="right" style="width:200px" /></a>Quackshot was released in 1991 for the MegaDrive/Genesis.  It's a single player game featuring Donald Duck and many of Disney's Ducktales characters in a platform style adventure.  </p>
<p>The game was also released in 1998 for the Sega Saturn.  We played the Genesis version on the Fusion Genesis emulator.</p>
<p><b> Overview </b></p>
<p>The story of Quackshot features Donald finding a treasure map in one of Scrooge McDuck's old books, and deciding to set out to find said treasure.  Big Bad Pete overhears this and decides to try to stop/steal the treasure from Donald.  Donald flies from location to location with the help of Huey, Duey, and Louie who pilot the airplane (why not Launchpad I wonder?).  The game is definitely reminiscent of Indiana Jones, and features many of the same scenes (Running from boulder ala Raiders, making a leap of faith across a chasm ala Last Crusade, mine carts ala Temple, etc).  </p>
<p>Donald makes use of a plunger he fires from a gun as a weapon, which later can be upgraded to provide different abilities, such as sticking to walls.  He also has a popcorn gun which can destroy enemies, and a bubble gum gun that can destroy blocks (makes sense!).</p>
<p><b> Thoughts </b></p>
<p>I'm a fan of side-scrolling platformers in general - especially old school 2D ones, just because they're simple but can be challenging, especially when crazy pit jumping or enemy dodging is involved.  I enjoyed this one as well - the difficulty level wasn't bad (though we were using a game genie code), we cleared it under an hour or two (can't remember exactly), but it wasn't an overly long time.  I both like Ducktales characters and Indiana Jones as well, so this game made the perfect combination.  </p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/06/quackshot2.jpg' title='Quackshot - Snow'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/06/quackshot2.jpg' alt='Quackshot - Snow' align=left style="width:230px; padding-right:15px" /></a>There wasn't a lot going on in this game - which is not a bad thing.  There was a little puzzle solving, but one part I found especially annoying was the Maharajah's Palace stage, in which you're trapped in a maze of rooms connected by mirrors.  You need to choose the right combination of mirrors to advance to the boss or else you'll just keep retracing your steps over and over.  Maybe the correct sequence was mentioned somewhere in the game, but we missed it - we had to look it up.  </p>
<p>The last boss wasn't bad - if you know his strategy he's extremely easy to beat, especially as there's a location on the screen you can't be hit if you know the pattern.  This is either good or bad depending on if you like a big challenge for the last guy.  I thought he was pretty cool though, a knight just like at the end of Last Crusade.  </p>
<p><b> Overall </b></p>
<p>I recommend this game if you're looking for a fun little platformer to play and enjoy Disney characters.  There's nothing revolutionary going on in this game, but it's colorful and fun, and the music is not bad - it's enjoyable.  And if Donald eats a bunch of Chili peppers he goes nuts and runs across the screen, invincible to enemies, that part is a HOOT.  And there were a few other Disney games released by Sega at this time (reviews on those later!) so you can keep filling that cartoon video game hunger when you're done with this one.  Hurray!</p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/Z1s3ZAzCQGg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/141/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/141</feedburner:origLink></item>
		<item>
		<title>From Pong to Platformers - An Introduction to Game Physics - Part 4</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/Bq44bs4lW0Q/140</link>
		<comments>http://www.toniwestbrook.com/archives/140#comments</comments>
		<pubDate>Sun, 21 Jun 2009 23:24:04 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Games]]></category>

		<category><![CDATA[Starting Out]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/140</guid>
		<description><![CDATA[ Acceleration for Better Goomba Stomping 
So now we understand positioning an object on a screen, moving the object around using the principles of velocity, and how to handle collisions with walls and other simple objects.  While we can do quite a lot with these simple fundamentals, there is one more that is key [...]]]></description>
			<content:encoded><![CDATA[<p><b> Acceleration for Better Goomba Stomping </b></p>
<p>So now we understand positioning an object on a screen, moving the object around using the principles of velocity, and how to handle collisions with walls and other simple objects.  While we can do quite a lot with these simple fundamentals, there is one more that is key to modeling realistic movement.  We can understand a little how it works by watching how Mario jumps in the Super Mario Bros series.  </p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/06/supermario.png' title='Physics - Mario'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/06/supermario.png' alt='Physics - Mario' /></a><br />
<i> Mario jumps in an arc movement</i></p>
<p>For those who haven't played Super Mario Bros, Mario jumps in an arc.  When he begins to jump, the sprite on the screen moves up very quickly, then slows at the top of the arc, then slowly starts moving back down, until he's going the same speed as when he started the jump when hitting the ground.  The reason for this movement is due to acceleration.  Specifically, the game is modeling the affects of gravity, gravity being a force that causes acceleration in the downward direction.  </p>
<p>Just as velocity is the rate of change of an object's position (e.g. meters per second), acceleration is the rate of change of an object's velocity (e.g. meters per second per second).  Gravity is a force that causes constant acceleration in the downward direction.  Because of this, though Mario starts with a velocity that causes him to move in an upward direction, acceleration downward causes this velocity to slowly decrease, then reverse, getting faster in the opposite direction.  </p>
<p>Programatically, we can handle this the same way we do velocity.  In addition to updating position with velocity, we'll want to update velocity with acceleration - so we'll need two more variables, AccX and AccY.  During our redraw, we'll want to update both velocity and position: (VelX = VelX + AccX) (VelY = VelY + AccY) (X = X + VelX) (Y = Y + VelY).  Acceleration can be used to model many realistic scenarios besides jumping in platform adventures, such engines firing in a spaceship simulator, or shells being fired from a cannon in a tank war game.  </p>
<p><b> Onto More Advanced Topics </b></p>
<p>We've covered position, velocity, acceleration, and basic collisions - with these basic techniques, a wide range of realistic motions can be accomplished when making your next game.  There are, however, hundreds of more topics, including friction, complex collisions, fluid dynamics, light oriented (shading, diffraction, reflection), etc.  However, before getting too crazy, try some of these techniques in simple games to get familiar with Newtonian Mechanics.  After that, more advanced topics will be easier to handle.  Have fun with you physics!</p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/Bq44bs4lW0Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/140/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/140</feedburner:origLink></item>
		<item>
		<title>From Pong to Platformers - An Introduction to Game Physics - Part 3</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/Lb1v5x3prus/139</link>
		<comments>http://www.toniwestbrook.com/archives/139#comments</comments>
		<pubDate>Sun, 21 Jun 2009 23:22:40 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Games]]></category>

		<category><![CDATA[Starting Out]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/139</guid>
		<description><![CDATA[ Thinking Inside the Box 
However, now that we have movement, we run into an issue.  When we think of a classic video game, we think of boundaries, such as the edge of the screen, or floors/walls/ceilings, or other objects.  In many games, such as platformers, these boundaries will stop the object from [...]]]></description>
			<content:encoded><![CDATA[<p><b> Thinking Inside the Box </b></p>
<p>However, now that we have movement, we run into an issue.  When we think of a classic video game, we think of boundaries, such as the edge of the screen, or floors/walls/ceilings, or other objects.  In many games, such as platformers, these boundaries will stop the object from moving.  In games such as Pong and Breakout/Arkanoid, the boundaries cause the object to bounce.</p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/06/breakout.png' title='Physics - Breakout'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/06/breakout.png' alt='Physics - Breakout'  style="width:75%" /></a><br />
<i> In the classic game Breakout, the ball bounces off the walls, paddle, and bricks.</i></p>
<p>The idea of bouncing is the boundary only reverses one dimension of the ball's direction, while the other dimensions remain unaffected.  This is expected behavior that reflects real life, as remember that vectors are treated independently in each dimension.  E.g. if the ball is traveling right and up, and hits the right wall, it should continue to travel up, but it should start traveling left.  The right wall only affects the left-right dimension, it never affects the up-down direction.  If the ball then hits the ceiling traveling left and up, the ceiling will only affect the up-down direction, and now the ball starts traveling left and down.   </p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/06/physics-bounce.jpg' title='Physics - Bounce'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/06/physics-bounce.jpg' alt='Physics - Bounce' style="width:90%"/></a><br />
<i> Each wall only affects the direction in one dimension. </i></p>
<p>Looking back, our program currently has 4 variables.  X (x position), Y (y position), VelX (x velocity), and VelY (y velocity).  When redrawing our screen, in the case of boundaries, we would check to see if the ball has "hit" any boundaries - that is, if the coordinates of the ball (X and Y) reside in the same space as the coordinates of any of the boundaries.  If so, we adjust the velocity accordingly.  E.g. if the ball has an x velocity of 4 (traveling 4 pixels per redraw to the right) and a y velocity of -2 (traveling 2 pixels per redraw downwards), and hits the right wall, the x velocity will be reversed - that is, multiplied by -1 (VelX = VelX * -1).  So now the x velocity is -4 (traveling 4 pixels per redraw to the left), and we've achieved our bounce. If we apply this boundary check to a movable paddle, we now have pong.  If we apply this boundary check to bricks at the top of the screen, we now have breakout as well!  </p>
<p><a href="http://www.toniwestbrook.com/archives/140">Onto Part 4</a></p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/Lb1v5x3prus" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/139/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/139</feedburner:origLink></item>
		<item>
		<title>From Pong to Platformers - An Introduction to Game Physics - Part 2</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/BaN-NpdJ6q0/138</link>
		<comments>http://www.toniwestbrook.com/archives/138#comments</comments>
		<pubDate>Sun, 21 Jun 2009 23:19:51 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Games]]></category>

		<category><![CDATA[Starting Out]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/138</guid>
		<description><![CDATA[ Velocity 
Velocity is a fancy word for speed with a particular direction.  Going 88 MPH would be speed.  Going north at 88MPH would be velocity.  But forgetting the direction component for a moment, speed is measured in distanced traveled over time.  For example, when we say 88 Miles per Hour, [...]]]></description>
			<content:encoded><![CDATA[<p><b> Velocity </b></p>
<p>Velocity is a fancy word for speed with a particular direction.  Going 88 MPH would be speed.  Going north at 88MPH would be velocity.  But forgetting the direction component for a moment, speed is measured in distanced traveled over time.  For example, when we say 88 Miles per Hour, we're saying the object is moving a distance of 88 miles over a period of an hour - i.e. the object is changing its position by that much in an hour. </p>
<p>Remember, our video game object has position too - it has its coordinates.  If we introduce velocity into our game, we now give our object the ability to move by the laws of physics.  If we redraw our object once a second, and the object is going 5 pixels right per second, we would be adding 5 to our X coordinate (the value stored in our X variable) every second, then redrawing the object.  If we want it to move faster, we increase the speed, 6 pixels per second, 7 pixels per second. </p>
<p><b> Don't Forget the Vector! </b></p>
<p>Vector is another mathematical term for a quantity with a direction involved.  Remember, velocity is speed with a direction, so it is a vector.  There is a helpful property of vectors that allows us to split them up by dimensions - that is, if something is moving in two dimensions at once (north and west, up and north, south and east and down), we can handle each direction separately.  If something is moving north and west, we can talk about how much it's moving in the north direction and how much it's moving in the east directly independently.  In our video game case, we can say "okay, the pong ball is traveling -3 pixels per second in the X direction, and 2 pixels per second in the Y direction).  That means every second we're going to subtract 3 from our X variable, and add 2 to our Y variable, then redraw the ball.  The movement of the ball would appear to be going diagonally up and left, as seen here:</p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/03/physics-2.jpg' title='Physics - Velocity'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/03/physics-2.jpg' alt='Physics - Velocity' style="width:50%" /></a><br />
<i>We handled each dimension separately, but the end result was the diagonal movement.</i></p>
<p>Now we can store our X velocity and Y velocity into variables too (for example, velX and velY).  So, every time we redraw the screen, we are going to add velX to X (x = x + velX), and velY to Y (y = y + velY).  So if we have a very large velX, the ball will be moved across the screen very fast from left to right.  If we have a very large negative velY, the ball will be moved down the screen very fast.  And we don't need to press the key each time, our velocity will do the work for us through simple addition (or subtraction if we are adding a negative number).   </p>
<p>If we wanted to design a fun experiment, we could assign our arrow keys to change velocity.  Pressing left would subtract one from velocity in the X direction, pressing up would add one to velocity in the y direction, etc.  This would have the effect of making the ball move in a direction more quickly the more you press the arrow in the same direction, or slow down and start moving backwards if you press the arrow in the opposite direction.  Not pressing the arrows would simply keep the ball doing whatever it was doing - e.g. traveling in whatever direction it was before.  </p>
<p><a href="http://www.toniwestbrook.com/archives/139">Onto Part 3</a></p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/BaN-NpdJ6q0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/138/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/138</feedburner:origLink></item>
		<item>
		<title>From Pong to Platformers - An Introduction to Game Physics - Part 1</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/27g8X5FvF18/132</link>
		<comments>http://www.toniwestbrook.com/archives/132#comments</comments>
		<pubDate>Sun, 21 Jun 2009 23:19:17 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Games]]></category>

		<category><![CDATA[Starting Out]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/132</guid>
		<description><![CDATA[Before we get started,  I feel the need to point out that this entry will in no way even begin to approach the territory of being comprehensive in the study of video game physics.  This is targeted toward those who have little background in physics and is very much a starter tutorial.  [...]]]></description>
			<content:encoded><![CDATA[<p>Before we get started,  I feel the need to point out that this entry will in no way even begin to approach the territory of being comprehensive in the study of video game physics.  This is targeted toward those who have little background in physics and is very much a starter tutorial.  In general, the better and more realistic the game physics, the closer you're getting to actual physics - and that's a lifetime study in itself.  However, there are some basic tips and tricks to know when dealing with intro action and arcade style games.  </p>
<p><b>Newton and his Mechanics</b></p>
<p>While games have gone from simple squares on the screen to 2D sprites to 3D-super-rendered-polygon-ray-traced-blammo-wow objects, the actual science behind their movement on the screen has stayed relatively the same - mainly because their movement is based on the movement we're used to, what we see all around us every day.  We reproduce it in our video games (for the most part) because it's natural and makes sense to us.  We're mirroring physics!  Specifically Classical (or Newtonian) Mechanics.  We generally don't need to take into account relativity or quantum mechanics when making Mario jump from one green pipe to another.</p>
<p>So to understand how the pod in Lunar Lander works, we need to understand how a real lunar lander would work.  But let's start out more simply. </p>
<p><b> Mass and Position</b></p>
<p>What is mass?  This is a large, fundamental question that involves inertia, resistance to movement, the amount of force necessary to move the object, etc.  But we don't need to get that deep into it.  Mass is physical stuff.  You have mass, a ball has mass, the planet has mass, your dog has mass, Catholic churches have Mass, etc.  (ba-dum-dum). Anything physical has mass.  It doesn't start moving for the most part, it stays where it is until something pushes it (in the case of a person, your muscles).  If it's already moving, it doesn't stop moving unless something stops it (a wall, friction, a large rope, etc). It basically keeps doing whatever it's already doing.  </p>
<p>Reproducing an object that sits there and does nothing is very easy to do in a video game.  Simply create a representation of an object, whether it be a colored square (Pong), a bitmap graphic (Mario), or a polygon object (Lara Croft) and put it on the screen.  The actual way to do this is outside this tutorial (Check out <a href="http://www.toniwestbrook.com/archives/69">Creating a Blackberry Game</a> if you'd like to see how to do it in Java).  Just as in the real world an object has a position, in the video game world, the object will have a position too - a coordinate on the screen.  In the below example, we use a simple object that is 1 pixel in size for a pong-like game.  </p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/03/physics-1.jpg' title='Physics - Object Location'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/03/physics-1.jpg' alt='Physics - Object Location' style="width:50%"/></a><br />
<i> The green pixel is our pong ball </i></p>
<p>When programming this, we would need to store the dot's X coordinate and Y coordinate into variables, in this case, store a 6 in X, and a 2 in Y.  If we wanted to use the arrow keys to move this object, we would simply add or subtract from the coordinates as the appropriate key is pressed (e.g. pressing up -> Add 1 to Y, pressing down -> Subtract 1 from Y, pressing right -> Add 1 to X, pressing left -> Subtract 1 from X).  Then redraw the object in its new location.  Our drawing routine would always just take the values and of the X and Y variables and draw a pixel at those coordinates on the screen.</p>
<p>While this would be enjoyable for 2-3 seconds, it would overall be a fairly boring game.  We would be doing physics' job in this case, telling the object how to move every step of the way.  We want physics to carry its load.  So let's program in another property.</p>
<p><a href="http://www.toniwestbrook.com/archives/138">Onto Part 2</a></p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/27g8X5FvF18" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/132/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/132</feedburner:origLink></item>
		<item>
		<title>PSX64 - New batch in</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/l2z98ij6eAw/131</link>
		<comments>http://www.toniwestbrook.com/archives/131#comments</comments>
		<pubDate>Tue, 24 Feb 2009 04:57:32 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Shredz64]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/131</guid>
		<description><![CDATA[Just a quick update, I got a batch of 50 boards in today to be assembled.  I will make them up asap and get them for sale on the website!
]]></description>
			<content:encoded><![CDATA[<p>Just a quick update, I got a batch of 50 boards in today to be assembled.  I will make them up asap and get them for sale on the website!</p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/l2z98ij6eAw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/131/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/131</feedburner:origLink></item>
		<item>
		<title>Creating a 555 Timer Based Variable Tone Generator</title>
		<link>http://feedproxy.google.com/~r/ToniWestbrookDotCom/~3/cNeoyICHrmI/127</link>
		<comments>http://www.toniwestbrook.com/archives/127#comments</comments>
		<pubDate>Wed, 18 Feb 2009 05:20:23 +0000</pubDate>
		<dc:creator>Toni</dc:creator>
		
		<category><![CDATA[Electronics]]></category>

		<guid isPermaLink="false">http://www.toniwestbrook.com/archives/127</guid>
		<description><![CDATA[I've finally started settling into my new job a bit more, and the huge waves of feeling overwhelmed have turned into small ripples, so time to step up the blogging again!
One love I've cultivated a lot over the past few years is that of EE.  Designing circuits and building them is just a lot [...]]]></description>
			<content:encoded><![CDATA[<p>I've finally started settling into my new job a bit more, and the huge waves of feeling overwhelmed have turned into small ripples, so time to step up the blogging again!</p>
<p>One love I've cultivated a lot over the past few years is that of EE.  Designing circuits and building them is just a lot of fun.  It's almost like getting to program with physical objects and connections instead of code.  At least that's how I view it, though I'm sure the electrical engineers out there are rolling their eyes.  </p>
<p>I like designing and working on complex digital circuits, but it's also fun just to make quick, neat little projects.  Often times they have more uses than you'd even think of.  </p>
<p><b> Annoy Your Friends! </b></p>
<p>One I made a few years ago for a yankee swap gift (I made two, kept one for myself), was what I called the "Super Noise Maker 5000".  In truth, it was just a variable tone generator.  I put a nice loud microspeaker and a pot on it so you could basically drive people nuts with a nice loud noise that you could twist from low to high pitch over and over again.  I even put a 1/8" mono jack so you could pump the volume up through an external amp. <img src='http://www.toniwestbrook.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<p><b> Specs </b></p>
<p>Aside from annoying people, tone generators are pretty neat and have a lot of uses.  Tracing lines, telcom uses, music generation, etc, they're just a lot of fun.  While the specific application you're designing it for dictates what kind of control you have over which frequency is produced, for our purposes, we want a fun toy, so the Super Noise Maker 5000 does the following:</p>
<p>1.  Uses a 9 volt for power (this lasts a long time, this circuit doesn't use much juice)<br />
2.  Has a push button to activate the sound (press the button, hear the tone!)<br />
3.  Has a potentiometer to control frequency (turn knob right, lower frequency, turn right, higher frequency)<br />
4.  Has a second push button to change octaves (well, not an exact octave, but if the button isn't pushed, its lower frequencies - push the button, it jumps to higher frequencies - you can get some awesome effects tapping this button while adjusting the frequency)<br />
5.  Has a 1/8" mono jack for piping the sound out to a receiver/amp/recording device/whatever.<br />
6.  Onboard speaker hits high frequencies VERY well and it hurttttsss.  I don't do this too often for both my and my cats' sake.</p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/02/00001.jpg' title='Super Noise Maker 5000'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/02/00001.jpg' alt='Super Noise Maker 5000' /></a></p>
<p><b> How Sound and Speakers Work </b></p>
<p>The theory behind this is pretty easy and is a good starter project.  First off, remember that sound is a pressure wave - it is the movement of air at a frequency - these pressure waves hit your eardrum, and you hear sound.  Higher frequency, or more waves per second, is a higher note - lower is lower.  So speakers operate by vibrating, which produce these pressure waves at different frequencies.  The speaker vibrates by the magic of magnets.  Since magnets can either attract or repel each other depending on the polar orientation, speakers use this by having one permanent magnet that is always aligned with a specific polarity and an electromagnet that gets its current polarity from running current in a specific direction over it.  </p>
<p>So if we run current back and forth over the electromagnet in the speaker at 1000 times a second, we get a 1000 hz, or 1khz tone out of the speaker.   If we make the electromagnet switch poles 5000 times a second, we get a 5khz tone. Etc!  </p>
<p>Now, the problem arises that we need to turn the steady voltage from our battery into an oscillating amount.  If we just ran steady DC power over a speaker, it wouldn't do anything except damage the speaker - the electromagnet would just stay at the same polarity, hence no sound.  We need to take that steady stream of electricity and turn it into a wave, so it moves the magnet back and forth.  There are a lot of ways of getting oscillated power, some are geared toward fixed amounts, but we want a variable amount (we want to control the frequency of oscillation).  An awesome little chip to do this is the 555 Timer, one of the most multipurpose chips EVER, it's great.  </p>
<p><b> The 555 Timer </b></p>
<p><a href='http://www.toniwestbrook.com/wp-content/uploads/2009/02/555.jpg' title='555 Timer'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/02/555.jpg' alt='555 Timer' align=left style='width:33%; padding-right:10px; padding-bottom:10px' /></a>  The 555 timer family (when in astable mode, the 555 timer has multiple uses) takes steady voltage, say from our 9 volt battery, and pumps out a square wave, or in other words, oscillates back and forth between 0 volts and 9 volts.  The frequency is driven by the use of resistors and a capacitor across its control pins - which we can control.  We can either use specific resistors for a fixed frequency, or we can use a potentiometer and have a user controlled resistance, and hence frequency.  There are lots of 555 timer calculators online too for figuring out what values to use for the desired frequency.</p>
<p><b> AC/DC </b></p>
<p>We still have a small problem though.  Our 555 is putting out an oscillation between 0 and 9 volts.  This isn't quite what the speaker wants - instead of driving the electromagnet back and forth, we're driving it in one direction and then turning it off over and over again.  While this does make a sound, it's not a clear sound or at the right frequency (and I'm sure not so great for the speaker).  We need to turn this oscillation in DC current into AC current, i.e. instead of 0 to 9, we want -9 to 9.  We want the current to go back and forth equally in both directions, not just in one direction and then not at all.  </p>
<p>We can do this with a capacitor.  Remember, a capacitor acts kind of like a little battery that can charge and discharge quickly - we can charge its terminal, and when current is removed, the capacitor discharges.  This means that it will either draw or discharge current depending on if you are charging the other terminal.  Hence if we put the capacitor between our 555 and the speaker, when the 555 pushes out 9 volts, the capacitor will charge and pull the current in one direction, and when the 555 goes to 0, the capacitor discharges and pushes the current the other direction.  This causes AC power, since it oscillates between positive and negative, which is exactly what our speaker needs.  And since it's driven by the 555 timer, we get the correct frequency!  </p>
<p><b> The Schematics </b></p>
<p>Here is a (somewhat messy, I've gotten better at circuit diagrams over time) schematic of the device.  You can see I've used an LM555 timer, a speaker, stereo jack, a couple resistors, a couple buttons, a potentiometer and a couple capacitors.  While this is a fun, neat little circuit to build, feel free to expand on your own and make your own ways of controlling the frequency, or combining tone generators together for multi-tone fun!  </p>
<p> <a href='http://www.toniwestbrook.com/wp-content/uploads/2009/02/snm5k-schematics.jpg' title='SNM5K Schematics'><img src='http://www.toniwestbrook.com/wp-content/uploads/2009/02/snm5k-schematics.jpg' alt='SNM5K Schematics' style='width:100%' /></a></p>
<img src="http://feeds.feedburner.com/~r/ToniWestbrookDotCom/~4/cNeoyICHrmI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.toniwestbrook.com/archives/127/feed</wfw:commentRss>
		<feedburner:origLink>http://www.toniwestbrook.com/archives/127</feedburner:origLink></item>
	</channel>
</rss>
