Individuelle, geschützte und dynamisch erstellte SVN-Repositories

facesDas Problem: Es sollen individuelle SVN Verzeichnisse erstellt werden. Ein Bereich also, in dem eine Person beliebig viele Repositories erstellen kann, die nur von ihr selbst angesehen und bearbeitet werden können. Mann könnte jetzt meinen – vorallem mit viel jugendlichem Leichtsinn – das sei ein einfaches, allgemein bekanntes Problem. Pustekuchen! Das muss ein ganz fremder wohl ganz abstruser Wunsch sein.

Verschiedene Dinge schränken die Chance ein, eine einigermassen vernünftige und allgemeine Lösung zu finden 🙁 .Doch der Reihe nach. Was ist gegeben:

  • Ein wunderbarer Server, mit SSL und allem.
  • Das Einrichten eines neuen Users sollte ungefähr 0,01 Sekunden menschlicher Arbeitskraft bedürfen.
  • Die Benutzer sind in einem Active Directory gespeichert.
  • Apache2, PHP, und alles was man will ist installiert.

Einschränkende Dinge

Die grösste Peinlichkeit ist die Direktive SVNParentPath (von mod_dav_svn). An sich sollte die Direktive ein Basisverzeichnis für die SVN-Repositories angeben aber:

  • Der Parameter (das Verzeichnis) ist absolut undynamisch. Er nimmt keine Umgebungsvariable, Regexp oder sonst was, sondern ganz stur nur einen festen Pfad.
  • Kann nicht in einer .htaccess Datei gesetzt werden

Gna! Das ist echt 2002! So wird das nichts mit dynamisch erstellten SVN-Verzeichnissen. Aus reinem Masochismus hane ich verschiedene Lösungen wie mod_rewrite, symbolischen Links, LocationMatch und alles was sonst noch so Zeit kostet ausprobiert. Keine Chance…
Erschwerend hinzu kommt, dass sich SVN überhaupt nicht mit der Alias Direktive anfreunden kann und konsistent stur auf eine jungfräuliche Location beharrt: Der Versuch wird mit einem Repository moved permanently, please relocate belohnt.

Die Krönung: mod_authz_path

mod_authz_path klingt vielversprechend. An Hand des Pfades sollte der User und das Realm festgelegt werden können. Jaaa, aber nicht als Location, sondern nur als Pfad (<Directory> im Apache), wie man mit dem Debuggen feststellen kann:

AuthNamePathMatch (.+) "Persoenliches SVN $1"
AuthzUserPathMatch (.+) $1

Mit dem Pfad findet sich aber – wie schon weiter oben geflucht – das SVN nicht zurecht.

Ganz nebenbei hat mich dieses Modul etwa viertausend Stunden gekostet. Wenn es geladen wird, funktioniert authnz_ldap nicht mehr richtig. Nicht überhaupt nicht, sondern einfach das require Statement spielt verrückt und verhält sich unberechenbar. Nach langer Zeit habe ich dann das auch gemerkt :irre: . Aber erst nachdem ich unter viel Wehklagen in einer Panik die anderen Server getestet habe, ob die Authentifizierung dort auch nur scheinbar funktioniert.

Die Lösung

Nach ein paar Jahren die Lösung: Gutes, altes PHP.

Auf dem SSL-Port des Servers ist eine Website, auf der sich die User mal als erstes über Apache am Active Directory authentifizieren müssen. Dadurch habe ich Zugriff auf den Benutzername mittels $_SERVER['AUTHENTICATE_SAMACCOUNTNAME']. Loggt sich jemand ein den wir noch nicht kennen, dann:

  1. Wird der svn-Grundpfad erstellt, wenn er noch nicht existiert.
  2. Wird eine Apache-Konfiguration für diesen neuen Grundpfad erstellt, die das ParentPath und den entsprechenden User beinhaltet.
  3. Wird Apache neu gestartet → und der Benutzer währenddessen zum Warten gebracht. Das ist leider notwendig zum Einlesen der Konfigurationserweiterung.

Die neue Konfigurationsdatei wird „lokal“ erstellt und in der Grundkonfiguration /etc/apache2/sites-available/isvn.myhost.ch eingebunden:

        Include /data/www/isvn.myhost.ch/config/svn.conf

