Parsley: ManagedEvents und MessageHandler

Es scheint so als wenn Parsley ein Problem mit meinen Event Klassen hat. Wenn ich die events einer Klasse von Parsley verwalten lasse und in einer anderen Klasse entsprechende Handler-Methoden deklariere, so kommen die Events nur an wenn ich den Typ im Handler als com.flash.Event setze. Nutze ich an dieser Stelle meine eigene Klasse als Typ, so wie es wohl richtig wäre und wie es auch in der Parsley doku steht, passiert nichts. Gar nichts. Meine Klassen sind dabei natürlich spezialisierte Events, die von den flash Event Klassen ableiten.

Flex SDK 4.1 (FP 10.1 + AIR 2)

Bereits seit April 2010 gibt es das Flex SDK in der Version 4.1. Darin enthalten sind der FlashPlayer 10.1 und AIR 2. Die Pakete stehen bei Adobe zum Download zur Verfügung: Flex 4 Downloads .

Mit dem kompletten Paket (“Adobe Flex SDK”) kann man in FlashBuilder (aka FlexBuilder) die neuen Funktionen des FlashPlayers und AIR nutzen. Und man muss auch nicht mehr unschön Dateien überschreiben oder nachträglich hinzufügen. Einfach einen neuen SDK Eintrag bei FlashBuilder machen.


Update:

Seit dem 01.07.2010 gibt es auch ein Update-Paket für FlashBuilder und auch ein finales SDK-Update. Den FlashBuilder 4.0.1 gibt es hier und das Flex SDK 4.1 Update hier.

Cairngorm 3 & Maven

Was für ein Krampf – dieses Maven!

Eigentlich wollte ich ja das open-source Framework Cairngorm, von Adobe, nutzen. Cairngorm soll, so wie eigentlich fast jedes Framwork, ein Fundament für ein hoch qualitatives Flex-App bilden. Nach einigem Lesen, macht es echt einen sehr viel versprechenden Eindruck auf mich.

Nun habe ich schon die alte Version zwei aus dem Jahr 1997 gesehen (also die Webseiten dazu, nicht den Code) und irgendwie habe ich erwartet dass es auch bei der Version drei aus diesem Jahr so sein wird, dass man einfach die Bibliotheksdatei (.swc) runterladen kann. Denkste! Nun wird alles in einem Maven Repository “bereit gestellt”. Maven ist ein Projektmanagement-Tool. An sich eine tolle Sache – nur entweder verstehe ich das ganze nicht richtig und es funktioniert einfach nicht.

Maven ist dazu da um sicher zu stellen, dass ein Projekt alle nötigen Abhängigkeiten zur Verfügung hat. Man definiert Konfigurationsdateien und Maven besorgt sich dann benötigte Bibliotheken und der gleichen von Repositories. Weiterhin kann sich Maven darum kümmern Unittests durchzuführen, Code zu komplilieren und zu packen.

Mein Ziel war es also an die Bibliotheksdatei der letzten Cairngorm Version zu kommen. Dazu muss man als erstes einen check-out vom Adobe SVN-Repository machen: http://opensource.adobe.com/svn/opensource/cairngorm3/ . Dann hat man eine Menge Zeug auf seiner Platte, den man nicht direkt nutzen kann. Jetzt kommt Maven ins Spiel (das an dieser Stelle natürlich bereits lokal installiert sein muss). Wenn ich das mit Maven richtig verstanden haben, muss man nur mvn install aufrufen. Das klappt beim ersten Versuch nicht, weil Adobe nicht alle nötigen Bibliotheken richtig verlinkt hat (warum noch mal nutzen wir Maven!?). Man muss diese zwei fehlenden Teile manuell in sein lokales Maven-Repository installieren (das witzige, die Dateien sind nach dem SVN-check-out lokal vorhanden!):

Nummer 1:
mvn install:install-file -DgroupId=com.adobe.lcds -DartifactId=fds_rb -Dversion=2.6.1 -Dclassifier=en_US -Dpackaging=rb.swc -Dfile="{Cairngorm3-SVN-checkout}\tags\cairngorm3-3.0.11\libraries\Integration\libs\fds_rb-2.6.1.rb.swc"

Ausgabe:

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] org.apache.maven.plugins: checking for updates from local
[INFO] org.apache.maven.plugins: checking for updates from central
[INFO] org.codehaus.mojo: checking for updates from local
[INFO] org.codehaus.mojo: checking for updates from central
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [install:install-file {execution: default-cli}]
[INFO] Installing {Cairngorm3-SVN-checkout}\tags\cairngorm3-3.0.1\libraries
\Integration\libs\fds_rb-2.6.1.rb.swc to {user}\.m2\repositor\com\adobe\lcds
\fds_rb\2.6.1\fds_rb-2.6.1-en_US.rb.swc
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Tue Jun 01 15:55:38 CEST 2010
[INFO] Final Memory: 5M/59M
[INFO] ------------------------------------------------------------------------

