Update Saturday, 24th of January, Anno Domini MMIX, at the hour of the Rooster
[git/dscho.git] / index.html
blobaa3c4a5b2c5732e2e627053c469e47d669cfece0
1 <html>
2 <head>
3 <title>Dscho's blog</title>
4 <meta http-equiv="Content-Type"
5 content="text/html; charset=UTF-8"/>
6 </head>
7 <body style="width:800px;background-image:url(dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=paper.jpg);background-repeat:repeat-y;background-attachment:scroll;padding:0px;">
8 <div style="width:610px;margin-left:120px;margin-top:50px;align:left;vertical-align:top;">
9 <h1>Dscho's blog</h1>
10 <div style="position:absolute;top:50px;left:810px;width=400px">
11 <table width=400px bgcolor=#e0e0e0 border=1>
12 <tr><th>Table of contents:</th></tr>
13 <tr><td>
14 <p><ul>
15 <li><a href=#1232778113>24 Jan 2009 Thoughts about <i>interactive rebase</i></a>
16 <li><a href=#1232745071>23 Jan 2009 Git Logos</a>
17 <li><a href=#1232742582>23 Jan 2009 How to deal with files that are not source code when merging</a>
18 <li><a href=#1232626236>22 Jan 2009 The UGFWIINI contest</a>
19 <li><a href=#1232611542>22 Jan 2009 Top-posting</a>
20 <li><a href=#1232607201>22 Jan 2009 Sverre's hat</a>
21 <li><a href=#1232604722>22 Jan 2009 Let there be images!</a>
22 <li><a href=#1232599693>22 Jan 2009 My blog has style</a>
23 <li><a href=#1232589695>22 Jan 2009 My new blog system... bloGit</a>
24 </ul></p>
25 </td></tr></table>
26 <br>
27 <div style="text-align:right;">
28 <a href="dscho.git?a=blob_plain;hb=blog;f=blog.rss"
29 title="Subscribe to my RSS feed"
30 class="rss" rel="nofollow"
31 style="background-color:orange;text-decoration:none;color:white;font-family:sans-serif;">RSS</a>
32 </div>
33 <br>
34 <table width=400px bgcolor=#e0e0e0 border=1>
35 <tr><th>Links:</th></tr>
36 <tr><td>
37 <ul>
38 <li> <a href=http://git-scm.com/>Git's homepage</a>
39 <li> <a href=http://gitster.livejournal.com/>Junio's blog</a>
40 <li> <a href=http://www.spearce.org/>Shawn's blog</a> seems to be sitting
41 idle ever since he started working for Google...
42 <li> <a href=http://torvalds-family.blogspot.com/>Linus' blog</a> does not
43 talk much about Git...
44 <li> Scott Chacon's <a href=http://whygitisbetterthanx.com/>Why Git is better
45 than X</a> site
46 <li> <a href=http://vilain.net/>The blog of mugwump</a>
47 <li> <a href=http://blogs.gnome.org/newren/>Elijah Newren</a> chose the
48 same path as Cogito, offering an alternative porcelain (an approach
49 that is doomed in my opinion)
50 <li> <a href=http://msysgit.googlecode.com/>The msysGit project</a>, a (mostly)
51 failed experiment to lure the many Windows developers out there to
52 contribute to Open Source for a change.
53 </ul>
54 </td></tr></table>
55 <br>
56 <table width=400px bgcolor=#e0e0e0 border=1>
57 <tr><th>Google Ads:</th></tr>
58 <tr><td align=center>
59 <script type="text/javascript"><!--
60 google_ad_client = "pub-5106407705643819";
61 /* 300x250, created 1/22/09 */
62 google_ad_slot = "6468207338";
63 google_ad_width = 300;
64 google_ad_height = 250;
65 //-->
66 </script>
67 <script type="text/javascript"
68 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
69 </script>
70 </td></tr></table>
71 </div>
72 <h6>Saturday, 24th of January, Anno Domini MMIX, at the hour of the Dragon</h6>
73 <a name=1232778113>
74 <h2>Thoughts about <i>interactive rebase</i></h2>
76 <p>
77 </p><p>
78 Somebody mentioned that my <i>my-next</i> branch is a mess, as it mixes all
79 kinds of topics.
80 </p><p>
81 That is undeniably true, however, there is a good reason that I do not
82 have a lot of topic branches: I work on more than just one computer.
83 </p><p>
84 To make sure that I do not lose a commit by mistake, I always <i>rebase -i</i>
85 the <i>my-next</i> branch of the computer I happen to work on on top of the
86 <i>my-next</i> branch I fetch from <a href=http://repo.or.cz>repo.or.cz</a>.
87 </p><p>
88 To rebase a lot of topic branches at the same time seems a bit complicated.
89 But that is actually what the <i>-p</i> option (preserve merges) is all about.
90 </p><p>
91 The only problem is that the code for <i>rebase -i -p</i> has been messed up
92 recently, quite successfully, I might add.
93 </p><p>
94 Worse, some people are pushing for a completely and total unintuitive syntax.
95 </p><p>
96 So maybe I will start to work on <i>-p</i> again, for my own use (I should learn
97 to heed the principle more: work on things I can use myself).
98 </p><p>
99 My current idea is to implement a "goto" statement that will jump to another
100 commit. To make it easily usable, I will add the semantics that "goto" will
101 always try to go to the <u>rewritten</u> version of the given commit; if the user
102 wanted to have the original commit, she has to paste the unabbreviated commit
103 name.
104 </p><p>
105 The more I think about it, the more I actually like this idea &#x263a;
106 </p><p>
107 Of course, working on this little project means that I will have to cope with
108 that ugly code again. *urgh*
109 </p>
110 <h6>Friday, 23rd of January, Anno Domini MMIX, at the hour of the Pig</h6>
111 <a name=1232745071>
112 <h2>Git Logos</h2>
115 </p><p>
116 The other day, when I did not exactly have too much time on my hands, but
117 definitely too much motivation, I played around creating several logos.
118 </p><p>
119 An ambigram (if you turn it 180 degrees around the appropriate axis, it looks
120 exactly the same as unrotated):
121 </p><p>
122 <center>
123 <table border=0>
124 <tr>
125 <td align=center>
126 <embed type="image/svg+xml"
127 src="dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-ambigram.svg" width=317 />
128 </td>
129 </tr>
130 <tr>
131 <td align=center>
132 <a href=dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-ambigram.svg>git-ambigram.svg</a>
133 </td>
134 </tr>
135 </table>
136 </center>
137 </p><p>
138 A play on gitk:
139 </p><p>
140 <center>
141 <table border=0>
142 <tr>
143 <td align=center>
144 <embed type="image/svg+xml"
145 src="dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-gitk-logo.svg" width=325 />
146 </td>
147 </tr>
148 <tr>
149 <td align=center>
150 <a href=dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-gitk-logo.svg>git-gitk-logo.svg</a>
151 </td>
152 </tr>
153 </table>
154 </center>
155 </p><p>
156 A play on the test you have to go through before getting new glasses:
157 </p><p>
158 <center>
159 <table border=0>
160 <tr>
161 <td align=center>
162 <embed type="image/svg+xml"
163 src="dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-visual-test.svg" width=325 />
164 </td>
165 </tr>
166 <tr>
167 <td align=center>
168 <a href=dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=git-visual-test.svg>git-visual-test.svg</a>
169 </td>
170 </tr>
171 </table>
172 </center>
173 </p><p>
174 This is Henrik Nyh's logo (converted to .svg by yours truly):
175 </p><p>
176 <center>
177 <table border=0>
178 <tr>
179 <td align=center>
180 <embed type="image/svg+xml"
181 src="dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=gitlogo.svg" width=165 />
182 </td>
183 </tr>
184 <tr>
185 <td align=center>
186 <a href=dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=gitlogo.svg>gitlogo.svg</a>
187 </td>
188 </tr>
189 </table>
190 </center>
191 </p><p>
192 And of course, the original logo...
193 </p><p>
194 <center>
195 <table border=0>
196 <tr>
197 <td align=center>
198 <embed type="image/svg+xml"
199 src="dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=original-git-logo.svg" width=165 />
200 </td>
201 </tr>
202 <tr>
203 <td align=center>
204 <a href=dscho.git?a=blob_plain;hb=aaa9edafbe6ca5349ad7b36848fb294e5f4fc529;f=original-git-logo.svg>original-git-logo.svg</a>
205 </td>
206 </tr>
207 </table>
208 </center>
209 </p><p>
210 Maybe some of you have fun with them...
211 </p>
212 <h6>Friday, 23rd of January, Anno Domini MMIX, at the hour of the Pig</h6>
213 <a name=1232742582>
214 <h2>How to deal with files that are not source code when merging</h2>
217 </p><p>
218 Last week, one of the mentors of last year's <a href=http://code.google.com/soc>
219 Summer of Code</a> mentioned the idea that merge strategies are in dear need
220 for file types other than source code.
221 </p><p>
222 I think this idea is awesome, even if I cannot bring myself to believe that
223 any of the file types would make a good Summer of Code project: either they
224 are too complicated (think raster images such as .png or even .jpg), or they
225 are too straight-forward (think LaTeX, where all that is needed is a good
226 graphical user interface to inspect the three versions: <i>ours</i>, <i>baseline</i>
227 and <i>theirs</i>).
228 </p><p>
229 The LaTeX idea would be a good project for me to mentor, though: I have a
230 pretty clear idea how it should be done; I just lack the time (and motivation)
231 to do it myself.
232 </p><p>
233 As for OpenOffice text documents, vector graphics (such as .svg), or more
234 specific data such as spreadsheets, I think that all of these are really
235 difficult: the problem is not so much the implementation (i.e. the programming
236 part of it), but the design.
237 </p><p>
238 This design should involve much more than a Summer of Code project is about:
239 you would need to survey users' expectations, and at least the mentor -- if
240 not the student -- would need to be an expert in usability questions, which
241 is rather unlikely in the realm of Open Source.
242 </p><p>
243 Maybe this is the missing part in Open Source: we have many brilliant
244 programmers, but next to nobody with a good idea how to design intuitive
245 user interfaces.
246 </p><p>
247 That might be related to the fact that brilliant software engineers, as they
248 can be found in Open Source, are not exactly known for their social skills,
249 a human trait that seems to be a very important prerequisite for designing
250 intuitive user interfaces.
251 </p><p>
252 Well, I have <a href=http://git.or.cz/gitwiki/SoC2009Ideas#head-6188833471f79f277e162ef9fbe1592aa10b5f6c>
253 added</a> the proposal to Git's Summer of Code idea page on the Git Wiki; We will
254 see what comes out of it.
255 </p>
256 <h6>Thursday, 22nd of January, Anno Domini MMIX, at the hour of the Goat</h6>
257 <a name=1232626236>
258 <h2>The UGFWIINI contest</h2>
261 </p><p>
262 Just in case somebody finds this blog, here is a challenge. Inspired by my
263 own little hack (this blog), I announce the "Using Git For What It Is Not
264 Intended" contest.
265 </p><p>
266 And it is especially cool, since the acronym sounds cool! You might miss
267 this fact if you do no know that I pronounce the "F" like an "A" so that
268 it sounds cool.
269 </p><p>
270 This will be a running contest; whenever I have 10 valid applications, I
271 will announce a winner on the Git mailing list.
272 </p><p>
273 So, what accounts for a valid application?
274 </p><p>
275 <ul>
276 <li> You must use a Git program (the term is used loosely here, GitWeb is
277 considered a Git program, for example).
278 <li> The program must be intended for something completely different than
279 what you are using it for. E.g. GitWeb -- which was intended to let
280 you browse through the history using your web browser -- is used
281 to serve a blog to the wide world.
282 <li> You must be able to prove that you actually used the Git program to
283 the purpose you claim, preferably in a live demonstration like this
284 one.
285 <li> Nobody and nothing must be harmed in the process (except your
286 laughing muscle, that's okay).
287 </ul>
288 </p><p>
289 So, how does such an abuse look like?
290 </p><p>
291 <ul>
292 <li> ... like this blog.
293 <li> Managing your mail (in maildir format) in a Git repository.
294 <li> Finding duplicate files by
295 <table
296 border=1 bgcolor=black>
297 <tr><td bgcolor=lightblue colspan=3>
298 &nbsp;
299 </td></tr>
300 <tr><td>
301 <table cellspacing=5 border=0
302 style="color:white;">
303 <tr><td>
304 <pre>
305 $ git init
306 $ git add .
307 $ git ls-files --stage | sort -k2 | uniq -d -s7 -w40
308 </pre>
309 </td></tr>
310 </table>
311 </td></tr>
312 </table>
313 <li> Abusing the Git alias mechanism to call scripts defined directly in
314 the config.
315 </ul>
316 </p><p>
317 I am really looking forward to all of your submissions... *chuckles*
318 </p><p>
319 </p>
320 <h6>Thursday, 22nd of January, Anno Domini MMIX, at the hour of the Snake</h6>
321 <a name=1232611542>
322 <h2>Top-posting</h2>
325 </p><p>
326 Okay, last post for a while. But this is something that is nagging me
327 tremendously. I should probably just let go, but in my deepest inner self,
328 really close to my heart, I refuse to believe that any human beings could
329 be incapable of certain degrees of reason.
330 </p><p>
331 Take the example of top-posting. Everybody who read a top-posted email
332 knows that you have to scroll down, possibly weeding through tons of
333 pages to find out what the heck the author of the last reply was replying
335 </p><p>
336 Never mind that it would take the author of the reply just a couple of
337 seconds to remove all the irrelevant stuff -- as she already knows what
338 is the relevant part, saving minutes, in case of mailing lists hours,
339 easily, to the readers who otherwise would have to discern what is
340 irrelevant and what is relevant first.
341 </p><p>
342 It is a horrible time waste. But of course not for the top-poster.
343 </p><p>
344 The problem is that I frequently run into such people, and when I write
345 them a polite mail, explaining to them that it is impolite to top-post,
346 and why, the answers I get sometimes make me check if the sky is still up
347 and the earth down. Yesterday was an example of such a dubitable
348 pleasure.
349 </p><p>
350 Most funny are the ridiculous attempts by those persons at explaining why
351 top-posting is <i>so</i> much superior to anything else.
352 </p><p>
353 Which is good, because if they were not that funny, they would be pretty sad.
354 </p>
355 <h6>Thursday, 22nd of January, Anno Domini MMIX, at the hour of the Dragon</h6>
356 <a name=1232607201>
357 <h2>Sverre's hat</h2>
360 </p><p>
361 The fun part about a blog is that you can talk about less technical stuff.
362 For example, Sverre's hat.
363 </p><p>
364 Let me start a bit earlier, so that you get the context.
365 </p><p>
366 Last year, at the <a href=http://git.or.cz/gitwiki/GitTogether>GitTogether</a>,
367 we had an <a href=http://en.wikipedia.org/wiki/Unconference>unconference style
368 conference</a>, which basically meant that it was our job to decide what
369 we want to talk about.
370 </p><p>
371 It turned out to be pretty hard, because there was so much we wanted to
372 discuss, and because we wanted to get to know each other, and we wanted to
373 do some hacking.
374 </p><p>
375 So to help us decide what subjects, and in which order we wanted to have
376 scheduled, Shawn opened a series on <a href=http://moderator.appspot.com/>
377 Google Moderator</a>, a nifty, yet simple application which allows a group
378 to agree quickly on an agenda.
379 </p><p>
380 It worked quite well; However, that little saboteur displayed his sense of
381 humor so overtly that some entertaining Gitter put the question "Should Sverre
382 wear a hat?" on the agenda.
383 </p><p>
384 Sure enough, the subject got voted up, and eventually, we got Sverre a hat:
385 </p><p>
386 <center><img src=dscho.git?a=blob_plain;hb=30319f7436828cd15db8a531a0057351d8e361c0;f=sverre-hat.jpg sverre-hat.jpg></center>
387 </p><p>
388 By the way, another thing I like about this blog engine is that there are no
389 comments... Nothing is more annoying than leaving a comment on a blog,
390 forgetting about it for a few months, and then finding somebody answered
391 ages ago.
392 </p><p>
393 Update: Sverre says it was dsymonds idea.
394 </p>
395 <h6>Thursday, 22nd of January, Anno Domini MMIX, at the hour of the Dragon</h6>
396 <a name=1232604722>
397 <h2>Let there be images!</h2>
400 </p><p>
401 One of the most important features of blogs is the ability to insert images.
402 So what would this blog be, if it could not present something that says
403 more than a thousand words?
404 </p><p>
405 So here it goes, my first picture in this blog, taken from my Google Tech
406 Talk in Mountain View:
407 </p><p>
408 <center><img src=dscho.git?a=blob_plain;hb=85b89d1cd73acd65ca4381be901d50287dde8170;f=all-your-rebase.png width=500px></center>
409 </p><p>
410 Now this blog starts to look like a real blog...
411 </p>
412 <h6>Thursday, 22nd of January, Anno Domini MMIX, at the hour of the Rabbit</h6>
413 <a name=1232599693>
414 <h2>My blog has style</h2>
417 </p><p>
418 It is official. The blog has a style sheet now.
419 </p><p>
420 The major problem was how to design the system such that it would work
421 both locally and on <a href=http://repo.or.cz>repo.or.cz</a> via gitweb.
422 </p><p>
423 Basically, I realized that I'd need a dry run mode anyway, to prevent
424 all my failed attemp.. oops, I meant, to prevent an accidental push
425 when I am at an, ahem, intermediate state of the 'blog' branch.
426 </p><p>
427 Therefore, I could write a different file locally, which I can load
428 into my venerable Firefox.
429 </p><p>
430 The next plans with my new toy are to enable an easy way to support
431 showing images, and then maybe a table of contents. External links
432 would be cool (<a href=http://repo.or.cz>repo.or.cz</a> does not count, it is special-cased), too.
433 </p><p>
434 And later maybe a cut-off, with automatic generation of links to older
435 posts. Hmm, for those, I'll have to change the URL to include the
436 current commit name, so that the images will be found, too...
437 </p><p>
438 Which in turn means that I'll have to parse the source for new
439 images first, so that they can be in the commit that index.html
440 will link to, <u>before</u> it gets committed. Oh well, that cannot be
441 helped! &#x263a;
442 </p>
443 <h6>Thursday, 22nd of January, Anno Domini MMIX, at the hour of the Tiger</h6>
444 <a name=1232589695>
445 <h2>My new blog system... bloGit</h2>
448 </p><p>
449 Nowadays, you got to have your blog. Or better: your blogs. Even Junio
450 blogs about Git.
451 </p><p>
452 So I felt a little left behind, having no blog to show off. But then
453 I read about this fantastic new website on the mailing list, called
454 <i>git planet</i> which was supposed to be a place where you could have your
455 Git located blog.
456 </p><p>
457 Except that you could not have your blog <u>there</u>. Instead, it is just an
458 aggregator site.
459 </p><p>
460 I was disappointed.
461 </p><p>
462 But then, I had this (in my humble opinion very cute) idea that I already used to "publish"
463 my slides from the talk "Contributing with Git (AKA All your rebase are
464 belong to us)": back then, I just created a new branch, committed the
465 file, and uploaded the result to <a href=http://repo.or.cz>repo.or.cz</a>, to be downloaded via Gitweb.
466 </p><p>
467 So I asked Pasky via IRC, if he would have any objections if I abused
468 <a href=http://repo.or.cz>repo.or.cz</a> as a blog server. He understood at once, and found it "sounds
469 like a pretty cool idea".
470 </p><p>
471 Of course, just writing plain HTML and committing that is <i>too easy</i>,
472 therefore I decided to write a shell script that would turn some sort
473 of simple text file into proper HTML, commit it, and upload the result.
474 </p><p>
475 Well, about two hours later, I finished the first version of the script
476 turning plain text with minimal markup into an HTML page, and it obviously
477 worked -- otherwise nobody would be able to read this &#x263a;
478 </p>
479 </div>
480 </body>
481 </html>