PHP Code für die neuen Benutzer:

  $svn_user=strtolower($_SERVER['AUTHENTICATE_SAMACCOUNTNAME']);
  if(!$svn_user) { echo "Hacker, you will be disintegrated!"; exit(1); }
  $svn_root=SVNROOT."/".$svn_user;
  if(!is_dir($svn_root)) { // NEW USER
        // Make svn Parent Path
        mkdir($svn_root);
        // Write Config
        $fh = fopen(SVNCONF, 'a') or die("can't open file");
        $svnDirective =<<<EOD

<Location /svn/lp/$svn_user>
        DAV svn
        SVNParentPath /data/svn/lp/$svn_user
        AuthName "Persoenliches SVN von $svn_user"
        AuthType Basic
        AuthBasicProvider ldap
        AuthLDAPBindDN ldapanonymous@myhost.local
        AuthLDAPBindPassword g3h31M3Sp+
        AuthLDAPUrl ldap://adc1.myhost.local/ou=Accounts,dc=myhost,dc=local?sAMAccountName?sub
        require ldap-user $svn_user
</Location>

EOD
;
        fwrite($fh, $svnDirective);
        fclose($fh);

        // Make th User wait
        echo "<html><head><title>SVN wird eingerichtet</title>\n";
        echo '<meta http-equiv="refresh" content="5; URL=https://isvn.myhost.ch">'."\n";
        echo "</head><body>".implode(" ", explode(".",$_SERVER['AUTHENTICATE_SAMACCOUNTNAME'])).": Ihr SVN Grundverzeichnis wird erstellt. Bitte warten Sie.</body></html>";

        // Restart Apache
        exec('echo "/usr/bin/sudo /etc/init.d/apache2 restart" | /usr/bin/at now');
        exit();
  }

Damit der User www-data den Apache restarten darf, muss ihm das per /etc/sudoers erlaubt werden:

www-data ALL=NOPASSWD: /etc/init.d/apache2

Dass die Berechtigungen auch für alle benötigten Zusatzdateien reichen, machen wir den Trick mit dem at.

Somit haben wir also eine hochindividuelle Konfigurationsdatei für alle User und Ihr SVN Grundverzeichnis. Die PHP-Seite ermöglicht es, SVN-Repositories anzulegen und zeigt auch gerade den annektierten Platz an:

Die SVN-Steuerkonsole

Die SVN-Steuerkonsole

Die Quellen

Hier sind die PHP-Quellen. Für weitere Details stehe ich gerne zur Verfügung.

Google AdSense in Feeds mit Feedburner oder: Zu blöd zum Feeden

Es hat mich mal wieder gepackt: Mein Rückenmark hat die Steuerung übernommen und in einem ganz dunklen Moment mit meinem Grössenwahn zusammengespannt (nur möglich bei Volllmond) und mich gezwungen, meine RSS-Blog-Feeds bei Feedburner zu ‚burnen‘. Der vernünftige Gedanken neben dem lauten Gedankenschrei „WILL SPIELEN“ war, dass ich zwei Plugins aufs mal wegschmeisen hätte könnnen: Feedfooter, das meine Feeds mit einem Werbeträchtigen Footer versehen hat (auf den eh niemand je geklickt hat) und Feed-Stats (welches Mühe gehabt hat mit relativen Links auf Beiträge, welche eigentlich in einem Feed eh verboten sind. Absolute Links haben aber zu einem internen Trackback geführt, was ich nicht wollte (und nun mit dem No Self Pings WordPress Plugin abgestellt habe)).

Leider bin ich zu blöd. Zu blöd für Feeds und zum Burnen, zum Futtern und Brennen und erst recht zu blöd für Google :crazy: . Ich verstehs nicht. Aus Schande soll dieser Beitrag meine Blödheit dokumentieren und gleichzeitig – wie im deutschen Sprachraum üblich – dem Ehre zollen den ich nicht verstehe und der darum so viel gescheiter sein muss als ich.
Weiterlesen

Google Text Ads spielen verrückt

Das ist ja wirklich spannend: Google AdSense Textlinks können kein Deutsch mehr!

Dabei habe ich:

  • Die Sprache eingestellt beim Server.
  • Die Sprache bei den Seiten als Metatag eingestellt.
  • Die Sprache bei AdSense eingestellt.
  • Die entsprechenden Kommentare <!-- google_ad_section_start --> und <!-- google_ad_section_end --> um den Content eingefügt.
  • Ganz feste geflucht und gebetet…

