Klose IT - Wolfenbüttel

Dies ist das Blog von Klose IT aus Wolfenbüttel. Ulf Klose bloggt hier über Interessantes (?) aus dem Bereich Technik.

Zur Homepage von Klose IT geht's hier.

Zum privaten Blog von Ulf Klose geht's hier.

DoS-Attacke auf die Posterous-Server

Sowohl dieses als auch mein privates Blog liegen beim Blog-Anbieter Posterous. Posterous ist toll, weil es sehr unkompliziert ist, Beiträge samt Medien zu posten.

Wie auch immer, in der vergangenen Nacht kam es gegen 22:30 Uhr deutscher Ortszeit zu einem massiven DoS-Angriff auf Posterous. Heute morgen um 6 Uhr erhielt ich eine E-Mail vom Posterous-Team, in der der Vorfall erläutert wurde. Die Datenflut ist bis dahin noch immer nicht abgerissen, deswegen haben die Jungs einen neuen Server mit einer neuen IP-Adresse zur Verfügung gestellt. Vor ca. 30 Minuten habe ich die DNS-Einträge entsprechend auf die IP-Adresse 209.20.70.130 abgeändert, was allen Leuten, die eine Custom-Domain mit ihrem Posterous-Blog verwenden nun bevorsteht.

Also, entschuldigt bitte die Auszeit, so was passiert leider.

EtherPad unter Ubuntu 10.04 meint beim Starten Java nicht zu finden

Ich musste eben zwecks Rekonfiguration eine der virtuellen Maschinen auf meinem Server neu starten und wunderte mich, wieso meine installierte EtherPad-Instanz nicht mehr starten wollte. Ein manueller Startversuch über das Init-Script erzeugte diese Fehlermeldung:



start-stop-daemon: stat java: No such file or directory (No such file or directory)


   ...fail!


Java kann also nicht gefunden werden. Nur wieso? Die Eingabe von



java -version


brachte eine korrekte Ausgabe hervor. Aus irgendeinem Grunde wollte nach dem Neustart der Symlink aus /usr/bin zu /etc/alternatives nicht mehr. Vorhanden war er, aber EtherPad wollte ihn beim Start scheinbar nicht auflösen.

Also habe ich das Init-Script von EtherPad unter



/etc/init.d/etherpad


angepasst und den Pfad /etc/alternatives zur PATH-Variable hinzugefügt. Die Zeile lautet bei mir also nun



PATH=/usr/sbin:/usr/bin:/sbin:/bin:/etc/alternatives


Schon startet und funktioniert EtherPad wieder. Die von mir gehostete Instanz findet ihr übrigens unter www.openpad.de. Der Pro-Modus funktioniert leider noch nicht, der Rest sollte funktionieren.

 

GitHub - ein Social Network für Code

Wer kennt Git nicht? Hand hoch. Niemand? Gut…

Git ist ein verteiltes Versionierungssystem. Viele von euch kennen vielleicht Subversion, kurz SVN, was scheinbar noch immer als eine Art Synonym für derartige Systeme im Netz zu gelten scheint. Dabei bietet Git so viele Vorteile gegenüber bspw. Subversion. Git ist nämlich, im Gegensatz zu SVN, ein verteiltes System. Man benötigt also nicht zwingend einen Server und kann auch seinen eigenen Code auf seiner eigenen Festplatte versionieren. Also selbst wenn ihr Software im Alleingang entwickelt, braucht ihr nicht auf die zahlreichen Vorteile eines Versionierungssystems zu verzichten. Ach ja, Git ist übrigens eine Erfindung von Linus Torvalds, dem Begründer der Linux-Bewegung. Die Geschichte von Git kann man im Wikipedia-Artikel zum Thema nachlesen.

Warum man Versionierung nutzen sollte? Der Grund ist recht simpel: ihr schreibt Code, oder Text, egal, welcher Art. Nach einigen Stunden stellt ihr fest, dass die letzten Änderungen vollkommener Blödsinn gewesen sind. Die Rücknahme der Änderungen wird aber vermutlich ein Weilchen dauern. Vielleicht sogar länger als es gedauert hat, diese Änderungen zu implementieren. Und wer hat schon Lust, nach jeder Änderung per Hand eine Sicherheitskopie der alten Datei anzulegen? Hättet ihr ein System zur Versionierung verwendet, würde die Rücknahme der Änderungen hingegen nur wenige Sekunden dauern. Die Eingabe des Befehls



git log


gibt eure letzten Commits aus. Jeder dieser Commits hat einen SHA1-Hash als Identifikator, von dem man nur die ersten wenigen Stellen braucht. Beispielhaft:



git checkout 67g4


