Archiv der Kategorie: Webentwicklung

Informationen zu Webentwicklung: Software, Design, Standards,…

Racing Capybara, Puma and Chrome for Testing

Wie schreibe ich zuverläsigere Browser Tests – nicht nur in Ruby.

Ich habe beim Frankfurt Ruby Meetup eine Präsentation zu Browser basierten Tests aund deren Unterschied zu einfacheren Unit Tests oder Integrationstests gehalten. Du kannst die Präsentation unter dem folgenden Link einsehen:

https://fa11enangel.github.io/racing-capybara-puma-chrome-for-testing/

Das wichtigste Ziel war es, den großen Unterschied heraus zu arbeiten und das nötige Verständnis aufzuzeigen, wie man Probleme mit Browser Tests erkennt und diese beseitigt bzw. Wege findet, die Probleme überhaupt zu analyisieren, wenn sie auftreten.

Die Präsentation bzw. der Talk ist nicht nur für Ruby Entwickler in Verbindung mit Capybara, etc. interessant. Es ging vor allem um die besonderheiten der Browser Tests, der daraus resultierenden Nebenläuftigkeiten (Datenbank, Webserver, Browser, Testsuite) und das dafür notwendigen Verständnis.

Ich freue mich über Kommentare und Anregungen – gerne auch über Github: https://github.com/fa11enangel/racing-capybara-puma-chrome-for-testing

Beim Aufruf von run-app unter OpenJDK 6 und OpenJDK 7 kommt es zu Problemen mit Grails

Beim Aufruf von run-app für Grails aus der SpringSource Tools Suite (STS) habe ich auf einmal die folgende Fehlermeldung erhalten:

Error executing script RunApp: the number of constructors during runtime and compile time for java.lang.ClassLoader do not match. Expected 2 but got 3

Das Problem tritt nur mit OpenJDK auf. Stellt man den JDK auf die Sun-Version, so verschwindet der Fehler wieder und Grails funktioniert wieder. Die STS war bei der letzten Installation so frei sich die openjdk-Variante als JRE unter „Preferences -> Installed JREs“ zu wählen und nicht die von Sun.

Fehler behoben und weiter geht es!

CMS System Weceem basierend auf dem Grails Framework im Apache Tomcat (Catalina) Servlet Container deployen

Ich habe mir etwas Zeit genommen, um Weceem  auszuprobieren. Weceem ist ein Content Management System (CMS) basierend auf dem Grails Framework. Es kann standalone als Applikation oder als Plugin in einer Applikation betrieben werden. Im folgenden beschreibe ich, wie Weceem standalone in Apache Tomcat benutzen werden kann. Es existiert bereits eine Anleitung auf der Weceem Webseite, aber sie ist sehr spartanisch und deckt einige Details nicht ab. Vor allem fehlt eine Fehlerbeschreibung oder Tipps, falls die Installation nicht erfolgreich verläuft.

Voraussetzungen

Für die Installation werden die folgenden Softwarekomponenten benötigt:

  • Java Version 1.6 (6.0)  oder höher
  • Ein Servlet Container wie Apache Tomcat (Catalina), Jetty oder höher
  • Ein Datenbankserver mit Hibernate Unterstützung wie MySQL oder Postgresql
  • Webceem Standalone Applikation in einer War-Datei

Einrichtung vor dem Deployment (Weceem Version 0.8):

Die folgenden Variablen müssen im System (ausführenden Benutzer) gesetzt sein  (Beispiel für Ubuntu 9.X):


export JAVA_PATH=/usr/lib/jvm/java-6-sun/
export CATALINHA_HOME=/opt/tomcat-6.0.26

Weceem setzt Lucene für die Suche ein. Lucene benötigt einen Ordner für die Index Dateien. Dafür muss der folgende Ordner für den Tomcat-Benutzer Schreibrechte besitzen:


/var/cache/weceem

Die Datenbank-Einstellungen in der Standalone Version sind nicht in dem War-Paket enthalten, da die Einstellungen für jede Installation anders sind. Für MySQL sieht die Datei mit den Einstellungen wie folgt aus (Dateiname z.B. $CATALINA_HOME/conf/weceem.properties):


