Noch eine Kleinigkeit, die ich gerade selbst beim Erstellen einer Kontextmenü-Funktion festgestellt habe:
Damit ein "oncontextmenü" auch im Internet Explorer funktioniert, muss auf "document.oncontextmenu" zurückgegriffen werden, anstatt auf "window.oncontextmenu".
mal ganz davon abgesehen, dass diese Art "Kopierschutz" recht einfach
umgangen werden kann, wird sie doch immer wieder gerne von Webmastern,
die ihre Bilder und Quellcodes schützen wollen, angewandt.
Die Rede ist von der Rechtsklicksperre (das Kontextmenü wird bei einem Rechtsklick nicht angezeigt).
Programmiert werden kann diese Sperre ebenso einfach wie sie auch umgangen werden kann.
Um solch eine Rechtsklicksperre auf einer Seite einzubinden, wird einfach im Headerbereich folgendes eingefügt:
<script type="text/javascript">
<!--
window.oncontextmenu = function(){return false;}
// -->
</script>
So
wird kein Kontextmenü bei einem Klick mit der rechten Maustaste
angezeigt. (Auf diese Weise kann auch ein eigenes Kontextmenü in die
Seite integriert werden (wie zB. bei Google Docs).
Wie bereits angedeutet ist dieser Kopierschutz eher unwirksam, da er sehr einfach umgangen werden kann.
Um
den Quellcode anzuschauen, kann auch die Menüleiste des Browsers
bedient werden, um Bilder zu kopieren kann die so geöffnete
Quellcode-Ansicht genutzt werden oder noch viel einfacher: einfach die
Ausführung JavaScript im Browser blockieren und bei einem Klick mit der
rechten Maustaste poppt wieder wie gewohnt das Kontextmenü auf.
Die
Rechtsklicksperre macht meiner Meinung nach nur als zusätzliche
Kopierschutzmaßnahme Sinn und ist auch nur bei unerfahrenen Usern
wirklich wirksam.
Das Kontextmenü durch eine Eigenkreation zu ersetzen macht da schon mehr Sinn.
Objektorientierte Programmierung hat mehrere Vorteile.
Klassen können einfach erweitert und in mehreren Projekten wiederverwendet werden. Außerdem kann durch Objektorientierung die Produktivität im Team stark gesteigert werden. Wenn eine Klasse für die entsprechende Aufgabe vorhanden ist muss niemand wissen wie etwas gemacht wird, sondern nur, wie die Klasse bzw. die Objektinstanz so angesteuert werden kann, damit es gemacht wird.
Wenn ein PDF mit Produktinformationen aus einem Shop-System heraus erstellt werden soll, muss sich der Programmierer zum Beispiel nicht mit der generellen Erstellung von PDFs mittels PHP befassen, sondern er muss nur wissen wie er (zum Beispiel) die Klasse "FPDF" zum erstellen eines PDFs benutzt.
$pdf = new FPDF();$pdf->setFont('Arial', '', 12);$pdf->addPage();$pdf->write(5, 'Hallo! Ich bin ein PDF!');$pdf->output();
Die Klasse erledigt den Rest!
Es gibt zudem verschiedene Tools, die auch zu einer unkommentierten PHP-Klasse eine kleine Dokumentation der zur Verfügung gestellten Eigenschaften und Methoden erstellen.
So müssen Mitarbeiter nicht erst umfangreich zur Erstellung von PDFs, usw geschult werden, sondern müssen sich lediglich die Dokumentation der entsprechenden Klasse durchlesen (und verstehen).
Schreiben, verwenden und testen Sie einfach selbst ein paar Klassen und Sie werden noch einige weitere Vorteile erkennen.
Die Entwicklung eines Content-Management-Systems (oder auch "CMS") ist - das notwendige Fachwissen vorausgesetzt - nicht so kompliziert wie sich manch einer vorstellen mag.
Im Grunde reichen einige Kenntnisse in HTML, PHP und MySQL aus um ein einfaches CMS zu erstellen. Normalerweise sieht die Vorgehensweise bei der Erstellung eines CMS in etwa so aus:
- Planung (Umfang, Funktionen, Datenbank, Layout, usw)
- Anlegen der benötigten Datenbank-Tabellen inkl. Testdaten
- Erstellung des Frontends (das was der Nutzer sieht)
- Erstellung des Backends (der Administrationsbereich)
- Testen (Funktionalität, Sicherheit, usw)
Wobei im Frontend in den meisten Fällen ausschließlich lesender und im Backend sowohl lesender als auch schreibender Datenbankzugriff vonnöten ist. Bei der Frontententwicklung werdeb im Prinzip nur die im Backend einegetragenen Inhalte ausgegeben. Das Backend besteht hauptsächlich aus Formularen, mit deren Hilfe die Inhalte für das Frontend erfasst werden.
Sollten im Frontend Benutzereingaben entgegengenommen und ausgegeben werden, so ist unbedingt auf die Sicherheit zu achten! Eine verschachtelte Form der PHP-Funktionen strip_tags(), addslashes() und htmlentities() beim Speichern der Daten reicht dazu in den meisten Fällen schon aus.
Aber auch, wenn keine Benutzereingaben, sollte bei MySql-Queries die PHP-Funktion mysql_real_escape_string() verwendet werden, damit auch über eine Seitenauswahl á la http://www.example.com/index.php?site_id=123 keine Angriffe möglich sind. Probieren Sie einfach selbst einmal aus was passiert, wenn Sie bei solchen (ungesicherten) Abfragen Apostrophen und Anführungszeichen anstatt der site_id "123" eingeben.
Da ich nach dem letzten Beitrag ein paar Anfragen bezüglich der Umsetzung einer schriftlichen Planung bekommen habe, hier ein kleines Beispiel, wie die Planung einer der Startseite eines Browsergames aussehen könnte:
Die Startseite hat ein Hintergrundbild eines Weltraums mit einem viertel Planeten in der rechten unteren Ecke. In der linken oberen Ecke ragen 3 Raumschiffe herein.
In der horizontalen Mitte des Bildschirms befinden sich 3 untereinander angeordnete, halbtransparente "Fenster", welche nicht verschoben werden können.
Im oberen Fenster stehen aktuelle News, im mittleren befindet sich ein Loginberech bestehend aus je einem Eingabefeld für die E-Mail Adresse und für das Passwort, darunter ein "Passwort vergessen?"-Link und ein Login-Button. Im unteren Fenster befinden sich ein Werbesatz, der die User animieren soll sich zu registrieren und ein opulenter Registrieren-Button.
Nach der Betätigung des Login-Buttons findet (wenn eine E-Mail Adresse eingetragen wurde) eine Überprüfung statt, ob die Kombination aus E-Mail Adresse und MD5-verschlüsseltem Passwort in der Datenbank vorhanden ist.
Wenn nein, wird eine Fehlermeldung á la "Die Kombination aus E-Mail Adresse und Passwort ist falsch!" im Login-Fenster ausgegeben.
Wenn ja, findet eine weitere Überprüfung, ob der User freigeschaltet ist, statt. Wenn ja wird der User im Spiel eingeloggt (Session) und ein neuer Eintrag mit UserID, Uhrzeit, Datum, IP und Host wird in der Login-Tabelle der Datenbank angelegt.
Wenn nein, wird eine Fehlermeldung á la "Ihr Account wurde von einem Administrator gesperrt!" im Login-Fenster ausgegeben. Innerhalb der Fehlermeldung kann auf das Wort "Administrator" geklickt werden, sodass man zu einem Kontaktformular gelangt über welches die Administratoren per E-Mail und Ingame-Message benachrichtigt werden können.
Nach Betätigung des "Passwort vergessen?"-Links verschwindet das Loginfenster und ein "Passwort anfordern"-Fenster tritt an seine stelle. Das "Passwort anfordern"-Fenster hat die gleiche Größe wie das Login-Fenster.
Im "Passwort anfordern"-Fenster befindet sich ein Eingabefeld zur Eingabe der E-Mail Adresse, ein "Zurück zum Login"-Link und ein "Passwort anfordern"-Button.
Nachdem der "Passwort anfordern"-Button betätigt wurde, findet (wenn eine E-Mail Adresse eingetragen wurde) eine Überprüfung, ob ein User mit der E-Mail Adresse in der Datenbank registriert und freigeschaltet ist, statt. Wenn ja, wird ein neues Passwort generiert und dem User an die angegebene E-Mail Adresse zugesandt. Im "Passwort anfordern"-Fenster erscheint eine Meldung á la "Ihnen wurde soeben ein neues Passwort an die angegebene E-Mail Adresse zugeschickt.".
Wenn nein, wird eine Fehlermeldung á la "Diese E-Mail Adresse ist nicht im System registriert!" innerhalb des "Passwort anfordern"-Fensters ausgegeben.
Unten rechts auf der Seite befindet sich ein Link zum Impressum.
In der Tat sieht so ähnlich die Planung der Startseite meines Browsergames aus.
Die Vorgehensweisen der Planung eines Browsergames und eines "herkömmlichen" Webprojekts sind gleich.
Wie zu erkennen ist, ist jedes noch so kleine Detail wichtig und erwähnenswert. Im Prinzip muss auch jemand, der in 20 Jahren die Screens und die schriftliche Planung bekommt, das Projekt umsetzen können.
Man kann ohne weiteres sagen, dass die Entwicklung von Spielen zur hohen Programmierkunst zählt. Nicht nur die Programmierung allein ist hier ausschlaggebend, sondern vor allem die Planung des Spiels.
Ein Spiel, das nicht von hinten bis vorne komplett durchdacht und geplant ist, ist von vorneherein schon fast zum scheitern verurteilt.
Daher sollte man sich vor der Programmierung einige Gedanken zur Zielgruppe, zum Ablauf, zur Sicherheit und den verwendeten Technologien machen.
Bei der Entwicklung von Browsergames im Speziellen sollten zudem die Anforderungen, die verschiedene Browser und Betriebssysteme stellen, bedacht und berücksichtigt werden. Außerdem muss auf die Ladezeiten der einzelnen Spiel-Screens geachtet werden, da ansonsten evtl. User mit einer langsamen Internetverbindung (z.B. DSL 1000) abgeschreckt werden.
Die Usability - die intuitive Bedienbarkeit - sollte (wie bei allen Programmen) ebenfalls beachtet werden. Das beste Spiel und die beste Software ist sinnlos, wenn die Benutzung nicht eingängig bzw. zu kompliziert ist und deshalb von niemandem genutzt wird.
Bei der Spieleentwicklung im Allgemeinen ist es Ratsam, für manche Funktionalitäten auf fertige Klassen und Bibliotheken zurückzugreifen, da diese meist getestet und fehlerfrei sind. Ich persönlich bevorzuge es, für die Klassen für meine Projekte selbst zu entwickeln, weil ich so immer weiß, was die Methoden machen und wie ich sie benutzen muss. Außerdem kann ich die Klassen so perfekt auf meine eigenen Bedürfnisse anpassen, was in vielerlei Hinsicht von Vorteil ist, wie ich finde.
Wenn die Planung soweit fertig ist, zeichne ich mir meist auf großes Papier ("große Gedanken brauchen großes Papier") die einzelnen Screens des Spiels auf, bevor ich sie im Grafikprogramm umsetze. Das hat den großen Vorteil, dass man schon vor der digitalen Umsetzung ein Gesamtbild des Projekts vor Augen hat. So können leicht auch große Änderungen an den Designs vorgenommen werden. Das Zeichnen von Hand geht zudem viel schneller vonstatten als das Zeichnen am PC, sodass viel schneller Ergebnisse zu sehen sind.
Anschließend werden die gezeichneten Screens mit der Planung auf unregelmäßigkeiten verglichen. Sind alle Funktionen in den Screens berücksichtigt? Stimmt der Ablauf? Wurde auf die Usability geachtet?
Ist das geschehen und die evtl. notwendigen Änderungen am Design (oder an der Planung) vorgenommen, werden die von Hand gezeichneten Screens mit einem Grafikprogramm umgesetzt.
Nun kann entsprechend der Planung mit der Programmierung des Browsergames begonnen werden.
Seite für Seite. Erst das Layout, dann die Technik.
Ist alles fertig wird das Projekt noch ausgiebig auf semantische und syntaktische Fehler getestet.
Fertig ist das Browsergame. (So im groben ;-))
Das schwierigste Problem ist bei der Entwicklung solch komplexer Webprojekte, wie es ein Browsergame ohne Zweifel ist, meiner Meinung nach die Selbstmotivation. An einem gewissen Punkt stagniert die Entwicklung eventuell und die Motivation lässt dank kaum vorhandener Erfolgserlebnisse nach. Wer es nicht schafft, sich in solchen Momenten selbst zu motivieren und nicht diszipliniert genug ist um trotzdem weiterzumachen, der sollte am besten gar nicht erst anfangen ein Browsergame oder ein Spiel im Allgemeinen zu programmieren.
Ich entwickle, wie schon unter "Über mich" beschrieben, leidenschaftlich gerne dynamische Internetseiten. Das können Webprojekte verschiedenster Art sein. Meistens programmiere ich bis zu 3 Projekte parallel. Wenn mir bei einem Projekt der Kopf zu sehr raucht gehe ich zum nächsten über. So kann ich einen klaren Kopf bekommen ohne ineffektiv zu sein. In der Tat ist es so, dass ich früher, als ich noch Offline-Software entwickelt habe, zur Entspannung Internetseiten programmiert habe.
Zur Zeit entwickle ich ein volldynamisches Content Management System (kurz: CMS) mit einfach zu verwaltenden Templates usw, ein Browsergame und einen Intranet-Chat, der aber bis jetzt noch nur in meinem Kopf existiert.
Das CMS ist in der Entwicklung schon recht weit fortgeschritten, während sich das Browsergame in der aktiven Planung befindet.
...ist für mich eine der spannendsten Aufgaben, die ich mir vorstellen kann. Das Zusammenspiel verschiedener Programmiersprachen und -technologien wie PHP, JavaScript und AJAX fand ich schon immer überaus interessant!
Als ich im Alter von 13 Jahren anfing mich für Programmierung und die Erstellung von Internetseiten zu interessieren, wusste ich noch nicht, welches Potenzial in der Webentwicklung steckt.
Erst nachdem ich einige wenige Jahre mit der Entwicklung von Offline-Software verbracht hatte, erkannte ich, dass die die Entwicklung von dynamischen, webbasierten Programmen die Zukunft ist. Fortan bildete ich mich ständig in den Bereichen Webentwicklung und Webdesign weiter.