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