jQuery Plugin erstellen, einfache Vorgehensweise

Einfache Erweiterung

Um ein jQuery Plugin zu schreiben muss man schon mal das ein oder andere ausprobieren. Auf diese Weise bekommt man seine eigene Best-Practice heraus. Die Prozesse dahinter zu verstehen will auch erst mal gelernt sein. Für mich hat sich folgende Best-Practice herausgestellt:

über diese Konfiguration kann man Standardmethoden und Konfigurationsoptionen ändern.

sorgt dafür, dass wir jeder Zeit auf das gebundene Element Zugriff haben.

Erweitert “this” mit definierten Werten, so, dass über “this” auch auf diese zugegriffen werden kann.

Danach kann man die Klasse beliebig wie z.B. über “$.fn.ClassName” zur Verfügung stellen.

Postfix Relay Rechner über anderen SMTP

Eigener Rechner für Email-Versand

ISP’s, DynDns und Spamhouse

Leider fragen immer mehr Email Dienstleister die Daten von Spamhouse und Co. ab. Das ist durchaus sinnvoll um vor Spam zu schützen, allerdings trifft es auch diejenigen die eigentlich einfach nur Emails versenden wollen um ihre Anwendungen zu testen.

Eine Alternative dazu ist natürlich das Staging-System einfach auf einen seiner Server zu hosten – damit hat man das Problem nicht mehr, dass die Emails abgewiesen werden. Es geht aber auch anders. Denn man kann seinen eigenen Rechner/Server so konfigurieren, dass die Emails nicht mehr von diesem Rechner aus gesendet werden sondern von dem Rechner, auf dem man seine öffentlichen Webseiten liegen hat. Setzt natürlich vorraus, das man mindestens einen virtuellen Server hat, den man konfigurieren kann oder der Dienstanbieter Ihres SMTP nicht nach IP-Adressen aus z.B. Spamhouse scannt.

Im Grunde genommen ist der Vorgang aber der Gleiche.

Die Konfiguration des eigenen Rechners

Eine Standard-Konfigurationsdatei

Der Einfachheit halber kurz und bündig: (/etc/postifx/main.cfg)

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
myhostname = debian.local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = debian.local, localhost.local, localhost
relayhost =
relay_domains = $mydestination
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

In dieser Konfiguration ist der Eintrag relay_domains = $mydestination besonders wichtig. Er verhindert, dass man von außen Emails versenden kann. Was bei geschlossenem Port 25 aber genauso wenig möglich ist.

Der SMTP-Server des Dienstanbieters

Damit sich unser Rechner also mit unserem SMTP des Dienstanbieters verbinden kann ändert man folgenden Eintrag:

relayhost = [mail.domain.tld]

Die Klammern sorgen dafür, dass die Nachricht am MX-Record des Anbieters vorbei direkt zum SMTP geht, es liefert also die IP des Hosts. Würde man die Klammern weglassen würde der MX-Record abgefragt.

Jetzt haben wir schon mal dafür gesorgt, dass unsere Emails in die richtige Richtung transferiert werden.

Authentifizierung

Müssen wir noch dafür sorgen, dass sich unser Rechner am SMTP authentifiziert.

Um das zu bewerkstelligen brauchen wir zwei Dinge eine Datei sasl_password, die leider das Passwort im Klartext speichert, und das Programm postmap welches die Datenbanken für Postfix erzeugt.

Lange Rede kurzer Sinn – hier die Befehlszeilen:

cd /etc/postifx
sudo echo "mail.domain.tld myname@domain.tld:password" > sasl_password
sudo chmod 0600 sasl_password
sudo postmap sasl_password

Die “Datenbank” ist jetzt angelegt und die Verbindungsdaten hinterlegt. Jetzt müssen wir nur noch dafür sorgen, dass Postfix die Datenbank bei der Verbindung zum SMTP verwendet. Dazu ergänzen wir folgende Einträge in der /etc/postfix/main.cfg.

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous noplaintext
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password

Je nachdem ob der Server Verschlüsselung für das Passwort verwendet kann man es auch ohne noplaintext probieren.

Canonical Names, From und Namenszwang

Einige ISP’s verbieten es unter fremden Namen Emails zu versenden. Für unseren Fall könnte man das eventuell auser Acht lassen aber der Vollständigkeit halber gehören die Canonical Names einfach dazu vor allem dann wenn man Arcor, Web oder GMX konfigurieren will.

Wir führen folgende Befehlszeilen wie am Beispiel der Authentifizierung aus:

cd /etc/postfix
sudo echo "www-data myname@mail.domain.tld" > sender_canonical
sudo postmap sender_canonical

www-data ist der Benutzer welcher die Emails absendet. Kann z.B. auch root oder your-username sein.

Mehrere Einträge schreibt man einfach untereinander.
Danach nur in der /etc/postfix/main.cfg bescheid geben:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

Sicherheit mit PHP

