Archive for the ‘Google’ tag
Pagerank-Update
Am 31.12.2009 war es wieder soweit: Google hat seine Pageranks aktualisiert, wie man auf dieser Update-Seite sehen kann. Und es gibt erfreuliches zu berichten:
Mein kleiner Blog ist bereits auf PR 4 gestiegen! Whao! Danke an euch, an alle Leser, Feed-Abonenten und anderen Blogger, die mich verlinken!
Das ist wirklich nochmal ein riesen Schritt, Anfang November 2009 war es Pagerank 2. Aber ab jetzt wird es hÀrter, den Pagerank zu steigern, wie man auch beim bekanntesten deutschen PHP-Blog phphatesme.com von Nils sehen kann, der auch an PR 5 knabbert.
Beim Suchbegriff „php blog“ lande ich nach wie vor auf Rang 45-53, das schwankt ab und zu. Da muss ich noch dran arbeiten.
Mein Pagerank
So langsam scheint Google zu merken, dass mein Blog wichtig ist! đ
Am 17.09. war ich noch auf Platz 149 zu finden, wenn man nach „php blog“ sucht.
26.09. Platz 95
29.09. Platz 52.
06.10. Platz 46
02.11. Platz 48
Ich bin mir noch nicht ganz sicher, warum das gerade stagniert.
Aber es gibt einen Grund zu feiern: Mein Pagerank ist am vergangenen Wochenende von 0 auf 2 gestiegen! Yeah!
Mein gesetztes Ziel sind die Top 10 beim Suchbegriff „php blog“. Ich nehme Tipps immer gern entgegen, wie ich das schaffen kann. Es gibt nĂ€mlich viele andere gute PHP-Blogs, und an denen vorbeizuziehen wird nicht einfach. AuĂerdem sind einige Verzeichnisdienst- und Katalog-EintrĂ€ge vor meiner eigentlichen Website, was ich gern auch noch beheben wĂŒrde. Mal sehen.
Der beste Tipp ist wahrscheinlich, mehr gute Artikel zu schreiben. Daran arbeite ich *Schweiss von der Stirn wisch*.
Hier gibt es ĂŒbrigens Informationen ĂŒber den Google Pagerank und wann genau die Updates stattfinden. Ich bin ja sehr gespannt ob der Pagerank Ende des Jahres abgeschafft wird, die Diskussion lĂ€uft ja gerade (mal wieder).
Verteiltes Rechnen mit Javascript und Google Gears
Wie ich ja bereits des öfteren anmerkte, habe ich frĂŒher ein Browsergame programmiert. Begonnen habe ich 2003, als es erst recht wenige Browsergames gab, und diese auch alle von Privatleuten als Hobby betrieben wurden. Da man natĂŒrlich Alleinstellungsmerkmale braucht gegen „die Konkurrenz“, baut man viele Ideen ein, die andere nicht haben. Unter anderem war in meinem Browsergame (es handelte sich um ein Aufbauspiel a la OGame, Stoneage etc.) das erste Mal auch ein Turniermodus (1on1) möglich, so dass man abseits der lang laufenden Welten auch in einem KO-Modus gegen andere antreten konnte. Dazu wurden Speed-Server fĂŒr die ausgelosten Paare gestartet, wo dann 2 Spieler gegeneinander antreten mussten und gewisse Siegbedingungen erreichen mussten. ICQ-Benachrichtigungen bei bestimmten Ereignissen hatte ich auch recht frĂŒh eingebaut.
In der folgende Version (die leider nie das Licht der Welt erblickt hat) kamen noch viele weitere interessante Features hinzu. Der Quellcode wurde komplett neu geschrieben in PHP5, war nun voll objektorientiert (in PHP4 war das ja nur sehr beschrĂ€nkt möglich), und auch neue „Web2.0“ FunktionalitĂ€ten waren mit drin.
So gab es zum Beispiel eine Möglichkeit, dass Spieler sich selbst Weltkarten zusammenbauen konnten mit einem einfachen Editor. Der Spieler hat dazu mehrere Feldtypen (Gras, Fels, Wasser, Berg, Moor) und kann daraus eine Karte basteln, auf der er dann gegen andere antreten kann (und wenn sie gut bewertet wird, kann es auch eine Karte fĂŒr einen „groĂen“ Server werden, wo tausende Spieler drauf spielen). Eines der Probleme, die es dabei gab, war die Berechnung der Wege. Man muss, um seine Armee zu bewegen, nur das Zieldorf anwĂ€hlen und kann dort angreifen. Der Dijkstra-Algorithmus bestimmt dann die Zeit, die die Armee unterwegs ist. Dazu muss man den genauen Weg kennen, denn es gibt auch unpassierbares GelĂ€nde (in diesem Fall Berge) oder FlĂ€chen, auf denen die Armee langsamer ist (Moor). Da die Karten mitunter sehr groĂ sind (zB 1000*1000), dauert diese Berechnung recht lang. Diese Berechnung bei jeder Armeebewegung zu machen macht die Webseite ziemlich lahm. Also habe ich fĂŒr die „Standardkarten“ diese Berechnungen bereits erledigt und die 500.000 Ergebnisse (von jedem Feld zu jedem anderen) in einer Datenbank gespeichert.
Wenn nun aber viele Spieler neue Karten basteln, schafft das der Server nicht mehr, er muss ja auch nebenbei noch fĂŒr die eigentlichen Webseiten und Datenbanken herhalten. Eine Berechnung fĂŒr eine Karte dauert mitunter 20 Stunden (Dijkstra Algorithmus in PHP).
Was also tun? Richtig, wir verteilen die Arbeit auf die Client-Rechner. Die 500 Spieler, die auf der Webseite rumsurfen und das Spiel spielen, können nebenbei auch bei der Berechnung helfen. Doch wie macht man das? Aufwendige Dinge wie ein eigenes Client-Programm schreiben, oder Plugins fĂŒr BOINC etc. sind zu aufwĂ€ndig und ĂŒbertrieben. Wie so hĂ€ufig gibt es eine einfache Lösung: Gears von Google.
Mit Gears kann man asynchron Javascripte ausfĂŒhren, die die Webseite nicht beeintrĂ€chtigen, indem man sogenannte WorkerPools mit Arbeit versorgt.
Hier habe ich mal ein einfaches Beispiel:
main.html
<script type="text/javascript" src="gears_init.js"></script> <script type="text/javascript"> var workerPool = google.gears.factory.create('beta.workerpool'); workerPool.onmessage = function(a, b, message) { alert('result from worker ' + message.sender + ': \n' + message.body); }; var childWorkerId = workerPool.createWorkerFromUrl('worker2.js'); workerPool.sendMessage([5, 1, 8], childWorkerId); </script>
worker2.js:
var wp = google.gears.workerPool; wp.onmessage = function(a, b, message) { // do calculation here var reply = message.body[0] + message.body[1] + message.body[2]; wp.sendMessage(reply, message.sender); }
Wenn man die entsprechende Webseite aufruft, wird man gefragt, ob der Zugriff auf Gears erlaubt werden soll. Wenn man Gears installiert hat, kann man also noch von Fall zu Fall unterscheiden, ob man der Webseite seine Resourcen zur VerfĂŒgung stellen möchte oder nicht.
Was passiert nun? Die Webseite startet einen WorkerPool, in diesem Workerpool wird ein Worker gestartet, der das Script worker2.js ausfĂŒhren soll. Wir senden an den darin befindlichen Worker ein Array mit 3 Zahlen.
Der Worker errechnet dann die Summe dieser Zahlen, und sendet das Ergebnis zurĂŒck an den WorkerPool. Diese Nachricht fangen wir mit dem „onMessage“ Eventhandler ab und zeigen das Ergebnis mittels alert() an.
Wie wĂŒrde nun die Kartenberechnung funktionieren? Wir ĂŒbergeben statt dem einfachen Array ein komplexes groĂes Array mit dem Graphen, den Kantengewichten usw. Im Worker findet dann die eigentliche Dijkstra-Berechnung statt. Dort wĂ€re es sinnvoll, nicht die ganze Karte zu berechnen (Dauer 20 Stunden), sondern nur kleine HĂ€ppchen, die in wenigen Sekunden bearbeitet sind. Statt das Ergebnis dann via alert() auszugeben, schicken wir es via AJAX zurĂŒck an den Webserver, der das Ergebnis in die Datenbank eintrĂ€gt.
Leider ist es bei diesen ersten Tests geblieben, ich habe die eigentlichen umfangreichen Dijkstra-Berechnungen nie in Javascript mit Gears umgesetzt. Aber möglich ist es.
Eine einzige HĂŒrde gibt es: Auf dem Clientrechner muss Gears installiert sein. Mit einer guten Community und Nutzern, die einem vertrauen, ist aber auch das machbar.
Alternativ kann man natĂŒrlich auch ohne Gears die Berechnungen in Javascript durchfĂŒhren lassen. Dabei muss man jedoch beachten, dass der Browser dadurch nicht unbenutzbar wird. Man muss also die Berechnung kĂŒnstlich bremsen, auĂerdem muss man eine Lösung dafĂŒr finden, dass der Browser lang laufende Javascripte gern auch mal abbrechen möchte.
Mit Gears passiert sowas nicht.
AnwendungsfĂ€lle des Dijkstra-Algorithmus sind beispielsweise das bekannte „Friend of a Friend“ Problem (soziale Netzwerke zeigen an, ĂŒber wieviele Kontakte man eine andere Person kennt) oder alle anderen Arten, wo man in einem Graphen den kĂŒrzesten Pfad ermitteln möchte. Man kann so sicherlich auch noch andere, komplexe Berechnungen auf die Clients auslagern.
Gears kann man natĂŒrlich auch noch fĂŒr viele weitere Dinge nutzen, wie schöne Benachrichtigungen, als lokalen Speicher fĂŒr Dateien oder Daten (Datenbank), Geolocation (was ja mittlerweile die Browser schon nativ beherrschen) usw.
Habt ihr Erfahrungen mit Gears, oder Ideen welche revolutionÀren Dinge man damit umsetzen könnte?