Dienstag, 25. Oktober 2011

Einmal Commit und wieder zurück

Gelegentlich soll es ja passieren, daß man Sachen in sein Git Repository eincheckt, die man nicht einchecken will. Zum Beispiel hat eine Datei mal falsche Rechte, was nicht sofort auffällt, aber unschön ist. Was tun, wenn schon committed wurde? Oder wenn gar die Commit-Message falsch war? Richtig: Man guckt erstmal, was zum Thema bei stackoverflow steht. Und das ist:

Der einfachste Weg: Egal, ein Commit hinterher, der die Situation bereinigt. Vorteil: Unkompliziert. Nachteil: Es sieht nicht gerade hübsch aus. (Ok, das steht nicht bei stackoverflow, das ist also mein Beitrag zum Weltwissen.)

Zweite Variante:
git commit --amend
Vorteil: Git läßt einen die Commit-Message nochmal eingeben. Nachteil: Die falsche Datei kann man so nicht korrigieren.

Dritte Variante:
git reset --soft HEAD^
gefolgt von der Korrektur und einem abschließenden
git commit -c ORIG_HEAD
Vorteil: Es können wirklich alle Änderungen ausgeführt werden. Mit -c ORIG_HEAD werden Author-Informationen und der Timestamp vom ursprünglichen Commit übernommen.

Sonntag, 23. Oktober 2011

Wie man nicht bei Auktionen steigern sollte

Aus aktuellem Anlass zwei Dinge, die man nicht tun sollten, wenn man ein wertvolles Schiller-Manuskript per Auktion für sein Museum ersteigern will:

  1. Interesse im Radio ankündigen. Es ist nicht weise, der Welt zu verkünden, daß das Objekt der Begierte eine absolute Sensation ist -- das ist die Aufgabe des Verkäufers.
  2. Finanzrahmen ankündigen. Die stolze Aussage, man habe zweihundertausend Euro für die Aktion zusammengescharrt, sagen jedem Konkurrenzbieter, wieviel Geld er braucht.
An dieser Stelle steht das Scheitern der geplanten Aquise eigentlich schon fest. Folglich ist es unsinnig, sich anschließend zu beschweren, das Bieter aus der Privatwirtschaft mehr Geld für den Ankauf aufbringen konnten.

Bleibt die Frage: Was passiert jetzt mit den zweihunderttausend Euro?

Freitag, 21. Oktober 2011

Über Versionsnummern

Dritter Anlauf: Über Versionsnummern. Wie jedem schnell klar wird, der in einem größeren Softwareprojekt mit Versionsnummern zu tun hatte, ist das Thema kompliziert. In erster Linie, weil man schnell übersehen kann, daß ein einzelnes Stück Software viele Versionsnummern hat.

Da wäre zunächst einmal die Produktversion. Das ist die Bezeichnung, die draußen draufsteht. Wenn Microsoft ein Windows 7 verkauft, heißt das nicht, daß es sieben Versionen von Windows gibt. Vielmehr heißt es, Microsoft eine "Aggregation" aus Softwarekomponenten unter dem Namen "7" verkauft, die sich funktional von allen anderen Aggregationen unterscheidet. Entscheidend ist hier, daß 7 "anders" ist als beispielsweise Vista oder XP.

Eine Produktversion kann man eng oder lose definieren. Im Idealfall beschreibt eine Produktversion genau eine Kombination aus Komponentenversionen, aber das kommt letztlich darauf an, was Marketing und Rechtsabteilung draus macht. Wir haben uns mittlerweile an verwaschene Produktversionen gewöhnt, ja wir erwarten mittlerweile, daß eine Software regelmäßig kostenlos aktualisiert wird, womit Aussagen wie "Das ist ein nacktes Windows 7." an zwei unterschiedlichen Tagen zwei unterschiedliche Softwarestände beschreiben.