Vorkenntnisse

Quellen im Internet

php.net Sicherheitshinweise
Sicherheitsweise direkt von der Community von PHP.
Besonders auf die Nullbyte Problematik sollte man achten.

http://www.cms-sicherheit.de/
Über diese Webseite kann man sich einen guten Überblick verschaffen über die Sicherheitsthematik in PHP. Mit vielen weiterführenden Links zu den einzelnen Themen kann man sich so informieren, wie man PHP am sichersten Programmieren kann. Ich will in diesem Beitrag auf Sicherheitsthemen eingehen, die weniger dokumentiert sind.

Allgemein

Fremde Inhalte und Datenschutz

Es ist nicht sonderlich zu empfehlen seine Webseite auf fremden Inhalten aufzubauen in denen diese von den entsprechenden Servern geladen werden. Zum einen könnte der Server ausfallen und die Webseite würde nicht mehr funktionieren, man könnte die Dateien auch manipulieren und so aus einer CSS-Datei einen Angriff auf Ihre Benutzer starten. Zum Anderen ist dieses vorgehen meiner Meinung nach auch Datenschutzrechtlich bedenklich, denn der Server von dem die Dateien geladen werden erhält Informationen über die Benutzung Ihrer Webseite, besser gesagt über Ihre Benutzer. Sie sind auf jeden Fall auf der sicheren Seite wenn Sie fremde Inhalte selbst hosten. Das geht natürlich nicht immer. Ein Youtube-Video z.B. kann nicht einfach selbst gehostet werden. Zum einen sind Videos ein sehr resourcenhungriger Aspekt in der Datenübertragung und zum Anderen hat man nicht die Rechte zur Veröffentlichung. Man sollte es dann aber zumindest so lösen, dass Youtube z.B. nicht automatisch geladen wird sondern erst wenn der Benutzer es ausdrücklich wünscht, das macht Ihre Webseite zudem schneller und zeigt, dass Ihnen die Anliegen Ihrer Benutzer am Herzen liegen. JQuery und Google Fonts einfach selbst hosten. Auf Google-Analytics verzichten und stattdessen selbst z.B. PIWIK hosten. In Zeiten der Sensibilisierung für Datenschutz und nicht zuletzt wegen der Abmahnungsgefahr ist dies auf jeden Fall der sichere Weg.
Während das Laden von Fremdinhalten für technische Angriffe auf der einen Seite genutzt werden kann ist es auf der anderen Seite die Sicherheit die man dem Benutzer gibt wenn er Ihre Seite besucht.

Klientseitig

CSS, expression() und url()

Mit expression(…) oder url(…) kann man beliebigen JavaScript Code ausführen. Auch hier gilt, keine fremden Inhalte laden. Diese können beabsichtigt oder unbeabsichtigt kompromitiert werden.

Schema bei Links prüfen

Wenn man Links von Benutzern eintragen lässt, dann sollte man diese gegen eine Liste erlaubter Schema validieren. Andernfalls kann es sein, dass jemand “javascript:window.location=’bad.de'” als URL übermittelt. Im href-Attribut des a-Tags wird das dann natürlich ausgeführt. Selbes gilt auch für das src-Attribut im img-Tag. Ich denke die meisten die einen solchen Dienst anbieten gehen im Höchstfall davon aus vielleicht mal einen FTP-Link zu veröffentlichen, demnach sollte die Validierung gegen eine Whitelist meistens möglich sein. Auch das automatische vorransetzen von http:// ist hierbei denkbar, das würde JavaScript auch entschärfen. Über parse_url() bekommt man Informationen zum übermittelten Schema.

Serverseitig

Weiterleitungen validieren

Man sollte bei Redirects darauf achten, dass keine ungewollten URLs ausgeführt werden können. Dabei könnte ein Angreifer einem Benutzer einen Link übermitteln der dem Anschein nach von Ihrem Angebot stammt und auf die Seite eines Angreifers weitergeleitet werden. Für Phishing sehr interessant da Phishing-Filter oft darauf zurückgreifen, gefakte URLs zu analysieren. Für interne Weiterleitungen sollte man darauf achten eine relative Adresse zuzulassen, dadurch kann niemand nach außen weiterleiten.

SQL-Injection auf umwegen

Vielleicht hat ein Angreifer eine Stelle in Ihrem Programmcode gefunden in dem Sie den String unmaskiert verwenden obwohl Sie darauf bereits geachtet haben. Es könnte sein, dass Sie die SQL-Injection in Ihrer Datenbank steht und Sie diesen String später aber als vermeindlich sicher einschätzen.

Der Wert kommt aus der Datenbank aber das heißt nicht, dass man die Injection nicht doch über PHP auslösen kann obwohl man vorher mit mysql_real_escape_string() darauf geachtet hat.

Vorsicht mit Bildern

