Tools für reguläre Ausdrücke: The Regulator & Regulazy

Published 2006-07-28, 08:46

Keiner mag reguläre Ausdrücke. Deshalb gibt es auch so viele toole Tools, die helfen sollen sie zu verstehen, visualisieren oder zu erstellen. The Regex Coach von Edi Weitz nutze ich schon eine Zeit lang. 2 weitere sind mir gerade über den Weg gelaufen:

  1. The Regulator

    The Regulator is an advanced, free regular expressions testing and learning tool written by Roy Osherove. It allows you to build and verify a regular expression against any text input, file or web, and displays matching, splitting or replacement results within an easy to understand, hierarchical tree.

  2. Regulazy

    Regulazy is a visual Regex Creation tool for beginners. Easy point and click user interfaces, predictive technology and much more! Still in alpha, but more features are coming!

Beide sind übrigens von Roy Osherove und werden in nächster Zeit mal bei mir getestet.

Topic(s): Link, Notiz, PHP, Technik No comments - :(

Adwords: Tuzhilin-Report / Klickbetrug

Published 2006-07-27, 00:00

Mal zur Abwechslung etwas interessantes und unerwartetes aus dem Google-Universum:

Findings on invalid clicks

As part of the settlement in the click-fraud case Lane’s Gifts v. Google, we agreed with the plaintiffs to have an independent expert examine our detection methods, policies, practices, and procedures and make a determination of whether or not we had implemented reasonable measures to protect all of our advertisers. The result of that is a 47-page report, written by Dr. Alexander Tuzhilin, Professor of Information Systems at NYU.

Hier der direkte Downloadlink: http://googleblog.blogspot.com/pdf/Tuzhilin_Report.pdf

Insgesamt keine großen Überraschungen, wer mit Adwords und/oder Adsense zu tun hat findet aber vielleicht noch einige interessante Informationen. Dabei ist jedoch zu beachten, dass die Informationen nicht direkt von Google stammen, sondern von einem dritten zusammengetragen wurden. Einige Absätze möchte ich aber hervorheben bzw. einfach zur späteren Referenz hier zitieren:

Seite 9, vorletzter Absatz:

The top-of-the-page placement rank is also determined by the above Ad Rank formula; however, the value of the QualityScore for the top-of-the-page placement is computed somewhat differently than for the side ads.

Der QualityScore für die Adwords-Anzeigen über den Suchergebnissen wird also anders berechnet als für normale Anzeigen. Weitere Informationen gibt es nicht dazu.

Seite 36:

9.3.2 Auto-Termination System for AdSense Publishers

Initially, all the terminations of the AdSense publishers for inappropriate behavior were done manually. Currently, it is a mixture of manual and automated terminations, with the auto-termination rates growing steadily.

Auto-Termination System is an automated offline system for detecting the AdSense publishers who are engaged in inappropriate behavior violating the Terms and Conditions of the AdSense program. It examines online behavior of various publishers and either immediately terminates or warns the publishers who are engaged in the activities that the system finds to be inappropriate.

More specifically, the Click Quality team has developed a set of conditions indicative of a strong possibility of inappropriate behavior of the publishers. If certain combinations of these conditions hold, the Auto-termination system would take one of the following actions depending on the severity of these conditions:

  • Automatically terminate the publisher if the violating conditions are really severe;
  • Automatically warn the publisher if the violating conditions are indicative of inappropriate activities but are not as severe as in the previous case. This warning happens when certain “flags are raised,” but not enough hard evidence is accumulated to be certain that the publisher is engaged in inappropriate activities. As a part of the warning, Google requests the publisher to disengage from these activities and gives a grace period to the publisher. If these inappropriate activities do not stop within a certain time period, the publisher is terminated by the autotermination system.
  • Request for a Manual Inspection: Pass the publisher’s case for a manual inspection by the team of Google’s investigators in case the auto-termination system does not have strong evidence to terminate or even warn the publisher. This request is placed in the inspection queue and is subsequently retrieved and inspected by one of the Click Quality investigators using the inspection tools described in Section 9.4.

The decision to terminate, warn or manually inspect the publisher is based on a set of various conditions pertaining to publisher’s behavior that were developed by Google’s Click Quality team based on their extensive prior experiences in dealing with the AdSense publishers.

The first prototype of the auto-termination system was built in the early 2005 and the system was launched in the summer 2005. Recently, Google has developed major enhancements to the current version of the auto-termination system deploying an alternative set of technologies.

Dies erklärt die teilweise unerwarteten Warnmails, die einige Adsense-Publisher bekommen haben.

Seite 39:

Detection of duplicate publishers: Google has a system that detects multiple publishing accounts opened by the same person or an entity. Such cases are manually inspected after detection.

[…]

Duplicate accounts, i.e., whether a particular individual or an entity has duplicate publishing accounts or had a previously terminated publishing account(s) with Google.

Seite 40:

When a publisher is terminated, all the clicks (valid and invalid) from the terminated publisher within a certain time period are credited back to the affected advertisers.

Worauf sich „a certain time“ bezieht, wird natürlich nicht geklärt.

PHP: Zeilennummer ausgeben mit __LINE__

Published 2006-07-21, 13:08

Ach, da code ich nun seit x Jahren mit PHP durch die Gegend und bin nie auf die Idee gekommen, mal zu schauen, ob denn die Zeilennummer, die gerade ausgeführt wird, ausgeben werden kann.

Heute hatte ich dann endlich diese Idee: http://de.php.net/constants.predefined

Das hat man nun vom „Learning by Doing“…

Topic(s): PHP, Technik 2 comments - :)

