<?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"
	>

<channel>
	<title>drobilla</title>
	<atom:link href="http://drobilla.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://drobilla.net/blog</link>
	<description></description>
	<pubDate>Tue, 18 Nov 2008 17:55:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Opinionated dichotomies in science</title>
		<link>http://drobilla.net/blog/2008/09/18/opinionated-dichotomies-in-scienc/</link>
		<comments>http://drobilla.net/blog/2008/09/18/opinionated-dichotomies-in-scienc/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 16:12:47 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Education]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/?p=68</guid>
		<description><![CDATA[Computing is the only real science.  The rest can be simulated.
]]></description>
			<content:encoded><![CDATA[<p>Computing is the only real science.  The rest can be simulated.</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2008/09/18/opinionated-dichotomies-in-scienc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Iteration in Scheme</title>
		<link>http://drobilla.net/blog/2008/03/13/iteration-in-scheme/</link>
		<comments>http://drobilla.net/blog/2008/03/13/iteration-in-scheme/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 19:02:34 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[iteration]]></category>

		<category><![CDATA[iterators]]></category>

		<category><![CDATA[language]]></category>

		<category><![CDATA[lisp]]></category>

		<category><![CDATA[OO]]></category>

		<category><![CDATA[polymorphism]]></category>

		<category><![CDATA[scheme]]></category>

		<category><![CDATA[type]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2008/03/13/iteration-in-scheme/</guid>
		<description><![CDATA[Thoughts brought on by using SWIG to make Scheme bindings for C/C++ code:
In Scheme, being a LISP, pretty much everything is usually a list.  This is great and makes for elegant code, but as a data structures guy I cringe to see the ridiculous amount  of O(n) searching done in LISP code.  [...]]]></description>
			<content:encoded><![CDATA[<p>Thoughts brought on by using <a href="http://www.swig.org/">SWIG</a> to make Scheme bindings for C/C++ code:</p>
<p>In Scheme, being a LISP, pretty much everything is usually a list.  This is great and makes for elegant code, but as a data structures guy I cringe to see the ridiculous amount  of O(n) searching done in LISP code.  Why is the underlying structure (a list) a dependency of the code using it?  Lack of abstraction: car and cdr only work on cons cells, and lists are made of cons cells - period.  This sucks for plenty of reasons (the one that encouraged this rant is making Scheme bindings for C++ code).</p>
<p>Say you want to expose a C or C++ list in Scheme.  To be really useful in Scheme, it will have to work with car and cdr.  Luckily any list has the concept of &#8216;get the value at this position&#8217; (car) and &#8216;get the next position&#8217; (cdr).  For C++ the position is an iterator, car is *, and cdr is ++.  Unfortunately making &#8216;nice&#8217; (ie typical and un-weird) Scheme bindings for these means you literally have to duplicate the entire C++ list and build a Scheme list out of it, because there&#8217;s no functional abstraction going on here, and the type system is nonexistant.</p>
<p>I guess this boils down to a rant about needing iterators in Scheme.  I cringe at sounding so much like an OO &#8220;patterns&#8221; kind of guy, but there it is :)</p>
<p>Lets say our Scheme dialect has some a type system with polymorhism.  Scheme code is generally something like:</p>
<p><code></p>
<pre>
(define (do-something list)
  (something (car list))
  (if (not (null? (cdr list)))
    (do-something (cdr list)))

(define a-list '(1 2 3 4 5))

(do-something a-list)
</pre>
<p></code></p>
<p>Rename car &#8220;get&#8221; and cdr &#8220;next&#8221; to avoid confusion, and use an iterator:</p>
<p><code></p>
<pre>
(define (do-something iter)
  (something (get iter))
  (if (valid? (next iter))
    (do-something (next iter)))

(define a-collection (whatever))

(do-something (start a-collection))
</pre>
<p></code></p>
<p>The idiom for do-something (the fundamental LISP idiom if there ever was one) is the same.  The only difference is the call to do-something must pass an iterator, here with the start function.  Slightly unfortunate maybe, but the benefits are huge:</p>
<ul>
<li>Common list-like iteration for all data structures (e.g. trees)</li>
<li>Different styles of iteration (use reverse-end instead of start and have do-something work in reverse without modification)</li>
</ul>
<p>I suppose since I&#8217;m assuming a stronger/better/faster Scheme dialect with a good type system, a collection could just automatically convert to the &#8217;start&#8217; iterator, and the calling code could even be the same if you just want classic LISP style code.  I&#8217;m a huge fan of LISP style languages (mostly because the code is a simple list structure itself), but there really needs to be an abstraction between the underlying data structure and the code that uses it.</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2008/03/13/iteration-in-scheme/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DOAP replacing AUTHORS/MAINTAINERS/etc</title>
		<link>http://drobilla.net/blog/2008/01/18/doap-replacing-authorsmaintainersetc/</link>
		<comments>http://drobilla.net/blog/2008/01/18/doap-replacing-authorsmaintainersetc/#comments</comments>
		<pubDate>Fri, 18 Jan 2008 16:25:06 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Hacking]]></category>

		<category><![CDATA[RDF]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2008/01/18/doap-replacing-authorsmaintainersetc/</guid>
		<description><![CDATA[There&#8217;s been a bit of talk in the GNOME camp lately about using DOAP instead of the unstructured text files that are the current norm for source packages.  On the one hand, people want the benefits of having machine readable data in projects, OTOH, RDF/XML is a nightmare (&#8221;I&#8217;ll never maintain such bloat!&#8221;  [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been a bit of talk in the GNOME camp lately about using DOAP instead of the unstructured text files that are the current norm for source packages.  On the one hand, people want the benefits of having machine readable data in projects, OTOH, RDF/XML is a nightmare (&#8221;I&#8217;ll never maintain such bloat!&#8221;  -  &#8220;That is one hell of an ugly file.&#8221;).</p>
<p>This is how RDF/XML hurts RDF.  The original loathed file:</p>
<pre>
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;?xml-stylesheet type=&quot;text/xsl&quot;?&gt;
&lt;rdf:RDF xml:lang=&quot;en&quot;
         xmlns=&quot;http://usefulinc.com/ns/doap#&quot;
         xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;
         xmlns:asfext=&quot;http://projects.apache.org/ns/asfext#&quot;&gt;
  &lt;Project rdf:about=&quot;http://ant.apache.org/&quot;&gt;
    &lt;created&gt;2006-02-17&lt;/created&gt;
    &lt;license rdf:resource=&quot;http://usefulinc.com/doap/licenses/asl20&quot; /&gt;
    &lt;name&gt;Apache Ant&lt;/name&gt;
    &lt;homepage rdf:resource=&quot;http://ant.apache.org&quot; /&gt;
    &lt;asfext:pmc rdf:resource=&quot;http://ant.apache.org&quot; /&gt;
    &lt;shortdesc&gt;Java-based build tool&lt;/shortdesc&gt;
    &lt;description&gt;Apache Ant is a Java-based build tool. In theory, it is kind of like Make, but without Make\'s wrinkles.&lt;/description&gt;
    &lt;bug-database rdf:resource=&quot;http://issues.apache.org/bugzilla/buglist.cgi?product=Ant&quot; /&gt;
    &lt;mailing-list rdf:resource=&quot;http://ant.apache.org/mail.html&quot; /&gt;
    &lt;download-page rdf:resource=&quot;http://ant.apache.org/bindownload.cgi&quot; /&gt;
    &lt;programming-language&gt;Java&lt;/programming-language&gt;
    &lt;category rdf:resource=&quot;http://projects.apache.org/category/build-management&quot; /&gt;
    &lt;release&gt;
      &lt;Version&gt;
        &lt;name&gt;Apache Ant 1.7.0&lt;/name&gt;
        &lt;created&gt;2006-12-13&lt;/created&gt;
        &lt;revision&gt;1.7.0&lt;/revision&gt;
      &lt;/Version&gt;
    &lt;/release&gt;
    &lt;repository&gt;
      &lt;SVNRepository&gt;
        &lt;location rdf:resource=&quot;http://svn.apache.org/repos/asf/ant&quot;/&gt;
        &lt;browse rdf:resource=&quot;http://svn.apache.org/viewcvs.cgi/ant&quot;/&gt;
      &lt;/SVNRepository&gt;
    &lt;/repository&gt;
  &lt;/Project&gt;
&lt;/rdf:RDF&gt;
</pre>
<p>and the equivalent in Turtle (a subset of N3) (automatically generated with rapper -o turtle doap_Ant.rdf):</p>
<pre>
@prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .
@prefix : &lt;http://usefulinc.com/ns/doap#&gt; .
@prefix asfext: &lt;http://projects.apache.org/ns/asfext#&gt; .

<http://ant.apache.org/>
    a :Project;
    :created "2006-02-17"@en;
    :license <http://usefulinc.com/doap/licenses/asl20>;
    :name "Apache Ant"@en;
    :homepage &lt;http://ant.apache.org&gt;;
    asfext:pmc &lt;http://ant.apache.org&gt;;
    :shortdesc "Java-based build tool"@en;
    :description "Apache Ant is a Java-based build tool. In theory, it is kind of like Make, but without Make's wrinkles."@en;
    :bug-database &lt;http://issues.apache.org/bugzilla/buglist.cgi?product=Ant&gt;;
    :mailing-list &lt;http://ant.apache.org/mail.html&gt;;
    :download-page &lt;http://ant.apache.org/bindownload.cgi&gt;;
    :programming-language "Java"@en;
    :category &lt;http://projects.apache.org/category/build-management&gt;;
    :release [
        a :Version;
        :name "Apache Ant 1.7.0"@en;
        :created "2006-12-13"@en;
        :revision "1.7.0"@en
    ];
    :repository [
        a :SVNRepository;
        :location &lt;http://svn.apache.org/repos/asf/ant&gt;
        :browse &lt;http://svn.apache.org/viewcvs.cgi/ant&gt;
    ] .
</pre>
<p>I wouldn&#8217;t want to hand maintain for RDF/XML version either, but the Turtle version?  Sure.  It&#8217;s the exact same information, far more human readable, and about as terse as it could be while representing the same information.</p>
<p>The best thing about a syntax independent model like RDF is.. well, it&#8217;s syntax independent.  Choose one that doesn&#8217;t suck :)</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2008/01/18/doap-replacing-authorsmaintainersetc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My Top 10 Albums of 2007</title>
		<link>http://drobilla.net/blog/2008/01/02/my-top-10-albums-of-2007/</link>
		<comments>http://drobilla.net/blog/2008/01/02/my-top-10-albums-of-2007/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 05:37:37 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Music]]></category>

		<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2008/01/02/my-top-10-albums-of-2007/</guid>
		<description><![CDATA[Just kidding.
If you can seriously make a top 10 albums list for an entire year, you aren&#8217;t listening to nearly enough music.
]]></description>
			<content:encoded><![CDATA[<p>Just kidding.</p>
<p>If you can seriously make a top 10 albums list for an entire year, you aren&#8217;t listening to nearly enough music.</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2008/01/02/my-top-10-albums-of-2007/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Other People&#8217;s Software</title>
		<link>http://drobilla.net/blog/2007/08/06/other-peoples-software/</link>
		<comments>http://drobilla.net/blog/2007/08/06/other-peoples-software/#comments</comments>
		<pubDate>Mon, 06 Aug 2007 18:31:14 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Hacking]]></category>

		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2007/08/06/other-peoples-software/</guid>
		<description><![CDATA[So, that whole Ardour thing is coming along.  Couple more fundamental things (like multi-note dragging and actually saving edits out to disk) and it should be an at least somewhat usable MIDI sequencer.  Woo.
In slightly related news, Ingen is almost in a usable state after almost a year of being useless.  The [...]]]></description>
			<content:encoded><![CDATA[<p>So, that whole <a href="http://drobilla.net/files/ardour_midi.png">Ardour</a> thing is coming along.  Couple more fundamental things (like multi-note dragging and actually saving edits out to disk) and it should be an at least somewhat usable MIDI sequencer.  Woo.</p>
<p>In slightly related news, <a href="http://wiki.drobilla.net/Ingen">Ingen</a> is almost in a usable state after almost a year of being useless.  The remaining deep issues were in it&#8217;s dependencies, which I just finished sorting out.  Arbitrary precision <a href="http://www.dajobe.org/2004/01/turtle/">Turtle</a> floating point literal (xsd:decimal) serialization is in <a href="http://librdf.org/raptor/">Raptor</a> SVN, and will hopefully see the light of day in release form.  The other issue was sketchy <a href="http://www.cnmat.berkeley.edu/OpenSoundControl/">OSC</a> data transmission from engine to client because things weren&#8217;t being put in bundles.  I added the API hooks I need for this to <a href="http://liblo.sourceforge.net/">liblo</a>, but <a href="http://users.ecs.soton.ac.uk/njh/">the maintainer</a> is MIA and I can&#8217;t depend on a version of liblo that doesn&#8217;t publicly exist, so I&#8217;m dealing with two branches of my own code for now, which is pretty annoying.</p>
<p>Getting around that time to push out another <a href="http://lv2plug.in/">LV2</a> beta (probably the final one) too, but <a href="http://plugin.org.uk/">SWH</a> is MIA as well.  London done get blowed up or something?</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2007/08/06/other-peoples-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>This space intentionally left almost blank</title>
		<link>http://drobilla.net/blog/2007/07/22/this-space-intentionally-left-almost-blank/</link>
		<comments>http://drobilla.net/blog/2007/07/22/this-space-intentionally-left-almost-blank/#comments</comments>
		<pubDate>Mon, 23 Jul 2007 00:26:36 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Hacking]]></category>

		<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2007/07/22/this-space-intentionally-left-almost-blank/</guid>
		<description><![CDATA[This post exists solely to stick something new on the page so it doesn&#8217;t look like I did an experiment in fasting and died, never to bless the Interweb with my presence again.
Current activities:
LV2 OSC message ports extension (working to some extent)
LV2 contexts extension (just conceptual/purely RDF for now)
These two playing nicely together in Ingen [...]]]></description>
			<content:encoded><![CDATA[<p>This post exists solely to stick something new on the page so it doesn&#8217;t look like I did an experiment in fasting and died, never to bless the Interweb with my presence again.</p>
<p>Current activities:</p>
<p>LV2 OSC message ports extension (working to some extent)<br />
LV2 contexts extension (just conceptual/purely RDF for now)</p>
<p>These two playing nicely together in Ingen will be roughly the best thing ever.  Take that, pd.</p>
<p>That is all.</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2007/07/22/this-space-intentionally-left-almost-blank/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fasting is hard</title>
		<link>http://drobilla.net/blog/2007/06/24/fasting-is-hard/</link>
		<comments>http://drobilla.net/blog/2007/06/24/fasting-is-hard/#comments</comments>
		<pubDate>Mon, 25 Jun 2007 03:51:43 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2007/06/24/fasting-is-hard/</guid>
		<description><![CDATA[Made it 3 days.  So I&#8217;m weak.
]]></description>
			<content:encoded><![CDATA[<p>Made it 3 days.  So I&#8217;m weak.</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2007/06/24/fasting-is-hard/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ardour: back on track.  Maybe.</title>
		<link>http://drobilla.net/blog/2007/06/24/ardour-back-on-track-maybe/</link>
		<comments>http://drobilla.net/blog/2007/06/24/ardour-back-on-track-maybe/#comments</comments>
		<pubDate>Sun, 24 Jun 2007 16:00:10 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Ardour]]></category>

		<category><![CDATA[Hacking]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2007/06/24/ardour-back-on-track-maybe/</guid>
		<description><![CDATA[Well, I&#8217;ve been working on Ardour but not directly on my SoC project.. finally got around to fixing that whole mixer-strip-element thing that&#8217;s been on the table since last year.  Things are more open to extensibility now (and a unified bus implementation should appear soon, so we&#8217;ll have MIDI busses or even MIDI/audio (instrument) [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;ve been working on Ardour but not directly on my SoC project.. finally got around to fixing that whole mixer-strip-element thing that&#8217;s been on the table since last year.  Things are more open to extensibility now (and a unified bus implementation should appear soon, so we&#8217;ll have MIDI busses or even MIDI/audio (instrument) busses).  Maybe we&#8217;ll see things like <a href="http://ardour.org/node/1043">this</a> actually happen some time soonish&#8230;</p>
<p>It would be nice to figure out a really good MIDI meter (something more clever than just an audio peak meter abused), and a MIDI fader that can work in various ways, or even instrument plugin support, but it&#8217;s probably time to get on the actual piano roll editing part of the project and leave that stuff until afterwards.</p>
<p>Kinda ruins my <em>flow</em> though, you know?</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2007/06/24/ardour-back-on-track-maybe/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The hard part</title>
		<link>http://drobilla.net/blog/2007/05/29/the-hard-part/</link>
		<comments>http://drobilla.net/blog/2007/05/29/the-hard-part/#comments</comments>
		<pubDate>Wed, 30 May 2007 02:46:31 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Biking]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2007/05/29/the-hard-part/</guid>
		<description><![CDATA[Just got back from the co-op, where I was for 3 hours and still didn&#8217;t get my bike completely assembled (close though).  Also managed to wreck a lot of the paint in the process :(  Spray painting a bike definitely makes for a fragile paint job.. oh well.  I guess if anything [...]]]></description>
			<content:encoded><![CDATA[<p>Just got back from the co-op, where I was for 3 hours and <em>still</em> didn&#8217;t get my bike completely assembled (close though).  Also managed to wreck a lot of the paint in the process :(  Spray painting a bike definitely makes for a fragile paint job.. oh well.  I guess if anything gets bad I can just touch up spots.  Perfectly smooth paint is overrated anyway.</p>
<p>I did score nicer pedals and a saddle though, looking pretty pimpin&#8217; if I do say so myself; but I&#8217;ll have to wait &#8217;till thursday to go on the maiden voyage&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2007/05/29/the-hard-part/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Back to the Hack</title>
		<link>http://drobilla.net/blog/2007/05/29/back-to-the-hack/</link>
		<comments>http://drobilla.net/blog/2007/05/29/back-to-the-hack/#comments</comments>
		<pubDate>Tue, 29 May 2007 17:58:49 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
		
		<category><![CDATA[Ardour]]></category>

		<category><![CDATA[Hacking]]></category>

		<guid isPermaLink="false">http://drobilla.net/blog/2007/05/29/back-to-the-hack/</guid>
		<description><![CDATA[Well.. finally fully moved; I guess it&#8217;s time to stop screwing around and get back into hacking.  Specifically Ardour, since I&#8217;m being payed to do so and all.
Looks like we don&#8217;t have a fancy new cairo canvas to play with.  Maybe it will be worth my time to do that first, but I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>Well.. finally fully moved; I guess it&#8217;s time to stop screwing around and get back into hacking.  Specifically Ardour, since I&#8217;m being payed to do so and all.</p>
<p>Looks like we don&#8217;t have a fancy new cairo canvas to play with.  Maybe it will be worth my time to do that first, but I&#8217;m going to do some fiddling with displaying MIDI data with gnomecanvas first to get a grasp on things.  Wouldn&#8217;t hurt to have some visually obvious clue that I am, in fact, actually doing something.  This summer&#8217;s project should be more rewarding than last in that sense; most of what I need to do is visual stuff which tends to be more fun since you have something nice and tangible at the end of the day.</p>
<p>Of course, displaying data is one thing.  One relatively easy thing.  Actually editing it on the other hand&#8230;&#8230;&#8230;. that&#8217;s where the &#8220;fun&#8221; (ie hard) part comes in.</p>
<p>I think a top-down (GUI->implementation) strategy is best here.  The Grand Battle Plan(TM) goes something like this:</p>
<ul>
<li>Get MIDI data displayed in regions, notes visible as one canvas item (rect) per note</li>
<li>Attach event signals from note canvas items (move, click, etc) to a set of stub methods that encompass all the editing operations</li>
<li>Now there&#8217;s a nice centralized area where all the editing operations need to be implemented</li>
<li>Figure out how the hell to implement them (ie ???????????)</li>
<li>Implement them (ie Profit!)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/blog/2007/05/29/back-to-the-hack/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
