<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>self conscious white noise &#187; Manipulation</title>
	<atom:link href="http://scwn.net/category/manipulation/feed/" rel="self" type="application/rss+xml" />
	<link>http://scwn.net</link>
	<description>mind, music, mapping, manipulation</description>
	<lastBuildDate>Tue, 01 May 2012 16:46:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='scwn.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>self conscious white noise &#187; Manipulation</title>
		<link>http://scwn.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://scwn.net/osd.xml" title="self conscious white noise" />
	<atom:link rel='hub' href='http://scwn.net/?pushpress=hub'/>
		<item>
		<title>A &quot;Magnum Opus&quot; of Music Visualization</title>
		<link>http://scwn.net/2009/10/27/a-magnum-opus-of-music-visualization/</link>
		<comments>http://scwn.net/2009/10/27/a-magnum-opus-of-music-visualization/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 01:07:31 +0000</pubDate>
		<dc:creator>Justin Donaldson</dc:creator>
				<category><![CDATA[Manipulation]]></category>
		<category><![CDATA[Mapping]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.scwn.net/?p=453</guid>
		<description><![CDATA[Paul and I recently finished up our tutorial on Using Visualizations for Music Discovery. The fast paced, 3 hour long presentation covered nearly every instance of music corpus visualization that we had found in the literature, or in casual &#8220;fan&#8221; based renditions.  This included visualizations of artist connections generated from millions of playlists by high [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=453&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<iframe src='http://www.slideshare.net/slideshow/embed_code/2319272' width='497' height='407'></iframe>
<p>Paul and I recently finished up our tutorial on<em> Using Visualizations for Music Discovery. </em>The fast paced, 3 hour long presentation covered nearly every instance of music corpus visualization that we had found in the literature, or in casual &#8220;fan&#8221; based renditions.  This included visualizations of artist connections generated from millions of playlists by high powered supercomputers, all the way down to personal hand-drawn sketches on the back of a notebook.</p>
<p>I&#8217;ve embedded the slides from the tutorial above.  However, the format of the online slides do not include any of the video segments that we included, nor does it include the demo visualizations that we generated live on our laptops.  While our demo code (as well as the rest of the tutorial materials) is available <a href="http://musicviz.googlepages.com/">online</a>, I also prepared some back up video versions of my demos, just in case something went horribly wrong during the presentation.  I thought it would be a good idea to post these videos online for posterity.</p>
<p>The demo focused on exploring the &#8220;acoustic space&#8221; of music involving the lute and the folk guitar.  Both instruments can be similar acoustically, but generally take part in culturally distinct genres.  In the realm of audio-based genre classification, renaissance music that features the lute can get confused for folk music songs that feature the guitar.  I wanted to focus on representative lute and folk music for the demo, and see if visualization helps to show the confusion that a classification might run into, and perhaps lead to ways of resolving it.</p>
<p>Rather than show all of the acoustic features at once, I chose to look at them one at a time.  The first feature that I wanted to focus on was pitch information, or a general representation of what pitches, keys, etc. were present in the music.  For this and all demo videos, the blue nodes corresponds to lute music, while the red nodes correspond to folk music.  However, there are some &#8220;mislabeled&#8221; songs, as we will discover later:</p>
<span style="text-align:center; display: block;"><a href="http://scwn.net/2009/10/27/a-magnum-opus-of-music-visualization/"><img src="http://img.youtube.com/vi/kmmtg4rbWyw/2.jpg" alt="" /></a></span>
<p>The visualization shows how adjacent songs do in fact have similar pitched melodies, but can have very different styles or genre.  This makes sense, since most popular genres use the same western arrangement of major and minor chords, etc.  So, pitch information is essentially useless to separate the lute and folk music in our data.</p>
<p>The next acoustic data I looked at was timbre, which is a representation of the song&#8217;s <em>tone</em> or <em>color</em>.  This type of data is typically the &#8220;best&#8221; information to use for genre classification, and I was curious to see how the timbre separated these genres:</p>
<span style="text-align:center; display: block;"><a href="http://scwn.net/2009/10/27/a-magnum-opus-of-music-visualization/"><img src="http://img.youtube.com/vi/54QKwa_RmPs/2.jpg" alt="" /></a></span>
<p>Interestingly enough, the timbre space &#8220;almost&#8221; separates the music clearly.  The softer tones of certain lute music are distinct from the rest of the folk music, which has harsher or brassier coloring.  However, the lute has a variety of timbres that it is able to create, and once the lutist uses this harsher plucking action, it sounds more like conventional folk guitar music.  At this point, it may be possible to make a &#8220;pretty good&#8221; separation using a hyperplane, but as indicated by the visualization, there would most likely be some significant error using timbre alone.</p>
<p>Luckily, our database of music included non-acoustic features, such as <em>tags.</em> The tags were simple terms or phrases that were applied to songs by human listeners.  Using appropriate text retrieval techniques allows us to see how the music was separated according to how it was tagged:</p>
<span style="text-align:center; display: block;"><a href="http://scwn.net/2009/10/27/a-magnum-opus-of-music-visualization/"><img src="http://img.youtube.com/vi/Hhy93vKPHjY/2.jpg" alt="" /></a></span>
<p>Here we see the two styles of music are clearly separated.  However, there is a problem&#8230; I had originally used the tag data to identify/label lute and folk music in the first place.  I quickly found out that some of this music was mislabeled&#8230; i.e. classical lute music was labeled as folk, etc.  So, even though the separation was clean, we now have exposed a new form of error.</p>
<p>The final approach that I tried was to mix the term and the timbre data in a &#8220;hybrid&#8221; representation:</p>
<span style="text-align:center; display: block;"><a href="http://scwn.net/2009/10/27/a-magnum-opus-of-music-visualization/"><img src="http://img.youtube.com/vi/3md5CjQB40I/2.jpg" alt="" /></a></span>
<p>This had the best result of any of the approaches that I had tried.  It is no longer possible to separate the music by color (some of the red folk music is included among the blue lute cluster), I show that these red dots were actually mislabeled.  In this fashion, the combined term + timbre features were able to &#8220;correct&#8221; each other, and a more valid representation of the genres were presented.</p>
<p>The code for this is all available on the <a href="http://musicviz.googlepages.com/">website</a>.  The code is written in <a href="http://www.r-project.org/">R</a>, and requires the packages <a href="http://cran.r-project.org/web/packages/rgl/index.html">rgl</a>, <a href="http://cran.r-project.org/web/packages/RGtk2/index.html">RGtk2</a>, as well as a GUI interface package I wrote called <a href="http://cran.r-project.org/web/packages/sculpt3d/index.html">sculpt3d</a>.</p>
<p>Also, if you&#8217;ve made it this far, you should check out  (the co-presenter) Paul&#8217;s <a href="http://musicmachinery.com/">blog</a>.  He&#8217;ll be live-blogging the rest of the conference as it continues through the week.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/scwn.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/scwn.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/scwn.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/scwn.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/scwn.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/scwn.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/scwn.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/scwn.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/scwn.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/scwn.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/scwn.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/scwn.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/scwn.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/scwn.wordpress.com/453/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=453&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://scwn.net/2009/10/27/a-magnum-opus-of-music-visualization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/95b4847c297b231e9e511291a37f93ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jjdonald</media:title>
		</media:content>
	</item>
		<item>
		<title>sculpt3d</title>
		<link>http://scwn.net/2009/07/15/sculpt3d/</link>
		<comments>http://scwn.net/2009/07/15/sculpt3d/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 03:27:46 +0000</pubDate>
		<dc:creator>Justin Donaldson</dc:creator>
				<category><![CDATA[HCI]]></category>
		<category><![CDATA[Manipulation]]></category>
		<category><![CDATA[Mapping]]></category>

		<guid isPermaLink="false">http://www.scwn.net/?p=385</guid>
		<description><![CDATA[Update: This tool is now available on cran. Researchers in academia and the industry consistently use visualizations to better understand their data.  The standard two dimension scatter-plot is a staple of many exploratory data analyses.  However, there are many cases where two dimensions are not enough. For instance in the plot below, I&#8217;ve set up [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=385&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>Update:</em> This tool is <a href="http://cran.r-project.org/web/packages/sculpt3d/index.html">now available on cran</a>.</p>
<p>Researchers in academia and the industry consistently use visualizations to better understand their data.  The standard two dimension scatter-plot is a staple of many exploratory data analyses.  However, there are many cases where two dimensions are not enough. For instance in the plot below, I&#8217;ve set up a pairwise plot between three distributions (x, y, and z).  The plots are duplicated on opposite sides of the diagonal (showing x vs. y &#8230;or&#8230; y vs. x).   I find it extraordinarily difficult to perceive the three dimensional structure of this data solely with the series of two dimensional plots shown here.</p>
<p><img src="http://lh3.ggpht.com/_QOAVLCqNGDI/S4BBUKz2fzI/AAAAAAAAAoo/W2mVcYCXan4/s400/data-frame.png" alt="3d scatter plot" /></p>
<p>Luckily, R has a package called <a href="http://cran.r-project.org/web/packages/rgl/index.html">rgl</a> that lets me plot in three dimensions using OpenGL.  It even allows for simple interactions with the mouse, like rotation and zooming.</p>
<p><img src="http://lh6.ggpht.com/_QOAVLCqNGDI/S4BBUT00ZiI/AAAAAAAAAos/_473CVavRyo/s400/rgl.png" alt="rgl" /></p>
<p>This allows for a much better sense of the underlying data&#8230; but It&#8217;s still a bit limiting.  Many times, there is &#8220;interesting structure&#8221; in the three dimensional representation that I would like to focus in on, or perhaps there&#8217;s just a lot of junk that I want to get rid of.  Many times this structure is not isolated in one or two dimensions, but only becomes apparent through rotating and zooming the three dimensional display.</p>
<p>RGL has a useful method called &#8220;select3d&#8221; that involves selecting points in the plot, but it&#8217;s a bit tricky to use.  Using select3d involves typing into the R console, then clicking and dragging on the plot.  This produces output from the select3d function.  However, the output of the function is&#8230; another function!  It is then necessary to apply this produced function on the original data to determine which data points fall inside the selection range&#8230;. and then it&#8217;s completely up to you what you do at that point&#8230; do you filter them out?  Crop them? Color them differently than the others?  It becomes necessary to keep a further supply of methods at hand that can perform these routines on the output of select3d.</p>
<p>This is still all a bit too much to keep in my head for extended periods of time.  It&#8217;s also a pain to constantly switch back and forth between the three dimensional plot environment and the console in order to pare down the data.</p>
<p>So, I&#8217;ve cooked up a little GUI tool bar that makes selecting, labeling, cropping, and deleting points in the RGL plot much simpler.  It&#8217;s called &#8220;sculpt3d&#8221;, since it&#8217;s focused on altering and shaping the underlying data.  In order to launch the toolbar, you first install a small library, and then make a method call:   <em>sculpt3d(x,y,z)</em> where x, y, and z are the three dimensions you are interested in plotting.</p>
<p>I put together a small video that shows me playing around with it:</p>
<span style="text-align:center; display: block;"><a href="http://scwn.net/2009/07/15/sculpt3d/"><img src="http://img.youtube.com/vi/SZgiQ_Z3KWI/2.jpg" alt="" /></a></span>
<p>In the video, you can see how I choose a selection color (a mint green color that I thought would be noticeable against the bright rainbow colored points).  Then I crop the data on this selection.  This is a bit jarring because the crop function automatically zooms in on the selected points, and reverts them back to their original color.  The delete function works in a similar way, and is a little easier to follow.</p>
<p>Once I have a smaller collection of datapoints, I might be interesting in labelling them (assuming I passed labels as an argument to sculpt3d).  I can toggle the labels with a click of the &#8220;Label&#8221; button.</p>
<p>If I&#8217;m interested in saving the results of the pruning and cropping, I can access the currently selected points by calling the function <em>sculpt3d.selected()</em>, or the currently visible scene by <em>sculpt3d.current(). </em>This returns the same sort of logic vector that select3d does, so I can now use it to filter my dataset, save it under a new name, and come back to it later on.  Furthermore&#8230; since it&#8217;s in R, and uses a cross-platform gui (GTK+ via <a href="http://cran.r-project.org/web/packages/RGtk2/index.html">RGtk2</a> and <a href="http://glade.gnome.org/">Glade</a>), it&#8217;s possible to use this tool and the data on any platform I want to.</p>
<p>Currently, I only have this tool on a local webserver, and it&#8217;s still a bit rough.  However, I thought I&#8217;d make it available.  To try it out, enter the following in R&#8217;s console:</p>
<pre>install.packages(rgl)
install.packages(RGtk2)
rep='http://ethos.informatics.indiana.edu/~jjdonald/r'
install.packages(sculpt3d)</pre>
<p>  It&#8217;s currently source-only, so if you&#8217;re on windows, you&#8217;ll need to install <a href="http://www.murdoch-sutherland.com/Rtools/">RTools</a> in order to compile everything.  You&#8217;ll also need the GTK+ framework and Glade (which should get installed automatically with RGtk2).</p>
<p>However, once that is done, you can check the demo out by entering:</p>
<pre>library(sculpt3d)
demo(sculpt3d)</pre>
<p>Thanks to Daniel Adler and Duncan Murdoch for rgl, and Michael Lawrence and Duncan Temple Lang for RGtk2.  Between the four of them, they&#8217;ve produced a lot of great stuff for R.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/scwn.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/scwn.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/scwn.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/scwn.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/scwn.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/scwn.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/scwn.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/scwn.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/scwn.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/scwn.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/scwn.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/scwn.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/scwn.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/scwn.wordpress.com/385/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=385&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://scwn.net/2009/07/15/sculpt3d/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/95b4847c297b231e9e511291a37f93ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jjdonald</media:title>
		</media:content>

		<media:content url="http://lh3.ggpht.com/_QOAVLCqNGDI/S4BBUKz2fzI/AAAAAAAAAoo/W2mVcYCXan4/s400/data-frame.png" medium="image">
			<media:title type="html">3d scatter plot</media:title>
		</media:content>

		<media:content url="http://lh6.ggpht.com/_QOAVLCqNGDI/S4BBUT00ZiI/AAAAAAAAAos/_473CVavRyo/s400/rgl.png" medium="image">
			<media:title type="html">rgl</media:title>
		</media:content>
	</item>
		<item>
		<title>Tim Ferriss and the 4 Hour Work Week</title>
		<link>http://scwn.net/2009/05/10/tim-ferriss-and-the-4-hour-work-week/</link>
		<comments>http://scwn.net/2009/05/10/tim-ferriss-and-the-4-hour-work-week/#comments</comments>
		<pubDate>Sun, 10 May 2009 16:31:43 +0000</pubDate>
		<dc:creator>Justin Donaldson</dc:creator>
				<category><![CDATA[General Observation]]></category>
		<category><![CDATA[Manipulation]]></category>

		<guid isPermaLink="false">http://www.scwn.net/?p=339</guid>
		<description><![CDATA[So, there&#8217;s this Tim Ferriss guy that&#8217;s some kind of productivity guru.  He&#8217;s written a book called &#8220;The 4 Hour Work Week&#8221; which gives you tips on how to streamline the amount of &#8220;work&#8221; that you do in a day. In the interest of self disclosure, I didn&#8217;t read the book, because I tend to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=339&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, there&#8217;s this Tim Ferriss guy that&#8217;s some kind of productivity guru.  He&#8217;s written a book called &#8220;<a href="http://www.fourhourworkweek.com/">The 4 Hour Work Week</a>&#8221; which gives you tips on how to streamline the amount of &#8220;work&#8221; that you do in a day.</p>
<p>In the interest of self disclosure, I didn&#8217;t read the book, because I tend to be more interested in what people do than what they say to do. The cliff notes versions I&#8217;ve seen on line seem to imply that he has rediscovered the Pareto Principle, or the incredibly well worn 80/20 rule, along with a host of other efficiency principles that seem incredibly hackneyed.  I&#8217;m not sure what his unique twist is, maybe he&#8217;s good at telling stories.</p>
<p>It turns out Tim&#8217;s claim to fame is that he&#8217;s gotten very good at finding success in niche activities on technicalities, and then marketing the hell out of them.</p>
<ol>
<li>He&#8217;s a Chinese Kickboxing champion, which he achieved by shoving the smaller opponents out of the ring, and winning through their disqualification.</li>
<li>He&#8217;s an expert at Argentine tango, where he has set a record for spinning.  This isn&#8217;t really a technical feat, it was more of a <a href="http://www.youtube.com/watch?v=H9pWKB2D23k&amp;eurl=http%3A%2F%2Ftangocherie.blogspot.com%2F2007%2F06%2Fmost-tango-spins-in-one-minute-tim.html&amp;feature=player_embedded">novelty act for the Kelly Ripa show</a>.</li>
<li>He lectures at Princeton&#8217;s electrical engineering group (on entrepreneurship).</li>
</ol>
<p>I think that very few people can actually benefit from what he talks about, mainly because he proposes &#8220;outsourcing&#8221; minute details of daily planning (to personal assistants in India&#8230; seriously!).  I don&#8217;t know if he&#8217;s thought about marketing his book in India (<a href="http://www.theonion.com/content/video/more_american_workers_outsourcing?utm_source=videoembed">who would <em>they</em> outsource to?</a>).  He also is against liberal use of cell phones and e-mail.</p>
<p>I want to mark this up as another &#8220;the secret to success is selling secrets to success&#8221; type of situations.  I could care less about yet another productivity guide, I&#8217;d rather hear about how he was able to network and promote himself.  That seems to be something he actually knows a thing or two about.  From what I hear, his self promotion drive <a href="http://blog.penelopetrunk.com/2009/01/08/5-time-management-tricks-i-learned-from-years-of-hating-tim-ferriss/">irked a lot of people</a>, and certainly took much more than 4 hours a week.  However, I have to hand it to him, it seems to have been very successful.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/scwn.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/scwn.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/scwn.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/scwn.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/scwn.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/scwn.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/scwn.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/scwn.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/scwn.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/scwn.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/scwn.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/scwn.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/scwn.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/scwn.wordpress.com/339/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=339&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://scwn.net/2009/05/10/tim-ferriss-and-the-4-hour-work-week/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/95b4847c297b231e9e511291a37f93ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jjdonald</media:title>
		</media:content>
	</item>
		<item>
		<title>Iterable &lt;Iterable&lt;T&gt;&gt; in haXe</title>
		<link>http://scwn.net/2009/02/06/iterable-in-haxe/</link>
		<comments>http://scwn.net/2009/02/06/iterable-in-haxe/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:49:20 +0000</pubDate>
		<dc:creator>Justin Donaldson</dc:creator>
				<category><![CDATA[haXe]]></category>
		<category><![CDATA[Manipulation]]></category>

		<guid isPermaLink="false">http://www.scwn.net/?p=215</guid>
		<description><![CDATA[One of the (few) limitations of haXe is that it does not structurally type collections recursively, either through the type itself, or a type parameter.  So, writing a function header of : public function (it:Iterable&#60;Iterable&#60;T&#62;&#62;) : &#8230;{} will not work in the intended way.  In fact, trying to pass a List&#60;List&#60;T&#62;&#62; or [[1,2,3],[4,5,6]] for &#8220;it&#8221; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=215&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the (few) limitations of haXe is that it does not <em>structurally</em> type collections recursively, either through the type itself, or a type parameter.  So, writing a function header of :</p>
<p>public function (it:Iterable&lt;Iterable&lt;T&gt;&gt;) : &#8230;{}</p>
<p>will not work in the intended way.  In fact, trying to pass a List&lt;List&lt;T&gt;&gt; or [[1,2,3],[4,5,6]] for &#8220;it&#8221; will cause errors.</p>
<p>This is a limitation for functional programming routines, especially functions that handle collections of collections like chain, zip, etc.</p>
<p>In order to handle these situations, it&#8217;s necessary to come up with a work-around.  For relevant methods, I have a function header that looks like:</p>
<p>function(it:Iterable&lt;Dynamic&gt; , ?nonIterableBehavior&lt;Dynamic&gt;-&gt;Iterator&lt;Dynamic&gt;):&#8230;</p>
<p>The &#8220;it&#8221; parameter is a simple single collection of any Type (Dynamic).  This will accept Iterable&lt;Iterable&lt;T&gt;&gt;, but also Iterable&lt;T&gt;, or a mixed Iterable of both iterable/non-iterable elements.  I&#8217;m mainly interested in the first case, but I&#8217;ll have to handle the latter two cases as well.</p>
<p>In order to handle the all of the cases, it&#8217;s necessary to detect if an individual element T is actually an Iterable&lt;T2&gt; (T2 equals some other type).  The straightforward method would be to use Reflect.hasField(&#8220;field&#8221;, iterator).  However, this will not detect the iterator() in Arrays.  Also, since we&#8217;re using a Dynamic type, we&#8217;ll have to test for null.  In the end, this should work for an Iterable tester:</p>
<p>public static function isIterable(d:Dynamic):Bool{<br />
return (d != null &amp;&amp; (Reflect.hasField(d,&#8217;iterator&#8217;) || Std.is(d, Array)));<br />
}</p>
<p>As long as the object has an &#8220;iterator&#8221; field function that behaves in a consistent way, this will work for it.</p>
<p>Now that we can test for Iterables, we can handle non-iterables.  In relevant functions I use a function called nonIterableBehavior that transforms these non-iterables into Iterators, and then pass that resulting iterator along to chain as if it were a proper Iterator.  In my own classes, nonIterableBehavior defaults to something I thought would be appropriate.  For instance, in chain(), the default nonIterable function applies IterTools.repeat(&#8220;x&#8221;,1) to the non-iterable element.  In zip(), the default nonIterable function instead skips any nonIterable elements  (skipping is assumed by a function that returns null).</p>
<p>So&#8230; the net effect is that I can now call something like</p>
<p>ListTools.chain([[1,2,3,4],5,[6,7,8]])</p>
<p>and get back a List&lt;Dynamic&gt;:</p>
<p>{1,2,3,4,5,6,7,8}</p>
<p>From here, if I need to do anything further with the elements in the list, I&#8217;ll have to type check everything with Reflect/Std.is methods like Std.is(x,Float), etc.  However, in most of my cases, just printing out a list is useful.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/scwn.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/scwn.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/scwn.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/scwn.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/scwn.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/scwn.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/scwn.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/scwn.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/scwn.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/scwn.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/scwn.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/scwn.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/scwn.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/scwn.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=215&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://scwn.net/2009/02/06/iterable-in-haxe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/95b4847c297b231e9e511291a37f93ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jjdonald</media:title>
		</media:content>
	</item>
		<item>
		<title>Lambda on the Web. Or, how I learned to stop worrying and love linked lists.</title>
		<link>http://scwn.net/2008/10/30/lambda-on-the-web-or-how-i-learned-to-stop-worrying-and-love-linked-lists/</link>
		<comments>http://scwn.net/2008/10/30/lambda-on-the-web-or-how-i-learned-to-stop-worrying-and-love-linked-lists/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 19:38:49 +0000</pubDate>
		<dc:creator>Justin Donaldson</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[General Observation]]></category>
		<category><![CDATA[haXe]]></category>
		<category><![CDATA[Manipulation]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.scwn.net/?p=144</guid>
		<description><![CDATA[Arrays and linked lists are the two classic datatypes for storing &#8220;collections of things&#8221;.  Arrays typically are preferred in conventional programming tasks.  They take up less memory, have better data localization, and are faster for look-ups, provided you know the index of what you&#8217;re looking for.  However, I&#8217;ve recently come to the opinion that a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=144&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Arrays and linked lists are the two classic datatypes for storing &#8220;collections of things&#8221;.  Arrays typically are preferred in conventional programming tasks.  They take up less memory, have better data localization, and are faster for look-ups, provided you know the index of what you&#8217;re looking for.  However, I&#8217;ve recently come to the opinion that a lot of common web-oriented tasks just are not well-suited for arrays.  I&#8217;m not saying arrays aren&#8217;t useful, but that lambda type operations on linked-list data structures are starting to make a lot of sense to me.</p>
<p>One reason that linked-lists are more useful is that web developers are usually not coding with heavily optimized, low-level languages like C.  Many developers will code for virtual-machine platforms that do not allocate and handle arrays optimally for speed or efficiency.  Adobe&#8217;s AVM2 is a good example of this, and <a href="http://www.newgrounds.com/bbs/topic/906548">several</a> <a href="http://blog.haxe.org/entry/31">people</a> have noticed that linked-lists can outperform arrays for a lot of relevant tasks.  While there are workarounds for working efficiently in arrays, these can introduce a lot of cognitive overhead, especially when working with complex objects (such as XML/JSON data types).</p>
<p>On the server side, linked-lists are useful because it&#8217;s not always possible to store a simple index of items (people, pages, clicks, etc.) on one machine.  This is one reason that Google has started to work more with Lambda type operations such as <a href="http://labs.google.com/papers/mapreduce.html">MapReduce</a>, and to spread the calculation of PageRank scores over multiple machines in a flexible and more fail-safe environment.  Lambda and linked list data types go together quite well because Lambda methods are normally intended to be &#8220;stateless.&#8221;  For each step, a typical Lambda method usually only concerns itself with an individual element, a function, and some output element.  For this reason, they can work on successive individual elements of a linked list without having to keep the whole list or index in memory.  The drawback to linked lists are that you don&#8217;t have random access to any of the elements (you have to go through them in order), and you incur a significant amount of memory overhead for each element (each element has to contain a pointer to the next element, which essentially is a memory location&#8230; i.e. for a 32 bit machine, it&#8217;ll take at least 4 bytes).  So, if you&#8217;re only storing (common) Integers in a linked-list, then the space required to store the pointers is going to be equal to the data itself.  However, keeping these limitations in mind, they still can be very useful in appropriate contexts.</p>
<p>One of the reasons that I&#8217;ve been interested in <a href="http://haxe.org/">haXe</a>, is that it includes a <a href="http://haxe.org/api/lambda">Lambda class</a> as part of its API.  This fact, combined with its concise <a href="http://en.wikipedia.org/wiki/Haxe#Language">type-checking facilities</a>, means that you can create very powerful Lambda type operations, and implement them with strong type checking.  This is great for performance and debugging, and haXe&#8217;s target options for client side and server side could make this type of programming extremely useful.</p>
<p>So to summarize, array&#8217;s performance benefits can be lost when dealing with client/server side virtual machines, or in large scale server side information processing.  I think it&#8217;s worth checking into some functional programming techniques to improve performance or scalability for some common web site tasks, and I think haXe is a wonderful place to start.</p>
<p>To this end, I&#8217;ve started to put together a library that extends the basic functionality of the haXe Lambda class, and offered it as part of an open source haXe library called &#8220;<a href="http://code.google.com/p/sugar-hx/">sugar-hx</a>&#8220;.  The library includes functions taken from different Lambda method implementations in other languages.  It currently includes scan, unfold, zip, unique, bifurcate, as well as several &#8220;grouping&#8221; functions.  If you use it, or have suggestions, let me know!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/scwn.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/scwn.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/scwn.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/scwn.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/scwn.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/scwn.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/scwn.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/scwn.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/scwn.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/scwn.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/scwn.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/scwn.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/scwn.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/scwn.wordpress.com/144/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=144&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://scwn.net/2008/10/30/lambda-on-the-web-or-how-i-learned-to-stop-worrying-and-love-linked-lists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/95b4847c297b231e9e511291a37f93ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jjdonald</media:title>
		</media:content>
	</item>
		<item>
		<title>ISMIR 2008</title>
		<link>http://scwn.net/2008/09/17/ismir-2008/</link>
		<comments>http://scwn.net/2008/09/17/ismir-2008/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 15:15:56 +0000</pubDate>
		<dc:creator>Justin Donaldson</dc:creator>
				<category><![CDATA[Manipulation]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.scwn.net/?p=131</guid>
		<description><![CDATA[I&#8217;m at the 2008 ISMIR conference on music information retrieval, presenting a poster paper with my co-author, Claudio Baccigalupo.  I talked a bit about the paper in a previous post. I was surprised at how prominently &#8220;social&#8221; sources for musical understanding were featured in the projects and demos, so our work on using playlists/streams to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=131&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a class="flickr-image" title="Ismir 2008" href="http://www.flickr.com/photos/38625228@N00/2863008048/"><img src="http://farm4.static.flickr.com/3213/2863008048_781a15b4e8_m.jpg" alt="Ismir 2008" /></a></p>
<p>I&#8217;m at the 2008 <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fismir2008.ismir.net%2F&amp;ei=mBvRSJ3gEoSYetj30Z0E&amp;usg=AFQjCNFNww66UzAbdSKL7zU9hILaksL_CA&amp;sig2=7mHREWSoy1W5RRPcnYuRfQ">ISMIR</a> conference on music information retrieval, presenting a poster <a href="http://www.iiia.csic.es/~claudio/papers/Baccigalupo-Donaldson-Plaza-2008-ISMIR.pdf">paper</a> with my co-author, <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fwww.iiia.csic.es%2F~claudio%2F&amp;ei=zRvRSPyELYnoeeLdjJ0E&amp;usg=AFQjCNEAjauJ1Ra_OBrrk0-9UTdS-86RmA&amp;sig2=05N1boVNgIOQqw75OQ_AfQ">Claudio Baccigalupo</a>.  I talked a bit about the paper in a <a href="http://www.scwn.net/2008/08/uncovering-affinity-of-artists-to-multiple-genres-from-social-behaviour-data/">previous post</a>.</p>
<p><a class="flickr-image" title="Aura Music Explaura" href="http://www.flickr.com/photos/38625228@N00/2864891397/"><img src="http://farm4.static.flickr.com/3158/2864891397_5ffd29ff22_m.jpg" alt="Aura Music Explaura" /></a></p>
<p>I was surprised at how prominently &#8220;social&#8221; sources for musical understanding were featured in the projects and demos, so our work on using playlists/streams to understand relationships between genres was right at home.  There were also some fantastic demos, including the &#8220;<a href="http://blogs.sun.com/plamere/entry/the_aura_music_explaura">Aura Music Explaura</a>&#8221; which allows for &#8220;steerable recommendations&#8221; by using tags.</p>
<p>The way that Francois and Paul (the project leads) implemented the tag interface was particularly brilliant.  By leveraging the common visual motif of a tag cloud, the interface communicates the frequencies of the tag labels applied to the music.  However, the tags themselves are interactive.  By dragging the tag term boundaries, one can change the &#8220;weight&#8221; of the tag.  This also increases or decreases its relative visual size.  Doing so will alter the importance of the tag in selecting similar artists.  So, hypothetically someone could alter the amount of &#8220;emo&#8221; they want in their music results.  Paul gave me a quick demo, but I really hope this ends up publicly accessible soon, it&#8217;s killer.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/scwn.wordpress.com/131/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/scwn.wordpress.com/131/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/scwn.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/scwn.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/scwn.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/scwn.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/scwn.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/scwn.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/scwn.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/scwn.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/scwn.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/scwn.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/scwn.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/scwn.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/scwn.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/scwn.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=131&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://scwn.net/2008/09/17/ismir-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/95b4847c297b231e9e511291a37f93ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jjdonald</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3213/2863008048_781a15b4e8_m.jpg" medium="image">
			<media:title type="html">Ismir 2008</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3158/2864891397_5ffd29ff22_m.jpg" medium="image">
			<media:title type="html">Aura Music Explaura</media:title>
		</media:content>
	</item>
		<item>
		<title>Is Web Development Stagnating?</title>
		<link>http://scwn.net/2008/09/12/is-web-development-stagnating/</link>
		<comments>http://scwn.net/2008/09/12/is-web-development-stagnating/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 06:30:35 +0000</pubDate>
		<dc:creator>Justin Donaldson</dc:creator>
				<category><![CDATA[General Observation]]></category>
		<category><![CDATA[haXe]]></category>
		<category><![CDATA[Manipulation]]></category>
		<category><![CDATA[Personal Rant]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.scwn.net/?p=130</guid>
		<description><![CDATA[There have been two fairly big &#8220;non-progress&#8221; events recently in the Web development world.  In both situations, a large, well respected company or conglomerate was expected to deliver the &#8220;next big thing&#8221; for the Web, and in both cases, we&#8217;re left with very little to get excited about. The first incident is with Adobe Flash [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=130&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There have been two fairly big &#8220;non-progress&#8221; events recently in the Web development world.  In both situations, a large, well respected company or conglomerate was expected to deliver the &#8220;next big thing&#8221; for the Web, and in both cases, we&#8217;re left with very little to get excited about.</p>
<p>The first incident is with Adobe <a href="http://labs.adobe.com/technologies/flashplayer10/">Flash 10</a> (<a href="http://www.youtube.com/watch?v=ympeCv8lLmw">Astro</a>).  While there are a few very nice features that Astro brings (more useful text rendering/layout methods, and support for shaders), it was a let down on several fronts.  The 3D capabilities that were teased at through early demo movies turned out to be extremely limited.  It quickly became evident that it would be very convoluted to manage some common 3D methods.  Furthermore, the advanced 3D &#8220;Pixel Blending&#8221; <a href="http://www.kaourantin.net/2008/05/adobe-pixel-bender-in-flash-player-10.html">won&#8217;t even use the graphics card</a>.  However, at the very least, the new version of Flash will fix some <a href="http://www.gskinner.com/blog/archives/2008/07/additional_info.html">memory handling problems</a>.</p>
<p>To Adobe&#8217;s credit, they have been instrumental in leading the charge for Javascript 2.0, which was basically going to be the new version of their Actionscript language.  Brendan Eich (the creator of Javascript and a Mozilla Lead) recently sat on a standards body that was to determine the new language.  Also present were Google and Microsoft.  A <a href="https://mail.mozilla.org/pipermail/es-discuss/2008-August/006837.html">recent post</a> by Eich hints at the frustration the standards body met in agreeing upon a standard&#8230; presumably because none of the commercial entities wanted to grant the other any sort of advantage (as might be the case between Adobe and Microsoft).</p>
<p>As web developers, it&#8217;s disheartening to think that there&#8217;s really no new development environment or language on the horizon to look forward to.  As such, I would argue that it&#8217;s a good time to give the <a href="http://haxe.org/">haXe</a> language a try.  It&#8217;s been one of the few bright points I&#8217;ve seen lately in the realm of web development.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/scwn.wordpress.com/130/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/scwn.wordpress.com/130/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/scwn.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/scwn.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/scwn.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/scwn.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/scwn.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/scwn.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/scwn.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/scwn.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/scwn.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/scwn.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/scwn.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/scwn.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/scwn.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/scwn.wordpress.com/130/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=130&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://scwn.net/2008/09/12/is-web-development-stagnating/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/95b4847c297b231e9e511291a37f93ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jjdonald</media:title>
		</media:content>
	</item>
		<item>
		<title>Uncovering affinity of artists to multiple genres from social behaviour data</title>
		<link>http://scwn.net/2008/08/14/uncovering-affinity-of-artists-to-multiple-genres-from-social-behaviour-data/</link>
		<comments>http://scwn.net/2008/08/14/uncovering-affinity-of-artists-to-multiple-genres-from-social-behaviour-data/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 18:24:04 +0000</pubDate>
		<dc:creator>Justin Donaldson</dc:creator>
				<category><![CDATA[Manipulation]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Strands]]></category>

		<guid isPermaLink="false">http://www.scwn.net/?p=128</guid>
		<description><![CDATA[Claudio Baccigalupo and I have a paper at ISMIR entitled Uncovering affinity of artists to multiple genres from social behaviour data.  The paper details a project we worked on for the past year or so involving popular music listening activity from a pool of MusicStrands (MyStrands) users. We provide not only the paper, but also [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=128&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://labs.strands.com/music/affinity/ga_madonna_s.png" alt="" /></p>
<p><a href="http://www.iiia.csic.es/~claudio/">Claudio Baccigalupo</a> and I have a paper at ISMIR entitled <a href="http://www.iiia.csic.es/~claudio/papers/Baccigalupo-Donaldson-Plaza-2008-ISMIR.pdf">Uncovering affinity of artists to multiple genres from social behaviour data</a>.  The paper details a project we worked on for the past year or so involving popular music listening activity from a pool of MusicStrands (<a href="http://www.mystrands.com/">MyStrands</a>) users.</p>
<p>We provide not only the paper, but also the dataset and the code used in our analysis.  All of this is available at the <a href="http://labs.strands.com/music/affinity/">website</a> we have set up for the project.</p>
<p>The main contribution of the project is an analysis and illustration of genres as &#8220;fuzzy sets&#8221; rather than boolean labels.  Through a co-occurence analysis of hundreds of thousands of user playlists, a frequency based &#8220;affinity&#8221; metric is formed between artists and genres.  This affinity metric is a more detailed expression of the style of a given artist&#8217;s music.  The idea and awareness of predominant genres are a trivial part of any person&#8217;s understanding of the vast corpus of popular music.  However, genres typically are used as boolean categorical labels.  I.e. an artist is understood to be associated with only one given genre.</p>
<p>By expressing a connection to multiple genres through our affinity metric, a more detailed picture of the artist emerges.  We give a lot more examples in the <a href="http://labs.strands.com/music/affinity/">website</a>, so be sure to check it out.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/scwn.wordpress.com/128/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/scwn.wordpress.com/128/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/scwn.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/scwn.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/scwn.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/scwn.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/scwn.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/scwn.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/scwn.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/scwn.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/scwn.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/scwn.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/scwn.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/scwn.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/scwn.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/scwn.wordpress.com/128/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=scwn.net&#038;blog=12037230&#038;post=128&#038;subd=scwn&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://scwn.net/2008/08/14/uncovering-affinity-of-artists-to-multiple-genres-from-social-behaviour-data/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/95b4847c297b231e9e511291a37f93ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jjdonald</media:title>
		</media:content>

		<media:content url="http://labs.strands.com/music/affinity/ga_madonna_s.png" medium="image" />
	</item>
	</channel>
</rss>
