Verwendung von Flickr mit .NET

Veröffentlicht: 21. Aug 2006
Von Sam Judson

20.07.06

Jeder, der etwas auf sich hält, scheint in diesen Tagen mit Flickr herumzuexperimentieren, einem der neuesten Trends bei den webbasierten "Web 2.0"-Anwendungen. Aufgrund seines viel imitierten Stils, seines am Social Networking ausgerichteten Layouts und der Verwendung neuester AJAX-Technologien, die eine Interaktion des Benutzers ermöglichen, setzt Flickr neue Maßstäbe für zukünftige Anwendungen im Internet. Ein ebenso wichtiger Leistungsmaßstab für eine "Web 2.0"-Anwendung ist die mitgelieferte öffentliche API, die von jedermann dazu verwendet werden kann, neue und interessante Verfahren zur Anzeige und Bearbeitung von Fotos bereitzustellen.

Code für diesen Artikel herunterladen

Auf dieser Seite

 Erste Schritte
 Flickr-API-Konzepte
 So verwenden Sie Flickr
 Authentifizierung
 Hochladen von Fotos
 Schlussbemerkung
 Der Autor

Erste Schritte

Zunächst möchte ich darauf hinweisen, dass dieser Artikel in erster Linie für .NET 2.0-Benutzer geschrieben ist, dass aber die Flickr.Net API-Bibliothek ebenso für .NET 1.1 geeignet ist. Das sollte Sie also nicht von der Lektüre dieses Artikels abhalten. Ich setze zudem voraus, dass Sie Anwendungen in .NET schreiben können, entweder mit Visual Studio 2005 oder einer der kostenlosen Versionen von Visual Studio 2005 Express. Ich werde hauptsächlich auf Windows Forms-Anwendungen eingehen, allerdings kann die Flickr.Net API-Bibliothek ebenso gut für Webanwendungen verwendet werden, auch für solche, die in einer Umgebung der mittleren Vertrauensebene gehostet werden. (Weitere Einzelheiten zur mittleren Vertrauensebene (Medium Trust) finden Sie auf meiner Website.)

Ich gehe weiter davon aus, dass Sie mit der Verwendung von Flickr vertraut sind und über ein Konto dafür verfügen. Wenn dies nicht der Fall ist, sollten Sie das unbedingt nachholen!

Anfordern eines API-Schlüssels

Als Erstes benötigen Sie einen API Key (API-Schlüssel) für die Verwendung mit Flickr. Im Bereich Your Keys (Ihre Schlüssel) der Flickr Services-Website unter http://www.flickr.com/services/api/keys können Sie neue Schlüssel beantragen und die Ihnen bereits zugewiesenen verwalten. Das Beantragen eines neuen Schlüssels ist in der Regel eine Sache von Minuten. Sobald Sie den API-Schlüssel erhalten haben, können Sie zur selben Seite zurückkehren und auf die Verknüpfung Edit Configuration (Konfiguration bearbeiten) klicken. Auf diese Weise können Sie die Beschreibung der Verwendung Ihres API-Schlüssels bearbeiten und Ihr Shared Secret (Freigegebenes Geheimnis) anzeigen, das Sie benötigen, wenn Sie authentifizierte Anforderungen an Flickr ausführen möchten.

Wenn Sie die Beispiele unten ausführen, müssen Sie den API-Schlüssel im Beispiel durch Ihren eigenen ersetzen.

Abrufen der Flickr.Net API-Bibliothek

Die Flickr.Net API-Bibliothek kann von der Flickr.Net-Website heruntergeladen werden. Es gibt zudem ein Forum, in dem Sie spezifische Fragen zu Flickr.Net einstellen können. (Wenn sie die Flickr-API im Allgemeinen betreffen, sollten Sie sie besser in der Flickr-API-Mailingliste veröffentlichen.)

Die heruntergeladene Datei enthält den Quellcode für die Bibliothek sowie Debug- und versionskompilierte DLLs. Für diesen Artikel werden wir die DLL der Version verwenden, Sie können Ihrer Lösung aber auch das Quellcodeprojekt direkt hinzufügen.

Flickr-API-Konzepte

Die Flickr-API enthält eine Reihe von Konzepten und Benennungskonventionen, die ich an dieser Stelle kurz erläutern möchte.

Benutzer

