<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jb in a nutshell: Category db4o</title>
    <link>http://evain.net/blog/articles/category/db4o</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>LINQ Expression Trees on the Compact Framework</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/224749567/" title="Red Church, Blue Sky by Jb Evain, on Flickr"&gt;&lt;img src="http://farm1.static.flickr.com/90/224749567_0e49c30cd5.jpg" width="500" height="333" alt="Red Church, Blue Sky" style="border: 2px solid black" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;A week ago, I was &lt;a href="http://evain.net/blog/articles/2008/09/14/c-3-and-linq-on-net-2"&gt;writing&lt;/a&gt; about the ability to use &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt;&amp;#8217;s System.Core to run C# 3 and &lt;span class="caps"&gt;LINQ&lt;/span&gt; applications on .net 2.&lt;/p&gt;


	&lt;p&gt;A few months ago, I was &lt;a href="http://evain.net/blog/articles/2008/02/06/an-elegant-linq-to-db4o-provider-and-a-few-linq-tricks"&gt;writing&lt;/a&gt; about the new &lt;span class="caps"&gt;LINQ&lt;/span&gt; provider that friends at &lt;a href="http://developer.db4o.com"&gt;db4o&lt;/a&gt; released. This &lt;span class="caps"&gt;LINQ&lt;/span&gt; provider uses &lt;span class="caps"&gt;LINQ&lt;/span&gt; expression trees to optimize &lt;span class="caps"&gt;LINQ&lt;/span&gt; queries, turning them into db4o&amp;#8217;s native query language.&lt;/p&gt;


	&lt;p&gt;Today I&amp;#8217;m going to write about a cute new hack from our friends at db4o.&lt;/p&gt;


	&lt;p&gt;If the 3.5 version of the Compact Framework comes with a System.Core, and a &lt;span class="caps"&gt;LINQ&lt;/span&gt; to objects implementation, it doesn&amp;#8217;t contain the namespace System.Linq.Expressions, which is used by all optimized &lt;span class="caps"&gt;LINQ&lt;/span&gt; providers. What those fine folks did, was simply to take Mono&amp;#8217;s implementation of this namespace. There was one issue with that approach. Expression Trees can be compiled at runtime, and that uses System.Reflection.Emit, that the Compact Framework doesn&amp;#8217;t have.&lt;/p&gt;


	&lt;p&gt;A nice thing is that folks at &lt;a href="http://www.mainsoft.com"&gt;Mainsoft&lt;/a&gt; contributed to Mono&amp;#8217;s System.Core an expression interpreter, which allows you to use the full &lt;span class="caps"&gt;LINQ&lt;/span&gt; expression trees without using System.Reflection.Emit. They sent me the patches they have for the expression interpreter to make it pass the full test suite we have, so I&amp;#8217;ll integrate it shortly.&lt;/p&gt;


	&lt;p&gt;And voilà, just by using Mono&amp;#8217;s implementation of System.Core, and by hacking a little in it, to make it compile on the Compact Framework, they&amp;#8217;ve been able to produce a new assembly, System.Linq.Expressions.dll. You just have to reference it in your Compact Framework project, and it will let you use &lt;span class="caps"&gt;LINQ&lt;/span&gt; expression trees, which allows you to write optimized &lt;span class="caps"&gt;LINQ&lt;/span&gt; providers for the Compact Framework.&lt;/p&gt;


	&lt;p&gt;Of course, this is completely open-source and licensed under the &lt;span class="caps"&gt;MIT&lt;/span&gt;/X11. For now, you can find the code in &lt;a href="https://source.db4o.com/db4o/trunk/db4o.net/Libs/compact-3.5/System.Linq.Expressions/"&gt;db4o&amp;#8217;s repository&lt;/a&gt;, but I&amp;#8217;ll backport the changes they did to the &lt;span class="caps"&gt;LINQ&lt;/span&gt; expression interpreter, so that people that want to use it can use our code base directly.&lt;/p&gt;


	&lt;p&gt;Congrats to you guys for making the finest choice in the third party code you ship!&lt;/p&gt;</description>
      <pubDate>Mon, 22 Sep 2008 19:59:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:e19d5d22-0fc9-46fa-bab3-dbf39cc1ec50</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/09/22/linq-expression-trees-on-the-compact-framework</link>
      <category>Mono</category>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/515</trackback:ping>
    </item>
    <item>
      <title>Sharpen, an Open Source Java to C# converter</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/2435496909/" title="Dandelion by Jb Evain, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3207/2435496909_2218937b8c.jpg" width="500" height="333" alt="Dandelion" style="border: 2px solid black" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Today folks at &lt;a href="http://developer.db4o.com/"&gt;db4o&lt;/a&gt; released &lt;a href="http://developer.db4o.com/Resources/view.aspx/Reference/Sharpen"&gt;Sharpen&lt;/a&gt;, an open source Java to C# converter.&lt;/p&gt;


	&lt;p&gt;Am happy to see this coming, as it is soming I&amp;#8217;ve pushed strongly for when I was working at &lt;a href="http://www.db4o.com"&gt;db4objects&lt;/a&gt;, and was hacking on it, mentored by its main developer, &lt;a href="http://blogs.codehaus.org/people/bamboo/"&gt;Rodrigo&lt;/a&gt;. There I had the chance to &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2006/11/15/new-conventions-for-db4o-on-net.aspx"&gt;improve&lt;/a&gt; the &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2007/04/23/adding-love-to-the-c-sources.aspx"&gt;generated code&lt;/a&gt;, to make it look like hand written code, that follows .net conventions.&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s nothing magic, and requires compromises on both the Java and the generated C#, but it&amp;#8217;s pretty handy, easily hackable, and all in all, damn useful.&lt;/p&gt;


	&lt;p&gt;Rodrigo wrote a &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/05/20/smart-java-to-c-conversion-for-the-masses-with-sharpen.aspx"&gt;nice tutorial&lt;/a&gt; on Sharpen.&lt;/p&gt;


	&lt;p&gt;Time to port your Java applications to the amazing &lt;a href="http://mono-project.com."&gt;Mono&lt;/a&gt;!&lt;/p&gt;</description>
      <pubDate>Tue, 20 May 2008 21:18:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:ca0abb3a-760e-4620-bb79-1e2e0a66a971</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/05/20/sharpen-an-open-source-java-to-c-converter</link>
      <category>Mono</category>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/487</trackback:ping>
    </item>
    <item>
      <title>An elegant LINQ to db4o provider, and a few LINQ tricks</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/2193338507/" title="Statue by Jb Evain, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2398/2193338507_89ef6f1a30.jpg" width="500" height="333" style="border: 2px solid black" alt="Statue" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Last year, when I was working at &lt;a href="http://www.db4o.com/"&gt;db4objects&lt;/a&gt; on &lt;a href="http://developer.db4o.com/"&gt;db4o&lt;/a&gt;, I insisted on the need for db4o to act as a &lt;span class="caps"&gt;LINQ&lt;/span&gt; provider, and with that in mind, prototyped one. I&amp;#8217;am happy today to see a &lt;span class="caps"&gt;LINQ&lt;/span&gt; provider making it to &lt;a href="https://source.db4o.com/db4o/trunk/db4o.net/Db4objects.Db4o.Linq/"&gt;db4o&amp;#8217;s &lt;span class="caps"&gt;SVN&lt;/span&gt;&lt;/a&gt;,  especially as I had the chance to influence its design, as I was also researching &lt;span class="caps"&gt;LINQ&lt;/span&gt; for Mono. For that matters, I find &lt;span class="caps"&gt;LINQ&lt;/span&gt; to db4o&amp;#8217;s design particularly elegant.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ll use that occasion to describe a few &lt;span class="caps"&gt;LINQ&lt;/span&gt; tricks. Hopefully, the folks at db4o won&amp;#8217;t mind if I steal the show. Actually I think it will even unburden my good friend Rodrigo, who&amp;#8217;s apparently tired of blogging.&lt;/p&gt;


	&lt;h3&gt;Making a type queryable with &lt;span class="caps"&gt;LINQ&lt;/span&gt;&lt;/h3&gt;


	&lt;p&gt;Let&amp;#8217;s take db4o&amp;#8217;s example. What you do first is getting an IObjectContainer, with the idea to store and retrieve objects.&lt;/p&gt;


