Mittwoch, 31. Dezember 2008

Kurs Englisch ohne Mühe

Die letzten Wochen und Monate habe ich in Zusammenarbeit mit dem Verlag ASSIMIL GmbH und dem Arbeitskreis für Information - AKI RP/Eifel ein Sprachmodul progammiert, über das Sie online Sprachen lernen könnnen.


Technisch handelt es sich um eine RIA (Rich Internet Application) auf Basis von PHP, MySQL, DHTML, AJAX sowie den AJAX-Frameworks Dojo Toolkit und Prototype. Daneben kommen noch Flash und Java zur Unterstützung von Multimediaeffekten zum Einsatz.


Das Modul stellt einmal Texte in Englisch und Deutsch dar, spielt die englischen Sätze als Tondateien ab, beinhaltet ein kleines Tonstudio, um eigene Sprachübungen aufzunehmen und bietet verschiedene Übungstechniken zum Vertiefen der erlernten Sprachkenntnisse.


Als Verwaltungsplattform verwenden wir ILIAS, eine leistungsstarke, web-basierte Lernplattform für E-Learning in einem integrierten System (Persönlicher Schreibtisch, Kursmanagement, Gruppensystem, Magazin mit Rollen-basiertem Zugriff, ...).

Mein Sprachmodul wird nach einer Anmeldung als HTML-Lernmodul in einem eigenen Browserfenster zur Verfügung gestellt.


Der Kurs Englisch ohne Mühe (als auch die geplanten Kurse für andere Sprachen) präsentiert einem Lernenden die Sprache so, wie man ihr im täglichen Leben begegnet (die so genannt Assimilmethode). Durch den lebendigen Kontext werden sich Lernende sehr schnell wohlfühlen. Die Assimilmethode bietet eine natürliche Progession: Lassen Sie sich leiten, und Sie werden sehr bequem Ihr Ziel erreichen. Dieser konkrete erste Kurs richtet sich sowohl an Personen, für die das Englische noch eine völlig unbekannte Sprache ist, als auch an Personen, die bereits über ein wenig Englischkenntnisse verfügen und diese gerne auffrischen möchten. Es vermittelt in 110 Lektionen modernes und lebensnahes Englisch. Insgesamt umfasst der Wortschatz, den Sie in diesem Kurs erlernen, ca. 3000 Vokabeln.


Für einen kurzen Zeitraum können Sie das Modul kostenlos testen

Montag, 29. Dezember 2008

Neue Umstiegsanleitung für JavaFX Script

Wie schon versprochen hab ich die Umstiegsanleitung von altem JavaFX-Code auf die Finalversion überarbeitet. Hier ist die angepasste Umstiegsanleitung.

Wer bereits mit JavaFX Script auf Basis erster Preversionen seit etwa Mitte 2007 programmiert hat, wird in der nun Ende 2008 erschienenen Finalversion 1.0 mit einigen Änderungen bzw. Umstrukturierungen konfrontiert.


Etwas bedauerlich ist, dass die Umstrukturierungen über die zweite Hälfte des Jahres 2008 in mehreren Schritten vollzogen wurde und immer wieder Syntaxstrukturen verändert wurden. Insbesondere wurden auch viele Token und Syntaxstrukturen, die in ersten Versionen verwendet wurden, in der Finalversion aufgegeben. Insgesamt ist m.E. die Finalversion von JavaFX Script aber viel stringenter und logischer als die Preversionen geworden und orientiert sich doch verstärkter an dem streng objektorientierten Konzept von Java selbst. Allerdings sind auch durchaus syntaktische Anleihen aus anderen Sprachen wie C/C++/C# oder PHP und JavaScript erkennbar.

 


Hier gibt es die Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0 als PDF zum Download

 

Operationen

In den Preversionen von JavaFX Script hat Sun mit Prozeduren experimentiert. Schon Funktionen sind in der streng objektorientierten Welt von Java gewagt, aber Prozeduren, die sogar einen Rückgabewert liefern konnten, waren wohl doch des Guten zu viel. In der Finalversion entfallen diese Prozeduren, die bisher mit dem Schlüsselwort operation eingeleitet wurden.

Ein Umstieg von altem Code ist jedoch denkbar einfach. Stattdessen werden einfach grundsätzlich Funktionen verwendet, die mit dem Schlüsselwort function eingeleitet werden. Man muss dabei also nur konsequent den Token operation durch den Token function ersetzen. Das ist alles.


Ein Beispiel für die alte Syntax:


class MeineKlasse {

function times2(x) { return x * 2; }

operation print(s) { System.out.println(s); }

}


Das gleiche Beispiel in der neuen Syntax:


class MeineKlasse {

function times2(x) { return x * 2; }

function print(s) { System.out.println(s); }

}


Eine Funktion kann auch explizit mit Void gekennzeichnet werden um zu kennzeichnen, dass eine Funktion keinen Rückgabewert liefert.


Beispiel:


function ausgabe() : Void {

println("Keine Rückgabe!");

}


 

Attributinitialisierung

Die Initialisierung von Attributen erfolgte bisher außerhalb einer Klassendefinition. Diese Technik wurde nun Java angeglichen und die Attribute werden bei der Deklarierung in der Klasse selbst initialisiert.


Ein Beispiel für die alte Syntax:

class MeineKlasse {

attribute bar: Boolean; }

 

attribute Foo.bar = true;


Das gleiche Beispiel in der neuen Syntax:

class MeineKlasse {

var bar: Boolean = true;

}


Beachten Sie, dass nun auch der Token attribute entfällt und stattdessen var (oder def beim Einsatz von dynamischem Binden) zum Einsatz kommt.


 

Ersetzen von Triggern

Bisher waren Trigger, die außerhalb von einer Klasse definiert wurden, ein zentraler Bestandteil der Definition von der Reaktion auf Ereignisse. Die neue Syntax definiert so genannte replace triggers als Teil der Attributdeklaration. Die Trigger-Funktion folgt dabei nun den Schlüsselworten on replace.


Ein Beispiel für die alte Syntax:


class MeineKlasse {

attribute bar: Boolean;

}

 

trigger on MeineKlasse.bar = value {

if (bar == true) {

beep();

}

}


Das gleiche Beispiel in der neuen Syntax:


class MeineKlasse {

var bar: Boolean on replace {

if (bar == true) { beep();

}

};

}


Ein Beispiel für die alte Syntax mit Initialisierung:


class MeineKlasse {

attribute bar: Boolean = true;

}

 

trigger on MeineKlasse.bar = value {

if (bar == true) {

beep();

}

}


Das gleiche Beispiel in der neuen Syntax mit Initialisierung:


class MeineKlasse {

var bar: Boolean = true on replace {

if (bar == true) {

beep();

}

};

}


 

Kardinalität

Die beliebige Häufigkeit von Attributen wurde bisher mit dem Sternoperator * angegeben und die Werte außerhalb zugewiesen. Nun werden dafür die eckigen Klammern [] verwendet und die Werte direkt in der Klasse zugewiesen.


Ein Beispiel für die alte Syntax:


class MeineKlasse {

attribute names :String*;

}

 

attribute names = ["Ralph", "Felix", "Florian"];


Das gleiche Beispiel in der neuen Syntax:


class MeineKlasse {

var names :String[] = ["Ralph", "Felix", "Florian"];

}


 

Benannte Instanzen

In den bisherigen Versionen von JavaFX Script waren benannten Instanzen mehr oder weniger das, was nun vollqualifizierte Konstanten darstellen (oder Objektliterale).


Ein Beispiel für die alte Syntax:


Frame {

title: "White Frame"

background: white

}


Ein vergleichbares Beispiel in der neuen Syntax:


SwingLabel {

text: "Label"

foreground:Color.WHITE

}


Alternativ das gleiche Beispiel in der neuen Syntax:


SwingLabel {

text: "Label"

foreground:Color {

red: 1

green: 1

blue: 1

opacity: 1

}

}


 

Anonyme Objektliterale

Bisher konnten Sie ein anonymes Objektliteral ohne die Spezifizierung von einen Typ deklarieren . Der Interpreter legte den Typ implizit fest (eine Art der losen Typisierung, wie es auch unter JavaScript oder PHP Einsatz findet, unter Java allerdings ziemlich brutal im Widerspruch zum streng typisierten Konzept stand). In der neuen Version müssen Sie explizit Objektliterale benennen.


Ein Beispiel für die alte Syntax:


accelerator: {

modifier: CTRL

keyStroke: O

}

....


Das gleiche Beispiel in der neuen Syntax:


accelerator: Accelerator {

modifier: KeyModifier.CTRL

keyStroke: KeyStroke.O

}

...


 

Überschreiben von Funktionen nun mit expliziter Angabe des Rückgabetyps und override

Bisher konnten Sie beim Überschreiben von einer Funktion diese einfach redefinieren und zum Beispiel auf die Angabe des Rückgabetyps verzichten.

Nun geben Sie in der Signatur der Funktion diesen Rückgabetyp und das vorangestellte Schlüsselwort override an. Zwar ist so eine vollständige Signatur nicht in jedem Fall unbedingt zwingend, aber zur Kennzeichnung und Vereinheitlichung immer sinnvoll.


Ein Beispiel für die alte Syntax:


class MyWidget extends CompositeNode {

...

function composeNode() {

...

}

}


Ein vergleichbares Beispiel in der neuen Syntax:


class MyCustomNode extends CustomNode {


public override function create(): Node {

return Group {

content: []

};

}

}


 

for-Schleife

