<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Social Media Development &#187; Software Entwicklung</title>
	<atom:link href="http://www.social-media-development.de/blog/category/software-entwicklung/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.social-media-development.de/blog</link>
	<description></description>
	<lastBuildDate>Mon, 09 Jan 2012 13:54:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Die Realität im Alltag des Entwicklers</title>
		<link>http://www.social-media-development.de/blog/2010/12/16/die-realitat-im-alltag-des-entwicklers/</link>
		<comments>http://www.social-media-development.de/blog/2010/12/16/die-realitat-im-alltag-des-entwicklers/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 14:40:17 +0000</pubDate>
		<dc:creator>Daniel Grewing</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://www.social-media-development.de/blog/?p=586</guid>
		<description><![CDATA[Im JAXcenter werden die &#8220;10 schmutzige Geheimnisse aus dem Entwickler-Alltag&#8221; enthüllt ;-)
Die Artikel stützt sich auf den Orginalbeitrag von Jason Hiner &#8220;10 dirty little secrets you should know about working in IT&#8220;.
Meine Favorit ist ganz klar: 
Deine Nicht-Entwickler-Kollegen werden dich mit Problem mit ihren Heim-PCs belästigen
Der Rest ist schon irgendwie pessimistisch, mit allen würde ich [...]]]></description>
			<content:encoded><![CDATA[<p>Im JAXcenter werden die <a href="http://it-republik.de/jaxenter/news/10-schmutzige-Geheimnisse-aus-dem-Entwickler-Alltag-057832.html">&#8220;10 schmutzige Geheimnisse aus dem Entwickler-Alltag</a>&#8221; enthüllt ;-)<br />
Die Artikel stützt sich auf den Orginalbeitrag von Jason Hiner &#8220;<a href="http://techrepublic.com.com/5208-13416-0.html?forumID=102&#038;threadID=235734&#038;messageID=2651646&#038;tag=leftCol;post-546">10 dirty little secrets you should know about working in IT</a>&#8220;.<br />
Meine Favorit ist ganz klar: </p>
<blockquote><p>Deine Nicht-Entwickler-Kollegen werden dich mit Problem mit ihren Heim-PCs belästigen</p></blockquote>
<p>Der Rest ist schon irgendwie pessimistisch, mit allen würde ich so nicht übereinstimmen. Ist wohl auch die Frage, welchen Arbeitgeber man hat.<br />
Der deutsche Artikel hat nicht ganz so viel Resonanz bekommen wie das englische Orginal. Dort sind eine Menge von Kommentaren eingegangen.</p>
<p>Frei übersetzt steht in den Kommentaren sowas wie</p>
<blockquote><p>Bei guter Arbeit entwickelst du dich aus dem Job, weil du nicht mehr gebraucht wirst, also programmiere andere aus dem Job</p></blockquote>
<blockquote><p>Wenn du mehr als 2% mehr Gehalt haben willst, wechsle die Position und/oder den Arbeitgeber</p></blockquote>
<blockquote><p>Weiterbildung geht von deiner Zeit ab. Die Firma wird dir nichts zahlen, weil es nur in deinem Kopf bleibt</p></blockquote>
<blockquote><p>Die besten Entwickler sind auch immer die seltsamsten</p></blockquote>
<p>oder</p>
<blockquote><p>Ich bin nicht hier um den Neuen einzulernen</p></blockquote>
<div id="facebook_like"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.social-media-development.de%2Fblog%2F2010%2F12%2F16%2Fdie-realitat-im-alltag-des-entwicklers%2F&amp;layout=standard&amp;show_faces=true&amp;width=500&amp;action=like&amp;font=segoe+ui&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:80px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.social-media-development.de/blog/2010/12/16/die-realitat-im-alltag-des-entwicklers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java ist auch eine Insel</title>
		<link>http://www.social-media-development.de/blog/2010/12/12/java-ist-auch-eine-insel/</link>
		<comments>http://www.social-media-development.de/blog/2010/12/12/java-ist-auch-eine-insel/#comments</comments>
		<pubDate>Sun, 12 Dec 2010 10:17:47 +0000</pubDate>
		<dc:creator>Daniel Grewing</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://www.social-media-development.de/blog/?p=576</guid>
		<description><![CDATA[&#8220;Java ist auch eine Insel&#8221; ist in der 9. Auflage erschienen. Der Galileo Verlag stellt das Buch kostenlos Online und zum Download zur Verfügung.
Das Buch kann als Standardwerk für die Java Programmierung angesehen werden. Es ermöglicht einen umfassenden Einstieg und dient mit der Volltextsuche als gutes Nachschlagewerk. Es werden die wichtigsten Standards besprochen, sowie Spezialthemen [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<a href="http://openbook.galileocomputing.de/javainsel9/">Java ist auch eine Insel</a>&#8221; ist in der 9. Auflage erschienen. Der Galileo Verlag stellt das Buch kostenlos Online und zum Download zur Verfügung.<br />
Das Buch kann als Standardwerk für die Java Programmierung angesehen werden. Es ermöglicht einen umfassenden Einstieg und dient mit der Volltextsuche als gutes Nachschlagewerk. Es werden die wichtigsten Standards besprochen, sowie Spezialthemen wie XML, JSP, JDBC oder Reflections.<br />
Interessant für den Einsteiger sind die <a href="http://www.tutego.de/aufgaben/j/">Übungen zum Buch</a>. Aufgaben gibt es zu jedem Kapitel und die Lösungen werden gleich in Java-Code präsentiert.<br />
Für Java Entwickler, die sich weiterbilden möchten, würde ich noch folgende Bücher aus dem openbook Programm empfehlen:<br />
<a href="http://openbook.galileocomputing.de/oop/">Objektorientierte Programmierung</a>: Das Buch gibt einen Überblick über Konzepte der Objektorientierung, Entwurfsmuster und Architekturen (z.B. das MVC Prinzip)<br />
<a href="http://openbook.galileocomputing.de/java2/">Java 2: Designmuster und Zertifizierungswissen</a>: Das Buch ist zwar schon etwas älter, die Konzepte von z.B. logischen Operatoren, UML Modellierung und Reflections sind aber immer noch aktuell.</p>
<div id="facebook_like"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.social-media-development.de%2Fblog%2F2010%2F12%2F12%2Fjava-ist-auch-eine-insel%2F&amp;layout=standard&amp;show_faces=true&amp;width=500&amp;action=like&amp;font=segoe+ui&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:80px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.social-media-development.de/blog/2010/12/12/java-ist-auch-eine-insel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fehler vermeiden</title>
		<link>http://www.social-media-development.de/blog/2010/12/06/fehler-vermeiden/</link>
		<comments>http://www.social-media-development.de/blog/2010/12/06/fehler-vermeiden/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 19:00:00 +0000</pubDate>
		<dc:creator>Daniel Grewing</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://www.social-media-development.de/blog/?p=561</guid>
		<description><![CDATA[Mit dem Artikel Als Entwickler &#8220;Besser werden&#8221; habe ich drei Möglichkeiten genannt, wie man seine Fähigkeiten als Programmierer verbessern kann: Die Methoden waren Pair Programming, sich an Grundsätze des Clean Code Develoments halten oder die Sache pragmatisch ala Hunt anzugehen.
Eine andere Möglichkeit besteht darin, typische Fehler zu vermeiden. Ein Artikel im JAXcenter beschreibt &#8220;10 Fehler, [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem Artikel <a href="http://www.social-media-development.de/blog/2010/12/05/als-entwickler-besser-werden/">Als Entwickler &#8220;Besser werden&#8221;</a> habe ich drei Möglichkeiten genannt, wie man seine Fähigkeiten als Programmierer verbessern kann: Die Methoden waren <a href="http://de.wikipedia.org/wiki/Pair-Programming">Pair Programming</a>, sich an Grundsätze des <a href="http://www.clean-code-developer.de/">Clean Code Develoments</a> halten oder die Sache <a href="http://www.amazon.de/Pragmatische-Programmierer-Andrew-Hunt/dp/3446223096/ref=sr_1_1?ie=UTF8&#038;qid=1291661773&#038;sr=8-1">pragmatisch ala Hunt</a> anzugehen.</p>
<p>Eine andere Möglichkeit besteht darin, typische Fehler zu vermeiden. Ein Artikel im JAXcenter beschreibt <a href="http://it-republik.de/jaxenter/news/10-Fehler-die-jedem-Programmierer-unterlaufen-057672.html">&#8220;10 Fehler, die jedem Programmierer unterlaufen&#8221;</a>. Einige Fehler sollten jedem klar sein, wie sprechende Variablennamen zu benutzen oder nicht tausende von Zeilen in eine Methode zu stopfen. Insgesamt wäre die Liste in sichtbarer Erreichbarkeit bei der Entwicklung gar nicht so deplatziert.<br />
Der 10. Punkt nimmt dann meinen Vorschlag wieder auf: Weiterbildung ;-)</p>
<div id="facebook_like"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.social-media-development.de%2Fblog%2F2010%2F12%2F06%2Ffehler-vermeiden%2F&amp;layout=standard&amp;show_faces=true&amp;width=500&amp;action=like&amp;font=segoe+ui&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:80px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.social-media-development.de/blog/2010/12/06/fehler-vermeiden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Als Entwickler &#8220;Besser-werden&#8221;</title>
		<link>http://www.social-media-development.de/blog/2010/12/05/als-entwickler-besser-werden/</link>
		<comments>http://www.social-media-development.de/blog/2010/12/05/als-entwickler-besser-werden/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 11:32:50 +0000</pubDate>
		<dc:creator>Daniel Grewing</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://www.social-media-development.de/blog/?p=540</guid>
		<description><![CDATA[Gute Software erfühlt nicht nur die gewünschten Anforderungen und Funktionen. Wichtig ist auch die Qualität der Software, also auch die des Quelltexts.
Gute Software ist auch, wenn neue und unbekannte Anforderungen leicht implementiert werden können, wenn andere Entwickler den Code verstehen und erweitern können und man selbst noch nach Monaten versteht, was man da überhaupt entwickelt [...]]]></description>
			<content:encoded><![CDATA[<p>Gute Software erfühlt nicht nur die gewünschten Anforderungen und Funktionen. Wichtig ist auch die Qualität der Software, also auch die des Quelltexts.<br />
Gute Software ist auch, wenn neue und unbekannte Anforderungen leicht implementiert werden können, wenn andere Entwickler den Code verstehen und erweitern können und man selbst noch nach Monaten versteht, was man da überhaupt entwickelt hat. Das alles fasst man unter dem Begriff Wartbarkeit zusammen.<br />
Um sich als Entwickler persönlich weiter zu entwickeln bieten sich verschiedene Möglichkeiten an. Entwicklungsmodelle wie <a href="http://de.wikipedia.org/wiki/Scrum">Scrum</a> oder <a href="http://de.wikipedia.org/wiki/Extreme_programming">Extreme Programmierung</a> nutzen das Konzept des <a href="http://de.wikipedia.org/wiki/Pair-Programming">Pair Programming</a>. Zwei Entwickler setzen sich zusammen an einen PC und lösen ein Problem. Dabei tippt einer in die Tastatur und entwickelt, der andere denkt mit und versucht zu folgen. Vor allem wenn Junior und Senior Entwickler zusammen sitzen, kann der Junior doch einiges lernen.<br />
Die Initiative <a href="http://www.clean-code-developer.de/">Clean Code Developer</a> versucht zu vermitteln, was professionelle Entwicklung ausmacht. Demnach sollte sich ein Entwickler mit seiner Arbeit und Werkzeugen bewusst auseinandersetzen und nicht einfach nur versuchen die Chefs oder Kunden zufrieden zu stellen. Unter dem Aspekt, dass „gute Softwareentwicklung“ nicht einfach zu definieren ist, beschreibt die Webseite einen gemeinsamen Nenner und versucht einen Qualitätsstandard zu definieren. Obwohl die Seite sich an .NET Entwickler richtet, kann man auch als Java Entwickler sich einiges von dem Wertesystem ansehen. Etwas nerdhaft finde ich die Idee, die „Grade“ eines Entwicklers mittels bunter Armbänder zu zeigen.<br />
Ein weiteren Einstieg in zur persönlichen Weiterbildung erhält man in Andrew Hunt’s Buch <a href="http://www.amazon.de/Pragmatische-Programmierer-Andrew-Hunt/dp/3446223096/ref=sr_1_1?ie=UTF8&#038;qid=1291661773&#038;sr=8-1">Der Pragmatische Programmierer</a>. Das Buch ist locker zu lesen und gibt eine Menge Ideen und Tipps mit, wie man mit einer pragmatischen Einstellung und der Lust am Weiterlernen bessere Software entwickelt kann.</p>
<div id="facebook_like"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.social-media-development.de%2Fblog%2F2010%2F12%2F05%2Fals-entwickler-besser-werden%2F&amp;layout=standard&amp;show_faces=true&amp;width=500&amp;action=like&amp;font=segoe+ui&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:80px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.social-media-development.de/blog/2010/12/05/als-entwickler-besser-werden/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Facebook Freunde mit der facebook-java-api</title>
		<link>http://www.social-media-development.de/blog/2010/02/07/facebook-freunde-mit-der-facebook-java-api/</link>
		<comments>http://www.social-media-development.de/blog/2010/02/07/facebook-freunde-mit-der-facebook-java-api/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 20:12:43 +0000</pubDate>
		<dc:creator>Daniel Grewing</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Facebook-Entwicklung]]></category>
		<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://www.social-media-development.de/blog/?p=393</guid>
		<description><![CDATA[Einen Einstieg in Facebookconnect mit der Java Library facebook-java-api hatte ich bereits gegeben.
In diesem Artikel ein kleines Beispiel, wie man nach dem Connect Zugriff auf die Freundesliste bekommt.

Grundlage für die Ausführung ist die Authentifizierung des Benutzers. Wie das funktioniert, steht in diesem Artikel.
Die ids der Freunde laden
Im ersten Schritt werden die id&#8217;s der Freunde geladen:
Document [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="border: 0pt none; margin: 0px;" src="http://www.social-media-development.de/blog/images/fb_connect.png" alt="facebook_connect" />Einen Einstieg in Facebookconnect mit der Java Library <a href="http://code.google.com/p/facebook-java-api/">facebook-java-api</a> hatte <a href="http://www.social-media-development.de/blog/2010/01/12/authentication-mit-facebook-connect/">ich bereits gegeben</a>.<br />
In diesem Artikel ein kleines Beispiel, wie man nach dem Connect Zugriff auf die Freundesliste bekommt.<br />
<span id="more-393"></span><br />
Grundlage für die Ausführung ist die Authentifizierung des Benutzers. Wie das funktioniert, steht <a href="http://www.social-media-development.de/blog/2010/01/12/authentication-mit-facebook-connect/">in diesem Artikel</a>.</p>
<h2>Die ids der Freunde laden</h2>
<p>Im ersten Schritt werden die id&#8217;s der Freunde geladen:</p>
<pre>Document docFriends = client.friends_get();
NodeList friendsList = docFriends.getElementsByTagName("uid");</pre>
<p>Durch die Liste kann man dann iterieren und die Profile der Freunde laden. Beispielhaft wird jeweils der Name und das Geburtstagdatum eines Freundes ausgegeben:</p>
<h2>Iteration durch die Freundesliste</h2>
<pre>for (int index = 0; index &lt; friendsList.getLength(); index++)
{
    Collection friendInfo = new ArrayList();
    long fid = Long.valueOf(friendsList.item(index).getFirstChild().getTextContent());
    friendInfo.add(fid);

    EnumSet friendFields =
        EnumSet.of(ProfileField.NAME, ProfileField.BIRTHDAY);

    Document df = client.users_getInfo(friendInfo, friendFields);
    String friendName =
        df.getElementsByTagName("name").item(0).getTextContent();
    String friendBirthday =
        df.getElementsByTagName("birthday").item(0).getTextContent();
    System.out.println(friendName + " (" + friendBirthday + ")");
}</pre>
<h2>Ähnliche Artikel</h2>
<p><a href="http://www.social-media-development.de/blog/2010/01/12/authentication-mit-facebook-connect/">Authentication mit Facebook Connect</a><br />
<a href="http://www.social-media-development.de/blog/2009/12/17/twitter-twitter4j-und-oauth/">Twitter, Twitter4J und OAuth</a></p>
<div id="facebook_like"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.social-media-development.de%2Fblog%2F2010%2F02%2F07%2Ffacebook-freunde-mit-der-facebook-java-api%2F&amp;layout=standard&amp;show_faces=true&amp;width=500&amp;action=like&amp;font=segoe+ui&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:80px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.social-media-development.de/blog/2010/02/07/facebook-freunde-mit-der-facebook-java-api/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Authentication mit Facebook Connect</title>
		<link>http://www.social-media-development.de/blog/2010/01/12/authentication-mit-facebook-connect/</link>
		<comments>http://www.social-media-development.de/blog/2010/01/12/authentication-mit-facebook-connect/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 06:29:35 +0000</pubDate>
		<dc:creator>Daniel Grewing</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Facebook-Entwicklung]]></category>
		<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://www.social-media-development.de/blog/?p=332</guid>
		<description><![CDATA[Facebook Connect ist eine Möglichkeit, Benutzer über ihren Facebook Account auf einer eigenen Webseite zu authentifizieren.
Welche Idee dahinter steckt, was Single-Sign-on ist und was für Möglichkeiten es bietet, kann man sich unter den Links am Ende des Artikels genauer anschauen.

Jetzt geht es um die Grundlagen, wie man mit Java einen Connect über Facebook realisiert.
Für eine [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="border: 0pt none; margin: 0px;" src="http://www.social-media-development.de/blog/images/fb_connect.png" alt="facebook_connect" />Facebook Connect ist eine Möglichkeit, Benutzer über ihren Facebook Account auf einer eigenen Webseite zu authentifizieren.<br />
Welche Idee dahinter steckt, was Single-Sign-on ist und was für Möglichkeiten es bietet, kann man sich unter den Links am Ende des Artikels genauer anschauen.</p>
<p><span id="more-332"></span></p>
<p>Jetzt geht es um die Grundlagen, wie man mit Java einen Connect über Facebook realisiert.<br />
Für eine kleine Beispielanwendung sind folgende Schritte notwendig:<br />
1. Anwendung bei Facebook registrieren.<br />
2. Grundeinstellungen einer internetbasierten Anwendung festlegen.<br />
3. Entwicklung mit <a href="http://code.google.com/p/facebook-java-api/">facebook-java-api</a>.</p>
<p><strong>Registrierung der Anwendung</strong><br />
Für die Registrierung einer Anwendung ist natürlich ein Profil bei Facebook nötig. Hat man das, kann man eine <a href="http://www.facebook.com/developers/">neue Anwendung erstellen</a>. Es erfolgt die Vergabe eines Namens und schon findet man sich auf der Einstellungsseite wieder.</p>
<p><strong>Grundeinstellungen</strong><br />
<a title="fb_connect_allgmeines by gniwerg, on Flickr" href="http://www.flickr.com/photos/15617339@N00/4234041568/"><img src="http://farm3.static.flickr.com/2775/4234041568_37c1259117.jpg" alt="fb_connect_allgmeines" width="500" height="351" /></a></p>
<p>&#8220;Allgemeines&#8221; zeigt einen <em>API-Schlüssel</em> und ein <em>Geheim</em>, im englischen <em>API-Key</em> und <em>secret</em>. Diese beiden Werte benötigt man für die Entwicklung.<br />
Facebook bietet eine Fülle von Einstellungen für die Anwendung. Wichtig für den Einstieg sind Angaben unter den Punkten &#8220;Authentifizierung&#8221; und &#8220;Leinwand&#8221;.<br />
Bei beiden Punkten gibt man eine <em>Callback-Url</em> an: ein Link auf die Facebook nach erfolgreicher Anmeldung zurückleiten soll.</p>
<p><a title="fb_connect_authentifizierung by gniwerg, on Flickr" href="http://www.flickr.com/photos/15617339@N00/4233268841/"><img src="http://farm5.static.flickr.com/4022/4233268841_3a5609c793.jpg" alt="fb_connect_authentifizierung" width="500" height="237" /></a></p>
<p><a title="fb_connect_leinwand by gniwerg, on Flickr" href="http://www.flickr.com/photos/15617339@N00/4234041874/"><img src="http://farm3.static.flickr.com/2544/4234041874_5a952bd33b.jpg" alt="fb_connect_leinwand" width="500" height="354" /></a></p>
<p><strong>Entwicklung</strong><br />
Der Ablauf der Authentifizierung ist recht simple. Man bietet dem Benutzer einen Login-Link oder -Button an, der ihn zu Facebook führt. Nach erfolgreicher Anmeldung wird er zurück geleitet und über die URL ein Token mitgeliefert. Über diesen Token wird der Benutzer eindeutig identifiziert.</p>
<p>Das Beispiel habe ich mit Java Struts entwickelt, funktioniert aber auch mit JSP, JSF oder anderen Frameworks.<br />
Zuerst wird der Login-Link mit dem <em>API-key</em> und dem <em>secret</em> erzeugt.</p>
<pre>FacebookXmlRestClient client = new FacebookXmlRestClient (apiKey, secretToken);
String token = client.auth_createToken();
String url = "http://www.facebook.com/login.php?api_key=" + apiKey + "&amp;v=1.0";
request.setAttribute("facebookUrl", url);</pre>
<p><em>apiKey</em> und <em>secretToken</em> sind die oben genannten Variablen, die man bei der Registrierung erhalten hat.<br />
Auf der JSP-Seite kann man dann ein Bild verlinken oder den Login-Button von Facebook generieren lassen. Dafür bietet Facebook eigene <a href="http://wiki.developers.facebook.com/index.php">Connect Login Buttons</a> an.</p>
<pre>&lt;a href="&lt;bean:write name='facebookUrl'/&gt;"&gt;
&lt;img
src="http://wiki.developers.facebook.com/images/6/6f/Connect_iphone.png" border="0"&gt;
&lt;/a&gt;</pre>
<pre>&lt;a href="&lt;bean:write name='facebookUrl'/&gt;"
onclick="FB.Connect.requireSession(); return false;"
class="fbconnect_login_button FBConnectButton FBConnectButton_Small"&gt;
	&lt;span id="RES_ID_fb_login_text"
class="FBConnectButton_Text"&gt;
		Connect with Facebook
	&lt;/span&gt;
&lt;/a&gt;</pre>
<p>Klickt dann der Benutzer auf den Link wird er zu Facebook umgeleitet. Er kann sich dann mit seinen Daten anmelden, oder falls er noch keinen Account hat, auch gleich registrieren.<br />
Nach der Anmeldung wird er auf die Callback-URL umgeleitet.<br />
Über einen Parameter liefert Facebook den Autentifizierungstoken mit.<br />
Diesen ließt man aus und hat dann Zugriff auf die Profildaten des Benutzers oder anders herum, man hat den Benutzer über Facebook auf seiner Anwendung authentifiziert.<br />
Die Action-Klasse ließt den request aus und authentifiziert den Benutzer.</p>
<pre>FacebookXmlRestClient client = new FacebookXmlRestClient(apiKey, secretToken);
String authToken = request.getParameter("auth_token");
client.auth_getSession(authToken);</pre>
<p>Nun hat man Zugriff auf die Facebookdaten des Benutzers. In diesem Beispiel gebe ich den Namen und den Link zum Profilbild aus</p>
<pre>long myid = client.users_getLoggedInUser();
Collection users = new ArrayList();
users.add(myid);
EnumSet fields = EnumSet.of(ProfileField.NAME, ProfileField.PIC);
Document d = client.users_getInfo(users, fields);
String myname =
    d.getElementsByTagName("name").
        item(0).getTextContent();
String pic =
    d.getElementsByTagName("pic").
        item(0).getTextContent();
System.out.println("Name: " + myname);
System.out.println("Pic: " + pic);</pre>
<h2>Quellcode</h2>
<p>Hier der Quellcode der Struts Action-Klasse und der JSP:<br />
<a href="http://www.social-media-development.de/doc/facebookconnect/FacebookConnectAction.txt">FacebookConnectAction.java</a><br />
jsp-Datei: <a href="http://www.social-media-development.de/doc/facebookconnect/index.txt">index.jsp</a></p>
<h2>Weiterlesen</h2>
<p><strong>Entwicklung</strong><br />
API-Wiki von Facebook<br />
<a href="http://wiki.developers.facebook.com/index.php/Main_Page">Facebook Developer Wiki</a></p>
<p>Homepage von facebook-java-api<br />
<a href="http://code.google.com/p/facebook-java-api/">facebook-java-api</a></p>
<p>Drei englischsprachige Artikel über Facebook Connect mit Java<br />
<a href="http://www.larre.com/2007/10/10/building-a-facebook-application-in-15-minutes/">Building a Facebook Application in 15 minutes</a><br />
<a href="http://straylink.wordpress.com/2008/06/03/logging-in-with-facebook-java-api/">Logging in with Facebook Java API</a><br />
<a href="http://jazzy.id.au/pebble/2008/03/19/facebook_authentication_in_java.html">Facebook authentication in Java</a></p>
<p><strong>Blog-Artikel</strong><br />
Ein Blogartikel  über Nutzen und Vor- und Nachteile von Facebook Connect<br />
<a href="http://www.2-blog.net/2008/facebook-connect-verbindet-alles/">Facebook Connect verbindet alles</a></p>
<p>Vergleich zwischen Facebook Connect und Sign in with Twitter<br />
<a href="http://mashable.com/2009/04/18/twitter-facebook-connect/">Facebook Connect vs. Sign in with Twitter: Fight!</a></p>
<p>Artikel von netzwertig über Single-Sign-On im Web 2.0<br />
<a href="http://netzwertig.com/2009/07/06/single-sign-on-2009-ist-das-jahr-des-durchbruchs/">Single-Sign-On: 2009 ist das Jahr des Durchbruchs</a></p>
<p><strong>Beispiele für Facebook Connect</strong><br />
Apple nutzt in einer App Facebook Connect um Statusmeldungen abzusetzen<br />
<a href="http://www.futureofwebstrategy.com/2009/12/31/facebook-connect-beispiel-von-apple/">Facebook Connect Beispiel von Apple</a></p>
<p>Ein Plugin für Wordpress, um Blog Besucher über Facebook zu registrieren<br />
<a href="http://www.sociable.es/facebook-connect/">Facebook Connect Wordpress Plugin</a></p>
<p>Das Nachrichtenportal verbindet sich mit Facebook. Kommentare auf bild.de können im Facebook Profil angezeigt werden oder man kann Artikel seinen Freunden empfehlen<br />
<a href="http://www.bild.de/BILD/digital/technikwelt/2009/04/21/facebook-connect/neu-bei-bild-de.html">BILD.de vernetzt sich mit Facebook</a></p>
<h2>Ähnliche Artikel</h2>
<p><a href="http://www.social-media-development.de/blog/">Facebook Freunde mit der facebook-java-api</a><br />
<a href="http://www.social-media-development.de/blog/2009/12/17/twitter-twitter4j-und-oauth/">Twitter, Twitter4J und OAuth</a></p>
<div id="facebook_like"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.social-media-development.de%2Fblog%2F2010%2F01%2F12%2Fauthentication-mit-facebook-connect%2F&amp;layout=standard&amp;show_faces=true&amp;width=500&amp;action=like&amp;font=segoe+ui&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:80px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.social-media-development.de/blog/2010/01/12/authentication-mit-facebook-connect/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Twitter, Twitter4J und OAuth</title>
		<link>http://www.social-media-development.de/blog/2009/12/17/twitter-twitter4j-und-oauth/</link>
		<comments>http://www.social-media-development.de/blog/2009/12/17/twitter-twitter4j-und-oauth/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 06:39:30 +0000</pubDate>
		<dc:creator>Daniel Grewing</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://www.social-media-development.de/blog/?p=188</guid>
		<description><![CDATA[Twitter4J ist eine Java Library, mit der man auf die API von Twitter zugreifen kann. Die ersten Gehversuche schafft man mit der Dokumentation auf der Webseite ganz gut. Gibt man die eigenen Benutzerdaten des Twitteraccounts im Quelltext an, kann man schon auf einige Daten zugreifen.
Der folgende Quelltext holt die letzten Tweets der Friends-Timeline:
Twitter twitter = [...]]]></description>
			<content:encoded><![CDATA[<p>Twitter4J ist eine Java Library, mit der man auf die API von Twitter zugreifen kann. Die ersten Gehversuche schafft man mit der Dokumentation auf der Webseite ganz gut. Gibt man die eigenen Benutzerdaten des Twitteraccounts im Quelltext an, kann man schon auf einige Daten zugreifen.<br />
Der folgende Quelltext holt die letzten Tweets der Friends-Timeline:</p>
<pre>Twitter twitter = new Twitter("gniwerg","geheim");
List&lt;Status&gt; statuses = twitter.getFriendsTimeline();
System.out.println("Showing friends timeline.");
for (Status status : statuses) {
    System.out.println(status.getUser().getName() + ":" +
    status.getText());
}
</pre>
<p><span id="more-188"></span><br />
Die Dokumentation über den OAuth Support ist aber leider etwas knapp gehalten. <a href="http://de.wikipedia.org/wiki/OAuth">OAuth</a> ist eine Authentifizierungsmethode, bei der eine Anwendung Zugriff auf die Daten eines Benutzers (z.B. die von Twitter) bekommt, ohne das der Benutzer seine Anmeldedaten (z.B. Twitter Benutzername und Kennwort) angeben muss.</p>
<p>Die Twitter API unterstützt OAuth und ermöglicht, dass sich Anwendungen bei den Benutzern registrieren und lesenden und auch schreibenden Zugriff auf den Twitter Account bekommen, ohne das der Benutzer seine Zugangsdaten offen legen muss.</p>
<p>Ich möchte nun anhand von Struts und Twitter4J zeigen, wie das funktioniert. Der Artikel <a href="http://www.snipe.net/2009/07/writing-your-first-twitter-application-with-oauth/">Writung Your First Twitter Application with OAuth</a> beschreibt das zwar anhand von php, zeigt aber ganz anschaulich, wie die Authentifizierung in der Theorie abläuft.</p>
<h2>1: Die Anwendung bei Twitter registrieren</h2>
<p>Zuerst muss man seine Anwendung bei Twitter registrieren. Dazu geht man bei Twitter in seinen Account unter <em>Connections </em>und klickt auf den etwas versteckten Link auf der rechten Seite:<br />
<em>Developers can edit the registration settings for their applications <a id="developer_oauth" href="http://twitter.com/apps">here</a>.</em><br />
Wichtig ist der Punkt <em>Application Type</em>. Dort wählt man <em>Browser</em> und Twitter verlangt eine <em>Callback URL</em>. Dort gibt man den Link an, auf die Twitter den Benutzer nach der Zugriffsgewährung leiten soll. Später schreibe ich noch etwas zu diesem Punkt, der bei mir etwas umständlich war.</p>
<p><a title="twitter_register by gniwerg, on Flickr" href="http://www.flickr.com/photos/15617339@N00/4179133578/"><img class="aligncenter" style="float:none;" src="http://farm3.static.flickr.com/2753/4179133578_f0a470243a.jpg" alt="twitter_register" width="385" height="500" /></a></p>
<p>Nach der Registrierung erhält man zwei Schlüssel, einen Consumer Key und ein Consumer Secret. Beide brauchen wir später noch für die Entwicklung.</p>
<h2>2. Zugriff gewähren</h2>
<p>Nun kommen wir zur eigentlichen Entwicklung. Wir müssen dem Benutzer einen Link anbieten, mit dem er die Anwendung bei Twitter registriert. Dazu holt man sich mit Hilfe des Consumer Key und Consumer Secrets eine Authentifizierungs-URL:</p>
<pre>HttpSession session = request.getSession();
Twitter twitter = new Twitter();
twitter.setOAuthConsumer(ConsumerKey, ConsumerSecret);
RequestToken requestToken = twitter.getOAuthRequestToken();
String token = requestToken.getToken();
String tokenSecret = requestToken.getTokenSecret();
session.setAttribute("token", token);
session.setAttribute("tokenSecret", tokenSecret);
String ouathUrl = requestToken.getAuthorizationURL();
request.setAttribute("ouathUrl", ouathUrl);
} catch (TwitterException e) {e.printStackTrace();}</pre>
<p>Über</p>
<pre>requestToken.getToken();</pre>
<p>und</p>
<pre>requestToken.getTokenSecret()</pre>
<p>bekommt man eindeutige Tokens für die Anwendung. Ich lege sie für den späteren Gebrauch in die Session. Man kann sie auch abspeichern, da sie für die Anwendung eindeutig sind.</p>
<p>Die Authentifizierungs URL übergibt man an eine jsp:</p>
<pre>&lt;a href="&lt;bean:write name='ouathUrl'/&gt;"&gt;Bei Twitter anmelden&lt;/a&gt;</pre>
<p>Der Link öffnet dann die folgende Seite, und der Benuter kann der Anwendung Zugriff gewähren.</p>
<p><a title="twitter_allow_deny by gniwerg, on Flickr" href="http://www.flickr.com/photos/15617339@N00/4178365899/"><img style="float:none;" src="http://farm3.static.flickr.com/2772/4178365899_dc526120a5.jpg" alt="twitter_allow_deny" width="500" height="237" /></a></p>
<p>Klickt man Allow bringt Twitter den Benutzer zurück zu der URL, die man bei der Registrierung unter Callback URL angegeben hat.</p>
<h2>3. Zugriff auf die Twitter Daten des Benutzers</h2>
<p>Twitter bringt uns nun unter der Callback URL auf eine Action-Klasse, die Zugriff auf die Daten des Benutzers erhält:</p>
<pre>HttpSession session = request.getSession();
String token = (String)session.getAttribute("token");
String tokenSecret = (String)session.getAttribute("tokenSecret");
Twitter twitter = new Twitter();
twitter.setOAuthConsumer(ConsumerKey, ConsumerSecret);
AccessToken accessToken = twitter.getOAuthAccessToken(token, tokenSecret);
twitter.setOAuthAccessToken(accessToken);
String accessTokenUser = accessToken.getToken();
String accessTokenSecretUser = accessToken.getTokenSecret();
int id = accessToken.getUserId();
User user = twitter.showUser(String.valueOf(id));
System.out.println("Twitter Username: " + user.getScreenName());</pre>
<p>Der erste Schritt ist erneut, Twitter die Tokens der Anwendung mitzuteilen.</p>
<p>Anschließend kann man auf die Access Tokens zugreifen. Die Schlüssel <em>accessTokenUser</em> und <em>accessTokenSecretUser</em> sind für jeden Benutzer eindeutig und können abgespeichert werden.<br />
Schließlich hat man dann Zugriff auf den Benutzer und kann z.B. den Benutzernamen ausgeben.</p>
<h3>Callback URL</h3>
<p>Bei der Entwicklung war es problematisch, dass ich bei der Registrierung der Anwendung bei Twitter keine Callback URL mit <em>http://localhost </em>angeben konnte. Ich habe dort also eine URL angegeben, die auf eine php-Seite auf meinem Webserver verlinkt. Dort mache ich dann eine Weiterleitung zu meiner Entwicklungsumgebung auf dem PC:<br />
Meine Callback URL bei Twitter:<br />
http://www.social-media-development.de/twitteroauth/localhost.php</p>
<p>Die php-Datei localhost.php sieht dann so aus:</p>
<pre>&lt;?php
header("Location: http://localhost:8080/mudflat/apps/twitterstats.do?do=getkey");
exit();
?&gt;</pre>
<h2>Ähnliche Artikel</h2>
<p><a href="http://www.social-media-development.de/blog/2010/01/12/authentication-mit-facebook-connect/">Authentication mit Facebook Connect</a><br />
<a href="http://www.social-media-development.de/blog/2010/02/07/facebook-freunde-mit-der-facebook-java-api/">Facebook Freunde mit der facebook-java-api</a></p>
<div id="facebook_like"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.social-media-development.de%2Fblog%2F2009%2F12%2F17%2Ftwitter-twitter4j-und-oauth%2F&amp;layout=standard&amp;show_faces=true&amp;width=500&amp;action=like&amp;font=segoe+ui&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:80px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.social-media-development.de/blog/2009/12/17/twitter-twitter4j-und-oauth/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

