2009-06-30

Google's OpenSocial

OpenSocial ist eine Menge von Programmierschnittstellen für Anwendungen in webbasierten sozialen Netzwerken. OpenSocial wird von Google entwickelt und wurde am 1. November 2007 veröffentlicht. (Quelle: Wikipedia-OpenSocial)
Stichworte zum Bauen von Social Applications
  • Gadgets bestehen hauptsächlich aus HTML und JavaScript.
  • API Namensräume (Javascript) sind opensocial.* und gadgets.*
  • Als Views gibt es in der Klasse gadgets.views.ViewType: Profile View, Canvas View und Home View.
  • Datenhandling/Persistenz findet über opensocial.DataRequest statt. Hierzu zählt auch der Zugriff auf Personen, Beziehungen, Aktivitäten und Nachrichten.
  • Der soziale Graph ist über opensocial.Person erreichbar. Rollen werden in VIEWER und OWNER unterschieden.
  • Aktivitäten: opensocial.Activity. Activity Templates können hierbei häufige Updates kumulieren.
  • Nachrichtenversand: opensocial.Message
  • Internationalisierung über Message Bundles in der XML-Spezifikation des Gadgets möglich.
  • Backend Requests, die über die Möglichkeiten von JavaScript und HTML hinausgehen sollen, können mit gadgets.io.makeRequest() abgesetzt werden. Somit ist der Transfer von HTML-, XML-, JSON- und ATOM-Files möglich. -> JSON, XML und AtomPub können auch über die RESTful API genutzt werden, die neben der JavaScript API existiert.
Quelle: OpenSocial Artikel von Matthias Häsel und Karsten Rieke - http://www.springerlink.com/content/d7624423x371w5v6/

Weitere Infos
Host OpenSocial Apps basierend auf Java oder PHP: Apache Shindig
Let's get this Shindig started


XING und OpenSocial:
XING and OpenSocial


Reblog this post [with Zemanta]

2009-06-16

7 Regeln der Usability

FlashCamp Berlin
aus Vortrag von Ron Hofer: User Experience & Fireflow

Für positive User Experience (UX) sind unter anderem folgende 7 Regeln der Usability notwendig:
  1. Aufgabenangemessenheit (Musikwahl bei einer elektrischen Zahnbürste sprengt den Rahmen und ist daher zu vermeiden)
  2. Selbstbeschreibungsfähigkeit (Dieser Punkt beschreibt sich von selbst)
  3. Erwartungskonformität (Eine Fahrstuhltür öffnet sich wieder, wenn ich mich dazwischen stelle.)
  4. Fehlertoleranz (Ein fehlertolerantes System schlägt mir automatisch on-the-fly z.B. einen freien Benutzername vor, wenn der gewählte bereits vergeben ist. Gutes Bsp. Twitter-Anmeldung)
  5. Steuerbarkeit ("Der Nutzer gibt den Takt an!" Mentales Modell des Nutzers darf nicht gebrochen werden.)
  6. Lernförderlichkeit (Neue Nutzer sind Anfänger des Systems und werden bei der Benutzung immer mehr zu Experten.)
  7. Individualisierbarkeit
UX bedeutet: Was brauche ich? + Was WILL ich?
Die Erwartungen, die an ein Produkt gestellt werden, steigen über die Zeit vom ersten Kontakt (z.B. Werbung) über den Kauf und der Nutzungszeit. Die UX muss ÜBER der Erwartung liegen, um mit dem Produkt zufrieden zu sein. Das heißt im Umkehrschluss, dass das System so eingerichtet sein muss, dass die Zufriedenheit mit der Benutzungsdauer steigen kann!

  • Generelles Problem bei Systemen: Je flexibler ein System ist, um so schlechter ist die Usability.
  • 20% der Funktionen können 80% der Aufgaben erledigen, die restlichen 80% kann man z.B. in Menüs "verstecken".
Akzeptanz/Nutzen von neuen Funktionen lassen sich gut wie folgt testen:
  • Die Feature werden in Form von "Produkten" abgebildet. Jedes Feature entspricht einem Produkt. Der virtuelle Preis ergibt sich aus dem Umsetzungsaufwand der Funktion.
  • Testpersonen bekommen eine begrenzte Menge an virtuellem Geld und können damit einige der "Produkte" kaufen.
  • Die meistgekauften Produkte sind die Feature, die man für die ausgewählte Zielgruppe umsetzen sollte.

Tom Allison: Human side of Human-Computer Interaction

