Drupal mit neuen Google AdSense Werbeblöcken (Serverbasiert)

Neues AdSense


(Affilliate Link 🙂 ) sind neuerdings Serverbasiert. Das heisst: Aussehen, Inhalt, etc kann grösstenteils von der AdSense-Seite aus gemanaged und muss nicht mehr mühsam von Hand auf jeder Seite eingepflegt, geftpt und gecheckt werden. Das geniale Drupal AdSense Modul beherrscht diese neue Variante leider (noch) nicht von Haus aus. Mit einem kleinen Patch geht das aber.

Vorgehen

  1. Die Datei adsense.module mit diesem Patch so patchen, wie in diesem Beitrag beschrieben.
  2. Auf der Google AdSense Seite AdSense-Setup → Anzeigen Verwalten aufrufen und eine neue Anzeige designen.
  3. Den Code anzeigen lassen und die Slot-Nummer notieren. Es sollte etwas sein wie 2666876213.
  4. In Dupal als Administrator Administer → Site configuration → Google AdSense aufrufen und Custom Channels aufklappen.
  5. Die Slotnummer in einen Channel schreiben.
  6. Diesen Channel beim Block für die Anzeige einsetzen.
  7. Warten… Und sich freuen…

Installation von Drupal ohne „CREATE TEMPORARY TABLE“ Rechte unter MySQL

Problem

Drupal[lang_de]Einige Hoster geben – wahrscheinlich wegen des momentanen Vollmondes – das MySQL Recht CREATE TEMPORARY TABLES nicht an ihre Kunden. Drupal möchte das leider und so muss man es umgehen 🙁 …

Bei der Installation beispielsweise wird gemeldet:[/lang_de]
[lang_en]
Some hosting providers do not grant the MySQL-userright CREATE TEMPORARY TABLES to their customers. Maybe because it’s full moon at the moment and everyone seems a bit crazy. But a href=“http://drupal.org/“>Drupal really wants this right and so a workaround is needed 🙁 …

The error during the installation could be something like this:[/lang_en]

user warning: Access denied for user: 'drupal@%' to database 'drupal' query: CREATE
TEMPORARY TABLE missing_nids SELECT n.nid, n.created, n.uid FROM node n LEFT
JOIN node_comment_statistics c ON n.nid = c.nid WHERE c.comment_count IS NULL in
/var/websites/drupal/includes/database.mysql.inc on line 167.

[lang_de]

Eine Art Lösung

Ich habe für Drupal 5.2 einen Patch erstellt der das Problem lösen sollte. CREATE TEMPORARY TABLES ist in Drupal vorbildlich in eine einzige Funktion db_query_temporary in der Datei includes/database.mysql.inc ausgelagert. Grundsätzlich erstellt dieser Patch statt einer temporären eine richtige Tabelle, deren Erstellungsdatum in einer weiteren Tabelle mit Namen temporary_table gespeichert wird. cron.php entfernt diese dann regelmässig. Sollte die Tabelle schon existieren bei der Erstellung, wird sie vorgängig gelöscht.

Das Ganze funktioniert nur für MySQL und MySQLI und bedeutet einen enormen Geschwindigkeitsverlust. Ich habe den Patch nur bei einer low-traffic Site getestet und weiss nicht, ob es vielleicht noch Race-Conditions geben könnte. Benutzung also auf eigene Gefahr.[/lang_de]
[lang_en]

Kind of a Solution

I have written a patch for Drupal 5.2 which should kinda solve the problem. In Drupal, CREATE TEMPORARY TABLES is only used in the db_query_temporary function, found in the file includes/database.mysql.inc, which is a very clean progamming style! Basically, this patch creates a real table instead of a temporary one. The name and the creationdate is stored in an extra table called temporary_table. The cron.php removes these tables on a regular base. If the table already exists, it is dropped.

This patch only works for MySQL and MySQLI and may be a performance loss. I have tested this patch only on a low traffic site and I do not know if there are race conditions. Use it on your own risk…

Addendum

Another solution has been posted at Drupal.org.

[/lang_en]

[lang_en]Here it is: Patch to use Drupal without the CREATE TEMPORARY TABLES.

To apply it, change into the Drupal base directory and issue patch -p0<drupalwotemptables.patch on the commandline.[/lang_en]
[lang_de]Und hier ist er: Patch für Drupal ohne CREATE TEMPORARY TABLES.

