Yahoo! Mindset

Nicht nur Google testet manchmal neue Features, auch Yahoo fängt jetzt damit an: Mindset ist eine Suchfunktion, bei der der angeben kann, ob er auf Informationssuche oder auf der Suche nach Shopping-Seiten ist. Mittels eines Schiebereglers (den yahoo erst mal anhand des Suchqueries voreinstellt) kann man festlegen, was man haben will (So ein bissel „shopping“ aber vor allem „research“ oder „shopping only“ oder so).

Macht einen ziemlich soliden Eindruck und ist von der Idee her genial 🙂 – nur leider ist es derzeit wohl nur für englische Seiten verfügbar und ich bin mir auch sicher, daß Suchmaschinen-Spammer wege finden werden, um diese Filterung zu umgehen…

Deutsche Bank Phishing

Oh, heute ist die Deutsche Bank dran… Die Webseite dazu ist aber leider schon gelöscht – „due to non-ethical and/or abusive activity.“

Dear Deutsche Bank Customer,

We find that some of our members no longer have access to their email addresses. As result Deutsche Bank server
sent this letter to verify e-mail addresses of our clients. You must complete this process by clicking on the link
below and entering in the small window your Deutsche Bank online access details:

[LINK]

Informationen zu Medien-Dateien

Momentan schraube ich an den Bildergalerie von Spherical Bytes rum und bin – da ich das ganze wie üblich zum allwissenden Weltherrschaftsübernahmetool ausbaue – auf die Grenzen von PHP gestoßen. Ich möchte nämlich nicht nur eine „Bildergalerie“ haben, sondern eine Media-Galerie, die auch Videos und Audio-Dateien futtert.

Nur kann PHP eben mit Bild-Dateien ganz problemlos umgehen, aber wie bekomme ich Informationen über die Laufzeit eines Videos oder einer MP3-Datei? Mit den Bordmitteln gar nicht – aber es gibt ja jede Menge andere Leute, die die gleichen Probleme haben wie ich. Und die waren schon fleißig und haben getID3() gebaut. Ein weiteres Beispiel für einfach zu verwendende aber sehr leistungsfähige Open Source Software!

Alles Pointer, oder was?

Neulich auf der Arbeit…

a) Update pointer pointed to by pvxtTransaction to point to next-pointer of object pointed to by vxtTransaction

b) Delete object pointed to by vxtTransaction

c) Update pointer vxtTransaction to point to object pointed to by pointer in pvxtTransaction

Aaargh 😉

Rent-A-Dildo

Wer wollte schon immer mal einen Dildo (oder ein anderes „Sex-Toy“) ausleihen? Hier ist die Möglichkeit: Bei Rent-A-Dildo könnt ihr euch demnächst für 20 Dollar im Monat anmelden und genau das tun… Ein patentiertes Verfahren soll die ausgeliehenen Spielzeuge nach dem Rücksenden wieder porentief sauber bekommen und dann geht das Zeugs zum nächsten…

Seltsame Ideen haben die Menschen 😉

Sicherheit und Geschwindigkeit

Seit einiger Zeit gibt es auf 4cheaters.de jetzt schon die Forums-Funktionalität. Anfangs habe ich ja eigentlich gar nicht wirklich damit gerechnet, daß hier viel passieren wird, aber inzwischen ist da richtig was los. Mittlerweile sind weit über 12.000 Beiträge geschrieben worden.

Zeit für mich, das ganze mal wieder etwas genauer unter die Lupe zu nehmen. Wenn auch zugegebenermaßen etwas unfreiwillig, weil ein Störenfried am letzten Wochenende gewütet hat und in wenigen Minuten 90 mal den gleichen Beitrag geposted hat. Damit ist einerseits natürlich die Webseite übergelaufen und andererseits haben die Leute auf meiner Seite die Möglichkeit, sich per E-Mail über neue Beiträge in einem Thread informieren zu lassen. Im entsprechenden Board zu Vampire: The Masquerade – Bloodlines nutzen momentan etwas mehr als 20 Leute diese Funktion. Ergo: knapp 2000 Mails gingen da sinnloserweise raus.

Ergo: Generalüberholung ist angesagt.

Schritt eins war relativ schnell realisiert: Eine maxmiale Zahl von Posts pro Zeitabschnitt pro IP-Adresse. Dazu speichere ich jetzt (endlich) die IP zu jedem Beitrag. Hätte ich schon früher machen sollen. Mit einer einfachen SQL-Abfrage kann man dann ganz einfach erkennen, wie viele andere Posts von dieser IP in den letzten 3 Minuten kamen. Sind es 3 oder mehr, dann muß der betreffende erst mal ein bisschen warten. Jenachdem, ob das reicht, kann ich notfalls auch noch eine weitere Stufe einbauen, z.B. maximal 10 Posts pro Stunde oder so. Ich gehe aber mal davon aus, daß das Störenfrieden relativ schnell den Spaß (?) verdirbt.

