Posts Tagged ‘webdevelopment’

SteamCalculator V2

16. October 2009

When I started coding the SteamCalculator for the German Half-Life Community page HLPortal.de, I never thought it would get that big. The very first version took me about half a day and could only sum up listed games of an Steam user. Six weeks later, even game packages were considered. A couple month after that, steamcalculator.com was registered, and the SteamCalculator got it’s own website.

SteamCalculator

If you wonder, what the SteamCalculator might be, to keep it simple: The SteamCalculator is tool for gamer, which can be used to calculate the value of a Steam Account. It basically sums up all your games, which are registered via Steam, and tells you, how much it is worth. Some people call it a new tool for ePenis measurements.
If you do not know what a Steam Account is, you will have no use for the SteamCalculator anyway – sorry.
If you claim yourself to be “gamer”, you should have Steam installed on your PC already. If not…, dude, your missing something!

But let’s get back to the topic. As time passes, people keep sending me feedback with feature requests and even, unfortunately, bugs. Actually, there are quite a lot bug reports coming in these weeks.

  • One of the most annoying ones, would be the “my acount is not private” bug. For some reason some accounts only work with profile IDs and not with their custom URLs. This causes the calculator to says it’s an “private” account, even though it’s not.
  • Second problem would be all the “broken links”. It is hard keeping track with Valve’s “lets change some IDs”-plans. AppIDs (unique IDs for Steam games) are fine, as long as they are no demo or beta versions, which will be deactivated after a while. But worst of all, are packages. Their subIDs keep changing… damn, got to find a way to fix that.

These are just two bugs, which will be solved soon. A way bigger problem actually is, invalid input by the user. People keep typing their account names (normally a email) or have even an invalid XML profile. Yes, that’s right, it is possible to have invalid UTF-8 chars in your profile, which kills the calculator. I have a total of 22,447 users, which have “broken XML profiles” so far. Even browsers show a unknown character (no, that does not mean, I haven’t installed the font). Well yes, there are ways to work around that problem, but it’s like having keys for a car, which still needs to get hot wired, because it’s keys don’t fit.

In fact it is a user problem. Most of them are “leet kiddies” abusing UTF-8 to literally draw images into their profiles (some look good, though). Or they have friends or joined a group, which is using UTF-8 to create special symbols in their names.
And that is the thing. Some smart people invented “standards” like ISO 10646 to avoid such a mistakes. But who expects kids to know about international standards? Sometimes, it is their computer, which messes everything up. Just to give you a number, to highlight the problem. About 46.2% of all profiles contain an invalid UTF-8 character. Hat means, half of my users can’t even use the SteamCalculator. My biggest goal for second version of the SteamCalcultor, would be to decrease that number, because seriously, who would think it’s his fault, if the calculation fails? No one, right! At the end, they blame me, for doing such a poor job. Well, it’s time to change that.

So, if you have any suggestions for the new version, feel free to post them or, if you wish, send them via email to info [et] steamcalculator [dot] com.
And yes, I am looking for a new fresh design.

CSS und Javascript verstecken

27. February 2008

Wer hat es sich als Webdesigner nicht schon mindestens einmal die Möglichkeit gewünscht, sein Design gegen ein einfaches Copy & Paste im Internet zu schützen.

Denn im Internet werden, ohne Rücksicht auf Urheberrechte, viele Designs oder zumindest Teile davon schamlos übernommen. Eine juristische Aufbereitung ist in vielen Fällen nicht möglich und häufig stehen Aufwand und Nutzen in keinem Verhältnis. Trotzdem sind solche Taten ärgerlich.
Doch das muss nicht sein, denn mit etwas PHP können wir ein einfaches Copy & Paste schon verhindern.

Vorwort
Es gibt keinen 100%igen Weg ein Design im Internet komplett zu schützen, denn Browser müssen die Dateien lesen und entsprechend umsetzen. Dadurch wird das Design bereits beim Besuchen der Webpage auf dem Computer des Besuchers gespeichert und ermöglicht ihm, deren Quelltexte einzusehen. Dies betrifft grundsätzlich alle clientseitigen Elemente wie (X)HTML, CSS, Javascript und Bilder.
Doch die eigentlichen Designs entstehen heutzutage in Cascading Style Sheets, sogenannte CSS Datein, und werden seperat geladen. Genauso wie Javascript oder Bilder. Und genau hier setzen wir an.

Technik
Aus einer CSS Datei machen wir eine PHP Datei, da diese nur serverseitig gelesen werden können, und binden die genauso, wie ihr Vorgänger, in den (X)HTML Code ein.

<style>
@import url(./css/style.php);
</style>

Vorher müssen wir den HTML Code aber noch um folgende Zeilen erweitern:

session_start();
$_SESSION['initCSS'] = TRUE;

Wichtig: Dieser Block muss vor dem Einbinden der style.php stehen.

Somit erstellen wir eine Session und setzen die Variabel initCSS auf true.
Die style.php füllen wir wie gewohnt mit CSS und ergänzen den Kopf und Fuß mit etwas PHP, so dass die style.php eine solche Form annimmt:

#01
#02
#03
#04
#05
#06
#07
#08
#09
#10
#11
#12
#13
#14
#15
#16
#17
#18
#19
#20
#21
#22
#23
#24
#25
#26
#27
#28
#29
#30
#31
#32
#33
#34
#35
#36
#37
<?php

