<?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>Matt Jones' Blog</title>
	<atom:link href="http://www.mattjones.workhorsy.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mattjones.workhorsy.org</link>
	<description>Blah You, Blah Me, Blah We</description>
	<lastBuildDate>Fri, 09 Jul 2010 02:50:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Interviewed On Uber Leet Hacker Force Radio</title>
		<link>http://www.mattjones.workhorsy.org/2010/07/08/interviewed-on-uber-leet-hacker-force-radio/</link>
		<comments>http://www.mattjones.workhorsy.org/2010/07/08/interviewed-on-uber-leet-hacker-force-radio/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 02:50:48 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[Rootin Tootin]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=365</guid>
		<description><![CDATA[The latest episode of Uber Leet Hacker Force Radio is out. I did a quick interview near the end of the show. I talked a little about D and Rootin Tootin. This may be interesting to people who want to learn more about D, and my motivations for creating Rootin Tootin.
Uber Leet Hacker Force Radio [...]]]></description>
			<content:encoded><![CDATA[<p>The latest episode of <a href="http://uberleethackerforce.deepgeek.us">Uber Leet Hacker Force Radio</a> is out. I did a quick interview near the end of the show. I talked a little about <a href="http://digitalmars.com/d/index.html">D</a> and <a href="http://rootin.toot.in">Rootin Tootin</a>. This may be interesting to people who want to learn more about D, and my motivations for creating Rootin Tootin.</p>
<p>Uber Leet Hacker Force Radio is syndicated on <a href="http://hackerpublicradio.org">Hacker Public Radio</a>. The episode can be directly <a href="http://hackerpublicradio.org/eps.php?id=0552">downloaded from here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2010/07/08/interviewed-on-uber-leet-hacker-force-radio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Porting Tornado to D</title>
		<link>http://www.mattjones.workhorsy.org/2010/03/12/porting-tornado-to-d/</link>
		<comments>http://www.mattjones.workhorsy.org/2010/03/12/porting-tornado-to-d/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 03:03:53 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[Code Fragment]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=353</guid>
		<description><![CDATA[The other day I started porting the Tornado web server to D. I just got the IO Loop part ported. I&#8217;m planning on using this in my web framework Rootin Tootin.
You can check out the code on Launchpad: http://launchpad.net/dornado. Next I will add proper Epoll and the HTTP part. But in the meantime, you can [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I started porting the <a href="http://tornadoweb.org">Tornado web server</a> to <a href="http://digitalmars.com/d/index.html">D</a>. I just got the IO Loop part ported. I&#8217;m planning on using this in my web framework <a href="http://rootin.toot.in">Rootin Tootin</a>.</p>
<p>You can check out the code on Launchpad: <a href="http://launchpad.net/dornado">http://launchpad.net/dornado</a>. Next I will add proper Epoll and the HTTP part. But in the meantime, you can try it out with this demo code snippet:</p>

<div class="wp_syntax"><div class="code"><pre class="d" style="font-family:monospace;"><span style="color: #993333;">private</span> <span style="color: #000000; font-weight: bold;">import</span> tango.<span style="color: #006600;">net</span>.<span style="color: #006600;">device</span>.<span style="color: #006600;">Socket</span><span style="color: #66cc66;">;</span>
<span style="color: #993333;">private</span> <span style="color: #000000; font-weight: bold;">import</span> tango.<span style="color: #006600;">io</span>.<span style="color: #006600;">model</span>.<span style="color: #006600;">IConduit</span><span style="color: #66cc66;">;</span>
<span style="color: #993333;">private</span> <span style="color: #000000; font-weight: bold;">import</span> tango.<span style="color: #006600;">net</span>.<span style="color: #006600;">InternetAddress</span><span style="color: #66cc66;">;</span>
<span style="color: #993333;">private</span> <span style="color: #000000; font-weight: bold;">import</span> tango.<span style="color: #006600;">io</span>.<span style="color: #006600;">Stdout</span><span style="color: #66cc66;">;</span>
<span style="color: #993333;">public</span> <span style="color: #000000; font-weight: bold;">import</span> ioloop<span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #993333;">class</span> HelloServer <span style="color: #66cc66;">&#123;</span>
    <span style="color: #993333;">private</span> ServerSocket sock<span style="color: #66cc66;">;</span>
    <span style="color: #993333;">private</span> <span style="color: #993333;">char</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000dd;">1024</span><span style="color: #66cc66;">&#93;</span> buffer<span style="color: #66cc66;">;</span>
&nbsp;
    <span style="color: #993333;">public</span> <span style="color: #993333;">void</span> handle_connection<span style="color: #66cc66;">&#40;</span>Socket connection<span style="color: #66cc66;">,</span> <span style="color: #993333;">char</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> address<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        connection.<span style="color: #006600;">read</span><span style="color: #66cc66;">&#40;</span>buffer<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
        connection.<span style="color: #006600;">write</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;hello world!&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        connection.<span style="color: #006600;">shutdown</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        connection.<span style="color: #006600;">detach</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #993333;">public</span> <span style="color: #993333;">void</span> connection_ready<span style="color: #66cc66;">&#40;</span>ServerSocket sock<span style="color: #66cc66;">,</span> ISelectable.<span style="color: #006600;">Handle</span> fd<span style="color: #66cc66;">,</span> <span style="color: #993333;">uint</span> events<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            Socket connection <span style="color: #66cc66;">=</span> sock.<span style="color: #006600;">accept</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
            connection.<span style="color: #006600;">socket</span>.<span style="color: #006600;">blocking</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
            handle_connection<span style="color: #66cc66;">&#40;</span>connection<span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #993333;">public</span> <span style="color: #993333;">void</span> call_connection_ready<span style="color: #66cc66;">&#40;</span>ISelectable.<span style="color: #006600;">Handle</span> fd<span style="color: #66cc66;">,</span> <span style="color: #993333;">uint</span> events<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        connection_ready<span style="color: #66cc66;">&#40;</span>sock<span style="color: #66cc66;">,</span> fd<span style="color: #66cc66;">,</span> events<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #993333;">public</span> <span style="color: #993333;">void</span> start<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #993333;">int</span> port <span style="color: #66cc66;">=</span> <span style="color: #0000dd;">3000</span><span style="color: #66cc66;">;</span>
        <span style="color: #993333;">int</span> max_waiting_clients <span style="color: #66cc66;">=</span> <span style="color: #0000dd;">128</span><span style="color: #66cc66;">;</span>
        <span style="color: #993333;">bool</span> reuse_address <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006600;">sock</span> <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ServerSocket<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> InternetAddress<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;0.0.0.0&quot;</span><span style="color: #66cc66;">,</span> port<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> max_waiting_clients<span style="color: #66cc66;">,</span> reuse_address<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006600;">sock</span>.<span style="color: #006600;">socket</span>.<span style="color: #006600;">blocking</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
        <span style="color: #993333;">auto</span> io_loop <span style="color: #66cc66;">=</span> IOLoop.<span style="color: #006600;">instance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        <span style="color: #993333;">auto</span> callback <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&amp;</span>this.<span style="color: #006600;">call_connection_ready</span><span style="color: #66cc66;">;</span>
        io_loop.<span style="color: #006600;">add_handler</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006600;">sock</span>.<span style="color: #006600;">fileHandle</span><span style="color: #66cc66;">,</span> callback<span style="color: #66cc66;">,</span> io_loop.<span style="color: #006600;">READ</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        Stdout<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://localhost:3000&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">newline</span>.<span style="color: #006600;">flush</span><span style="color: #66cc66;">;</span>
        io_loop.<span style="color: #006600;">start</span><span style="color: #66cc66;">&#40;</span>sock<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #993333;">public</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    IOLoop.<span style="color: #006600;">use_epoll</span> <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">;</span>
    <span style="color: #993333;">auto</span> server <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HelloServer<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
    server.<span style="color: #006600;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>
You can compile this with:<br />
<code><br />
ldc helloworld.d ../ioloop.d ../language_helper.d<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2010/03/12/porting-tornado-to-d/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rootin Tootin 0.3.0 Release</title>
		<link>http://www.mattjones.workhorsy.org/2010/01/19/rootin-tootin-0-3-0-release/</link>
		<comments>http://www.mattjones.workhorsy.org/2010/01/19/rootin-tootin-0-3-0-release/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 23:48:20 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=335</guid>
		<description><![CDATA[I just released Rootin Tootin 0.3.0. In case you don&#8217;t know what it is: Rootin Tootin is a fast RESTful web server and framework written in D. It is designed to scale well by default, while still providing a developer experience similar to Ruby on Rails.
I don&#8217;t want to transpose the changelog here. You can [...]]]></description>
			<content:encoded><![CDATA[<p>I just released <a href="http://rootin.toot.in">Rootin Tootin</a> 0.3.0. In case you don&#8217;t know what it is: Rootin Tootin is a fast RESTful web server and framework written in D. It is designed to scale well by default, while still providing a developer experience similar to Ruby on Rails.</p>
<p>I don&#8217;t want to transpose the changelog here. You can view that <a href="http://rootin.toot.in/#news">at your leisure</a>. Instead here are my highlights. Firstly, you can now use the link_to function in views to generate links. It will automatically add the .html to the end if needed. Secondly, and most awesomely: it now works properly with REST and Active Resource. You can even use the rails active resource, and python active resource to talk to it:</p>
<p>Lets start by creatnig a simple web app to talk too:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rootintootin name:<span style="color: #c20cb9; font-weight: bold;">users</span> port:<span style="color: #000000;">3000</span> db_user:root db_password:letmein
<span style="color: #7a0874; font-weight: bold;">cd</span> journal
.<span style="color: #000000; font-weight: bold;">/</span>gen recreate database
.<span style="color: #000000; font-weight: bold;">/</span>gen create noun singular:user plural:<span style="color: #c20cb9; font-weight: bold;">users</span>
.<span style="color: #000000; font-weight: bold;">/</span>gen create scaffold note name:string email:string
.<span style="color: #000000; font-weight: bold;">/</span>gen migrate
.<span style="color: #000000; font-weight: bold;">/</span>run</pre></div></div>

<p>Now lets try talking to it, with the rails active resource:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'active_resource'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveResource::Base</span>
	<span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">site</span> = <span style="color:#996600;">&quot;http://localhost:3000&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># create</span>
user = User.<span style="color:#9900CC;">new</span>
user.<span style="color:#9900CC;">name</span> = <span style="color:#996600;">&quot;mr possum&quot;</span>
user.<span style="color:#9900CC;">email</span> = <span style="color:#996600;">&quot;possum@gmail.com&quot;</span>
user.<span style="color:#9900CC;">save</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># update</span>
User.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>user<span style="color:#006600; font-weight:bold;">|</span>
	user.<span style="color:#9900CC;">name</span> = <span style="color:#996600;">&quot;awesome possum&quot;</span>
	user.<span style="color:#9900CC;">save</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># delete</span>
user = User.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:first</span><span style="color:#006600; font-weight:bold;">&#41;</span>
user.<span style="color:#9900CC;">destroy</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># read</span>
User.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>user<span style="color:#006600; font-weight:bold;">|</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;name #{user.name} email #{user.email}&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>If you are feeling more dangerous, you can try the python active resource version:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> pyactiveresource.<span style="color: black;">activeresource</span> <span style="color: #ff7700;font-weight:bold;">import</span> ActiveResource
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> User<span style="color: black;">&#40;</span>ActiveResource<span style="color: black;">&#41;</span>:
	_site = <span style="color: #483d8b;">&quot;http://localhost:3000&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># create</span>
<span style="color: #dc143c;">user</span> = User<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">user</span>.<span style="color: black;">name</span> = <span style="color: #483d8b;">&quot;mr possum&quot;</span>
<span style="color: #dc143c;">user</span>.<span style="color: #dc143c;">email</span> = <span style="color: #483d8b;">&quot;possum@gmail.com&quot;</span>
<span style="color: #dc143c;">user</span>.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># update</span>
<span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: #dc143c;">user</span> <span style="color: #ff7700;font-weight:bold;">in</span> User.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	<span style="color: #dc143c;">user</span>.<span style="color: black;">name</span> = <span style="color: #483d8b;">&quot;awesome possum&quot;</span>
	<span style="color: #dc143c;">user</span>.<span style="color: black;">save</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># delete</span>
<span style="color: #dc143c;">user</span> = User.<span style="color: black;">find_first</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">user</span>.<span style="color: black;">destroy</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># read</span>
<span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: #dc143c;">user</span> <span style="color: #ff7700;font-weight:bold;">in</span> User.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;name {0} email {1}&quot;</span>.<span style="color: black;">format</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">user</span>.<span style="color: black;">name</span>, <span style="color: #dc143c;">user</span>.<span style="color: #dc143c;">email</span><span style="color: black;">&#41;</span></pre></div></div>

<p>So neat. This is just a small sample of what you can do. But there are still many <a href="https://bugs.launchpad.net/rester/+bug/509771">essential</a> <a href="https://bugs.launchpad.net/rester/+bug/503181">features</a> that need to be added. Not to mention html 5 goodness, like websocks and access control.</p>
<p>I&#8217;ll try and add a video walk-through of a basic app later. Bye Bye for now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2010/01/19/rootin-tootin-0-3-0-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rootin Tootin 0.2.0 Release</title>
		<link>http://www.mattjones.workhorsy.org/2010/01/04/rootin-tootin-0-2-0-release/</link>
		<comments>http://www.mattjones.workhorsy.org/2010/01/04/rootin-tootin-0-2-0-release/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 00:28:40 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=322</guid>
		<description><![CDATA[During the end-of-the-year-shopping-season, I spent a few days working on getting the 0.2 release of Rootin Tootin out. For those of you that don&#8217;t know what Rootin Tootin is: It is a fast RESTful web framework and server written in D. Just think of it as a new framework that is designed to be as [...]]]></description>
			<content:encoded><![CDATA[<p>During the end-of-the-year-shopping-season, I spent a few days working on getting the 0.2 release of <a href="http://rootin.toot.in/">Rootin Tootin</a> out. For those of you that don&#8217;t know what <a href="http://rootin.toot.in/">Rootin Tootin</a> is: It is a fast RESTful web framework and server written in <a href="http://digitalmars.com/d/index.html">D</a>. Just think of it as a new framework that is designed to be as easy to use as <a href="http://rubyonrails.org/">Ruby on Rails</a>, while improving on it.</p>
<p>There are tons of new features listed in the changelog. Some highlights are: Sessions work correctly. Flash messages are working too, thanks to sessions. File downloads work. Performance is greatly improved (although nowhere near where it should be). We moved from GPL v2 to GPL v3. And my favorite: Everything is automatically rebuilt when files change. So you no longer have to stop the server, build, and restart when you make code changes. For the complete list of changes, you can checkout the <a href="http://rootin.toot.in/#news">news</a>.</p>
<p>Now I need to write a tutorial, and some documentation. Some more detail on how <a href="http://rootin.toot.in/">Rootin Tootin</a> is different from Rails would be good too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2010/01/04/rootin-tootin-0-2-0-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing Packaging in Linux #1</title>
		<link>http://www.mattjones.workhorsy.org/2009/10/05/fixing-packaging-in-linux-1/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/10/05/fixing-packaging-in-linux-1/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 00:15:54 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[packaging]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=310</guid>
		<description><![CDATA[I really, really, really want feedback on this:
Over the past few months, I&#8217;ve really gotten into packaging on Fedora and Ubuntu. I&#8217;m not an expert, but I can genuinely say our packaging situation is crap. We are so close. And yet we ended up with two major implementations, that are almost the same. There is [...]]]></description>
			<content:encoded><![CDATA[<p>I really, really, really want feedback on this:</p>
<p>Over the past few months, I&#8217;ve really gotten into packaging on Fedora and Ubuntu. I&#8217;m not an expert, but I can genuinely say our packaging situation is crap. We are so close. And yet we ended up with two major implementations, that are almost the same. There is no significant difference between RPM and Dpgk.</p>
<p>So will Fedora abandon their 15,000 packages and choose Dpkg? Will Debian abandon their 35,000 packages and choose RPM? No. Neither will. There is no way for them to transition. And they will not give up their self branded solution. The only way forward is to make a new system, that is both better, and backwards compatible with RPM and Dpkg.</p>
<p>That is what I have been toying with for the past few months. It is called <a href="http://launchpad.net/packagetastic">Packagetastic</a> and It is a replacement for Dpkg and RPM, but still backwards compatible with them. Right now it is just a proof of concept, but can build many small packages on Ubuntu and Fedora.</p>
<p>I made a screencast to show how it works. This is just a simple, introduction. More example on how to use it will come soon. You can view the screencast below:</p>
<p><a href="http://workhorsy.org/junk/packagetastic_1.ogv"><br />
<img src="http://workhorsy.org/junk/packagetastic_1.png" /><br />
<br />packagetastic_1.ogv (96.2 MB)<br />
</a></p>
<p>More information about the project can be found here: <a href="http://launchpad.net/packagetastic">http://launchpad.net/packagetastic</a></p>
<p>Please provide your criticism and feedback at the <a href="https://lists.launchpad.net/packagetastic-developers/">mailing list</a>, this blog post, or my <a href="http://identi.ca/matthewjones">identica page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/10/05/fixing-packaging-in-linux-1/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
<enclosure url="http://workhorsy.org/junk/packagetastic_1.ogv" length="100835511" type="video/ogg" />
		</item>
		<item>
		<title>Scary &#8216;Possible DNS spoofing&#8217; ssh error</title>
		<link>http://www.mattjones.workhorsy.org/2009/10/01/scary-possible-dns-spoofing-ssh-error/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/10/01/scary-possible-dns-spoofing-ssh-error/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 01:45:41 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=300</guid>
		<description><![CDATA[I just tried pushing a bazaar branch, and got a scary message that said &#8220;WARNING: POSSIBLE DNS SPOOFING DETECTED!&#8221;. Turns out my web host (dreamhost) moved my site to a new server. The error was because the RSA key had changed. I had to poke around to confirm that it was legit, and not a [...]]]></description>
			<content:encoded><![CDATA[<p>I just tried pushing a bazaar branch, and got a scary message that said &#8220;WARNING: POSSIBLE DNS SPOOFING DETECTED!&#8221;. Turns out my web host (dreamhost) moved my site to a new server. The error was because the RSA key had changed. I had to poke around to confirm that it was legit, and not a spoof.</p>
<p>But hot damn, that made my heart beat. I&#8217;m glad my everyday tools &#8220;just work&#8221;, with things that can confirm the box is the same.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/10/01/scary-possible-dns-spoofing-ssh-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mark respects girls</title>
		<link>http://www.mattjones.workhorsy.org/2009/09/23/mark-respects-girls/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/09/23/mark-respects-girls/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 04:07:23 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=287</guid>
		<description><![CDATA[This is a comment in reply to this open letter and this dent and the shenanigans that are claiming Mark Shuttleworth said &#8220;Explaining to girls what we actually do.&#8221; or something similar, which implies women don&#8217;t know technology. I hope Skud at http://geekfeminism.org approved my comment.
My Comment:
I&#8217;m not trying to start a flame fest. And [...]]]></description>
			<content:encoded><![CDATA[<p>This is a comment in reply to this <a href="http://geekfeminism.org/2009/09/23/open-letter-to-mark-shuttleworth/">open letter</a> and <a href="http://identi.ca/conversation/10610963">this dent</a> and the shenanigans that are claiming Mark Shuttleworth said &#8220;Explaining to girls what we actually do.&#8221; or something similar, which implies women don&#8217;t know technology. I hope Skud at <a href="http://geekfeminism.org">http://geekfeminism.org</a> approved my comment.</p>
<p><b>My Comment:</b></p>
<p>I&#8217;m not trying to start a flame fest. And really don&#8217;t feel like posting and tweeting to everyone that posts about this.</p>
<p>But the context you are assuming is not there. I watched the live stream. When Mark said try to explain to girls, he was not talking about women not understanding technology. He was talking about how hard the design work is to do, and that if things were designed poorly or had low usability, he would not know how to explain them to girls (my translation). The tone of his voice suggested sarcastic embarrassment, which implies he would prefer to impress girls. So he could have said the same thing about his father. Or better yet. If he was gay, he would have said &#8220;guys&#8221; not &#8220;girls&#8221;.</p>
<p>Also note that he was talking about design when he said it. So the argument that he thinks women are not hard core coders or programmers is moot. And yes he does say “guys” all the time. No one says “gals” by itself, because it sounds sexist. And saying “guys and gals” is as pain in the butt as saying gnu/linux. Everyone says “guys” when they mean “people”.</p>
<p>This incident  really is like wild fire erupting before my eyes. All the tweets, re-tweets, and blog posts are echoing the same sentence fragment, and disintegrating into primal noises. Primates can also re-articulate the same sounds they heard someone else make, or wave a flag. Humans on the other hand can think critically, about what they heard.</p>
<p>Wouldn&#8217;t it make sense to see the video before claiming it is sexist? Or perhaps even know the context of what he was talking about? Or even the minimalist thing, of getting the actual quote?</p>
<p>Please for the love of reason. When the video or transcript is released, form your opinion. Don&#8217;t just re-quote rumors as yours. I respect the work feminists are doing. But this was a knee jerk reaction. Hear the guy in is own words.</p>
<p>I really hope Mark does not let rumors re-create the context of what he said.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/09/23/mark-respects-girls/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Python: Find objects of a certain type in memory</title>
		<link>http://www.mattjones.workhorsy.org/2009/08/23/python-find-objects-of-a-certain-type-in-memory/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/08/23/python-find-objects-of-a-certain-type-in-memory/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 04:33:43 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[Code Fragment]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=279</guid>
		<description><![CDATA[This code snippet will allow you to look for objects of a certain type in memory. This is very useful for plugins:

&#34;&#34;&#34;
    This looks through all the objects in memory, to find ones
    of the designated type.
&#34;&#34;&#34;
&#160;
import gc
&#160;
class Animal&#40;object&#41;:
    def make_noise&#40;self&#41;:
      [...]]]></description>
			<content:encoded><![CDATA[<p>This code snippet will allow you to look for objects of a certain type in memory. This is very useful for plugins:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #483d8b;">&quot;&quot;&quot;
    This looks through all the objects in memory, to find ones
    of the designated type.
&quot;&quot;&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">gc</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Animal<span style="color: black;">&#40;</span><span style="color: #008000;">object</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> make_noise<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;snort&quot;</span>
&nbsp;
animal = Animal<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> obj <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">gc</span>.<span style="color: black;">get_objects</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">type</span><span style="color: black;">&#40;</span>obj<span style="color: black;">&#41;</span> == Animal:
        obj.<span style="color: black;">make_noise</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/08/23/python-find-objects-of-a-certain-type-in-memory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rester Screencast 1: Intro and Server Push</title>
		<link>http://www.mattjones.workhorsy.org/2009/08/09/rester-screencast-1-intro-and-server-push/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/08/09/rester-screencast-1-intro-and-server-push/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 04:56:00 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=265</guid>
		<description><![CDATA[During my job hunting, I was going over my resume and portfolio. I noticed that my project Rester is just about a year old. It is also getting to a point, where is is almost useful to other people.
If you are interested: Rester is a fast RESTful web server and framework written in D. It [...]]]></description>
			<content:encoded><![CDATA[<p>During my job hunting, I was going over my resume and portfolio. I noticed that my project <a href="https://launchpad.net/rester">Rester</a> is just about a year old. It is also getting to a point, where is is almost useful to other people.</p>
<p>If you are interested: <a href="https://launchpad.net/rester">Rester</a> is a fast <a href="http://en.wikipedia.org/wiki/RESTful">RESTful</a> web server and framework written in <a href="http://digitalmars.com/d/index.html">D</a>. It should be as easy to use as Ruby on Rails, but provide good performance by default, and be easy to deploy.</p>
<p>I made a brief screencast, with an introduction and an example that uses server push.</p>
<p><a href="http://workhorsy.org/junk/rester_1.ogv"><br />
rester_1.ogv (27.7 Megabytes):<br />
<img src="http://workhorsy.org/junk/rester_1.png" alt="" /></a></p>
<p>You can also view the video in the legacy flash format at Youtube:<br />
<a href="http://www.youtube.com/watch?v=uBfdn5RCrlw">http://www.youtube.com/watch?v=uBfdn5RCrlw</a></p>
<p>Feel free to try it out yourself, and leave comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/08/09/rester-screencast-1-intro-and-server-push/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Search Ubuntu PPA</title>
		<link>http://www.mattjones.workhorsy.org/2009/07/11/search-ubuntu-ppa/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/07/11/search-ubuntu-ppa/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 04:38:32 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=257</guid>
		<description><![CDATA[I can&#8217;t believe I did not know about this until now. You can search the Ubuntu PPAs on Launchpad:
https://launchpad.net/ubuntu/+ppas
I found all kinds of cool packages. Some for new application, and some for updated versions. My favorites so far are: ldc, pcsx2, vlc, arora, gnome-colors, shrip, eclipse, and pitivi.
]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t believe I did not know about this until now. You can search the Ubuntu PPAs on Launchpad:</p>
<p><a href="https://launchpad.net/ubuntu/+ppas" target="_blank">https://launchpad.net/ubuntu/+ppas</a></p>
<p>I found all kinds of cool packages. Some for new application, and some for updated versions. My favorites so far are: ldc, pcsx2, vlc, arora, gnome-colors, shrip, eclipse, and pitivi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/07/11/search-ubuntu-ppa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Space Pony Demo #2</title>
		<link>http://www.mattjones.workhorsy.org/2009/06/02/space-pony-demo-2/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/06/02/space-pony-demo-2/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 02:24:00 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[desktop]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[spacepony]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=237</guid>
		<description><![CDATA[Here is the second Space Pony screencast. Note that the audio is out of sync with the video. It seems to be delayed by a few seconds.
This one shows some bug fixes, background syncing, and avatar syncing:

spacepony_demo_2.ogv (31.2 Megabytes):

As usual, comments, questions, and feedback are welcome. You can also join the mailing list:
https://launchpad.net/~spacepony-developers
]]></description>
			<content:encoded><![CDATA[<p>Here is the second <a href="https://launchpad.net/spacepony">Space Pony</a> screencast. Note that the audio is out of sync with the video. It seems to be delayed by a few seconds.</p>
<p>This one shows some bug fixes, background syncing, and avatar syncing:</p>
<p><a href="http://workhorsy.org/junk/spacepony_demo_2.ogv"><br />
spacepony_demo_2.ogv (31.2 Megabytes):<br />
<img src="http://workhorsy.org/junk/spacepony_demo_2.png" alt="" /></a></p>
<p>As usual, comments, questions, and feedback are welcome. You can also join the mailing list:</p>
<p><a href="https://launchpad.net/~spacepony-developers">https://launchpad.net/~spacepony-developers</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/06/02/space-pony-demo-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Space Pony Demo #1</title>
		<link>http://www.mattjones.workhorsy.org/2009/05/18/space-pony-demo/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/05/18/space-pony-demo/#comments</comments>
		<pubDate>Mon, 18 May 2009 08:35:16 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[desktop]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[spacepony]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=227</guid>
		<description><![CDATA[I made a screencast for Space Pony: A desktop syncing client and server I&#8217;m working on. Right now it is uber apha quality, so risk takers only.
This screencast shows syncing of Tomboy notes and Pidgin accounts:

spacepony_demo_1.ogv (40.2 Megabytes):

Anyone wanting to help should join the team and use the mailing list:
https://launchpad.net/~spacepony-developers
]]></description>
			<content:encoded><![CDATA[<p>I made a screencast for <a href="https://launchpad.net/spacepony">Space Pony</a>: A desktop syncing client and server I&#8217;m working on. Right now it is uber apha quality, so risk takers only.</p>
<p>This screencast shows syncing of <a href="http://projects.gnome.org/tomboy/">Tomboy</a> notes and <a href="http://www.pidgin.im/">Pidgin</a> accounts:</p>
<p><a href="http://workhorsy.org/junk/spacepony_demo_1.ogv"><br />
spacepony_demo_1.ogv (40.2 Megabytes):<br />
<img class="alignnone" src="http://workhorsy.org/junk/spacepony_demo_1.png" alt="" width="500" height="313" /></a></p>
<p>Anyone wanting to help should join the team and use the mailing list:</p>
<p><a href="https://launchpad.net/~spacepony-developers">https://launchpad.net/~spacepony-developers</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/05/18/space-pony-demo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fan made Metal Gear videos</title>
		<link>http://www.mattjones.workhorsy.org/2009/05/05/fan-made-metal-gear-videos/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/05/05/fan-made-metal-gear-videos/#comments</comments>
		<pubDate>Wed, 06 May 2009 06:13:37 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=207</guid>
		<description><![CDATA[I have been a huge fan of the Metal Gear games for almost 10 years now. A few months ago I noticed a fan made film in the works called Metal Gear Outer Heaven. I read up on it, and waited, but it seemed to never actually release. But now its out.
So in the spirit [...]]]></description>
			<content:encoded><![CDATA[<p>I have been a huge fan of the <a href="http://en.wikipedia.org/wiki/Metal_Gear_Solid" target="_blank">Metal Gear</a> games for almost 10 years now. A few months ago I noticed a fan made film in the works called <a href="http://oh.metalgearsolid.cz/" target="_blank">Metal Gear Outer Heaven</a>. I read up on it, and waited, but it seemed to never actually release. But now its out.</p>
<p>So in the spirit of the Metal Gear goodness, I decided to do a quick run-through of my favourite fan-made films. Here are my top 10:</p>
<h3><a href="http://www.youtube.com/watch?v=NT8vZwPMOho" target="_blank">10. Metal Gear Awesome</a></h3>
<p>This is probably my lest favourite. It is still good, but just not as good. It just has too many knee jerk, inconsequential, dirty jokes. That combined with the sloppy animation knocks it down a few rankings.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/NT8vZwPMOho&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/NT8vZwPMOho&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=tT10n0dn0EI" target="_blank">9. UltraNeki &amp; Solid Snake Codec Scene!</a></h3>
<p>This is awesome just because it has the actual voice actor of Solid Snake (David Hayter), doing custom voice overs.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/tT10n0dn0EI&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/tT10n0dn0EI&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=6Um0yhDx5ok" target="_blank">8. David Hayter&#8217;s MGS 20th Year Tribute</a></h3>
<p>Again, here is David Hayter (the voice of Snake) doing some action stuff. It is not really fan made, but still cool. And look! He speaks Japanese too.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/6Um0yhDx5ok&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/6Um0yhDx5ok&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=zV7qGBkAEl8" target="_blank">7. Metal Gear Crisis 1.1</a></h3>
<p>This is a new one for me. It is much better than the other fan-drawn ones. Because it does not completely fall down the toilet into humour, only little kids would laugh at. Nice animation technique too.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/zV7qGBkAEl8&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/zV7qGBkAEl8&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=74QZ3DgYAFM" target="_blank">6. Metal Gear: Outer Heaven</a></h3>
<p>This was a bit cheesy. And lacking many scenes, that are filled in with story boards. But it was a relatively large undertaking to make this long beast. I like how the actor they have play Snake, is much more agile than the usual brutes I see.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/74QZ3DgYAFM&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/74QZ3DgYAFM&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=oN2WkHLIweE" target="_blank">5. Metal Gear Solid Cast Improv</a></h3>
<p>This is neat, because it shows the actual English voice actors from the games.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/oN2WkHLIweE&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/oN2WkHLIweE&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=4OYzXpQRcNE" target="_blank">4. Mega64: Metal Gear Solid</a></h3>
<p>One of the better, earlier Mega64 episodes. Surprised they did not get arrested running around, and acting like that.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/4OYzXpQRcNE&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/4OYzXpQRcNE&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=HdXlmePBZx4" target="_blank">3. Lupin III vs MGS</a></h3>
<p>This is a parody of the original Lupin III into, but made to match the MGS characters. Very cool. And very good artwork. It must have taken a while to animate.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/HdXlmePBZx4&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/HdXlmePBZx4&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=CYLGysHxZ4A" target="_blank">2. Metal Gear Solid: A Day At The Office</a></h3>
<p>This was one of my favourite fan films for a while. It is cheesy as hell. But has some very clever humour. I especially liked the Albert Wesker joke, and the Monopoly game.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/CYLGysHxZ4A&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/CYLGysHxZ4A&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3><a href="http://www.youtube.com/watch?v=a7Lj4KIpTqo" target="_blank">1. Metal Gear Solid: Dinner with the Snakes</a></h3>
<p>My Faveorite. Very clever concept. You can see details from many of the MG games. Including Metal Gear Acid, and the original Metal Gear. Nice costumes too.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/a7Lj4KIpTqo&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/a7Lj4KIpTqo&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/05/05/fan-made-metal-gear-videos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>More hot new music</title>
		<link>http://www.mattjones.workhorsy.org/2009/04/11/more-hot-new-music/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/04/11/more-hot-new-music/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 11:25:42 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=201</guid>
		<description><![CDATA[I&#8217;ve been listening to new music as it drips into the jamendo new releases. I found a few more gems:




&#160;&#160;
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been listening to new music as it drips into the <a href="http://www.jamendo.com/en/albums?location_country=all&amp;order=date_desc">jamendo new releases</a>. I found a few more gems:</p>
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="src" value="http://widgets.jamendo.com/en/album/?album_id=43442&amp;playertype=2008&amp;refuid=207225" /><embed type="application/x-shockwave-flash" width="200" height="300" src="http://widgets.jamendo.com/en/album/?album_id=43442&amp;playertype=2008&amp;refuid=207225" bgcolor="#FFFFFF" quality="high" wmode="transparent" allowscriptaccess="always" align="middle"></embed></object></div>
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="src" value="http://widgets.jamendo.com/en/album/?album_id=43405&amp;playertype=2008&amp;refuid=207225" /><embed type="application/x-shockwave-flash" width="200" height="300" src="http://widgets.jamendo.com/en/album/?album_id=43405&amp;playertype=2008&amp;refuid=207225" bgcolor="#FFFFFF" quality="high" wmode="transparent" allowscriptaccess="always" align="middle"></embed></object></div>
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="src" value="http://widgets.jamendo.com/en/album/?album_id=42122&amp;playertype=2008&amp;refuid=207225" /><embed type="application/x-shockwave-flash" width="200" height="300" src="http://widgets.jamendo.com/en/album/?album_id=42122&amp;playertype=2008&amp;refuid=207225" bgcolor="#FFFFFF" quality="high" wmode="transparent" allowscriptaccess="always" align="middle"></embed></object></div>
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="src" value="http://widgets.jamendo.com/en/album/?album_id=2861&amp;playertype=2008&amp;refuid=207225" /><embed type="application/x-shockwave-flash" width="200" height="300" src="http://widgets.jamendo.com/en/album/?album_id=2861&amp;playertype=2008&amp;refuid=207225" bgcolor="#FFFFFF" quality="high" wmode="transparent" allowscriptaccess="always" align="middle"></embed></object></div>
<div><object width="200" height="300" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" align="middle"><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="movie" value="http://widgets.jamendo.com/en/album/?album_id=30220&#038;playertype=2008&#038;refuid=207225" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><embed src="http://widgets.jamendo.com/en/album/?album_id=30220&#038;playertype=2008&#038;refuid=207225" quality="high" wmode="transparent" bgcolor="#FFFFFF" width="200" height="300" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">&nbsp;</embed>&nbsp;</object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/04/11/more-hot-new-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Fragment: How to programatically get MySQL table relationships</title>
		<link>http://www.mattjones.workhorsy.org/2009/02/27/code-fragment-how-to-programatically-get-mysql-table-relationships/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/02/27/code-fragment-how-to-programatically-get-mysql-table-relationships/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 19:43:47 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[Code Fragment]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=195</guid>
		<description><![CDATA[This magical chunk of goodness will allow you to query a mysql database to determine what table fields are foreign keys, and what they reference. Just replace &#8216;database_name&#8217; and &#8216;table_name&#8217; with the respective names you want:

1
2
3
4
5
6
7
SELECT column_name, referenced_table_name,
referenced_column_name
FROM information_schema.key_column_usage
WHERE table_schema='database_name'
AND table_name='table_name'
AND referenced_table_name IS NOT NULL
AND referenced_column_name IS NOT NULL;

]]></description>
			<content:encoded><![CDATA[<p>This magical chunk of goodness will allow you to query a mysql database to determine what table fields are foreign keys, and what they reference. Just replace &#8216;database_name&#8217; and &#8216;table_name&#8217; with the respective names you want:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> column_name<span style="color: #66cc66;">,</span> referenced_table_name<span style="color: #66cc66;">,</span>
referenced_column_name
<span style="color: #993333; font-weight: bold;">FROM</span> information_schema<span style="color: #66cc66;">.</span>key_column_usage
<span style="color: #993333; font-weight: bold;">WHERE</span> table_schema<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'database_name'</span>
<span style="color: #993333; font-weight: bold;">AND</span> table_name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'table_name'</span>
<span style="color: #993333; font-weight: bold;">AND</span> referenced_table_name <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>
<span style="color: #993333; font-weight: bold;">AND</span> referenced_column_name <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>;</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/02/27/code-fragment-how-to-programatically-get-mysql-table-relationships/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to install GDC from source</title>
		<link>http://www.mattjones.workhorsy.org/2009/02/11/how-to-install-gdc-from-source/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/02/11/how-to-install-gdc-from-source/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 09:12:16 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=180</guid>
		<description><![CDATA[I can&#8217;t believe there is no package for gdc on Fedora. so I spent forever trying to install it from source. Here is a script if anyone wants it.

1
2
# On ubuntu run this to install dependencies:
sudo apt-get install build-essential gawk libmpfr-dev libppl7 libppl-c2 libppl-dev libcloog-ppl-dev libc6-dev-amd64


1
2
# On fedora run this to install dependencies:
sudo yum install [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t believe there is no package for <a href="http://dgcc.sourceforge.net/">gdc</a> on <a href="http://fedoraproject.org/">Fedora</a>. so I spent forever trying to install it from source. Here is a script if anyone wants it.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># On ubuntu run this to install dependencies:</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-essential <span style="color: #c20cb9; font-weight: bold;">gawk</span> libmpfr-dev libppl7 libppl-c2 libppl-dev libcloog-ppl-dev libc6-dev-amd64</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># On fedora run this to install dependencies:</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> yum <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">gcc</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Download GCC and GDC</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> ~
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> gdc
<span style="color: #7a0874; font-weight: bold;">cd</span> gdc
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>downloads.sourceforge.net<span style="color: #000000; font-weight: bold;">/</span>dgcc<span style="color: #000000; font-weight: bold;">/</span>gdc-<span style="color: #000000;">0.24</span>-src.tar.bz2
<span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #c20cb9; font-weight: bold;">ftp</span>:<span style="color: #000000; font-weight: bold;">//</span>gcc.gnu.org<span style="color: #000000; font-weight: bold;">/</span>pub<span style="color: #000000; font-weight: bold;">/</span>gcc<span style="color: #000000; font-weight: bold;">/</span>releases<span style="color: #000000; font-weight: bold;">/</span>gcc-4.1.2<span style="color: #000000; font-weight: bold;">/</span>gcc-4.1.2.tar.bz2</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Patch GCC to support D</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> xjf gcc-4.1.2.tar.bz2
<span style="color: #7a0874; font-weight: bold;">cd</span> gcc-4.1.2<span style="color: #000000; font-weight: bold;">/</span>gcc<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> xjf ..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>gdc-<span style="color: #000000;">0.24</span>-src.tar.bz2
<span style="color: #7a0874; font-weight: bold;">cd</span> ..
.<span style="color: #000000; font-weight: bold;">/</span>gcc<span style="color: #000000; font-weight: bold;">/</span>d<span style="color: #000000; font-weight: bold;">/</span>setup-gcc.sh</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Build GCC</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> da_actual_build
<span style="color: #7a0874; font-weight: bold;">cd</span> da_actual_build
..<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">-v</span> <span style="color: #660033;">--enable-languages</span>=c,d,<span style="color: #c20cb9; font-weight: bold;">c++</span> <span style="color: #660033;">--prefix</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span> <span style="color: #660033;">--disable-shared</span> <span style="color: #660033;">--with-system-zlib</span> <span style="color: #660033;">--libexecdir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib <span style="color: #660033;">--without-included-gettext</span> <span style="color: #660033;">--enable-threads</span>=posix <span style="color: #660033;">--enable-nls</span> <span style="color: #660033;">--enable-clocale</span>=gnu <span style="color: #660033;">--disable-libmudflap</span> <span style="color: #660033;">--enable-targets</span>=all <span style="color: #660033;">--build</span>=i486-linux-gnu <span style="color: #660033;">--host</span>=i486-linux-gnu <span style="color: #660033;">--target</span>=i486-linux-gnu
<span style="color: #c20cb9; font-weight: bold;">make</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Install it</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<p>That should do it. Next I will need to install the Tango libraries.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/02/11/how-to-install-gdc-from-source/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Feel the glory of a nineteenth century software installation experience</title>
		<link>http://www.mattjones.workhorsy.org/2009/02/04/feel-the-glory-of-a-nineteenth-century-software-installation-experience/</link>
		<comments>http://www.mattjones.workhorsy.org/2009/02/04/feel-the-glory-of-a-nineteenth-century-software-installation-experience/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 07:35:45 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=134</guid>
		<description><![CDATA[Today I booted my Windows XP virtual machine as usual. And as every time I boot Windows, there were many updates, each with its own myriad of wizards, eulas, popup balloons, and &#8220;Are you sure you want to do what you are trying to do?&#8221; dialog boxes. One of said updates was Java. This was [...]]]></description>
			<content:encoded><![CDATA[<p>Today I booted my Windows XP virtual machine as usual. And as every time I boot Windows, there were many updates, each with its own myriad of wizards, eulas, popup balloons, and &#8220;Are you sure you want to do what you are trying to do?&#8221; dialog boxes. One of said updates was Java. This was an update to the Java that came bundled with Open Office 3.</p>
<p>Lets walk through that user experience to demonstrate just how wrong things are:</p>
<h3>Step 1</h3>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail.jpg"><img class="aligncenter size-full wp-image-136" title="sun_fail" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail.jpg" alt="" width="500" height="472" /></a></p>
<p style="text-align: center;">
<p>Here is first page of the wizard. Looks like a typical Windows installer with just a hint of eula. My first reaction when seeing this is why the hell do I have to re-install Java when It was already installed? Why does it not do an upgrade? I&#8217;ve already agreed to the previous 3 eulas when I installed the previous 3 updates to Java. It should just rip the old version out and stick the new version in, without any user intervention.</p>
<p>Next I notice that it is also forcing me to install JavaFX. JavaFX is an attempt by Sun to create their own Flash/Silverlight clone. I have no way to not install JavaFX.</p>
<p>On top of that, they want to send &#8220;some non-personal information&#8221; to &#8220;help improve performance&#8221;. Then a url that claims to show you how to not have this information sent. Fail once for not just having a checkbox for that. Fail twice for not showing me what data is sent. And fail thrice for not having that url a link or button that opens the page in my browser.</p>
<h3>Step 2</h3>
<p style="text-align: center;"><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_2.jpg"><img class="size-full wp-image-137 aligncenter" title="sun_fail_2" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_2.jpg" alt="" width="500" height="469" /></a><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_2.jpg"> </a></p>
<p>Next up, a frickin&#8217; advertisement inside the installer! Not only is the Yahoo toolbar a piece of shit (as we will see later). But it is completely unrelated to the reason why Java is on this system. Like most users, it is there only for Open Office.</p>
<p>And look! The fucking check box is checked by default! That means most users will install it without looking. This is absolutely retarded.</p>
<p>Just for the sake of having the complete experience that Sun wants us to have, lets allow it to install the Yahoo toolbar anyway.</p>
<h3>Step 3</h3>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_3.jpg"><img class="aligncenter size-full wp-image-138" title="sun_fail_3" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_3.jpg" alt="" width="500" height="471" /></a></p>
<p>Here is the actual installation. Hey look: Another advertisement. I wonder what product it is telling me about. I bet it will be a good one. After all, this is the only time Sun gets to show an add to someone they know is running Java, Windows XP, and Open Office. This realestate would be targeted advertisement gold. I can think of many cool Sun things to put on here. Fuck why not put all of them? Lets see: VirtualBox, MySQL, or even Open Solaris.</p>
<p>Oh. Its just Open Office. That thing that is the reason why we are installing Java to begin with. This is a bit like putting advertisements for milk, on boxes for cereal. If they have this, then they already have that, or will get it later. Forget milk. What we need is ads for bananas or strawberries in that cereal.</p>
<h3>Step 4</h3>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_4.jpg"><img class="aligncenter size-full wp-image-139" title="sun_fail_4" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_4.jpg" alt="" width="500" height="293" /></a></p>
<p>Ok were installed! Lets look at our beautifully impregnated web browsers. Wow we must have 2/3 of the screen remaining for actual fucking web browsing. And notice how wide it is. Good thing I have a wide screen monitor. Also that awesome select box. It must be 20 pixels wide. Very useful. Especially since there is no indication of what it does.</p>
<h3>Step 5</h3>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_5.jpg"><img class="aligncenter size-full wp-image-140" title="sun_fail_5" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_5.jpg" alt="" width="500" height="289" /></a></p>
<p>Time to remove that crapware Yahoo Toolbar. Hmmm. Its not in the add remove programs list. Oh wait. We remove it directly from inside Firefox. How intuitive! Every piece of software can install shit any way it wants! Awesome. We will just pretend that is a good thing. Because Firefox can do no harm.</p>
<h3>Step 6</h3>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_6.jpg"><img class="aligncenter size-full wp-image-154" title="sun_fail_6" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2009/02/sun_fail_6.jpg" alt="" width="500" height="416" /></a></p>
<p>All right. Now lets actually try to use open office. This time on our Windows 7 beta. Oh look! another update! Goodie! Not only is it related to Open Office, but it could have been bundled with the one I just installed. I&#8217;m so glad it was not.</p>
<h3>Conclusion</h3>
<p>What the hell are you thinking Sun? No one wants the fucking Yahoo Toolbar. As your high ranking executives blindly repeat the mantra &#8220;Sun really gets it&#8221;, you are getting a reputation as a bloatware company. Don&#8217;t ruin the Open Office ecosystem. It is one of the four good things you have left.</p>
<p>And Microsoft: Why the hell don&#8217;t you create a packaging system? The MSI format was a foot in the right direction. And yet the same problems have been around for almost 20 years. Create a package management system like most Linux distributions do. In fact just clone <a href="http://wiki.rpath.com/wiki/Conary">Conary</a>. Or even <a href="http://store.steampowered.com/">Steam</a>. Then we could just use Windows Update to manage all our software and libraries.</p>
<p>I am dead-beat tired of having to party like its 1995 evey time I use Windows.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2009/02/04/feel-the-glory-of-a-nineteenth-century-software-installation-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Wikipedia hack ever!</title>
		<link>http://www.mattjones.workhorsy.org/2008/12/28/best-wikipedia-hack-ever/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/12/28/best-wikipedia-hack-ever/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 08:31:29 +0000</pubDate>
		<dc:creator>mattjones</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=119</guid>
		<description><![CDATA[Lookie! Lookie! I figured out a hack to make the donation bar on wikipedia go up!

&#8230;
Just donate some fucking money. You tards.

I guess this means I am not buying Mirror&#8217;s Edge and Armored Core For Answers any time soon.
]]></description>
			<content:encoded><![CDATA[<p>Lookie! Lookie! I figured out a hack to make the donation bar on wikipedia go up!</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/12/wikipedia_donation_bar.png"><img class="alignnone size-medium wp-image-120" title="wikipedia_donation_bar" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/12/wikipedia_donation_bar-300x79.png" alt="" width="300" height="79" /></a></p>
<p>&#8230;</p>
<p>Just donate some fucking money. You tards.</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/12/wikipedia_donation.png"><img class="alignnone size-medium wp-image-122" title="wikipedia_donation" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/12/wikipedia_donation-300x199.png" alt="" width="300" height="199" /></a></p>
<p>I guess this means I am not buying <a title="Mirror's Edge" href="http://en.wikipedia.org/wiki/Mirror%27s_Edge">Mirror&#8217;s Edge</a> and <a title="Armored Core: For Answers" href="http://en.wikipedia.org/wiki/Armored_Core_for_Answer">Armored Core For Answers</a> any time soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/12/28/best-wikipedia-hack-ever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Shrip Package</title>
		<link>http://www.mattjones.workhorsy.org/2008/12/19/new-shrip-package/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/12/19/new-shrip-package/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 06:32:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[packaging]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=116</guid>
		<description><![CDATA[I made a new Shrip package. This is for the new 0.5 release.
http://workhorsy.org/junk/shrip_0.5.0-1_i386.deb
Source packages:
http://workhorsy.org/junk/shrip_0.5.0-1.diff.gz
http://workhorsy.org/junk/shrip_0.5.0-1.dsc
http://workhorsy.org/junk/shrip_0.5.0.orig.tar.gz
Updated:
Here is how to use shrip:
For example to encode episode 1 of Jericho from a DVD ISO to a matroska container with h.264 video and aac audio at 720×480, you would do this:

shrip encode --device=/media/archive2/JERICHO_S1_AC_D1.iso --title=3 --chapters=1-9 --audio=1 --scale=720:480 --crop=0:0:720:480 --container=mkv --video-codec=x264 [...]]]></description>
			<content:encoded><![CDATA[<p>I made a new <a href="http://ogmrip.sourceforge.net/">Shrip</a> package. This is for the new 0.5 release.</p>
<p><a href="http://workhorsy.org/junk/shrip_0.5.0-1_i386.deb">http://workhorsy.org/junk/shrip_0.5.0-1_i386.deb</a></p>
<p>Source packages:</p>
<p><a href="http://workhorsy.org/junk/shrip_0.5.0-1.diff.gz">http://workhorsy.org/junk/shrip_0.5.0-1.diff.gz</a></p>
<p><a href="http://workhorsy.org/junk/shrip_0.5.0-1.dsc">http://workhorsy.org/junk/shrip_0.5.0-1.dsc</a></p>
<p><a href="http://workhorsy.org/junk/shrip_0.5.0.orig.tar.gz">http://workhorsy.org/junk/shrip_0.5.0.orig.tar.gz</a></p>
<p>Updated:</p>
<p>Here is how to use shrip:</p>
<p>For example to encode episode 1 of Jericho from a DVD ISO to a matroska container with h.264 video and aac audio at 720×480, you would do this:<br />
<code><br />
shrip encode --device=/media/archive2/JERICHO_S1_AC_D1.iso --title=3 --chapters=1-9 --audio=1 --scale=720:480 --crop=0:0:720:480 --container=mkv --video-codec=x264 --video-quality=extreme --audio-quality=10 --passes=1 --audio-codec=aac --normalize --ensure-sync --threads=2 /home/matt/Desktop/jericho_ep_1.mkv<br />
</code></p>
<p>You should be able to just change some of the parameters in the above example.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/12/19/new-shrip-package/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Adventures in Ubuntu packaging</title>
		<link>http://www.mattjones.workhorsy.org/2008/12/19/adventures-in-ubuntu-packaging/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/12/19/adventures-in-ubuntu-packaging/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 06:12:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[packaging]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=91</guid>
		<description><![CDATA[
Lately I&#8217;ve been researching how to create Ubuntu packages. For those that don&#8217;t know, packages are the Linux way of installing and managing software. Think Windows Update, but for all software on your computer. There are a few differences though: Each package will specify what versions of other packages it requires. This makes it trivial [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: left; padding: 10px; padding-right: 20px" title="debian_ubuntu_package" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/12/debian_ubuntu_package.png" alt="" width="147" height="162" /></p>
<p>Lately I&#8217;ve been researching how to create Ubuntu packages. For those that don&#8217;t know, packages are the Linux way of installing and managing software. Think Windows Update, but for all software on your computer. There are a few differences though: Each package will specify what versions of other packages it requires. This makes it trivial to see if a newer version of some library will break any software on your system. And since everything on your system is managed by one repository, you usually don&#8217;t have to worry about each program installing another copy of the same library. This happens on Windows a lot. When you install a game, it tends to install its own private version of <a href="http://en.wikipedia.org/wiki/DirectX">DirectX</a>.</p>
<p>The only down side to packaging, is that it takes a few hours to awkwardly walk through making your first package, and many more to properly package more complex programs.</p>
<p>I decided to start by packaging <a href="http://ogmrip.sourceforge.net/">shrip</a>. It is the command-line sister program of <a href="http://ogmrip.sourceforge.net/">ogmrip</a>. It makes it easy to encode DVDs into other <a href="http://en.wikipedia.org/wiki/Container_format_(digital)">containers</a> and formats such as AVI, MPEG, OGG, MKV, et cetera.</p>
<p>I decided on it because, it is a smallish, stand-alone program, which would be much easier than packaging something that is in pieces, like open office. I also wanted to use it for a project I am working on called <a href="https://launchpad.net/ripspread">Ripspread</a>.</p>
<p>I first started learning about packaging by reading the official <a href="https://wiki.ubuntu.com/PackagingGuide/Complete">Complete Ubuntu Packaging Guide</a>. This did not turn out well, as the guide goes off on tangents, and those tangets go off on tangents, and somehow we would end up moving onto the next step, without me understanding which part was actually performed. I muddled through anyway and built the example package. Then I did it again. And again. Even after that I did not retain much of the process.</p>
<p>Then those smarties at ubuntu decided to make a <a href="http://www.youtube.com/watch?v=zKLabbXTqMc&amp;feature=channel_page">screencast packaging guide</a>. But instead of explaining every possible way of doing it, they focused on how they would do it in real life. And it was nice.</p>
<p>Since then I have been able to package shrip and a few other things. Generally my packages work. But there are some things I have not yet figured out. I want to list them here, so I can refer to them as I continue my research:</p>
<ul>
<li>How do I label a package that is not an official release, but checked out from a code repository? And what if I have to change the code before the package can compile?</li>
<li>What about recommended packages? In some places you might want to just install libdvdcss, and others you might want to leave it up to use user&#8217;s discretion.</li>
<li>What about situations where there are multiple options for a required package? For example there are 3 different options for OCR software for reading subtitles in shrip. But I have to pick one when compiling. Is there any way to let the end user decide which to use when installing the package?</li>
<li>What is the difference between XSBC-Original-Maintainer and Original-Maintainer? The Ubuntu guides use XSBC-Original-Maintainer, but many packages just use Original-Maintainer.</li>
<li>How does a package get marked as being in Multiverse or Universe? There does not seem to be anything in the control files that indicates this.</li>
<li>Is it correct to mark the maintainer as <a href="https://wiki.ubuntu.com/MOTU">Ubuntu MOTU Developers</a> &lt;ubuntu-motu@lists.ubuntu.com&gt;, even though I am not yet a MOTU? People at this mailing list will have no idea what this package is. It makes me feel like I am misrepresenting the MOTU by doing this.</li>
<li>What is the difference between having the priority set as &#8220;extra&#8221; or &#8220;optional&#8221;? They seem almost the same  when you read the description.</li>
</ul>
<p>I hope to figure out these issues, and make some good packages that make it into ubuntu some day.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/12/19/adventures-in-ubuntu-packaging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VLC Easter Egg</title>
		<link>http://www.mattjones.workhorsy.org/2008/12/19/vlc-easter-egg/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/12/19/vlc-easter-egg/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 02:54:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=86</guid>
		<description><![CDATA[I just noticed an easter egg in VLC. It looks like it checks the date, and if it is close to christmas, it changes its icon.

]]></description>
			<content:encoded><![CDATA[<p>I just noticed an easter egg in VLC. It looks like it checks the date, and if it is close to christmas, it changes its icon.</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/12/vlc_easter_egg.jpg"><img class="alignnone size-medium wp-image-88" title="vlc_easter_egg" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/12/vlc_easter_egg-300x190.jpg" alt="" width="300" height="190" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/12/19/vlc-easter-egg/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New Grace Valhalla Album</title>
		<link>http://www.mattjones.workhorsy.org/2008/12/02/new-grace-valhalla-album/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/12/02/new-grace-valhalla-album/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 00:42:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=80</guid>
		<description><![CDATA[The amazingly skilled Nancy of Grace Valhalla has released a new album on Jamendo. Check it out below. Remember to donate if you like it, as it is free creative commons.

That reminds me. I can think of about 5 albums that deserve donations. Time to donate again.
]]></description>
			<content:encoded><![CDATA[<p>The amazingly skilled Nancy of <a href="http://www.jamendo.com/en/artist/grace.valhalla">Grace Valhalla</a> has released a new album on <a href="http://www.jamendo.com">Jamendo</a>. Check it out below. Remember to donate if you like it, as it is free creative commons.</p>
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="src" value="http://widgets.jamendo.com/en/album/?album_id=34523&amp;playertype=2008&amp;refuid=207225" /><embed type="application/x-shockwave-flash" width="200" height="300" src="http://widgets.jamendo.com/en/album/?album_id=34523&amp;playertype=2008&amp;refuid=207225" bgcolor="#FFFFFF" quality="high" wmode="transparent" allowscriptaccess="always" align="middle"></embed></object></div>
<p>That reminds me. I can think of about 5 albums that deserve donations. Time to donate again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/12/02/new-grace-valhalla-album/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Tango GDC Package</title>
		<link>http://www.mattjones.workhorsy.org/2008/11/29/new-tango-gdc-package/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/11/29/new-tango-gdc-package/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 12:42:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[packaging]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=67</guid>
		<description><![CDATA[I built a new package for version 0.99.7 of Tango (for compiling with GDC on Ubuntu 8.04 and 8.10):
tango-gdc_0.99.7-1_i386.deb
I&#8217;m still learning to package. So this isn&#8217;t good enough to put into official repositories. In fact, it is very messed up in a few places. But everything I have compiled using it works just fine.
If anyone [...]]]></description>
			<content:encoded><![CDATA[<p>I built a new package for version 0.99.7 of <a href="http://www.dsource.org/projects/tango">Tango</a> (for compiling with GDC on Ubuntu 8.04 and 8.10):</p>
<p><a href="http://workhorsy.org/junk/tango-gdc_0.99.7-1_i386.deb">tango-gdc_0.99.7-1_i386.deb</a></p>
<p>I&#8217;m still learning to package. So this isn&#8217;t good enough to put into official repositories. In fact, it is very messed up in a few places. But everything I have compiled using it works just fine.</p>
<p>If anyone is interested, it is heavily based on the packages that were built with the scripts on this page: <a href="http://codeblog.palos.ro/2008/03/27/debian-d-packages-release-3/" target="_blank">http://codeblog.palos.ro/2008/03/27/debian-d-packages-release-3/</a></p>
<p>Keep your fingers crossed that things keep compiling.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/11/29/new-tango-gdc-package/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teh Awesome No Budget Web Comic</title>
		<link>http://www.mattjones.workhorsy.org/2008/11/14/teh-awesome-no-budget-web-comic/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/11/14/teh-awesome-no-budget-web-comic/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 01:44:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[comic]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=65</guid>
		<description><![CDATA[Click for the full size image:

]]></description>
			<content:encoded><![CDATA[<p>Click for the full size image:</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/11/comic_final.png"><img class="alignnone size-medium wp-image-62" title="comic_final" src="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/11/comic_final-206x300.png" alt="" width="206" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/11/14/teh-awesome-no-budget-web-comic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu seeping into popular culture</title>
		<link>http://www.mattjones.workhorsy.org/2008/11/10/ubuntu-seepeing-into-popular-cluture/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/11/10/ubuntu-seepeing-into-popular-cluture/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 23:23:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=56</guid>
		<description><![CDATA[I just noticed this parody video &#8220;The Matrix Runs on Windows&#8221; at college humor. Besides being absolutely hilarious, it was surprising to see Ubuntu mentioned in there. And they even pronounce it correctly.
I just wanted to point this out because it is yet another example (albeit small one) of Ubuntu in popular culture. We must [...]]]></description>
			<content:encoded><![CDATA[<p>I just noticed this parody video <a title="The Matrix Runs on Windows" href="http://www.collegehumor.com/video:1886349">&#8220;The Matrix Runs on Windows&#8221;</a> at college humor. Besides being absolutely hilarious, it was surprising to see Ubuntu mentioned in there. And they even pronounce it correctly.</p>
<p>I just wanted to point this out because it is yet another example (albeit small one) of Ubuntu in popular culture. We must be doing it right, if the average users are starting to see Ubuntu as a viable alternative to Windows.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/11/10/ubuntu-seepeing-into-popular-cluture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Great Music</title>
		<link>http://www.mattjones.workhorsy.org/2008/11/01/more-great-music/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/11/01/more-great-music/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 13:03:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=51</guid>
		<description><![CDATA[I just upgraded the blog to wordpress 2.6.3. This should hopefully solve some problems.
Anyway, its been a long time since I posted anything. Here are a few albums that you might want to check out:
&#160;&#160;
&#160;&#160;
]]></description>
			<content:encoded><![CDATA[<p>I just upgraded the blog to wordpress 2.6.3. This should hopefully solve some problems.</p>
<p>Anyway, its been a long time since I posted anything. Here are a few albums that you might want to check out:</p>
<div align="center"><object width="200" height="300" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" align="middle"><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="movie" value="http://widgets.jamendo.com/en/album/?album_id=27993&#038;playertype=2008" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><embed src="http://widgets.jamendo.com/en/album/?album_id=27993&#038;playertype=2008" quality="high" wmode="transparent" bgcolor="#FFFFFF" width="200" height="300" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">&nbsp;</embed>&nbsp;</object></div>
<div align="center"><object width="200" height="300" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" align="middle"><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="movie" value="http://widgets.jamendo.com/en/album/?album_id=22598&#038;playertype=2008" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><embed src="http://widgets.jamendo.com/en/album/?album_id=22598&#038;playertype=2008" quality="high" wmode="transparent" bgcolor="#FFFFFF" width="200" height="300" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">&nbsp;</embed>&nbsp;</object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/11/01/more-great-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh Nos! Two Timmin&#8217; Woman!</title>
		<link>http://www.mattjones.workhorsy.org/2008/02/14/oh-nos-two-timmin-woman/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/02/14/oh-nos-two-timmin-woman/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 03:55:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=48</guid>
		<description><![CDATA[You know, I really thought that the people in the Canonical website were real employees. Now my vision of Canonical HQ is shattered. I got this add for phone-service in my inbox today, and realized that the woman looked familiar.

Ok. So I really didn&#8217;t think they were employees, but it is kind of disturbing to [...]]]></description>
			<content:encoded><![CDATA[<p>You know, I really thought that the people in the <a href="http://www.canonical.com/">Canonical website</a> were real employees. Now my vision of Canonical HQ is shattered. I got this add for phone-service in my inbox today, and realized that the woman looked familiar.</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/02/two_timmin1.png" title="Two Timmin’ 1"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/02/two_timmin1.thumbnail.png" alt="Two Timmin’ 1" /></a><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/02/two_timmin2.png" title="Two Timmin’ 2"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2008/02/two_timmin2.thumbnail.png" alt="Two Timmin’ 2" /></a></p>
<p>Ok. So I really didn&#8217;t think they were employees, but it is kind of disturbing to have pictures of fake employees on your website like that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/02/14/oh-nos-two-timmin-woman/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SCALE Impressions</title>
		<link>http://www.mattjones.workhorsy.org/2008/02/13/scale-impressions/</link>
		<comments>http://www.mattjones.workhorsy.org/2008/02/13/scale-impressions/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 07:30:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=47</guid>
		<description><![CDATA[When I got back from SCALE on Sunday, I decided to let it digest a little before posting anything about it. Now that I&#8217;ve had some time to think about it, I&#8217;m really excited to present my findings.
The Good:

I met some amazing people. My faith in humanity went up a little. After my daily-dose of [...]]]></description>
			<content:encoded><![CDATA[<p>When I got back from SCALE on Sunday, I decided to let it digest a little before posting anything about it. Now that I&#8217;ve had some time to think about it, I&#8217;m really excited to present my findings.</p>
<p>The Good:</p>
<ol>
<li>I met some amazing people. My faith in humanity went up a little. After my daily-dose of people that just don&#8217;t care, it was very refreshing.</li>
<li><a href="http://untangle.com/">Untangle</a> presented their all-in-one network. It has everything you need to run a small business or home network: Firewall, spam filter, virus scanner, phishing filter, email filter, web filter, et cetera. And the best thing is that it is trivial for non-network admins to configure. I&#8217;m very anxious to set this up at my home. I just need to assemble a low-power machine that has 2 NIC cards.</li>
<li>The &#8220;A Quick and Dirty Intro to User­Centered Design in Open Source Development&#8221; presentation by Celeste Lyn Paul was very interesting. I&#8217;ve always been interested in usability, but sadly it is like still a foreign language to me. You can see the <a href="http://weblog.obso1337.org/2008/scale-2008-presentation-slides/">presentation slides</a> on her blog.</li>
<li>The &#8220;Linux Entertain Me!&#8221; presentation by Cecil Watson was a good showcase on how much more usable <a href="http://www.mythtv.org/">MythTV</a> has gotten. I&#8217;ve been blowing it off for a few years and anxiously waiting for <a href="http://elisa.fluendo.com/">Elisa</a> to get a little more polish. But I&#8217;m definitely going to give it another go on a media center box.</li>
<li>There were tons of OLPC XOs and Asus Eees floating around. I brought my Eee and had to give everyone my little review on the unit. I wish I had brought my XO too. I could have done some testing with the mesh network collaboration.</li>
<li>There was free WiFi! My Eee has about half the signal strength of a normal laptop, but it was still usable.</li>
<li>Again the people were bad ass. I met tons of new people (If only I could remember all their names), and had a good time just chatting-it-up in the sitting/dinning areas.</li>
</ol>
<p>The Bad:</p>
<ol>
<li>The name tags were crap. They were the kind that hangs around your neck on a lanyard. The problem is that the tag was connected to the lanyard by a swivel, so the tag would always flip around backwards. The text was also way too small. I can&#8217;t tell you how may times I had to scan someones torso from a few feet away (front and back) to find their name. As you could imagine, some women were like WTF after I did that a few times. Forever awkward Matt strikes again.</li>
<li>Parking was almost non-existent at the Westin Hotel. I first tried parking in their self-parking, but after driving up and down both sides of their bee-hive I had to use the valet parking. Even thought the structure was full, it still let me in, and charged me $5 on exit!</li>
<li>The expo floor  was very crowded.  I  only walked though a few times to check out some booths that I had passed due to crowding. I really hope they find a venue that has more space (Part of the reason why I paid the full $70 was to help fund this thing as much as I can).</li>
</ol>
<p>I hope that gives a good taste to the people that didn&#8217;t make it. I would definitely recommend SCALE again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2008/02/13/scale-impressions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MeMaker on the OLPC XO</title>
		<link>http://www.mattjones.workhorsy.org/2007/12/23/memaker-on-the-olpc-xo/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/12/23/memaker-on-the-olpc-xo/#comments</comments>
		<pubDate>Sun, 23 Dec 2007 08:48:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=41</guid>
		<description><![CDATA[I got my XO in yesterday. I wanted to know how a regular Gnome/Python app would work on it. So I decided to see how the newest MeMaker performs. The results were pretty good. Here are some screen caps and comments:
First as a reference, here is MeMaker on Ubuntu with the Human theme. Notice that [...]]]></description>
			<content:encoded><![CDATA[<p>I got my XO in yesterday. I wanted to know how a regular Gnome/Python app would work on it. So I decided to see how the newest MeMaker performs. The results were pretty good. Here are some screen caps and comments:</p>
<p>First as a reference, here is MeMaker on Ubuntu with the Human theme. Notice that the box that lets you pick a head style has 2 columns. Notice the standard icons on the &#8216;New&#8217;, &#8216;About&#8217;, &#8216;Remove&#8217;, and &#8216;Save As&#8217; buttons. Also notice that the window has a decoration, with minimize and close buttons.</p>
<p><a title="MeMaker on Ubuntu" href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/main_window.jpg"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/main_window.jpg" alt="MeMaker on Ubuntu" width="423" height="249" /></a></p>
<p>As for running MeMaker on the XO, my first observation is that it actually works without any code changes. It is a little slow to start up (but we have some experiments that fix that greatly). The only real bug, is that the face panel on the left is smashed, and the feature panel on the right should be limited to 2 columns instead of 6.</p>
<p>A few minor user interface issues reveal themselves: Although you can&#8217;t see them in any of these pictures, the tool tips are a dark gray, that makes them not standout from the widgets. And the selected tab, or page in this picture, is not highlighted. Below, the &#8216;Head&#8217; page is selected, so it should be highlighted. You can get it to somewhat highlight, by clicking the page twice.</p>
<p>The only real other difference, is that the window does not have a decoration or close button. You have to go back to the XO&#8217;s Home menu and close it. This sounds cumbersome, but actually works  well.</p>
<p><a title="MeMaker on the XO" href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/main_window2.jpg"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/main_window2.jpg" alt="MeMaker on the XO" width="427" height="302" /></a><br />
Here is the About dialog on the XO. It is so big that it takes up the whole screen. On a regular Gnome desktop, it is bigger than average, but not that big. (Hmm. If we made the url to launchpad a link-button, wold it work correctly on the XO?) Also, thank reason that someone added working code to the close button. Rather than relying on the window decoration&#8217;s close button to be present.</p>
<p><a title="MeMaker About dialog on the XO" href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/about_dialog.jpg"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/about_dialog.jpg" alt="MeMaker About dialog on the XO" width="437" height="328" /></a></p>
<p>Here is the Save dialog. Pretty standard Gnome stuff. Although I&#8217;ve only played with Sugar for a bit, nothing seems to use save dialogs. So we would should research what the other Sugar apps do, and copy them. We could possibly just save the avatar directly to the place it will be used. IE: the icon that represents the XO. But I have no idea if that is even possible or desired.</p>
<p><a title="MeMaker Save dialog on the XO" href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/save_dialog.jpg"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/save_dialog.jpg" alt="MeMaker Save dialog on the XO" width="440" height="315" /></a></p>
<p>This is the main Hame panel of the XO. All the running apps show up as an icon in the circle. There are two apps other than MeMaker running in there. The terminal and the Journal. They each have their own icon. MeMaker does not have an icon, so it shows up as a gray circle.</p>
<p>The programs also have a black menu that pops up when you mouse over (as seen below). This lets you perform app specific functionality, as well as start and stop the program.  It should also show the name of the app in the top of the menu. But it is blank for memaker.</p>
<p><a title="MeMaker on XO dash board." href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/desktop_integration.jpg"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/12/desktop_integration.jpg" alt="MeMaker on XO dash board." width="450" height="337" /></a></p>
<p>I&#8217;m very impressed with this machine, and how close standard Gnome apps are to just working. I look forward to testing other apps on the XO in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/12/23/memaker-on-the-olpc-xo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Torrenting Gutsy Gibbon 7.10</title>
		<link>http://www.mattjones.workhorsy.org/2007/10/18/torrenting-gutsy-gibbon-710/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/10/18/torrenting-gutsy-gibbon-710/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 04:15:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=38</guid>
		<description><![CDATA[I just downloaded the new Ubuntu release. It took a whopping 29 minutes to download the near 700 megabytes. That&#8217;s a very good speed to download any OS, on release day. And it is all thanks to the 2344 seeders.
That&#8217;s right. there were thousands of people seeding this thing. And to top it off, there [...]]]></description>
			<content:encoded><![CDATA[<p>I just downloaded the new Ubuntu release. It took a whopping 29 minutes to download the near 700 megabytes. That&#8217;s a very good speed to download any OS, on release day. And it is all thanks to the 2344 seeders.</p>
<p>That&#8217;s right. there were thousands of people seeding this thing. And to top it off, there were 969  leachers. So that is almost a 3 to 1 ratio. That is unprecedented</p>
<p>And the best thing about it, is that it didn&#8217;t cost the Ubuntu much money in bandwidth (assuming a tracker is cheap)</p>
<p>Here is a picture<br />
<a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/10/seed_the_children.jpg" title="seed_the_children.jpg"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/10/seed_the_children.jpg" alt="seed_the_children.jpg" /></a></p>
<p>Also, You may notice that I am using KTorrent, instead of the default Ubuntu torrenter. It is the only torrent downloader on Ubuntu that &#8220;just works&#8221;. If you ask me, it should be the default. That is if it does not require too much KDE to install.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/10/18/torrenting-gutsy-gibbon-710/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Support the Artists!</title>
		<link>http://www.mattjones.workhorsy.org/2007/10/05/support-the-artists/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/10/05/support-the-artists/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 06:02:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=31</guid>
		<description><![CDATA[While donating to another of my favourite artists on Jamendo. I noticed that in the last few days, I have spent more money on Creative Commons Music, than all the music I bought from the media cartel in the past 5 years. Here is a picture to prove it:

And no. I don&#8217;t pirate music.
]]></description>
			<content:encoded><![CDATA[<p>While donating to another of my favourite artists on <a href="http://www.jamendo.com" title="http://www.jamendo.com" target="_blank">Jamendo</a>. I noticed that in the last few days, I have spent more money on Creative Commons Music, than all the music I bought from the media cartel in the past 5 years. Here is a picture to prove it:</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/10/donations2.png" title="Jamendo Donations"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/10/donations2.png" alt="Jamendo Donations" /></a></p>
<p>And no. I don&#8217;t pirate music.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/10/05/support-the-artists/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Lonah Album</title>
		<link>http://www.mattjones.workhorsy.org/2007/10/05/new-lonah-album/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/10/05/new-lonah-album/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 05:23:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=30</guid>
		<description><![CDATA[I just noticed the new album by Lonah called &#8220;Au fond du temps&#8221;. Very nice.
And remember. Please support artists you like.
 
]]></description>
			<content:encoded><![CDATA[<p>I just noticed the new album by Lonah called &#8220;Au fond du temps&#8221;. Very nice.</p>
<p>And remember. Please support artists you like.</p>
<p><object data="http://www.jamendo.com/en/get/track/id/album/id/playerpage/7210/?item_o=track_no_asc&amp;n=all&amp;player_height=353&amp;player_type=coverinfos1&amp;player_width=302&amp;playercode_type=generic" style="border: 0pt none ; width: 302px; height: 353px" type="text/html" height="353" width="302"> </object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/10/05/new-lonah-album/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Moved eveything to Bazaar</title>
		<link>http://www.mattjones.workhorsy.org/2007/10/01/moved-eveything-to-bazaar/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/10/01/moved-eveything-to-bazaar/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 02:42:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Intuitive Desktop]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=28</guid>
		<description><![CDATA[Bye Bye Subversion. Hello Bazaar.
bzr branch http://intuitive-desktop.org/bzr/main/
Merging is SOOOOO much easier in Bazaar.
Also. I stumbled over a tool called Meld Diff that is very useful when you need to perform complex merges that can&#8217;t be performed automatically.
Look at the pic. You can click the little arrows to merge each section, one-by-one.

]]></description>
			<content:encoded><![CDATA[<p>Bye Bye Subversion. Hello <a href="http://bazaar-vcs.org/" title="http://bazaar-vcs.org/">Bazaar</a>.</p>
<p>bzr branch <a href="http://intuitive-desktop.org/bzr/main/" title="http://intuitive-desktop.org/bzr/main/">http://intuitive-desktop.org/bzr/main/</a></p>
<p>Merging is <strong>SOOOOO</strong> much easier in Bazaar.</p>
<p>Also. I stumbled over a tool called <a href="http://meld.sourceforge.net/" title="http://meld.sourceforge.net/">Meld Diff</a> that is <strong>very</strong> useful when you need to perform complex merges that can&#8217;t be performed automatically.</p>
<p>Look at the pic. You can click the little arrows to merge each section, one-by-one.</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/10/meld_diff.png" title="meld_diff.png"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/10/meld_diff.png" alt="meld_diff.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/10/01/moved-eveything-to-bazaar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>God Damn my web host or Subversion</title>
		<link>http://www.mattjones.workhorsy.org/2007/09/27/god-damn-my-web-host-and-subversion/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/09/27/god-damn-my-web-host-and-subversion/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 06:09:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Intuitive Desktop]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=27</guid>
		<description><![CDATA[I don&#8217;t care if the problem is Dreamhost or Subversion. All I know, is that I get home from work at 7 PM and have to go to bed at 10PM. In that small window, (where I am alive, and cease bing a cog in a really antiquated machine) I want to get work done [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t care if the problem is Dreamhost or Subversion. All I know, is that I get home from work at 7 PM and have to go to bed at 10PM. In that small window, (where I am alive, and cease bing a cog in a really antiquated machine) I want to get work done on <a href="http://intuitive-desktop.org/" title="http://intuitive-desktop.org/">my project</a>.</p>
<p>And I can&#8217;t. For the past week, I have been trying to simply compare two branches. I&#8217;m not even at the fucking merge stage. Just comparing. It either takes 30 minutes, or fails with some strange error (possibly a timeout):<br />
<code><br />
svn: PROPFIND request failed on '/intuitive_desktop/!svn/bc/209/trunk/IntuitiveFramework/Models'<br />
svn: Processing PROPFIND request response failed: required string: "lp1:version-name" (/intuitive_desktop/!svn/bc/209/trunk/IntuitiveFramework/Models)</code></p>
<p>I keep having to push the release of 0.5 back, because of shit like this. So close and yet so fucked in the side of the head.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/09/27/god-damn-my-web-host-and-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intuitive Desktop: The Future of The Linux Desktop Screencast</title>
		<link>http://www.mattjones.workhorsy.org/2007/09/21/intuitive-desktop-the-future-of-the-linux-desktop-screencast/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/09/21/intuitive-desktop-the-future-of-the-linux-desktop-screencast/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 07:47:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Intuitive Desktop]]></category>
		<category><![CDATA[desktop]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=25</guid>
		<description><![CDATA[Whew! Making a screencast is a huge pain in the ass. But here it is! The first screencast describing the Intuitive Desktop. It is a little messed up though. But watch it. It should be enough to get started with the documents. Comments are welcome.
(20 MB OGG) -

And for the love of Reason. Please mirror [...]]]></description>
			<content:encoded><![CDATA[<p>Whew! Making a screencast is a huge pain in the ass. But here it is! The first screencast describing the <a title="http://intuitive-desktop.org" href="http://intuitive-desktop.org" target="_blank">Intuitive Desktop.</a> It is a little messed up though. But watch it. It should be enough to get started with the documents. Comments are welcome.</p>
<p><a href="http://intuitive-desktop.org/multimedia/screencast_document.ogg">(20 MB OGG) -<br />
<img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/09/screencast_document.jpg" alt="Documents Screencast" /></a></p>
<p>And for the love of Reason. Please mirror this of you are going to link it to a high bandwidth site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/09/21/intuitive-desktop-the-future-of-the-linux-desktop-screencast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funny Picture</title>
		<link>http://www.mattjones.workhorsy.org/2007/09/19/funny-picture/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/09/19/funny-picture/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 02:41:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=23</guid>
		<description><![CDATA[I found this picture today. Hysterical.



I think there are more than seventeen pirates in the world though.
]]></description>
			<content:encoded><![CDATA[<p>I found this picture today. Hysterical.</p>
<p><a href="http://upload.wikimedia.org/wikipedia/en/e/e5/FSM_Pirates.jpg"><br />
<img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/09/fsm_pirates.jpg" alt="FSM_Pirates" border="0" /><br />
</a></p>
<p>I think there are more than seventeen pirates in the world though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/09/19/funny-picture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Even More Music</title>
		<link>http://www.mattjones.workhorsy.org/2007/09/12/even-more-music/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/09/12/even-more-music/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 03:51:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=22</guid>
		<description><![CDATA[Broke the trend. No woman on the cover. Sorry to disappoint.
 
]]></description>
			<content:encoded><![CDATA[<p>Broke the trend. No woman on the cover. Sorry to disappoint.<br />
<object data="http://www.jamendo.com/en/get/track/id/album/id/playerpage/4618/?item_o=track_no_asc&amp;n=all&amp;player_height=353&amp;player_type=coverinfos1&amp;player_width=302&amp;playercode_type=generic" style="border: 0pt none ; width: 302px; height: 353px" type="text/html" height="353" width="302"> </object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/09/12/even-more-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More good music</title>
		<link>http://www.mattjones.workhorsy.org/2007/09/05/more-good-music/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/09/05/more-good-music/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 01:34:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=21</guid>
		<description><![CDATA[Here is some more great music that I discovered a few month ago. And remember that these artists are licensing their music under the creative commons. Please donate if you like their music:
 
 
 
]]></description>
			<content:encoded><![CDATA[<p>Here is some more great music that I discovered a few month ago. And remember that these artists are licensing their music under the creative commons. Please donate if you like their music:</p>
<p><object data="http://www.jamendo.com/en/get/track/id/album/id/playerpage/761/?item_o=track_no_asc&amp;n=all&amp;player_height=353&amp;player_type=coverinfos1&amp;player_width=302&amp;playercode_type=generic" style="border: 0pt none ; width: 302px; height: 353px" type="text/html" height="353" width="302"> </object></p>
<p><object data="http://www.jamendo.com/en/get/track/id/album/id/playerpage/4141/?item_o=track_no_asc&amp;n=all&amp;player_height=353&amp;player_type=coverinfos1&amp;player_width=302&amp;playercode_type=generic" style="border: 0pt none ; width: 302px; height: 353px" type="text/html" height="353" width="302"> </object></p>
<p><object data="http://www.jamendo.com/en/get/track/id/album/id/playerpage/4282/?item_o=track_no_asc&amp;n=all&amp;player_height=353&amp;player_type=coverinfos1&amp;player_width=302&amp;playercode_type=generic" style="border: 0pt none ; width: 302px; height: 353px" type="text/html" height="353" width="302"> </object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/09/05/more-good-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some good music</title>
		<link>http://www.mattjones.workhorsy.org/2007/09/05/some-good-music/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/09/05/some-good-music/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 01:25:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=20</guid>
		<description><![CDATA[I used to post good songs I found on my old blog. I&#8217;ve decided to start doing that here too.
 
]]></description>
			<content:encoded><![CDATA[<p>I used to post good songs I found on my old blog. I&#8217;ve decided to start doing that here too.</p>
<p><object data="http://www.jamendo.com/en/get/track/id/album/id/playerpage/6920/?item_o=track_no_asc&amp;n=all&amp;player_height=353&amp;player_type=coverinfos1&amp;player_width=302&amp;playercode_type=generic" style="border: 0pt none ; width: 302px; height: 353px" type="text/html" height="353" width="302"> </object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/09/05/some-good-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why can&#8217;t I dive into a project in 2 to 4 hours?</title>
		<link>http://www.mattjones.workhorsy.org/2007/08/28/why-cant-i-dive-into-a-project-in-2-to-4-hours/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/08/28/why-cant-i-dive-into-a-project-in-2-to-4-hours/#comments</comments>
		<pubDate>Tue, 28 Aug 2007 09:24:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[desktop]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=19</guid>
		<description><![CDATA[Note: Before you read this, know that I like Network Manager. I&#8217;m using it as an example, because I liked it enough to want to hack on it. I don&#8217;t want to piss anyone off that works on it. This is just my biased opinion and experience with it.
I&#8217;ve been researching problems in the current [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Note:</strong> <em>Before you read this, know that I like <a title="http://www.gnome.org/projects/NetworkManager/" href="http://www.gnome.org/projects/NetworkManager/" target="_blank">Network Manager</a>. I&#8217;m using it as an example, because I liked it enough to want to hack on it. I don&#8217;t want to piss anyone off that works on it. This is just my biased opinion and experience with it.</em></p>
<p>I&#8217;ve been researching problems in the current desktop paradigm for a few years now. I even carry a list of said problems around in my pocket. Throughout the years there have been a few problems that have driven me mad. I have seen them reflected in so many dying projects. I literally have dreams about them, where I&#8217;m at a podium in front of millions of developers, trying to beat them in the head with the most critical problems.</p>
<p>By far, the most critical problem is: &#8220;The barrier to entry for contributing to other projects is too large. If you want to contribute to someone else’s project, you have to spend hours or days reading their code, and trying to find out where everything is and how the ‘program flow’ works.&#8221;</p>
<p>For example, recently I had a few hours and decided to spend them looking at the code for <a title="http://www.gnome.org/projects/NetworkManager/" href="http://www.gnome.org/projects/NetworkManager/" target="_blank">Network Manager</a>, to see how I could add support for EVDO laptop cards (I was using a Verizon pc5740). I decided on two goals for that sitting: first, to figure out how NM uses <a title="http://www.freedesktop.org/wiki/Software/hal" href="http://www.freedesktop.org/wiki/Software/hal" target="_blank">HAL</a> to get information on networking hardware. And second, to figure out if HAL worked with EVDO cards. I downloaded the NM source code and started looking in the src directory. I had the immediate observations:</p>
<ol>
<li>Where is the start of the program?</li>
<li>It looks like this is actually a daemon and an applet, possibly more</li>
<li>Most everything, header files, source files, and make files are dumped into one directory</li>
<li>I remember why I haven&#8217;t used C or C++ in a few years, on my own projects</li>
<li>Has anyone on this project even heard of Model View Controller?</li>
<li>Why the hell do Gnome developers still use C?</li>
</ol>
<p>Those are some dirty thoughts. I continued to dig. I found main and started reading. Still not knowing if what I was looking at was some sort of service or the Network Manager Applet. Next I noticed the naming convention used. It seems that they are using the naming convention of giving everything a prefix such as &#8220;nm_&#8221; to simulate name spaces. There is no context of where the function or variable comes from. Because the directory and file structure  does not reflect the namespace, I had to search through many headers to find out where functions and variables were coming from.</p>
<p>Once I finished main, I decided to just open a bunch of the other source files, and look at their code. The problem I encountered was that there was no context to where this piece of code would fit into the program flow. In order to determine that, I would have to go back to main, and trace the entire flow of the program. I had no desire to do that, so I moved on.</p>
<p>Next I decided to just look at the Models, because they would have to be networking hardware. I could then find out how the other hardware was accessed and then see if an EVDO card could be hooked up the same way. But of course that didn&#8217;t turn out. There was zero separation of data, logic, and user interface. If they had used Model, View, Controller, this would have been much easier.</p>
<p>So a few hours had passed, and I was about half way through my four hour block. I decided to look at one of the small examples to see how this program could be easily used in a few lines of code. There were no examples.</p>
<p>I used beagle to look for the dbus and hal calls to try and find the &#8220;magic&#8221; of how the program worked. But as usual, almost every function used dbus and hal. It was nearly impossible for me to figure our the &#8220;flow&#8221; of how either dbus or hal were used.</p>
<p>Ding. Time was up. It had been four hours. I had made zero progress. I was pissed. Pissed at how Gnome worked under the covers.  And pissed at myself for not understanding the inner workings of someone else&#8217;s mind. I closed all the gedit tabs and deleted the Network Manager source code.</p>
<p>Now, what were the problems I encountered?:</p>
<ol>
<li>It was very hard to track the program flow</li>
<li>There was little context to any of the code,</li>
<li>Code namespaces and class names were not reflected in the file and directory names</li>
<li> There were no example programs to help me get started</li>
<li>It was difficult to find main</li>
<li>There was no separation of Model, View, and Controller</li>
<li>There was little separation of layers of abstraction with dbus and hal code everywhere</li>
<li>The limitations of the C language were hampering my progress. IE: No unit tests, no namespaces, cryptic make files, and evil header files</li>
</ol>
<p>Now we could have solved those problems by changing a few things:</p>
<ol>
<li>Make it easy to track program flow, by using Model View Controller, and having the file hierarchy reflect the code namespaces</li>
<li>Use a programming language that supports unit tests, object orientation, and importing code rather than header files</li>
<li>Have a few example programs that show how to do very simple stuff. The more trivial, the better</li>
<li>Sticking to Model View Controller would have also solved the abstraction problems, as the dbus and hal stuff would naturally gravitate into Models</li>
<li>Having a unit test friendly language would have made it easy for newcomers to know if they screwed anything up</li>
</ol>
<p>Will any of these changes be addressed in Gnome? I don&#8217;t think so. Things may get a little better with <a title="http://live.gnome.org/Vala" href="http://live.gnome.org/Vala" target="_blank">Vala</a> becoming popular. Despite that, any Gnome developer reading this will probably think I am an idiot, that just needs to learn the ropes. Which is exactly the problem. The way things work is the barrier to entry. I keep harping on Gnome, but KDE has the same problems (It is astonishing how similar KObject and QT is to GObject and Gtk once you spend some time with them).</p>
<p>To answer my question, I can&#8217;t contribute to many Gnome projects in 2 to 4 hours because of the way things are developed, and the way the code is organized.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/08/28/why-cant-i-dive-into-a-project-in-2-to-4-hours/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Impressed with the new Gutsy features</title>
		<link>http://www.mattjones.workhorsy.org/2007/08/28/impressed-with-the-new-gutsy-features/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/08/28/impressed-with-the-new-gutsy-features/#comments</comments>
		<pubDate>Tue, 28 Aug 2007 07:50:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=18</guid>
		<description><![CDATA[I&#8217;ve been using all the Ubuntu Gutsy Tribe builds(Tribe means Alpha) since they were announced. I even tried to use the first 2 Tribes, which would not even boot correctly on my machine.
I&#8217;ve been reading and listening to people talk/complain about Gutsy. Many have said that they don&#8217;t think it is too much of an [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using all the Ubuntu Gutsy Tribe builds(Tribe means Alpha) since they were announced. I even tried to use the first 2 Tribes, which would not even boot correctly on my machine.</p>
<p>I&#8217;ve been reading and listening to people talk/complain about Gutsy. Many have said that they don&#8217;t think it is too much of an improvement over Feisty. For example, the <a href="http://www.linuxactionshow.com/" title="http://www.linuxactionshow.com/" target="_blank">Linux Action Show</a> hosts have <a href="http://www.linuxactionshow.com/?p=137" target="_blank" title="http://www.linuxactionshow.com/?p=137">complained about it not being gutsy</a>.</p>
<p>I think this is due to the fact that the Tribe pages in the <a href="http://www.ubuntu.com/testing" target="_blank" title="http://www.ubuntu.com/testing">Testing section</a> of the Ubuntu site, show only new features of each Tribe, instead of showing all the new features for Gutsy. This requires people to look at the the Tribe pages (Five so far) to see all the new features.</p>
<p>I would like to point out that there are a ton of features besides &#8220;compositing by default&#8221; to look forward to. Here is my list of good features that were significant to me and why:</p>
<ol>
<li>NTFS read and write by default. This is great because I use Ubuntu Live CDs all the time on broke/locked Windows machines. I have run into many situations where writing NTFS would have saved my much time.</li>
<li>New Ruby version. I&#8217;m glad to get the new versions of Ruby and Rails since the ones in Feisty are 1.8.5 and 1.2.1 which are almost one year old as of this writing. It also allows me to run <a href="http://www.redmine.org/" title="http://www.redmine.org/" target="_blank">Redmine</a> on my dev machine, instead of in the crash-tastic (but easy to setup) <a href="http://www.virtualbox.org/" title="http://www.virtualbox.org/" target="_blank">VirtualBox</a> virtual machine.</li>
<li>The Auto printer installer looks amazing. I haven&#8217;t used it yet, but It looks like a huge advantage over having to install them manually. I remember having trouble trying to determine which driver to use for a few printers.</li>
<li>ESD, the Enlightened Sound Daemon does not seem to be installed anymore. That can only be good news, as  I have heard  it was a pain to work with.  I don&#8217;t have much knowledge on ESD though, so that could be wrong.</li>
<li>The Ruby Gnome binding seem to print less errors into the console. The ones in Feisty would print a ton of warnings in every Intuitive Desktop program. The only error I see now is that ESD is missing.</li>
<li>The new &#8220;Screen and Graphics Preferences&#8221; program is very useful. I can easily change the monitor resolution, type, width, and refresh rate. It even makes it easy to have dual monitors.</li>
<li>Bullet proof X sounds nice too. I have not done anything to cause X to have to fall back into a default mode (at least I don&#8217;t think I have). But as long as it is able to always give the user a working screen, it is a huge improvement.</li>
<li>The Kernel 2.6.22 with the new Completely Fair Scheduler is amazing. I can verify that it makes the whole system more responsive under load (even with single core/cpu systems). You can do things like quickly open your system monitor when a crazy application decides to use all your ram or cpu (like Eclipse for example).</li>
<li>Beagle seems to have been dropped in favor of Tracker. Beagle would do a huge indexing when your machine was idle, while Tracker prefers to do small indexing when you file system changes. This is a hue improvement, as Beagle would start indexing just before I was going to do something cpu intensive, like compile a large program.</li>
<li>The new &#8220;Appearance Preferences&#8221; program makes it easier to configure theme, font, background, and desktop effects in one place. It also saves a lot of space in the System &gt; Preferences menu, so you don&#8217;t have to scroll it (at least until Java or Wine take a dump in the menu).</li>
<li>New GStreamer and Gnonlin. This is important because GStreamer is a good multimedia framework that should replace all the others on Linux.</li>
<li>New Jokosher that crashes less, thanks to GStreamer and Gnonlin.</li>
<li>New buttons on the &#8216;Add/Remove Software&#8217; program that clear up the &#8220;apply/cancel/ok&#8221; button awkwardness. I rememeber always clicking &#8220;ok&#8221; on that program to install software. Then the program would close once it installed everything. I swear, I thought it crashed when it just closed like that.</li>
<li>Thunderbird has a new version with a much nicer looking theme and icon set.</li>
<li>Rhythmbox has a better <a href="http://www.jamendo.com/en/" title="http://www.jamendo.com/en/" target="_blank">Jamendo</a> plugin that uses much less ram and is faster</li>
<li>Rhythmbox has a new icon that stands out more and looks better</li>
<li>In the Tomboy note applet, you can now delete those annoying default notes, that come with a new Tomboy install.</li>
<li>Open Office seems to boot just as quickly as Open Office on Feisty with the Quickstarter running. This is great because Open Office is notorious for being slow, and most people don&#8217;t use the Quick starter on Linux.</li>
</ol>
<p>All those items seem pretty significant to me. That is a bigger improvement than from Edgy the Feisty.</p>
<p>When writing that list I also came across a few things that I did not like. Here are a few of them, just for fun:</p>
<ol>
<li> You still need to tell your password to the keyring for encrypted wireless networks, every time you connect. It would be nice if you could tick a check box that would allow it to log in for you automatically.</li>
<li>Many dialogs are too big for the screen at 800&#215;600 or 640&#215;480 resolutions. This includes the installer and the System &gt; Administration &gt; Login Window program. Hopefully the Ubuntu Mobile project will fix this for small screen devices.</li>
<li>The Deskbar Applet has a new user interface. I like the way the program now works. But I don&#8217;t like how they moved from a drop-down menu to a popup dialog.</li>
<li>The Gnome Bitorrent client sucks ass. It is horrible to use a new window for each download. And it gives socket errors some times when you have multiple torrents running. This is solved by using Ktorrent, but that should be the default for Ubuntu.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/08/28/impressed-with-the-new-gutsy-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The point of views you will need for framework development</title>
		<link>http://www.mattjones.workhorsy.org/2007/08/22/the-point-of-views-you-will-need-for-framework-development/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/08/22/the-point-of-views-you-will-need-for-framework-development/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 05:55:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Intuitive Desktop]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=16</guid>
		<description><![CDATA[This may seem like an obvious post from the title, but I think there are a few things here that may be of interest to developers that are writing libraries. I am going to specifically talk about the point-of-view you should have when writing parts of your code.
Usually when people write their unit test, they [...]]]></description>
			<content:encoded><![CDATA[<p>This may seem like an obvious post from the title, but I think there are a few things here that may be of interest to developers that are writing libraries. I am going to specifically talk about the point-of-view you should have when writing parts of your code.</p>
<p>Usually when people write their unit test, they are just trying to get them to work. The point of view they have is the Test Case Point of View. A developer with this point of view will have these goals:</p>
<ol>
<li>The framework needs to be robust enough to satisfy all the unit tests</li>
<li>Once all the test cases are covered, and pass, the code is done</li>
</ol>
<p>Now most developers would stop here, without moving on to the next stage. But they would discover that their framework was hard to use, redundant, or unnecessarily wordy. Or worse, only their users would find that out.</p>
<p>The next stage is the Usability Point of View. In This stage, the developer should make many example applications using their framework. This includes &#8220;Hello Word&#8221; applications as well as large apps that try to test the limits of the framework. And Don&#8217;t forget cloning neat little apps, like <a href="http://macslow.thepimp.net/?page_id=23" title="http://macslow.thepimp.net/?page_id=23">Cairo Clock</a> or <a href="http://www.gnome.org/projects/tomboy/" title="http://www.gnome.org/projects/tomboy/">Tomboy</a>. While doing this, they should try and focus on these items:</p>
<ol>
<li>Too much configuration or the innards of the framework being exposed for no reason</li>
<li>If you end up writing unit tests that test both the application and the framework, this is a sign that there is too much overlap in parts of the framework. Remember Model View Controller.</li>
<li>If the framework is very wordy or has a lot of options that should be consolidated, that can cause example programs to bloat up and get very long.</li>
<li>There should be very little coupling. If every time you add new code, you have to add multiple dependent pieces of code to deal with that one new thing, that is called Coupling to The Nth Power. That leads to a framework that grows exponentially, and is concrete, near impossible to change, and usually requires a lot of code to do even simple program. Examples of this are The .NET Framework, and J2EE/JBoss.</li>
<li>If you run into a problem that requires a change in the framework, and it would be &#8220;very unpleasant&#8221; to fix that  problem, that is a bad sign. Everything should be as easy to change as possible.</li>
<li>If you are having to write a ton of comments to explain some voodoo that is happening in the framework, that is a sign that the naming in the framework is confusing, or that there is too much overlap in the classes.</li>
<li>If you are not enjoying yourself while making the framework, that is a bad sign. That should be fixed too.</li>
</ol>
<p>Now that is a pretty large list of things to look out for. I would say the one that I often run into is number 3. I always end up having too many options, or overlapping options in my classes. I even ran into that problem this evening, (which inspired me to write this) while working on a Cairo Clock clone.</p>
<p>Just for fun, I will go over the thing that caused the example to go wrong: I was writing the part that uses data binding to attach the SVG images to layers in the Drawing control. Now the Cairo Clock has a lot of layers. I think it is 12 layers. So for each layer I had to write a binding just to connect it to the SVG file. The binding looks like this:</p>
<p><code><br />
&lt;Layer name="clock_drop_shadow"&gt;<br />
&lt;Binding name="image"<br />
model="ClockImages"<br />
view_properties="image_file"<br />
model_properties="clock_drop_shadow_image"<br />
on_model_change="save_changes_to_view"<br />
on_view_change="do_nothing" /&gt;<br />
&lt;/Layer&gt;</code></p>
<p>Basically we have a Layer with a Binding. The Bindings job is to connect the View to the Model. This one connects the &#8216;image_file&#8217; property of the View to the &#8216;clock_drop_shadow_image&#8217; property of the Model. It connects them so that it automatically updates the View when the property in the Model changes.  Now this is a great way to do data binding, much better than anything that is out there. But as said above, it is too much code for something that will have to be used many times in each object. Not surprisingly, this revelation has come up by writing an example that requires a lot of data binding.</p>
<p>Now to fix it we can do this:</p>
<p><code><br />
&lt;Layer name="clock_drop_shadow"&gt;<br />
&lt;Binding name="image"<br />
bind_direction="view_to_model"<br />
property_map="image_file:clock_drop_shadow_image" /&gt;<br />
&lt;/Layer&gt;<br />
</code></p>
<p>This looks good. It solves the duplication problem of having two properties that are used to say how the binding direction flows, and the problem of having two properties to hold the way we map one set of properties to another. It also uses fewer lines, and could even be squished into one line.</p>
<p>So it worked. We went one step further, and used our Usability Point of View, and now we were able to make the code more usable, where we would not have seen a problem. So keep those two points of view in mind next time you are developing a framework. And if you have any tips on improving this concept, or have any success stories to tell, email (mattjones@workhorsy.org) me, because I love this shit.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/08/22/the-point-of-views-you-will-need-for-framework-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prior Art on Office 12 Ribbon</title>
		<link>http://www.mattjones.workhorsy.org/2007/08/14/prior-art-on-office-12-ribbon/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/08/14/prior-art-on-office-12-ribbon/#comments</comments>
		<pubDate>Tue, 14 Aug 2007 13:54:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=13</guid>
		<description><![CDATA[I remember noticing this several months ago. I decided to post it because I have not seen anyone else point it out.

The Office 12 Ribbon is Microsoft&#8217;s hot new UI design. They even set up a special web page where you can get a license to use their Ribbon. They even require you to implement [...]]]></description>
			<content:encoded><![CDATA[<p>I remember noticing this several months ago. I decided to post it because I have not seen anyone else point it out.</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/08/ribbon_ms.png" title="Ribbon used in MS Outlook from Office 12"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/08/ribbon_ms.png" alt="Ribbon used in MS Outlook from Office 12" /></a></p>
<p>The Office 12 Ribbon is Microsoft&#8217;s hot new UI design. They even <a href="http://msdn2.microsoft.com/en-us/office/aa973809.aspx" title="http://msdn2.microsoft.com/en-us/office/aa973809.aspx">set up a special web page where you can get a license to use their Ribbon</a>. They even require you to implement all the features in the Ribbon to get the license. The list of nick picked details can be see on this site, that <a href="http://www.actiprosoftware.com/Products/DotNet/WPF/Ribbon/RibbonUIGuidelines.aspx" title="http://www.actiprosoftware.com/Products/DotNet/WPF/Ribbon/RibbonUIGuidelines.aspx">sells Ribbon controls</a>.</p>
<p>There are so many problems with software patents, that it is amazing it got this far:</p>
<ul>
<li>Software Patents are always &#8216;obvious&#8217; and &#8217;simple&#8217; which is what they are supposed to NOT be. This makes them self-invalidating</li>
<li>Every patent is made up of other peoples ideas. If they were money grubbers, you would not have their shoulders to stand on, or would be encumbered by their patents</li>
<li>Most software patents are so vague or overlap another patent so closly, that if they ever went to court, they would be thrown out</li>
<li>Patents infuse a monetary lust into something that would normally benefit people. This creates incentive to horde, duplicate and bully patents away from humanity.</li>
<li>If the software patent requirements were strict enough to be &#8216;non obvious&#8217;, they would be protecting that exact implementation of the software. We already have a system that works well for that. It is called copyright.</li>
<li>And finally, the most important item here: Their is always prior art and overlap. And I mean always.</li>
</ul>
<p>Which brings me to the showcase of this post. The Bluefish web editor has had a very Ribbon-like UI for many years. Look at this picture:</p>
<p><a href="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/08/ribbon_bluefish.png" title="Ribbon used in the Bluefish editor"><img src="http://www.mattjones.workhorsy.org/wp-content/uploads/2007/08/ribbon_bluefish.png" alt="Ribbon used in the Bluefish editor" /></a></p>
<p>Hmm. Seems very similar to the MS Ribbon. But that begs the question: Where does the line between these &#8216;tabs with buttons&#8217; and those &#8216;tabs with buttons&#8217; lye? What would be the argument that would keep MS holding the patent (not that they actually have it) at the end of a court battle?</p>
<p>Would they argue that theirs has text too? Or that theirs is a little context sensitive? Are those even significant differences? No. No they are not.</p>
<p>So what do we take away from this blog post? Is it that software patents are stupid? I hope so.</p>
<p>Actually I hope you get the message that software patents are more than &#8220;biting the hand that feeds you&#8221;. They are more like some monstrous plan to keep the world in the 1950s (like you local telephone cartel wants).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/08/14/prior-art-on-office-12-ribbon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Struggle to Find The Right Language</title>
		<link>http://www.mattjones.workhorsy.org/2007/08/08/the-struggle-to-find-the-right-language/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/08/08/the-struggle-to-find-the-right-language/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 02:37:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Intuitive Desktop]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=12</guid>
		<description><![CDATA[Over the past 2 years while working on my main project, I&#8217;ve been struggling with what programming language to use. I went through many rewrites and many different languages. Now I think I may have arrived at a good solution.
I started with C#. That went down in flames because of the huge overhead in startup [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past 2 years while working on my <a href="http://www.intuitive-desktop.org/" title="http://www.intuitive-desktop.org/">main project</a>, I&#8217;ve been struggling with what programming language to use. I went through many rewrites and many different languages. Now I think I may have arrived at a good solution.</p>
<p>I started with C#. That went down in flames because of the huge overhead in startup time for large assemblies. It also did not have all the code implemented on the <a href="http://www.mono-project.com" title="http://www.mono-project.com">Mono</a> side of things. I wanted an easy-to-use language, with all the great Linux technology, like DBus, Cairo, Hal, and GStreamer.</p>
<p>At that point I decided that I was being too much of a wussy, and was going to use C/C++. That quickly crashed and burned as I re-learned why I hated C/C++ in the first place: &#8220;Standard Libraries&#8221; that are not standard or consistent across platforms; No standard libraries for Lists, Array Lists, and Hash tables (yes. I&#8217;ve used STL. It is very fucked up on Ubuntu and Fedora Core); Threads were not &#8220;Standard&#8221; either; Endless fighting with header files to make the compiler happy; And finally the nightmare that is USING Gobject. It all amounted to too much work, and almost no progress.</p>
<p>My next attempt was to use D. Which was, and is very promising. It is as fast as C, and includes all the threading and collection support. The problem however was that the  <a href="http://dgcc.sourceforge.net/" title="http://dgcc.sourceforge.net/">Gnu D Compiler</a> was not packaged in Debian, and didn&#8217;t include the standard &#8216;Phobos&#8217; library. That was fine. I fought with it and got it working myself. I was cruising along and creating the Postgresql database back-end when I hit a wall. The wall was that the promise of ABI compatibility with C was not entirely true. It was true for the <a href="http://cairographics.org/" title="http://cairographics.org/">Cairo</a> wrappers I made, but not for the Postgresql wrappers. So I decided to wait a bit longer and see if a solution presented itself.<a href="http://dgcc.sourceforge.net/" title="http://dgcc.sourceforge.net/"><br />
</a></p>
<p>A solution came a few months later, after I spent a while learning <a href="http://www.rubyonrails.org/" title="http://www.rubyonrails.org/">Ruby on Rails</a>, and gained the wisdom that comes with not focusing on performance and over configuration. I decided to try and implementing everything in <a href="http://www.ruby-lang.org/en/" title="http://www.ruby-lang.org/en/">Ruby</a>. Simply put: Ruby is amazing. Once I understood the Model View Controller technique. And I mean really understood how it works. Not like the <a href="http://en.wikipedia.org/wiki/Model_view_controller" title="http://en.wikipedia.org/wiki/Model_view_controller">outright lie that is in Wikipedia</a> article. I had an epiphany: If you break your programs up into user interface, logic, and data, it makes everything so much more streamlined. All the problems with coupling and optimization simply vanish. Well it was (and still is) sufficient to say that I would do the entire project in Ruby.</p>
<p>But then I started to notice things. Like the amount of memory even a simple <a href="http://www.intuitive-desktop.org/wiki/1/DocumentsOverview" title="http://www.intuitive-desktop.org/wiki/1/DocumentsOverview">Intuitive Document</a> was using. This wasn&#8217;t really a problem. But it would be for small machines like the <a href="http://www.nseries.com/products/n800/#l=products,n800" title="http://www.nseries.com/products/n800/#l=products,n800">n800</a>, and would inevitably be a problem when the entire desktop consisted of 6 programs that each use 20 to 30 megabytes of ram. We would have all kinds of issues with paging memory to disk, and the CPU waking up like crazy to manage it all.</p>
<p>I decided to wait a bit and see what the community came up with. This was a long stretch where things like <a href="http://www.youtube.com/watch?v=6ViKhwdXmmE" title="http://www.youtube.com/watch?v=6ViKhwdXmmE">Lowfat</a>, <a href="http://pyrodesktop.org/Main_Page" title="http://pyrodesktop.org/Main_Page">Pyro Desktop</a>, and <a href="http://online-desktop.org/wiki/Online_Desktop" title="http://online-desktop.org/wiki/Online_Desktop">Online Desktop</a> where being revealed. So it gave me hope that someone else would want to write libraries in a high level language.</p>
<p>Then very recently, I started seeing blog posts about this new GObject friendly, C#-like language called <a href="http://live.gnome.org/Vala" title="http://live.gnome.org/Vala">Vala</a>. Like <a href="http://aruiz.typepad.com/siliconisland/2007/08/the-first-vala-.html" title="http://aruiz.typepad.com/siliconisland/2007/08/the-first-vala-.html">this post where a person makes Gtk MozEmbed wrappers for Vala in a few lines of code</a>. This is how GObject should be used! Since I am using a lot of the Gnome infrastructure under the covers, this might be a very good choice for a library-level language.</p>
<p>So this is the plan so far: Once we get more stable, someone will rewrite the Intuitive Framework to use Vala. Then we will need a way to still use Ruby for the Intuitive Desktop and application part.</p>
<p>Sounds good. Now we just need more contributors!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/08/08/the-struggle-to-find-the-right-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Throw out those crappy voting machines</title>
		<link>http://www.mattjones.workhorsy.org/2007/08/03/throw-out-those-crappy-voting-machines/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/08/03/throw-out-those-crappy-voting-machines/#comments</comments>
		<pubDate>Fri, 03 Aug 2007 12:03:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=11</guid>
		<description><![CDATA[I am a taxpayer in California, USA. The voting machines used there have been proven (time and time again) to be exploitable, brittle, and would require a complete recode to fix. I am a software engineer, and have reviewed the implementation. It is garbage. I don&#8217;t want my tax money spent on it. I want [...]]]></description>
			<content:encoded><![CDATA[<p>I am a taxpayer in California, USA. The voting machines used there have been proven (time and time again) to be exploitable, brittle, and would require a complete recode to fix. I am a software engineer, and have reviewed the implementation. It is garbage. I don&#8217;t want my tax money spent on it. I want an open source voting system that is accountable and audit able, before and after the fact. I want to know that when my vote goes into a machine it is counted correctly. You simply cannot know that with proprietary software.</p>
<p>This article in Wired that was published a few minutes ago demonstrates what I have known for years:<br />
<a href="http://blog.wired.com/27bstroke6/2007/08/ca-releases-sou.html" title="CA Releases Source Code Review of Voting Machines -- New Security Flaws Revealed; Old Ones Were Never Fixed" target="_blank"> CA Releases Source Code Review of Voting Machines &#8212; New Security Flaws Revealed; Old Ones Were Never Fixed</a></p>
<p>When I read the results of the <a href="http://www.sos.ca.gov/elections/voting_systems/ttbr/sequoia-source-public-jul26.pdf">Sequoia</a> and <a href="http://www.sos.ca.gov/elections/voting_systems/ttbr/Hart-source-public.pdf">Hart</a> reviews, I was appalled. This software is the buggiest, most over-engineered piece of shit I&#8217;ve seen in a while.</p>
<p>The simple solution is for Secretary of State Debra Bowen to throw out these machines and sue the companies for fraud and gross negligence. Then they can spend the money on making an open source voting system, like the one at the <a href="http://www.openvotingconsortium.org/">open voting consortium</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/08/03/throw-out-those-crappy-voting-machines/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fighting with email alerts in redMine</title>
		<link>http://www.mattjones.workhorsy.org/2007/07/31/fighting-with-email-alerts-in-redmine/</link>
		<comments>http://www.mattjones.workhorsy.org/2007/07/31/fighting-with-email-alerts-in-redmine/#comments</comments>
		<pubDate>Tue, 31 Jul 2007 20:45:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattjones.workhorsy.org/?p=8</guid>
		<description><![CDATA[I recently switched the Intuitive Desktop development site from using MediaWiki to redMine. Now redMine is fantastic, and has almost everything I need to replace the typical smörgåsbord of applications people usually use. But, I still can&#8217;t get it to send email messages.
I&#8217;ve looked around on Google and the redMine forums, and I can&#8217;t even [...]]]></description>
			<content:encoded><![CDATA[<p>I recently switched the Intuitive Desktop development site from using <a href="http://www.mediawiki.org/wiki/MediaWiki" title="MediaWIki">MediaWiki</a> to <a href="http://www.redmine.org/" title="redMine">redMine</a>. Now redMine is fantastic, and has almost everything I need to replace the typical smörgåsbord of applications people usually use. But, I still can&#8217;t get it to send email messages.</p>
<p>I&#8217;ve looked around on Google and the redMine forums, and I can&#8217;t even find anyone that is using this software on a community project. I&#8217;m not one to do this kind of thing, but &#8220;layzweb, help me! Fix the code below!&#8221;</p>
<p><code><br />
# part of environment.rb<br />
# SMTP server configuration<br />
config.action_mailer.smtp_settings = {<br />
:address =&gt; "mail.intuitive-desktop.org",<br />
:port =&gt; 25,<br />
:domain =&gt; "intuitive-desktop.org",<br />
:authentication =&gt; :login,<br />
:user_name =&gt; "secret"<br />
:password =&gt; "password",<br />
}</code></p>
<p>config.action_mailer.perform_deliveries = true</p>
<p># Tell ActionMailer not to deliver emails to the real world.<br />
# The :test delivery method accumulates sent emails in the<br />
# ActionMailer::Base.deliveries array.<br />
#config.action_mailer.delivery_method = :test<br />
config.action_mailer.delivery_method = :smtp</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattjones.workhorsy.org/2007/07/31/fighting-with-email-alerts-in-redmine/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
