<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>DWIM</title>
  <link href="http://dwim.me/atom.xml" rel="self"/>
  <link href="http://dwim.me/"/>
  <updated>2012-09-30T10:01:05+02:00</updated>
  <id>http://dwim.me/</id>
  <author>
    <name>Carlos Martín Nieto</name>
    <email>cmn@dwim.me</email>
  </author>

  
  <entry>
    <title>The case of the magically appearing mmap window</title>
    <link href="http://dwim.me/2012/04/17/the-appearing-mmap-window.html"/>
    <updated>2012-04-17T00:00:00+02:00</updated>
    <id>http://dwim.me/2012/04/17/the-appearing-mmap-window</id>
    <content type="html">&lt;p&gt;The moral of this story is to make sure you always have your function
declarations available wherever you use a function, even if you're
sure that you're using the function properly. In
&lt;a href=&quot;http://libgit2.github.com&quot;&gt;libgit2&lt;/a&gt; we access pack files by mapping
parts of them, and those mmap windows are stored in a singly-linked
list like so:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;c&quot;&gt;&lt;span class=&quot;k&quot;&gt;typedef&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;git_mwindow&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;git_mwindow&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;git_mwindow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;and a function that accepts a &lt;code&gt;git_mwindow *w&lt;/code&gt; parameter. As I'd been
looking at the &lt;code&gt;mwindow&lt;/code&gt; code and was used to seeing &lt;code&gt;&amp;amp;w&lt;/code&gt; in many
places (that code often works with pointers to pointers), I wrote that
instead of simply &lt;code&gt;w&lt;/code&gt;. Interestingly enough, the code didn't break
immediately but gave wrong results a bit later on. I suspected some
odd record-keeping in the &lt;code&gt;mwindow&lt;/code&gt; code and so I wrote a loop to dump
the window list to the console whenever we tried to locate an open
window for a particular range. What I saw confused me even more: a new
window had appeared in front of the one we should be using! Not only
was there a rogue window open, but it also contained completely wrong
values except for the &lt;code&gt;next&lt;/code&gt; pointer. So, where was this window coming
from? I had instrumented the rest of the code and the only place where
this could happen is during the function call, which is when I finally
manged to see that I was passing a pointer to my pointer instead of my
pointer. Had I moved the function declaration to a header earlier, the
compiler would have told me.&lt;/p&gt;

