Archive for Mai, 2009
Service Pack 2 für Vista und Windows Server 2008 erhältlich

Seit heute steht jedem das Service Pack 2 für Windows Vista und Windows Server 2008 zur Verfügung! Voraussetzung für die Installation ist das Service Pack 1, welches beim WS08 schon integriert ist.

-> Service Pack 2 Vista/WS08 x86
-> Service Pack 2 Vista/WS08 x64

Ich werde heute beginnen die Server nach und nach damit zu bestücken!

Shannon-Fano in Maple

Hier folgt nun meine Implementierung des Shannon-Fano Algorithmus für Maple, die wir bezüglich unseres Mathematik-Praktikums “Tag7″ programmieren sollten!

Aufgabe 1 (Shannon-Fano)
Implementieren Sie einen Algorithmus zur Shannon-Fano Kodierung und berechnen Sie eine Kodierung für das Beispiel 21.1.

Beispiel 21.1: [[a,41],[b,33],[c,23],[d,25],[e,100]]

Prozedur:

restart:
with(GraphTheory):
with(Logic):
with(networks):

##Aus dem Mapleskript zum Sortieren von Listen!
comp2 :=proc(a::list,b::list)
if a[2] < b[2] then true else false fi;
end:

##Der Graph muss vor der Prozedur initialisiert werden!
global G2:
G2:=Digraph():

########################################################################

##Prozedur Shannon-Fano!
ShaFa:=proc(L::listlist)
global prev, ECKE, KANTE, G2;
local i,j,k,l,v,S,Sl,Sr,hauf1,hauf2,hauf3,hauf4,hauf5;

##Sortierung der Liste!
S := sort( L , comp2);

##Lokale Variablen initialisieren!
hauf1:=0;
hauf2:=0;
hauf3:=0;
hauf4:=0;
hauf5:=0;
Sl:={};
Sr:={};
ECKE:={};
KANTE:={};

##Gesamthäufigkeit von S!
i:=1;
while(i<=nops(S)) do
 hauf1:=hauf1+S[i][2];
 i:=i+1;
od:

##Festlegen einer Grenze für die Häufigkeit, damit Sl und Sr ungefähr die gleiche Häufigkeit haben!
hauf3:=((hauf1/2))+(S[nops(S)][2]/nops(S));

##Algorithmus der S in Sl und Sr überführt!
j:=1;
while(j<=nops(S)) do
 hauf2:=hauf2+S[j][2];
 if(hauf2<=hauf3) then
  Sl:=[op(Sl),S[j]];
 fi;
 if(hauf2>hauf3)then
  Sr:=[op(Sr),S[j]];
 fi;
 j:=j+1;
od:
##Kontrolle ob auch alles funktioniert!
print(S);
print(“linkerTeilbaum:”, Sl);
print(“rechterTeilbaum:”, Sr);

##Gesamthäufigkeit von Sl! Wird beim Erstellen der Ecken und Kanten gebraucht!
k:=1;
while(k<=nops(Sl)) do
 hauf4:=hauf4+Sl[k][2];
 k:=k+1;
od:

##Gesamthäufigkeit von Sr! Wird beim Erstellen der Ecken und Kanten gebraucht!
l:=1;
while(l<=nops(Sr)) do
 hauf5:=hauf5+Sr[l][2];
 l:=l+1;
od:

##Welche Ecken sind in G2 vorhanden!
v:=Vertices(G2);

##Wenn nicht in G2, dann initialisiere die Wurzel!
if not member(hauf1, v) then
 ECKE:=[op(ECKE),hauf1];
fi;

##rechter Teilbaum: Fügt entweder eine endgültige Ecke oder eine weitere Ecke hinzu, an der weitere Ecken folgen können!
if(nops(Sr)=1) then
 ECKE:=[op(ECKE),Sr[1][1]];
 KANTE:=[op(KANTE),[hauf1,Sr[1][1]]];
else
 ECKE:=[op(ECKE), hauf5];
 KANTE:=[op(KANTE),[hauf1,hauf5]];
fi;

##linker Teilbaum: Fügt entweder eine endgültige Ecke oder eine weitere Ecke hinzu, an der weitere Ecken folgen können!
if(nops(Sl)=1) then
 ECKE:=[op(ECKE),Sl[1][1]];
 KANTE:=[op(KANTE),[hauf1,Sl[1][1]]];
else
 ECKE:=[op(ECKE),hauf4];
 KANTE:=[op(KANTE),[hauf1,hauf4]];
fi;

##Kontrolle ob auch alles funktioniert!
print(“Ecken:”,ECKE);
print(“Kanten:”,KANTE);

##Die Ecken und Kanten werden dem Graphen G2 hinzugefügt!
G2:=AddVertex(G2,ECKE);
G2:=AddArc(G2, KANTE);

##rekursiver Aufruf bis Sl und Sr =1 sind!
if(nops(Sr)>1) then ShaFa(Sr); fi;
if(nops(Sl)>1) then ShaFa(Sl); fi;

##Rückgabe des Graphen G2 zum Zeichnen!
return G2;