dataSource.pooled=true
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.username=YOURWECEEMUSER
dataSource.password= YOURWECEEMPASSWORD
dataSource.dbCreate=update
dataSource.url=jdbc:mysql://localhost:3306/weceem

Damit Die Konfigurationsdatei für die Datenbank von der Webanwendung gefunden wird, muss sie über die Parametrisierung des Servlet Containers gesetzt werden. Dafür habe ich die Variable CATALINA_OPTS verwendet. Ich habe das Startskript des Tomcats direkt für Testzwecke verändert. Das Startskript ist hier zu finden: $CATALINA_HOME/bin/catalina.sh . Der Eintrag sieht wie folgt aus:


CATALINA_OPTS="-Dweceem.config.location=file:///$CATALINA_HOME/conf/weceem.properties"

Weceem enthält keine Datenbank-Connectoren, da sie meistens unter einer anderen Lizenz stehen. Dieser muss dem Servlet Container (hier Apache Tomcat) hinzugefügt werden. Die Jar-Datei des MySQL-Connectors muss entweder in den Java CLASSPATH Variable aufgenommen werden oder in den Ordner $CATALINA_HOME/lib/ kopiert werden.

Bevor die Anwendung deployt werden kann, müssen vorab die JAVA-Speichereinstellungen angepasst werden. Das kann wieder in dem Catalina Startskript $CATALINA_HOME/bin/catalina.sh geschehen. Das habe ich durch das Hinzufügen der folgenden Variable gemacht:


JAVA_OPTS="-server -Xmx512m -Xms512m -XX:MaxPermSize=256m"

Damit sollten alle notwendigen Einstellungen gesetzt sein. Jetzt muss die War-Datei von Weceem richtig benannt und in den Order $CATALINA_HOME/webapps/ kopiert werden. Das Deployen erledigt Tomcat selber. Nach dem Start des Servlets Containers sollte die Anwendung unter dem folgenden Pfad zu erreichen sein. Für den Test habe ich die Anwendung (War-Datei name weceem.war) weceem genannt:

http://localhost:8080/weceem/

Die Administration der Seite ist unter dem „admin/“ Pfad zu erreichen. Benutzername und Passwort sind bei der ersten Ausführung beide auf „admin“ gesetzt. Bei mir sieht der Pfad wie folgt aus:

http://localhost:8080/weceem/admin/

Probleme

Meine ersten Versuche waren nicht so erfolgreich. Deswegen sollte bei Probleme, in dem Log-Ordner $CATALINA_HOME/log in der Datei catalina.log nach Fehlermeldungen Ausschau gehalten werden. Die Java-Stacktraces zeigen meistens ziemlich schnell, wo der Fehler liegt.

Quellen und Hinweise:

… Wenn ich Zeit finde, dann übersetzte ich die ganze Geschichte auf Englisch.

InternetX DNS-Server unter Angriff und Twitter als Informationsquelle

Heute liefen wieder mal größere DDOS (Distributed Denial of Service) Angriffe auf den Provider InternetX. Es war ganz bestimmt reiner Zufall, dass der Angriff Heute an einem Feiertag in Bayern ausgeführt wurde. Um diese Information heraus zu finden, habe ich mir das erste Mal gedanken gemacht – welche Quelle sagt mir unkompliziert, aktuell und schnell was da los ist?

Auf der Webseite von InternetX war natürlich nichts von einer Störung zu sehen. Es wird auch keine Meldung geben, den solche Anbieter lassen lieber die Hotline lahmlegen und die Kunden verärgert, als Information öffentlich auf der für Informationen gedachten Webseite zu stellen. Im Endeffekt findet es eh jeder raus – aber na gut.

Die nächste Idee führte mich zum Heise Newsticker und dem Heise IMonitor. Dort steht leider bis jetzt nichts.

Suchmaschinen sind leider nicht aktuell genug, um solche Informationen heraus zu finden. Eine Suche bei Google führte mich zu den Angriffen vom letzten Jahr. Dabei war sogar ein Twitter Link auf einen Tweet vom letzten Jahr. Twitter – ist das die Lösung?