&lt;p&gt;But why did it seem that there was an extra window appearing? This is
a good way to show how &lt;code&gt;struct&lt;/code&gt;s in C work. When I passed the pointer
to the pointer, the function (or more importantly, my function to dump
the list) though it was a pointer to a &lt;code&gt;struct&lt;/code&gt; and treated it as
such. In C, the first field in a &lt;code&gt;struct&lt;/code&gt; must have the same address
as the &lt;code&gt;struct&lt;/code&gt; itself (that is to say, there is no padding allowed
before the first field). Thus, as the pointer was actually to a
pointer to the real &lt;code&gt;struct&lt;/code&gt; and &lt;code&gt;w&lt;/code&gt; and &lt;code&gt;w-&amp;gt;next&lt;/code&gt; have the same
address, when looking at the value of &lt;code&gt;w-&amp;gt;next&lt;/code&gt;, the function was
reading the value of the pointer, which is the only thing that was
right (reading the rest of the values would be reading values from the
caller's stack, which have no meaning in our context).&lt;/p&gt;

&lt;p&gt;And there we have it.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;c&quot;&gt;    &lt;span class=&quot;n&quot;&gt;git_mwindow&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;some_function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;some_var&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;can make code think that there is an extra entry in the linked list.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>GSoC 2011 libgit2 final report</title>
    <link href="http://dwim.me/2011/08/31/libgit2-final-report.html"/>
    <updated>2011-08-31T00:00:00+02:00</updated>
    <id>http://dwim.me/2011/08/31/libgit2-final-report</id>
    <content type="html">&lt;div&gt;[This is a copy of my final report e-mail sent to the git and libgit2
lists; http://article.gmane.org/gmane.comp.version-control.git/180505]&lt;br /&gt;
Hello all, GSoC is finished and I’ll send the proof of work to Google
shortly. Many thanks to everyone who helped me along the way.&lt;/div&gt;


&lt;p&gt;So? How did it go? Unfortunately I wasn’t able to do everything that
was in the (quite optimistic) original plan as there were some changes
and additions that had to be done to the library in order to support
the new features (the code movement in preparation for the indexer
(git-index-pack) being the clearest example of this. The code has been
merged upstream and you want to look at examples of use, you can take
a look at my libgit2-utils repo where you can find a functional
implementation of git-fetch (git-clone would be about 20 lines more, I
just never got around to writing it). Let me give you a few highlights
of what new features were added to the library:&lt;/p&gt;

&lt;h2&gt;Remotes&lt;/h2&gt;

&lt;p&gt;A remote (struct git_remote) is the (library) user’s interface
to the communications with external repositories. When read from the
configuration file, it will parse the refspecs and take them into
consideration when fetching. With the most recent changes, you can
also create one on the fly with an URL. The remote will create an
instance of a transport and will take care of the lower-levels.&lt;/p&gt;

&lt;h2&gt;Transports&lt;/h2&gt;

&lt;p&gt;The logic exists inside the transports. Currently only the fetch part
of the plain git protocol is supported, but the architecture is
extensible. The code would have to live in the library, but adding
support for plug-ins, as it were, would be an easy task.&lt;/p&gt;

&lt;h2&gt;pkt-line&lt;/h2&gt;

&lt;p&gt;The code for parsing and creating these lines is its own namespace, so
that it can be used for other transports. It supports a kind of
streaming parsing, as it will return the appropriate error code if the
buffer isn’t large enough for the line.&lt;/p&gt;

&lt;h2&gt;Indexer&lt;/h2&gt;

&lt;p&gt;This is what libgit2 has instead of git-index-pack. It’s much slower
than the git implementation because it hasn’t been optimised yet as it
uses the normal pack access methods. Currently the only user would be
a git-fetch implementation and that is still fast enough so it’s not
that high a priority. As a result of this work, the memory window and
pack access code has been made much more generic.&lt;/p&gt;

&lt;p&gt;I plan to continue working on this project. The next steps are push
(which has quite a few prerequisites, not least pack generation) and
smart HTTP support. The addition of the new backend should help make
code more generic. After that, SSH support should be a matter of
wrapping the existing code up.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Desktop Summit 2011</title>
    <link href="http://dwim.me/2011/08/04/desktop-summit-2011.html"/>
    <updated>2011-08-04T00:00:00+02:00</updated>
    <id>http://dwim.me/2011/08/04/desktop-summit-2011</id>
    <content type="html">I thought I'd say it as well &lt;br/&gt;

&lt;img class=&quot;alignnone&quot; title=&quot;I'm going to the Desktop Summit 2011&quot; src=&quot;https://desktopsummit.org/sites/www.desktopsummit.org/files/DS2011banner.png&quot; alt=&quot;&quot; width=&quot;333&quot; height=&quot;110&quot; /&gt;
</content>
  </entry>
  
  <entry>
    <title>[GSoC 11] libgit2: midterm report</title>
    <link href="http://dwim.me/2011/08/03/gsoc-11-libgit2-midterm-report.html"/>
    <updated>2011-08-03T00:00:00+02:00</updated>
    <id>http://dwim.me/2011/08/03/gsoc-11-libgit2-midterm-report</id>
    <content type="html">[A bit late, but here is my midterm report in blog form]

Hello everyone,

As it's the GSoC midterm and I'm taking a rest from coding (my exams are in the next few days) I'm taking this opportunity to write up a more detailed report on what has been happening on the libgit2 network front. All the code is available from my 'fork' on github.

The more useful working code has been merged into mainline, and you can get a list of references on the remote. If you want to filter which references you want to see, you can do that as well (with some manual work). I had hoped that fetching and/or pack indexing would be working by now, but sadly the university got in the way. At any rate, here's a list of what's working/implemented:
&lt;h2&gt;Refspec&lt;/h2&gt;
I believe all the important stuff has been implemented. You can get one from a remote and you can see if a string matches what it describes. You can also transform a string/path from the source to the destination form (this probably has a different name in git.git). The transformation code assumes that a '*' in the destination implies that there is a '*' at the end of the source name as well. This might need to be 'hardened'.
&lt;h2&gt;Remotes&lt;/h2&gt;
You can parse its information from the configuration file (the push and fetch refspecs will be parsed as well) and an appropriate transport (see below) will be chosen based on the URL prefix. Right now there is a static list, but plug-ins could be supported without much effort if somebody can come up with an use-case. It is through these transports that everything is done through the network (or simulating the network, as in the local filesystem &quot;network&quot; transport).
&lt;h2&gt;Transports&lt;/h2&gt;
This is where most of the work actually happens. Each transport registers its callbacks in a structure and does its work transparently. The data structures are still in flux, as I haven't yet found the best way to avoid duplicating the information in several places, and the want/have/need code is really still in it infancy. The idea is that the object list you get when you connect can be used to mark which commits you want to receive or send. Right now only the local filesystem and git/tcp are implemented; and the only working operation is 'git-ls-remote'.
&lt;h2&gt;Sliding memory maps, packfile reading and the indexer&lt;/h2&gt;
Or whatever you want to call them; I believe it's mmfile in git. This code and the packfile reading code live in the &quot;pack ODB backend&quot; so I'm making it somewhat more generic so I can use it without an ODB backend. Once that code is decoupled (which is a good change on its own), writing and indexer shouldn't be too hard. ----- So this is where I am now. I'm a bit behind according to the original schedule but still on track to finish on time. It's been interesting and fun, sometimes a bit frustrating. Thanks to all the people who have helped me thus far.

Cheers,
cmn
</content>
  </entry>
  
  <entry>
    <title>Four transports for one protocol</title>
    <link href="http://dwim.me/2011/05/16/four-transports-for-one-protocol.html"/>
    <updated>2011-05-16T00:00:00+02:00</updated>
    <id>http://dwim.me/2011/05/16/four-transports-for-one-protocol</id>
    <content type="html">&lt;p&gt;Git speaks one protocol and relies on several
underlying &lt;em&gt;transports&lt;/em&gt; to make sure the data gets across to
the other computer (sometimes it's the same one, but that's mostly
irrelevant). The public API should allow you to
say &lt;span class=&quot;tt&quot;&gt;git_fetch(&quot;git://example.com/git/project.git&quot;)&lt;/span&gt;
or &lt;span class=&quot;tt&quot;&gt;git_push(&quot;example.com/git/project.git&quot;)&lt;/span&gt; and worry about
the details so that your wonderful changes get pushed upstream.&lt;/p&gt;

&lt;p&gt;So the first step for my GSoC project should be abstracting away the
transport-specific details. The push and fetch code doesn't care
whether we're talking over an UNIX socket, SSH or directly TCP/IP. A
function, say &lt;span class=&quot;tt&quot;&gt;transport_get&lt;/span&gt; reads the URL and returns an
instance of the appropriate transport. Transports have functions
for &lt;span class=&quot;tt&quot;&gt;ls-remote&lt;/span&gt;, want/need list sending (the generator lives
somewhere else) and object pack sending and receiving. What it is is
not much more than a front-end for &lt;span class=&quot;tt&quot;&gt;git-upload-pack&lt;/span&gt; in a
different thread. The added value is the abstraction of the specific
transport protocols.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>[GSoC 11] libgit2: Acceptance</title>
    <link href="http://dwim.me/2011/05/05/gsoc-11-libgit2-acceptance.html"/>
    <updated>2011-05-05T00:00:00+02:00</updated>
    <id>http://dwim.me/2011/05/05/gsoc-11-libgit2-acceptance</id>
    <content type="html">&lt;div&gt;[This is a copy of the e-mail I sent to the mailing list]&lt;/div&gt;
&lt;p&gt;
I've been accepted as a Summer of Code student so I'd like tointroduce
myself: I study Informatics (Computer Science, if you will)in Berlin,
Germany working towards my Bachelor's Degree. I've beenusing git for
quite some time and for the last two months or so I'vebeen getting
familiar with the git and libgit2 codebase.  I'd like to thank git.git
for &quot;donating&quot; one of the slots to libgit2,as the mainline git doesn't
get a direct benefit from it (though Ihope we can consolidate the
codebases in the future).  Due to the difference between European and
US semesters, I'm going tohave to start actual coding work a bit
early, to make up for not beingable to dedicate 100% of my time to the
project until the midterm.  Once the coding season officially starts,
I'll publish weekly oralmost-weekly status reports, which I'll send to
the git and libgit2mailing lists and mirror on my blog[0].  The actual
project is adding the network stack to libgit2 so that it'spossible to
clone and push using libgit2.
&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Bracing some elements in a matrix</title>
    <link href="http://dwim.me/2011/01/12/bracing-some-elements-in-a-matrix.html"/>
    <updated>2011-01-12T00:00:00+01:00</updated>
    <id>http://dwim.me/2011/01/12/bracing-some-elements-in-a-matrix</id>
    <content type="html">A friend asked me today if this was possible, to which I answered
&quot;probably, just use a \phantom&quot;. Though it isn't as clean as I'd
hoped, the following code allows you to achieve the effect in the
picture. The text inside the &lt;span class=&quot;tt&quot;&gt;\phantom&lt;/span&gt; command has to change
in order to grow the brace. You should insert the text exactly as you
insert it in the &quot;real&quot; matrix (with the Math-mode delimiters as
needed) and add &lt;span class=&quot;tt&quot;&gt;\hspace{2\tabcolsep}&lt;/span&gt; where you'd put
&quot;&amp;amp;&quot;.&lt;br /&gt;
&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;img src=&quot;/img/pmatrixoverbrace1.png&quot; alt=&quot;brace over over elements in a matrix&quot;&gt;
    &lt;/td&gt;
    &lt;td style=&quot;vertical-align: bottom&quot;&gt;
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;tex&quot;&gt;      &lt;span class=&quot;sb&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\begin&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{pmatrix}&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;      a &amp;amp; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\smash&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\rlap&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{$&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\overbrace&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\phantom&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{b&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\hspace&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\tabcolsep&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;}c&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\hspace&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\tabcolsep&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;}d}}^{Blah}$}}b &amp;amp; c &amp;amp; d&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;      e &amp;amp; f &amp;amp; g &amp;amp; h&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;\end&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{pmatrix}&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;\]&lt;/span&gt;
      
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
How/why this works: Before the &quot;b&quot;, we create some phantom text (or
rather a phantom box, I guess) which we then overbrace. A phantom box
or text is one that takes up its normal space but doesn't print any
text. In order to have this box be the proper size, we write whatever
needs to be braced just as we'd write it if we were overbracing normal
text, but inserting &lt;span class=&quot;tt&quot;&gt;\hspace{2\tabcolsep}&lt;/span&gt; where the &quot;&amp;amp;&quot;
would usually go. This command adds the right spacing between two
fields (there is &lt;span class=&quot;tt&quot;&gt;\tabcolstep&lt;/span&gt; space before and after each
field)&lt;br /&gt;
The first trick is to use &lt;span class=&quot;tt&quot;&gt;\overbrace&lt;/span&gt; on that phantom
box. Once we have that, we use &lt;span class=&quot;tt&quot;&gt;\rlap&lt;/span&gt; on it (the surrounding
box which includes the brace) to collapse it horizontally (that is, to
make its &quot;virtual&quot; horizontal space zero) so the text that we actually
want to brace starts at the right place.
&lt;/p&gt;
&lt;p&gt;
With this, the line is still too high, which means the braces climb
too much. With the &lt;span class=&quot;tt&quot;&gt;\smash&lt;/span&gt; macro around the whole thing we
collapse it vertically, so that the bracing has no effect on how tall
the array thinks it should be.&lt;br /&gt;