session_start();

if (!$_SESSION['initCSS'])
{
header('Location: http://www.kuhrti.de');
}

header('Content-Type: text/css');

print('

//CSS hier einfügen

body
{
margin: 0;
padding: 0;
background: #1a1b1e;
font: normal 13px Verdana, Arial, Helvetica, sans-serif
}

#global
{
background: #ffffff;
}

//noch mehr CSS



'); //print() schließen. Ab hier kein CSS mehr einfügen

$_SESSION['initCSS'] = FALSE;

?>

Was hier geschieht ist einfach. Die Variable $_SESSION['initCSS'] wird geprüft woraufhin entschieden wird, ob wir auf unsere Homepage weitergeleitet werden oder ob wir uns als CSS Datei zu erkennen geben. Da die Session aber bereits beim Laden der Page gesetzt wurde, passieren wir die Abfrage und wandeln mit Hilfe von header(‘Content-Type: text/css’) die style.php zu einer CSS Datei um (zumindest glaubt das der Browser). Anschließend muss die $_SESSION['initCSS'] wieder zurückgesetzt werden, da diese sonst die ganz Sitzung über true bleibt.
Wer jetzt versucht unsere style.php direkt mit einem Browser zu lesen, wird ungewollt wieder auf unsere Webpage zurückgeleitet. An dieser Stelle könnten wir auch vulgär dazu auffordern, unser Design nicht zu kopieren, jedoch vermute ich, dass ein Dieb eher verwirrt ist, wenn er trotz richtiger URL immer im Kreis läuft, als ihm durch unsere Aufforderung zu bestätigen, dass er der Sache ein Schritt näher ist – was eigentlich falsch ist, denn PHP Dateien lassen sich nicht einsehen.

Gleiches gilt für Javascript
Allerdings muss hier foldender Header gesetzt werden:

header('Content-Type: application/x-javascript');

Schlusswort
Mehr Aufwand sollte zu diesem Thema aber nicht betrieben werden, da manche erfahrenere User auch mit dieser Technik nur zwei Klicks benötigt, um an den richtigen Code zu kommen. Das Ganze soll den Dieben die Sache nur erschweren, denn ich behaupte, dass jemand, der Code klauen muss, weil er selber keine Ahnung hat, auch zu blöd ist, dieses System auszutricksen.

Zum Schluss stellt sich nur noch die Frage: will überhaupt jemand mein Design kopieren?

Wer das Ganze ein mal live sehen will, kann auf spez-clan.de wechseln und dort versuchen die “style.css” auszulesen.

Skype Status auslesen

7. February 2008

Skype unterstützt die Funktion seinen Onlinestatus über die Skypehomepage abzufragen. Allerdings sind wir hier auf wenige, vorgefertigte Grafiken beschränkt. Doch mit etwas PHP können wir unsere eigenen Grafiken verwenden.

(more…)

Schneller Performance mit mysql_fetch_assoc()

3. February 2008

Endlich haben wir es schwarz auf weiß: Die klassische und weit verbreitete Variante Datensätze mit mysql_fetch_array() auszulesen ist out. Die Alternative mysql_fetch_assoc() ist schneller (entspricht mysql_fetch_array($sql, MYSQL_ASSOC)), denn wir herhalten ein nur halb so großes Array und sparen daher viel Zeit. Das klingt logisch. Jan Walther ist der Sache für uns auf den Grund gegangen und wollte wissen wie viel Zeit wir dadurch gewinnen.

Hier geht es zum kompletten Test auf phpperformance.de…

ICQ Status auslesen

3. February 2008

Eines meiner ältesten Scripts ist eine Funktion, mit dessen Hilfe ich meinen ICQ Status auslesen lassen kann. Ziel war es die standard ICQ-Blume abzulösen und durch eine eigene Grafik zu ersetzen.
Dieses Script ist simpel aber performancelastig, weil wir weiterhin den vorhanden ICQ Service nutzen und diesen dazu missbrauchen, uns unseren Status mitzuteilen:

$fp = fopen('http://status.icq.com/online.gif?icq='.$uin, 'r');

Den daraus folgenden String verabeiten wir mit der Funktion strlen().
Da die abgefragten on- und offline Statusbilder unterschiedliche Dateigrößen besitzen, definieren wir ihre Werte:

define('ONLINE', 1281);
define('OFFLINE', 1963);

Eine komplette Funktion könnte so aussehen:

#01
#02
#03
#04
#05
#06
#07
#08
#09
#10
#11
#12
#13
#14
#15
#16
#17
#18
#19
#20
#21
#22
#23
#24
#25
#26
#27
<?php
define('ONLINE', 1281);
define('OFFLINE', 1963);

function icqStatus($uin)
{
$fp = fopen('http://status.icq.com/online.gif?icq='.$uin, 'r');
$img = fread($fp , 2048);
$size = strlen($img);

switch ($size)
{
case ONLINE:
$status = 'online';
break;

case OFFLINE:
$status = 'offline';
break;

default:
$status = 'disabled';
}

return $status;
}
?>

Statt des Textes in der Variable $status könnten wir nun auch eine eigene Grafik setzen.

Wichtig: Es es unbedingt notwendig, dass wir auch diese Option, mit der wir unseren Status online einsehen können, bei unserem ICQ aktivieren.