Martin Lantzsch
Software Entwickler
7. Juli 2010

Twitter via PHP auslesen

7. Juli 2010 - Geschrieben von Martin - 2 Kommentare

Ein Leser dieses Blogs hat vor kurzem den Wunsch nach einem Artikel geäußert, wie er eine Ähnliche „letzte Tweets Anzeige“ wie auf www.Resigame.de bauen kann. Nun so schnell kann es gehen ;)

Da Twitter eine API bzw. von jedem Nutzer eine XML Datei mit Tweets und anderen Account Infos bereitstellt, haben wir leichtes Spiel an die Daten zu kommen.

So können wir die Datei auslesen:

$tweets = simplexml_load_file('http://www.twitter.com/status/user_timeline/[NUTZERNAME].xml');

[NUTZERNAME] muss natürlich mit dem Name des Twitteraccounts ersetzt werden, z.B. „Resigame“.

Aus dem Objekt $tweets können wir nun die letzte Nachricht auslesen:

echo $tweets->status->text;

Alle anderen verfügbaren Objekte kannst du herausfinden, indem du die XML Datei direkt im Browser aufrufst (Dort wird es sogar als Tree dargestellt).

Um auf ältere Nachrichten zuzugreifen kann hinter Status die Zahl angegeben werden, von der aus die Nachrichten „herab“ gezählt werden (allerdings wird bei 0 begonnen!):

echo $tweets->status{2}->text;

Dies würde uns Beispielsweise die 3. letzte Statusnachricht anzeigen.

Um nun die letzten 3 Nachrichten anzuzeigen verwenden wir einfach eine Schleife:

$i = 0;
while($i <= 2)
{
  echo $tweets->status{$i}->text.'<br>';
  $i++;
}

(mit for Schleifen hab ich es nicht so ;))

Da nun aber bei jedem Aufruf der Seite die Twitter XML Datei neu heruntergeladen werden muss, was nicht gerade Traffic und Ressourcenschonend ist – Kleinvieh macht schließlich auch Mist – Cachen wir nun die Datei:

if(filectime('twitter.xml') < time() - (60*10)) {
  // download file
  $file = file_get_contents('http://www.twitter.com/status/user_timeline/[NUTZERNAME].xml');
  file_put_contents('twitter.xml', $file);
}
$tweets = simplexml_load_file('twitter.xml');

Nun wird erst überprüft ob die Datei twitter.xml, welche im gleichen Ordner wie das Script liegt in den letzten 10 Minuten geändert wurde. Ist das der Fall wird das erneute Herunterladen übersprungen, wenn nicht (also wenn der Änderungszeitpunkt länger als 10 Minuten her ist), wird die XML von Twitter heruntergeladen und in unsere twitter.xml geschrieben.

Anschließend wird die twitter.xml geparst.

Das wäre es auch schon, in den nächsten Tagen zeige ich euch dann noch wie ihr die Twitter Nachrichten mittels jQuery schön als Newsticker laufen lassen könnt.

Browsergames – Welche Last verursachen diese?

23. Juni 2010 - Geschrieben von Martin - 4 Kommentare

Browsergames – jeder kennt eines, viele Spielen eines und so mancher hat selbst schon einmal eines Entwickelt. Doch welcher Aufwand ist es ein solches zu Entwickeln und wie Betreibe ich eines?

Welche Technik und Infrastruktur steckt hinter Browsergames?
Ein Browsergame ist im Grunde eine normale Webseite welche in PHP, Phyton, Perl oder sonst irgendeiner Programmiersprache Entwickelt sein könnte. Oft kommt dazu noch ein wenig JavaScript um es für den Nutzer ansprechender zu Gestalten.

Auf Serverseite sieht es auch meist gleich aus, es werkelt mindestens ein Linux Server mit der Verwenden Script Sprache und einer Datenbank, sowie einem Mailserver. Wird das Browsergame jedoch größer findet hier meist eine Trennung zwischen Web-, File-, Database- und Mail Server statt, da diese dann entsprechend optimiert und die Last somit besser verteilt werden kann.

Im Grunde ist das ganze bisher kein Hexenwerk, geht man aber ins Detail trifft einen der Schlag. Eine normale Webseite wird pro Besuch vielleicht 5 bis 10 mal aufgerufen, hierbei wird die Seite mit Menü und Konsorten aus einer Datenbank gelesen und falls das System schlau ist in einen Cache geschrieben. Bei einem Browsergame hingegen kann nichts gecached werden, da alles Dynamisch für den Spieler aufbereitet wird.