Das war die Lösung. Das Real Time Web gibt es schon und dieses heißt Twitter. Eine Suche nach  #InternetX auf Twitter förderte mir alle relevanten Informationen zu Tage. Kurz zusammengefasst: #DDOS, #InternetX, viele Leute sauer, viel Gemecker, ….

Die Schlussfolgerung war: Abwarten und InternetX das Problem am Feiertag klären lassen. Da wollte bestimmt jemand die Bayern am Feiertag zum Arbeiten bewegen. 🙂 Alle verärgerten Leute beruhigen und die Hotline nicht belästigen. Sie haben Heute schon genug unnötige Fragen von anderen Leuten gehört.

Real Time Informationen sind schon länger im Internet und die derzeit beste Quelle ist Twitter. Schneller geht es kaum – und für jeden einen Blick wert!

Navigation im Web – The way we search

Trotz seines jungen Alters, hat das Internet innerhalb weniger Jahre eine Durchdringung in der westlichen Welt erreicht, wie kein anderes Medium zuvor. Einer der Gründe für die Verbreitung ist die große Informationsvielfalt, die im Internet jedem kostenlos zur Verfügung steht.

Allerdings war es auch die Vielfalt, die die Unübersichtlichkeit im Web schaffte und Suchmaschinen einen großen Markt eröffnete. Da Listen, Verzeichnisse und „mir bekannte Quellen“ nur einen kleinen Teil des Internets erschließen, werden sehr oft Suchmaschinen wie Google und Yahoo zum Auffinden der Informationen genutzt.
Durch Korrekturen in modernen Suchmaschinen werden Tippfehler (siehe Beispiel) und Schreibfehler korrigiert. Dies führt nicht nur zu besseren Ergebnissen, sondern unterstützt den Nutzer bei der Suche nach Informationen.

Daraus hat sich auch eine Navigationsphilosphie entwickelt, die das Nutzerverhalten im Internet immer mehr bestimmt. Folgende Navigationsphilosophien für den Zugriff auf Internetseiten sind mir bekannt:

  • Seite per bekannte URL (Adresse) aufrufen (z.B.: www.google.de in die Adressleiste des Browsers eingeben)
  • Seite aus persönlichen Lesezeichen oder Favoriten aufrufen (auch Online)
  • Seiten „Ergoogeln“ (der Nutzer gibt den Namen oder Stichwort in eine Suchmaschine ein und betritt über das Suchergebnis die Seite)
  • Seiten von anderen bekannten Seiten aus abrufen (Stichwort: Verlinkung)
  • Seiten aus Webverzeichnissen abrufen

Bei der Eingabe einer URL erhält der Nutzer eine Fehlermeldung von dem Browser, dass die Seite nicht gefunden werden konnte. Durch Korrekturhilfen wird das „Ergoogeln“ der Seiten immer beliebter, weil der Nutzer sich auch verschreiben darf. Die Suchmaschine unterstützt ihn den richtigen Begriff zu finden.

Diese Techniken übertragen sich sehr schnell auf die Navigation in Internetseiten. Im Folgenden stelle ich Techniken für die Navigation auf Internetseiten vor:

  • Navigation über das Menü (die wohl älteste Methode und wegen der Informationsvielfalt immer schwieriger nutzbar)
  • Navigation über den Inhalt (der Nutzer bedient sich Links auf der Internetseite, um weitere Seiten zu erreichen)
  • Navigation über die Sitemap (Sitemap ist ein Verzeichnis von allen Seiten in einem Internetauftritt)
  • Navigation über die Suche (der Nutzer bedient sich der Suchfunktion auf der Internetseite selbst)
  • Navigation über die Suchfunktion des Browsers (Strg+F ist das gängige Tastenkürzel)