Schritt zwei ist auch nicht viel schwieriger: Bisher kam es relativ häufig vor, daß Leute ihre Posts doppelt eingetragen haben. Ich denke, das geschieht einfach durch einen – gewollten oder ungewollten – Doppelklick auf den „Absenden“-Knopf oder durch das drücken des Reload-Buttons. Das wurde bisher nämlich nicht abgefangen. Der Doppelklick wird ab sofort schon mal durch ein kleines Javascript erschwert:

<input type="submit"
value="Absenden"
id="submitbutton"
onclick="window.setTimeout('document.getElementById('submitbutton').disabled = true;', 10);">

Dadurch wird der Knopf nach dem drücken ausgegraut und kann nicht mehr angeklickt werden. Das ist aber noch nicht alles. Im Formular übergebe ich jetzt auch noch ein verstecktes Feld mit einer einmaligen ID:

<input
type="hidden"
name="comment_session"
value="<?PHP echo md5($_SERVER[REMOTE_ADDR] . date("D M j G:i:s T Y")); ?>"/>

Diese wird beim Abspeichern überprüft und damit werden Doppel-Posts effektiv verhindert.

Und jetzt kommt der dritte und momentan letzte Schritt, der allerdings mit der ganzen Störenfried-Thematik nichts zu tun hat:

Wie schon geschrieben, habe ich beim Entwickeln der Forums-Funktion nicht mit einem durchschlagenden Erfolg gerechnet. Der kam aber, und damit wurde alles sehr, sehr langsam. Das Erzeugen der oben verlinkten Seite hat zwischen 20 und 50 Sekunden gedauert – und der Webserver war in dieser Zeit sehr beschäftigt. Das Problem war die Darstellung des Threads in der Baumstruktur.

Der Einfachheit halber habe ich dazu einen rekursiven Ansatz gewählt und diesen auch nicht wirklich optimiert. Es wurden daher ein mal alle Beiträge aus der Datenbank gelesen. Danach wurde die Darstellung gestartet, die auf dem Prinzip basiert, daß jedes mal, wenn ein Beitrag dargestellt wurde, wieder alle anderen Beiträge durchsucht wurden, ob sie in der Hierarchie unter dem gerade dargestellten liegen. Bei 10 Beiträgen ist das nicht weiter wild. Macht 10×10 = 100 Überprüfungen. Wenn jetzt aber wie zum Beispiel bei Counterstrike etwa 600 Beiträge da rumlungern, dann sind wir schon bei 600×600 = 360.000 Vergleichen -> Laaangsaaam 😉

Der neue Ansatz ist wesentlich Resourcen schonender:
Es wird ein mal am Anfang zu jedem Beitrag ein „Hierarchie-String“ erzeugt. Das könnte etwa so aussehen:

0001
0001-0002
0001-0003
0001-0003-0004
0005-0006

Hier hat also das Root-Element die Unter-Elemente 1 und 5. Element 1 wiederum hat die Unter-Elemente 2 und 3, von denen 3 noch das Element 4 enthält. Element 6 liegt in Element 5.

Das Aufbauen eines Hierarchie-Strings ist relativ einfach möglich, indem man jeweils den String des Parent-Elements nimmt entsprechend erweitert. Auch einfach ist es danach, diese Strings zu sortieren – in PHP am geschicktesten mit der Funktion asort(). Und danach muß man nur noch ausgeben. Eigentlich interessiert einen an diesem Punkt die Hierarchie an sich gar nicht. Man muß nur entscheiden, wie weit man seine Elemente einrücken muß – und das kann man aus der Länge des Strings ablesen.

Ergebnis: von 20 Sekunden (im bisher besten Fall, wenn dem Server sonst langweilig war) runter auf 0.2 Sekunden (wenn der Server ganz normal arbeitet). Was so ein Algorithmus ausmachen kann…

Schritt vier wird demnächst folgen: Das Ein- und Ausblenden von Threads durch das Klicken auf kleine „+“ und „-“ Icons, ähnlich wie es z.B. im Explorer mit den Verzeichnissen auch funktioniert. Ich muß mich nur noch entscheiden, welchen Ansatz ich hier nehme. Ich würde ja gerne auf DHTML setzen. Die Art, wie Microsoft das in der MSDN-Seite gelöst hat gefällt mir nämlich super-gut 🙂 – nur macht das so viel Arbeit…

Video – Spielchen