Ein Benutzer wird durch seine User ID (Benutzeridentifikation) eindeutig identifiziert. Eine Benutzer-ID könnte etwa so aussehen: "40123132@N01." Der Username (Benutzername) ist mit dem Screen name (Bildschirmname) identisch, dem Namen, der auf Ihrer Homepage angezeigt wird und den Sie nach Belieben ändern können. Er sollte von Ihrer Anwendung nicht gespeichert werden, da er sich jederzeit ändern kann.

Der letzte Begriff ist Ihr Alias, d. h. der Teil Ihres Flickr-URL, der Sie identifiziert. Wenn Sie ein Konto erstellen, ist der Aliasname mit Ihrer Benutzer-ID identisch (dieser URL funktioniert immer); Sie können nur einmal ein benutzerfreundlicheres Format für diesen URL eingeben.

Authentifizierung

Wenn Sie einen Benutzer authentifizieren, weist Flickr Ihnen ein Token zu. Dieses Token ist spezifisch für Ihren API-Schlüssel, den von Ihnen authentifizierten Benutzer und die Berechtigungen, die Ihnen zugewiesen wurden (beispielsweise Schreib- oder Lesezugriff). Dieses Token bleibt gültig, bis der Benutzer Ihre Authentifizierung widerruft, und Sie sollten es innerhalb Ihrer Anwendung speichern.

Nach der Authentifizierung werden Aufrufe an Flickr beantwortet, als wären sie von dem Benutzer gesendet worden. Der Benutzer kann Fotos einsehen, zu deren Anzeige er berechtigt ist, beispielsweise private Fotos oder Fotos von Freunden und Familienangehörigen, die als für diesen Benutzer bestimmte Fotos markiert wurden. Zudem können Sie ihre Fotos bearbeiten und neue Fotos in ihr Konto hochladen.

Auch ohne Authentifizierung können Sie eine Reihe von Funktionen ausführen, z. B. alle öffentlichen Fotos anzeigen, anhand von Benutzern oder Tags nach Fotos suchen und öffentliche Gruppen durchsuchen.

Fotolisten

Wenn Sie eine Suche auf der Flickr-Website ausführen, werden die Fotos häufig nicht alle gleichzeitig angezeigt, sondern auf Seiten verteilt. Wenn eine Suche beispielsweise 1000 Fotos ergibt, werden die Details der ersten 100 Fotos zurückgegeben, dann die der nächsten 100 usw., bis zur letzten der 10 Seiten. Häufig können Sie die Größe der Seite (die Anzahl der Fotos, die pro Seite wiedergegeben werden) und die Nummer der Seite, die angezeigt werden soll, angeben. Wenn Sie die Seitengröße (d. h. die Eigenschaft "PerPage") beispielsweise auf 500 einstellen, werden nur zwei Seiten angezeigt. In den meisten Fällen ist 500 das Maximum; in der Dokumentation zur Flickr-API können Sie nachlesen, was die betreffende Methode unterstützt.

So verwenden Sie Flickr

Erstellen einer Instanz von Flickr

Als Erstes werden wir ein einfaches Flickr-Objekt erstellen und dazu den erhaltenen API-Schlüsseln übergeben.

Visual C#
string apikey = "1234abcd1234abcd";
Flickr flickr = new Flickr(apikey);
Visual Basic
Dim apikey As String = "1234abcd1234abcd"
Dim f As Flickr = New Flickr(apikey)

Von dieser Instanz des Flickr-Objekts aus können Sie Suchvorgänge ausführen, Gruppen durchsuchen, Benutzer auffinden und die Schritte zur Authentifizierung eines Benutzers (sofern Sie das Shared Secret (Freigegebene Geheimnis) angeben) durchführen.

Suchen nach Fotos

Die folgende Codezeile sucht nach allen Flickr-Fotos mit dem Tag "microsoft":

Visual C#
PhotoSearchOptions searchOptions = new PhotoSearchOptions();
searchOptions.Tags = "microsoft";
Photos microsoftPhotos = flickr.PhotosSearch(searchOptions);
Visual Basic
Dim searchOptions As PhotoSearchOptions = New PhotoSearchOptions()
searchOptions.Tags = "microsoft"
Dim microsoftPhotos As Photos = f.PhotosSearch(searchOptions)

Die Klasse PhotoSearchOptions (Fotosuchoptionen) ist das einfachste und flexibelste Verfahren für das Suchen nach Fotos. Viele der Eigenschaften sind optional, es sind jedoch alle verfügbaren Optionen der komplexen Suchfunktion enthalten, einschließlich UserId (Benutzeridentifikation), Tags (Tags) und SortOrder (Sortierreihenfolge).

