<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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" version="2.0">

<channel>
	<title>Directed Edge News</title>
	
	<link>http://blog.directededge.com</link>
	<description>Connecting stuff.</description>
	<pubDate>Thu, 02 Jul 2009 17:32:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/directededge" type="application/rss+xml" /><item>
		<title>Think Vitamin on beyond relational databases</title>
		<link>http://blog.directededge.com/2009/06/25/think-vitamin-on-beyond-relational-databases/</link>
		<comments>http://blog.directededge.com/2009/06/25/think-vitamin-on-beyond-relational-databases/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 02:48:33 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=264</guid>
		<description><![CDATA[There&#8217;s a new article up on Think Vitamin titled, &#8220;Should You Go Beyond Relational Databases&#8221; discussing the emergence of a crop of non-relational databases.  It&#8217;s one of the better introductions that I&#8217;ve seen to the landscape of document-oriented databases, graph databases and key-value stores that I&#8217;ve run across.  There&#8217;s a brief mention of Directed Edge [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a new article up on Think Vitamin titled, &#8220;<a href="http://thinkvitamin.com/dev/should-you-go-beyond-relational-databases/">Should You Go Beyond Relational Databases</a>&#8221; discussing the emergence of a crop of non-relational databases.  It&#8217;s one of the better introductions that I&#8217;ve seen to the landscape of document-oriented databases, graph databases and key-value stores that I&#8217;ve run across.  There&#8217;s a brief mention of Directed Edge in the graph database section:</p>
<blockquote><p>There is less choice in graph databases than there is in document databases: Neo4j, AllegroGraphand Sesame (which typically uses MySQL or PostgreSQL as storage back-end) are ones to look at.  FreeBase and <strong><em>DirectedEdge</em></strong> have developed graph databases for their internal use.</p>
<p>Graph databases are often associated with the semantic web and RDF datastores, which is one of the applications they are used for. I actually believe that many other applications’ data would also be well represented in graphs. However, as before, don’t try to force data into a graph if it fits better in tables or documents.</p></blockquote>
<p>Our own database is quirky hybrid of a graph-database, key-value store and column oriented database &#8212; the graph is a collection of interconnected items, which can have arbitrary meta-data associated with them, with column-oriented physical organization.  In fact, rolled into the next batch of updates that we&#8217;re testing at the moment are some more groovy features for enhanced item meta data like images and stuff.  We hope to go live real soon with that and The Other Cool New Features.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/06/25/think-vitamin-on-beyond-relational-databases/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP bindings are starting to shape up.</title>
		<link>http://blog.directededge.com/2009/06/05/php-bindings-are-starting-to-shape-up/</link>
		<comments>http://blog.directededge.com/2009/06/05/php-bindings-are-starting-to-shape-up/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 23:23:21 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=260</guid>
		<description><![CDATA[By popular demand we&#8217;ve been banging out some PHP bindings that mirror the Ruby bindings that appeared along with our last web services update and the new developer site.
The API is basically the same adjusted for PHP conventions.  They&#8217;re still a work in progress and subject to change, but we&#8217;d love feedback from folks [...]]]></description>
			<content:encoded><![CDATA[<p>By popular demand we&#8217;ve been banging out some PHP bindings that mirror the <a href="http://developer.directededge.com/article/Ruby_Bindings_for_E-Commerce_Tutorial">Ruby bindings</a> that appeared along with our last web services update and the new <a href="http://developer.directededge.com/">developer site</a>.</p>
<p>The API is basically the same adjusted for PHP conventions.  They&#8217;re still a work in progress and subject to change, but we&#8217;d love feedback from folks more steeped in the world of PHP than us.</p>
<p>So, up on ye olde Github, <a href="http://github.com/directededge/directed-edge-bindings/blob/3c073b162ff65b3759109c8146c2d97803df2fd4/PHP/DirectedEdge.php">our PHP bindings</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/06/05/php-bindings-are-starting-to-shape-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Webservices Update, Developer Site Launch</title>
		<link>http://blog.directededge.com/2009/05/25/webservices-update-developer-site-launch/</link>
		<comments>http://blog.directededge.com/2009/05/25/webservices-update-developer-site-launch/#comments</comments>
		<pubDate>Mon, 25 May 2009 19:12:20 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=254</guid>
		<description><![CDATA[There&#8217;s been a lot cooking behind the scenes of late. Secretly the newest version of the webservices have been up and running for about a month.  First we wanted to update the docs.  Then they began growing.  And there was a tutorial.  And more examples.  And the new Ruby bindings [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been a lot cooking behind the scenes of late. Secretly the newest version of the webservices have been up and running for about a month.  First we wanted to update the docs.  Then they began growing.  And there was a tutorial.  And more examples.  And the new Ruby bindings were shaping up.</p>
<p>Before we knew it, we had a full-blown developer site in the works.  So, folks, that&#8217;s what&#8217;s on the menu today:</p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_255" class="wp-caption aligncenter" style="width: 630px;">
<dt class="wp-caption-dt"><a style="text-decoration: none;" href="http://developer.directededge.com/"><img class="size-full wp-image-255" title="developer.directededge.com" src="http://blog.directededge.com/wp-content/uploads/2009/05/developer.png" alt="developer.directededge.com" width="630" height="389" /></a></dt>
</dl>
</div>
<p style="text-align: center;"><a href="http://developer.directededge.com/">http://developer.directededge.com/</a></p>
<p style="text-align: left;">There&#8217;s a bunch of stuff in there we&#8217;re excited about.  There&#8217;s a <a href="http://developer.directededge.com/article/API_Concepts">nice intro</a> to some of the concepts that folks sometimes get hung up with when starting to work with the API.  The <a href="http://developer.directededge.com/article/REST_API">API Docs</a> have been improved and expanded.  We&#8217;ve got <a href="http://developer.directededge.com/article/Web_Services_Examples">examples out the wazoo</a>.  The docs for the <a href="http://developer.directededge.com/rdoc/">Ruby bindings</a> live there now and there&#8217;s a step by step <a href="http://developer.directededge.com/article/Ruby_Bindings_for_E-Commerce_Tutorial">tutorial</a> on using them and a <a href="http://developer.directededge.com/article/ExampleStore_Class">sample implementation</a> for using them and pulling the data out of an existing MySQL database using ActiveRecord.</p>
<p style="text-align: left;">Whew, but that&#8217;s just the stuff <em>about</em> the webservices, what&#8217;s actually new in the webservices?</p>
<p style="text-align: left;">
<ul>
<li>Separate methods for <em>related</em> and <em>recommended</em> queries giving <strong>much better personalized recommendations.</strong> This is the biggie (despite its humble packaging).</li>
<li><strong>Weights</strong><em> </em>(aka explicit ratings) are finally supported.  DB&#8217;s had them for a while.  Finally popped them up to the webservices level.  There&#8217;s more in the pipe there, but we&#8217;ve got to leave some excitement for the next update.</li>
<li><strong>&#8220;excludeLinked&#8221;</strong> basically goes hand in hand with personalized recommendations; doesn&#8217;t recommend stuff you&#8217;ve already seen / bought / rated.</li>
<li><strong>add / remove for incremental updates</strong>.  Means that you can add a tag, link, or whatever to an item without having to pull down the item or worry about consistency.</li>
<li><strong>Lots of bug-fixes and performance enchancements.</strong> Not that our code wasn&#8217;t perfect before.  Ahem.</li>
</ul>
<p>So, dig in, let us know what content is missing on the developer site and enjoy.  Hopefully the next batch of features will get pushed out just a wee bit faster.  We&#8217;ve also been slowly expanding the beta program and setting up accounts for more and more sites, so if you&#8217;ve got something interesting you&#8217;d like to bang out with our API, we look forward to hearing from you!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/05/25/webservices-update-developer-site-launch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>C and C++ are not the same language.</title>
		<link>http://blog.directededge.com/2009/05/21/c-and-c-are-not-the-same-language/</link>
		<comments>http://blog.directededge.com/2009/05/21/c-and-c-are-not-the-same-language/#comments</comments>
		<pubDate>Thu, 21 May 2009 02:19:10 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=241</guid>
		<description><![CDATA[In the web world, a world I&#8217;ve made my way back to in the last year, pointers are an exotic relic of the past.  Seriously.
I never got the memo; there was no going away party, I was just sitting there, minding my own structs and boom, next thing I know, I was that guy that [...]]]></description>
			<content:encoded><![CDATA[<p>In the web world, a world I&#8217;ve made my way back to in the last year, pointers are an exotic relic of the past.  Seriously.</p>
<p>I never got the memo; there was no going away party, I was just sitting there, minding my own structs and boom, next thing I know, I was that guy that hadn&#8217;t realized that <em>those mallocs are so 90s</em>.</p>
<p>But there is a certain reverence for the old ways.  You&#8217;re supposed to learn C or C++ (often just written as &#8220;C / C++&#8221;) to be a well rounded dork, much like you&#8217;re supposed to have read Shakespeare.  This is all fine and well, and I agree.  But there&#8217;s one sticking point.</p>
<p><em>C and C++ aren&#8217;t the same language.</em></p>
<p><strong>Let&#8217;s first take a tour of the major reasons that are given for learning C or C++:</strong></p>
<ul>
<li><strong>You learn how to do manual memory management</strong></li>
<li><strong>You get &#8220;closer to the hardware&#8221;</strong></li>
<li><strong>They offer performance benefits over most languages</strong></li>
<li><strong>There&#8217;s a wealth of code written in both that you may want to understand</strong></li>
</ul>
<p>All of these are true in both languages.</p>
<p>However, <strong>learning to <em>think</em> in C versus C++ is a completely different story</strong>.</p>
<p>Modern C++ is usually written in an object-oriented style.  Even modern C is usually written in a pseudo-object-oriented style using opaque types.  But the mechanisms for working with the two vary widely.  Notably, in C you have to build up the higher level abstractions on your own that are built into the language in C++.</p>
<p>It&#8217;s beyond the scope of this entry to get into the many differences between the two, but I decided to implement a common pattern in programming, the <em>observer pattern</em> in C, C++ and Java to illustrate the differences.</p>
<h3>Observer Pattern in C:</h3>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #993333;">void</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span> FoomaticListener<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">struct</span> Foomatic
<span style="color: #009900;">&#123;</span>
    FoomaticListener <span style="color: #339933;">*</span>listeners<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> listener_count<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">struct</span> Foomatic <span style="color: #339933;">*</span>foomatic_create<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> Foomatic <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> calloc<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> Foomatic<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> foomatic_destroy<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> Foomatic <span style="color: #339933;">*</span>foomatic<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    free<span style="color: #009900;">&#40;</span>foomatic<span style="color: #339933;">-&gt;</span>listeners<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    free<span style="color: #009900;">&#40;</span>foomatic<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> foomatic_add_listener<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> Foomatic <span style="color: #339933;">*</span>foomatic<span style="color: #339933;">,</span> FoomaticListener listener<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> count <span style="color: #339933;">=</span> <span style="color: #339933;">++</span>foomatic<span style="color: #339933;">-&gt;</span>listener_count<span style="color: #339933;">;</span>
&nbsp;
    foomatic<span style="color: #339933;">-&gt;</span>listeners <span style="color: #339933;">=</span>
        <span style="color: #009900;">&#40;</span>FoomaticListener <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> realloc<span style="color: #009900;">&#40;</span>foomatic<span style="color: #339933;">-&gt;</span>listeners<span style="color: #339933;">,</span>
                                     <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>FoomaticListener<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> count<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    foomatic<span style="color: #339933;">-&gt;</span>listeners<span style="color: #009900;">&#91;</span>count <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> listener<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> foomatic_activate<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> Foomatic <span style="color: #339933;">*</span>foomatic<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> foomatic<span style="color: #339933;">-&gt;</span>listener_count<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>foomatic<span style="color: #339933;">-&gt;</span>listeners<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">void</span> first_listener<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Whoopee.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">void</span> second_listener<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Whoopee.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">struct</span> Foomatic <span style="color: #339933;">*</span>foomatic <span style="color: #339933;">=</span> foomatic_create<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    foomatic_add_listener<span style="color: #009900;">&#40;</span>foomatic<span style="color: #339933;">,</span> first_listener<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    foomatic_add_listener<span style="color: #009900;">&#40;</span>foomatic<span style="color: #339933;">,</span> second_listener<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    foomatic_activate<span style="color: #009900;">&#40;</span>foomatic<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    foomatic_destroy<span style="color: #009900;">&#40;</span>foomatic<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Observer Pattern in C++:</h3>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;set&gt;</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
&nbsp;
<span style="color: #0000ff;">class</span> Foomatic
<span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
    <span style="color: #0000ff;">class</span> Listener
    <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
        <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> activate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">void</span> addListener<span style="color: #008000;">&#40;</span>Listener <span style="color: #000040;">*</span>listener<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        m_listeners.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>listener<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">void</span> activate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ListenerSet<span style="color: #008080;">::</span><span style="color: #007788;">const_iterator</span> it <span style="color: #000080;">=</span> m_listeners.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            it <span style="color: #000040;">!</span><span style="color: #000080;">=</span> m_listeners.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>it<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>it<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>activate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
    <span style="color: #0000ff;">typedef</span> std<span style="color: #008080;">::</span><span style="color: #007788;">set</span><span style="color: #000080;">&lt;</span>Listener <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span> ListenerSet<span style="color: #008080;">;</span>
    ListenerSet m_listeners<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> FooListener <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> Foomatic<span style="color: #008080;">::</span><span style="color: #007788;">Listener</span>
<span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
    <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> activate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Whoopee.&quot;</span> <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    Foomatic foomatic<span style="color: #008080;">;</span>
    FooListener first<span style="color: #008080;">;</span>
    FooListener second<span style="color: #008080;">;</span>
&nbsp;
    foomatic.<span style="color: #007788;">addListener</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>first<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    foomatic.<span style="color: #007788;">addListener</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>second<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    foomatic.<span style="color: #007788;">activate</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<h3>Observer Pattern in Java:</h3>
<p><em>Foomatic.java</em></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Set</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.HashSet</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Iterator</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Foomatic
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> Set<span style="color: #339933;">&lt;</span>Listener<span style="color: #339933;">&gt;</span> listeners<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> Listener
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> activate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Foomatic<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        listeners <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashSet<span style="color: #339933;">&lt;</span>Listener<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> addListener<span style="color: #009900;">&#40;</span>Listener listener<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        listeners.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>listener<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> activate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        Iterator<span style="color: #339933;">&lt;</span>Listener<span style="color: #339933;">&gt;</span> it <span style="color: #339933;">=</span> listeners.<span style="color: #006633;">iterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>it.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            it.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">activate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><em>Callback.java</em></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> FooListener <span style="color: #000000; font-weight: bold;">implements</span> Foomatic.<span style="color: #006633;">Listener</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> activate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Whoopee.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Callback
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        Foomatic foomatic <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Foomatic<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        FooListener first <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FooListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        FooListener second <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FooListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        foomatic.<span style="color: #006633;">addListener</span><span style="color: #009900;">&#40;</span>first<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        foomatic.<span style="color: #006633;">addListener</span><span style="color: #009900;">&#40;</span>second<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        foomatic.<span style="color: #006633;">activate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>All three of these do the same thing (with the one proviso that the C version uses a simple list rather than a set for concision).</p>
<p><strong>The first thing that should jump out at you is that two of these look very similar.  And it&#8217;s not the C and C++ versions.</strong>  Modern C++ is much more similar to Java than it is to C.  Learning to think in C++ is much closer to learning to think in Java.</p>
<p>In the C++ and Java examples a callback is achieved by defining an interface with an abstract method that&#8217;s implemented in a concrete subclass.  In C a function pointer is used.</p>
<p>Now, let&#8217;s get back to the root of the confusion.</p>
<p>C++ is backwards compatible to C.  Good C++ developers, especially those doing systems programming, tend to be familiar enough with the important parts of C to exploit its lower-level primitives and pack them into an object oriented structure.</p>
<p>But someone working on, say, GUI development in C++ might never come into contact with the C underworld.  You can be a goodly C++ developer and never use function pointers, rarely use macros (and then rarely in a particularly interesting way) and most of all be completely clueless on how to define a reasonable C API that does proper encapsulation.</p>
<p><strong>Really knowing a programming language is much more about knowing how to wield it to solve problems rather than being able to write code that the compiler doesn&#8217;t barf on.</strong></p>
<p>Let&#8217;s look back at the goals we had for learning one of these languages:</p>
<h2>You learn to do manual memory management</h2>
<p>In C++ memory management is often less opaque and handled by abstraction layers.  We didn&#8217;t have to think about memory being allocated to insert an element to a set or free it when we were done.  That was handled by the language and its standard library.  This holds somewhat generally for C++, so I believe if your goal is educational &#8212; simply to learn about memory management, C is probably closer to fitting the bill.</p>
<h2>You get closer to the hardware</h2>
<p>Again, C is probably a win.  Not because you can&#8217;t do systems programming in C++ (in fact, that&#8217;s most of what I do) but because when doing systems programming in C++ it tends to come out looking like blocks of C neatly organized into classes.  The bulk of the code that you can also use as a learning reference (glibc and the Linux kernel are both good here) is written in C.</p>
<h2>They offer performance benefits over other languages</h2>
<p>This is true for both, but C forces most of the time-consuming stuff to pass in front of your eyes.  There&#8217;s less magic happening behind the scenes.  When writing performance critical C++ understanding that it&#8217;s built on the same runtime as C is useful for understanding what&#8217;s actually happening when you call a virtual function.  (Answer:  Classes which have virtual functions have a &#8220;vtable&#8221; that&#8217;s created by the compiler which is simply an array of function pointers.)</p>
<h2>There&#8217;s a wealth of code written in both that you may want to understand</h2>
<p>This naturally has less of a clear winner.  C tends to be more dominant at the lower levels, C++ creeps in closer to the middle of the technology stack.  Systems libraries and kernels are usually written in C, things like web browsers and office suites are more often C++.</p>
<p><strong><em>But wait &#8230; so I said all of that nice stuff about C, why do I still prefer C++?</em></strong></p>
<p><strong>If your goals are purely educational, C is probably a better fit.</strong>  At an atomic level it&#8217;s harder to understand, but there&#8217;s much less of it to understand.  C++&#8217;s syntax is everything from C plus a myriad of advanced compiler-fu that takes a good long while to get your head around.  Many C++ programmers who have been working with the language for half a decade still couldn&#8217;t tell you how to use partial template specialization.</p>
<p><strong>But if you&#8217;re writing real code &#8212; something you&#8217;re going to be curling up with night after night until unemployment do you part, I&#8217;ll take C++ any day of the week.</strong></p>
<p>If you want to learn about the innards of programming, filleting a program in C teaches you how.  If 95% of the time, you&#8217;d like to have that handled with the abstractions you&#8217;re working with, classes, templates, exceptions and other modern encapsulation mechanisms supported by C++ make working on a large code-base more palatable.  I&#8217;ve been writing C for 15 years and in the first version of the C example above, I forgot to free the list of function pointers.  C++ is also more concise and expressive.</p>
<p><strong>Now, anticipating the reaction of the high-level crew, aren&#8217;t most of the arguments that I just made for C++ even more true for, say, Python, or Ruby?</strong></p>
<p>Of course.  But C++ often hits a sweet-spot between languages where high-level abstractions are available with the raw power of C when you need it.</p>
<p>At Directed Edge we use a mix of languages, and even a mix of C++ styles, trying to hit their comparative sweet-spots.  The rough break down is:</p>
<ul>
<li><strong>Database</strong>:  C-ish C++.  Looks like C packaged into classes and mostly is.  Binary operators for the win.</li>
<li><strong>Engine</strong>:  More &#8220;pure&#8221; C++.  Less low-level gobblety-gook.  Works mostly with abstractions built up in the database level.  Optimized like it&#8217;s nobody&#8217;s business.</li>
<li><strong>Web Services</strong>:  Java.  It&#8217;s hardly the cool-kid on the block these days, but does well with throughput and fault-tollerance (which C and C++ are bad at).</li>
<li><strong>Web Front-ends</strong>:  Ruby.  Horrible performance, but rapid development time.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/05/21/c-and-c-are-not-the-same-language/feed/</wfw:commentRss>
		</item>
		<item>
		<title>“We think you’d also like…” and the Math of Suggestion - Part 2</title>
		<link>http://blog.directededge.com/2009/04/14/%e2%80%9cwe-think-you%e2%80%99d-also-like%e2%80%a6%e2%80%9d-and-the-math-of-suggestion-part-2/</link>
		<comments>http://blog.directededge.com/2009/04/14/%e2%80%9cwe-think-you%e2%80%99d-also-like%e2%80%a6%e2%80%9d-and-the-math-of-suggestion-part-2/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 13:24:01 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=229</guid>
		<description><![CDATA[Part two of my article on &#8220;The Math of Suggestion&#8221; went up today on Gründerszene, and here&#8217;s a link back to Part 1 to to refresh your memory.
]]></description>
			<content:encoded><![CDATA[<p>Part two of my article on &#8220;The Math of Suggestion&#8221; went up today on <a href="http://www.gruenderszene.de/it/we-think-youd-also-like-and-the-math-of-suggestion-–-teil-2/">Gründerszene</a>, and here&#8217;s a link back to <a href="http://www.gruenderszene.de/it/we-think-youd-also-like-and-the-math-of-suggestion-–-teil-1/">Part 1</a> to to refresh your memory.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/04/14/%e2%80%9cwe-think-you%e2%80%99d-also-like%e2%80%a6%e2%80%9d-and-the-math-of-suggestion-part-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>On the Road: Silicon Valley and Boston</title>
		<link>http://blog.directededge.com/2009/04/11/on-the-road-silicon-valley-and-boston/</link>
		<comments>http://blog.directededge.com/2009/04/11/on-the-road-silicon-valley-and-boston/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 11:53:14 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=227</guid>
		<description><![CDATA[The two of us that founded Directed Edge will be making our first trip together to Silicon Valley later this month and I&#8217;ll be in Boston in June and might do a quick trip out to New York.  If any of the fine folks watching this space is in one of those places and would [...]]]></description>
			<content:encoded><![CDATA[<p>The two of us that founded Directed Edge will be making our first trip together to Silicon Valley later this month and I&#8217;ll be in Boston in June and might do a quick trip out to New York.  If any of the fine folks watching this space is in one of those places and would like to meet or send some event tips in our general direction, drop us a line!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/04/11/on-the-road-silicon-valley-and-boston/feed/</wfw:commentRss>
		</item>
		<item>
		<title>“We think you’d also like…” and the Math of Suggestion – Part 1</title>
		<link>http://blog.directededge.com/2009/04/06/%e2%80%9cwe-think-you%e2%80%99d-also-like%e2%80%a6%e2%80%9d-and-the-math-of-suggestion-%e2%80%93-part-1/</link>
		<comments>http://blog.directededge.com/2009/04/06/%e2%80%9cwe-think-you%e2%80%99d-also-like%e2%80%a6%e2%80%9d-and-the-math-of-suggestion-%e2%80%93-part-1/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 09:16:05 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=224</guid>
		<description><![CDATA[Part I of my article on &#8220;The Math of Suggestion&#8221; just went up on Gründerszene covering the basics of user-based collaborative filtering just went up.  Part II will cover item-based collaborative filtering and some of the basics of graph based approaches.  We&#8217;ll post it here when it goes live.
]]></description>
			<content:encoded><![CDATA[<p>Part I of my article on &#8220;The Math of Suggestion&#8221; just went up on <a href="http://www.gruenderszene.de/it/we-think-youd-also-like-and-the-math-of-suggestion-–-teil-1/">Gründerszene</a> covering the basics of user-based collaborative filtering just went up.  Part II will cover item-based collaborative filtering and some of the basics of graph based approaches.  We&#8217;ll post it here when it goes live.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/04/06/%e2%80%9cwe-think-you%e2%80%99d-also-like%e2%80%a6%e2%80%9d-and-the-math-of-suggestion-%e2%80%93-part-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Greg Linden on “What is a Good Recommendation Algorithm?”</title>
		<link>http://blog.directededge.com/2009/03/29/greg-linden-on-what-is-a-good-recommendation-algorithm/</link>
		<comments>http://blog.directededge.com/2009/03/29/greg-linden-on-what-is-a-good-recommendation-algorithm/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 14:54:04 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=221</guid>
		<description><![CDATA[Greg Linden is one of The Really Smart People in the world of recommendations.  He&#8217;s got an excellent post on the newly launched ACM blog.
I&#8217;ve had a draft of an essay sitting around for a while titled, &#8220;What&#8217;s wrong with recommendations?&#8221;  Greg hits on one of the key points that I&#8217;d intended to cover:
In the [...]]]></description>
			<content:encoded><![CDATA[<p>Greg Linden is one of The Really Smart People in the world of recommendations.  He&#8217;s got an excellent post on the newly launched ACM blog.</p>
<p>I&#8217;ve had a draft of an essay sitting around for a while titled, &#8220;What&#8217;s wrong with recommendations?&#8221;  Greg hits on one of the key points that I&#8217;d intended to cover:</p>
<blockquote><p>In the end, what we want is happy, satisfied users.  Will a recommendation engine that minimizes RMSE make people happy?</p></blockquote>
<p>Check out the full post <a href="http://cacm.acm.org/blogs/blog-cacm/22925-what-is-a-good-recommendation-algorithm/fulltext">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/03/29/greg-linden-on-what-is-a-good-recommendation-algorithm/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Announcing TweetRex: Twitter friend recommender built on the Directed Edge recommendations engine</title>
		<link>http://blog.directededge.com/2009/03/24/announcing-tweetrex-twitter-friend-recommender-built-on-the-directed-edge-recommendations-engine/</link>
		<comments>http://blog.directededge.com/2009/03/24/announcing-tweetrex-twitter-friend-recommender-built-on-the-directed-edge-recommendations-engine/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 07:44:19 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=204</guid>
		<description><![CDATA[
So a couple weeks back we decided to have a little fun with the Twitter API and built a friend recommender using the Directed Edge engine.  What was originally going to be a two day project that our friend Björn Günzel and I wanted to bang out turned, as two day projects are wont [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img class="size-medium wp-image-209" title="TweetRex Login" src="http://blog.directededge.com/wp-content/uploads/2009/03/tweetrex-login-300x195.png" alt="" width="300" height="195" /><img class="size-medium wp-image-210" title="TweetRex Results" src="http://blog.directededge.com/wp-content/uploads/2009/03/tweetrex-results-300x195.png" alt="" width="300" height="195" /></p>
<p>So a couple weeks back we decided to have a little fun with the Twitter API and built a friend recommender using the Directed Edge engine.  What was originally going to be a two day project that our friend Björn Günzel and I wanted to bang out turned, as two day projects are wont to do, into a 10 day project.</p>
<h2>How hard could it be?</h2>
<p>It turns out that spidering the Twitter graph in real time presented some interesting challenges for our database.  This was the first extremely write intensive application we&#8217;d tested:  one single recommendations run can often trigger adding thousands or hundreds of thousands of items to our database as we do the progressive spidering.</p>
<p>To make things more fun, with all of those requests out to the Twitter API, the application needed to be heavily multithreaded &#8212; often using up to 500 concurrent threads split between spidering Twitter, computing recommendations and handling incoming requests.</p>
<h2>Sinatra and new database features:</h2>
<p>We wanted to build this application using <em>only</em> the Directed Edge database &#8212; no messy ORM layer and all that jazz.  <a href="http://www.sinatrarb.com/">Sinatra</a> seemed like a nice, low-fat alternative to Rails.</p>
<p>The new stuff in our database lets it act as a full-blown key-value store with support for storing arbitrary data with arbitrary mime-types in the DB.  Right now we&#8217;re just using this for Twitter profile caching.  In the next update of our database / web-services it&#8217;ll be possible to use the database just like webdav assigning images or text to graph-nodes using a simple HTTP put and immediately retrieving them.  This opens up some doors of possibilities to being able to do something like, &#8220;Show me pictures of all related items.&#8221;  More on that once those features make their way into the released version of the web-services.</p>
<h2>Go easy on her, gents.</h2>
<p>We&#8217;ll see if the app survives its relatively gentle launch.  Right now we hit the Twitter API quite hard &#8212; such that in fact we have to limit the number of concurrent users using TweetRex or else our Twitter queries start timing out and recommendations take ages to generate and are incomplete.  You&#8217;ll get a little message if we&#8217;re overloaded and it&#8217;ll automatically move on to the log-in sequence once things are live.</p>
<h2>So, what does it do?</h2>
<p>TweetRex looks through the Twitter graph for people that are in your &#8220;neighborhood&#8221; that you&#8217;re not following.  The results get better as we spider more of the Twitter graph, so check back in from time to time.  There&#8217;s a little message box that pops up asking if we can post a tweet in your stream.  We&#8217;d love it if you&#8217;d oblige to help us get the word out about the app.</p>
<p>This is just the first beta.  We&#8217;ll be adding some more features over time, and are looking forward to your feedback!</p>
<p>And now, without further ado, I give you TweetRex:</p>
<h2 style="text-align: center;"><a href="http://tweetrex.directededge.com/">http://tweetrex.directededge.com/</a></h2>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/03/24/announcing-tweetrex-twitter-friend-recommender-built-on-the-directed-edge-recommendations-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bindings project on GitHub, Starting with Ruby Bindings</title>
		<link>http://blog.directededge.com/2009/03/11/bindings-project-on-github-starting-with-ruby-bindings/</link>
		<comments>http://blog.directededge.com/2009/03/11/bindings-project-on-github-starting-with-ruby-bindings/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 07:53:13 +0000</pubDate>
		<dc:creator>Scott Wheeler</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.directededge.com/?p=199</guid>
		<description><![CDATA[

We just uploaded the first version of a simple Ruby binding to our API to Github. The code is BSD licensed, so you can do pretty much anything you want with it.  We&#8217;ll be adding a few more features to the Ruby version in the following days and eventually follow with similar bindings for [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #551a8b; text-decoration: underline;"><a href="http://blog.directededge.com/wp-content/uploads/2009/03/github.png"><img class="aligncenter size-full wp-image-201" title="github" src="http://blog.directededge.com/wp-content/uploads/2009/03/github.png" alt="" width="630" height="349" /></a><br />
</span></p>
<p>We just uploaded the first version of a <a href="http://github.com/directededge/directed-edge-bindings/tree/master">simple Ruby binding to our API</a> to Github. The code is BSD licensed, so you can do pretty much anything you want with it.  We&#8217;ll be adding a few more features to the Ruby version in the following days and eventually follow with similar bindings for other languages.</p>
<p>Looking forward to your feedback!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.directededge.com/2009/03/11/bindings-project-on-github-starting-with-ruby-bindings/feed/</wfw:commentRss>
		</item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 4.473 seconds --><!-- Cached page generated by WP-Super-Cache on 2009-07-06 19:00:13 -->