Flash Camp Berlin 2009
Vortrag von Tom Allison: Human side of Human-Computer Interaction
Emphasizing the Human Side in Human Computer Interaction (HCI)
  • Sensemaking (->"Sinnerzeugung" Anm.: eher "Sinnergebung" ?) in a complex ...
  • "Make mistakes faster!"
  • HTA: High Tech Anthropologist (TM) + Target Persona Experience + Co-Location + Paired Work (Anm.: Pair Programming as Knowledge Transfer. co-location might work in case of pair programming.)
  • Development itterations on a weekly base. (but: Analysis in this week is deployed in the next week.)
  • Building project focus via Target Personas (all CEOs, HTAs and Project Manager in)  -> is a "red ink" process with following three steps:
    1. Story Cards: each employee writes story cards, above mentioned persons are decide what, when, who does it.
    2. SoftControl
    3. Green Dot: HTA can set a project as done with a green dot. Red dot means: project stucks (e.g. missing server)
    Slides can be found online.

    Thomas Reppa: PureMVC - Introduction + Best Practise

    PureMVCImage via Wikipedia
    Flash Camp Berlin 2009
    Vortrag von Thomas Reppa: PureMVC - Introduction + Best Practise


    PureMVC ist ein leichtgewichtiges Framework um MVC Anwendungen in sehr modularer Weise zu erstellen.

    • PureMVC ist eher ein Regelwerk
    • PureMVC ist sprachenunabhängig (impl. in vielen Sprachen vorhanden)
    • Man programmiert Inseln, die man anschließend zusammenfügt.
    • PureMVC ist Kommunikationsschnittstelle zwischen Views und Models.
    • „Code in the Speed of Thought.“

    Meine Gedanken:
    PureMVC ist ein vielversprechender Ansatz. Allerdings konnte mich der Vortrag leider noch nicht überzeugen, ob in großen (also richtig großen) Projekten das Problem der verwirrenden Verbindungen zwischen Views und Models hiermit zufriedenstellend gelöst werden kann, da nur kleine Beispiele in dem Rahmen gezeigt werden konnten.

    Reblog this post [with Zemanta]

    Jede Bedingung eröffnet Möglichkeiten

    Heute habe ich einen lustigen Ausschnitt in: "Wenn das Meer zu Besuch kommt", von Alexander Frater gelesen. In dem Artikel geht es um den Monsun:
    "In der Warden Road gibt es eine Senke, in der während der Regenzeit das Wasser bis zu einem Meter tief steht. Die Kinder in der Gegend bauen in der Mitte einen Sockel, auf den sich eines von ihnen stellen muss. Autofahrer sehen dann ein Kind, dem das Wasser nur bis zu den Knöcheln reicht, und fahren ungebremst durch die Senke. Wenn dann der Motor abstirbt, tauchen Freunde des Kindes auf und verlangen ein Vermögen dafür, dass sie das Auto aus dem Wasser schieben."
    --mare No.74 Juni/Juli 2009

    Besonders lustig finde ich nicht nur die Idee, mit der die Kinder die Autofahrer übers Ohr hauen, sondern -- zumindest erscheint die Beschreibung in dem Artikel so -- die Tatsache, dass es als das Normalste der Welt erscheint, wenn Kinder als "Spitzbuben" den Erwachsenen einen Streich spielen (der in meinen Augen nicht ohne ist), und anscheinend mit einer Natürlichkeit toleriert wird, dass man selbst dort gerne als Kind einer dieser "Spitzbuben" wäre.

    2009-05-27

    First Steps With Java on Google App Engine

    Image representing Google App Engine as depict...Image via CrunchBase
    These are my first steps, creating an Java based App with Google App Engine.

    Pre-stuff to get it run first:
    1. I sign up for an App Engine account.

    2. Downloaded the App Engine SDK and installed the Eclipse plugin.

    3. Create a new project as described in the Quick Start Reference.

    4. The Quick reference says for deploying (after you have created an application): "Once you have an application ID, just right-click on your project, and select Google > App Engine Settings... from the context menu. Enter your application ID into the Application ID text box. Click OK."

      • I found it quite hard to find the ID until I realized that it is the name itself found in the "Application" column on my apps listing at http://appengine.google.com/. (This is more clear if you just created your app.) So its "peters-cafe" in my case.

    5. Then just hit the turbine button (Deploy App Engine Project) within eclipse, and here we go...
      ...I thought, but got an error: "Unable to upload app: Error posting to URL: http://appengine.google.com/api/appversion/create?app_id=peters-cafe&version=1&
      400 Bad Request
      Invalid runtime or the current user is not authorized to use it."

      --Hmm

    6. I re-checked the developers settings on the app dashboard, but I still was an active developer :-(

    7. Tried wrong credential infos -> PSW doesn't match. So that must be right.

    8. Found it here in Java FAQ: I'm getting "Invalid runtime specified." when I try to upload.
      Acctually I do not have permission to upload a Java app to my account. That's what they say: "To request permission to upload an app which uses the Java runtime, sign up at the following URL: http://appengine.google.com/promo/java_runtime . For now, access will be limited to the first 10,000 to sign up."
      -> sTo request permission to upload an app which uses the Java runtime, sign up at the following URL: http://appengine.google.com/promo/java_runtime . For now, access will be limited to the first 10,000 to sign up.
      -> so nothing to do here, but wait...
    In the meantime: Develop Your Application
    It is possible, to run the app local, of course, so I will start to develop and test my app locally.
    My first steps, developing a Java application with Google App Engine will be reported soon.



    Edit Post:

    Finally
    I got my permission to upload, so here we go: http://peters-cafe.appspot.com/
    (Just the default app, currently)


    Reblog this post [with Zemanta]

    2009-05-25

    10 Tatsachen über Schillers Wilhelm Tell (historisch)

    Ich verlege mal einen Blogeintrag von September 2008 aus einem alten Blog in diesen hier:
    1. Erst 1474 (knapp 100 Jahre nach militärischem Sieg) wird die Unabhängigkeit der Schweiz von den Habsburgern anerkannt.

    2. 25 Jahre später auch vom Reich.

    3. Nach dem Dreißigjährigen Krieg scheidet die Schweiz aus dem Reich aus.

    4. Zur Zeit der Französischen Revolution besaß der Schweizer Aufstand im Mittelalter eine unmittelbare Aktualität (Zeit der Entstehung).

    5. Französische Truppen besetzten zur Zeit der Entstehung die Schweiz und rufen die von Frankreich abhängige Helvetische Republik aus. (Eine selbständige Republik nach der Verfassung einer französischen "Schwesternrepublik")

    6. Diese Republik zerfiel durch Parteigehader.

    7. Bürgerkrieg 1802. Napoleon greift wieder ein und vermittelt eine neue Verfassung, die dieses Mal die Konservativen unterstützt. Die alten Orte werden wieder selbständig.

    8. Auch in den Kriegen, die auf die Französische Revolution folgten, blieb die Schweiz neutral.

    9. Der Wiener Kongress erkennt letztendlich die Neutralität der Schweiz im Interesse Europas an.

    10. Während der Zeit des Humanismus bildet sich ein erstes Nationalgefühl in der erweiterten Eidgenossenschaft heraus und die Verarbeitung des Tell-Stoffes wird sehr populär.


    Reblog this post [with Zemanta]

    2009-05-13

    Usability Professionals

    "Zu verstehen, worauf es den Anderen ankommt, darauf kommt es an."

    Ich habe gestern Abend einen interressanten Artikel in der i-com gelesen. Professionelles Bleibenlassen von Karsten Wendland und Matthias Fink (i-com 1/2009, S81f.)

    Es geht um den Einsatz von Usability Professionals und deren Herausforderung spezifizierte Anforderungen zu verhindern, wenn dies Sinn ergibt.

    Zum Vorgehen schlagen die Autoren vor, dass zunächst ein Handlungsrahmen geschaffen werden muss, "in dem jeder seine eigenen fachlichen Kriterien einbringt und gleichzeitig mit den fachlichen Kriterien der Anderen vertraut ist". Auf dieser Basis kann jeder Beteiligte zum Bleibenlassen aufrufen.
    Usability Professionals sollen hier eine "eine ungefilterte, aber sachkompetente Draufsicht auf den Gegenstand in den Spielarten seines Anwendungskontexts" bieten. Sollte sich hierbei herausstellen, dass es einiger Dinge nicht bedarf - es diese Dinge besser gar nicht erst geben sollte - so sollten diese ersatzlos gestrichen werden.

    Im Wege scheinen hier die Vorgaben des Auftraggebers zu stehen, aber werden diese als etwas "Gemachtes" und nicht als etwas "Gegebenes" betrachtet, so zeigt sich, dass auf diese Vorgaben häufig Einfluss genommen werden kann und sollte.

    Wichtig ist nach Auffassung der Autoren "die gemeinsame, disziplinübergreifende Auseinandersetzung an den Schnittstellen zueinander und zum Auftraggeber". Nur so werden die fachlichen Kriterien der Anderen Seiten sichtbar und damit diskutierbar. "Zu verstehen, worauf es den Anderen ankommt, darauf kommt es an."

    Trivias: Usability-Community, Usability Professional zeigen eine interdisziplinäre Spannweite der Berufsgruppen "Informatik, Grafikdesign, Psychologie und, in Spuren, die Gruppe der Lebenswissenschaften".

    2009-05-12

    A post about Flex

    Entwicklung mit dem Flex Builder 3 


    Lessons learned

    2009-05-10

    Was mir neu war über JavaScript (bzw. was ich wieder vergessen hatte)

    Beim Lesen des lesenswerten Buches "Das Beste an JavaScript" von O'Reilly und Yahoo!Press habe ich folgende Notizen zusammengestellt. Sie bieten einen guten Überblick über die Aspekte von JavaScript, die über Syntax-Fragen hinaus gehen
    • Vererbung über Prototypen (keine Klassen)
    • Prototyp-Verknüpfungen ermöglichen Vererbung. Dies kann Objekt-Initialisierungen und Speicherverbrauch reduzieren.
    • Objekte werden per Referenz übergeben und nicht als Kopie
    • Delegation über Prototyp-Ketten Object.prototype
    • Um zu verhindern, dass man (zB bei for..in) auch Funktionen in die Hand bekommt, sollte mit hasOwnProperty und typeof gefilter werden.
    • Die Funktions-Aufrufmuster bestimmen, wie der Parameter this initialisiert wird. Es gibt: Methoden-Aufrufmuster, Funktions-Aufrufmuster, Konstruktor-Aufrufmuster und Apply-Aufrufmuster.
    • Anzahl der Aufrufparameter einer Funktion wird nicht zur Laufzeit geprüft. Zu viele Parameter werden abgeschnitten, zu wenige, werden mit undefined gefüllt.
    • Muster:
      • Methode: Funktion als Eigenschaft eines Objekts. this wird an das Objekt gebunden.
      • Funktion: Funktion ist keine Eigenschaft eines Objekts. this wird an das globale Objekt gebunden (Fehler im Design der Sprache!) -> Methode kann innere Funktion nicht nutzen. Workaround: Methode definiert Variable that und weist ihr den Wert von this zu.
      • Konstruktor: (in Variablen mit Großbuchstaben) Funktionsaufruf mit new erzeugt ein neues Objekt und bindet this an das neue Objekt. (Konstruktoren NIE ohne new aufrufen!)
      • Apply: Wert von this wählbar, Array von Argumenten.
    • Eine funktion gibt immer einen Wert zurück. Ohne return-Wert wird undefined zurückgegeben.
    • Einer throw-Anweisung wird ein exception-Objekt übergeben, welches mindestens eine name- und eine message-Eigenschaft besitzt.
    • Hinzufügen einer Methode zu Object.prototype, macht diese für alle Objekte verfügbar (auch wenn diese schon erzeugt wurden).
    • Tail Recursion wird von JavaScript momentan nicht unterstützt.
    • Variablen besitzten keinen Block- sondern einen Funktions-Geltungsbereich. -> Variablen zu Beginn der Funktion deklarieren und nicht erst vor der Verwendung (am besten alle nach EINEM var). -> Zugriff auf Variablen außerhalb der Funktion möglich (außer this und arguments).
    • Kombination von Closures und Funktionen heißen Module. (Javascript Best Practices Folie 30). Dies ist der Begriff für die Technik, um so etwas wie Namespaces für Variablen abbilden zu können. Bei Closures wird einem Objekt keine Funktion zugewiesen, sondern das Ergebnis des Aufrufs dieser Funktion.
    • Callbacks damit der Client nicht steht, bis das Ergebnis kommt.
    • Kaskaden verwenden, indem eine Methode this zurückliefert.
    • Curry
    • Memoization: Bereits in Methoden berechnete Werte "merken". Diese Werte können in ein in einem Closure versteckten Array gespeichert werden.
    Darüber hinaus gibt es:
    • Array-Methoden
    • Function-Methoden
    • Number-Methoden
    • Object-Methoden
    • RegEx-Methoden
    • String-Methoden
    Da Funktionen Werte sind, zum Verständnis immer besser: var foo = function foo() {};


    So, das reicht erst mal. Wenn ich das nächste Mal an JavaScript sitze, werde ich bestimmt wieder etwas hinzufügen können.