Windows defekt :-(

Oh man,

jetzt startet mein Windoof gar nicht mehr. Ohne Meldung. Weder der abgesicherte Modus, noch die letzte bekannte Konfiguration noch sonst was. Keine Ahnung was da kaputt ist. Zum Glück habe ich die Daten gesichert und komme zudem über das parallel installierte Linux an die Partition. Aber lästig ist das dennoch, wenn ich den gesamten Windows-Kram wieder neu aufsetzen muss :-(.

Polnisch ohne Mühe ist fertig


Man, war das eine Arbeit mit den Sonderzeichen. Von wegen – „Wie beim Bretzelbacken“. So einfach die Integration der verschiedenen Westeuropäischen Sprachen in das Sprachmodul war, so schwer wird das mit den Osteuropäischen Sprachen. Die Migration der zugrundeliegenden Access-Datenbank geht nur von Hand, da wohl der JDBC-ODBC-Treiber von Sun nicht Unicode-fähig ist. Und den verwendet sowohl das Migrationstool, das ich bisher verwendet habe als auch mein zwischenzeitlich selbst geschriebenes Java-Tool zur Migration. Bis ich das rausgefunden hatte, war schon ein Tag vergangen. Also muss ich bereits die Datenbank von Hand in MySQL migrieren. Mühsam, mühsam. Zudem hat die zugrundeliegende Access-Datenbank so diverse Bugs, die ich erst beseitigen muss 🙁

Aber die Arbeit geht weiter. Ich habe massive Probleme, um die sprachspezifischen Sonderzeichen gemeinsam mit deutschen Zeichen in der Datenbank zu verwalten. UTF-8 und Unicode bzw. Kollation hin oder her. Deshalb maskiere ich die deutschen als auch fremdsprachigen Sonderzeichen allesamt. Auch sehr aufwändig, aber in Hinsicht auf die Darstellung in der Webseite sowieso die sicherste Variante.

Insgesamt eine langwierige Angelegenheit, aber ich komme zumindest zum Erfolg.

Unter https://fremdsprachen.cspcampus.de/ ist Polnisch ohne Mühe online und muss nur noch getestet und freigeschaltet werden. Dazu sind unter anderem die folgenden Sprachen verfügbar:

Wie erwähnt – der Leistungsumfang eines Kurses umfasst jeweils einen

  • Onlinezugang zu allen Funktionen des Standard-Selbstlernsprachkurses für 9 Monate (das ist der Teil, den ich jeweils neu erstelle).
  • Lernmaterialien, bestehend aus Lehrbuch und Audio-Files des Kurses auf CD.
  • Die Lernmaterialien gibt es alternativ auch mit MP3-Files für MP3-Player.

Decken Sie doch gleich für 2 Personen mehr

Denn nach der sogenannten Wunschliste des Innenministeriums werden demnächst 2 „Verfassungsschützer“ permanent bei Ihnen am Esstisch sitzen ;-(. Jeder soll ja rund um die Uhr überwacht werden und dieses Leute müssen ja auch verpflegt werden. Fragt sich nur, ob man die Mehrkosten für die Verpflegung von der Steuer absetzen kann.

Aber ein Spass ist das nicht. Diese Wünsche des IM und der Geheimdienste lesen sich wie ein Horrorszenario gegen die Freiheit.

Finnisch ohne Mühe

Das geht mittlerweile mit der Integration neuer Sprachen ja wie beim Bretzelbacken.


Es zeigt sich immer mehr, dass meine Konzeption und Programmierung des Sprachmoduls zwei sich wohl wiedersprechende Fassetten zur Folge hat:

  1. Das gesamte Programm ist ziemlich starr und unflexibel, da Datenbank, serverseitige Programmierung und clientseitige Programmierung extrem in einander verwoben sind. Insbesondere steckt Logik bereits in der Datenbank. Das beruht aber darauf, dass ich die Kurse ja bereits auf CD mit einer Access-Datenbank beziehe und diese Datenbank erst einmal ohne große Änderung in das MySQL-DBMS importiere und dort dann die zusätzliche Steuerlogik integriere sowie ein paar notwendigen Anpassungen im Quellcode durchführe.
  2. Das Konzept und die Arbeitsabläufe zur Integration neuer Sprachen auf Basis dieser bereits auf CD vorhandenen und mit dem Onlinekurs zusammen vertriebenen Kurse ist (für mich) wahnsinnig schnell möglich und faszinierend sicher als auch unproblematisch. Im Quellcode müssen nur die Inkosistenzen zwischen den verschiedenen Kursen ausgeglichen und ein paar Konstanten angepasst werden. Die Anpassungen in der jeweiligen Datenbank dauern auch kaum mehr als eine Stunde. Und die super Integrationsmöglichkeiten wiegen die Nachteile der Unflexibilität bei Weitem auf.

Unter https://fremdsprachen.cspcampus.de/ ist Finnisch ohne Mühe online. In Kürze werden dieser Kurs als auch Dänisch ohne Mühe (sowie die noch folgenden Sprachen Ungarisch, Polnisch, Norwegisch, …) im Shop unter hier freigegeben. Dort finden Sie derzeit schon

Wie erwähnt – der Leistungsumfang eines Kurses umfasst jeweils einen

  • Onlinezugang zu allen Funktionen des Standard-Selbstlernsprachkurses für 9 Monate (das ist der Teil, den ich jeweils neu erstelle).
  • Lernmaterialien, bestehend aus Lehrbuch und Audio-Files des Kurses auf CD – die CD nutze ich als Basis, aber ein Lernender kann auch das Desktop-Programm verwenden – aber ehrlich gesagt – meine Webvariante ist besser 😉 .
  • Die Lernmaterialien gibt es alternativ auch mit MP3-Files für MP3-Player.

Dänisch ohne Mühe


Ich bin mal wieder an die Weiterentwicklung meines Sprachenprogramms zum online Lernen von Fremdsprachen gegangen. Dänisch ohne Mühe ist online und muss nur noch getestet werden. Den Shop für die fertigen und freigegebenen Sprachen finden Sie hier. Der Leistungsumfang eines Kurses umfasst jeweils einen

  • Onlinezugang zu allen Funktionen des Standard-Selbstlernsprachkurses für 9 Monate.
  • Lernmaterialien, bestehend aus Lehrbuch und Audio-Files des Kurses auf CD.
  • Die Lernmaterialien können wahlweise auch mit MP3-Files bestellt werden.

Ich lach mich weg – Twitter soll die Wahl vom Wochenende beeinflusst haben

Twitter hat es heute in die Nachrichten der meisten TV-Sender geschafft. Und das mit einem solchen Bullshit, dass ich mich weglache. Angeblich hat da ein CDU-Abgeordneter (oder sonst wer) 90 Minuten vor Schließung der Wahllokale irgendwelche „Prognosen“ (oder Kaffeesatzzahlen) in Twitter gepostet und jetzt schreit alles Zeter und Mord.

Ja gibt es denn nichts Wichtiges? Wie viele Leute erreicht denn der durchschnittlicher Twitterer? 0? oder sind es doch 1 – 2 Follower? Und wenn der Geheimnisverräter wirklich populär ist und 20 Follower hat – wieviele Leute haben dann nochmal auf Grund dieser Zahlenraterei über Ihre Wahl nachgedacht? 2? oder waren es 3? Ich tippe mal, dass 1 Wähler sich dann tatsächlich umentschieden hat. Und jetzt reden die von Wahlanfechtung. Und neuen Verboten. Man – wann kapieren die Politiker und auch manche Medien denn, dass das Interent nix mehr mit der zensierten häppchenweisen Information der Vergangenheit zu tun hat? Und man sollte die Kirche im Dorf lassen und nicht glauben, dass diese Zahlen in Twitter auch nur halbwegs die Wirkung gehabt hätten wie ein Interview mit einem Dorfbürgermeister im lokalen Radiosender, was er denn gewählt hat.

Twitter-Client mit jQuery


Da ich ja aktuell ziemlich viel mit jQuery mache, habe ich ein weiteres jQuery-PlugIn erstellt. Einen Twitter-Client, den man sich beliebig in die eigene Webseite einbauen kann. Entweder um fremde Tweets von Leuten, die einen interessieren, als Content darzustellen oder – und das halte ich für interessanter – von überall seine eigenen Tweets unmittelbar in der Webseite darzustellen. Und das ganz ohne die Webseite anzupassen oder ein schwergewichtiges CMS verwenden zu müssen.

Das PlugIn operiert explizit auf der Struktur der Twitter-Tweets und verwendet das JSON-Format. Genau genommen wird JSONP verwendet, um direkt auf den Twitter-Server zugreifen zu können.

Das PlugIn ist hochanpassbar. Folgende Optionen kann ein Anwender individuell einstellen, wenn das PlugIn in die Webseite eingebaut wird:
• Die Hintergrundfarbe als CSS-Wert
• Die Vordergrundfarbe als CSS-Wert
• Die Schriftart als CSS-Wert
• Die Schriftgröße als CSS-Wert
• Ob der Name angezeigt wird oder nicht
• Ob der Screename angezeigt wird oder nicht
• Die Anzahl der angezeigten
• Auswahl des Screenames des Autors – darüber kann jeder beliebige Twitter-Autor angegeben werden, wenn die Tweeds frei zugänglich sind
• Ob ID angezeigt wird oder nicht
• Ob das Bild angezeigt wird, wenn eines vorhanden ist

Hier ist ein Live-Demo (auf der rechten Seite der Website)

Um das PlugIn zu verwenden referenzieren Sie https://rjs.de/jquery/jquery.rjstwitter.js.

Oder Sie laden die Bibliothek über https://rjs.de/jquery/jquery.rjstwitter.zip„.

Genauere Informationen zur Verwendung, Licence, etc. gibt es unter https://rjs.de/jquery/index.php

jQuery-Plugins

Hab heute ein jQuery-Plugin erstellt und auf der offiziellen Seite von jQuery veröffentlicht.

DragWithStatus

Die Idee der Funktionalität von diesem Plugin ist sehr einfach. Die Anwendung der Methode dragwithstatus() macht ein Element oder eine Gruppe an Elementen in der Webseite verschiebbar. Soweit ist das nur eine Funktionalität, die bereits eine Standardmethode von jQuery bereitstellt.

Mein PlugIn wird jedoch diese Funktionalität erweitern. Zum einen wird jedes verschiebbar Element auf Wunsch mit einem Rahmen gekennzeichnet und zudem wird auf Wunsch der Mauszeiger verändert, wenn er über ein verschiebbares Element bewegt wird.
Nun ist ein weiteres Feature unseres PlugIns, dass das verschobene Element transparent gesetzt werden kann, während die Positionsänderung aktiv ist.

In der Statuszeile des Browser kann das PlugIn desweiteren laufend aktualisierte Informationen anzeigen, während der Anwender ein Objekt mit der Maus verschiebt. Und zwar die X- und Y-Koordinaten des verschobenen Objektes.

Na gut – dann twittere ich eben auch

Hab mir gerade auch einen Twitter-Zugang zugelegt. Warum? Ich brauche ihn für ein paar Experimente, die ich mit jQuery durchführe.

Ob mein Gezwitscher da irgendjemand interessiert? Keine Ahnung. Gerade vorgestern gelesen, dass Twitter maßlos überschätzt würde. Höchstens 3% aller Internet-User würden damit erreicht. Und die absolute Maße aller Twitter-User wären nur Karteileichen. Ein paar Tweeds und das war es. Überhaupt hätten 99,9% aller Twitter-User 0 Follower. Und zu guter Letzt würden Twitter sowieso nur EDV-Leute nutzen.

Denke, dass ich die Aussagen so unterstützten würde. Aber egal – mal ein bisschen damit spielen, die Spielereien für die Programmierung von einem Widget nutzen und dann ab zu den Karteileichen ;-).

Wer will kann ja mal rjsedv folgen 🙂

Neuer Zeitungsbeitrag

Im Magazin PHP User Vol. 3 vom Software&Support-Verlag (für den schreibe ich in diversen Magazinen und auch schon ein paar Bücher von mir sind da erschienen) ist ein neuer Artikel von mir erschienen. 6 Seiten zum Thema Google Maps & Co. Nur sind da 2 Bugs reingerutscht – ich habe einmal an einer Stelle den Vornamen „Manfred“ bekommen und zudem ist im Inhaltsverzeichnis der Untertitel von einem anderen Beitrag unter meinen gerutscht. Naja – ist ein neues Magazin und das wird schon 😉

C#-Schulung

Halte aktuell eine C#-Schulung. C# und .NET sind nicht ganz meine Welt, aber im Grunde ist das nur eine Java-Schulung mit teils etwas seltsamer Syntax, falschen Namenskonventionen und recht kruxen Sonderheiten ;-).

Aber die Schulung macht Spass.

Trojaner im System??

Hab mal wieder seit langer Zeit eine Warnung von meinem Antivirenprogramm erhalten 🙁 – die 2. in dem Jahr und vielleicht die 5. oder 6. überhaupt – bleibe bisher weitgehend davon verschont – toi, toi, toi. Angeblich habe ich einen Trojaner eingefangen. Wobei ich mir das eigentlich nicht vorstellen kann. Meine Start-Exe von Eclipse sollte befallen sein. Aber deren Metadaten sind korrekt gewesen. Weder die Größe noch das Dateidatum haben sich geändert. Auch kam die Meldung komischer Weise beim Versuch eine PHP-Datei mit dem Kontextmenü zu öffnen. Aber zur Sicherheit hab ich das Antivirenprogramm mal sein Ding machenlassen.

Es ist halt wie es ist – wenn es ginge, würde ich nur unter Linux arbeiten.

Kritische Probleme im Internet Explorer

Wieder einmal gibt es eine kritische Sicherheitslücke im Internet Explorer unter Windows XP und Server 2003. Windows Vista sowie Windows Server 2008 sind zwar offiziell nicht betroffen, aber zur Sicherheit sollte man auch dort aufpassen.
Denn wie schon so oft können Angreifer via dieser Lücke Zugriff auf das Clientsystem erlangen, wenn ein Anwender auf eine entsprechend präperiterte Webseite surft. Und so neu die Lücke ist – sie wird wohl schon massiv ausgenutzt. Das Problem liegt an der Datei msvidctl.dll des Video-ActiveX-Control-Moduls und es gibt aktuell noch kein Sicherheitspatch.

Die wichtigsten Neuerungen von JavaFX 1.2

Nachdem sich die Einführung von JavaFX von den ersten Vorversionen bis zu Finalversion 1.0 relativ lange hingezogen hat, haben die ersten Releasewechsel von der Version 1.0 bis zur Version 1.2 nur extrem kurz gedauert.

Diese Releasewechsel sind aber fast vollständig abwärtskompatibel, was man bei den Wechseln der Preversionen und besonders hin zur ersten Finalversion nicht behaupten kann.

Version 1.2 erweitert nun JavaFX hauptsächlich um einige Layout-Klassen und strukturiert das API in einigen Bereichen etwas um. Das ist aber vollkommen unkritisch.

Hier sind die aus meiner Sicht beiden wichtigsten Neuerungen von JavaFX 1.2 nochmal ausführlich aufgelistet. Insbesondere diejenigen, die auch jenseits spezieller bzw. erweiterter Programmierung Relevanz haben.

Mehrfachvererbung-Light über Mixins
Die m.E. wichtigste Erweiterung gleicht zuerst – Mixins. Grundsätzlich hat sich über die Jahre die Mehrfachverbung in der objektorientierten Programmierung als extrem kritisch herauskristalisiert. Nicht umsonst haben neuere objektorientierte Sprachen wie Java oder C# auf Mehrfachvererbung verzichtet.

In den ersten Versionen von JavaFX Script hat Sun jedoch wieder auf Mehrfachvererbung gesetzt. Das war aber auf Grund der sehr eingeschränkten Funkionalität von Funktionen/Operationen und der an Prototyping orientierten Umsetzung von Methoden relativ unkritisch.

Nichts desto trotzwurde Mehrfachvererbung in der Finalversion 1.0 von JavaFX Script explizit abgeschafft. Auch in der Version 1.1 gab es keine Mehrfachvererbung.

In der Version 1.2 wurde diese jedoch nun durch die Hintertür wieder – stark entschärft – reaktiviert. Offiziell gilt zwar immer noch, dass JavaFX nur Einfachvererbung unterstüzt, aber es gibt nun das Konzept der mixin-Klassen.

Mixins unterscheiden sich von normalen Klassen nur durch das Schlüsselwort mixin, das in der Deklaration auftaucht.

* So eine Klasse kann nicht direkt instanziert werden, dient aber als Superklasse (das kennt man ja von abstrakten Klassen).
* Eine mixin-Klasse kann auch abstrakte Methoden enthalten, die dann in der Subklasse überschrieben werden müssen, wenn diese nicht abstrakt sein soll.
* Und eine andere Klasse kann von beliebig vielen Mixins abgeleitet werden. Und dazu noch von maximal einer echten Klasse

Beispiel:
public mixin class A {

public var antwort_1 = „Die Antwort ist „;

}

public mixin class B {

public var antwort_2 = 42;

public abstract function gibMirDieAntwort():String;

}

public class C {

public var frage = „Aber wie lautet die Frage?“;

}

public class Anhalter extends C, A, B {

public override function gibMirDieAntwort():String {
return „{antwort_1}{antwort_2}“;
}

}

var o = new Anhalter();
println(o.gibMirDieAntwort());
println(o.frage);

Und das ist die Ausgabe:

Die Antwort ist 42
Aber wie lautet die Frage?

Ein Problem gibt es jetzt noch, wenn aus verschiedenen Mixins identische Bezeichner für Funktionen oder Variablen vererbt werden. Das System verwendet die zuerst vererbte Variante! Also von der zuerst hinter extends notierten Klasse.

In gewisser Weise kann man also – innerhalb sehr strenger und einfacher Regeln – wieder von Mehrfachvererbung in JavaFX sprechen. Das Mixim- Konzept interpretiere ich als einen Zwitter zwischen (dem in JavaFX fehlenden) Schnittstellenkonzept und (eingeschränkter) echter Mehrfachvererbung.

Ich persönlich stelle mir ernsthaft die Frage, ob man so eine mehrfache Vererbung-Light wirklich benötigt? Ich bin zwiegespalten. Aber das Konzept schafft schon eine erhebliche Vereinfachung.

Native Arrays

JavaFX hat ja gegenüber Java das Konzept der Arrays bzw. allgemein Datenfeld-ähnlicher Konstrukte erheblich verändert und arbeitet mit so genannten Sequenzen. Diese haben so ihre ganz besonderen Eigenheiten (etwa das Einfügen von Elementen mit insert oder das Löschen mit delete).

Mit den neu ergänzten nativen Arrays kann man nur unter JavaFX Script auch echte Java-Arrays erzeugen. Im Wesentlichen soll damit der Datenaustausch zwischen Java und JavaFX vereinfacht werden.

Native Arrays werden mit dem Schlüsselwort nativearray deklariert.

Beispiel:

var ints : nativearray of Integer = [1..100] as nativearray of Integer;
for (i in ints) println(i);

Die vollständige Beschreibung der Änderungen finden Sie unter https://www.javafx.com/docs/articles/javafx1-2.jsp .