Lestard's Blog Software-Development with JavaScript, XUL, Firefox-Addons, XML, Java…

3Dez/110

Talk at the JavaUserGroup Görlitz about JavaServer Faces 2

On November the 30th I gave a talk about "JavaServer Faces 2" and "Context and Dependency Injection (CDI)" at the Java User Group Görlitz. I talked about some of the main features and concepts of JSF2 like ManagedBeans, Facelets and the Expression Language. After that I gave a little introduction to CDI because in my opinion it harmonizes very good with JSF2.

After the talk I developed a little application that uses JSF2 and CDI on the projector. In this application the user can input and store notes. The project uses maven for the dependency management.

You can download the slides and the project here:

veröffentlicht unter: Software, University keine Kommentare
2Mai/110

OSGi and SpringDM workshop for the JavaUserGroup Goerlitz

Last wednesday I have done a workshop for the Java User Group Goerlitz with the topic "OSGi Serviceplatform und Spring DM". The workshop was done in german.

OSGi is a specification for a service-based application framework for Java. While in pure Java you use packages to capsulate code with OSGi you have another abstraction layer called "bundles". These bundles can contain many packages and you can define that the bundle "exports" some of these packages. Other bundles can than "import" these exported packages to use that code.  You can encapsulate different functionalities into different bundles.

One of the main features of OSGi is the ability to load a bundle at runtime. While the hole application is running you can install, update, start, stop or uninstall a bundle. So when you change some code inside a bundle or you fix a bug, the application don't have to be redeployed to get the newly code running.

With Spring DM you can combine the features of OSGi with the Spring framework. This is a great combination to build modular business applications in Java.

Workshop OSGi und Spring DM (pdf)

 

veröffentlicht unter: General, Software, University keine Kommentare
2Okt/101

Space-Konsolen-Shooter in C++

Die letzten zwei Wochen habe ich an einem C'/C++-Kurs an der Hochschule teilgenommen und dabei einiges gelernt. In der zweiten Woche war es angedacht, während der Übungsstunden ein eigenes Projekt in C++ zu entwickeln. Ich habe mich dafür entschieden einen Konsolenbasierten Raumschiff-Shooter zu entwickeln. Man steuert sein Raumschiff und muss ankommende Gegner abschießen. Anfangs kommen nur einzelne Gegner ins Sichtfeld aber im späteren Spielverlauf werden es immer mehr. Der Spieler darf dabei keinen Gegner vorbei lassen und natürlich jeden Zusammenstoß vermeiden.

Screenshot vom Spiel

Screenshot vom Spiel

Entwickelt habe ich das Spiel wie gesagt in C++. Wer sich den Quellcode anschauen möchte, kann dies natürlich gerne tun, da das Spiel wie immer als freie OpenSource-Software zur Verfügung gestellt wird. Leider war ich während der Übung auf die Hochschul-Rechner beschränkt, welche nur mit Windows laufen. Folglich ist das Spiel auf einem Windows-System entwickelt und kompiliert worden. Vermutlich ist es in diesem Zustand nicht unter Linux kompilierbar, da einige Windows-Spezifische Funktionen benutzt wurden. Wenn es die Zeit zulässt, möchte ich aber noch Linux-Kompatibilität sicherstellen.

Download Spiel + Sources

Link zum C-Kurs

veröffentlicht unter: Software, University 1 Kommentar
26Jun/100

Probeklausur Objektorientierte Programmierung

Hier gibt es Lösungsvorschläge für die Probeklausur Objektorientierte Programmierung. Wichtig: Alle Angaben ohne Gewehr. Das ist lediglich die Lösung, wie ich sie in der Klausur gemacht hätte, ob diese Lösung 100% richtig oder mit den Vorstellungen von Prof. Ringwelski übereinstimmt, weiss ich nicht.

25Jun/100

C, Eclipse, JNI und Musikabspielen

Wie in der Übung versprochen, hier nochmal die Anleitung für Eclipse und C

1Apr/100

Beispielprogramm aus der Vorlesung

Wie Versprochen hier das Programm, welches ich in der Vorlesung vorprogrammiert hatte. Ich habe an allen Relevanten Stellen Kommentare hinzugefügt. Für einen ersten Einstieg sollte es also sicherlich eine kleine Hilfe sein.

Für Fragen dazu ist wie immer in der Übung Gelegenheit oder auch hier in den Kommentaren.

