<?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>My Piece of the Inter(.)net &#187; Projects</title>
	<atom:link href="http://mypieceoftheinter.net/archives/category/projects/feed" rel="self" type="application/rss+xml" />
	<link>http://mypieceoftheinter.net</link>
	<description>A place for my geekish ramblings or whatever I find interesting.</description>
	<lastBuildDate>Mon, 16 Jan 2012 16:35:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Happy days! The new Roomie website is usable!</title>
		<link>http://mypieceoftheinter.net/archives/2210</link>
		<comments>http://mypieceoftheinter.net/archives/2210#comments</comments>
		<pubDate>Mon, 16 Jan 2012 16:35:03 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Roomie Website]]></category>
		<category><![CDATA[Roomie!]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/2210</guid>
		<description><![CDATA[Available at http://roomiebot.com, the new Roomie website works!&#160; I use the website to turn lights and things on and off from my desktop computer, laptop, smartphone, and and old still-has-a-browser iPod touch.&#160; I spend most of my time on the Devices page, which lists all of the devices in all home automation networks on my [...]]]></description>
			<content:encoded><![CDATA[<p>Available at <a href="http://roomiebot.com">http://roomiebot.com</a>, the new Roomie website works!&#160; I use the website to turn lights and things on and off from my desktop computer, laptop, smartphone, and and old still-has-a-browser iPod touch.&#160; </p>
<p>I spend most of my time on the Devices page, which lists all of the devices in all home automation networks on my account.&#160; (Right now I only have a single Z-Wave network, but in theory I could have a potpourri of different networks that include other existing home automation frameworks, IR transceivers, and—I dunno—USB missile launchers?)</p>
<p>Anyway, the UI all works, and dynamically updates when a devices state changes.&#160; Cool!</p>
<p><img style="display: inline" title="roomie_devices" alt="roomie_devices" src="http://mypieceoftheinter.net/wp-content/uploads/2012/01/roomie_devices.png" width="730" height="1118" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/2210/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More on Roomie&#8217;s website rewrite</title>
		<link>http://mypieceoftheinter.net/archives/2205</link>
		<comments>http://mypieceoftheinter.net/archives/2205#comments</comments>
		<pubDate>Sun, 11 Dec 2011 19:13:39 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Roomie!]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/2205</guid>
		<description><![CDATA[As stated in my previous post about Roomie, I’ve been using a lot of brain juice to rewrite Roomie’s website.&#160; I wrote the original website in ASP.NET with Web Forms, which was pretty standard for the time.&#160; Although technology like ASP.NET MVC and the Entity Framework existed in some form, they weren’t even on my [...]]]></description>
			<content:encoded><![CDATA[<p>As stated in my <a href="http://mypieceoftheinter.net/archives/2201">previous post</a> about Roomie, I’ve been using a lot of brain juice to rewrite Roomie’s website.&#160; I wrote the original website in ASP.NET with Web Forms, which was pretty standard for the time.&#160; Although technology like <a href="http://en.wikipedia.org/wiki/Asp.net_mvc">ASP.NET MVC</a> and the <a href="http://en.wikipedia.org/wiki/Entity_Framework">Entity Framework</a> existed in some form, they weren’t even on my radar.&#160; So after some coding and hacking and pushing through unfamiliar problems, I eventually got a workable website.&#160; (This website, though not the final version, is pictured in <a href="http://mypieceoftheinter.net/archives/2111">this post</a>.)</p>
<p>After merging all of Roomie’s desktop and web components into one self-aware Visual Studio solution, learning a ton of new technology, and a little trial and error, I now have the Roomie desktop client talking directly to the new website.&#160; Best of all, I can locally debug everything which means that I can get quicker feedback on code changes and (shrug?) even develop offline.&#160; Below I have a simple example pictured.&#160; A more impressive example is when I tell the Roomie desktop client to say something using text-to-speech, but obviously that would not convey over a screenshot.</p>
<p><a href="http://mypieceoftheinter.net/wp-content/uploads/2011/12/Roomie-MVC3-Tasks-working1.png"><img style="border-bottom-color: ; border-top-color: ; display: inline; border-right-color: ; border-left-color: " title="Roomie MVC3 Tasks working" alt="Roomie MVC3 Tasks working" src="http://mypieceoftheinter.net/wp-content/uploads/2011/12/Roomie-MVC3-Tasks-working_thumb1.png" width="800" height="479" /></a></p>
<p>  <span id="more-2205"></span>
<p>The Roomie desktop client communicates with the Roomie web service using a custom protocol that I developed.&#160; Both the server side (web service) and client side (Roomie desktop client) reference the same Visual Studio project to do the communication, so I am guaranteed protocol agreement.&#160; It’s really satisfying to add some functionality or refactor in one place and have the changes propagate to every related component.</p>
<p>Yaaaaay programming!</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/2205/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another novel (and silly) use for Roomie</title>
		<link>http://mypieceoftheinter.net/archives/2160</link>
		<comments>http://mypieceoftheinter.net/archives/2160#comments</comments>
		<pubDate>Mon, 11 Oct 2010 16:35:46 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Roomie!]]></category>
		<category><![CDATA[RoomieScript]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/2160</guid>
		<description><![CDATA[I’ve been working (rather obsessively) on Roomie for the past week.&#160; In specific, I have rewritten the XML-based protocol that allows the desktop client to communicate with the web service.&#160; (Say “hi” to it here.)&#160; The new library (which I call WebCommunicator) is sooo much easier to use than my old one, but still has [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been working (rather obsessively) on Roomie for the past week.&#160; In specific, I have rewritten the XML-based protocol that allows the desktop client to communicate with the web service.&#160; (Say “hi” to it <a href="http://roomie.somewhatgeeky.com/communicator/">here</a>.)&#160; The new library (which I call WebCommunicator) is sooo much easier to use than my old one, but still has all the nifty (and important) encryption and anti-hacking features.&#160; I will eventually publish the protocol as an independent library.&#160; (Give me a bit to use it more and work out all the kinks.)</p>
<p>But enough technical talk.&#160; Lets get to <em>serious business.</em>&#160; Here I have a little RoomieScript that I wrote, just as a proof of concept. </p>
<p><span style="font-family: monospace; white-space: nowrap; color: blue">&lt;<span style="color: maroon">RoomieScript</span>&gt;       <br />&#160; &lt;<span style="color: maroon">ZWave.PowerOff</span>&#160;<span style="color: red">DeviceName</span>=&quot;<span style="color: black"><b>Coffee Pot</b></span>&quot; /&gt;       <br />&#160; &lt;<span style="color: maroon">Core.Loop</span>&gt;       <br />&#160;&#160;&#160; &lt;<span style="color: maroon">ZWave.WaitForChange</span>&#160;<span style="color: red">DeviceName</span>=&quot;<span style="color: black"><b>Coffee Pot</b></span>&quot; <span style="color: red">PollInterval</span>=&quot;<span style="color: black"><b>5 Seconds</b></span>&quot; /&gt;       <br />&#160;&#160;&#160; &lt;<span style="color: maroon">ZWave.PowerOff</span>&#160;<span style="color: red">DeviceName</span>=&quot;<span style="color: black"><b>Coffee Pot</b></span>&quot; /&gt;       <br />&#160;&#160;&#160; &lt;<span style="color: maroon">RoomieBot.TextDavid</span>&#160;<span style="color: red">Text</span>=&quot;<span style="color: black"><b>No coffee!</b></span>&quot; /&gt;       <br />&#160; &lt;/<span style="color: maroon">Core.Loop</span>&gt;       <br />&lt;/<span style="color: maroon">RoomieScript</span>&gt;       <br /></span></p>
<p> <span id="more-2160"></span>
<p>Here Roomie waits until the coffee maker is turned on, then turns it off and sends me a <em>terse</em> text message. Yes, it works!&#160; And yes, I do use Roomie for legitimate things, but ah… it’s so just that much fun to be dumb.</p>
<p>Interested in beta testing Roomie?&#160; Send me a message.</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/2160/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Roomie gets some CSS schooling</title>
		<link>http://mypieceoftheinter.net/archives/2111</link>
		<comments>http://mypieceoftheinter.net/archives/2111#comments</comments>
		<pubDate>Fri, 25 Jun 2010 04:30:45 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Roomie!]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/2111</guid>
		<description><![CDATA[This week I have been furiously re-writing a few key elements of the Roomie website.&#160; Specifically, I scrapped the old device button controls, which you can see here. They were ok, but they were very rigid in use, offering only two different pictures to back the buttons.&#160; Zooming on mobile devices didn’t work so great [...]]]></description>
			<content:encoded><![CDATA[<p>This week I have been furiously re-writing a few key elements of the <a href="http://mypieceoftheinter.net/tag/roomie">Roomie</a> website.&#160; Specifically, I scrapped the old device button controls, which you can see <a href="http://mypieceoftheinter.net/archives/2078">here</a>. They were ok, but they were very rigid in use, offering only two different pictures to back the buttons.&#160; Zooming on mobile devices didn’t work so great either, since the images were PNGs, <a href="http://en.wikipedia.org/wiki/Raster_graphics">raster graphics</a>.&#160; Now I have created a button framework entirely in CSS, HTML, and ASP.NET controls.&#160; Because of this, I can easily create new kinds of controls completely in code, and they even zoom cleanly as well.&#160; My original vision for this was to enable the user to create “virtual device controls”, which would display next to the regular device controls.</p>
<p><a href="http://mypieceoftheinter.net/wp-content/uploads/2010/06/Roomie_home_automation_main_site_on_iPad.png"><img style="border-bottom-color: ; border-top-color: ; display: inline; border-right-color: ; border-left-color: " title="Roomie home automation main site on an iPad" alt="Roomie home automation main site on an iPad" src="http://mypieceoftheinter.net/wp-content/uploads/2010/06/Roomie_home_automation_main_site_on_iPad_thumb.png" width="640" height="480" /></a> </p>
<p> <span id="more-2111"></span>
<p>As you can see above, I have the <a href="http://roomie.somewhatgeeky.com">Roomie website’s main page</a> displaying on an iPad.&#160; The first two controls are an example of the new feature.&#160; Before I go to bed I might want to click the “set alarm” button, which would run a RoomieScript that I wrote that wakes me up in the morning.&#160; The same deal goes for coffee. (Of course, making coffee is also part of the alarm routine.)&#160; It would be easy to imagine many other virtual devices.&#160; Eventually I will likely make a “basement” device, which would have buttons like “Movie” for nice movie lighting, “all on”, “all off”, and of course, “PAAARRTAAYY!”</p>
<p>I mentioned that these controls were highly customizable in code.&#160; In the <a href="http://en.wikipedia.org/wiki/C_(programming_language)">C#</a> <a href="http://en.wikipedia.org/wiki/ASP.NET#Code-behind_model">code-behind</a> I can set the size of these controls with pixel precision.&#160; That came in really handy when I made an iPad-specific page, which resizes the controls to be just the right width to fill the screen horizontally and high enough for easy pressing with a finger.&#160; A tweak of the sizes only takes a few seconds.</p>
<p><a href="http://mypieceoftheinter.net/wp-content/uploads/2010/06/Roomie_home_automation_touch_site_on_iPad.png"><img style="border-bottom-color: ; border-top-color: ; display: inline; border-right-color: ; border-left-color: " title="Roomie home automation touch site on an iPad" alt="Roomie home automation touch site on an iPad" src="http://mypieceoftheinter.net/wp-content/uploads/2010/06/Roomie_home_automation_touch_site_on_iPad_thumb.png" width="360" height="480" /></a> </p>
<p>All of this has been a really good learning experience for me, and of course I am <em>far</em> from done.&#160; I’ve applied so much of what I’ve learned writing Roomie, which is just for fun, to other projects at work and in school.&#160; If you want to help test Roomie, <a href="http://davidmcgrath.com/contact">send me an email</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/2111/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arcadia Preview 2</title>
		<link>http://mypieceoftheinter.net/archives/2025</link>
		<comments>http://mypieceoftheinter.net/archives/2025#comments</comments>
		<pubDate>Wed, 24 Mar 2010 05:42:46 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Arcadia]]></category>
		<category><![CDATA[Beta Software]]></category>
		<category><![CDATA[Beta Testing]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[ROMs]]></category>
		<category><![CDATA[Software Testing]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/2025</guid>
		<description><![CDATA[Arcadia Preview 2 (version 1.0.489.0) is finally here! I’m really pleased with Arcadia’s progress.&#160; Arcadia’s features currently include selecting repositories (where game files are kept), scanning for games (based on a user-editable vocabulary of platforms), and (most importantly) searching for and running ROMs in your favorite emulators of choice. Thanks to FlotsamX for his usability [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mypieceoftheinter.net/wp-content/uploads/2010/03/arcadia_road_sign_on_I81.jpg"><img style="display: inline" title="Arcadia sign on I-81 South" alt="Arcadia sign on I-81 South" src="http://mypieceoftheinter.net/wp-content/uploads/2010/03/arcadia_road_sign_on_I81_thumb.jpg" width="639" height="480" /></a> </p>
<p><a href="http://mypieceoftheinter.net/tag/arcadia">Arcadia</a> Preview 2 (version 1.0.489.0) is finally here!</p>
<p>  <span id="more-2025"></span>
<p><img style="border-bottom-color: ; border-top-color: ; display: inline; border-right-color: ; border-left-color: " title="Arcadia Preview 2 screenshot" alt="Arcadia Preview 2 screenshot" src="http://mypieceoftheinter.net/wp-content/uploads/2010/03/Arcadia_preview_2_screenshot1.png" width="755" height="409" /> </p>
<p>I’m really pleased with Arcadia’s progress.&#160; Arcadia’s features currently include selecting repositories (where game files are kept), scanning for games (based on a user-editable vocabulary of platforms), and (most importantly) searching for and running ROMs in your favorite emulators of choice.</p>
<p>Thanks to <a href="http://www.google.com/search?q=flotsamx">FlotsamX</a> for his usability feedback for Preview 1.</p>
<p><a href="http://download.somewhatgeeky.com/Arcadia_1.0.489.0">Download Arcadia Preview 2 here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/2025/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hey! Roomie isn&#8217;t dead either!</title>
		<link>http://mypieceoftheinter.net/archives/1978</link>
		<comments>http://mypieceoftheinter.net/archives/1978#comments</comments>
		<pubDate>Fri, 12 Feb 2010 04:39:38 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Arcadia]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[FRI]]></category>
		<category><![CDATA[Roomie!]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Visual Studio Express]]></category>
		<category><![CDATA[Z-Wave]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1978</guid>
		<description><![CDATA[After completely rewriting FRI from scratch (and renaming it Arcadia), I have decided to rewrite my other big project, Roomie.&#160; This absolutely needed to be done.&#160; Roomie had some good functionality, but I had hit the limit for its extensibility.&#160; Roomie’s engine was a monolithic blob of ugly code, with very little room to make [...]]]></description>
			<content:encoded><![CDATA[<p>After completely rewriting <a href="http://mypieceoftheinter.net/tag/FRI">FRI</a> from scratch (and renaming it <a href="http://mypieceoftheinter.net/tag/Arcadia">Arcadia</a>), I have decided to rewrite my other big project, <a href="http://mypieceoftheinter.net/tag/roomie">Roomie</a>.&#160; This absolutely needed to be done.&#160; Roomie had some good functionality, but I had hit the limit for its extensibility.&#160; Roomie’s engine was a monolithic blob of ugly code, with very little room to make it into a full scripting language with features like custom functions and if statements.&#160; My redesign of Roomie, which I call RoomieRemake for now, is completely expandable, is properly multithreaded, and has all of the potential to be a robust, featurefull scripting language.&#160; Just like Arcadia, I am proud to declare that RoomieRemake shares absolutely no code with its predecessor.&#160; Not even a single copy/pasted line of code!&#160; More on that in a bit, but first an end scenario:     <br /><img style="display: inline" title="Roomie Text Message" alt="Roomie Text Message" src="http://mypieceoftheinter.net/wp-content/uploads/2010/02/roomie_bot_text_message.png" width="240" height="400" /> </p>
<p> <span id="more-1978"></span>
<p>I’m not sure why I instinctively personify computers as needy and with low self esteem, but anyway…</p>
<p>In rewriting Roomie, I built up the infrastructure in the core engine to allow me to easily add commands.&#160; In the old Roomie, I tried to organize commands’ code as best I could, but I still ended up with big files with lots of functions, and a hulking switch statement at the top.    </p>
<p>Here is the switch statement for the <a href="http://en.wikipedia.org/wiki/Z-Wave">Z-Wave</a> commands code file:</p>
<p><img style="border-bottom-color: ; border-top-color: ; display: inline; border-right-color: ; border-left-color: " title="Old Roomy: Ugly switch statement of doom" alt="Old Roomy: Ugly switch statement of doom" src="http://mypieceoftheinter.net/wp-content/uploads/2010/02/ugly_command_switch1.png" width="579" height="618" /> </p>
<p>There was also another junction point higher up the line that would decide which kind of command was being called.&#160; In RoomieRemake, I do things a bit more generically.&#160; Every command is represented by a class, which all derive from a “Command” class.&#160; That means I can just have this:    <br /><img style="display: inline" title="Roomie Remake: more elegant command selection" alt="Roomie Remake: more elegant command selection" src="http://mypieceoftheinter.net/wp-content/uploads/2010/02/roome_better_command_selection.png" width="741" height="156" /> </p>
<p>As I continue development I will optimize things like command selection, but the point here is that I don’t have a whole bunch of special cases for different kinds of commands.&#160; This is just part of the code that makes a command run, of course, but part of the redesign included breaking up functionality into neat, orderly bundles.&#160; The master list of commands is populated dynamically with <a href="http://en.wikipedia.org/wiki/Reflection_(computer_science)">reflection</a>.</p>
<p>A big time-waster in the old Roomie was validating variables, so in my new approach that is all handled in the definition of a higher-level “Command” class, while subclasses of Command register what arguments they expect, their types, and even default values if applicable.</p>
<p>Here is the old code for the ZWave.PowerOn and ZWave.PowerOff commands.&#160; Look at all of the duplicate code.&#160; Several times after redesigns I would have to go and manually change many lines of very similar code.</p>
<p><img style="display: inline" title="Old Roomie: repetative code" alt="Old Roomie: repetative code" src="http://mypieceoftheinter.net/wp-content/uploads/2010/02/roomie_repetative_code.png" width="596" height="674" /> </p>
<p>Comparing that to the new approach, here is the ZWave.PowerOn command:</p>
<p><img style="display: inline" title="Roomie Remake: conciseness via inheritance" alt="Roomie Remake: conciseness via inheritance" src="http://mypieceoftheinter.net/wp-content/uploads/2010/02/roomie_code_conciseness_via_inheritance.png" width="542" height="247" />     <br />By the time the command class is actually defined, Command has been abstracted into ZWave command, which has been further abstracted to SingleZWaveDeviceControlCommand.&#160; Verbose, sure, but by the time I get to defining the command, I know that all of the validating of variables and finding of the device and connecting to the ZWave controller have already been taken care of.&#160; Plus, if I ever want to add functionality to a group of similar commands, I can just write in the code in a parent class’s definition.&#160; That’s inheritance and type safety at work.</p>
<p>You might have noticed that I didn’t include the whole method signature in the above screenshot.&#160; That’s because it’s reaaallly long.&#160; Some might see this as a disadvantage, but a big problem I had with the old Roomie is not having enough information to work with to make the proper decisions.&#160; Basic commands recieve as arguments the CommandInterpreter that is calling them, a Scope object that represents the nested scopes containing variables, and an XmlNode containing the original command XML.&#160; (Did you remember that RoomieScript is an XML based scripting language?)</p>
<p>That Z-Wave command was already really abstracted, with arguments defined in higher abstract classes, so here’s an example of a command that derives directly from Command:    <br /><img style="display: inline" title="New Roomie: Output.Print command" alt="New Roomie: Output.Print command" src="http://mypieceoftheinter.net/wp-content/uploads/2010/02/image.png" width="503" height="282" /> </p>
<p>Here the constructor calls a method defined in the Command class that defines an argument of type String.&#160; By the time Execute_Definition is called, the engine has already verified that the Text argument is specified.&#160; If there’s a problem, the engine reacts appropriately.&#160; The CommandInterpreter, which represents a thread, doesn’t care about all of these extensions to Comamnd, of course.&#160; It simply calls the selected command’s “Execute” method, which is concrete in the base Command class.</p>
<p>Finally, here’s a shot of the two Solution Explorer windows.&#160; On the left is the old Roomie, and on the right is RoomieRemake.&#160; You can see that in the remake, extra functionality is in other projects, which RoomieRemake hooks into as plugins at runtime.&#160; That way, anyone could write a pluggin for Roomie.</p>
<p><img style="display: inline" title="Roomie vs. Roomie Remake" alt="Roomie vs. Roomie Remake" src="http://mypieceoftheinter.net/wp-content/uploads/2010/02/roome_vs_roomie_remake.png" width="588" height="591" /> </p>
<p>SO that’s what I’m working on.&#160; I hope to release this sometime in the near future.&#160; If you’re interested in testing, either Roomie or Arcadia, shoot me an email.&#160; If you think I’m a huge <a href="http://en.wikipedia.org/wiki/Nerd">nerd</a>, well you’re wrong.&#160; I’m more accurately a gigantic <a href="http://en.wikipedia.org/wiki/Geek#Reclamation_and_self-identification">geek</a>, but you could call me a dork anyway. <img src='http://mypieceoftheinter.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1978/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Roomie Mobile Update</title>
		<link>http://mypieceoftheinter.net/archives/1962</link>
		<comments>http://mypieceoftheinter.net/archives/1962#comments</comments>
		<pubDate>Thu, 28 Jan 2010 17:51:37 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Demos]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[Roomie Mobile]]></category>
		<category><![CDATA[Roomie!]]></category>
		<category><![CDATA[Smart Homes]]></category>
		<category><![CDATA[Zune HD]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1962</guid>
		<description><![CDATA[Remember Roomie?&#160; Today I updated Roomie Mobile.&#160; This version includes a second dimming option and more touch-friendly buttons.&#160; Check it out in the video below. (link)]]></description>
			<content:encoded><![CDATA[<p>Remember <a href="http://mypieceoftheinter.net/tag/roomie">Roomie</a>?&#160; Today I updated Roomie Mobile.&#160; This version includes a second dimming option and more touch-friendly buttons.&#160; Check it out in the video below.</p>
<p><a href="http://mypieceoftheinter.net/wp-content/uploads/2010/01/Roomie_Mobile_on_Zune_HD.jpg"><img style="border-bottom-color: ; border-top-color: ; display: inline; border-right-color: ; border-left-color: " title="Roomie Mobile on a Zune HD" alt="Roomie Mobile on a Zune HD" src="http://mypieceoftheinter.net/wp-content/uploads/2010/01/Roomie_Mobile_on_Zune_HD_thumb.jpg" width="640" height="480" /></a> </p>
<p> <span id="more-1962"></span>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:1e23bdcc-5eff-481b-aeab-3539cb07cd90" class="wlWriterEditableSmartContent">
<div><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/Jx4H5Z8u5ew&amp;hl=en"></param><embed src="http://www.youtube.com/v/Jx4H5Z8u5ew&amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"></embed></object></div>
</div>
<p>(<a href="http://www.youtube.com/watch?v=Jx4H5Z8u5ew">link</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1962/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FRI is dead, but its spirit lives on</title>
		<link>http://mypieceoftheinter.net/archives/1839</link>
		<comments>http://mypieceoftheinter.net/archives/1839#comments</comments>
		<pubDate>Mon, 12 Oct 2009 04:01:38 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Arcadia]]></category>
		<category><![CDATA[C Plus Plus]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[Emulation]]></category>
		<category><![CDATA[FRI]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Regular Expressions]]></category>
		<category><![CDATA[ROMs]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/?p=1839</guid>
		<description><![CDATA[It&#8217;s been almost a year since I&#8217;ve updated FRI, my ROM library program. FRI is now officially dead, but not completely gone. Since I started working on FRI I have gained a lot more programming experience. I started writing the thing when I was still a C# novice. Between then and now I have written [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been <a href="http://mypieceoftheinter.net/archives/990">almost a year since</a> I&#8217;ve updated <a href="http://mypieceoftheinter.net/tag/fri">FRI</a>, my ROM library program.  FRI is now officially dead, but not completely gone.  Since I started working on FRI I have gained a lot more programming experience.  I started writing the thing when I was still a <a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)">C#</a> novice.  Between then and now I have written an elaborate intranet site in <a href="http://en.wikipedia.org/wiki/Asp.net">ASP.NET</a>, debugged and written C++ applications, and have learned the true value of a <a href="http://en.wikipedia.org/wiki/Regular_expression">regular expression</a>.  I look at FRI&#8217;s code now and am a little grossed out.   I decided that if I was going to make any more improvements to FRI, I&#8217;d have to start over and rearchitect the whole thing.  The name of this new project: Arcadia.</p>
<p>With Arcadia I have committed to research everything that I suspect will make for a better design.  Because of this, Archaida&#8217;s backend is shaping up to be elegant and efficient.  I researched how to do inheritance in C#, and have used that to save myself from writing a lot of code.  This has drastically decreased development and testing time.  I learned how to use basic regular expressions over the summer, and have used them in some areas (more on that later).  For the frontend I decided to switch from <a href="http://en.wikipedia.org/wiki/Windows_Forms">WinForms </a>to <a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation">WPF</a>.  All I can say is that <a href="http://en.wikipedia.org/wiki/Databinding">databinding </a>is epic, and I still have a lot more to learn about it.</p>
<p>Here&#8217;s a shot of Arcadia in its current form:<br />
<br />
<img class="alignnone size-full wp-image-1842" title="Arcadia prealpha" src="http://mypieceoftheinter.net/wp-content/uploads/2009/10/archadia_prealpha.PNG" alt="Arcadia prealpha" width="729" height="533" /></p>
<p><span id="more-1839"></span></p>
<p>I&#8217;ll hopefully release an alpha soon.</p>
<p><em>edit October 12, 2009 at 10:57am:</em><br />
<br />  Also generics.  Generics are amazing.  (More on that later, too.)</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1839/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Roomie is getting more powerful!</title>
		<link>http://mypieceoftheinter.net/archives/1768</link>
		<comments>http://mypieceoftheinter.net/archives/1768#comments</comments>
		<pubDate>Tue, 04 Aug 2009 02:37:51 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[Roomie!]]></category>
		<category><![CDATA[RoomieScript]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Z-Wave]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/?p=1768</guid>
		<description><![CDATA[I&#8217;ve been making more improvements to Roomie (which I still haven&#8217;t released). Now a RoomieScript can send a RoomieScript to another computer. This makes collaborated scripts much easier. The script below gets two of my computers, the Home Server and Desktop Computer, to wake me up in the morning. The Home Server handles the Z-Wave [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been making more improvements to Roomie (which I still haven&#8217;t released). Now a RoomieScript can send a RoomieScript to another computer. This makes collaborated scripts much easier. The script below gets two of my computers, the Home Server and Desktop Computer, to wake me up in the morning. The Home Server handles the Z-Wave stuff—turning the lights on and off—and the Desktop Computer handles the music.</p>
<p><span id="more-1768"></span></p>
<p><span style="font-family: monospace; white-space: nowrap; color: blue">&lt;<span style="color: maroon">roomieScript</span>&gt; </p>
<p>&#160; <span style="font-style: italic; color: grey">&lt;!&#8211;&#160; this sends a script to the Desktop Computer&#160; &#8211;&gt;</span> </p>
<p>&#160; <span style="font-style: italic; color: grey">&lt;!&#8211;&#160; it&#8217;s really just to confirm that both computers are turned on&#160; &#8211;&gt;</span> </p>
<p>&#160; &lt;<span style="color: maroon">webScripts.sendScript</span>&#160;<span style="color: red">targetComputerName</span>=&quot;<span style="color: black"><b>Desktop Computer</b></span>&quot;&gt; </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">speak</span>&gt; </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: black"><b><br />
        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; all set! </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b></span></p>
<p>&#160;&#160;&#160; &lt;/<span style="color: maroon">speak</span>&gt; </p>
<p>&#160; &lt;/<span style="color: maroon">webScripts.sendScript</span>&gt; </p>
<p>&#160; <span style="font-style: italic; color: grey">&lt;!&#8211; wait until the morning&#160; &#8211;&gt;</span> </p>
<p>&#160; &lt;<span style="color: maroon">waitUntil</span>&#160;<span style="color: red">hour</span>=&quot;<span style="color: black"><b>6</b></span>&quot; <span style="color: red">minute</span>=&quot;<span style="color: black"><b>0</b></span>&quot; <span style="color: red">second</span>=&quot;<span style="color: black"><b>0</b></span>&quot; /&gt; </p>
<p>&#160; <span style="font-style: italic; color: grey">&lt;!&#8211;&#160; send a script to Home Server to handle the lights &#8211;&gt;</span> </p>
<p>&#160; &lt;<span style="color: maroon">webScripts.sendScript</span>&#160;<span style="color: red">targetComputerName</span>=&quot;<span style="color: black"><b>Home Server</b></span>&quot;&gt; </p>
<p>&#160;&#160;&#160; <span style="font-style: italic; color: grey">&lt;!&#8211;&#160; dim the Door Lamp and Desk Light on slowly and simultaniously&#160; &#8211;&gt;</span> </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">insertScript</span>&#160;<span style="color: red">runInNewThread</span>=&quot;<span style="color: black"><b>yes</b></span>&quot;&gt; </p>
<p>&#160;&#160;&#160;&#160;&#160; <span style="font-style: italic; color: grey">&lt;!&#8211;&#160; dim the Bed Lamp on faster than the Bed Lamp&#160; &#8211;&gt;</span> </p>
<p>&#160;&#160;&#160;&#160;&#160; &lt;<span style="color: maroon">zWave.slowDimOn</span>&#160;<span style="color: red">module</span>=&quot;<span style="color: black"><b>Bed Lamp</b></span>&quot; <span style="color: red">durration</span>=&quot;<span style="color: black"><b>280</b></span>&quot; /&gt; </p>
<p>&#160;&#160;&#160; &lt;/<span style="color: maroon">insertScript</span>&gt; </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">insertScript</span>&#160;<span style="color: red">runInNewThread</span>=&quot;<span style="color: black"><b>yes</b></span>&quot;&gt; </p>
<p>&#160;&#160;&#160;&#160;&#160; &lt;<span style="color: maroon">zWave.slowDimOn</span>&#160;<span style="color: red">module</span>=&quot;<span style="color: black"><b>Door Lamp</b></span>&quot; <span style="color: red">durration</span>=&quot;<span style="color: black"><b>120</b></span>&quot; /&gt; </p>
<p>&#160;&#160;&#160; &lt;/<span style="color: maroon">insertScript</span>&gt; </p>
<p>&#160;&#160;&#160; <span style="font-style: italic; color: grey">&lt;!&#8211;&#160; wait an hour and a half, then turn off all the lights&#160; &#8211;&gt;</span> </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">waitFor</span>&#160;<span style="color: red">seconds</span>=&quot;<span style="color: black"><b>5400</b></span>&quot; /&gt; </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">zWave.powerOff</span>&#160;<span style="color: red">module</span>=&quot;<span style="color: black"><b>Desk Light</b></span>&quot; /&gt; </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">zWave.powerOff</span>&#160;<span style="color: red">module</span>=&quot;<span style="color: black"><b>Door Lamp</b></span>&quot; /&gt; </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">zWave.powerOff</span>&#160;<span style="color: red">module</span>=&quot;<span style="color: black"><b>Bed Lamp</b></span>&quot; /&gt; </p>
<p>&#160; &lt;/<span style="color: maroon">webScripts.sendScript</span>&gt; </p>
<p>&#160; &lt;<span style="color: maroon">webScripts.sendScript</span>&#160;<span style="color: red">targetComputerName</span>=&quot;<span style="color: black"><b>Desktop Computer</b></span>&quot;&gt; </p>
<p>&#160;&#160;&#160; <span style="font-style: italic; color: grey">&lt;!&#8211;&#160; wait three minutes after the light dimming has begun, then play music&#160; &#8211;&gt;</span> </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">waitFor</span>&#160;<span style="color: red">seconds</span>=&quot;<span style="color: black"><b>180</b></span>&quot; /&gt; </p>
<p>&#160;&#160;&#160; &lt;<span style="color: maroon">openFile</span>&#160;<span style="color: red">path</span>=&quot;<span style="color: black"><b>F:/music/playlists/Wake Up.wpl</b></span>&quot; /&gt; </p>
<p>&#160; &lt;/<span style="color: maroon">webScripts.sendScript</span>&gt; </p>
<p>&lt;/<span style="color: maroon">roomieScript</span>&gt; </p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1768/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ How-To: Print a Buffer</title>
		<link>http://mypieceoftheinter.net/archives/1749</link>
		<comments>http://mypieceoftheinter.net/archives/1749#comments</comments>
		<pubDate>Sun, 02 Aug 2009 00:12:10 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[g++]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Visual C++]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1749</guid>
		<description><![CDATA[I was recently writing a command line application in C++ that parses raw binary.&#160; I thought it would be really nice to be able to print different parts of memory to the screen as the program runs.&#160; I’ve included well-commented code and a usage example. 1: //needed for printf() 2: #include &#60;stdio.h&#62; 3:&#160; 4: //needed [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently writing a command line application in C++ that parses raw binary.&#160; I thought it would be really nice to be able to print different parts of memory to the screen as the program runs.&#160; I’ve included well-commented code and a usage example.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; max-height: 300px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #008000">//needed for printf()</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> <span style="color: #cc6633">#include</span> &lt;stdio.h&gt;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> <span style="color: #008000">//needed for strlen()</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> <span style="color: #cc6633">#include</span> &lt;string.h&gt;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span> <span style="color: #008000">// prints the contents of memory in hex and ascii.</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span> <span style="color: #008000">// starts at the location of the pointer &quot;start&quot;</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span> <span style="color: #008000">// prints &quot;length&quot; bytes of memory.</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span> <span style="color: #0000ff">void</span> Print_Memory(<span style="color: #0000ff">const</span> <span style="color: #0000ff">unsigned</span> <span style="color: #0000ff">char</span> * start, <span style="color: #0000ff">unsigned</span> <span style="color: #0000ff">int</span> length)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>     <span style="color: #008000">//create row, col, and i.  Set i to 0</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>     <span style="color: #0000ff">int</span> row, col, i = 0;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>     <span style="color: #008000">//iterate through the rows, which will be 16 bytes of memory wide</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>     <span style="color: #0000ff">for</span>(row = 0; (i + 1) &lt; length; row++)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span>         <span style="color: #008000">//print hex representation</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span>         <span style="color: #0000ff">for</span>(col = 0; col&lt;16; col++)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20">  20:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21">  21:</span>             <span style="color: #008000">//calculate the current index</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22">  22:</span>             i = row*16+col;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23">  23:</span>             </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24">  24:</span>             <span style="color: #008000">//divides a row of 16 into two columns of 8</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum25">  25:</span>             <span style="color: #0000ff">if</span>(col==8)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum26">  26:</span>                 printf(<span style="color: #006080">&quot; &quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum27">  27:</span>             </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum28">  28:</span>             <span style="color: #008000">//print the hex value if the current index is in range.</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum29">  29:</span>             <span style="color: #0000ff">if</span>(i&lt;length)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum30">  30:</span>                 printf(<span style="color: #006080">&quot;%02X&quot;</span>, start[i]);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum31">  31:</span>             <span style="color: #008000">//print a blank if the current index is past the end</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum32">  32:</span>             <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum33">  33:</span>                 printf(<span style="color: #006080">&quot;  &quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum34">  34:</span>             </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum35">  35:</span>             <span style="color: #008000">//print a space to keep the values separate</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum36">  36:</span>             printf(<span style="color: #006080">&quot; &quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum37">  37:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum38">  38:</span>         </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum39">  39:</span>         <span style="color: #008000">//create a vertial seperator between hex and ascii representations</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum40">  40:</span>         printf(<span style="color: #006080">&quot; &quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum41">  41:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum42">  42:</span>         <span style="color: #008000">//print ascii representation</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum43">  43:</span>         <span style="color: #0000ff">for</span>(col = 0; col&lt;16; col++)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum44">  44:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum45">  45:</span>             <span style="color: #008000">//calculate the current index</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum46">  46:</span>             i = row*16+col;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum47">  47:</span>             </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum48">  48:</span>             <span style="color: #008000">//divides a row of 16 into two coumns of 8</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum49">  49:</span>             <span style="color: #0000ff">if</span>(col==8)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum50">  50:</span>                 printf(<span style="color: #006080">&quot;  &quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum51">  51:</span>             </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum52">  52:</span>             <span style="color: #008000">//print the value if it is in range</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum53">  53:</span>             <span style="color: #0000ff">if</span>(i&lt;length)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum54">  54:</span>             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum55">  55:</span>                 <span style="color: #008000">//print the ascii value if applicable</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum56">  56:</span>                 <span style="color: #0000ff">if</span>(start[i]&gt;0x20 &amp;&amp; start[i]&lt;0x7F)  <span style="color: #008000">//A-Z</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum57">  57:</span>                     printf(<span style="color: #006080">&quot;%c&quot;</span>, start[i]);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum58">  58:</span>                 <span style="color: #008000">//print a period if the value is not printable</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum59">  59:</span>                 <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum60">  60:</span>                     printf(<span style="color: #006080">&quot;.&quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum61">  61:</span>             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum62">  62:</span>             <span style="color: #008000">//nothing else to print, so break out of this for loop</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum63">  63:</span>             <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum64">  64:</span>                 <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum65">  65:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum66">  66:</span>         </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum67">  67:</span>         <span style="color: #008000">//create a new row</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum68">  68:</span>         printf(<span style="color: #006080">&quot;\n&quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum69">  69:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum70">  70:</span> }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum71">  71:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum72">  72:</span> <span style="color: #008000">// Prints the contents of memory in hex and ascii.</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum73">  73:</span> <span style="color: #008000">// Prints the memory between and including the</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum74">  74:</span> <span style="color: #008000">// two &quot;end1&quot; and &quot;end2&quot; pointers.</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum75">  75:</span> <span style="color: #0000ff">void</span> Print_Memory(<span style="color: #0000ff">const</span> <span style="color: #0000ff">unsigned</span> <span style="color: #0000ff">char</span> * end1, <span style="color: #0000ff">const</span> <span style="color: #0000ff">unsigned</span> <span style="color: #0000ff">char</span> * end2)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum76">  76:</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum77">  77:</span>     <span style="color: #0000ff">if</span>(end2 &gt;= end1)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum78">  78:</span>         Print_Memory(end1, end2 - end1 + 1);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum79">  79:</span>     <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum80">  80:</span>         Print_Memory(end2, end1 - end2 + 1);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum81">  81:</span> }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum82">  82:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum83">  83:</span> <span style="color: #0000ff">int</span> main(<span style="color: #0000ff">int</span> argc, <span style="color: #0000ff">char</span> **args)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum84">  84:</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum85">  85:</span>     <span style="color: #0000ff">const</span> <span style="color: #0000ff">char</span> start [] = <span style="color: #006080">&quot;hi there!  You're looking at me in memory!&quot;</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum86">  86:</span>     <span style="color: #0000ff">const</span> <span style="color: #0000ff">char</span> * end = start + (<span style="color: #0000ff">int</span>)strlen(start);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum87">  87:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum88">  88:</span>     Print_Memory((<span style="color: #0000ff">unsigned</span> <span style="color: #0000ff">char</span> *)start, (<span style="color: #0000ff">unsigned</span> <span style="color: #0000ff">char</span> *)end);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum89">  89:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum90">  90:</span>     <span style="color: #0000ff">return</span> 0;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &quot;Courier New&quot;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum91">  91:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p><span id="more-1749"></span></p>
<p><em>I’ve compiled this code with both </em><a href="http://en.wikipedia.org/wiki/G%2B%2B"><em>g++</em></a><em> and </em><a href="http://en.wikipedia.org/wiki/Visual_C%2B%2B"><em>Visual C++.</em></a></p>
<p><a href="http://download.somewhatgeeky.com/?token=print_memory.cpp">download here</a></p>
<p>Here is the program’s output:</p>
<p>
<pre><code>68 69 20 74 68 65 72 65  21 20 20 59 6F 75 27 72  hi.there  !..You'r
65 20 6C 6F 6F 6B 69 6E  67 20 61 74 20 6D 65 20  e.lookin  g.at.me.
69 6E 20 6D 65 6D 6F 72  79 21 00                 in.memor  y!.</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1749/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Roomie Mobile Demo</title>
		<link>http://mypieceoftheinter.net/archives/1634</link>
		<comments>http://mypieceoftheinter.net/archives/1634#comments</comments>
		<pubDate>Tue, 26 May 2009 03:24:34 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[Roomie!]]></category>
		<category><![CDATA[Smart Homes]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Z-Wave]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1634</guid>
		<description><![CDATA[Since school is out and work hasn’t started yet, I have finally been able to catch up on some coding.&#160; I know it’s geeky, but it’s fun!&#160; Today I made some updates to Roomie, adding variables and functions to RoomieScript, the scripting language that the Roomie desktop application interprets.&#160; Since I got a smart phone [...]]]></description>
			<content:encoded><![CDATA[<p>Since school is out and work hasn’t started yet, I have <em>finally</em> been able to catch up on some coding.&#160; I know it’s geeky, but it’s fun!&#160; Today I made some updates to Roomie, adding variables and functions to <a href="http://mypieceoftheinter.net/archives/1578">RoomieScript</a>, the scripting language that the Roomie desktop application interprets.&#160; Since I got a smart phone I have become in mobile development.&#160; Today I took an hour or so to develop a <a href="http://roomie.somewhatgeeky.com/mobile/">mobile version</a> of the <a href="http://roomie.somewhatgeeky.com">Roomie website</a>.&#160; (Right now both websites are technically open to the public, but without the desktop application, which I have yet to release, the websites are useless to outsiders.)    <br /><img style="display: inline" title="Roomie Mobile in Internet Explorer &amp; Windows Mobile 6.1 Professional" alt="Roomie Mobile in Internet Explorer &amp; Windows Mobile 6.1 Professional" src="http://mypieceoftheinter.net/wp-content/uploads/2009/05/roomie-mobile-in-internet-explorer.png" width="240" height="400" /></p>
<p>Here’s a video:</p>
<p> <span id="more-1634"></span>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:4f1c7d78-4924-4fb7-80a2-8c572dfc3748" class="wlWriterEditableSmartContent">
<div><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/QlDxAgy1HA4&amp;hl=en"></param><embed src="http://www.youtube.com/v/QlDxAgy1HA4&amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"></embed></object></div>
</div>
<p><a href="http://www.youtube.com/watch?v=QlDxAgy1HA4">YouTube link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1634/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RoomieScript demo</title>
		<link>http://mypieceoftheinter.net/archives/1578</link>
		<comments>http://mypieceoftheinter.net/archives/1578#comments</comments>
		<pubDate>Wed, 15 Apr 2009 17:02:33 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Demos]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[ControlThink]]></category>
		<category><![CDATA[Roomie!]]></category>
		<category><![CDATA[RoomieScript]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[X10]]></category>
		<category><![CDATA[Z-Wave]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1578</guid>
		<description><![CDATA[I gave a presentation for my ENGE 1104 (Exploration of a Digital Future) class about home automation.&#160; My team members talked about X10, Z-Wave, ControlThink’s SDK, and some project ideas.&#160; I gave a brief overview of a project that I have been working on sporadically for a couple years, Roomie.&#160; In doing so, I for [...]]]></description>
			<content:encoded><![CDATA[<p>I gave a presentation for my ENGE 1104 (Exploration of a Digital Future) class about home automation.&#160; My team members talked about <a href="http://en.wikipedia.org/wiki/X10_(industry_standard)">X10</a>, <a href="http://en.wikipedia.org/wiki/Z-wave">Z-Wave</a>, <a href="http://controlthink.com/zwavesdk.htm">ControlThink’s SDK</a>, and some project ideas.&#160; I gave a brief overview of a project that I have been working on sporadically for a couple years, <a href="http://redirect.somewhatgeeky.com/?token=roomie">Roomie</a>.&#160; In doing so, I for created some documentation, so I figured I’d publish some of it here.&#160; Here is an example of RoomieScript and it’s execution:   <br /><img style="display: inline" title="RoomieScript sample" alt="RoomieScript sample" src="http://mypieceoftheinter.net/wp-content/uploads/2009/04/roomiescript-sample1.png" width="640" height="640" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1578/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DVD Cover Art Finder version 1.1.0.0</title>
		<link>http://mypieceoftheinter.net/archives/1435</link>
		<comments>http://mypieceoftheinter.net/archives/1435#comments</comments>
		<pubDate>Sat, 21 Feb 2009 22:13:00 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[DVD Cover Art Finder]]></category>
		<category><![CDATA[DVDs]]></category>
		<category><![CDATA[Movies]]></category>
		<category><![CDATA[Ripping]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1435</guid>
		<description><![CDATA[I just finished making some updates to DVD Cover Art Finder.&#160; It now has some new features and fewer bugs! Download DVD Cover Art Finder version 1.1.0.0 here Download DVD Cover Art Finder version 1.1.0.0 (source code) here This release of DVD Cover Art Finder includes the ability to save the list of DVDs as [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished making some updates to DVD Cover Art Finder.&#160; It now has some new features and fewer bugs!    <br /><a href="http://mypieceoftheinter.net/wp-content/uploads/2009/02/dvdcoverartfinderversion1100.png"><img style="display: inline" title="dvd cover art finder version 1.1.0.0" alt="dvd cover art finder version 1.1.0.0" src="http://mypieceoftheinter.net/wp-content/uploads/2009/02/dvdcoverartfinderversion1100-thumb.png" width="640" height="439" /></a></p>
<p> <span id="more-1435"></span>
<p><a href="http://download.somewhatgeeky.com/?token=Dvd_Cover_Art_Finder_version_1.1.0.0">Download DVD Cover Art Finder version 1.1.0.0 here</a></p>
<p><a href="http://download.somewhatgeeky.com/?token=DVD_Cover_Art_Finder_version_1.1.0.0_(source_code)">Download DVD Cover Art Finder version 1.1.0.0 (source code) here</a></p>
<p>This release of DVD Cover Art Finder includes the ability to save the list of DVDs as an HTML document for printing or posting on a website.&#160; (I copied the HTML into a Facebook note to document my list of DVDs.)&#160; In addition, now the user can right-click on an item in the list of DVDs to play the DVD, open the DVD’s folder, or delete the DVD.</p>
<p>This version also has the “Load Automatically” option for cover art disabled by default.&#160; In using the program, that caught me up a lot.&#160; It also has a few simple look-and-feel updates.&#160; For example, the DVDs in the list of DVDs no longer display empty square brackets if the DVD has no disk label.</p>
<p>For more information about how to use DVD Cover Art Finder, check out <a href="http://mypieceoftheinter.net/archives/1133">the post about version 1.0.0.0</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1435/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>DVD Cover Art Finder version 1.0.0.0</title>
		<link>http://mypieceoftheinter.net/archives/1133</link>
		<comments>http://mypieceoftheinter.net/archives/1133#comments</comments>
		<pubDate>Tue, 30 Dec 2008 02:44:34 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Demos]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[DVD Cover Art Finder]]></category>
		<category><![CDATA[DVDs]]></category>
		<category><![CDATA[Movies]]></category>
		<category><![CDATA[Ripping]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1133</guid>
		<description><![CDATA[As promised, here is the first release of DVD Cover Art Finder (version 1.0.0.0), along with the source code.&#160; Read on for download links and a usage tutorial. &#160; Download DVD Cover Art Finder version 1.0.0.0 here Download DVD Cover Art Finder version 1.0.0.0 Source Code here (open with Visual C# 2008 Express) This usage [...]]]></description>
			<content:encoded><![CDATA[<p>As promised, here is the first release of DVD Cover Art Finder (version 1.0.0.0), along with the source code.&#160; Read on for download links and a usage tutorial.   <br /><img style="display: inline" title="dvd cover art finder icon on desktop" alt="dvd cover art finder icon on desktop" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfindericonondesktop1.png" width="252" height="263" /></p>
<p> <span id="more-1133"></span>
<p>&#160;</p>
<p><a href="http://download.somewhatgeeky.com/?token=DVD_Cover_Art_Finder_version_1.0.0.0">Download DVD Cover Art Finder version 1.0.0.0 here</a></p>
<p><a href="http://download.somewhatgeeky.com/?token=DVD_Cover_Art_Finder_version_1.0.0.0_Source_Code">Download DVD Cover Art Finder version 1.0.0.0 Source Code here</a> (open with <a href="http://www.microsoft.com/express/vcsharp/">Visual C# 2008 Express</a>)</p>
<p>This usage tutorial begins with the DVD already properly ripped to the hard drive.&#160; I’ll have to make a tutorial about how to do that later, but for now you could use the tutorial that I used to learn how to do that. (<a href="http://channel8.msdn.com/Posts/Use-Vista-and-Media-Center-to-make-the-best-digital-DVD-library-EVER/">link</a>)</p>
<p>First, download and open DVD Cover Art Finder, duh! (note that I made two minor changes to the program since I did the tutorial.&#160; Can you spot them?)   <br /><a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder01.png"><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder01-thumb.png" width="640" height="444" /></a></p>
<p>Next, click “Scan for DVDs”.   <br /><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder021.png" width="393" height="445" /></p>
<p>Select the folder where you store all of your DVDs and click OK.   <br /><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder031.png" width="397" height="452" /></p>
<p>Select the DVD of which you want to get cover art.&#160; (notice how the DVDs that lack cover art show up at the top of the list.)   <br /><a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder04.png"><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder04-thumb.png" width="640" height="449" /></a></p>
<p>Be patient, and DVD Cover Art Finder will show cover art, which is currently picked from <a href="http://amazon.com">Amazon.com</a>.&#160; If the right cover art doesn’t show up, edit the Title text box and click the “(re)load coverart” button.    <br /><a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder05.png"><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder05-thumb.png" width="640" height="450" /></a></p>
<p>Click the cover art that looks right.&#160; This will put the cover art in the image box in the Selected DVD group box and update the Title text box with the title of that DVD.   <br /><a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder06.png"><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder06-thumb.png" width="640" height="444" /></a></p>
<p>Edit the title box if necessary.   <br /><a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder07.png"><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder07-thumb.png" width="640" height="443" /></a></p>
<p>Click the “Save” button.&#160; This will save the cover art to the DVD’s folder, as well as rename the DVD’s folder to match the title.&#160; Saving also creates a data file to keep track of the information and places that in the DVD’s folder.   <br /><a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder08.png"><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder08-thumb.png" width="640" height="448" /></a></p>
<p>Great!&#160; Now the DVD shows up in Media Center with the right title and cover art.   <br /><a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder09.png"><img style="display: inline" title="" alt="" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfinder09-thumb.png" width="640" height="376" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1133/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DVD Cover Art Finder: Coming Soon</title>
		<link>http://mypieceoftheinter.net/archives/1110</link>
		<comments>http://mypieceoftheinter.net/archives/1110#comments</comments>
		<pubDate>Sun, 28 Dec 2008 22:48:58 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Cover Art]]></category>
		<category><![CDATA[DVD Cover Art Finder]]></category>
		<category><![CDATA[DVDs]]></category>
		<category><![CDATA[Movies]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1110</guid>
		<description><![CDATA[  I hopped to get it out today, but that will have to wait until tomorrow.]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>I hopped to get it out today, but that will have to wait until tomorrow.<br />
<img style="display: inline" title="DVD Cover Art Finder Icon" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/dvdcoverartfindericon.png" alt="DVD Cover Art Finder Icon" width="480" height="480" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1110/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ripped DVDs + Media Center, Better with Cover Art</title>
		<link>http://mypieceoftheinter.net/archives/1096</link>
		<comments>http://mypieceoftheinter.net/archives/1096#comments</comments>
		<pubDate>Thu, 25 Dec 2008 17:05:49 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Demos]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Cover Art]]></category>
		<category><![CDATA[DVD Cover Art Finder]]></category>
		<category><![CDATA[DVDs]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Media Center]]></category>
		<category><![CDATA[Movies]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1096</guid>
		<description><![CDATA[Over the past few months I have really gotten into ripping DVDs to my computer in full quality (without re-compressing the video), so that I could play them in Media Center just as though I had put in the physical disk.  (I learned how to do that from a blog post on a Microsoft student [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few months I have really gotten into ripping DVDs to my computer in full quality (without re-compressing the video), so that I could play them in Media Center just as though I had put in the physical disk.  (I learned how to do that from a <a href="http://channel8.msdn.com/Posts/Use-Vista-and-Media-Center-to-make-the-best-digital-DVD-library-EVER/">blog post on a Microsoft student site</a>.)  Since each disk contains about 7.2GB of data, this did require getting a <a href="http://mypieceoftheinter.net/archives/967">little more</a> hard <a href="http://mypieceoftheinter.net/archives/970">drive space</a>.  Since I started I have ripped about 250 DVDs, but I had only taken the time to manually get the cover art for the first few that I ripped.  Getting coverart for the DVDs to show up in Media Center required going to Amazon.com, searching for the DVD, clicking through to the large picture of the box cover, saving that image, cropping it, and moving it to the DVD folder and naming it “folder.jpg”.  That was more mindless work than I wanted to put up with, so I did a little research.</p>
<p>Here’s a quick jump forward to the final product:<br />
<a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart1.png"><img style="display: inline" title="View Large" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart1-thumb.png" alt="View Large" width="640" height="378" /></a></p>
<p><span id="more-1096"></span> Amazon has a <em>great</em> set of web services available from <a href="http://aws.amazon.com">aws.amazon.com</a>, and one of the services enables integration with Amazon’s online store.  Best of all, the sample code was written in C#, which is my programming language of choice.  The API itself is very easy to use and quite powerful, but enough of that.</p>
<p>My program, which I quickly decided to call DVD Cover Art Finder (very creative), uses the <a href="http://aws.amazon.com/associates/">Amazon Associates Web Service</a> to suggest 6 possible cover arts.  When the user selects one of the choices, the selection is shown in the bigger image box, and the dvd title is updated to the title as listed on Amazon.  I added in a bunch of quick keyboard shortcuts to make the process go a lot faster, which I really needed since I used the software to get 200+ cover arts.  The program also renames the DVD’s folder to the DVD title, and preserves the DVD disk label and some other information in a data file that it keeps in the DVD’s folder.</p>
<p>As you can clearly see, I haven’t put much effort into polishing the product yet (note the window’s title of Form1).  Using it to get a bunch of cover art, however, the thing is stable.<br />
<a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart2.png"><img style="display: inline" title="dvd cover art finder" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart2-thumb.png" alt="dvd cover art finder" width="640" height="370" /></a></p>
<p>I’ll be finalizing this at some point and publish it to my blog, including the source code.  For now just marvel.  <img src='http://mypieceoftheinter.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>FYI, Media Center also supports three ways to display the DVDs.  The one previously shown is “View Large”.  This one below is “View Small”, and there is a third option that I don&#8217;t find very useful called “View List&#8221;.</p>
<p><a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart2sdfd.png"><img style="display: inline" title="view small" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart2sdfd-thumb.png" alt="view small" width="640" height="376" /></a></p>
<p>Selecting a DVD shows the disk’s location and and bigger cover art.<br />
<a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart3.png"><img style="display: inline" title="movie details" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart3-thumb.png" alt="movie details" width="640" height="375" /></a></p>
<p>Playing the DVD is exactly the same experience as playing a physical DVD, except there’s no disk.<br />
<a href="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart.png"><img style="display: inline" title="the princess bride dvd menu" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/mediacenterdvdcoverart-thumb.png" alt="the princess bride dvd menu" width="640" height="378" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1096/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>About FRI</title>
		<link>http://mypieceoftheinter.net/archives/1083</link>
		<comments>http://mypieceoftheinter.net/archives/1083#comments</comments>
		<pubDate>Wed, 03 Dec 2008 16:03:00 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Demos]]></category>
		<category><![CDATA[FRI]]></category>
		<category><![CDATA[Classic Gaming]]></category>
		<category><![CDATA[Emulated Gaming]]></category>
		<category><![CDATA[Emulation]]></category>
		<category><![CDATA[ROMs]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/1083</guid>
		<description><![CDATA[FRI is a ROM manager that I have worked on in my spare time since Summer 2007.  FRI’s goal is to simplify the execution of ROM images by bringing all of the use’s ROMs of game cartridges into one place, making it easy for the user to find a specific or new ROM to play, [...]]]></description>
			<content:encoded><![CDATA[<p>FRI is a <a href="http://en.wikipedia.org/wiki/ROM_image">ROM</a> manager that I have worked on in my spare time since Summer 2007.  FRI’s goal is to simplify the execution of ROM images by bringing all of the use’s ROMs of game cartridges into one place, making it easy for the user to find a specific or new ROM to play, and simplify the selection of the correct emulator for any given ROM.</p>
<p> </p>
<p>Here is a screenshot of the FRI version 1.8.0.0 main window with no search filters applied.<br />
<img style="display: inline" title="fri 1[4]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri141.png" alt="fri 1[4]" width="651" height="384" /></p>
<p><span id="more-1083"></span>Here I typed <em>mario kart</em> into the title search box.<br />
<img style="display: inline" title="fri 2[4]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri241.png" alt="fri 2[4]" width="652" height="391" /></p>
<p>Clicking onthe Advanced Search button gives the user more options.<br />
<img style="display: inline" title="image[21]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/image211.png" alt="image[21]" width="555" height="788" /></p>
<p>For example, here is the result of an advanced search for all Super Nintendo and Nintendo 64 ROMs that are categorized as English or an unknown language and are a not known bad image dumps.<br />
<img style="display: inline" title="fri 3[4]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri341.png" alt="fri 3[4]" width="641" height="391" /></p>
<p>Sorting the results by community rating brings the some of the best ROMs to the top.  At the time of this writing community ratings only include some Nintendo Entertainment System, Super Nintendo, Sega Genesis games, however FRI checks for updates to the community ratings file every time it starts, and will automatically pull it from my web hosting and apply the changes if I make a new version available.<br />
<img style="display: inline" title="fri 4[4]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri441.png" alt="fri 4[4]" width="649" height="386" /></p>
<p>FRI can pull ROMs from multiple file locations.  This allows more flexibility to the user, and offers some very convenient solutions.  For example, a user may have a desktop computer with a large ROM library and a laptop computer with a small ROM library.  FRI allows the user to add the local and remote libraries (via network share) into each copy of FRI.  When both computers are on the same network, the user can then right-click on a ROM that is in his desktop computer’s local library and have FRI send a copy to his laptop computer’s local library.  While both computers are on the same network, the user could also select any ROM displayed and it would just run, regardless of the file’s location.  In addition, when the laptop doesn’t have access to the desktop computer’s network share, the user can hide all of the unavailable ROMs by doing an Advanced Search.<br />
<img style="display: inline" title="fri 5[4]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri541.png" alt="fri 5[4]" width="662" height="480" /></p>
<p>When FRI scans for ROMs it automatically picks out all of the ROM files and infers a lot of information about each ROM, including platform, language, image health, status in the public domain, region, and number of players.  The information is totally dependent on the contents of the ROM’s file path/name.  Below are the default Vocabularies that come with FRI, which are completely user-editable.<br />
<img style="display: inline" title="fri 6[7]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri671.png" alt="fri 6[7]" width="660" height="478" /><br />
<img style="display: inline" title="fri 8[4]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri841.png" alt="fri 8[4]" width="671" height="479" /><br />
<img style="display: inline" title="fri 9[4]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri941.png" alt="fri 9[4]" width="658" height="474" /></p>
<p> </p>
<p>The most important (and most difficult) part about FRI is telling FRI what emulators use what platforms.  Note how the “Compatible Emulator Detected” column shows whether or not an emulator is configured to work with FRI for each of the known platforms.  For now users have to locate, download, and configure the emulators themselves (which is the status quo for most emulated gaming), and then tell FRI where each executable is and what platforms each emulator supports.  As FRI integrates more with my web hosting, I plan on having a simple selector to download, configure, and integrate emulators with ease.  The emulator lists would of course be updatable by me at will.<br />
<img style="display: inline" title="fri 10[4]" src="http://mypieceoftheinter.net/wp-content/uploads/2008/12/fri1041.png" alt="fri 10[4]" width="668" height="480" /></p>
<p>For more information about FRI, see <a href="http://mypieceoftheinter.net/archives/category/projects/fri-projects">entries about it on my blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/1083/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FRI Version 1.8.0.0</title>
		<link>http://mypieceoftheinter.net/archives/990</link>
		<comments>http://mypieceoftheinter.net/archives/990#comments</comments>
		<pubDate>Sun, 19 Oct 2008 16:04:43 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[FRI]]></category>
		<category><![CDATA[Emulation]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[ROMs]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/990</guid>
		<description><![CDATA[FRI version 1.8.0.0 is here!&#160; This version of FRI brings Community Ratings, a way to find great ROMs in your collection that you haven’t played before.&#160; This version also contains underlying updates to how FRI scans for ROMs, resulting in a better user experience.&#160; This release’s code is closer than ever to being able to [...]]]></description>
			<content:encoded><![CDATA[<p>FRI version 1.8.0.0 is here!&#160; This version of FRI brings Community Ratings, a way to find great ROMs in your collection that you haven’t played before.&#160; This version also contains underlying updates to how FRI scans for ROMs, resulting in a better user experience.&#160; This release’s code is closer than ever to being able to be ported to Media Center for a <a href="http://en.wikipedia.org/wiki/Windows_media_center">Windows Media Center</a> counterpart to FRI.</p>
<p><a href="http://download.somewhatgeeky.com?token=fri_version_1.8.0.0"><strong>Download FRI version 1.8.0.0 here</strong></a></p>
<p><img style="display: inline" title="fri version 1.8.0.0 main window" alt="fri version 1.8.0.0 main window" src="http://mypieceoftheinter.net/wp-content/uploads/2008/10/friversion1800screenshot2.png" width="751" height="511" /></p>
<p>Thanks to <a href="http://www.emutalk.net/member.php?u=60607">FlotsamX</a> for providing feedback as a beta tester, and <a href="http://vimm.net">Vimm</a> for providing me access to his website’s user ratings.</p>
<p> <span id="more-990"></span>
<p>&#160;</p>
<p><strong>Change log:</strong></p>
<ul>
<li>New feature: FRI now automatically retrieves a “master database” from the web, which currently contains “community ratings” of some ROMs.     <br /><img style="display: inline" title="fri version 1.8.0.0, checking for a new release of the master database..." alt="fri version 1.8.0.0, checking for a new release of the master database..." src="http://mypieceoftheinter.net/wp-content/uploads/2008/10/friversion1800screenshot1.png" width="745" height="505" /></li>
<li>The process of scanning for ROMs is more responsive and provides the user with more information.     <br /><img style="display: inline" title="fri version 1.8.0.0, scanning for ROMs" alt="fri version 1.8.0.0, scanning for ROMs" src="http://mypieceoftheinter.net/wp-content/uploads/2008/10/friversion1800screenshot53.png" width="539" height="236" />&#160;</li>
<li>FRI can now handle ROM files that have filenames that are too long.&#160; Previously FRI would simply skip over these.&#160; The user is now warned when a ROM with a really long file name is added.     <br /><img style="display: inline" title="fri version 1.8.0.0, scan completed" alt="fri version 1.8.0.0, scan completed" src="http://mypieceoftheinter.net/wp-content/uploads/2008/10/friversion1800screenshot63.png" width="533" height="234" />      </li>
<li>Generic file extensions are no longer attached to specific platforms.&#160; That functionality never made sense, because they were <em>generic</em> file extensions.&#160; Now generic file extensions are one list, available on the new &quot;Other&quot; tab of the Settings window.&#160; The &quot;Generic Extensions&quot; column in the Platform Vocabulary list has been removed, and the other column widths have been increased to fill the space.      <br /><img style="display: inline" title="fri version 1.8.0.0 screenshot 3" alt="fri version 1.8.0.0 screenshot 3" src="http://mypieceoftheinter.net/wp-content/uploads/2008/10/friversion1800screenshot31.png" width="663" height="466" />      <br /><img style="display: inline" title="fri version 1.8.0.0 screenshot 4" alt="fri version 1.8.0.0 screenshot 4" src="http://mypieceoftheinter.net/wp-content/uploads/2008/10/friversion1800screenshot41.png" width="650" height="468" />      </li>
<li>ROM files that are executable (with .exe extensions) will now be run directly.</li>
<li>The “Advanced” item in the “Edit” menu is now hidden.</li>
<li>Fixed UI problem in the Platform Information Editor, where the &quot;Cancel&quot; button would not move properly when the window was resized. </li>
<li>Fix: FRI no longer makes the “you can’t do that” sound when the user presses enter in the search box to start the search. </li>
<li>&quot;Other&quot; tab added to the Settings window. </li>
<li>Fix: The “defaults” button for the File Flags Vocabulary tab in the Settings Editor now works properly.</li>
<li>&quot;rom&quot; added as a generic ROM file extension </li>
<li>The &quot;Unique Extensions&quot; column in the Platform Vocabulary list has been renamed to &quot;Unique File Extensions&quot;. </li>
<li>&quot;.a26&quot; unique file extension for the Atari 2600 corrected to remove the decimal point. </li>
<li>&quot;Atari&quot; removed as another name for &quot;Atari 2600&quot; </li>
<li>Platforms added:
<ol>       </ol>
<ol>
<li>Amega </li>
<li>Amiga CD32 </li>
<li>Atari 7800 </li>
<li>Neo Geo </li>
<li>Neo Geo CD </li>
<li>Neo Geo Pocket </li>
<li>ColecoVision </li>
<li>Vectrex </li>
<li>Magnavox Odyssey </li>
<li>Magnavox Odyssey² </li>
<li>SuperGrafx </li>
<li>TurboGrafx 16 </li>
<li>Game &amp; Watch </li>
<li>Pokemon mini </li>
<li>N-Gage </li>
<li>3DO Interactive Multiplayer </li>
<li>Sega Dreamcast </li>
<li>Sega CD </li>
</ol>
</li>
<li>Platform extensions added
<ol>       </ol>
<ol>
<li>&quot;col&quot; added as a unique extension for &quot;ColecoVision&quot; </li>
<li>&quot;vec&quot; added as a unique extension for &quot;Vectrex&quot; </li>
<li>&quot;min&quot; added as a unique extension for &quot;Pokemon mini&quot; </li>
<li>&quot;vb&quot; added as a unique extension for &quot;Virtual Boy&quot; </li>
<li>“mdf” added as a generic extension </li>
</ol>
</li>
</ul>
<p>“Sony PlayStation”, “PSX”, “Sony PlayStation 1”, “Sony Play Station”, and “Sony Play Station 1” added as other names for “PlayStation”</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/990/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FRI: Community Ratings!</title>
		<link>http://mypieceoftheinter.net/archives/849</link>
		<comments>http://mypieceoftheinter.net/archives/849#comments</comments>
		<pubDate>Mon, 29 Sep 2008 01:25:28 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[FRI]]></category>
		<category><![CDATA[Emulation]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Vimm]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/849</guid>
		<description><![CDATA[Thanks to Vimm of vimm.net, I am adding the ability to view “community ratings” to FRI.  This means that if you simply want to play a new game that is good, just sort by community rating and select one from the top of the list.  Inversely you could also easily select the worst game…   [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to Vimm of <a href="http://vimm.net">vimm.net</a>, I am adding the ability to view “community ratings” to FRI.  This means that if you simply want to play a new game that is good, just sort by community rating and select one from the top of the list.  Inversely you could also easily select the worst game…</p>
<p><img style="display: inline" title="image" src="http://mypieceoftheinter.net/wp-content/uploads/2008/09/image.png" alt="image" width="661" height="505" /></p>
<p><span id="more-849"></span></p>
<p> </p>
<p>I literally just got this working, but I’m really excited with the results.  I’m going to have to work on polishing the process a little more, and develop a method to deliver the “master database” containing the community ratings.  The delivery mechanism will also be expandable for me to add more data in the future, such as links to game manuals and walkthroughs.  That’s in the future, though.  For now I’m just glad for a little success!</p>
<p><img style="display: inline" title="image" src="http://mypieceoftheinter.net/wp-content/uploads/2008/09/image1.png" alt="image" width="657" height="501" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/849/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FRI Version 1.7.0.2</title>
		<link>http://mypieceoftheinter.net/archives/662</link>
		<comments>http://mypieceoftheinter.net/archives/662#comments</comments>
		<pubDate>Fri, 22 Aug 2008 02:46:17 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[FRI]]></category>
		<category><![CDATA[Emulation]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[ROMs]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/662</guid>
		<description><![CDATA[This release of FRI is thanks to Flotsam, who took it upon him self to write out a very detailed email describing problems with FRI.&#160; His email was so succinct and clear, giving the root of the problem and not simply the symptoms, that I was able to make the requested changes in under 20 [...]]]></description>
			<content:encoded><![CDATA[<p>This release of FRI is thanks to Flotsam, who took it upon him self to write out a very detailed email describing problems with FRI.&#160; His email was so succinct and clear, giving the root of the problem and not simply the symptoms, that I was able to make the requested changes in under 20 minutes.&#160; In fact, it took longer to prepare the release than it did to code it!</p>
<p>Flotsam&#8217;s email address: <img height="18" alt="image" src="http://mypieceoftheinter.net/wp-content/uploads/2008/08/image2.png" width="132" /> (yes, the text is a picture.&#160; I don&#8217;t want him getting automated bot spam!)</p>
<p>Now for the release.&#160; FRI version 1.7.0.2 contains updated to the default Platform Vocabulary, as well as a fix to a bug that I will describe in detail below.</p>
<p><a href="http://download.somewhatgeeky.com?downloadID=fri_version_1.7.0.2">Download FRI version 1.7.0.2 here</a></p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="469" alt="fri_version_1.7.0.2_platform_vocabulary" src="http://mypieceoftheinter.net/wp-content/uploads/2008/08/fri-version-1702-platform-vocabulary.png" width="658" border="0" /></p>
<p> <span id="more-662"></span>
</p>
<p>&#160;</p>
<p>To get the updates to the Platform Vocabulary, open the Settings window, click on the &quot;Platform Vocabulary&quot; tab, click the &quot;Defaults&quot; button, and click OK on the dialogue box.&#160; This will overwrite your current platform vocabulary with the new defaults.</p>
<p>Change Log:</p>
<ul>
<li>&quot;Compact Disc Interactive&quot; added to the Platform Vocabulary, with &quot;CDi&quot; and &quot;CD-i&quot; as other names for the platform. </li>
<li>The GameCube entry in the Platform Vocabulary was updated to make change the display name from &quot;Game Cube&quot; to &quot;GameCube&quot;.&#160; Variations of the name were added as other names, such as &quot;Nintendo GameCube&quot;. </li>
<li>The extension &quot;gcm&quot; was added as a unique extension for GameCube in the Platform Vocabulary. </li>
<li>&quot;Xbox&quot; added to the Platform Vocabulary.&#160; Variations of the name (including &quot;Microsoft Xbox (original)&quot; and &quot;Xbox 1&quot;) were added as other names </li>
<li>Bug Fix: In previous versions of FRI, file extensions were case sensitive.&#160; That would mean that if, for example, a ROM was called &quot;game.GB&quot;&#160; it would not be recognized even though &quot;gb&quot; was listed as a ROM extension in the Platform Vocabulary.&#160; This problem is fixed in this release. </li>
<li>Bug Fix: Previous versions of FRI would include the ROM database in the Default Settings File created by &quot;Edit&quot;-&gt;&quot;Advanced&quot;-&gt;&quot;Generate Default Settings File&quot;.&#160; This feature is only used in developing FRI, so it didn&#8217;t affect users.&#160; At any rate, the bug is fixed in this release. <img src='http://mypieceoftheinter.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/662/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