würde die Revision eurer Daten wiederherstellen, deren SHA1-Hash mit 67g4 beginnt, ohne dabei neuere Versionen anzufassen. Git hält also immer mehrere, nämlich alle, eurer erstellten Revisionen vor. Dieser Artikel soll aber keine Git-Bedienungsanleitung werden, von denen gibt’s genug im Web, zum Beispiel hier. Nein, ich möchte vielmehr den wirklich genialen Git-Hostingservice GitHub vorstellen.

Das Unternehmen hinter GitHub wurde im Februar 2008 gegründet und seitdem erfreut sich dieser Service einer immer größer werdenden Beliebtheit. Insbesondere die Tatsache, dass GitHub für Open-Source-Projekte kostenfreie Accounts anbietet, hat dem Unternehmen einen großen Popularitätsschub verschafft. Viele äußerst populäre Open-Source-Projekte wie Perl, Ruby on Rails, PHP, jQuery und JUnit sind mittlerweile zu Git und auch zu GitHub gewechselt.

Und das aus gutem Grunde. GitHub bietet eine Funktionsvielfalt, die ihresgleichen sucht. Viele Features erschließen sich dem Benutzer erst nach einer Weile, aber dann möchte man sie nicht mehr missen. So lassen sich bspw. grafisch die Aktivitäten der einzelnen Entwickler darstellen, die am jeweiligen Projekt teilnehmen. Sehr iPad- und iPhone-freundlich ist der Großteil dieser Graphen mittlerweile nicht mehr als Flash-, sondern als Canvas-Element verfügbar. Ebenfalls hervorzuheben ist die Vielfalt der verfügbaren Commit-Hooks. Dabei handelt es sich um kleine Programme, die eine bestimmte Aktion bspw. nach einem erfolgten Commit durchführen können. Ich habe diese Hooks auf meinem eigenen Server hauptsächlich dazu benutzt, alle beteiligten Entwickler über neue Commits zu informieren. GitHub bietet über die E-Mail-Benachrichtigung hinaus noch viele weitere nützliche Hooks an, wie bspw. einen Service-Hook, der den Commit an einen Basecamp-, Campfire- oder Lighthouse-Account übermittelt. GitHub befindet sich kontinuierlich im Ausbau und man kann regelrecht zusehen, wie die Entwickler die Plattform weiter ausbauen. Das Blog von GitHub ist in diesem Zusammenhang ebenfalls sehr lesenswert. Die Transparenz dieses Unternehmens gegenüber ihren Kunden finde ich beispielhaft.

Seit rund zwei Wochen ist GitHub auch in deutscher Sprache verfügbar. Der Großteil der übersetzten Texte stammt im Übrigen aus meiner Feder, da ich mich gemeldet habe, als GitHub per Twitter einen Aufruf startete, und nach Freiwilligen für die Übersetzung gesucht hat. Wer mich kennt, weiß, dass ich dafür ein Faible hab. Die Arbeit hat Spaß gemacht, auch wenn einige der Co-Übersetzer wenig Ahnung von der deutschen Ortographie haben. Das sorgte dafür, dass ich quasi alle Texte noch mal überarbeiten musste. Aber Ende gut, alles gut, die Übersetzung ist online. Noch ist nicht die komplette Website übersetzt, aber wie ich vom Koordinator Scott Chacon, der im Übrigen eine Koryphäe im Git-Bereich ist, erfahren habe, folgt die restliche Website im Verlaufe der Zeit. Ich gehe eigentlich davon aus, dass Softwareentwickler im Allgemeinen über überdurchschnittlich gute Englisch-Kenntnisse verfügen, für diejenigen aber, denen es nicht so geht, ist nun auch diese Hürde genommen.

Zu Beginn des Artikels predigte ich noch die Vorteile, die eine dezentrale Lösung hat und nun werbe ich für einen Service, der doch wieder alles zentralisiert? Fehlanzeige. Git ist und bleibt dezentral. Lokale Commits müsst ihr erst dann zum Server schicken (der sog. Push), wenn ihr euren Code anderen Entwicklern zur Verfügung stellen wollt. Sämtliche Commits liegen also sowohl bei allen beteiligten Entwicklern, als auch auf dem Server, was eine Situation schafft, die an Ausfallsicherheit nicht mehr zu überbieten ist.

Auch wenn die Funktion an sich ein alter Hut ist, GitHub bietet ein Pastebin an. Aber nicht irgendein Pastebin, sondern eines, das auch versioniert, also mit Git im Hintergrund läuft. Diese Funktion nennt sich Gist und funktioniert so, wie man es von anderen Pastebins gewohnt ist, nur eben mit Versionierung. Eine tolle Idee, ich nutze die Gists recht häufig um beispielsweise häufig genutzten Code immer griffbereit zu haben.

