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