Um ihn anzuwenden ins Basisverzeichnis wechseln und patch -p0<drupalwotemptables.patch ausführen.

Nachschlag

Eine weitere Lösung wurde bei Drupal geposted.
[/lang_de]

Ausschliessen von Repositories bei WebSVN

hiddenWie schon ein paar mal erwähnt: Websvn ist ein geniales Tool! Es ermöglicht das Browsen von verschiedenen Repositories übers Web mit dem Browser. Manchmal möchte man aber nicht alle Verzeichnisse freigeben und anzeigen.

Ich habe einen Patch erstellt, der eine neue Option in /etc/websvn/config.inc erlaubt: $config->excludeRepository("name");. Diese Option kann mehrfach angegeben werden und alle excludeten Repositories werden nicht mehr dargestellt…

Beispiel:

// Select Repositories to exclude
$config->excludeRepository("Geheime-Codes");
$config->excludeRepository("Jokes");

Und hier der Patch: Websvn exclude Repositories Patch.

Viel Spass… Eine Rückmeldung bei Anwendung würde mich freuen…

USB Logitech QuickCam Express (046d:092f) unter Linux

Da chatten ein neues Hobby geworden ist und meine alte Webcam, hmm, das Schicksal aller ausgeliehenen Bücher gegangen ist, habe ich ne neue gekauft: QuickCam Express für fastgarnix. Das Einrichten ging dank der Anleitung von ichbinsnur genial einfach. Thnx a lot diesem Wizard…

Kurz:

  • Quellen installieren:
    apt-get install spca5xx-source
  • Quellen entpacken:
    tar xvfj /usr/src/spca5xx-source.tar.bz2
  • Den Patch (nach ichbinsnurs Anleitung geschrieben) drüberlaufen lassen. Patch for spca5xx for Logitech Quickcam Express
    patch -p0 > echo  qcexpresspatch.patch
  • Das Ganze kompilieren:
    make; make install

Und schon sehe ich meine Fresse bei Kopete, etc… Uuups, sollte mal die Haare kämmen gehen….

Patchwork…

Situation

Man hat ein geniales OSS Produkt installiert und 3, 4, 123 kleinste Änderungen eingefügt um es an die Situation anzupassen oder Fehler zu korrigieren (die man natürlich zurückgemeldet hat). Nun werden ein paar kleine aber hässliche Sicherheitslücken gefunden und eine neue Version publiziert. Die Motivation geht natürlich in den Keller mit der Aussicht alles wieder und wieder reproduzieren zu müssen.

Eine mögliche Lösung: Patches. Patches sind kleinere Codeflicken die sich überraschend intelligent in neuen Code einzufügen wissen.

Erstellen eines Patches mit CVS/SVN

Wenn man alles im SVN/CVS hat ist man fein raus. Neue Version einer Datei nicht einchecken und folgendes tun:

cvs diff -up FILENAME > filename.patch

bzw.

svn diff -up FILENAME > filename.patch

Will man Änderungen in mehreren Dateien rekursiv verarbeiten, so geht das mit SVN/CVS so:

cvs diff -Rup DIRECTORY > filename.patch

bzw.

svn diff -Rup DIRECTORY > filename.patch

Erstellen eines Patches ohne CVS/SVN

Ohne SVN und CVS muss man die Originaldatei zuerst wegkopieren und folgendes tun:

diff -up ORIGINAL NEW > filename.patch

Bei ganzen Verzeichnissen muss man ebenfalls die unveränderte Version zuerst wegkopieren. Nach der Änderung in das Grundverzeichnis der Arbeitsversion wechseln und dann folgendes eingeben:

diff -urpN ORGINAL_DIRECTORY NEUES_DIRECTORY > filename.patch

-N fügt auch neu erstellte Dateien hinzu.

In Praktisch bedeutet dies zum Beispiel:

diff -urpN ../webapplication/. . > webapplicationbooster.patch

Patchen der Quellen

Das ist einfach. Im richtigen Verzeichnis:

patch -p0 < filename.patch

Hinweise

  • Die Option -B beim Erzeugen des Patches ignoriert leere Zeilen
  • -u8 fügt mehr Kontext hinzu: Für eher paranoid gestimmte Naturen…