<?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 &#187; Intuitive Desktop</title>
	<atom:link href="http://www.mattjones.workhorsy.org/category/intuitive-desktop/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>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>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>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>
	</channel>
</rss>