BeispielProgramm GUI

Viel Spaß beim Lesen, (hoffentlich) Verstehen und Nachprogrammieren.

21Jan/100

CD-Verleih

Hier ein paar Quellcode-Ausschnitte aus dem CD-Verleih-Programm aus der Übung.

15Jan/101

Aus der Vorlesung: BruchArithmetik und ObjektOrientierung

Hier wie versprochen der Quellcode zum BruchArithmetik-Programm, welches ich in der Vorlesung erarbeitet habe.

Die Klassen für die Operationen

[java]
package Bruch2;

public class Addition implements BruchOperation {

Bruch b1;
Bruch b2;

public Addition(Bruch temp1, Bruch temp2){
this.b1 = temp1;
this.b2 = temp2;
}

public Addition(){
this.b1 = new Bruch();
this.b2 = new Bruch();
}

public Bruch ausfuehren(){
Bruch b3 = new Bruch();

b3.setZaehler(b1.getZaehler() * b2.getNenner() + b2.getZaehler() * b1.getNenner());
b3.setNenner(b1.getNenner() * b2.getNenner());

return b3;
}
}
[/java]

[java]
package Bruch2;

public class Subtraktion implements BruchOperation{

Bruch b1;
Bruch b2;

public Subtraktion(){
this.b1 = new Bruch();
this.b2 = new Bruch();
}

public Subtraktion(Bruch b1, Bruch b2){
this.b1 = b1;
this.b1 = b2;
}

public Bruch ausfuehren(){
Bruch b3 = new Bruch();

b3.setZaehler(b1.getZaehler() * b2.getNenner()  - b2.getZaehler() * b1.getNenner());
b3.setNenner(b1.getNenner() * b2.getNenner());

return b3;
}
}
[/java]

[java]
package Bruch2;

public class Multiplikation implements BruchOperation {
Bruch b1;
Bruch b2;
Bruch b3;

public Multiplikation(Bruch b1, Bruch b2){
this.b1 = b1;
this.b2 = b2;
this.b3 = new Bruch(1,1);
}

public Bruch ausfuehren(){
b3.setZaehler(b1.getZaehler() * b2.getZaehler());
b3.setNenner(b1.getNenner() * b2.getNenner());
return b3;
}
}
[/java]

[java]
package Bruch2;

public class Division implements BruchOperation{
Bruch b1;
Bruch b2;
Bruch b3;

public Division(Bruch b1, Bruch b2){
this.b1 = b1;
this.b2 = b2;
this.b3 = new Bruch(1,1);
}

public Bruch ausfuehren(){

b3.setZaehler( b1.getZaehler() * b2.getNenner());
b3.setNenner(b1.getNenner() * b2.getZaehler());
return b3;
}
}
[/java]

[java]
package Bruch2;

public class Kuerzen {
Bruch b1;
Bruch b3;

public Kuerzen(Bruch b1){
this.b1 = b1;
this.b3 = new Bruch(1,1);
}

public Bruch ausfuehren() {
int temp;
int a = b1.getZaehler();
int b = b1.getNenner();

while(b != 0){
temp = a % b;
a = b;
b = temp;
}

b3.setZaehler(b1.getZaehler() / a);
b3.setNenner(b1.getNenner() /a);

if(b3.getNenner() == 0){
System.out.println("Fehler: Division durch Null");
return null;
}else{
return b3;
}
}
}
[/java]

Die Klasse Bruch

[java]
package Bruch2;

public class Bruch {
private int zaehler;
private int nenner;

public Bruch(){
zaehler = 1;
nenner = 1;
}

public Bruch(int zaehler, int nenner){
this.nenner = nenner;
this.zaehler = zaehler;
}

public void setZaehler(int temp){
this.zaehler = temp;
}

public int getZaehler(){
return this.zaehler;
}

public void setNenner(int temp){
this.nenner = temp;
}

public int getNenner(){
return nenner;
}
}
[/java]

Die Klasse BruchRechner mit der Main-Methode

[java]
package Bruch2;

