Mein-Ding.net

Icon

Fundstücke, Fakten, Fachgesabbel

SEO Backlinks

Auf der Suche nach aktuellen SEO Backlinks stieß ich heute ursprünglich über Ebay auf seogen.de.
Sieht mir nach einem sehr ergiebigen SEO-Dienstleister aus. Betreibt wohl primär ein Blog-Netzwerk, welches automatiserte Unique-Content Artikel durch Textspinning erstellt und hieraus Links setzt.
Interessant finde ich, dass die auch die Ursprungstexte generieren. Mir persönlich gehen bei einigen Projekten langsam die sich nicht wiederholenden Textideen aus.

Also mal was neues. Zur Qualität der Texte, gerade auch der einzelnen Sätze im Gesamtkontext nach der bunten Neumischung – Also wieviel Sinn ergibt der generierte Text für tatsächlich mal reale, lesende Nutzer, die durch Umwege auf dem Blogtext kommen - lies z.B. auch: menschliche Google Search Quality Rater – kann ich (noch) nichts sagen, wird sich zeigen.

Mit einem Linknetzwerk aus PR0-PR3 Domains, alle Domains Google-Index, Artikel sind in wenigen Minuten im Index zu finden.
Und Preisen, die sich sehen lassen.

Also, wenn Ihr mal prüfen wollt, seht euch das Angebot an oder direkt Backlinks kaufen bei Seogen.de

Also ein durchaus lohnenswertes Tool im SEO-Baukasten. Mit aktuellen Google-Updates – Googles Panda & Penguin Updates sorgt bzgl. nicht natürlich generierter Links in der SEO Szene gerade für Furore – ist hier sicherlich Ausgewogenheit das Maß der Dinge. Die Startseite hat einen PR3, wird auch über seine Text Keywords gut gefunden, sieht sicher gut aus.

Aber mit durchdachten Konzepten wie Textspinning, Link-Wheels und Co., die natürliche Linksetzung in der Blogosphäre weitestgehend simulieren und dabei SEO-mäßig optimieren, erhoffe ich mir Probleme bei der Generierung von Backlinks in einem vernünftigen Maße, die also die aktuelle zeitliche Rate an neuen Links nicht exponentiell übersteigt, halbwegs umgehen zu können.

Einzigstes Grummeln im Bauch bleibt vielleicht, dass die Backlinks zumindest der Website tatsächlich alle auf Knopfdruck plötzlich erreichbar sind. Persönlich würde ich mir eine zeitliche Anpassung wünschen.
Also z.B. 15 Artikel in 30 Tagen online stellen, also quasi 2täglich etwas neues. Problem sehe ich aber eher bei Kundenforderungen, nicht primär beim Anbieter. Mit dem müsste man mal reden.

CakePHP IDE

Aktuell nutze ich Netbeans um mit CakePHP zu entwickeln.

Auf der Suche nach einer IDE , die das ganze RAD-Konzept von Cake auch versteht und entsprechendes Code Completition für Controllers/Models/etc. anbietet, stieß ich auf

Neptun IDE

Aktuell in der Beta-Phase, sieht das Ding schon recht gut aus. (Siehe deren Blog, Link in Fußleiste)
Ist ein SaaS/Cloud-Dienst, wer also rein offline entwickelt hat Pech. Mit Open-WLAN und den lachhaften Preisen für Mobiles Internet heutzutage sollte das jedoch kein wirkliches Problem sein.

Check it out!

buyer persona – praktischer Angriff auf die Verallgemeinerung

Den alten – und auch neuen – Marketinghasen sicherlich längst bekannt, bin ich gerade erst auf den Begriff “buyer persona” gestoßen. Praktisch bedeutet dies eine fiktionale Ausmalung – lebenslaufähnlich – eines potentiellen Interessenten anhand Alter, Interessen, Job, Bildung, Hobbies, usw.

Das Prinzip ist logisch und sicher unter anderem Namen längst angewendet, wir Programmierer nutzen ähnliches als Ausgangspunkt für die verschiedenen “User-Cases” zum Anforderungsmanagement und -feststellung mit UML und ähnliche Techniken.

Typischerweise sind solche “User-Cases” aber nicht so sehr auf individuelle Personen als auf deren Tätigkeiten und tatsächlichen Anwendungsfunktionen ausgelegt (IT<->Marketing).

Nichtsdestotrotz gefällt der Begriff “buyer persona” einfach besser, ist aussagekräftiger und vor Allem untechnisch.

Danke dafür ;)

inko – Klappe die Erste

Soeben musste ich hier ein wenig entspammen.
Und wo wir schonmal da sind, da bleiben wir auch hier!