Nachdem man in Java selbst ein foreach-Konstrukt eingeführt, aber syntaktisch anders als in JavaFX Script aufgebaut hat, war diese syntaktische Abweichung in JavaFX Script ziemlich unglücklich. In der neuen Varianten wurde die Syntax an Java angepasst.


Ein Beispiel für die alte Syntax:


...

for (Integer i = 0; i < element.length; i++) {

 

System.out.println(element);

}

...

foreach (element in group) {

System.out.println(element);

}

...


Das gleiche Beispiel in der neuen Syntax:


...

for (Integer i = 0; i < element.length; i++) {

System.out.println({element});

}

...

for (element in group where element.length() < 4) {

System.out.println({element});

}

...


Negative Rangebereiche und Schrittweite

Bisher ging so was:

for (i in [5..4]) {

System.out.println("i = {i}");

}



In der neuen Version sind negative Rangebereiche nicht mehr erlaubt.



Ebenso können Sie die Schrittweite der Iteration nicht mehr wie folgt angeben:

for (i in [1,5..10]) {

System.out.println("i = {i}");

}



Stattdessen verwendet man nun den Token step, der so auch normal in Arrays zu verwenden ist.



Beispiel:



var nums = [1..10 step 2];


 

Stringliterale und Stringausdrücke in JavaFX

Sie können in JavaFX Script eine Zeichenkette sowohl in einfache als auch doppelte Hochkommata einschließen. Und wie auch beispielsweise in PHP wurden Zeichenketten in den ersten Versionen von JavaFX Script in doppelten und einfachen Hochkommata vom System bei gewissen Situationen unterschiedlich behandelt.

Auswertung von Ausdrücken in Strings

Allgemein gilt - wenn Sie den Bezeichner einer Variablen in eine Zeichenkette mit doppelten Hochkommata notieren und diesen in geschweifte Klammern {} einschließen, wird der Ausdruck ausgewertet. Sie erhalten in dem resultierenden String den Wert der eingeschlossenen Variablen beziehungsweise eines Ausdrucks. Dabei sind Sie für die Art der ausgewerteten Variable nicht auf Zeichenketten beschränkt. Bei einer Zeichenkette in einfachen Hochkommata finden Sie in bisherigen Versionen dieses Verhalten nicht .


Beispiel:

import java.lang.System;

var name = 'Trillian';

var wert = 5;

var s1 = "Hallo {name}"; // Zeichenkette mit doppelten Hochkommata

var s2 = 'Hallo {name}'; // Zeichenkette mit einfachen Hochkommata

var s3 = "Hallo {wert}"; // Zeichenkette mit doppelten Hochkommata


System.out.println(s1); // Hallo Trillian

System.out.println(s2); // Hallo {name}

System.out.println(s3); // Hallo 5


Die Ausgabe ist in alten Versionen folgende:


Hallo Trillian

Hallo {name}

Hallo 5


In neuen Versionen erhalten Sie aber folgende Ausgabe:


Hallo Trillian

Hallo Trillian

Hallo 5


M.a.W.: Auch in einfachen Hochkommata eingeschlossene Ausdrücke werden in der neuen Version von JavaFX Script ausgewertet!


Zeilenumbrüche in Strings

Im Gegensatz zu Java konnten in JavaFX in den ersten Versionen Zeichenketten Zeilenumbrüche enthalten, wenn sie in doppelte Hochkommata eingeschlossen sind. Das geht nun nicht mehr.


 

Modulooperator

Der Modulooperator % wurde in neuen JavaFX-Versionen durch den Token mod ersetzt. Damit ist allerdings eine weitere Inkompatibilität zu Java zu beachten.


 

Arrays

In JavaFX ist [] ein eigener Operator und dieser Operator [] steht für eine Selektion. Die darin notierte Lokalisierung ist eine Verwendung, die ähnlich in XPath beziehungsweise XQuery vorkommt.

Einfügen von Arrayelementen

Das Einfügen von Elementen erfolgt über die insert-Anweisung. Diese Anweisung konnte bisher die folgenden verschiedene Formen annehmen:

  • insert Ausdruck1 [as first | as last] into Ausdruck2

  • insert Ausdruck1 before Ausdruck2

  • insert Ausdruck1 after Ausdruck2


Die Token as first und as last wurden aufgegeben!


 

Die Grundlagen einer GUI mit JavaFX Script

Die grundlegenden Klassen zum Aufbau einer GUI wurden in der Finalversion von JavaFX Script massiv unstrukturiert, ohne jedoch das grundsätzliche Konzept zu verändern. Die Basis bilden nur neue Klassen.


Unter javafx.ext.swing sind nun die meisten Swing-Komponenten zu finden.


Und die Grundlage der gesamten grafischen Applikation bildet javafx.stage.Stage, was für das gesamte Fenster steht.


Dieses wird in der Regel in einzelne Szenen (javafx.scene.Scene) mit spezifischen Inhalten (also etwa Swing-Komponenten) unterteilt werden.


Beispiel:


import javafx.ext.swing.SwingButton;

import javafx.scene.Scene;

import javafx.stage.Stage;


var button = SwingButton {

text: "Button"

action: function() {

java.lang.System.exit(0);

}


}

Stage {

title: "Meine Applikation"

width: 250

height: 80

scene: Scene {

content: button

}

}


 

Bidirektionales Binden - with inverse

Das bidirektionales Binden verwendet in der neuen Variante von JavaFX die Syntax with inverse.


Ein Beispiel für die alte Syntax:


... TextField {

value: bind model.firstName

}

...


Ein vergleichbares Beispiel in der neuen Syntax:

...

SwingTextField {

columns: 10

text: bind model.firstName with inverse

editable: true

}

...


 

Casting von Number nach Integer

Bei der Typumwandlung von Number nach Integer verwendet man in neuen JavaFX-Varianten die Funktion intValue(), um einem Verlust der Genauigkeit vorzubeugen.


Ein Beispiel für die alte Syntax:


var real :Number;

num = 6.42;

var integer :Integer;

integer = real;

...


Das gleiche Beispiel in der neuen Syntax:


var real :Number;

var num = 6.42;

var integer :Integer = real.intValue();

...


 

Vererbung

Bei der Vererbung gibt es in JavaFX Script aktuell ein paar kleinere Probleme, so dass das Schlüsselwort as in einigen Situationen notwendig sein kann.


Beispiel:


...

content: foo as Node

...

 


Das neue API

Das API von JavaFX Script wurde wie schon erwähnt in einigen Bereichen reorganisiert. Insbesondere zur GUI. Details lassen sich aber leicht über die JavaFX Script Programming Language API Documentation unter http://java.sun.com/javafx/1/docs/api/ nachschlagen.


 

 

 

 
Hier gibt es die Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0 als PDF zum Download


Und wie gesagt - in meiner Seite zu JavaFX - http://www.javafx-buch.de gibt es weitere Infos zu JavaFX.

Freitag, 26. Dezember 2008

Ein kleines JavaFX-Beispiel


Aktuell bringe ich meine JavaFX-Kenntnisse auf den neusten Stand. Hat sich ja doch was getan seit meinem Buch. Aber es gibt gutes Material von Sun selbst und die Grundlagen, die ich in meinem Buch ausgearbeitet habe, gelten noch immer.
Hier ist ein nettes kleines Beispiel, was ein offizielles Sun-Beispiel etwas modifiziert.
So sieht es aus

Drehender Text



/*
* Main.fx
*
* Created on 26.12.2008, 21:49:01
*/

package javafxapplication4;

import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.effect.*;
import javafx.scene.paint.*;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.scene.text.*;
import javafx.scene.transform.*;
import javafx.stage.Stage;

var scale = 1.0;
var color = Color.AQUA;
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [
KeyFrame {
time: 3s
canSkip: true
values: [
scale => -1.0 tween Interpolator.EASEBOTH
color => Color.GREEN
]
}
]
}.play();
Stage {
title: "Animierter Text als JavaFX-Applikation"
width: 400
height: 240
scene: Scene {
width: 400
height: 200
content: [
Circle {
centerX: 200,
centerY: 100
radius: 90
fill: RadialGradient {
centerX: 75
centerY: 75
radius: 90
proportional: false
stops: [
Stop {
offset: 0.0
color: Color.RED},
Stop {
offset: 1.0
color: Color.DARKRED}
] // stops

} // RadialGradient
}
Text {
font: Font {
size: 20
}
x: 110,
y: 90
textAlignment: TextAlignment.CENTER
content:"Willkommen bei\nRJS EDV-KnowHow\nwww.rjs.de"
fill: bind color
effect: DropShadow {
offsetX: 10
offsetY:10
color: Color.color(0.1, 0.3, 0.1)
}; // DropShadow
transforms: Scale{
x: 1
y: bind scale
pivotX: 100,
pivotY: 100
} // Scale
} //Text
]
}
}

Mittwoch, 17. Dezember 2008

Nochmal JavaFX

Ich fasse es nicht. Seit ich die Umstiegsanleitung von altem JavaFX-Code auf die Finalversion erstellt habe (was nur wenige Wochen her ist), hat sich das API schon wieder in weiten Bereichen geändert. Selbst der Link zu der Quelle, auf die ich mich bei der Umstiegsamleitung beziehe, ist nicht mehr da. Muss also schleunigst die Anleitung updaten. JavaFX hat sich in den letzten Wochen wirklich immer wieder verändert und ich wollte mich eigentlich erst dann wieder ernsthaft damit beschäftigen, wenn Ruhe eingekehrt und das API stabil ist. Ich hoffe mal, das ist jetzt der Fall. Die nächsten Tage folgt also eine angepasste Umstiegsanleitung.

Mittwoch, 10. Dezember 2008

XML mit Java

Ab heute steht mal wieder eine Schulung zum Thema XML mit Java an. Geht bis zum Ende der Woche.

Samstag, 6. Dezember 2008

Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0

Nachdem ich schon mehrfach Details zum Umstieg von älterem Code in JavaFX Script gepostet habe, folgt hier nochmal ein vollständiger Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0.

Mein Buch zu JavaFX
Meine DVD mit dem Onlinetraining zu JavaFX.
Wer bereits mit JavaFX Script auf Basis erster Preversionen seit etwa Mitte 2007 programmiert hat, wird in der nun Ende 2008 erschienenen Finalversion 1.0 mit einigen Änderungen bzw. Umstrukturierungen konfrontiert.
Aber die Änderungen sind eigentlich gar nicht so wild. Insbesondere gibt es einen guten JavaFX Script™ Programming Language Migration Guide unter https://openjfx.dev.java.net/migration.html, auf dem auch diese Umstiegsanleitung in einigen Punkten basiert.
Insgesamt ist m.E. die Finalversion von JavaFX Script stringenter und logischer geworden und orientiert sich doch verstärkter an dem streng objektorientierten Konzept von Java selbst.
Operationen
In den Preversionen von JavaFX Script hat Sun mit Prozeduren experimentiert. Schon Funktionen sind in der streng objektorientierten Welt von Java gewagt, aber Prozeduren, die sogar einen Rückgabewert liefern konnten, waren wohl doch des Guten zu viel. In der Finalversion entfallen diese Prozeduren, die bisher mit dem Schlüsselwort operation eingeleitet wurden. Stattdessen werden grundsätzlich Funktionen verwendet, die mit dem Schlüsselwort function eingeleitet werden.
Beispiel alt:
class MeineKlasse {
function times2(x) { return x * 2; }
operation print(s) { System.out.println(s); }
}

Beispiel neu:
class MeineKlasse {
function times2(x) { return x * 2; }
function print(s) { System.out.println(s); }
}

Attributinitialisierung
Die Initialisierung von Attributen erfolgte bisher außerhalb einer Klassendefinition. Diese Technik wurde nun Java angeglichen und die Attribute werden bei der Deklarierung in der Klasse selbst initialisiert.
Beispiel alt:
class MeineKlasse {
attribute bar: Boolean; }

attribute Foo.bar = true;

Beispiel neu:
class MeineKlasse {
attribute bar: Boolean = true;
}

Ersetzen von Triggern
Bisher waren Trigger, die außerhalb von einer Klasse definiert wurden, ein zentraler Bestandteil der Definition von der Reaktion auf Ereignisse. Die neue Syntax definiert so genannte replace triggers als Teil der Attributdeklaration. Die Trigger-Funktion folgt dabei nun den Schlüsselworten on replace.
Beispiel alt:
class MeineKlasse {
attribute bar: Boolean;
}

trigger on MeineKlasse.bar = value {
if (bar == true) {
beep();
}
}

Beispiel neu:
class MeineKlasse {
attribute bar: Boolean on replace {
if (bar == true) { beep();
}
};
}

Beispiel alt mit Initialisierung:
class MeineKlasse {

attribute bar: Boolean = true;
}

trigger on MeineKlasse.bar = value {
if (bar == true) {
beep();
}
}

Beispiel neu mit Initialisierung:
class MeineKlasse {
attribute bar: Boolean = true on replace {
if (bar == true) {
beep();
}
};
}
Kardinalität
Die beliebige Häufigkeit von Attributen wurde bisher mit dem Sternoperator * angegeben und die Werte außerhalb zugewiesen. Nun werden dafür die eckigen Klammern [] verwendet und die Werte direkt in der Klasse zugewiesen.
Beispiel alt:
class MeineKlasse {
attribute names :String*;
}

attribute names = ["Ralph", "Felix", "Florian"];

Beispiel neu:
class MeineKlasse {
attribute names :String[] = ["Ralph", "Felix", "Florian"];
}
Objektliterale ohne Attribute
Zur Referenzierung von Objektliteralen ohne dessen Attribute konnte man bisher einfach den Klassennamen angeben. In der neuen Syntax werden geschweifte Klammern gefordert.
Beispiel alt:
Frame {
title: "Show MenuSeparator"
height: 180
width: 320
menubar: MenuBar {
menus: Menu {
text: "File"
items: [MenuItem {
text: "New"

}, MenuItem {
text: "Open"

}, MenuItem {
text: "Save"

}, MenuSeparator, MenuItem {
text: "Import"
}]
}
}
visible: true
}

Beispiel neu:
Frame {
title: "Show MenuSeparator"
height: 180
width: 320
menubar: MenuBar {
menus: Menu {
text: "File"
items: [MenuItem {
text: "New"

}, MenuItem {
text: "Open"

}, MenuItem {
text: "Save"

}, MenuSeparator {

}, MenuItem {
text: "Import"
}]
}
}
visible: true
}
Benannte Instanzen
In den bisherigen Versionen von JavaFX Script waren benannten Instanzen mehr oder weniger das, was nun vollqualifizierte Konstanten darstellen (oder Objektliterale).
Beispiel alt:
Frame {
title: "White Frame"
background: white
}

Beispiel neu:
Frame {
title: "White Frame"
background: Color.WHITE
}

Alternatives Beispiel neu:
Frame {
title: "White Frame"
background: Color {
red: 1
green: 1
blue: 1
opacity: 1
}
}
Anonyme Objektliterale
Bisher konnten Sie ein anonymes Objektliteral ohne die Spezifizierung von einen Typ deklarieren . Der Interpreter legte den Typ implizit fest (eine Art der losen Typisierung, wie es auch unter JavaScript oder PHP Einsatz findet, unter Java allerdings ziemlich brutal im Widerspruch zum streng typisierten Konzept stand). In der neuen Version müssen Sie explizit Objektliterale benennen.
Conversion:
Beispiel alt:
accelerator: {
modifier: CTRL
keyStroke: O
}
....

Beispiel neu:
accelerator: Accelerator {
modifier: KeyModifier.CTRL
keyStroke: KeyStroke.O
}
...
Überschreiben von Funktionen nun mit expliziter Angabe des Rückgabetyps
Bisher konnten Sie beim Überschreiben von einer Funktion auf die Angabe des Rückgabetyps verzichten. Nun muss die Signatur der Funktion diesen Rückgabetyp spezifizieren.
Beispiel alt:
class MyWidget extends CompositeNode {
...
function composeNode() {
...
}
}

Beispiel neu:
class MyWidget extends CompositeNode {
...
function composeNode() :Node {
...
}
}

Bidirektionales Binden - with inverse
Das bidirektionales Binden verwendet in der neuen Variante die Syntax with inverse.
Beispiel alt:
... TextField {
value: bind model.firstName
}
...

Beispiel neu:
...
TextField {
value: bind model.firstName with inverse
}
...
Casting von Number nach Integer
Bei der Typumwandlung von Number nach Integer verwendet man in der neuen JavaFX-Variante die Funktion intValue(), um einem Verlust der Genauigkeit vorzubeugen
Beispiel alt:
... var real :Number;
num = 6.42;
var integer :Integer;
integer = real;
...

Beispiel neu:
... var real :Number;
num = 6.42;
var integer :Integer = real.intValue();
...
Vererbung
Bei der Vererbung gibt es in JavaFX Script aktuell ein paar kleinere Probleme, so dass das Schlüsselwort as in einigen Situationen notwendig wird.
Beispiel alt:
class MeineKlasse extends Rectangle {
...
}
...
...
content: Canvas {
content: Foo {
...
}
...
}
...
}

Beispiel neu:
class MeineKlasse extends Rectangle {
...
Old:}
var foo :Foo = Foo {
...
};
...
content: Canvas {
content: foo as Node
...
}
...
}
for-Schleife
Nachdem man in Java selbst ein foreach-Konstrukt eingeführt, aber syntaktisch anders aufgebaut hat, war die syntaktische Abweichung in JavaFX Script ziemlich unglücklich. In der neuen Varianten wurde die Syntax an Java angepasst.
Beispiel alt:
...
for (Integer i = 0; i < element.length; i++) {

System.out.println(element);
}
...
foreach (element in group) {
System.out.println(element);
}
...

Beispiel neu:
...
for (Integer i = 0; i < element.length; i++) {
System.out.println({element});
}
...
for (element in group where element.length() < 4) {
System.out.println({element});
}
...
Das neue API
Das API von JavaFX Script wurde in einigen Bereich reorganisiert. Insbesondere zur GUI. Details lassen sich aber leicht über die JavaFX Script Programming Language API Documentation unter http://openjfx.java.sun.com/current-build/doc/api/index.html nachschlagen. Und natürlich steht auch die offizielle Dokumentation von Sun unter http://java.sun.com/javafx zur Verfügung.

Hier gibt es die Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0 als PDF zum Download
In meiner Seite zu JavaFX - http://www.javafx-buch.de gibt es weitere Infos zu JavaFX.

Freitag, 5. Dezember 2008

Nach dem Schneecaos

Die 3 AJAX-Schulungen sind vorüber. Fazinierend, wie sich 3 doch im Grunde gleiche Schulungen auf Grund der verschiedenen Teilnehmer und kleiner Abweichungen in der Agenta entwickeln können. Im Wesentlichen habe ich den gleichen Stoff in allen 3 Schulungen gemacht, aber mit vollkommen verschiedenen Schwerpunkten.

Die 3. Schulung war bei mir vor der Haustür im Taunus. Und da ist am Mittwoch das Schneecaos ausgebrochen. Bin zwar bei der Anfahrt gut hoch auf den Berg gekommen, aber 2 Km vor dem Schulungszentrum hatte ein Bus einen LKW gerammt und die Hauptverkehrsader Richtung Usingen blockiert. Super. Zum Glück kenne ich mich da sehr gut aus und hab Allradantrieb. Ich bin umgedreht und über den Berg eine Umleitung gefahren. Über Finstertal. Muss man mehr sagen? Absolute Wildnis und nix von wegen Schnee geräumt. Aber noch in der Zeit angekommen.

Ansonsten läuft mein Rechner mit der zusätzlichen Netzwerkkarte wieder. Ist doch manchmal gut, wenn man Altrechner ausschlachtet und funktionstüchtige Altteile behält.

Sonntag, 30. November 2008

Wieder zurück - meinereiner und mein Rechner

Bin wieder im Lande. Mein Rechner auch. Ich muss am Sonntag arbeiten und eine VHS-Powerpoint-Schulung halten (nicht schlimm - draußen ist Schneeregen - man verpasst nix). Mein Rechner sollte arbeiten, will aber nicht. Der Tausch des Mainboards macht ziemliche Nacharbeiten nötig. Bis auf die Onboardnetzkarten habe ich den Kerl aber wieder eingerichtet. Und bevor ich mir weiter die Zeit um die Ohren schlage baue ich die nächsten Tage wahrscheinlich ne neue Netzwerkkarte ein.

Freitag, 28. November 2008

Und wieder BKA-Gesetz

Heute geht es in die Entscheidung im Bundesrat. Dürfen private Computer online durchsucht werden? Ob der Gesetzgeber bedacht hat was passiert, wenn ein potentieller Terrorist seinen Computer als Geschäftscomputer anmeldet? Ist dann die Untersuchung verboten? ;-)

Was ein Schwachsinn.

Donnerstag, 27. November 2008

AJAX, nichts als AJAX - und eine neue Sicherheitslücke

Bin am Sonntag nach Nürberg gereist, dann 3 Tage dort geschult und Mittwochabend weiter nach Landshut (zur BSA, wo ich regelmäßig unterrichte). Gleich geht hier der Kurs los. Und nächste Woche bin ich 3 Tage im Taunus am Schulen. Und was? AJAX. Immer wieder AJAX. Das ist eine richtige AJAX-Jahresabschlussralley.

Und in Bezug auf mein geliebtes AJAX zeigt sich aktuell eine massive Lücke in der Konzeption von Antiviren-Software. Diese kann man nämlich mit AJAX überlisten.

Im Grunde ist das Verfahren ganz einfach und eigentlich so naheliegend, dass es mich wundert, warum erst jetzt das Thema aufkommt.

Ein Angreifer eines Rechners benutzt dabei einfach fragmentierten Schadcode, den konventionelle Antiviren-Programme nicht erkennen können. Diese scannen nur vollständige Signaturen. Für Antivirenprogrammen erhält ein Browser unverdächtig wirkendenden Client-Code, der auf einer Webseite eingebettet wird. Ein Javascript lädt dann stückchenweise Schadecode per AJAX nach. Im RAM wird der Schadcode dann zusammengesetzt, was die Erkennung durch Schutzprogramme noch schwieriger macht. Empfangener Schadcode wird dazu einfach in einer Javascript-Variable gespeichert. Mit weiteren Operationen lässt sich daraus ein Script konstruieren und ins DOM einbinden.
Diese so genannte Script Fragmentation funktioniert angeblich Browser-übergreifend, obgleich bisher noch keine Angriffe in der freien Wildbahn bekannt sind.

Es ist zu hoffen, dass die bestehende Schutzkonzepte von Antivirenprogrammen angepasst werden.

Sonntag, 23. November 2008

AJAX-Schulungen in Nürnberg und Landshut

Heute Abend düse ich ab zu einem Wochentripp nach Bayern. Zuerst habe ich eine 3-tägie AJAX-Schulung in Nürnberg und im Anschluss noch eine 2-täge AJAX-Schulung in Landshut. Hoffentlich schneit es unterwegs nicht zu stark.

Samstag, 22. November 2008

Buch Google Web Toolkit als eBook


Mein Buch Google Web Toolkit (Ralph Steyer, entwickler.press, ISBN 978-3-939084-21-1) wird die nächsten Tage neu als eBook erscheinen.

Hackeralarm rundrum

Vor einigen Wochen wurde ja eine private Webpräsenz von mir gehackt (von meiner Band). Ziemlich kurz nachdem auch die Webseite gehackt wurde, über die wir uns immer zum Gleitschirmfliegen verabreden. Und fast zeitgleich gab es Angriffe auf die Webpräsenz von einem Geschäftspartner. Jetzt steht seit einigen Tagen ein anderer Geschäftspartner voll im Fokus von Angriffen. Irgendwie scheinen die Attacken zuzunehmen. Oder ich habe es nur vorher nur nicht so wahrgenommen, da ich bzw. mein Umfeld nicht so betroffen war.

Freitag, 21. November 2008

Rechner zum Teufel

Super. Mein Hauptrechner ist am A.... Ich bin mir ziemlich sicher, dass entweder das Motherboard (sehr wahrscheinlich) oder das Netzteil defekt ist.

Der PC ist einfach ausgegangen und startet nicht mehr. Lüfter haben alle Strom, Netzwerkkarte wohl auch (Licht leuchtet). Aber nicht einmal das BIOS kommt hoch, das DVD-LW lässt sich nicht öffnen, der Ausschalter unterbricht den Strom nicht. Bin zwar Softwareentwickler und kein Hardwarespezialist, aber das sollte eindeutig sein.

Da der Rechner noch keine 1,5 Jahre alt ist. fällt der Defekt wohl noch unter die Garantie von 2 Jahren. Hab ihn gestern Abend zum Händler geschickt und harre der Dinge.

Die Festplatte habe ich vorher ausgebaut, da mein aktuelles Programmierprojekt und ein paar andere wichtige Daten darauf und in Arbeit sind. Gerade rechtzeitig zum Ausfall habe ich mir einen USB-Adapter zum Anschließen von IDE- und SATA-Festplatten an einen Rechner zugelegt. Kann sich sofort auszahlen.

Donnerstag, 20. November 2008

Onlinedurchsuchung auf der Kippe?

Ich fasse es nicht - der Bundesrat kippt möglicher Weise die Onlinedurchsuchung bzw. das so genannte BKA-Gesetzt. Sollte es doch noch Politiker mit Moral geben? Oder die Rechte der Bürger beachtet werden? Irgendwie kann ich es noch nicht glauben.

Montag, 17. November 2008

[object Error] im Internet Explorer

Ich bin endlich mal wieder am Weiterentwickeln meiner RIA. 3 Tage habe ich Zeit, bevor ich wieder schule.

Jetzt hatte ich mir für heute vorgenommen, endlich den Fehler im Internet Explorer rauszubekommen. Wie schon früher gepostet, werde ich wegen dem Internet Explorer bald wahnsinnig. Und nicht nur ich, wenn ich die Kommentare anderer Webentwickler im Internet sehe.

Jetzt programmiere ich ja gerade eine komplexere AJAX-RIA mit Dojo und Prototype als AJAX-Frameworks zur Unterstützung. Und wie gesagt funktioniert sie auch in allen relevanten Browsern. Nur der Internet Explorer kapiert es einfach nicht. Die Applikation meldet einen [object Error].

Jetzt habe ich bisher den IE einfach ignoriert und die RIA für alle anderen Browser entwickelt. Nur irgendwann muss ich mich dem Problem stellen.

Nun habe ich heute morgen alles Mögliche im IE aufgerüstet:

Script Debugger
,
DebugBar,
IE Developer Toolbar,
IE HttpAnalyzer

Eben alles, was man so braucht, um eine Webapplikation zu analysieren. Zwar gibt es für den IE noch lange nicht die Unterstützung wie für Firefox, aber immerhin ist mittlerweile da auch was da. Und bei dem komplexen Zusammenspiel zwischen AJAX, Prototype und Dojo kann der Fehler ja wer weis wo stecken. Gerade im Zusammenhang mit AJAX sind ja eine Vielzahl von Fehlern im IE bekannt.

NUR!

Mit dem Zeug war ich so schlau wie zuvor. Nichts zu erkennen, warum das Teil aussteigt. Nur eben eine vollkommen nichstsagende Fehlermeldung, die auf irgendein schwerwiegendes Problem hinweist.

Dann also Holzhackermethode und in die JavaScripts nach jedem Schritt ein alert() rein. Und so schrittweise dem Fehler genährt.

Und irgendwann tatsächlich die Zeile gefunden, die den Fehler auswirft:

$(index).style.background = "lightgray";

Bisschen gespielt:

$(index).style.background = "red";



Kein Fehler mehr!

Nicht geglaubt!

Das kann nicht sein.

Weiter gespielt mit anderen Farbnamen.

Kein Fehler mehr!

Ich fasse es nicht.
Wie blöd kann ein Browser sein? Er kennt einfach bei einer Zuweisung per DHTML den Standardtoken "lightgray" nicht und wirft eine Fehlermeldung aus, als ob da ein ultraschwerwiegendes Problem vorliegt ;-(.

Hab alle Token "lightgray" in der Applikation beseitigt und sie läuft auch im IE. Zwar noch nicht ganz fehlerfrei und das Design sieht besch... aus. Aber das sind die üblichen Mängel im IE und die bekomme ich recht sicher in den Griff.

Samstag, 15. November 2008

Ein paar Erklärungen zu dem Java-Programm

Nachdem ich gestern ja die neue Version von meinem Kodierungsprogramm RJSKryp als JAR-Datei online gestellt habe, sind bereits erste Fragen aufgetaucht. Und zwar zu dem JAR-Format.

Offensichtlich erkennen einige Java-verweigernde Betriebssysteme (was meine ich bloß ;-)) bzw. so eingestellte Browser die Bedeutung nicht richtig und interpretieren es als ZIP-Format.

Das ist jetzt nicht grundsätzlich falsch. Das JAR-Format (Java Archive) ist binärkompatibel zum ZIP-Format. Es enthält jedoch zusätzlich eine so genannte Manifestdatei mit Metainformationen. Darüber kann man beispielsweise eine Klasse explizit spezifizieren, um für eine JVM (Java Virtual Machine) diese spezifische Klasse als Startklasse einer Java-Applikation anzugeben.




So sieht etwa der Inhalt von der Manifestdatei in meiner JAR-Datei rjskryp.jar aus:


Manifest-Version: 1.0
Class-Path: .
Main-Class: de.rjs.main.RJSKryp


Deutlich ist die Java-Klasse de.rjs.main.RJSKryp als Startklasse zu erkennen.



Das erlaubt es jetzt, dass das Programm sogar über den Browser direkt beim Anklicken des Links von der JVM ausgeführt werden kann.

Vollkommen analog lässt das Programm lokal starten, wenn die JAR-Datei zuerst lokal gespeichert wurde.

Den Inhalt der JAR-Datei kann man sich aber auch in einem Programm wie 7-ZIP ansehen, da das Format ja wie gesagt binärkompatibel zum ZIP-Format ist.

Freitag, 14. November 2008

Java-Programm zum Download

Ich hatte vor einigen Jahren für verschiedene meiner damaligen Java-Bücher ein einfaches Kodierungsprogramm konzipiert, das ich dann in den verschiedensten Varianten in den Büchern durchgespielt hatte.

Einmal natürlich zur Demonstration von Dateizugriffen mit Java sowie Programmierlogik (also im Wesentlichen Versionen, die auf Konsolenebene gearbeitet haben) und dann als Erweiterung mit einer GUI (zur Demonstration von verschiedenen Techniken mit dem AWT und vor allen Dingen Swing).



Im Rahmen meiner aktuellen Java-Schulung habe ich nun die letzten 2 Wochen ein Praktikum meiner Teilnehmer betreut. Und dafür habe ich als ein Beispiel mein altes Kodierungsprogramm wieder aufgewärmt und parallel zu den Lösungsansätzen meiner Kursteilnehmer selbst eine neue Variante auf Basis von Swing und RandomAccessFile weiterentwickelt.

Hier ist der Download einer ausführbaren Version von dem Programm als JAR-Datei

Das Java-Programm ist natürlich vollkommen plattformneutral und öffnet damit unter jedem Betriebssystem mit einer passenden JVM eine beliebige Datei (über einen JFileChooser). Dabei werden die Daten nach dem Einlesen dann wieder in eine andere Datei geschrieben, deren Name und Ort Sie natürlich frei wählen können.

Die Daten werden vor dem Rausschreiben natürlich auf nützliche Art und Weise verarbeiten.

Dazu wird ein Verschlüsselungs- und Entschlüsselungalgorithmus implementiert, der auf einer Verschiebung der Zeichenkodierung basiert. Der verwendete Algorithmus ist auf Grundlage der Cäsar-Chiffre konzipiert. Dies ist ein einfacher Verschiebungsalgorithmus. Diese Verschlüsselungsmethode lautet wie folgt: für jeden im Quelltext vorkommendes Zeichen setze im Chiffretext einen um einen festen Parameter versetztes Zeichen. Wenn beispielsweise im Quelltext der erste Buchstabe des Alphabetes - ein „A“ - auftaucht und der Verschlüsselungsparameter „3“ ist (angeblich der von Cäsar benutzte Parameter), wird im Chiffretext der vierte Buchstabe des Alphabetes - ein „D“ - genommen, usw. Die Dekodieren geht genau umgekehrt.

Die Verschiebung ist übrigens im Programm über einen Slider frei wählbar und sämtliche Angaben an das Programm werden auf über eine GUI übergeben (JSlider, JOptionPanel, JFileCooser, JButton, JMenuBar, etc.). Ebenso ist das Programm gegen fehlerhafte Verwendung abgesichert. So findet etwa vor dem Erstellen der neuen Datei eine Kontrolle statt, ob die zu erstellende Datei evtl. schon vorhanden ist. In diesem Fall muss der Anwender bestätigen, dass die Zieldatei überschrieben wird.

Zugegebenermaßen ist die angewendete Technik zur Verschlüsselung sehr einfach, bei binären Dateien ist die einfache Cäsar-Chiffre trotzdem wirkungsvoll. Durch die bereits in der Quelldatei vorkommenden Steuerzeichen ist ein Erraten der verwendeten Konstanten extrem erschwert. Überdies kann man alleine durch eine solche Verschiebung von Zeichen automatische Spionagetools in einem Netzwerk (etwa dem Internet) austricksen, die Texte nach bestimmten Kennworten (etwa Geheimzahl oder Kreditkartennummer) scannen.

Hier ist der Download einer ausführbaren Version von dem Programm als JAR-Datei

Donnerstag, 13. November 2008

BKA-Gesetz und Onlinedurchsuchung

Jetzt ist die Sache wohl dingfest - der Bundestag beschließt das umstrittene BKA-Gesetz samt der heimlichen Durchsuchung privater Computer. Aber wozu die gesamte Aufregung?
Natürlich - Privatshäre gibt es nicht mehr. Betrüger, Verbrecher, Firmen und Staat - alle spionieren Alle und Jeden aus. Aus den unterschiedlichsten Gründen. Teils vielleicht sogar ehrenwert, meist aber zumindest halbseiden und überwiegend mit üblen Absichten. Darüber braucht man m.E. gar nicht diskutieren.

Aber - die Aufregung um die Onlinedurchsuchung ist m.E. überflüssig. Warum? Weil es nicht funktionieren wird!

Wie zur Hölle soll denn eine solche Onlineuntersuchung ablaufen? Soll das BKA einem Verdächtigen eine Mail mit Dateianhang schicken und ihn bitten, diesen anzuklicken? Sie haben hier ein Freilos für "Wer wird Millionär". Ich lache mich rund. Damit bekommt man doch nur die Super-DAUs. Schon viele DAUs wissen, dass man sowas nicht macht.

Der Staat kann doch nicht die gleichen Mittel anwender wie Cracker und Standardprogramme verseuchen und Viren und Trojaner ins Gefecht schicken, die wahllos Computer attackieren.

Und selbst wenn solche illegalen Mittel angewendet werden, kann man von potentiellen Tätern annehmen, dass sie zumindest eine VHS-EDV-Grundlagenschulung hinter sich haben und diesen Attacken nicht durch die brutals mögliche Dummeheit zum Opfer fallen.

Also denke ich, die Onlinedurchsuchung ist zwar moralisch als auch in Bezug auf das, was ich von der Verfassung verstehe, ein staatliches Verbrechen, aber auf Grund der Wirkungslosigkeit nur eine Geldvernichtung.

Dienstag, 11. November 2008

Open Source Barometer - kein Interesse an Silverlight & .NET

Ich habe ja schon mehrfach eine Bemerkung zu Silverlight gepostet. Und es ist für mich durchaus interessant, die Perspektiven der EDV im Allgemeinen und RIAs im Besonderen in verschiedene Richtungen auszuloten. In dieser Hinsicht ist die aktuelle Studie von Alfresco Software ziemlich interessant.

In Hinsicht auf RIAs kommt darin klar raus, dass Unternehmen auf heterogene RIAs setzen.
Alfresco Software stellte in der größten Umfrage von April bis September 2008 zu Open Source-Infrastrukturen/Stacks in Unternehmen (25.000 Mitgliedern der Alfresco-Community mit insgesamt 74.000 Mitgliedern) die Frage nach der Akzeptanz von Open Source im Enterprise-Bereich im Allgemeinen und von bestimmten Technologien bei RIAs im Speziellen.
Die meisten Befragten arbeiteten dabei in einer sehr heterogenen Umgebung mit Windows als Basis. Allerdings wurden durch die Bank .NET samt wichtiger Web-Technologien abgelehnt. Und insbesondere wurde ausdrücklich Silverlight nicht akzeptiert.

Stattdessen favorisieren die meisten Befragten ausdrücklich eine ECM-Lösung auf der Basis einer Java-Architektur und AJAX mit integrierten Web 2.0-Tools. Sieht so aus als hätte ich mir doch die richtigen Techniken ausgesucht ;-).

Montag, 10. November 2008

Migration von altem JavaFX Script-Code

Hier gibt es alle Informationen, wie von altem JavaFX Script-Code auf die notwendige Syntax für die kommende Finalversion 1.0 umgestiegen werden kann:

https://openjfx.dev.java.net/migration.html

Hier ist die aktuelle API-Struktur zu finden:
http://javafx.com/releases/preview1/docs/api/

Sonntag, 9. November 2008

JavaFX und kein Ende


JavaFX scheint so langsam wirklich in Schwung zu kommen. In meiner Seite zu JavaFX - http://www.javafx-buch.de ist immer regerer Verkehr zu beobachten und es melden sich ziemlich zahlreich die Besucher an. Mehr als z.Z. in meinem AJAX-Portal - http://www.ajax-net.de (wobei das mehrere Hundert angemeldete User Vorsprung hat).

Jetzt kommen die meisten Besucher ziemlich sicher über mein Buch zu JavaFX bzw. meine DVD.

Nun zeigt sich aber, dass sich in JavaFX auf den ersten Blick jedoch Einiges geändert geändert hat. Wobei sowohl das Buch als auch die DVD m.E. immer noch eine sehr gute Basis für den Einstieg darstellen und mir z.Z. kein anderes deutschsprachiges Lehrmaterial bekannt ist (bisher halten sich andere Autoren und Verlage bzgl. JavaFX bedeckt, um nicht dem Risiko ausgesetzt zu sein, wenn sich zu
viel ändert). Bleibt im wesentlichen die offizielle Doku von Sun: java.sun.com/javafx

Und was die genauen Änderungen angeht - auf den 2. Blick relativiert sich die Sache ziemlich. Man
muss - soweit ich das bisher einschätzen kann, im wesentlichen drei Dinge in Bezug auf mein Buch bzw. die DVD beachten:

1. Die Struktur des APIs - hier finden sich z.B. alle Swing-Klassen nun unter javafx.ext.swing
2. Konsequent function() verwenden. Ich fand den Ansatz mit operation sowieso ziemlich taff. Den Grund für die Zweiteiligung habe ich nicht eingesehen und Sun hat den Weg wohl auch eingestellt.
3. Es gibt natürlich diverse Erweiterungen

Dienstag, 4. November 2008

Office 2007 - warum nur?

Ich bin gerade an einem Arbeitsplatz, auf dem nur Office 2007 verfügbar ist. Eigentlich sollte ich es langsam leid sein über Microsoft zu lästern. Aber Word 2007 frustet mich mal wieder dermaßen - ich kann nicht anders ;-)

Warum?

Warum ist die verdammte Bedienung von Office in der Version 2007 so verändert? Da arbeitet man seit unzähligen Jahren mit Office-Programmen, schreibt zig Bücher, hält Schulungen und dann sitzt man wie ein Anfänger vor diesem Mistprogramm und sucht die Befehle. :-(

Montag, 3. November 2008

Google Chrome Beta 0.3.154.9 mit Sicherheitsupdate

Der höchstumstrittene Browser Google Chrome steht in einer Beta 0.3.154.9 für Windows XP SP2 und für Vista zur Verfügung. Das Update enthält insbesondere die Beseitigung einer Sicherheitslücke, die zum Spoofing ausgenutzt werden konnte. Daneben werden ein paar weitere Probleme der Vorgängerversion beseitigt.

Eigentlich ist die Beseitigung der Sicherheitslücke lobenswert. Aber die zentrale Frage ist doch, ob nicht Chrome selbst die Sicherheitslücke ist? Und die zu beseitigen bedeutet doch nicht anderes als den Browser nie zu installieren oder benutzen.

Sonntag, 2. November 2008

Jaxer 1.0 erschienen

Endlich ist der in Aptana integrierte Open-Source-AJAX-Server in der Finalversion fertig. Ich bin sowieso ein Fan von Aptana respektive dem zugrunde liegende Eclipse und damit wird die gesamte Sache noch runder.

Das Besondere an Jaxer ist, dass damit Webapplikationen JavaScript auch auf dem Server verwenden können (ähnlich wie man es früher in ASP gemacht hat - nur viel, viel leistungsfähiger und besser). Jaxer stellt dazu ein vollständiges JavaScript-Framework mit zahlreichen Neuerungen und Erweiterungen des JavaScript-Umfangs bereit.

Jaxer kann nativ bereits mit HTML, JavaScript, CSS , XMLHttpRequests, JSON und DOM-Scripting umgehen. Als Erweiterung kann man über den Server aus JavaScript heraus direkt auf Datenbanken, Dateien, Netzwerk, Logging, Prozessmanagement und andere integrierte APIs auf dem Server zugreifen. So etwas kann man bei clientseitigem JavaScript natürlich vollkommen vergessen.

Technisch verwendet Jaxer die JavaScript-Engine aus Firefox. Diese wird aber in einer Server-Version zur Verfügung gestellt. Damit können einzelne JavaScript-Funktionen gezielt auf dem Server, dem Client oder auch verteilt auf Client und Server ausgeführt werden.
Serverseitige JavaScript-Funktionen können auch direkt aus einer Website heraus aufgerufen werden. Und zwar mit minimalem Aufwand, denn dazu ist im Grunde nur eine Codezeile notwendig. Die gesamte die Kommunikation (auch asynchron) wird im Hintergrund von Jaxer erledigt.

Als weitere Features unterstützt Jaxer 1.0 RESTful APIs sowie native Unterstützung für JSON.

Jaxer 1.0 ist wie schon erwähnt Open Source unter der GPL, aber es gibt auch eine kommerzielle Pro-Version.

Jaxer wird als Teil des Aptana Studio 1.2 distributet, kann aber auch als eigenständige Anwendung unter aptana.com/jaxer heruntergeladen werden. Zudem kann man Jaxer kostenlos auf Aptanas Server-Cloud ausprobieren.

Freitag, 31. Oktober 2008

Independenceday

Gestern gab es doch mal wieder den extrem Deutsch-erstellten vollamerikanischen Science Fiction-Knaller. Unterhaltsam sicher, aber total unrealistisch.
Gut - es gibt UFOs. Das ist klar. Aliens unter uns auch. Area 51 ist auch klar.

Alles Tatsachen und kalter Kaffee.

Aber dass man mit einem handelsüblichen Notebook so Mir nichts Dir nichts in das Computersystem eines UFOs eindringen und gar ein Programm respektive Virus da zum Laufen bringt. Ich lach mich ab. Vooooooooolllllllllkkkkkkkkkkoooooooooooommmmmmmmmmen unrealistisch!

Die Leute vom Film haben wohl noch nie versucht einen Rechner in ein fremdes Netzwerk zu integrieren. Glauben die allen Ernstes die Alien arbeiten mit IP-Adressen? Oder Binärsystem? Oder C# bzw. C? Und der Prozessor ist ein Intel? Ha Ha Ha!

Gut - rein theoretisch könnte es Microsoft geschafft haben, dass die Aliens Windows benutzen. Dann wäre die Attacke wiederum leicht. Hm - darüber sollte ich mal weiter nachdenken.

Montag, 27. Oktober 2008

Opera rennt wie der Teufel

Ich habe gerade auf die neue Opera-Version 9.61 upgedatet. Man, der rennt wie der Teufel. Die Seiten werden dermaßen schnell aufgebaut, dass selbst Firefox alt aussieht. Früher war Opera sowieso mein absoluter Lieblingsbrowser. Mit dem Konqueror und vor Allen Dingen Firefox bin ich ihm in der letzten Zeit etwas untreu geworden. Aber ich denke, ich werde wieder mehr auf Opera setzen.
Und letztendlich ist es immer gut, wenn es nebem dem Platzhirsch Firefox Alternativen gibt. Das sorgt dafür, dass auch da keiner träge wird. Wäre ja schlecht für die Entwicklung von Firefox und Verwandschaft, wenn nur das Kanonenfutter IE als Gegner bereitstände.

Mal wieder ein VHS-Kurs

Früher habe ich sehr viel an verschiedenen VHS unterrichtet. Das hat in der letzten Zeit ziemlich nachgelassen. Ich biete weniger Kurse an und zudem fallen insbesondere die Programmierkurse meist aus.
Aber nächsten Samstag halte ich mal wieder einen Tageskurs: Powerpoint in Taunusstein bei der VHS Rheingau-Taunus

Samstag, 25. Oktober 2008

Informationen aus der Silverlight-City: Pay-TV über Internet rückt immer näher

Und noch einmal was aus dem Blog von Otto Fischer: Mit "FoidosChes", kann man bei einer silverlight-basierten Anwendung zur Schach-Liveübertragung, die Schachweltmeisterschaft aus Bonn live miterleben.

Dabei übernimmt der Zuschauer die Kontrolle, indem er zwischen fünf parallelen Video-Streams sowie verschiedenen Kommentatorsprachen wählen kann. Die Kommunikation zwischen Kommentator und Internet-Zuschauer ist über eine Chat-Funktion möglich. Eine Demonstration von FoidosChess ist auf www.foidoschess.tv zu sehen.

Verlosung, Preisausschreiben oder was?

Ich räume gerade mein Büro auf und sortiere Bücher von mir, die ich in Schulungen demnächst nehmen will (z.B. Jetzt lerne ich AJAX von Markt & Technik, ISBN 978-3-8272-4225-9 ).
Dabei fällt mir wieder auf, dass ich mittlerweile unglaublich viele Autorenexemplare von Büchern oder Trainings-DVDs habe. Ich bin massiv am überlegen, ob ich mal wieder eine Verlosung oder ein Preisausschreiben mit diesen Preisen starte.

Mittwoch, 22. Oktober 2008

Viel Bewegung rund um JavaFX

In der letzten Zeit passiert eine ganze Menge in meiner Webseite zu JavaFX, die ich als Begleitinformation zu meinem Buch zu JavaFX führe.
Das überrascht doch mich ziemlich, denn bis vor wenigen Monaten kam JavaFX nicht so richtig in die Gänge. Aber Sun hat die letzte Zeit Einiges nachgelegt, obgleich Vieles noch als Preview oder Beta gehandelt wird.

Letztes ist aber auch ein Problem, wenn man aktuell JavaFX einsetzen will. JavaFX ist m.E. einerseits eine sehr spannende Technologie, andererseits wird da eben noch ziemlich umstrukturiert.
Das betrifft natürlich auch einige Ausführungen in meinem Buch, aber insbesondere die Tools zum Entwicklen von JavaFX.

Es scheint zum Beispiel so zu sein, dass die JavaFX Shell so klammheimlich wieder aus dem Rennen genommen wurde. Der Fokus von der Entwicklung von JavaFX liegt seit einigen Wochen wohl ganz klar auf drei Säulen, von denen man auf jeden Fall auch eine wählen sollte:

1. Eclipse mit dem JavaFX PlugIn
2. NetBeans mit dem JavaFX PlugIn
3. Das neue JavaFX SDK (http://javafx.com/), das aber auch noch zum heutigen Tag als Preview geführt wird.

Ich gehe davon aus, dass die JavaFX Shell für die ersten Versuche mit JavaFX geeignet war, aber nicht weiter entwickelt wurde. Dementsprechend würde ich eben auch dringend dazu raten eine der drei oben genannten Entwicklungstechniken zu verwenden.

Und insbesondere auch über http://javafx.com/ das jeweils aktuelle API zu installieren.

Eine Alternative wäre der openjfx-compiler (https://openjfx-compiler.dev.java.net/). Das erscheint mir - soweit ich mich damit beschäftigt habe - im Grunde eine Art Ablösung für die JavaFX Shell zu sein. So genau blicke ich aber z.Z. ehrlich gesagt noch nicht durch. Ich muss - falls ich endlich mal Zeit habe - mich dringend auch wieder auf den aktuellsten Stand bringen. Der openjfx-compiler ist aber auch noch in einer Betaversion.

Z.Z. warte ich einfach darauf, dass JavaFX endlich mal einen echten Finalstatus hat und dann lohnt sich m.E. wieder eine genauere Beschäftigungen mit dem Tool, dass isch bis dahin durchgesetzt hat.

Und es gibt seit einigen Wochen wie gesagt ein neues SDK (Software Developement Kit) zu JavaFX, das in einem Preview verfügbar ist. Konkret scheint es so zu sein, dass dieses SDK als reine Netbeans-Erweiterung zu sehen ist. Also unmittelbar mit der neuen Version von der Sun-eignen Java-IDE Netbeans synchron geht. Es ist - trotz des Preview-Stadiums - zu empfehlen, für eine JavaFX-Programmierung mit NetBeans auf diese neue Version und das zugehörige JavaFX-Plugin respektive das SDK umzusteigen (natürlich kann man aber auch ohne NetBeans JavaFX programmieren).

Im Konzept der Sprache JavaFX Script gibt es wohl auch ein paar kleinere Entwicklungen bzw. Änderungen gegenüber den bisherigen Versionen. Soweit das bisher einzuschätzen ist, sind dieses Änderungen bzw. Erweiterungen jedoch nicht gravierend, obwohl Sun bei JavaFX Script jetzt teilweise einen etwas anderer Ansatz als bei den ersten Versionen verfolgt.

Es gibt nun Stages und Nodes, die bisher noch nicht so da waren. Gravierend ist, dass man wohl als Kern einer JavaFX-Applikation in der Regel nicht mehr wie bisher ein Frame oder Panel definiert, sondern eine Application.

Ein Grund könnte sein, dass Sun durch die engere Integration von JavaFX in NetBeans diese - nicht zuletzt durch Eclipse in Bedrängnis geratene - IDE wiederbeleben möchte, denn mit NetBeans kann aus einer Application einfach eine Webstart-Anwendung oder ein Applet erzeugt werden (was aber auch schon in den ersten Versionen von JavaFX Script und den frühreren JavaFX-PlugIns für NetBeans möglich war).

Ansonsten scheint JavaFX vom Maketing als auch den Webdemos extrem in Richtung Sivlerlight von Microsoft positioniert zu werden.

Und dann gibt es auch ein Java SE Update. Mit dem neuen Java SE 6 Update 10 verfolgt Sun mehrere Intentionen. Zum einen sollen verschiedene Verbesserungen Applets schneller starten (Stichwort Java Quick Starter). Diese lassen sich in Desktop-Widgets verwandeln. Offensichtlich hat Sun damit Applets immer noch nicht aufgegeben. Im Gegenteil – verschiedene Bestrebungen deuten darauf hin, dass Sun Applets sogar im Rahmen von RIAs reaktivieren will.

Intern wurde das Hochfahren der Java-Runtime so umstrukturiert, dass die mit dem Start einer Anwendung oder eines Applets zusammenhängenden Elemente schneller Ergebnisse produzieren, die auf dem Bildschirm sichtbar sind.

Ein weiteres Merkmal betrifft das Java-Kernel-Konzept. Dabei laden Nutzer in der neuen Version zunächst nur ein Grundgerüst der wichtigsten JRE-Komponenten herunter. Werden von einer Applikation weitere Bestandteile benötigt, werden diese erst später nachgeladen. Das Kernpaket ist nur etwa 4,5 Megabyte groß und reicht für gängige Anwendungen und Applets oftmals bereits aus"
Ein ganz zentraler Kern vom Java SE 6 Update 10 ist auch die Integration von JavaFX für Rich Internet Applications (RIA). Das Release von Java SE 6u10 soll die Deployment-Probleme von JRE und Java-Applikationen beseitigen (es gibt sogar ein neues Deployment Toolkit), die bis dato in Verbindung mit dem Richt-Client-Java die meisten Anwendungen kaum brauchbar machten. Außerdem soll mit Java SE 6u10 die JRE verschlankt werden, wohin gegen JavaFX-Alternativen wie Silverlight und Flash/Flex immer fetter werden. Damit wird Java samt JavaFX zu einer noch wettbewerbsfähigeren Alternative zu anderen RIA-Plattformen.

Sonntag, 19. Oktober 2008

Dauerschulung

Ab morgen halte ich mal wieder Präzenzschulungen vor Ort (eine Art Fachinformatikerausbildung). Zwar nur vor der Haustür - in Wiesbaden -, aber regelmäßig von 9:00 - 16:00 Uhr. Und das über 4 Wochen plus ein paar Nachschlägen. Bin das gar nicht mehr gewohnt, wie ein Angestellter morgens aus dem Haus zu gehen. Wird ne Umstellung nach den letzten Wochen und Monaten, in denen ich hauptsächlich in meinem Büro zuhause gearbeitet habe.

Freitag, 17. Oktober 2008

Wann funktioniert endlich der Internet Explorer?

Ich werde wahnsinnig. Ich programmiere gerade eine komplexere AJAX-RIA. Zum Teil verwende ich Dojo und Prototype als AJAX-Frameworks zur Unterstützung. Sie funktioniert auch in allen relevanten Browsern. Nur der Internet Explorer kapiert es einfach nicht. Ich frage mich, wann Microsoft ihren Krückenbrowser endlich standardkonform bekommt. Ich hatte gewisse Hoffnungen in die neue Version gesetzt, aber wieder mal ist es ein Schuss in den Ofen. Und das Schlimme ist - es gibt immer noch genügenden Anwender, die den IE noch verwenden. Ich kann diese Zielgruppe nicht ignorieren und muss mich an Workarounds für die IE-Fehler machen :-(.

Mittwoch, 15. Oktober 2008

Buchmesse

In früheren Jahren waren meine eigene Verlage auf der Buchmesse in Frankfurt vertreten und damit natürlich auch meine Bücher. Aber seit einigen Jahren haben sie sich von der Messe zurück gezogen. Insgesamt scheinen die EDV-Bücher auf der Messe sowieso stark auf dem Rückzug zu sein. Genau genommen habe ich kaum welche gesehen, denn ich war seit Jahren heute mal wieder auf der Messe. Aber eigentlich nur um einen Geschäftspartner zu treffen, der dort mehrere Tage dort zu tun hat.

Dienstag, 14. Oktober 2008

Endlich sind meine Belegexemplare da

Mensch hat das gedauert. Mein neues Buch zu AJAX-Frameworks ist schon seit September draußen. Aber erst heute habe ich meine Belegexemplare bekommen.

Montag, 13. Oktober 2008

Neues zu Silverlight und Eclipse4LS

Wie Otto Fischer in seinem Blog blog.silverlight-city.de schreibt, wird Mircosoft morgen Silverlight 2 offiziell releasen.

Außerdem gibt es ein OpenSource-Plug-In für Eclipse, (Eclipse4LS), mit man auch unter Eclipse Silverlight-Applikatonen erstellen kann.


Zum Beitrag

Samstag, 11. Oktober 2008

Etwas Werbung in fremder Sache

RIAs sind ja mittlerweile einer meiner Schwerpunkte. Im wesentlichen mit AJAX oder JavaFX sowie einigen Frameworks wie dem GWT, Dojo, Prototype oder dem YUI.
Wenn Sie in eine andere Richtung gehen und moderne RIA (rich interface appliactions) für das Internet oder moderne Handys erstellen wollen, hat Silverlight auch interessantes Potential.
Am leichtesten erschließt sich das Potenital durch eine Schulung. Ich
möchte Ihnen dazu z.B. die Silverlight-Schulung von Otto Fischer ans Herz legen.

Donnerstag, 9. Oktober 2008

Start Onlinekurs Programmieren fürs Web 2.0 mit AJAX

Heute hat mein neuer Onlinekurs Programmieren fürs Web 2.0 mit AJAX bei der Akademie.de begonnen. Nachmeldungen sind noch möglich.

Es geht - wie der Titel unzweifelhaft deutlich macht - um AJAX. Flickr, Del.icio.us und Google Maps machen es vor: Erfolg durch superschnelle AJAX-Anwendungen, die sofort und ohne Seiten-Neuladen auf die Aktionen ihrer Besucher reagieren. Die Technik hinter diesen Web 2.0-Anwendungen? AJAX!

Wie dieses Zusammenspiel in der Praxis funktioniert zeigt dieser AJAX-Crash-Workshop über vier Wochen. Mit mit vielen praktischen Beispielen und Übungen.

- vom Schnelleinstieg ins "Prinzip AJAX"
- über die Kerntechniken von AJAX: (X)HTML, Style Sheets, DHTML und JavaScript
- bis zu anspruchsvollen AJAX-Applikationen mit serverseitiger Programmierung mit PHP

Der Workshop richtet sich an Webentwickler und Programmierer, die schnell und fundiert alle relevanten Techniken samt diverser praktischer Beispiele rund um AJAX kennen lernen wollen. Am Ende des Workshops können Sie anspruchsvolle AJAX-Anwendungen selbst programmieren.

Sonntag, 5. Oktober 2008

Silverlight oder nicht?

Ich beschäftige mich ja schon geraume Zeit mit JavaFX. Zum Einen deshalb, weil ich ja seit etwa 12 Jahren Java programmiere und schule. Zum Anderen, weil JavaFX eine gute Ergänzung zu AJAX darstellt, womit ich mich ja ebenfalls schon ewig beschäftige (weit länger als die Technologien unter dem Modewort AJAX zusammengefasst wurden).

Nun bin ich aber weder Technologieblind noch dokmatisch festgefressen und interessiere mich auch für Technologien jenseits dieses Horizontes.

Erstens bin ich nicht ganz sicher, ob JavaFX wirklich so erfolgreich wird (obwohl ich optimistisch bin) und zweitens bin ich sowieso gerne breiter aufgestellt.

Was also als Alternative zu JavaFX näher betrachten?

Da wäre zum Beispiel AIR.

Oder auch Silverlight von Microsoft. Gerade Letzteres hat natürlich wegen mit Giganten im Hintergrund gewaltiges Potential. Mal sehen.

Wer sich für Infos zu Silverlight interessiert, sollte sich mal den Blog von Otto Fischer unter http://blog.silverlight-city.de ansehen.

Samstag, 4. Oktober 2008

Infektionsbereinigung - Teil 2

So, ich habe zur endgültigen Bereinigung von dem Hackerangriff noch ein Backup von vor dem Angriff eingespielt. Einzig das Backend von meinem CMS ist noch nicht zugänglich. Aber das Problem kann auch andere Ursachen haben. Da gibt es in diversen Foren zu Joomla! einige Hilferufe. Bekomme ich auch noch in der Griff.

Fazit: Leute, nehmt sichere Passworte und haltet die Software immer auf dem neusten Stand. Bisher habe ich das immer nur gepredigt. Jetzt habe ich die Konsequenz erlebt, wenn man da zu lässig ist. Obwohl die Sache bei mir nicht wirklich schlimm war, hat mich die Geschichte unnötig Zeit gekostet, die ich besser für die Programmierung an meinem aktuellen Projekt verwendet hätte.

Infektionsbereinigung

Bin am Bereinigen der Hackerattacke. Mittlerweile habe ich alle Passworte geändert und drei Dateien auf meinem Server entdeckt, die da nix zu suchen haben.

Die eine ist eine CSV-Datei mit irgendwelchen Spamadressen, die wohl von dem Hacker missbraucht werden sollten. Ist ab in den Müll gewandert.

Des Weiteren eine HTML-Datei mit einem rein numerischen Namen. Keine Ahnung wozu die da ist, aber die hat hier auch nix zu suchen und ist gelöscht.

Die eigentliche Attacke ist wohl über eine PHP-Datei gefahren worden. Das scheint tatsächlich ein Toolkit gewesen zu sein. Voll kommentierte PHP-Befehle. Da werden gezielt Schwachstellen im System abgeprüft. Und da die Kommentare auf Englisch drin stehen gehe ich davon aus, dass der Hacker ein Script-Kid war, der nur zusammengeklaubtes Zeug angewendet hat. Vor Hackern und Ihren Ehrenkodex habe ich sogar einen gewissen Respekt, aber nicht vor solchen Trittbrettfahrern. Ich bin stocksauer. Sowohl auf das Möchtegern-Hackerlein, aber auch auf mich, dass mich so ein Schwacheimer überfahren konnte :-( .

Die Umleitung der Inhalte ist letztendlich primitiv. Ein reines document.write() per JavaScript. Zwar sind die Inhalte maskiert und werden erst zur Laufzeit per unescape() dekodiert, aber das stellt mich nun wirklich nicht vor Probleme. Hier greift der Sack mich auf meinem Ureigenen Gebiet an. Ich muss nur noch rausbekommen, wo der Befehl zusammengesetzt wird.

Letztendlich bleibt nur die Frage, wie die Mülldateien auf meinen Server kamen? Ich vermute wirklich Bruteforce. Oder wie gesagt einen Bug in der Betaversion meines CMS. Hab mittlerweile raus, dass da vor einigen Wochen ein Update kam, denn da gab es eine massive Lücke.

Ich denke, meine zentralen Dateien als auch die Datenbank sind von dem Angriff nicht betroffen und ich habe mein System mittlerweile wieder sauber. Aber ein ungutes Gefühl bleibt.

Freitag, 3. Oktober 2008

Private Webseite gehackt :-(

Super. Die Webseite meiner Band wurde gehackt. Irgendein türkischer Kram ist da zu lesen. Wüsste gerne, wie der Hack gelaufen ist. Ob mein Passwort geknackt wurde oder es ein Problem in meinem CMS war. Oder gar auf dem Server.

Ich tippe mal auf mein zu triviales Passwort. Ist wie beim Friseur, die die schlechteste Frisur hat. Ich bin in der Tat zu sorglos mit der Wahl meiner Passworte. So gesehen war diese Attacke eine echte Warnung für mich und ich habe schleunigst meine Passwortsicherheit in allen meinen Systemen und Webseiten verbessert (hoffe ich).

Der Hack könnte aber auch über mein CMS gelaufen sein. Ich verwende für die Seite Joomla 1.5 in ner Betaversion (in meinen "seriösen" Seiten mit CMS verwende ich keine Betaversionen). Vielleicht gibt es auch hier nen Bug. Werde die Attacke zum Anlass nehmen, die Sache neu aufzusetzen.

Insgesamt scheint auf den ersten Blick von der Attacke aber nur meine Indexseite betroffen zu sein.

Dienstag, 30. September 2008

Neues Eclipse-Buch

Das Eclipse-Buch von Patrick Kiwitter, das ich lektoriert habe, ist erschienen.

Sonntag, 28. September 2008

Mal wieder Schulungen

Bin seit längerer Zeit die nächsten 3 Tage mal wieder auf Schulung (JavaScript). Allerdings hier in der Gegend. Z.Z. progammiere ich hauptsächlich eine RIA. Aber ab Mitte Oktober stehen mehrere Wochen Java-Schulungen an. Und nach Graz für ein neues Videotraining will ich auch nochmal. Entweder im Dezember oder im Januar. Parallel muss ich auch ein neues Buch anfangen, aber das hat derzeit noch eine niedrige Priorität-

Dienstag, 23. September 2008

Feedburner - Teil 2

Und gleich hinterher: Mein Portal AJAX-Net.de ist jetzt auch mit seinen Feeds in Feedburner (http://feeds.feedburner.com/PoweredByAjax-netde).
Seltsamer Weise kann ich mein zweites Portal zu JavaFX (http://www.javafx-buch.de/) nicht in Feedburner anmelden. Bei der Analyse gibt es Fehler. Ich vermute es liegt an der Joomla-Version, die ich hier verwende. Das ist noch die Beta von Joomla 1.5. Das AJAX-Portal basiert noch auf der Version 1.0, aber eine Stable-Version.

Feedburner

Ok. Otto hat mich überzeugt. Ich habe meine beiden Blogs http://rjsedv.blogspot.com/ und http://haudichraus.blogspot.com/ zum stärkeren Promoten in Feedburner eingetragen (
http://feeds.feedburner.com/BlogVonRalphSteyer und http://feeds.feedburner.com/IchWillFliegen) und hoffe auf viele Subscribers ;-).

Montag, 22. September 2008

Mal was zu Silverlight

Parallel zu meinen Schwerpunkten AJAX und Java bzw. JavaFX gibt es natürlich noch eine ganze Reihe interessanter Entwicklungen im RIA-Bereich. Nicht zuletzt auch Sivlerlight von Microsoft. Hier sind zwei interessante Beiträge dazu zu finden.
Beitrag 1
Beitrag 2

Onlinetraining mit Ralph Steyer

Onlinetraining mit Ralph Steyer
Onlinetraining mit Ralph Steyer und anderen Autoren bei Video2Brain