Blog über Magic: the Gathering und Brettspiele

Couchmagic

Blog über Magic: the Gathering und Brettspiele

Finde im Blog:

Neugeschriebenes RSS Feed

Kommentiertes RSS Feed

Gruppiertes

MetaInfo

April 2024
M D M D F S S
1234567
891011121314
15161718192021
22232425262728
2930  

Social Media

Hinter den Kulissen

atog28

Ich hab mir gedacht, ich erzähle euch mal, was mich die letzten Tage so bewegt hat – und dass, wo ich doch eher unbewegt im Bett lag. Schliesslich ist das doch der Sinn eines Blogs, dass man etwas von sich selbst erzählen kann.

So habe ich mich wieder als Programmierer betätigt, musste Wizards aber auf ihre Anfrage, ob ich ihnen bei MTGO v3 aushelfe, einen Korb geben. Nicht ganz uneigennützig… (couchdraft geht nur mit v2.5) – so bleibts erstmal bei der alten Version. hrhr

Ich programmiere sehr gerne und habe neuerdings, nach einigen Ausflügen in Visual Basic und Makroprogrammierung in Excel und Access (ich denke, da fast alles gesehen zu haben) mich endlich in die Welt von PHP und Co getraut.

Wobei „und Co“ warscheinlich JavaScript ist, in gewisser Weise aber auch diese von Access schon ansatzweise bekannte SQL-Sprache. PHP ist ja auch sinnvoller, da sich inzwischen wirklich alles früher oder später im Internet breit macht.

Daher quäle ich euch heute mit meinen Ergebnissen. Meine Deckdatenbank beispielsweise. Wobei ich hinzufügen muss: Solange sie noch da ist.

Brandstifter Direkt zum UPDATE
Wie ich heute morgen feststellen musste, hat sich nämlich eine Horde Terroristen über meine Deckdatenbank her gemacht und mehr als die Hälfte gelöscht – ja, die Datenbank beginnt nun mit 39 und hat ein Loch zwischen 48 und 63.

Insgesamt 51 Decks hat jemand (eventuell waren es auch viele) gelöscht. Gut, das kommt eben davon, wenn man zwei Fehler kombiniert. Die Löschfunktion, die ich anfangs häufiger brauchte, ist inzwischen fehl am Platz, aber immer noch verfügbar. Dabei gibt es ein Zugriffmerkmal, dass Decks auf inaktiv setzen kann ohne sie zu löschen – ich habe es nur noch nicht an Stelle des tatsächlichen Löschens eingebaut. Immerhin ist das Löschen über eine Benutzerberechtigung abgesichert, so dass nicht jeder Decks löschen kann.

Aber in der Benutzerberechtigung (über das Setzen eines Cookies) war der zweite Fehler, der, das ist der Stand meiner Erkenntnis, den Keks immer wieder herstellt, auch wenn das Skript zum Erstellen des Cookies eigentlich einen nur mir bekannten Aufruf benötigen sollte und den Cookie ansonsten löscht. Dachte ich zumindest…

Jemand hat diese beiden Fehler entdeckt und sich einen Spass gemacht, vor allem alte Decks zu löschen. Ich kann mir nicht erklären, warum – diese Psychologie wird mir nicht zugängig, je öfter ich auch darüber nachdenke, aber es ist so. Lässt man alles soweit „offen“ – das trifft schliesslich auch auf die Anmeldungen bei Couchdraft und Couchmagic zu, dann gibt es Personen, die mit dieser geteilten Art nicht zurecht kommen. Schade.

Ob ich es mal mit einem Fundraiser probieren soll? Eine Spende zur Wiederherstellung der Datenbank aus Backups – die mein Provider sich gut bezahlen lässt? Wer entsprechendes Engagement hat, bitte per mail an mich (Klammerausdruck durch ein @-Zeichen ersetzen) oder in die Kommentare. Aber warscheinlicher wird sein, dass ich es aus Mitteln von Magicuniverse decken kann.

Darüber wollte ich auch noch was schreiben – aber die Brandstifter-Sache hat es nun verdrängt. Lest ihr darüber eben erst beim nächsten Mal.

