hg, bzr und git als svn superclient

written by Martin Häcker on

Ein langer Traum ist in Erfüllung gegangen - alle Versionskontrollsysteme (hg, bzr, git und natürlich svn) unterstützen endlich das Reden mit einem Subversion-Server.

Das bedeutet, man kann jetzt SVN als Lingua Franca mit allen verteilten Versionskontrollsystemen einsetzen um einen gemeinsamen Server zu haben von dem alle pullen und pushen können. Oder kurz gesagt: Wenn man SVN als Server hat, kann jeder benutzen was ihm persönlich am meisten liegt.

Das funktioniert natürlich noch alles nicht perfekt - aber es fängt an.

Und daher hab ich mal aus Spaß ein Projekt mit jedem der VCS ausgecheckt und bin etwas überrascht von den Ergebnissen:

  • bzr git und svn haben den root des Projekts einfach als große Ordner-Hierarchie ausgecheckt, so wie das in svn eben abgebildet ist.
  • hg hat als einziges ohne Zusatz-Optionen erkannt das es trunk, branches und tags gibt und das auf die entsprechenden nativen Konzepte (branches) abgebildet. (Das müsste mit mehr Aufwand aber mit bzr und git auch gehen).
  • Der Import hat schon mal recht unterschiedlich lange gedauert:
    • bzr: 20 min
    • git: 14 min
    • svn: 7 min
    • hg: 7 min (sogar drei Sekunden schneller als svn! :)
  • Logischerweise sind damit die Repositories auch völlig unterschiedlich groß:
    • bzr: 83 MB
    • git: 93 MB
    • svn: 162 MB (Zweimal die Größe des ganze Source-Codes aller tags und branches, also wie erwartet)
    • hg: 5.2 MB (überraschend - angeblich steckt da die ganze History drin - so richtig glauben kann ich das aber noch nicht. Vom Platz her ist das etwa das doppelte den alleine der trunk als checkout braucht)

Hier die Kommandos die ich abgeschickt habe (mit den Laufzeit Ergebnissen)

bzr clone http://python-nose.googlecode.com/svn nose-bzr:: 177,62s user 27,00s system 16% cpu 20:17,34 total git svn clone http://python-nose.googlecode.com/svn nose-git:: 57,63s user 130,80s system 22% cpu 14:02,33 total svn co http://python-nose.googlecode.com/svn nose:: 9,13s user 19,77s system 6% cpu 6:58,31 total hg svnclone http://python-nose.googlecode.com/svn nose-hg:: 27,15s user 12,25s system 9% cpu 6:57,76 total

So viel kann man daraus natürlich nicht schließen - aber mir gefällt dass man jetzt mit allen VCS an Subversion herankommt und der Weg auf dem hgsubversion ist scheint mir schon mal sehr gut zu sein. :)

Model View Controller - endlich mal erklärt

written by Martin Häcker on

Per Video.

Groooßartig. :-D

The Git Index considered harmful

written by Martin Häcker on

Endlich hab ich mal eine ordentliche Quelle gefunden wofür der Index bei GIT gut ist.

Kurz erklärt: Der Index ist eine Vorstufe für jeden Commit. Man comittet zuerst in den index mit git add some_file und comitted dann den index ins repository mit git commit. Es sei denn man sagt git commit some_file in dem fall wird es direkt comitted, oder man wählt eines der anderen kommandos die irgend etwas merkwürdiges mit dem index anstellen, dann weiß man in der Regel gar nicht mehr was Sache ist.

Das hab ich nie verstanden - denn wieso noch mal eine Stufe mehr, wenn man doch sowieso lokal arbeitet und alles was man verbockt hat wieder verändern kann bevor man es pusht?

Ah well. Es gibt offenbar drei Hauptgründe:

  1. Der Index hilft besser mit einer dirty workspace zu leben
  2. Der Index hilft noch mehr über einen commit nachzudenken und ihn zu verfeinern bevor man ihn macht
  3. Linux Torvalds hat den Index erfunden und will ihn behalten

Zu 1. Eine Dirty Workspace ist manchmal praktisch

