Toolroom Tech Blog

Devlopers Digest

Like the Like Button on demand

Datenschutz trotz 'Gefällt-Mir' Button

Die meisten Webseiten bieten ihren sozial benetzwerkten Nutzern die Möglichkeit, Ihre Freude per Gefällt-Mir Button auf interessante Inhalte aufmerksam zu machen. Das bringt dem Betreiber der Webseite bessere Listung in Suchmaschinen bzw. mehr Besucher und der Benutzer kann interessante Themen leichter teilen. Aber den wenigsten ist das wirklich klar: die Gefällt-Mir Buttons von Google+, Facebook und Co. sind - zumindest was Datenschutz betrifft - gefährlich.

Zu Erklärung: Sobald du eine Webseite besuchst, die einen dieser Buttons enthält, werden bereits beim Laden des Buttons Daten an den Betreiber der jeweiligen Plattform übertragen. Dazu gehören zumindest die Adresse der aufgerufenen Webseite und deine Identität. Vor allem wenn du einen Account bei Facebook hast, ist das fatal. Denn dann gibt es aller voraussicht nach bereits ein Cookie auf deinem Rechner, das der Like-Button auslesen kann, um den getätigten Seitenaufruf mit deinem Benutzerprofil zu verknüpfen. Auf diese Art und Weise könnte Facebook dein komplettes Surfverhalten aufzeichnen. Aber wir wollen diesem Unternehmen ja nicht unterstellen, dass es sich mit dem Vertrieb dieser Daten finanziert ...

Mittlerweile ist ja auch Google+ auf den Zug des Gefällt-Mir Buttons aufgesprungen. Auch hier gilt dieses Prinzip.

Die Entwickler bei Heise haben sich bezüglich des Einbaus dieser Buttons Gedanken (eigentlich Sorgen) gemacht und ein plugin für jQuery entwickelt, das beim Laden der Seite nur einen Platzhalter für den Gefällt-Mir Button lädt. Erst wenn der Benutzer den Button klickt, wird er vom Betreiber geladen.

So sieht das aus:

Download

Der Code der Buttons ist einfach und portabel. Er ist Open-Source, und frei verfügbar.

Socialshareprivacy jQuery Plug-In 

 

Convert To Yourself

WPF Databinding debuggen

Da hat man seine XAML View endlich fertig, doch aus irgendeinem Grund werden keine Daten angezeigt. Wie kann man nun rausfinden, ob das Binding funktioniert? Eine einfache Möglichkeit, die meines Erachtens in keinem Projekt fehlen sollte, ist ein so genannter DebuggingConverter. Der hat nur eine Aufgabe: Daten durchzuschleusen, damit man einen Breakpoint setzen kann.

Ohne um den heißen Brei herumzureden, hier ein Beispiel:

Das Problem

Im LongListSelector werden keine Daten angezeigt.

<toolkit:LongListSelector ItemsSource="{Binding UserGroups}">
</toolkit:LongListSelector>

Die Lösung...

... die in keinem WPF oder Silverlight Projekt fehlen sollte sieht so aus:

 1) Neue Klasse: DebuggingConverter

Ich bevorzuge es den Debugger mittels Debugger.Break() zum Stoppen zu zwingen, so minimiert man die Gefahr, den DebuggingConverter unnötig im Code zu vergessen, was erstens unschön ist und zweitens zu Verwirrungen führen kann.

public class DebuggingConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Debugger.Break(); //Debugger stops here

        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Debugger.Break(); //Debugger stops here

        return value;
    }
}

 2) Debugger als Resource verfügbar machen

Damit der Converter in der gesamten Applikation zur Verfügung steht, legen wir ihn als Resource in der App.xaml ab.

<Application.Resources>
    <converters:DebuggingConverter x:Key="DebuggingConverter"/>
</Application.Resources>

3) Verwenden

<toolkit:LongListSelector ItemsSource="{Binding ContactGroups, Converter={StaticResource DebuggingConverter}}">
</toolkit:LongListSelector>

LINQes Ding

LINQ debuggen

Es soll ja vorkommen, dass sich unerklärbare Exceptions in Linq Statements einschummeln.

from contact in Contacts
    where contact != null && !string.IsNullOrEmpty(contact.DisplayName)
    group contact by contact.DisplayName[0]
    into c
    orderby c.Key
    select new Group<Contact>(c.Key.ToString(), c);

Das Helferlein:

Um das Debugging etwas zu erleichtern, ändern wir die Query in die (von mir bevorzugte :)) Method Chain Notation. Jetzt können wir ein simples Select einbauen und den Breakpoint reinsetzen und voila ... wir haben Zugriff auf die Items.

Contacts.Where(contact => contact != null && !string.IsNullOrEmpty(contact.DisplayName))
.Select(item =>
            {
                return item;
            })
.GroupBy(contact => contact.DisplayName[0])
.OrderBy(c => c.Key)
.Select(c => new Group<Contact>(c.Key.ToString(), c));

Online mit der .net blogengine 2.5

Vor wenigen Minuten habe ich erfolgreich blogengine.net installiert, konfiguriert und gestartet, eine auf ASP.Net basierte Open Source Blogging Lösung. Damit ihr meine Begeisterung verstehen könnt, möchte ich hier mal eine kleine Übersicht über die blogengine bieten.

Features

Up and running: 3 Minuten

Gepackte App unter http://blogengine.codeplex.com/ herunterladen und entpacken. Dann unter IIS eine Webseite anlegen, die Schreibberechtigung auf die benötigten Verzeichnisse setzen und die Webseite starten. Fertig.

Es können natürlich auch diverse Datenbanksysteme als Storage verwendet werden.

Web 2.0 Features und State of the Art Technlogien

Mini-CMS mittels eigenständigen Seiten außerhalb des eigentlichen Blogs, tolle Suchmöglichkeiten, AJAX, Syntax Higlight, Social bookmarks, OpenSearch, XFN Tags, Co Kommentare, Tag Cloud, Razor, Google Sitemap und mehr. Eine LIste der meuisten Features gibt es hier.

Statistiken über Webseiten, die auf den Blog linken.

Erweiterbar

Leicht erweiterbar durch eine Vielzahl fertiger Widgets und Themes. Oder einfach selber machen.

Download

Die aktuellen binaries der blogengine gibt es unter http://blogengine.codeplex.com/ 

Technologien

Die superschnelle blogengine basiert auf C# und ASP 4.0. Eine saubere Architektur ohne unverständlicher third-party assemblies machen das System auch für die Weiterentwicklung interessant.

Bewertung

Super! Durch die gefahrlos einfache Installation besonders empfehlenswert. Einfach selber testen.