&lt;pre&gt;
using (var container = Db4oFactory.OpenFile ("data.db4o")) {
    // ...
}
&lt;/pre&gt;

	&lt;p&gt;So the goal was to be able to write somethings either like:&lt;/p&gt;


&lt;pre&gt;
var peoples = from container.Query&amp;lt;Person&amp;gt; ()
             where p.Name == "jb" &amp;#38;&amp;#38; p.Age == 25
             select p
&lt;/pre&gt;

	&lt;p&gt;or like:&lt;/p&gt;


&lt;pre&gt;
var peoples = from Person p in container
             where p.Name == "jb" &amp;#38;&amp;#38; p.Age == 25
             select p
&lt;/pre&gt;

	&lt;p&gt;There&amp;#8217;s a few things that we didn&amp;#8217;t like with the first method. First an IObjectContainer already have a Query&amp;lt;T&amp;gt; method, which is used for native queries, and secondly, aesthetically, it doesn&amp;#8217;t look as good as the second one.&lt;/p&gt;


	&lt;p&gt;So we went for the second possibility. The issue is that IObjectContainer doesn&amp;#8217;t implement any interface that the compiler could use to perform &lt;span class="caps"&gt;LINQ&lt;/span&gt; queries on it.&lt;/p&gt;


	&lt;p&gt;The trick here is that when the compiler encounters the form:&lt;/p&gt;