Die Klasse Photos (Fotos) umfasst eine Auswahl an Eigenschaften, von denen einige möglicherweise nicht sofort erkennbar sind. Wie bereits erwähnt, werden die Ergebnisse einer Suche auf der Flickr-Website auf Seiten verteilt. Standardmäßig umfasst eine Seite 100 Fotos, und die oben beschriebene Suche gibt die ersten 100 Fotos zurück (oder weniger, wenn die Ergebnisse weniger Fotos umfassen). Photos.TotalPhotos (Anzahl Fotos gesamt) gibt die Gesamtanzahl der für die aktuelle Suche verfügbaren Fotos an, während Photos.TotalPages (Anzahl Seiten gesamt) die Anzahl der Seiten angibt, auf die die verfügbaren Fotos verteilt sind. Wenn Sie die Eigenschaft "Page" der Klasse "PhotoSearchOptions" entsprechend ändern, werden von Flickr mehr Seiten zurückgegeben.

Der folgende Code gibt die zweite und dann die dritte Seite der Flickr-Ergebnisse für die obige Suche zurück:

Visual C#
searchOptions.Page = 2;
Photos microsoftPhotos2 = flickr.PhotosSearch(searchOptions);
searchOptions.Page = 3;
Photos microsoftPhotos3 = flickr.PhotosSearch(searchOptions);
Visual Basic
searchOptions.Page = 2
Dim microsoftPhotos2 As Photos = f.PhotosSearch(searchOptions)
searchOptions.Page = 3
Dim microsoftPhotos3 As Photos = f.PhotosSearch(searchOptions)

Die Klasse Photos (Fotos) enthält auch die Eigenschaft "PhotoCollection" (Fotosammlung) für den eigentlichen Ablageort der Fotos. Sie können PhotoCollection-Objekte sammeln, um sie zu einer oder mehreren Seiten von Ergebnissen zusammenzufassen. Sie können zudem die Anweisung foreach (Für jede) verwenden, um die Fotos in der Sammlung zu durchlaufen.

Visual C#
PhotoCollection allPhotos = microsoftPhotos.PhotoCollection;
allPhotos.AddRange(microsoftPhotos2.PhotoCollection);
allPhotos.AddRange(microsoftPhotos3.PhotoCollection);
foreach (Photo photo in allPhotos)
{
    Console.Write("Photos title is " + photo.Title);
}
Visual Basic
Dim allPhotos As PhotoCollection = microsoftPhotos.PhotoCollection
allPhotos.AddRange(microsoftPhotos2.PhotoCollection)
allPhotos.AddRange(microsoftPhotos3.PhotoCollection)
For Each p As Photo In allPhotos
    Console.Write("Photos title is " & p.Title)
Next For

Suchen nach einem Benutzer und den dazugehörigen Fotos

Um einen Benutzer zu finden, müssen Sie nach seinem Bildschirmnamen oder dem URL seiner Homepage suchen (oder Authentifizierung verwenden, siehe weiter unten). Wenn Sie den Bildschirmnamen eines Benutzers kennen (beispielsweise "Sam Judson"), denn gibt der folgende Code die User ID (Benutzeridentifikation) des Benutzers zurück.

Visual C#
string screenName = "Sam Judson";
FoundUser user = flickr.PeopleFindByUsername(screenName);
string userId = user.UserId;
Visual Basic
Dim screenName As String = "Sam Judson"
Dim user As FoundUser = f.PeopleFindByUsername(screenName)
Dim userId As String = user.UserId

Anhand dieser Benutzer-ID kann dann nach Fotos, Favoriten, Gruppen, Kontakten usw. dieses Benutzers gesucht werden.

Visual C#
// First page of the users photos
// Sorted by interestingness
PhotoSearchOptions userSearch = new PhotoSearchOptions ();
userSearch.UserId = userId;
userSearch.Sort = SortOrder.InterestingnessAsc;
Photos usersPhotos = flickr.PhotosSearch(userSearch);
// Get users contacts
Contacts contacts = flickr.ContactsGetPublicList(userId);
// Get first page of a users favorites
Photos usersFavoritePhotos = flickr.FavoritesGetPublicList(userId);
// Get a list of the users groups
PublicGroupInfo[] usersGroups = flickr.PeopleGetPublicGroups(userId);
Visual Basic
' First page of the users photos
' Sorted by interestingness
Dim userSearch As PhotoSearchOptions = New PhotoSearchOptions()
userSearch.UserId = userId
userSearch.Sort = SortOrder.InterestingnessAsc
Dim usersPhotos As Photos = flickr.PhotosSearch(userSearch)
' Get users contacts
Dim contacts As Contacts = flickr.ContactsGetPublicList(userId)
' Get first page of a users favorites
Dim usersFavoritePhotos As Photos = flickr.FavoritesGetPublicList(userId)
' Get a list of the users groups
Dim usersGroups As PublicGroupInfo() = flickr.PeopleGetPublicGroups(userId)

