Google von der Kommandozeile

Google hat ein Tool vorgestellt, mit dem einige Google-Services von der Kommandozeile aus bedienen können. Unterstützt werden bis jetzt:

  • Blogger
  • Calendar
  • Contacts
  • Docs
  • Picassa
  • YouTube

Unterstützt werden u.a. Eingaben wie “post” zur Veröffentlichung von Content, “list” zur Auflistung von Posts oder “tag” zur Kennzeichnung (taggen) von Content.

Die ExampleScripts zeigen die Einsatzmöglichkeiten für die unterschiedlichen Dienste (siehe auch das Manual)

Das Python-Tool wurde unter einer OpenSource Lizenz bei Google Code veröffentlicht.

Ich lade zu Google+ ein!

Google macht sein Netzwerk Google+ weiter offen und ermöglicht nun, andere per Link einzuladen.

Das möchte ich auch nutzen und verteile mit diesem Link meine 150 Einladungen:
Google+ Mitglied werden

Update: Was ist Social Media?

2009 habe ich bereits eine Sammlung von Definitionen zu Social Media veröffentlicht. Im Rahmen meiner Masterarbeit bin ich auf eine weitere gestoßen:

Unter Social Media versteht man Internetanwendungen, die auf den bestehenden ideologischen und technologischen Grundlagen des Web 2.0 aufbauen […]. Das Teilen von Inhalten sowie Kommunikation und Kollaboration stehen bei diesen webbasierten Anwendungen im Vordergrund

Quelle:
Bauer, Patrick; Hofmann, Ute; Ehle, Julia (2010): Kollaboration und Kooperation mit Social Media in verteilten Forschungsnetzwerken. In: Schewa Mandel, Manuel Rutishauer und Eva Seiler Schiedt (Hg.): Digitale Medien für Lehre und Forschung, Bd. 15. Münster, New York, München, Berlin: Waxmann, S. 252–262.

PDF ist verfügbar unter: Digitale Medien für Lehre und Forschung

Für eine Zusammenfassung was unter Web 2.0 zu verstehen ist, kann in den Artikel von Tim O’Reilly “What is Web 2.0?” empfehlen.

Entwurfsmuster für Abschlussarbeiten

Meistens hat man bei einer Abschlussarbeit mit Problemen zu kämpfen, die andere auch schon hatten. In der Softwareentwicklung haben sich Entwurfsmuster durchgesetzt, die ” bewährte Lösungs-Schablonen für wiederkehrende Entwurfsprobleme” [Wiki2011] anbieten.

Für den Kontext einer Abschlussarbeiten habe ich einen Artikel gefunden, der “Entwurfsmuster für die Betreuung von Abschlussarbeiten” beschreibt.
Auch wenn der Titel des Artikels sich scheinbar an Betreuer richtet, wird die Zielgruppe der Studierenden ganz klar mit einbezogen:

“[...]Ziel ist eine sinnvoll strukturierte und konzentrierte Zusammenarbeit zwischen Betreuenden und Studierenden, die einen wichtigen Beitrag zum erfolgreichen Abschluss der Arbeit darstellen kann” (ScSc2008)

Die Mustersprache enthält neun Entwurfsmuster, wie z.B. “FRÜHE GLIEDERUNG”, “UNTERSTÜTZTE LITERATURSAMMLUNG” oder “TAGEBUCH”. Jedes Pattern besteht aus einem Namen, dem einzuordnenden Kontext, Einflussfaktoren, Soziale Lösung, Sofortlösung, Integrierte Groupwarelösung, Diskussion und Verwandte Muster.

Das erste Pattern “ERSTKONTAKT” wird wie folgt beschrieben:

Die erste Begegnung soll die Grundlage einer vertrauensvollen, effizienten Arbeitsbeziehung schaffen. Sie sollten dabei sorgfältig den organisatorischen Rahmen der Zusammenarbeit klären. Das Thema sollte nur grob vereinbart, inhaltliche Details jedoch zu einen späteren Termin diskutiert werden.