Die Idee ist dass es Änderungen gibt die jeder in seinem lokalen Checkout hat aber niemand einchecken will. Z.B. die debug-flags, oder der andere Pfad in einem makefile. Es ist viel komfortabler jedes mal zu sagen was man committen will, als jedes mal daran zu denken was man nicht committen will. Ganz davon abgesehen dass man irgendwan nicht daran denkt das man etwas nicht machen wollte. Been there, done that.

Dieses Problem hab ich auch ab und an. Zum Beispiel dieses komische File dass einen Build-Counter für den Build-Bot enthält. Eigentlich sollte das gar nicht in das repository. Aber dann war es doch drinnen. Und es nervte eigentlich nur, weil jeder lokale compile es erhöht hat. Und wenn es dann doch mal jemand comitted hat, gab es für jeden anderen natürlich einen konflikt. Sehr nervig. Oder der Debug-Flag, den man irgendwo tief in einem Framework einschalten musste. Den will ich natürlich auch nicht in einem Release haben.

Ich finde allerdings dass der Index überhaupt keine gute Lösung für derartige Probleme ist. Wenn ich lokale changes habe die ich nicht committen will, dann würde ich die viel lieber als "ignore" markieren, als jedes mal alles andere zu committen.

Ein bekannter formulierte das mal so, dass er oft code hat der den Code Testet den er comittet - und dass er den nicht im Repository haben will. Diese Variante des Arguments finde ich allerdings noch schrecklicher, weil ich in jedem Fall den Testcode auch im Repository haben will. Gerade. Damit ich später regressionstests durchführen kann. Automatisiert natürlich. Alleine der Gedanke dass der Testcode gleich wieder weggeworfen wird... schauder

Zu 2. Erst noch mal drüber nachdenken ist eine gute Idee

Das finde ich ein wesentlich besseres Argument: Man soll sich über einen Commit Gedanken machen bevor man ihn tut. Und damit man das tut soll man genau auswählen was in ihn hinein kommt.

Commendable.

Allerdings nur wenn man nicht richtig darüber nachdenkt. Denn git ist ja ein distributed VCS. Das heißt, alle commits sind erst einmal lokal. Und kommandos die den letzten commit einfach rückgängig machen oder noch mal neu gibt es jede menge. Sogar um mehrere History-Schritte zurück zu kommen. (Und die braucht es sowieso, denn selbst mit Index macht man immer wieder Fehler.)

Oops.

Also bleibt übrig: der Index ist ein zusätzlicher Abstraktionsschritt der keinen Wert hinzufügt, sondern nur kompliziertere Bedienung erzeugt.

Hm. Das heißt natürlich frei nach Occam, dass man den Index als überflüssiges Konzept 'über die klinge springen lassen' sollte.

Zu 3. Linus hats erfunden und will es behalten

Dass scheint mir der eigentliche Grund zu sein. Wie Torvalds es selber schon gesagt hat: "I have an ego the size of a small planet". Und daher wird es den Index auch weiter geben. Auch wenn es eine schlechte Idee ist. Und die git-Benutzer werden sich damit arrangieren, da niemand die Lust hat das wirklich auszufechten.

Zumindest ist das meine Einschätzung.

Schade eigentlich.

Hier mein Vorschlag: Für alle Index-Liebhaber gibt es eine Option in ihrer .gitrc mit der sie den Index und wie er heute ist aktivieren können. Für alle anderen gibt es den vernünftigen default wert, der den Index einfach wie bei allen anderen Versionskontrollsystemen versteckt. Das macht man am besten so, dass bei einem Update, die .gitrc so verändert wird, dass alle die git updaten den index behalten und alle die git neu einrichten den index explizit aktivieren müssen. Dass sollte am wenigsten Geschrei erzeugen.

Kommentare bitte per mail an spamfaenger ät gmx.de

Update: Es gibt noch viel mehr leute die mit der Git UI probleme haben. :)

Liquid Democracy und Politikwissenschaftler

written by Martin Häcker on

Heute waren zwei Politikwissenschaftler bei der Piratenpartei zu Gast - und sie sind durch Liquid Democracy (wikipedia) auf uns aufmerksam geworden.