In Zahlen, eine Webseite hat pro Besuch 5 bis 10 Requests. Ein Browsergame kann auch mit diesen 5 bis 10 Requests auskommen, doch dazu kommen noch die AJAX Abfragen, welche nahezu sekündlich ausgeführt werden. Nehmen wir einmal an es wird alle 5 Sekunden eine AJAX Abfrage ausgeführt, dann sind wir schon bei ganzen 12 Weiteren Abfragen pro Minute (Man beachte im Normalfall sind es noch einige mehr!) das würde bei einer Durchschnitts Onlinezeit von 15 Minuten ganze 180 Requests ausmachen!

Wie optimiere ich meinen Server?
Gehen wir mal davon aus, das das Spiel perfekt auf die vielen Requests ausgelegt ist. Was kann man dann auf der Server Seite machen?

Einen kleinen schnellen Webserver verwenden, ich empfehle an dieser Stelle Lighttpd, welcher aus meiner Sicht sich für ein solche Unterfangen wesentlich besser eignet als Apache(2). In der Konfigurationsdatei können unter anderem auch diverse Module wie „webdav“, „rewrite“ und falls es nicht benötigt wird das Modul „accesslog“ deaktiviert werden. Je nach Bedürfnis können natürlich Module ein- bzw. abgeschaltet werden, allerdings sollte die Liste der aktiven immer so kurz wie möglich gehalten werden.

Seitens der Scriptsprache. Da hier keine explizit festgelegt wurde, an dieser Stelle nur einige allgemeine Hinweise. In den jeweiligen Konfigurationsdateien gibt es oft eine Reihe an Parametern, mit denen man Funktionen abschalten kann, welche nicht unbedingt benötigt werden, beispielsweise, das im Header gesendet wird, das diese Seite mit PHP Version 5.3.x erstellt wurde. Tipps gibt es in einschlägigen Webseiten, Foren und Blogs.

So wenig Dienste als möglich! Das sagt eigentlich schon alles, im Hintergrund sollte keine Sinnlosen Dienste wir FTP laufen, wenn diese gar nicht benötigt werden. Sollte es der Fall sein, das man einen dieser Dienste benötigt, einfach schnell via SSH einloggen und nach nicht einmal 10 Sekunden läuft der Dienst.

Gute Hardware ist die halbe Miete. Nicht nur Zuhause beim Entwickeln, auch Online erspart gute Hardware viele Schlaflose Nächte, in denen der Server überlastet ist oder sich aufgehängt hat. Ich empfehle so viel RAM wie möglich und einen Schnellen CPU.

Fazit
Browsergames sind wahre Ressourcenfresser, doch mit der richtigen Hardware, den Perfekten Einstellungen und natürlich Sauber und Performant geschriebenen Quellcode steht dem Spaß nichts mehr im Wege.

1. Juni 2010

Was sucht Resi in APT?

1. Juni 2010 - Geschrieben von Martin - Keine Kommentare

Gestern beim Updaten einiger Pakte auf meinem Debian Lenny Server hab ich zufällig folgendes entdeckt:

martin@ldsrv:/$ apt-get --help
[...]
apt-get ist ein einfaches Kommandozeilenwerkzeug zum Herunterladen
und Installieren von Paketen. Die am häufigsten benutzten Befehle
sind update und install.
[...]
                       Dieses APT hat Super-Kuh-Kräfte.

Der letzte Satz hat mich schon ein wenig Irritiert „Dieses APT hat Super-Kuh-Kräfte“. Super-Kuh-Kräfte? Ist damit etwa Root gemeint?

Als ob das noch nicht genug wäre, bin ich noch auf folgendes gestoßen:

martin@ldsrv:/$ apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
...."Have you mooed today?"...

Mal sehen was Aptitude dazu meint:

martin@ldsrv:/$ aptitude moo
In diesem Programm gibt es keine Easter Eggs.

… wenn man ein wenig mit dem Verbose Mode nachbohrt, bekommt man folgendes zu Gesicht:

martin@ldsrv:/$ aptitude -v moo
In diesem Programm gibt es wirklich keine Easter Eggs.
martin@ldsrv:/$ aptitude -vv moo
Habe ich nicht bereits erklärt, dass es in diesem Programm keine Easter Eggs gibt?
martin@ldsrv:/$ aptitude -vvv moo
Hör auf!
martin@ldsrv:/$ aptitude -vvvv moo
Okay, wenn ich Dir ein Easter Egg gebe, wirst Du dann aufhören?
martin@ldsrv:/$ aptitude -vvvvv moo
Gut, Du hast gewonnen.
 
                               /----\
                       -------/      \
                      /               \
                     /                |
   -----------------/                  --------\
   ----------------------------------------------