Da ich meine Betreuerin bereits aus meiner Ausbildung zum Fachinformatiker kenne, habe ich diesen Teil schon erfolgreich erledigt. Das Thema haben wir bereits grob umrissen und nun liegt es in meiner Verantwortung das Grobkonzept zu erstellen. Damit würden dann die Pattern PROJEKTPULS und AGILES EXPOSÉ von meiner Seite aus initiiert.

Dieser Ansatz bringt mich gleich auf die Frage: Gibt es nicht vielleicht auch eine Mustersammlung aus Studentensicht? Muster die sich mit Organisations- oder Motivationsproblemen beschäftigen? Ich werde das mal recherchieren …

Und schließlich, wie es sich gehört, die Literaturliste:
(ScSc2008) Schmolitzky, Schümmer; Entwurfsmuster zur Betreuung von Abschlussarbeiten; 2008, 2009
(Wiki2011) Wikipedia; Entwurfsmuster; http://de.wikipedia.org/wiki/Entwurfsmuster; 2011

Literaturverwaltung und Wissensmanagement

Literaturrecherche und -verwaltung sind zwei zentrale Aspekte bei der Erstellung einer Abschlussarbeit. Dazu kommt noch die Verarbeitung der Literatur und ein persönliches Wissensmanagement.
Die Grafik zeigt den optimalen Fall, wie ich mir das für meine Arbeit vorstelle.

Literatur erfasse ich über verschiedene Wege. Bei der Recherche im Internet setze ich mir einen Bookmark bei delicious oder speichere gleich ganze Inhalte bei Evernote. Evernote setze ich auch ein, wenn ich beim Lesen auf eine Literaturliste stosse. Mit Remember the Milk verwalte ich meine Aufgaben und setzte mir häufig ein schnelles todo, wenn ich mich nicht zu sehr ablenken lassen will. Über Google Books versuche ich möglichst vollständig erfasste Bücher zu finden bevor ich mich auf den Weg in eine Bibliothek mache.

Anschließend findet die Literatur ihren Weg auf ein Desktop Programm. Für die Verwaltung der Literatur nutze ich Citavi. Citavi hat hervorragende Picker für Firefox und den Adobe Reader, so dass man sich bei der Erfassung einiges an Tipparbeit spart. Außerdem verfügt Citavi über einen guten Export der Literaturliste in das BibTexformat.

Für mein persönliches Wissensmanagement nutze ich den Zettelkasten nach dem Vorbild von Niklas Luhmann. Wissensmanagement heißt bei mir, dass ich Zitate und Zusammenfassungen von gelesener Literatur im Zettelkasten erfasse und mit anderen Zettel in Verbindung bringe. Ausschlaggebend für die Nutzung vom Zettelkasten (und z.B. nicht die integrierte Wissensverwaltung von Citavi) ist die flexible Schreibtischfunktion. Dort kann man sich Zettel in Kategorien (z.B. analog zum Inhaltsverzeichnis der Arbeit) einsortieren und die Arbeit schreibt sie sich fast von selbst ;-).

Masterarbeit – Work in progress

Zur Zeit ist es hier im Blog etwas sehr ruhig. Das stimmt auch so, habe ich mir lange keine Zeit mehr für einen neuen Artikel genommen. Aber die Arbeit ruht nicht. Mein Studium an der FernUniversität Hagen tritt in die entscheidene Phase ein: Die Abschlussarbeit, und da ich im Studiengang Master of Computer Science eingeschrieben bin handelt es sich um eine Masterarbeit.
Für den Blog habe ich mir vorgenommen die Entstehung der Arbeit zu dokumentieren. Bis jetzt liegt noch kein Thema fest bzw. ich erarbeite es mit meiner Betreuerin. Es wird aber etwas mit Social Media zu tun haben und eignet sich somit wunderbar für diesen Blog und seine Thematik.
Neben der Themenfindung beschäftigte ich mich im Moment viel mit organisatorischen Fragen wie der Auswahl von Literaturverwaltungsprogrammen oder mit der Einrichtung von Latex. Auch diese Schritte und Ergebnisse will ich hier in Zukunft dokumentieren.

