<?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>emphess .NET &#187; Entrepreneurship</title>
	<atom:link href="http://www.emphess.net/category/entrepreneurship/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.emphess.net</link>
	<description>Freshly Draught Code</description>
	<lastBuildDate>Fri, 11 Nov 2011 11:57:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Zuckerberg&#8217;s Keynote at  f8 Facebook Developer Conference</title>
		<link>http://www.emphess.net/2010/04/21/zuckerbergs-keynote-at-f8-facebook-developer-conference/</link>
		<comments>http://www.emphess.net/2010/04/21/zuckerbergs-keynote-at-f8-facebook-developer-conference/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 18:19:23 +0000</pubDate>
		<dc:creator>Christoph Menge</dc:creator>
				<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Open Graph]]></category>

		<guid isPermaLink="false">http://www.emphess.net/?p=198</guid>
		<description><![CDATA[Mark Zuckerberg&#8217;s short keynote at f8 (it&#8217;s being repeated there, just head over!) was quite interesting. In general, I&#8217;m not really surprised because the vision of facebook has always been to give an identity to people and to minimize the overhead that is needed to get in touch. The announcements that have been made today [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.facebook.com/zuck">Mark Zuckerberg&#8217;s</a> short <a href="http://apps.facebook.com/feightlive/">keynote at f8</a> (it&#8217;s being repeated there, just head over!) was quite interesting. In general, I&#8217;m not really <em>surprised</em> because the vision of facebook has always been to give an identity to people and to minimize the overhead that is needed to get in touch. The announcements that have been made today are basically just the logical next steps. The implications on both the product development and on the technical side are quite far-reaching, however, because there will indeed be a massive reduction in friction and the overhead for developing facebook apps is just minimal. <strong>Most importantly: the semantic web is coming. Now.</strong></p>
<h2>Credits</h2>
<p>Facebook offers a kind of generic currency &#8211; facebook credits. This is still in closed beta, but according to Mark Zuckerberg, you can already get in touch with them to get signed up. Again, this makes developing a payment-enabled web application much easier. And it probably will make a huge lot of money for facebook.</p>
<h2>Open Graph API</h2>
<p>In short, there&#8217;s a new API called &raquo;<a href="http://developers.facebook.com/docs/api">Open Graph</a>&laquo;. Apparently, this API is much more simple that the old facebook API which is why I believe this will be a very powerful system. It will also save me from doing a long research which of the .NET facebook API wrappers is best &#8211; they are all obsolete as of now. Facebook promises that you won&#8217;t need to change your API calls in the future though. In the past, there have been quite a number of revisions of the API, often with breaking changes. The new API promises to be a lot more simple, but I have quite a set of questions in the back of my head as of now.</p>
<p>This simple API is also the web-wide return of the IFRAME. And here is my like button, with the <a href="http://techcrunch.com/2010/04/21/facebook-like-button-evil/">evil</a> color scheme (which looks just the like the normal?):<br />
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.emphess.net%2F2010%2F04%2F21%2Fzuckerbergs-keynote-at-f8-facebook-developer-conference%2F&amp;layout=standard&amp;show-faces=true&amp;width=600&amp;action=like" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height: 80px;"></iframe><br />
Note that this won&#8217;t show anything useful if you don&#8217;t have a facebook cookie set, which is quite annoying I believe.</p>
<p>If you want to have the your own web-wide &#8220;Like&#8221; button, here you go:<br />
<span id="more-198"></span></p>
<pre class="brush: html">
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.example.com&quot;&gt;&lt;/iframe&gt;
</pre>
<p>That&#8217;s it. Fin. The official cooperation partners has the like button yet. You can find the <a href="http://developers.facebook.com/docs/reference/plugins/like">new facebook like button documentation</a> on their platform, which will also generate above code for you.</p>
<p>Due to the fact that this is an IFRAME, the hosting site of the IFRAME really doesn&#8217;t get any information about you, which might be interesting in case you don&#8217;t really trust the site. <strong>However, facebook will know you visited that site</strong> &#8211; kind of a problem for those pages you don&#8217;t really trust.</p>
<p>Most importantly, however, the Open Graph is a very strong move towards the semantic web. Instead of storing lots of free-form information, facebook&#8217;s open graph will allow to store semantically enriched information. You can see the new facebook like button also on pages such as <a href="http://www.imdb.com">imdb.com</a> and if you &#8220;like&#8221; a movie there, it will pop up in your facebook profile &#8211; under the movies section! <strong>This is not just a gimmick</strong>. </p>
<p>This will be one of the most fundamental developments we have seen in the Internet. It&#8217;s easy to say that because Tim Berners-Lee predicted it. Facebook brought together some really important players and they will massively grow that semantic graph. Therefore, facebook&#8217;s content and ad-targeting will soon outperform anything we&#8217;ve ever seen on the net. Amazon suggestions? Google AdWords? Forget it! </p>
<p>To use a not-so-good example (see comments): &#8220;Golf&#8221;. If you google for &#8220;Golf&#8221;, Google has no idea what you mean. The sport? The car? Or one of the <a href="http://en.wikipedia.org/wiki/Golf_%28disambiguation%29">other uses of the word &#8220;Golf&#8221;</a>? That&#8217;s why Google is keen on storing some additional information, especially your search history. If you have searched &#8220;stableford&#8221; before, you&#8217;re likely to be looking for the sport &#8220;Golf&#8221;. But the thing is: Facebook will be able to know even if you haven&#8217;t explicitly searched anything before, in case you (or your friends) are fans of the sport on facebook (or perhaps of a Volkswagen fanclub&#8230;).</p>
<p>What&#8217;s left in that puzzle, of course, is user behaviour: Do users really want this? Will they actually &#8220;like&#8221; everything around the world&#8217;s webpages? I guess so &#8211; after all, you&#8217;re not giving away anything it seems. You can interact with others, make a (small) statement and above all, be kept up-to-date through web hooks. So there is something to gain and little to lose for end-users &#8211; apart form getting a lot more transparent. </p>
<p>I&#8217;m very interested to see the full ontology they developed for Open Graph. So far, the examples shown are quite simple:</p>
<pre class="brush: html">
&lt;meta property=&quot;og:type&quot; content=&quot;band&quot; /&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Green Day&quot; /&gt;
&lt;meta property=&quot;og:genre&quot; content=&quot;Punk&quot; /&gt;
&lt;meta property=&quot;og:city&quot; content=&quot;Berkeley&quot; /&gt;
</pre>
<h2>Open Graph API Call Examples</h2>
<p>These examples have been presented by Head of Platform Products Bret Taylor at f8 &#8211; you can check them out just by clicking, of course:<br />
<a href="http://graph.facebook.com/btaylor" target="_blank">http://graph.facebook.com/btaylor</a><br />
<a href="http://graph.facebook.com/btaylor/groups">http://graph.facebook.com/btaylor/groups</a><br />
<a href="http://graph.facebook.com/btaylor/likes">http://graph.facebook.com/btaylor/likes</a><br />
<a href="http://graph.facebook.com/btaylor/videos">http://graph.facebook.com/btaylor/videos</a></p>
<p>For example, when you call the first one, you&#8217;ll receive some basic information about Bret Taylor:</p>
<pre class="brush: jscript">
{
   &quot;id&quot;: &quot;220439&quot;,
   &quot;name&quot;: &quot;Bret Taylor&quot;,
   &quot;first_name&quot;: &quot;Bret&quot;,
   &quot;last_name&quot;: &quot;Taylor&quot;,
   &quot;link&quot;: &quot;http://www.facebook.com/btaylor&quot;
}
</pre>
<p>You will need an authentication token for some of these, however. Speaking of authentication: facebook will move to <a href="http://oauth.net/">OAUTH 2.0</a> in the future!</p>
<h2>Web Hooks</h2>
<p>&#8220;Don&#8217;t call us, we call you&#8221;: facebook will allow you to register Web Hooks. That will enable you &#8216;get a call&#8217; from facebook every time certain information changes, so this allows you to synchronize with information as soon as they are updated in facebook by some user and vice versa. This is very interesting, but I&#8217;m very interested to see what limitations we will be seeing with this &#8211; I can think of several ways to abuse this.</p>
<h2>Really Open?</h2>
<p>The main question here is whether this graph is really open. As Zuck said, you can &#8220;write back information into facebook&#8217;s open graph&#8221;. Well. So the information goes back to facebook &#8211; this is quite beneficial for facebook, of course. On the other hand, facebook changed their policy so you&#8217;re no longer required to &#8220;forget&#8221; all user information after 24 hours. You&#8217;re now allowed to persist that information if the user allows you to do so.</p>
<p>One of the things that really trouble me, however, is that this will have facebook aggregate a LOT more information about you. Suppose you visited some site that you don&#8217;t want to share with your friends and that you really wouldn&#8217;t want to tell anyone about &mdash; facebook already knows it.</p>
<p>As of today, quite a number of projects that use facebook&#8217;s new technology are going to launch, among them <a href="http://www.docs.com">Docs.com &#8211; an interesting product by Microsoft</a> that let&#8217;s you share your office documents with your friends. Docs.com Apparently, Microsoft&#8217;s investment in facebook <a href="http://techcrunch.com/2010/04/21/microsoft-facebook-docs-com/">includes some large-scale co-operations.</a></p>
<div class="tweetthis" style="text-align:right;"><p> <a rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Zuckerberg%E2%80%99s+Keynote+at+f8+Facebook+Developer+Conference+http%3A%2F%2Femphess.net%2F%3Fp%3D198" title="Post to Twitter"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a rel="nofollow" class="tt" href="http://delicious.com/post?url=http://www.emphess.net/2010/04/21/zuckerbergs-keynote-at-f8-facebook-developer-conference/&amp;title=Zuckerberg%E2%80%99s+Keynote+at++f8+Facebook+Developer+Conference" title="Post to Delicious"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/delicious/tt-delicious.png" alt="Post to Delicious" /></a> <a rel="nofollow" class="tt" href="http://digg.com/submit?url=http://www.emphess.net/2010/04/21/zuckerbergs-keynote-at-f8-facebook-developer-conference/&amp;title=Zuckerberg%E2%80%99s+Keynote+at++f8+Facebook+Developer+Conference" title="Post to Digg"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/digg/tt-digg.png" alt="Post to Digg" /></a> <a rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.emphess.net/2010/04/21/zuckerbergs-keynote-at-f8-facebook-developer-conference/&amp;t=Zuckerberg%E2%80%99s+Keynote+at++f8+Facebook+Developer+Conference" title="Post to Facebook"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.emphess.net/2010/04/21/zuckerbergs-keynote-at-f8-facebook-developer-conference/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Pimps its Webmaster Tools</title>
		<link>http://www.emphess.net/2010/04/15/google-pimps-its-webmaster-tools/</link>
		<comments>http://www.emphess.net/2010/04/15/google-pimps-its-webmaster-tools/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 11:00:54 +0000</pubDate>
		<dc:creator>Christoph Menge</dc:creator>
				<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Webmaster]]></category>

		<guid isPermaLink="false">http://www.emphess.net/?p=186</guid>
		<description><![CDATA[Google&#8217;s Webmaster tools underwent some changes over the last few weeks, but most of them had been minor. Now, they released a completely overhauled &#8220;Top Search Queries&#8221; section and it&#8217;s really cool. Most importantly, Webmaster tools will no longer indicate your page is on position x for a given keyword, but it will show how [...]]]></description>
			<content:encoded><![CDATA[<p>Google&#8217;s <a href="https://www.google.com/webmasters/tools">Webmaster tools</a> underwent some changes over the last few weeks, but most of them had been minor. Now, they released a <a href="http://googlewebmastercentral.blogspot.com/2010/04/more-data-and-charts-in-top-search.html">completely overhauled &#8220;Top Search Queries&#8221; section</a> and it&#8217;s really cool. Most importantly, Webmaster tools will no longer indicate your page is on position x for a given keyword, but it will show how often it appeared on what page (e.g. how often your site appeared on page three for the keyword &#8220;buzzword&#8221; and how many people clicked it). The old way of doing it was obviously incompatible with customized search results and therefore was often indicating very confusing positions. It once told me I was on pos #1 for <a href="http://www.google.com/search?rls=en&#038;hl=en&#038;q=linq">the Keyword &#8220;Linq&#8221;</a>&#8230;</p>
<p><a href="http://www.emphess.net/wp-content/uploads/2010/04/gwt.png"><img src="http://www.emphess.net/wp-content/uploads/2010/04/gwt-300x178.png" alt="A screenshot of webmaster tools in action" title="Google Webmaster Tools" width="300" height="178" class="alignright size-medium wp-image-187" /></a></p>
<p>They also added fancy charts (although I suspect these don&#8217;t work accurately yet, because of that peak you see in the screenshot) that look like <a href="https://www.google.com/analytics/">Google Analytics</a> a lot. The downside is that clicking on google search results will link to another google page which will then redirect you to the target &#8211; not exactly big trouble, but annoying when you&#8217;re used to copying links into your blog posts <img src='http://www.emphess.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div class="tweetthis" style="text-align:right;"><p> <a rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Google+Pimps+its+Webmaster+Tools+http%3A%2F%2Femphess.net%2F%3Fp%3D186" title="Post to Twitter"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a rel="nofollow" class="tt" href="http://delicious.com/post?url=http://www.emphess.net/2010/04/15/google-pimps-its-webmaster-tools/&amp;title=Google+Pimps+its+Webmaster+Tools" title="Post to Delicious"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/delicious/tt-delicious.png" alt="Post to Delicious" /></a> <a rel="nofollow" class="tt" href="http://digg.com/submit?url=http://www.emphess.net/2010/04/15/google-pimps-its-webmaster-tools/&amp;title=Google+Pimps+its+Webmaster+Tools" title="Post to Digg"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/digg/tt-digg.png" alt="Post to Digg" /></a> <a rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.emphess.net/2010/04/15/google-pimps-its-webmaster-tools/&amp;t=Google+Pimps+its+Webmaster+Tools" title="Post to Facebook"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.emphess.net/2010/04/15/google-pimps-its-webmaster-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>StackExchange Changes Everything, Risks a Lot</title>
		<link>http://www.emphess.net/2010/04/13/stackexchange-changes-everything-risks-a-lot/</link>
		<comments>http://www.emphess.net/2010/04/13/stackexchange-changes-everything-risks-a-lot/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 21:12:52 +0000</pubDate>
		<dc:creator>Christoph Menge</dc:creator>
				<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[StackExchange]]></category>
		<category><![CDATA[Wikorum]]></category>

		<guid isPermaLink="false">http://www.emphess.net/?p=155</guid>
		<description><![CDATA[The wikorum-engine StackExchange just announced they completely changed their business model. Basically, instead of buying a license from them, you now need to suggest a concept for a site. That concept can then be voted for by the community and if you can prove you have enough people interested, they will set up the site. [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.wikorum.net">wikorum-engine</a> <a href="http://stackexchange.net">StackExchange</a> just announced they <a href="http://blog.stackexchange.com/post/518474918/stack-exchange-2-0">completely changed their business model</a>. Basically, instead of buying a license from them, you now need to suggest a concept for a site. That concept can then be voted for by the community and if you can prove you have enough people interested, they will set up the site. The whole site is then community-owned and will be operated by <a href="http://stackoverflow.com">StackOverflow</a>. <a href="http://blog.stackexchange.com/post/518474918/stack-exchange-2-0">The details are much more complicated, of course</a>. I still consider StackExchange a commercial technology. They don&#8217;t charge you for the technology, but they don&#8217;t let you participate in any effort you put in there, either.</p>
<h2>That Domain-Issue</h2>
<p>There is something peculiar about this I really don&#8217;t understand: If the <em>domain</em> is actually owned by the individual who suggested the concept, the FogCreek will never have a reliable revenue stream because the owner of the domain is the master &mdash; he could simply switch to a different technology, if he manages to <strong>keep the links intact</strong>, which might be a very <a href="http://shapado.com/questions/when-importing-stackexchange-sites-do-links-change">important technology-factor</a> when choosing some alternate technology.</p>
<p>On the other hand, if the domain is supposed to be owned by <a href="http://www.fogcreek.com">FogCreek</a>, they have to buy every domain that is being suggested in the forum that exact second, otherwise domain grabbers will just &#8230; well, grab it (or even other users signed in). <em>Democratic voting for domain names?</em> I don&#8217;t think so. Personally, I would <strong>never</strong> even write down a domain name -especially not in a forum- if I like it and it&#8217;s not taken, I&#8217;d simply buy it &#8211; that gives me a year to think about it.</p>
<h2>Not Convincing</h2>
<p>Summing it up, <em>I don&#8217;t think the move to their new model is a wise decision</em>. My primary concerns are:</p>
<ul>
<li>The net is a trial-and-error place. You set something up, and see if it works. That might not be a wise model, but it is very democratic and has proven to work fine. Perhaps because it is not so &#8216;wise&#8217;. Note that wisdom grows from experience, inherently incapacitating certain types of innovation, namely those that completely contradict experience made.</li>
<li>The code remains closed, so real customizations are not possible. This is a major flaw. I&#8217;ve got a dozen ideas of sites that could become really, really helpful to people, but they need some additional features or some heavy customization that is a major pain if you can&#8217;t access the sources. They don&#8217;t even have an XSLT processor you could use as of now&#8230;</li>
<li>If a page does not offer any way to gain revenue, you can&#8217;t invest in it&#8217;s development, both technical development and marketing, where the first is already inhibited by the fact that customization is not possible from the technical side.</li>
<li>This move will dramatically increase commitment to the development of open source clones such as <a href="http://www.osqa.net/">OSQA</a>, which looks very interesting by the way. There is also <a href="http://shapado.com/">Shapado</a>, and I think more will come. Crowd development can be extremely efficient and fast.</li>
</ul>
<p>For all who operate a StackExchange site as of now, there is the cool thing that the site will operate for another three months, or if you have some real action going on, one year for free. That is great, because it allows for an <a href="http://www.osqa.net/2010/03/10/stackexchange-import-a-big-milestone-for-osqa/">easy transition to some other technology</a>. It&#8217;s a bit sad to see that happen to such great technology, but I don&#8217;t believe this will work. Building a community <em>remains</em> a lot of effort, and people won&#8217;t put that effort in if they can&#8217;t call it their baby, can&#8217;t make any revenues, can&#8217;t make any customizations to the code, and can&#8217;t use the page to direct some traffic to other projects, I believe. We&#8217;ll see how it works out. I guess I will establish a small knowledge-base / link list at <a href="http://www.wikorum.net">wikorum.net</a> to aggregate some related information.</p>
<div class="tweetthis" style="text-align:right;"><p> <a rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=StackExchange+Changes+Everything%2C+Risks+a+Lot+http%3A%2F%2Femphess.net%2F%3Fp%3D155" title="Post to Twitter"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a rel="nofollow" class="tt" href="http://delicious.com/post?url=http://www.emphess.net/2010/04/13/stackexchange-changes-everything-risks-a-lot/&amp;title=StackExchange+Changes+Everything%2C+Risks+a+Lot" title="Post to Delicious"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/delicious/tt-delicious.png" alt="Post to Delicious" /></a> <a rel="nofollow" class="tt" href="http://digg.com/submit?url=http://www.emphess.net/2010/04/13/stackexchange-changes-everything-risks-a-lot/&amp;title=StackExchange+Changes+Everything%2C+Risks+a+Lot" title="Post to Digg"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/digg/tt-digg.png" alt="Post to Digg" /></a> <a rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.emphess.net/2010/04/13/stackexchange-changes-everything-risks-a-lot/&amp;t=StackExchange+Changes+Everything%2C+Risks+a+Lot" title="Post to Facebook"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.emphess.net/2010/04/13/stackexchange-changes-everything-risks-a-lot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NoSQL Approaches: Trying to use db4o in the Real World</title>
		<link>http://www.emphess.net/2010/04/12/nosql-approaches-trying-to-use-db4o-in-the-real-world/</link>
		<comments>http://www.emphess.net/2010/04/12/nosql-approaches-trying-to-use-db4o-in-the-real-world/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 22:14:38 +0000</pubDate>
		<dc:creator>Christoph Menge</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[db4o]]></category>
		<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://www.emphess.net/?p=138</guid>
		<description><![CDATA[We&#8217;ve been working a lot on db4o related and db4o based projects lately, and close to completion of the first and most simple product, we really hit a few roadblocks. UPDATE: Just after releasing this article, I found the bug in our code. It&#8217;s not db4o&#8217;s fault after all&#8230; Motivation One thing up front: We [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been working a lot on <a href="http://www.db4o.com">db4o</a> related and db4o based projects lately, and close to completion of the first and most simple product, we really hit a few roadblocks.<br />
<strong>UPDATE: Just after releasing this article, I found the bug in our code. It&#8217;s not db4o&#8217;s fault after all&#8230;</strong></p>
<h2>Motivation</h2>
<p>One thing up front: We don&#8217;t need an <a href="http://en.wikipedia.org/wiki/Object_database">object database</a> for the simple tools we currently build, but we felt it was a good idea to get some acquaintance with the technology, because we will certainly need it for our (stealth) startup &#8220;pactas&#8221; soon. In pactas, the data structure is really complicated (with a fancy class hierarchy) and it probably will change very frequently.</p>
<p>Also, since I am such a big fan of reusability, we really develop a web engine &#8211; a framework that allows us to reuse a lot of the code for different projects and make sure most of our code has been tested thoroughly in the field. This proves to be a significant design decision when it comes to data modeling, and while I&#8217;m very happy with the decision, it certainly makes development harder.</p>
<h2>The Problem</h2>
<p>So, in time with the release of our simple <a href="http://www.backlink-tracker.net">backlink tracker</a>, one of our development database files started to show strange behaviour &#8211; a certain query (via LINQ) would not order objects anymore &#8211; the <code>orderby</code>-clause seemingly was completely ignored. Our live server even came up with an &#8220;Invalid DateTimeKind specified&#8221; exception when trying to perform the query! What&#8217;s worse: The problem kept occurring from time to time, but it was not reproducible! Byzantine errors are clearly my favourite&#8230; </p>
<p>We thought the issue might be related to the current development/unstable versions of db4o that we were using (7.12 and 7.13). Using the stable version of db4o (7.4) proved difficult, because the old LINQ provider falls back to LINQ to Objects very often, which requires to fetch all objects in question from the database &#8211; that is very, very slow for a lot of objects, so we had to abandon that. We clearly wanted to stick to LINQ for a number of reasons (compile-time checking, readability, reusability).</p>
<p>Obviously the problem is related to the <code>orderby</code> operation on <code>DateTime</code> fields. I tried to modify the query, removed grouping because I feared it might be unstable (<em>warning</em>: the <em>sort</em> operation is, in fact, unstable! Unstable grouping would be useless, but the grouping is stable so that&#8217;s fine), even debugged the db4o code, but I couldn&#8217;t find any problem in there. Since the code is rather complex and that was the first time I took a look at it, I was happy to find some of the relevant code at all. <font style="text-decoration: line-through;">Somewhere in the deeps of it, something screwed up.</font> I didn&#8217;t want to spend too much time on that since I had to chew some particle physics on the side. </p>
<h2>Solutions?</h2>
<p>At the time of writing this (in fact, yesterday) I had something like a hotfix, but it turned out it&#8217;s completely nonsense &#8211; it worked around our internal bug in a very peculiar way. No more, no less.</p>
<p>When talking about this, somebody mentioned that it wasn&#8217;t such a good idea to use <code>DateTime</code> at all, and we should store the ticks instead. That lead to two long discussions with my co-ed Christian. We concluded: First, the power of object databases is that they do not force you to hack around and find different representations for your data (which raises the bar for object databases). The one big shortcoming of SQL is that it forces you to find a second, equally good, but different representation of your data and you need to translate between these representations all the time. You need to synchronize them. And you lose a lot of fancy features (such as lists, generics, inheritance, etc.) on the way.</p>
<p>Secondly, Christian suggested that object databases suffer from <a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html">leaky abstractions</a> badly, in that they break encapsulation in a way that leaks out a hell of a lot of implementation details. As Joel puts it: &#8220;All non-trivial abstractions, to some degree, are leaky.&#8221; The point is: <font style="text-decoration: strikethrough">With the error we&#8217;re currently encountering, it&#8217;s becoming a <em>real problem</em>. This is not an <a href="http://www.codinghorror.com/blog/2009/06/all-abstractions-are-failed-abstractions.html">imperfect piece of architecture</a>, it&#8217;s an exception in a database query. It kills the app dead! Boom!</font></p>
<p>In order to get activation [depth] straight, db4o needs to know how .NET&#8217;s containers work internally &#8211; that is clearly a detail that should be hidden, but db4o knows about it. db4o also takes care of that, but it leads to some messy issues. There is special code in db4o that handles containers, non-trivial objects such as <code>strings</code>, <code>DateTime</code> (which are non-trivial because they use 62 bits for the actual ticks and 2 bits for the <a href="http://msdn.microsoft.com/en-us/library/shx7s921.aspx">DateTimeKind</a>) and Lists. This is an implementation detail of the .NET framework, and it might change over time. There&#8217;s <a href="http://tracker.db4o.com/browse/COR-1582">been a bug with <code>Map</code></a>, and I&#8217;m almost sure there is a bug with <code>DateTime</code>, too. Don&#8217;t get me wrong: The fact that <em>some kind of mapping</em> is needed is a somewhat generic (if not <em>the</em>) problem of serialization, it&#8217;s not really db4o-specific, and cannot be eliminated. In Hibernate, there is also a lot of code that handles the mapping of lists and the like but it doesn&#8217;t rely on implementation detail, thus it&#8217;s not (as) leaky.</p>
<h2>Back to SQL?</h2>
<p>Here&#8217;s the thing: I&#8217;d be beneficial to have a storage that is <em>independent of the actual implementation on top</em>, because it decouples the data store from the application which is <a href="http://developer.db4o.com/Forums/tabid/98/aff/4/aft/9847/afv/topic/Default.aspx">not what db4o does</a>. But wait, that is exactly what SQL is, right? Indeed: SQL forces you to map (or to cut down) your stuff to it&#8217;s internal features. A list becomes a foreign key on the other table, but that doesn&#8217;t play well with derived types, generics, etc&#8230; This is tricky as we all know, and <a href="http://www.ohloh.net/p/nhibernate/analyses/latest">you need lots of code to do that</a>. </p>
<p>Worse, SQL forces you do that mapping for everything, including your own classes, and it demands a schema for every type of object &#8211; this is not what I want. I&#8217;d like to see a set of base objects in an object database which are natively understood by the DB. These objects can be mapped from and to by a layer which may be part of the db, or can be added manually if you need something very special. Still, it should allow to store your object in the database with all it&#8217;s magic, only that known objects will be translated, e.g. a <code>DateTime</code> will be stored as <code>long Ticks</code> and a <code>DateTimeKind</code> flag separated, making comparison operations easier (note that the comparison only works on the ticks: Whether the time is local or UTC is not considered by .NET in comparisons). Lists will be unfolded into an internal tree representation if indexed, so they become much easier to cope with for the database. That would also make <a href="http://www.gamlor.info/wordpress/?p=1069">managing m:n relations</a> easier, since they could then be viewed as bilateral relationships &#8211; something you often need. Right now, they&#8217;re unilateral, thereby requiring some additional management on your behalf.</p>
<p>Migrating to SQL is clearly an option for this product, since data couldn&#8217;t fit SQL any better, but that doesn&#8217;t solve the issue for our pactas project, where we certainly will need schema-less data, complex object hierarchies, etc.</p>
<p>However, there are a few issues that <font style="text-decoration: line-through;">remain unresolved as of now and they do qualify as show stoppers</font> :</p>
<ul>
<li style="text-decoration: line-through;">There&#8217;s an irreproducible bug that potentially wrecks the db</li>
<li>There&#8217;s a <a href="http://www.emphess.net/2010/03/16/db4o-queries-on-large-datasets-and-a-bit-of-linq/">nasty performance issue with larger amounts of data</a></li>
</ul>
<h2>Alternatives</h2>
<p>I&#8217;m quite dissatisfied that we <font style="text-decoration: line-through;">have to abandon db4o at this stage</font>, because I believe it&#8217;s the best kind of serialization I&#8217;ve ever experienced. It&#8217;s <a href="http://blog.wekeroad.com/2010/02/06/nosql-a-practical-approach-part-1">perfectly simple</a>, it&#8217;s fast and most importantly, code-centric. If reusability is a concern, having the database structure and/or the ORM mapper dictate the objects is a major pain.</p>
<p><a href="http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework">Entity Framework 4 (EF4)</a> promises to handle this a lot better through <a href="http://blogs.msdn.com/adonet/archive/2009/05/12/sneak-preview-model-first-in-the-entity-framework-4-0.aspx">&#8220;Model First&#8221;</a> and <a href="http://blogs.msdn.com/efdesign/archive/2009/06/10/code-only.aspx">&#8220;Code Only&#8221;</a>, but I am still a bit afraid of EF because it doesn&#8217;t appear to be anything near lightweight and we will need schemaless storage for our future products anyways.</p>
<p><a href="http://www.versant.com">Versant</a>, which bought db4o some time ago also offers its large-scale object database, which seems to suit large web-applications a lot better. First, it&#8217;s certainly made for huge amounts of data (unlike db4o, which comes from an embedded background and <a href="http://www.sdtimes.com/link/33117">is aimed at database sizes in the low GB area</a>, but <a href="https://developer.db4o.com/Documentation/Reference/db4o-7.4/java/reference/html/reference/tuning/performance_hints/increasing_the_maximum_database_file_size.html">supports up to 254 GB per file</a>) and <a href="http://developer.db4o.com/Forums/tabid/98/aff/4/aft/9855/afv/topic/Default.aspx">handles multi-threading better</a>. Also, since db4o <a href="http://www.itwire.com/sponsored-announcements/38149-versant-expands-db4o-open-source-licensin">now moved to v3 of the GPL</a>, it may not be freely usable in non-open source web applications anymore, so both solutions now have a price tag.</p>
<p>There is also an <a href="http://www.versant.com/en_US/solutions/oem_program/">ISV/OEM empowerment program</a> for Versant&#8217;s Object Database, which seems to make it affordable, but I haven&#8217;t looked at it in detail yet. Over the next weeks, I will have to evaluate a few of those other NoSQL solutions such as <a href="http://cassandra.apache.org/">Cassandra</a> and <a href="www.mongodb.org/">MongoDB</a>, just to name two totally different options. </p>
<h2>Aftermath</h2>
<p>So what was the issue, after all? db4o did not screw up, we did: Take a blend of local and UTC time based on a completely random criterion, add two spoons of daylight savings time changes, add some misconfigured timezone on the server, bake for two weeks at 500 &deg; C and pling! You got yourself some really strange issue cake. Lessons learned:</p>
<ul>
<li>Debugging issue with object databases is harder than with RDBMS because the information is not chopped up.</li>
<li>Do code reviews. Do code reviews.</li>
<li>There aren&#8217;t too many alternatives to db4o, after all</li>
<li>With the elaborated architecture and code-centric design we currently have, going back to SQL is a huge pain, and we won&#8217;t do it</li>
</ul>
<p>All serialization is painful.</p>
<div class="tweetthis" style="text-align:right;"><p> <a rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=NoSQL+Approaches%3A+Trying+to+use+db4o+in+the+Real+World+http%3A%2F%2Femphess.net%2F%3Fp%3D138" title="Post to Twitter"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a rel="nofollow" class="tt" href="http://delicious.com/post?url=http://www.emphess.net/2010/04/12/nosql-approaches-trying-to-use-db4o-in-the-real-world/&amp;title=NoSQL+Approaches%3A+Trying+to+use+db4o+in+the+Real+World" title="Post to Delicious"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/delicious/tt-delicious.png" alt="Post to Delicious" /></a> <a rel="nofollow" class="tt" href="http://digg.com/submit?url=http://www.emphess.net/2010/04/12/nosql-approaches-trying-to-use-db4o-in-the-real-world/&amp;title=NoSQL+Approaches%3A+Trying+to+use+db4o+in+the+Real+World" title="Post to Digg"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/digg/tt-digg.png" alt="Post to Digg" /></a> <a rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.emphess.net/2010/04/12/nosql-approaches-trying-to-use-db4o-in-the-real-world/&amp;t=NoSQL+Approaches%3A+Trying+to+use+db4o+in+the+Real+World" title="Post to Facebook"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.emphess.net/2010/04/12/nosql-approaches-trying-to-use-db4o-in-the-real-world/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Experiments in Marketing &#8211; Coining a New Word</title>
		<link>http://www.emphess.net/2010/03/29/experiments-in-marketing-coining-a-new-word/</link>
		<comments>http://www.emphess.net/2010/03/29/experiments-in-marketing-coining-a-new-word/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 00:53:15 +0000</pubDate>
		<dc:creator>Christoph Menge</dc:creator>
				<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[FoundersLoft]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[StackExchange]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[Wikorum]]></category>

		<guid isPermaLink="false">http://www.emphess.net/?p=130</guid>
		<description><![CDATA[We set up a StackExchange site for Entrepreneurs in Germany. Now, what do you call a StackExchange type of site? We&#8217;re proposing &#187;Wikorum&#171;. What do you think about it? You can vote and comment over at meta.StackExchange.com, or comment right here of course! This is an interesting experiment&#8230; I&#8217;m interested to see how it works [...]]]></description>
			<content:encoded><![CDATA[<p>We set up a <a href="http://stackexchange.com/">StackExchange</a> site <a href="http://foundersloft.net">for Entrepreneurs in Germany</a>. Now, what do you call a StackExchange type of site? We&#8217;re proposing &raquo;<a href="http://www.wikorum.net">Wikorum</a>&laquo;. What do you think about it? You can <a href="http://meta.stackexchange.com/questions/5122/what-do-you-refer-to-the-stackexchange-type-of-sites-how-about-wikorum">vote and comment over at meta.StackExchange.com</a>, or comment right here of course!</p>
<p>This is an interesting experiment&#8230; I&#8217;m interested to see how it works out <img src='http://www.emphess.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="tweetthis" style="text-align:right;"><p> <a rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Experiments+in+Marketing+%E2%80%93+Coining+a+New+Word+http%3A%2F%2Femphess.net%2F%3Fp%3D130" title="Post to Twitter"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a rel="nofollow" class="tt" href="http://delicious.com/post?url=http://www.emphess.net/2010/03/29/experiments-in-marketing-coining-a-new-word/&amp;title=Experiments+in+Marketing+%E2%80%93+Coining+a+New+Word" title="Post to Delicious"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/delicious/tt-delicious.png" alt="Post to Delicious" /></a> <a rel="nofollow" class="tt" href="http://digg.com/submit?url=http://www.emphess.net/2010/03/29/experiments-in-marketing-coining-a-new-word/&amp;title=Experiments+in+Marketing+%E2%80%93+Coining+a+New+Word" title="Post to Digg"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/digg/tt-digg.png" alt="Post to Digg" /></a> <a rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://www.emphess.net/2010/03/29/experiments-in-marketing-coining-a-new-word/&amp;t=Experiments+in+Marketing+%E2%80%93+Coining+a+New+Word" title="Post to Facebook"><img class="nothumb" src="http://www.emphess.net/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.emphess.net/2010/03/29/experiments-in-marketing-coining-a-new-word/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

