Unbreak images
[git/dscho.git] / blog.rss
blob983716ad078a4cf19a087bd2e1bb9ee1d834ea9c
1 <?xml version="1.0" encoding="utf-8"?>
2 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
3 <channel>
4 <title>Dscho's blog</title>
5 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html</link>
6 <atom:link href="http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=blog.rss" rel="self" type="application/rss+xml"/>
7 <description>A few stories told by Dscho</description>
8 <lastBuildDate>Mon, 26 Jan 2009 20:14:50 +0100</lastBuildDate>
9 <language>en-us</language>
10 <item>
11 <title>Valgrind takes a loooong time</title>
12 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232997290</link>
13 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232997290</guid>
14 <pubDate>Mon, 26 Jan 2009 20:14:50 +0100</pubDate>
15 <description><![CDATA[Valgrind takes a loooong time
16 </p><p>
17 Yesterday, I started a run on a fast machine, and it took roughly 5.5
18 hours by the machine's clock.
19 </p><p>
20 And of course, I redirected stdout only... *sigh*
21 </p><p>
22 Which triggered a Google search how to force redirection of all the output
23 in the test scripts to a file and the terminal at the same time.
24 </p><p>
25 It seems as if that is not easily done. I tried
26 <center><table
27 border=1 bgcolor=white>
28 <tr><td bgcolor=lightblue colspan=3>
29 &nbsp;
30 </td></tr>
31 <tr><td>
32 <table cellspacing=5 border=0
33 style="color:black;">
34 <tr><td>
35 <pre>
36 exec >(tee out) 2>&1 </pre>
37 </td></tr>
38 </table>
39 </td></tr>
40 </table></center>
41 </p><p>
42 but that did not work: it mumbled something about invalid file handles or some
43 such.
44 </p><p>
45 The only solution I found was:
46 <center><table
47 border=1 bgcolor=white>
48 <tr><td bgcolor=lightblue colspan=3>
49 &nbsp;
50 </td></tr>
51 <tr><td>
52 <table cellspacing=5 border=0
53 style="color:black;">
54 <tr><td>
55 <pre>
56 mkpipe pipe
57 tee out < pipe &
58 exec > pipe 2>&1 </pre>
59 </td></tr>
60 </table>
61 </td></tr>
62 </table></center>
63 </p><p>
64 That is a problem for parallel execution, though, so I am still looking for a
65 better way to do it.
66 </p><p>
67 Once I have the output, it is relatively easy to analyze it, as I already
68 made a script which disects the output into valgrind output and the test
69 case it came from, then groups by common valgrind output and shows the
70 result to the user.]]></description>
71 </item>
72 <item>
73 <title>A day full of rebase... and a little valgrind</title>
74 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232927812</link>
75 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232927812</guid>
76 <pubDate>Mon, 26 Jan 2009 00:56:52 +0100</pubDate>
77 <description><![CDATA[A day full of rebase... and a little valgrind
78 </p><p>
79 I think that I am progressing nicely with my rebase -p work, so much so
80 that I will soon be able to use it myself to work on topic branches <u>and</u>
81 rebase all the time without much hassle.
82 </p><p>
83 In other words, I would like to be able to rebase all my topic branches
84 to Junio's <i>next</i> branch whenever that has new commits. With a single
85 rebase.
86 </p><p>
87 And finally, I got the idea of the thing Stephen implemented for dropped
88 commits; however, I am quite sure I do not like it.
89 </p><p>
90 So what are "dropped" commits?
91 </p><p>
92 When you rebase, chances are that the upstream already has applied at
93 least some of your patches. So we filter those out with <i>--cherry-pick</i>.
94 Stephen calls those "dropped" commits.
95 </p><p>
96 Then he goes on to reinvent the "$REWRITTEN" system: a directory containing
97 the mappings of old commit names to new commit names. That is easily fixed.
98 </p><p>
99 But worse, he substitutes the dropped commits with their <u>parents</u>, instead
100 of substituting them with the corresponding commits in upstream.
101 </p><p>
102 I guess this will be a medium-sized fight on the mailing list, depending
103 how much energy Stephen wants to put in to defend his strategy.
104 </p><p>
105 Anyway, I finally got to a point where only three of the tests are failing,
106 t3404, t3410 and t3412. Somewhat disappointing is t3404, as its name pretends
107 not to exercize -p at all. Oh well, I guess I'll see what is broken tomorrow.
108 </p><p>
109 Another part of the day was dedicated to the Valgrind patch series, which
110 should give us yet another level of code quality.
111 </p><p>
112 After having confused myself with several diverging/obsolete branches, I did
113 indeed finally manage to send that patch series off. Woohoo.]]></description>
114 </item>
115 <item>
116 <title>Regular diff with word coloring (as opposed to word diff)</title>
117 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232888842</link>
118 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232888842</guid>
119 <pubDate>Sun, 25 Jan 2009 14:07:22 +0100</pubDate>
120 <description><![CDATA[Regular diff with word coloring (as opposed to word diff)
121 </p><p>
122 You know, if I were a bit faster with everything I do, I could do so much more!
123 </p><p>
124 For example, Junio's idea that you could keep showing a regular diff, only
125 coloring the words that have been removed/deleted.
126 </p><p>
127 Just imagine looking at the diff of a long line in LaTeX source code. It
128 should be much nicer to the eye to see the complete removed/added sentences
129 instead of one sentence with colored words in between, disrupting your read
130 flow.
131 </p><p>
132 Compare these two versions:
133 </p><p>
134 Regular diff with colored words:
135 <blockquote><tt>
136 -This sentence has a <font color=red>tyop</font> in it.<br>
137 +This sentence has a <font color=green>typo</font> in it.<br>
138 </tt></blockquote>
139 </p><p>
140 Word diff:
141 <blockquote><tt>
142 This sentence has a <font color=red>tyop</font><font color=green>typo</font> in it.<br>
143 </tt></blockquote>
144 </p><p>
145 And it should not be hard to do at all!
146 </p><p>
147 In <i>diff&#95;words&#95;show()</i>, we basically get the minus lines as
148 <i>diff&#95;words->minus</i> and the plus lines as <i>diff&#95;words->plus</i>. The
149 function then prepares the word lists and calls the xdiff engine to do all the
150 hard work, analyzing the result from xdiff and printing the lines in
151 <i>fn&#95;out&#95;diff&#95;words&#95;aux()</i>.
152 </p><p>
153 So all that would have to be changed would be to <u>record</u> the positions
154 of the removed/added words instead of outputting them, and at the end printing
155 the minus/plus buffers using the recorded information to color the words.
156 </p><p>
157 This would involve
158 </p><p>
159 <ul>
160 <li>adding two new members holding the offsets in the <i>diff&#95;words</i>
161 struct,
162 <li>having a special handling for that mode in
163 <i>fn&#95;out&#95;diff&#95;words&#95;aux()</i> that appends the offsets and
164 returns,
165 <li>adding a function <i>show&#95;lines&#95;with&#95;colored&#95;words()</i> that
166 outputs a buffer with a given prefix ('-' or '+') and coloring the words at
167 given offsets with a given color,
168 <li>modify <i>diff&#95;words&#95;show()</i> to call that function for the "special
169 case: only removal" and at the end of the function, and
170 <li> disabling the <i>fwrite()</i> at the end of <i>diff<u>words</u>show()</i> for that
171 mode.
172 </ul>
173 </p><p>
174 Of course, the hardest part is to find a nice user interface for that. Maybe
175 <i>--colored-words</i>? &#x263a;]]></description>
176 </item>
177 <item>
178 <title>Ideas for a major revamp of the --preserve-merges handling in git rebase</title>
179 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232828715</link>
180 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232828715</guid>
181 <pubDate>Sat, 24 Jan 2009 21:25:15 +0100</pubDate>
182 <description><![CDATA[Ideas for a major revamp of the <i>--preserve-merges</i> handling in <i>git rebase</i>
183 </p><p>
184 As probably everybody agrees, the code to preserve merges is a big mess
185 right now.
186 </p><p>
187 Worse, the whole concept of "pick <merge-sha1>" just does not fly well.
188 </p><p>
189 So I started a <u>major</u> cleanup, which happens to reduce the code very
190 nicely so far.
191 </p><p>
192 It will take a few days to flesh out, I guess, but these are the major
193 ideas of my work:
194 </p><p>
195 <b>pick $sha1</b><br>
196 <blockquote>will only work on non-merges in the future.</blockquote>
197 <b>merge $sha1 [$sha1...] was $sha1 Merge ...</b><br>
198 <blockquote>will merge the given list of commits into the current HEAD, for
199 the user's reference and to keep up-to-date what was rewritten,
200 the original merge is shown after the keyword "was" (which is not
201 a valid SHA-1, luckily).</blockquote>
202 <b>goto $sha1</b><br>
203 <blockquote>will reset the HEAD to the given commit.</blockquote>
204 <b>$sha1'</b><br>
205 <blockquote>for merge and goto, if a $sha1 ends in a single quote, the
206 rewritten commit is substituted (if there is one).</blockquote>
207 </p><p>
208 Example:
209 </p><p>
210 <pre>
211 A - B - - - E
213 C - D
214 </pre>
215 </p><p>
216 could yield this TODO script:
217 </p><p>
218 <pre>
219 pick A
220 pick C
221 pick D
222 goto A'
223 pick B
224 merge D' was E
225 </pre>
226 </p><p>
227 This should lead to a much more intuitive user experience.
228 </p><p>
229 I am very sorry if somebody actually scripted <i>rebase -i -p</i> (by setting
230 GIT_EDITOR with a script), but I am very certain that this cleanup is
231 absolutely necessary to make <i>rebase -i -p</i> useful.]]></description>
232 </item>
233 <item>
234 <title>Thoughts about interactive rebase</title>
235 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232778113</link>
236 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232778113</guid>
237 <pubDate>Sat, 24 Jan 2009 07:21:53 +0100</pubDate>
238 <description><![CDATA[Thoughts about <i>interactive rebase</i>
239 </p><p>
240 Somebody mentioned that my <i>my-next</i> branch is a mess, as it mixes all
241 kinds of topics.
242 </p><p>
243 That is undeniably true, however, there is a good reason that I do not
244 have a lot of topic branches: I work on more than just one computer.
245 </p><p>
246 To make sure that I do not lose a commit by mistake, I always <i>rebase -i</i>
247 the <i>my-next</i> branch of the computer I happen to work on on top of the
248 <i>my-next</i> branch I fetch from <a href=http://repo.or.cz>repo.or.cz</a>.
249 </p><p>
250 To rebase a lot of topic branches at the same time seems a bit complicated.
251 But that is actually what the <i>-p</i> option (preserve merges) is all about.
252 </p><p>
253 The only problem is that the code for <i>rebase -i -p</i> has been messed up
254 recently, quite successfully, I might add.
255 </p><p>
256 Worse, some people are pushing for a completely and total unintuitive syntax.
257 </p><p>
258 So maybe I will start to work on <i>-p</i> again, for my own use (I should learn
259 to heed the principle more: work on things I can use myself).
260 </p><p>
261 My current idea is to implement a "goto" statement that will jump to another
262 commit. To make it easily usable, I will add the semantics that "goto" will
263 always try to go to the <u>rewritten</u> version of the given commit; if the user
264 wanted to have the original commit, she has to paste the unabbreviated commit
265 name.
266 </p><p>
267 The more I think about it, the more I actually like this idea &#x263a;
268 </p><p>
269 Of course, working on this little project means that I will have to cope with
270 that ugly code again. *urgh*]]></description>
271 </item>
272 <item>
273 <title>Git Logos</title>
274 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232745071</link>
275 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232745071</guid>
276 <pubDate>Fri, 23 Jan 2009 22:11:11 +0100</pubDate>
277 <description><![CDATA[Git Logos
278 </p><p>
279 The other day, when I did not exactly have too much time on my hands, but
280 definitely too much motivation, I played around creating several logos.
281 </p><p>
282 An ambigram (if you turn it 180 degrees around the appropriate axis, it looks
283 exactly the same as unrotated):
284 </p><p>
285 <center>
286 <table border=0>
287 <tr>
288 <td align=center>
289 <embed type="image/svg+xml"
290 src="2630BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-ambigram.svg" width=317 />
291 </td>
292 </tr>
293 <tr>
294 <td align=center>
295 <a href=2630BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-ambigram.svg>git-ambigram.svg</a>
296 </td>
297 </tr>
298 </table>
299 </center>
300 </p><p>
301 A play on gitk:
302 </p><p>
303 <center>
304 <table border=0>
305 <tr>
306 <td align=center>
307 <embed type="image/svg+xml"
308 src="2670BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-gitk-logo.svg" width=325 />
309 </td>
310 </tr>
311 <tr>
312 <td align=center>
313 <a href=2670BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-gitk-logo.svg>git-gitk-logo.svg</a>
314 </td>
315 </tr>
316 </table>
317 </center>
318 </p><p>
319 A play on the test you have to go through before getting new glasses:
320 </p><p>
321 <center>
322 <table border=0>
323 <tr>
324 <td align=center>
325 <embed type="image/svg+xml"
326 src="2689BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-visual-test.svg" width=325 />
327 </td>
328 </tr>
329 <tr>
330 <td align=center>
331 <a href=2689BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-visual-test.svg>git-visual-test.svg</a>
332 </td>
333 </tr>
334 </table>
335 </center>
336 </p><p>
337 This is Henrik Nyh's logo (converted to .svg by yours truly):
338 </p><p>
339 <center>
340 <table border=0>
341 <tr>
342 <td align=center>
343 <embed type="image/svg+xml"
344 src="2708BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=gitlogo.svg" width=165 />
345 </td>
346 </tr>
347 <tr>
348 <td align=center>
349 <a href=2708BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=gitlogo.svg>gitlogo.svg</a>
350 </td>
351 </tr>
352 </table>
353 </center>
354 </p><p>
355 And of course, the original logo...
356 </p><p>
357 <center>
358 <table border=0>
359 <tr>
360 <td align=center>
361 <embed type="image/svg+xml"
362 src="2727BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=original-git-logo.svg" width=165 />
363 </td>
364 </tr>
365 <tr>
366 <td align=center>
367 <a href=2727BLOBPLAIN;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=original-git-logo.svg>original-git-logo.svg</a>
368 </td>
369 </tr>
370 </table>
371 </center>
372 </p><p>
373 Maybe some of you have fun with them...]]></description>
374 </item>
375 <item>
376 <title>How to deal with files that are not source code when merging</title>
377 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232742582</link>
378 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232742582</guid>
379 <pubDate>Fri, 23 Jan 2009 21:29:42 +0100</pubDate>
380 <description><![CDATA[How to deal with files that are not source code when merging
381 </p><p>
382 Last week, one of the mentors of last year's <a href=http://code.google.com/soc>
383 Summer of Code</a> mentioned the idea that merge strategies are in dear need
384 for file types other than source code.
385 </p><p>
386 I think this idea is awesome, even if I cannot bring myself to believe that
387 any of the file types would make a good Summer of Code project: either they
388 are too complicated (think raster images such as .png or even .jpg), or they
389 are too straight-forward (think LaTeX, where all that is needed is a good
390 graphical user interface to inspect the three versions: <i>ours</i>, <i>baseline</i>
391 and <i>theirs</i>).
392 </p><p>
393 The LaTeX idea would be a good project for me to mentor, though: I have a
394 pretty clear idea how it should be done; I just lack the time (and motivation)
395 to do it myself.
396 </p><p>
397 As for OpenOffice text documents, vector graphics (such as .svg), or more
398 specific data such as spreadsheets, I think that all of these are really
399 difficult: the problem is not so much the implementation (i.e. the programming
400 part of it), but the design.
401 </p><p>
402 This design should involve much more than a Summer of Code project is about:
403 you would need to survey users' expectations, and at least the mentor -- if
404 not the student -- would need to be an expert in usability questions, which
405 is rather unlikely in the realm of Open Source.
406 </p><p>
407 Maybe this is the missing part in Open Source: we have many brilliant
408 programmers, but next to nobody with a good idea how to design intuitive
409 user interfaces.
410 </p><p>
411 That might be related to the fact that brilliant software engineers, as they
412 can be found in Open Source, are not exactly known for their social skills,
413 a human trait that seems to be a very important prerequisite for designing
414 intuitive user interfaces.
415 </p><p>
416 Well, I have <a href=http://git.or.cz/gitwiki/SoC2009Ideas#head-6188833471f79f277e162ef9fbe1592aa10b5f6c>
417 added</a> the proposal to Git's Summer of Code idea page on the Git Wiki; We will
418 see what comes out of it.]]></description>
419 </item>
420 <item>
421 <title>The UGFWIINI contest</title>
422 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232626236</link>
423 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232626236</guid>
424 <pubDate>Thu, 22 Jan 2009 13:10:36 +0100</pubDate>
425 <description><![CDATA[The UGFWIINI contest
426 </p><p>
427 Just in case somebody finds this blog, here is a challenge. Inspired by my
428 own little hack (this blog), I announce the "Using Git For What It Is Not
429 Intended" contest.
430 </p><p>
431 And it is especially cool, since the acronym sounds cool! You might miss
432 this fact if you do no know that I pronounce the "F" like an "A" so that
433 it sounds cool.
434 </p><p>
435 This will be a running contest; whenever I have 10 valid applications, I
436 will announce a winner on the Git mailing list.
437 </p><p>
438 So, what accounts for a valid application?
439 </p><p>
440 <ul>
441 <li> You must use a Git program (the term is used loosely here, GitWeb is
442 considered a Git program, for example).
443 <li> The program must be intended for something completely different than
444 what you are using it for. E.g. GitWeb -- which was intended to let
445 you browse through the history using your web browser -- is used
446 to serve a blog to the wide world.
447 <li> You must be able to prove that you actually used the Git program to
448 the purpose you claim, preferably in a live demonstration like this
449 one.
450 <li> Nobody and nothing must be harmed in the process (except your
451 laughing muscle, that's okay).
452 </ul>
453 </p><p>
454 So, how does such an abuse look like?
455 </p><p>
456 <ul>
457 <li> ... like this blog.
458 <li> Managing your mail (in maildir format) in a Git repository.
459 <li> Finding duplicate files by
460 <table
461 border=1 bgcolor=white>
462 <tr><td bgcolor=lightblue colspan=3>
463 &nbsp;
464 </td></tr>
465 <tr><td>
466 <table cellspacing=5 border=0
467 style="color:black;">
468 <tr><td>
469 <pre>
470 $ git init
471 $ git add .
472 $ git ls-files --stage | sort -k2 | uniq -d -s7 -w40
473 </pre>
474 </td></tr>
475 </table>
476 </td></tr>
477 </table>
478 <li> Abusing the Git alias mechanism to call scripts defined directly in
479 the config.
480 </ul>
481 </p><p>
482 I am really looking forward to all of your submissions... *chuckles*
483 </p><p>]]></description>
484 </item>
485 <item>
486 <title>Top-posting</title>
487 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232611542</link>
488 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232611542</guid>
489 <pubDate>Thu, 22 Jan 2009 09:05:42 +0100</pubDate>
490 <description><![CDATA[Top-posting
491 </p><p>
492 Okay, last post for a while. But this is something that is nagging me
493 tremendously. I should probably just let go, but in my deepest inner self,
494 really close to my heart, I refuse to believe that any human beings could
495 be incapable of certain degrees of reason.
496 </p><p>
497 Take the example of top-posting. Everybody who read a top-posted email
498 knows that you have to scroll down, possibly weeding through tons of
499 pages to find out what the heck the author of the last reply was replying
501 </p><p>
502 Never mind that it would take the author of the reply just a couple of
503 seconds to remove all the irrelevant stuff -- as she already knows what
504 is the relevant part, saving minutes, in case of mailing lists hours,
505 easily, to the readers who otherwise would have to discern what is
506 irrelevant and what is relevant first.
507 </p><p>
508 It is a horrible time waste. But of course not for the top-poster.
509 </p><p>
510 The problem is that I frequently run into such people, and when I write
511 them a polite mail, explaining to them that it is impolite to top-post,
512 and why, the answers I get sometimes make me check if the sky is still up
513 and the earth down. Yesterday was an example of such a dubitable
514 pleasure.
515 </p><p>
516 Most funny are the ridiculous attempts by those persons at explaining why
517 top-posting is <i>so</i> much superior to anything else.
518 </p><p>
519 Which is good, because if they were not that funny, they would be pretty sad.]]></description>
520 </item>
521 <item>
522 <title>Sverre's hat</title>
523 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232607201</link>
524 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1232607201</guid>
525 <pubDate>Thu, 22 Jan 2009 07:53:21 +0100</pubDate>
526 <description><![CDATA[Sverre's hat
527 </p><p>
528 The fun part about a blog is that you can talk about less technical stuff.
529 For example, Sverre's hat.
530 </p><p>
531 Let me start a bit earlier, so that you get the context.
532 </p><p>
533 Last year, at the <a href=http://git.or.cz/gitwiki/GitTogether>GitTogether</a>,
534 we had an <a href=http://en.wikipedia.org/wiki/Unconference>unconference style
535 conference</a>, which basically meant that it was our job to decide what
536 we want to talk about.
537 </p><p>
538 It turned out to be pretty hard, because there was so much we wanted to
539 discuss, and because we wanted to get to know each other, and we wanted to
540 do some hacking.
541 </p><p>
542 So to help us decide what subjects, and in which order we wanted to have
543 scheduled, Shawn opened a series on <a href=http://moderator.appspot.com/>
544 Google Moderator</a>, a nifty, yet simple application which allows a group
545 to agree quickly on an agenda.
546 </p><p>
547 It worked quite well; However, that little saboteur displayed his sense of
548 humor so overtly that some entertaining Gitter put the question "Should Sverre
549 wear a hat?" on the agenda.
550 </p><p>
551 Sure enough, the subject got voted up, and eventually, we got Sverre a hat:
552 </p><p>
553 <center><img src=2786BLOBPLAIN;hb=30319f7436828cd15db8a531a0057351d8e361c0;f=sverre-hat.jpg sverre-hat.jpg></center>
554 </p><p>
555 By the way, another thing I like about this blog engine is that there are no
556 comments... Nothing is more annoying than leaving a comment on a blog,
557 forgetting about it for a few months, and then finding somebody answered
558 ages ago.
559 </p><p>
560 Update: Sverre says it was dsymonds idea.]]></description>
561 </item>
562 </channel>
563 </rss>