Bilder niemals direkt mit include() einfügen. Es kann passieren, dass entweder ein Bild mit der Erweiterung .php hochgeladen wurde oder Bilder sogar vom Parser ausgeführt werden. Bilder können nämlich beliebigen Programmcode enthalten. Auch bei JavaScript darauf achten, dass Bilder für Angriffe verwendet werden können.

Objektorientierte Programmierung, Entwurfsmuster und guter Programmierstil mit PHP

OOP – Objektorientierung in PHP

PHP ist (nicht) objektorientiert

… aber es bietet die Möglichkeit objektorientiert zu programmieren. PHP besteht hauptsächlich aus Elementen der prozeduralen Programmierung. Ein ganze Menge Funktionen aber nur wenige Klassen werden von PHP bereitgestellt. Datentypen sind keine Objekte sondern Literale. Seit PHP 5 ist es aber so, dass man ganz hervorragend objektorienterte Programme umsetzen kann. Es ist also sowohl objektorientiert als auch imperativ/prozedural.
Man sollte den OOP Ansatz von PHP nicht kleiner darstellen als er tatsächlich ist.

Unterschied und Vorteil von OOP

PHP stellt damit eine anwendbare Möglichkeit zur Verfügung OOP Lösungen zu implementieren. Im Gegensatz zur prozeduralen Programmierung hat man in der objektorientierten Programmierung die Möglichkeit seinen Klassen und Objekten eine Bedeutung zu geben, diese durch das Programm zu transportieren und sie in Beziehung zueinander zu stellen. Mit einem aussagekräftigen Namen weiß jeder, dass ein Auto einen von A nach B bringt. Bei der prozeduralen Programmierung kann man zwar den Schlüssel zum starten des Fahrzeugs verwenden aber es nicht so, dass das Zündschloss als Teil des Fahrzeugs verstanden wird sondern ein eigenständiges Dasein besitzt – der Programmcode ist sehr viel gelöster und um so unübersichtlicher je mehr Funktionalität dazu kommt. Die Objektorientierung setzt die Objekte also in Beziehung. Nicht nur durch Vererbung, dass ein Auto z.B. ein Fahrzeug ist, oder das ein Auto ein Zündschloss hat, es können auch mehrere Schlüsselarten verwendet werden ohne den vorhandenen Code ändern zu müssen. Ein Zündschlüssel kann so z.B. eine elektronische Variante sein ohne das man dabei Variablen oder Funktionen im Code anpassen muss. Wir erhalten eine Programmierung die einfacher zu ergänzen ist oder auch komplett ausgetauscht werden kann ohne die unzähligen Stellen im Programmcode ändern zu müssen in denen diese verwendet werden. Man merkt, dass die Objektorientierung mehr ist als das verwenden von Objekten und Klassen, es ist eine Möglichkeit Sachverhalte zu beschreiben und in Beziehung zueinander zu bringen. Wir können einem Zundschloss beibringen mit verschiedenen Schlüsseln umzugehen ohne, dass wir das Schloss selbst, bzw. die Funktionssignatur, sprich die Parameter, ändern müssen. Wir legen also mehrere Klassen als Schlüsselarten an und mehrere Klassen zur Verarbeitung des an das Zündschloss übergebenen Typs von Schlüssel. Viele dieser Problemstellungen wurden aber schon einmal gelöst, gründlich untersucht und in abstrakten Katalogen veröffentlicht. Man nennt dies Entwurfsmuster.

SPL (Standard PHP Library) und Vererbung

Ein besonderes Augenmerk sollte man auf die SPLhaben, denn neben der Verwendung als Basisklasse zur Vererbung, bieten die Klassen der SPL eine effizientere Verarbeitung von oft benötigten Algorithmen. Die objektorientierte Programmierung in PHP sollte die SPL nicht vernachlässigen und ich kann nur empfehlen diese Klassen und Interfaces bei der Vererbung zu verwenden.

Fehlende Konzepte

Leider gibt es in PHP noch einige Konzepte die ich sehr vermisse. Polymorphie und Methodenüberladung (Overloading), wobei letzteres helfen würde so manch merkwürdiges Konstrukt in PHP zu verhindern, werden hierbei oft angeführt. Bei der Polymorphie ist es im Moment so, dass man nur mehrere Interfaces auf einmal vererben kann.

Entwurfsmuster

Design Patterns sind Problemlösestragien und nicht Problemlösungen

