<?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>/dev/null &#187; Development</title>
	<atom:link href="http://blog.alien109.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alien109.com</link>
	<description>development, design, and random goodness</description>
	<lastBuildDate>Fri, 10 Sep 2010 02:40:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Running PHP cron jobs on a MediaTemple DV server</title>
		<link>http://blog.alien109.com/2010/06/08/running-php-cron-jobs-on-a-mediatemple-dv-server/</link>
		<comments>http://blog.alien109.com/2010/06/08/running-php-cron-jobs-on-a-mediatemple-dv-server/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 22:24:02 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=373</guid>
		<description><![CDATA[Recently I was attempting to create some cron jobs to run PHP scripts on a DV server or at MediaTemple, with PHP installed as an Apache module (rather than CGI). I was able to execute the php file, however all of my include and require statements were totally failing. My first idea was to set [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.alien109.com/wp-content/uploads/2010/06/Crystal_Project_alarm.png" alt="" title="Crystal_Project_alarm" class="wp-image-377" style="float:right; width:190px;height:190px;"/></p>
<p>Recently I was attempting to create some cron jobs to run PHP scripts on a DV server or at MediaTemple, with PHP installed as an Apache module (rather than CGI). I was able to execute the php file, however all of my include and require statements were totally failing.</p>
<p>My first idea was to set the include paths in PHP. This failed and the scripts still reported errors. My next attempt was to use absolute paths for my includes. This correctly found the includes, but resulted in safe mode errors.</p>
<p>I finally resolved the issue by creating a custom .ini file for PHP, making the appropriate setting changes and then supplying that ini file as an argument to PHP in the cron command.</p>
<p>SSH into the server, and copy the ini file. Something like:<br />
<code>#cp /etc/php.ini /var/www/vhosts/domain/includes/cron/php.ini</code></p>
<p>Now open up the new ini file in vi or emacs (I&#8217;m not getting into that debate). First you&#8217;ll want to disable safe mode by changing the line &#8220;safe_mode = On&#8221; to &#8220;safe_mode = Off&#8221;. Next, you can comment out the openbase_dir setting by changing the line &#8220;open_basedir = &#8220;/usr/share/pear&#8221; to be &#8220;; open_basedir = &#8220;/usr/share/pear&#8221;. And finally, set the includes path for your php scripts.</p>
<p>The last step is to make sure you execute the correct command in cron. Remember, you&#8217;ll need to pass the custom .ini file as an argument to PHP. Something like:</p>
<p><code>php -c /var/www/vhosts/domain/includes/cron/php.ini /var/www/vhosts/domain/includes/cron/test.php<br />
</code></p>
<p>This isn&#8217;t rocket science, and probably a no brainer to some. But, I found it useful and hope someone else does too.</p>
<p>The best thing about this, is I can leverage existing PHP code without having to write a ton of junk in PERL (yuck). Less code = less frustration.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2010/06/08/running-php-cron-jobs-on-a-mediatemple-dv-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adobe responds to Apple&#8217;s attacks on Flash</title>
		<link>http://blog.alien109.com/2010/05/14/adobe-responds-to-apples-attacks-on-flash/</link>
		<comments>http://blog.alien109.com/2010/05/14/adobe-responds-to-apples-attacks-on-flash/#comments</comments>
		<pubDate>Fri, 14 May 2010 19:08:54 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Advertising]]></category>
		<category><![CDATA[Art/Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Graphic Design]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=315</guid>
		<description><![CDATA[Adobe responded to Apple&#8217;s attacks on flash with a new ad campaign: http://www.adobe.com/choice/ A colleague of mine just forwarded this hilarious (and fake) response from Apple. Personally I think both Apple and Adobe can suck it.]]></description>
			<content:encoded><![CDATA[<p>Adobe responded to Apple&#8217;s attacks on flash with a new ad campaign:</p>
<p><img src="http://blog.alien109.com/wp-content/uploads/2010/05/Picture-1.png" alt="Picture 1" title="Picture 1" width="630" class="alignnone size-full wp-image-317" /><br />
<a href="http://www.adobe.com/choice/" title="pikachu i choose you">http://www.adobe.com/choice/</a></p>
<p>A colleague of mine just forwarded this hilarious (and fake) response from Apple.</p>
<p><img src="http://blog.alien109.com/wp-content/uploads/2010/05/n4f.png" alt="n4f" title="n4f" width="630"  class="alignnone size-full wp-image-316" /></p>
<p>Personally I think both Apple and Adobe can suck it. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2010/05/14/adobe-responds-to-apples-attacks-on-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Templating/Page Decoration</title>
		<link>http://blog.alien109.com/2010/04/20/templatingpage-decoration/</link>
		<comments>http://blog.alien109.com/2010/04/20/templatingpage-decoration/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 22:09:30 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=297</guid>
		<description><![CDATA[I believe I&#8217;ve got my templating working the way I want. It needs to be refactored, but it works. FYI &#8211; my terminology can be confusing, but when I say decorate the page, I essentially mean apply the template to the requested content. I guess was originally thinking I was going to model templating after [...]]]></description>
			<content:encoded><![CDATA[<p>I believe I&#8217;ve got my templating working the way I want. It needs to be refactored, but it works. <strong>FYI</strong> &#8211; my terminology can be confusing, but when I say decorate the page, I essentially mean apply the template to the requested content. I guess was originally thinking I was going to model templating after the decorator design pattern.</p>
<p>Essentially this is how things flow:</p>
<div style="margin-left:40px;">
<strong>Request gets redirected to the controller</strong><br />
The front controller gets forwarded the request with the original path passed as a GET parameter. So, a request to localhost/test/ basically ends up as localhost/controller.php?params=test/. All of the site content pages are located in a directory called content (configurable so you could put all content outside of the web root). So the controller looks for /content/test/index.php and then renders the html into a buffer.</p>
<p><strong>Controller attempts to decorate page</strong><br />
The controller has a PageDecorator class instance. When the PageDecorator class is instantiated, it loads the decorators config. In hindsight, this should probably only happen once per session for performance reasons, but whatever. I&#8217;ll get to that later. The controller then asks the PageDecorator to decorate the page, and passes the previously buffered HTML as an argument. The PageDecorator looks to see if the requested path matches any of the decorator directives in the config. If so, it decorates the page and returns the modified HTML. If the page doesn&#8217;t get a decorator, it simply returns the original HTML. Then controller can then output the page contents (or perform other actions if needed)
</div>
<p>I&#8217;m not sure I like how I have the template wrapping working. I&#8217;d love to hear suggestions. Essentially I load the content page into a buffer. Before the template gets rendered, I use regular expressions and pull out the &lt;head/&gt; and the &lt;body/&gt; tags, and then stuff those both into an associate array. I then call a static method on a Page class to load the HTML, with the associate array as an argument. Inside of that method I than extract the associate array arg into the local scope, parse the template, and then return the rendered HTML. Seems messy, but I didn&#8217;t like the idea of putting the content of the page into the global scope before parsing it, and this was the quickest way I could come up to do it.</p>
<p>It&#8217;s kind of backwards how you might typically do includes where the outer page would get called first and then an include inside of that would render the inner content. I&#8217;m actually rendering the content first (so I can rip out the head and body content) and then rendering the outer page.</p>
<p>I know that these are incoherent ramblings that probably won&#8217;t get read by anyone, but it helps to put my thoughts down in words&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2010/04/20/templatingpage-decoration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Templating</title>
		<link>http://blog.alien109.com/2010/04/19/templating/</link>
		<comments>http://blog.alien109.com/2010/04/19/templating/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 21:27:22 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=289</guid>
		<description><![CDATA[In thinking about how I want to implement a templating system in my homegrown php framework, I guess it would be good to start with some basic requirements. The goal is a simple and easy to use templating system. Base requirements: Content pages are simple and only contain necessary markup for the content Ability to [...]]]></description>
			<content:encoded><![CDATA[<p>In thinking about how I want to implement a templating system in my homegrown php framework, I guess it would be good to start with some basic requirements. The goal is a simple and easy to use templating system.</p>
<p>Base requirements:</p>
<ol>
<li>Content pages are simple and only contain necessary markup for the content</li>
<li>Ability to target content areas in the template page</li>
<li>Simple way to designate which pages get decorated with which template to use</li>
</ol>
<h3>Content pages are simple and only contain necessary markup for the content</h3>
<p>I want my content to only contain the necessary markup for the content and not be cluttered with page structure HTML, framework PHP fragments and the likes. I also want to be able to markup fully valid HTML pages, or simple HTML fragments. As a bonus, I think the templating should even work for things like HTML emails if needed.</p>
<h3>Ability to target content areas in the template page</h3>
<p>One of the things that annoys me about many templating engines is that your content pages can&#8217;t target specific areas in the template page. I guess by good OO design, this may be valid. However &#8211; I find that many times I have pages that need to include their own stylesheets. Rather than including these stylesheets in the master layout, I want to be able to include them from the content level. Most likely your content page is being rendered into the body of the page. By placing the &lt;link&gt; tags in the body would result in invalid XHTML.</p>
<h3>Simple way to designate which pages get decorated with which template to use</h3>
<p>In a few front control examples I looked at, template designation was hard coded into the PHP itself. That leaves a bad taste in my mouth, and so does dog shit (and that is why I don&#8217;t eat it and neither should you). I&#8217;m thinking of borrowing the way I&#8217;ve seen it handled in a stripes/sitemesh stack. There&#8217;s simple XML configuration that uses basic URL patterns to match to templates and some exclude tags for handling pages you don&#8217;t want decorated.</p>
<p>Seems simple enough. Then again, everything is easier said than done. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2010/04/19/templating/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Front Controller Pattern</title>
		<link>http://blog.alien109.com/2010/04/19/front-controller-pattern/</link>
		<comments>http://blog.alien109.com/2010/04/19/front-controller-pattern/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 19:43:58 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=284</guid>
		<description><![CDATA[I&#8217;m not a huge fan of tons of repetitive code and mark-up. I find it inefficient, sloppy and difficult to maintain. So, I&#8217;ve never been a fan of using includes on every page of a site for the headers, footers, blah blah blah in PHP. It&#8217;s also very difficult (to me) to implement good templating [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not a huge fan of tons of repetitive code and mark-up. I find it inefficient, sloppy and difficult to maintain. So, I&#8217;ve never been a fan of using includes on every page of a site for the headers, footers, blah blah blah in PHP. It&#8217;s also very difficult (to me) to implement good templating this way. It&#8217;s something that has continuously bothered me when developing sites in PHP.</p>
<p>So I turn to the <a href="http://en.wikipedia.org/wiki/Front_Controller_pattern">Front Controller Design Pattern</a>. By modifying the .htaccess file in the root of the site, you can redirect all requests to a single place: the front end controller. Now all of the requests are being handled by single PHP script. This controller can now handle all authentication, templating, redirection, etc. all in one easy place.</p>
<p>Now I realize many frameworks out there utilize this pattern already, and probably to a much greater success than I <em>ever</em> will. <a href="http://www.symfony-project.org/">Symfony</a>, <a href="http://zendframework.com/">Zend Framework</a>, <a href="http://cakephp.org/">Cake</a> and <a href="http://drupal.org/">Drupal</a> just to name a few. However, I find some of these frameworks are often very heavy and overly complicated for a lot of uses. Also, I don&#8217;t like being forced to work within their paradigms. I want to work in my own. (Not to mention the fact that I like writing my own frameworks!)</p>
<p>So I&#8217;ve decided to write a very lightweight and simple front controller framework that I can reuse across sites. Nothing too fancy. Just enough to get the job done. I find for many simple sites, all I need is some simple templating, maybe some authentication, and some sort of navigation system. I don&#8217;t need a huge framework for doing this. I just need a simple front controller to route requests and enable me to implement those features.</p>
<p>I&#8217;m sure as I get into development, I&#8217;ll start adding more and more features. Discover many benefits to using well established frameworks over the roll-your-own ones. I&#8217;ll post some code soon so people can start beating me down.</p>
<p>Next up &#8211; templating. I have a few ideas on how I want to implement this, just need to spend some time hashing it out. More on this later. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2010/04/19/front-controller-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Controlling iTunes remotely</title>
		<link>http://blog.alien109.com/2009/06/16/controlling-itunes-remotely/</link>
		<comments>http://blog.alien109.com/2009/06/16/controlling-itunes-remotely/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 15:10:33 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Art/Design]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[High Tech]]></category>
		<category><![CDATA[Random Junk]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[Dashcode]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Remote]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=241</guid>
		<description><![CDATA[So I just got this shiny new MacBook Pro. Absolutely love the thing. I&#8217;ve been away from the Macintosh platform for far too long&#8230; Anyway &#8211; I&#8217;m sitting in my office listening to music and realized that the speakers, while okay for what they are, suck by most standards. So I pop over to my [...]]]></description>
			<content:encoded><![CDATA[<p>So I just got this shiny new MacBook Pro. Absolutely love the thing. I&#8217;ve been away from the Macintosh platform for far too long&#8230;</p>
<p>Anyway &#8211; I&#8217;m sitting in my office listening to music and realized that the speakers, while okay for what they are, suck by most standards. So I pop over to my PC and fire up iTunes, hit play, and use my sound system that&#8217;s hooked up to it. Sounds great. But, I&#8217;m lazy and I got tired of switching over to it change tracks, stop, pause, etc. I figured there had to be a way to control iTunes remotely from the Mac. Doing a bit of research, I found some stuff for the Mac and a PHP script that did me no good.</p>
<p>Finally I came across a Perl script (can&#8217;t remember where&#8230;) that simply runs a Daemon. Everything that I needed was already there! All I needed to do, was point a browser at the box and it had a nice simple stripped down interface for play, pause, stop, next, etc&#8230;</p>
<p>After some time, I realized I hated having to keep the browser window open. Enter MacOS dashboard widgets.</p>
<p>After some quick fiddling with Dashcode, I came up with this little dashboard widget to send the requests to the PC. The current track name only updates after a command is sent, so it isn&#8217;t updated dynamically.</p>
<p><img src="http://blog.alien109.com/wp-content/uploads/2009/06/dash-widget2.png" alt="dash-widget2" title="dash-widget2" width="509" height="154" class="alignnone size-full wp-image-246" /></p>
<p>Now my iTunes controls are at my fingertips, and I don&#8217;t have to spend the time moving my hands the whole 24 some inches to the right to do it on the PC.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2009/06/16/controlling-itunes-remotely/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>gZip your JavaScript</title>
		<link>http://blog.alien109.com/2009/03/17/gzip-your-javascript/</link>
		<comments>http://blog.alien109.com/2009/03/17/gzip-your-javascript/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 22:06:35 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Science/Technology]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=170</guid>
		<description><![CDATA[Most browsers these days (with the exception of Safari, I think?) will accept gzip encoded content. This means you can drastically reduce the size of all those bloated javascript libraries you might be using on your web site. So how do you serve gzipped js files? There a few methods out there. I chose the [...]]]></description>
			<content:encoded><![CDATA[<p>Most browsers these days (with the exception of Safari, I think?)  will accept gzip encoded content. This means you can drastically reduce the size of all those bloated javascript libraries you might be using on your web site.</p>
<p><strong>So how do you serve gzipped js files?</strong></p>
<p>There a few methods out there. I chose the one below since it was fast, easy and I&#8217;m hella freakin&#8217; lazy.</p>
<p>The first step is to gzip all of the javascript files that you might be serving up. The fastest way I found was to just telnet into the server, and execute the following bash command:</p>
<p><code>gzip -cr &lt;javascript directory&gt;</code></p>
<p>Of course you&#8217;ll need to replace &lt;javascript directory&gt; with the correct directory that your javascript files are located in. The -c option tells gzip to keep the originals. This is important so that you can still serve non gzipped versions to browsers that don&#8217;t handle gzip! The -r option tells it to recurse through the directory. Now you should have a directory full of javascript files and their gzipped counterparts.</p>
<p><code>init.js<br />
init.js.gz<br />
jquery-ui.js<br />
jquery-ui.js.gz<br />
jquery.easing.js<br />
jquery.easing.js.gz<br />
jquery.history.js<br />
jquery.history.js.gz<br />
jquery.js<br />
jquery.js.gz<br />
swfobject.js<br />
swfobject.js.gz</code></p>
<p>Yay.  How exiciting, no?</p>
<p>The next step is to modify .htaccess to do some URL rewriting.</p>
<p><code>AddEncoding gzip .gz<br />
RewriteCond %{HTTP:Accept-encoding} gzip<br />
RewriteCond %{HTTP_USER_AGENT} !Safari<br />
RewriteCond %{REQUEST_FILENAME}.gz -f<br />
RewriteRule ^(.*)$ $1.gz [QSA,L]</code></p>
<p>Essentially your telling the web server to server up gzip files, if the browser accepts them and the user is not on Safari and if there is a compressed version of the file available.</p>
<p>That&#8217;s really about it.</p>
<p>Here&#8217;s the difference in file sizes:</p>
<table class="data">
<thead>
<tr>
<th>File</th>
<th>Size</th>
<th>Size (gZip)</th>
</tr>
</thead>
<tbody>
<tr>
<td>init.js</td>
<td>7628</td>
<td>1992</td>
</tr>
<tr>
<td>jquery-ui.js</td>
<td>127787</td>
<td>50756</td>
</tr>
<tr>
<td>jquery.easing.js</td>
<td>8097</td>
<td>2003</td>
</tr>
<tr>
<td>jquery.history.js</td>
<td>5079</td>
<td>1771</td>
</tr>
<tr>
<td>jquery.js</td>
<td>31033</td>
<td>15666</td>
</tr>
<tr>
<td>swfobject.js</td>
<td>6722</td>
<td>2233</td>
</tr>
</tbody>
</table>
<p>Pretty significant size difference! </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2009/03/17/gzip-your-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE and responseXML issues</title>
		<link>http://blog.alien109.com/2009/03/13/ie-and-responsexml-issues/</link>
		<comments>http://blog.alien109.com/2009/03/13/ie-and-responsexml-issues/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 18:33:55 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=165</guid>
		<description><![CDATA[After working on a small AJAX library, I decided to test it in IE. Everything worked great, except when requesting XML. The responseXML property of the XHR was null. I&#8217;ve had this issue in the past where the server isn&#8217;t returning the appropriate Content-Type (text/xml). But that wasn&#8217;t the issue this time. I checked my [...]]]></description>
			<content:encoded><![CDATA[<p>After working on a small AJAX library, I decided to test it in IE. Everything worked great, except when requesting XML. The responseXML property of the XHR was null. I&#8217;ve had this issue in the past where the server isn&#8217;t returning the appropriate Content-Type (text/xml). But that wasn&#8217;t the issue this time. I checked my resin config and everything was correct.</p>
<p>So, I uploaded to a remote server and tried again. Blammo. Chit just worked the way it was supposed to. This left me scratching my head however.</p>
<p>I installed Charles (www.charlesproxy.com), which is a great debugging HTTP proxy/monitor, to see what was going on. Everything worked as it should in FireFox, but still no dice in IE.</p>
<p>Then I noticed that traffic wasn&#8217;t being captured for Localhost when using IE. After a bit of stumbling around the net I found that if you add a period right after localhost, Charles will capture the traffic.</p>
<p>http://localhost:8080/ajaxTest.html</p>
<p>becomes:</p>
<p>http://localhost<strong>.</strong>:8080/ajaxTest.html</p>
<p>When I reloaded the page, I got a very nice surprise. Not only did Charles capture the traffic, but the XHR returned with a proper responseXML property!</p>
<p>I&#8217;m no network engineer, so I&#8217;m not even going to try and guess as to WTF. But, I&#8217;m happy it works as expected and thought I&#8217;d post about it in case someone else ever runs into this issue. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2009/03/13/ie-and-responsexml-issues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Force directed node interface 2</title>
		<link>http://blog.alien109.com/2009/02/17/force-directed-node-interface-2/</link>
		<comments>http://blog.alien109.com/2009/02/17/force-directed-node-interface-2/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 19:50:07 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Diversions]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Graphic Design]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=142</guid>
		<description><![CDATA[Here&#8217;s an example of the force directed node interface that I&#8217;ve been talking about. It&#8217;s not complete. It&#8217;s just a working prototype. You still cannot load project details, but I&#8217;m waiting to add that if I decide I want to take this any further. Since the dimensions of the interface have been reduced to fit [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an example of the force directed node interface that I&#8217;ve been talking about. It&#8217;s not complete. It&#8217;s just a working prototype. You still cannot load project details, but I&#8217;m waiting to add that if I decide I want to take this any further.</p>
<p>Since the dimensions of the interface have been reduced to fit in this blog post, things might be a bit small (try zooming in). You can also drag nodes around. Helpful when things get pushed off the screen. Nodes can be opened and closed by clicking on them.</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_main_1411775104"
			class="flashmovie"
			width="640"
			height="480">
	<param name="movie" value="/wp-content/uploads/2009/02/main.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/wp-content/uploads/2009/02/main.swf"
			name="fm_main_1411775104"
			width="640"
			height="480">
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2009/02/17/force-directed-node-interface-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Force directed node interface</title>
		<link>http://blog.alien109.com/2009/02/14/force-directed-node-interface/</link>
		<comments>http://blog.alien109.com/2009/02/14/force-directed-node-interface/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 07:59:19 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Graphic Design]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://blog.alien109.com/?p=113</guid>
		<description><![CDATA[I&#8217;ve been working on the experimental Flash front-end I spoke about in the last post. The idea is to use a force directed or force based system for displaying categories, keywords, projects and their relationships. I was curious about what kind of user experience that would create. Here&#8217;s a video of the force directed layout [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on the experimental Flash front-end I spoke about in the last post. The idea is to use a force directed or force based system for displaying categories, keywords, projects and their relationships. I was curious about what kind of user experience that would create.</p>
<p>Here&#8217;s a video of the force directed layout interface in action.</p>
<p><object width="400" height="302"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3206267&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3206267&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></object></p>
<p><strong>So, what is a force directed layout?</strong></p>
<p>It is a method for positioning nodes of a graph in a way that is aesthetically pleasing as well as easy to digest. This is accomplished by creating a simulated physical system where all nodes are like electrically charged particles (Coulomb&#8217;s law) and the connections or associations are like springs (Hooke&#8217;s law). After running through thousands of iterations, the entire system begins to become stable until all the forces are in somewhat of an equilibrium.</p>
<p><img src="http://blog.alien109.com/wp-content/uploads/2009/02/fd_map.gif" alt="force directed layout of project nodes" /><br />
<small><em>Fig. 1</em> Interface with only the category and technology nodes expanded.</small></p>
<p>Fig. 1 is a screenshot of the layout. In this example there are only a few nodes expanded, but it gives you an idea of how things end up looking. There are two base nodes: &#8220;Category&#8221; and &#8220;Technology&#8221;. Clicking these returns the appropriate set of subnodes. The association of these subnodes is shown with a line connecting the child and parent node. When clicking on a specific technology keyword or category, that category/keyword subnode expands into another set of nodes which are projects.</p>
<p><img src="http://blog.alien109.com/wp-content/uploads/2009/02/fd_map2.gif" alt="force directed layout of project nodes" /><br />
<small><em>Fig. 2</em> Interface with more nodes expanded</small></p>
<p>Fig. 2 shows the cross associations between categories and keywords.</p>
<p>So far it&#8217;s been a cool and somewhat successful little experiment. I&#8217;m not sure it would work as an interface as the node labels overlap too much and when there a lot of cross associations, things don&#8217;t look as organized and it&#8217;s much harder to read.</p>
<p>I still need to add node collapsing and make it so projects can be viewed. I&#8217;ll try to post a working example soon. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alien109.com/2009/02/14/force-directed-node-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
