Nov 18 2008

PHP Programmierung – Entwurfsmuster (design patterns)

Tag: AllgemeinPhoscur @ 11:54

Vor ein-zwei Monaten habe ich Entwurfsmuster – in PHP – kennengelernt, obwohl ich davor schon viel früher über sie gestolpert war, hatte ich sie irgendwie nie richtig wahrgenommen oder einfach nicht verstanden.

Wenn Programmieren abstrakt ist, dann sind es Entwurfsmuster erst recht. Die Beschreibungen der Muster sind gar so abstrakt, dass man umbedingt Beispiele für die Anwendung braucht.

Auch wenn man sie leicht übersieht, stehen bereits im PHP Handbuch zwei Entwurfsmuster. Singleton und Fabrik. Ich möchte auf Singleton eingehen, hole aber noch etwas weiter aus.

Ich habe mich, als ich OOP anfing, gewundert wofür die public, protected und private Deklarationen sind und denn Sinn einfach nicht verstanden. In PHP dienen sie größtenteils gar nicht dem Programmierer selbst, sondern anderen Programmierern, die am selben Projekt schreiben. Sie schließen einfach die falsche Verwendung aus und kapseln Funktionen und Eigenschaften durch die Zugriffkontrolle. Für die Codefunktionalität sind sie somit unwichtig. Man könnte auch einfach alles public deklarieren, wenn man es trotzdem richtig verwendet (PHP4 ist noch alles public).

Singleton geht auf diesem Weg weiter, er erlaubt nur eine Instanz eines bestimmten Objektes, auf welche gleichzeitig global zugegriffen werden kann.

Das benötigt man zum Beispiel bei der Datenbank, die meist nur eine einzige Verbindung umfasst.

http://docs.php.net/manual/de/language.oop5.patterns.php

Es gibt aber noch viele andere komplexere Entwurfsmuster. Ich werde demnächst nochmal das neue Schema für mein Projekt erklären.

Entwurfsmuster zählen definitiv zur Professionellen Programmierung, das Niveau ist deutlich anders, als das simple Programmieren von einfachen Websites.


Nov 17 2008

German UGamelas Geburtstag

Tag: AllgemeinPhoscur @ 21:18

Ich weiß den genauen Geburstag nicht mehr, aber irgendwann dieser Tage hab ich mit Sascha am frisch gebackenen deutschen UGamela Forum herumgebastelt und die ersten User haben sich registriert. Zu dieser Zeit kamen auch die Versionen 0.3 und 0.3a heraus. Beide fürchterlich verbuggt und größtenteils unvollständig. Das ist nun ein Jahr her, seitdem ist viel geschehen!

Anfang Dezember habe ich das Forum neu aufgesetzt, weil ich dachte, dass wir kein PHPBBplus mit User-Sternzeichen brauchen^^. [Phlegmas Registrierungsdatum: 7.12.2007]

Danach kam noch die Version 0.4(a) raus, die Chlorel Anfang 2008 für sein XNova verwendet hat. Ich habe noch vor Jahrende den Downloadbereich gesperrt, weil 0.4a schon damals schlecht war und es nur so Bugmeldungen hagelte.

In der nachfolgenden Zeit habe ich das Release der Version 0.5 immer weiter verschoben und sehr viel dazu gelernt.

Anfang des Sommers gab es mal intern eine Version 0.4++, die irgendwie geleakt ist. Später habe ich dann „meine“ 0.5 an Sascha übergeben, der sie immernoch vertreibt, wenn auch mit wenig Andrang.

Zur Feier des Jahres habe ich eine Reihe von Themen für den Blog vorbereitet, die meine jüngsten Erkenntnisse dokumentieren und die Blogleser teilhaben lassen. Erwartet nicht zuviel, aber freuen dürft ihr euch drauf! ;D


Nov 06 2008

Ein Haufen UGamelas / XNovas

Tag: AllgemeinPhoscur @ 20:20