Gleiche Klassen sind oft sehr verschieden da vor allem dem Zweck nach entworfen. Eine Waschanlage versteht ein Auto ganz anders als eine Werkstatt. Wenn man nun Betreiber einer Waschanlage ist, dann interessiert ein Zündschloss recht wenig, dass ist was für den Besitzer oder die Werkstatt. Es macht also keinen Sinn der Anlage zu erklären, dass ein Auto mit dem Zündschloss gestartet wird. Ähnlich verhält es sich mit den Entwurfsmustern, Sie müssen auf den Zweck abgestimmt angewendet werden. Ein Entwurfsmuster ist keine Lösung sondern eine Lösungsstrategie. Man kann die abstrakte Darstellung und Zusammenhänge verwenden um eigene Lösungen leichter zu konstruieren. Eine Hilfestellung zu sehr bekannten und untersuchten OOP-Problemstellungen. Ein weiterer Vorteil ist, dass ein Programmierer diese Entwurfsmuster erkennt und daraus ableiten kann wie diese funktionieren sollten.
Mit dem Object Oriented Programming ist es in jedem Fall einfacher die Intention des vorherigen Programmierers oder der zuvor selbst programmierten Klassen zu verstehen.

Das MVC-Pattern

Eingabe, Verarbeitung und Ausgabe.

Nehmen wir als Beispiel die Implementierung einer über eine URL Rewriting basierenden index.php die gerade dabei ist, eine anfragebasierte Seite auszuführen. Man würde dies imperativ folgendermaßen lösen.

Weiter gehen wir davon aus, dass wir dies in prozeduraler Form lösen möchten.

Wir haben es jetzt so gelöst, dass wir unsere Code nicht mehr ändern müssen wenn sich an der Funktion etwas ändern sollte müssen wir nicht durch die ganzen Programmstellen gehen an denen diese Funktion angewendet wird. Aber es gibt einige Nachteile die erst dann zum Vorschein treten wenn das Programm wächst. Wir haben Funktionen die zwar in Beziehung miteinander stehen aber in der Programmierung diese Beziehung nicht erkennen lassen da es sich hierbei nur um Funktionen handelt. Es könnte daher sein, dass man das parsen einer Seite auch einfach an einer anderen Stelle einbaut und der Zusammenhang dieser Funktionen unberücksichtigt bleibt. Es wird z.B. nicht mehr ermittelt ob es sich um eine Seite handelt die tatsächlich existiert und ob eine default Page verwendet werden soll. Ein weiterer Nachteil ist, dass die globalen Variablen ebenfalls lose herumfliegen und keine Beziehungen erkennen lassen. Mit der Objektorientierung und der Anwendung eines Enwurfsmuster wie dem MVC-Pattern kann man aber verhindern, dass Programme so programmiert werden, dass Algorithmen übergangen oder Eigenschaften (Variablen) ohne Bezug bleiben.

Was wir hiermit erreichen ist, dass wir den Zugriff auf die Funktionen/Methoden und Variablen/Eigenschaften kapseln, man spricht von Datenkapselung. Wir stellen nicht nur Funktionen zur Verfügung sondern bestimmen auch wie diese verwendet werden sollen. Um die Klasse überhaupt verwenden zu können, muss diese im Konstruktor konfiguriert werden. Erst mit einer Instanz können wir eine Seite parsen und davon abhängige Beziehungen werden ausgeführt.

Wer sich das MVC Pattern ansieht wird noch auf viele weitere Vorteile der Objektorientierung treffen. Zwar ist die Planung und Konzeption von objektorientierten Lösungen sehr viel aufwändiger aber gerade größere Projekte können davon stark profitieren. Die Objektorientierung muss daher auch viel durchdachter sein. Man muss berücksichtigen ob man die Beziehungen auch richtig abbildet und eine geeignete Schnittstelle zur Verfügung stellen die auf Änderungen besser reagieren kann als man das mit prozeduraler Programmierung könnte. Denn der Quellcode entwickelt sich ständig weiter und die Anforderungen ändern sich im Laufe der Zeit.

Das letzte Code-Beispiel hat natürlich noch recht wenig mit dem MVC Design-Pattern zu tun aber die Grundlage dafür ist geschaffen. Man würde den Dispatcher mit einen Front-Controller in Beziehung bringen. Man könnte sich folgendes vorstellen.

Der Code ist recht trivial und wenig durchdacht, aber als Beispiel sollte es genügen. Eine recht gute Hilfe zur Thematik bietet das Zend Framework 1 sowie in Version 2. Mit diesen beiden Frameworks bekommt man sehr viel Objektorientierung vermittelt. Es dauert eine Weile bis man sich eingearbeitet hat aber der Aufwand lohnt sich. Viele Firmen setzen Kenntnisse im Zend Framework vorraus und ich bedanke mich bei jedem Programmierer der das Zend Framework verwendet, dass erspart mir viel Einarbeitungszeit.

Programmierstil

Konventionen beachten

Es gibt nicht nur den persönlichen Programmierstil. Wie einigen aufgefallen sein könnte verwende ich recht wenige Leerzeichen und Leerzeilen. Mich stören diese – Wenn dort steht