Und wenn auch wenig konkretes zu sagen ist – oder viel zu sagen, aber zu wenig Zeit dafür, je nach gusto – gibt es dann doch eine kurze Mitteilung:

Aktuell frickele ich an meinem PHP-Framework. Keine angst, nicht noch eines der ultrahypen Alleskönner-PHP-Frameworks, die sich jeder programmiert.
Stattdessen – im eigentlichen Sinne des Worteseine – ein auf meine speziellen Anforderungen zugeschnittenes Rahmenwerk an Funktionen, Publication- und Workflowmanagementmodulen, mit denen ich schnell anwendungstechnische Anforderungen umsetzen kann.

Das ist also sowohl das CMS für die kleine (oder große) Webdesign-Dienstleistung, die ich hier im Großraum Augsburg demnächst anbiete.
Und auch die Arbeitsgrundlage Grundlage für individuaisierte Software zum Prozess- und Workflowmanagement.
Name: inko:FW
FW wie Framework. und inko wie intellikonzept wie intelligente Webprogrammierung.

Und damit das ganze nicht ganz so langweilig wird, hat das ganze lustige kleine Tools wie einen DataMapper (augenblicklich f. MySQL & SQLite) inklusive automatisierten Formular- und Validierungsgenerator – natürlich trotzdem voll flexibel und entsprechend jedes Layoutvorschlages anpassbar – sowie manuell nach Bedarf abstufbaren Cachingfunktionen, und…..
Na klar. Das Website/CMS-Modul ist natürlich optimiert auf nette Nachbarschaft mit Google&Co.

intellikonzept ist halt das intelligentere Online-Konzept ;-)

Tolle Pläne, das alles. Praktisch schwimme ich natürlich in Arbeit.
Gehe aber mal stark davon aus, euch bis Ende des Monats inko in der Version 1.0…naja, 0.9… vorstellen zu können.

Und damit dann auch endlich ein Stück mit meiner MVC-Diskussion voranzukommen bzw. diese abzuschließen.

Nun denn – bis dahin, fröhliches Coden, miteinander.
meinereiner

Fachinformatiker

Viel viel zu tun….und noch mehr.

a) Seit dem 21.07. bin ich nun fertig – Fachinformatiker-Anwendungsentwicklung (IHK), Pipapo und trallala.
b) Verzögert sich mein Zeitplan gerade mit Selbstständigkeit, Formularen und Beamtendeutsch massivst. Und nebenbei soll ich auch noch arbeiten.

Sorry also – Ich verspreche, es geht weiter!

Tobi

MVC und PHP – Buzzword oder was?

In Foren macht man interessante Beobachtungen. So konnte ich z.B. die Unsitte beobachten, bei jeder zweiten Frage mal grundsätzlich ein fröhliches “Iiiihhh… Das ist ja gar nicht MVC. Mach mal deine Hausaufgaben.” um die Ohren geprügelt bekommt. Google geizt auch nicht mit weiterführenden Informationen. Und dort einer ganzen Fülle an Begrifflichkeiten. Schichtenmodell, 3-Tier, Business Logic, …

Woher kommt eigentlich diese MVC-Geilheit? Muss das wirklich sein, um objektorientierte, ja überhaupt eine halbwegs brauchbare PHP-Anwendungen zu schreiben? Selbstverständlich. Sonst würde ja nicht jedes moderne Framework, das etwas auf sich hält, darauf basieren. Oder?

Dem möchte ich in dieser Artikelserie einsteigerfreundlich auf den Grund gehen.

  1. Was ist MVC (Diese Seite)
    Informationen zum Grundgedanken “MVC” sowie zu gängigen Problemen eben damit.
  2. MVC für Einsteiger – eine Alternative?! (folgt)
    Vorstellung einer einfachen Alternative zum MVC-Ansatz. Eine Lösung für alle, die Objektorientierung oder Technikgequassel nichts abgewinnen können.
  3. Eine spezifische Umsetzung (folgt)
    Meine Implementierung, die ich augenblicklich umsetze, wird vorgestellt und “zur Schlachtung freigegeben”. Kommentiert, kritisiert, diskutiert, erweitert nach Belieben.


Intention

oder: Warum dieser Text?

Bei mir sorgte die generelle “Möglichkeit zur Implementierung der Business Logic abhängig von Anwendungsfall und Implementierung der MVC-Architektur” erst für fragendes Kopfschütteln und anschließend für einige schlaflose Nächte. In denen habe ich mich nochmals intensiv mit Software-Design auseinandergesetzt. Ergebnis ist dieser kleine Exkurs mit der Zielgruppe “Einsteiger”, also Hobby-Coder, die einfach ohne große Einleitung und Wörterbuch der Software-Architektur programmieren wollen.