Die große Vielfalt der Navigationsmöglichkeiten und die sich immer mehr durchsetzende Navigation über die Suche stellt neue Anforderungen an einen modernen Internetauftritt. Das Zusammenspiel all dieser Techniken, ermöglicht eine nach Benutzer gewohnte Navigation und damit eine sehr effektive Nutzung des Internetauftritts. Diese sollten aus diesem Grund bei modernen Internetauftritten unbedingt umgesetzt werden.

Viele Nutzer erreichen Internetseiten über Suchmaschinen, weil die Seiten als relevant für den Suchbegriff in den Ergebnissen auftauchen. Durch die Vielfalt und die große Menge der Suchergebnisse und vor allem der Informationen auf den Seiten, ist eine schnelle Suche auf den gefunden Seiten sehr wichtig, da wohl kaum ein Nutzer sich die kompletten Inhalte durchliest,  um darüber zu entscheiden, ob diese für ihn relevant sind. Die Suche über die Suchfunktion der Internetseite macht oft weniger Sinn, weil sie oft die selben Ergebnisse wie die externe Suchmaschine zu Tage fördern.

An dieser Stelle kommt die Suchfunktion des Browsers ins Spiel. Durch die Suche auf der gefunden Seite kann der Nutzer relativ schnell für ihn relevante Informationen aufdecken, in dem er den Suchbegriff über die Suche des Browsers auf der Seite findet. Dabei wird oft der Satz oder der Absatz bewertet und nicht der gesamte Inhalt der Seite.
An dieser Stelle muss muss eine effektive Umsetzung der Suche im Browser vorhanden sein. Die altmodische Methode durch ein sich öffnendes (aufpoppendes) Suchfenster stellt mehr eine Behinderung, als eine Hilfe bei der Suche dar, weil sie die Inhalte der Seite selber verdeckt. Firefox Entwickler haben das Problem schon lange erkannt und durch eine Suchleiste (erreichbar über Strg+F) am unteren Rand des Browsers gelöst, welche durch F3 (nach unten suchen) und Shift+F3 (nach oben Suchen) ohne Mauseinsatz bedient werden kann.

Aus diesen und weiteren Gründen ist eine gute Strukturierung der Seiten sehr wichtig und sollte durch Verlinkung spezieller Begriffe auf der eigenen Seite beispielsweise zu Unterseiten durchgeführt werden. Das Navigationsverhalten ist sehr oft entscheidend über den ersten Eindruck der Seite und sollte eine sehr hohe Priorität bekommen.

Die modernen Navigationsmöglichkeiten stellen neue Anforderungen an jeden Internetauftritt dar und sollten möglichst vollständig umgesetzt werden, um so wenig wie möglich Nutzer zu verärgern. Dabei treten Sitemaps und Menüs immer mehr in den Hintergrund, weil sie die Informationsvielfalt nur sehr schwer auffangen können. Die Navigation über die Suche wird immer wichtiger. Dieser Trend lässt sich immer mehr beobachten, weil sich die Informationsvielfalt im Moment nur durch effektive Suchmethoden nutzen lässt.

Sogar auf dem eigenen System (durch Desktop Sucmaschinen) und unternehmensweite Suchmaschinen über alle Informationsquellen des Unternehmens, lässt sich die Problematik der Strukturierung und Sortierung der eigenen Daten erkennen. Der Trend geht dabei immer mehr weg von der Sortierung und Strukturierung von Dokumenten und immer mehr zu effektiven Methoden der Suche, weil der Zeitaufwand und die Disziplin für die Aufgabe immer weniger durchsetzbar werden.

ORM für PHP: Doctrine 1.0 erschienen

Objektorientierte Softwareentwicklung erfodert eine Abbildung der Datenbankstrukturen auf Objektstrukturen. Das unter Java sehr beliebte Framework Hibernate stellt einer der Vorreiter in dieser Entwicklung dar. Durch XML-Konfigurationsdateien werden Datenbankstrukturen auf Objekte in der Anwendung abgebildet.

Seit kurzem ist dier erste stabile Version von Doctrine – einem objektrelationalen Mapping (ORM) für PHP erschienen, welches nach dem Vorbild von Hibernate arbeitet und das Mapping von Daten aus der Datenbank auf Objekte ermöglicht.