Neue Facebook-App


Meine zweite Facebook-Anwendung ist seit kurzem Online.
Die Anwendung blog365 – fotos by Stefan Grundmann zeigt Bilder aus einem Fotoblog.
Der Blog wird von einem guten Freund betrieben. Er hat sich vorgenommen ein Jahr lang jeden Tag ein Bild zu bloggen. Er ist nun seit über einem dreiviertel Jahr dabei und die Bilder sind wirklich sehenswert; von stilvollen Naturkompositionen, auf schwarz-weiß reduzierte Blumenstilleben oder schnellen und charakteristischen Streetfotografien ist vieles dabei.
Die Anwendung greift auf die Bilder zu, extrahiert sie und man kann sie innerhalb von Facebook ansehen.

Gut, eigentlich hat die Anwendung so keinen Sinn, Bilder können bei Facebook auch sehr einfach über die Pinnwand veröffentlicht werden. Sie ist aber eine weitere beispielhafte Anwendung und den Quellcode werde ich hier demnächst noch hier mit Erklärungen veröffentlichen.

Facebook Authentication & Authorization mit Java

Meine erste Facebook-App läuft jetzt seit gut einer Woche und hat bereits über 30 “Gefällt mir”. In diesem Artikel möchte ich darüber schreiben, wie ich die Authentifizierung von Benutzern bei Facebook gelöst habe.

In einem Artikel vor gut einem Jahr habe ich noch die facebook-java-api genutzt. Die Weiterentwicklung ist etwas eingeschlafen, deshalb war ich auf der Suche nach einer anderen API. Fündig geworden bin ich bei der RestFB, ein Open Source Framework, welches direkt auf die GraphAPI von Facebook zugreift.

Der erste Schritt bei der Entwicklung einer Anwendung auf Facebook ist die Anwendung selbst anzulegen. Man erhält dann eine Anwendungsnummer und zwei Schlüssel für die Authentifizierung, den API-Schlüssel und den Anwendungs-Geheimcode. Wichtig ist noch die Canvas-URL unter Facebook-Einbindung in den Einstellungen der Anwendung festzulegen, sowie die URL der Anwendung, die Canvasseite.

Den gesamten Prozess der Authentifizierung hat Facebook ganz gut beschrieben.

Bei dem ersten Aufruf greift meine Anwendung (in Struts entwickelt) als erstes auf die Canvas-URL zu.

Folgendes passiert dann. Man holt sich den Parameter “signed_request” und verarbeitet ihn. Bei dem ersten Aufruf muss der Nutzer sich noch authentifizieren und der Anwendung die Berechtigung erteilen, auf die eigenen Profildaten zugreifen zu können.
Es wird dann erstmal aufgerufen:

if (ret.getOauth_token() == null){
    return new ActionForward(authUrl, true);
}

Es erfolgt einer Weiterleitung auf die Authentifizierungs-URL von Facebook.
Die authUrl sieht so aus:

"https://graph.facebook.com/oauth/authorize" +
"?client_id=123456789" +
"&redirect_uri=http://localhost:8080/mudflat/apps/facebookauth.do?do=authSucess" +
"&scope=user_birthday";

wobei die client_id die Anwendungsnummer der Anwendung ist und unter scope die Berechtigungen stehen, die der Anwendung erteilt werden sollen. Welche Berechtigungen möglich sind, steht hier: Permissions Reference.
Der Benutzer kann die Anwendung nun hinzufügen und wird dann zur redirect_uri weitergeleitet.
Die Weiterleitungsadresse macht bei mir nichts anderes, als auf die eingebettete Anwendung bei Facebook weiterzuleiten (Canvasseite)

public ActionForward authSucess(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response) {		

return new ActionForward("http://apps.facebook.com/smd_auth_example", true);
}