dann bekomm ich Magenkrämpfe. Wenn z.B. etwas nicht eingerückt wird, dann landet es bei mir in der Kategorie unbrauchbar. Das sind aber subjektive Einschätzungen und genau aus diesem Grund gibt es zu den meisten Projekten gewisse Codingstandards an die man sich unbedingt halten sollte. Dort wird festgelegt wie breit ein Tab sein muss wieviel Zeichen pro Zeile oder ob Camel-Case-Notation verwendet wird. C++, Java und PHP haben meiner Meinung nach die beste Syntax und ermöglichen einen sauberen Programmierstil den man hinterher auch noch nachvollziehen kann. Die Camel-Case-Notation ist bei vielen beliebt und sinnvoll. Auch wenn man auf den Anweisungsblock {} verzichten kann sollte man es nicht tun, es dient der besseren Lesbarkeit. Dinge wie <?= $var ?> sind spätestens mit PHP 6 nicht mehr verwendbar und waren für mich schon immer ein No-Go, da diese Option deaktiviert werden kann, schlussendlich ganz wegfällt. Es war für mich nicht sinnvoll diese Abkürzung zu verwenden. Das hat sich dann bemerkbar gemacht als ich die kompletten Templates eines CMS ändern musste. Da hat mir der Vorgänger ganz schön Arbeit gemacht und in einigen Tutorials wird selbiges auch noch empfohlen. Man muss sich schon etwas über PHP informieren wenn man damit arbeitet. Gerade weil PHP eine Einsteigersprache ist witmen manche der Programmierung mit PHP keine Aufmerksamkeit, dabei geht es gar nicht um die verwendete Sprache sondern viel eher um guten Stil. Der wird leider viel zu oft vernachlässigt mit der Begründung “Es ist doch nur PHP”. Und der Denkzettel kommt dann wenn man alle <?= $var ?> ersetzen muss. Es macht bestimmt keinen Spaß in einer Programmiersprache zu programmieren die man selbst nicht würdigt.

Die Frage wie man ein besserer Programmierer wird kann man nur damit beantworten, dass man es sich bei anderen abschaut aber eben nicht das falsche abkuckt. Gut zu programmieren hat viel mit Erfahrung zu tun. Nach einer gewissen Zeit eignet man sich, zu anderem mit Entwurfsmustern, verschiedene Strategien an und wird im Laufe der Zeit ziemlich gut darin abzuschätzen welche Anforderungen an eine Klasse gestellt werden könnten. Auch das kalkulieren des Aufwands wird irgendwann zu einer Routine. Der Kunde fragt nach dem Aufwand für Funktion x und im selben Moment geht man gedanklich durch die dafür benötigten Programmstukturen. Diese Erfahrungswerte will ich hier vermitteln.

Den Kern erfassen

Man programmiert und kommt doch nicht zum Ende, es lässt sich nicht einschätzen und verursacht viele Fehler. Dabei umschreibt man oft den Kern der Sache. Manche Dinge lassen sich mit ein paar Zeilen besser lösen als mit 100 Zeilen. Wenn es z.B. übliche also recht triviale Programmzeilen betrifft, dann sollte man versuchen es so einfach wie möglich zu lösen. Klein ist fein und spart Kosten, macht ein Programm einschätzbar und übersichtlicher. Viele Programme sind ausufernd und einige Klassen erledigen Sachen für die sie eigentlich nicht verantwortlich sind. Etwas geschickter ist es natürlich, wenn man sich andere Möglichkeiten einfach offen hält Sie aber nicht hinzufügt. Featuring ist nicht unbedingt das beste aber man sollte darauf achten, dass der Programmcode wachsen kann ohne das viel geändert werden muss. Das kann man sich hervorragend am Zend Framework abschauen. Nach einiger Zeit merkt man, dass man viele Dinge viel einfacher lösen kann und so Komplexität verhindern kann.

Don’t Repeat Yourself

Für ganz triviale Dinge gilt dies natürlich nicht wie z.B. das einfache Iterieren durch Objekte. Dazu braucht man nicht unbedingt eigene Methoden. Anders verhält es sich bei immer wieder kehrenden Problemen. Man stelle sich nur vor, dass man eine Sequenz schon 20 mal verwendet hat und stellt plötzlich fest, dass ein Fehler drin ist. Alles was Copy & Paste zum Programm hinzugefügt wird ist schon vorneherein ein Kandidat. Alles was sich ändern könnte, fehler verursachen kann und öfters verwendet wird kann man in Methoden auslagern.

Verwende Wächter statt Verschachtelung

Ein Wächter ist eine Sequenz die zur Prüfung der Daten verwendet wird. Statt immer weiter in IF Strukturen zu verschachteln ist es oft möglich und sinnvoll sogenannte Wächter einzusetzen.

Gerade bei größeren Anweisungsblöcken macht das den Code sehr viel übersichtlichter.

Magic Numbers

Es ist recht verwirrend, wenn im Programmcode immer wieder irgendwelche Zahlenmengen auftreten die man nicht zurückverfolgen kann. Ich bräuchte nicht mal ein Beispiel um zu zeigen, dass 138 in diesem Text keiner nachvollziehen kann. Was könnte es sein woher kommt der Wert? Deshalb solche Zahlen in Variablen speichern mit aussagekräftigem Namen und notfalls die Herleitung dokumentieren.