&lt;pre&gt;
from Person p in container
&lt;/pre&gt;

	&lt;p&gt;It will try to compile it as:&lt;/p&gt;


&lt;pre&gt;
container.Cast&amp;lt;Person&amp;gt; ()
&lt;/pre&gt;

	&lt;p&gt;And expect that this Cast&amp;lt;T&amp;gt; returns an IEnumerable&amp;lt;T&amp;gt;, on which he can perform &lt;span class="caps"&gt;LINQ&lt;/span&gt; query. The good news is that this Cast method can very well be an extension method.&lt;/p&gt;


	&lt;p&gt;With that in mind, the entry point of &lt;span class="caps"&gt;LINQ&lt;/span&gt; to db4o is really simple:&lt;/p&gt;


&lt;pre&gt;
public static IDb4oLinqQuery&amp;lt;T&amp;gt; Cast&amp;lt;T&amp;gt;(this IObjectContainer container)
{
    return new Db4oQuery&amp;lt;T&amp;gt;(container);
}
&lt;/pre&gt;

	&lt;p&gt;Now comes the question of what is this IDb4oLinqQuery&amp;lt;T&amp;gt;.&lt;/p&gt;


	&lt;h3&gt;Implementing a lightweight &lt;span class="caps"&gt;LINQ&lt;/span&gt; provider&lt;/h3&gt;


	&lt;p&gt;&lt;span class="caps"&gt;LINQ&lt;/span&gt; is still a pretty new technology, so it&amp;#8217;s not always easy to find good advices from people that are already experienced in the fine art of writing &lt;span class="caps"&gt;LINQ&lt;/span&gt; providers. If I don&amp;#8217;t have the pretension to be one of those experienced guys, I know of at least one folk who used the following trick, and which is happy with it.&lt;/p&gt;


	&lt;p&gt;So today, the standard way of writing a &lt;span class="caps"&gt;LINQ&lt;/span&gt; provider seems to be implementing the interface System.Linq.IQueryable&lt;T&gt;, and to implement a full fledged &lt;span class="caps"&gt;LINQ&lt;/span&gt; provider. &lt;a href="http://blogs.msdn.com/mattwar/"&gt;Matt Warren&lt;/a&gt; have written an excellent &lt;a href="http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx"&gt;series of posts&lt;/a&gt; about it. &lt;span class="caps"&gt;LINQ&lt;/span&gt; to db4o uses some code from his posts. &lt;a href="http://community.bartdesmet.net/blogs/bart/"&gt;Bart de Smet&lt;/a&gt; also wrote &lt;a href="http://community.bartdesmet.net/blogs/bart/archive/2007/04/05/the-iqueryable-tales-linq-to-ldap-part-0.aspx"&gt;a nice one&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;My very first prototype was also following this path, but at that time, we changed it quickly for an excellent reason.&lt;/p&gt;


	&lt;p&gt;Thing is that the IQueryable path is an all or nothing solution. It keeps building an expression tree, until you decide to work on its result, either by calling GetEnumerator, or by calling AsEnumerable on it.&lt;/p&gt;


	&lt;p&gt;Another thing is that db4o is only able to optimize a (comparatively with something like &lt;span class="caps"&gt;LINQ&lt;/span&gt; to &lt;span class="caps"&gt;SQL&lt;/span&gt;) very little subset of the possible &lt;span class="caps"&gt;LINQ&lt;/span&gt; operations. Actually, it can really optimize only Where, Count, OrderBy and ThenBy.&lt;/p&gt;


	&lt;p&gt;And again, here comes the magic of the extension methods. All &lt;span class="caps"&gt;LINQ&lt;/span&gt; operations are actually extension methods on IEnumerable&amp;lt;T&amp;gt;, or on a child of it, like IQueryable&amp;lt;T&amp;gt;.&lt;/p&gt;


	&lt;p&gt;The trick here, was simply to re-define the supported &lt;span class="caps"&gt;LINQ&lt;/span&gt; operations, on a custom interface. And that&amp;#8217;s what the IDb4oLinqQuery interface we talked before is. It&amp;#8217;s simply a marker interface:&lt;/p&gt;


