<?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>Songbird Blog &#187; steve</title>
	<atom:link href="http://blog.songbirdnest.com/author/steve/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.songbirdnest.com</link>
	<description>Play music. Play the Web.</description>
	<lastBuildDate>Thu, 09 Feb 2012 00:55:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Database Schema Changes in Nightly (We broke your sh*t)</title>
		<link>http://blog.songbirdnest.com/2008/04/04/database-schema-changes-in-nightly-we-broke-your-sht/</link>
		<comments>http://blog.songbirdnest.com/2008/04/04/database-schema-changes-in-nightly-we-broke-your-sht/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 01:45:40 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[broken]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[schema]]></category>

		<guid isPermaLink="false">http://blog.songbirdnest.com/2008/04/04/database-schema-changes-in-nightly-we-broke-your-sht/</guid>
		<description><![CDATA[Heads-up to folks who download nightlies or build from trunk! I just landed bug 8247 which included a change to our library database schema. It turns out using 36 character strings instead of integers as foreign keys bloats the size of your database and generally slows things down. This fix reduces our library database size [...]]]></description>
			<content:encoded><![CDATA[<p>Heads-up to folks who download <a href="http://publicsvn.songbirdnest.com/wiki/Nightly_Builds">nightlies</a> or build from trunk!  I just landed <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=8247">bug 8247</a> which included a change to our library database schema.  It turns out using 36 character strings instead of integers as foreign keys bloats the size of your database and generally slows things down.  This fix reduces our library database size by almost 50% and gives us an all-around performance boost, particularly on large libraries.</p>
<p><strong>The down side is that your current Songbird library will not be compatible with future versions of Songbird, starting with tonight&#8217;s nightly.</strong>  The fix is easy &#8212; simply delete your profile and re-import your library.  There is another option for those who would prefer to keep their libraries, but it takes some skills.  It involves using the <a href="http://www.sqlite.org/download.html">sqlite command line tool</a> and running a <a href="http://bugzilla.songbirdnest.com/attachment.cgi?id=5114">migration script</a> on each of your Songbird library database files.  If you&#8217;re gung-ho to give this a try, Peter documented <a href="http://wiki.songbirdnest.com/index.php/MigrateDB0To2">the steps</a> on our wiki.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.songbirdnest.com/2008/04/04/database-schema-changes-in-nightly-we-broke-your-sht/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>GStreamer Progress</title>
		<link>http://blog.songbirdnest.com/2008/03/26/gstreamer-progress/</link>
		<comments>http://blog.songbirdnest.com/2008/03/26/gstreamer-progress/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 20:36:53 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.songbirdnest.com/2008/03/26/gstreamer-progress/</guid>
		<description><![CDATA[While the rest of the team has been busy fixing the remaining bugs for 0.5 and starting to move on to 0.6, Edward and I have been working on a branch hacking away at getting Songbird working with GStreamer on all three platforms. Edward has been working on getting GStreamer to build on all three [...]]]></description>
			<content:encoded><![CDATA[<p>While the rest of the team has been busy fixing the remaining bugs for 0.5 and starting to move on to 0.6, <a href="http://blogs.gnome.org/edwardrv/">Edward</a> and I have been working on a branch hacking away at getting Songbird working with <a href="http://gstreamer.freedesktop.org/">GStreamer</a> on all three platforms.  Edward has been working on getting GStreamer to build on all three platforms, fixing up the QuickTime and DirectShow wrappers, and generally cursing all bits from our friends in Redmond.  I have been working on the Songbird side of things &#8212; modifying our build process to include GStreamer as part of the install as well as convincing each platform to load dynamic libraries from places they prefer not to (major chirps to <a href="http://benjamin.smedbergs.us/blog/">bsmedberg</a> and his <a href="http://developer.mozilla.org/en/docs/Using_Dependent_Libraries_In_Extension_Components">stub loader</a>).  All of my work is in <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=8011">bug 8011</a>.</p>
<p>We will probably merge the GStreamer branch back to the trunk once the dust from 0.5 settles so those playing along at home can create their own experimental gstreamer enabled builds.</p>
<p>Oh yea, pics or it didn&#8217;t happen!</p>
<p>Below is a screen shot of Songbird with GStreamer on OSX.  It is currently playing an mp3 using the QuickTime codec wrapper&#8217;s MPEG Layer-3 audio decoder.  You can see the GStreamer debug spew in the background as well as our &#8220;about:gstreamer&#8221; page that shows all of the audio decoders provided by the QuickTime wrapper.</p>
<p><a href='http://files.songbirdnest.com/wp-content/uploads/2008/03/gst_osx.jpg' title='Songbird with GStreamer on OSX'><img src='http://files.songbirdnest.com/wp-content/uploads/2008/03/gst_osx.thumbnail.jpg' alt='Songbird with GStreamer on OSX' /></a></p>
<p>And here is a screen shot of Songbird with GStreamer on Windows.  It is playing an Ogg Vorbis file using our local copy of libvorbis.  Also note the differences in the &#8220;about:gsteamer&#8221; page where you can see the audio and video decoders provided by the DirectShow codec wrapper plugin.</p>
<p><a href='http://files.songbirdnest.com/wp-content/uploads/2008/03/gst_win.jpg' title='Songbird with GStreamer on Windows'><img src='http://files.songbirdnest.com/wp-content/uploads/2008/03/gst_win.thumbnail.jpg' alt='Songbird with GStreamer on Windows' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.songbirdnest.com/2008/03/26/gstreamer-progress/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Rounding out those sharp API corners</title>
		<link>http://blog.songbirdnest.com/2008/01/04/rounding-out-those-sharp-api-corners/</link>
		<comments>http://blog.songbirdnest.com/2008/01/04/rounding-out-those-sharp-api-corners/#comments</comments>
		<pubDate>Sat, 05 Jan 2008 00:58:14 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.songbirdnest.com/2008/01/04/rounding-out-those-sharp-api-corners</guid>
		<description><![CDATA[Quick summary: <strong>The sbIMediaListEnumerationListener interface has changed</strong>.  <a href="http://publicsvn.songbirdnest.com/changeset?new=trunk%2Fcomponents%2Flibrary%2Fbase%2Fpublic%2FsbIMediaListListener.idl%407709&#038;old=trunk%2Fcomponents%2Flibrary%2Fbase%2Fpublic%2FsbIMediaListListener.idl%407658">Click here for the diff</a> and keep reading for the backstory.

A few weeks ago one of our developers was having difficulty implementing the sbIMediaListEnumerationListener</a> interface in JavaScript &#8212; it just didn't seem to work!  Check out the <a href="http://publicsvn.songbirdnest.com/browser/trunk/components/library/base/public/sbIMediaListListener.idl?rev=7658#L136">original IDL</a> for this interface then have a look at the implementation code:

<code>var updateListener = {
&#160;&#160;onEnumerationBegin: function() {
&#160;&#160;},
&#160;&#160;onEnumeratedItem: function(list, item) {
&#160;&#160;&#160;&#160;item.setProperty(SBProperties.albumArtURL, albumPath);
&#160;&#160;},
&#160;&#160;onEnumerationEnd: function() {
&#160;&#160;}
};
list.enumerateAllItems(updateListener);</code>

Can you spot the problem?  The original design of this interface defined both the onEnumerationBegin and onEnumeratedItem methods with a boolean return value that specified if the enumeration should continue.  You would return true to continue or false to stop.  The mistake here was not returning any value at all, which implicitly returns "undefined" to the caller.  This value gets casted to a boolean false, meaning the enumeration should not continue.  Whoops!

The fix here is simply to add "return true;" to the two methods.  However, we felt that if even our own developers are tripping over this interface, we might want to rethink it a bit.  Since continuing the enumeration is the most common case, we wanted to make it simple to do just that.

So <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=6388">bug 6388</a> was filed and the fix went in today. (See the new version <a href="http://publicsvn.songbirdnest.com/browser/trunk/components/library/base/public/sbIMediaListListener.idl?rev=7709#L136">here</a>)  We changed the return values of the two methods to integers and now have constants (sbIMediaListEnumerationListener.CONTINUE and sbIMediaListEnumerationListener.CANCEL) to use for the return values.  This makes it very easy to tell what the code is doing rather than have to remember what returning true or false actually means.

Also, by making the CONTINUE constant equal to zero, implementations in JavaScript may omit the return statement entirely and the enumeration will continue.  This should make it a lot harder for us lazy developers to shoot ourselves in the collective foot.

Has anyone else experienced any rough edges in our interfaces?  If so, please let us know!
]]></description>
			<content:encoded><![CDATA[<p>Quick summary: <strong>The sbIMediaListEnumerationListener interface has changed</strong>.  <a href="http://publicsvn.songbirdnest.com/changeset?new=trunk%2Fcomponents%2Flibrary%2Fbase%2Fpublic%2FsbIMediaListListener.idl%407709&#038;old=trunk%2Fcomponents%2Flibrary%2Fbase%2Fpublic%2FsbIMediaListListener.idl%407658">Click here for the diff</a> and keep reading for the backstory.</p>
<p>A few weeks ago one of our developers was having difficulty implementing the sbIMediaListEnumerationListener</a> interface in JavaScript &mdash; it just didn&#8217;t seem to work!  Check out the <a href="http://publicsvn.songbirdnest.com/browser/trunk/components/library/base/public/sbIMediaListListener.idl?rev=7658#L136">original IDL</a> for this interface then have a look at the implementation code:</p>
<p><code>var updateListener = {<br />
&nbsp;&nbsp;onEnumerationBegin: function() {<br />
&nbsp;&nbsp;},<br />
&nbsp;&nbsp;onEnumeratedItem: function(list, item) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;item.setProperty(SBProperties.albumArtURL, albumPath);<br />
&nbsp;&nbsp;},<br />
&nbsp;&nbsp;onEnumerationEnd: function() {<br />
&nbsp;&nbsp;}<br />
};<br />
list.enumerateAllItems(updateListener);</code></p>
<p>Can you spot the problem?  The original design of this interface defined both the onEnumerationBegin and onEnumeratedItem methods with a boolean return value that specified if the enumeration should continue.  You would return true to continue or false to stop.  The mistake here was not returning any value at all, which implicitly returns &#8220;undefined&#8221; to the caller.  This value gets casted to a boolean false, meaning the enumeration should not continue.  Whoops!</p>
<p>The fix here is simply to add &#8220;return true;&#8221; to the two methods.  However, we felt that if even our own developers are tripping over this interface, we might want to rethink it a bit.  Since continuing the enumeration is the most common case, we wanted to make it simple to do just that.</p>
<p>So <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=6388">bug 6388</a> was filed and the fix went in today. (See the new version <a href="http://publicsvn.songbirdnest.com/browser/trunk/components/library/base/public/sbIMediaListListener.idl?rev=7709#L136">here</a>)  We changed the return values of the two methods to integers and now have constants (sbIMediaListEnumerationListener.CONTINUE and sbIMediaListEnumerationListener.CANCEL) to use for the return values.  This makes it very easy to tell what the code is doing rather than have to remember what returning true or false actually means.</p>
<p>Also, by making the CONTINUE constant equal to zero, implementations in JavaScript may omit the return statement entirely and the enumeration will continue.  This should make it a lot harder for us lazy developers to shoot ourselves in the collective foot.</p>
<p>Has anyone else experienced any rough edges in our interfaces?  If so, please let us know!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.songbirdnest.com/2008/01/04/rounding-out-those-sharp-api-corners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We&#8217;ve moved our IRC channel</title>
		<link>http://blog.songbirdnest.com/2007/09/21/weve-moved-our-irc-channel/</link>
		<comments>http://blog.songbirdnest.com/2007/09/21/weve-moved-our-irc-channel/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 17:24:29 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.songbirdnest.com/2007/09/21/weve-moved-our-irc-channel</guid>
		<description><![CDATA[Thanks to a little push from <a href="http://www.squarefree.com/">Jesse</a>, our IRC channel is now perched at irc.mozilla.org with the rest of the Mozilla flock.  Come join us on channel <a href="irc://irc.mozilla.org/#songbird">#songbird</a> to chirp about Songbird, the Media Web, or anything else!

For those who don't know, <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> (Internet Relay Chat) is simply a way to chat online with a group of people.  A good introduction to IRC can be found <a href="http://www.mirc.com/irc.html">here</a>.  You'll need an IRC client, so if you are using Firefox (you are, right?), we recommend you install the <a href="https://addons.mozilla.org/en-US/firefox/addon/16">ChatZilla Firefox extension</a>.  After it is installed, clicking <a href="irc://irc.mozilla.org/#songbird">#songbird</a> should fly you right to our channel.
]]></description>
			<content:encoded><![CDATA[<p>Thanks to a little push from <a href="http://www.squarefree.com/">Jesse</a>, our IRC channel is now perched at irc.mozilla.org with the rest of the Mozilla flock.  Come join us on channel <a href="irc://irc.mozilla.org/#songbird">#songbird</a> to chirp about Songbird, the Media Web, or anything else!</p>
<p>For those who don&#8217;t know, <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> (Internet Relay Chat) is simply a way to chat online with a group of people.  A good introduction to IRC can be found <a href="http://www.mirc.com/irc.html">here</a>.  You&#8217;ll need an IRC client, so if you are using Firefox (you are, right?), we recommend you install the <a href="https://addons.mozilla.org/en-US/firefox/addon/16">ChatZilla Firefox extension</a>.  After it is installed, clicking <a href="irc://irc.mozilla.org/#songbird">#songbird</a> should fly you right to our channel.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.songbirdnest.com/2007/09/21/weve-moved-our-irc-channel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thread-safety Dance</title>
		<link>http://blog.songbirdnest.com/2007/02/16/thread-safety-dance/</link>
		<comments>http://blog.songbirdnest.com/2007/02/16/thread-safety-dance/#comments</comments>
		<pubDate>Fri, 16 Feb 2007 18:51:38 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.songbirdnest.com/2007/02/16/thread-safety-dance</guid>
		<description><![CDATA[While working out some <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=2418">threading issues</a> with our GStreamer core, I spent some time on #developers getting answers to some XPCOM threading questions I've had for a long time.

The first question was about when to use NS_IMPL_ISUPPORTS versus NS_IMPL_THREADSAFE_ISUPPORTS when implementing XPCOM components in C++.  The difference is in the way the reference counting methods are implemented -- the former manages the reference count in a <a href="http://lxr.mozilla.org/seamonkey/source/xpcom/glue/nsISupportsImpl.h#253">non-thread safe way</a>, and the latter manages it in a <a href="http://lxr.mozilla.org/seamonkey/source/xpcom/glue/nsISupportsImpl.h#978">thread safe way</a>.  Additionally, when running a debug build, components that use NS_IMPL_ISUPPORTS will assert if they are AddRefed/Released by any thread other than the owning thread (the thread the component was created on).

Therefore, you should be using NS_IMPL_THREADSAFE_ISUPPORTS if your component will be reference counted on more than one thread.  If this will never happen, you should use NS_IMPL_ISUPPORTS to avoid the additional overhead of thread safe reference counting.

Note that using NS_IMPL_THREADSAFE_ISUPPORTS in your component implementation does not relate to the thread saftey of the component's implementation, just the reference counting methods.  If you wish to declare the fact that your component is implemented in a thread safe way, you must implement <a href="http://lxr.mozilla.org/seamonkey/source/xpcom/components/nsIClassInfo.idl">nsIClassInfo</a> and set  the nsIClassInfo::THREADSAFE bit in your GetFlags implementation.

By setting the nsIClassInfo::THREADSAFE bit, you are ensuring the users of your component that your component's implementation is thread safe, meaning there is no sequence of operations involving multiple threads that will put your component into an invalid state, observe the component to be in an invalid state, or violate any of the class's invariants, preconditions, or postconditions (this definition of thread safety is adapted from IBM DeveloperWorks' <a href="http://www-128.ibm.com/developerworks/java/library/j-jtp09263.html">Java theory and practice: Characterizing thread safety</a>).

As the implementor, not only must your make sure your implementation is thread safe, but the XPCOM components you collaborate with must also be thread safe.  This is why a component that touches the DOM can never be declared as thread safe unless the access to the DOM is done through a proxy.

Thanks to brendan and shaver on #developers for taking the time to clear this up for me!
]]></description>
			<content:encoded><![CDATA[<p>While working out some <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=2418">threading issues</a> with our GStreamer core, I spent some time on #developers getting answers to some XPCOM threading questions I&#8217;ve had for a long time.</p>
<p>The first question was about when to use NS_IMPL_ISUPPORTS versus NS_IMPL_THREADSAFE_ISUPPORTS when implementing XPCOM components in C++.  The difference is in the way the reference counting methods are implemented &#8212; the former manages the reference count in a <a href="http://lxr.mozilla.org/seamonkey/source/xpcom/glue/nsISupportsImpl.h#253">non-thread safe way</a>, and the latter manages it in a <a href="http://lxr.mozilla.org/seamonkey/source/xpcom/glue/nsISupportsImpl.h#978">thread safe way</a>.  Additionally, when running a debug build, components that use NS_IMPL_ISUPPORTS will assert if they are AddRefed/Released by any thread other than the owning thread (the thread the component was created on).</p>
<p>Therefore, you should be using NS_IMPL_THREADSAFE_ISUPPORTS if your component will be reference counted on more than one thread.  If this will never happen, you should use NS_IMPL_ISUPPORTS to avoid the additional overhead of thread safe reference counting.</p>
<p>Note that using NS_IMPL_THREADSAFE_ISUPPORTS in your component implementation does not relate to the thread saftey of the component&#8217;s implementation, just the reference counting methods.  If you wish to declare the fact that your component is implemented in a thread safe way, you must implement <a href="http://lxr.mozilla.org/seamonkey/source/xpcom/components/nsIClassInfo.idl">nsIClassInfo</a> and set  the nsIClassInfo::THREADSAFE bit in your GetFlags implementation.</p>
<p>By setting the nsIClassInfo::THREADSAFE bit, you are ensuring the users of your component that your component&#8217;s implementation is thread safe, meaning there is no sequence of operations involving multiple threads that will put your component into an invalid state, observe the component to be in an invalid state, or violate any of the class&#8217;s invariants, preconditions, or postconditions (this definition of thread safety is adapted from IBM DeveloperWorks&#8217; <a href="http://www-128.ibm.com/developerworks/java/library/j-jtp09263.html">Java theory and practice: Characterizing thread safety</a>).</p>
<p>As the implementor, not only must your make sure your implementation is thread safe, but the XPCOM components you collaborate with must also be thread safe.  This is why a component that touches the DOM can never be declared as thread safe unless the access to the DOM is done through a proxy.</p>
<p>Thanks to brendan and shaver on #developers for taking the time to clear this up for me!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.songbirdnest.com/2007/02/16/thread-safety-dance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Audioscrobbler Extension Updated</title>
		<link>http://blog.songbirdnest.com/2007/02/05/audioscrobbler-extension-updated/</link>
		<comments>http://blog.songbirdnest.com/2007/02/05/audioscrobbler-extension-updated/#comments</comments>
		<pubDate>Tue, 06 Feb 2007 00:00:45 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.songbirdnest.com/2007/02/05/audioscrobbler-extension-updated</guid>
		<description><![CDATA[Greetings fellow Scrobblers!  I just updated our Audioscrobbler extension to version 0.0.4 which should hopefully fix the "Spam protection triggered" message some of you have seen on your <a href="http://last.fm">last.fm</a> pages.  See <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=1819">bug 1819</a> for more information about this problem.

If you already have the extension installed, choose the File -> Extensions menu item to bring up the Add-ons window.  Next, click "Find Updates" and it should find and install the new version for you.

If you do not have the extension installed, you can download it from <a href="http://download.songbirdnest.com/extensions/audioscrobbler-0.0.4.xpi">here</a>.  Once you have it installed, click on the Audioscrobbler item in the service pane to bring up the display.  Next, click the "Preferences" button to configure the extension with your <a href="http://last.fm">last.fm</a> credentials.

Oh, and check out <a href="http://www.last.fm/user/cruelshooz/">my last.fm. page</a> to see what I am listening to :).
]]></description>
			<content:encoded><![CDATA[<p>Greetings fellow Scrobblers!  I just updated our Audioscrobbler extension to version 0.0.4 which should hopefully fix the &#8220;Spam protection triggered&#8221; message some of you have seen on your <a href="http://last.fm">last.fm</a> pages.  See <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=1819">bug 1819</a> for more information about this problem.</p>
<p>If you already have the extension installed, choose the File -> Extensions menu item to bring up the Add-ons window.  Next, click &#8220;Find Updates&#8221; and it should find and install the new version for you.</p>
<p>If you do not have the extension installed, you can download it from <a href="http://download.songbirdnest.com/extensions/audioscrobbler-0.0.4.xpi">here</a>.  Once you have it installed, click on the Audioscrobbler item in the service pane to bring up the display.  Next, click the &#8220;Preferences&#8221; button to configure the extension with your <a href="http://last.fm">last.fm</a> credentials.</p>
<p>Oh, and check out <a href="http://www.last.fm/user/cruelshooz/">my last.fm. page</a> to see what I am listening to <img src='http://blog.songbirdnest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.songbirdnest.com/2007/02/05/audioscrobbler-extension-updated/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Mozilla 101</title>
		<link>http://blog.songbirdnest.com/2007/01/24/mozilla-101/</link>
		<comments>http://blog.songbirdnest.com/2007/01/24/mozilla-101/#comments</comments>
		<pubDate>Wed, 24 Jan 2007 18:02:04 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.songbirdnest.com/2007/01/24/mozilla-101</guid>
		<description><![CDATA[Seneca College has been offering a <a href="http://cs.senecac.on.ca/index.php?outline=DPS909">"Topics in Open Source Development"</a> course for a few years now, and this year they are <a href="http://zenit.senecac.on.ca/wiki/index.php/Dps909">focusing on Mozilla</a> as the open source project to study.  The <a href="http://zenit.senecac.on.ca/wiki/index.php/Main_Page">course wiki</a> is a treasure-trove of interesting Mozilla bits, including:

<dl>
<dt><a href="http://zenit.senecac.on.ca/wiki/index.php/Guest_Lectures">Guest Lectures</a></dt>
<dd>This recent <a href="http://vocamus.net/dave/?p=22">blog post</a> by <a href="http://zenit.senecac.on.ca/wiki/index.php/User:David.humphrey">David Humphrey</a> (the course's professor) announced the availability of a series of guest lectures on Mozilla as downloadable media.  The full list of lectures can be found <a href="http://zenit.senecac.on.ca/wiki/index.php/Guest_Lectures">on the course wiki</a>.  This post is how I originally found out about the course.</dd>

<dt><a href="http://zenit.senecac.on.ca/wiki/index.php/Newsgroups_Summaries">Newsgroup Summaries</a></dt>
<dd>One of the requirements of the course is to have students write weekly summaries of the activity in the Mozilla newsgroups.  Unfortunately, this seems to have stopped as the class has ended.</dd>

<dt><a href="http://zenit.senecac.on.ca/wiki/index.php/Project_List">Project List</a></dt>
<dd>The list of projects the students are involved in.  Some projects that are relevant to us include <a href="http://zenit.senecac.on.ca/wiki/index.php/Extending_the_Buildbot">Extending the Buildbot</a>, <a href="http://zenit.senecac.on.ca/wiki/index.php/XULRunner_Guide">XULRunner Guide</a>, and <a href="http://zenit.senecac.on.ca/wiki/index.php/XML_3D_-_BTS530/630_Project">XML 3D Project</a>.</dd>

I wish my school had a class like this!
]]></description>
			<content:encoded><![CDATA[<p>Seneca College has been offering a <a href="http://cs.senecac.on.ca/index.php?outline=DPS909">&#8220;Topics in Open Source Development&#8221;</a> course for a few years now, and this year they are <a href="http://zenit.senecac.on.ca/wiki/index.php/Dps909">focusing on Mozilla</a> as the open source project to study.  The <a href="http://zenit.senecac.on.ca/wiki/index.php/Main_Page">course wiki</a> is a treasure-trove of interesting Mozilla bits, including:</p>
<dl>
<dt><a href="http://zenit.senecac.on.ca/wiki/index.php/Guest_Lectures">Guest Lectures</a></dt>
<dd>This recent <a href="http://vocamus.net/dave/?p=22">blog post</a> by <a href="http://zenit.senecac.on.ca/wiki/index.php/User:David.humphrey">David Humphrey</a> (the course&#8217;s professor) announced the availability of a series of guest lectures on Mozilla as downloadable media.  The full list of lectures can be found <a href="http://zenit.senecac.on.ca/wiki/index.php/Guest_Lectures">on the course wiki</a>.  This post is how I originally found out about the course.</dd>
<dt><a href="http://zenit.senecac.on.ca/wiki/index.php/Newsgroups_Summaries">Newsgroup Summaries</a></dt>
<dd>One of the requirements of the course is to have students write weekly summaries of the activity in the Mozilla newsgroups.  Unfortunately, this seems to have stopped as the class has ended.</dd>
<dt><a href="http://zenit.senecac.on.ca/wiki/index.php/Project_List">Project List</a></dt>
<dd>The list of projects the students are involved in.  Some projects that are relevant to us include <a href="http://zenit.senecac.on.ca/wiki/index.php/Extending_the_Buildbot">Extending the Buildbot</a>, <a href="http://zenit.senecac.on.ca/wiki/index.php/XULRunner_Guide">XULRunner Guide</a>, and <a href="http://zenit.senecac.on.ca/wiki/index.php/XML_3D_-_BTS530/630_Project">XML 3D Project</a>.</dd>
<p>I wish my school had a class like this!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.songbirdnest.com/2007/01/24/mozilla-101/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Begin the begin</title>
		<link>http://blog.songbirdnest.com/2007/01/16/begin-the-begin/</link>
		<comments>http://blog.songbirdnest.com/2007/01/16/begin-the-begin/#comments</comments>
		<pubDate>Tue, 16 Jan 2007 19:40:53 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.songbirdnest.com/2007/01/16/begin-the-begin</guid>
		<description><![CDATA[After many <a href="http://wiki.songbirdnest.com/index.php/Main_Page#Architecture_for_0.3">weeks of planning</a>, I am finally back to writing code.  I have been working mostly on the <a href="http://wiki.songbirdnest.com/index.php/Data_Model_Architecture">data model</a> stuff and have just checked in a skeleton of directories, makefiles, and interface definitions to the trunk.  The data model project spans three top level directories:

<dl>
<dt><a href="http://publicsvn.songbirdnest.com/trac/browser/trunk/components/library">library</a></dt>
<dd>Contains the main library interfaces as well as the first library implementation, the local database library.</dd>
<dt><a href="http://publicsvn.songbirdnest.com/trac/browser/trunk/components/property">property</a></dt>
<dd>Contains the property manager and property type implementations.  The property system effectively provides the schema to the metadata properties that can be attached to the resource in the data model.</dd>
<dt><a href="http://publicsvn.songbirdnest.com/trac/browser/trunk/components/sqlbuilder">sqlbuilder</a></dt>
<dd>Contains the implementation of the SQL builder.  This component allows you to build SQL statements programmatically rather than cobble them together with a bunch of string concatenations.</dd>
</dl>

I also generated a few templates to help people get started with new components:

<ul>
<li><a href="http://wiki.songbirdnest.com/index.php/IDL_Template">IDL Template</a></li>
<li><a href="http://wiki.songbirdnest.com/index.php/Public_Directory_Makefile_Template">Public directory makefile template</a></li>
<li><a href="http://wiki.songbirdnest.com/index.php/Source_Directory_Makefile_Template">Source directory makefile template</a></li>
</ul>

Buildmaster Ben has blessed the makefiles, but he warns that the source directory makefile requires some platform specific hocus-pocus if you need to use the JavaScript or Unicode character utility APIs.

Update: So after breaking the build on Windows and Mac, I learned that I do indeed need those bits that Ben warned me about.  They have been added to the template.
]]></description>
			<content:encoded><![CDATA[<p>After many <a href="http://wiki.songbirdnest.com/index.php/Main_Page#Architecture_for_0.3">weeks of planning</a>, I am finally back to writing code.  I have been working mostly on the <a href="http://wiki.songbirdnest.com/index.php/Data_Model_Architecture">data model</a> stuff and have just checked in a skeleton of directories, makefiles, and interface definitions to the trunk.  The data model project spans three top level directories:</p>
<dl>
<dt><a href="http://publicsvn.songbirdnest.com/trac/browser/trunk/components/library">library</a></dt>
<dd>Contains the main library interfaces as well as the first library implementation, the local database library.</dd>
<dt><a href="http://publicsvn.songbirdnest.com/trac/browser/trunk/components/property">property</a></dt>
<dd>Contains the property manager and property type implementations.  The property system effectively provides the schema to the metadata properties that can be attached to the resource in the data model.</dd>
<dt><a href="http://publicsvn.songbirdnest.com/trac/browser/trunk/components/sqlbuilder">sqlbuilder</a></dt>
<dd>Contains the implementation of the SQL builder.  This component allows you to build SQL statements programmatically rather than cobble them together with a bunch of string concatenations.</dd>
</dl>
<p>I also generated a few templates to help people get started with new components:</p>
<ul>
<li><a href="http://wiki.songbirdnest.com/index.php/IDL_Template">IDL Template</a></li>
<li><a href="http://wiki.songbirdnest.com/index.php/Public_Directory_Makefile_Template">Public directory makefile template</a></li>
<li><a href="http://wiki.songbirdnest.com/index.php/Source_Directory_Makefile_Template">Source directory makefile template</a></li>
</ul>
<p>Buildmaster Ben has blessed the makefiles, but he warns that the source directory makefile requires some platform specific hocus-pocus if you need to use the JavaScript or Unicode character utility APIs.</p>
<p>Update: So after breaking the build on Windows and Mac, I learned that I do indeed need those bits that Ben warned me about.  They have been added to the template.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.songbirdnest.com/2007/01/16/begin-the-begin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