Wieviele XNova Spiele geistern da draußen im Netz herum? Keiner außer Google weiß das genau, aber die haben ja ganz andere Probleme. Jedenfalls sind es jede Menge, täglich kommen neue dazu, täglich brechen welche zusammen.

Ich möchte das nun einmal analysieren. Dazu versuche ich mich in die Lage eines der „Kiddies“ zu versetzen, die den Großteil der vermeintlichen Spieladmins darstellen.
Danach werde ich versuchen dem Problem auf den Grund zu gehen! Weiterlesen „Ein Haufen UGamelas / XNovas“


Nov 04 2008

MySQL Events

Tag: AllgemeinPhoscur @ 18:59

MySQL Events gibt es schon seit MySQL 5.1, aber ich habe sie erst diese Woche entdeckt.

Meiner Meinung nach eine geniale Erfindung, weil sie mit ein wenig MySQL Kenntnissen Cronjobs ersetzen kann. Die anstehenden Änderungen müssen zwar vollständig innerhalb des MySQL und damit in der Datenbank ablaufen, sind dafür aber deutlich flexibler und verlässlicher als Cronjobs. Für mich ist die Handhabung sogar einfacher.

Diese Events eignen sich auch um einen Daemon auf MySQL Basis zu schreiben, der sehr datenbanknah arbeitet. Events werden dadurch in Echtzeit ausgeführt, anstatt, wie beim klassischen Eventhandler, bei jedem Aufruf durchgeführt und zurückberechnet. Das macht einiges deutlich einfacher.


Nov 04 2008

UGamela Stille

Tag: AllgemeinPhoscur @ 18:51

Unheimlich.

Mein Forum scheint ausgestorben und doch wird es täglich von treuen Mitgliedern besucht. In Saschas verbleibendem Forum ist auch nicht viel los. Auf meinem Blog ist dies nun etwas Neues seit Wochen.

Gefällt mir natürlich genauso wenig wie euch! Wir haben schon November und ich bin immernoch nicht sonderlich weiter, so kommt es mir jedenfalls vor. Stattdessen denke ich darüber nach die Sprache zu wechseln (PHP+PgSQL/Python+PgSQL/Java+PgSQL), möchte aber nicht schon wieder aufgeben, was ich bereits geschafft habe.

XNova ist so aktiv wie immer, kann aber die Ruhe um UGamela nicht nutzen um einmal etwas wirklich Gescheites zustande zu bringen. Stattdessen gibt es diverse Kleinkriege zwischen Membern oder Großkriege um Copyrights – wie üblich.

Vor lauter XNova, XNova, XNOVA hört man gar nichts mehr von UGamela; kaum einer weiß überhaupt noch, dass XNova auf UGamela basiert.

Damit muss man leben.  Ich bin über meine Ruhe froh ;D


Okt 21 2008

Nichts Neues

Tag: AllgemeinPhoscur @ 21:26

Eigentlich schreib ich ja alle paar Tage was, aber gerade passiert einfach nichts.

Ich bin schulisch sehr beschäftigt, werde aber ab Ende dieser Woche wieder etwas Zeit haben und hoffentlich ein gutes Stück weiterkommen, in einer Woche Ferien lässt sich doch einiges machen hoffe ich.

Der Entwurf der Engine steht nun, ich muss ihn nurnoch verwirklichen. Dann kommt auch noch mal ein ausführlicher Artikel und später sogar ein Tutorial wie man mit der Engine als Basis ein BG schreiben kann.


Okt 01 2008

XNova News (de+fr) [Tratsch]

Tag: AllgemeinPhoscur @ 22:59

Ich komme nicht umhin mich etwas lustig zu machen.

Bei XNova ist wirklich einiges los. Immerwieder kommt oder geht jemand, ein Forum stürtzt ab und/oder wird neu aufgesetzt. Andrang ist trotzdem da, weil sie immernoch den alten Müll zum Download bereitstellen. Kann ich auch verstehen, es gibt ja (noch) nichts Besseres.

