<?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>halfdecent.net &#187; software</title>
	<atom:link href="http://halfdecent.net/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://halfdecent.net</link>
	<description>some personal argumentation</description>
	<lastBuildDate>Fri, 13 Apr 2012 13:06:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Netbeans file type integration tutorial comments</title>
		<link>http://halfdecent.net/2011/11/30/netbeans-file-type-integration-tutorial-comments/</link>
		<comments>http://halfdecent.net/2011/11/30/netbeans-file-type-integration-tutorial-comments/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 15:43:58 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://halfdecent.net/?p=228</guid>
		<description><![CDATA[Netbeans 7.1rc1 has been released. When I went through the file type tutorial (which has been updated for 7.1) I found a couple of minor niggles which needed more than a couple of lines in a comment to express, hence &#8230; <a href="http://halfdecent.net/2011/11/30/netbeans-file-type-integration-tutorial-comments/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://platform.netbeans.org/images/articles/71/netbeans-stamp.png" alt="" width="112" height="115" />Netbeans 7.1rc1 has been released. When I went through the <a href="http://platform.netbeans.org/tutorials/nbm-filetype.html">file type tutorial</a> (which has been updated for 7.1) I found a couple of minor niggles which needed more than a couple of lines in a comment to express, hence this post.  In Summary, it&#8217;s a good tutorial, but there a few rough edges that could be ironed out:</p>
<ul>
<li>A design bug in the properties window section,</li>
<li>Missing the visual library api dependency,</li>
<li>Excessive overiding the default action on file context menu,</li>
</ul>
<p>and it would really benefit from some extensions, particularly:</p>
<ul>
<li>implementing a navigation window instead of a node tree under the file node,</li>
<li>real-time synchronisation across all views.</li>
</ul>
<p><span id="more-228"></span></p>
<p>Everything up until the &#8220;Creating features for Abc files&#8221; stage in the tutorial worked smoothly for me.  This section also works if you follow the instructions carefully (pay attention though folks, I forget to set the content type in the wizard when I did it). There are some misleading statements though, probably left over from earlier versions.  In the first paragraph the introduction says &#8220;we enable the file to open into a window, instead of into an editor&#8221; but this is not what the action does &#8211; it simply raises a modal dialogue window.  The next paragraph, &#8220;Adding a context-sensitive Action&#8221; then says that the wizard will register the newly generated class in the layer file, however in this version of Netbeans this no longer happens.  Another niggle I have is with the action that&#8217;s created. The tutorial suggests we make our action the default action, the action that&#8217;s used for a double-click.  This is annoying to me as the double-click action should be &#8220;open file in editor&#8221; so in my version of this I choose a different location in step 3.</p>
<p>&#8220;Creating additional Multiview windows&#8221; works just fine.  &#8220;Parsing the file&#8221; also works but it&#8217;s not an elegant solution.  Nodes are created when the file is first opened but then if the file is changed in the editor,  those nodes are not updated. Another niggle I have with this section is that I think it would be better if we saw the tree in a navigation window but I&#8217;m not sure how much code this involves.</p>
<p>The &#8220;Extending the Properties window&#8221; section has a design error in it.  The code provided attempts to preserve the existing file properties but fails because the new default properties set has the same default name.  I would suggest the following variation in the AbcNode class:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> SHEET_ABC_PROPERTIES <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;abc properties&quot;</span><span style="color: #339933;">;</span>
&nbsp;
@Override
<span style="color: #000000; font-weight: bold;">protected</span> Sheet createSheet<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  Sheet sheet <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">createSheet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  sheet.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>Sheet.<span style="color: #006633;">PROPERTIES</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setDisplayName</span><span style="color: #009900;">&#40;</span>NbBundle.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span>AbcNode.<span style="color: #000000; font-weight: bold;">class</span>, <span style="color: #0000ff;">&quot;LBL_Abc_PROPERTIES_File&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Sheet.<span style="color: #003399;">Set</span> set <span style="color: #339933;">=</span> Sheet.<span style="color: #006633;">createPropertiesSet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  set.<span style="color: #006633;">setName</span><span style="color: #009900;">&#40;</span>SHEET_ABC_PROPERTIES<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// default is Sheet.PROPERTIES</span>
  set.<span style="color: #006633;">setDisplayName</span><span style="color: #009900;">&#40;</span>NbBundle.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span>AbcNode.<span style="color: #000000; font-weight: bold;">class</span>, <span style="color: #0000ff;">&quot;LBL_Abc_PROPERTIES_Abc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  sheet.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>set<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  set.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> LineCountProperty<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">return</span> sheet<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>with the addition of two new strings in the Bundle file:</p>
<pre>LBL_Abc_PROPERTIES_File=File Properties
LBL_Abc_PROPERTIES_Abc=Abc Properties</pre>
<p>The Final &#8220;Creating Synchronised views&#8221; misses the vital information that you need to add the &#8220;Visual Library API&#8221; library in order to compile, but this wasn&#8217;t too hard to work out.  It works fine but the two views are only synchronised when the file is saved and this isn&#8217;t what&#8217;s described in the text. This lack of real-time synchronisation is further exacerbated by the lack of any synchronisation with the node tree in the project explorer.</p>
<p>To conclude, aside from fixing the niggles I would really like to see a navigation window implementation and better synchronisation between the views, however I found the tutorial as it stands very useful.  And of course it could be that the amount of code needed for my suggestions exceeds the word limit for one of these tutorials.</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2011/11/30/netbeans-file-type-integration-tutorial-comments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First project on github</title>
		<link>http://halfdecent.net/2011/08/30/first-project-on-github/</link>
		<comments>http://halfdecent.net/2011/08/30/first-project-on-github/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 15:12:30 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[medicine]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://halfdecent.net/?p=206</guid>
		<description><![CDATA[Earlier this year I wrote a quick API for snomed ct which I finally got around to cleaning up and publishing today. Yay &#8211; my first github project!]]></description>
			<content:encoded><![CDATA[<p><a href="http://halfdecent.net/wp-content/uploads/2011/08/GitHub_Logo.png"><img class="alignleft  wp-image-282" title="GitHub_Logo" src="http://halfdecent.net/wp-content/uploads/2011/08/GitHub_Logo-300x132.png" alt="" width="216" height="95" /></a>Earlier this year I wrote a quick API for snomed ct which I finally got around to cleaning up and <a href="https://github.com/mattsouth/snomedapi">publishing</a> today. Yay &#8211; my first github project!</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2011/08/30/first-project-on-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sinatra + Microsoft SQL server ??</title>
		<link>http://halfdecent.net/2010/09/21/sinatra-microsoft-sql-server/</link>
		<comments>http://halfdecent.net/2010/09/21/sinatra-microsoft-sql-server/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 12:45:24 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://halfdecent.net/?p=192</guid>
		<description><![CDATA[After writing the last post I realised that I&#8217;d jumped too far into the deep end with Padrino and really needed to understand the underlying Sinatra and Rack frameworks better before commenting any further.I found the opportunity today for doing &#8230; <a href="http://halfdecent.net/2010/09/21/sinatra-microsoft-sql-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After writing the last post I realised that I&#8217;d jumped too far into the deep end with Padrino and really needed to understand the underlying <a href="http://sinatrarb.com">Sinatra</a> and <a href="http://rack.rubyforge.org/">Rack</a> frameworks better before commenting any further.<span id="more-192"></span>I found the opportunity today for doing just that.   I needed to make a demo web application that listed items from a Microsoft SQL Server and demonstrate integration with a third party service.   I had started using MS Visual Web Developer for this task but found it horribly slow to use and difficult to move beyond the boiler plate applications because the c# framework learning curve was as little too steep for a quick and dirty demo.</p>
<p>After spending a couple of days on this, I thought I&#8217;d look for an alternative and wondered if sinatra might be useful.  Instinct told me that connecting to the db might be an enormous time sink, but these two articles suggested otherwise:</p>
<ul>
<li><a href="http://techwhizbang.com/2010/03/jruby-activerecord-jdbc-sqlserver/">http://techwhizbang.com/2010/03/jruby-activerecord-jdbc-sqlserver/</a></li>
<li><a href="http://stackoverflow.com/questions/2853788/how-to-connect-to-sql-server-using-activerecord-jdbc-jtds-and-integrated-securi">http://stackoverflow.com/questions/2853788/how-to-connect-to-sql-server-using-activerecord-jdbc-jtds-and-integrated-securi</a></li>
</ul>
<p>and indeed it turned out to be just the case.  With <a href="http://jruby.org/">JRuby</a>, Sinatra and<a href="http://jtds.sourceforge.net/"> jTDS</a> I was able to get my little app up and running on Windows within a day.</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2010/09/21/sinatra-microsoft-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse + Ubuntu + Groovy pain</title>
		<link>http://halfdecent.net/2010/01/19/eclipse-ubuntu-groovy-pain/</link>
		<comments>http://halfdecent.net/2010/01/19/eclipse-ubuntu-groovy-pain/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 15:17:06 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[eclipse ubuntu]]></category>

		<guid isPermaLink="false">http://halfdecent.net/?p=110</guid>
		<description><![CDATA[A couple of days ago the v2 Groovy Eclipse plugin was released, but sadly I&#8217;m still not able to use it on my Ubuntu desktop because of a fairly convoluted set of configuration problems. The first is that the linux &#8230; <a href="http://halfdecent.net/2010/01/19/eclipse-ubuntu-groovy-pain/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago the <a href="http://docs.codehaus.org/display/GROOVY/Groovy-Eclipse+2.0.0+New+and+Noteworthy">v2 Groovy Eclipse plugin was released</a>, but sadly I&#8217;m still not able to use it on my Ubuntu desktop because of a fairly convoluted set of configuration problems.</p>
<p>The first is that the linux download of eclipse doesnt work very well in the latest version of Ubuntu (Karmic Koala).  A <a href="http://mou.me.uk/2009/10/31/fixing-eclipse-in-ubuntu-9-10-karmic-koala/">work around is described here</a> with further links to Ubuntu&#8217;s issuelist. But actually the work around is only a partial fix because Eclipse sometimes starts a copy of itself and, when it does, it ignores the work around. This affects me as I&#8217;m currently trying to develop plugins.</p>
<p>One alternative approach that has worked for me so far is to use the version of eclipse that&#8217;s in the Ubuntu repositories.  However, this version wasn&#8217;t taken from the final release of the eclipse codebase and the groovy plugin install, which patches the JDT (Java Development Toolkit) <a href="http://jira.codehaus.org/browse/GRECLIPSE-498">just wont install in this version</a>.</p>
<p>So to use the groovy plugin it looks as though I&#8217;ll have to wait for Eclipse 3.5.2 (which is <a href="http://wiki.eclipse.org/Galileo_Simultaneous_Release#SR2">due on February 29th</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2010/01/19/eclipse-ubuntu-groovy-pain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ArgKit: An argumentation toolkit</title>
		<link>http://halfdecent.net/2008/01/24/argkit-an-argumentation-toolkit/</link>
		<comments>http://halfdecent.net/2008/01/24/argkit-an-argumentation-toolkit/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 15:33:30 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[argumentation]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://halfdecent.net/2008/01/24/argkit-an-argumentation-toolkit/</guid>
		<description><![CDATA[Last week I released an open source project: ArgKit. It&#8217;s the synthesis of some work that I&#8217;ve been doing in the last couple of years and I&#8217;m very pleased with it. I&#8217;ve released early (ish) on this one, so there &#8230; <a href="http://halfdecent.net/2008/01/24/argkit-an-argumentation-toolkit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.argkit.org" title="ArgKit website"><img src="http://halfdecent.net/wp-content/uploads/2008/01/website.thumbnail.png" alt="ArgKit website" style="float: left; margin-right: 10px" /></a>Last week I released an open source project: <a href="http://www.argkit.org" title="ArgKit">ArgKit</a>.  It&#8217;s the synthesis of some work that I&#8217;ve been doing in the last couple of years and I&#8217;m very pleased with it.  I&#8217;ve released early (ish) on this one, so there is more work to come in the same vein, time and attention allowing.  One thing that ArgKit&#8217;s website misses is some background on &#8220;what is argumentation?&#8221; so I thought I&#8217;d just blog something about Dungine &#8211; the only tool in the toolkit at the moment, based on an email I sent to a friend recently (thanks for the question Steve).</p>
<p><span id="more-24"></span>If you look at the <a href="http://en.wikipedia.org/wiki/Argumentation">wikipedia argumentation entry</a>, you&#8217;ll see that Dung is mentioned in the Artificial Intelligence (AI) section.  The underlying model for Dungine, Dung&#8217;s acceptability semantics, is interesting to people who work in AI and are trying to capture how people reason and debate, particularly with inconsistent evidence and automate reasoning in this context. In my lab we use ideas like this to try and improve clinical decision support systems that:</p>
<ul>
<li>recommend diagnoses for a patient with a history and a set of symptoms and</li>
<li>recommend treatments for a diagnosed condition.</li>
</ul>
<p>Clinicians don&#8217;t always agree, and neither does the evidence upon which they base their opinions.  If we can adequately represent their arguments, then this software might allow us to automatically reason about which of those arguments we should accept.</p>
<p>In the business world one might use Dungine to:</p>
<ul>
<li>accept a recommendation from a source on the web or</li>
<li>represent a decision about granting a loan,</li>
</ul>
<p>but there are many alternative approaches to supporting these examples, including Bayesian methods or applying a set of prioritised rules. My intuition is that argumentation is most useful in situations where it feels natural to represent contradicting reasons for doing something (accepting the recommendation or granting the loan) but this is a new area, and there are too few examples of it&#8217;s application in the wild.   So I&#8217;ve built this library to help people give it go, and in doing so gather empirical evidence to help us understand where it&#8217;s a practical and useful technique.</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2008/01/24/argkit-an-argumentation-toolkit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The importance of being willing to ask stupid questions</title>
		<link>http://halfdecent.net/2007/11/28/stupid_questions/</link>
		<comments>http://halfdecent.net/2007/11/28/stupid_questions/#comments</comments>
		<pubDate>Wed, 28 Nov 2007 10:59:01 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://halfdecent.net/2007/11/28/stupid_questions/</guid>
		<description><![CDATA[Last week I spent a day interviewing candidates for a programmer position. One of the candidates discussed things that he looked for in an organisation. Two things in particular struck me: He wanted to work in an organisation that, if &#8230; <a href="http://halfdecent.net/2007/11/28/stupid_questions/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last week I spent a day interviewing candidates for a programmer position.   One of the candidates discussed things that he looked for in an organisation.  Two things in particular struck me: He wanted to work in an organisation that, if he was making good progress, didn&#8217;t slow him down and that, if he asked a stupid question, didn&#8217;t call him stupid.  The first question revealed the candidates lack of experience (not a problem in this case btw) but the second one is very important to a career in software engineering.</p>
<p><span id="more-20"></span>Is is very important to ask stupid questions.  The amount that a developer is expected to know is huge.  They must understand their own field of software development, which is rapidly expanding, the domain of their client and be able to think about both at the tiniest level of detail and the highest abstraction.   It is inevitable that things fall through the gaps along the way, and often the only way to pick those things up is to ask stupid questions.  If you are afraid to ask stupid questions you&#8217;re going to proceed much more slowly then you could otherwise.  Of course, most people don&#8217;t like asking questions that they suspect might be stupid, but developers should consider this as part of their role.</p>
<p>One consequence of this attitude is that a software team, when it takes on a new member, must expect a whole series of questions from that newcomer about their domain, design decisions and working practice.  They must allow for this in their planning and encourage this from that person.  However, everyone has limits about being pestered about things that seem stupid, and my stated limit is that if someone asks me to show or explain to them the same thing three times I will be cross.  Twice is ok (expected sometimes), three is not.  I hope this encourages people to actively examine their level of understanding at whatever level of abstraction and document the processes they encounter (or, even better, review the documentation that exists).</p>
<p>Oh, and why did the first question suggest a lack of experience?  Well, because we&#8217;re not actually paid by an organisation to write software (although generally of course, this is what we get a kick out of the most) &#8211; we&#8217;re paid to solve their technical problems in a sustainable manner.  And generally this involves prioritising partial solutions.  Thus if an organisation doesn&#8217;t understand why you wish to pursue a particular line of work, and you cannot justify that line of work in terms of a problem they have, then it&#8217;s legitimate for them to prioritise another piece of work for you.  Sorry, but that&#8217;s just the way it is.  You have the option to continue rich seams of development in your own time (I would say this was one of the primary motivations for open source software), or find an organisation that is more aligned with your own personal enthusiasms &#8211; this may mean starting your own.</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2007/11/28/stupid_questions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Concept of the day: cargo cults</title>
		<link>http://halfdecent.net/2007/08/01/cargo-cults/</link>
		<comments>http://halfdecent.net/2007/08/01/cargo-cults/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 16:19:05 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://halfdecent.net/2007/08/01/concept-of-the-day-cargo-cultists/</guid>
		<description><![CDATA[Cargo cults are a delightful new concept to me, from the excellent and thought provoking blog entry, internal code re-use considered dangerous, which in turn was a link from another blog entry, is your code worthless? which in turn was &#8230; <a href="http://halfdecent.net/2007/08/01/cargo-cults/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Cargo_cult">Cargo cults</a> are a delightful new concept to me, from the excellent and thought provoking blog entry, <a href="http://www.yafla.com/dforbes/2005/09/15.html#a54">internal code re-use considered dangerous</a>, which in turn was a link from another blog entry, <a href="http://cysquatch.net/blog/?p=43">is your code worthless?</a> which in turn was a link from <a href="http://theserverside.com">theserverside.com</a>.  Now that&#8217;s provenance baby.  Too much information?</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2007/08/01/cargo-cults/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>You lied to me when you said this was a program</title>
		<link>http://halfdecent.net/2007/06/15/you-lied-to-me/</link>
		<comments>http://halfdecent.net/2007/06/15/you-lied-to-me/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 08:57:30 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://halfdecent.net/?p=7</guid>
		<description><![CDATA[A Dutch colleague introduced me to plasmasturm.org a while ago &#8211; an excellent software engineering resource. I hadnt noticed it before* but today I was most tickled by a quote he has on his code page: A friend of mine &#8230; <a href="http://halfdecent.net/2007/06/15/you-lied-to-me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A Dutch colleague introduced me to <a href="http://plasmasturm.org/">plasmasturm.org</a> a while ago &#8211; an excellent software engineering resource.    I hadnt noticed it before* but today I was most tickled by a quote he has on his code page:</p>
<p><cite>A friend of mine in a compiler writing class produced a compiler with one error message ‘you lied to me when you told me this was a program’</cite></p>
<p>see <a href="http://plasmasturm.org/code/">plasmasturm.org/code.</a></p>
<p>* Maybe I did notice it before and didnt get it.  Since I first looked at that site I&#8217;ve done some work with the <a href="http://i.loveruby.net/en/projects/racc/">RACC</a>, <a href="http://web.cecs.pdx.edu/~mpj/jacc/index.html">JACC</a> and <a href="https://javacc.dev.java.net/">JavaCC</a> compiler compilers (of the two Java compiler compilers, I prefer JavaCC).</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2007/06/15/you-lied-to-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress theme</title>
		<link>http://halfdecent.net/2007/06/13/wordpress-theme/</link>
		<comments>http://halfdecent.net/2007/06/13/wordpress-theme/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 11:10:52 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://halfdecent.net/?p=6</guid>
		<description><![CDATA[I fell in love with this styleshout web template and decided to hack it into a WordPress theme. Someone else had done it before, but their license was a little too restrictive for my liking. It took a few hours &#8230; <a href="http://halfdecent.net/2007/06/13/wordpress-theme/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.styleshout.com/templates/preview/Envision1-0/index.html"><img src="http://www.styleshout.com/templates/thumbnails/Envision.jpg" style="float: left; margin-right: 10px" height="150" width="200" /></a>I fell in love with this <a href="http://www.styleshout.com">styleshout</a> web template and decided to hack it into a WordPress theme.  Someone else had done it before, but their license was a little too restrictive for my liking.  It took a few hours but was well worth it.  It&#8217;s not widget friendly yet, but it will do for now.</p>
<p>This was almost my first encounter with PHP and definately my first encounter with the WordPress codebase but the task turned out to be fairly straightforward.  The files in the WordPress themes were intuitively named and the code was easy to read.   The only problem I had was tracing the location of some of the core functions that are used in the theme, but this is quite normal for this sort of application I feel.</p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2007/06/13/wordpress-theme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java status bar</title>
		<link>http://halfdecent.net/2007/06/12/java-status-bar/</link>
		<comments>http://halfdecent.net/2007/06/12/java-status-bar/#comments</comments>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[desktop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[This might save someone else a little bother. I&#8217;ve been building Java Swing demo&#8217;s in the last few months and one thing that has slowed me down is building a status bar. A status bar is the strip at the &#8230; <a href="http://halfdecent.net/2007/06/12/java-status-bar/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This might save someone else a little bother.  I&#8217;ve been building Java Swing demo&#8217;s in the last few months and one thing that has slowed me down is building a status bar.  A status bar is the strip at the bottom of a window that contains useful information about the status of an application.  As an example, here is the status bar for my skype client:</p>
<p><a href="http://halfdecent.net/wp-content/uploads/2007/06/skype_status_bar.png" title="skype status bar"><img src="http://halfdecent.net/wp-content/uploads/2007/06/skype_status_bar.png" alt="skype status bar" /></a></p>
<p>There is no standard swing control (container) to do this so you must roll your own.  Searching for &#8220;java status bar&#8221; didnt get me very far.   Initially I just used a JLabel, but this is too simple.  I really wanted something with multiple recessed panels (as in the skype example).  I considered using an unfloatable JToolBar but I dropped this idea because a toolbar&#8217;s default background doesnt look like a status bar and because its not easy to make the recessed panels this way.  Finally I realised that the best way to build my status bar is to nest JPanels.  <span id="more-1"></span>In the next screenshot you can see an example Java status bar which consists of the one JPanel with two JPanel containers nested within it.</p>
<p><a href="http://halfdecent.net/wp-content/uploads/2007/06/java-status-bar.png" title="My java status bar"><img src="http://halfdecent.net/wp-content/uploads/2007/06/java-status-bar.png" alt="My java status bar" /></a></p>
<p>Now it&#8217;s a little tricky to get the status bar behaving correctly on resize, but if you use a GridBagLayout for your top level JPanel then it&#8217;s doable.  However, a GridBagLayout is pretty horrible to use so I constructed two helper classes, StatusBar and StatusBarPanel to make things eaiser.  A StatusBarPanel is simply a JPanel extended with two extra attributes: an integer panelWidth and a boolean fixedWidth.  Thus you can define the width that you wish for your panel and whether or not it can stretch on resize.  The StatusBar class also extends JPanel and has an array of StatusBarPanel objects.   A StatusBar object configures the GridBagConstraints for you when you give it the array of panels.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-8045023696629925";
/* 468x60, created 25/03/08 */
google_ad_slot = "7387698164";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://halfdecent.net/2007/06/12/java-status-bar/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

