Als Vannevar Bush 1945 den Memex (MemoryExtender ) konzipierte und damit ein analoges Internet auf Basis eines elektromechanischen Mikrofilmgeräts imaginierte,
erkannte er, dass die stetig anwachsende Menge des verfügbaren Wissens es erfodern würde, einen Pfad durch das Wissensdickicht zu schlagen. Diesem Zweck sollten sich
die “trail blazer” verschreiben, eine neue Berufsgruppe, die genau diese Pfade schlagen würden.
Heute, 64 Jahre später, kennt jeder kennt das Problem der überbordenden Informationsflut – von “trail blazern” aber weit und breit keine Spur. Es gibt aber Online-Dienste, die ihren Benutzern die Filterung von Informationen aus dem Internet abnehmen beziehungsweise erleichtern wollen. Ich möchte zwei dieser Dienste vorstellen und beginne mit PostRank. PostRank ist ein Online-Dienst, der Inhalte aller Art (RSS-Feeds, Blog-Einträge [oder: Blogeinträge, s.u.], Artikel oder Nachrichten) bewertet und auf Grund der Bewertung filtert.

Die Bewertung findet auf Basis von Daten statt, die PostRank aus dem Interesses und dem Feedback der Leser/Nutzer ableitet. Die Macher von PostRank sprechen von “social engagement” oder den “5 Cs” des sozialen Engagements und fassen darunter folgende Aktivitäten zusammen:

  • Einen Blogeintrag als Antwort auf einen anderen Eintrag schreiben (Creating) ,
  • das Setzen eines Lesezeichens/Favoriten (Collecting),
  • Kommentieren eines Blogeintrags (Critiquing),
  • Klicken eines Links (Clicking) oder
  • Konversation zu einem Thema über Twitter oder Pownce [pownce wurde leider stillgelegt] (Chatting).

PostRanks Bewertungssystem geht davon aus, dass sich die Benutzer umso mehr für ein Thema engagieren, desto mehr Interesse es hervorgerufen hat. Und je mehr Interesse vorhanden ist, desto höher wird dieses Thema von PostRank bewertet. Auf welche Quellen stützt sich PostRank bei seiner Analyse?   Zurzeit werden folgende Quellen ausgewertet: Google-Trackbacks, Twitter, Pownce, Digg Ma.gnolia, del.icio.us, die Anzahl der Kommentare zu einem Thema (Blogeintrag o.ä.) und Views und Klicks (innerhalb von RSS-Readern oder PostRank-Widgets). Diese Quellen werden rein quantitativ ausgewertet.

Wie kann PostRank nun aber einen Pfad durch die Blogs und Newsseiten finden, die mich interessieren? Nachdem man sich auf der Seite von PostRank für ein Benutzerkonto registriert hat, erhält man die Möglichkeit, die Inhalte  von PostRank analysieren zu lassen. Alles was man tun muss, ist eine URL einzugeben.

Auf Grundlage seines Bewertungssystems erstellt PostRank nun beispielsweise eine Liste der Einträge einer Nachrichtenseite. Die Einträge erhalten alle einen Wert zwischen 1 und 10, der dem “social engagement” entspricht. Die Liste kann jetzt  vom Benutzer mit Tags versehen und als Feed gespeichert werden. Zusätzlich erhält man die Möglichkeit, nach verschiedenen Kriterien zu filtern. Außer der Online-Inhalte aggregieren zu können, kann man die angelegten Feeds in einem XML Format (OPML-Datei) exportieren.
Weiterhin werden durch das taggen der Feeds sogenannte Channels erzeugt, die sich dann in einen RSS-Reader integrieren lassen. PostRank bietet derzeit die Möglichkeit, die eigenen Channels per Link direkt in BlogLines, FeedBlitz, Google, NetVibes und NewsGator einzufügen. So kann man also die bevorzugt gelesenen Feeds von PostRank filtern lassen und sie dann im eigenen Feed-Reader lesen.