Deck.php
Nun aber zum eigentlichen Erfolg. Ich habe die Funktionalität meiner Deckdarstellung wesentlich erweitert (so weit, dass mir bald nichts mehr Neues einfallen will). Hier mal ein Deck, dass ich noch in der Datenbank gefunden habe:

Bei der Durchsicht meiner Blogeinträge fiel mir auf, dass ich die Darstellung noch nie erklärt habe. Also jetzt: wie das Deck heisst, welches Format wann wer womit gespielt hat, dürfte sich auf einen Blick erschliessen. Das ist trivial und bedarf keiner weiteren Erklärung. Dass der Autorenname auch noch ein Link auf die Quelle des Decks ist, sollte ich aber mal erwähnen.

Neu ist nun, dass beim Ãœberfahren der Kartenlinks die entsprechende Karte in einem Mouseover dargestellt wird. Da ich hier ohne Bilder – nur mit den Textlinks – arbeite, ist es mit einem Preload etwas tricky (eventuell ein späteres Projekt) und die Darstellung des Mouseover-Bilds verzögert sich durch die Nachladegeschwindigkeit. Bisher funktioniert das auch nur mit korrekt geschriebenen und englischen Kartennamen.

Auch die Anzahl der Karten in Maindeck und Sideboard wird schon korrekt gezählt. Ich plane hier noch die Unterteilung in Kartentypen, was aber wohl eine weitere Datenbank (und deren Pflege – Örks!) benötigt. Ich sprach bereits mit Schöppi und Evil – beide gaben übereinstimmende Antworten, daher wird es wohl so sein.

Jedes Deck (das noch da ist – sic!) hat einen eigenen Counter, der als Link auf eine eigene Seitendarstellung dient. Die Decks lassen sich implementiert (wie in diesem Blogeintrag) oder als eigene Seite aufrufen. Wenn ein Deck separat aufgerufen wird, zeigt es auch eine etwas andere Funktionalität, dann gibt es Links für Foren und HTML unter dem Deck und der Mouseover wurde durch ein weniger störenendes Kartenbild in der rechten Seitenleiste ersetzt.

Der Counter steht entweder im Bereich „Info“ – welcher sich übrigens automatisch auf die kürzere Seite schreibt, meistens das Sideboard – oder, wenn es Eltern- und Kind-Verknüpfungen gibt, zentriert unter dem Deck. Dann kann man die Historie des Decks mit seinen Entwicklungen verfolgen.

Neuerdings auch über eine „Compare“ Funktion, die zeigt, welche Änderungen am Deck passiert sind. Während ich hier schrieb, wurden übrigens weitere Decks gelöscht, daher kann ich euch nur diesen Link anbieten, um das zu testen: Riesendeck v1.4.

Ich mag diese Funktion, die auch nicht ganz so einfach zu programmieren war, wie ich mir das zunächst dachte.

Ausserdem funktioniert nun endlich der Link auf Evil’s Deckstats auch in der implementierten Fassung. Hier kämpfte ich lange Zeit mit etwas, das UTF-8 heisst, aber die Lösung war hier sehr einfach. Durch ein „<pre>“ Tag vor und nach dem unsichtbaren Formular wurde der Text korrekt an Evils geniales Skript übermittelt, in dem man sich die Statistiken zum Deck ansehen kann.

Die nächsten Schritte sind allerdings wieder unsichtbarer Natur, denn ich werde von der offenen Schnittstelle zu einer Anmeldung wechseln. Am liebsten wäre mir eine Verwendung der wp_users, denn ich habe ja schon registrierte Benutzer in WordPress. Vielleicht hat ja jemand einen Tipp, wie man die entsprechenden Benutzerberechtigungen in eigene php-Skripte einbinden kann.

Endlose Freude
Beim Sichten von log-files und Statistiken fiel mir auf, wie hoch der Traffic im Januar war. Messe ich meine Besucher in Megabyte, dann haben annähernd 2 Gigabyte Besucher meine Seite im Januar frequentiert. Erheblich daran mitgewirkt hat sicherlich die Couchdraft-Seite, deren bildintensive Darstellung mitverantwortlich ist.