Daher versuche ich nach der Definition – frei nach dem Prinzip “Quo errat demonstrator” (sic!) – einen Weg aufzeigen, wie jeder, der schon die ein oder andere Codezeile geschrieben hat, ohne langwieriges Studium von Design-Patterns, abstrakten Beispielen und übermäßigem Objektorientierungsvokabular einen absolut gleichwertigen und leicht verständlichen Ersatz für MVC erhält.

Ich gehe im folgenden davon aus, dass du:

  • schon das ein oder andere PHP-Projekt umgesetzt hast,
  • Funktionsdefinition und -aufruf keiner weiteren Erklärung bedürfen,
  • die Grundlagen der Objektorientierung halbwegs kennst, mindestens jedoch weißt, dass man in PHP Objekte mit
    “$instanz = new Klassenname;” instanzieren kann, deren Methoden mit
    “$instanz->Methode();” aufruft und dir die Bedeutung und Unterschiede der Begriffe
    Klasse, Instanz und Methode grundlegend klar sind,
  • dich nicht mit mir darüber streitest, dass die Trennung von HTML und PHP ( in den meisten Fällen ) recht sinnvoll ist, und du dies auch regelmäßig halbwegs sauber löst ( ebenfalls – in den meisten Fällen)
  • allerspätestens jetzt weißt, das die Begriffe Entwurfsmuster und (Design-)Pattern “bewährte Lösungs-Schablonen für wiederkehrende Entwurfsprobleme in Softwarearchitektur und Softwareentwicklung” sind.

Doch nun – genug der Einleitung, Butter bei die Fische – Ein MVC-Ersatz
Dafür müssen wir wissen, was genau wir eigentlich ersetzen wollen. Also, was ist und welchem Prinzip folgt…

MVC?

Um es möglichst allgemeinverständlich und das Prinzip erläuternd zu halten, werde ich Begriffe und Abläufe im Folgenden zugunsten der Verständlichkeit stark vereinfachen (und/oder verunstalten). Der Softwarearchitekt, der sich hierher verirrt hat, möge mir den ein oder anderen hochgerollten Zehnagel verzeihen.

Das MVC-Pattern entstand während der 1970er aus/für/mit Smalltalk. Smalltalk war eine der ersten populären objektorientierte Programmiersprachen, und hat u.a. Java stark beeinflußt.

MVC – Model, View, Controller – beschreibt eine Verfahrensweise, die Anwendung in voneinander weitgehend unabhängige Teilbereiche logisch aufzuspalten. Damit sollen die typischen Ziele der Objektorientierung umgesetzt werden, die da beispielsweise wären

  • einfache Updates durch modularen Aufbau
    (“Modul austauschen” <=> “Ändere Zeile 1 dies, Zeile 21 das, …”);
  • Verschiedene Ausgabearten (“normales HTML”, Ajax, RSS-Feed, PHP auf Kommandozeile, etc)
    -> Wiederverwendbarkeit von Standardfunktionen
  • Austauschbarkeit von Komponenten (z.B. verschiedene Datenbankarten)

Dazu teilt der typische PHP-MVCler die Anwendung in 3 Teilbereiche auf – Hier vorgestellt anhand eines Onlineshops:

Views Ausgabe(formate) – Bei einer Artikelverwaltung beispielsweise ein oder mehrere HTML-Generatoren (Templates), PDF-Katalog-Generator, etc…
Models darzustellende Anwendungsdaten.
Also z.B. der darzustellende Artikel (ArtNr,Name, Beschreibung, Lieferant, …), bzw. eine Artikelliste.

Als Anwendungslogik (auch Business Logic, Geschäftslogik ) wird der Teil der “Software” bezeichnet, der die wesentliche Problemstellung löst, im Gegensatz zur Implementierung der technischen Umsetzung. In unserem Onlineshop werden hier Artikeldaten aus der Datenbank ausgelesen und für die Ausgabe vorbereitet.

Grundsätzlich “darf” der Ablauf der Anwendungslogik sowohl im Model als auch in Controller stattfinden.
Die direkte Verknüpfung und Abhängigkeit von den Anwendungsdaten (z.B. Datenbankbankmanipulation) ergibt oft die logische Zuordnung zum Model.

Das Konzept der Business Logic ist abstrakt und unscharf, da die beiden “Logik-Ebenen” nur bedingt trennbar sind. (siehe Erklärungstext)

Controller Die Anwendungssteuerung.
Fungiert oft als direkte Schnittstelle zwischen View & Modul und steuert den Programmablauf.