Mein Rat: schaut euch sowohl Git, als auch GitHub gut an, wenn ihr programmiert, Webseiten baut, Dokumentationen schreibt oder anderweitig mit komplexen Datenbeständen zu tun habt. Wie ich vor einer Weile schon beschrieben habe, könnt ihr auch einen eigenen Git-Server mit jedem handelsüblichen Linux aufsetzen, der Wartungsaufwand liegt dann aber auf eurer Seite. Programmiert ihr gerade an einem Open-Source-Projekt kostet euch die Nutzung von GitHub keinen Cent, wollt ihr euren kommerziell ausgerichteten Code ablegen, bekommt ihr einen geschützten Zugang ab 7 US-$ (ca. 5,50 €) monatlich. Die Tarif-Übersicht von GitHub bietet mehr Informationen zu den Preisen. Typisch für die USA sind die Preise etwas höher, als man es von Deutschland gewohnt ist, der Service ist sein Geld aber allemal Wert.

Ich liebe GitHub und möchte auf diesen tollen Service nicht mehr verzichten. Give it a try, wie der Engländer jetzt sagen würde, und ihr werdet verstehen, wieso ich so begeistert bin.

Port-Weiterleitung mittels SSH

Ich hatte soeben das Problem, dass ich gern auf einen Dienst zugegriffen hätte, der auf einer entfernten Maschine auf Port 443 läuft. Außerhalb des eigenen Netzes, also für IP-Adressen, die nicht im gleichen Netzssegment liegen, wurde der Zugriff auf Port 443 aber gesperrt. Über eine SSH-Verbindung am Terminal mit Lynx zu arbeiten fiel auch aus, da der Webservice massiven Einsatz von JavaScript macht und ohne dieses quasi nicht benutzbar ist.

Also musste eine Möglichkeit her, trotz der Einschränkung auf diesen Service zuzugreifen. Eine lokale Portweiterleitung mittels SSH erbrachte den gewünschten Effekt. Hierfür wird eine Art Datenumleitung eingerichtet, mit deren Hilfe man die Anfrage- und Antwortpakete an den jeweils zuständigen Port umleitet.

Der Befehl ssh sollte bekannt sein. Die Option -L bindet einen lokalen Port an einen Remote-Port, wie auch im Beispiel zu sehen ist. Über user@Remote-Maschine meldet man sich dann mit gültigen Zugangsdaten an der Maschine an, auf der der Service läuft.

Konkret habe ich in meinem Falle den lokalen Port durch 14500 ersetzt, den Remote-Port durch 443. SSH baut die Verbindung und damit auch den Tunnel auf, et voilà, schon kann man über den Browser mittels



http(s)://localhost:14500


auf den Webservice zugreifen. Die Einschränkung im Zielnetz, dass Port 443 nach außen nicht erreichbar sein darf ist somit umgangen.

Kostenlose GTD-App hosted by Klose IT

Ihr sucht nach einer guten, überall verfügbaren GTD (Getting Things Done)-Applikation? Hört auf zu suchen. Ich habe soeben auf meinem Server die sehr gute Web-Applikation Tracks installiert und für die Allgemeinheit freigegeben. Der Login erfolgt über OpenID, es geht also kaum unkomplizierter. Jeder, der beispielsweise einen Google- oder Yahoo-Account besitzt, hat auch eine OpenID. Derzeit ist die Applikation nur in englischer Sprache verfügbar, aber das Entwickler-Team arbeitet an einer lokalisierten Fassung. Ich werde die deutsche Fassung zur Verfügung stellen, sobald sie fertig ist.

Gehosted wird die Applikation mit Ubuntu 10.04 x64, als Application-Server für diese Rails-Anwendung verwende ich Unicorn.

Und nun, viel Erfolg und Spaß beim Selbst-Management. Zur Startseite geht es hier entlang. Die Mobil-Version (bspw. für iPhone und iPod touch) gibt es hier.

Die Krux mit den alten Browsern

Wenn man eine neue Website erstellen möchte, wie ich es in den letzten Tagen mal wieder getan habe, steht man immer wieder vor der Entscheidung, ob man auch ältere Browserversionen vollständig unterstützen möchte. Dass der Internet Explorer 6 nicht mehr zu dieser Riege gehört, darüber dürften sich nahezu alle Webdesigner einig sein, aber was ist mit den Versionen 7 und 8 des Browsers aus Redmond? Und wie steht es um die älteren Versionen von Firefox, Opera, Chrome und Safari?