martin@ldsrv:/$ aptitude -vvvvvv moo
Was das ist? Natürlich ein Elefant, der von einer Schlange gefressen wurde.

Einfach toll diese Easter Eggs, wer nun als erster entdeckt, wie man in telnet Star Wars schaut, bekommt einen Keks von mir ;-)

30. Mai 2010

SimpleLD auf Github

30. Mai 2010 - Geschrieben von Martin - Keine Kommentare

Kurze Fortschrittsmeldung, den SimpleLD Source Code habe ich vor ein paar Tagen ins Git Repository auf Github.com gepusht.

Open Source Software

Derzeit sind die Core Komponenten noch in Entwicklung, aber das Framework, ist bereits funktionsfähig, die Paket Schnitstelle funktioniert einwandfrei und diverse Hooks im Code, erlauben neuen Paketen das Framework zu erweitern. In den nächsten Tagen folgen einige Artikel, welche sich mit der Paketentwicklung für das SimpleLD Framework beschäftigen. Ein paar kleine Beispielspakete wie das „home“ Paket sind bereits Online.

>> SimpleLD auf Github

8. Mai 2010

Apache klemmt

8. Mai 2010 - Geschrieben von Martin - Keine Kommentare

Letztens erst wieder wollte mein Apache (unter Windows 7) nicht starten, daraufhin hab ich alles mögliche versucht, diverse Optionen durchgetestet, aber kein Erfolg. Letztenendes lag der Fehler bei Skype, welches sich den Port 80 standardmäßig reserviert. Dies kann man aber sehr leicht abstellen, einfach Skype öffnen, dann oben in der Menüleiste Aktionen –> Optionen –> Erweitert –> Verbindung und dort vor der obersten Checkbox den Haken entfernen, das ist alles. Nun sollte spätestens nach einem Skype neustart alles wieder wie gewohnt laufen.

8. Mai 2010

Linux: XAMPP – LAMPP

8. Mai 2010 - Geschrieben von Martin - Keine Kommentare

Da dieser Artikel aus unserem alten Wiki oft angefordert wird, hier das Backup davon:

Fürs Webdesign und die Webentwicklung werden natürlich Apache (Webserver), PHP, MySQL und noch ein paar andere Tools wie Pearl oder Python benötigt, dieser Artikel zeigt wie man LAMPP, bzw. XAMPP auf dem eigenem Linux System installiert.

Herunterladen

Als erstes muss das Archiv heruntergeladen werden. Einen Aktuellen Link finden Sie hier:

http://www.apachefriends.org/de/xampp-linux.html

Installieren

Installieren muss man eigentlich gar nichts, man muss lediglich das heruntergeladene Archiv ins Verzeichniss /opt entpackt werden. Dies erledigen Sie mit dem Befehl tar:
Sie müssen diesen Befehl mit root Rechten ausführen!

tar xvfz xampp-linux-1.7.tar.gz -C /opt

Ersetzten Sie „xampp-linux-1.7.tar.gz“ durch das von ihnen heruntergeladene Archiv!

Nun ist die Installation abgeschlossen.

Starten

Um jetzt Lampp zu starten müssen Sie lediglich eine Konsole öffnen und:

/opt/lampp/lampp start

ausführen, und zwar mit root Rechten.

Autostart

Damit Lampp Automatisch startet, öffnen Sie die Datei:

/etc/init.d/rc.local

Und fügen Sie den Befehl zum Starten von Lampp ein:

/opt/lampp/lampp start

Speicheren Sie nun ab. Jetzt sollte LAMPP bei jedem Hochfahren Automatisch starten.

Wenn ein Dienst nicht startet

Falls ein oder mehrere Dienste nicht starten wie z.B. Apache, PHP, MySQL, usw. müssen Sie die Rechte des LAMPP Verzeichnisses anpassen, dies machen Sie mit dem Kommando chmod. Öffnen Sie eine Konsole und führen folgendes aus (Natütlich mit root Rechten):

chmod -R 777 /opt/lampp

Nun müssen Sie noch den Konfiugurationsdateien die richtigen Rechte zuweisen.

chmod 755 /opt/lampp/etc/my.cnf

Und

chmod 755 /opt/lampp/phpmyadmin/config.inc.php