end:

########################################################################

Aufruf:

S:=ShaFa([[a,41],[b,33],[c,23],[d,25],[e,100]]);

Graphzeichnen:

DrawGraph(S);

5. AP 2 Praktikum

Die Aufgabenblätter sind hier zu finden: http://www.gm.fh-koeln.de/~ehses/ap/index.html

Bevor ihr euch die Lösungen anschaut eines vorweg: Die Lösungen dieses Praktikums dienen wirklich nur zum Vergleich oder als Hilfestellung, wenn irgendwo etwas noch hapern sollte im Programmcode.
Ihr müsst, um das Praktikum bestehen zu können, den Zusammenhang der einzelnen Klassen untereinander sowie die Sortier- und Suchalgorithmen verstanden haben und auch mit eigenen Worten im Praktikum erklären können!

Aufgabe 2a:

ConsoleLogger.java:

public final class ConsoleLogger extends AbstractLogger{
 protected void logMsg(String msg, int level) {
  System.out.println(composeLogMsg(msg, level)); 
 }

 public void close() {
  System.out.close();
 } 
}

FileLogger.java:

import java.io.*;

public final class FileLogger extends AbstractLogger{
 private PrintStream uebergabe;

 public FileLogger(String string) throws FileNotFoundException {
  uebergabe = new PrintStream(new FileOutputStream(string));
 }

 protected void logMsg(String msg, int level){
   uebergabe.println(composeLogMsg(msg, level));
 }
 
 public void close() {
  System.out.close();
 } 
}

Aufgabe 3b:

MyArrays.java:

static void merge(int[] src, int[] dest, int lo, int mid, int hi) {
 Log.info(“src :”+arrayToString(src, lo, mid, hi));
 int end_lo=mid;
 int start_hi=mid;
 int srclo=lo;
 int destlo=lo;
       
 while(srclo < end_lo && start_hi < hi){
  if(src[srclo]<src[start_hi]){
   dest[destlo++]=src[srclo++];
  }
  else{
    dest[destlo++]=src[start_hi++];
  }
 }
 while(srclo<end_lo){
  dest[destlo++]=src[srclo++];
 }
 while(start_hi<hi){

  dest[destlo++]=src[start_hi++];
 }
 Log.info(“dest:”+arrayToString(dest, lo, mid, hi));
}
//Hier noch ein dickes Dankeschön an meinen Kommilitonen für den Hinweis, dass noch eine Variable fehlte! Er weiß wer gemeint ist. ;)

public static int binSearch(int[] feld, int x) {
 int start = 0;
 int end = feld.length;
 int middle = (start+end)/2;
    
 while(start<end && feld !=null){
  Log.info(arrayToString(feld, start, middle, end));
  if(x==feld[middle]){
   Log.info(“found at ” + middle);
   return middle;
  }
  else if(x<feld[middle]){

   end = middle;
  }
  else {

   start = middle+1;
  }
  middle = (start+end)/2;      
 }
 Log.info(“not found, return value = ” + -(middle+1));
 return -(middle+1);  
}

FH Party Campus Gummersbach

Am 29.05.2009 ist es endlich wieder soweit am Campus Gummersbach steigt die nächste FH Party! Um 21:00 Uhr gehts in der Werkshalle 33 auf dem Steinmüllergelände los! Weitere Informationen gibt es unter:

-> http://www.fh-party-gm.de/

Windows 7 RC – Truecrypt 6.2

Nun ein weiterer kleiner Bericht zu Windows 7 RC betreffend dem Verschlüsselungstool Truecrypt! Da ich neben meinem Studium noch beruflich unterwegs bin und immer mein Netbook oder mein Notebook bei mir habe, ist es für mich wichtig die HDD’s der beiden Geräte vollständig zu verschlüsseln und mit einer Pre-Boot Authentication zu versehen. Leider musste ich in dem diesem Zusammenhang feststellen das Truecrypt 6.1 mit Windows 7 und dessen Aufteilung der HDD nicht zurecht kam, so dass ich notgedrungen auf Version 6.2 warten musste.
Nachdem ich die neue Version (Release 11.05.2009) heruntergeladen hatte, begrüßte mich bei der Installation ein Popup mit der Information, dass Windows 7 noch nicht offiziell unterstützt wird. Allerdings kommt die neue Version von Truecrypt mit der Aufteilung der HDD zurecht, so dass einer Verschlüsselung nichts mehr im Wege stand. Was soll ich noch dazu sagen außer, dass Truecrypt 6.2 wunderbar unter Windows 7 läuft, bisher traten noch keine Fehler auf!

Die Truecrypt Version auf meinem Notebook hat sogleich auch ein Upgrade erfahren auf Version 6.2 und ich muss sagen, dass nicht nur die Performance für SSD’s optimiert wurde (siehe Releasenotes), sondern auch für HDD’s, soweit ich das subjektiv beurteilen kann.

4. AP 2 Praktikum

Die Aufgabenblätter sind hier zu finden: http://www.gm.fh-koeln.de/~ehses/ap/index.html

Aufgabe 1:

Die Testklassen CircleTest und RectangleTest findet ihr unter Aufgabe 2!

Circle.java:

public class Circle extends AbstractShape{
 
 private double radius;
 
 Circle(String name, double radius){
  super(name);
  this.radius=radius;
 }

 public double getArea(){
  double temp = Math.PI * radius * radius;
  return temp;
 }
   
}

Rectangle.java:

public class Rectangle extends AbstractShape{
 
 private double laenge, breite;
 
 Rectangle(String name, double laenge, double breite){
  super(name);
  this.laenge=laenge;
  this.breite=breite;
 }
 
 public double getArea(){
  double temp = laenge * breite;
  return temp;
 }
}

AbstractShape.java:

public String toString() {
    return getClass().getName()+”.”+ name;
}

Aufgabe 2:

AbstractShapeTest.java:

import junit.framework.TestCase;

public class AbstractShapeTest extends TestCase {
    protected IShape s1;
    protected IShape s2;
    protected IShape s3;

     
    public void testArea() {
        double area13 =  Math.PI * 10.5 * 10.5;
        double area2 =  Math.PI * 11.0 * 11.0;
       
        assertEquals(area13, s1.getArea(), 1e-7);
        assertEquals(area2, s2.getArea(), 1e-7);
        assertEquals(area13, s3.getArea(), 1e-7);
    }

    public void testName() {
        assertEquals(“a”, s1.getName());
        assertEquals(“b”, s2.getName());
        assertEquals(“c”, s3.getName());
    }

    public void testCompare() {
        assertEquals(0, s1.compareTo(s3));
        assertEquals(0, s3.compareTo(s1));
        assertTrue(s1.compareTo(s2) < 0);
        assertTrue(s2.compareTo(s1) > 0);
        assertTrue(s3.compareTo(s2) < 0);
        assertTrue(s2.compareTo(s3) > 0);
    }

    public void testEquals() {
        assertFalse(s1.equals(s2));
        assertFalse(s1.equals(s3));
        assertFalse(s3.equals(s2));
    }

    public void testToString() {
        String className = s1.getClass().getName();
        assertEquals(className+”.a”, s1.toString());
        assertEquals(className+”.b”, s2.toString());
        assertEquals(className+”.c”, s3.toString());
    }
}

CircleTest.java:

public class CircleTest extends AbstractShapeTest {

    public void setUp() {
        s1 = new Circle(“a”, 10.5);
        s2 = new Circle(“b”, 11.0);
        s3 = new Circle(“c”, 10.5);
    }
}

RectangleTest.java:

public class RectangleTest extends AbstractShapeTest {

    public void setUp() {
        s1 = new Rectangle(“a”, Math.PI, 10.5 * 10.5);
        s2 = new Rectangle(“b”, Math.PI, 11.0 * 11.0);
        s3 = new Rectangle(“c”, Math.PI, 10.5 * 10.5);
    }
}

Aufgabe 3:

ShapeNameComparator.java:

import java.util.Comparator;

public class ShapeNameComparator implements Comparator{

 public int compare(Object arg0, Object arg1) {    
  return (((IShape)arg0).getName().compareTo(((IShape)arg1).getName()));
 }
}

Installation von Windows 7 RC auf dem NC10

Nach dem ich mir am 05.05 morgens früh die Imagedatei von Windows 7 RC heruntergeladen hatte, stand für den Nachmittag die Installation auf meinem NC10 von Samsung an. Um das Image bootfähig auf einen USB-Stick zu bekommen, habe ich das Tool “WinSetupFromUSB” in der Version 0.1.1 benutzt, obwohl es schon die Version 0.2.1 gibt. :D
Als erstes sollte man den USB-Stick über den Button “HP format tool” formatieren bevor man zum nächsten Schritt übergeht!

win701

Als nächsten Schritt wählt man das Image, welches man zuvor über ein virtuelles Laufwerk gemountet hat, unter “Vista setup/PE/Recovery ISO” aus!

win702

Zum Abschluss muss man nur noch auf “GO” klicken und warten bis alle Daten auf den USB-Stick überspielt worden sind! Ist der USB-Stick fertig präperiert, kann es auch sogleich schon losgehen!
Bei mir hat die Installation von Windows 7 RC mittels USB-Stick knappe 30 Minuten auf dem NC10 benötigt. Die Geschwindigkeit von Windows 7 RC auf dem NC10 ist mit Windows XP vergleichbar, wenn nicht sogar an mehreren Stellen deutlich schneller, so mein subjektiver Eindruck! Was die Akkulaufzeit angeht, holt der RC 6 1/2 Stunden aus dem NC10 raus. Unter Windows XP waren es zwar 7-8 Stunden, aber was die Neuerungen und die Optik angeht die Windows 7 mit sich bringt, kann man dies ganz gut verschmerzen. ;-) Die Installation der von mir genutzten Software ging problemlos vonstatten, auch wenn der Kompatibilitätsmodus einige wenige Male dazu geschaltet werden musste.

Weitere Erfahrungs- und Testberichte folgen in den nächsten Tagen und Wochen!