<?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>Eq-Tech &#187; Programming</title>
	<atom:link href="http://equima.pfpfree.net/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://equima.pfpfree.net</link>
	<description>More techno ramble - but with a twist!</description>
	<lastBuildDate>Sat, 28 Aug 2010 01:43:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>DIY &#8211; Open Source Programming</title>
		<link>http://equima.pfpfree.net/2010/diy-open-source-programming/</link>
		<comments>http://equima.pfpfree.net/2010/diy-open-source-programming/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 04:54:50 +0000</pubDate>
		<dc:creator>sparky</dc:creator>
				<category><![CDATA[Principles]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=216</guid>
		<description><![CDATA[I&#8217;m currently working on an open source project &#8211; which I won&#8217;t reveal just yet, because it&#8217;s still in the early development stage. The idea came to light about 6 ~ 8 months ago. Speaking to &#8216;Insanity&#8217;, he suggested &#8211; nay, encouraged &#8211; to write up a full outline of the what, when and how. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently working on an open source project &#8211; which I won&#8217;t reveal just yet, because it&#8217;s still in the early development stage.</p>
<p>The idea came to light about 6 ~ 8 months ago. Speaking to &#8216;Insanity&#8217;, he suggested &#8211; nay, encouraged &#8211; to write up a full outline of the what, when and how.</p>
<ul>
<li>What does the program do.</li>
<li>When does it do it.</li>
<li>How does it do it.</li>
</ul>
<p>Or, otherwise known as a Functional Specification and a Technical Specification.</p>
<p>In researching &#8216;guides&#8217;, Joel Spolsky &#8211; <a href="http://www.amazon.com/Joel-Spolsky/e/B001K8FTIE/ref=ntt_athr_dp_pel_1" target="_blank">famous for his various books</a> and his site <a href="http://joelonsoftware.com/" target="_blank">Joel on Software</a>, I found this guide on <a href="http://www.joelonsoftware.com/articles/fog0000000036.html" target="_blank">Functional Specifications</a>.<br />
There are four parts to it, and I highly encoursage reading. It&#8217;s definitely helped me kick start my write up.</p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2010/diy-open-source-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apport integration</title>
		<link>http://equima.pfpfree.net/2009/apport-integration/</link>
		<comments>http://equima.pfpfree.net/2009/apport-integration/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 12:35:34 +0000</pubDate>
		<dc:creator>insanity</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[apport]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=144</guid>
		<description><![CDATA[So for the last day or two I have been attempting to add support for bug reports from within the application.  In the spirit of open-source, I have searched around and found that Apport seems to be heavily used in Ubuntu, and has clean integration with http://bugs.launchpad.net/, which is my chosen bug tracking system for [...]]]></description>
			<content:encoded><![CDATA[<p>So for the last day or two I have been attempting to add support for bug reports from within the application.  In the spirit of open-source, I have searched around and found that Apport seems to be heavily used in Ubuntu, and has clean integration with <a href="http://bugs.launchpad.net/">http://bugs.launchpad.net/</a>, which is my chosen bug tracking system for these projects.</p>
<p>Unfortunately, in the other spirit of open-source, the simple documentation is lacking a bit, so this blog post will hopefully help pave the way for people who might follow in my footsteps.</p>
<h1>Intended Use</h1>
<p>Basically, within one of the applications, I desired to have a link available in a menu that simply says &#8220;Report a problem&#8221;, which then submits a prefilled report to a bug tracking system including important information such as which version is being run, OS details etc.  My experience with Ubuntu has taught me that Apport is an ideal system that already supports the intended use-case, and is integrated into some existing apps in the same way that I&#8217;m looking for.</p>
<h1>UbuntuOne Apport Configuration</h1>
<p>The existing documentation that I referenced most heavily was found at <a href="https://wiki.ubuntu.com/Apport">https://wiki.ubuntu.com/Apport</a> and <a href="https://wiki.ubuntu.com/Apport/DeveloperHowTo">https://wiki.ubuntu.com/Apport/DeveloperHowTo</a>.  The first thing that struck me was that there seems to be no simple uses cases for what I thought would have been a reasonably commonly required use case, i.e., how to integrate with an app being released from a launchpad-hosted ppa.  The existing apport configuration makes apport-bug prevent reports being generated for non-Ubuntu packages (i.e., packages that are not in the main Ubuntu repositories).  This creates a hassle if releasing from a private or team ppa.</p>
<p>Fortunately, through browsing /etc/apport/ I found that the ubuntuone-client already uses apport with a non-genuine Ubuntu package.  This is done by placing a config file in /etc/apport/crashdb.conf.d, and an apport hook in /usr/share/apport/package-hooks/source_ubuntuone-client.py.</p>
<h1>Basic Configuration</h1>
<p>So, from all this, the most simple example I can come up with is the following.  To configure Apport to behave with an application, the following steps are required.</p>
<h2>1. Configure the CrashDb</h2>
<p>Place a CrashDb config file in /etc/apport/crashdb.conf.d called &lt;package-name&gt;-crashdb.conf (note: you can actually called it whatever you want&#8230; but for sanity&#8217;s sake I&#8217;d keep it as package-name <img src='http://equima.pfpfree.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).  Inside this file place something similar to the following:</p>
<pre>&lt;package-name&gt; = {
 'impl' : 'launchpad',
 'project' : '&lt;package-name&gt;',
 'bug_pattern_base' : None,
}</pre>
<h2>2. Install an apport hook to specify the CrashDb</h2>
<p>Place a file in /usr/share/apport/package-hooks called &lt;package-name&gt;.py or source_&lt;package-name&gt;.py.  This file should contain the following, which simply  sets the CrashDb to use the correct configuration:</p>
<pre>import apport

def add_info(report):
 """add report info"""

 if not apport.packaging.is_distro_package(report['Package'].split()[0]):
 report['ThirdParty'] = 'True'
 # replace &lt;package-name&gt; with the crashdb config defined in the previous step
 report['CrashDB'] = '&lt;package-name&gt;'</pre>
<h1>Testing the settings&#8230;</h1>
<p>Assuming all has been correctly set up, you should now be able to report bugs against the custom package by entering the following command in a terminal (or using alt+f2):</p>
<pre>ubuntu-bug &lt;package-name&gt;</pre>
<p>This will open up a window allowing you to send a report.  If you click submit, you should be taken to launchpad, with a new bug being logged against the specified application.</p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2009/apport-integration/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Technological Complacency</title>
		<link>http://equima.pfpfree.net/2009/technological-complacency/</link>
		<comments>http://equima.pfpfree.net/2009/technological-complacency/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 22:32:30 +0000</pubDate>
		<dc:creator>sparky</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Principles]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=72</guid>
		<description><![CDATA[It seems that as society has progressed, people have become lazy &#8211; complacent. No longer are we required to think innovatively to solve problems &#8211; we&#8217;ve become relient on machines to work it out for us. A classic example was in a historic show I watched a few years back. Their goal was to try [...]]]></description>
			<content:encoded><![CDATA[<p>It seems that as society has progressed, people have become lazy &#8211; complacent.</p>
<p>No longer are we required to think innovatively to solve problems &#8211; we&#8217;ve become relient on machines to work it out for us. A classic example was in a historic show I watched a few years back.</p>
<p>Their goal was to try replicate how the Ancient Romans built a huge Dock that went out into a harbour. The difficulty was in creating a machine to place these huge pillars into the water, hammering them down somehow at the right angle, then building the supports and planks on top, move the machine out, rinse-repeat.<br />
These days they&#8217;d just use cranes or something to that effect. But the historical team had to resort to innovation- using only materials found in that time period. They worked it out in the end, but it did demonstrate how much our thinking had changed, and our relience on machines became evident.</p>
<p>Things in the Techno World aren&#8217;t much different these days. It seems that &#8216;Hardware is cheap&#8217; = &#8216;rough enough is good enough&#8217;. In a recent <a href="http://twit.tv/sn"><em>Security Now</em> Podcast (185a)</a> the presenters were talking about how in the early days of computing, memory was expensive. They&#8217;d constantly be trying to re-write their code to make it leaner and more effecient.<br />
Window&#8217;s Vista is a good example of modern day thinking: Just throw more resources at it, it&#8217;ll be fine.</p>
<p>Another area that will be spurred on due to recent economic issues is the games industry. No longer can they just turn out &#8216;crap&#8217;, it seems they&#8217;ll be focussing on <a href="http://www.eurogamer.net/articles/creative-downturn-article">creating more &#8216;quality&#8217; products</a>, less in &#8216;quantity&#8217;.<br />
I&#8217;ve not been much of a gamer in recent years, largely because I didnt feel any of the games looked or felt any different to what&#8217;s become the &#8216;norm&#8217;. Even Mirrors Edge was quite disappointing: A case of interesting idea, and good design, but limitations in gameplay, and a story line which weakens as the game continues, leaves you feeling &#8220;Why did I bother?&#8221;. They couldn&#8217;t do that 15- 20 years ago. They had to develop games that would generate continued interest for continued revenue.</p>
<p>Perhaps its nostalgic of me, but I really do believe that things were better in the past. Largely because people have just become lazy and, well, complacent.</p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2009/technological-complacency/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Standards &#8211; Introduction</title>
		<link>http://equima.pfpfree.net/2008/standards-introduction/</link>
		<comments>http://equima.pfpfree.net/2008/standards-introduction/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 10:28:00 +0000</pubDate>
		<dc:creator>sparky</dc:creator>
				<category><![CDATA[Principles]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=62</guid>
		<description><![CDATA[From time to time, standards are created; They&#8217;re not a bad thing ultimately &#8211; except when you have certain groups or individuals that try to push &#8211; and force &#8211; them onto people to follow. One popular one that has been discussed / debated is the &#8216;web standards&#8217;; but that isn&#8217;t the point of todays [...]]]></description>
			<content:encoded><![CDATA[<p>From time to time, standards are created; They&#8217;re not a bad thing ultimately &#8211; except when you have certain groups or individuals that try to push &#8211; and force &#8211; them onto people to follow.<br />
One popular one that has been discussed / debated is the &#8216;web standards&#8217;; but that isn&#8217;t the point of todays post.</p>
<p>Rather, coding standards.<br />
These are important to ensure others can come along, be able to read and interpret your code, and make changes / modifications &#8211; as needed.</p>
<p>I&#8217;m no pro. In fact, I&#8217;m still very early in my tertiary education &#8211; however already I encounted a bit of a &#8216;dilemma&#8217; in coding standards.</p>
<p>Comments &#8211; always needed. Really. Although tedious, when someone comes along debugging, they can see what each part of the code does &#8211; assuming it isn&#8217;t clear from just reading the code itself.</p>
<p>When I first started coding Java (first few weeks), <a href="http://www.eclipse.org/">eclipse</a> &#8211; my choice of editors &#8211; had a tendency of putting the opening brace { under the &#8216;head&#8217; of the statement, with the closing brace } in line with the statement:</p>
<blockquote><p>if (x == 9)<br />
{</p>
<p>}</p></blockquote>
<p>Then I recieved a &#8216;standards&#8217; document, which told me I had to place the opening brace at the end of the statement, same line, and then the closing brace in line with the head of the statment:</p>
<blockquote><p>if (x == 9) {</p>
<p>}</p></blockquote>
<p>When I first read this, I felt that there must be something wrong. I was partially influenced by my tutorial teach who was saying he preferred the former method.<br />
But then, after discussion with the two other contributors to this site, and my programming lab instructor, I changed my mind, realising that the later is in fact the better way; especially when looking at hundreds of lines of code. Makes it neater, and eliminated unnecessary line spacing &#8211; which is used to just have one brace on it.</p>
<p>The moral of the story: Standards are a good idea, and I encourage all to try find some that are used in the industry, or area, that you work. It&#8217;ll make a lot of people happy <img src='http://equima.pfpfree.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2008/standards-introduction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mythological reputations</title>
		<link>http://equima.pfpfree.net/2008/mythological-reputations/</link>
		<comments>http://equima.pfpfree.net/2008/mythological-reputations/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 07:15:53 +0000</pubDate>
		<dc:creator>insanity</dc:creator>
				<category><![CDATA[Blind-leading-blind]]></category>
		<category><![CDATA[Hype]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[matlab]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=40</guid>
		<description><![CDATA[I&#8217;ve had a hell of a month. I have been spending most of this year so far working with a large expensive piece of software called MATLAB.  By expensive, I mean the student version is over $100 for the most basic package.  By expensive, I mean the research package starts at $1000 and climbs somewhat [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had a hell of a month. I have been spending most of this year so far working with a large expensive piece of software called MATLAB.  By expensive, I mean the student version is over $100 for the most basic package.  By expensive, I mean the research package starts at $1000 and climbs somewhat exponentially.</p>
<p>The last month has led me consider how I got into this predicament, that is, one of programming for MATLAB.  You see, MATLAB is the foundation stone of all computer-based maths.  IT is the yard-stick against which all other pieces of software are measured against.  Why?  Because.</p>
<p>Here are the key reasons I&#8217;ve been told for using MATLAB:</p>
<ul>
<li>It can do EVERYTHING (almost)</li>
<li>It has years of expertise behind it</li>
<li>It is expensive, therefore it is high quality</li>
<li>Everyone else recommends it&#8230;</li>
</ul>
<p>The problem is&#8230; my experiences don&#8217;t reflect any of the apparent positives that have been dictated.  To give some background, I am currently doing some image processing of video feeds in an exercise in computer vision.  So far I have had the following issues:</p>
<ul>
<li>Video under linux can only be loaded if the video is stored as a non-interleaved AVI file.  Finding a program that can do this seems to be about as likely as finding a hen with dracula-fangs</li>
<li>Object-orientation can be done in two different ways.  Only one method is properly documented by MATLAB.  Neither way work as one might expect.</li>
<li>MATLAB provides extraordinarily clumsy controls for GUI and redrawing operations</li>
<li>Image processing of various kinds has some strange undocumented limitations.  For example, I load a 2D image, the instant I attempt to change perspective (camdolly etc.), the image vanishes&#8230;</li>
<li>Image crop can only crop a straight rectangle&#8230;</li>
</ul>
<p>Each of these has wasted more than a day of work to figure out and program around.  So where is the advantage here for using to MATLAB?  I have explained these shortcomings to others who I work with, and all I ever hear back is the popular refrain &#8220;but the program is really good&#8230; what&#8217;s your problem?&#8221;.  So, in spite of all these shortcomings and issues, when I say MATLAB sucks, people just don&#8217;t believe me.</p>
<p>The first major question to consider is: how did MATLAB come to be in such an untouchable position?</p>
<p>As ever, I dont like to present problems without having theories to back them up. My theory is it took the following 4 steps:</p>
<h2>Step 1: write a program</h2>
<p>Simple stuff of course.  They wrote a mathematics program that could work in matricies.  It was written as an educational tool by a lecturer.  Nothing wrong at this point.</p>
<h2>Step 2: sell the program to another university</h2>
<p>So, this is the first and only software of its time.  Of course other Uni&#8217;s have the same desires and needs, so they adopt it wholesale, as it is a lot better than nothing&#8230; right?  Now we are starting to get on shaky ground, as this program likely hasn&#8217;t really been very &#8220;cleaned up&#8221;.</p>
<h2>Step 3: get adopted by a company</h2>
<p>This happened in 1984, with the forming of a company called The MathWorks.  Now there is a commercial reason to sell it&#8230; and generally the commercial entity will want a bigger market etc.  Also, the commercial entity will want to sell asap, and probably won&#8217;t bother rewriting or reworking the existing system.  After all, additional functionality expands the market-base, not improving of existing technology.  So, we get a different style of programming tacked onto an already questionable code base.</p>
<h2>Step 4: get many students hooked on it so it gets dragged out into the industry</h2>
<p>If the students are raised on only one program, then of course, that is what they will want when they graduate.  A great business model, I would highly recommend this track if you can get in!  Now the software is suddenly being used everywhere.  It is quite prolific, and is an almost entirely self-supporting illusion.  All you really need is enough people coming in to equal the number of people leaving your software.  At uni, this happens very naturally, so there is no hassle.  Industries will use software students are familiar with (or students will ask for software they are familiar with), our recent graduates won&#8217;t really investigate the other alternatives that hard, assuming that the university had already done this research (they didnt either)&#8230; suddenly we have a mythical reputation that springs into action.  All sides assume that MATLAB is the best of breed&#8230; why?  Because umm&#8230; everyone else is using it&#8230;</p>
<p>The problem is, that no where along the way has anyone actually sat down to decide the program they are building.  MATLAB has grown organically for many many decades now and my&#8230; goodness&#8230; does it show.  It has many different styles of documentation, mutliple functions to achieve almost identical ends, inconsistent coding syntax and many undocumented &#8220;features&#8221;.  And yet, this has no effect on the perceived value.</p>
<p>MATLAB is already big.  Why is it big? Because it grew when no-one else was there to compete.  So people argue &#8220;but &lt;prestigious uni name here&gt; uses it, certainly its good enough for us!&#8221;&#8230; of course that Uni uses, they use it because everybody else does!</p>
<p>Is MATLAB the best peice of software?  Probably, it is very expensive&#8230; and everyone knows you pay for quality.</p>
<p>Why is MATLAB so expensive?  Because it has taken decades of development, therefore it must be good&#8230; you know, it&#8217;s passed the test of time and all.</p>
<p>The reaction people are having to my critisisms is quite basic: they are buying the advertising material.  It is the same reaction you would get if you rocked up in a Ferrarri, and started telling everybody how bad the performance was.  People would nod and smile knowingly, and think in the back of their head &#8220;but its a Ferrarri&#8230; I&#8217;ll be he&#8217;s just using it wrong&#8221;.</p>
<p>Well, I&#8217;m not using it wrong.  For the area of image research I&#8217;m doing, contrary to popular belief, MATLAB quite simply sucks.  If there is one thing I can ask people reading this, it is: Please please please DO YOU OWN RESEARCH before you force those working below you to use a particular technology or software suite.  If you haven&#8217;t checked that the software can do the hardest thing you will need to do (or even all the simple things such as maybe loading a compressed avi file), then you haven&#8217;t done your research properly and could be crippling your project for life.</p>
<p>So next time someone says you should use &lt;Big Technology Company Name Here&gt;&#8217;s brand spanking new product, smile at them, pat them on the head, find yourself a trial copy and check it out for yourself before you commit to using it.  Don&#8217;t be fooled by the myths of reputation.</p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2008/mythological-reputations/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>License to Code&#8230;</title>
		<link>http://equima.pfpfree.net/2008/license-to-code/</link>
		<comments>http://equima.pfpfree.net/2008/license-to-code/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 02:56:26 +0000</pubDate>
		<dc:creator>insanity</dc:creator>
				<category><![CDATA[Blind-leading-blind]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Public Perception]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[legal]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=26</guid>
		<description><![CDATA[Update: If you think licensing doesn&#8217;t matter to you as a programmer&#8230; check out this article about how the PwnageTool developers may have lost control of their source code. Licenses do matter! You know, I really haven&#8217;t been alive for that along.  Less than 3 decades still.  And yet, I am often in awe at [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> If you think licensing doesn&#8217;t matter to you as a programmer&#8230; check out <a href="http://www.linux.com/feature/141078">this article about how the PwnageTool developers may have lost control of their source code</a>.  Licenses do matter!</p>
<p>You know, I really haven&#8217;t been alive for that along.  Less than 3 decades still.  And yet, I am often in awe at how &#8230;naive&#8230; other people are.</p>
<p>Here, have a look at this article: <a href="http://news.slashdot.org/article.pl?sid=08/07/08/1832255">Linguistic Problems of GPL Advocacy</a></p>
<p>The basic gist of this is that BSD licenses are superior to GPL licenses, as a GPL license makes claim to software that the GPL-licensing programmer never actually wrote.</p>
<p>The article makes a few key points:</p>
<ul>
<li>BSD advocates value the freedom of the &#8220;project&#8221;, where-as GPL advocates value freedom of &#8220;code&#8221;</li>
<li>GPL encourages reuse of crappy code (?!)</li>
<li>The GPL license is Viral</li>
<li>GPL is anti-business in its views on code ownership and responsibility</li>
<li>The comparison between the two licenses could be better summarised as <em>&#8220;BSD code is free, but the GPL ensures all derived works are also free.&#8221;</em> or <em>&#8220;The GPL ensures your code will never be used by a closed-source application.&#8221;</em></li>
</ul>
<p>So lets get started&#8230;</p>
<h2>Code vs Project freedom</h2>
<blockquote><p>To a BSD advocate, his project will always &#8220;stay free,&#8221; and to assert otherwise is ridiculous. Once it is published, what could possibly make it go away?<br />
[snip]<br />
To a GPL advocate, the project is not important; the code is important. So he looks not just at the project distributions he has made, but also of other projects that may incorporate any line of code he ever wrote. In his mind there is no distinction between his original work and its encapsulation in a derived work. He still thinks of both as &#8220;his code,&#8221; and as an entity that must stay free.</p></blockquote>
<p>First point up for grabs.  The author asserts that GPL programmers focus on their code as being the thing they want always free, rather than the project.  This is a deliberate misnomer with which the author attempts to convey the idea that GPL programmers are essentially code-obsessed, to the detriment of everything else.  The statement reveals the depth of misunderstanding the author not only has about the GPL license, but also about the capabilities of their pet BSD license.</p>
<p>Software freedom can be broken up into two categories.  Freedom for users and freedom for developers.  GPL and BSD are written with different audiences in mind!  GPL is guarenteeing freedom for the user.  As a user, I can do anything I want with the code.  I will always be able to do anything I want with the code, and nothing or nobody can take that right away from me.  As a developer however, I am restricted as to how I can use GPL code, and MUST provide source code to any program i write that uses GPL code.  BSD on the other hand grants full freedoms to the developer.  A developer can take the BSD licensed code, make some minor improvements, then repackage and sell the software without ever giving their improvements back to the community.  There are some very detailed articles written about this, like perhaps the one at the GNU:<a href="http://www.gnu.org/philosophy/free-sw.html"> http://www.gnu.org/philosophy/free-sw.html</a></p>
<p>The diifference can be distilled into the following:  BSD is a fire-and-forget license.  Once you release code under the BSD license, it is no longer under your control at all.  In fact, anyone can control it now.  There are no legal requirements for any user (user = programmer using code) to contribute back your source.  GPL on the other hand, is a fire-and-maintain license.  You release code under GPL&#8230; if anyone uses it to create their own project, your original code will be improved, and those improvements will be accessible to you for reintegration into your own systems.  Every use of GPL code in public means that everyone who uses your code can benefit.</p>
<h2>Those crappy GPL coders&#8230;</h2>
<blockquote><p>As an aside, I would expect this mindset to be more prone to reusing other people&#8217;s code instead of reimplementing it. Where I would scoff at a piece of code, call it utter garbage, and rewrite the damn thing from scratch, a GPL advocate would probably wrap the garbage in another API that he finds more palatable. In my opinion, this leads to bloat from wrappers, instability from the garbage that is still there, and loss of skills.</p></blockquote>
<p>This is commonly called &#8220;<a href="http://en.wikipedia.org/wiki/Not_Invented_Here">Not Invented Here</a>&#8221; syndrome. It is not as much of a strength as the author makes it appear, as there are many good occasions when the code you rewrite ends up being just as badly bloated as the version you just criticized and discarded.  You are also trading in known bugs for your own custom set, etc.  So, rewriting isn&#8217;t an advantage.<br />
The other argument for code reuse (especially if you can link it to a shared library as opposed to a static version as is often done in linux) is that when you fix one bug you fix them for all applications using that library.  Or if you speed up the implementation, all applications using that library benefit from the speed up.  Therefore, rather than having 12 different implementations of how to read metadata from image files, each with their own bugs, advantages and quirky behaviour, we can all contribute and code against a common library meaning we end up COMBINING effort rather than simply competing.<br />
Of course, the disadvantage is that it is difficult to change the library api once it is released&#8230; but there are ways to work around this however!</p>
<h2>&#8220;A virus has been detected&#8221;</h2>
<p>Just for something different, this statement is actually correct.  The GPL license is viral, in that any code it touches must naturally become GPL in order to fulfill the legal requirements.  Why is this the case though?  Now, this is one of the primary points the author rants against.  In the author&#8217;s mind, a person using GPL really has absolutely no right to dictate the conditions of how their code is used once they release it to the public.</p>
<blockquote><p>
For example, suppose I sit on the curb and give away free lemons. A kid next door might get the bright idea to get my lemons, make lemonade, and sell it. The lemonade is clearly a &#8220;derived work,&#8221; since it is made from my lemons, but it is absurd to suggest I have any right to tell him what price to put on his lemonade or how much sugar he can use in it.</p></blockquote>
<p>The key rift between the author&#8217;s clever analogy and actual reality, is that he never really cares about the lemon in the first place.  The author is clearly thinking of something where his contribution to the next project is minimal, and the improvements over his product are easily reproducible.  This is not the case in the world of software.  Let&#8217;s look at linux for example.  Every company that repackages and sells linux, is essentially making money of EVERY programmer who ever contributed a piece of software, a line of code or even a design idea to linux since it was born.  The company is profiting (hopefully!) from many many hundreds of man-years of development that has already gone into making the various interfaces used.  Now, it is obvious that the company will not hunt down all these individuals and pay them for their contributions.  They couldn&#8217;t ever hope to, as the software would be too expensive, and the developers too numerous for this to be possible.  So insted, the GPL encourages a different form of payment: the programmers are &#8220;paid&#8221; by the company contributing their improvements back to the ecosystem.  In this way, the programmer is essentially paid by getting more useful, stable and valuable software.</p>
<p>Now, we know companies are all honest and caring.  Right?  No of course not!  Every company out there is trying to make money, and to do this they need an edge on their competitors.  Even linux-based companies!  So, it is easy to see that given a choice, no company would reveal their fixes, changes and upgrades to any free software base.  After all, if they are depending on software to give them an edge, as soon as they release this, every other company now has the same &#8220;advantage&#8221; they did&#8230; so goodbye edge.  The Free Software Foundation realised this, hence why the GPL code ENFORCES fair sharing of fixes back to the original community.</p>
<p>By contrast, the BSD license makes no conditions at all. Imagine if you will, that you are working with a colleague that you teach many new things to.  You do his assignments, and help with his projects, and all he ever does is say &#8220;thanks&#8221; (if your lucky).  This is what the BSD license allows!  I can take any BSD code, make some bugfixes, combine it with a few other BSD projects, make more bugfixes, and release the new and improved version.  Worse still, I can then charge $10,000 for this new version, and never give out the source code.  How do the original programmers benefit from this?  A programmer may have just given away 10 years of hard work and testing&#8230; and they will never see any return on it now that it&#8217;s under the BSD license.  If the people who reuse my code are not forced to return changes and improvements made, then I am essentially giving them a free ride.  And every improvement I make is further increasing their value, while bringing nothing extra to me. GPL is viral because it needs to be.</p>
<h2>None of your business</h2>
<blockquote><p>These distinctive views of ownership combine with considerations of <a href="http://slashdot.org/%7EChemisor/journal/95106">money</a>, and GPL&#8217;s anti-business mindset, resulting in accusations of Communism, and worse.</p></blockquote>
<p>Here we strike the most unsupported claim.  This <a href="http://lwn.net/Articles/193935/">website</a> does a pretty good job revealing the truth of the GPL license:</p>
<blockquote><p>The GPL provides a substantial business advantage apart from alternative proprietary licensing: assurance that contributed code can&#8217;t be used by others who hide further improvements. This is part of the reason so many companies contribute to Linux and GNU even though they compete with other contributors. Each knows the others can&#8217;t release an improved product without making the source available and so must accept a level playing field. BSD and similar licenses are only more &#8220;business friendly&#8221; for companies that want to release proprietary software. For the overwhelming majority of companies who don&#8217;t (and even for those that do in areas where they don&#8217;t offer proprietary products) the GPL a better deal.
</p></blockquote>
<p>So quite simply, BSD is good for if you want to become the next Microsoft, and lock everybody into your propriatey software.  GPL does not condone, and will not allow this kind of monopoly and stupidity to happen.  GPL creates an environment where code is NOT the valuable content.  If everyone has access to the same code-base, companies need to find new ways to distinguish themselves, with other useful things such as services, support, and general good-will.</p>
<h2>GPL and closed source</h2>
<blockquote><p><em>&#8220;The GPL ensures your code will never be used by a closed-source application.&#8221;</em></p></blockquote>
<p>After the long-winded rant against many GPL practices, the author at least closes with an accurate statement.  GPL is specifically designed to prevent closed-source use for the simple fact that it is seen as detrimental to the computing community in general.</p>
<p>As a programmer myself, this prevention makes me more likely to contribute towards a GPL licensed project than any other, as I can guarentee that at the end of things, the company can never lock me out of my improvements by forking the project, closing it up, polishing it a bit, then trying to sell it back to me.  If I am giving a company my spare time to help them fix THEIR bugs or improve their product, then is it too much to ask for reimbursement?  Apparently many other programmers feel the same way&#8230; it is no accident that <a href="http://www.mozilla.org/MPL/">many</a> <a href="http://www.linux.org/info/gnu.html">huge</a> <a href="http://www.gnome.org/about/">projects</a> all use GPL licenses.</p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2008/license-to-code/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>On the contrary (subtitled: Rapid Application Development)</title>
		<link>http://equima.pfpfree.net/2008/on-the-contrary-subtitled-rapid-application-development/</link>
		<comments>http://equima.pfpfree.net/2008/on-the-contrary-subtitled-rapid-application-development/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 11:34:49 +0000</pubDate>
		<dc:creator>farseeker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[analogy]]></category>
		<category><![CDATA[rad]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=17</guid>
		<description><![CDATA[In complete and utter polar opposite to Insanity&#8217;s last post, my job as a programmer does not require me to write a single line of code. Ever. I can (and my boss has, more than once) build massive enterprise systems without ever encountering a syntax error, a mis-placed semi-colon or an any sort of incompatibility. [...]]]></description>
			<content:encoded><![CDATA[<p>In complete and utter polar opposite to Insanity&#8217;s last post, my job as a programmer does not require me to write a single line of code. Ever. I can (and my boss has, more than once) build massive enterprise systems without ever encountering a syntax error, a mis-placed semi-colon or an any sort of incompatibility.</p>
<p>See, I work in a tool called eDeveloper, by Magic Systems (in fact the version of the tool I use is called Magic eDeveloper, or Magic for short. In 1983 when they launched the product I&#8217;m sure it was a cool name but these days&#8230; not so much). It&#8217;s a completely code-free environment.</p>
<p>Now when I was at Uni, we learned about Rapid Application Development environments (or RAD for short), but nobody I knew had ever been exposed to such a thing. So I thought I would provide a short tutorial on what a RAD tool looks like.</p>
<p>Before I start, I should point out that this is a post-fourth-generational tool, which is about as far removed from any sort of code as you can possibly get. It&#8217;s a full-on RAD tool (an example later) that takes a lifetime to master (like any good IDE), but you can learn the ropes in a month or two of practical work.</p>
<p>Firstly, you start with a blank application, except in the terms of eDeveloper an application is sort of like a C++ Class. Sorta. Kinda. But not really. But that&#8217;s the easiest way to describe it. Inside the application you have programs (which are like functions&#8230; only not).</p>
<p><a href="http://equima.pfpfree.net/wp-content/uploads/2008/07/1-repository.jpg"><img class="alignnone size-medium wp-image-21 aligncenter" title="1-repository" src="http://equima.pfpfree.net/wp-content/uploads/2008/07/1-repository-500x330.jpg" alt="" width="500" height="330" /></a></p>
<p>The programs can be one of three sorts (we only use two): Online, Batch and Browser. Online is a traditional GUI, and you draw your interface in a similar way to VB:</p>
<p><a href="http://equima.pfpfree.net/wp-content/uploads/2008/07/2-guiform.jpg"><img class="alignnone size-medium wp-image-22 aligncenter" title="2-guiform" src="http://equima.pfpfree.net/wp-content/uploads/2008/07/2-guiform-500x330.jpg" alt="" width="500" height="330" /></a></p>
<p>The &#8220;code&#8221; behind it (think of this in terms of a function definition) is not written by hand. Rather there are a set of different kinds of commands (Select Real &#8211; selects a column from a database table, Select Virtual &#8211; a custom variable, Link Query/Left Outer Join &#8211; retrieves data from a different table, Call Prog/Task &#8211; Calls another program/task level, etc). You select your command and then fill in any missing parameters. Virtuals and Reals (or variables and database columns) are all referenced with a letter, A-ZZZ (strings and expressions are referenced with a number from 0-999). Strange I know, but you get used to it. Coding is actually incredibly fast, because you use the keyboard heavilly, rather than mouse clicking. E.g. pressing S 2 selects the second column from the table (rather than typing &#8220;SELECT column FROM table&#8221; and then executing said command).</p>
<p><a href="http://equima.pfpfree.net/wp-content/uploads/2008/07/3-program.jpg"><img class="alignnone size-medium wp-image-23 aligncenter" title="3-program" src="http://equima.pfpfree.net/wp-content/uploads/2008/07/3-program-500x330.jpg" alt="" width="500" height="330" /></a></p>
<p>Batch tasks are exactly the same as above, but without the GUI. They run in the background and loop through all the records in dataset executing the same rules on every row. Batch tasks are also used for interfacing with web sites.</p>
<p>It&#8217;s quite a different world, and for a PHP programmer it took a lot of getting used to. In PHP your interface and your logic are wrapped up in the same place. Same with ASP. But in eDeveloper, you place a &#8220;Magic Tag&#8221; in your HTML file, then you go to eDeveloper to do your logic. Say you need to insert a persons name. In PHP you might go:</p>
<blockquote><p>&lt;?&#8211;PHP echo(MySQL_Result(MySql_Query(&#8216;SELECT name FROM table WHERE id=0)) ?&gt;</p></blockquote>
<p>(My syntax is probably horrible, its been a while since I did any PHP) &#8211; wheras in eDeveloper you would type &lt;!$MG_Name&gt;, go into eDeveloper and map the &#8220;Name&#8221; tag to a field in the database. I&#8217;m trying to think of a clever analogy to make it all make more sense, but I can&#8217;t.</p>
<p>That&#8217;s probably about enough for the moment, without giving away any more probably confidential screenshots (I tried to keep it simple!), but if you have any questions feel free to drop in a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2008/on-the-contrary-subtitled-rapid-application-development/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hurts so sweet&#8230;</title>
		<link>http://equima.pfpfree.net/2008/hurts-so-sweet/</link>
		<comments>http://equima.pfpfree.net/2008/hurts-so-sweet/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 10:47:35 +0000</pubDate>
		<dc:creator>insanity</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Public Perception]]></category>
		<category><![CDATA[linux OSS programming reflective]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=15</guid>
		<description><![CDATA[Well&#8230; it&#8217;s been a long and seemingly unproductive day today. Anyone who&#8217;s ever used Linux for a period of time can probably relate to this feeling: you have an issue, but no matter what you do the program/problem wont behave as you would like.  In my case, I have been attempting to get Steam, Wine [...]]]></description>
			<content:encoded><![CDATA[<p>Well&#8230; it&#8217;s been a long and seemingly unproductive day today.</p>
<p>Anyone who&#8217;s ever used Linux for a period of time can probably relate to this feeling: you have an issue, but no matter what you do the program/problem wont behave as you would like.  In my case, I have been attempting to get Steam, Wine &amp; Pulseaudio to all work simultaneously.  This appears to be a fairly widespread problem, that has been around for a few months according to the internet.</p>
<p>The time waiting for things to download, compile, reboot, reconfigure etc. has allowed me some ample time to ponder the question that farseeker loves to raise about anyone foolish enough to try and run Linux: why do I &#8220;waste&#8221; my time on this?  After all, I could simply reboot, select Windows XP from my boot menu and all my troubles would simply vanish.  I know my graphics card works under Windows, I know my sound card does&#8230; games run without needing to manually copy dll&#8217;s around and tweak a dozen reg keys&#8230; and yet, booting Windows would ultimately be unsatisfying.  You see, the reason I spend afternoons doing this kind of configuration work, is because I actually enjoy it (no, I don&#8217;t beat myself with sticks for fun <img src='http://equima.pfpfree.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> )!</p>
<p>It can be traced back to one major thing that the most people don&#8217;t understand about open source software (OSS) users.  I don&#8217;t use OSS it because its free, though that is an attractive option when facing $200 per copy of Windows.  I don&#8217;t necessarily use it because it&#8217;s easier to work with, though I can think of many cases when it is easier than alternatives such as Windows.  I don&#8217;t even use it to spite Microsoft, though it often might appear that way.</p>
<p>The key reason I use OSS because it allows  me (encourages me even) to be more creative.  Take today for example, I have spent all day reading man files, manipulating config files, I&#8217;m even in the process of compiling Wine with some extra patches to see if that helps anything.</p>
<p>Just for consideration, imagine what this problem would be like under Windows.  With no access to source code, and the only documentation available from Microsoft, the whole issue could have been summed up in an hour or less.  I would have found one of two things:  either I would have gotten the answer that it was a MS bug, no they haven&#8217;t released a patch, and they probably won&#8217;t unless you call them personally. Or I would have found a dozen other people complaining about the issue, only to find after a dozen attempts to fix the problem that no-one really has a clue.</p>
<p>So, lets see, I have spent the day reading code from different (and better) programmers, I have been looking at some revolutionary designs for sound systems (PulseAudio is not your average sound daemon&#8230;), as well as getting practice at Debian packaging, code compiling, documentation, source control, patching systems etc.</p>
<p>Which of the two operating system issues would me become a better programmer?  Definitely linux.</p>
<p>Which of the two situations would help me learn new problem solving skills, new technologies and new ideas?  Definitely linux.</p>
<p>Which of the two situations will be resolved first?  Oh, the Windows one quite likely.  But I have no ability to improve the end result if I am not satisfied with the outcome (&#8220;No, we don&#8217;t care about that feature&#8221;).  In linux&#8230; well, since I am a programmer, I could actually do it myself if the need is great enough.</p>
<p>When viewed from this perspective, it is clear that Linux is not wasting time at all, IF YOUR INTENTION IS TO LEARN ABOUT PROGRAMMING!  It&#8217;s helping perform the equivalent function that daily exercise does for your physical body.</p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2008/hurts-so-sweet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Joel and leaving things un-finished</title>
		<link>http://equima.pfpfree.net/2008/joel-and-leaving-things-un-finished/</link>
		<comments>http://equima.pfpfree.net/2008/joel-and-leaving-things-un-finished/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 12:08:49 +0000</pubDate>
		<dc:creator>farseeker</dc:creator>
				<category><![CDATA[Principles]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://equima.pfpfree.net/?p=11</guid>
		<description><![CDATA[I was going to write a bit about automatic SQL Index Selection and why I&#8217;m hating it at the moment, but the blog isn&#8217;t letting me upload media, so it&#8217;ll have to wait and you can read something else I wrote to fill in the blank space: If any of you are not familiar with [...]]]></description>
			<content:encoded><![CDATA[<p>I was going to write a bit about automatic SQL Index Selection and why I&#8217;m hating it at the moment, but the blog isn&#8217;t letting me upload media, so it&#8217;ll have to wait and you can read something else I wrote to fill in the blank space:</p>
<p>If any of you are not familiar with <a href="http://www.joelonsoftware.com/" target="_blank">Joel on Software</a> and you&#8217;re a programmer, or are thinking about programming, or are involved in programming, or in any way work with a programmer, you should familiarise yourself ASAP. Pretty much everything he&#8217;s ever written is gold.</p>
<p>My favourite article of his (find it on his site or buy his book, I&#8217;m not going to reproduce the whole thing here) regards the presentation of an un-finished product to management. The idea is that management don&#8217;t really understand how programming works (which is more true than you can ever imagine), and when you present them with an un-finished product, if the GUI is finished then they will believe and behave as if the project is finished (which is very bad for you, as a programmer). As a result, I always make sure I leave a few deliberate bugs in the GUI of anything I&#8217;m developing, right up until the product is ready to ship.</p>
<p>Being (mostly) internal software that I develop, and never shrink-wrapped software, this isn&#8217;t a huge deal. But what I&#8217;m also discovering is that people on the inside of the loop (i.e. other programmers) think that what I do is stupid and that I&#8217;m bringing down their standard of work. Leaving deliberate visual bugs (and my boss is included in this) is crazy talk.</p>
<p>My point is, don&#8217;t listen to them. Because even people &#8216;in the loop&#8217; and who should know better see a finished GUI and think that the product is finished.</p>
]]></content:encoded>
			<wfw:commentRss>http://equima.pfpfree.net/2008/joel-and-leaving-things-un-finished/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
