<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8750190968728518640</id><updated>2011-12-12T10:40:19.230+01:00</updated><category term='Software'/><category term='SCM'/><category term='Krimskrams'/><category term='Real World'/><category term='Git'/><category term='Glaskugel'/><category term='Comic'/><category term='Apple'/><category term='Spiele'/><category term='Ruby'/><category term='Beobachtungen'/><category term='CentOS'/><title type='text'>Ketchup Log</title><subtitle type='html'>Alles Mögliche, was mir so unter die Finger kommt. Natürlich unsortiert.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>69</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1341754130031563570</id><published>2011-10-25T16:51:00.001+02:00</published><updated>2011-10-25T16:51:12.827+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Einmal Commit und wieder zurück</title><content type='html'>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 &lt;a href="http://stackoverflow.com/questions/179123/how-do-i-edit-an-incorrect-commit-message-in-git"&gt;bei stackoverflow steht&lt;/a&gt;. Und das ist:&lt;br /&gt;&lt;br /&gt;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.)&lt;br /&gt;&lt;br /&gt;Zweite Variante:&lt;br /&gt;&lt;code&gt;git commit --amend&lt;br /&gt;&lt;/code&gt;Vorteil: Git läßt einen die Commit-Message nochmal eingeben. Nachteil: Die falsche Datei kann man so nicht korrigieren.&lt;br /&gt;&lt;br /&gt;Dritte Variante:&lt;br /&gt;&lt;code&gt;git reset --soft HEAD^&lt;br /&gt;&lt;/code&gt;gefolgt von der Korrektur und einem abschließenden&lt;br /&gt;&lt;code&gt;git commit -c ORIG_HEAD&lt;br /&gt;&lt;/code&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1341754130031563570?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1341754130031563570/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1341754130031563570' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1341754130031563570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1341754130031563570'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2011/10/einmal-commit-und-wieder-zuruck.html' title='Einmal Commit und wieder zurück'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-5647713771256926359</id><published>2011-10-23T10:26:00.001+02:00</published><updated>2011-10-23T10:27:01.429+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Real World'/><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>Wie man nicht bei Auktionen steigern sollte</title><content type='html'>Aus aktuellem Anlass zwei Dinge, die man nicht tun sollten, wenn man ein wertvolles Schiller-Manuskript per Auktion für sein Museum ersteigern will:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;Finanzrahmen ankündigen. Die stolze Aussage, man habe zweihundertausend Euro für die Aktion zusammengescharrt, sagen jedem Konkurrenzbieter, wieviel Geld er braucht.&lt;/li&gt;&lt;/ol&gt;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.&lt;br /&gt;&lt;br /&gt;Bleibt die Frage: Was passiert jetzt mit den zweihunderttausend Euro?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-5647713771256926359?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/5647713771256926359/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=5647713771256926359' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5647713771256926359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5647713771256926359'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2011/10/wie-man-nicht-bei-auktionen-steigern.html' title='Wie man nicht bei Auktionen steigern sollte'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-3005794238351812228</id><published>2011-10-21T17:57:00.000+02:00</published><updated>2011-10-21T17:57:36.604+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Über Versionsnummern</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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&amp;nbsp;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.&lt;br /&gt;&lt;br /&gt;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&amp;nbsp;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.&lt;br /&gt;&lt;br /&gt;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".&lt;br /&gt;&lt;br /&gt;Anders die Buildnummern und die Versionsnummern einzelner Dateien im&amp;nbsp;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&amp;nbsp;Korrelation&amp;nbsp;zwischen Nummer und Qualität unsinnig.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;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.&amp;nbsp;Wenn jetzt continuous builds auf traditionelle Testcenter treffen, wird die Sache spannend genug für einen eigenen Artikel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-3005794238351812228?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/3005794238351812228/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=3005794238351812228' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3005794238351812228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3005794238351812228'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2011/10/uber-versionsnummern.html' title='Über Versionsnummern'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-837788590364446285</id><published>2011-10-07T16:03:00.001+02:00</published><updated>2011-10-07T16:03:26.852+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Glaskugel'/><title type='text'>Raubkopien</title><content type='html'>&lt;p&gt;Und wieder einmal zeigt sich, daß die größte Gefahr für ein IT-System nicht von außen, sondern von innen kommt: &lt;a href="http://heise.de/-1355811"&gt;heise.de: Größter Fall von Softwarepiraterie weltweit&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;P.S.: Preis sagt nichts über Qualität, und Qualität nichts über Akzeptanz.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-837788590364446285?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/837788590364446285/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=837788590364446285' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/837788590364446285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/837788590364446285'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2011/10/raubkopien.html' title='Raubkopien'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-3316748902430458830</id><published>2011-09-28T13:22:00.000+02:00</published><updated>2011-09-28T13:22:07.370+02:00</updated><title type='text'>Lieferumfang</title><content type='html'>&lt;p&gt;Wenn es darum geht, eine entwickelte Software auszuliefern, gibt es zwei Extreme: Eine Lieferung der kompletten (virtuellen) Appliance, am besten versiegelt, und eine Lieferung von nackten Komponenten mit Handbuch. Die Realität ist irgendwo dazwischen: Die Appliance ist sicherlich ein für Hersteller und Support attraktiv, verbietet sich aber oft durch Probleme bei der Integration in bestehende Infrastruktur, und nackte Komponenten sind nicht unbedingt das, was Kunden kaufen wollen.&lt;/p&gt;&lt;p&gt;Hierzu eine Anmerkung: Der Lieferumfang eines Produktes sollte immer so strikt wie möglich definiert sein, also nur die absolut notwendigen Bestandteile umfassen. Beispiel: Wenn ich eine Web-Applikation liefere, dann enthält mein Lieferpaket im Idealfall nur die unvermeidlichen Bestandteile meine-webapp.war und Handbuch-für-meine-webapp.pdf, in dem steht, auf welcher Plattform meine-webapp.war deployed werden kann.&lt;/p&gt;&lt;p&gt;Warum? Weil man für alles, was man liefert, verantwortlich ist. Im schlimmsten Falle also für jeden Programmfehler im verwendeten Tomcat, sofern man sich erweichen ließ und einen Tomcat ins Lieferarchiv gepackt hat. In diesem Falle muß man also regelmäßig Updates der ursprünglichen Lieferung schicken, die alle getestet werden müssen -- und obwohl die eigene Kreation sich möglicherweise schon lange nicht mehr geändert hat, entsteht hier ein regelmäßiger Aufwand. Ist man mit den Verträgen ungeschickt, sind womöglich Probleme mit der Gewährleistung nicht ausgeschlossen.&amp;nbsp;Schön, das ist ein Schreckensszenario, welches so schnell nicht eintreten sollte, aber es bleibt ein potentielles Problem.&lt;/p&gt;&lt;p&gt;Das hat auch eine Auswirkung auf die Softwareentwicklung: Der Verzicht auf das "Anpassen" (aka "customizing") der Plattform vereinfachen Deployment und Betrieb und erlaubt, die Plattform "out-of-the-box" zu verwenden. Damit entfällt ein wichtiger Grund, die Plattform mitzuliefern, den Lieferumfang deutlich strafft.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-3316748902430458830?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/3316748902430458830/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=3316748902430458830' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3316748902430458830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3316748902430458830'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2011/09/lieferumfang.html' title='Lieferumfang'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-5004022703738358613</id><published>2011-09-20T22:30:00.000+02:00</published><updated>2011-09-20T22:30:50.811+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Über Keyword Substitution</title><content type='html'>Mal wieder Git, aber diesmal ein Thema, was Git nicht kann: Keyword Substitution. Wer RSC, CVS oder SVN kennt, ist früher oder später über die praktischen kleinen Helferchen gestolpert, die in jede Datei die Versionsnummer fest einbrennen, und auch ältere SCM-Fossile verfügen über diese Fähigkeit. Ich selbst habe in meiner Zeit als CVS-Anwender in jeden Dateiheader sklavisch ein $Id$ gehackt und das gleich zur persönlichen Best Practice erklärt, denn schließlich ist es ja wichtig, jederzeit zu wissen, in welcher Dateiversion man unterwegs ist. Daher hat es mich etwas verstört, daß Git nicht nur keine Keyword Substitution kennt, sondern die Git-Entwickler sich auch noch strikt weigern, eine solche einzubauen. Was denken die sich dabei?&lt;br /&gt;&lt;br /&gt;Wie sich herausstellt, haben sie gute Gründe -- am einfachsten von Linus Torvalds in einer &lt;a href="http://www.gelato.unsw.edu.au/archives/git/0610/28891.html"&gt;ausreichend undiplomatischen eMail&lt;/a&gt; zusammengefaßt. Die Argumente im einzelnen:&lt;br /&gt;&lt;br /&gt;Zunächst einmal ist klar, daß externe Tools von $Id$-Strings verwirrt werden, schließlich haben die keine Möglichkeit, die zu vergleichenden Texte ohne die Substitution zu vergleichen. Aber das ist vielleicht nicht so schlimm, denn erstens kann man ja alle zu vergleichenden Texte vorher durch einen Filter schicken, der die Strings entfernt -- genau so wie es CVS und SVN beim Einchecken tun.&lt;br /&gt;&lt;br /&gt;Der zweite Punkt leuchtet auch sofort ein: Ein SCM, welches eine Keyword Substitution vornimmt, muß genau wissen, was man gerade eincheckt. Warum ist das ein Problem? Wir wissen ja schließlich auch, daß man Binärdateien nicht mergen kann, und schrecken trotzdem nicht vor dem Mergen zurück! Der Grund liegt in der Art, wie ein SCM Dateien mit Keywords speichern muss: Nämlich erstaunlicherweise ohne Keywords! Die Keywords werden tatsächlich während des Auscheckens ersetzt, da ansonsten zwei Versionen eines Textes garantiert unterschiedlich wären, selbst wenn sich inhaltlich nichts geändert hat. Irrt sich jetzt das SCM beim Einchecken, so zerstört es die zu sichernde Datei und speichert einen großen Haufen Müll, was im schlimmsten Falle erstmal niemanden auffällt (unbedingt mal ausprobieren: Ein PDF in VSS einchecken -- wird als 7-Bit-EBCDIC-Text erkannt und rettungslos verstümmelt). Dem Nutzer wird das erst bewußt, wenn er mal Dateien aus dem SCM abrufen will. Aber dann sind seine vorherigen Bemühungen bereits zerstört.&lt;br /&gt;&lt;br /&gt;Der dritte Punkt klingt erstmal etwas altklug: Natürlich weiß das SCM viel besser, welche Version ich gerade ausgecheckt habe, aber ich will das doch auch sehen! Nun, tatsächlich kann ich das ja auch sehen, aber die Frage ist: Wann muß ich es wissen? Nicht beim Schreiben von Code, denn da arbeitet man ohnehin auf dem HEAD. Interessant wird die Version einer Datei bei der Analyse von Code, und hier spielt die Version einer einzelnen Datei eine verblüffend geringe Rolle. Wichtiger ist hier der Kontext: Welche Dateien gehören zusammen, welche Änderungen bilden einen inhaltlich zusammengehörigen Change Set? An dieser Stelle klickt wieder ein Puzzleteil an die richtige Stelle: Git hat ohnehin keine handlichen Versionsnummern, nur SHA1-Identifier für Change Sets, und die vermißt wirklich niemand im Quelltextheader.&lt;br /&gt;&lt;br /&gt;Nun, vielleicht nicht im Quelltextheader, aber wie ist es mit der "About this Application"-Box? Ah, richtig, die ausgelieferten Versionen müssen natürlich irgendwie kenntlich gemacht werden. Aber hier kommt ein anderes Prinzip zum Tragen: Die Produktversion hat nichts mit der technischen Version des SCM zu tun. Wirklich nicht. Und wenn die Produktversion nicht von der SCM-Version abhängt, muß die SCM-Version auch nicht im Produkt stehen. Hier bieten sich Build-Nummern an, die ihrerseits Tags im SCM steuern (das SCM ist also nicht das führende System).&lt;br /&gt;&lt;br /&gt;Zuletzt aber noch ein Argument, für das ich im Moment kein Zitat finde (auch das ist von Torvalds, nur beweisen kann ich's nicht): Ein SCM muß Dateien immer unverändert speichern, und wenn sich zwei Versionen einer Datei nur in der Versionsnummer unterscheiden, hat das SCM einen fundamentalen Fehler. Warum? Weil ein SCM schließlich Inhalte speichern muß und nicht einfach nur Nummern hochzählt (das können Taschenrechner besser). Folglich muß ein funktionierendes SCM zwei Dateien, die sich nicht unterscheiden, immer die selbe Versionsnummer zuweisen.&lt;br /&gt;&lt;br /&gt;An dieser Stelle muß man erstmal kurz anhalten und ausführlich nachdenken. Es stimmt, natürlich, und es hat Konsequenzen: Demnach sind nicht nur die Keyword Substitutions schlecht, sondern auch alle automatischen Umkodierungen (Unix/DOS, ASCII/UTF-8, ...). Und wer schon ein Weilchen mit verschiedenen Plattformen und SCMs zu tun hatte, weiß, wie viele Probleme sich mit dieser Regel in Luft auflösen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S.: Ich bin sehr froh, recht schnell eingesehen zu haben, daß Torvalds Recht hat. Ich wäre nicht gerne Anhänger einer furchtbaren Idee, noch dazu idiotisch, welche seit Dekaden fundamental fehlgeleitete SCM-Designs bestimmte. Denn ich habe das Licht gesehen. Leider muß ich jetzt zurück in den Keller zu SVN.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-5004022703738358613?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/5004022703738358613/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=5004022703738358613' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5004022703738358613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5004022703738358613'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2011/09/uber-keyword-substitution.html' title='Über Keyword Substitution'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-215417428461629357</id><published>2011-05-19T12:59:00.000+02:00</published><updated>2011-05-19T12:59:34.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CentOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><title type='text'>Git auf CentOS 5.x</title><content type='html'>Warum ist &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; eigentlich kein Bestandteil von RedHat Enterprise Linux? Wäre es Bestandteil von RedHat, dann wäre es auch Bestandteil von CentOS, und dieser Eintrag wäre überflüssig. So aber ist es leider immer noch etwas anstrengend, git auf RHEL und Derivate zu bekommen.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Auf &lt;a href="http://superuser.com/"&gt;superuser.com&lt;/a&gt; gibt es eine &lt;a href="http://superuser.com/questions/184228/installing-git-on-centos/184231#184231"&gt;Kurzanleitung&lt;/a&gt;, die ein Vorgehen beschreibt. Allerdings habe ich noch einen fertigen gist, den ich, wie ich stolz anmerken möchte, schon lange vor besagter Kurzanleitung aus Informationen von &lt;a href="http://www.how-to-linux.com/2009/01/install-git-161-on-centos-52/"&gt;Howto-Linux&lt;/a&gt; zusammengestellt habe (damals noch für CentOS 5.2). Das Script kann mit&lt;br /&gt;&lt;br /&gt;&lt;code&gt;wget https://gist.github.com/raw/146206/bb90b1bff3abb9ac6843aba2b9cce89f36aebeff/install_git_on_centos.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;heruntergeladen werden und sieht dann so aus:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/146206.js?file=install_git_on_centos.sh"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Zuerst sollte die Proxy-Einstellung und die gewünschte Git-Version geprüft und ggf. angepaßt werden, dann wird das Script noch mit chmod +x install_git_on_centos.sh ausführtbar gemacht, und kann dann gestartet werden. Wenige Minuten später ist ein Git in der gewünschten Version installiert.&lt;br /&gt;&lt;br /&gt;Noch ein Nachwort zur veralteten Version: Der gist wird von mir gelegentlich aktualisiert. In der Vergangenheit hat es bei mir keine Probleme beim Zusammenspiel der verschiedenen Git-Versionen, also aktualisiere ich das nur recht selten.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-215417428461629357?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/215417428461629357/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=215417428461629357' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/215417428461629357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/215417428461629357'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2011/05/git-auf-centos-5x.html' title='Git auf CentOS 5.x'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-7743054016606123323</id><published>2010-03-10T23:07:00.000+01:00</published><updated>2010-03-10T23:33:03.777+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><title type='text'>Nachricht an mich selbst: Pro Git lesen</title><content type='html'>Heute flatterte mal wieder ein Update vom &lt;a href="http://github.com/blog.html"&gt;Github Blog&lt;/a&gt; herein, in dem auf Neuigkeiten im &lt;a href="http://progit.org/blog.html"&gt;Pro Git Blog&lt;/a&gt; aufmerksam gemacht wurde. Die Liste liest sich recht eindrucksvoll:&lt;br /&gt;&lt;ul style="list-style-type: disc"&gt;&lt;li&gt;Merges rückgängig machen&lt;/li&gt;&lt;li&gt;Smart HTTP Transport&lt;/li&gt;&lt;li&gt;Rerere&lt;/li&gt;&lt;li&gt;git bundle&lt;/li&gt;&lt;/ul&gt;Um all die coolen Features benutzen zu können, braucht man, wie immer, ein halbwegs modernes git: zumindest der Smart HTTP Transport ist neu in Version 1.6.6. Ach ja, aktuell ist im Moment (10.3.2010) Version 1.7.0.2. Ist also nicht zuviel verlangt.&lt;br /&gt;&lt;br /&gt;Jedenfalls empfiehlt sich Pro Git wieder mal allen Git-Nutzern.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-7743054016606123323?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/7743054016606123323/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=7743054016606123323' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7743054016606123323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7743054016606123323'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2010/03/nachricht-mich-selbst-pro-git-lesen.html' title='Nachricht an mich selbst: Pro Git lesen'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-6336900423760188985</id><published>2010-01-22T11:00:00.002+01:00</published><updated>2010-01-22T11:06:46.388+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><title type='text'>Emacs und Git</title><content type='html'>Nach langer Abstinenz mal wieder ein kurzer Blog-Eintrag. Diesmal zu ... &lt;a href="http://git-scm.com"&gt;Git&lt;/a&gt;! Unter dem Titel &lt;a href="http://alexott.net/en/writings/emacs-vcs/EmacsGit.html"&gt;Working with Git from Emacs&lt;/a&gt; hat &lt;a href="http://alexott.net/"&gt;Alex Ott&lt;/a&gt; eine Übersicht über verschiedene Git-Integrationen in Emacs aufgelistet.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, Freunde des Emacs, es gibt keinen Grund, den Vim zu fürchten!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-6336900423760188985?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/6336900423760188985/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=6336900423760188985' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6336900423760188985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6336900423760188985'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2010/01/emacs-und-git.html' title='Emacs und Git'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-9011311585876673399</id><published>2009-11-03T11:54:00.002+01:00</published><updated>2009-11-03T12:02:32.434+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Täglich stempeln gehen</title><content type='html'>Interessante Web-Applikationen können so einfach sein: Ryan Bates, in der Rails-Gemeinde durch seine &lt;a href="http://railscasts.com/"&gt;Railscasts&lt;/a&gt; bekannt, demonstriert mit &lt;a href="http://dailystamp.com/"&gt;Daily Stamp&lt;/a&gt; eine nette kleine Applikation, die alles hat, was man braucht: Einfachheit, ein paar nette Gimmicks, und ein klar definiertes Ziel.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nebenbei diente sie als Beitrag zum &lt;a href="http://r09.railsrumble.com/"&gt;Rails Rumble 2009&lt;/a&gt;. Bemerkenswert: Alle dort gezeigten Applikationen sind innerhalb von nur 48 Stunden entstanden.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-9011311585876673399?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/9011311585876673399/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=9011311585876673399' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/9011311585876673399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/9011311585876673399'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/11/taglich-stempeln-gehen.html' title='Täglich stempeln gehen'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-7276810312211642981</id><published>2009-09-12T13:29:00.004+02:00</published><updated>2009-09-12T13:48:00.651+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Digital Edition? Nein, danke.</title><content type='html'>Ich wußte es ja: DRM fällt selbst dem geduldigsten Käufer (der ich nicht bin) irgendwann einmal auf die Füße. Vor einiger Zeit habe ich in einem Anfall von "muß ich gleich haben" und entgegen meine Prinzipien ein DRM-geschütztes Buch gekauft, daß zum Lesen Adobes Digital Edition benötigt.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nicht genug damit, daß das Lesen damit wirklich wenig Spaß macht(e), da offenbar bei jedem Umblättern sehr, sehr sorgfältig geprüft wurde, ob ich das überhaupt darf, was gerade bei Fachliteratur, wo man doch schnell mal zwischen Seiten hin- und herspringt, sehr lästig ist. Nein, nach dem Update auf Snow Leopard überraschte mich dieses Meisterwerk des Softwareingenieurskunst mit dem Hinweis, daß es eine neue Version gäbe: Entweder ich installiere jetzt sofort das Update, oder ich schere mich zum Teufel und lese mein gekauftes Buch eben nicht. Na schön, nach wenigen Minuten "Installationserlebnis" war das neue Digital Editions installiert und konnte gestartet werden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mein. Einziges. Existierendes. DRM-geschütztes. E-Book. Läßt. Sich. Nicht. Mehr. Öffnen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Weil? Ja, was soll ich sagen? Keine Ahnung, Adobe murmelt irgendwelchen nutzlosen Techno-Mumbo-Jumbo und verweigert die Anzeige.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wie komme ich an mein Buch? Keine Ahnung. Ist mir jetzt auch egal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fazit: Ich gehe jetzt in einen Buchladen und kaufe mir das Buch. Nochmal. Vorher lösche ich Adobe Digital Editions (erledigt.). In Zukunft kaufe ich nur noch DRM-freie Bücher. Und wenn es keine mehr gibt, mir egal, kaufe ich eben weiter toten Wald.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S. Es gibt natürlich weiterhin Anbieter, die PDFs ohne DRM verkaufen -- da steht dann eben auf jeder Seite mein Name.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.P.S.: Es gibt keine "gute" DRM-Technologie. Es sei denn, man betrachtet gedruckte Bücher als DRM-geschützt (was Quatsch wäre, weil sie sehr, sehr nicht-digital sind).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-7276810312211642981?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/7276810312211642981/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=7276810312211642981' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7276810312211642981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7276810312211642981'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/09/digital-edition-nein-danke.html' title='Digital Edition? Nein, danke.'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-7071974180862771015</id><published>2009-08-25T11:12:00.002+02:00</published><updated>2009-08-25T11:16:01.102+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Perfect Gem...</title><content type='html'>Nur eine kleine Erinnerung an mich selbst: &lt;a href="http://technicalpickles.com/"&gt;technical.pickles&lt;/a&gt; hat unter &lt;a href="http://technicalpickles.com/posts/craft-the-perfect-gem-with-jeweler"&gt;Craft the perfect gem with Jeweler&lt;/a&gt; einen Überblick über das Erstellung und Verwalten von Ruby Gems mit &lt;a href="http://technicalpickles.github.com/jeweler/"&gt;Jeweler&lt;/a&gt; geschrieben. Macht das Leben leichter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-7071974180862771015?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/7071974180862771015/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=7071974180862771015' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7071974180862771015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7071974180862771015'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/08/perfect-gem.html' title='Perfect Gem...'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-503646171372103026</id><published>2009-07-21T11:59:00.004+02:00</published><updated>2009-07-21T12:57:07.889+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Dropbox: Platz im Netz</title><content type='html'>Gestern bin ich auf &lt;a href="https://www.getdropbox.com/referrals/NTE1ODAwNTc5"&gt;Dropbox&lt;/a&gt; gestoßen, ein Dienst, der Dateien im Netz ablegt, versioniert und synchronisiert. Die Kosten für Dropbox sind moderat (angefangen bei einer kostenlosen Variante mit 2GB Platz), die Software ist intuitiv: Neben der auch bei anderen Diensten bestehenden Möglichkeit, Dateien zwischen zwei Maschinen zu synchronisieren, gibt Dropbox dem Nutzer die Fähigkeit an die Hand, auf alte Versionen einer Datei zuzugreifen. Damit lassen sich schnell einfach Backup-Szenarien umsetzen.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Für bestehende Dropbox-Benutzer gibt's die Möglichkeit, andere Benutzer zu werben: Wer z.B. dem Link in diesem Blog folgt, um sich bei Dropbox anzumelden, beschehrt mir ein paar MB zusätzlichen Speicherplatz. Eine interessante Wendung ist aber, daß ein neuer Benutzer, der einer Einladung folgt, selbst ebenfalls zusätzlichen Gratis-Speicherplatz erhält, was es auch für den Eingeladenen interessanter macht, einer Einladung zu folgen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wie es mit der Sicherheit der im Netz abgelegten Daten aussieht, ist mir bisher nicht bekannt. Es bietet sich also zunächst einmal an, nur Daten seiner Dropbox anzuvertrauen, die man guten Gewissens auch anderen zugänglich machen kann.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Insgesamt ein interessanter Start eines praktischen Dienstes, insbesondere im Vergleich mit &lt;a href="http://ketchuplog.blogspot.com/2009/07/max-ist-tot.html"&gt;JUnit MAX&lt;/a&gt;. Ein gewisses Vertrauen zu den Anbietern muß man allerdings schon aufbringen.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-503646171372103026?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/503646171372103026/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=503646171372103026' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/503646171372103026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/503646171372103026'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/07/dropbox-platz-im-netz.html' title='Dropbox: Platz im Netz'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-2137654591230060502</id><published>2009-07-17T08:15:00.005+02:00</published><updated>2009-07-21T12:55:09.914+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Max ist tot</title><content type='html'>Kent Beck hat gerade &lt;a href="http://www.threeriversinstitute.org/blog/?p=291"&gt;JUnit MAX beerdigt&lt;/a&gt;: Das TDD-Tool für Eclipse wird vorerst nicht weiterentwickelt, sondern aktiv "abgemanaged".&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Was für Becks Three Rivers Institute ärgerlich ist, ist für Eclipse-Benutzer traurig, weil ein nützliches Tool aus dem Arsenal von Java-Entwicklern verschwindet. Allerdings versorgt uns MAX auch auf dem Totenbett noch mit wertvollen Lektionen zum Lernen:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Auch gute Ideen brauchen Werbung.&lt;/li&gt;&lt;li&gt;Nutzerbasis ist wichtiger als Marge.&lt;/li&gt;&lt;li&gt;Paid Beta ist ein sicherer Weg in den Untergang.&lt;/li&gt;&lt;/ol&gt;JUnit MAX hat praktisch jede Gelegenheit vermieden, in Entwicklerkreisen bekannt zu werden. Einzig Kent Becks Blog- und Twitter-Leser sind gelegentlich auf MAX gestoßen (wie in den Kommentaren zum Blog zu lesen ist). Die initiale Nutzerbasis war also begrenzt. Ganz offensichtlich hat Kent Becks guter Name und die spärlichen Informationen über sein Produkt allein nicht gereicht, im Info-Meer sichtbar zu werden. Aktives Marketing wäre also unbedingt notwendig gewesen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Der Versuch, MAX frühzeitig über ein Subscription-Modell zu finanzieren, hat das Wachstumspotential von vornherein beschränkt. Als folglich die Anzahl der neuen Subscriptions zurückging, wurde versucht, das finanzielle Loch über höhere Preise pro Subscription zu stopfen, was vorhersehbar neue Subscriptions weiter reduzierte. Die Schlußfolgerung ist eigentlich zu trivial, um sie wiederzukauen, aber trotzdem: Die Breite der Nutzerbasis ist umgekehrt proportional zu den Kosten für den Nutzer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Letztlich ist aber die Idee der Paid Beta der verdiente Todesstoß für jeden neuen Dienst im Netz. Unabhängig von der "Innovationshöhe" eines Dienstes dient der Beta-Test in erster Linie dem Anbieter des Dienstes, Nutzer des Dienstes müssen i.d.R. mit willkürlichen Einschränkungen des Dienstes leben. Für das Testen eines Produktes werden Tester daher traditionell bezahlt. Die Umkehrung dieser Situation ist wohl glücklicherweise genügend potentiellen Kunden aufgefallen, bevor aus MAX ein Verbraucher-Präzendenzfall werden konnte.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zum Schluß wünsche ich Kent Beck natürlich, doch noch irgendwie einen Erfolg aus MAX zu machen. Möglichst auch einen finanzellen Erfolg.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-2137654591230060502?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/2137654591230060502/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=2137654591230060502' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2137654591230060502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2137654591230060502'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/07/max-ist-tot.html' title='Max ist tot'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-7525959269564687675</id><published>2009-07-09T09:11:00.006+02:00</published><updated>2009-07-09T09:50:09.887+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Googles nächster Wurf: Chrome OS</title><content type='html'>Google hat es wieder mal geschafft: Alle reden über Chrome OS, und das, obwohl es gerade mal &lt;a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;angekündigt&lt;/a&gt; wurde (und das Licht der Welt nicht vor Mitte 2010, also in einem Jahr, erblicken wird): Was beschehrt uns Google da jetzt wieder grandios Neues?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zunächst mal ist Chrome OS im Kern ein Linux. Das ist nicht überraschend, schließlich gibt es im Moment gerade mal drei Hauptstränge bei der OS-Entwicklung: BSD-Unix inklusve der Abkömmlinge Solaris und (Mac) OS X, Windows NT und dessen Nachfolger, und eben Linux -- und in der Vergangenheit hat Google eine gewisse Affinität zu Linux bewiesen. Ernsthafte Neuigkeiten waren da ja schon aufgrund des Entwicklungsaufwands für ein komplettes OS nicht zu erwarten.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Was Chrome OS uns also voraussichtlich bringen wird, ist eine Art Linux-Distribution mit einer neuen Oberfläche. Auch die Oberfläche wird voraussichtlich auf etablierten Systemen aufsetzen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Technologisch wird es also möglicherweise hinreichend unterschiedlich von bekannten Linux-Distributionen sein, um das bloße Übertragen von Paketen zu verhindern, aber andererseits auch nicht wirklich neu. Vielmehr halte ich es für einen ähnlichen Ansatz wie Apples iPhone: Auf der Basis von etablierter Technologie wird ein neuer Ansatz der Nutzung forciert, bei dem die Nutzer die lokale Gewalt über ihre Daten zugunsten eines ausgelagerten Managements aufgeben.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Und das könnte durchaus interessant werden: Die Debatte um Datenschutz und Unabhängigkeit vs. Nutzerbequemlichkeit ist wiedermal eröffnet. Dabei ist der Ausgang absehbar: Ich behaupte, die Mehrzahl der IT-Nutzer ist nicht an IT selbst interessiert, und würde den täglichen Kampf gegen Spams und die Jagd nach Updates und Patches lieber heute als morgen ad acta legen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Vielleicht ist Chrome OS ja die Möglichkeit für die Entwickler der etablierten Systeme, sich von der oftmals selbstherrlich mißverstandenen Losung "educate your user" loszusagen, die Komplexität für den Anwender zu reduzieren und IT endlich wieder als Werkzeug und nicht als Selbstzweck zu begreifen. Alternativ werden sie über kurz oder lang alle Nutzer verlieren, die einfach nur tägliche Aufgaben erledigen wollen -- und das sollte die Mehrheit der Nutzer sein.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Und das wäre wirklich mal etwas Neues.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-7525959269564687675?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/7525959269564687675/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=7525959269564687675' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7525959269564687675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7525959269564687675'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/07/googles-nachster-wurf-chrome-os.html' title='Googles nächster Wurf: Chrome OS'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1966909558987986750</id><published>2009-07-07T09:03:00.003+02:00</published><updated>2009-07-07T09:19:59.755+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Refactoring für Sterbliche</title><content type='html'>Yahuda Katz, einer der Rails Großmeister (wenn es diesen Titel denn gibt), hat vor ein paar Tagen einen guten Blog-Artikel zum Thema Refactoring verfaßt: &lt;a href="http://www.engineyard.com/blog/2009/6-steps-to-refactoring-rails-for-mere-mortals/"&gt;6 Steps To Refactoring Rails (For Mere Mortals)&lt;/a&gt; beleuchtet ein paar grundsätzliche Vorgehensweisen zum Refactoring (und zwar nicht nur für Rails). Ich denke, nachdem es schon ganze Bücher zum Thema Refactoring gibt, ist das tatsächlich die Essenz des Refactoring, trotzdem halte ich zwei Punkte für besonders wichtig:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Erstmal bedeuted Refactoring, daß neuer Code die gleiche Funktion erfüllt (und keine neuen Features einführt), zweitens funktioniert Refactoring nur mit Tests. Vielen, vielen Tests, die alle funktionalen Bereiche des Codes abdecken.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Meine bescheidene Erfahrung sagt, daß vor dem und während des Refactoring ein ganzer Haufen neuer Tests entsteht. Grundsätzlich muß sowohl der alte als auch der neue Code die Tests bestehen; wenn der alte Code das nicht tut, gibt es nur zwei Szenarien: Der alte Code war fehlerhaft (was ja immer sein kann), oder die Tests stellen auf die neue Codestruktur ab (was möglicherweise etwas fragwürdig ist).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zuletzt noch eine Anmerkung, die für Nicht-Rails- und Nicht-Ruby-Entwickler vielleicht etwas untergeht: Refactoring passiert nicht auf dem Master-Branch, sondern etwas abseits, da zwischendurch mit Sicherheit ein ganzer Haufen Fehler auftritt (ein SCM ist ohnehin Pflicht). Alle Nutzer von klassischen SCMs haben hier natürlich schlechte Karten, da ihr Code in Dateien organisiert ist, die vom SCM als separate Einheiten gesehen werden. Aber es gibt Hoffnung: Ein Refactoring ist ein guter Grund, sich mal &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; anzusehen. (Soviel zum Thema Propaganda.)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1966909558987986750?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1966909558987986750/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1966909558987986750' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1966909558987986750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1966909558987986750'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/07/refactoring-fur-sterbliche.html' title='Refactoring für Sterbliche'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-192219281039812963</id><published>2009-06-25T12:44:00.003+02:00</published><updated>2009-06-30T10:27:19.749+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Joel Test</title><content type='html'>Gerade stolpere ich über einen interessanten Link zu &lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt;: &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The Joel Test: 12 Steps to Better Code&lt;/a&gt;. Ich nehme mal an, das Punkte wie source control und 1-step-builds eine notwendige Bedingung für alle halbwegs professionellen Entwickler sind (und natürlich auch für die Rock Stars, die sich nicht gerne "professionell" nennen lassen).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Was ich jetzt gerne noch hätte wären ein nach Punkt 8 ruhiger Arbeitsplatz...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-192219281039812963?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/192219281039812963/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=192219281039812963' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/192219281039812963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/192219281039812963'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/06/joel-test.html' title='Joel Test'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-4487513542898665015</id><published>2009-06-22T10:53:00.003+02:00</published><updated>2011-10-10T14:56:24.099+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><title type='text'>Git, Github und Firewalls</title><content type='html'>&lt;a href="http://returnbooleantrue.blogspot.com/"&gt;Jeff Tchang&lt;/a&gt; hat in &lt;a href="http://returnbooleantrue.blogspot.com/2009/06/using-github-through-draconian-proxies.html"&gt;Using Github Through Draconian Proxies&lt;/a&gt; notiert, wie man &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; und &lt;a href="http://github.com/"&gt;Github&lt;/a&gt; auch durch die in Unternehmen oftmals vorgefundenen strikten Firewalls benutzen kann. Das funktioniert natürlich auch mit anderen Zielsystemen. (Wozu gibt's diese Firewalls eigentlich noch? Ein Affe mit einer Büroklammer kann die umgehen!) Ich bin noch nicht dazu gekommen, es auszuprobieren, aber sollte die Notwendigkeit entstehen, weiß ich jetzt, wie's geht.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(Nicht die Sache mit dem Affen.)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-4487513542898665015?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/4487513542898665015/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=4487513542898665015' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4487513542898665015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4487513542898665015'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/06/git-github-und-firewalls.html' title='Git, Github und Firewalls'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1782194627633214541</id><published>2009-06-17T10:53:00.002+02:00</published><updated>2009-06-17T10:58:56.025+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><title type='text'>Git-Parabel</title><content type='html'>Unter &lt;a href="http://tom.preston-werner.com/2009/05/19/the-git-parable.html"&gt;The Git Parable&lt;/a&gt; hat Tom Preston-Warner eine nette, wenn auch sehr lange Einführung zu Git geschrieben. Entgegen der üblichen Vorstellung der vorhandenen Konzepte und Kommandos beginnt er mit einer Real-World-Anforderung und beschreibt die Umsetzung mit einfachen Mitteln. Am Ende der Geschichte steht natürlich git, aber vielleicht sieht man es ja jetzt mit anderen Augen...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1782194627633214541?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1782194627633214541/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1782194627633214541' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1782194627633214541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1782194627633214541'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/06/git-parabel.html' title='Git-Parabel'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1745462624430301664</id><published>2009-05-29T10:54:00.004+02:00</published><updated>2009-06-17T11:07:17.551+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Über Logfileeinträge</title><content type='html'>Hat Java die Stacktraces erfunden? Ich weiß es nicht. Auf jeden Fall haben sich mit Java Stacktraces als extrem hilfreich bei der Lokalisierung von Anwendungsfehlern in Entwicklung und Betrieb (aller Art von Anwendungen) etabliert. Leider hat sich damit auch eine lästige Unsitte etabliert: Applikationen schreiben im Fehlerfalle keine Fehlermeldungen mehr, sie schreiben Stacktraces. Immer. Damit werden Administratoren mit Fehlermeldungen wie "NullPointerException" oder "RecordNotFoundException" in ihren Logfiles konfrontiert, gefolgt von fünfzig Zeilen Mumbo-Jumbo, wenn ein Anwender in einem Blog warum auch immer manuell eine falsche Blog-ID eingegeben hat. Zugegeben, ein erfundenes Beispiel.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hier also meine persönliche Minimal-Anforderungen an Logfiles:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;So wenig wie möglich loggen, nichts loggen, wenn es nichts zu loggen gibt. Nicht gefundene Seiten in einem CMS gehören ins Monitoring, nicht ins Applikationslog.&lt;/li&gt;&lt;li&gt;Logeinträge auf den "Konsumenten" zuschneiden; sie müssen den Konsumenten zur Handlung befähigen. Der Konsument ist i.d.R. ein Administrator, kein Entwickler.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Zum Schluß: Monitoring ist nicht identisch mit Logging, selbst wenn es Logs verwendet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1745462624430301664?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1745462624430301664/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1745462624430301664' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1745462624430301664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1745462624430301664'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/05/uber-logfileeintrage.html' title='Über Logfileeinträge'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-6650752420880686725</id><published>2009-05-25T10:14:00.003+02:00</published><updated>2009-05-28T00:30:21.170+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>Mein Aktiver Lebensstil</title><content type='html'>Ich erinnere mich noch an die Coke-Werbung vor einem Jahr: Coke Zero, das ist der volle Geschmack mit Zero Zucker, so, wie das Leben sein soll. Na schön, der Süßstoff da drin ist auch nicht jedermanns Sache.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wie verblüfft war ich da dieses Wochenende, als ich auf der Rückseite einer Flasche Coka Cola las: "Enthält Zucker, der Dir Energie für Deinen aktiven Lebensstil gibt." Und das knapp unterhalb eines Symbols, welches andeuted, ein Glas Coke (250 ml) versorge mich mit 8% des durchschnittlichen Tagesbedarfs an Kalorien. Hurra, denke ich mir, 8%, das ist ja nicht besonders viel, dann zisch ich doch die ganze Flasche wech!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Auf der anderen Seite spricht das Etikett eine andere Sprache: 250ml Coke enthalten 27g Zucker, was immerhin 29% des Tagesbedarfs deckt. Eine 1l-Flasche ist also schon locker bei 116% des empfohlenen Tagesbedarfs an Zucker. Anders herum: Wenn ich außer der Cola keinen Zucker zu mir nehme, muß ich nach dreieinhalb Gläsern Schluß machen. Da es praktisch unmöglich ist, irgend ein "processed food" ohne Zucker zu finden, sind drei Gläser genug. Wenn Coke also für aktiven Lebensstil gedacht ist, sollte sie nur noch gegen Vorlage eines gültigen Mitgliedsausweises eines Sportvereins ausgegeben werden. Tischfußball und Murmeln gilt nicht.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Moral von der Geschichte? Angriff ist die beste Verteidigung. Morgen früh bin ich dann mal wieder im Fitnesstudio, die Cola abarbeiten.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-6650752420880686725?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/6650752420880686725/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=6650752420880686725' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6650752420880686725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6650752420880686725'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/05/mein-aktiver-lebensstil.html' title='Mein Aktiver Lebensstil'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-823910034892611865</id><published>2009-05-08T11:08:00.002+02:00</published><updated>2009-05-08T11:14:12.761+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>RailsConf 09...</title><content type='html'>Nur ein Post-It: DHH &lt;a href="http://railsconf.blip.tv/file/2081411"&gt;sprach auf der RailsConf 09&lt;/a&gt;. Ein interessanter Vortrag, was Geschichte und Zukunft von Ruby on Rails angeht.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ach ja, nur eine Bemerkung: Warum heißt DHH nur noch DHH? Warum nicht David? Oder David Heinemeier Hanson? Ist das so wie bei den Straßen in England, die eine kürzere Nummer haben, je wichtiger sie sind? Oder bei den Huffman-Codes? Ich finde das diskriminierend: Mit ketchup bin ich offenbar vier Größenordnungen unwichtiger. Aber hey, wenigstens habe ich einen ganzen Namen! :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-823910034892611865?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/823910034892611865/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=823910034892611865' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/823910034892611865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/823910034892611865'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/05/railsconf-09.html' title='RailsConf 09...'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-5831990932026961785</id><published>2009-04-29T09:47:00.003+02:00</published><updated>2009-04-29T09:59:52.486+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Noch ein Vergleich: Mercurial vs. Git</title><content type='html'>Google Code bietet in Zukunft seinen Projekten die Möglichkeit, anstelle des in Würden ergrauten Subversion das DVCS Mercurial zu verwenden. Den Einstieg für den begleitenden Flamewar liefert ein &lt;a href="http://code.google.com/p/support/wiki/DVCSAnalysis"&gt;Vergleich zwischen Mercurial und Git&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Der Titel des Vergleichs ist irreführend: Es werden nur zwei DVCS verglichen, und auch jeweils nur oberflächlich. Den Titel "Analyse" verdient das gedruckt knapp zwei Seiten lange Dokument ohnehin nicht, zumindest nicht, wenn man nicht Google ist und nicht aus der Sicht der Google spezifischen, Python-lastigen massiv verteilten Infrastruktur sieht.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-5831990932026961785?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/5831990932026961785/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=5831990932026961785' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5831990932026961785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5831990932026961785'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/04/noch-ein-vergleich-mercurial-vs-git.html' title='Noch ein Vergleich: Mercurial vs. Git'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1885895455996074312</id><published>2009-03-26T10:30:00.002+01:00</published><updated>2009-06-30T10:28:17.205+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Github Branch Merges</title><content type='html'>Beim Mitarbeiten an auf Github gehosteten Projekten kommt früher oder später der Punkt, an dem man a) seinen eigenen Branch aktualisieren muß, und b) die Arbeit eines anderen integrieren muß. Beide Aktionen sind grundsätzlich einfache git Merges.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Github bietet jetzt eine Fork Queue an, in der man bequem auswählen kann, welche Commits auf den ausgewählten Integrationsbranch geschoben werden sollen. Hier lauert eine Falle: Diese Funktionalität ist ein Interface zum git cherrypick, nicht zum git merge. Im Ergebnis wird der gewählte Commit (und zwar ausschließlich der gewählte Commit) auf den Integrationsbranch geschoben; es wird nicht gemerged.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wird diese Technik angewendet, um einen eigenen fork mit der letzten Version vom "upstream" zu aktualisieren, entstehen parallele Branches, die u.U. nicht mehr automatisch zu mergen sind.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ein einfaches Vorgehen, einen "fremden" Github-Branch zu integrieren, sieht wie folgt aus:&lt;/div&gt;&lt;div&gt;Vorbereitung:&lt;/div&gt;&lt;div&gt;1. git config remote.upstream_repo.url = (public) URL des fremden Respository&lt;/div&gt;&lt;div&gt;2. git config remote.upstream_repo.fetch = +refs/heads/*:refs/remotes/upstream_repo/*&lt;/div&gt;&lt;div&gt;3. git config branch.upstream.remote = upstream_repo&lt;/div&gt;&lt;div&gt;4. git config branch.upstream.merge = refs/heads/master&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fremden Branch laden:&lt;/div&gt;&lt;div&gt;1. git pull upstream&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Merge:&lt;/div&gt;&lt;div&gt;1. git checkout my_integration_branch&lt;/div&gt;&lt;div&gt;2. git merge upstream&lt;/div&gt;&lt;div&gt;3. eventuelle Konflikte auflösen, ggf. einchecken&lt;/div&gt;&lt;div&gt;4. git push origin my_integration_branch&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mit dem letzten Kommando wird der integrierte Branch auf die Quelle des eigenen Repositories publiziert -- bei Github sollte das immer das eigene Github Repository sein. Pronzipiell läßt sich das aber auf beliebige Git-Repositories anwenden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1885895455996074312?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1885895455996074312/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1885895455996074312' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1885895455996074312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1885895455996074312'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/03/github-branch-merges.html' title='Github Branch Merges'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-5242645630728639419</id><published>2009-03-03T13:09:00.008+01:00</published><updated>2009-03-30T15:30:34.259+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Git Commits zusammenfassen</title><content type='html'>Versionskontrollsysteme haben normalerweise ein Problem damit, einmal eingecheckte Versionen zu manipulieren, und das ist auch gut so (später mehr dazu).&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Solange der Branch eines Entwicklers aber noch nur lokal auf seiner Maschine liegt, darf er noch manipuliert werden. Eine sehr praktische Lösung, wie eine Linie von experimentellen Commits in einen einzelnen, publikationswürdigen Commit zusammengedampft werden kann, ist &lt;span style="font-family:courier new;"&gt;git rebase --interactive&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Auf dem &lt;a href="http://blog.madism.org/index.php/"&gt;MadBlog&lt;/a&gt; gibt's einen kurzen Artikel &lt;a href="http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive"&gt;git awesome-ness [git rebase --interactive]&lt;/a&gt;, in dem das Vorgehen beschrieben wird.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-5242645630728639419?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/5242645630728639419/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=5242645630728639419' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5242645630728639419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5242645630728639419'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/03/commits-per-git-zusammenfassen.html' title='Git Commits zusammenfassen'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-2934205327373315564</id><published>2009-02-26T12:32:00.002+01:00</published><updated>2009-02-26T12:39:11.695+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><title type='text'>Git Status in der Bash</title><content type='html'>Gerade auf &lt;a href="http://gitready.com/advanced/2009/01/23/bash-git-status.html"&gt;git ready&lt;/a&gt; gefunden: Eine kleine Anleitung, wie der Status des aktuellen Repositories immer in der Shell angezeigt wird (hier &lt;a href="http://gist.github.com/31631"&gt;der zugehörige Gist&lt;/a&gt;). Cygwin-User können damit den Git-Luxus auch auf Windows genießen. Hier meine PS1, die "visuell kompatibel" zu Cygwin ist:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;PS1='\[\e]0;\w $(parse_git_branch)\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w $(parse_git_branch)\[\e[0m\]\n\$ '&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-2934205327373315564?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/2934205327373315564/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=2934205327373315564' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2934205327373315564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2934205327373315564'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/02/git-status-in-der-bash.html' title='Git Status in der Bash'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-3374439074520216997</id><published>2009-02-06T23:20:00.002+01:00</published><updated>2009-02-10T18:35:51.705+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Krimskrams'/><title type='text'>Aus dem Nebel der Vergangenheit</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_sxlcyY3RgvY/SYy3r3rWGMI/AAAAAAAAAGk/uGt7hW6u_5I/s1600-h/Bild+1.jpg"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://4.bp.blogspot.com/_sxlcyY3RgvY/SYy3r3rWGMI/AAAAAAAAAGk/uGt7hW6u_5I/s320/Bild+1.jpg" border="0" /&gt;&lt;/a&gt; Beim Rumspielen mit einen neuen Drucker ist mir ein altes Bild in die Hände gefallen, daß ich gleich mal drucken wollte. Leider ist es eher klein geraten.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Der Schnappschuß entstand vor vielleicht vier Jahren in der Nähe von Admond in Österreich unter Zuhilfenahme einer (Trommelwirbel!) Webcam. Das Gerät hat in sofern ein analoges Gefühl vermittelt, als daß ich den ganzen Urlaub lang geknipst habe, und erst zuhause nachsehen konnte, was davon überhaupt brauchbar war. Nach heutigen Maßstäben nicht viel: Die Auflösung war erbärmlich, und bei den Farben bin ich mir auch nicht so sicher.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber dafür ist es ganz gut gelungen, finde ich. Retro rulez.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S.: Nein, ich will nicht wieder mit dem Ding knipsen müssen.&lt;br /&gt;&lt;div style="clear:both; text-align:LEFT"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbp.gif" alt="Posted by Picasa" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;" align="middle" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-3374439074520216997?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/3374439074520216997/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=3374439074520216997' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3374439074520216997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3374439074520216997'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/02/aus-dem-nebel-der-vergangenheit.html' title='Aus dem Nebel der Vergangenheit'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sxlcyY3RgvY/SYy3r3rWGMI/AAAAAAAAAGk/uGt7hW6u_5I/s72-c/Bild+1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-7409927511254840096</id><published>2009-01-29T01:01:00.002+01:00</published><updated>2009-01-29T01:06:52.931+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Krimskrams'/><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Der Schwarm!</title><content type='html'>Mir fällt leider kein vernünftiger Titel ein: Unter dem Namen &lt;a href="http://www.igvita.com/2009/01/27/ruby-swarms-visualizing-rails-git/"&gt;Ruby Swarms: Visualizing Rails &amp;amp; Git&lt;/a&gt; beherbergt igvita.com einige sehr interessante Visualisierungen von Coding-Aktivitäten. Sehr sehenswert!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-7409927511254840096?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/7409927511254840096/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=7409927511254840096' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7409927511254840096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7409927511254840096'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/01/der-schwarm.html' title='Der Schwarm!'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-8010921754013477771</id><published>2009-01-21T00:28:00.006+01:00</published><updated>2009-02-26T12:14:08.036+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Einen Git-Branch löschen?</title><content type='html'>Da &lt;a href="http://ketchuplog.blogspot.com/2009/01/kann-dein-scm-das.html"&gt;schreibe ich gerade noch&lt;/a&gt;, wie praktisch es bei Git ist, einfach einen Teil des Repositories als separates Projekt herauszulösen, und dann das: Ein zum Hochschieben der Tags abgesetztes &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git push --all&lt;/span&gt; schiebt alles, was im lokalen Repository ist, auf den &lt;a href="http://github.com/"&gt;github&lt;/a&gt;, darunter auch das komplette alte Projekt, aus dem ich das Teilprojekt gerade erst herausgelöst habe. Wie peinlich.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Jetzt gibt es zwei Fragen: Warum tauchen plötzlich die alten Commits wieder auf, und wie werde ich sie wieder los?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Die Antwort auf die erste Frage ist leicht: Der alte Branch war nach dem Zurechtschneiden immer noch in dem Repository vorhanden, das früher einmal das Monsterprojekt beherbergte. Er war nur eben abgehängt. Normalerweise war der Branch nicht sichtbar, und da nach den Anweisungen von github vom frisch geglaubte Projekt mittel &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git push origin master&lt;/span&gt; explizit nur den master-Branch hochgeladen wurde, fiel nicht gleich auf, welches Problem da noch wartete: Das remote Repository war tatsächlich schlank, das lokale Repository aber nicht.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Den Schlammassel lokal wieder loszuwerden ist dann doch nicht einfach. SCMs sind sehr gut darin, sich Sachen zu merken, und nicht sehr kooperativ, wenn sie etwas vergessen sollen -- Git ist da keine Ausnahme. Kurz, ich habe ewig probiert, und nichts hat geholfen. (Letztlich sollte es helfen, alle Referenzen auf die ungewollen Commits zu entfernen. Also alle Branches und Tags löschen, die dahin zeigen.) Viel wichtiger ist natürlich, die ungewollt hochgeschobenen Daten vom github wieder zu löschen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Die Lösung ist allerdings verblüffend einfach: Zuerst werden die ungewollten Objekte (Tags und ggf. Branches) auf einem remote repository (z.B. github) gelöscht, dann wird von da ein frischer Clone gezogen:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# tag "stoertMich" und branch "obsolete" loswerden&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git push origin &lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;:&lt;/span&gt;stoertMich&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git push origin &lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;:&lt;/span&gt;obsolete&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# irgendwohin, wo der frische Clone aufwachen soll&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;cd ..&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# ...und frisch clonen&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git clone &lt;repo-url&gt;&lt;/repo-url&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Die Seite, der ich diese Einsicht verdanke, ist, verglichen mit den Ausmaßen des Problems, irritierend schlicht: github's &lt;a href="http://github.com/guides/remove-a-remote-branch"&gt;Guide: Remove a remote branch&lt;/a&gt;. Allzu leicht übersieht man die Doppelpunkte, die praktisch die Lösung des Problems sind. Ich habe sie daher mal rot eingefärbt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ein kurzer Blick in die Packs (unterhalb von .git) verrät, daß da kein uraltes, gigantisches Monster mehr schlummert, sondern nur ein schlankes, blankes Repository mit dem exakt herausgelösten ehemaligen Teilprojekt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Und wieder gerettet.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-8010921754013477771?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/8010921754013477771/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=8010921754013477771' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8010921754013477771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8010921754013477771'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/01/einen-bit-branch-lschen.html' title='Einen Git-Branch löschen?'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-8864542821231963828</id><published>2009-01-20T08:39:00.003+01:00</published><updated>2009-01-20T08:54:04.008+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Git Ready!</title><content type='html'>&lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; ist das Nächste Große Ding zum Thema SCM, das ist offensichtlich. Noch ist zwar &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; das Maß der Dinge, wenn es um populäre SCM-Systeme geht, ist aber schon lange nicht mehr unangefochten: Git hat die Linux-Entwickler und eine eindrucksvolle Gemeinde von Ruby (on Rails) Entwicklern auf seiner Seite. Wer mit RoR entwickeln will, braucht mittlerweile Git, und wer Git hat, braucht kein Subversion -- kann es aber weiterhin benutzen. Embrace and, äh, wie hieß das noch? Will Linus die Weltherrschaft? Mein Gott, erwartet uns hier ein neuer Flamewar?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Genug der Vorrede, frisch vom &lt;a href="http://github.com/"&gt;github&lt;/a&gt; kommt die Empfehlung für &lt;a href="http://gitready.com/"&gt;git ready&lt;/a&gt;, wo ab sofort täglich Informationen zu Git versprochen werden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-8864542821231963828?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/8864542821231963828/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=8864542821231963828' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8864542821231963828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8864542821231963828'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/01/git-ready.html' title='Git Ready!'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-2004930098676306556</id><published>2009-01-18T17:22:00.007+01:00</published><updated>2009-01-18T17:57:35.522+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Krimskrams'/><title type='text'>Was haben die Römer...</title><content type='html'>Ok, mir ist klar, daß jederman selbst auf YouTube danach suchen kann, aber sei's drum, ich will dieses Video einfach hier reinhängen:&lt;div&gt;&lt;br /&gt;&lt;object width="500" height="315"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Qc7HmhrgTuQ&amp;amp;hl=en&amp;amp;fs=1&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Qc7HmhrgTuQ&amp;amp;hl=en&amp;amp;fs=1&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="315"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dabei sei gesagt, daß Monty Python einen Sack voll Sketche auf YouTube veröffentlicht (für den Fall, daß das noch nicht bis in alle Winkel dieses Planeten vorgedrungen ist). Ja, genau! Jede Menge Monty Python, direkt von Monty Python, mit dem Segen von Monty Python! Das ist er, der Grund, weshalb ich mein Modem gegen eine DSL-Leitung eingetauscht habe. (Na ja, das ist jetzt vielleicht etwas zu dick aufgetragen...)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wie dem auch sei, empfehlenswert ist der &lt;a href="http://youtube.com/montypython"&gt;Monty Python Channel&lt;/a&gt; auf jeden Fall.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-2004930098676306556?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/2004930098676306556/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=2004930098676306556' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2004930098676306556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2004930098676306556'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/01/was-haben-die-rmer.html' title='Was haben die Römer...'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-4633512892712279153</id><published>2009-01-16T22:27:00.006+01:00</published><updated>2009-01-17T00:19:21.005+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Kann Dein SCM das?</title><content type='html'>Vor einer kleinen Ewigkeit, als ich noch dachte, CVS sei die beste Erfindung seit geschnitten Toastbrot (hey, ich war jung und brauchte das Geld für andere Sachen, z.B. Toastbrot!), habe ich begonnen, meinen selbstgeschriebenen Code in CVS Repositories einzuchecken. Leute, die mich damals kannten, hielten mich für, na ja, ein bißchen komisch, weil ich Sourcecode aufgehoben habe, der schon lange aussortiert war, aber ich bin sicher, sie haben heute andere, ganz neue Gründe dafür.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber das tut nichts zur Sache. Der Server ist schnell aufgesetzt, und so füllte sich das Repository mehr und mehr mit Daten. Dann fanden auf einmal alle Leute CVS ganz toll, also dachte ich mir, es wird Zeit, zu Subversion zu wechseln, bevor alle denken, ich wäre, na ja, nicht mehr komisch genug.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gesagt, tun, getan. Bei der Gelegenheit habe ich dann entdeckt, daß ich in all den CVS-Jahren nur einen einzigen Branch angelegt habe, und den auch nur, um das mal zu probieren. Im Nachhinein hat sich das als gute Idee herausgestellt. Also, nur einen Branch zu verlieren, meine ich.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber Subversion macht alles besser, ich konnte das Repository leidlich gut importieren, und in Subversion kann man prima branchen. Und taggen. Und viele andere Dinge. Eine ganz neue SCM-Euphorie bemächtigte sich meiner, und ich fange an, Projekte zu bauen, nur, um irgendwas in Subversion zu importieren, zu branchen und zu taggen. Interessanterweise bin ich extrem selten zum branchen gekommen, und ich kann mich an keine Merges erinnern. Hängt wohl mit der gewöhnungsbedürftigen Semantik von Subversion zusammen. Aber ich will nicht undankbar erscheinen: Für Projekte, in denen man weder sinnvoll branchen noch sinnvoll mergen kann (also z.B. bei der Versionierung von Bildern), kann ich mir vorstellen, auch nochmal Subversion zu benutzen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Und schließlich kam der Moment, den alle Subversion-Verwalter ab dem zweiten Aufruf fürchten: Das Repository wird unhandlich groß, und man entscheidet sich, es aufzuteilen. Selbstredend soll die History erhalten bleiben.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Die Idee ist einfach: Im Repository &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;projekte&lt;/span&gt; liegen fünf Projekte &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;project_uno&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;duo_twin_double&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;triproj&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;quadra&lt;/span&gt; und &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;p5&lt;/span&gt; friedlich nebeneinander, jedes soll jetzt in ein eigenes Repository. Gründe für diese Aufteilungen finden sich immer, deshalb verzichte ich auf die Aufzählung. Aber wie schneide ich aus einem Subversion-Repository einen Zweig Objekte?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Na ja, ich will's nicht schwierig machen: Es geht nicht. Die innere Struktur von Subversion erlaubt das Ausschneiden von Subtrees offenbar nicht. Irgendwo habe ich dann gelesen, daß aufgrund der inneren Struktur der Werte im Zusammenspiel mit dem mechanischen Aufbau der Physik die Beobachtung zu machen geht nicht. (An der Stelle habe ich Kopfschmerzen bekommen und aufgegeben.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Szenenwechsel. Unser Subversion-Repository wird links auf einer Liege von der Bühne geschoben, überall rote Tinte, die Krankenschwester füllt ein Formular aus und guckt auf die Uhr, Auftritt &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; im schwarzen Rollkragen-Armani-OP-Kittel als jung-dynamischer Chefarzt (ohne Vorhang, wir haben's eilig). Kurzer Blick auf den Patienten, Organisation der Operation in die Phasen &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Zurechtlegen&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Zuschneiden&lt;/span&gt; und &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Zumachen&lt;/span&gt;, und etwas Beeilung bitte, der nächste Patient wartet schon, das kann ja nun wirklich nicht so schwer sein. Der Patient bekommt ein Sedativ, und los geht's.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Zurechtlegen&lt;/span&gt;: In unserem Szenario haben wir fünf Projekte in einem Repository. Das wird erstmal kopiert:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ~/projekte/ &gt; cd ..&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ~/ &gt; git clone projekte p1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Checking out files: 100% (1930/1930), done.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ~/ &gt; cd p1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ~/p1/ &gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Intermission&lt;/span&gt;&lt;/span&gt;: Es sei bei dieser Gelegenheit ausdrücklich festgestellt, daß dieser Schritt wirklich extrem wichtig ist. Wir haben vor, alles bis auf ein Unterverzeichnis aus dem Repository unwiederbringlich zu löschen. Mit anderen Worten: Alles außer dem Verzeichnis, was wir im nächsten Schritt auswählen, wird gleich weg sein.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Stimme aus dem Off: Mach lieber eine Kopie mehr als eine zuwenig. Ehrlich. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Bitte&lt;/span&gt;. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Mach&lt;/span&gt;. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Das&lt;/span&gt;. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Sorgfältig&lt;/span&gt;. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Und&lt;/span&gt;. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Richtig&lt;/span&gt;. Nicht vergessen, wir reden hier von git: Schieb eine Kopie auf github, oder schick sie einem Kollegen, oder Deinem Bruder, oder Deinem Friseur, egal. Nur hab nicht im nächsten Schritt die einzige Kopie des Repositories unter'm Messer. Du würdest es bereuen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Und weiter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Zuschneiden&lt;/span&gt;: Ein Blick in das Repository verrät uns, daß wir es mit einer exakten Kopie des unter ~/projekte gespeicherten Repositories zu tun haben. Wir finden darin ein Verzeichnis &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;project_uno&lt;/span&gt;, in das unsere fleißigen Entwicklerameisen emsig tonnenweise Code geschaufelt haben (natürlich haben wir selbst mindestens die Hälfte davon geschrieben, sonst dürften wir nicht so über unsere netten und geschätzten Kollegen reden). Aus diesem Verzeichnis &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;project_uno&lt;/span&gt; machen wir jetzt ein eigenes Repository:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ~/p1/ &gt; &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/v1.6.1/git-filter-branch.html"&gt;git filter-branch&lt;/a&gt; --subdirectory-filter project_uno -- --all&lt;/span&gt;&lt;/div&gt;&lt;div&gt;(Meldungen von git hier, die abzutippen oder neu zu erfinden ich zu bequem bin, die der geneigte Zuschauer bei dieser Folge aber bitte genauestens zu lesen, zu verstehen und als nicht weiter kompliziert einzustufen hat.)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Genau, das war's schon. Ein einziger gekonnter Schnitt, und wir sind fertig. Schneller als ein Blinddarm, soviel ist sicher.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Zumachen&lt;/span&gt;: Zunächst einmal kümmern wir uns um die remote Referenzen: Das neue Repository einfach per push zu publizieren kann unangenehme Folgen haben, aber auch ein pull könnte uns Probleme bereiten. Da ich nicht dumm genug bin, das auszuprobieren, glaube ich den Warnungen und entferne erstmal die Remote-Verbindungen:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ~/p1/ &gt; git remote show&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;origin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ~/p1/ &gt; git remote show origin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;* remote origin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   URL: /home/me/projekte&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   Remote branch merged with 'git pull' while on branch master&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;     master&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   Tracked remote branch&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;     master&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ~/p1/ &gt; git remote rm origin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, jetzt kann es nicht mehr so einfach passieren, daß eine versehentlich verschüttele Kaffeetasse ein git push auslöst und unser Original verschandelt, von dem wir geklont haben. Ok, ganz ehrlich, viel kann da nicht passieren, aber sicher ist sicher. Wir haben jetzt ein schickes Repository, was wir unsererseits gleich mal klonen und verteilen können.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nachdem wir wissen, wie's geht, wiederholt der Pförtner die Schritte für die anderen vier Projekte, die Vorstellung ist vorbei, das Original-Monster-Repositories unterschreibt noch schnell, in Zukunft keine Änderungen mehr zuzulassen und wird in ein Taxi am Bühneneingang geschoben, von wo es nie mehr zurückkehrt (es lebt jetzt mit einer Frau und drei Kindern auf Hawaii und arbeitet da in einer Telefonmarketing-Firma, ist aber ansonsten recht glücklich), und die jetzt getrennten siamesischen Fünflinge gehen gemeinsam auf Welttournee (sie sind sehr erfolgreich, allen zu erzählen, wie wunderbar es sicht getrennt lebt, und treten gemeinsam bei praktisch jeder Fernsehtalkshow auf, ohne jemals irgendetwas von Bedeutung getan zu haben). Git ist schon wieder auf dem Golfplatz und erklärt jedem, der es hören oder nicht hören will, wie unnütz und rundheraus dumm und häßlich Subversion und der Rest der häßlichen Verwandschaft ist, und wie glücklich alle sein können, daß es ihn gibt, aber da hört schon keiner mehr hin, weil alle an der Bar sitzen und sich über nervige Typen in Armani-Anzügen auslassen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Na, das war ja mal Drama. Also, jetzt mal ganz ehrlich: Kann das Dein SCM?&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-4633512892712279153?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/4633512892712279153/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=4633512892712279153' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4633512892712279153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4633512892712279153'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/01/kann-dein-scm-das.html' title='Kann Dein SCM das?'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1349035284092736588</id><published>2009-01-16T00:57:00.002+01:00</published><updated>2009-01-16T01:09:08.782+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Git und Windows: Elf Schritte (und in paar Fotos)</title><content type='html'>Die netten Leute von &lt;a href="http://github.com/"&gt;github&lt;/a&gt; haben sich mal aufgerafft und eine &lt;a href="http://nathanj.github.com/gitguide/index.html"&gt;Kurzanleitung&lt;/a&gt; zusammengebaut, mit der jeder, der in der Lage ist, einen Brief zuzukleben ohne sich Gummierung in die Augenbrauen zu schmieren, auch die Grundfunktionen von &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; unter Windows in Betrieb nehmen kann.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Das Schöne daran: Im Gegensatz zu den üblichen Methoden verzichtet diese Anleitung auf &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; (was vielen Windows-Nutzern den Zugang erleichtern sollte). Allerdings will ich nicht verschweigen, daß man mit einem &lt;a href="http://de.wikipedia.org/wiki/Unixoid"&gt;unixoiden&lt;/a&gt; Unterbau noch mehr Freude an git haben kann...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1349035284092736588?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1349035284092736588/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1349035284092736588' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1349035284092736588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1349035284092736588'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/01/git-und-windows-elf-schritte-und-in.html' title='Git und Windows: Elf Schritte (und in paar Fotos)'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-2762985542573239332</id><published>2009-01-12T14:40:00.005+01:00</published><updated>2009-01-12T17:51:36.804+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><title type='text'>Traumreisen ohne MBP?</title><content type='html'>Ja, da kann man schon ins Träumen kommen: Apples neues &lt;a href="http://www.apple.com/de/macbookpro/"&gt;17" MacBook Pro&lt;/a&gt; (MBP - wer erfindet eigentlich immer diese Abkürzungen?) erweckt erstmal den Eindruck, daß diesmal wirklich alles richtig gemacht wurde. Ein großer Bildschirm, diesmal auch entspiegelt erhältlich, viel RAM, aktuelle Prozessoren, aktuelle GPUs, ein schickes und schlankes Gehäuse, und obendrauf sagenhafte 8 (acht!) Stunden Laufzeit. Na, ist das ein Grund, sich dieses Jahr kein neues Auto sondern einen Mac zu kaufen?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(Oh, sorry, ähnliche Kommentare haben im Anschluß an den entsprechenden Artikel auf &lt;a href="http://www.golem.de/0901/64426.html"&gt;Golem&lt;/a&gt; natürlich wieder den üblichen Flamewar gestartet. Da halte ich mich lieber raus.)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Offenbar nutzt Apple die Erfahrungen aus dem iPod-Bereich jetzt auch für die Notebooks. Aber, typisch für mein ambivalentes Verhältnis zu meinem Lieblings-Hardwarehersteller, irgendwie habe ich das Gefühl, zum Schluß doch noch eine Kröte schlucken zu müssen: Der sagenhafte Monster-Akku ist fest eingebaut. Was sie sich wohl dabei gedacht haben? Ist der Akku leer, hilft kein Ersatzakku, egal, wie weit die nächste Steckdose entfernt ist. Und: Ist der Akku verschlissen, muß ein neuer bei Apple eingebaut werden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Über die Kosten (laut dem heise-Artikel "&lt;a href="http://www.heise.de/newsticker/Macworld-17-Zoll-Macbook-mit-mattem-Display-Update--/meldung/121235"&gt;Macworld: 17-Zoll-Macbook mit mattem Display&lt;/a&gt;"179 Euro) will ich hier mal nicht meckern, das Gerät wendet sich an betuchte Anwender, und für 8 Stunden Laufzeit und immerhin 1000 Ladezyklen ist das nicht zu teuer. Im Grunde sollten die Ich-laß-das-Preisschild-dran-Typen jetzt unglücklich werden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nein, das Problem ist: Wenn man so eine Maschine besitzt, will man damit arbeiten. (Ich würde es wollen.) Und ein toter Akku sorgt in diesem Falle dafür, daß die Maschine (und alle Daten darauf) aus dem Büro muß, möglicherweise für Tage (und dann auch noch fremden Leuten zugänglich sind). Das kann schon unangenehm werden.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wie wär's mit einem Kombi-Angebot? Zwei Wochen Urlaub auf Hawaii, in der Zeit macht Ihr MBP eine Wellness-Kur in Kalifornien. Flug und Hotel nicht inklusive.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-2762985542573239332?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/2762985542573239332/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=2762985542573239332' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2762985542573239332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2762985542573239332'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/01/traumreisen-ohne-mbp.html' title='Traumreisen ohne MBP?'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-815914640916385056</id><published>2009-01-12T08:18:00.003+01:00</published><updated>2009-01-12T08:38:49.320+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Verteiltes SCM</title><content type='html'>Eigentlich suchte ich ja nach einem Hoster für Ruby on Rails-Projekte. Aber wie immer im Leben passiert dann etwas Anderes. In diesem Falle stolperte ich über ein Video: &lt;a href="http://www.youtube.com/watch?v=4XpnKHJAok8"&gt;Tech Talk: Linus Torwalds on git&lt;/a&gt;. Das ist wirklich bemerkenswert unterhaltsam, auch wenn ich zugeben muß, daß in etwas mehr als einer Stunde nur zwei Aussagen von Substanz getätigt werden: &lt;div&gt;&lt;ul&gt;&lt;li&gt;SCM muß verteilt sein&lt;/li&gt;&lt;li&gt;Performance ist wichtig&lt;/li&gt;&lt;/ul&gt;Inhaltlich ist über den Rest des Videos nicht viel zu sagen: Ein netter, junger, begrenzt freundlicher Mann produziert sich mit sichtbarer Erfahrung auf der Bühne, ein Haufen Techies sitzen drum rum. Man merkt nach einiger Zeit, daß man es mit Google-Leuten zu tun hat: Keine anhimmelnden Gesichter, nur blanke Skepsis.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Erinnerung: Wenn ein Techie einem anderen Techie begegnet, von dem auch die Großmutter seiner Frau schon mal gehört hat, der also bereits mehrfach mal in den üblichen Massenmedien erwähnt wurde, legt er seine Haltung gegenüber dem Fremd-Techie im Vorfeld fest, und zwar entweder auf "Elvis!!!(kreisch)" oder auf "Du hast keine Ahnung, wie wir das hier im Maschinenraum machen", und behält diese Einstellung eisern zumindest bis zum Ende der Konfrontation bei.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zurück zum Thema.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Die Argumente, warum ein SCM unbedingt verteilt sein muß, sind leider etwas verwaschen (obwohl ich die gleiche Meinung habe, mit der Abweichng, daß ich schon gerne ein Master-Repository habe, wenn auch nur, um einen zentralen Referenzpunkt zu haben) und mengen sich mit der Argumentation, warum Performance wichtig ist: Weil dann eine andere Arbeitsweise möglich wird. Aber natürlich ist mir unten in meinem Maschinenraum auch noch kein besseres rationales Argument eingefallen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-815914640916385056?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/815914640916385056/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=815914640916385056' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/815914640916385056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/815914640916385056'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2009/01/verteiltes-scm.html' title='Verteiltes SCM'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-3222456196964127749</id><published>2008-12-18T09:50:00.007+01:00</published><updated>2011-08-09T14:57:52.061+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Eine Lanze für HAML</title><content type='html'>Was ist denn nun so besonders an &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;? Ist das nicht nur eine weitere Scriptsprache? Was soll der ganze Hype, und wann ist er wieder vorbei? Diese Frage stellen zum Beispiel Java-Entwickler gerne, und wärmen anschließend gleich mal wieder die Vorurteile der C/C++ Entwickler gegenüber Java Ende der 1990er Jahre auf. Ohne es zu wissen, nehme ich an.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nun, Ruby ist tatsächlich nur eine Scriptsprache; sogar &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; (als zweite ernstzunehmende moderne Scriptsprache in der Unix-Welt) macht mehr Zugeständnisse an Performance-Vorbehalte der Entwickler und Entscheider aus dem Compiler-Lager. Aber wer Ruby sagt, meint heute größtenteils Ruby on Rails (auch wenn im Schatten von RoR ein ganzer Garten anderer Ruby-basierter Frameworks gewachsen ist: ich weiß erstmal von &lt;a href="http://ramaze.net/"&gt;Ramaze&lt;/a&gt;, &lt;a href="http://camping.rubyforge.org/"&gt;Camping&lt;/a&gt;,&amp;nbsp;&lt;a href="http://merbivore.com/"&gt;Merb&lt;/a&gt;&amp;nbsp;und &lt;a href="http://hobocentral.net/"&gt;Hobo&lt;/a&gt;, ohne sie wirklich ausprobiert zu haben). Und das Markenzeichen von RoR ist die extrem kurze Entwicklungszeit für Applikationen. (Jaja, neben DRY, Convention over Configuration und anderen Schlagworten.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber RoR-Applikationen haben trotzdem einen Pferdefuß: Irgendwann schlägt die Stunde der Views, und die bauen aus HTML-Templates und -Schnippseln Seiten und Seitenfragmente für den Browser zusammen. Das Werkzeug der Wahl ist normalerweise ERb, was, ganz in der Tradition der JSPs, Code in HTML einbettet. Das Resultat ist oftmals unübersichtlich, und die generierten HTML-Seiten sind nur so gut wie die Templates. Darstellungsprobleme im Browser? Ein Tag verschluckt? Schachtelung der XHTML-Elemente falsch?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wer kennt das nicht?&amp;nbsp;Nun, wer &lt;a href="http://haml-lang.com/"&gt;HAML&lt;/a&gt; verwendet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;HAML ist (wieder mal) eine neue Template-Sprache. Ähnlich Python, welches Entwickler zwingt, nicht nur sauberen, sondern schönen Code zu schreiben (in dem Sinne in dem die äußere Form des Quelltextes seine logische Struktur widerspiegelt), zwingt HAML den Designer, nicht nur saubere, sondern schöne Views zu bauen. Das Beispiel von der HAML-Frontseite läßt leider nur erahnen, was möglich ist:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aus&lt;/div&gt;&lt;pre&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th&amp;gt;eMail&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;% @adressen.each do |addr| %&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;%= h(addr.name) %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;%= h(addr.email) %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;% end %&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;/pre&gt;&lt;div&gt;wird in HAML&lt;/div&gt;&lt;pre&gt;%table&lt;br /&gt;  %tr&lt;br /&gt;    %th Name&lt;br /&gt;    %th eMail&lt;br /&gt;      - @adressen.each do |addr|&lt;br /&gt;  %tr&lt;br /&gt;    %td= h(addr.name)&lt;br /&gt;    %td= h(addr.email)&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;Ist ja dann schon ein Stück kürzer. Aber das Beispiel ist ja auch recht kurz. Was passiert jetzt, wenn die Zeilen abwechselnde Stile verwenden sollen?&lt;/div&gt;&lt;pre&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;% style="odd" %&amp;gt;&lt;br /&gt;&amp;lt;% 10.range.each do |num| &amp;gt;&lt;br /&gt;&amp;lt;tr class="&amp;lt;%=style%&amp;gt;"&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;line &amp;lt;%=num%&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;% style = (style == "odd" ? "even" : "odd") %&amp;gt;&lt;br /&gt;&amp;lt;% end &amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;wird hier einfach zu&lt;/div&gt;&lt;pre&gt;%table&lt;br /&gt;  - 10.range.each do |num|&lt;br /&gt;    %tr{:class=&amp;gt;"#{cycle('odd','even'}"}&lt;br /&gt;      %td&lt;br /&gt;        line&lt;br /&gt;        = num&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;[Update]&lt;/b&gt;(Danke an neuholger für die Vereinfachung!)&lt;b&gt;[/Update]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ist doch irgendwie... einfach zu lesen, oder? Die Ersparnis in Zeilen ist bei diesem einfachen Beispiel noch nicht so beeindruckend (6 Zeilen zu 9 Zeilen), kann bei umfangreicheren Views aber schnell wachsen. Und vor allem geht eben nie die Zuordnung einer Zeile zu einem logischen Block verloren.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zudem generiert HAML immer sauber formatiertes HTML: Auch Partials, die ja ihrerseits "ganz links" anfangen, bringen das System nicht aus dem Tritt. Und zuletzt gibt's als Zugabe zu HAML noch dessen CSS-Seite, SASS. Aber das ist wieder eine eigene Geschichte...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;[Update]&lt;/b&gt;(Apropos CSS: Damit das Beispiel von oben auch wirklich funktioniert, braucht man natürlich das passende CSS dafür -- wie jenes aus neuholgers Kommentar.)&lt;b&gt;[/Update]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;strike&gt;Zum Schluß: Wer jetzt unsicher ist, muß die Katze nicht im Sack kaufen. Hamton Catlin hat netterweise &lt;i&gt;The Lab&lt;/i&gt;&amp;nbsp;gebaut, in dem man &lt;a href="http://haml-lang.com/"&gt;HAML&lt;/a&gt; und &lt;a href="http://sass-lang.com/"&gt;SASS&lt;/a&gt; online ausprobieren kann.&lt;/strike&gt; Viel Spaß!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;[Update]&lt;/b&gt;&amp;nbsp;Updates vom 9.8.2011: Vereinfachung von neuholger eingebaut (Danke!). Zudem scheint es das&amp;nbsp;HAML/SASS Lab nicht mehr zu geben, und die offiziellen Seiten von HAML und SASS sind umgezogen. &lt;b&gt;[/Update]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-3222456196964127749?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/3222456196964127749/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=3222456196964127749' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3222456196964127749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3222456196964127749'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/12/eine-lanze-fr-haml.html' title='Eine Lanze für HAML'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-5364331954363219721</id><published>2008-12-06T06:46:00.004+01:00</published><updated>2009-01-14T17:21:32.613+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Subversion-Repositories nach Git migrieren</title><content type='html'>Nachdem man sich entschlossen hat, mit &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; zu arbeiten, steht man vor einem weiteren Problem: Was macht man jetzt mit den alten &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;-Repositories? Natürlich kann man weiter Subversion verwenden, es ist schließlich kein schlechtes System. Aber warum sich mit zwei parallel zu pflegenden Systemen herumschlagen?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Auf &lt;a href="http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/"&gt;Simplistic Complexity&lt;/a&gt; gibt's eine sehr schöne Kurzanleitung, die im Wesentlichen aus drei Schritten besteht:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Anlegen einer Textdatei für das User-Mapping&lt;/li&gt;&lt;li&gt;Importieren des SVN-Repositories in Git&lt;/li&gt;&lt;li&gt;Exportieren des importierten Repositories auf den Git-Server&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Das sieht dann auf der Shell so aus (die Datei usermapping.txt enthält die Zuordnung von SVN-Namen zu git-eMail-Adressen in der Form "&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;svnid = Git User &amp;lt;gituser@email.com&amp;gt;&lt;/span&gt;", eine Zuordnung pro Zeile):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;mkdir myproject&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;cd myproject&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git svn init http://myserver/svn/myproject/trunk/ --no-metadata&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git config svn.authorsfile usermapping.txt&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git svn fetch&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;git clone --bare .git ../myproject.git&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Das in &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;myproject&lt;/span&gt; ausgecheckte Subversion-Git-Gemenge kann man jetzt bedenkenlos löschen; das blitzblanke &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;myproject.git&lt;/span&gt; wird auf den Git-Server expediert und kann von da aus verwendet werden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Im Blog wird noch der eine oder andere Haken diskutiert, hauptsächlich, weil Git jedes Commit einem User zuordnet, einige Subversion-Repositories aber keinen User haben, dem der erste Commit zugeordnet ist. Nun, das war bei mir glücklicherweise nicht der Fall, und der Transfer meiner Source-Repositories von Subversion zu Git war bisher schmerzlos und schnell.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Letzter Hinweis, bevor jetzt jeder losstürzt und sein Subversion pensioniert: Es gibt auf der Windows-Plattform immer noch keinen Git-Client, vielmehr muß &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; mit dem Paket &lt;a href="http://cygwin.com/cgi-bin2/package-grep.cgi?grep=git-core"&gt;git-core&lt;/a&gt; (und möglichst noch git-gui) verwendet werden.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-5364331954363219721?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/5364331954363219721/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=5364331954363219721' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5364331954363219721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5364331954363219721'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/12/subversion-repositories-nach-git.html' title='Subversion-Repositories nach Git migrieren'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1219700545491251796</id><published>2008-12-01T10:05:00.009+01:00</published><updated>2008-12-01T17:04:16.650+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><title type='text'>Switch! Mac für Windows-Nutzer</title><content type='html'>Gelegentlich wird man als Mac-Benutzer ja gefragt, warum mal kein Windows verwendet. Das ist für mich eine schwierige Frage, denn es gibt eigentlich keinen rationalen Grund, weshalb ich einen Mac haben wollte. Ich wollte ihn, weil ich die Nase voll hatte vom allgemeinen am-Computer-rumschrauben, den ganzen kleinen Ärgerlichkeiten, denen man sich aussetzt, wenn man einen PC benutzt. Das gibt's natürlich auch beim Mac (nur eben anders), und so driften diese Diskussionen sehr schnell in Glaubensfragen ab. Fakt ist: Wer einen Mac hat (und mag), will kein Windows mehr; mehr kann man dazu nicht sagen.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Und manchmal wird man gefragt, worauf man sich einstellen muß, wenn man denn tatsächlich seinen Windows-PC gegen einen Mac tauscht. Hier kann man dann ernsthafte Antworten geben.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zuerst gilt: Wenn man mit seinem System zufrieden ist, sei es Windows, Linux oder Mac, sollte man dabei bleiben. Ein anderes System bedeuted immer Umstellung und Zusatzkosten, angefangen bei neuer Hardware bis hin zu neuer Software.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Noch dabei? Gut. Dann ist der nächste Schritt, sich zu überlegen, was man mit dem Computer eigentlich machen will. Ist die Antwort "Computerspiele", sollte man überlegen, ob man nicht mit einem Windows-PC oder einer modernen Spielkonsole besser dran ist.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Weiter geht's: Welche Applikationen werden im Moment unter Windows verwendet? Die Klassiker sind Microsoft Office, Outlook und der Explorer, jeweils mit den offenen Alternativen OpenOffice, Thunderbird und Firefox. Diese Applikationen bereiten keine Probleme: Entweder gibt es sie direkt für MacOS X, oder man nimmt die Alternativen von Apple: iWork, Mail.app, Adressbuch und Safari. (Bei Apple gibt's unter dem Titel "&lt;a href="http://www.apple.com/de/getamac/whymac/"&gt;Ja zum Mac&lt;/a&gt;" eine &lt;a href="http://www.apple.com/de/getamac/faq/"&gt;Liste der wichtigsten Fragen&lt;/a&gt;.) Dann gibt's noch &lt;a href="http://www.adiumx.com/"&gt;Adium&lt;/a&gt; als Messenger (falls einem iChat nicht zusagt), und mit dem Mac-Skype-Client ist die letzte Kommunikationslücke geschlossen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Damit sind die Allgemeinplätze abgedeckt. Bei der Suche nach den Applikationen, um die man sich bei einer Windows-Installation ständig kümmert, stößt man auch auf Windows-Spezialisten wie Antivirus-Programme, Firewalls, Skinning- und Tweaking-Tools oder ähnliches. Analoge Programme für den Mac sind rar und selten nützlich, also verzichtet man besser darauf. Aber was ist mit der Photo-Tool X oder dem Audio-Programm Y? Hier empfiehlt sich die Suche nach inhaltlich analogen Programmen auf &lt;a href="http://www.versiontracker.com/macosx/"&gt;Versiontracker&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Den größten Teil der alltäglich benötigten Applikationen sollte man jetzt bereits abgedeckt haben. Für die unter uns, die ihren Mac als Alternative zu einem Linux-System zur Softwareentwicklung einsetzen wollen, suchen jetzt vielleicht noch ein PHP, ein Ruby, ein Tomcat oder einen Apache. Die gute Nachricht: Es gibt eine ganze Menge der Unix-Tools bereits an Bord von MacOS X, und auch Java 6 gibt's endlich für den Mac. Die schlechte Nachricht: Apple ist nicht gerade ständig am Aktualisieren dieser Pakete. Doch Hilfe ist nicht fern: &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; bietet ein an die BSD Ports angelehntes System zur Installation von Software. Dazu muß auf dem Mac allerdings ein MacOS X Entwicklungssystem installiert sein. Kein Problem, liegt ja jedem Rechner bei.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Und, noch eine lebenswichtige Applikation, die es leider nur für Windows gibt? Mit &lt;a href="http://www.parallels.com/de/products/desktop/"&gt;Parallels Desktop&lt;/a&gt; oder &lt;a href="http://www.vmware.com/de/products/fusion/"&gt;VMWare Fusion&lt;/a&gt; bekommt man die letzten Renitenten auf den Mac-Desktop, auch, wenn man früher oder später feststellt, daß man darauf verzichten kann. Auf diese Weise muß man nicht einmal auf Applikationen wie Microsofts Visual Studio oder IBMs Telelogic Synergy verzichten, die man ansonsten nicht auf den Mac bekommt. Und für das Windows-Spiel zwischendurch gibt's &lt;a href="http://www.apple.com/de/macosx/features/bootcamp.html"&gt;Bootcamp&lt;/a&gt; - allerdings braucht man dafür eine Windows-Lizenz.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Hat man seinen Mac einmal konfiguriert, kann er locker mit Windows und Linux mithalten - auf einer Maschine. Nur sollte man sich mit dem Gedanken vertraut machen, bei Problemen nicht zum Nachbarn gehen zu können. Neben einem ständigen Backup per mitgelieferten &lt;a href="http://www.apple.com/de/macosx/features/timemachine.html"&gt;Time Machine&lt;/a&gt; hat es sich bewährt, auf eine bootfähige Platte eine bootfähige Kopie des eigenen Systems vorzuhalten. Dazu braucht man eine Firewire-Platte (davon können alle Macs booten), sowie entweder &lt;a href="http://www.bombich.com/software/ccc.html"&gt;Carbon Copy Cloner&lt;/a&gt; oder &lt;a href="http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html"&gt;Superduper!&lt;/a&gt;. Wofür man sich entscheidet, ist letztlich Geschmackssache (und natürlich eine Frage, was für einen selbst besser funktioniert).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So. Den Mac bekommt man dann im &lt;a href="http://store.apple.com/de/browse/home/shop_mac"&gt;Apple Store&lt;/a&gt;, oder beim Apple-Händler um die Ecke. Viel Spaß!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1219700545491251796?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1219700545491251796/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1219700545491251796' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1219700545491251796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1219700545491251796'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/12/switch-mac-fr-windows-nutzer.html' title='Switch! Mac für Windows-Nutzer'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-3047144152386995835</id><published>2008-11-25T17:46:00.005+01:00</published><updated>2009-01-14T17:20:57.232+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><title type='text'>Git auf dem Mac</title><content type='html'>Mac-Nutzer haben es schwerer, mit dem out-of-the-box-&lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; warm zu werden, als Windows- oder Linux-Nutzer: Git bringt zwar eine eigene GUI mit (eben git gui), aber die hat, zumindest auf meinem Leopard, Probleme mit dem Tcl/TK: Angefangen bei der Schriftgröße, über nicht Mac-konforme Texteingaben, bis hin zu fehlenden Funktionen (die auf anderen Systemen auf der rechten Maustaste liegen, bei der Mac-Implementierung aber nicht einmal auf Ctrl-Maustaste hören). Alles keine Katastrophen, aber nicht sehr schön.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber schließlich hat man einen Mac, weil man sich bei der Arbeit auch ein wenig freuen möchte. Genau deshalb gibt es &lt;a href="http://gitx.frim.nl/"&gt;GitX&lt;/a&gt; und &lt;a href="http://github.com/Caged/gitnub/wikis"&gt;Gitnub&lt;/a&gt;. Dabei ist GitX der "Ersatz" für viele Funktionen des originalen Git GUI, während Gitnub eher der Visualisierung dient und eine Erleichterung für alle Github-User darstellt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber Vorsicht: Ganz ohne Git GUI (bzw. die Kommandozeile) geht's leider immer noch nicht, denn pull und push werden von den beiden Tools noch nicht unterstützt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unter'm Strich macht die Arbeit mit GitX und Gitnub einfach mehr Spaß.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-3047144152386995835?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/3047144152386995835/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=3047144152386995835' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3047144152386995835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3047144152386995835'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/11/git-auf-dem-mac.html' title='Git auf dem Mac'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-8829045116234101817</id><published>2008-11-21T11:22:00.004+01:00</published><updated>2008-11-21T13:09:24.618+01:00</updated><title type='text'>Immer wieder Maven: mvn site</title><content type='html'>Ach ja, Maven, mein Lieblingstool bei der Softwareentwicklung. Immer wieder gibt's damit Probleme, angefangen bei der sehr fragwürdigen "always online" Philosophie, über reichlich unübersichtliche Builds (na schön, das könnte man sich sparen, wenn man seine Builds richtig aufsetzt), bis hin zu Plugins, die bei jedem nichttrivialen Projekt abstürzen. In schwachen Minuten frage ich mich schon mal, wozu sich ernsthafte Entwickler diese Monstrosität antun.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber das war erstmal nur, um in die richtige Stimmung zu kommen. Ein immer wieder auftretendes Problem beim Einsatz von Maven ist &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;mvn site&lt;/span&gt;. Das Plugin soll eigentlich die tollen Dokumentationen des Projektes erstellen, tendiert aber dazu, mit OutOfMemoryExceptions abzubrechen. Kein sehr spezielles Problem (Google sagte mir gerade, es hätte knapp 36000 Hits für die Schlüsselworte "maven site outofmemory"), und trotzdem vergesse ich immer wieder, wie ich den häßlichen Vogel in die Luft bekomme. Nun, hier ein Link zu &lt;a href="http://krangsquared.blogspot.com/2008/05/outofmemory-error-when-using-findbugs.html"&gt;The Wrath of Krang&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Kurzfassung: Mit der Environment-Variable &lt;code&gt;MAVEN_OPTS="-Xmx1024m -Xms128m"&lt;/code&gt; sollte es eigentlich funktionieren.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;(Und, wie es sich gehört, funktioniert es hier bei meinem Projekt nicht. Aber das ist eine andere Geschichte.)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-8829045116234101817?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/8829045116234101817/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=8829045116234101817' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8829045116234101817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8829045116234101817'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/11/immer-wieder-maven-mvn-site.html' title='Immer wieder Maven: mvn site'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-4329077819104662749</id><published>2008-11-20T14:30:00.003+01:00</published><updated>2008-11-20T14:48:19.575+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Multi-User-Git</title><content type='html'>In meinen letzten Artikeln zu Git ist immer nur am Rande auf das Aufsetzen eines zentralen Git-Repositories beschrieben. Früher oder später braucht man das aber, zusammen mit einem headless Repository. Im Grunde ist das ganz einfach (wie so vieles bei Git) -- hier die &lt;a href="http://www.online-tutorials.net/programmierung/git/tutorials-t-3-263.html#zentralen-git-server-aufsetzen"&gt;Anleitung&lt;/a&gt; vom &lt;a href="http://www.online-tutorials.net/programmierung/git/tutorials-t-3-263.html"&gt;Git-Tutorial&lt;/a&gt; von &lt;a href="http://www.online-tutorials.net/"&gt;online-tutorials.net&lt;/a&gt;:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;~ # mkdir git&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;~ # cd myproject&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;~/myproject # git clone --bare .git ~/git/myproject.git&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fertig ist das headless Repository. Für die Berechtigung auf User-Ebene gibt's ein &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/howto/update-hook-example.txt"&gt;Beispiel-Script&lt;/a&gt;, welches im obigen Beispiel nach ~/git/myproject.git/hooks/update kopiert und angepaßt wird. Dann sollte nur noch die Server-Infrastruktur aufgesetzt werden (git-user anlegen, Login-Shell auf /usr/bin/git-shell setzen), und fertig ist der zentrale Server. Zum Aufhübschen kann da vielleicht noch ein gitweb gestartet werden, aber das ist dann schon Luxus.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-4329077819104662749?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/4329077819104662749/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=4329077819104662749' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4329077819104662749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4329077819104662749'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/11/multi-user-git.html' title='Multi-User-Git'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-7027937383302994821</id><published>2008-10-14T11:17:00.006+02:00</published><updated>2008-10-14T12:11:38.969+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Erinnerung: Singletons vermeiden</title><content type='html'>&lt;div&gt;Heute mal ein Gedanke, der im Grunde keine Erläuterung braucht: Singletons werden fast nie gebraucht und sollten vermieden werden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Auf den Google-Seiten zur &lt;a href="http://code.google.com/p/update-engine/wiki/TestingAndCoverage"&gt;Test-Coverage&lt;/a&gt; der Google Update Engine bin ich gerade nochmal auf einen interessanten Link gestoßen, warum Singletons eine schlechte Idee sind: &lt;a href="http://unixjunkie.blogspot.com/2006/07/singleton-smell_25.html"&gt;The Singleton Smell&lt;/a&gt;, immerhin von Juli 2006, von Greg Miller auf im &lt;a href="http://unixjunkie.blogspot.com/"&gt;Unixjunky Blog&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zusammengefaßt läßt sich sagen: Singletons sind eine Übertragung des Konzeptes globaler Variablen auf OO-Design, was allein schon verdächtig ist, und erschweren bzw. verhindern Unit Tests, da sie die Verwendung von Mock-Objekten erschweren bzw. verhindern.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Im Grunde sollte es immer möglich sein, Singletons zu vermeiden, da ja jedes Programm einen definierten Startpunkt hat, von dem aus Objekte instantiiert und Methoden aufgerufen werden. Problematisch sind wohl nur "magische" Bibliotheken, die zwar technisch initialisiert werden müssen, diese Tatsache in ihrem Interface aber verheimlichen. Mal ein ausgedachtes Beispiel: Eine Bibliothek zur Verschlüsselung benötigt einen Zufallsgenerator, der wiederum mit einem Initialisierungsvektor instantiiert wird. Im Interface der Bibliothek taucht der aber nie auf, sondern wird von der Bibliothek im Hintergrund verwendet. Wenn die Funktionen der Bibliothek jetzt keine Referenz auf eine Bibliotheksinstanz bekommen, müssen sie über ein Singleton den Zufallsgenerator finden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Warum sollte man jetzt den Zufallsgenerator auslagern? Nun, einerseits kann mit dem versteckten Generator nicht überprüft werden, ob Verschlüsselungsroutinen auch wirklich immer funktionieren, z.B. für besondere Zufallszahlen. Man kann andererseits auch nicht prüfen, ob der Zufallsgenerator hinreichend zufällig arbeitet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Man kann also nur noch akzeptieren, daß die Bibliothek als Ganzes funktioniert, oder eben sehr lange testen und hoffen, zufällig auf Fehler zu stoßen -- die dann aber nicht mehr reproduzierbar sind. Insgesamt unschön, und nur durch Redesign der Bibliothek korrigierbar, was wieder ein Refactoring aller Applikationen nach sich zieht, die auf der Bibliothek aufbauen. Noch unschöner, und der ausschlaggebende Grund, warum einige Bibliotheken bzw. Frameworks voraussichtlich nie "verbessert" werden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Schlußfolgerung: Vermeiden, wo es geht, und wo es nicht geht, überlegen, ob es nicht doch geht.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-7027937383302994821?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/7027937383302994821/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=7027937383302994821' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7027937383302994821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7027937383302994821'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/10/erinnerung-singletons-vermeiden.html' title='Erinnerung: Singletons vermeiden'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-7999632057947816446</id><published>2008-10-10T21:55:00.004+02:00</published><updated>2008-10-10T22:12:00.418+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Über Tests, Git und Macs</title><content type='html'>Gerade stöbere ich so herum, um ein nettes Git-Plugin für mein Xcode zu finden, da stoße ich einen wirklich interessanten Artikel über's Testen, unter dem provokanten Titel &lt;a href="http://railspikes.com/2008/7/11/testing-is-overrated"&gt;Testing is overrated&lt;/a&gt;. Na klar, denke ich mir, die Rails-Typen haben sowieso einen Hang dazu, Dinge als overrated abzutun -- oft genug stellt sich hinterher heraus, daß sie Recht hatten (ich erinnere mich an die Aussage "Flexibility is overrated"). Aber ich schweife ab, Fakt ist, der Artikel ist sehr informativ.&lt;br /&gt;&lt;br /&gt;Ach ja, ein Git-Plugin habe ich nicht gefunden, aber eine andere Seite zum Thema Git auf dem Mac: Unter &lt;a href="http://mllog.blogspot.com/2008/04/git-idisk-und-so.html"&gt;Git, iDisk und so&lt;/a&gt; schreibt Thomas Dohmke auf &lt;a href="http://mllog.blogspot.com/"&gt;mllog&lt;/a&gt; eine kleine Einführung zu Git auf dem Mac, inklusive einer cleveren Anwendung für die iDisk, die wir Mac-User ja zum Glück alle haben. Na ja, einige jedenfalls.&lt;br /&gt;&lt;br /&gt;Bleibt nur: Wie komme ich im Büro an meine iDisk? Muß ich noch nachdenken.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-7999632057947816446?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/7999632057947816446/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=7999632057947816446' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7999632057947816446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7999632057947816446'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/10/ber-tests-git-und-macs.html' title='Über Tests, Git und Macs'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1814352408965926682</id><published>2008-10-08T12:41:00.003+02:00</published><updated>2008-10-08T12:49:42.528+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Real World'/><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>Apropos Datensicherheit: Meldedaten</title><content type='html'>Und noch ein Artikel auf &lt;a href="http://www.heise.de"&gt;heise.de&lt;/a&gt;: &lt;a href="http://www.heise.de/newsticker/Saechsischer-Staedte-und-Gemeindetag-Verkauf-von-Meldedaten-ist-zulaessig--/meldung/116890"&gt;Sächsischer Städte- und Gemeindetag: Verkauf von Meldedaten ist zulässig&lt;/a&gt;. Wir brauchen also keine schmierigen Gangster mit großen Hüten unter einsamen Laternen, die nächtlich DVDs mit massenweisen persönlichen Daten für jede Menge gutes Geld verscherbeln, denn die Städte und Gemeinden tun das ganz einfach per Internet.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Was für eine interessante Entwicklung. Bei der Gelegenheit könnte man doch gleich ein Monopol auf den Verkauf von personenbezogenen Daten einrichten, damit den Städten und Gemeinden dieses Geld nicht mehr entgehen kann. Andererseits: Warum sollte man für einen mittleren fünfstelligen Betrag dubiose Daten aus dubiosen Quellen kaufen, wenn man sie legal für den berühmten Apfel und das Ei bekommt? Vielleicht ist ja auch das die Peinlichkeit: Dresden hat im Jahr 2007 nur knapp 316000 Euro per Adreßhandel erwirtschaftet, für dieses Jahr sind nur 375000 Euro geplant.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wer bei den Preisen noch klaut ist bescheuert.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1814352408965926682?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1814352408965926682/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1814352408965926682' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1814352408965926682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1814352408965926682'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/10/apropos-datensicherheit-meldedaten.html' title='Apropos Datensicherheit: Meldedaten'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-627006874703989500</id><published>2008-10-07T10:29:00.006+02:00</published><updated>2008-10-08T12:52:37.380+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Real World'/><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>Heile Welt und Datenklau</title><content type='html'>Im Artikel "&lt;a href="http://www.heise.de/newsticker/Jede-zweite-Rufnummer-in-den-falschen-Haenden--/meldung/116943"&gt;Jede zweite Rufnummer in den falschen Händen&lt;/a&gt;" auf &lt;a href="http://www.heise.de/"&gt;heise.de&lt;/a&gt; finde ich gerade einen lustigen Abschnitt:&lt;div&gt;&lt;blockquote&gt;Gesetzliche Bestimmungen, die den Einsatz etwa von digitalen Markern für die Rückverfolgbarkeit von Daten vorsehen, gebe es schon längst. Wer sich an die Vorschriften halte, könne inzwischen auch bemerken, wenn ein Mitarbeiter sich Zugriff zu größeren Datensätzen verschaffe. Die Defizite lägen eher in der Umsetzung, kritisierte [Thilo] Weichert [Datenschutzbeauftragter von Schleswig-Holstein -- Anm. ketchup].&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;Nun, das ist ja amüsant. Dazu muß ich sagen, daß ich ein großer Freund von Datenschutz (in beiden möglichen Interpretationen) bin. Allein: Gesetzliche Bestimmungen zu digitalen Markern etc. können nur der Beruhigung des Gewissens dienen, in der Realität taugen die Regelungen nichts: Spätestens im Data Warehouse werden alle Daten aus den ach so sicheren Datenbanken gesaugt und in bunte Bildchen gemanscht. Aber auch sichere Datenbanken sind nicht sicher, weil sie heute nur noch mehr oder weniger dumme Speicher für die Application Server darstellen und nicht mehr feststellen können, wer nun warum auf welche Daten zugegriffen hat.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Der einzig gangbare Ausweg aus der Misere ist tatsächlich Datensparsamkeit: Daten, die ich nicht brauche, werden nicht gespeichert.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Was man nicht hat, kann einem nicht geklaut werden. Alles andere ist Gerede.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-627006874703989500?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/627006874703989500/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=627006874703989500' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/627006874703989500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/627006874703989500'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/10/heile-welt-und-datenklau.html' title='Heile Welt und Datenklau'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-4662416354908137593</id><published>2008-10-06T16:23:00.006+02:00</published><updated>2008-10-06T16:33:27.808+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Real World'/><title type='text'>Shape of Things to Come?</title><content type='html'>Rein zufällig stolpere ich heute bei Golem über einen interessanten Artikel: &lt;a href="http://www.golem.de/0810/62737.html"&gt;Forscher: Tom-Skype überwacht seine Nutzer&lt;/a&gt;. Nun, vielleicht ist ja "interessant" nicht das richtige Wort, vielleicht sollte man eher "beunruhigend" sagen. Und hoffen, daß die ganze China-Begeisterung bestimmte Leute nicht dazu bringt, sich unter das "Von China lernen heißt siegen lernen"-Banner zu stellen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-4662416354908137593?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/4662416354908137593/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=4662416354908137593' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4662416354908137593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4662416354908137593'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/10/shape-of-things-to-come.html' title='Shape of Things to Come?'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1131197664106129622</id><published>2008-10-06T12:29:00.004+02:00</published><updated>2009-01-14T17:19:06.279+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Git Nachtrag zur Version 1.6.x</title><content type='html'>Mir fällt gerade noch ein, daß es zur aktuellen Version 1.6.x von &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; noch &lt;a href="http://ketchuplog.blogspot.com/2008/07/mal-was-anderes-git.html?showComment=1223122680000#c9220703489900010919"&gt;einen Nachtrag für meine Blogeintrag&lt;/a&gt; gibt. Also: Scripte umschreiben!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1131197664106129622?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1131197664106129622/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1131197664106129622' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1131197664106129622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1131197664106129622'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/10/git-nachtrag-zur-version-16x.html' title='Git Nachtrag zur Version 1.6.x'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-879041486907958258</id><published>2008-10-04T14:22:00.003+02:00</published><updated>2008-10-04T14:41:57.365+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Krimskrams'/><title type='text'>Gutes Essen auf schmalen Straßen?</title><content type='html'>Um mal einen ebenso einleuchtenden wie nutzlosen Kommentar zum Universum abzugeben und somit der kritischen Masser der Information einen Schritt näher zu kommen (wenn mich meine Erinnerung nicht trügt, hat &lt;a href="http://de.wikipedia.org/wiki/Stanis%C5%82aw_Lem"&gt;Stanislav Lem&lt;/a&gt; dazu mal eine Kurzgeschichte geschrieben, aber ich finde beim besten Willen nicht heraus, welche es war: Irgendwer hat in einem Supercomputer in Afrika (?) solange irgendwelchen Datenmüll abgeladen, bis die "kritische Masse" von Information überschritten wurde und alle in Computern weltweit gespeicherten Daten verloren gingen, was die Menschheit gehörig zurückwarf...), hier mal zwei Aussagen, über dessen Beziehung untereinander ich gelegentlich eine Studie anzufertigen wäre:&lt;br /&gt;&lt;br /&gt;In Italien gibt es gutes Essen. Das Autofahren in Italien ist die Hölle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-879041486907958258?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/879041486907958258/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=879041486907958258' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/879041486907958258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/879041486907958258'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/10/gutes-essen-auf-schmalen-straen.html' title='Gutes Essen auf schmalen Straßen?'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-515796726881077312</id><published>2008-10-02T18:54:00.005+02:00</published><updated>2008-12-18T09:52:27.426+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Java vs Ruby on Rails... wieder mal</title><content type='html'>Ist ja eigentlich schon fast langweilig, denn zu dem Thema wurde schon unendlich viel geschrieben. Was ist jetzt besser? Java oder Ruby?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Stratisch typisiert oder dynamisch typisiert? Interpreter oder Compiler? Perl oder Python? C/C++ oder ASP.NET? Linux oder Windows? Das Internet hat eine lange Geschichte erhitzter Debatten, die ebenso vehement geführt wurden, wie sie sinnlos waren und sind, weil eben jede Seite gute Argumente hat (die in diesen Diskussionen allerdings selten vorgebracht werden). Mehr gefällig? Atari oder Amiga? Emacs oder vi? VMS oder Unix?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber &lt;a href="http://www.pardontheinformation.com/"&gt;Pardon the Information&lt;/a&gt;'s Robert J. Miller hat mit &lt;a href="http://www.pardontheinformation.com/2008/09/java-vs-ruby-on-rails-it-is-dead-heat.html"&gt;Java vs. Ruby on Rails - Its a Dead Heat&lt;/a&gt; einen interessanten Artikel geschrieben, der im ungewöhnlichen, aber vernünftigen (oder gar erwarteten) Fazit gipfelt, daß beide Lösungsansätze Vor- und Nachteile haben, und beide Ansätze schief gehen können. Interessant vor allem die "entrepeneurial report card". Lesenswert.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-515796726881077312?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/515796726881077312/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=515796726881077312' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/515796726881077312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/515796726881077312'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/10/java-vs-ruby-on-rails-wieder-mal.html' title='Java vs Ruby on Rails... wieder mal'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-499056965345170196</id><published>2008-09-29T11:37:00.006+02:00</published><updated>2008-09-29T15:32:32.178+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Hilfe für Maven</title><content type='html'>Nur damit ich es nicht vergesse: Ein nützliches Tool für Java-Entwickler, die sich mit &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; rumschlagen müssen, ist &lt;a href="http://www.jfrog.org/sites/artifactory/latest/"&gt;Artifactory&lt;/a&gt;: Ein einfach aufzusetzendes Enterprise Repository mit einigen Konfigurationsmöglichkeiten. Im Moment verwende ich es, um auf meinem Laptop auch ohne Netzanbindung Maven-Builds bauen zu können (ohne großartige Offline-Modus-Einstellungen).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ein etwas angestaubter Artikel, der das Einrichten eines Maven-Repositories beschreibt, ist übrigens bei &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=SettingUpMavenRepository"&gt;TheServerSide.com&lt;/a&gt; zu finden. Wenn ich mich recht erinnere, bin ich hier auch zum ersten Mal auf Artifactory gestoßen.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nebenbei: Die ständig benötigte Netzanbindung ist sicherlich eines der größten Ärgernisse in Maven. Muß nochmal in Ruhe zusammenschreiben, was in Folge alles an Problemen auftreten kann.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-499056965345170196?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/499056965345170196/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=499056965345170196' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/499056965345170196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/499056965345170196'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/hilfe-fr-maven.html' title='Hilfe für Maven'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-5550106970924230036</id><published>2008-09-10T11:02:00.006+02:00</published><updated>2008-09-10T11:28:49.028+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Krimskrams'/><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>LHC Tag, wir leben noch!</title><content type='html'>Na sowas! Vor Wochen beunruhigten uns Nachrichten, der &lt;a href="http://lhc.web.cern.ch/lhc/"&gt;Large Hydron Collider&lt;/a&gt;, eine Teufelsmaschine in den Tiefen der Nacht unter dem zumindest suspekten, wenn nicht gar kryptodiabolischen Genf, werde das jüngste Gericht über uns bringen, &lt;a href="http://newsworldwide.wordpress.com/2008/05/30/asking-a-judge-to-save-the-world-and-maybe-a-whole-lot-more/"&gt;Gerichte werden bemüht&lt;/a&gt; (nicht nur in Hawaii), um den Untergang des Universums abzuwenden. Mein Gedächtnis flüstert etwas von Physiknobelpreisträgern als Bedenkenträger, aber ich habe zu wenig Zeit, dafür Links zu jagen.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Erinnerungen werden wach: &lt;a href="http://www.imdb.com/title/tt0119081/"&gt;Event Horizon&lt;/a&gt; (dazu gibt's sogar einen &lt;a href="http://de.wikipedia.org/wiki/Event_Horizon_%E2%80%93_Am_Rande_des_Universums"&gt;Wikipedia-Eintrag&lt;/a&gt;), oder, wer es nicht ganz so bierernst meint (und keine Angst vor schlechten Filmen hat), &lt;a href="http://www.imdb.com/title/tt0120177/"&gt;Spawn&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Seit heute läuft LHC. Sieh mal an. Die Nachrichten erwähnen es nur am Rande. Vielleicht sollte ich mich mal durch die &lt;a href="http://wordpress.com/tag/large-hydron-collider/"&gt;Blogs zum LHC&lt;/a&gt; wühlen?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sieht aus, als wenn LHC das Schicksal der ersten Kernspaltung erleiden würde: Viel angstgeschürte Aufmerksamkeit vorher, dann gibt's wieder was Wichtigeres. Zum Beispiel, ob es dem Typen von Tokyo Hotel wieder gut geht. Na schön, um moralischen Implikationen vorzubeugen: LHC hat nicht viel mit Atombomben gemeinsam. Abgesehen vielleicht von Physik.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aber das trifft ja auch auf Tokyo Hotel zu, das mit der Physik.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also wieder mal nichts Neues unter der Sonne. Nur die Sache mit den juristischen Klagen ist eine jüngere Entwicklung.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-5550106970924230036?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/5550106970924230036/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=5550106970924230036' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5550106970924230036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5550106970924230036'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/lhc-tag-wir-leben-noch.html' title='LHC Tag, wir leben noch!'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-2392750958057455482</id><published>2008-09-04T14:49:00.005+02:00</published><updated>2009-01-14T17:18:32.156+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Git als Server</title><content type='html'>&lt;div&gt;So verlockend der dezentrale Ansatz von &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; auch ist, früher oder später braucht man doch eine "zentrale Instanz". Und wenn es nur für die Organisation der Releases ist. Git kommt mit einem ganz brauchbaren git-server an Bord, aber es gibt sicher Situationen, in denen man ... mehr will.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Auf &lt;a href="http://scie.nti.st/"&gt;scie.nti.st&lt;/a&gt; gibt es nun eine sehr &lt;a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way"&gt;ausführliche Anleitung&lt;/a&gt;, wie ein solcher "Git-Server" auf Basis von gitosis aufgesetzt wird. Das Ganze verlangt nach einem ordentlich aufgesetzten Python, was ja auf modernen Unix-artigen Systemen gegeben sein sollte. Eventuell nötige Anpassungen sind in der Anleitung beschrieben; die Kommentare sind auch hilfreich.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-2392750958057455482?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/2392750958057455482/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=2392750958057455482' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2392750958057455482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/2392750958057455482'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/git-als-server.html' title='Git als Server'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-6590801860611915271</id><published>2008-09-04T13:13:00.003+02:00</published><updated>2008-09-04T13:17:10.140+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Git Cheat Sheet</title><content type='html'>Ich grübele gerade, wie ich ein Problem mit git lösen kann, und siehe, zwischendurch stoße ich auf das hervorragene &lt;a href="http://jan-krueger.net/development/git-cheat-sheet-extended-edition"&gt;Git Cheat Sheet&lt;/a&gt; von &lt;a href="http://jan-krueger.net/"&gt;Jan Krüger&lt;/a&gt;. Sehr empfehlenswert.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-6590801860611915271?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/6590801860611915271/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=6590801860611915271' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6590801860611915271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6590801860611915271'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/git-cheat-sheet.html' title='Git Cheat Sheet'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-626949068573176110</id><published>2008-09-03T12:11:00.002+02:00</published><updated>2008-09-04T13:20:16.090+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Krimskrams'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Noch ein Link zu Google: Heise berichtet</title><content type='html'>Die netten Leute von Heise haben der Gelegenheit angemessen einen "mehrseitigen" Artikel zu Chrome zusammengestellt: &lt;a href="http://www.heise.de/newsticker/Googles-Webbrowser-Chrome-wuehlt-das-Web-auf--/meldung/115371"&gt;Googles Browser Chrome wühlt das Web auf&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-626949068573176110?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/626949068573176110/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=626949068573176110' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/626949068573176110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/626949068573176110'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/noch-ein-link-zu-google-heise-berichtet.html' title='Noch ein Link zu Google: Heise berichtet'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-8423852953453558593</id><published>2008-09-03T08:21:00.004+02:00</published><updated>2008-09-03T08:47:15.952+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>Evil Google?</title><content type='html'>Im Grunde war die Reaktion ja vorhersehbar: Google veröffentlicht einen neuen Browser, und die Welt schreit "Hilfe! Böses Imperium!". Gerade erfreute mich der nicht gerade auf technische Schlagzeilen spezialisierte &lt;a href="http://www.mdr.de/mdr-figaro/"&gt;MDR Figaro&lt;/a&gt; mit einem Interview mit einem Medienwissenschafter aus Halle zum Thema Chrome. Schlußlinie: Google muß viel demokratischer werden, sich wieder dem Netz öffnen.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Das sind so diese Tage, an denen ich überlege, ob es sich lohnt, Ohren zu haben. Oder, was das angeht, Augen. Ich bin weit davon entfernt, Google verteidigen zu wollen, aber vergessen die belehrstuhlten Bedenkenträger nicht eine Kleinigkeit? Zum Beispiel daß Google ein komerzielles Unternehmen ist, welches als erste Bürgerpflicht Geld für die Anteilseigner erwirtschaften muß? Und es trotzdem geschafft hat, eine breite Palette von Dienstleistungen kostenlos anzubieten? &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ganz klar, was "umsonst" ist, muß reguliert werden, ist Gemeingut. Und was erfolgreich ist, muß sowieso reguliert werden. Ich kann mich erinnern, daß in den Tagen von &lt;a href="http://www.altavista.com/"&gt;AltaVista&lt;/a&gt; die Idee einer Suchmaschine, die automatisch das Internet abgrast, als komplett hirnrissig angesehen wurde. Und zwar von ausnahmslos allen, die irgendwas vom Internet verstanden haben. Nachdem AltaVista an vorhersehbaren technischen und finanziellen Problemen scheiterte (&lt;a href="http://www.yahoo.com"&gt;Yahoo&lt;/a&gt; war von Anfang an als handeditierte Liste von URLs an den Start gegangen), hat Google erneut den automatischen Ansatz versucht. Bekanntes Risiko, eigene Kosten. Ein Experiment, das funktioniert hat, Erfolg gegen jede Vernunft. War da jemand dabei, der warnend den Zeigefinger erhob? (Abgesehen von den üblichen Verschwörungstheoretikern...)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wohl nicht. Aber Google ist eben privat, nicht staatlich (sonst wäre das andere Verschwörungslager hinter ihnen her). Das schmeckt wohl nicht allen: Die einen sind sowieso gegen alles, was irgendwie nach Kapitalismus riecht, andere finden es bedenklich, daß Google permanent Dinge "verschenkt" und damit den Markt für Dienstleistungen gegen Bargeld austrocknet, dritte können es einfach nicht ertragen, daß es eine einflußreiche Größe gibt, die nicht von einem internationalen Gremium mit Komitee und gesonderten Komissionen für Menschenrechte, Transparenz und technische Spezifikationen "gelenkt" wird. Und zuletzt gibt es noch die professionellen Bedenkenträger, denen das Thema egal ist, solange man nur für den Vortrag Aufmerksamkeit erheischen kann.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Möge Google standhaft bleiben. Sie haben keinen Grund, sich dem Druck der Neider zu beugen, und wenn sie es täten, würde tatsächlich entstehen, wovor die Unkenrufer warnen: Ein omnipotenter, intransparenter Technologie-Moloch, bei dem nie klar ist, wessen Interessen er vertritt. Und wer es wirklich ernst meint mit seiner Ablehnung von Google als Evil Empire, sei eingeladen, seine eigene Applikation zu bauen, ob Suchmaschine, eMail-Dienst oder Browser. Aber bitteschön mit seinem Geld, nicht mit meinen Steuern.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-8423852953453558593?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/8423852953453558593/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=8423852953453558593' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8423852953453558593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8423852953453558593'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/evil-google.html' title='Evil Google?'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-687978262837520002</id><published>2008-09-02T22:30:00.005+02:00</published><updated>2008-09-02T22:54:41.305+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Chrome ist da</title><content type='html'>Na sowas: Gerade erst erfahre ich, daß es &lt;a href="http://ketchuplog.blogspot.com/2008/09/burning-chrome.html"&gt;Google Chrome&lt;/a&gt; gibt, und schon ist es fertig: Auf der &lt;a href="http://www.google.com/chrome"&gt;Download-Seite von Chrome&lt;/a&gt; steht ein überschaubar kleiner Installer bereit, der die Applikation auf die Platte bügelt.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Auf den ersten Blick ist Chrome unspektakulär: Einfach ein Browser, ohne viele Knöpfe zum dran drehen, der sofort funktioniert und sich irgendwie... googlig anfühlt: Nicht sehr schick, nicht sehr stylish, aber funktional. Understatement. Wo nehmen die Googler eigentlich immer ihre Designer her? Ich bin fasziniert.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ansonsten ist der eBlätterwald ja heute voller Meldungen zum Thema "Google baut sein Imperium aus" (am peinlichsten sind irgendwie immer die FOCUS-Artikel, auf die ich lieber nicht verlinke, weil ich die aufgeregten, schicksalsschwangeren ... Artikel dort einfach nicht ertragen kann). Ich kann nur sagen: Entwarnung, Chrome erscheint handlich und ist nett, aber nicht das Ende von Firefox, Opera und Exploder.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Größter Minuspunkt übrigens: Zumindest Firefox und Opera gibt es auch für Nicht-Windows-Plattformen; Chrome gibt's offenbar erstmal nur für Windows.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-687978262837520002?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/687978262837520002/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=687978262837520002' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/687978262837520002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/687978262837520002'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/chrome-ist-da.html' title='Chrome ist da'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-6270049389804475699</id><published>2008-09-02T14:14:00.006+02:00</published><updated>2008-09-02T14:45:32.882+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Krimskrams'/><category scheme='http://www.blogger.com/atom/ns#' term='Comic'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Burning Chrome</title><content type='html'>Chrome ist offensichtlich ein sehr beliebtes Material. Keine Ahnung, warum. Auf jeden Fall faszinierte es schon William Gibson genug, um eine Kurzgeschichte "Burning Chrome" zu nennen (zu meiner Schande muß ich gestehen, daß mir im Moment nicht einfällt, warum es dort ging). Später verbarg sich unter der Oberfläche von Mozilla (und seinen Nachfolgern, wie Firefox) ein System namens Chrome. Vielleicht in Anlehnung an Gibsons Geschichte? Müßte recherchiert werden.&lt;br /&gt;&lt;br /&gt;Neueste Referenz ist Google Chrome. Ein Mythos? Wer weiß, &lt;a href="http://blogoscoped.com/archive/2008-09-01-n47.html"&gt;Philipp Lenssens Blog&lt;/a&gt; berichtet schon mal über ein &lt;a href="http://blogoscoped.com/google-chrome/"&gt;Comic zum neuen Superbrowser&lt;/a&gt; (offiziell bei &lt;a href="http://books.google.com/books?id=8UsqHohwwVYC&amp;amp;printsec=frontcover#PPA7,M1"&gt;Google Books&lt;/a&gt; zu finden). Der Comic wurde von &lt;a href="http://www.scottmccloud.com/"&gt;Scott McCloud&lt;/a&gt; gezeichnet (genau, der mit den Comics zum Comic) und ist unabhängig von der Realitätsnähe des Google Chrome Browers lesenswert.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S.: "Burning Chrome" wurde nicht als "Laß die Giraffe brennen" übersetzt. Falsche Assoziation...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-6270049389804475699?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/6270049389804475699/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=6270049389804475699' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6270049389804475699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6270049389804475699'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/burning-chrome.html' title='Burning Chrome'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-1374900709677665622</id><published>2008-09-01T08:39:00.004+02:00</published><updated>2008-09-01T08:51:39.240+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Auf der Suche nach dem Verzeichnis</title><content type='html'>LDAP ist ein interessantes Phänomen: Alle reden darüber, alle wollen es nutzen, aber niemand schreibt, wie es genutzt werden soll. Jüngstes Beispiel: Ich will einen LDAP-Server in Glassfish einbinden. Alles ganz einfach: Glassfish installieren, ApacheDS installieren, Domain im LDAP anlegen, und ... ähm, was jetzt? Klar, ein LDAP-Realm im Glassfish anlegen, aber mit welchen Parametern?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Die Lösung sollte jetzt ganz einfach sein: Google hilft. Also kurz "glassfish ldap" einhacken und gucken, was passiert. Es passiert, was man befürchtet hat: Seiten über Seiten, die sagen, man kann doch LDAP mit Glassfish benutzen (wissen wir schon!), und anschließend Seiten über Seiten, die erklären, wie OpenLDAP installiert wird (interessiert mich nicht).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Auf den Seiten von &lt;a href="http://number9.hellooperator.net/articles/2008/08/17/decent-postgresql-install-on-osx"&gt;number 9&lt;/a&gt; verliere ich dann ganz den Faden. (Na ja, daß PostgreSQL die leistungsfähigste frei verfügbare Datenbank ist, wußte ich vorher schon.)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, Punktsieg für den Rest der Welt im ewigen ketchup vs. Rest der Welt. Ich werde wohl doch noch in meine JEE-Büchern graben müssen.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-1374900709677665622?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/1374900709677665622/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=1374900709677665622' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1374900709677665622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/1374900709677665622'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/09/auf-der-suche-nach-dem-verzeichnis.html' title='Auf der Suche nach dem Verzeichnis'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-812096528680597347</id><published>2008-08-26T09:26:00.004+02:00</published><updated>2008-08-26T09:45:07.141+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>Als Deutsch getestet</title><content type='html'>Unser schönes Deutschland wird Einwanderungsland, also brauchen wir ... was? Genau, einen Einbürgerungstest. Den hat ja nun jeder.&lt;br /&gt;&lt;br /&gt;Aber unser Einbürgerungstest wäre nicht deutsch, wenn er nicht ein paar Besonderheiten hätte. Zunächst einmal werden dem zukünftigen Deutschen aus einem Fundus von ca. 300 Fragen gut einhundert gestellt. Es gilt, wenigstens die Hälfte der Fragen korrekt zu beantworten. Damit es aber nicht zu schwer ist, sind die Fragen als (Multiple?) Choice Fragen angelegt: Einfach das Richtige ankreuzen.&lt;br /&gt;&lt;br /&gt;Klingt einfach. Klingt vernünftig. Schließlich wollen wir ja in Deutschland Einwanderer begrüßen, die sich mit Land, Leuten und Kultur identifizieren. Und natürlich Deutsch sprechen. Aber es gibt, wie so oft bei bürokratischen Vorgängen, einen Haken: Die Fragen sind offenbar auch von Deutschen nicht immer einfach zu beantworten. "Wenn Sie Ihrem Kind einen Hund schenken, müssen Sie:" -- ja, natürlich, das Tier anmelden und Hundesteuer zahlen. (Ich halte das ja für eine einfache Frage, aber in Konkurrenz zur Antwort "den Hund impfen lassen" ist es schon eine Fangfrage). Dafür kann man den Test so oft wiederholen, wie man will. Vielleicht will man irgendwann einfach nicht mehr.&lt;br /&gt;&lt;br /&gt;Grundsätzlich frage ich mich, ob solche Tests nicht Augenwischerei sind. Schön, sie stellen sicher, daß Einwanderer die Sprache hinreichend gut lesen können. Aber wissen wir anschließend, ob sie uns Eingeborene auch verstehen? Wichtiger noch: Motiviert so ein Test dazu, Deutschland zu verstehen? Kann ein Test das überhaupt? Wenn die Antwort "Nein" lautet (und das ist meine Meinung), dann ist der Test nur bürokratische Schikane. Mit Integration hat das nicht viel zu tun.&lt;br /&gt;&lt;br /&gt;Immerhin, wer sich für den deutschen Paß testen läßt, demonstriert wenigstens eine gewisse Leidensfähigkeit und den Willen, sich absurden Anordnungen der Obrigkeit zu beugen. Also vielleicht doch eine gute Vorbereitung auf das Leben als Deutscher?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-812096528680597347?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/812096528680597347/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=812096528680597347' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/812096528680597347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/812096528680597347'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/08/als-deutsch-getestet.html' title='Als Deutsch getestet'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-7825636368411540295</id><published>2008-08-25T18:21:00.004+02:00</published><updated>2008-08-25T18:29:05.439+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>Im Brunnen</title><content type='html'>Irgendwie scheinen wir uns nur für Dinge zu interessieren, die schon vorbei sind. Jüngstes Beispiel: Die &lt;a href="http://www.heise.de/newsticker/Buergerrechtler-wollen-Musterklage-gegen-neue-bundeseinheitliche-Steuer-ID-durchfechten--/meldung/114759"&gt;Bestrebungen einer Klage&lt;/a&gt; gegen die bundeseinheitliche Steuer-ID. Klar ist, daß eine eindeutige Personenkennzahl schnell weitere Begehrlichkeiten wecken wird, schließlich wollen wir alle etwas gegen organisierte Kriminalität, Kinderpornographie und letztlich gegen Terrorismus unternehmen. Und wer nichts zu verbergen hat, hat ja auch nichts zu verheimlichen, am wenigsten seine Steuer-ID! Also, Tätowierstudios schon mal die Tinte anwärmen, wir braven Brüger ohne Furcht und Tadel kommen bald vorbei, und lassen unsere PKZ auf Stirn und Unterarm pieksen.&lt;br /&gt;&lt;br /&gt;Was ich nicht verstehe: Warum ist das Thema jetzt aktuell? Ich kann mich erinnern, daß der Vergleich Steuer-ID = Personenkennzahl schon vor Monaten, wenn nicht Jahren, gezogen wurde. Damals hat es niemanden interessiert. Warum heute?&lt;br /&gt;&lt;br /&gt;Ach ja, den gleichen Aufschrei gab es auch, als es hieß, im nächsten Monat wird GEZ-Gebühr auf Internet-PCs fällig. Die jahrelange Debatte im Vorfeld war ja offenbar nur was für Geeks.&lt;br /&gt;&lt;br /&gt;Kopfschütteln.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-7825636368411540295?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/7825636368411540295/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=7825636368411540295' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7825636368411540295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/7825636368411540295'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/08/im-brunnen.html' title='Im Brunnen'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-3161250580034285181</id><published>2008-08-19T11:33:00.008+02:00</published><updated>2008-08-19T22:22:07.983+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><title type='text'>Computer, wie sie sein sollten</title><content type='html'>Vor ein paar Tagen bin ich auf einen Artikel gestoßen, in dem ein Produkt namens "&lt;a href="http://www.delicious-monster.com/"&gt;Delicious Library 2&lt;/a&gt;" kurz vorgestellt wurde. Das Ding ist im Grunde eine simple Dinge-Datenbank, recht hübsch in Szene gesetzt, berücksichtigt aber zwei Anwendungen einer solchen "Datenbank aller Dinge", die andere Programme und Systeme vernachlässigen:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Man kann Dinge (Bücher, Filme, CDs) an Bekannte verleihen (und sich merken, wem man was geliehen hat)&lt;/li&gt;&lt;li&gt;Man kann seine gesamte Bibliothek in ein, zwei Tagen komplett einlesen&lt;/li&gt;&lt;/ol&gt;Letzteres ist das wirkliche Alleinstellungsmerkmal von Delicious Library: Einfach den EAN-Barcode des zu archivierenden Artikels vor die iSight-Kamera seines Mac halten, Pieps abwarten, und fertig. In der Realität funktioniert das erstaunlich gut, und wenn der Barcode mal nicht gelesen werden kann (was hin und wieder passiert), hilft die direkte Eingabe der EAN fast immer weiter. Und wo auch das scheitert zeigt sich Delicious Library flexibel: Stichworte werden direkt an Amazon gesendet, und die Trefferliste läßt dort in den Details stöbern.&lt;br /&gt;&lt;br /&gt;Na schön, genörgelt werden darf auch. Delicious Library ist ein sehr, sehr einfaches Programm. Wie viele gute Mac-Programme verzichtet es auf überbordende Features, und beschränkt sich auf das Wesentliche: Artikel erfassen und in verschiedenen Listen halten. Einige Zeitgenossen mögen sich mehr wünschen. Gute Nachricht: Mit AppleScript ist alles möglich. Schlechte Nachricht: Man muß zumindest versuchen, AppleScript zu benutzen.&lt;br /&gt;&lt;br /&gt;Und ganz offensichtlich gibt es da noch ein Problem: Delicious Library ist ein Mac-Programm. Wer also keinen Mac hat, steht im Regen (steht er sowieso -- oder läßt sich von einem Freund die Bibliothek scannen und als XML 'rüberreichen - Exportoptionen gibt es reichlich). Aber im Grunde hilft es nur, sich einen Mac zu kaufen. Was sowieso eine gute Idee ist.&lt;br /&gt;&lt;br /&gt;Zum Abschluß klaue ich nochmal den Anfang der Delicious Monster Site, weil er mir einfach so gut gefällt:&lt;br /&gt;&lt;br /&gt;"Wait, I just hold a CD or DVD or video game or book or whatever up to my webcam, and it magically reads the UPC and downloads that item’s cover and all pertinent information about it, and displays all my stuff on photorealistic shelves? &lt;i&gt;I’ll take it! Right now! This is why I bought a computer in the first place!"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Ja, genau so ist es. Nur fotorealistisch erschien mir damals noch etwas zu utopisch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-3161250580034285181?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/3161250580034285181/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=3161250580034285181' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3161250580034285181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3161250580034285181'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/08/computer-wie-sie-sein-sollten.html' title='Computer, wie sie sein sollten'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-6947476700900376628</id><published>2008-07-29T12:41:00.004+02:00</published><updated>2008-07-30T09:33:46.492+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Beobachtungen'/><title type='text'>Schöngetrunken</title><content type='html'>Ach ja, Erfolg macht sexy. Kein Wunder, daß alle erfolgreich sein wollen. Beispielsweise will Microsoft mit seinem Windows Vista ganz dringend Erfolg haben, koste es, was es wolle. Na schön, "koste es, was es wolle" hat MS ja schon ein paar Mal erfolgreich durchgezogen, zuletzt meines Wissens nach mit dem Internet Explorer, der mit brachialer Gewalt an die Spitze der verwendeten Browser im Internet geprügelt wurde.&lt;br /&gt;&lt;br /&gt;Schon damals war eine spannende Frage, wie der Erfolg gemessen wird. Die verschiedenen Statistiken, die zum Thema Markaufteilung bei Browsern im Umlauf sind, haben ja eine lange Geschichte. Und wenn alle Stricke reißen, muß eben kreativ mit Zahlen umgegangen werden. MS konnte so in knapp zwei Monaten sein Ergebnis verkaufter Vista-Lizenzen um knapp 22% verbessern (von 140 Millionen auf 180 Millionen), indem einfach alle Windows-Lizenzen, die Hersteller wie HP in letzter Zeit verkauft haben, &lt;a href="http://www.heise.de/newsticker/Windows-XP-verkauft-und-die-Vista-Lizenz-gezaehlt--/meldung/113474/from/atom10"&gt;als Vista-Lizenz abgerechnet werden&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Wie schon beim Internet Explorer stellt sich auch hier die Frage nach dem Warum: Weshalb ist Microsoft so erpicht darauf, erfolgreicher dazustehen als sie ohnehin schon sind? (Denn daß sie erfolgreich sind steht völlig außer Frage.) Warum muß Vista möglichst noch erfolgreicher sein, sogar auf Kosten des hauseigenen XP? Ist es nicht offensichtlich, daß Vista eben nicht so erfolgreich ist?&lt;br /&gt;&lt;br /&gt;Es kann natürlich sein, daß die neue Spitze bei MS demonstrieren will, daß sie auch ohne Bill ganz gut zurecht kommt. Oder daß man sich keine Schlappe leisten will: Wenn Vista noch teurer war als XP, und noch massiver beworben wurde als XP, muß Vista auch noch besser verkauft werden als XP. (Erinnert mich irgendwie an Civilization: Wenn ich den Wissenschaftsetat erhöhe, bekomme ich automatisch schneller Forschungsergebnisse.)&lt;br /&gt;&lt;br /&gt;Aber im Grunde weiß das nur Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-6947476700900376628?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/6947476700900376628/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=6947476700900376628' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6947476700900376628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/6947476700900376628'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/07/schngetrunken.html' title='Schöngetrunken'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-4190156644744073570</id><published>2008-07-20T18:00:00.001+02:00</published><updated>2008-08-19T22:41:43.792+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spiele'/><title type='text'>Mass Effect Is Evil!</title><content type='html'>Ein neues Schreckliches Spiel sucht uns heim und verschlingt Zeit wie es auch ein schwarzes Loch nicht kann: Biowares &lt;a href="http://masseffect.bioware.com/"&gt;Mass Effect&lt;/a&gt; haut in die gleiche Kerbe wie vormals &lt;a href="http://www.bioware.com/games/knights_old_republic/"&gt;Knights of the Old Republic&lt;/a&gt;. Nur hat Bioware an der Präsentation massiv gefeilt: Während KotOR noch steril und stellenweise hölzern wirkte, macht Mass Effect den Eindruck eines interaktiven Films. Zwar müssen wir bei Mass Effect auf Lichtschwerter verzichten, dafür sind die Kampfsequenzen irgendwie taktischer geraten -- oder wirken zumindest so. Die Dialoge sind insgesamt sehenswerter, die Atmosphäre stimmt, kurz, allein der äußere Eindruck legt den Erwerb nahe.&lt;br /&gt;&lt;br /&gt;Was die Story angeht: Wieder einmal muß das ganze Universum gerettet werden. Dabei ist der Spieler selbst kein Superheld nach Lucas oder Marvel, sondern nur ein ganz normaler Superspion, der seine Handfeuerwaffen an Bord seines eigenen Schiffes beim Waffenmeister kaufen muß. (Abgesehen davon ist er natürlich Kapitän des Schiffes. Das muß schon sein.) Wie bei bisherigen Bioware-Titeln kann man sich in zahllosen Nebenquests verwickeln; ob die Story reich an Verwicklungen ist, wird sich erst noch zeigen.&lt;br /&gt;&lt;br /&gt;Ansonsten gilt: Wenn gerade genug Kleingeld zur Hand ist, und ein paar Tage Zeit sind, sollte man unbedingt mal draufsehen. (Vermutlich wird es dann sowieso gleich gekauft.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-4190156644744073570?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/4190156644744073570/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=4190156644744073570' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4190156644744073570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4190156644744073570'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/07/mass-effect-is-evil.html' title='Mass Effect Is Evil!'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-3308131602270096041</id><published>2008-07-20T10:25:00.001+02:00</published><updated>2009-01-14T17:17:48.104+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Mal was Anderes: Git</title><content type='html'>Das alte RCS hatte gegenüber allen hypermodernen Client-Server-SCMs einen großen Vorteil: Wenn man mal eben eine Datei versionieren will, sagt man einfach &lt;span style="font-style: italic;"&gt;co dateiname&lt;/span&gt;. Besser noch, man versioniert die Datei im Emacs, und hat keine Sorgen mehr. Das ist zwar nicht praktikabel für Multimillionendateienprojekte, wie sie heute die Regel sind, aber perfekt für Konfigurationsdateien oder "Microprojekte", also Tools, die man nebenbei mal so schreibt.&lt;br /&gt;&lt;br /&gt;Allerdings gibt es gute Gründe, RCS nicht zu verwenden. Zusammengefaßt: Aus heutiger Sicht kann RCS nicht mehr als SourceSafe. Na schön, laut der &lt;a href="http://msdn.microsoft.com/de-de/library/ms181038%28VS.80%29.aspx"&gt;aktuellen Dokumentation von VSS&lt;/a&gt; kann VSS mittlerweile mehr als RCS (nämlich Verzweigen und Zusammenführen, bekannt als Branchen und Mergen). Wie dem auch sei, RCS lebt, solange es keine Alternative für solche Microprojekte gibt.&lt;br /&gt;&lt;br /&gt;Und hier ist sie: &lt;a href="http://git-scm.com/"&gt;Git, das Fast Version Control System&lt;/a&gt;. Git ist anders als Subversion, anders als RCS; es ist zusammen mit &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial&lt;/a&gt; eine neue Kategorie von SCM: verteiltes SCM. Im Gegensatz zu einem Client-Server-SCM, bei dem das Repository mit allen versionierten Dateien auf einem zentralen Server liegt, hat bei einem verteilten SCM jeder Client ein vollwertiges Repository lokal vorliegen. Damit hat man jederzeit offline Zugriff auf die komplette verzweigte History des Projektes, was ein großer Vorteil ist, wenn man aus irgendwelchen Gründen tatsächlich offline arbeiten muß.&lt;br /&gt;&lt;br /&gt;Ein Git-Repository ist schnell aufgesetzt: alles, was man braucht, ist ein Wurzelverzeichnis. Dann reicht ein &lt;a style="font-style: italic;" href="http://www.kernel.org/pub/software/scm/git/docs/git-init.html"&gt;git-init&lt;/a&gt;, und schon kann man Dateien versionieren. In der Vergangenheit waren verschiedene Aufsätze zu Git populär (z.B. &lt;a href="http://git.or.cz/cogito/"&gt;Cogito&lt;/a&gt;), um die Arbeit mit Git zu vereinfachen. Aktuell wird Git aber als nutzerfreundlich genug angesehen, sodaß diese Aufsätze als "deprecated" gelten.&lt;br /&gt;&lt;br /&gt;Gilt es nun, eine lokale Arbeitskopie zu erstellen, wird bei einem verteilten SCM ein beliebiges vorhandenes Repository geklont. Bei Git klont man in der Regel das Repository, in das man seine Änderungen wieder einspielen möchte. Auch das ist sehr einfach: Ein &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-clone.html"&gt;&lt;span style="font-style: italic;"&gt;git-clone &lt;remote-repository&gt;&lt;/remote-repository&gt;&lt;/span&gt;&lt;/a&gt; erstellt ein Verzeichnis mit dem Namen des Repositories und packt dort den Inhalt des Repositories aus. Wechselt man nun in das neue Verzeichnis, kann man sofort einen Versionsbaum des Repositories begutachten, indem man &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/gitk.html"&gt;&lt;span style="font-style: italic;"&gt;gitk&lt;/span&gt;&lt;/a&gt; sagt. Gitk ist ein Tcl/Tk Frontend zum kommandozeilenbetriebenen Git; erwähnenswert ist noch &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-gui.html"&gt;&lt;span style="font-style: italic;"&gt;git-gui&lt;/span&gt;&lt;/a&gt;, ein weiteres Frontend, welches alle praktischen Arbeiten in Git in einer GUI zusammenfaßt.&lt;br /&gt;&lt;br /&gt;Der Rest ist schnell erzählt: Neue Dateien werden per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-add.html"&gt;&lt;span style="font-style: italic;"&gt;git-add&lt;/span&gt;&lt;/a&gt; hinzugefügt, alte werden mit &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-rm.html"&gt;&lt;span style="font-style: italic;"&gt;git-rm&lt;/span&gt;&lt;/a&gt; gelöscht oder per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-mv.html"&gt;&lt;span style="font-style: italic;"&gt;git-mv&lt;/span&gt;&lt;/a&gt; umbenannt/verschoben, ein Changeset wird per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-commit.html"&gt;&lt;span style="font-style: italic;"&gt;git-commit&lt;/span&gt;&lt;/a&gt; ins (lokale) Repository geschrieben. Updates vom Upstream-Repository besorgt man sich per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"&gt;&lt;span style="font-style: italic;"&gt;git-pull&lt;/span&gt;&lt;/a&gt;, seine eigenen Änderungen schiebt man per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"&gt;&lt;span style="font-style: italic;"&gt;git-push&lt;/span&gt;&lt;/a&gt; wieder zurück (hierfür wird i.d.R. ein SSH-Zugang benötigt). Branches werden per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html"&gt;&lt;span style="font-style: italic;"&gt;git-branch&lt;/span&gt;&lt;/a&gt; angelegt (oder einfacher per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"&gt;&lt;span style="font-style: italic;"&gt;git-checkout -b &lt;branchname&gt;&lt;/branchname&gt;&lt;/span&gt;&lt;/a&gt;), zwischen den Branches kann per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"&gt;&lt;span style="font-style: italic;"&gt;git-merge&lt;/span&gt;&lt;/a&gt; gemerged werden. Zuletzt kann ein erreichter Zustand per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"&gt;&lt;span style="font-style: italic;"&gt;git-tag&lt;/span&gt;&lt;/a&gt; gelabelt werden (Bonbon: per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"&gt;&lt;span style="font-style: italic;"&gt;git-tag -s&lt;/span&gt;&lt;/a&gt; kann der Stand PGP/&lt;a href="http://www.gnupg.org/"&gt;GPG&lt;/a&gt;-signiert werden). Zu einem beliebigen Stand im Repository gelangt man wieder per &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"&gt;&lt;span style="font-style: italic;"&gt;git-checkout&lt;/span&gt;&lt;/a&gt;, was damit zu einem der wichtigsten Befehle mutiert.&lt;br /&gt;&lt;br /&gt;Damit ist die Grundfunktionalität eines SCM abgedeckt. Git kann noch eine ganze Menge mehr, aber das kann man sich ansehen, wenn man wirklich mal ein größeres Projekt unter Git verwaltet. Was noch fehlt ist eine vernünftige Integration in Eclipse (das &lt;a href="http://git.or.cz/gitwiki/InterfacesFrontendsAndTools#head-5001f892bfe8fd4342fb2ed398254f46868c5521"&gt;Java GIT/Eclipse GIT &lt;/a&gt;Plugin habe ich nicht zur Zusammenarbeit bewegen können).&lt;br /&gt;&lt;br /&gt;Das ist alles viel zu umständlich und generell nicht praktikabel? Nun, obwohl ich als bekennender Apple-User natürlich (!) BSD vorziehe, wird der Linux-Kernel unter Verwendung von Git weiterentwickelt. Das scheint ja erstmal zu funktionieren.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[Update 2009-01-14]&lt;/div&gt;&lt;div&gt;Die offizielle Homepage von git ist umgezogen. Git firmiert nun unter &lt;a href="http://git-scm.com"&gt;http://git-scm.com&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;[/Update 2009-01-14]&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-3308131602270096041?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/3308131602270096041/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=3308131602270096041' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3308131602270096041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/3308131602270096041'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/07/mal-was-anderes-git.html' title='Mal was Anderes: Git'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-8782674238754893597</id><published>2008-07-19T10:47:00.000+02:00</published><updated>2008-07-19T11:56:51.015+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>Ein wenig über Synergy</title><content type='html'>Mit &lt;a href="http://www.telelogic.com/corp/products/synergy/index.cfm"&gt;Synergy&lt;/a&gt; (vormals Continuus) besitzt IBM ein weiteres gefühltes Fossil unter den Versionskontrollsystemen. Zur Erinnerung: Vor ein paar Jahren kaufte IBM mit der Firma Rational auch gleich deren &lt;a href="http://www-306.ibm.com/software/awdtools/clearcase/"&gt;ClearCase&lt;/a&gt; SCM mit ein. Beide Systeme können ihre Wurzeln zumindest bis in die 1990er Jahre zurückverfolgen (was ich hier nicht tue, da beide Systeme eine bewegte Vergangenheit haben). Im Moment bin ich gezwungen, mit Synergy zu arbeiten, was mein Leben nicht eben leichter macht; ich vergleiche es hier mit ClearCase, obwohl ich mit letzterem wesentlich mehr Erfahrungen habe.&lt;br /&gt;&lt;br /&gt;Wie bei allen anderen serverbasierten SCMs, zu denen ich auch das vielgelobte &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; zähle, ist auch by Synergy eine wesentliche Schwäche des Systems der Aufwand, der im Vorfeld betrieben werden muß: Bevor ein Projekt aufgesetzt werden kann, muß die Projektstruktur geplant werden. Wer schon einmal die Freude hatte, ein neues Projekt in Subversion oder ClearCase aufzusetzen, weiß, daß hier viele Befindlichkeiten berücksichtigt werden wollen, inklusive der Planung der späteren Nutzung.&lt;br /&gt;&lt;br /&gt;Synergy verwirrt hier zusätzlich, da es ein eingebautes Modell für den Lebenszyklus von Software hat. Es gibt hier Projekte und Unterprojekte (die brav mit den IDE-Projekten der Entwickler abgeglichen, aber nicht verwechselt werden wollen), Versionen, Folder, Tasks und Releases. Ein buntes Sammelsorium an Abhängigkeiten erleichtern die Arbeit, sofern man sich an die Vorstellungen eines Lebenszyklus von Synergy hält. Gewarnt seien alle, die sich damit nicht im Vorfeld beschäftigen wollen: Es kann sehr eklig werden, wenn man an diesen Vorstellungen vorbei operieren will oder muß.&lt;br /&gt;&lt;br /&gt;Bis zu diesem Punkt ist Synergy ein gewöhnliches SCM mit einem eigenwilligen, man könnte sagen ungewöhnlich unintuitiven Interface. An dieser Stelle empfehle ich allen, die es benutzen wollen, sich mit der abweichenden Semantik von "Update" vertraut zu machen, bevor sie die Arbeit von Tagen verlieren.&lt;br /&gt;&lt;br /&gt;Warum also sollte jemand Synergy einsetzen wollen?&lt;br /&gt;&lt;br /&gt;Die Antwort liegt im (neuen) Namen "Synergy": Das SCM ist eng mit dem zusätzlichen Produkt "Change" (und anderen Produkten aus dem Haus Telelogic) verwoben. Change requests in diesem Tool sind bis ins SCM transparent, Tasks werden direkt CRs zugeordnet, und jede noch so kleine Quelltextänderung direkt an einen Task. Damit haben die Entscheider theoretisch jederzeit Überblick über den Stand der Arbeiten, ohne den Entwickler fragen zu müssen.&lt;br /&gt;&lt;br /&gt;Generell spielt Synergy seine Stärken erst richtig aus, wenn die Software "fertig" ist: CRs können z.B. vom Test entdeckte Fehler sein, aber auch Anforderungen des Kunden. Im Gegensatz zu anderen Systemen lassen sich die dadurch nötigen Aufwände einfacher erfassen, und die Arbeiten bis hinunter zu den einzelnen Entwicklern zuweisen. Die Gefahr, daß hier noch etwas bei der Transition zwischen verschiedenen Systemen verloren geht, ist hier durch die Integration des SCM mit dem Change Management Tool deutlich geringer.&lt;br /&gt;&lt;br /&gt;Ein wirklich sehr schönes Feature ist das Zusammenstellen eines Releases auf der Basis von Tasks: Man entscheidet, welche Tasks mitgenommen werden sollen, und kann so einfach problematische Änderungen ausschließen.&lt;br /&gt;&lt;br /&gt;Warum würde ich es trotzdem lieber meiden?&lt;br /&gt;&lt;br /&gt;Die Illusion totaler Kontrolle ist möglicherweise irreführend. Wie ein Kollege vor kurzem zitierte: Die Wahrheit liegt im Sourcecode. Und die zu extrahieren bedarf es mehr als einer Aufstellung von geänderten Dateien.&lt;br /&gt;&lt;br /&gt;Zudem ist das unintuitive Interface (beide Interfaces sind unintuitiv: sowohl das "klassische" Interface, als auch der "Developer Client"; zudem weichen Bezeichnungen für Arbeitsschritte voneinander ab, und einige Arbeiten lassen sich im Developer Client nicht durchführen) Ursache für Frustration und verlorene Arbeit. Eine Einweisung in Synergy ist also unbedingt nötig, besonders wenn Entwickler vorher mit anderen SCMs gearbeitet haben.&lt;br /&gt;&lt;br /&gt;Und letztlich kann auch Synergy keine Wunder vollbringen: Abhängigkeiten zwischen Quelltextänderungen in verschiedenen Tasks schlagen sich nicht automatisch in Abhängigkeiten zwischen das Tasks nieder. Damit kann das Zusammenstellen von Tasks für eine Build- oder Lieferversion keine integere Lieferung garantieren, was dieses ansonsten schöne Feature wieder etwas in Frage stellt.&lt;br /&gt;&lt;br /&gt;Im Vergleich zwischen ClearCase und Synergy würde ich mich ob der klareren und intuitiveren Versionsverwaltung für ClearCase entscheiden. Die Lizenzkosten für beide Systeme sind mir nicht bekannt; möglicherweise entscheidet in der Praxis dieses Argument. Sobald es aber um Support per Internet-Forum und Bekanntheit bei den Entwicklern geht, verlieren sowohl ClearCase als auch Synergy klar gegen Subversion; kleine Projekte mit einem kurzen Entwicklungszyklus sollten sich eher in diese Richtung orientieren, zumal sowohl bei ClearCase als auch bei Synergy dedizierte Administratoren für die Pflege des SCM notwendig (und dann auch beschäftigt) sind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-8782674238754893597?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/8782674238754893597/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=8782674238754893597' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8782674238754893597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8782674238754893597'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/07/ein-wenig-ber-synergy.html' title='Ein wenig über Synergy'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-4903009877078820645</id><published>2008-07-17T15:02:00.000+02:00</published><updated>2008-07-17T15:09:38.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><title type='text'>Nachtrag Push-Funktionalität bei mobileMe</title><content type='html'>Nachdem ich mich gestern so über Apples mobileMe geärgert habe, will ich doch noch kurz nachschieben, daß Apple heute morgen per Rund-eMail Stellung genommen hat. (Nein, natürlich nicht wegen meinem Blog, sondern vermutlich weil das Problem größere Kreise zieht.) Offiziell wird jetzt darauf hingewiesen, daß die Push-Funktionalität momentan eingeschränkt ist.&lt;br /&gt;&lt;br /&gt;Also, alles wird gut.&lt;br /&gt;&lt;br /&gt;Übrigens sollte ich dazu sagen, daß mein nächster Rechner trotzdem ein Mac wird.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-4903009877078820645?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/4903009877078820645/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=4903009877078820645' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4903009877078820645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/4903009877078820645'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/07/nachtrag-push-funktionalitt-bei.html' title='Nachtrag Push-Funktionalität bei mobileMe'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-8186558367295380491</id><published>2008-07-16T11:21:00.000+02:00</published><updated>2008-07-17T15:09:38.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><title type='text'>Kein Push mehr</title><content type='html'>Ich hab's ja immer gesagt: Man kann Apple einfach nicht trauen. Jüngstes Beispiel: Das rätselhafte Verschwinden der Push-Funktion aus dem niegelnagelneuen mobileMe (siehe auch die &lt;a href="http://www.golem.de/0807/61093.html"&gt;Golem-Meldung dazu&lt;/a&gt;). Aber ist das wirklich so schlimm? Vermutlich rüsten sie die Funktion ja noch nach (in den ersten Tagen zumindest hatte ich ohnehin Probleme mit dem verbauten JavaScript, welches sich mal eben einen meiner zwei Porzessoren gönnte).&lt;br /&gt;&lt;br /&gt;Ja, ich denke, es ist symptomatisch. Apple (oder Herr Jobs, wer weiß das schon) ist ausgesprochen geschickt, wenn es darum geht, den Leuten zu verkaufen, was sie wollen. Du willst einen total einfachen und zugleich schicken Rechner? Klar, kein Problem, aber ein paar Prozent mehr als die in China montierten Dinger kostet der dann schon. Ist ja schließlich "Designed by Apple in California". Du willst auf Dein Adreßbuch auch in der Firma zugreifen? Kein Problem, schlappe achtig Dollar oder Euro (wo ist der Unterschied?), und los kann's gehen.&lt;br /&gt;&lt;br /&gt;Dabei ist die Sache mit dem iPhone, was in seiner dritten (!) Generation endlich auch mal UMTS benutzen kann, dafür aber schon immer primär von Anwendungen im Netz gelebt hat (!!), noch überhaupt nicht mitgerechnet.&lt;br /&gt;&lt;br /&gt;Und dann wäre da noch mein alter Groll ob des eingestampften Newton. Den ich so geliebt habe, und den Apple einfach aus Prinzip gekillt hat. Na ja, alte Wunden. Mein Newton funktioniert immer noch: Habe ihn vor einem halben Jahr nochmal ausgegraben, neue Batterien rein, und er lief sofort. Mehr als ich von meinem ersten Palm sagen kann.&lt;br /&gt;&lt;br /&gt;Das Lustige an der Sache ist, daß man selten jemanden trifft, der ein Apple-Produkt gekauft hat und davon nicht überzeugt ist. Mal ehrlich, mein MacBook ist einfach mal cooler als jeder Laptop-PC. Ich liebe meinen Mac!&lt;br /&gt;&lt;br /&gt;Nur Apple traue ich nicht über'n Weg. Wenn das ein Ansporn sein kann: Seid doch einfach mal eine Nummer ... solider.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-8186558367295380491?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/8186558367295380491/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=8186558367295380491' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8186558367295380491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/8186558367295380491'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/07/kein-push-mehr.html' title='Kein Push mehr'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-130898668202507346</id><published>2008-07-14T08:13:00.000+02:00</published><updated>2008-07-14T08:20:49.461+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Warum kann Maven Dateien filtern?</title><content type='html'>Weil es mir gerade auffällt? Kennt irgendjemand einen legitimen Grund, warum &lt;a href="http://maven.apache.org/"&gt;Maven &lt;/a&gt;Resourcen für seine zu erstellenden Artefakte &lt;a href="http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html"&gt;filtern&lt;/a&gt; kann? Ich betrachte mal zielspezifische Builds nicht als legitimen Grund...&lt;br /&gt;&lt;br /&gt;Was dabei nämlich rauskommt, sind Artefakte, die für eine Zielumgebung konfiguriert sind. Und das ist ja ganz klar ein großes NoNo. Na, ganz so klar ist das wohl nicht jedem, sonst wäre es nicht getan worden, daher ein Hinweis: Der gleiche Build sollte auf den Umgebungen von Entwicklern, Testern und auf der Produktionsumgebung laufen...&lt;br /&gt;&lt;br /&gt;Nur so als Gedanke.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-130898668202507346?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/130898668202507346/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=130898668202507346' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/130898668202507346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/130898668202507346'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/07/warum-kann-maven-dateien-filtern.html' title='Warum kann Maven Dateien filtern?'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8750190968728518640.post-5368708598281164311</id><published>2008-07-03T13:36:00.000+02:00</published><updated>2008-07-03T13:45:23.021+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Krimskrams'/><title type='text'>Anfangen.</title><content type='html'>Eigentlich brauche ich ja kein Blog, weil ich erstens sowieso nicht regelmäßig reinschreibe, und ich zweitens nicht so viele spannende Dinge zu schreiben habe. Aber zum Glück gibt es ja unendlich viele Blogs, von denen wieder unendlich viele praktisch nur von ihren Authoren gelesen werden (wenn überhaupt), und und außerdem gibt es noch ganz, ganz viele Blogs, in denen nicht viel steht. Sagt man.&lt;br /&gt;&lt;br /&gt;Also kann ich diesen Blog hier genausogut nehmen, um alles, was mir so in die Hände fällt, reinzuwerfen. Was ich hiermit tue.&lt;br /&gt;&lt;br /&gt;Soviel zum Anfang.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8750190968728518640-5368708598281164311?l=ketchuplog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ketchuplog.blogspot.com/feeds/5368708598281164311/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8750190968728518640&amp;postID=5368708598281164311' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5368708598281164311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8750190968728518640/posts/default/5368708598281164311'/><link rel='alternate' type='text/html' href='http://ketchuplog.blogspot.com/2008/07/anfangen.html' title='Anfangen.'/><author><name>ketchup</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