Nachdem ich mir neulich mein neues Spielzeug – eine digitale Videokamera – zugelegt habe, ist gestern auch das FireWire-Kabel eingetrudelt, so daß ich jetzt meine Videos auf den Computer übertragen kann. Und ich muß sagen: Der Fun-Faktor sollte nicht unterschätzt werden. Nicht, daß ich schon viel hätte, was ich auf Video aufgenommen habe. Und ob es wirklich Sinn macht sei auch dahingestellt… Aber man kann toll damit spielen!

Ich habe mal zwei Beispiele erstellt – beide bei mir aus der Wohnung aus dem Fenster rausgefilmt.


Der Mond in der Nacht vom 23.5. zum 24.5.


Die Abendsonne am 24.5.

Virtual Earth

Das ist ja mal cool: Ich habe gerade Channel 9 gefunden. Das ist eine Kommunikationsplattform von Microsoft, in der internas ausgeplaudert werden… Dort werden offensichtlich neue Produkte vorgestellt und gezeigt, woran die Microsofties gerade so arbeiten.

Ich bin drüber gestolpert, als ich mir das Video zu Virtual Earth angeguckt habe – einem richtig coolen Map-Tool, das komplett im Browser läuft.

Und irgendwie zwingt sich mir beim schauen des Videos ein Eindruck von Microsklaven auf.

Danach hab ich noch so ein bissel in den anderen Videos auf der Seite rumgezappt. War spaßig und auf ein mal waren zwei Stunden weg – nicht mit irgendeinem Thriller oder sonstigen Spielfilm, sondern mit Microsoft-Internas. Und wieder was gelernt…

Erstens waren da Infos über Vorstellungsgespräche bei Microsoft, wenn man mal als Entwickler einsteigen will.

Und zweitens bin ich bei Avalon hängengeblieben. Ich meine, wenn man den Amiga-Boing von vor 20 Jahren in ein paar dutzend Zeilen Code entwickeln kann… Irgendwie geil. Ich seh noch nicht ganz den praktischen nutzen – irgendwie vermute ich, daß wir dann wieder größere Bildschirme brauchen, weil wegen dem ganzen 3D nichts mehr in die vorhandenen Punkte reinpasst… Aber eines muß man dem ganzen lassen: Cool ist es schon!

X-Box 360 – Nachschlag

Lust auf ’ne Dauerwerbesendung? Einfach mal bei Xbox.com reinklicken. So toll, daß das System nur Vorteile hat *g*

Dafür hab ich da gelernt, daß meine Annahme aus dem vorherigen Beitrag zum Thema nur halbwegs richtig war. Damals schrieb ich:

Was auf den ersten Blick etwas verwundert, ist die Tatsache, daß wohl nur noch ein Anschluß für einen Controller da ist – im Gegensatz zu vier bei der alten Version. Kurz drauf fällt dann aber auf, daß z.B. der mitgelieferte Controller gar kein Kabel hat. Funk heißt die Lösung – Kabelsalat Ade! Das gefällt mir, denn das ist ohnehin eines der “Major Problems” in meinem TV-Regal 😉

Jetzt habe ich erfahren, daß es gar keinen Anschluß für einen Controller gibt. Das, was ich dafür gehalten habe, ist der Remote Control Receiver, sprich: das Gegenstück zur Fernbedienung.

Ein Besucher meiner Seite, der nicht in der Lage war, eine korrekte Absender Mail-Adresse zu hinterlassen, so daß ich seinen Kommentar leider nicht freigeschaltet habe, hat auch noch einen Hinweis hinterlassen, daß die X-Box 360 der Playstation 3 inzwischen bei einem Test – trotz den doppelt so hohen Teraflops der PS3 – überlegen gewesen sei. Wo diese Erkenntnis jedoch genau her kommt und wie es gemessen wurde… Keine Ahnung ;).

Ist insgesamt ja eigentlich auch sch*** egal.

Letztendlich kommt es drauf an, ob die Spiele Spaß machen, nicht ob die Leistung der Hardware besser ist. Ein Lemmings von vor 12 oder 13 Jahren (wann war’s denn nu noch mal?) wird mich sicher immer noch länger vor den Bildschirm fesseln als jede noch so realistische Flugsimulation… Auch wenn ich jede Schraube des Flugzeugs erkennen kann!

Daten-Zugriff für $200

Das ist mal frech: Eine neue Idee von Internet-Kriminellen ist, Daten auf einem Opfer-Rechner zu verschlüsseln und dann ein Lösegeld für die Entschlüsselung zu verlangen. Nennt man das dann „Datanapping“?

„I would see this as the equivalent of somebody coming into your house, putting your valuables in a safe and not telling you the combination,“ Friedrichs said.

Möglich macht es der Trojaner Pgpcoder, der zum Beispiel über eine entsprechend präparierte Webseite in das Ziel-System eingeschleust wird…