Ich könnte noch stundenlang weitermachen und jede einzelne Methode der API auflisten, aber grundsätzlich gilt: Wenn sie in der Flickr-API enthalten ist, ist sie auch in der .Net-Bibliothek enthalten; der Methodenname ist mit dem Namen der Flickr-Methode identisch, allerdings ohne den Punkt und die Zeichenfolge flickr am Anfang. Beispielsweise entspricht "flickr.people.getPublicGroups" der Methode "PeopleGetPublicGroups" in der Flickr.Net API-Bibliothek.

Authentifizierung

Das ist vielleicht der komplizierteste Teil einer jeden Anwendung (zumindest in Bezug auf die Interaktion mit Flickr), daher werden wir schrittweise vorgehen. Die Beispielanwendung am Schluss enthält eine vollständige Implementierung von Desktopauthentifizierung. Die webbasierte Authentifizierung ist etwas anders und wird am Ende des Artikels erörtert.

Abrufen des "Frob"

Frob? Was das wohl ist? Ich bin nicht sicher, was das Wort Frob bedeutet, aber es handelt sich dabei um einen temporären Schlüssel, den Sie an Flickr übergeben können, damit der Benutzer aufgefordert wird, Ihre Anwendung zu authentifizieren. Nachdem sie authentifiziert wurde, können Sie denselben Frob dazu verwenden, das Authentication Token (Authentifizierungstoken) und die Benutzer-ID des authentifizierten Benutzers abzurufen (wie schon weiter oben angedeutet).

Weiterleiten des Benutzers

Nachdem Sie den Frob erhalten haben, müssen Sie ihn zusammen mit Ihrem API-Schlüssel und den erforderlichen Berechtigungen in einem signierten URL an Flickr übergeben. Glücklicherweise verfügt die Bibliothek über eine Methode, die das Signieren für Sie übernimmt und den URL zurückgibt, an den der Benutzer weitergeleitet werden soll. Sie müssen allerdings Ihr Shared Secret (Freigegebenes Geheimnis) kennen, um diesen URL zu berechnen (siehe "Anfordern eines API-Schlüssels" weiter oben, wenn Sie noch nicht über ein Shared Secret verfügen).

Beispielcode

Angenommen Sie haben ein Formular mit zwei Schaltflächen. Die erste Schaltfläche lautet Authenticate Me (Authentifiziere mich) und die zweite Complete Authentication (Vollständige Authentifizierung). Der folgende Code zeigt den erforderlichen Code für das Formular, damit die beiden Schaltflächen einen Benutzer zum Lesen/Schreiben von Berechtigungen authentifizieren können.

Visual C#
using FlickrNet;

// Store the Frob in a private variable
private string tempFrob;
private string ApiKey = "1234abcd1234abcd1234";
private string SharedSecret = "abcd1234abcd";

protected void AuthMeButton_Click(object sender, EventArgs e)
{
    // Create Flickr instance
    Flickr flickr = new Flickr(ApiKey, SharedSecret);
    // Get Frob    
    tempFrob = flickr.AuthGetFrob();
    // Calculate the URL at Flickr to redirect the user to
    string flickrUrl = flckr.AuthCalcUrl(tempFrob, AuthLevel.Write);
    // The following line will load the URL in the users default browser.
    System.Diagnostics.Process.Start(flickrUrl);
}

protected void CompleteAuthButton_Click(object sender, EventArgs e)
{
    // Create Flickr instance
    Flickr flickr = new Flickr(ApiKey, SharedSecret);
    try 
    {
        // use the temporary Frob to get the authentication
        Auth auth = flickr.AuthGetToken(tempFrob);
        // Store this Token for later usage, 
        // or set your Flickr instance to use it.
        Console.WriteLine("User authenticated successfully");
        Console.WriteLine("Authentication token is " + auth.Token); 
        flickr.ApiToken = auth.Token;
Console.WriteLine("User id is " + auth.UserId);
    }
    catch(FlickrException ex)
    {
        // If user did not authenticat your application 
        // then a FlickrException will be thrown.
        Console.WriteLine("User did not authenticate you");
        Console.WriteLine(ex.ToString());
    }
}
Visual Basic
Imports FlickrNet