public class BruchRechner {
public static void main(String[] args) {
System.out.println("Bruchrechner");
String operation = args[0];

int z1 = Integer.parseInt(args[1]);
int n1 = Integer.parseInt(args[2]);
int z2 = Integer.parseInt(args[3]);
int n2 = Integer.parseInt(args[4]);

Bruch b1 = new Bruch(z1,n1);
Bruch b2 = new Bruch(z2,n2);
Bruch b3 = new Bruch();

//Instanziiere eine BruchOperation und binde die konkrete Operation dynamisch mit hilfe der Methode welcheOperation
BruchOperation op = welcheOperation(operation, b1, b2);

//Führe die Operation aus und lege das Ergebnis in b3 ab
b3 = op.ausfuehren();

Kuerzen kurz = new Kuerzen(b3);
b3 = kurz.ausfuehren();

System.out.println("Bruch1 = " + b1.getZaehler() + "/" + b1.getNenner());
System.out.println("Bruch2 = " + b2.getZaehler() + "/" + b2.getNenner());
System.out.println("Ergebnis = " + b3.getZaehler() + "/" + b3.getNenner());

}

//Methode bindet die Konkrete Operation dynamisch und gibt die BruchOperation zurück
static public BruchOperation welcheOperation(String operation, Bruch b1, Bruch b2){

//Deklariere die BruchOperation und belege diese mit null vor. Das ist notwendig, da durch die IF-Bedingungen nicht zweifelsfrei ausgeschlossen werden kann,
//dass überhaupt eine Operation gebunden wird. Falls keiner der abgefragten Fälle eintritt, muss "op" trotzdem instanziiert sein, damit der Compiler keinen Fehler bringt
BruchOperation op = null;

//Schau nach, welche Operation konkret eingegeben wurde und Binde dynamisch die entsprechende Operation an "op". Damit wird jeweils der korrekte Contructor aufgerufen.

if(operation.equals("add")){
op = new Addition(b1,b2);
}

if(operation.equals("sub")){
op = new Subtraktion(b1,b2);
}

if(operation.equals("div")){
op = new Division(b1,b2);
}

if(operation.equals("mul")){
op = new Multiplikation(b1,b2);
}

return op;
}
}
[/java]

Zum Schluss das Interface BruchOperation. Dieses wird von allen Operationen implementiert.

[java]
package Bruch2;

public interface BruchOperation {

//Jede Klasse, die das Interface implementiert, muss diese Methode besitzen
public Bruch ausfuehren();

}
[/java]

Falls zu dem Programm noch Fragen offen sein sollten, so können diese gerne in den Kommentaren gestellt werden oder natürlich zur nächsten Übungsstunde.

7Dez/090

Vortrag XUL bei der LinuxUserGroup

Für die LinuxUserGroup an der Hochschule habe ich einen Vortrag zum Thema XUL und Entwicklung von Anwendungen auf Basis des MozillaApplicationFrameworks sowie Erstellung von Plugins für den Firefox gehalten.

Die Vortragsfolien sind mit xhtml, css und JavaScript erstellt und können deshalb auch direkt im Internet angeschaut werden. Ich hab die Folien hier verlinkt: Vortrag XUL

Nebenbei bemerkt: Die Folien entsprechen beispielhaft dem, was mit meinem geplanten Programm "XULSlides" (Siehe Kategorie:Software) erstellbar sein wird. Diese Folien hier habe ich per Hand geschrieben jedoch soll es in Zukunft möglich sein, soetwas mit meinem Programm auf einfache Weise erstellen zu lassen.

veröffentlicht unter: University, xmlslides keine Kommentare
7Nov/091

Hochschul-Cluster

Im Rahmen eines Forschungsprojekts an der Hochschule Zittau/Görlitz beschäftigen wir uns mit der Einrichtung, Installation und Konfiguration eines Cluster-Computers zu Lehr- und Forschungszwecken. Als Hardware-Grundlage dienen uns dabei 10 Minicomputer mit Intel-Atom-Prozessor, je 2GB Arbeitsspeicher und jeweils 300 GB Festplatte. Die Technik hat uns die Hochschule finanziert.

Die 10 Computer sind aktuell über reguläre Netzwerk-Kabel in einem geswitchten Netzwerk miteinander verbunden. Als Software versuchen wir vorwiegend Freie Software einzusetzen. Als Betriebssystem kommt Debian-Linux zum Einsatz.

Zur Entwicklung von verteilter Software ist aktuell auf allen Maschinen eine Java-VM installiert. In einem regulären Studienprojekt befassen wir uns aktuell mit der Anpassung einer Data-Mining-Software um diese parallelisiert auf dem Cluster auszuführen.

veröffentlicht unter: University 1 Kommentar

WP SlimStat