Zuerst sind die Textlinks auf Englisch ausgewichen, ok, knapp nicht tolerierbar. Heute bietet sich ein sehr schöner, aber doch eher verwirrender Anblick:
Google Text Ads
Das ist natürlich super für die Klickrate, und Google ist ja sehr scharf auf Konkurrenz… Ausweichen is also auch nicht einfach so…

Ist dies ein bekanntes Problem? Gibt es Erfahrungen im Web…?

ClickHeat: Klick, zeig Dich, Du bist umzingelt!

Heatmaps

Spannende Methode zur Analyse des Benutzerverhaltens von Websites sind sogenannte Heatmaps. Sie speichern die Koordinaten aller Klicks auf eine Website und stellen sie mit „Hitzepunkten“ dar:
Beispiel Heatmap

Crazy Egg

CrazyEgg in ActionEine „kommerzielle“ Möglichkeit zum Erstellen solcher Heatmaps ist CrazyEgg. Die Basisvariante ist gratis und reicht eigentlich aus für kleine Websites. Viel Web 2.0-Ajax und eine einfache Bedienungsführung machen es zu einem angenehmen Tool. Es ist möglich verschiedene „Tests“ zu fahren mit unterschliedlichem Aufbau der Website und diese Durchgänge dann zu vergleichen.
CrazyEgg hat es voll im Griff die Klicks den richtigen Links zuzuordnen. Keine leichte Aufgabe wenn man bedenkt, dass jeder Besucher mit einer anderen Auflösung ankommt. Zur Auswertung stehen folgende Darstellungen zur Verfügung:

Overlay (Siehe Bild)
Zeigt die Attraktivität der Links in absoluten und relativen Zahlen
List
Eine Liste aller Links mit ihrer Popularität
HeatMap
Eine schöne Heatmap halt…
Confetti
Klicks anzeigen an Hand des Referrers (der Website von welcher die Besucher gekommen sind)

ClickHeat

