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