Sinnvolle Kommentare

Kommentare helfen den Code zu verstehen zu viel davon bewirkt aber das Gegenteil, man muss eine For-Schleife durch einen Array nicht damit dokumentieren, dass ein Integerwert inkrementiert wird. Vieles am Programm ist selbsterklärend, wenn man solche Dinge dokumentiert tut man niemanden einen gefallen. Dokumentiert werden muss was nicht sofort ersichtlich ist. Es geht darum Hilfestellung bei der Herleitung der Funktion zu geben. Wenn ich eine Funktion habe addiere(x,y) dann brauch man dafür nun wirklich keine große Dokumentation. Ausnahmen bildet die Signatur einer Funktion, die Parameter und Rückgabewerte, diese sollte man immer Dokumentieren. Viele IDE’s sind darauf angewiesen diese Kommentare auszuwerten, so z.B. Eclipse PDT.

Programmiert wird in Englisch

Es kommt oft vor, dass ich plötzlich deutsch oder französisch dokumentierten und programmierten Quellcode lese. Das geht gar nicht.
Englisch ist nunmal der Standard und die Sprache die jeder ansatzweise verstehen sollte. Ausnahmen sollten hier nur dann zum Vorschein treten, wenn das entsprechende Wort im englischen wenig Sinn macht oder gar nicht existiert.

Arbeitszeiten notieren

Man sollte ganzheitliche oder sequenzielle Zeiterfassung betreiben. Das hilft in späteren Projekten eine Referenz zu haben. Man kann den Aufwand oft abschätzen in dem man vergleichbare Projekte heranzieht.


Ich hoffe dieser kleine Artikel konnte einen kurzen Abriss zur objektorientierten Programmierung liefern und ein paar Regeln für guten Programmierstil aufzeigen. Ich will ja keinem was auf’s Auge drücken, es bleibt einem selbst überlassen wie man Programmiert. Ich hoffe die wichtigsten Punkte getroffen zu haben und dem ein oder anderen einen Hilfreichen Tip vermittelt zu haben. Kritik ist erwünscht, positives Feedback ebenfalls.

OnPage Optimierung, Linkaufbau und SEO Tools

Suchmaschinenoptimierung

OnPage Optimierung und OffPage Optimierung

Die Suchmaschinenoptimierung ist zu weilen sehr teuer. Die ständige Überwachung durch eine SEO Agentur sorgt für hohe Kosten. Gerade gute Software und SEO Tools sind oft sehr kostspielig und dies führt dazu, dass man sich spezialisieren muss. Besonders die OffPage Webseitenoptimierung ist nicht ganz einfach. Daher ist man als kleiner Webdesigner auf kostenlose Suchmaschinenoptimierung angewiesen.

Der Unterschied zwischen Onpageoptimierung und Offpageoptimierung ist damit erklärt, dass man bei der Onpage-Optimierung alles was direkt mit der Webseite eingestellt werden kann in diesem Sinne zur Webseitenoptimierung onsite heranzieht. Dinge auf die man direkt bei der Entwicklung oder Administration Einfluss nehmen kann. Überschriften, Titel und Beschreibung, URLs sowie Inhalt und Keywords. Offpage-Optimierung dagegen ist alles was außerhalb dieses Rahmens geschieht. Das Eintragen in Verzeichnisse und Dienste, Backlinks, und zu guter Letzt SEO Marketing und Social-Media Marketing.

Ich möchte mich bei diesem Beitrag des Online Marketing auf die OnPage Optimierung begrenzen und anhand eines völlig kostenlosen Beispiels, also ohne Shareware oder abgespeckte Dienste, aufzeigen wie ich diesen Blog-Beitrag nach vorne bringe. Der Inhalt soll gerade Anfängern mit diesem Beginners-Tutorial ein paar SEO Tips zur SEO-On-Page-Optimierung geben.

Pull und Push

Es gibt im wesentlichen zwei Varianten im Online-Marketing die voneinander unterschieden werden. Unter einem Pull versteht man alle Maßnahmen die einen Besucher auf die Seite ziehen. Also OnPage Optimierung z.B, Sie betreiben kein direktes Marketing sondern verlassen sich dabei darauf, dass Sie bei Google in der organischen Suche gefunden werden – das sind Suchmaschinenergebnisse die nicht bezahlt wurden. Das Gegenteil, das Push, ist hingegen wenn man z.B. eine Anzeigen-Kampagne bei Google startet. Backlinks z.B. können zwar durch einen Pull entstehen sind aber eine direkte Form des Marketings und “pushen” die Benutzer auf Ihre Seite – so ungefähr umständlich ausgedrückt.

Suchmaschinen

Die Seobasis: wie Suchmaschinen Seiten lesen