Cursor vs. Cursor mit Haken

Published 2006-07-20, 00:52

Mir nun schon mehrmals aufgefallen, und ich muss peinlicherweise zugeben, dass ich keine Ahnung habe, was den Unterschied zwischen diesen beiden Text-Cursorn ausmacht:

Cursor vs Cursor mit Haken

Der zweitere mit Haken taucht hin und wieder auch in meiner Firefox-Adressleiste auf, allerdings ohne erkennbaren oder nachvollziehbaren Grund.

Kennt jemand den Unterschied zwischen diesen beiden Cursorn?

Topic(s): Kram, Technik 8 comments - :)

Häufige Fehlerquelle bei mysql_real_escape_string()

Published 2006-07-19, 23:16

mysql_real_escape_string() sollte ja auf jeden String angewendet werden, der in die Datenbank eingetragen wird. Mehrmals passierte es mir nun schon, dass ich auf neuen Servern nach der Ausführung eines Scriptes den Backslash auch in der Datenbank wiederfand. Grund:

Falls Sie magic_quotes_gpc aktiviert haben und mit Daten aus Benutzereingaben arbeiten, müssen Sie vorher Ihre Daten mit stripslashes() behandeln.

So einfach. Muss es mir nur merken. Und den Apache nach der Änderung neu starten.

Topic(s): MySQL, PHP 2 comments - :)

WordPress-Sicherheit: nonce?

Published 2006-07-17, 03:02

Wer ein wenig mit dem WordPress-Admininterface (>= 2.0.3) herumspielt findet früher oder später im Quellcode ein seltsames hidden Field:

<input type="hidden" name="_wpnonce" value="b6f49bd123" />

Für was das gut ist, wird hier erklärt: http://asymptomatic.net/2006/06/01/2370/what-is-all-this-nonce-sense/

Topic(s): Wordpress 1 single comment - :/

Adsense Link-Block als Fake-Navigation

Published 2006-07-16, 21:08

Vermutlich nicht ganz sauber, was die Google Adsense TOS angeht, aber wirklich gut gemacht:

http://www.sapiensbryan.com/ads-minded-wordpress-theme/

Topic(s): Adsense No comments - :(

Vorsicht bei der php-Funktion http_build_query()

Published 2006-07-14, 17:59

Die Funktion http_build_query() kann ab PHP5 dazu benutzt werden aus Arrays einen URL-enkodierten String zu machen. Das ist toll. Vorher musste man sich das selber schreiben:

function http_build_query($formdata, $numeric_prefix = "") {
$arr = array();
foreach ($formdata as $key => $val)
$arr[] = urlencode($numeric_prefix.$key)."=".urlencode($val);
return implode($arr, "&");
}

Aufpassen sollte man jedoch, dass der Parameter „arg_separator.output“ in der php.ini wirklich auf „&“ und nicht auf „&amp;“ eingestellt ist – die angefragten Server nehmen einem das sehr übel. Zusätzlich entdeckt man es im Output des Query-Strings im Browser nicht.

Warum ich das erzähle? Ich habe heute fast eine ganze Stunde damit verbracht. Klasse.

Topic(s): PHP 4 comments - :)

Google übertreibt es mal wieder…

Published 2006-07-13, 17:56

xyz.zip enthält eine exe-Datei. Aus Sicherheitsgründen ist das Senden dieses Dateityps in Google Mail nicht zulässig.

Frechheit.

Dabei habe ich die exe-Datei extra noch gezippt um beim Empfänger keine Probleme zu verursachen. Dann eben doch per Webserver.

Topic(s): Kram 1 single comment - :/

Pingfix: Der doofe WordPress-Option-Cache…

Published 2006-07-09, 23:47

Einige meiner Testnutzer berichteten von Problemen bei den Pings für ehemals in die Zukunft datierte Beiträge. Irgendwie wurden diese Pings mehrfach ausgeführt, teilweise alle 15 Minuten über den Zeitraum mehrerer Tage. Nicht gut.

Ich habe also den halben Nachmittag damit verbracht das Problem aufzuspüren, schlussendlich lag es am WP-internen Caching. Hier werden auch Einstellungen von WordPress zwischengespeichert. Pingfix zweckentfremdet diese Datentabelle um die noch zu pingenden Einträge zwischenzuspeichern (Dadurch kann auf eine zusätztliche Tabelle oder Spalte in der Beitragstabelle verzichtet werden).

Über die Standardfunktion get_option() bekam PingFix nun also immer die zwischengespeicherten und teilweise nicht aktuellen Werte. Ich habe nun die get_option() kopiert und als PF_get_option() leicht modifiziert in PingFix übernommen.

function PF_get_option($setting) {
global $wpdb;
$row = $wpdb->get_row("SELECT option_value FROM $wpdb->options WHERE option_name = '$setting' LIMIT 1");
if( is_object( $row) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values
$value = $row->option_value;
wp_cache_set($setting, $value, 'options');
} else {
return false;
}
return apply_filters( 'option_' . $setting, maybe_unserialize($value) );
}

Warum der Cache mit den Einstellungsoptionen nicht aktualisiert wurde, konnte ich übrigens nicht klären. Eine richtige Dokumentation oder ähnliches zu diesen Funktionen habe ich auch nicht gefunden. Was soll’s, nun passt alles. Hoffe ich ;)

Topic(s): Wordpress No comments - :(

19 queries. 0,240 seconds.