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.