Eine Suchmaschine indexiert Ihre Seiten nicht einfach 1:1 sondern verwendet verschiedene Methoden wie z.B. das Stemming um den Inhalt Ihrer SEO Texte zu extrahieren. Eine Webseite nur in Flash ist deshalb ein absolutes no-go. Sowas wird von Google nicht erkannt.
Es werden sprachliche Aspekte berücksichtig sowohl bei der Indexierung als auch bei der Suchanfrage durch den Benutzer.

Besonders interessant findet Google h1 … h6 Tags, also Über- und Unterschriften. Sie werden als hervorgehoben und besonders wichtig erkannt. Das selbe gilt auch für die Domain, die URL selbst, das Titel Tag der Webseite und last but not least die Description im Meta Tag Ihrer Webseite die auch in den Google Suchergebnissen angezeigt wird.

Javascript wird von einer Suchmaschine nicht ausgeführt, also ist gerade bei Web 2.0 darauf zu achten, dass Inhalte nicht erst nachgeladen werden sondern schon beim Aufruf der Webseite vorhanden sind – als Beispiel.

OnPage Optimierung, zur Sache

Keywords finden

Keywords zu finden, da denkt man sich, dass ist doch ganz einfach – dem ist leider nicht so. Es gibt Keywords die zwar genau auf den Inhalt passen, dessen Optimierung sich aber nicht lohnt weil die Konkurenz, die mit Sicherheit eine Menge Geld in ihr SEO-Marketing steckt, so gut positioniert ist, dass man noch nicht mal eine Chance hat auf den ersten drei Seiten in den Google Suchergebnissen zu landen. Das Suchverhalten der Benutzer hat sich zu dem hin zu zwei oder drei Suchwörtern hin geändert. Auf eine Kombination dieser Wörter kann sehr viel besser optimiert werden. Außerdem hilft es dem Benutzer seine Suche zu spezifizieren und damit Ihren speziellen Inhalt zu finden.

Ein Keyword kann in der Onpage Optimierung schon reichen um sich eine Menge an Keywords einfach vorschlagen zu lassen. Mit AdWords, einem Dienst von Google, kann man sich mit dem Keywordplaner Vorschläge zu einem Keyword geben lassen. Außerdem kann man sich mit den Assoziationen von Metager relevante Keywords anzeigen lassen.

onpage-optimierung-google-adwords
Jedes einzelne Keyword, man kann diese auch in einer Textdatei speichern, wird mit dem Keywordplaner von Google übergeben um das Suchvolumen zu berechnen. Diese SEO Keywords werden aber in der normalen Suche von Google eingegeben um zu sehen wie sich die Konkurenz positioniert hat und welche Google Platzierung überhaupt angestrebt werden kann.

Bei der OnPage Optimierung kommt es auf eine gewisse Keyword-Dichte an. Alle 100 Wörter, sollte das Keyword verwendet werden um eine Keyword-Dichte von 1% zu erhalten. Das stört natürlich den Lesefluss des Benutzers wenn er ständig mit dem selben Wort bombardiert wird. Es ist trotzdem darauf zu achten, dass bei der OnPage Optimierung eine gewisse Relevanz für das Keyword da sein muss. Je stärker die Konkurenz positioniert ist desto ausgefeilter muss man Texte gestalten. Man sagt ein Text von 1000 Wörtern würde genügen – es kommt aber auch auf das Thema an und wie sich Mitbewerber bei Suchmaschinen platziert haben, also auf Basis der Konkurenz.

Latent Semantische Analyse (LSA)

Neben dem Keyword, der Keyworddichte und der Ausführlichkeit eines Textes trägt noch ein weiterer Aspekt für die Relevanz Ihrer Seite dazu bei, Im Google Ranking besser bewertet zu werden, zum Google-Ranking später mehr.
Die Latent Semtantische Optimierung (LSO) fragt explizit nach den Zusammenhängen. So werden manche Wörter und Wortkombinationen besonders oft miteinander in Verbindung gebracht. Mit SEMAGER können Sie diesen Wert ermitteln. Der Dienst ist absolut kostenlos. Er zeigt Ihnen eine ganze Menge Möglichkeiten zur OnPage-Optimierung.

Ein Erfahrungswert den ich an dieser Stelle teilen möchte ist, dass die Optimierung umso einfacher wird je mehr Text man hat. Dieser Text z.B. erreicht mit fast 1000 Wörter, an dieser Stelle, Werte über 80% im LSO für das Keyword OnPage-Optimierung und eine Relevanz von 80% des Keywords selbst bei 1,15% Keyword-Dichte. Mit kleineren Texten komme ich nicht über 80% LSO.

Vergessen Sie in Ihrem Eifer nicht, dass der Text für Menschen gedacht ist und nicht nur für Maschinen.

Google Page-Rank

Interner Linkaufbau