' Store the Frob in a private variable
Private tempFrob As String
Private ApiKey As String = "1234abcd1234abcd1234"
Private SharedSecret As String = "abcd1234abcd"

Private Sub AuthMeButton_Click(ByVal sender As Object, ByVal e As EventArgs)

    ' Create Flickr instance
    Dim f As Flickr = New Flickr(ApiKey, SharedSecret)
    ' Get Frob    
    tempFrob = f.AuthGetFrob()
    ' Calculate the URL at Flickr to redirect the user to
    Dim flickrUrl As String = f.AuthCalcUrl(tempFrob, AuthLevel.Write)
    ' The following line will load the URL in the users default browser.
    System.Diagnostics.Process.Start(flickrUrl)

End Sub

Private Sub CompleteAuthButton_Click(ByVal sender As Object, ByVal e As EventArgs)

    ' Create Flickr instance
    Dim f As Flickr = New Flickr(ApiKey, SharedSecret)    
    Try
        ' use the temporary Frob to get the authentication
        Auth a = f.AuthGetToken(tempFrob)
        ' Store this Token for later usage, 
        ' or set your Flickr instance to use it.
        Console.WriteLine("User authenticated successfully")
        Console.WriteLine("Authentication token is " & a.Token)
        f.ApiToken = a.Token
Console.WriteLine("User id is " & a.UserId)
    
    Catch ex As FlickrException

        ' If user did not authenticat your application 
        ' then a FlickrException will be thrown.
        Console.WriteLine("User did not authenticate you")
        Console.WriteLine(ex.ToString())
    End Try
End Sub

Wie Sie sehen, wird von der Methode AuthGetToken eine Ausnahme ausgelöst, wenn der Benutzer Sie nicht authentifiziert, damit das Problem gelöst werden kann.

Nach erfolgter Authentifizierung

Nachdem Sie authentifiziert wurden und über das Token des Benutzers verfügen, kann zweierlei geschehen. Erstens können Sie jetzt neue Methoden aufrufen, die erst nach erfolgter Authentifizierung verfügbar sind, beispielsweise Flickr.PhotosSetTags(), die die Tags für ein bestimmtes Foto des authentifizierten Benutzers einstellt. Zudem können Sie Fotos auf das Konto dieses Benutzers hochladen.

Zweitens arbeiten einige Methoden jetzt etwas anders. Beispielsweise gibt die oben beschriebene Suche nach Fotos mit dem Tag "microsoft" jetzt alle privaten Fotos des Benutzers wieder, die dieses Tag besitzen, sowie alle seine öffentlichen Fotos und die öffentlichen Fotos anderer Benutzer mit diesem Tag.

Das Einstellen des Tokens kann auch in der Konstruktorphase oder später erfolgen.

Visual C#
Flickr flickr = new Flickr(ApiKey, SharedSecret, AuthToken); 
// or 
flickr.ApiToken = newToken;
Visual Basic
Dim f As Flickr = New Flickr(ApiKey, SharedSecret, AuthToken)
' or 
f.ApiToken = newToken

Inwiefern ist die Webauthentifizierung anders?

Um eine webbasierte Authentifizierung vorzunehmen, müssen Sie auf der Seite Edit Configuration (Konfiguration bearbeiten) Ihres API-Schlüssels die Seite angeben, an die Benutzer nach der Authentifizierung Ihrer Anwendung umgeleitet werden. Sie wird als Callback URL bezeichnet. Sie brauchen auch keinen Frob zu erstellen, wenn Sie die webbasierte Authentifizierung verwenden.

Anhand der Methode Flickr.AuthCalcWebUrl können Sie einen URL erzeugen, an den die Benutzer weitergeleitet werden.

Visual C#
string url = flickr.AuthCalcWebUrl(AuthLevel.Write);
Response.Redirect(url);
Visual Basic
Dim url As String = f.AuthCalcWebUrl(AuthLevel.Write)
Response.Redirect(url)

