Commits

Oben Sonne committed 652d1b0

Site update

  • Participants
  • Parent commits 51d686a

Comments (0)

Files changed (20)

File av.css

-/* 
-  aardvark.legs by Anatoli Papirovski - http://fecklessmind.com/
-  Licensed under the MIT license. http://www.opensource.org/licenses/mit-license.php
-*/
-
-/* 
-  Reset first. Modified version of Eric Meyer and Paul Chaplin reset 
-  from http://meyerweb.com/eric/tools/css/reset/ 
-*/
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, font, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-header, nav, section, article, aside, footer
-{border: 0; margin: 0; outline: 0; padding: 0; background: transparent; vertical-align: baseline;}
-
-blockquote, q {quotes: none;}
-blockquote:before,blockquote:after,q:before,q:after {content: ''; content: none;}
-
-header, nav, section, article, aside, footer {display: block;}
-
-/* Basic styles */
-body {background: #fff; color: #000; font: .75em/1.5em Helvetica, Arial, "Liberation Sans", "Bitstream Vera Sans", sans-serif;}
-html>body {font-size: 12px;}
-
-img {display: inline-block; vertical-align: bottom;}
-
-h1,h2,h3,h4,h5,h6,strong,b,dt,th {font-weight: 700;}
-address,cite,em,i,caption,dfn,var {font-style: italic;}
-
-h1 {margin: 0 0 0.75em; font-size: 2em;}
-h2 {margin: 0 0 1em; font-size: 1.5em;}
-h3 {margin: 0 0 1.286em; font-size: 1.167em;}
-h4 {margin: 0 0 1.5em; font-size: 1em;}
-h5 {margin: 0 0 1.8em; font-size: .834em;}
-h6 {margin: 0 0 2em; font-size: .75em;}
-
-p,ul,ol,dl,blockquote,pre {margin: 0 0 1.5em;}
-
-li ul,li ol {margin: 0;}
-ul {list-style: outside disc;}
-ol {list-style: outside decimal;}
-li {margin: 0 0 0 2em;}
-dd {padding-left: 1.5em;}
-blockquote {padding: 0 1.5em;}
-
-a {text-decoration: underline;}
-a:hover {text-decoration: none;}
-abbr,acronym {border-bottom: 1px dotted; cursor: help;}
-del {text-decoration: line-through;}
-ins {text-decoration: overline;}
-sub {font-size: .834em; line-height: 1em; vertical-align: sub;}
-sup {font-size: .834em; line-height: 1em; vertical-align: super;}
-
-tt,code,kbd,samp,pre {font-size: 1em; font-family: "Courier New", Courier, monospace;}
-
-/* Table styles */
-table {border-collapse: collapse; border-spacing: 0; margin: 0 0 1.5em;}
-caption {text-align: left;}
-th, td {padding: .25em .5em;}
-tbody td, tbody th {border: 1px solid #000;}
-tfoot {font-style: italic;}
-
-/* Form styles */
-fieldset {clear: both;}
-legend {padding: 0 0 1.286em; font-size: 1.167em; font-weight: 700;}
-fieldset fieldset legend {padding: 0 0 1.5em; font-size: 1em;}
-* html legend {margin-left: -7px;}
-*+html legend {margin-left: -7px;}
-
-form .field, form .buttons {clear: both; margin: 0 0 1.5em;}
-form .field label {display: block;}
-form ul.fields li {list-style-type: none; margin: 0;}
-form ul.inline li, form ul.inline label {display: inline;}
-form ul.inline li {padding: 0 .75em 0 0;}
-
-input.radio, input.checkbox {vertical-align: top;}
-label, button, input.submit, input.image {cursor: pointer;}
-* html input.radio, * html input.checkbox {vertical-align: middle;}
-*+html input.radio, *+html input.checkbox {vertical-align: middle;}
-
-textarea {overflow: auto;}
-input.text, input.password, textarea, select {margin: 0; font: 1em/1.3 Helvetica, Arial, "Liberation Sans", "Bitstream Vera Sans", sans-serif; vertical-align: baseline;}
-input.text, input.password, textarea {border: 1px solid #444; border-bottom-color: #666; border-right-color: #666; padding: 2px;}
-
-* html button {margin: 0 .34em 0 0;}
-*+html button {margin: 0 .34em 0 0;}
-
-form.horizontal .field {padding-left: 150px;}
-form.horizontal .field label {display: inline; float: left; width: 140px; margin-left: -150px;}
-
-/* Useful classes */
-img.left {display: inline; float: left; margin: 0 1.5em .75em 0;}
-img.right {display: inline; float: right; margin: 0 0 .75em .75em;}
-
-
 </a>
 </div>
 
+<p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20110315-what-the-merge.html">What the merge</a> <span>March 15, 2011</span></p>
+<p class="post-summary">Analyze merges in Mercurial to see what a colleague did with your changes</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20100130-encfs-keyring.html">Dropbox, EncFS and mounting pain</a> <span>January 30, 2010</span></p>
-<p class="post-summary">Painlessly mount EncFS encrypted folders with strong passwords using Gnome's keyring manager.</p>
+<p class="post-summary">Painlessly mount EncFS encrypted folders with strong passwords using Gnome's keyring manager</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20091127-synchronize-files-with-mercurial.html">Automatically synchronize files with Mercurial</a> <span>November 27, 2009</span></p>
 <p class="post-summary">How to use Mercurial to keep files in sync across work stations</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20091122-using-a-free-css-templates-in-poole.html">Pimp your Poole site with a free CSS template</a> <span>November 22, 2009</span></p>
-<p class="post-summary">Tutorial for applying a free CSS template to a Poole site.</p>
+<p class="post-summary">Tutorial for applying a free CSS template to a Poole site</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20091118-ant-property-filesets.html">Specifying Ant file sets with properties</a> <span>November 18, 2009</span></p>
-<p class="post-summary">How to get a file set by a comma separated list of directories in Ant.</p>
+<p class="post-summary">How to get a file set by a comma separated list of directories in Ant</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20090915-remuco-migration.html">Remuco project migration</a> <span>September 15, 2009</span></p>
 <p class="post-summary">Rationale and process of Remuco's project hosting migration from SourceForge to Google Code.</p>
     </div>

File blog/20090915-remuco-migration.html

 thinking of managing source code at BitBucket or GitHub. I'm just new to DSCM
 and I have to figure out my favorite, Mercurial or Git. Switching between
 Mercurial and Git later should not be a problem.</p>
-<p><hr/>
+<p><a class="FlattrButton" style="display:none;" rev="flattr;button:compact;"
+href="http://obensonne.bitbucket.org/blog.html"></a>
+<hr/>
 <h2>Comments</h2>
 <div id="disqus_thread"></div>
 <script type="text/javascript" src="http://disqus.com/forums/obensonne/embed.js"></script>

File blog/20091118-ant-property-filesets.html

 </code></pre>
 <p>Et voilà, now there is a file set for all files in the directories given by the
 property <code>res.dirs</code>.</p>
-<p><hr/>
+<p><a class="FlattrButton" style="display:none;" rev="flattr;button:compact;"
+href="http://obensonne.bitbucket.org/blog.html"></a>
+<hr/>
 <h2>Comments</h2>
 <div id="disqus_thread"></div>
 <script type="text/javascript" src="http://disqus.com/forums/obensonne/embed.js"></script>

File blog/20091122-using-a-free-css-templates-in-poole.html

 <li><a href="http://www.intensivstation.ch/en/templates/">intensivstation.ch</a></li>
 <li><a href="http://www.free-css.com/">free-css.com</a></li>
 </ul>
-<p><hr/>
+<p><a class="FlattrButton" style="display:none;" rev="flattr;button:compact;"
+href="http://obensonne.bitbucket.org/blog.html"></a>
+<hr/>
 <h2>Comments</h2>
 <div id="disqus_thread"></div>
 <script type="text/javascript" src="http://disqus.com/forums/obensonne/embed.js"></script>

File blog/20091127-synchronize-files-with-mercurial.html

 pass. Better would be some kind of visual or audio notice. Feel free to adjust
 that script to call <em>zenity</em>, <em>kdialog</em>, <em>beep</em> or whatever tool you think is
 reasonable for that task.</p>
-<p><hr/>
+<p><a class="FlattrButton" style="display:none;" rev="flattr;button:compact;"
+href="http://obensonne.bitbucket.org/blog.html"></a>
+<hr/>
 <h2>Comments</h2>
 <div id="disqus_thread"></div>
 <script type="text/javascript" src="http://disqus.com/forums/obensonne/embed.js"></script>

File blog/20100130-encfs-keyring.html

 
 <p class="post-date">Posted on January 30, 2010</p>
 
-<p><em>Painlessly mount EncFS encrypted folders with strong passwords using Gnome's keyring manager.</em></p>
+<p><em>Painlessly mount EncFS encrypted folders with strong passwords using Gnome's keyring manager</em></p>
 <h2>The idea: Encrypt Dropbox data with EncFS</h2>
 <p><a href="http://www.arg0.net/encfs">EncFS</a> is a FUSE-based cryptographic file system that transparently
 encrypts files. It uses an arbitrary directory as storage for the encrypted
 <p><img alt="Screenshot" src="http://obensonne.bitbucket.org/images/startup-app.png" title="Run the mount script at login" /></p>
 <p><strong>That's it. If you've spotted some errors or in case you have problems with
 these instructions, just drop a comment below.</strong></p>
-<p><hr/>
+<p><a class="FlattrButton" style="display:none;" rev="flattr;button:compact;"
+href="http://obensonne.bitbucket.org/blog.html"></a>
+<hr/>
 <h2>Comments</h2>
 <div id="disqus_thread"></div>
 <script type="text/javascript" src="http://disqus.com/forums/obensonne/embed.js"></script>

File blog/20110127-python-not-all-strings.html

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <meta name="description" content="Obvious and hidden reasons for the regular Python error." />
-    <meta name="keywords" content="python, error, string" />
-    <link rel="alternate" type="application/rss+xml" href="http://obensonne.bitbucket.org/rss.xml" title="Oben Sonne" />
-    <title>Oben Sonne - blog</title>
-    <link href="http://obensonne.bitbucket.org/style/reset.css" rel="stylesheet" type="text/css" />
-    <link href="http://obensonne.bitbucket.org/style/960.css" rel="stylesheet" type="text/css" />
-    <link href="http://obensonne.bitbucket.org/style/text.css" rel="stylesheet" type="text/css" />
-    <link href="http://obensonne.bitbucket.org/style/os.css" rel="stylesheet" type="text/css" />
-    <script type="text/javascript">
-    /* <![CDATA[ */
-        (function() {
-            var s = document.createElement('script'), t = document.getElementsByTagName('script')[0];
-            s.type = 'text/javascript';
-            s.async = true;
-            s.src = 'http://api.flattr.com/js/0.6/load.js?mode=auto';
-            t.parentNode.insertBefore(s, t);
-        })();
-    /* ]]> */
-    </script>
-</head>
-<body>
-<div id="wrap" class="container_12">
-  <div id="header" class="prefix_2 grid_3">
-    <h1><a class="plain" href="http://obensonne.bitbucket.org/index.html">Oben Sonne</a></h1>
-  </div>
-  <div id="menu" class="grid_5 suffix_2">
-<ul class="">
-<li class=""><a href="http://obensonne.bitbucket.org/index.html">home</a></li>
-<li class="current"><a href="http://obensonne.bitbucket.org/blog.html">blog</a></li>
-<li class=""><a href="http://obensonne.bitbucket.org/projects.html">projects</a></li>
-<li class=""><a href="http://obensonne.bitbucket.org/about.html">about</a></li>
-</ul>
-  </div>
-  <div class="clear"> </div>
-  <div id="content" class="prefix_2 grid_8 suffix_2">
-    <div class="wrap">
-      <h1 class="post-title">TypeError: not all arguments converted during string formatting</h1>
-
-<p class="post-date">Posted on January 27, 2011</p>
-
-<p>If you're programming Pyhon, you've probably seen this before:</p>
-<pre><code>Traceback (most recent call last):
-  File ...
-TypeError: not all arguments converted during string formatting
-</code></pre>
-<p>The reason probably is that you passed more strings after the <code>%</code> character
-than there are corresponding placeholders:</p>
-<pre><code>&gt;&gt;&gt; values = ["foo", "bar]
-&gt;&gt;&gt; print "values: s" % values
-Traceback (most recent call last):
-  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
-TypeError: not all arguments converted during string formatting
-</code></pre>
-<p>The problem and its fix is simple -- add the missing <code>%</code>:</p>
-<pre><code>&gt;&gt;&gt; print "values: %s" % values
-values: ['foo', 'bar']
-</code></pre>
-<p>Not a big deal. However, recently I came across this:</p>
-<pre><code>&gt;&gt;&gt; print "values: %s" % values
-Traceback (most recent call last):
-  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
-TypeError: not all arguments converted during string formatting
-</code></pre>
-<p>What? Yes, that may happen if <code>values</code> is a tuple, in which case you need as
-much format characters in your string as there are elements in the tuple:</p>
-<pre><code>&gt;&gt;&gt; values = ("foo", "bar)
-&gt;&gt;&gt; print "values: %s, %s" % values
-values: foo, bar
-</code></pre>
-<p>Of course this is a bad solution as it you have to know the tuple size when
-coding. Addtionally it does not really <em>dump</em> <code>value</code>, what </p>
-    </div>
-  </div>
-  <div id="footer" class="prefix_2 grid_8 suffix_2">
-    A site by <a href="http://obensonne.bitbucket.org/">Oben Sonne</a>
-    &middot;
-    Licensed as <a href="http://creativecommons.org/licenses/by-sa/3.0">CC-by-SA</a>
-    &middot;
-    Built with <a href="http://bitbucket.org/obensonne/poole">Poole</a>
-    &middot;
-    <a href="http://validator.w3.org/check?uri=referer">Validate me</a>
-  </div>
-  <div class="clear"></div>
-</div>
-
-<!-- analytics -->
-<script type="text/javascript">
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-<script type="text/javascript">
-try {
-var pageTracker = _gat._getTracker("UA-10517530-5");
-pageTracker._trackPageview();
-} catch(err) {}</script>
-<!-- end: analytics -->
-<!-- disqus -->
-<script type="text/javascript">
-//<![CDATA[
-(function() {
-    var links = document.getElementsByTagName('a');
-    var query = '?';
-    for(var i = 0; i < links.length; i++) {
-    if(links[i].href.indexOf('#disqus_thread') >= 0) {
-        query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
-    }
-    }
-    document.write('<script charset="utf-8" type="text/javascript" src="http://disqus.com/forums/obensonne/get_num_replies.js' + query + '"></' + 'script>');
-})();
-//]]>
-</script>
-<!-- end: disqus -->
-</body>
-</html>

File blog/20110315-what-the-merge.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta name="description" content="Analyze merges in Mercurial to see what a colleague did with your changes" />
+    <meta name="keywords" content="mercurial, merge" />
+    <link rel="alternate" type="application/rss+xml" href="http://obensonne.bitbucket.org/rss.xml" title="Oben Sonne" />
+    <title>Oben Sonne - blog</title>
+    <link href="http://obensonne.bitbucket.org/style/reset.css" rel="stylesheet" type="text/css" />
+    <link href="http://obensonne.bitbucket.org/style/960.css" rel="stylesheet" type="text/css" />
+    <link href="http://obensonne.bitbucket.org/style/text.css" rel="stylesheet" type="text/css" />
+    <link href="http://obensonne.bitbucket.org/style/os.css" rel="stylesheet" type="text/css" />
+    <script type="text/javascript">
+    /* <![CDATA[ */
+        (function() {
+            var s = document.createElement('script'), t = document.getElementsByTagName('script')[0];
+            s.type = 'text/javascript';
+            s.async = true;
+            s.src = 'http://api.flattr.com/js/0.6/load.js?mode=auto';
+            t.parentNode.insertBefore(s, t);
+        })();
+    /* ]]> */
+    </script>
+</head>
+<body>
+<div id="wrap" class="container_12">
+  <div id="header" class="prefix_2 grid_3">
+    <h1><a class="plain" href="http://obensonne.bitbucket.org/index.html">Oben Sonne</a></h1>
+  </div>
+  <div id="menu" class="grid_5 suffix_2">
+<ul class="">
+<li class=""><a href="http://obensonne.bitbucket.org/index.html">home</a></li>
+<li class="current"><a href="http://obensonne.bitbucket.org/blog.html">blog</a></li>
+<li class=""><a href="http://obensonne.bitbucket.org/projects.html">projects</a></li>
+<li class=""><a href="http://obensonne.bitbucket.org/about.html">about</a></li>
+</ul>
+  </div>
+  <div class="clear"> </div>
+  <div id="content" class="prefix_2 grid_8 suffix_2">
+    <div class="wrap">
+      <h1 class="post-title">What the merge</h1>
+
+<p class="post-date">Posted on March 15, 2011</p>
+
+<p><em>Analyze merges in Mercurial to see what a colleague did with your changes</em></p>
+<h2>We all love merging</h2>
+<p>A great feature of a <a href="http://en.wikipedia.org/w/index.php?title=Distributed_Version_Control_System">DVCS</a> like <a href="http://obensonne.bitbucket.org/mercurial.selenic.com">Mercurial</a> is that it makes merging
+concurrent lines of development so easy. Indeed merges occur quite often
+because the local workflow of a DVCS motivates to commit often and to deal with
+the synchronization of changes from coworkers at a later time, when you're done
+with your current task. Then, merging usually is straight forward. Most
+concurrent changes get merged automatically. The rest is easy to handle manually
+when you follow the principle to merge regularly.</p>
+<h2>What happened to my changes?</h2>
+<p>However, there's one aspect of merging that is not so obvious to handle in
+Mercurial. Suppose you and your colleague -- <em>Bob</em> -- work on the same file
+(and in that file on the same part). You commit and push first, everything is
+fine. Then Bob wants to push his commits too but he get's a warning about
+creating a new remote head. As an exemplary developer Bob decides to pull and
+merge the remote changes before pushing. During the merge he manually merges the
+conflicting changes made by him and you. Subsequent he pushes the result, which
+might look like this:</p>
+<p><a href="http://obensonne.bitbucket.org/images/merge.fs.png"><img alt="%s" src="http://obensonne.bitbucket.org/images/merge.png" /></a></p>
+<p>Both you and Bob worked on the file <code>README</code>. Bob merged the conflicting
+changes. Now you wonder if and how Bob's merge affected things <em>you've worked
+on</em>. And here's the problem: there's no straight forward way to inspect the
+merge with regard to that question.</p>
+<p>The first idea one might have is to inspect the difference between <em>R2</em> and
+<em>R5</em>:</p>
+<pre><code>$ hg diff -r 2:5
+</code></pre>
+<p>However, while this shows what Bob did with your changes during the merge, it
+may be hard to find these pieces among the other changes shown:</p>
+<pre><code>--- a/README    ...
++++ b/README    ...
+@@ -1,1 +1,1 @@
+-hey world
++hey folks
+--- /dev/null       ...
++++ b/util.c        ...
+@@ -0,0 +1,1 @@
+... many lines of code ...
+</code></pre>
+<p>The problem is that the difference between <em>R2</em> and <em>R5</em> includes everything
+Bob did since the common base revision <em>R0</em>, i.e. <em>R3</em> and <em>R4</em>.</p>
+<p>The commands <code>hg diff -r 4:5</code> and <code>hg diff -c 5</code> work the other way around,
+i.e. they include the changes from <em>R1</em> and <em>R2</em>.</p>
+<h2>Show a partial <em>diff</em> of the merge</h2>
+<p>The information you should get served in this situation is the fact that Bob
+changed your edits to the <code>README</code> file. The trick is to limit the output of
+the command</p>
+<pre><code>$ hg diff -r 2:5
+</code></pre>
+<p>to only consider the files which actually have been touched during the merge.
+You get this list of files using the <code>log</code> command with templates:</p>
+<pre><code>$ hg log --template '{files}' -r 5
+README
+</code></pre>
+<p>The important thing here is that neither <code>util.c</code> nor <code>main.c</code> are in this
+list. Now, feed this list to the diff command:</p>
+<pre><code>$ hg diff -r 2:5 `hg log --template '{files}' -r 5`
+--- a/README    ...
++++ b/README    ...
+@@ -1,1 +1,1 @@
+-hey world
++hey folks
+</code></pre>
+<p>That's it, all other changes from Bob (you're not interested in right now) are
+filtered. To complete you merge inspection, you could also check what Bob did
+with his own changes during the merge:</p>
+<pre><code>$ hg diff -r 4:5 `hg log --template '{files}' -r 5`
+--- a/README        ...
++++ b/README        ...
+@@ -1,1 +1,1 @@
+-hello folks
++hey folks
+</code></pre>
+<p>Now you see that Bob was not so selfish to use his changes only but combined
+his and your changes.</p>
+<blockquote>
+<p>This post is based on an answer I gave to a <a href="http://stackoverflow.com/q/4329230/151299">related question on
+stackoverflow.com</a>.</p>
+</blockquote>
+<p><a class="FlattrButton" style="display:none;" rev="flattr;button:compact;"
+href="http://obensonne.bitbucket.org/blog.html"></a>
+<hr/>
+<h2>Comments</h2>
+<div id="disqus_thread"></div>
+<script type="text/javascript" src="http://disqus.com/forums/obensonne/embed.js"></script>
+<noscript>
+  <p><a href="http://disqus.com/forums/obensonne/?url=ref">View the discussion thread.</a></p>
+</noscript>
+<a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a></p>
+    </div>
+  </div>
+  <div id="footer" class="prefix_2 grid_8 suffix_2">
+    A site by <a href="http://obensonne.bitbucket.org/">Oben Sonne</a>
+    &middot;
+    Licensed as <a href="http://creativecommons.org/licenses/by-sa/3.0">CC-by-SA</a>
+    &middot;
+    Built with <a href="http://bitbucket.org/obensonne/poole">Poole</a>
+    &middot;
+    <a href="http://validator.w3.org/check?uri=referer">Validate me</a>
+  </div>
+  <div class="clear"></div>
+</div>
+
+<!-- analytics -->
+<script type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+try {
+var pageTracker = _gat._getTracker("UA-10517530-5");
+pageTracker._trackPageview();
+} catch(err) {}</script>
+<!-- end: analytics -->
+<!-- disqus -->
+<script type="text/javascript">
+//<![CDATA[
+(function() {
+    var links = document.getElementsByTagName('a');
+    var query = '?';
+    for(var i = 0; i < links.length; i++) {
+    if(links[i].href.indexOf('#disqus_thread') >= 0) {
+        query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
+    }
+    }
+    document.write('<script charset="utf-8" type="text/javascript" src="http://disqus.com/forums/obensonne/get_num_replies.js' + query + '"></' + 'script>');
+})();
+//]]>
+</script>
+<!-- end: disqus -->
+</body>
+</html>

File images/merge.fs.png

Added
New image

File images/merge.png

Added
New image

File images/poole-layout-after.png

Old
Old image
New
New image

File images/poole-layout-before.png

Old
Old image
New
New image

File images/poole-ss.png

Old
Old image
New
New image

File images/rss.png

Old
Old image
New
New image

File images/tweet.png

Old
Old image
New
New image
 </div>
 
 <h2>Latest blog posts</h2>
+<p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20110315-what-the-merge.html">What the merge</a> <span>March 15, 2011</span></p>
+<p class="post-summary">Analyze merges in Mercurial to see what a colleague did with your changes</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20100130-encfs-keyring.html">Dropbox, EncFS and mounting pain</a> <span>January 30, 2010</span></p>
-<p class="post-summary">Painlessly mount EncFS encrypted folders with strong passwords using Gnome's keyring manager.</p>
+<p class="post-summary">Painlessly mount EncFS encrypted folders with strong passwords using Gnome's keyring manager</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20091127-synchronize-files-with-mercurial.html">Automatically synchronize files with Mercurial</a> <span>November 27, 2009</span></p>
 <p class="post-summary">How to use Mercurial to keep files in sync across work stations</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20091122-using-a-free-css-templates-in-poole.html">Pimp your Poole site with a free CSS template</a> <span>November 22, 2009</span></p>
-<p class="post-summary">Tutorial for applying a free CSS template to a Poole site.</p>
+<p class="post-summary">Tutorial for applying a free CSS template to a Poole site</p>
 <p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20091118-ant-property-filesets.html">Specifying Ant file sets with properties</a> <span>November 18, 2009</span></p>
-<p class="post-summary">How to get a file set by a comma separated list of directories in Ant.</p>
-<p class="post-title"><a href="http://obensonne.bitbucket.org/blog/20090915-remuco-migration.html">Remuco project migration</a> <span>September 15, 2009</span></p>
-<p class="post-summary">Rationale and process of Remuco's project hosting migration from SourceForge to Google Code.</p>
+<p class="post-summary">How to get a file set by a comma separated list of directories in Ant</p>
     </div>
   </div>
   <div id="footer" class="prefix_2 grid_8 suffix_2">
 <link>http://obensonne.bitbucket.org/blog.html</link>
 <description>My name is dragonforce. You killed my dragons. Prepare to scream.</description>
 <language>en-us</language>
-<pubDate>Mon, 14 Mar 2011 18:21:35 -0000</pubDate>
-<lastBuildDate>Mon, 14 Mar 2011 18:21:35 -0000</lastBuildDate>
+<pubDate>Tue, 15 Mar 2011 11:45:19 -0000</pubDate>
+<lastBuildDate>Tue, 15 Mar 2011 11:45:19 -0000</lastBuildDate>
 <docs>http://blogs.law.harvard.edu/tech/rss</docs>
 <generator>Poole</generator>
 
 <item>
+    <title>What the merge</title>
+    <link>http://obensonne.bitbucket.org/blog/20110315-what-the-merge.html</link>
+    <description>Analyze merges in Mercurial to see what a colleague did with your changes</description>
+    <pubDate>Tue, 15 Mar 2011 11:00:00 -0000</pubDate>
+    <guid>http://obensonne.bitbucket.org/blog/20110315-what-the-merge.html</guid>
+</item>
+
+<item>
     <title>Dropbox, EncFS and mounting pain</title>
     <link>http://obensonne.bitbucket.org/blog/20100130-encfs-keyring.html</link>
-    <description>Painlessly mount EncFS encrypted folders with strong passwords using Gnome's keyring manager.</description>
+    <description>Painlessly mount EncFS encrypted folders with strong passwords using Gnome's keyring manager</description>
     <pubDate>Sat, 30 Jan 2010 11:00:00 -0000</pubDate>
     <guid>http://obensonne.bitbucket.org/blog/20100130-encfs-keyring.html</guid>
 </item>
 <item>
     <title>Pimp your Poole site with a free CSS template</title>
     <link>http://obensonne.bitbucket.org/blog/20091122-using-a-free-css-templates-in-poole.html</link>
-    <description>Tutorial for applying a free CSS template to a Poole site.</description>
+    <description>Tutorial for applying a free CSS template to a Poole site</description>
     <pubDate>Sun, 22 Nov 2009 11:00:00 -0000</pubDate>
     <guid>http://obensonne.bitbucket.org/blog/20091122-using-a-free-css-templates-in-poole.html</guid>
 </item>
 <item>
     <title>Specifying Ant file sets with properties</title>
     <link>http://obensonne.bitbucket.org/blog/20091118-ant-property-filesets.html</link>
-    <description>How to get a file set by a comma separated list of directories in Ant.</description>
+    <description>How to get a file set by a comma separated list of directories in Ant</description>
     <pubDate>Wed, 18 Nov 2009 11:00:00 -0000</pubDate>
     <guid>http://obensonne.bitbucket.org/blog/20091118-ant-property-filesets.html</guid>
 </item>
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 
 <url>
-    <loc>http://obensonne.bitbucket.org/blog.html</loc>
-    <lastmod>2011-03-14</lastmod>
-    <changefreq>monthly</changefreq>
-    <priority>0.8</priority>
-</url>
-
-<url>
-    <loc>http://obensonne.bitbucket.org/projects.html</loc>
-    <lastmod>2011-03-14</lastmod>
-    <changefreq>monthly</changefreq>
-    <priority>0.9</priority>
-</url>
-
-<url>
     <loc>http://obensonne.bitbucket.org/about.html</loc>
-    <lastmod>2011-03-14</lastmod>
+    <lastmod>2011-03-15</lastmod>
     <changefreq>monthly</changefreq>
     <priority>0.2</priority>
 </url>
 
 <url>
     <loc>http://obensonne.bitbucket.org/index.html</loc>
-    <lastmod>2011-03-14</lastmod>
+    <lastmod>2011-03-15</lastmod>
     <changefreq>monthly</changefreq>
     <priority>1.0</priority>
 </url>
 
 <url>
-    <loc>http://obensonne.bitbucket.org/blog/20110127-python-not-all-strings.html</loc>
-    <lastmod>2011-03-14</lastmod>
+    <loc>http://obensonne.bitbucket.org/projects.html</loc>
+    <lastmod>2011-03-15</lastmod>
     <changefreq>monthly</changefreq>
-    <priority>0.0</priority>
+    <priority>0.9</priority>
 </url>
 
 <url>
-    <loc>http://obensonne.bitbucket.org/blog/20090915-remuco-migration.html</loc>
-    <lastmod>2011-03-14</lastmod>
+    <loc>http://obensonne.bitbucket.org/blog.html</loc>
+    <lastmod>2011-03-15</lastmod>
+    <changefreq>monthly</changefreq>
+    <priority>0.8</priority>
+</url>
+
+<url>
+    <loc>http://obensonne.bitbucket.org/blog/20091122-using-a-free-css-templates-in-poole.html</loc>
+    <lastmod>2011-03-15</lastmod>
+    <changefreq>monthly</changefreq>
+    <priority>0.8</priority>
+</url>
+
+<url>
+    <loc>http://obensonne.bitbucket.org/blog/20091127-synchronize-files-with-mercurial.html</loc>
+    <lastmod>2011-03-15</lastmod>
     <changefreq>monthly</changefreq>
     <priority>0.8</priority>
 </url>
 
 <url>
     <loc>http://obensonne.bitbucket.org/blog/20100130-encfs-keyring.html</loc>
-    <lastmod>2011-03-14</lastmod>
+    <lastmod>2011-03-15</lastmod>
     <changefreq>monthly</changefreq>
     <priority>0.8</priority>
 </url>
 
 <url>
     <loc>http://obensonne.bitbucket.org/blog/20091118-ant-property-filesets.html</loc>
-    <lastmod>2011-03-14</lastmod>
+    <lastmod>2011-03-15</lastmod>
     <changefreq>monthly</changefreq>
     <priority>0.8</priority>
 </url>
 
 <url>
-    <loc>http://obensonne.bitbucket.org/blog/20091122-using-a-free-css-templates-in-poole.html</loc>
-    <lastmod>2011-03-14</lastmod>
+    <loc>http://obensonne.bitbucket.org/blog/20110315-what-the-merge.html</loc>
+    <lastmod>2011-03-15</lastmod>
     <changefreq>monthly</changefreq>
     <priority>0.8</priority>
 </url>
 
 <url>
-    <loc>http://obensonne.bitbucket.org/blog/20091127-synchronize-files-with-mercurial.html</loc>
-    <lastmod>2011-03-14</lastmod>
+    <loc>http://obensonne.bitbucket.org/blog/20090915-remuco-migration.html</loc>
+    <lastmod>2011-03-15</lastmod>
     <changefreq>monthly</changefreq>
     <priority>0.8</priority>
 </url>

File style/os.css

     font-size:0.85em;
 }
 
+code {
+    border: 1px solid #cccccc;
+    padding: 0.2em;
+    padding-bottom: 0;
+}
+
 pre code {
     font-size: 1em; /* for nested pre->code */
+    border: 0
 }
 
 /* ------------------------------------------------------------------------ */
 	color: #2e3436;
 }
 
-#menu ul li.current {
-	border-top-color: #2e3436;
-}
-
 #menu ul li.current:hover {
-	border-top-color: #2e3436;
-	border-top-style: dotted;
+	border-top-color: #ffffff;
 }
 
 /* ------------------------------------------------------------------------ */