Ãœbrigens gibt es für den Druck optimierte CSS-Layouts auf Couchmagic, falls ich es noch nicht gesagt habe – dazu gehört, dass die Hälfte an Papier bei Couchdraft eingespart wird, da beim Druck die Bilder weggelassen werden und nur die Textlinks erscheinen.

Ich möchte daher diese Gelegenheit nutzen, um mich bei meinen Besuchern für die Aufmerksamkeit, die sich im enorm gestiegenen Traffic ausdrückt, zu bedanken. Wenn ich wieder Magic spiele, gibt es auch wieder „Secret Tech“. Am 23.2. ist schliesslich das Phoenixhort-Turnier in Essen.

UPDATE – 22:06h


Zunächst habe ich aus dem vor diesem Artikel gezogenen Backup eine teilweise Wiederherstellung durchgeführt und mich dann auf die Suche gemacht. Ihr kennt diese Dokumentationen von Flugzeugunglücken auf N24?

„22:06h – wir haben nun die Vorgänge, die zur Katastrophe führten, analysiert. Viel komplexer als vorher angenommen, können die Spezialisten rekonstruieren, welche verhängnisvolle Verkettung von Umständen das Unglück auslöste, bei dem 51 Decks ums Leben kamen“ (oder so…)

Beginnen wir mit dem Cookie-Skript. Wie ich schrieb, dachte ich, es arbeitete fehlerfrei, heute morgen dachte ich dann, es sei defekt – die letzte Wahrheit (auf die kommt es an!) ist die, dass es tatsächlich fehlerfrei seinen Dienst versah.

Warum also wurde den Besuchern der „Delete“ Knopf angezeigt, obwohl das Cookie einwandfrei arbeitete? Schauen wir uns dafür diesen kleinen Code-Schnipsel an:

if ($delete == "anybody" or $delete = "atog28") {
	echo '<li><a href="cm_koala.php">Destroy Cookie</a></li>';
	}

Fällt euch etwas auf? Diese Abfrage steht vor der Anzeige der „Delete“-Links. Versierte PHP-Programmierer haben es sofort entdeckt. Es fehlt ein Gleichheitszeichen bei der zweiten Abfrage! Dadurch wurde, egal, was der Keks sagt (wir fragten ihn vorher), immer die Admin-Berechtigung eingeschaltet. Eine kleine Ursache, aber eine fatale Wirkung!

Kommen wir nun zum nächsten Puzzle-Stück. Wer klickte auf alle Links um die gesamte Datenbank zu löschen? Waren es verantwortungslose Unruhestifter? Sollte es mit der Magic-Community so schlecht bestellt sein? Werfen wir dazu einen Blick in die Log-Files. Glücklicherweise rufe ich ein separates Skript zum löschen auf, so ist der Zugriff schnell ermittelt.

Bei allen Einträgen der delete.php, ich habe keine Ausnahme gefunden die pfirfel’s Kommentar rechtfertigen würde (aber ich habe auch nicht danach gesucht), bietet sich folgendes Bild:

66.249.66.243 – – [11/Feb/2008:19:55:52 +0100] „GET /robots.txt HTTP/1.1“ 404 1503 „-“ „Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)“
66.249.66.243 – – [11/Feb/2008:19:55:52 +0100] „GET /delete.php?id=5 HTTP/1.1“ 302 5 „-“ „Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)“
66.249.66.243 – – [11/Feb/2008:19:55:54 +0100] „GET /decklist.php HTTP/1.1“ 200 7087 „-“ „Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)“

Für die technischen Mondkucker: Auslöser war der Bot von Google, der die Seiten scannt. Da der Link auch ohne Keks angezeigt wurde (Kekse nimmt der Bot nicht, warum auch immer, ich vermute: Weissheitszähne…) folgte er in der Annahme, auf eine neue Seite zu kommen, dem Lösch-Knopf und sprang wieder zurück.

Eventuell sollte ich eine

robots.txt

schreiben damit das nicht nochmal passiert, aber das ist ein anderes Thema. Mein Glaube in die Magic-Community ist wieder hergestellt – da habt ihr noch mal Glück gehabt. Was pfirfel angeht: drei Draftwalkthroughs und ein Artikel für MU!