Yay.

Auf die Frage was sie an diesem Thema reizt kamen tolle Sätze: "Kein Politikwissenschaftler weiß eigentlich noch was er noch wählen soll.", "Die Linke nicht für die Außenpolitik, die FDP für die Freiheitsrechte, die SPD nicht für die Sozialpolitik...".

Dem kann ich überhaupt nichts mehr hinzufügen. Keine Partei passt mir am Stück. Keine Partei kann ich mit gutem Gewissen wählen.

Und das ist auch die Grund-Idee hinter einer flüssigen Demokratie: Die fließband-Produkte die man von Parteien bekommt sind es heute einfach nicht mehr.

Nur die Alternative ist einfach noch nicht fertig. :-(

No software is free and spreading that misconception is harmful.

written by Martin Häcker on

Da hat eine Lehrerin in Amerika doch tatsächlich ihren heiligen Eifer entdeckt und muss ihre Schüler davor schützen freie Software zu benutzen. Daraufhin hat sie die Linux-CDs eines Schülers konfisziert und klagte dann per e-mail den Projektleiter des Linux-Projekts an. Weil es Software die Umsonst ist nicht geben kann und darf.

Unglaublich. Peinlich.

Und das wird immer schlimmer je weiter man ließt. via

Software Literacy

written by Martin Häcker on

The ability to “read” a medium means you can access materials and tools created by others. The ability to “write” in a medium means you can generate materials and tools for others. You must have both to be literate. In print writing, the tools you generate are rhetorical; they demonstrate and convince. In computer writing, the tools you generate are processes; they simulate and decide.

-- Alan Key

Stop-Motion Videos are all the rage...

written by Martin Häcker on

Und dem kann ich nur zustimmen. Anschauen!

Epson All in One

written by Martin Häcker on

Schickes Gerät. Vor allem ist der Support von Epson auch gar nicht so schlecht. Per Chat wurde mir da doch sehr schnell geholfen die Scan-Funktion so umzubiegen, dass sie auch über den Print-Server und damit über das Netzwerk funktioniert.

Da hatte sich meine Hartnäckigkeit doch gelohnt - denn laut Manual geht das nämlich nicht.

Apropos Manual... Das ist so mit DRM vollgesaut, dass man daraus nicht mal ein Stück Text herauskopieren kann (nicht mal für ein Zitat!).

Zum Kotzen.

Und an sich darf man es auch nicht speichern, kopieren, archivieren... unglaublich.

Das Gerät gefällt mir ja ganz gut - aber die Software ist unter jeder Kanone. Ach ja, neben den Manuals die ja noch nicht mal alle Features enthalten.

25C3 vorbei

written by Martin Häcker on

war das anstrengend.

Die Highlights waren für mich das Piratenprojekt zu Liquid Democracy und die Bierfass-Verleihung für den OpenTracker. Der Rest war natürlich auch grandios - aber darüber schreiben schon andere und ich später auch noch mal.

Mein Persönliches Ergebnis für den 25C3 ist eine kleine Implementierung einer [source:/open-source/LiquidDemocracy/trunk/Election.py Proxy-Voting-Engine in Python] - das ist aber natürlich mehr ein Proof of Concept denn irgend etwas anderes - und das muss man jetzt erst einmal irgendwo implementieren um es tatsächlich benutzen zu können.

World of Goo

written by Martin Häcker on

Was soll ich sagen - ich bin begeistert.

Das Spiel ist eine Mischung aus Cracy-Machines und Lemmings und macht gerade ob des total einfachen Spielprinzips unheimlich Spaß.

Aufmerksam bin ich darauf geworden, weil die Entwickler Ron Carmel und Kyle Gabler sich entschieden haben in ihr Spiel keinerlei Kopierschutz einzubauen.

Da musste ich es doch gleich ausprobieren - und hab es mir gerade gekauft. Absolut das Geld wert. (15 €)

Meine Empfehlung für Weihnachten. (Mac und Windows, Linux ist gerade noch in der Entwicklung)