Man kann also sagen, dass zusätzlich zu der Trennung von Ausgabe und Programmlogik (HTML<->PHP) noch der PHP-Programmteil weiter unterteilt wird (Anwendungs- und Aufgabenabhängig); So können im Model wiederverwendebare Module entwickelt werden (z.B. eine Klasse zur Datenbankmanipulation), die unabhgängig von der jeweiligen Anwendungssteuerung agieren – also unabhängig, ob es sich nun um eine Adressverwaltung oder das Update einer CMS-Website geht.

Umgekehrt können verschiedene Module (bzw. Modulteile) verwendet werden, obwohl eine identische Anwendungssteuerung verwendet wird. Die selbe Adressverwaltung wird in unterschiedlichen Firmen also mal mit einer MySQL-, mal einer Oracle-Datenbank eingesetzt.

An sich eine tolle Sache, oder?

Wie du in der Tabelle liest, kann die Anwendungslogik (Business Logic) sowohl im Controller, als auch im Model untergebracht werden.
Anhand unseres Beispieles: Das Auslesen einer Preisinformation aus der Datenbank – ein ziemlich klares Model. Nun benötigen wir noch den Abzug eines Bestandskundenrabattes von 10%. Wird die Rabattstufe nun von der Anwendungssteuerung mit übergeben und im Model abgezogen, Ergebnis ist also der tatsächliche Endpreis? Oder nach Rückgabe des Nettopreises erst in der Anwendungssteuerung abgezogen, hieraus der Bruttopreis berechnet? Was widerspricht am wenigsten unserem Konzept von klarer Aufgabentrennung?

Alleine durch die unterschiedlichen möglichen Orte der Geschäftslogik sind “unterschiedliche” MVC-Implementierungen möglich. Aber dir ist sicher auch nicht die Formulierung “der typische PHP-MVCler” entgangen. Denn “das” MVC gibt es eigentlich gar nicht.

Definitions- und andere MVC-Probleme

Das MVC-Pattern entstand als Lösung für eine Smalltalk-Anforderung. War die View im Smalltalk-Damals wie im PHP-Heute für die Präsentation, also die Auslieferung der “Ausgabe”, zuständig, fangen wie schon angesprochen, spätestens beim Ort der Geschäftslogik die Diskussionen an.
Ähnlich undefiniert ist ein Ort für die Validierung der Benutzereingaben. Einfache Formatvalidierungen können im View realisiert werden (JS-”Validierung”…hüstel) – wird die Geschäftslogik stärker berücksichtigt, bieten sich eher Controller oder Model an. Und dank Ajax hat der findige Web 2.0 – Entwickler noch eine zusätzliche Sandbank zu umsegeln.

Effizienterweise integriert man Rohdatenformatierung und die Internationalisierung im Model, kann sich dadurch in der View auf die Template-Erstellung konzentrieren. Nur ist die Vermischung von Darstellung und Logik widersprüchlich zur Grundidee.

Noch offensichtlicher werden die Unterschiede allerdings beim Controller. In Smalltalk, in den späten 1970ern, hatte dieser die Aufgabe, die Anwendung von der Eingabe abzuschotten. Zum Beispiel war er dafür zuständig, Mausereignisse einem konkreten Bildschirmbereich zuzuordnen. Im Klartext: Den Klick auf den Koordinaten XY dem Button auf den selben Koordinaten. Nennen wir das mal “Eingabecontroller”.

Sieht man sich die heute verwendeten Controller an, findet sich davon nicht viel wieder. Denn heute sind es meist “Applikationscontroller”, eben unsere Anwendungssteuerung. Die “Eingabe” ist nämlich bereits aufgearbeitet und automatisiert – dem gemeinen PHPler auch als $_REQUEST et cetera bekannt.

Dieser Rollentausch ist übrigens kein Resultat der speziellen Bedingungen von Webanwendungen oder PHP.
So existiert bei den Microsoft Foundation Classes und auch bei Swing (Java) kein Conroller. Bei MS heißt es Document-View, bei Swing Model-Delegate. Mit anderen Worten – Der Controller verschmolz mit der View bzw. bei Swing mit Anzeige- und Eingabekomponente Delegate. Einfacher Grund: 30 Jahre Weiterentwicklung. Die ursprünglichen Aufgaben des Controllers übernehmen Bibliotheken, die wir mittlerweile ganz selbstverständlich voraussetzen. Der Controller wurde arbeitslos – bis Sun in J2EE zwei Varianten (Model 1 & 2) des MVC-Musters eingeführt (und inzwischen wieder verworfen) hat. Und aus letzerer resultiert das heutige Verständnis und der Einsatz von MVC.

