Archiv

Archive for Oktober 2011

IPv6 bei Ubuntu abschalten

31. Oktober 2011 4 Kommentare

Nach dem Upgrade auf Ubuntu 11.10 hatte ich plötzlich massive Probleme beim Aufrufen von Webseiten. Die Webseiten wurden schlussendlich angezeigt, aber bis es so weit war dauerte es lange, sehr lange. Erstaunlicherweise gab es im Firefox diese Probleme nicht, wodurch ich dem zuerst keine Beachtung schenkte.

Als ich versuchte mit Ruby einen Linkprüfer zu schreiben wurde dieses Verhalten aber zu einem echten Problem. Um 10 Links zu prüfen brauchte das Script rund 2.5 Minuten. Das war deutlich zu lange um innerhalb einer nützlichen Zeit ein Ergebnis zu bekommen. Es musste also dringend eine Lösung her.

 

IPv6 als Ursache

Mit Google kam ich recht schnell auf die Ursache. Anscheinend gibt es auf meiner Seite der Internet-Verbindung irgendwo Probleme mit IPv6. Mit diesem Wissen hoffte ich auf eine schnelle Lösung – in dem Fall hätte ich aber hier nichts zu schreiben gehabt…

 

Versuch 1: /etc/modprobe.d/aliases erweitern

Im Ubuntu-Forum fand ich einen Tipp die auf mein Problem passte. Man solle die Datei /etc/modprobe.d/aliases öffnen und diese 3 Zeilen einfügen:

alias net-pf-10 ipv6 off
alias net-pf-10 off
alias ipv6 off
#alias net-pf-10 ipv6

Falls es einen Eintrag wie in der 4. Zeile gibt muss diese noch auskommentiert werden (mit einem # am Zeilenanfang). Nachdem man den PC neu gestartet hat soll das Problem behoben sein. Bei mir zeigte diese Änderung leider keinen Effekt. Seit dem dieser Tipp verfasst wurde hatte sich anscheinend zu viel geändert.

 

Versuch 2: /etc/sysctl.conf anpassen

Da der erste Ansatz nicht das gewünschte Ergebnis brachte, suchte ich nach einer weiteren Lösung. Auf WEB UPD8 hatte es einen Eintrag zur einer älteren Version von Ubuntu. In der Datei /etc/sysctl.conf sollte man die folgenden Zeilen einfügen:

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Nach dem Neustart blieb auch diesmal der Erfolg aus.

 

Versuch 3: GRUB modifizieren

Nachdem die ersten beiden Versuche keine Besserung brachten testete ich den Vorschlag mit GRUB. In der Datei /etc/default/grub muss man die Zeile mit GRUB_CMDLINE_LINUX suchen und so erweitern:

	GRUB_CMDLINE_LINUX="ipv6.disable=1"

Nach dem speichern unbedingt daran denken dass man GRUB noch aktualisieren muss:

sudo update-grub

Als ich den PC neu gestartet hatte lief auch der Linkprüfer mit einer brauchbaren Geschwindigkeit: 10 Sekunden waren deutlich besser als die 2.5 Minuten.

 

Fazit

Bis man eine funktionierende Lösung hat kann es mehrere Anläufe brauchen. Gerade wenn man eine sehr neue Version von Ubuntu einsetzt sollte man auch die Tipps prüfen die für ältere Versionen gedacht sind.
Es ist dabei äusserst hilfreich wenn man einen automatischen Test laufen lassen kann der einem verlässlich mitteilt, ob sich die Situation verbessert hat. So braucht man nicht selber lange zu suchen und muss nur ein Script ausführen.

Auch wenn bei mir nur die dritte Variante funktionierte, sollte man auch die anderen testen. Vielleicht gehen Tipps 1 und 2 wo der 3. nicht funktioniert.

Schlagworte:

Buch-Rezension zu “Programming Ruby 1.9 (3th edition)”

28. Oktober 2011 Kommentare aus

Programming Ruby 1.9” von Dave Thomas, Chad Fowler und Andy Hunt erschien im April 2009 bei The Pragmatic Programmers. Die 3. Ausgabe des als PickAxe bekannten Buches (wegen der Spitzhacke auf dem Umschlag) ist die Referenz für Ruby 1.9.

Als Grundlage für die Review nutze ich die fürs 10jährige Jubiläum der 1. Ausgabe aktualisierte Version zu Ruby 1.9.2.

 

 
 

 

Eine Einführung mit vielen Details

Das Buch beginnt mit der Installation von Ruby und führt einem danach Schritt für Schritt durch die Grundlagen dieser Programmiersprache. Die Verwendung von Variablen, Schlaufen und Objekten werden sehr detailliert erklärt.

Das Buch ist definitiv nicht als Schnelleinstieg in Ruby konzipiert. Es sollen viel mehr all die Details vermittelt werden die Ruby zu dem machen was es ist. So geht ein kleines say_goodnight Beispiel dann halt einmal über 3 Seiten. Dafür weiss man danach wieso es kein Return braucht, wie man Lokale-, Klassen-, Instanz- und Globale Variablen auseinander hält und auch gleich noch Texte in Strings ersetzen kann.

Wenn man derart viele Informationen in ein Beispiel packt ist das nicht wirklich etwas für Einsteiger. Ich habe zuerst die Ruby Einführung von “Sieben Wochen, sieben Sprachen” gelesen. Mit dem dort vermittelten Wissen konnte ich dem in diesem Buch recht gut folgen. Hätte ich aber direkt mit “Programming Ruby” begonnen hätte ich wohl schnell einmal aufgegeben.

Das Buch kann man gut mit den Serien Programming XY und Learning XY von O’Reilly vergleichen. Learning XY ist für den Einstieg in die Sprache gedacht, Programming XY um sich mit den Details vertraut zu machen. Und genau das trifft auch hier für “Programming Ruby” zu.

 

API-Referenz: Noch Zeitgemäss?

Gut die Hälfte des Buches ist eine Auflistung der API von Ruby. In einer Zeit als man den Internetzugang noch im Minutentakt abrechnete lieferte diese Referenz einen deutlichen Mehrwert. Heute aber fragt man sich: Wozu?

Webseiten wie Ruby-Doc.org liefern einem nicht nur die Referenz sondern gleich noch Beispiele und Code-Schnipsel die man kopieren kann. In Kombination mit Smartphones die ständig online sind ist eine auf Papier gedruckte API-Referenz wie ein Dinosaurier.

Hinzu kommt das die über 400 Seiten alleine für die API-Referenz auch ihr Gewicht haben. Mal eben das Buch mitnehmen ist so etwas was man sich zwei Mal überlegt.

 

Fazit

„Programming Ruby” wird sehr oft referenziert und als Quelle aufgeführt. Zur Vertiefung von Konzepten und den kleinen Details ist dieses Buch sehr gut geeignet. Was in etlichen anderen Büchern nur kurz angeschnitten wurde wird hier ausführlich und verständlich behandelt.

Das Buch ist meiner Meinung nach aber nicht für Einsteiger geeignet. Dies da man sich mit zu vielen Details beschäftigen muss bevor man mitbekommt was man mit Ruby alles machen kann.

 

Zum Buch

Programming Ruby 1.9 (3th edition)” von Dave Thomas, Chad Fowler und Andy Hunt, 2009 The Pragmatic Programmers, ISBN: 978-1-93435-608-1, 944 Seiten, Englisch

Schlagworte: ,

TechDays 2011 in Bern

25. Oktober 2011 3 Kommentare

Am 20. und 21. Oktober veranstaltete Microsoft zum zweiten Mal in diesem Jahr die TechDays. Als Veranstaltungsort diente nach längerem wieder einmal der Kursaal in Bern. Auch wenn der Kursaal derzeit umgebaut wird fand ich die Räumlichkeiten doch angenehmer als das Congress Center in Basel.

Ich hatte den Eindruck dass deutlich weniger Leute nach Bern gekommen sind als im Frühling nach Basel. Ob dies am Programm oder am Ort liegt kann ich allerdings nicht abschätzen.

 

Windows 8 – oder doch nicht

Als man sich Ende Juni für die TechDays registrieren konnte war im Programm noch von Windows 8 und all den damit verbundenen Neuerungen die Rede. Ende August gab es einen Programmwechsel weg von Windows 8 hin zu Azure, Mango und HTML 5. Die damit einhergehende Umfrage ob man dennoch kommen wolle fand ich eine gute Sache, hatte sich der Inhalt der Messe doch komplett verändert.

Der ursprünglich geplant Event zu Windows 8 wird nun am 9. Februar 2012 im Kongresshaus Zürich durchgeführt.

 

IT Pro Day / Developer Day

Die TechDays wurden diesmal nach Zielpublikum getrennt. Der erste Tag zeigte Themen die sich vor allem an Administratoren und Manager richten, wie Azure oder der kommende SQL Server „Denali“. Der zweite Tag stand ganz im Zeichen der Entwicklung, wo Visual Studio 11 schon in der Keynote ausführlich behandelt wurde.

 

Team Foundation Server, Mango und OData

Ich war nur am Developer Day und besuchte vor allem die Sessions rund um den Team Foundation Server (TFS). Da ich mich derzeit beruflich mit dem TFS beschäftige kamen mir diese Sessions gerade Recht. Die von Neno Loje vorgestellten neuen Funktionen im TFS 11 decken viel von dem ab was ich an der aktuellen Version vermisse (wie das Kanban-Board oder die dynamischen Statusreports). Schade nur dass man noch so lange auf den TFS 11 warten muss.

Die Neuerungen für Entwickler in Windows Phone 7.5 (Mango) wurden durch Sascha P. Corti vorgestellt. Einmal mehr lieferte er eine super Präsentation ab die das Publikum mitriss. Schön ist auch das die gezeigten Werkzeuge und neuen Möglichkeiten bereits verfügbar sind.

Mark Stafford (OData) und Corrado Iorizzo (Integration TFS mit Ticketing-Systemen über Webservices) gingen in ihren 300er Präsentationen tief in die Details hinein. Ich konnte so in einer Stunde nicht nur erfahren wie man externe Ticketing-Systeme mit TFS integrieren kann, sondern auch gleich noch wie ich dies angehen muss und auf welche Punkte ich zu achten habe. Die beiden Sessions waren wirklich einmal ein Deep Dive der den Namen verdient hat.

Schön wäre es wenn Microsoft für die nächsten Veranstaltungen die Klassifizierung beibehalten könnte. Wenn die Level 100, 200 und 300 jedes Mal wieder etwas anderes bedeutet verwirrt dies nur die Besucher.

 

Präsentationen und Videos

Die Präsentationen sind bereits alle auf der Webseite der TechDays aufgeschaltet. Die Videos sollten in den nächsten Tagen folgen.

 

Fazit

Ich konnte mir ein Programm zusammenstellen das thematisch zu meiner aktuellen Tätigkeit passt. So konnte ich vom Developer Day trotz der wenigen wirklichen Neuigkeiten profitieren.

Dennoch haben mich die zweiten TechDays in diesem Jahr nicht voll überzeugen können. Die Einteilung wie in den letzten Jahren mit den TechDays im Frühling und der Shape im Herbst hat mir besser gefallen. Sich einen Tag lang nur mit Webtechnologien zu beschäftigen ist etwas ganz anderes als in einem Tag das ganze .Net Ökosystem unterbringen zu wollen.

Nächstes Jahr wird wohl wieder alles ein klein wenig anders. Die Shape soll gemäss Computerworld im Frühling stattfinden (terminlich auf die MIX abgestimmt) und die TechDays passend zur PDC am 19./20. November wieder in Basel. Man darf also gespannt sein was Microsoft im 2012 so alles bieten wird.

Schlagworte: , ,

Buch-Rezension zu “Ruby in Practice”

20. Oktober 2011 2 Kommentare

Ruby in Practice” von Jeremy McAnally und Assaf Arkin erschien im Mai 2009 bei Manning. Das selbstdefinierte Ziel des Buches ist es aus dem Leser einen produktiveren (Ruby-) Programmierer zu machen. In wie weit die Autoren dieses Ziel erreichen können hängt wohl primär vom Leser ab. Unbestritten ist aber die grosse Anzahl verschiedenster Tipps und Tricks die die Arbeit mit Ruby deutlich vereinfachen.

 
 

 

Teil 1: Ruby Techniken

Der erste Teil geht auf die grundlegenden Spracheigenschaften von Ruby ein. Diese kleine Repetition soll einem in Erinnerung rufen was Ruby eigentlich ausmacht. Es geht dabei aber nicht um eine Erklärung für Einsteiger. Es ist vielmehr ein Aufzeigen was man für Möglichkeiten bekommt weil Ruby so funktioniert wie es funktioniert.

Auch das Kapitel übers Testen beinhaltet nichts Revolutionäres. Es wird in einem kurzen Rundgang die einzelnen Ansätze gezeigt die einem zur Verfügung stehen. Dazu gehören neben Unit Tests auch Test Driven Development und Behavior Driven Development so wie eine ganze Packung an Werkzeugen (wie RSpec, Mocha oder rcov). Auch hier liegt der Schwerpunkt beim Aufzeigen der Möglichkeiten und nicht bei einem tiefgehenden Einführungskurs.

Im Kapitel „Scripting with Ruby“ beginnt das Buch auf die praktischen Anwendungsfälle detailliert einzugehen. Als erstes Problem gilt es eine aus diesen Teilen bestehende Aufgabe zu lösen:

  1. Verkleinern der hochauflösenden Ferienfotos
  2. Fotos mit einem Polaroid Effekt versehen
  3. Fotos in die Cloud von Amazon hochladen
  4. jede Stunde auf Twitter ein Foto veröffentlichen

Die einzelnen Teile sind einfach genug um sie zu erklären und zusammen komplex genug um viele Tipps und Tricks aufzeigen zu können. Das Auslagern von Benutzernamen und Passwort in eine eigene Konfigurationsdatei ist einer dieser simplen aber äusserst hilfreichen Tricks.

 

Teil 2: Integration und Kommunikation

Im 2. Teil drehen sich die Beispiele um die Integration von Drittsystemen. Sei dies in dem man Ruby on Rails Anwendungen erweitert, Webservices konsumiert oder E-Mails nutzt um Systeme neu zu starten.

Die Beispiele sind immer nach dem gleichen Muster aufgebaut:

  • Beschreibung der Situation und was genau das Problem ist
  • Erarbeiten einer einfachen und pragmatischen Lösung
  • Diskutieren von alternative Lösungen und Ansätzen

Die Diskussion von Alternativen fand ich persönlich sehr gut. Nicht nur zu wissen wie man es auf eine Art machen kann sondern auch zu erfahren was sonst noch möglich ist finde ich äusserst hilfreich.

 

Teil 3: Daten und Dokumente

Der letzte Teil zeigt wie man Daten speichern und Dokumente verarbeiten kann. Als Datenquelle kann dabei von einer Datenbank bis zu XML- oder YAML-Dateien alles dienen. Zahlreiche Beispiele zeigen die verschiedenen Ansätze auf und in der Diskussion werden wiederum die Vor- und Nachteile eingehend betrachtet.

In diesem Teil wird ebenfalls die Identifizierung und Autorisierung von Benutzern behandelt. Dabei wird besonders Wert darauf gelegt das man Passwörter nicht im Klartext speichert. Es braucht nur wenigen Zeilen zusätzlichen Code und Rails speichert nur noch den Passwort-Hash (jeder mit individuellem Salt) ab. Dies ist ein ganz einfacher Tipp mit dem man die Passwörter effektiv schützen kann.

 

Aktualisierung willkommen

Die Programmiersprache Ruby entwickelt sich sehr schnell, gleiches gilt für die Werkzeuge und Bibliotheken rund herum. Einige der Beispiele funktionieren mit der aktuellen Ruby Version nicht mehr und andere sind nur mit grossem Aufwand zum Laufen zu bekommen. Eine Aktualisierung des Buches könnte diese Probleme beheben und auch auf die aktuellen Tools eingehen.

 

Fazit

“Ruby in Practice” ist ein Buch mit sehr vielen praktischen Beispielen. Die behandelten Themen werden so erklärt dass man das dort gewonnene Wissen auch bei anderen Problemstellungen wiederverwenden kann. Gerade die Diskussion der gewählten Lösung und möglicher Alternativen macht aus dem Buch weit mehr als eine Rezeptsammlung. Wenn es auch nicht mehr ganz aktuell ist so gibt das Buch doch sehr viele Ideen um Probleme aus einer anderen Richtung anzugehen.

 

Zum Buch

Ruby in Practice” Jeremy McAnally and Assaf Arkin, 2009 Manning, ISBN 978-1-93398-847-4, 360 Seiten, Englisch

Schlagworte: , ,

Buch-Rezension zu “Continuous Testing”

17. Oktober 2011 5 Kommentare

Continuous Testing – with Ruby, Rails, and JavaScript” von Ben Rady und Rod Coffin erschien im Juni 2011 bei The Pragmatic Programmers. Continuous Testing geht noch einen Schritt weiter als Test Driven Development und versucht die Feedback-Schlaufe von Red-Green-Refactor noch mehr zu verkürzen.

[Hinweis: Ich habe dieses Buch über die .Net User Group Bern erhalten, die am User Group Programm von O’Reilly teilnimmt. Wie immer wenn ich über Bücher blogge schreibe ich was mir daran gefällt und was nicht. Dies mache ich unabhängig davon ob ich ein Rezensionsexemplar bekomme oder das Buch selber kaufe.]

 

Continuous Testing?

Bei Continuous Testing geht es um die unmittelbare und automatische Rückmeldung ob die gerade getroffene Entscheidung die Software in die richtige Richtung bringt. Rady und Coffin nutzen das Speichern einer Datei als Taktgeber. Das Speichern (oder genauer die dadurch veränderte Datei) startet im Hintergrund und ohne weiteres Zutun des Entwicklers die automatisierten Tests. Als Entwickler braucht man nur noch die Konsole anzuschauen und sieht anhand der Farben sofort ob die Tests noch funktionieren.

Kontinuierliches Testen kann man wie von den Autoren gleich zu Beginn des Buches erwähnt recht einfach haben:

Open your favorite editor or IDE. Take whatever key you have bound to Save and rebind it to Save and Run All Tests. Congratulations, you’re now testing continuously.

Wer selber schon automatisierte Tests geschrieben hat weiss dass dies damit nicht wirklich gemacht ist: Tests brauchen eine gewisse Zeit um ein Ergebnis zu liefern, es gibt bald einmal Abhängigkeiten mit Umsystemen und wenn man noch GUI-Tests benötigt wird es erst recht aufwendig.

Dies ist auch den Autoren bekannt. Daher steht diese Textstelle auch am Anfang und nicht am Ende des Buches. Es ist nicht das Ziel von Continuous Testing immer alle Tests laufen zu lassen – das ist die Aufgabe von Continuous Integration nach dem commit. Es gibt viele Tests die in sehr kurzer Zeit einem eine grosse Gewissheit geben, dass alles läuft wie es soll. Die Tests gilt es zu finden und häufig auszuführen.

Um einem in die Lage zu bringen diese Tests zu identifizieren und mit einem passenden Ansatz zu testen ist das Buch in 3 Teile gegliedert.

 

Teil 1: Ruby und Autotest

Der erste Teil geht das Konzept Continuous Testing für Ruby an. Autotest wird dabei verwendet um die Dateien zu überwachen und die Tests auszuführen. Mit einfachen Erweiterungen kann man Autotest dazu bringen auch gleich noch die einzelnen Dateien nach TODOs abzusuchen.

Neben den Werkzeugen wird in diesem Teil auch grundlegendes zum Testen vermittelt (wie FIRE: Fast, Informative, Reliable and Exhaustive). Dies bleibt aber oberflächlich und ist vor allem da um das Wissen aufzufrischen (im Sinne von da war doch mal was).

Hilfreicher fand ich wie diese Theorie dann konkret angewendet werden kann. Als gelungenes Beispiel fand ich das Mocken von Twitter oder das Erkunden der API von MongoDB.

 

Teil 2: Rails, JavaScript und Watchr

Im 2. Teil geht es um komplexere Projekte. Bei Rails sind migrations (anpassen der Datenbank) ein Thema das man eingehend testen will. Aber auch JavaScript sollte bereits zur Entwicklungszeit getestet werden. Die so hinzukommenden Abhängigkeiten (Datenbank, Webbrowser, usw.) müssen mit anderen Werkzeugen getestet werden als die einfachen Ruby-Projekte aus dem 1. Teil.

Um die Dateien zu überwachen wird hierfür Watchr vorgestellt. Dieses Tool kann im Gegensatz zu Autotest nicht nur Tests ausführen, sondern jedes beliebige Kommando (wie Beispielsweise die Prüfung von CSS-Dateien mit Sass).

Da mit zunehmender Komplexität die Tests länger laufen muss auch in diesem Bereich etwas gemacht werden. Spork hilft hier indem die Testumgebung nicht bei jedem Testdurchlauf neu initialisiert werden muss.

Das Testen von JavaScript wird auf mehreren Ebenen angegangen. Einfache Dinge die keinen DOM benötigen werden mit Node.js getestet, für die komplexeren Szenarien kommt jsdom zum Einsatz. Für mich hätte man die JavaScript-Tests gerne eingehender behandeln können. So blieben bei mir doch mehr Fragen offen als ich Antworten erhalten habe. Dafür hätte man das Kapitel über funktionales JavaScript im Appendix (Teil 3 des Buches) gerne weglassen können.

 

Ruby-Kenntnisse nötig

Im Gegensatz zu den Autoren bin ich der Meinung dass man die Grundlagen von Ruby kennen muss um dem Buch folgen zu können. Man muss sicher kein Experte sein. Wenn man aber zu einem neuen Konzept auch noch gleich eine neue Sprache lernen soll wird die Lernkurve sehr steil.

Continuous Testing ist ein sprachunabhängiges Konzept und lässt sich somit auch ausserhalb von Ruby und JavaScript nutzten. Um die Arbeitsumgebung aufzuzeigen werden aber sehr viele Werkzeuge eingeführt die spezifisch für Ruby und Rails sind. Ob sich dies wirklich jemand durchlesen will der sich nicht für Ruby interessiert? Ich würde sagen Nein.
Lässt man diese Teile aber weg bleibt vom Buch nicht mehr viel übrig.

 

Fazit

Continuous Testing ist ein interessantes Konzept. Die automatische Testausführung scheint zwar nur ein kleiner Schritt zu sein. Ein klein wenig Code zu schreiben und gleich sehen zu können ob die Tests damit erfüllt sind hat etwas sehr motivierendes. Es bedingt aber das man seine Software testgetrieben entwickeln will.

Will man so Software in Ruby/Rails entwickeln ist dieses Buch ein guter Einstieg. Macht man schon TDD und will von Ruby nichts wissen schaut man sich besser nach einem anderen Buch um.

 

Zum Buch

Continuous Testing – with Ruby, Rails, and JavaScript” von Ben Rady und Rod Coffin, 2011 The Pragmatic Programmers, ISBN 978-1-93435-670-8, 160 Seiten, Englisch

Schlagworte: , ,
Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 296 Followern an