And there we have it, a relatively simple way to put a brace around a
few element in a matrix without modifying the braces' height.
&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Making a LaTeX file compilable with any engine</title>
    <link href="http://dwim.me/2011/01/11/making-a-latex-file-compilable-with-any-engine.html"/>
    <updated>2011-01-11T00:00:00+01:00</updated>
    <id>http://dwim.me/2011/01/11/making-a-latex-file-compilable-with-any-engine</id>
    <content type="html">&lt;p&gt;In my tests, it seems that this piece of (La)TeX code will allow
your document to work with pdfTex, XeTeX and LuaTex. With this, all
you have to do is write your document in UTF-8 and off you go&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;tex&quot;&gt;&lt;span class=&quot;k&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;ifxetex&lt;span class=&quot;nb&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;ifluatex&lt;span class=&quot;nb&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;\ifxetex&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;fontspec,xunicode&lt;span class=&quot;nb&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;\catcode&lt;/span&gt;`&lt;span class=&quot;k&quot;&gt;\ß&lt;/span&gt;=13
  &lt;span class=&quot;k&quot;&gt;\def&lt;/span&gt;ß&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;\ss&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;\else\ifluatex&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;fontspec,xunicode&lt;span class=&quot;nb&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;\else&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;[utf8]&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;{&lt;/span&gt;inputenc&lt;span class=&quot;nb&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;\fi\fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

</content>
  </entry>
  
  <entry>
    <title>Your app may be too smart for its own good</title>
    <link href="http://dwim.me/2010/10/13/your-app-may-be-too-smart-for-its-own-good.html"/>
    <updated>2010-10-13T00:00:00+02:00</updated>
    <id>http://dwim.me/2010/10/13/your-app-may-be-too-smart-for-its-own-good</id>
    <content type="html">&lt;p&gt;Flight take-off and landing times are always given in the local time of wherever the plane is taking off from or landing at as a way to avoid confusion. This is perfectly fine, as long as your online check-in web application isn't too smart for its own good. When I printed my boarding pass, it realised that my departure airport is one hour behind what it considered its &quot;master&quot; timezone of CET. It then decided to make my life easier by printing my ticket with the departure time set to one hour less.&lt;/p&gt;
&lt;p&gt;Having a &quot;security number&quot; (which experience has pretty much confirmed simply means you're the &lt;i&gt;n&lt;/i&gt;th person to check in) of 001 makes me think this is mostly untested code.&lt;/p&gt;
&lt;p&gt;This post brought to you by the words &quot;air&quot; and &quot;berlin&quot; and the fact that almost everyone on the flight is a German tourist and has a real paper ticket, which seems quite retro to me&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Blam 1.8.8 out</title>
    <link href="http://dwim.me/2010/09/14/blam-1-8-8-out.html"/>
    <updated>2010-09-14T00:00:00+02:00</updated>
    <id>http://dwim.me/2010/09/14/blam-1-8-8-out</id>
    <content type="html">&lt;p&gt;The new version of Blam is out. The 1.8.8 will be the last of the 1.8 release branch. From now on, development will go towards the 2.0 release, which includes changing the way internal data is stored.&lt;/p&gt;
&lt;p&gt;The changes, as taken from its &lt;a href=&quot;http://blam.cmartin.tk&quot;&gt;homepage&lt;/a&gt; are:
  &lt;ul&gt;
   &lt;li&gt;Translation updates (thanks to the GNOME translation team)&lt;/li&gt;
   &lt;li&gt;Show the time of next update (Bug &lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=164513&quot;&gt;164513&lt;/a&gt;)&lt;/li&gt;
   &lt;li&gt;Work with some webkit changes&lt;/li&gt;
   &lt;li&gt;Show a notification with the number of unread items at the end of an update&lt;/li&gt;
  &lt;/ul&gt;

The Debian package will be available shortly.
&lt;/p&gt;
</content>
  </entry>
  
</feed>