Es sei nochmal darauf hingewiesen – Heute wird “MVC” als Architekturmodell verstanden und genutzt. Ursprünglich war es das niemals, sondern stattdessen eine Lösung für eine bestimmte Teilaufgabe: Trennung von Aktion und Präsentation.

Nachdem wir nun einige Probleme und Definitions- und Anwendungsprobleme diskutiert haben – geht’s im nächsten Teil weiter mit der Erstellung unserer MVC-Alternative.

Und bis dahin – Fröhliches Coden, allerseites

Quellen:

Wikipedia: Model View Controller

http://de.wikipedia.org/wiki/Model_View_Controller
Bernhard Lahres, Gregor Rayman:Objektorientierte Programmierung http://openbook.galileocomputing.de/oop/

Manchmal… tut Wissen weh. Unwissen auch.

Wissen ist nicht immer gut. Und Nicht-Wissen macht oftmals die Sache nicht viel leichter. Aus aktuellem Anlaß – Zwei Beispiele:

Oft möchten Kunden Rechtsauskünfte von uns Webdienstleistern. Denn wer hat nicht schon am Rande von Impressumspflicht, Abmahnwellen, etc. gehört. Selbstverständlich legitim, immerhin will man auf der sicheren Seite sein.

Hat man bislang als Dienstleister jedoch Auskunft erteilt, begab man sich auf gefährliches Terrain. Denn nach “altem” – immerhin erst von 1935 – Rechtsberatungsgesetz machte man sich mit eben einer solche Rechtsberatung strafbar.
Doof, dies nicht zu wissen.
Seit dem 01. Juli ist nun das neue Rechtsdienstleistungsgesetz in Kraft, welches dies weniger restriktiv regelt. Nach meinem laienhaften Verständnis auch des Beitrages auf rechtsanwalt.com bedeutet das unter Umlegung des Automechanikerbeispiels wohl eine deutliche Vereinfachung bei der täglichen Arbeit innerhalb des IT- und Wettbewerbsrechts. (Zu den Nebenwirkungen frage seinen Arzt, Apotheker oder Anwalt, ich will ja hier keine Rechtsberatung ausüben.)
Dies nicht zu wissen ist in der praktischen Arbeit hin und wieder ganz hinderlich.

Ein weiteres Beispiel:

Nachdem ich die halbe Nacht durchgearbeitet habe, wollte ich noch vor der Arbeit 1-2 Stunden schlafen.
Dann bin ich aufgestanden, hatte so weit ich mich erinnern kann einen tollen Freitag. Dann bin ich wieder ins Bett.

Nicht-Wissen, dass ich den Wecker überschlief und dies nur ein Traum war, bescherte mir einen erholsamen Schlaf und sogar zwei “Noch müde”-Umdreher.
Das Wissen darum zwingt mich hingegen zu einem sehr peinlichen Gespräch mit meinem Chef.

Das Wort zum Freitag: “Life sucks”.

Arbeitest du oder bloggst du schon?

Es ist so weit. Nach langfristiger Arbeitvorschieberei habe ich nun endlich doch (m)ein Blog installiert. Oben drauf gibts direkt mal das Grid-Focus-Template für den Augenkrebsfaktor.

Ein wenig Warten ist dagegen noch für das Logo angesagt. Denn für Photoshopbastelei brauche ich einen (gerade nicht gegebenen) exponentiellen Zeitfaktor. Immerhin bin ich ja kein Pixelschubser ;)

Um was geht’s?

Gute Frage. Antwort: Ja, genau!
Die tatsächlichen Themen und deren Ausprägung werden sich zeigen, grundsätzlich wird es wohl YAWB werden. Und ab und an ein wenig in mehr oder weniger wirkungsvolle Worte gehüllte Gedanken um das Leben der “normalen” – wer das auch immer sei – Menschen.

YAWB?

Selbstverständlich Yet Another Webworker Blog.
Nun, zumindest werde ich mir Mühe geben, dem “Yet” gerecht zu werden.

Themenspektrum ist also tatsächlich schwerpunktmäßig alles, das irgendwie mit Online-Marketing, Suchmaschinenoptimierung, SEM, Adwords & Co – aber auch mit deren technischer Umsetzung, also HTML/CSS, Javascript und der serverseitigen Umsetzung mit Apache, PHP/MySQl, …

Und nu?

Nixx nu – bin ich fertig, selbst ein zufälliger Vertipp-Besucher wäre im Bilde. Und ich gehe gleich arbeitenderweise frühstücken. In diesem Sinne: Bis die Tage – man liest sich.