Page-Rank kommt vom Namen Larry Page nicht von Page wie Webseite. Dieser beurteilt, bzw. ranked Ihre Seite. Das geschieht meist von außen her. Die Anzahl der Suchanfragen, der Impressions, die zu einem Klick führen, die Anzahl der Backlinks aus der OffPage Optimierung und der Werbung die Sie schalten fließt in den Rank mit rein. Das besondere an diesem PageRank ist, dass dieser vererbt wird. Sowohl von Webseite zu Webseite als auch innerhalb Ihrer eigenen Webseite. Nemen wir an Sie haben eine Startseite mit Informationen zu Ihrem Kernthema, eine Landingpage die Sie auf weitere Keywords im Zusammenhang mit Ihrem Thema optimiert haben und eine Seite die nicht laufen will, schwer zu bewerben ist aber unbedingt gesehen werden soll. Durch das vererben von Links können Sie von besser besuchten Seiten auf diese weniger besuchte Seite verlinken und vererben damit den PageRank einer Seite zu einem Bruchteil an die weniger besuchte Seite. Verwenden Sie diesen Link auf beiden gut besuchten Seiten, dann steigt automatisch der PageRank für die schlechter besuchte Seite.

Damit haben Sie jetzt hoffentlich ein paar nützliche SEO Tricks und SEO Tools kostenlos kennen gelernt um Ihre OnPage Optimierung vorranzutreiben ohne, dass Sie tief in die Tasche greifen müssen.

PIWIK custom style / eigener CSS-Stil für den OptOut

Was ist PIWIK

Freie Webanwendung

Die kostenlose Open Source Software PIWIK ist eine alternative zu Google Analytics bei der Webstatistik. Anders als bei Google kann man den Datenverkehr auf dem eigenen Server halten. Bei Google läuft man stehts die Gefahr, als Person identifiziert zu werden. Ein selbst gehostetes PIWIK kann eine solche Zuordnung nicht herstellen.

Datenschutzbestimmungen mit PIWIK

Informationen zum Datenschutz mit PIWIK

Infos zum Datenschutz und weitere Bestimmungen mit der PIWIK Webanwendung findet man z.B. hier: http://www.datenschutzbeauftragter-info.de/fachbeitraege/piwik-datenschutzkonform-einsetzen/.

PIWIK OptOut

Datenschutz auf Verlangen

PIWIK stellt durch den Betreiber einer Webseite, welcher die Opt-Out-Funktion aktiviert und eingebunden hat, die Möglichkeit der Erfassung durch PIWIK zu widersprechen. Dadurch wird der Benutzer nicht mehr in der Webstatistik-Auswertung erfasst.

Für den Betreiber der den PIWIK OptOut in seine Webseite integrieren will stellt sich früher oder später die Frage, wie er diese Seite optisch an seine Webseite anpassen kann.

Hierfür gibt es ein Plugin im Marketplace welches das PIWIK OptOut ermöglicht. Im Grunde geht es darum, CSS Dateien von einer anderen URL zu laden oder direkt CSS für eine Domain zu speichern. Sie können dabei beliebig vielen Domains CSS-Stile zuordnen.

Wie wird der PIWIK OptOut anpassen

Um das PIWIK OptOut Plugin zu installieren, müssen Sie im Hauptmenü die Seite
für Einstellungen aufrufen.

Unter Plattform und dort unter Plugins können Sie über Neue Plugins installieren das Plugin CustomOptOut installieren. Anschließend müssen Sie es aktivieren.

Nachdem Sie das Plugin aktiviert haben, können Sie nach dem neuladen der Administrationsoberfläche unter dem neuen Menüpunkt Einstellungen » Custom OptOut entweder direkt einen Stylesheet speichern oder eine externe Datei angeben. Darauf folgend erhalten Sie folgenden iframe-Tag:

<iframe style="border: 0; height: 200px; width: 600px;" src="https://piwik.mydomain.de/index.php?module=CustomOptOut&action=optOut&idSite=1&language=de"></iframe>

Hierbei sorgt der Parameter idSite für das laden des entsprechenden Stylesheets.

Eigene Scripte

Immer Domain prüfen und als Plugin implementieren

Im Internet gibt es alternative Scripte die allerdings zwei Probleme verursachen. Es geht im wesentlichen hierbei darum, dass der Stylesheet in der URL übermittelt wird. Der erste Nachteil ist, dass man den Quellcode eines installierten Plugins ändern muss. Das führt dazu, dass das Plugin bei einem Update überschrieben werden könnte. Der zweite Nachteil ist, dass die übermittelte CSS-Datei nicht gegen eine Domain geprüft wird, was natürlich von einem Angreifer ausgenutzt werden könnte. Mit dem Custom OptOut Plugin aus dem Marketplace binden Sie einen Stylesheet an eine Domain und wenn Sie hierfür eine externe CSS-Datei verwenden haben Sie maximale Flexibilität beim Gestalten Ihres PIWIK OptOut.