<?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>Renaud Bourassa</title>
	<atom:link href="http://renaudbourassa.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://renaudbourassa.com/blog</link>
	<description>Welcome to my World. Here, I am the Architect.</description>
	<lastBuildDate>Tue, 01 Jun 2010 04:18:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Gerald Jay Sussman And The Art of the Propagator</title>
		<link>http://renaudbourassa.com/blog/2010/05/31/gerald-jay-sussman-and-the-art-of-the-propagator/</link>
		<comments>http://renaudbourassa.com/blog/2010/05/31/gerald-jay-sussman-and-the-art-of-the-propagator/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 04:18:49 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Gerald Jay Sussman]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=550</guid>
		<description><![CDATA[Here is a follow up to my previous post with another talk by Gerald Jay Sussman at the University of Waterloo. This time it is on propagators, an interesting architecture pattern inspired by electronic circuits. Enjoy!

]]></description>
			<content:encoded><![CDATA[<p>Here is a follow up to my previous post with another talk by <a href="http://en.wikipedia.org/wiki/Gerald_Jay_Sussman">Gerald Jay Sussman</a> at the University of Waterloo. This time it is on propagators, an interesting architecture pattern inspired by electronic circuits. Enjoy!</p>
<p style="text-align:center"><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12184930&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12184930&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2010/05/31/gerald-jay-sussman-and-the-art-of-the-propagator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gerald Jay Sussman on Code and Poetry</title>
		<link>http://renaudbourassa.com/blog/2010/05/26/gerald-jay-sussman-on-code-and-poetry/</link>
		<comments>http://renaudbourassa.com/blog/2010/05/26/gerald-jay-sussman-on-code-and-poetry/#comments</comments>
		<pubDate>Thu, 27 May 2010 00:10:57 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Gerald Jay Sussman]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=547</guid>
		<description><![CDATA[I am back on campus in Waterloo, which means the talk season is now open again. The first talk I attended this term is a public lecture by Gerald Jay Sussman, the Panasonic Professor of Electrical Engineering at MIT. He gave a pretty interesting presentation on how programming provides us with a set of tools [...]]]></description>
			<content:encoded><![CDATA[<p>I am back on campus in Waterloo, which means the talk season is now open again. The first talk I attended this term is a public lecture by <a href="http://en.wikipedia.org/wiki/Gerald_Jay_Sussman">Gerald Jay Sussman</a>, the Panasonic Professor of Electrical Engineering at MIT. He gave a pretty interesting presentation on how programming provides us with a set of tools to express ourselves. Here is the video.</p>
<p style="text-align:center"><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12060509&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12060509&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2010/05/26/gerald-jay-sussman-on-code-and-poetry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working at Facebook</title>
		<link>http://renaudbourassa.com/blog/2010/01/16/working-at-facebook/</link>
		<comments>http://renaudbourassa.com/blog/2010/01/16/working-at-facebook/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 06:56:52 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=528</guid>
		<description><![CDATA[It has been a while since I posted anything here. I started working at Facebook in Palo Alto last week. I have to admit it is pretty different from my previous work term. First, the working hours are way different from what I&#8217;m used to. I have to reconsider my definition of being late and [...]]]></description>
			<content:encoded><![CDATA[<p>It has been a while since I posted anything here. I started working at <a href="http://www.facebook.com/">Facebook</a> in Palo Alto last week. I have to admit it is pretty different from my previous work term. First, the working hours are way different from what I&#8217;m used to. I have to reconsider my definition of being late and leaving late. One good thing is that there are a lot of smart people working there and some unbelievably interesting projects. You can&#8217;t get a better work environment when it comes to motivation. I have to say the free food is also pretty good. The company is also really open with its employees, holding regular talks where everybody is invited to discuss issues and new projects.</p>
<p>For those interested in getting a job there, here are a couple of tips I learned from my interviews. First, do stuff on you own. Everybody does the school projects, that doesn&#8217;t make you special. Don&#8217;t go over the &#8220;reverse a linked list&#8221; or &#8220;how do I find anagrams&#8221; algorithms before your interview, you would be losing your times. They come up with unusual questions that are not too hard, but that require some knowledge of basic algorithm concepts (e.g. dynamic programming) and that test your problem solving skills, not your memory. If your want to train for these, <a href="http://projecteuler.net/">Project Euler</a> is a good place to start. Also, make sure to visit their <a href="http://www.facebook.com/careers/puzzles.php">programming puzzles page</a>.</p>
<p style="text-align:center"><a href="http://limitedhype.com/2009/09/facebook-headquarters/"><img src="http://renaudbourassa.com/blog/wp-content/uploads/2010/01/1252452640-facebook-offices-palo-alto-20-744x1000-491x660.jpg" alt="" title="Facebook HQ Entrance" width="491" height="660" class="alignnone size-full wp-image-529" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2010/01/16/working-at-facebook/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microsoft Hardware Tech Talk</title>
		<link>http://renaudbourassa.com/blog/2009/11/07/microsoft-hardware-tech-talk/</link>
		<comments>http://renaudbourassa.com/blog/2009/11/07/microsoft-hardware-tech-talk/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 01:01:39 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[University]]></category>
		<category><![CDATA[Zune]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=524</guid>
		<description><![CDATA[Last week I assisted to a tech talk by a Senior Hardware Engineer for the Zune team at Microsoft Entertainment &#038; Devices. He went over a number of subjects, ranging from cloud computing to handheld devices. A pretty good talk overall and a good look at what might come in the future at Microsoft. I [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I assisted to a tech talk by a Senior Hardware Engineer for the Zune team at Microsoft Entertainment &#038; Devices. He went over a number of subjects, ranging from cloud computing to handheld devices. A pretty good talk overall and a good look at what might come in the future at Microsoft. I managed to film everything, but not from the best angle.</p>
<p style="text-align:center"><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7489864&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7489864&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2009/11/07/microsoft-hardware-tech-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo! Hack U 2009</title>
		<link>http://renaudbourassa.com/blog/2009/10/24/yahoo-hack-u-2009/</link>
		<comments>http://renaudbourassa.com/blog/2009/10/24/yahoo-hack-u-2009/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 06:09:52 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Hack U]]></category>
		<category><![CDATA[JobU]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=507</guid>
		<description><![CDATA[Last Friday, Yahoo! was back at the University of Waterloo for Hack U 2009. After a week of talks by web gurus, such as Rasmus Lerdorf and Douglas Crockford, came the 24 hours hack event. This year, we decided to do something useful and in this tough economic time, we ended up creating a mashup [...]]]></description>
			<content:encoded><![CDATA[<p>Last Friday, Yahoo! was back at the University of Waterloo for <a href="http://developer.yahoo.com/hacku/">Hack U 2009</a>. After a week of talks by web gurus, such as <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> and <a href="http://en.wikipedia.org/wiki/Douglas_Crockford">Douglas Crockford</a>, came the 24 hours hack event. This year, we decided to do something useful and in this tough economic time, we ended up creating a mashup to follow job trends across the United States. We scraped all the data we could from the <a href="http://www.bls.gov/">U.S. Bureau of Labor Statistics</a>, making it possible to search for statistics and open positions relevant to a certain type of job. We then display the result on a map using different metrics such as the average salary or the number of workers. </p>
<p>The result is called JobU and can be found here: <a href="http://renaudbourassa.com/projects/jobu/">http://renaudbourassa.com/projects/jobu/</a>.</p>
<p>We won 4th place (when really, we should have won at least 3rd). The first place went to <a href="http://docuvine.joygarage.com/">Docuvine</a>, a really interesting web application that mimics Google Wave. Here are some picture of the event.</p>
<p style="text-align:center"><a href="http://www.flickr.com/photos/rlerdorf/4020309922/in/set-72157622577655478/"><img src="http://renaudbourassa.com/blog/wp-content/uploads/2009/10/hacku1-300x200.jpg" alt="Hack U Coding" title="Hacku Coding" width="300" height="200" class="alignnone size-medium wp-image-508" /></a></p>
<p style="text-align:center"><a href="http://www.flickr.com/photos/rlerdorf/4019566443/in/set-72157622577655478/"><img src="http://renaudbourassa.com/blog/wp-content/uploads/2009/10/hacku2-300x200.jpg" alt="HackU Demonstration 1" title="Hack U Demonstration 1" width="300" height="200" class="alignnone size-medium wp-image-510" /></a></p>
<p style="text-align:center"><a href="http://www.flickr.com/photos/rlerdorf/4019576437/in/set-72157622577655478/"><img src="http://renaudbourassa.com/blog/wp-content/uploads/2009/10/hacku3-300x200.jpg" alt="Hack U Demonstration 2" title="Hack U Demonstration 2" width="300" height="200" class="alignnone size-medium wp-image-511" /></a></p>
<p>For more pictures of the event, see <a href="http://www.flickr.com/photos/rlerdorf/sets/72157622577655478/">Rasmus Lerdorf</a> or <a href="http://www.flickr.com/photos/70883693@N00/">Jamie Lockwood</a> flickr photostream.</p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2009/10/24/yahoo-hack-u-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook VP at UW Homecoming</title>
		<link>http://renaudbourassa.com/blog/2009/09/27/facebook-vp-at-uw-homecoming/</link>
		<comments>http://renaudbourassa.com/blog/2009/09/27/facebook-vp-at-uw-homecoming/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 19:59:02 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[University]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=489</guid>
		<description><![CDATA[Yesterday was Homecoming at the University of Waterloo. For the occasion, Chamath Palihapitiya, Vice President of User Growth, Mobile and International Expansion at Facebook and University of Waterloo &#8216;99 alumnus was invited to give a talk entitled &#8220;Pushing The Digital Envelope&#8221;. I filmed most of the talk so I thought I could share it with [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday was Homecoming at the University of Waterloo. For the occasion, <a href="http://www.facebook.com/press/info.php?execbios">Chamath Palihapitiya</a>, Vice President of User Growth, Mobile and International Expansion at Facebook and University of Waterloo &#8216;99 alumnus was invited to give a talk entitled &#8220;Pushing The Digital Envelope&#8221;. I filmed most of the talk so I thought I could share it with you. However, the last minutes of the question session are missing since I ran out of space on my Flip Cam near the end.</p>
<p style="text-align:center"><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6780876&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=6780876&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p>And also, the Warriors defeated the Windsor Lancers 49-0. Let&#8217;s go Warriors!</p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2009/09/27/facebook-vp-at-uw-homecoming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Basic Data Structure Addition to Batfish</title>
		<link>http://renaudbourassa.com/blog/2009/09/24/basic-data-structure-addition-to-batfish/</link>
		<comments>http://renaudbourassa.com/blog/2009/09/24/basic-data-structure-addition-to-batfish/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 02:18:36 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Batfish]]></category>
		<category><![CDATA[Data Structure]]></category>
		<category><![CDATA[Linked List]]></category>
		<category><![CDATA[Queue]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Stack]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=470</guid>
		<description><![CDATA[Batfish is collection of data structures and algorithms written in Ruby that I started about a month ago. While trying to implement graphs in the library, I quickly realised that a number of basic data structure were missing to implement certain graph algorithms. Stacks and queues were needed to respectively implement the depth-first search and [...]]]></description>
			<content:encoded><![CDATA[<p>Batfish is collection of data structures and algorithms written in Ruby that I started about a month ago. While trying to implement graphs in the library, I quickly realised that a number of basic data structure were missing to implement certain graph algorithms. Stacks and queues were needed to respectively implement the depth-first search and breadth-first search algorithm and a linked list is a good way to represent the adjency lists of vertices. </p>
<p>I thus decided to implement these simple, but oh so useful data structures. Sure, you could reply that ruby arrays already implement all the functionalities provided by theses data structures. True, but when you are dealing with linked lists of millions of elements, having to relocate the whole array in memory to add an element can prove to be a lenghty task. Also, finding a memory chunk big enough to hold the whole array may prove challenging. Ruby arrays grow pretty fast (~1.5x) as can be seen from the following code snippet from array.c (ruby 1.9.1p243) and can rapidly become hard to store in memory.</p>
<pre class="brush: ruby;">
if (idx &gt;= ARY_CAPA(ary)) {
    long new_capa = ARY_CAPA(ary) / 2;

    if (new_capa &lt; ARY_DEFAULT_SIZE) {
        new_capa = ARY_DEFAULT_SIZE;
    }
    if (new_capa &gt;= ARY_MAX_SIZE - idx) {
        new_capa = (ARY_MAX_SIZE - idx) / 2;
    }
    new_capa += idx;
    ary_resize_capa(ary, new_capa);
}
</pre>
<p>And finally, theses data structures implement functionalities that are badly supported by arrays such as deleting or adding an element in the middle of a list.</p>
<p>The stack and queue implementation are separated from the linked list implementation to keep them as simple as possible. The linked list implementation is more extensive and is also used to implement the sorted linked list data structure. The next data structure to be added to Batfish will probably be graphs and it should include a number of basic graph algorithms.</p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2009/09/24/basic-data-structure-addition-to-batfish/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batfish, Just a Bunch of Functions</title>
		<link>http://renaudbourassa.com/blog/2009/08/23/batfish-just-a-bunch-of-functions/</link>
		<comments>http://renaudbourassa.com/blog/2009/08/23/batfish-just-a-bunch-of-functions/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 04:01:42 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Batfish]]></category>
		<category><![CDATA[BK-Tree]]></category>
		<category><![CDATA[Data Structure]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Trie]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=431</guid>
		<description><![CDATA[I have been programming in Ruby for a bit less then a year but already, I accumulated a number of data structures and algorithms. Since they could probably be of some use to someone else and I don&#8217;t want to lose everything because of a failure of some sort, I decided to publish them on [...]]]></description>
			<content:encoded><![CDATA[<p>I have been programming in Ruby for a bit less then a year but already, I accumulated a number of data structures and algorithms. Since they could probably be of some use to someone else and I don&#8217;t want to lose everything because of a failure of some sort, I decided to publish them on my <a href="http://github.com/renaudb">github</a>. The name of the gem: <a href="http://github.com/renaudb/batfish/">batfish</a> (the name comes from a random haiku generator). So far, only my implementations of BK-tree and trie are included, but more should follow soon as I get more time to package them. For more informations, you can browse the batfish <a href="http://renaudbourassa.com/projects/batfish">documentation</a>.</p>
<p><strong>Trie</strong></p>
<p>A trie is a data structure that is used to store an associative array where the array&#8217;s keys are strings. It has the same structure as any other tree, except that keys are not stored in nodes. Instead, each edge has a character associated with it and you browse the trie by going down the edges, one character at a time, until you reach the end of the key. <a href="http://renaudbourassa.com/blog/wp-content/uploads/2009/08/Trie.png"><img style = "border:none" src="http://renaudbourassa.com/blog/wp-content/uploads/2009/08/Trie-300x222.png" alt="Trie" title="Trie" width="300" height="222" class="alignleft size-medium wp-image-442" /></a>The node you reach this way contains the value associated with the key.</p>
<p>Tries have several advantages over binary search trees. First, the complexity of trie lookup is O(L) where L is the length of the key while it is of O(n) where n is the number of elements in the tree for a BST. It also takes less space since different keys overlap. It also have advantages over hash tables. First, the keys, in a trie, are ordered, which makes it a useful data structure to use to store a dictionary. It can also lead to faster lookup depending on the hash function and considering that collisions are possible with string hashes.</p>
<p>More informations on tries can be found <a href="http://en.wikipedia.org/wiki/Trie">here</a>.</p>
<p><strong>BK-Tree</strong></p>
<p><a href="http://renaudbourassa.com/blog/wp-content/uploads/2009/08/BKTree1.png"><img style = "border:none" src="http://renaudbourassa.com/blog/wp-content/uploads/2009/08/BKTree1-300x286.png" alt="Levenshtein BKTree" title="Levenshtein BKTree" width="300" height="286" class="alignright size-medium wp-image-466" /></a>A BK-tree is a useful data structure for nearest neighbor lookup in discrete metric spaces. A metric space is any space that obeys the following rules, where d(a,b) is the distance between a and b.</p>
<ul>
<li><img src='http://s.wordpress.com/latex.php?latex=d%28x%2Cy%29%20%3D%200%20%5CLeftrightarrow%20x%20%3D%20y&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='d(x,y) = 0 \Leftrightarrow x = y' title='d(x,y) = 0 \Leftrightarrow x = y' class='latex' /></li>
<li><img src='http://s.wordpress.com/latex.php?latex=d%28x%2Cy%29%20%3D%20d%28y%2Cx%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='d(x,y) = d(y,x)' title='d(x,y) = d(y,x)' class='latex' /></li>
<li><img src='http://s.wordpress.com/latex.php?latex=d%28x%2Cy%29%20%5Cleq%20d%28x%2Ca%29%20%2B%20d%28a%2Cy%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='d(x,y) \leq d(x,a) + d(a,y)' title='d(x,y) \leq d(x,a) + d(a,y)' class='latex' /></li>
</ul>
<p>The later is also known as the triangle inequality. It basically states that there is no shorter way to go from a point to another than the direct way. Examples of discrete metric spaces, that is, where the distances are integers, are the real numbers or the levenshtein distance between strings.</p>
<p>The BK-Tree is constructed by measuring the distance between the value to insert and every node, going down the edges corresponding to the distance at each node. Once an unregistered distance at a node is calculated for that node, the value is attached to it. The lookup process works by going down each edges in the distance to the node ± the lookup treshold range until a node with a distance equal to the treshold value or less is found. It is thus possible to find all the nodes within a certain distance of a value without going through each nodes. However, the larger the threshold, the more nodes you have to visit.</p>
<p>For more information on BK-trees, you can read the following <a href="http://portal.acm.org/citation.cfm?id=362003.362025">article</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2009/08/23/batfish-just-a-bunch-of-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wikinomics or Business 2.0</title>
		<link>http://renaudbourassa.com/blog/2009/07/02/wikinomics-or-business-2-0/</link>
		<comments>http://renaudbourassa.com/blog/2009/07/02/wikinomics-or-business-2-0/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 02:30:01 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Wikinomics]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=402</guid>
		<description><![CDATA[Collaboration takes an ever growing place in the business world. Not only an Open Source phenomenom, collaborative development and production of goods is becoming a new reality. The new means of communications and the ever growing knowledge industry reshape the way businesses interact with each others in the digital age. This opens the door to [...]]]></description>
			<content:encoded><![CDATA[<p>Collaboration takes an ever growing place in the business world. Not only an Open Source phenomenom, collaborative development and production of goods is becoming a new reality. The new means of communications and the ever growing knowledge industry reshape the way businesses interact with each others in the digital age. This opens the door to new opportunities that could, if successfuly harnessed, lead to huge wealth for new businesses and old ones that adapt. On the other hand, those who resist these changes may end up hitting a wall.</p>
<p><img src="http://renaudbourassa.com/blog/wp-content/uploads/2009/06/wikinomics.jpg" alt="Wikinomics" title="Wikinomics" width="140" height="212" class="alignleft size-full wp-image-407" />In their book <em><a href="http://www.wikinomics.com/blog/">Wikinomics: How Mass Collaboration Changes Everything</a></em>, <a href="http://en.wikipedia.org/wiki/Don_Tapscott">Don Tapscott</a> and <a href="http://anthonydwilliams.com/">Anthony D. Williams</a> describe a new business model, Business 2.0, that takes advantage of the new realities of the digital age. Their theory sits on four main principles: being open, peering, sharing and acting globally. They then use them to describe seven business strategies to harness the power of mass collaboration.</p>
<p><strong>The Four Principles</strong></p>
<p>The four principles are at the core of the Wikinomics theory. These ideas contrast with the principles of previous business models which promote a closed vision of business. Conventional wisdom says companies should protect their intellectual property fiercely, they should keep research and development in-house and keep control over every steps of the development cycle of their products. Wikinomics is all about enterprises opening themselves to the world and as such, stands on different principles.</p>
<p>The first is being open, but openness has a lot of different meanings. Openness could mean openness in research. With science and technology evolving faster than ever before, it is not possible for a single company to do everything in-house. If it wants to stay competitive, it has to open its boundaries and harness ideas from the outside. Openness could also means open standards. This is something that is common in the software world where standards like XML make it easier for companies to develop compatible products. It could also mean transparency. Disclosure of pertinent information to interested parties like shareholders or partners can only lead to improvements. This is also true with costumers, where more information can lead to better feedback and creation of new ideas via product customization.</p>
<p>The idea of peering severely contrast with the common idea that corporation should be highly hierarchized to be functional. Peer production community have been around for a while already. You can find them everywhere in the Open Source movement and on social networks. However, as our society evolves, this idea makes more and more sense in a business environment. Peering succeeds where hierarchical management fails by leveraging self-organization. By harnessing ideas and opinions from a wider group of people, companies open themselves to more opportunities.</p>
<p>Conventional wisdom says company should control and protect their assets as much as they can. However, sharing may end up being more profitable. Sharing crucial R&#038;D information can prove profitable if it leads to the discovery of the missing piece of the puzzle. This leads to win-win interactions between companies, such as pharmaceutical companies that win from having a better knowledge of the human genome by giving away some of their discoveries in this field in return of other companies discoveries. This could also lead to the licensing of assets that are unused, but that can prove useful to someone else. This can also be extended to the field or computer science where distributed systems can share the computing load between users in order to <a href="http://renaudbourassa.com/blog/2009/06/10/dhtwitter-a-vision-of-a-distributed-twitter/">reduce the total overload on a company&#8217;s servers</a>.</p>
<p>The last principle, but not the least, is acting globally. Globalization is not new, it has been there since the end of the Second World War with the introduction of the GATT. However, the phenomenom have accelerated lately with collaboration over long distance made possible by the widespread usage of new means of communications such as the Internet. This allows company to tap into a bigger pool of human and physical resources. However, companies still tend to act locally in multiple places by opening branches that perform the same work in parallel. Acting globally means more than that. It means breaking down geographical boundaries and act as a trully global company by having global workforces that work together, by putting forward global processes that minimize redundancies between different locations and usually, by having a global IT platform that allows for easy collaboration and sharing between distant locations seamlessly.</p>
<p><strong>Seven Business Strategies to Harness Mass Collaboration</strong></p>
<p>Theory is always fun, but knowing how to apply it is usually better. Economics being more of an applied science than a pure one, every business models needs its share of practical strategies and processes. Here is a brief overview of seven business strategies described in details by Don Tapscott and Anthony D. Williams in their book to help enterprises harness the opportunities offered by mass collaboration.</p>
<p>&#8220;Peer Pioneers&#8221; or how thousands of dispersed volunteers can harness the power of peering and sharing to create fast, fluid, and innovative projects that outperform those of the largest and best-financed enterprises. Peer producers apply Open Source principles to create products usually made of bits. Good examples of this are the Linux community or the Apache project and how companies like IBM collaborate with them.</p>
<p>&#8220;Ideagoras&#8221; or how marketplaces for ideas, inventions, and uniquely qualified minds enable big companies such as Procter &#038; Gamble to tap global pools of highly skilled talent more than ten times the size of their own workforce. These Ideagoras give companies access to a global marketplace that they can use to extend their problem-solving capacity. Good examples of this are InnoCentive and yet2.com.</p>
<p>&#8220;Prosumers&#8221; or the increasingly dynamic world of customer innovation, where a new generation of producer consumers considers the &#8220;right to hack&#8221; its birthright. These communities working around a common product can be an incredible source of innovation if companies give customers the tools they need to participate in value creation. A good example of this is LEGO and their LEGO Factory initiative.</p>
<p>&#8220;New Alexandrians&#8221; or how a new science of sharing will rapidly accelerate human health, turn the tide on environmental damage, advance human culture, develop breakthrough technologies, and even discover the universe all the while helping companies grow wealth for their shareholders. The New Alexandrians, scientists, researchers and enterprises from all around the world, are ushering in a new model of collaborative science that will lower the cost and accelerate the pace of technological progress in their industries. A good example of this is Intel and its industry-university collaboration program.</p>
<p>&#8220;Platform for Participation&#8221; or how smart companies are opening up their products and technology infrastructures to create an open stage where large communities of partners can create value, and in many cases, create new businesses. These platforms create a global stage where large communities of partners can create value and, in many cases, new businesses in a highly synergistic ecosystem. Good examples of this are Twitter and its open API or Facebook and the Facebook applications platform.</p>
<p>&#8220;Global Plant Floor&#8221; or how even manufacturing-intensive industries are giving rise to planetary ecosystems for designing and building physical goods, marking a new phase in the evolution of mass collaboration. The plant floors harness the power of human capital across borders and organizational boundaries to design and assemble physical things. A good example of this is Boeing and the development process of its 787 Dreamliner.</p>
<p>&#8220;Wiki Workplace&#8221; or how mass collaboration is taking root in the workplace and creating a new corporate meritocracy that is sweeping away the hierarchical silos in its path and connecting internal teams to a wealth of external networks. These new workplaces increase innovation and improve morale by cutting across organizational hierarchies in all kinds of unorthodox ways. A good example of this is the Geek Squad program.</p>
<p><strong>Wrapping It Up</strong></p>
<p>Overall, <em>Wikinomics</em> is a pretty good book for everyone interested in the world of business. It poses a new look on subject that evolves fast and it brings new solutions to problems that used to look impossible to solve.</p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2009/07/02/wikinomics-or-business-2-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>DHTwitter: A Vision of a Distributed Twitter</title>
		<link>http://renaudbourassa.com/blog/2009/06/10/dhtwitter-a-vision-of-a-distributed-twitter/</link>
		<comments>http://renaudbourassa.com/blog/2009/06/10/dhtwitter-a-vision-of-a-distributed-twitter/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 03:58:30 +0000</pubDate>
		<dc:creator>Rhino</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[DHT]]></category>
		<category><![CDATA[Distributed Computing]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://renaudbourassa.com/blog/?p=390</guid>
		<description><![CDATA[First of all, I have to say that this post is about an idea, not code. Now that this is said, here is the idea. As I said in a previous post, Twitter is facing a problem that could lead to its extinction. More and more people use third-party clients to access Twitter, thus decentralizing [...]]]></description>
			<content:encoded><![CDATA[<p>First of all, I have to say that this post is about an idea, not code. Now that this is said, here is the idea. As I said in a <a href="http://renaudbourassa.com/blog/2009/05/05/why-twitter-inc-will-fail/">previous post</a>, Twitter is facing a problem that could lead to its extinction. More and more people use third-party clients to access Twitter, thus decentralizing the system while keeping the load on the servers. Less people using the Twitter interface means less possibility of monetization and could ultimately lead to the company going bankrupt. The obvious solution to this problem would be to simply restrict the access to the service by limiting the API. However, since closing itself to the world is never a good thing to do, something else has to be done. This is were the idea of DHTwitter comes into play.</p>
<p><strong>The Classic Way</strong></p>
<p>First, lets look at Twitter as it is right now. Yes, Twitter is a social application and as such, each of the network&#8217;s nodes, each user, is connected to a certain number of other nodes. The apparent structure of the service is thus the one of a peer-to-peer network or a decentralized network. However, from a technology point of view, this is not the case. Twitter is a fully centralized network.</p>
<p style="text-align:center"><img class="aligncenter size-full wp-image-393" title="twitternetwork" src="http://renaudbourassa.com/blog/wp-content/uploads/2009/06/twitternetwork.jpg" alt="twitternetwork" width="491" height="332" /></p>
<p>To do whatever action you want to do, you have to go through the company&#8217;s servers. Every single request, whether it is through the Twitter public API or directly on the website, has to be processed by Twitter. All the clients do is parse the server&#8217;s response, all the hard work is done on Twitter&#8217;s side.</p>
<p style="text-align:center"><img class="alignnone size-full wp-image-394" title="twitterquery" src="http://renaudbourassa.com/blog/wp-content/uploads/2009/06/twitterquery.jpg" alt="twitterquery" width="529" height="97" /></p>
<p>Why is this bad? Because Twitter&#8217;s users check often for new messages since they post a lot of messages. Also, Twitter&#8217;s open API led to the creation of many applications based on the service, the worst for the company being clients and automated services. First, a lot of clients, to stay up to date, will make frequent requests to the servers to see if something new was posted. This wouldn&#8217;t be too bad, for example, with a blog service where people only post once in a while, because the servers could use a cache system to reduce unnecessary processing. However, with its thousand of new tweets per minute (and growing), a caching system is hardly useful for Twitter. The second problem is automated applications such as Wordpress plugins or blog update services. These service also make a lot of requests, every time a blog page is loaded in the case of Wordpress and at a certain rate for the update services. Again, each request sent by the service has to be processed on Twitter&#8217;s servers, thus requiring a lot of processing power without the user even seeing the little Twitter bird.</p>
<p><strong>The Efficient Way</strong></p>
<p>So how can we solve this problem? Well, since Twitter is, by its social nature, decentralized, why not try to decentralize the system? This is what peer-to-peer applications such as BitTorrent and Skype have been doing for a while, and it seems to work well. Starting with the second generation of peer-to-peer networks, decentralization became a key idea. This culminated with the integration of Distributed Hash Tables (DHT) in peer-to-peer protocols and clients. From <a href="http://en.wikipedia.org/wiki/Distributed_hash_table">Wikipedia</a>:</p>
<blockquote><p>Distributed hash tables (DHTs) are a class of decentralized distributed systems that provide a lookup service similar to a hash table: (key, value) pairs are stored in the DHT, and any participating node can efficiently retrieve the value associated with a given key. Responsibility for maintaining the mapping from keys to values is distributed among the nodes, in such a way that a change in the set of participants causes a minimal amount of disruption.</p></blockquote>
<p>So how does this apply to Twitter? Well, with its minimalist structure, Twitter is the perfect candidate for a DHT system. DHTs use key value pairs for data management and Twitter is just that, a key value system. The key is your username, and the value your tweets. What makes this an even better solution, is the simplicity of the service. Compared with Facebook activity or blog posts, tweets doesn&#8217;t include complex data such as images or text formatting. It is all about text, and small pieces of text. This not only makes storing user&#8217;s data easy, but it also requires less space. A simple XML file of an average size could be use to store a user&#8217;s full history of tweets and a list of all of his followers/following.</p>
<p>The idea of DHTwitter is to create an additional layer of abstraction, this time between the Twitter API and the client or application used by the end user. This API would include the <a href="http://en.wikipedia.org/wiki/Distributed_hash_table#Overlay_network">overlay network</a> and the <a href="http://en.wikipedia.org/wiki/Distributed_hash_table#Keyspace_partitioning">keyspace partitioning</a> specifications needed to establish the DHT. Once this is done, the API would redirect requests to the Peer Cloud to see if the information is available before hitting Twitter&#8217;s servers. If the user wants to publish a tweet, then all the API has to do is to publish it in the Peer Cloud as well as on Twitter&#8217;s servers to be accessible from everyone, even people not using DHTwitter. By sending the information part by part and by sending the latest tweets first, transfer speed would be less of a problem. Also, keeping a user&#8217;s friends close to him in the overlay network would make request processing in the Peer Cloud faster.</p>
<p style="text-align:center"><img class="alignnone size-full wp-image-392" title="dhtwitterquery" src="http://renaudbourassa.com/blog/wp-content/uploads/2009/06/dhtwitterquery.jpg" alt="dhtwitterquery" width="529" height="203" /></p>
<p>This would seriously reduce the load on Twitter&#8217;s server by distributing the lookup and parsing processing throughout the Peer Cloud. It would reduce the number of server hits by connecting the users together, in the same way they connect in the social layer.</p>
<p style="text-align:center"><img class="alignnone size-full wp-image-391" title="dhtwitternetwork" src="http://renaudbourassa.com/blog/wp-content/uploads/2009/06/dhtwitternetwork.jpg" alt="dhtwitternetwork" width="493" height="333" /></p>
<p><strong>Possible Implementation</strong></p>
<p>For now, this is only an idea. I am not planning on coding an implementation on my own in the near future. However, if someone is interested, please let me know, I would love to participate in the development. The biggest challenge in implementing DHTwitter is the lack of libraries for DHTs. Full system specifications exist; <a href="http://xlattice.sourceforge.net/components/protocol/kademlia/specs.html">Kademlia</a>, <a href="http://freepastry.org/">Pastry</a> and <a href="http://current.cs.ucsb.edu/projects/chimera/">Tapestry</a>(Chimera) are good examples. However, there is a lack of solid implementation. Librairies are practically nonexistent and most practical implementations are hard coded into existing applications, such as Vuze or LimeWire. Again, if you thought of a way this could be implemented, please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://renaudbourassa.com/blog/2009/06/10/dhtwitter-a-vision-of-a-distributed-twitter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