ClickHeat ist eine freie Implementierung für Heatmaps. Sie kann auf dem eigenen Server betrieben werden und ist somit sehr geeignet für Kontrollfanatiker wie ich einer bin. Die Installation ist denkbar einfach:

  1. Downloaden der Applikation.
  2. Alles an einen Ort auf dem Server entpacken
  3. Im Browser dieses Verzeichnis aufrufen (Beispielsweise http://www.yoursite.com/clickheat/index.php)
  4. Alles korrekt einstellem
  5. Den Javascriptcode im Footer der Webseiten einbinden
  6. Abwarten, Tee trinken, Sackhüpfen und danach wieder das ClickHeat Verzeichnis aufrufen
  7. Sich freuen!

Einige Tips noch dazu:

  • Man kann und sollte die eigenen Klicks ausblenden (erster Menüpunkt im Hauptmenü).
  • Beim Generieren vom Javascript kann angegeben werden, wie die Linkdaten unterschieden werden:
    • Mit Keyword. Hier muss aber auf jeder Seite der Javascriptcode angepasst werden! Hben alle Seiten denselben Footer, werden wild alle Klicks gesammelt, auch wenn jede Seite anders aufgebaut ist.
    • Nach Titel oder Pfad: Damit kann schön nach einzelnen Seiten unterschieden werden.
  • Um zu checken, ob die Datensammlung funktioniert, die Seite mit dem Parameter ?debugclickheat aufrufen. Also beispielsweise http://www.yoursite.com/index.php?debugclickheat. Dies zeigt ein nettes Overlay mit vielen Informationen.
  • Unbedingt das Layout der Site konfigurieren (beim Icon Icon zur Layoutangabe), da er ansonsten die Klickpositionen ein Bisschen durcheinander bringt. Dieses Blog beispielsweise ist Fixed left and right menus, liquid content.

Resultate

Was habe ich für dieses Blog für Erkenntnisse gewonnen?

  1. Die Suche wird benutzt und hat somit ihren prominenten Platz oben rechts verdient.
  2. Es wird ziemlich oft auf das „lead-in“ Bild geklickt. Hmmm, was dies zu bedeuten hat muss ich mir noch überlegen. Was erwarten die Besucher wenn sie draufklicken?
  3. Es wird auch auf den kleinen Link skaldrom oberhalb der Beiträge geklickt. Ich habe den Link darum weg von der Homepage (was wohl eher verwirrend war) auf die Schreiberling-Seite umgebogen.
  4. Die Ads scheinen in einem guten Bereich mit vielen Clicks rundherum zu sein.

Weiteres

t-error (error terror?) hat auch über ClickHeat geschrieben. Inspirierend war auch wieder einmal der ProBlogger Beitrag.

Wieviel Wert hat ein Blog bzw eine Website?

Grundgedanken

Ich möchte hier ein paar Gedanken fabrizieren zum Wert einer Website – nicht für den vielgesuchten Besucher – sondern für den Betreiber. Eigene Erfahrungen ergänzt durch ein paar Links und ein paar Fakten.

Links auf Firmen bei denen ich eingetragen bin und die meinen persönlichen Code angehängt haben sind mit (Affiliate Link) gekennzeichneten. Ich hoffe, das ist ok so…

Die Massgrösse

Geld regiert die Welt, darum sollen alle ideellen Werte mal rechts und links vom Tunnelblick liegen. Klar macht es Spass, ein Blog zu schreiben und es ist ein schönes Gefühl, wenn ein Beitrag auch tatsächlich gelesen wird. Ein Kommentar oder ein Trackback machen Freude und Freunde und man fühlt sich wohlig eingebettet in die Heerscharen der Web 2.0 Anwender.

Es wüden sich viele sinnvolle Massgrössen anbieten: Beispielsweise die Anzahl der erfolgreichen Geschäftsabschlüsse die durch eine Site generiert werden. Erstens passt das aber nicht auf Blogs und zweitens weiss man nie, ob diese Leads nicht auch ohne Internet zustande gekommen wären. Bei dieser Massgrösse ist auch nicht berücksichtigt wieviele potentielle Kunden sich über das Web informieren und auf einem anderen Kanal einkaufen.

Die Anzahl Besucher wäre auch eine Messgrösse, aber leider ist sie schwer zu ermitteln und ob die Vorbeisurfenden wirklich zum Zielpublikum gehören kann auch nicht abschliessend beurteilt werden.

Bewertungsmöglichkeiten bei Blogs

Kaufangebote

Jaaa, wenn man ein Blog veräussern kann ist der Wert sehr genau bestimmt. Dies wird aber den wenigsten von uns vergönnt sein.

Werbung

Will man mit Werbung auf dem Blog Geld verdienen, so gibt es grundsätzlich zwei Varianten:

Provision

Man verkauft Produkte und erhält einen Teil des Gewinns. Möglich zum Beispiel bei Amazon und vielen Weiteren. Der Rubel rollt zwar gut pro Verkauf, aber es ist kein einfacher Weg. Das Ganze bietet sich wohl am ehesten an für themenzentrierte Blogs. Die Margen sind unterschiedlich, von 3% bis 10%, mit und ohne Beschränkung nach oben.

Hier kann ich keine praktische Erfahrung beisteuern…

Clicks

Man blendet Werbung ein und kriegt Kohle für jeden Klick.
(Affiliate Link), aber es gibt auch den direkten Konkurrenten, das Yahoo Publisher Network.

Die AdSense Seite hat viele Hilfen und gute Reports; man wird also unterstützt. Dieses Blog ist relativ neu und noch schlecht verlinkt. Mit ca. 40 Leserinnen und Lesern pro Tag habe ich innerhalb einer Woche schon fast $1 verdient! Das werde ich bei Gelegenheit mal mächtig versaufen gehen 😀 …

Als Tool kann ich den AdSense Notifier empfehlen. Er blendet beim Firefox den aktuellen Stand unten rechts ein und verhindert das minütliche nachschauen ob der 5. Klick schon passierte und ob man schon am 2. Dollar arbeitet *lach*.

Steigern kann man sich nur durch viele, klickfreudige Besucher. Sprich: Man optimiert die Seite für Suchmaschinen (SEO, siehe unten) und schreibt interessantes Zeux, das die Menschen interessiert.

Bezahlte Inhalte

Es gibt Unternehmen wie zum Beispiel Trigami (Affiliate Link) für den deutschen Raum. Diese Unternehmen bezahlen Blogger für Berichte. Das machen sie nicht aus Goodwill und Altruismus, sondern sie werden wiederum von ihren Auftraggebern bezahlt. Das Blog muss angemeldet werden und die Kunden bekommen das Profil mit Eckdaten präsentiert. Wird man ausgewählt, so kann man sich um einen Bericht bewerben.

Für dieses Blog hätte es in 2 Wochen Aufträge für ca. 20 CHF (etwa 12 €) gegeben, die leider thematisch nicht gepasst haben.

Steigern kann man sich, indem man seine Eckdaten verbessert, sprich SEO und/oder Anziehende Beiträge.

Linkverkauf

Firmen wie LinkLift (Affiliate Link) verkaufen Links. Damit steigt der PageRank (siehe unten) und theoretisch wird man als wichtiger geachtet. Allerdings ist das erst ab einem PageRank vom 3 und höher finanziell interessant. Da ich noch kein PageRank-Update mitgemacht habe funktioniert das mit diesem Blog noch nicht. LinkLift (Affiliate Link) besitzt auch einen interessanten Preisrechner, mit dem man mal grob abschätzen kann wieviel Kohle drin liegt.

Nachtrag: Google mag keinen Linkverkauf!!!! Darum lieber zweimal überlegen!!!

Wertsteigerung

Wertsteigerungsmöglichkeiten gibt es einige.

Mehr Besucher

Die beste Möglichkeit viele BesucherInnen anzuziehen sind attraktive Inhalte (ich kanns nicht genug widerholen). Aber auch eine gute Plazierung bei den Suchmaschinen können helfen und soziales Bookmarking im weitesten Sinne wie Stumble Upon, Mister Wong, Del.icio.us, etc sind wichtige Besucherquellen.

Weitere Möglichkeiten sind Kommentare in anderen Blogs oder Teilnahme in einem Forum. Auch „Linkbaits“ eignen sich gut. Linkbaits sind Köder in Form einer kleinen Applikation, einer kontroversen Meinung, etc…

Google-Pagerank

Google versieht alle Sites mit einem PageRank. Der ist abhängig von der Anzahl und Qualität der Links auf die Site und dem PageRank dieser linkenden Sites. In wieweit der PageRank bei der Positionierung der Suchergebnisse eine Rolle spielt ist unklar. Der PageRank wird nur alle paar Monate angepast! Also nicht verzweifeln.

Die so enorm wichtigen Links kann man kaufen, tauschen, selber erstellen in Linklisten, Verzeichnissen und Gästebüchern (bei nofollow Tags bringts nichts für den PageRank, denn die Links zählt Google nicht) oder hoffen, dass der eigene Content gut und verlinkenswert ist ist. Blogs können in einem oder mehreren Blogverzeichnissen untergebracht werden.

Beim Pagerank helfen die Webmaster Tools und Google Analytics, die eine tiefere Analyse der Website erlauben. Der Backlink-Checker liefert die Backlinks einiges zuverlässiger als Google.

Alexa-Rating

Alexa bietet eine Toolbar in einer Version für Firefox und einer für den MSIE an. Diese senden alle angesurften Sites zum Zentralserver und der generiert ein Ranking. Je höher dieses Ranking, desto besser. Sehr konfus, aber was solls. Verbessern kann man sein Rating durch installieren der Toolbar und surfen auf seiner seiner Site :)….

Tools und Links

Firefoxextensions
ScribeFire, Alexa SearchStatus, WebDeveloper, Firebug und Adsense-Notifier in Aktion beim Firefox.

Eine generelle Analyse macht Seitwert. es berücksichtigt viele Faktoren und gibt Anregungen. Sitescore ist nun schon seit längerem offline.

Eine gute Serie, die viele Themen abdeckt, hat Problogger erstellt. Diesem Mensch sollte man besser glauben, immerhin macht er $20’000 pro Monat mit seinen Blogs!
Fundierter als dieser Bericht über den Sitewert geht 7media an das Thema heran.

Auch viele tote Bäume wurden mit Tinte getränkt: Das berühmteste Buch ist wohl das SEO Book. In Deutsch gibt seo-complete.com. – Suchmaschinenoptimierung einen guten Überblick.

Spassiges

Tja, der SEOismus treibt lustige Blüten! Spamluder verlost Backlinks. Linkgeil wie ich bin, hab ich somit auch beim Wettbewerb mitgemacht 😀 …