&lt;pre&gt;
public interface IDb4oLinqQuery&amp;lt;T&amp;gt; : IEnumerable&amp;lt;T&amp;gt;
{
}
&lt;/pre&gt;

	&lt;p&gt;And thanks to the C#3 magic, we can redefine the &lt;span class="caps"&gt;LINQ&lt;/span&gt; operations on it:&lt;/p&gt;


&lt;pre&gt;
public static class Db4oLinqQueryExtensions
{
    public static IDb4oLinqQuery&amp;lt;TSource&amp;gt; Where&amp;lt;TSource&amp;gt;(this IDb4oLinqQuery&amp;lt;TSource&amp;gt; self, Expression&amp;lt;Func&amp;lt;TSource, bool&amp;gt;&amp;gt; expression)
    {
        // ..
    }

    public static int Count&amp;lt;TSource&amp;gt;(this IDb4oLinqQuery&amp;lt;TSource&amp;gt; self)
    {
        // ..
    }
}
&lt;/pre&gt;

	&lt;p&gt;The major advantage of this solution, is that it allows the &lt;span class="caps"&gt;LINQ&lt;/span&gt; query to fallback to &lt;span class="caps"&gt;LINQ&lt;/span&gt; to Objects, anytime a &lt;span class="caps"&gt;LINQ&lt;/span&gt; operations is not supported. So by default, is something cannot be optimized, the &lt;span class="caps"&gt;LINQ&lt;/span&gt; to db4o will return all the types for a certain type, and as we fall back to &lt;span class="caps"&gt;LINQ&lt;/span&gt; to Objects, the user will at least get the result it wanted, even if it doesn&amp;#8217;t run at full speed. I think it&amp;#8217;s something that makes this solution really elegant.&lt;/p&gt;


	&lt;p&gt;Let&amp;#8217;s take a detailed example:&lt;/p&gt;


&lt;pre&gt;
var peoples = from Person p in container
             where p.Name == "jb" 
             orderby p.Age
             select new { p.Age }
&lt;/pre&gt;

	&lt;p&gt;The compiler here sees four steps.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;First it use the first Cast trick, that creates an IDb4oLinqQuery of T,&lt;/li&gt;
		&lt;li&gt;Secondly, it call the Where methods defined for IDb4oLinqQuery,&lt;/li&gt;
		&lt;li&gt;Then it does the same for OrderBy, which can be optimized,&lt;/li&gt;
		&lt;li&gt;And then only, as db4o cannot optimize the creation of an anonymous type, it will fall back to &lt;span class="caps"&gt;LINQ&lt;/span&gt; to Objects, but only for the select part, while the two first parts run completely optimized, and almost as fast as the db4o low level query mechanism.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;That&amp;#8217;s really nice if you ask me.&lt;/p&gt;


	&lt;h3&gt;Using an expression tree as a dictionary key&lt;/h3&gt;


	&lt;p&gt;That one is simple.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;LINQ&lt;/span&gt; to db4o caches how a query is created, depending on the expression tree it gets. Thing is that System.Linq.Expression doesn&amp;#8217;t override Equals and GetHashCode, and as the compiler re-creates a whole new tree every time it sees one, hence Expressions are poor candidate for being keys in Dictionary. The trick here is simply to have an IEqualityComparer for Expressions. It&amp;#8217;s seems that it&amp;#8217;s not trivial to implement, but they managed to get a pretty nice one.&lt;/p&gt;


	&lt;h3&gt;Analyzing properties body&amp;#8217;s&lt;/h3&gt;


	&lt;p&gt;This trick is also a simple one, and it&amp;#8217;s the same one that db4o uses for its Native Query functionality, &lt;span class="caps"&gt;LINQ&lt;/span&gt; to db4o uses the Cecil.FlowAnalysis library to read the body of the properties, so they know which fields are impacted by the &lt;span class="caps"&gt;LINQ&lt;/span&gt; query.&lt;/p&gt;


	&lt;h3&gt;That&amp;#8217;s all folks&lt;/h3&gt;


	&lt;p&gt;Kuddos to db4o for such a nice addition, hopefully it&amp;#8217;ll run on Mono soon!&lt;/p&gt;</description>
      <pubDate>Wed, 06 Feb 2008 18:30:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:d3d950a5-0288-462d-b979-8881e8afbe1a</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/02/06/an-elegant-linq-to-db4o-provider-and-a-few-linq-tricks</link>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/472</trackback:ping>
    </item>
    <item>
      <title>It's not Linux, it's COCA-COLA!</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/404420904/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/145/404420904_83c30985b7.jpg" width="500" height="333" alt="Mono Keynote" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt; was really nice!&lt;/p&gt;


	&lt;p&gt;You can find my db4o presentation for my lightning talk &lt;a href="http://evain.net/conf/FOSDEM-db4o.pdf"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Tue, 27 Feb 2007 09:49:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:efe6ac7f-7a3d-49bd-893a-b8a91e61f4df</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2007/02/27/its-not-linux-its-coca-cola</link>
      <category>Mono</category>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/303</trackback:ping>
    </item>
    <item>
      <title>Interviews</title>
      <description>&lt;p&gt;Here are two interviews in French I gave after my talk at Microsoft&amp;#8217;s TechDays in Paris.&lt;/p&gt;


&lt;center&gt;
&lt;embed src="http://images.soapbox.msn.com/flash/soapbox1_1.swf" quality="high" width="412" height="362" wmode="transparent" name="msn_soapbox" type="application/x-shockwave-flash" pluginspage="http://macromedia.com/go/getflashplayer" flashvars="c=v&amp;#38;v=c250ac94-e715-4a25-8dca-2bf2e4bb9bad"&gt;&lt;/embed&gt;&lt;br /&gt;
on &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt;.
&lt;/center&gt;

&lt;center&gt;
        &lt;embed src="http://images.soapbox.msn.com/flash/soapbox1_1.swf" quality="high" width="412" height="362" wmode="transparent" name="msn_soapbox" type="application/x-shockwave-flash" pluginspage="http://macromedia.com/go/getflashplayer" flashvars="c=v&amp;#38;v=e9e52441-fbf4-4e74-a0b0-6d29cad78d7d"&gt;&lt;/embed&gt;&lt;br /&gt;
on &lt;a href="http://www.db4o.com"&gt;db4o&lt;/a&gt;.
&lt;/center&gt;
&lt;br/&gt;

	&lt;p&gt;It has been the best way for me to realize that I &lt;strong&gt;really&lt;/strong&gt; need an haircut. &lt;strong&gt;Now&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;My friend &lt;a href="http://blogs.developpeur.org/patrice/"&gt;Patrice&lt;/a&gt; and his team are uploading all their interviews &lt;a href="http://wygwam.com/WygwamTV/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Fri, 09 Feb 2007 15:04:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:bc1ece44-3c3e-40cb-a8f3-5f32ee491909</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2007/02/09/interviews</link>
      <category>Mono</category>
      <category>Personal</category>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/300</trackback:ping>
    </item>
    <item>
      <title>Back from Hong-Kong</title>
      <description>&lt;p&gt;It&amp;#8217;s been five days since I&amp;#8217;m back from Hong-Kong, where I was attending the db4o Developer Conference, and I had wonderful time there. After such a nice trip, it&amp;#8217;s really hard to be excited by the idea of returning home, in Mulhouse, France.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/353995585/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/131/353995585_a2b923a26a.jpg" width="500" height="333" alt="Blade Runner" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;You&amp;#8217;re welcome to visit &lt;a href="http://flickr.com/photos/jbevain/sets/72157594470470251/"&gt;my flickr set for this trip&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Now I have to catch up with work, pending patches, and life :)&lt;/p&gt;</description>
      <pubDate>Sat, 20 Jan 2007 16:57:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:ee1c3d43-f22c-4a93-a0b3-5db7cbb7dc2a</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2007/01/20/back-from-hong-kong</link>
      <category>Personal</category>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/298</trackback:ping>
    </item>
    <item>
      <title>Interview of Christof Wittig, CEO of db4objects, Inc.</title>
      <description>&lt;p&gt;&lt;a href="http://blogs.developpeur.org/patrice/archive/2006/11/30/interview-christof-wittig-ceo-de-db4o.aspx" title="Interview"&gt;&lt;img src="http://static.flickr.com/119/314035037_9f0c2b37be.jpg" width="500" height="333" alt="Interviewing" style="BORDER:2px solid black" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;My good friend &lt;a href="http://blogs.developpeur.org/patrice"&gt;Patrice&lt;/a&gt; interviewed my &lt;span class="caps"&gt;CEO&lt;/span&gt;, Christof Wittig during the db4o RoadShow. It&amp;#8217;s a very nice introduction to what is db4o, and to how we are working on it. Go see &lt;a href="http://blogs.developpeur.org/patrice/archive/2006/11/30/interview-christof-wittig-ceo-de-db4o.aspx"&gt;the video&lt;/a&gt;!&lt;/p&gt;</description>
      <pubDate>Mon, 04 Dec 2006 16:31:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:de905fb0-cc6a-4546-9879-da9141e7b687</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2006/12/04/interview-of-christof-wittig-ceo-of-db4objects-inc</link>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/295</trackback:ping>
    </item>
    <item>
      <title>db4o 6.0 released</title>
      <description>&lt;p&gt;I&amp;#8217;ve very thrilled to announce the release today of &lt;a href="http://www.db4o.com/about/news/release/2006_11_14.aspx"&gt;db4o 6.0&lt;/a&gt;, our brand new release.&lt;/p&gt;


	&lt;p&gt;Some lucky folks have seen at the Mono Meeting some bits of what&amp;#8217;s new in it. &lt;a href="http://blogs.codehaus.org/people/bamboo/"&gt;Rodrigo&lt;/a&gt; and I&amp;#8217;ve been mainly busy bringing some love to the public &lt;span class="caps"&gt;API&lt;/span&gt;, to make it look like a real .net/Mono library. And now that&amp;#8217;s what it really is.&lt;/p&gt;


&lt;pre&gt;
using Db4objects.Db4o;
using Db4objects.Db4o.Query;

class Test
{
    public static void Main()
    {
        using (IObjectContainer store = Db4oFactory.OpenFile("test.yap"))
        {
            IQuery q = store.Query();
            q.Constrain(typeof(Person));

            foreach (Person p in q.Execute())
            {
                Console.WriteLine (p);
            }
        }
    }
}
&lt;/pre&gt;

	&lt;p&gt;Here is the sample extracted from &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2006/11/15/new-conventions-for-db4o-on-net.aspx"&gt;my blog post&lt;/a&gt; where I describe all the changes.&lt;/p&gt;


	&lt;p&gt;That&amp;#8217;s the release I&amp;#8217;ve been the more excited with. You can feel that it&amp;#8217;s all packed with love. Go &lt;a href="http://www.db4o.com/about/news/release/2006_11_14.aspx"&gt;give it a try&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Nov 2006 18:10:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:02428a47-a44f-4289-8a83-90106b9c4077</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2006/11/14/db4o-6-0-released</link>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/292</trackback:ping>
    </item>
    <item>
      <title>Mono Meeting</title>
      <description>&lt;p&gt;Thanks to &lt;a href="http://www.db4o.com"&gt;db4o&lt;/a&gt; who is sponsoring my trip, I&amp;#8217;ll be attending the &lt;a href="http://go-mono.com/meeting/"&gt;Mono Meeting&lt;/a&gt; at the end of October. I&amp;#8217;ll have two talks here:&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;One about &lt;a href="http://www.db4o.com"&gt;db4o&lt;/a&gt;, the leading object database,&lt;/li&gt;
&lt;li&gt;The other about &lt;a href="http://www.mono-project.com/Cecil"&gt;Cecil&lt;/a&gt;, our assembly manipulation library.&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;See you there!&lt;/p&gt;</description>
      <pubDate>Wed, 13 Sep 2006 19:31:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:e68e9bb1-4c08-4dbf-be31-4b8052091185</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2006/09/13/mono-meeting</link>
      <category>Cecil</category>
      <category>Mono</category>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/260</trackback:ping>
    </item>
    <item>
      <title>db4objects is Hiring</title>
      <description>&lt;p&gt;We have a bunch of open positions here at &lt;a href="http://www.db4objects.com"&gt;db4objects&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;We are mostly looking for a developer to handle the replication and synchronization  part of &lt;a href="http://www.db4o.com"&gt;db4o&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;If you are willing to work on an Open Source product, with lots of exciting technologies, and good looking developers ;), here are &lt;a href="http://www.db4o.com/about/company/careers/"&gt;the open positions&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Tue, 23 May 2006 14:18:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:2ccdd5a46924aa657a5228432f2ac8e2</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2006/05/23/db4objects-is-hiring</link>
      <category>db4o</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/67</trackback:ping>
    </item>
  </channel>
</rss>
