21 Nov, 06
Jaja, die Leute schreiben immer noch übers StudiVZ. Also schreib ich jetzt endlich mal die Sachen auf, die ich in den letzten Monaten (seit meiner Anmeldung beim StudiVZ, Mitte September) so bemerkt habe.
Das mit den Bilder-URLs ist ja schon stadtbekannt. Natürlich machen alle anderen Großen - wie Xing, flickr, etc. - auch so, und das macht es nicht viel besser, aber das ist ja kein Grund, nicht darüber zu schreiben. Man kann also auf Bilder immer zugreifen, wenn man eine direkte URL hat. Na gut.
Viel interessanter fand ich: Die User-IDs sind nicht unique. Man kann die ersten 8-24 Bits (je nach Länge der ID) recht frei ändern und landet immer noch auf dem selben Profil. Das selbe gilt für die Album-IDs und vermutlich auch für die Bild-IDs. Na, was das wohl für ein Algorithmus ist… *hust*
Jedenfalls kann man so sehr leicht alle Benutzer, Alben und Bilder enumerieren, indem man der showalbum.php beliebige IDs in relativ großen Schrittweiten gibt. Wenn man einen Treffer hat, steht die ‘wahre’, primäre Album-ID (sowie Titel und Besitzer) im Seitenquelltext. Damit kann man dann den Bildserver behämmern. Für nicht-öffentliche Alben muss man dann nur den Rest des Suchraums durchgehen, oder man knackt einfach die ID-Erzeugung. Der Bilderserver geht jetzt schon merklich in die Knie.
Listen aller Alben eines Benutzers gibt’s bei showpeoplealbums.php, wobei auch hier gilt: etwa die Hälfte der ID ist eh wurscht. Es gibt verschiedene Meldungen für “Album ist noch leer” und “hat keine Alben”.
Immerhin hat man durch die eigenen IDs (3-6 Zeichen) gegenüber UUIDs (16-36 Zeichen) Traffic gespart…
Auch interessant: Das StudiVZ benutzt offenbar Smarty und sajax. Smarty, klar, sinnvoll. Sajax, auch sinnvoll, aber hoffentlich haben sie nicht zu viele Funktionen exportiert, auf die Normalsterbliche eigentlich gar nicht zugreifen können sollten. Na, wer will’s testen?
Was haben wir noch … ach ja, das mit den nichtöffentlichen Profilen? Geht ja auch grade durch die Welt… sei es nun friends.php oder profile_guestbook_large.php oder showpeoplealbums.php, man kann sich so ziemlich alle Teile eines “privaten” Profils ansehen. Hübsch. Da fällt auch das “Diese Nachricht wurde von Foobar gelöscht und
wird anderen Mitgliedern nicht mehr angezeigt” nicht mehr ins Gewicht.
Hätte ich mich doch nur noch ein paar Wochen länger geweigert, da mitzumachen! Le seufz! Todo für morgen: Profile meiner Freunde scrapen, mein Profil löschen, Freunde per ICQ anhauen, done. Gute Nacht.
17 Nov, 06
Wer sich über Incoming Links von einer Domain, die nicht verlinkt werden möchte, gewundert hat:
Domain: punish-punisher.de
[Holder]
Type: ORG
Name: Solutions-World LTD.
Address: Suite C4 1st Floor, New City Chambers, 36 Wood Street, Wakefield
Pcode: WF1 2HB
City: West Yorkshire
Country: GB
Changed: 2006-09-12T10:28:54+02:00
[Admin-C]
Type: PERSON
Name: Mario Dolzer
… der hat spätestens an dieser Stelle keine Fragen mehr. Ja, das ist der “Domain-Engel” mit der k.exe, dem “Dialer-Parasit”-Urteil, usw. usf. Jetzt also ein Fakeblog. *gähn* Da fühlt sich aber jemand sehr als armes, unschuldiges Opfer. Ich jedenfalls fühle mich in der “moralisch bedenklichen” Gesellschaft recht wohl.
Interessanterweise gibt es sogar ein Impressum (in dem natürlich “Allice Brown” aufgeführt ist) … impressum.jpg (6000x6000px) …
Update: Die Abmahnungen fliegen.
06 Nov, 06
Actually I was only trying to get the list of links in the sidebar sorted by the time of their last update. Naïvely, I tried to just pass get_links() the ‘_updated’ parameter, but it didn’t work. Since the codex is more or less down, and googling using a search engine didn’t help much, I resorted to just reading the fine code. So, to answer my own questions for posteriority and those using a search engine to find out about get_links:
- passing ‘_updated’ should work; contrary to what some believe, it does not sort by ‘time you last edited the link’, but really tries to sort on ‘time the link last updated’;
- if it does not work, that’s probably because api.pingomatic.com is timing out since forever, despite ‘servers donated by automattic’;
- all blogroll-updating plugins I found do all sorts of weird things, but don’t work in the end; I for one t hink that asking any number of services for all changes they registered in the last 5 or 10 minutes and then manually filtering for entries in ones blogroll is, well, overkill, not to mention that it causes a load of unnecessary traffic on both ends;
- as of now, there doesn’t seem to be a plugin that does the obvious thing, namely to just check the goddamn RSS feeds I manually entered for every link in my blogroll!
which leads us to
- link lists in WordPress are in a sorry state of affairs, and
- I should probably write such a plugin.
28 Sep, 06
I just came across ApplySpace via the Girlfriend application via the SubLIMEnal theme via somewhere. Praise the ‘net.
30 Aug, 06
[lang_en]
Before I continue blogging fo’real, yo yo…
Read more Sinfest!
[/lang_en]
[lang_de]
Bevor ich mit meiner vielen Freizeit wieder richtig zu bloggen anfange…
Lest mehr Sinfest!
[/lang_de]
09 Jul, 06
[lang_de]Dieser Eintrag ist nur auf Englisch verfügbar.[/lang_de]
You may or may not have heard about the no-www movement. All my sites have always been reachable with and without the www prefix, and I personally never use the www prefix if I can avoid it. I won’t get into the details of why it is a bad idea, but consider this: no one calls the web ‘WWW’ anymore, and this ‘abbreviation’ is a lot longer than the expansion (‘double-you double-you double-you’ vs ‘world wide web’). If anything, the prefix should be ‘web’.
Starting today, I’m having all my domains permanently redirect to the non-www version of the hostname.
Here’s a simple mod_rewrite recipe that should work for any domain:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L,NS]
Put it inside a <Location "/"> block in the appropriate VirtualHost block, or inside a .htaccess in the document root of your site (it doesn’t seem to work in a VirtualHost block in the server config, any ideas why?).
It’s like magic.
05 Jul, 06
[lang_de]Dieser Eintrag ist nur auf Englisch verfügbar.[/lang_de]
hostip.info is a free GeoIP service. Unfortunately their webservice is slow and they are in the middle of a backend change (from 256 ip_X tables to one table listing all /24 nets…). However, their information is more exact than that of countries.nerd.dk.
To convert the data from hostip.info’s format into something remotely sane usable, you have to merge the ranges into CIDR-blocks per country. If you don’t do that, you’ll get a 160MiB result file which will take ages for ip2countryd to process. With proper optimization and merging, though, the resulting file is barely 4MiB in size and ip2countryd loads like a breeze.
- ip2countryd-r3.tgz 12KiB
Revision 3 of ip2countryd, minor changes, includes a script to convert hostip.info CSV dumps to rbldnsd format.
- hostip-data.tgz 1.1MiB
The current dump from hostip.info in rbldnsd format, including the cached version.
The test service at udp://ubermutant.net:8000/ has been updated to r3 with the hostip.info db.
Now, for the rant. hostip.info used to use 256 tables in their DB - one for each class A network. Inside each of these tables were two columns for the second and third octet of the IP. Luckily, they got better and away from this inane structure, switching instead to one table that holds the IP in a single INT column, as a long. But they still store one record for each /24 subnet in existence, plus some invalid and reserved ones (0.0.0.0/24? righto!). I don’t know how they query this monster, since the new site source is not yet available in their SVN, but I’m not sure if I even want to know. The sanest possibility I can think of right now is to take the lower 24 bits of the query and look that up. That still leaves one question, though: Why, oh why, must this be done in gigantic MySQL tables and for every single class C subnet?
Sometimes, a database just isn’t the best solution.
05 Jul, 06
[lang_de]Dieser Eintrag ist nur auf Englisch verfügbar.[/lang_de]
If you need to find out what country an IP is in, but are forced to use PHP or some other language without proper DNS querying features (but which can do UDP), here’s a little something for you.
ip2countryd-r2.tgz 344KiB - ip2countryd revision 2
Includes the required data file (~2MiB) and the cached data (~432KiB).
Runs a daemon on UDP port 8000 (by default) that responds to an input IP address with the ISO country code of the IP’s country, or ‘error’ if anything goes wrong (no mapping, not an IP, etc.). There is a test server at udp://ubermutant.net:8000/.
$ nc -u ubermutant.net 8000
207.13.77.53
us
212.227.57.11
eu
Idea from WP-ShortStat and the associated ip2country service. I wrote this just for the fun of it and because I wanted to see how long it would take me.
Total time required: ~1 hour.
15 Jun, 06
Auch ohne $DEITY sind the broadband ganz lustig. “Net Neutrality” (or the lack thereof) ist leider kein gar so lustiges Thema, aber von hier aus können die meisten von uns nur Daumen drücken. Also!