Ein berechtigter Einwand gegen diese Art der Filterung liegt auf der Hand. Was ist, wenn ein Thema mich interssiert, das aber nur wenige andere interessiert? Je nachdem wie ich meine Filter eingestellt habe, besteht die Gefahr, dass diese Inhalte von PostRank geschluckt werden und meiner Aufmerksamkeit entgehen. Es handelt sich bei PostRank um eine rein quantitative Auswertung, die keinen Aufschluß darüber gibt, wie gut oder schlecht die Benutzer ein Thema bewertet haben. Es misst nur die Menge an Aufmerksamkeit, die ein Thema innerhalb des Netzes bekommt. Es bleibt nun jedem selbst überlassen zu ermessen, ob er bereit ist dies in Kauf zu nehmen.
Auf der anderen Seite kann dieser Nachteil auch ein Vorteil sein. Und zwar wenn man das Interesse im Netz an den eigenen Inhalten messen will. Selbst wenn man nicht die API von PostRank nutzt, kann man über die externen Quellen wie Google und Twitter kann man erfahren, wie sehr sich das Netz für die Inhalte interessiert, über die man selbst geschrieben hat. Und natürlich noch mehr wenn man die API benutzt. Dies liefert sicherlich bessere Werte über Interesse und Popularität eines Themas oder eines Feeds als das bloße Messen von Page-Impressions.

Neben dem Online-Service bietet PostRank zwei weitere interessante Features. Zum einen ein Widget, dass sich auf der eigenen Seite einbinden lässt, mittels dessen den Besuchern eines Blogs die Wertungen der Beiträge durch PostRank angzeigt werden können. Außerdem bieten die Macher eine API an, mit passenden Bibliotheken in Ruby, Python, C# und C#.NET, die sich allesamt auf Github herunterladen lassen. Last but not least gibt es noch ein Plugin für FireFox, mit dem man vom Browser aus den PostRank-Service nutze kann.

Alles in allem halte ich PostRank für einen interssanten Ansatz, um die Menge der Online-Inhalte zu filtern. Das hohe Interesse innerhalb des Netzes kann ein guter Indikator für spannende Themen sein, wenn auch manche durch das Raster fallen. Das Interface ist übersichtlich und gefällig. Die Unterscheidung zwischen Feeds und Channels ist meiner Ansicht nach nicht ganz trennscharf, erschließt sich aber nach kurzer Zeit.

Im nächsten Teil möchte ich einen Dienst vorstellen, dessen Filter auf den persönlichen Vorlieben des Benutzers basieren.

Tags: , ,



Chris Anderson hat sich dem Lock-in Problem von AppEngine-Anwendungen angenommen und Appdrop veröffentlicht und auf seinem Blog angekündigt.. Über Appdrop kann man Anwendungen, die für AE progammiert wurden auf Amazons EC2 deployen. Das ganze ist ein cleverer Hack und beruht auf einer modifizierten Version des AppEngine SDKs. Es ist also zu erwarten, dass damit gehostete Anwendungen in ihrer Skalierbarkeit nicht mit nativ gehosteten mithalten werden können.

Das modifizierte SDK ist auf github veröffentlicht und wird bereits geforkt.

Will jemand vielleicht ein CouchDB und Yaws Backend bauen?

Tags: , ,



Tooltips sind eine feine Sache. Sie lassen sich einsetzen, um zusätzliche Informationen zu präsentieren oder um Kontexthilfen anzuzeigen.
Es gibt verschiedene Methoden mittels JavaScript solche Tooltips anzuzeigen. Viele davon nutzen dazu die Title-Attribute im HTML-Tag. Das Title-Attribut ist ja schon von sich aus dazu gedacht, Tooltips anzuzeigen, unterliegt aber verschiedenen Beschränkungen:

  • Die Standardtooltips lassen sich nicht mittels CSS in Form bringen
  • Die Tooltips werden nicht angezeigt, wenn jemand das Tag mit dem Mauszeiger nicht erreichen kann, oder überhaupt keine Maus benutzt
  • Die Tooltips werden nicht wirklich lange angezeigt (Die Ausnahme bildet hier der Opera)
  • Längere Texte in Tooltips werden häufig ungünstig umgebrochen oder abgeschnitten