Nach diesem Schritt sollten zwar die Dienste wieder laufen, aber es hat nun jeder vollen Zugriff auf die Dateien und Verzeichnisse! Falls Sie die Dienste mit dieser Methode wieder in Gange bringen wollen, sollten Sie eine Firewall während Sie LAMPP am laufen haben verwenden.

Tipps

Ein Paar Tipps, die den Umgang mit LAMPP erleichern.

MySQL Passwort
Es ist kein MySQL Passwort gesetzt, d.h. das Feld einfach frei lassen.

Wo kommen die html/php Dateien hin

Ihre html/php Dateien kommen hier hin:

/opt/lampp/htdocs

Achten Sie darauf, das die richtigen Rechte für die Dateien gesetzt sind!

PHP.ini

Die PHP.ini finden Sie hier:

/opt/lampp/etc/php.ini

Weiterführende Links

http://www.apachefriends.org/de/index.html – Webseite von XAMPP und LAMPP
http://www.apachefriends.org/de/xampp-linux.html – Webseite von LAMPP

5. Mai 2010

Linux Server absichern

5. Mai 2010 - Geschrieben von Martin - Ein Kommentar

Heute widmen wir uns einem absolut notwendigem Thema, dem absichern eines Linux root/vServers. Hier eine kleine Zusammenfassung aller wichtigen Themen, ausgegangen wir hier von einem Debian System.

1. Updaten des Servers
Als erstes sollten wir sichergehen, das die verwendete Software stets auf dem aktuellem stand ist.
Mit folgendem Kommando aktualisieren wir die Paketliste:

apt-get update

Nun können wir die neuen Pakete herunterladen und installieren:

apt-get upgrade

2. Root Login deaktivieren
Wenn wir dem potenziellem Angreifer verbieten, sich via SSH mit dem Benutzername „root“ anzumelden, haben wir schon mal eine mögliche Angriffsstelle weniger.

Dazu öffnen wir die „/etc/ssh/sshd_config“ darin ändern wir folgende Konfigurationsvariable:

PermitRootLogin yes

zu

PermitRootLogin no

3. Ports verlegen
Wenn Ports verlegt werden, kann ein Angreifer nicht mehr von außen auf Dienste zugreifen. Falls bereits ein Mailserver läuft, sollte man aber allen User vorher mitteilen, das der Port geändert wird, ansonsten liefert der Server keine Mails mehr aus.

Die Konfigurationsdateien befinden sich unter „/etc/“ im entsprechenden Programmverzeichnis (je nach dem welches Programm, oder welcher Dienst, können die Pfade und Dateinamen abweichen).

Tipp: Je höher der Port, desto schwerer ist es ihn durch einen Portscanner zu erreichen.

4. PHP
Es gibt viele Möglichkeiten PHP abzusichern. Erst einmal sollten alle Sicherheitskritischen Funktionen deaktiviert werden, dazu muss die PHP.ini in „/var/php5/“ geöffnet werden. Folgende Parameter sollten gesetzt werden:

disable_functions = show_source, exec, shell_exec
allow_url_fopen = Off
register_globals = Off

5. Log Files überprüfen
Die Log Files sollten hauptsächlich auf Fehler und Schlagartige Zugriffsänderungen überprüft werden (letzteres kann oft auf einen Angriff zurückzuführen sein). Zu finden sind diese unter „/var/log/“

4. Mai 2010

Adobe Premiere Audio und Videospur trennen

4. Mai 2010 - Geschrieben von Martin - 3 Kommentare

Nicht ganz trival ist der Vorgang in Adobe Premiere Pro CS3, wenn man Audio und Videospur unten in der Schnittleiste trennen will. Denn sobald man einen Clip anklickt, werden automatisch Audio und Video Spur markiert, wenn man auf [ENTF] drückt, sind beide weg. Doch es gibt einen ganz einfachen Kniff:

  • Erst die Videospur anklicken
  • Nun einen Rechtsklick darauf machen, sobald sie markiert ist
  • Die Option „Verknüpfung auflösen“ wählen und schon sind die beiden getrennt

Nun können beide Spuren beliebig verschoben werden. Allerdings hab ich noch keine Möglichkeit gefunden, die Audiospur nachträglich zuzuschneiden, egal ob mit der Rasierklinge oder via Drag’n’Drop, keines der beiden will klappen.

Kleiner Tipp, wenn sich die frisch getrennte Audio Spur nicht lösen lassen will, einfach die kleine Markierauswahl darüber aufziehen.