Archive for May, 2007

Adsense-Experimente mit Konkurrenzfilter

Ich habe heute mal für einen Tag meine komplette Filterliste für Konkurrenzanzeigen bei Google Adsense gelöscht, um zu schauen, ob vielleicht passendere Werbung kommt.

Das war nicht der Fall, dafür sind die Klickpreise auf einen sagenhaften Dollar-Cent gefallen. US$ 0.01.

Davor lagen die so bei $ 0.10 bis $ 0.15 im Durchschnitt - auch nicht unbedingt toll, aber deutlich besser.

Bisher dachte ich ja, dass die Anzeigenplätze im Auktionsverfahren an den Meistbietenden versteigert werden. Wieso sollte dann so viel schlechtere bezahlende Anzeigen geschaltet werden, wenn da auch besser bezahlte zur Verfügung stehen? Es wäre doch auch in Googles Interesse, möglichst gut bezahlte Anzeigen zu schalten.

Kann mir das jemand erklären?

Die Klickrate ist dadurch übrigens nicht angestiegen, die CTR als Gewichtungsfaktor fällt also auch flach.

Technorati Tags: , ,

Comments (12)

Eigene Funktionen in Perl

Eigene Funktionen in Perl definiert man mit dem Schlüsselwort sub:

sub meine_funktion {
    ...
}

Die Argumente dieser Funktion werden in der speziellen Variable @_ gespeichert, und darauf kann man direkt zugreifen, oder indirekt über die Funktion shift, die das erste Element zurückliefert:

sub myjoin {
    my $val = shift;
    return "$val: " . (join ", ", @_) . "n";
}
print myjoin('foo', 1, 2, 3);   # Ausgabe: foo: 1, 2, 3
# ohne Klammern gehts auch:
my $string = myjoin 'foo', 1, 2, 3;

Eine andere Möglichkeiten das schreiben:

sub myjoin {
    my ($val, @rest) = @_;
    return "$val: " . (join ", ", @rest) . "n";
}

Wenn eine Funktion immer eine vorher bekannte Anzahl von Argumenten erwartet, kann man auch Prototypen dafür angeben:

sub summe($$) {
    my ($lval, $val) = @_;
    return $lval + $val;
}

Wenn man diese Funktion aufruft bevor sie deklariert wird, und man use warnings; im Code stehen hat, bekommt man eine Warnung:

main::summe() called too early to check prototype at foo.pl line 3.

Das kann man damit umgeben, dass man gleich am Anfang den Prototyp hinschreibt:

sub summe($$);

# restlicher Code hier
sub summe($$) {
    my ($lval, $val) = @_;
    return $lval + $val;
}

Dieser Artikel ist ein weiterer aus der Reihe “Suchbegriffe, mit denen Leute auf meine Perl 6-Seite gefunden haben”.

Comments (2)

Verschachtelte Arrays in Perl

Immer wieder suchen Leute mit Google nach “perl verschachtelte Arrays”, und landen auf meiner Perl 6-Seite, wo die Erklärung natürlich nur für Perl 6 gilt.

Hier also die Perl 5-Erklärung:

Listen werden üblicherweise “geflattet”, d.h. wenn man eine Liste in eine andere einfügt, ist das Ergebnis wieder nur eine einzige Liste:

my @a = (1, (2, 3), 4, 5);
# Ist identisch mit (1, 2, 3, 4, 5)

Abhilfe schaffen Referenzen, die man durch Vorstellen eine Backslash \ erzeugt:

my @b = (2, 3);
my @a = (1, \@b, 4, 5);
print $a[1][0], "n";     # Ausgabe ist 2
print scalar @a, "n";   # Länge von @a, also 4

Um aus Arrays Referenzen zu machen, kann man auch eckige Klammern nehmen:

my @a = (1, [2, 3], 4, 5);

Wenn man einer Referenz auf ein Array ein @ vorstellt, macht man daraus wieder ein “echtes” Array:

my $a = [1, 2, 3, 4];
print join ", ", @$a;

Wenn man nur auf ein Element einer Arrayreferenz zugreifen will, kann man den Pfeiloperator verwenden:

my $a = [1, 2, 3, 4];
print $a->[0], "n";         # Ausgabe: 1

Eine Ausführliche Beschreibung gibt es in der deutschen Übersetzung von perllol (lol steht hier für “Lists of Lists”)

Comments (2)

Schäuble auf dem LinuxTag

Gerade habe ich gelesen, dass Schäuble die Schirmherrschaft des LinuxTags inne hat.

Wer auch nur halbwegs über Schäuble informiert ist, wird mir zustimmen, dass es in Deutschland kaum einen Prominenten Politiker gibt, der sich schlechter dafür eignet.

Deswegen habe ich eine Protest-Mail an presse@linuxtag.org geschickt, und vordere alle politisch interessierten Linux-Benutzer auf, es mir gleich zu tun.

Technorati Tags: , , ,

Comments

Frequently Google Questions zum Thema Perl

Seit ich eine Webseite zum Thema Perl 6
betreibe, sehe ich in den Logfiles immer wieder Referer von Google mit
diversen Suchanfragen, die sich anscheinend auf Perl 5 beziehen, nicht auf
Perl 6.

Und da die meisten dieser Fragen nur für Perl 6 beantwortet werden, möchte ich
an dieser Stelle ein paar anscheinend häufig gestellte Perl-Fragen
beantworten.

Wie breche eine Schleife in Perl ab?

Dafür gibt es das Schlüsselwort last, das das gleiche macht wie
in C das Schlüsselwort break.

Logarithmus in Perl

Perl hat die Funktion log, die den natürlichen Logarithmus
berechnet, also zur Basis e = 2.7183.

Um den Logarithmus zu einer anderen Basis zu berechnen, muss man nur durch den
natürlichen Logarithmus der Basis teilen:

sub log10 {
	my $arg = shift;
	return log($arg) / log(10);
}
sub log2 {
	my $arg = shift;
	return log($arg) / log(2);
}
print log2(16), "n";	# Ausgabe: 4

Sinus und Cosinus Hyperbolicus (sinh und cosh)

Im Gegensatz zu Perl 6 gibt es in Perl 5 noch keine bultin sinh und
cosh-Funktionen, man muss sie sich selbst schreiben:

sub sinh {
	my $arg = shift;
	return 0.5*(exp($arg) - exp(-$arg));
}
sub cosh {
	my $arg = shift;
	return 0.5*(exp($arg) + exp(-$arg));
}

Umlaute in Perl, lc, uc und sort

Per Default sortiert Perl Umlaute nicht so, wie man das erwartet, ebenso
werden von lc und uc Umlaute nicht korrekt in Klein-
und Großbuchstaben umgewandelt.

Mit use locale; und entsprechender locales-Konfiguration (z.B.
über Umgebungsvariablen) kann man das ändern, wie genau ist in
perldoc perllocale beschrieben - besser kann ich es auch nicht
beschreiben ;-).
Dummerweise erfordert dieses Vorgehen, dass das Betriebssystem die verwendeten
Locales auch unterstützt.

Die gute Nachricht

Je mehr in FAQs beantwortet werden muss, desto mehr müssen sich die Designer
einer Sprache fragen, was sie falsch gemacht haben.

Deswegen wird es zwar für Perl 6 jede Menge
Umsteiger-FAQs geben (für Perl 5-Programmierer), aber das Ziel ist es,
möglichst wenig “echte” FAQs zu brauchen.

Comments