<?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; Arcadia</title>
	<atom:link href="http://mypieceoftheinter.net/tag/arcadia/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>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>Arcadia: Soon!</title>
		<link>http://mypieceoftheinter.net/archives/2007</link>
		<comments>http://mypieceoftheinter.net/archives/2007#comments</comments>
		<pubDate>Tue, 16 Mar 2010 04:01:15 +0000</pubDate>
		<dc:creator>David McGrath</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Arcadia]]></category>
		<category><![CDATA[Beta Testing]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Testing]]></category>

		<guid isPermaLink="false">http://mypieceoftheinter.net/archives/2007</guid>
		<description><![CDATA[Arcadia, my emulator frontend that manages a wide variety of classic gaming system files, is just around the corner!&#160; I have a stable version right now, and am looking for beta testers.&#160; (Contact me if you’re interested!)&#160; Once I give Arcadia the ability to check for update to itself I’ll release it publically, but for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mypieceoftheinter.net/wp-content/uploads/2010/03/Arcadia_1_mile_road_sign_on_I81.jpg"><img style="border-bottom-color: ; border-top-color: ; display: inline; border-right-color: ; border-left-color: " title="Arcadia sign on I-81 South." alt="Arcadia sign on I-81 South." src="http://mypieceoftheinter.net/wp-content/uploads/2010/03/Arcadia_1_mile_road_sign_on_I81_thumb.jpg" width="640" height="448" /></a> </p>
<p><a href="http://mypieceoftheinter.net/tag/arcadia">Arcadia</a>, my <a href="http://en.wikipedia.org/wiki/Emulator">emulator</a> frontend that manages a wide variety of classic gaming system files, is just around the corner!&#160; I have a stable version right now, and am looking for beta testers.&#160; (Contact me if you’re interested!)&#160; Once I give Arcadia the ability to check for update to itself I’ll release it publically, but for now email me and I’ll give it to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://mypieceoftheinter.net/archives/2007/feed</wfw:commentRss>
		<slash:comments>1</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>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>
	</channel>
</rss>