Ob die Datenbank wieder hergestellt werden kann, bleibt abzuwarten. Den Restore-Auftrag habe ich gerade gestellt, aber die Backups gehen eventuell nicht weit genug in die Vergangenheit. Die Skripte sind nun geändert, ein Löschen ist nicht mehr möglich (nur noch ein Setzen eines „ich bin gelöscht“ Flags, wie es sich gehört). Den Rest dazu (dass die gelöschten auch nicht mehr angezeigt werden) muss ich noch programmieren, aber das kommt dann später…

Da hab ich dann ja wieder was zu tun. Nach der „Bindestrich-Affäre“ ist mein Lieblingsbuchstabe heute der Doppelstrich (das Gleichheitszeichen).

=

7 Kommentare

  1. Marc O. aus E. meint:

    Das Tunier findet in der Villa Rü statt. Wollte es nur anmerken, nicht das da am Samstag Leute vor der falschen Location stehen. Im Phönixhort wird am 21.02 ganz normal Casual gespielt…

  2. pfirpfel meint:

    Ich gebe es zu. Ich konnte der Versuchung nicht trotzen. Einmal habe ich in deiner schnuckligen Datenbank auf „Löschen“ gedrückt. Das ist wie das hier: http://www.wimp.com/press/

  3. Belcadrach meint:

    Da macht ihr ein Turnier direkt um die Ecke und ich bin in Belgien…
    @Atog: Was ist mit Wien?

  4. atog28 meint:

    ROTFLMAO – nun hat noch jemand BaJis Deck getötet. Ihr Schweine! (ok, auch ein bisschen Kindergarten, aber Schweine, nonetheless. Kindergartenschweine…^^)

    Wien? Hab ich wohl „versehentlich“ gelöscht… Wien gibt es nicht mehr.

  5. atog28 meint:

    Soooo… ich habe das wieder hingebogen, und hier steht das Update!

    Wien – ich weiss nicht genau ob ich da hin möchte. Kläre ich Montag.

  6. eneny.unkown meint:

    Ohhh man.
    Wie kannst Du nur eine Abfrage bauen, indem direkte Zeichenketten vergleichst.

    Mach es über die interene User ID, ansonsten wird dann script immer dann wieder fehler machen wenn du deinen nick änderst.^^

    NENENE das kommt von quick&dirty

    lieber vorher für zeichenketten konstanten verwenden.
    Ist nicht nur non-nooby sondern vermeidet auch Fehler.

  7. atog28 meint:

    Hmjam… Scheinbar können Kekse noch mehr? Die Idee mit der User-ID gefällt mir, danke.

    Ich lese bisher den $delete Wert aus dem Keks und der Code-Schnipsel ist nur ein Beispiel. Da steht nicht wirklich mein Username im Keks, es sollte die Abfrage nur verdeutlichen. Aber quick’n dirty trifft’s.

Kommentieren...

Hinweis: Moderation der Kommentare ist aktiviert und kann den Kommentar verzögern. Du brauchst deinen Kommentar nur einmal zu übermitteln. Die Felder mit Sternchen bitte immer füllen. Mit Absenden des Kommentars erklärst du dich mit den Hinweisen im Impressum einverstanden.

© 2008 by Couchmagic | Impressum | Powered by Wordpress


In Couchmagic anmelden

Die auf dieser Seite dargestellten Informationen geben nur die Meinung des jeweiligen Autors wieder und entsprechen nicht notwendigerweise der Meinung der mit dem Autor in Verbindung zu bringenden Gruppierungen (wie zum Beispiel Arbeitgeber, Familienmitglieder, Vereine).


Opfert mehr Artefakte!

Wizards of the Coast, Magic: The Gathering, and their logos are trademarks of Wizards of the Coast LLC in the United States and other countries.
©1993- Wizards a subsidiary of Hasbro, Inc. All Rights Reserved.


This website is not affiliated with, endorsed, sponsored, or specifically approved by Wizards of the Coast LLC. This website may use the trademarks and other intellectual property of Wizards of the Coast LLC, which is permitted under Wizards' Fan Site Policy. For example, MAGIC: THE GATHERING is a trademark of Wizards of the Coast. For more information about Wizards of the Coast or any of Wizards' trademarks or other intellectual property, please visit their website at www.wizards.com