Technische Versionen sind da spezifischer: Sie beschreiben einen exakten Sachverhalt. Die Version 2.2.21 des Apache Webservers beispielsweise beschreibt einen exakten Stand von Quelltextversionen. Mit der Versionsnummer als Schlüssel läßt sich daraus jedes einzelne Zeichen in jeder einzelnen Zeile jeder einzelnen Datei der Software ableiten. ("Holistisch" klingt hier zwar gut, stimmt aber leider nicht. Trotzdem habe ich das Wort jetzt in meinem Artikel.) Je nachdem, wie sorgfältig die Entwickler bei der Festlegung der externen Abhängigkeiten waren, läßt sich auch die technische Version aller verwendeten Softwarepakete ableiten, obwohl die Schärfe der Definition aus praktischen Gründen an den Rändern immer weiter abnimmt.

Aber so vernünftig das auch klingt: Diese Versionsnummern werden willkürlich vergeben. Die Regeln zur exakten Bildung der Versionsnummer mögen strenger sein, aber im Grunde ist die Versionsnummer 2.2.21 nichts als ein einzelnes Symbol, ein Name, die einem spezifischen Quelltextstand bewußt zugeordnet wurde. Am besten paßt hier eigentlich die Bezeichnung "Release".

Anders die Buildnummern und die Versionsnummern einzelner Dateien im Source Code Management. Die Versionsnummern einzelner Dateien folgen keinem bewußten Willen, vielmehr klettern die Versionsnummern einiger Dateien schneller als die anderer. Teile des Codes bleiben jahrelang unberührt, andere werden im Minutentakt verändert. Die Versionen einer einzelnen Datei zu nummerieren hat keinen Wert und verleitet zu falschen Annahmen (weshalb sich verteilte SCMs das Leben leichter machen und es gleich ganz unterlassen, Versionen zu nummerieren). Buildnummern hingegen steigen kontinuierlich an, daher läßt sich aus zwei vorhandenen Nummern eine Reihenfolge der Builds ableiten. Nach wie vor ist es natürlich gefährlich, eine andere Bedeutung in diese Nummern zu interpretieren als die, daß Build 2 nach Build 1 ausgeführt wurde, insbesondere sind alle Annahmen zur Korrelation zwischen Nummer und Qualität unsinnig.

Wenn man über Versionsnummern spricht, muß man also wissen, was man damit meint. Benutzer von Software meinen, wenn sie von Versionen sprechen, oftmals die Produktversion, seltener eine technische Version ("Release"), normalerweise nicht die Buildnummer und praktisch nie die Dateiversion.
Es sollte klar sein, daß Produktversionen und technische Versionen sowie technische Versionen und Build- oder SCM-Versionen nur lose zusammenhängen und nicht synonym verwendet werden können. Wenn jetzt continuous builds auf traditionelle Testcenter treffen, wird die Sache spannend genug für einen eigenen Artikel.

Freitag, 7. Oktober 2011

Raubkopien

Und wieder einmal zeigt sich, daß die größte Gefahr für ein IT-System nicht von außen, sondern von innen kommt: heise.de: Größter Fall von Softwarepiraterie weltweit.

Spaß beiseite: In großen Unternehmen ist das Problem "Unterlizensierung" wahrscheinlich viel schwerer in den Griff zu bekommen. Undurchsichtige Lizenzvarianten, Interoperabilitätsprobleme, Mondpreise und die weitverbreiteten lokalen Adminrechte machen es selbst engagierten IT-Abteilungen schwer, ihr Netz "sauber" zu halten. Aber von den vier Problemen liegen eigentlich 3,5 im Verantwortungsbereich der Softwarehersteller und sind entweder gewollt oder lassen sich nicht mehr einfach abschaffen.

Die Situation ist offenbar unbefriedigend: Der Einsatz von Raubkopien ist ein Risiko (bezeichnenderweise sind die gefundenen Produkte von Adobe und Autodesk, Quasi-Monopolisten in ihren Segmenten und nicht gerade Preisbrecher). Ich vermute ja, daß früher oder später SaaS zu bezahlbaren Preisen sich den Markt mit massenhafter Niedrigpreissoftware teilt, Hochpreissoftware wird's nur noch in Segmenten geben, die für Raubkopierer zu klein sind.

P.S.: Preis sagt nichts über Qualität, und Qualität nichts über Akzeptanz.