Nun wird der Benutzer wieder zur Canvas-URL weitergeleitet.
Da diesmal gilt
authToken != null
kann dieser verarbeitet und der Benutzer authentifiziert werden.

Facebook schickt den Authentifizierungs-Token verschlüsselt im signed_request-Parameter mit.
Wie dieser verarbeitet wird, habe ich mir hier abgekupfert: Parsing signed_request in Java
Die Methode checkSignature(rawpayload, sig) überprüft dann, ob der Anwendungs-Geheimcode stimmt und stellt damit sicher, dass die Anwendung wirklich von Facebook aufgerufen wurde.

String sigreq = request.getParameter("signed_request");

int idx = sigreq.indexOf(".");
byte[] sig = new Base64(true).decode(sigreq.substring(0, idx).getBytes());
String rawpayload = sigreq.substring(idx+1);
String payload = new String(new Base64(true).decode(rawpayload));

/* parse the JSON payload and do the signature check */
FacebookRequest ret = new Gson().fromJson(payload, FacebookRequest.class);
/* check if it is HMAC-SHA256 */
if (!ret.getAlgorithm().equals("HMAC-SHA256")) {
    System.out.println("Fehler Algorthimus");
}
/* then check the signature */
checkSignature(rawpayload, sig);

if (ret.getOauth_token() == null){
    return new ActionForward(authUrl, true);
}

Ab diesem Punkt ist die Authentifizierung abgeschlossen und man kann mit der RestFB-API auf die Graph-API zugreifen:

FacebookClient facebookClient = new DefaultFacebookClient(ret.getOauth_token());
String query = "SELECT name FROM user WHERE uid=220439";
List users = facebookClient.executeQuery(query, User.class);
for (int i=0;i<users.size();i++){
    User u = users.get(i);
    System.out.println(u.getName());
}

Nun noch mal eine kurze Zusammenfassung:

  • Anwendung bei Facebook erstellen und die Canvas URL und die Canvasseite festlegen
  • Beim ersten Aufruf Weiterleitung auf die authURL und Parameter festlegen
  • Durchführung der Authentifizierung mit Entschlüsselung des signed_request Parameters und Bestätigung des Anwendungs-Geheimcodes.

Hilfreich bei der Entwicklung ist noch, wenn man sich etwas in die Dokumentationen von Facebook einliest

Und hier der komplette Quellcode

Ansonsten, bei Fragen einfach melden :-)

Erste Facebook Anwendung Online


Seit einigen Tagen läuft meine erste Anwendung auf Facebook. “Geburtstage” zeigt in einer kompakten Übersicht die Geburtstage aus der Freundesliste.
In einigen Tagen veröffentliche ich dann auch Teile des Quellcodes, dazu einige Erläuterungen, wie man eine Anwendung einbindet und wie man Benutzer authentifiziert.

Die Realität im Alltag des Entwicklers

Im JAXcenter werden die “10 schmutzige Geheimnisse aus dem Entwickler-Alltag” enthüllt ;-)
Die Artikel stützt sich auf den Orginalbeitrag von Jason Hiner “10 dirty little secrets you should know about working in IT“.
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 so nicht übereinstimmen. Ist wohl auch die Frage, welchen Arbeitgeber man hat.
Der deutsche Artikel hat nicht ganz so viel Resonanz bekommen wie das englische Orginal. Dort sind eine Menge von Kommentaren eingegangen.

Frei übersetzt steht in den Kommentaren sowas wie

Bei guter Arbeit entwickelst du dich aus dem Job, weil du nicht mehr gebraucht wirst, also programmiere andere aus dem Job

Wenn du mehr als 2% mehr Gehalt haben willst, wechsle die Position und/oder den Arbeitgeber

Weiterbildung geht von deiner Zeit ab. Die Firma wird dir nichts zahlen, weil es nur in deinem Kopf bleibt

Die besten Entwickler sind auch immer die seltsamsten

oder

Ich bin nicht hier um den Neuen einzulernen