Dadurch gewinnt objektorientierte Programmierung auch bei PHP immer mehr an Fahrt und ermöglicht eine besser strukturierte und einfacher zu erweiternde Software.

Weitere Informationen:

Die 25 gefährlichsten Programmierfehler zum Thema Sicherheit

Ein Zusammenschluss von vielen namhaften Firmen hat eine List der 25 gefährlichsten Programmierfehlern veröffentlicht. Mindestens diese sollte sich jeder Programmierer merken und sie nicht mehr machen.

Hier ist der Bericht zu finden:

http://www.sans.org/top25errors/

Natürlich helfen solche Maßnahmen, aber die imperfiktion des Menschen ist das eigentliche Problem und der Ausweg daraus sind ordentliche Tests, die sicher stellen, dass Fehler ausgeschlossen werden.
Folgende Stichpunkte helfen hier weiter:

  • Qualitätssicherung (als Oberbegriff)
  • Unit Tests
  • Sicherheitsanalyse durch Spezialisten

Befreiphone bei Google auf dem ersten Platz gibt ein IPhone

Wenn es was umsonst gibt, dann ist natürlich jeder dabei. Auf jeden Fall gibt es ein IPhone 3G 16 GB, wer bis zum 17ten September bei Google auf Platz eins unter dem Begriff Befreiphone steht.

Die Idee hinter Befreiphone

Das Problem am IPhone kauf ist, dass Apple mit den Providern ein Vertrag abgeschlossen hat, mit dem nur dieser eine Provider das IPhone in dem Land verkaufen kann. Durch die zusätzliche Netzsperre, wie man sie eigentlich nur von Prepaid Mobiltelefonen her kennt, war es nicht möglich das IPhone in fremden Netzen zu nutzen. Hier soll das Befreiphone helfen. Das Befreiphone hat keine Netzsperre und kann bei jedem Provider genutzt werden. Daher ergbit sich der Name – aus Befreien und IPhone ergibt sich Befreiphone.

Da dieser wenig sinnvolle Text eigentlich nur für Suchmaschinenoptimierung (SEO) erstellt wurde und mir mit sehr viel Glück zu einem IPhone verhelfen könnte, bitte ich jeden Leser auf diesen Beitrag zu verlinken und in dem Link das Wort „Befreiphone“ zu erwähnen.
Notiz: Das mit dem Verlinken klappt weniger als gut, da ich mittlerweile auf Seite 10 bei Google gerutscht bin. Hat aber auch noch mehr Gründe. Sieht nicht nach einem Befreiphone für mich aus! 🙁

Ab hier kommt etwas befreiendes Geschwafel zum Befreiphone

Das Befreiphone wort ist eine Zusammensetzung aus den Worte Befreien und IPhone – dem angeblichen „Wunder“ von Apple. Da Suchmaschinen statistische Auswertungen von der Wortdichte machen, benutze ich mal ganz oft das Wort Befreiphone. Dadurch wird die Seite zu dem Begriff Befreiphone relevant eingeschätzt. Übertreibt man es allerdings, dann passiert genau das Gegenteil und das Wort wird wie „und“ einfach als zu oft und damit irrelevant eingeschätzt.

Dazu ist es wichtig, dass möglichst viele Seiten auf diese Seite verlinken und in dem Link den Begriff Befreiphone erwähnen. Am besten sollten die Seiten von Google gut bewertet werden (Page Rank) und eventuell auch das Thema ansprechen. Das ist mir bis jetzt mit Befreiphone nicht gelungen und wird es wohl nicht.

Die Seite soll ganz oft aktualisiert werden und natürlich das Thema Befreiphone nicht verlieren. Google versucht damit menschliches Verhalten zu imitieren – wenn es was neues gibt, dann wird wohl es jemand lesen wollen. Seite die nichts Neues bieten, werden auch für Leser uninteressant sein.

Das Wort Befreiphone sollte möglichst überall auftauchen und zwar in der Adresse, im Ordner und Dateiename (falls nicht beide, dann wenigstens eines davon), sonst wird es nichts mit dem Befreiphone.

Überschriften sagen was über den nachfolgenden Text aus. Hier sollte Befreiphone ebenfalls auftauchen – also in H1 usw. Auch hervorgehobene Worte werden eine Bemessung finden. Deswegen den Begriff mal kursiv und fett schreiben.

Neues zu dem Befreiphone

Da Suchmaschinen auf neue Sachen stehen, muss das Befreiphone und dieser Artikel regelmäßig überarbeitet und aktualisiert werden. Deswegen wird hier immer wieder was neues stehen. Meistens wird es wenig Sinn machen, aber hier geht es weniger um Sinn, als mehr um ein gewonnenes Befreiphone in Form eines IPhone 3G 16GB.

  • Einstig am 12 September 2008 auf Seite 5
  • 13 September 2008 auf Seite 6 gerutscht
  • 14 September 2008 auf Seite 10 gerutscht
  • 15 September 2008 auf Seite 11 gerutscht
  • 16 September 2008 raus geflogen, weil Befreiphone zu oft eingefügt! 😉
  • 19 September 2008 nix gewonnen 🙁 aber auch faktisch nichts investiert.

Was haben ich für eine bessere Platzierung gemacht? Nichts, weil ich keine Zeit hatte.

TODO für das Befreiphone

  • Text nochmal lesen und Fehler korrigieren
  • Mehr über das IPhone schreiben – also Vor- und Nachteile
  • Befreiphone öfters erwähnen
  • Google ist nicht gleich Google (Rechenzentren, Sprachen, …)
  • Verschiedene Browser
  • Verschiedene Betriebssysteme
  • Was Sinnvolles tun und aufhören Zeit zu schinden 😉

Weitere Informationen:

Möge PHP4 in Frieden ruhen

Gestern am 08.08.2008 wurde die Unterstützung für PHP 4.4 als letzte Version der PHP4 Familie eingestellt. Wenn es auch kein wirklicher Trauertag ist, da die meiste Software weiter unter PHP5 funktionieren wird, so sollte dieser Tag dokumentiert werden.

Gentoo hat offiziell in einer E-Mail  an die Announce-Mailinglist angekündigt PHP4-basierte Software aus ihren Repositories zu nehmen. Durch diesen drastischen Eingriff wird höchst wahrscheinlich nicht wenig Software und kleine Skripte verloren gehen bzw. nicht mehr unterstützt werden.

Auch die Hoster müssen spätestens jetzt ihre Server auf PHP5 portieren, da keine weiteren Sicherheitsaktualisierungen für PHP4 zur Verfügung gestellt werden. Es wird auch einzelne Kunden härter treffen, da ihre Software mit PHP5 nicht mehr funktionieren wird.

Aus der Sicht der Sicherheit kann allerdings dieser Tag gelobt werden. Mit dem Versionswechsel wird die alte Version von PHP auf aktuellere Versionen hoch gehieft und PHP4-basierte Software wird ebenfalls auf den neusten Stand gebracht oder durch gewartete Software ersetzt. Nicht selten werden damit nicht mehr gewartete Komponenten zwangsweise ersetzt werden müssen.

Trotz der ganzen Kritik, muss an die Entwickler von PHP ein großer Lob ausgesprochen werden. Mit PHP4 wurden erste Ansätze für objektorientierte Programmierung eingeführt und mit Version 5 weiter entwickelt. Die lange Wartungszeit von PHP4 hatte Entwicklern genug Zeit gegeben ihre Software auf PHP5 zu portieren. Damit kann keine Kritik an die PHP-Entwickler ausgesprochen werden.

Weitere Informationen:

WordPress 2.3.3 behebt schwere Sicherheitslücke in xmlrpc.php

Jaaaa, wieder ein Update und ich bin wieder gefragt die Aktualisierung einzuspielen 🙁

Über einen Fehler in der xmlrpc.php Datei war es mit der vorhergehenden Version möglich, Posts ohne Anmeldung zu editieren.

Zusätzlich wurde ein paar kleinere Fehler behoben.

Also schnell die Aktualisierung einspielen!!!

Quellen und weitere Hinweise: