<?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</title>
    <link>http://evain.net/blog/</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Ohloh Journal</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/460703359/" title="View from the lac by Jb Evain, on Flickr"&gt;&lt;img src="http://farm1.static.flickr.com/226/460703359_90989937c7.jpg" width="500" height="333" alt="View from the lac" style="border: 2px solid black" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve recently noticed that ohloh now allows you to publish a journal, made of short entries (less than 400 characters).&lt;/p&gt;


	&lt;p&gt;It feels more specialized than twitter, and pretty useful to log short updates on what I am hacking on, or short news for a project. For instance, &lt;a href="http://www.ohloh.net/accounts/poupou"&gt;Sébastien&lt;/a&gt; already started using it to publish short news about &lt;a href="http://www.ohloh.net/projects/gendarme"&gt;Gendarme&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;That looks pretty nice to me, let see what ends up in &lt;a href="http://www.ohloh.net/accounts/jbevain/messages"&gt;my ohloh journal&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Sat, 07 Jun 2008 14:39:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:39738410-1329-4b1f-98df-0aef614bbf2a</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/06/07/ohloh-journal</link>
      <category>Personal</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/491</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>Old boxes</title>
      <description>&lt;p&gt;While &lt;a href="http://tirania.org/blog/archive/2008/May-18-1.html"&gt;Miguel&lt;/a&gt; was having fun discovering new games, I saved from the dust a few precious boxes.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/2496833474/" title="Relics by Jb Evain, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2320/2496833474_2294e22c3c.jpg" width="333" height="500" alt="Relics" style="border: 2px black solid" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Now that they&amp;#8217;re safe, I can go back to play Mass Effect.&lt;/p&gt;</description>
      <pubDate>Tue, 20 May 2008 12:42:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:6bf9faa7-2e4e-4f55-bf27-18716a640561</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/05/20/old-boxes</link>
      <category>Personal</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/485</trackback:ping>
    </item>
    <item>
      <title>Mono and the Summer of Code</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/429556027/" title="Macro test by Jb Evain, on Flickr"&gt;&lt;img src="http://farm1.static.flickr.com/177/429556027_39225d7b1c.jpg" width="500" height="333" alt="Macro test" style="border: 2px solid black" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;For the fourth time, &lt;a href="http://www.mono-project.com/"&gt;Mono&lt;/a&gt; has been accepted as a mentoring organization for &lt;a href="http://code.google.com/soc/2008"&gt;Google&amp;#8217;s Summer of Code&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;I started contributing to Mono at the end of 2004, and I was lucky to be accepted as a student for the very first Summer of Code during the &lt;a href="http://mono-project.com/Summer2005"&gt;2005 summer&lt;/a&gt;. And I was even luckier to be &lt;a href="http://mono-project.com/Summer2006#A_CIL_Linker"&gt;accepted again the year after&lt;/a&gt;. This year, just like the year before, I&amp;#8217;m a possible mentor.&lt;/p&gt;


	&lt;p&gt;The Summer of Code is an amazing opportunity for young developers to be involved in a &lt;span class="caps"&gt;FOSS&lt;/span&gt; project, to learn, to practice programming on exciting projects, while being surrounded with talented peoples. And also to have a great summer. And to get a cool t-shirt.&lt;/p&gt;


	&lt;p&gt;Oh, and for what it&amp;#8217;s worth, five students (including me) from the previous SoC editions are now employed by &lt;a href="http://www.novell.com"&gt;Novell&lt;/a&gt; to work on &lt;a href="http://www.mono-project.com/"&gt;Mono&lt;/a&gt; or &lt;a href="http://www.mono-project.com/"&gt;Moonlight&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;So yeah, if I had an advice, that would be to go have a look at &lt;a href="http://mono-project.com/StudentProjects"&gt;the proposed tasks&lt;/a&gt;, you can even submit your own original proposal if you think you have a bright idea, and apply for it. You have three days.&lt;/p&gt;</description>
      <pubDate>Fri, 28 Mar 2008 22:29:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:39a7929f-02e6-475c-80d7-b8e5cdea18ee</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/03/28/mono-and-the-summer-of-code</link>
      <category>Mono</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/481</trackback:ping>
    </item>
    <item>
      <title>Mono.Cecil vs System.Reflection</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/2311630873/" title="Mouvement by Jb Evain, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3126/2311630873_c3c40b732e.jpg" style="border : 2px solid black" width="500" height="333" alt="Mouvement" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;My friend &lt;a href="http://codebetter.com/blogs/patricksmacchia/"&gt;Patrick&lt;/a&gt;, who&amp;#8217;s leading the amazing &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt; effort wrote &lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/03/18/mono-cecil-vs-system-reflection.aspx"&gt;a great post&lt;/a&gt; comparing &lt;a href="http://mono-project.com/Cecil"&gt;Cecil&lt;/a&gt; against the built-in &lt;a href="http://msdn2.microsoft.com/en-us/library/system.reflection.aspx"&gt;System.Reflection&lt;/a&gt;:&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/03/18/mono-cecil-vs-system-reflection.aspx"&gt;Mono.Cecil vs System.Reflection&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Thanks Patrick for the kind words!&lt;/p&gt;</description>
      <pubDate>Tue, 18 Mar 2008 11:25:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:adeb1a23-118a-4db2-ae95-557678785137</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/03/18/mono-cecil-vs-system-reflection</link>
      <category>Cecil</category>
      <category>Mono</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/478</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>Yet another Hello World</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/2194123480/" title="Statue by Jb Evain, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2028/2194123480_a018c84bbd.jpg" width="500" height="333" alt="Statue" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;pre&gt;
using System;
using System.Linq.Expressions;

class HelloWorldOfTrees {

    static void Main ()
    {
        var param = Expression.Parameter (typeof (string), "p");

        var cwl = Expression.Lambda&amp;lt;Action&amp;lt;string&amp;gt;&amp;gt; (
            Expression.Call (
                typeof (Console).GetMethod (
                    "WriteLine", new [] { typeof (string) }),
                param), param).Compile ();

        cwl ("Hello World !");
    }
}
&lt;/pre&gt;

&lt;pre&gt;
[mono] /tmp @ gmcs test.cs 
[mono] /tmp @ mono test.exe 
Hello World !
&lt;/pre&gt;

	&lt;p&gt;Well heh, you can&amp;#8217;t do really much more than that, but at least, that is working (sort of).&lt;/p&gt;</description>
      <pubDate>Wed, 30 Jan 2008 21:51:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:725eb56a-53ad-4516-810b-5cffeaf93e47</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/01/30/yet-another-hello-world</link>
      <category>Mono</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/470</trackback:ping>
    </item>
    <item>
      <title>Mono presentation at Microsoft Techdays</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/2137278763/" title="Grand Palais by Jb Evain, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2282/2137278763_718d7a0185.jpg" width="500" height="333" style="border: 2px solid black;" alt="Grand Palais" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;For the second year in a row, I&amp;#8217;ll be presenting a session about Mono and Moonlight during the Microsoft Techdays that take place in Paris, on Feb 11. We&amp;#8217;ll have the pleasure to have with me my oh so famous boss &lt;a href="http://tirania.org/blog/"&gt;Miguel&lt;/a&gt;, to introduce my session, and answer a few questions.&lt;/p&gt;


	&lt;p&gt;Here&amp;#8217;s the direct link to the session sum up: &lt;a href="http://galilee.microsoft.fr/TechDays2008/Session.aspx?CellID=ae13489f-271f-4434-b3e1-a3343e8b5c28"&gt;Présentation des projets Mono et Moonlight &lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;b&gt;Update: &lt;/b&gt; You can download &lt;a href="http://evain.net/conf/TechDays08.pdf"&gt;the slides of the presentation&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Sun, 27 Jan 2008 13:51:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:50f68a95-a9f0-4bf5-aebd-d3d1df2186c1</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/01/27/mono-presentation-at-microsoft-techdays</link>
      <category>Mono</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/464</trackback:ping>
    </item>
    <item>
      <title>We're back baby</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jbevain/2138060414/" title="Concorde by Jb Evain, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2401/2138060414_c597a7e6d5.jpg" width="500" height="333" alt="Concorde" style="border: 2px solid black" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;After having undergone a month of technical difficulties, this blog is back online. Sorry for the turbulences. More technical content to follow. Happy new year!&lt;/p&gt;</description>
      <pubDate>Sun, 13 Jan 2008 16:45:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:a3dba75d-f460-498f-a63e-18b8d03dd4cc</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2008/01/13/were-back-baby</link>
      <category>Personal</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/462</trackback:ping>
    </item>
    <item>
      <title>A handful of useful scripts</title>
      <description>I've just uploaded a &lt;a href="http://evain.net/public/scripts.zip"&gt;zip file&lt;/a&gt; containing a handful of scripts I use in my every day routine.

&lt;ul&gt;
  &lt;li&gt;
    &lt;b&gt;cleol&lt;/b&gt;: Clean the end of lines of the files passed as arguments. Accept ruby wildcards (such as * or **/*). That will replace the windows style line endings by unix style line endings, but will also remove useless white-spaces.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;clprop&lt;/b&gt;: Clean the svn properties of the files passed as arguments. Accept ruby wildcards (such as * or **/*). That will remove the svn:executable properties, and set the svn:eol-style to native to the files.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;svnci&lt;/b&gt;: My own script that prompt me my favorite lightweight editor to edit my ChangeLog entries.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;monoport&lt;/b&gt;: I've detailed this one in &lt;a href="http://evain.net/blog/articles/2007/08/18/monoport-from-the-shell"&gt;this blog entry&lt;/a&gt;. I recently added to it the possibility to get a monoport entry printed to stdout. Typically, it allows me to apply patches directly from monoport:
&lt;pre&gt;
monoport -g:4512 | patch -p0
&lt;/pre&gt;
Requires the cute library &lt;a href="http://code.whytheluckystiff.net/hpricot/"&gt;hpricot&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;

</description>
      <pubDate>Thu, 11 Oct 2007 11:16:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:db30e51c-7b58-40da-a6cd-833a44be05ee</guid>
      <author>Jb Evain</author>
      <link>http://evain.net/blog/articles/2007/10/11/a-handful-of-useful-scripts</link>
      <category>Personal</category>
      <trackback:ping>http://evain.net/blog/articles/trackback/461</trackback:ping>
    </item>
  </channel>
</rss>