Diesmal geht Dr. Isaacs, der bisher sein Forum am erfolgreichsten gehalten hatte, auch wenn ihn früher einmal ein Hackerangriff entmutigt hatte (Das bestehende WBB xnova-germany.de Forum ist schon sein zweites). Auf Wiedersehn! Fürs Erste ein Legastheniker weniger.

Ich bin gespannt, ob der Rest des Teams zusammenhält oder ob das Forum mal wieder zusammenbricht.

Ich hatte heute einen Chat mit Flousedid (hat die neue französische Seite aufgesetzt), weil ich mal wissen wollte was aus meinen Kumpel Chlorel geworden ist. Ich hatte von ihm lange nichts gehört, wahrscheinlich hat er mich blockiert weil ich ihm nicht nützlich war, keine Ahnung. Jedenfalls hat er woanders zutun und verunstaltet nichtmehr altneuen XNova-UGamela Code.

XNova-NextGen ist ja der Codename für die neue Version der Franzosen, die laut Flousedid komplett neu geschrieben wird. Ich habe gar nicht versucht rauszufinden wann sie etwa fertig werden wollen, sondern nur gefragt wieviele „gute“ Programmierer dabei wären. Auf Nachfrage von ihm sagte ich, dass ich Leute meine die besser als Chlorel seien. Darauf kam, Zitat: „mdr, 0“. Wir können also gespannt sein, was aus einem Projekt mit null guten Programmieren wird.

Ich kann leider nicht mit einer neuen Version in die Presche springen, wie ich es gerne würde. Ich bin einfach zu langsam, wenn ich – aus meiner Sicht – guten Code produzieren will. Aber es geht sicher noch viel besser.


Sep 21 2008

Browsergame Eventhandler

Tag: Allgemein,EntwicklungPhoscur @ 22:22

Das Thema ist wohl bekannt und wurde, wie man über Google merkt, oft diskutiert. Ich berufe mich deshalb nicht nur auf meine Erfahrung, sondern möchte auch darauf hinweisen, dass man bei Google Ähnliches findet.

Das große Problem:

Bei einem Browsergame wie UGamela läuft die Zeit weiter, wenn der User sich abmeldet. Dem Server ist es sowieso egal, ob der User gerade eine Page liest, es kommt immer nur auf die Momente an, zu denen jemand klickt und Daten nachgeladen werden.

Annäherung:
Das Naheliegendste ist es zu denken, dass die Daten immer aktuell gehalten werden, dann wäre ja alles klar. Aber das ist mit einfachen PHP Scripten nicht möglich und wäre auch arg ressourcenverschwenderisch.

Lösungsvorschläge:
Die Erste und wohl beste Methode wäre es, aus komplexeren Problemen, wie den Flotten, Events, kleine Jobs für einen Daemon, zu machen. Daemon bedeutet ein Script, fast eigenständiges Programm, das permanent läuft und Ereignisse dann abarbeitet wenn sie Geschehen. Diese Möglichkeit wäre eindeutig einfacher, wobei man nurnoch auf sehr seltene Überscheidungen achten müsste (zwei Events zum gleichen Zeitpunkt mit überschneidenden betroffenen Objekten), aber selbst das wäre kein Problem, das es ja nur eine Daemon Instanz gibt, also keine Race Conditions.