Nummer 2:
mvn install:install-file -DgroupId=com.adobe.lcds -DartifactId=fds -Dversion=2.6.1 -Dpackaging=swc -Dfile="{Cairngorm3-SVN-checkout}\tags\cairngorm3-3.0.11\libraries\Integration\libs\fds-2.6.1.swc"

Ausgabe:

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [install:install-file {execution: default-cli}]
[INFO] Installing {Cairngorm3-SVN-checkout}\tags\cairngorm3-3.0.11
\libraries\Integration\libs\fds-2.6.1.swc to {user}\.m2\repository\com\a
dobe\lcds\fds\2.6.1\fds-2.6.1.swc
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Tue Jun 01 15:56:18 CEST 2010
[INFO] Final Memory: 6M/74M
[INFO] ------------------------------------------------------------------------

So und nun kann man theoretisch mvn install ausführen. Das Ergebnis sollte sein, dass alle Bibliotheken kompiliert und gepackt werden. Nur leider werden ausschließlich die Cairngorm-Zusatz-Bibliotheken gebaut, aber nicht Cairngorm selbst. Ich habe das in so gut wie jedem Ordner ausprobiert: “\tags\cairngorm3-3.0.11″, “\build-parent\”, “\trunk” und noch viele andere. Es ist immer das Selbe, ich bekomme nicht meine erhoffte cairngorm-3.0.11.swc .

Und nun?!


Update

Enterprise Development with Flex: Best Practices for RIA Developers

Sämtliche Aufregung war umsonst! Das was bei Cairngorm 2 in einer Bibliothek organisiert war, ist bei Cairngorm 3 in mehrere Teil-Bibliotheken organisiert. Wäre schon nett gewesen, wenn das irgendwo bei Adobe stehen würde!

Also das oben genannte Vorgehen führt zum Erfolg! :)

FlexUnit – Terminologie

Anders als bei alten Versionen von FlexUnit, oder bei dem Vorbild JUnit, müssen Testklassen nicht von FelxUnits Klassen explizit erweitert werden. Alles wird über Meta-Tag Angaben gergelt.

Testmethoden

Testmethoden sind die kleinste Instanz des Testframeworks. In diesen Methoden werde die Test ausgeführt und Ergebnisse ausgewertet. Dabei müssen die Methodennamen keinen Konventionen entsprechen. Man kann sie also nennen wie man will. Wobei ich glaube dass es mehr als angebracht ist gewisse Konventionen beizubehalten, aus dem einfachen Grund nicht den Überblick zu verlieren.

TestCase

Ein TestCase ist eine Sammlung von Testmethoden – also eine Klasse die entsprechende Methoden beinhaltet. Dabei können wieder über Metatag-Angaben Konfigurationen vorgenommen werden. Die von JUnit bekannten Methoden tearDown() und setUp() werden z.B. mit den Tags [Before] oder [After] ersetzt. Mit denen und einigen weiteren Tags kann man bestimmen was vor und nach einem Test gemacht werden muss und auch in welcher Reihenfolge Testmethoden ausgeführt werden.

TestSuite

Eine TestSuite ist eine einfache Klasse die als Einstiegspunkt für die Test dient. Sie kann mehrere TestCases und andere TestSuites instantiieren.

Ontologies

> reading: Chapter 4 “Incorporating Semantics”, Semantic Web Programming, J. Hebeler et al.

Open World and Closed World Assumption

Open world assumption (OWA) means that information that is not present in a certain domain is not considered to be false. Just because it’s not there, does not mean it’s wrong.
Closed world assumption (CWA) is obviously the opposite. When there is a piece of information missing, it means it is wrong.

For example: “John works with Paul”.
With CWA we couldn’t say whether John and Paul know each other. We would have to assume that they don’t. There are just working together. We would have to answer “no” to the question, whether they know each other.
With OWA the information about whether they know each other or not is not stated. So we just can not say anything about it, whether it’s true that they’re working together or not. But we couldn’t say it is false either.

No unique Names Assumption

In the WWW we can not assume that information is always identified by an unique name. When two web sites referencing to a single information, we can not assume both are using the same URIs to reference to this information. Unless the two are explicitly stating that the information they are talking about are the same (by adding additional attributes) ……. wait something is confusing! need to think about that again

Ontology Elements

  • Header
    • represents the ontology itself
    • contains comments, labels, version and other imported ontologies
  • Class
    • special kind of resource that represents a set of resources
  • Individual
    • member of a class
    • can be member directly or indirectly
  • Property
    • predicate to describe individuals
    • object properties link individuals to other individuals
    • data properties link individuals to literal values
  • Annotation
    • basically like a Property
    • has no associated semantics
    • commonly used for label or comment
  • Datatype
    • well data type

Modelling RDF

> reading: Chapter 3 “Modelling Information”, Semantic Web Programming, J. Hebeler et al.

Very briefly: there are three ways of writing information in RDF-style. Most likely there are much more ways of writing, or better representing, infortmation with RDF. But the following three are the most popular ones. The first one is RDF/XML, which is a XML presentation of RDF. Second is the Terse RDF Triple Language (aka Turtle … why Turtle!?). And the third on is N-Tripel.

The XML notation is obvious. It’s specialised XML for RDF. In the entry to the RDF Primer are some little examples. A snippet from a full RDF/XML could look like this:

<rdf:RDF
     xmlns:rdf="http://www.w3.org/rdf"
     xmlns:ext="http://example.org/ext"
     xmlns:foaf="http://xmlns.com/foaf/"
     xmlns:people="http://example.org/people">
  <rdf:Description rdf:about="http://.../people#Paul">
     <ext:worksWith rdf:resource="http://.../people#John/>
  </rdf:Description>
<!-- More -->
</rdf:RDF>

Well, it’s XML. Not pretty, but it’s interpretable for software.

The second one, Turtle, is supposed to be more human-friendly:

@prefix rdf:    <http://www.w3.org/rdf>
@prefix ext:    <http://example.org/ext>
@prefix foaf:   <http://xmlns.com/foaf>
@prefix people: <http://example.org/people> 

people:Paul ext:worksWith people:John .
people:Matt foaf:knows people:John .
people:Andrew
     foaf:knows people:Matt ;
     foaf:surname "Lopez" .

But I must say it is not that easier to read. Maybe a bit, because it has less brackets, obviously. The biggest benefit from this one is I think, that it has much less overhead (well the bracket-stuff). So file sizes would be much smaller, especially because with RDF you  can produce incredibly huge files.

And thirdly the N-Triples, which is a “simplified version of Turtle”:

<urn:http://example.com/peoples:Paul> <urn:http://xmlns.com/foaf:worksWith> <urn:http://example.com/peoples:John>

So N-Triples are expressed in one line. Each entry is filled up with one line. There is no such thing as @prefix as in Turtle, which is stupid I think. Imagine: There is the full URL to a certain namespace for each subject, predicate and object. Of course this can be considered a “simplified version of Turtle”, but I don’t see this as practicable. If there would be a possibility to define QNames for the namespaces, this would be great. It would be so compact.

FlexUnit

Um auch mit Flex TDD möglichst komfortabel nutzen zu können, gibt es FlexUnit. FlexUnit ist in Anlehnung an JUnit entwickelt worden und bietet angeblich gleiche Funktionalitäten. Ich werde es demnächst ausprobieren. Die Beschreibung im FlexUnit-Wiki sieht schon mal viel versprechend aus.

Flex 4

> Unterschiede zwischen Flex 3 und Flex 4

Das Flex Frameworkwurde  um einiges verbessert. Nun kann eine  noch stärkere Modularisierung gewährleisten werden. Einiges ist sauberer und eindeutiger. In vielerlei Hinsicht ist Flex mit der Version vier flexibler geworden.

Eine grundlegende Änderung zu Flex 4, ist die Bindung an den neusten Flash Player 10. Flex 4 Anwendungen müssen gegen den Flash Player 10 kompiliert werden.

Türme von Hanoi

Man braucht mindestens 2N-1 Bewegungen, um das Problem zu lösen.

Bei 64 Scheiben braucht man also 264-1 Bewegungen. Bei 10 Sekunden pro Bewegung bräuchte man 5,8 Billionen Jahre.

Uff! :)

Turingmaschinen

Merke

Mit keinem heutigen Rechner und keiner heutigen Programmiersprachen können Funktionen berechnet werden, die nicht auch mit einer Turingmaschine berechnet werden können.

Die Turingmaschine ist ein allgemeines Modell für die Berechenbarkeit.

Entscheidbarkeit

Ein Problem P ist entscheidbar, wenn es einen Algorithmus gibt, der für P mit Ja oder Nein beantwortet werden kann.

Unentdcheidbare Probleme

Z.B. Kommt eine bestimmte Ziffernfolge im Nachkommsteil von Pi vor?