Die genannten Beschränkungen lassen sich umgehen, in dem man den Tooltip mittels JavaScript selbst erzeugt. Hier wird exemplarisch eine Version gezeigt, die mit jquery arbeitet.

HTML (Ausschnitt)

 <a class="useredit" title="Dieser Link öffnet die Bearbeitunsgmaske für Benutzer.
 Dort können die persönlichen Einstellungen des jeweiligen Benutzers geändert werden." href="/edituser/23">
 Benutzer 23 editieren</a>

JavaScript(Ausschnitt)

$(document).ready(function(){

$(".useredit").hover(function(){

    var content = $(this).attr("title");

    $(this).attr("title",""); // Damit der Browser keinen eigenen Tooltip zeigt,
                                      //  das Title-Attribut leeren
   // Um das Title-Attribut später wieder setzen zu können,
  // ihn in ein temporäres Attribut schreiben.
    $(this).attr("tempTitle",content); 

   var hilfeBox = $('
<div>').attr('class','tooltip');

   var ePosition = getPosition(this); // Bestimme x und y Wert des Hilfe-Links

   var eWidth = getElementWidth(this); // Bestimmte die Breite des Hilfe-Links

   $(hilfeBox).css({
        position: "absolute",
        top: ePosition[1],
        left: ePosition[0]+ eWidth +"px",
        width: 250 + "px",
        border: "2px solid red",
        padding: "6px",
        background: "#FFF"
        });

   $("div.tooltip").text(content);
   $("body").append(hilfeBox);

},function(){

 var content = $(this).attr("tempTitle"); // Den Text wieder einlesen
 $(this).attr("title",content); // Wieder in das Title-Attribut schreiben
 $(this).attr("tempTitle",""); // Temporäres Attribut leeren 

 $('div.tooltip').remove() // Tooltip entfernen
});

});

Will man die Tooltips als Hilfen zur Bedienung benutzen und gleichzeitig eine zentrale Hilfeseite bereitstellen, ergeben sich verschiedene Probleme. Insbesondere die doppelte Datenhaltung (Hilfetexte in den Title-Attributen und im HTML der Hilfeseite) verkompliziert die Wartung der Seiten unnötig. Längere Texte in den Title-Attributen sind unschön, insbesondere wenn die Texte mehrfach verwendet werden.

Um diese Hürden zu überwinden, bietet sich der Einsatz von Ajax an. Man legt eine zentrale Hilfeseite an, die sich über die Navigation erreichen läßt. Hier können Bilder, Screencasts und Texte angezeigt werden, die dem Benutzer helfen sollen. Nun können Texte aus dieser Seite mittels Ajax abgefragt und als Tooltip angezeigt werden. Außerdem lassen sich so auch andere Elemente wie Bilder anzeigen, was bei der Title-Attribut-Methode nur schwerlich möglich ist.

Seit der Version 1.2 bietet jquery in seiner load() Methode eine einfache Möglichkeit über CSS-Selektoren HTML aus einem Dokument zu extrahieren und in das DOM einzufügen. Im folgenden Beispiel wird genau diese Methode verwendet.

Zunächst wird neben ein Eingabefeld zur Suche, ein Link gesetzt, der auf den entsprechenden Anker der Hilfeseite verweist.

HTML (Ausschnitt)

 <fieldset>
  <legend>Suche</legend>
<form method="post">

<label>Suchbegriff:</label>
<input class="txt" name="textfield" type="text" />
  <a id="sH" class="hilfe" name="suche" href="hilfeseite.html#suche">?</a>
  <!-- verweist auf den entsprechenden Anker der Hilfeseite -->

<input name="Submit" type="submit" value="Suchen" />
</form>

</fieldset>

Im JavaScript wird ein Eventlistener aktiviert, der auf MouseOver den Hilfetext in einer Box anzeigt und bei MouseOut, die Box wieder aus dem DOM löscht.

JavaScript (Ausschnitt)

 $("a.hilfe").hover(function(){zeigeHilfe(this)},function(){$('#hilfeBox').remove()})

Dieser Eventlistener wird auf alle Links mit der Klasse “hilfe” gelegt, so dass man beliebig viele Hilfelinks setzen kann.

JavaScript(Ausschnitt)

// Kofigurationsparameter, kann am Anfang des JS gesetzt werden
var helpBox =
  {
      width: 250,
       id: "hilfebox"
  }
;
// Diese Funktion erzeugt die Hilfebox

function zeigeHilfe(element){

    var finalLeft = 0; // X-Position der Hilfebox wird auf Null gesetzt

/* Nun wird das href-Attribut des Links zerlegt. Die beiden Teile werden später im Ajax-Aufruf
    verwendet, um die richtige Seite abzufragen und den richtigen CSS-Selector zu verwenden.
     (s.u. HTML der Hilfeseite)
*/

    var hilfeDaten = element.href.split("#");

    var ePosition = getPosition(element); // Bestimme x und y Wert des Hilfe-Links

    var eWidth = getElementWidth(element); // Bestimmte die Breite des Hilfe-Links

    var viewSize= getViewSize(); // Darstellungsbreite ermitteln

    // wenn das Fenster über den rechten Bildrand ragen sollte, nach links verschieben
    if (ePosition[0] + eWidth + 10 + 250 > viewSize[0])
    {
        finalLeft = ePosition[0] - eWidth - 10 - helpBox.width;
    }
    // Sonst nach Links ausrichten
    else{
        finalLeft = ePosition[0] + eWidth + 10 ;
    }
      // Ein DIV bauen und ihm die ID aus den Konfigurationsparametern (s.o.) geben
    var hilfeBox = $('
<div>').attr('id', helpBox.id) 

    // Styles setzen, Rahmen und Farben sollten besser über eine
    // CSS-Datei gesetzt werden Der Einfachheit halber jetzt aber hier.

    $(hilfeBox).css({
        position: "absolute",
        top: ePosition[1],
        left: finalLeft+"px",
        width: helpBox.width + "px",
        border: "2px solid red",
        padding: "6px",
        background: "#FFF"
    });

    // Hilfebox ins DOM einhängen

    $("body").append(hilfeBox);

/* Inhalte aus der Hilfeseite laden
 hilfeDaten[0] ist hier die Hilfeseite aus dem Href-Attribut des Links,
 hilfeDaten[1] ist hier der Name des Ankers. Dieser entspricht gleichzeitig
 der ID des li-Elements der Hilfethemen. (s.u. HTML)

*/
	$("#"+helpbox.id).load(hilfeDaten[0]+"  #"+hilfeDaten[1]+" p.desc");

}

Die Hilfeseite wird per Ajax geladen. Über den CSS-Selektor wird der Inhalt des Absatzes (.desc) im entsprechenden List-Element (#suche) ausgelesen und in die Hilfebox geschrieben.
Der Link verweist dabei auf die richtige Stelle der Hilfeseite, die dann per Klick erreicht werden kann.

HTML der Hilfeseite (Auschnitt):

<ul id="hilfethemen">
	<li id="useredit"> <!--ID des Abschnitts. Muss dem Name-Attribut
   des Ankers entsprechen. -->
  <a name="useredit"></a> <!--Anker zum Verlinken des Hilfethemas -->
<h3>User Editing</h3>
<img src="http://beispiel.de/einScreenshot.jpg" alt="screenshot" />

Lorem ipsum ...</li>
	<li id="suche">
   <a name="suche"></a>
<h3>Suchfunktion</h3>
<img src="http://beispiel.de/einaAndererScreenshot.jpg" alt="screenshot" />

Per Ajax aus der Hilfeseite geladen. Lorem ipsum dolor sit amet, consetetur
     sanct...</li>
</ul>

Natürlich kann man auf diesem Wege auch ganz einfach mehrere Hilfeseiten anlegen, die nach Themen sortiert sind. Eine größere Webanwendung wird dies zweifelsfrei notwendig machen.

Eine Live-Demo des Codes
Die vollständigen Dateien zum Download

Quellen:

http://jquery.com

Tags: , , ,