Auf der durch den obigen Callback-URL angegebenen Seite gehen Sie über den Frob in der Abfragezeichenfolge hinaus; wenn Ihr Callback-URL http://example.com/flickr.aspx lautet, wird der Benutzer auf die Seite http://example.com/flickr.aspx?frob=1234abcd1234abcd umgeleitet.

Visual C#
protected void Page_OnLoad(object sender, EventArgs e)
{
    string frob = Request.QueryString["frob"];
    Flickr flickr = new Flickr(ApiKey, SharedSecret);
    Auth auth = flickr.AuthGetToken(frob);
    // Store the token somewhere for later calls
}
Visual Basic
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim frob As String = Request.QueryString("frob")
    Dim f As Flickr = New Flickr(ApiKey, SharedSecret)
    Dim a As Auth = f.AuthGetToken(frob)
    ' Store the token somewhere for later calls
End Sub

Hochladen von Fotos

Nachdem Sie einen Benutzer authentifiziert haben, können Sie Fotos auf das Konto des Benutzers hochladen.

Das ist sehr einfach: Sie können es direkt von einer Datei auf der Festplatte oder von einem Stream-Objekt aus tun.

Visual C#

string file = "test.jpg";
string title = "Test Photo";
string descripton = "This is the description of the photo";
string tags = "tag1,tag2,tag3";
string photoId = flickr.UploadPicture(file, title, dscription, tags);

Visual Basic

Dim file As String = "test.jpg"
Dim title As String = "Test Photo"
Dim descripton As String = "This is the description of the photo"
Dim tags As String = "tag1,tag2,tag3"
Dim photoId As String = f.UploadPicture(file, title, dscription, tags)

Die Methode beinhaltet Parameter für das Einstellen des Titels, der Beschreibung und der Tags eines Fotos. Zudem dienen sie dazu anzugeben, ob ein Foto öffentlich oder privat ist. (Drei optionale boolesche Parameter sind hier nicht gezeigt.)

Aktualisieren von Fotos

Nachdem Sie einige Fotos hochgeladen haben, können Sie sie zu einem Satz oder einer oder mehreren Gruppen hinzufügen, die Beschreibung oder den Titel aktualisieren oder Tags hinzufügen.

Der folgende Code aktualisiert den Titel und die Beschreibung des zuvor hochgeladenen Fotos und fügt es dann dem ersten Satz in der Liste der Fotosätze des Benutzers hinzu.

Visual C#
flickr.PhotosSetMeta(photoId, "New Title", "New Description");
// Get list of users sets Photosets sets = flickr.PhotosetsGetList();
// Get the first set in the collection
Photoset set = sets.PhotosetCollection[0];
// Add the photo to that set
flickr.PhotosetsAddPhoto(set.PhotosetId, photoId);
Visual Basic
f.PhotosSetMeta(photoId, "New Title", "New Description")
' Get list of users sets
Dim sets As Photosets = f.PhotosetsGetList();
' Get the first set in the collection
Dim set As Photoset = sets.PhotosetCollection(0)
' Add the photo to that set
f.PhotosetsAddPhoto(set.PhotosetId, photoId)

Schlussbemerkung

Wie Sie sehen, sind die Mechanismen der Kommunikation mit Flickr relativ einfach. Der schwierigste Teil dabei besteht darin, eine kreative neue Anwendung zu entwickeln.

Im zweiten Teil dieses Artikels werde ich eine Anwendung auf der Grundlage des WIA Coding4Fun-Artikels Look at Me! Windows Image Acquisition (in englischer Sprache) entwickeln, die Sie dazu verwenden können, Bilder automatisch hochzuladen, wenn Sie ein kompatibles Gerät an Ihren Computer anschließen.

Der Autor

Ich bin ein .NET-Entwickler, der für BT in Newcastle, England, arbeitet. In meiner Freizeit nehme ich viele Fotos auf, lade sie auf die Flickr-Website und verfasse ulkige Bildschirmschonertexte, um sie anzuzeigen. Wenn ich nicht gerade am Computer sitze, gehe ich gerne wieder auf Motivjagd oder in Northumberland oder dem Lake District auf Klettertour. Meine Flickr-Fotos können Sie sich unter http://www.flickr.com/photos/samjudson ansehen. Wenn Sie Kontakt zu mir aufnehmen möchten, können Sie das über das Channel9 Flickr.Net forum oder meinen Blog unter http://www.wackylabs.net/ tun, oder schicken Sie mir eine E-Mail an mailto:sam@wackylabs.net.


Anzeigen: