Freitag, 30. Januar 2009

Und hier ein kleiner Formulargag mit Scriptaculous für AJAX

Den so genannten In.Place-Editor von Scriptaculous find ich klasse. Klicken Sie mal auf den Text in dem IFrame. Da wird ein normaler Text editierbar ohne die sonst üblichen häßlichen Formulareingabefelder in der Webseite anzuzeigen, wenn der Inhalt nur angezeigt werden soll.





Auch aus meinem Buch Ajax Frameworks








So geht's:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
   <meta http-equiv="Content-Type"
     content="text/html; charset=iso-8859-1" />
   <title>Scriptaculous</title>
   <script type = "text/javascript"
     src="prototype-1.6.0.3.js"></script>
   <script  type="text/javascript"
 src="scriptaculous-js-1.8.2/src/scriptaculous.js"></script>  
 </head>
 <body>
   <h1>AJAX-Anfrage mit Ersetzen eines Textes</h1>
<div id="klickmich">Klick mich an um mich zu bearbeiten und dann zu ersetzen</div>
<script type="text/javascript">
new Ajax.InPlaceEditor('klickmich', 'info.php');
</script>
</body>
</html>

Donnerstag, 29. Januar 2009

Kleiner Dojo-Effekt für die Webseite

Hier ist ne kleine Dojo-Anination für die Webseite.





Aus meinem Buch Ajax Frameworks








So geht's:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
<title>Animationen mit Dojo</title>

<script type="text/javascript" src=
"http://o.aolcdn.com/dojo/1.2/dojo/dojo.xd.js" djconfig=
"parseOnLoad: true, isDebug:false">
</script>
<script type="text/javascript">
//<![CDATA[
     dojo.require("dojo.fx");
     dojo.addOnLoad(function(){
   var anim = dojo.fadeOut({ node: "meineID", duration:5000 });
   var anim2 = dojo.fadeIn({ node: "meineID", duration:6000 });
   dojo.fx.chain([anim,anim2]).play();
     });
//]]>
</script>
</head>
<body>
<h1>Aus- und Einblenden</h1>
<img src="b5.jpg" id="meineID" name="meineID" />
</body>
</html>

Mittwoch, 28. Januar 2009

Wieder zuhause

Bin wieder zuhause. Der Rückflug heute morgen war unmenschlich früh. Schon um 6:20 Uhr ab Graz. Dafür war ich um 9:00 Uhr schon im Büro. Manche Leute haben jeden Tag so eine Anreisezeit zur Arbeit ;-).
Und irgendwie wollen da ganz viele Leute nach Frankfurt. War ausnahmsweise mal ein etwas größerer Jet und im Gegensatz zu sonst nicht von Eurowings, sondern Lufthansa selbst.

Dienstag, 27. Januar 2009

That's it

Fertisch!

Auch das Onlinetraining zu JavaFX Script ist eingespielt. Ist allerdings erheblich umfangreicher geworden als ich geplant hatte. Gibt halt doch ne Menge zu dem Thema zu sagen.

Jetzt noch ein paar Abschlussarbeiten und dann ist mein Job in Graz erledigt. Morgen fliege ich zurück. Dummerweise schon um 6:20 Uhr. Eckelhaft!

Ansonsten gab es auch dieses Mal Filmaufnahmen. Ich musste heute noch zwischenzeitlich ins Filmstudio und musste zu den 4 Trainings was vor der Kamera loslassen. Dachte eigentlich, dass das nur bei DVDs üblich ist. Und ich habe erstmals mit einem Teleprompter gearbeitet, von dem ich meinen Text während der Filmaufnahmen abgelesen habe. Das ist ja tierisch anstrengend.

Sonntag, 25. Januar 2009

Das war der dritte Streich

Ist schon toll. Andere Leute sagen, dass heute Sonntag ist ;-). Aber ich habe nicht viel davon mitbekommen in meinem abgeschlossenen Tonstudio (ohne Fenster). Egal. Das dritte Onlinetraining ist eingespielt und ich bin gut in der Zeit. Bis Dienstagabend muss ich noch ein Training zu JavaFX Script einspielen und bisher habe ich etwa 1,5 Tage pro Training gebraucht.

Samstag, 24. Januar 2009

Nr 2

Das war der zweite Streich. Das Training zum Dojo Toolkit ist eingespielt. Und der dritte Streich folgt sogleich. Ein Training zu Prototype und Scriptaculous.

Freitag, 23. Januar 2009

AJAX-Onlinetraining fertig

Gestern abend habe ich mein erstes Onlinetraining zu AJAX fertig gestellt. Ist etwas länger geworden als geplant, aber das ist ja kein Nachteil. Jetzt ist das Dojo Toolkit dran.

Mittwoch, 21. Januar 2009

Los geht es mit den Videotrainings

Ich bin in Graz bei Video2Brain angekommen und nehme jetzt erst einmal ein Onlinetraining zu AJAX auf. Die Anreise war problemlos, nur hab ich aus dem Flugzeug rein gar nix gesehen. In einer Mittelreihe direkt am Triebwerk gesessen. Egal - kenne die Route ja mittlerweile recht gut ;-).
Ansonsten wohne ich nicht wie sonst in der Trainerwohnung, sondern in einem Hotel. Keine selbstverpflegung möglich, aber zumindest gibt es Frühstück. Sind richtig viele Trainer hier gerade am Aufnehmen.

Dienstag, 20. Januar 2009

Windows 7 - Installation und 1. Eindruck

Ja. Gar nicht schlecht. Ich habe Windows 7 nun in einer VM (VirtualBox) installiert und bin sehr angetan. Die Installation ging absolut problemlos. Und der erste Eindruck ist wirklich ok.

Ich bin gespannt, wie mir das System nach einem tieferen Einblick gefällt.

Windows 7

Ich halte zwar - wie immer wieder betont - Linux für das Betriebssystem, das den besten Kompromiss aus Sicherheit, Benutzerfreundlichkeit und Leistungsfähigkeit bietet (ohne MacOS genau zu kennen, was angeblich ebenso gut sein soll). Aber ich habe auch keine Berührungsängste mit Windows zu arbeiten. Die meisten Versionen von Windows haben durchaus ihre Qualitäten (insbesondere im Massenmarkt) und ich habe weder Zeit noch Lust rein aus dogmatischen Gründen an meinem geliebten Linux zu kleben. Wenn es Sinn macht oder notwendig ist, verwende ich auch Windows. Z.Z ausschließlich XP, denn ältere Versionen sind einfach nicht mehr zeitgemäß. Und dass Hasta la Vista neben ME der größte Flopp der Windows-Reihe ist braucht nicht diskutiert werden.

Aber wenn die ersten Berichte stimmen hat Microsoft aus dem Vista-Disaster gelernt und mit Windows 7 ein gutes System hingelegt, das es seit ein paar Tagen in einer Betaversion zum kostenlosen Download und Test gibt. Die Version soll bis August 2009 laufen. Das Teil muss ich mir unbedingt ansehen und dazu in einer VM installieren. Das soll angeblich recht problemlos gehen.

Hab mir gerade eine Windows Live ID besorgt (leider vor dem Download notwendig) und aktuell lade ich mir gerade das ISO-File. Dazu kommt ein Downloadmanager zum Einsatz. Und der ist in - festhalten - Java geschrieben! Zumindest wenn man die Sache mit Firefox durchzieht. Ich fasse es nicht. Auch Microsoft verliert Berührungsängste ;-). Alles wird gut ;-).

Montag, 19. Januar 2009

Ab nach Graz

Ich fliege mal wieder zu Viedo2Brain nach Graz (am Mittwoch-Morgen). Dort werde ich ab Mittwoch einige Online-Training zu AJAX und AJAX-Frameworks einspielen.

Samstag, 17. Januar 2009

Datenumzug unter erschwerten Bedingungen

Musste beim Datenumzug helfen. Von einem Uralt-Pentium 2 mit Windoof 98 auf einen Neurechner mit Witzda. Ohne Netzwerk oder Internet. Man was eine Aktion.

Der Uraltrechner kommt mit USB-Sticks etc. nicht zurecht und der Neurechner hat natürlich keine Altschnittstellen oder gar ein Diskettenlaufwerk. Ich musste mein Notebook als Zwischenstation verwenden, um die Daten per Diskette vom Altrechner zu sichern und da auf den USB-Stick schieben, den dann der Neurechner nutzen konnte. Der Sch... hat dermaßen Nerven gekostet. Leute - sichert die Daten auf Altrechner rechtzeitig und tauscht Rechner nicht erst nach 10 Jahren aus.

Und ich konnte endlich mal wieder mit Vista arbeiten. War wichtig - ich hatte in der Tat mit dem Gedanken gespielt auf meinem nächsten Rechner Vista zu nehmen. Bin wieder kuriert. Bloß nicht. Nicht dass XP gut ist, aber zumindest nicht so eine Katastrophe wie Witzda. Ich hoffe mal, dass das neue Windows endlich ein guter Wurf wird und damit auch wirklich mit Linux mithalten kann (was ich in ersten Tests gelesen habe, ist ja ganz vielversprechend). Würde gerne dieses Jahr einen neuen Rechner anschaffen, aber nicht mit Wischda. Und Linux werde ich sowieso immer parallel fahren.

Mittwoch, 14. Januar 2009

Minuend - was bitte?

Heute kamen meine Kinder mit einem Lehrplan nach Hause, was Sie bis zum Ende der Grundschule noch alles in Mathematik lernen sollen. Unter anderem tauchte der Begriff Minuend auf. Toll - zwar habe ich 12 Semester Mathematik studiert, aber das Wort ist mir noch nie unter gekommen. Musste gleich mal im Internet suchen, ob es diesen Begriff wirklich gibt oder nur ein Kunstwort der Bildungsmissere ist. Aber anscheindend benutzen Leute diesen Begriff wirklich. Ob es das bringt für die Grundrechenarten Kindern Worte unterzujubeln, die selbst Mathematiker, Bankfachwirte, und weitere Zahlenakkrobaten nicht kennen?

Dienstag, 13. Januar 2009

Weitere Sprachen für den Onlinekurs

Wie schon an anderer Stelle gespostet, programmiere ich derzeit ein Sprachmodul, über das man online Sprachen lernen kann.


Ich habe die RIA so konzipiert, dass die Erweiterung auf neue Sprachen mit relativ geringem Aufwand möglich sein sollte. Nachdem der Englischkurs für Einsteiger seit einigen Tagen im Livetest ist, habe ich gestern mit zwei weiteren Kursen erste Experimente gemacht. Das bedeutet im Wesentlichen, dass jeweils neue Tondateien bereitgestellt werden und eine neue Datenbank hinzukommt. Danach werden ein paar Parameter im Programm angepasst und die Sache sollte gehen. Und in der Tat - die ersten Tests sehen absolut vielversprechend aus. Der Fortgeschrittenenkurs Englisch und der Einsteigerkurs Französisch funktionieren im Groben. Ich muss wahrscheinlich nur noch den Quellcode etwas mehr modularisieren bzw. Texte auslagern und die Texte in der Datenbank an die RIA anpassen - dann sollte es gehen. Wäre super, wenn sich neue Sprachen wirklich so einfach einbauen ließen. Dann hätte ich den Prototypen doch gar nicht so dumm konzipiert (Hoffnung ;-) ).
Für einen kurzen Zeitraum können Sie das Sprachprogramm auch kostenlos testen.

Donnerstag, 8. Januar 2009

JavaFX-Kurs

Ich halte gerade meinen ersten Kurs in JavaFX Script. Zwar habe ich so einen Kurs schon seit einigen Monaten angeboten, aber bisher war die Resonanz null. Aber heute und morgen läuft sozusagen der Prototyp. Es ist auch für mich sehr interessant den aktuellen Stand der Finalversion von JavaFX nochmal im Detail anzusehen und mit den Kenntnissen zu vergleichen, die ich mir auf Grund der Vorversionen erarbeitet hatte.
JavaFX Script ist alles in Allem richtig rund geworden, aber in diversen Details muss man als Java-Programmierer schon ziemlich schlucken. Die Abweichungen zu reinem Java sind teilweise ziemlich heftig.
Dennoch - ich verspreche JavaFX eine durchaus interessante Marktchance. Vor allen Dingen durch die darunter liegenden Java-Basis, die ja praktisch auf jedem Computer und den meisten Customergeräten sowieso vorhanden ist.

Freitag, 2. Januar 2009

RJSKryp for JavaFX

Ich erstelle schon seit Jahren immer wieder verschiedene Varianten von einem Kodierungsprogramm, das ich unter dem Namen RJSKryp laufen lasse.
Mittlerweile gibt es verschiedenste Java-Varianten, die teils mit einer GUI, teils ohne GUI auskommen. Es vor einigen Wochen habe ich ja auch hier im Blog eine neue Version gepostet.




Durch die wachsende Popularität von JavaFX und vor allen Dingen das Erscheinen der Finalversion lag es nun für mich sehr nahe, eine Abwandlung auf Basis von JavaFX zu erstellen.

Die neue Version RJSKryp for JavaFX ist nun ein Kodierungsprogramm für beliebige Dateien, das in wesentlichen Punkten mit JavaFX Script erstellt wird (insbesondere die GUI). Für die konkreten Dateizugriffe wird Java selbst verwendet und es werden auch Swing-Komponenten direkt eingebunden. Man kann hier also auch das direkte Zusammenspiel zwischen JavaFX Script und Java erkennen.

Das Programm verwendet zum Kodieren und Dekodieren von Dateien wie die anderen Varianten einen Verschlüsselungs- und Entschlüsselungalgorithmus, 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.


Hier ist nun ein Webstart-Aufruf für die Applikation
Auruf als Java-Applet über eine neue Webseite

Der Quelltext


RJSKryp.fx


/*
* RJSKryp.fx
*
* Created on 02.01.2009, 11:33:02
*/


package rjskryp;

import java.lang.System;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.ext.swing.SwingButton;
import javafx.ext.swing.SwingHorizontalAlignment;
import javafx.ext.swing.SwingLabel;
import javafx.ext.swing.SwingSlider;
import javafx.ext.swing.SwingTextField;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
import javax.swing.JFileChooser;
import rjskryp.Kodier;

/**
* @author Ralph Steyer - RJS EDV-KnowHow - www.rjs.de
* Kodierungsprogramm mit JavaFX Script
*
* Hauptprogramm - die GUI im Wesentlichen mit JavaFX Script, die Kodierung selbst Java
*
* Das Programm verwendet zum Kodieren und Dekodieren von Dateien einen Verschlüsselungs-
* und Entschlüsselungalgorithmus, 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.
*/

var scale = 1.0;
var color = Color.SILVER;
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [
KeyFrame {
time: 10s
canSkip: true
values: [
scale => -1.0 tween Interpolator.EASEBOTH
color => Color.BLUE
]
}
]
}.play();
var f = new JFileChooser(); // Eine Swing-Komponente aus javax.swing

var label1=SwingLabel {
font:Font{
name:"Tahoma"
size: 25
}
text: "RJSKryp for JavaFX - Version 1.01 - www.rjs.de"
foreground:Color.SILVER
horizontalAlignment:SwingHorizontalAlignment.CENTER
width:600

}

var meinSlider=SwingSlider {
minimum: 0
maximum: 255
value: 3
vertical: false
}

var buttonGruppe=HBox{
spacing: 10
translateY:50
translateX:100
content:[
SwingButton {
text: "Kodieren"
action: function() {
var returnVal = f.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var quelle = f.getSelectedFile();
returnVal = f.showSaveDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var ziel = f.getSelectedFile();
if (ziel.exists()) then {
nachrichten1.text =
"Achtung! Zieldatei schon vorhanden. Vorgang wird abgebrochen";
}
else {
nachrichten1.text ="Verarbeitung läuft";
nachrichten2.text ="";
if (
new Kodier().kodiere(quelle, ziel, true,meinSlider.value) == 0) then {
nachrichten1.text =
"Verarbeitete Datei:\n {quelle}";
nachrichten2.text =
"Erstellte Datei:\n {ziel}";
}
else {
nachrichten1.text="Fehler bei der Verarbeitung";
}
}
}
}
else {
nachrichten1.text ="";
nachrichten2.text ="";

}

}
},
SwingButton {
text: "Dekodieren"
action: function() {
nachrichten1.text ="Verarbeitung läuft";
nachrichten2.text ="";
var returnVal = f.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var quelle = f.getSelectedFile();
returnVal = f.showSaveDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var ziel = f.getSelectedFile();
new Kodier().kodiere(quelle, ziel, false,meinSlider.value);
}
}

}
},
SwingButton {
text: "Ende"
action: function() {
System.exit(0);
}
}
,
meinSlider
]

}
var verschiebung=SwingLabel {
text: bind "Verschiebungsfaktor: {meinSlider.value}"
foreground:Color.SILVER
translateX:400
translateY:80
font:Font{
name:"Tahoma"
size: 12
}
width:300
}
var nachrichten1=SwingTextField {
columns: 10
text: ""
editable: false
translateX:10
translateY:150
foreground:Color.RED
font:Font{
name:"Tahoma"
size: 12
}
width:575
height:20
background:Color.SILVER

}
var nachrichten2=SwingTextField {
columns: 10
text: ""
editable: false
translateX:10
translateY:170
foreground:Color.RED
font:Font{
name:"Tahoma"
size: 12
}
width:575
height:20
background:Color.SILVER

}

Stage {
title: "RJSKryp for JavaFX - Version 1.01 - www.rjs.de"
width: 600
height: 400
scene: Scene {
fill:RadialGradient {
centerX: 375
centerY: 175
radius: 390
proportional: false
stops: [
Stop {
offset: 0.0
color: Color.BLUE},
Stop {
offset: 1.0
color: Color.BLACK}
] // stops

} // RadialGradient
content: [VBox{
spacing: 10
content:[
label1
]
},
buttonGruppe,
verschiebung,
nachrichten1,
nachrichten2,

Text {
translateX:200
translateY:150

font: Font {
size: 14
}
x: 110,
y: 90
textAlignment: TextAlignment.CENTER
content:"RJS EDV-KnowHow\n\nCopyright: Ralph Steyer\nInternet: www.rjs.de - www.javafx-buch.de\nBlog: rjsedv.blogspot.com"
fill: bind color
effect: DropShadow {
offsetX: 10
offsetY:5
color: Color.color(0.2, 0.2, 0.1)
}; // DropShadow
transforms: Scale{
x: 1
y: bind scale
pivotX: 100,
pivotY: 100
} // Scale
} //Text

]
}
visible:true
}


Kodier.java



package rjskryp;

/**
* @author Ralph Steyer - RJS EDV-KnowHow - www.rjs.de
* Kodierungsprogramm mit JavaFX Script
* Java-Klasse zur Bereitstellung der Dateizugriffe und der eigentlichen Kodierung
*/
import java.io.*;

public class Kodier {

/**
* Die Methode zum Kodieren und Dekodieren. 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.
*
* Als Übergabeargumente werden die Quelldatei und Zieldatei sowie ein Flag
* zur Steuerung, ob Kodieren oder Dekodieren, und die Verschiebung
* angegeben
*
* @param quelle2
* zu kodierende oder dekodierende Datei
* @param ziel2
* die Zieldatei mit dem veränderten Inhalt
* @param kodieren
* Angabe ob kodieren (true) oder dekodiern (false)
* @param verschiebung
* Faktor der Verschiebung
*/
public int kodiere(File quelle2, File ziel2, boolean kodieren,
int verschiebung) {
// Erstellen eines Eingabe- und eines
// Ausgabestroms.

// Quelle nur zum Lesen öffnen
RandomAccessFile quelle=null, ziel=null;
try {
quelle = new RandomAccessFile(quelle2, "r");
ziel = new RandomAccessFile(ziel2, "rw");
while (true) {
// Einlesen eines Bytes aus der Quelle
byte b = (byte) quelle.readByte();
/*
* Hier findet die Verschiebung statt. Wir kümmern uns selbst um
* den Wertebereich von dem Datentyp byte, indem wir den
* Modulo-Operator verwenden.
*/
if (kodieren)
b = (byte) ((b + verschiebung));
else
b = (byte) ((b - verschiebung));
// Schreiben eines Bytes in die Zieldatei
ziel.writeByte(b);
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
return 1;
}

// Dateiende der Quelldatei erreicht.
catch (EOFException e) {
try {
quelle.close();
ziel.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

return 0;
} catch (IOException e) {
return 2;
}

}

}

Onlinetraining mit Ralph Steyer

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