Ein solcher Daemon müsste tiefer im System sitzen als ein kleiner PHP Script im Apache Server und sollte nach Möglichkeit in einer schnelleren Programmiersprache als PHP geschrieben sein ( C(/#/++), Java ). Daher ist dafür in jedem Fall mehr als ein einfacher Webspace nötig. [OGame hat nach eigenen Angaben ein C oder C++ basiertes Script und extra Server nur für die Kampfberechnung.]

Damit möchte ich mich nicht zufrieden geben. Früher habe ich UGamela gerne mit phpBB verglichen, aber so einfach ist das dann doch nicht. In einem Forum passiert nichts wenn es nicht ein User direkt tut… Trotzdem will ich den Spagat schaffen, dass das Spiel auch auf einem einfachen Webspace läuft.

Hier mein Ansatz:
Eine Berechnung wird erst dann nötig, wenn die Daten benötigt werden, aber dann muss gründlich berechnet werden. Um die Rohstoffe korrekt zu berechnen habe ich MySQL Prozeduren geschrieben, die das erledigen bevor der Apache überhaupt was von den Daten zu Gesicht bekommt. Bei den Flotten will ich auch nur die berechnen, die gerade relevant sind. Aber ich will keinem user Wartezeiten zur Kampfberechnung aufbürden. Der Einzige, der nicht meckert – außer möglicherweise dem Apachen selber – wenn der Script zu lange braucht und selbst auf einem Webspace zur Verfügung steht, ist der Cronjob. Allerdings höchstens alle zwei Minuten. Nun können wir uns ärgern, dass wir dann die Kämpfe nicht zum richtigen Zeitpunkt berechnen lassen können oder wir schieben die Kämpfe in dieses zwei Minuten Raster. Dann findet der Kampf halt nicht sofort statt wenn die Flotte ankommt, sondern „läuft“ während einer gewissen Zeit, zum Beispiel könnte man eine Runde alle zwei Minuten ausrechnen, der User könnte dies „live“ mitverfolgen und sogar seine Flotte während des Kampfes zurückziehen. Auf jeden Fall ist dies um einiges realistischer als der 10-Sekunden Kampf…

Die meisten anderen Events werden ähnlich wie die Rohstoffberechnung von MySQL Prozeduren abgearbeitet. Nun sorge ich mich langsam nicht mehr um meinen Apachen sondern um meinen MySQL Server… Überlast? .. Ich bin mir da noch nicht sicher, aber ich werde auf jeden Fall mit einem Sessionmanagement aushelfen, teils werden wir gar keine Queries oder Prozeduraufrufe brauchen, hoffe ich.

Ich bitte hier nur die Leute, die wirklich etwas davon verstehen zu posten, ansonsten garantiere ich nicht dafür, dass ich die Kommentare stehen lasse.


Sep 07 2008

Spiellogik: Koordinatensystem (Update)

Tag: Allgemein,EntwicklungPhoscur @ 18:23

Linear sollte es nicht sein (OGame)..

Zuerst wollte ich ein dreidimensionales System aufbauen, welches von der Berechnung nicht ultimativ schwerer gewesen wäre, aber eindeutig unübersichtlicher und unhandlicher bzw schwierig darzustellen wäre.

Die Wahl fällt so auf ein zweidimensionales System, welches man auch in einem Bild darstellen könnte.

Weiterlesen „Spiellogik: Koordinatensystem (Update)“


Aug 22 2008

UGamelas OGame Ähnlichkeit

Tag: AllgemeinPhoscur @ 04:03

UGamela war anfangs als OGame Clon geplant und meist auch so verwendet. Problem dabei ist natürlich das Copyright der Gameforge, das vor allem klar auf ihrem Skin (Bilder) und den Texten liegt. Dazu kommen noch ein paar Scripte. Wie ich bereits mal erwähnte gibt es ja ein Gerücht, dass einmal sogar durch ein Leck serverseitige OGame Scripte ergattert werden konnten (PHP). Klar ist aber nur das Copyright auf dem Javascript, HTML und CSS Code. Das auch schon verletzt wurde. ich bin mir nicht sicher, aber es ist gut möglich, dass sich immer noch eine OGame Javascript Datei im XNova und sogar UGamela Release befindet. Jedenfalls tat sie das einmal. Aber mittlerweile sind vor allem Texte und teils Namen geändert. Vom Verwenden eines OGame Skins rate ich ab, als Standard ist er jedenfalls nicht eingestellt.


« Vorige SeiteNächste Seite »