Technik, Gothic und Anderes

Technik ist Spiel, Gothic ist ernst und Zeit hat man zuviel

  • Kategorien

  • Tags

  • Archiv

  • Links

    zu Bee5

    blog.oncode.info läuft bei Cyon und ich bin sehr glücklich damit.

Dynamische Signatur – e-Schrecking für Foren, MySpace, …

Geschrieben von skaldrom am 28. July 2008

Dynamische Signatur von Danasoft Ich mag es sehr, Leute zu ängstigen. Früher, zu den Gothenzeiten, habe ich dafür ein ganzes Arsenal von Dingen gebraucht: Schminke, Linsen, künstliche Fingernägel, … Heute reicht meine Anwesenheit und mein Gesicht :-) . Wenn ich mich unter besonders verständnisvollen Menschen befinde, breche ich in spontane, apokalyptische Prophezeiungen oder aber auch abwechselnd in ebenso apokalyptisch anmutende Zuckungen aus.

Als besonders ängstigend hat sich auch folgendes Vorgehen herausgestellt: Man fixiert eine Person, lächelt wissend, nickt ebenso wissend und macht wissende Bemerkungen wie “ja, es ist schon schwer” oder aber auch “ich denke Du machst bald einen Fehler”.

Online kommt mein Gesicht nicht so zur Geltung und Zuckungen fahren über die Webcam auch nicht so apokalyptisch durch Mark und Bein, also haben acht von neun Stimmen in meinem Kopf gesagt, ich soll den letzten Trick elektronifizieren (eine Stimme summte die Melodie von Tetris).

Danasoft hat schon was sehr Nettes, wie man am Lead-Image erkennen kann. Ich will aber nichts Nettes, sondern was Böses, darum habe ich die Pöhse Horror Pranke (PHP) hervorgeholt und was gecoded.

Grundidee

(Reload für weitere Weisheiten).
Dynamische Signatur

Es soll eine Signatur (oder Batch, Widget, Papperl, …) werden, die man in Foren (MyFace, SpaceBook, prollVZ, …) und Blogs verwenden kann, und das vorgibt mehr zu wissen als es tatsächlich tut.

Noch etwas Geschichtliches: Ich weiss noch, als die ersten Besucherzähler mit Bildern gemacht wurden, weil es noch keine richtige Möglichkeit gab, Texte zu verändern! Jaja, so war das damals!

Informationsquellen

Grundsätzlich gibt es drei Informationsquellen wenn man in einem Forum einen Link zu einem eigenen Bild posten darf:

  • Die IP Adresse (Ort, Land, ISP, …)
  • HTTP-Header (Browser, OS, Bildschirmauflösung, Referer, …)
  • Cookies (Anzahl Besuche, Zeit der Besuche, Veränderungen, …)

Ort aus IP

Grundsätzlich könnte man aus IP-Adressen eine Datenbank anlegen und jeweils dazu schreiben, wo die entsprechende IP-Nummerzu Hause ist. Zum Glück hat das schon jemand gemacht und es gibt freie wie auch kommerzielle Angebote. Um den richtigen Gruselfaktor zu kriegen, hätte ich schon gerne eine Auflösung bis zur Stadt gehabt. Freie Projekte gehen leider oft nur bis Land. Kommerzielle Lösungen sind entweder auf eine bestimmte Anzahl Abfragen beschränkt, bieten ohne Kohle nur das Land als Info oder sind ausserhalb Amerikas eher schlecht. Man könnte da mit Proxies herumfummeln, Geld ausgeben oder halt einen Kompromiss eingehen.

MaxMind bietet eine Lite-Version ihrer Datenbanken gratis an (Binary und CSV), inklusive quelloffener, PEAR-verwalteter PHP Ansteuerung. Die Lite-Version ist nicht so genau wie die kostenpflichtige, aber ganz ok.

Die Ansteuerung ist schmerzfrei:

  $geoip = Net_GeoIP::getInstance("path/to/GeoLiteCity.dat");
  if(isset($geoip)) {
    try {
      $location = $geoip->lookupLocation($ip);
      $city=$location->city;
      $country=getCountryName($location->countryCode);
    } catch (Exception $e) {
      // Handle exception
    }
  }

getCountryName ist eine eigene Funktion, die die Ländernamen in Deutsch zurück gibt. Mehr Infos brauche ich nicht.

Das HTML Blog hat ein sehr gutes Tutorial zu diese Methode und PHP.

ISP aus IP

Hier könnte man auch die obige Datenbank verwenden, aber mit der Lite-Version funzt das nicht so richtig. Also fragen wir die Quelle (RIPE) direkt an. Dafür wird ipology (von phpclasses.org) verwendet, allerdings in einer modifizierten Version.

OS und Browser aus dem User-Agent

Hier gibt es verschiedene Klassen und Funktiönchen, die alle nicht so befriedigend waren. Das einzige was wirklich funzt ist die Funktion get_browser(), die allerdings eine Spezielle Datei (browscap.ini) benötigt, die in php.ini eingetragen sein muss.

Cookies

Mit der Sessionverwaltung von PHP bin ich nie so rchtig warm geworden. Es verhält sich äusserst doof. Da wurde ein Layer über die Technik gelegt, der das Ganze nicht wirklich vereinfacht. Eine Session ist normalerweise nur solange gültig wie der Browser des Signierten offen bleibt. Hat man die Cookielebenszeit erhöht, dann kommt leider manchmal ein Garbage Collector und räumt die Daten weg. Ich glaube, mit folgenden Zeilen (Reihenfolge ist wichtig!) liegt man nahe an pesistenten Sessions:

// Session
$lifetime=24*3600*300;
ini_set('session.gc_maxlifetime',$lifetime);
setcookie(session_name(), $_COOKIE[session_name()], time()+$lifetime, "/");
session_start();

Im Cookie speichere ich zum Einen die Dinge wie IP, ISP, Land, … um ein zweites Nachsehen zu beschleunigen und Unterschiede sichtbar zu machen, zum Anderen zusätzlich noch die Anzahl und Zeit der Zugriffe, …

Technisches

Ausgabe als Bild

Die Ausgabe als Bild ist relativ einfach. Man schickt einen entsprechenden Header:

Header("Cache-Control: no-cache");
Header("Content-type: image/png");

Dann lädt man ein Hintergrundbild und manipuliert mit den PHP-Funktionen. Kleine Leckereien im folgenden Code:

  • Zeilenumbrüche werden nicht automatisch berücksichtigt. Der folgende Code übernimmt dies.
  • Zeichen müssen ISO 8859-1 Codiert sein *gnarrrrrrrgh*, sonst sieht man komische Symbole.
$img_handle= imagecreatefromjpeg(BG_IMAGE);
$colorblood= ImageColorAllocate($img_handle, 186, 159, 140);
$font=5;

// Write creepy things
$fontheight = ImageFontHeight($font);
$lines = explode("\n", $sigtext);
$y=100;
foreach($lines as $line) {
        ImageString($img_handle, $font, 200, $y, $line, $colorblood);
        $y += $fontheight;
}

// Output Image
imagepng($img_handle);
imagedestroy($img_handle);

Wenn Warnungen ausgegeben werden, haben die Browser verständlicherweise Mühe, dies als Bild zu interpretieren. Darum, liebe Coder, schreibt sauberen Code der keine Warnungen ausspuckt! Testen mit error_reporting(E_ALL)!

Texte

Je nach den technischen Gegebenheiten lege ich mögliche Sätze in ein Array von denen dann einer per Zufall ausgewählt wird… Eher simpel…

Zeitangaben

Der letzte Zugriff wird gespeichert, und ich möchte gerne so richtig “We watch you!”-mässig damit angeben, dass ich das weiss. Dazu soll der letzte Zugriff mit “Heute”, “Gestern”, “Vorgestern”, etc angegeben werden. Das funktioniert mit der absolut genialen strtotime-Funktion, die einen String automagisch in eine Epoch-Zeit (Sekunden seit 1970) umwandelt.

if($tstamp && (time()-$tstamp)>3600) { // More than 1 hour no posting view
  if(strtotime("today 00:00")<=$tstamp) {
    $creepytext[]= "Du hast heute um ".strftime("%H:%M:%S",$tstamp)."\ndas letze mal ein Posting von mir gelesen.";
  }
  elseif(strtotime("-1 day 00:00")<=$tstamp) {
    $creepytext[]= "Du hast gestern um ".strftime("%H:%M:%S",$tstamp)."\ndas letze mal ein Posting von mir gelesen.";
  }
  elseif(strtotime("-2 days 00:00")<=$tstamp) {
    $creepytext[]= "Du hast vorgestern um ".strftime("%H:%M:%S",$tstamp)."\ndas letze mal ein Posting von mir gelesen.";
  }
  elseif(strtotime("-7 days 00:00")<=$tstamp) {
    $creepytext[]= "Du hast diesen ".strftime("%A", $tstamp)." um ".strftime("%H:%M:%S",$tstamp)."\ndas letze mal ein Posting von mir gelesen.";
  }
  elseif(strtotime("-14 days 00:00")<=$tstamp) {
    $creepytext[]= "Du hast letzte Woche am ".strftime("%A", $tstamp)." um ".strftime("%H:%M:%S",$tstamp)."\ndas letze mal ein Posting von mir gelesen.";
  }
  else {
    $creepytext[]= "Du hast am ".strftime("%d.%m.%Y",$tstamp)."(vor ".ceil((time()-$tstamp)/(24*3600))." Tagen)\nein Posting von mir gelesen.";
  }
}

Weitere Literatur

Sehr schöne Turorials zum Thema dynamische Signaturen gibt es bei Digital-Inn, VBGore und Tutorials.de.

Gimme Code

Biddeschöhn: Dynamische Signatur PHP Skript

Weitere Signaturgeneratoren

  • Oben schon erwähnt und als Lead: Danasoft.
  • Etwas anders aber auch witzig: Sloganizer.net. Im Moment funzt das Hintergrundbild nicht. Tip: Englisch wählen und das en/ aus der URL entfernen.

Nachtrag 10.09.2008: Publicon ist zwar nicht dynamisch, aber trotzdem ganz witzig. Man kann seine Interessen zusammenklicken. Leider funzt das Erstellen nicht mehr :(…


6 Antworten zu “Dynamische Signatur – e-Schrecking für Foren, MySpace, …”

Kommentare

  1. compr00t Schreibt:

    Echt nice das ding. Klasse Arbeit!
    muss ich auch mal ausprobieren…

    gr33z
    compr00t

  2. skaldrom Schreibt:

    @Compr00t Vielen Dank *blush*…

  3. blickblog.com Schreibt:

    Es ist schon schwer… *zuck*

  4. skaldrom Schreibt:

    @Blickblog Hui, jetzt bin ich so erschrocken dass ich mich gar nicht getraut habe Deinen Comment zu approven :fear: …

  5. House Schreibt:

    Sehr geile idee, für die Signatur. Ich hab sowas hier^^
    http://www.meineipanzeigen.de

  6. meinhaustier Schreibt:

    @Compr00t Vielen Dank *blush*…

Lassen Sie eine Antwort hier...

XHTML: Sie können folgende Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


two × 9 =