Meinem Kenntnisstand nach ist bei vielen optischen Schmankerln, wie bspw. dem text-shadow, nur der Internet Explorer wirklich kritisch. Alle anderen Browser, allen voran die Webkit-Browser Safari und Chrome, haben damit schon seit Ewigkeiten keine Schwierigkeiten mehr. Ich weiß, der CSS3-Standard ist noch gar keiner, da er offiziell noch nicht verabschiedet wurde. Blöd insbesondere deswegen, weil man für viele der CSS3-Attribute browserspezifische Präfixe vergeben muss, was die erfolgreiche Validierung eines CSS3-Stylesheets verhindert. Wenn ich mich recht entsinne, war bspw. der text-shadow mittlerweile auch ohne Präfix unter den Webkit-Browsern und Opera nutzbar, Firefox 3.6 besteht weiterhin auf das Präfix. Mit der Beta des Firefox 4 habe ich es noch nicht getestet. Aber gut, wenn mal der eine oder andere Effekt nicht angezeigt wird, bricht einem das nicht gleich die Beine, auch schlechte und alte Browser stellen die Seite wenigstens dar.

Anders sieht es mit der Verwendung von HTML5 aus. Meine Seite weist als DOCTYPE HTML5 auf. Verwenden tue ich aber keinen der neuen HTML5-spezifischen Trenner wie <article>, <section>, <header> oder <footer>, da, wenn der Browser gar kein HTML5 versteht, die Seite schlicht und ergreifend gar nicht oder vollständig falsch angezeigt wird. Ich weiß, es gibt JavaScript-basierende Hacks, die das Problem beheben, aber was ist, wenn der Benutzer auch noch zusätzlich JavaScript deaktiviert hat :-D? Wirklich schade, dass ich kein HTML5 verwenden "durfte", ich hätte es zu gern getan. Von den JavaScript-basierenden Hacks halte ich aber nicht viel. Die restlichen Scripts, die in meiner neuen Seite eingebunden sind, sind von eher unkritischer Natur. Das jQuery-Plugin ScrollTo erzeugt einen weicheren Scrollvorgang als das normale, Anchor-basierende Scrollen und Fancybox zeigt die Bilder schick im Großformat an. Aber wenn diese beiden Scripte ausgeschaltet sind, ist es auch egal.

Positiv überrascht war ich, dass das Einbetten von Fonts mittlerweile (fast) tadellos funktioniert. Einzig und allein die Mobilgeräte zeigen die eingebetteten Fonts nicht an, so wenigstens gesehen auf meinem iPhone und einem iPad. Der Internet Explorer kann das, oh Wunder, schon seit Ewigkeiten, nämlich seit der Version 4, wenn auch mit einem speziellen Font-Format, EOT (Embedded Open Type). Alle anderen Browser mampfen brav meine TTF- und OTF-Dateien. Bisher steht aber noch ein Test mit Alt-Browsern aus, getestet habe ich wirklich bisher nur mit aktuellen Browsern auf meinem Mac. Wobei mir gerade auffällt, dass ich die EOT-Versionen meiner beiden Fonts noch gar nicht erstellt und eingebunden habe. Sollte ich wohl mal flott nachholen.

Da wir gerade beim Thema sind, hier ein kleines Beispiel für einen gültigen Eintrag einer @font-face-Deklaration in einer CSS-Datei:

Die in diesem Beispiel verwendete Schrift, die ich dann doch nicht auf meiner Seite verwendet habe, habe ich im Übrigen bei The League of Movable Type gefunden. Eine weitere sehr schöne Quelle für offene Fonts ist Font Squirrel, die auch die Schriften von The League of Movable Type anzeigen. Um die Schriften von TTF in EOT zu bekommen, habe ich den ttf2eot-Konverter verwendet. Die Konvertierung meiner OTF-Schrift ins EOT-Format hat der Online Font Converter für mich übernommen. Entsprechend der zuvor gezeigten Notation kann die Schrift nun ganz regulär über eine font-family-Anweisung verwendet werden.

Wie haltet ihr es mit der Verwendung von CSS3, HTML5 und sonstigem neumodischem Schnickschnack? Verwenden oder abwarten?

Sie ist online

Die letzten zwei Tage habe ich nun damit verbracht, das längst überfällige Redesign meiner geschäftlichen Homepage zu gestalten. Unter www.klose-it.de dürft ihr das Design-Meisterwerk (*räusper*) begutachten. Für Kritik und Verbesserungsvorschläge bin ich natürlich zu haben. Im gleichen Atemzuge habe ich auch meinen Firmennamen, da er offiziell ohnehin nirgendwo eingetragen ist, von Klose IT-Service auf Klose IT verkürzt. Passt nun besser zum Domainnamen und liess sich irgendwie auch besser in ein neues Logo verbasteln.