Mittwoch, 15. Dezember 2010

Dezember 2010 / Normalisierung

Normalisierung


Im Modul 104 - Datenmodell erstellen und implementieren befassen wir uns mit der Planung und Erstellung von Datenbanken.
Nun haben wir uns dem Thema Normalisierung gewitmet.
Im Fachdeutsch bedeutet die Normalisierung die schrittweise Zerlegung von Relationen, um Redundanzen innerhalb eines Datenschemas zu vermeiden.
In meinen eigenen Worten würde ich die Normalisierung so beschreiben:
Die Normalisierung ist ein Vorgehen, mit welchem man überprüfen kann, ob die Tabellen und Beziehung korrekt sind. Entsprechen Sie nicht den vorgegebenen Richtlinien, werden Sie korrigiert.
Das Ziel der gesamten Normalisierung ist es, die Kosistenz der Datenbank zu erhöhen und so Fehlerquellen zu verringern.
Sie wird bei der Plangung der Datenbank durchgeführt.
Die Normalisierung besteht aus 6 Normalformen, wovon wir jedoch nur die ersten 3 benötigen.


Um die 1. Normalform zu erreichen, müssen folgende Punkte eingehalten werden:
- Es sind keine Zusammengesetzen Attributwerte vorhanden
Beispiel: Adresse muss in PLZ, Ort, Strasse, Hausnummer aufgeteilt werden.
- Es dürfen nicht mehrere Werte innerhalb eines Wertfeldes vorkommen
Beispiel: Mehrere Titel-Namen einer Audio-CD in einem Wertefeld

Hier noch das Beispiel aus Wikipedia:
Datenschema in der "0." Normalform.



Datenschema nach der Normalisierung in der 1. Normalform.


Wie man sieht, wurden die Mehrfachen Titel in einzelne Felder aufgeteilt und das Album vom Interpret getrennt.
Nun bilden CD_ID und Track einen Verbundschlüssel, welchen den Primärschlüssel repräsentiert.

Damit sich ein Datenschema in der 2. Normalform befindet, müssen folgende Punkte eingehalten werden:
- Das Datenschema muss sich in der 1. Normalform befinden
- Jedes Attribut, welches keinen Schlüssel darstellt, ist von Allen Schlüsseln(also vom gesamten Verbundschlüssel) abhängig
Beispiel: In der 1. NF sind Album von der CD_ID abhängig, nicht aber vom Track.

Um dieses Datenschema in die 2. Normalform zu bringen müssen folgende Schritte vorgenommen werden:
Da die Attribute Album, Interpret und Jahr der Gründung nicht von beidem Schlüsselteilen abhängig ist, wird die Tabelle in mehrere Tabellen aufgeteilt. Anschliessend werden die Redundanten Daten gelöscht. Daraus ergeben sich folgende Tabellen:

In der 2. Tabelle stellt CD_ID einen fremdschlüssel dar, da er auf die CD_ID der 1. Tabelle verweisst.


Damit sich ein Datenschema in der 3. Normalform befindet, müssen alle Transiven abhängigkeiten von nicht-schlüssel-Attributen auf schlüssel-Attribute aufgelöst werden. Eine Transive Abhängigkeit wird folgendermassen beschrieben:

Hängt das Attribut C vom Attribut B ab und das Attribut B vom Attribut A, hängt das Attribut C transiv(also indirekt) vom Attribut A ab.

In unserem Beispiel gibt es ebenfalls so einen Fall.
Das Jahr der Gründung hängt vom Interpreten ab, der Interpret wiederum hängt vom Album ab. Also ist das Jahr der Gründung Transiv vom Album abhängig. Das führt zu redundanten (mehrfach vorkommenden) Daten.
Um das zu verhindern, muss eine 3. Tabelle erstellt werden.

Dabei bildet Interpret den Primärschlüssel und bei der 1. Tabelle wird Interpret als Fremdschlüssel hinzugefügt:




Dieses Datenschema befindet sich nun in der 3. Normalform und kann so realisiert werden. Was in diesesm Falle etwas speziell ist, ist der Zusammengesetzte Fremdschlüssel in der 3. Tabelle. Der Titel ist immer vom Track und von der CD_ID abhängig. Das bedeutet, dass man keine Titel ohne dazugehöriges Album und der Track-Nummer erfassen kann und keine CD ohne Titel.

Montag, 8. November 2010

November 2010 / WNotificator

In der Firma

WNotificator:

In der Firma habe ich das Programm WNotificator getestet.
Dieses Programm wurde von der indico electronic AG entwickelt und war in der Test-Phase.
Ich übernahm dabei hauptsächlich die Rolle des Testers. Für mich war diese Rolle neu und wie sich herausstellte auch nicht gerade einfach: Man muss jede mögliche Situation testen, jeden Button anklicken, jedem möglichen Navigationsweg folgen usw.

Es war das erste Mal, dass ich in unserer Firma, in einem Team an einem Projekt arbeiten musste, welches möglichst schnell fertig gemacht bzw. auf einem Vertretbaren Stand gebracht werden musste.
Ich spielte also eine wesentliche Rolle in einem echten Projekt. Würde ich meine Arbeit nicht korrekt erledigen bekäme unsere Firma ein Problem. Das hat mich einerseits unter Druck gestellt, andererseits jedoch auch angespornt.
Auch dass ich nur bedingt kontrolliert wurde und dass ich anderen Mitarbeitern mitteilen musste, was sie zu tun haben, war eine neue Erfahrung. Es ist nicht gerade einfach alles richtig und für den Gegenüber verständlich auszudrücken, daher gab es auch Missverständnisse.

Mein Fazit davon ist:
Das ausführliche Testen eines Programmes ist sehr wichtig und anspruchsvoll. Es muss auf das kleinste Detail geachtet werden und wird etwas geändert, muss man den bereits getesteten und damals funktionierenden Teil anschliessend wieder testen. Ein Abschliessender Test ist auch sehr wichtig. Denn was einmal getestet wurde und korrekt funktionierte, kann nach 10 neuen Versionen möglicherweise nichtmehr funktionieren.

CPU-Testsystem - C#

Abgesehen von den Zahlreichen Tests, entwickelte ich ein weiteres Programm mit C#.
Das CPU-Testsystem dient dazu die Wettronic 1 zu testen.
An sich hatten wir bereits ein funktionierendes System, dafür benötigten wir jedoch extra einen Computer, denn es lief nicht auf Windows und es hatte keine Grafische Benutzeroberfläche.
Die Kommunikation mit dem Gerät erfolgte über die RS232-Schnittstelle.

Den Code für die Kommunikation war jedoch bereits vorhanden, also musste ich mich nicht darum kümmern, wie das genau funktionieren würde. Stattdessen musste ich bloss verschiedene Bits setzen, welche dann einen Test starteten. Bei den ersten Tests musste der Tester von Hand überprüfen, ob alles korrekt funktionierte. Das hiess für mich, dass ich bloss eine Messagebox öffnen und damit fragen musste, ob alles korrekt funktionierte. Das ganze musste anschliessend noch in einen Log geschrieben werden.

Den Log stellte ich als ListView dar, damit ich den Hintergrund der Einträge färben konnte.
Um einen Listview-Eintrag zu erstellen, nutzte ich eine Methode, damit ich nicht bei jedem Eintrag viel schreiben musste.
Hier seht ihr nun, wie man den Listview befüllt.
Mit der nächsten Zeile kann man die 1. Spalte der Listview befüllen. Wobei Log den Listview darstellt.
ListViewItem Item = Log.Items.Add();

Mit folgender Zeile kann man die 2. Spalte der Listview befüllen.
item.SubItems.Add("");

Um den Logeintrag nun noch einzufärben kann man folgendes benutzen.
item.BackColor = Color.Beliebige Farbe;

Damit man den Eingefügten Logeintrag auch immer sieht braucht es noch folgende Zeile:
item.EnsureVisible();
Der Effekt sieht so aus, als ob immer jemand mitscrollen würde.

Schlussendlich wurde mir von einem Mitarbeiter noch erklärt, dass man folgende Zeile ebenfalls einfügen soll, damit alles korrekt angezeigt wird.
Log.Refresh();
Warum genau es einen Refresh braucht weiss ich selbst nicht.

Montag, 18. Oktober 2010

Oktober 2010 / PHP

ÜK 307 + 131

Ich besuchte die ÜKs 307(Interaktive Website erstellen) und 131(Arbeitspaket aus einem IT Projekt abwickeln). Die ÜKs hatten wir im "doppelpack". Das heisst wir haben eine Website mit Datenbankanbindung erstellt und dieses Projekt für unsere Übungen aus dem Modul 131 genommen.

Wir bildeten ein 3er Team. Ich war zuständig für den Code der Website, ein anderer für das Design und noch einer für die Dokumentation. Unsere Website stellt die besten Filme aus dem Jahre 2009 vor. Wir haben 7 Filme gewählt, die ziemlich gut abgeschnitten haben, oder wir sehr gut fanden und fügten zu jedem Film einen Eintrag in unsere Datenbank mit einer kurzen Zusammenfassung des Inhalts und einem Trailer ein. Den Seiteninhalt der einzelnen Filmseiten holten wir so aus der Datenbank.

Wir fügten ebenfalls ein Gästebuch ein. Dort kann jeder Besucher etwas hineinschreiben. Jedoch werden URLs geblockt um Spam zu verhindern.
Ebenfalls fügten wir die Besucherzahl unserer Website ein, welche wir jedoch nicht in der Datenbank sondern in einem Textfile speicherten.

Dabei lernte ich natürlich PHP kennen. PHP kann eine Website mit einer Datenbank verbinden und dazu nutzten wir es auch.
Um PHP nutzen zu können, kann man ein ganz normales HTML-File nehmen und PHP Code einfügen. Jedoch muss man anschliessend noch die Dateiendung in .php ändern.

Leider versucht dieser Blog meinen PHP Code zu interpretieren und daher kann ich euch nicht die korrekte Syntax zeigen, bzw. ich kopiere die Eröffnung des PHP Codes als Bild hinein.

Es muss immer deklariert werden, sobald PHP-Code vorkommt. Das geschieht folgendermassen:


?>

Innerhalt dieser beiden Zeichen-Codes kann man php-codieren. Aufgrund des oben genannten Problems werde ich diese Eröffnung und Schliessung des PHP-Codes nichtmehr einfügen.
Das einfachste ist eigentlich einen Text auszugeben. Das funktioniert folgendermassen:

echo "Mein Text";

So erscheint auf der Website der Text "Mein Text".

Als Nächstes kann man Variablen verwenden. Sie sind sehr einfach zu verwenden und müssen nicht direkt deklariert, sondern können direkt verwendet werden. Eine Variabel wird immer mit einem $ davor verwendet. Hier ein Beispiel:

$variabel1 = "Mein Text";
echo $variabel1

Das Ergebnis ist dasselbe wie beim oberen Beispiel, jedoch wird es über eine Variabel gemacht.

Die Verbindung auf den SQL-Server war einer der wichtigsten Punkte in unserem Projekt. Und so wird es gemacht:


$link = mysql_connect("host", "user", "password") or die ("Keine Verbindung möglich");


Damit wird versucht auf den MySQL-Server zuzugreifen. Mit "or die" kann man sagen, was passieren soll, wenn die Verbindung nicht aufgebaut werden kann. Hier wird "Keine Verbindung möglich" ausgegeben.

Anschliessend muss man noch die Datenbank auswählen, auf welche man zugreifen möchte:


mysql_select_db("filme") or die ("Die Datenbank existiert nicht");

Wird die angegebene Datenbank, hier "filme", nicht gefunden wird wieder durch "or die" eine Meldung ausgegeben. Hier: "Die Datenbank existiert nicht"
Das ganze könnte man natürlich auch ohne "or die" machen, ich denke jedoch es ist nützlich wenn man eine kurze Meldung ausgibt, weshalb es nicht funktioniert.

Um an den Inhalt der Datenbank zu gelangen, muss man das Select-Statement verwenden:


$Abfrage = "SELECT * FROM film WHERE titel = 'Avatar' ";

Das übergibt der Variabel Abfrage das Select-Statement. In unserer Datenbank "filme" gibt es eine Tabelle namens "film", diese wird hier ausgewählt. Es werden alle Einträge heraus genommen, in denen im Datenfeld "titel" "Avatar" steht. Bei uns gibt es natürlich nur einen Eintrag mit diesem Namen und daher konnten wir ihn so identifizieren.
Der Inhalt aus der Datenbank ist jedoch immer noch nicht geholt. Die Variabel hat nur das Statement gespeichert, es wurde noch nicht ausgeführt. Dazu benutzen wir folgendes:

$res = mysql_query($Abfrage);
$row = mysql_fetch_assoc($res);
Der mysql-query Befehl gibt bei erfolgreichem ausführen einen Ereignis-Handler zurück. Mit diesem kann man auf die zurückgegebenen Datensätze zugreifen.
Mit dem mysql_fetch_assoc Befehl wird der Ereignis-Handler an die row Variabel übergeben und man kann die Feldnamen als Schlüssel verwenden.
Unsere Tabelle hat 3 Spalten: "titel", "trailer" und "inhalt".
Nun konnte ich auf den Inhalt des geholten Datensatzes zugreifen. Mit folgendem Code gebe ich den Inhalt des Trailer-Feldes aus:
echo $row['trailer'];
So konnte ich dann auf alle Informationen aus der Datenbank zugreifen und das Projekt realisieren.
Zum Schluss gibt es noch unser Design, welches nicht ich erstellt habe:

Dienstag, 14. September 2010

September 2010 / C#

C#

In der Firma habe ich an einigen Projekten gearbeitet und andere kleinere Aufgaben gelöst.

Leider hatte ich nichts grosses, oder etwas worüber ich hier noch nie geschrieben hätte. Deshalb schreibe ich wieder über C# da sich meine Kenntnisse in diesem Bereich stetig verbessern.



Sinn und Zweck des Auftrags:


Ich bekam den Auftrag ein Programm zu entwickeln, welches Daten aus bestimmten .csv-Files lesen, zusammenfügen und geordnet abspeichern kann. Die Files haben immer 2 Spalten. In der 1. Spalte befinden sich Zeitstempel und in der 2. Werte dazu. Mein Programm musste die Zeitstempel und Werte des "Hauptfiles" und die Werte aller im selben Ordner gespeicherten .csv-Files nehmen, zusammenfügen und abspeichern. Wo die .csv-Files liegen, welches das "Hauptfile" ist und wo und mit welchem Namen die Fertige Datei gespeichert werden soll, wird mit Hilfe von Start-Parametern mitgeteilt.


Hier sehen Sie 3 Bilder der .csv-Files. Das 1. (Value1) ist das Hauptfile, die anderen 2 befinden sich im selben Ordner.



Aus diesen 3 Files sollte nun folgendes Entstehen:




Wie man sieht haben die 3 Dateien nicht gleich viele Zeilen. Daher passen sich alle Files dem Masterfile an. Wenn eine Datei zu viele Zeilen hat, werden die überflüssigen gelöscht. Hat eine Datei zu wenig, werden in den restlichen Zeilen leere Einträge eingefügt. Auch die 1. Zeile wird vom Masterfile genommen. Allerdings sollten alle Dateien die gleichen Zeitstempel haben, ansonsten würde es keinen Sinn ergeben sie zusammenzufügen.

Ich erarbeitete mir 2 verschiedene Versionen.

Die erste entwickelte ich ohne fremde Hilfe.
Ich hatte jedoch ein Problem: Man kann nicht gleichzeitig Daten aus einem File lesen und es mit anderen Daten beschreiben. Meine Lösung las jedoch jede Datei einzeln und speicherte die gelesenen Informationen gleich Zeile für Zeile in ein .csv-File. Es gibt keine Funktion mit der ich einfach etwas ans Ende einer Zeile schreiben könnte, wie ich es gebraucht hätte, oder diese hätte ich zumindest nicht gefunden. Daher musste ich die Datei immer auslesen und gleichzeitig wieder beschreiben.
Die einzige Lösung welche mir einfiel war, die Datei nach jedem Beschrieb zu kopieren um so die Daten aus der Kopierten Datei lesen und die Originaldatei beschreiben zu können. Schlussendlich wäre die kopierte Datei gelöscht worden und alles hätte funktioniert.
Jedoch verlangsamt diesen vermehrten Dateizugriff das Programm stark und der Mitarbeiter, welcher mir den Auftrag gab war damit natürlich nicht einverstanden. Das war mir eigentlich bereits klar, jedoch viel mir keine bessere Lösung ein.

Mithilfe der Tipps des Mitarbeiters erstellte ich dann meine 2. Lösung.

Sie nutzt Listen um die Daten auszulesen und zu speichern. Zuerst wird für jede Datei eine Liste erstellt und mit den Daten abgefüllt. Anschliessend werden diese Dateien noch in einer Liste abgespeichert. So kann ich dann auf die einzelnen Einträge der Listen zugreifen und das .csv-File so beschreiben.

Code des Auftrags:

Damit man auch etwas lernt, hier noch die verwendeten Funktionen:
Der Zugriff auf die Startparameter erfolgt so:
string[] args; //damit wird args als String mit mehrere Einträgen definiert
args = Enviroment.GetCommandLineArgs(); // damit werden die Startparameter übergeben.
Die einzelnen Parameter kann ich nun mit args[1] auslesen. Die Zahl dient zur Auswahl, welchen Parameter man verwenden möchte.

Die Foreach-Schleife:
Damit ich auf jedes File im Ordner zugreifen konnte, unabhängig davon wie viele Dateien sich im Ordner befinden verwendete ich eine Foreach-Schleife. So wird sie verwendet:
DirectoryInfo variabel1 = new DirectoryInfo(Pfad); // damit weise ich der variabel1 ein Verzeichnis zu.
Mit der nächsten Zeile werden alle Befehle welche in der Foreach-Schleife vorhanden sind auf alle .csv Dateien aus dem Verzeichnis ausgeführt.
foreach (FileInfo "variabel2" in "variabel1.GetFiles("*.csv")) { Befehle; }
Das "*.csv" definiert, dass alle Dateien die am ende .csv haben in die Schlaufe genommen werden sollen. Das * steht für eine beliebige Anzahl Zeichen.


Die Split-Funktion:
Damit ich Strings in mehrere kleinere Teile unterteilen kann gibt es die Split-Funktion. Sie funktioniert Folgendermassen:

Man muss eine Variabel, hier variabel1, aufteilen. Wo genau diese aufgeteilt wird, kann man mit dem Parameter, hier ':', übergeben. Dann muss man das ganze einer anderen Variabel zuweisen, hier variabel2:
variabel2 = variabel1.Split(':');
Die Variabel1 wird hier bei allen : aufgeteilt. Wäre in variabel1 also folgender Satz gespeichert gewesen: "Hier ist die Lösung:2" wäre in Variabel2 nun folgendes gespeichert:
variabel2[0] = Hier ist die Lösung
variabel2[1] = 2
Zu beachten ist hier noch, dass die variabel2 folgendermassen deklariert werden muss:
string[] variabel2; // So kann ich wie beim Args mehrere Einträge definieren.

Dienstag, 31. August 2010

August 2010 / VB.Net & VBScript

VB.Net

Am 16.08.2010 begann für mich die Schule des 2. Lehrjahres. Nun habe ich einige Neue Fächer, unter anderem das Modul 303, objektbasiertes Programmieren mit Komponenten. In diesem Modul befassen wir uns hauptsächlich mit VB.NET, einer Sprache welche ebenfalls, wie C#, auf dem .NET-Framework basiert. Diese Sprache ist also ähnlich wie C#, über welche ich bereits letzten Monat geschrieben habe.
Was mir jedoch sofort auffiel war, dass die Syntax unter VB.NET anders ist als unter C#.

Schreibt man unter VB.NET eine Variabel gross anstatt klein, wird das automatisch vom Visual Studio kleingeschrieben. Unter C# wird das als Fehler angezeigt und nicht korrigiert. Einerseits kann das Automatische Korrigieren nützlich sein, andererseits muss man sich dabei nicht mehr so gut konzentrieren, was Fehler hervorrufen kann.

Ein weiterer Unterschied ist die Variablen-Deklaration. Unter VB.NET kann man diese Ganz einfach Deklarieren und diesen Variablen kann man dann zuweisen, was man gerade will.
Unter C# hingegen Deklariert man die Variablen immer sofort als Int, String, Double usw.

Das sieht dann so aus:
double Variabelname;
string Variabelname;

und unter VB.NET so:
Dim Variabelname As double
Dim Variabelname As string

Ausserdem finde ich den Code von C# übersichtlicher da man dank der geschwungenen Klammern immer sofort sieht, was zusammen gehört. Und die ; zeigen immer klar an wo ein Befehl fertig ist. In VB.NET ist das nicht vorhanden, dafür müsste man theoretisch einen Befehl ohne Zeilenumbruch schreiben. Unter C# werde Zeilenumbrüche nicht beachtet, unter VB.NET hingegen schon. Hat man also einen langen Befehl, kann man diesen in VB.NET nur durch _ auf mehrere Zeilen verschieben. Das sieht dann ungefähr so aus:
Test = Textteil(1) & _
Textteil(2)
In C# könnte man das so schreiben:
Test = Textteil(1) &
Textteil(2);
Es ist offensichtlich dass sich die beiden Codes ähneln.
Daher ist es auch nicht sehr einfach die beiden Sprachen auseinander zu halten.
Nachdem ich mich in VB.NET eingearbeitet hatte, wollte ich wieder etwas in C# entwickeln. Das Problem dabei war, dass ich ein Mix aus VB.NET und C# machte und daher die Syntax nichtmehr stimmte.

VBScript

Unabhängig vom VB.NET-Modul in der Schule, begann ich in der Firma mit VBScript zu programmieren.

Im Gegensatz zu "richtigen" Programmiersprachen ist es sehr einfach aufgebaut und wird von oben nach unten durchgearbeitet. Meine Scripts mussten bestimmte Informationen aus Text-Dateien lesen oder ganze Text-Dateien schreiben.
VBScript hat eine gewisse Ähnlichkeit mit VB.NET. Die Variablen werden beispielsweise gleich deklariert und auch die Syntax ist die Selbe. Daher war es kein Problem mich schnell zu Recht zu finden.

Die Schwierigkeit dabei war jedoch, dass ich für Windows CE entwickeln musste, einem Betriebssystem welches auf unseren Panels läuft. Das hatte zur Folge, dass ich mit einer Abgespeckten VBScript-Version arbeiten musste und daher fast keine Hilfe im Internet fand.

Ein wichtiger Unterschied zum normalen VBScript war, dass man nicht die gleichen Objekte und Methoden brauchte, um dasselbe zu machen. Möchte ich z.B. eine Textdatei Zeilenweise auslesen muss ich das Objekt(f) im normalen VBScript so erstellen:
Set f = CreateObject("Scripting..FileSystemObject")
Anschliessend kann ich mit einer anderen Variabel(Text) ein File öffnen und es mit ReadLine Zeilenweise lesen.
Set Text = f.OpenTextFile(Pfad, fwModeOpen)
Zeile = Text.ReadLine
In der Version für Windwos CE muss man das so machen:
Set f = CreateObject("FileCtl.File")
f.open Pfad, fwModeOpen
Text = f.LineInputString
Wie man sieht sind es nicht die gleichen Objekte und Methoden die verwendet werden müssen.
Schlussendlich musste ich das genau gleiche mit dem normalen VBScript programmieren. Da diese Codes jedoch so unterschiedlich sind, konnte ich dafür nur einzelne Bruchstücke des WindowsCE-Codes verwenden.

Freitag, 30. Juli 2010

Juli 2010 / C#

C#

In der Firma begann ich die Programmiersprache C# zu lernen. Sie basiert auf dem .NET-Framework, welches eine von Microsoft entwickelte Softwareplattform zum entwickeln und ausführen von Programmen ist. Mit dem .NET-Framework kann man jedoch nicht nur mit C# programmieren sondern auch mit anderen Sprachen wie C++, Visual Basic.Net oder J#.






Als Entwicklungsumgebung benutzte ich das Microsoft Visual Studio 2005. Es vereinfacht das Programmieren sehr stark, da man die Grafische Benutzeroberfläche gleich mit vordefinierten Objekten zusammenbauen kann.
Das Bild rechts zeigt einige dieser Objekten.
Visual Studio erstellt beim auswählen und platzieren der Objekte einen Code, welchen man theoretisch auch selbst schreiben könnte, doch das wäre mühsame Arbeit.

Der Einstieg in C# war alles andere als einfach für mich, denn ich musste zuerst lernen "Objektbasiert" zu denken. Damit meine ich, dass man nur über ein Objekt etwas ausführen kann. Sobald ich das begriffen hatte, musste ich mich mit der Syntax vertraut machen. Die Syntax könnte man auch als Schreib-Stil bezeichnen. Was man zuerst wissen muss ist, dass nach jeder Aktion ein ; kommen muss. Initialisiert man z.B. eine Variabel muss das folgendermassen erfolgen:
String Name;
Wird das ; weggelassen funktioniert das Programm nicht.
Als nächstes sollte man wissen, das Methoden mit () am Ende aufgerufen werden. Eigentlich dienen diese Klammern um Parameter mitzugeben, doch auch wenn man keine Parameter mitgeben muss, braucht es die (). Ruft man z.B. eine Selbst erstellte Methode namens "Plus" auf, erfolgt dies folgendermassen:
Plus()

Anschliessend ist noch wichtig zu wissen, dass eine Methode immer mit { anfängt und mit } abgeschlossen wird.
Hält man sich nicht an diese Regeln ergibt der Compiler eine oder mehrere Fehlermeldungen, und das Programm wird wahrscheinlich abstürzen oder nicht korrekt funktionieren, wenn sie es ausführen.










Häufig verwendet:










Das If-Statement:







Auch beim If-Statement müssen bestimmte Regeln eingehalten werden. Es wird folgendermassen aufgebaut.
If ((Bedingung 1) & (Bedingung 2))
{
Anweisung 1;
Anweisung 2;
}
Else
{
Anweisung 3;
Anweisung 4;
}
Die Bedingung kann etwas beinhalten wie "Test = 0" wobei Test eine Integer-Variabel darstellt.
Anweisungen und Bedingungen kann man so viele machen wie man möchte, wichtig ist jedoch auch hier, dass sie korrekt abgeschlossen werden. Im Anweisungs-Bereich können auch neue If-Statemants gesetzt werden. Ebenfalls kann man noch das Else If einfügen. Damit kann man genau gleich wie bei der If-Bedingung etwas überprüfen, diese Bedingung wird jedoch nur überprüft wenn die erste nicht zutrifft.
Hier nun ein If-Statement mit einem zusätzlichen If-Statement und einem Else If :
If (Bedingung)
{
If (Bedingung 1)
{Anweisung 1;}
Else {Anweisung 2;}
}
Else If (Bedingung 2)
{Anweisung 3;}
Else {Anweisung 4;}


Die Try-Catch-Anweisung








Diese Anweisung versucht die im Try-Abschnitt folgenden Anweisungen auszuführen. Kann dies das Programm nicht springt es in den Catch-Abschnitt und führt die dort aufgelisteten Anweisungen aus. Diese Anweisung kann man also Brauchen um einen möglichen Programmabsturz zu verhindern, oder um zu überprüfen ob eine Bedingung erfüllt ist. Doch hier muss man etwas aufpassen, warum erkläre ich gleich.
Die Anweisung ist so aufgebaut:
Try
{
Anweisung 1;
Anweisung 2:
}
Catch
{
Anweisung 3;
Anweisung 4;
}
Ein gutes Beispiel für die Verwendung ist, wenn man mit den Eingaben eines Benutzers in ein Textfeld etwas ausrechnen möchte. Das Programm würde abstürzen, wenn man versuchen würde mit Buchstaben zu rechnen. Man könnte nun also nun mit Try versuchen mit den eingegebenen Zahlen zu rechnen. Funktioniert das sind es Zahlen, funktioniert es nicht kann man den Benutzer per Messagebox darauf hinweisen, eine Korrekte Zahl einzugeben.
Öfters gibt man mehrere Anweisungen in eine Try-Anweisung. Macht man nur bei einer Anweisung einen Fehler, wird der ganze Abschnitt übersprungen. Daher eignet es sich nicht sehr um etwas zu überprüfen, da die Chancen erhöht sind einen Fehler zu machen.

Freitag, 25. Juni 2010

Juni 2010 / SQL

SQL

In der Schule haben wir im Modul 100 - Daten charakterisieren, aufbereiten und auswerten SQL (Structured Query Language) angeschaut. Mir war SQL zwar bekannt, ich wusste jedoch nicht wie man sie verwendet. SQL dient dazu Datenbanken zu erstellen und zu verwalten.

Zuerst lernten wir, dass man in SQL 2 verschiedene Kategorien verwendet.
Die DDL wird gebraucht um das Datenbankschema zu definieren, also das Gerüst der Datenbank zu erstellen.
Die DML wird zur Datenmanipulation verwendet, also um Datensätze einzufügen, zu löschen, zu ändern usw.
Laut Wikipedia gibt es noch eine 3, Kategorie namens DCL die zur Rechteverwaltung und Transaktionskontrolle dient. Von dieser Kategorie wurde uns in der Schule jedoch nichts erzählt.

Wir haben Haupsächlich die DML angeschaut. Dabei haben wir uns fast ausschliesslich mit den SELECT-Abfragen befasst, jedoch wie ich finde eindeutig zu wenig. Diese dienen dazu bestimmte Informationen aus einer Datenbank heraus zu suchen. Zuerst müssen jedoch Daten in die Datenbank, und das erfolgt so:

Mit INSERT INTO kann man Daten abfüllen.
INSERT INTO Schüler (Name, Vorname, Adresse)
VALUES (Schnegg, Till, Musterstrasse 4), (Müller, Luca, Musterstrasse 7)
In diesem Beispiel werden in die Tabelle Schüler gleich 2 Datensätze eingefügt. Die dazugehörigen Werte werden mit VALUES definiert.

Sie ist wie Folgt aufgebaut:
SELECT Name (Spalte)
FROM Schüler (Tabelle)
In diesem Beispiel wird die Liste aller Namen aus der Tabelle Schüler ausgegeben. Alles was in Klammern steht dient nur zur Erklärung und gehört nicht direkt in eine SELECT-Abfrage.

Möchte man alle Spalten ausgeben kann man auch nur folgendes eingeben:
SELECT * (Alle Spalten)
FROM Schüler (Tabelle)

Nun kann man natürlich noch einiges mehr tun als nur Spalten auslesen. Indem man WHERE einbaut, kann man eine Bedingung mitgeben. Beispiel:
SELECT Name (Spalte)
FROM Schüler (Tabelle)
WHERE Name = Schnegg (Bedingung)
In diesem Beispiel werden alle Namen aus der Tabelle Schüler ausgegeben, welche Schnegg sind.

Man kann auch mehrere Spalten anzeigen lassen, indem man sie mit einem "," trennt:
SELECT Name, Vorname, Adresse

Ebenfalls möglich ist es die Angezeigten Spalten mit AS umzubenennen:
SELECT Name AS Nachname.

Man kann die ausgegebenen Daten mit der Hilfe von "ORDER BY" nach einer Bestimmten Reihenfolge ordnen:
ORDER BY Vorname
So wird alles was ausgegeben wird alphabetisch nach dem Vornamen geordnet. Normalerweise benutzt man ASC um zu definieren, dass es Alphabetisch geordnet werden soll, es funktioniert jedoch auch ohne ASC. Man kann sie jedoch auch umkehren wenn man es wie folgt schreibt:
ORDER BY Vorname DESC
So wird es von Z nach A geordnet.

Wie bereits geschrieben kann man Daten auch löschen. Dies erfolgt mit DELETE FROM. Hier kann man keine Spalte angeben, da immer ganze Zeilen gelöscht werden. Man kann jedoch eine Bedingung mitgegeben:
DELETE FROM Schüler
WHERE Name = Schnegg
Nun werden alle Zeilen mit bei denen in der Spalte Name Schnegg steht gelöscht.

Möchte man nun einen bestehenden Datensatz abändern, macht man das folgendermassen:
UPDATE Schüler
SET Name = Schnegg
WHERE Name = Müller
So werden alle Müller in Schnegg umbenannt.

Es gibt auch noch weitere Möglichkeiten mit der DML, jedoch sind es zu viele als dass ich hier alle erläutern könnte.

Mittwoch, 26. Mai 2010

Mai 2010 / Verschlüsselung

Verschlüsselung

Im Modul 114 beschäftigten wir uns mit Verschlüsselungsmethoden.

Zuerst lernten wir die Caesar-Verschlüsselung kennen. Sie ist sehr einfach und dient dazu Schriften zu verschlüsseln. So funktioniert sie: Man verschiebt jeden Buchstaben um eine Bestimmte Anzahl stellen. Verschlüsselt man mit dem Schlüssel a wird jeder Buchstabe um 1 Buchstaben im Alphabet verschoben. Beispiel: "Achtung Test" mit a verschlüsselt ergibt "Bdiuvoh UftU". Wie man sieht kann man den Text nicht sofort wieder erkennen. Hier sollte man jedoch aufpassen, dass man nicht mit z verschlüsselt, denn so ergibt es wieder den genau gleichen Text.
Diese Methode zu entschlüsseln ist jedoch nicht all zu schwer. Ist der Text lange genug wird einer der Buchstaben eindeutig am meisten gebraucht. In einem Deutschen Text wird dieser Buchstabe ein E sein, da dieser am häufigsten gebraucht wird. Man kann nun abzählen wie viele Buchstaben der am häufigsten verwendete Buchstaben vom E entfernt ist und alle Buchstaben mit dieser Zahl entschlüsseln.
Von Hand würde das jedoch auch einige Zeit dauern. Heutzutage gibt es dafür Programme die Solche Texte in Sekundenschnelle entschlüsseln.

Anschliessend lernten wir die Vigenère-Verschlüsselung kennen. Sie baut auf demselben Prinzip, wie die Caesar-Verschlüsselung auf. Die Buchstaben werden ebenfalls um eine bestimmte Anzahl verschoben. Hier ergibt jedoch der Schlüssel a denselben Text und nicht z. Ausserdem gibt es hier anstatt nur 1 Verschlüsselungsbuchstaben ein Verschlüsselungswort. Das bedeutet jeder Buchstabe wird mit dem dazugehörigen Buchstaben aus dem Schlüsselwort verschlüsselt. Hier ein Beispiel: Der Text lautet "Guten Morgen Welt" verschlüssle ich diesen nun mit dem Wort "Bern" geschieht folgendes: Das G wird mit B verschlüsselt ergibt also H, das u mit e ergibt also y, t mit r ergibt also g usw. Das Verschlüsselungswort wird dabei immer wiederholt.
Das Entschlüsseln erfolgt nun genau gleich. Das einzige Problem ist, dass man zuerst die Länge des Schlüssels herausfinden muss. Ohne ein Programm ist das fast unmöglich. Man müsste vergleichen mit welchem Abstand immer wieder ein Buchstabe am häufigsten vorkommt. Wenn im Durchschnitt bei jedem vierten Buchstaben z.B. G am häufigsten vorkommt, weiss man, dass das Wort vier Buchstaben lang ist. So kann man dann wieder bei jedem Buchstaben den am meisten vorkommenden Buchstaben auf e zurücksetzen und man erhält das Lösungswort.

Zu Letzt lernten wir noch das Programm PGP kennen.
Es arbeitet mit 2 Schlüsseln, dem Öffentlichen Schlüssel, welcher gebraucht wird um einen Text zu verschlüsseln, und dem Privaten Schlüssel, welcher durch ein Passwort geschützt ist und der die einzige Möglichkeit darstellt den verschlüsselten Text zu entschlüsseln. Diese Schlüssel werden als "Paare" erstellt.
Diese Art von Verschlüsselung bietet viel grösseren Schutz als die anderen beiden Verschlüsslungen. Angenommen man möchte mit jemandem "verschlüsselt" kommunizieren. Bei den anderen beiden Verschlüsslungen müsste man ein Buchstabe bzw. ein Wort mitgeben. Wird dieses Wort von einer dritten Person abgefangen, so kann er den Text entschlüsseln. Das kann bei PGP nicht passieren. Den öffentlichen Verschlüsselungsschlüssel kann bedenkenlos verschickt werden. Die einzige Möglichkeit den Text zu entschlüsseln ist das Password zu kennen und den Privaten Schlüssel zu besitzen.

Donnerstag, 29. April 2010

April 2010 / Migros Neuendorf

In der Firma

In diesem Monat habe ich mich hauptsächlich mit dem Projekt Migros Neuendorf auseinander gesetzt und beschäftigt.

Zuerst habe ich Daten bzw. Variablen für die Penthouse-Kühler der Halle 5, welche wir im WinCC bereits eingefügt haben, in den OP-Browser eingefügt. Dies war keine Schwierige Aufgabe, man musste sich jedoch sehr konzentrieren, damit sich, da man sehr lange immer das gleiche machte, keine Fehler einschlichen. Dann musste ich die Daten, welche ich eingetragen habe, den Richtigen Knoten(Ordnern)im Tree zuordnen und falls es nötig war neue Knoten erstellen.

Nun musste ich die neuen Dateien auf den Anlage-PC laden. Dazu habe ich das erste Mal über meinen Web-PC-Zugang eine VNC-Verbindung auf den Web-PC 1 hergestellt. Von dort aus habe ich dann eine Verbindung mit PCAnywhere zum Anlage-PC hergestellt.

Nun hatte ich die Dateien jedoch nur lokal auf meinem Computer und ich sollte sie auf dem Web-PC haben, damit ich sie von dort aus auf den Anlage-PC laden konnte. Dazu benutzte ich den FTP-Server. Zuerst hatten wir das Problem, dass es, beim Hochladen auf den FTP-Server den Zeitstempel umstellte, was nicht erwünscht war. Ich suchte nach einer Lösung, fand im Internet jedoch keine wirklich nützliche. Schlussendlich haben wir per Zufall entdeckt, dass man mit dem Programm FileZilla Dateien mit dem Original-Zeitstempel auf den FTP-Server hochladen kann,
also taten wir das auch. Nun mussten wir sie nur noch auf den Anlage-PC schicken, in das Programm einbinden und fertig.

Nach einer 2 wöchigen Pause, aufgrund von Ferien, arbeitete ich im WinCC weiter, da die Priorität beim WinCC höher war als beim OP-Browser.
Ich musste alle Daten, welche wir für die Halle 5 erstellt haben, Kopieren und für die Hallen 1 und 2 anpassen.
Zuerst kopierte ich den Text der Meldungen und Alarme und fügte sie in die Vorgegebenen Zeilen ein. Anschliessend musste ich bei den eingefügten Texten noch die Hallenbezogenen Informationen abändern.
Nun kopierte ich die Variablen und änderte die Adressen und die Verbindungen so ab, dass sie auf die richtige SPS verlinkt waren.
Dann kopierte ich die Bilder und änderte einige Schriftzüge, die sich auf die Hallen bezogen, und passte einige Links an. Nun waren jedoch alle angezeigten Werte auf die Variablen der Halle 5 bezogen, also musste ich die Variablen, jedes einzelnen Wertes auf die Jeweilige Halle anpassen.
Schlussendlich musste ich noch alles kontrollieren, um sicher zu gehen, dass ich keine Fehler gemacht habe.

Nachdem ich das WinCC abgeschlossen hatte, musste ich alle neuen Daten für die Hallen 1 und 2 auch in den OP-Browser aufnehmen.
Dazu erstellte ich zuerst die benötigten Knoten im Tree. Nun kopierte ich die benötigten Datensätze der Halle 5 in ein Excel. Dort konnte ich sie mit der Funktion "Suchen und Ersetzen" bearbeiten, was sehr viel Zeit sparte. Ich musste alle Angaben zur Halle 5 auf die Halle 1 bzw. Halle 2 abändern und die richtige SPS eintragen. Dann kopierte ich dich bearbeiteten Datensätze wieder in den OP-Browser. Schlussendlich musste ich nur noch alle Variablen dem richtigen Knoten zuordnen und das ganze kontrollieren.

Zusammengefasst war es ein weiterer interessanter Monat mit etwas viel Fleissarbeit. Die erfüllten arbeiten erforderten sehr viel Konzentration und wurden deshalb auch nicht langweilig.

Samstag, 27. März 2010

März 2010 / Codierung & Digitalisierung

Codierung & Digitalisierung

In der Schule schauten wir im Modul 114 die Codierung und die Digitalisierung an.
Zuerst lernten wir das Binärsystem kennen, dieses war mir jedoch bereits bekannt. Anschliessend wurde uns das Hexadezimalsystem erklärt.

Zahlen welche Hexadezimal aufgeschrieben sind ins Binärsystem umzurechnen, oder umgekehrt, ist sehr einfach. Immer 4 Ziffern aus dem Binärsystem ergeben eine Ziffer aus dem Hexadezimalsystem.
Der Grund dafür, dass wir diese beiden Systeme kennen Lernten ist, weil der Computer nur mit dem Binärsystem funktioniert, also mit 1 und 0. Das Hexadezimalsystem ist ideal, um grössere Binärzahlen darzustellen, da 4 mal weniger Ziffern benötigt werden um die Zahl darzustellen.
So kommen wir nun zur Digitalisierung.

Zuerst wurde uns erklärt, wie man überhaupt mit dem Computer kommunizieren kann. Das funktioniert mit der Hilfe einer Code-Tabelle. In dieser Tabelle ist definiert, welche Binärzahl gebraucht wird um welches Zeichen darzustellen. Bekannte Tabellen dazu sind die Ansi-, die Ascii- und die Unicode-Tabelle.

Anschliessend befassten wir uns damit, wie Töne digitalisiert werden. Dazu werden die Töne abgegriffen, und digital gespeichert. Je nachdem wie gross die Sampling-Tiefe und die Sampling-Rate sind, ist die Qualität der digitalisierten Musik besser oder schlechter. Mit der Sampling-Rate wird definiert wie oft in der Sekunde der Ton abgegriffen wird und mit der Sampling-Tiefe, wie viele Verschiedene Töne dargestellt werden können.

Schlussendlich befassten wir uns noch mit den Bildern. Uns wurde beigebracht, wie man mithilfe von 1 und 0 ein Bild erstellen kann. Dazu benutzten wird den sogenannten Engler-Code (von unserem Lehrer definiert). In der ersten Phase konnten wir nur Schwarz-Weiss Bilder erstellen. Dazu musste man die Breite und die Höhe des Bildes im Header definieren und anschliessend konnte man mit 1 (Schwarz) und 0(Weiss) ein Bild erstellen. Das Programm, welches ganz normale .txt Dokumente benutzen konnte, lass zuerst den Header, wusste also wie Breit und Hoch das Bild werden sollte und las anschliessend die Ziffern-Kette. Es begann in der linken oberen Ecke und "Zeichnete" nach rechts. Hat es die angegebene Breite erreicht, "Zeichnete" es auf der nächsten Zeile weiter.
Anschliessend Zeichneten wir noch farbige Bilder. Dazu brauchten wir 3 Binärziffern für 1 Pixel. So konnten wir 8 verschiedene Farben erstellen. Mit dem gleichen System konnten wir nun also Farbige Bilder erstellen.

Delphi & PC-/Bildschirm-reparatur

In der Firma fing ich an die Programmiersprache Delphi anzuschauen. Es ist eine Grundlegende und einsteigerfreundliche Programmiersprache. Bis jetzt habe ich jedoch noch nichts Programmiert, sondern nur die Anleitung dazu gelesen.

Ich habe ebenfalls einen Computer und einen Bildschirm, eigentlich unabhängig voneinander repariert. Beim Bildschirm blinkte nur noch ein LED und er gab kein anderes Lebenszeichen von sich. Zuerst habe ich den Bildschirm geöffnet und nach defekten teilen gesucht, und mithilfe eines Messgerätes gemessen, ob ein Kurzschluss vorhanden ist. Da ich nichts Auffälliges fand, suchte ich im Internet. Dort fand ich eine Seite auf der genau mein Problem, mit einer Lösung beschrieben war. Offensichtlich waren die Elektrolytkondensatoren kaputt. Also bestellte ich Ersatz-Kondensatoren und tauschte die Alten aus. Anschliessend funktionierte der Bildschirm wieder.

Beim Computer handelte es sich eigentlich um ein einfaches Problem, welches ich jedoch nicht so schnell fand. Sobald ich den Computer startete Begann das Mainboard Signal-Töne von sich zu geben. Leider konnte ich diese nicht identifizieren. Zuerst tauschte ich die Festplatte aus, die Alte war leicht beschädigt, doch das löste das Problem nicht. Also tauschte dich die RAM aus, jedoch auch das half nichts. Mir blieb nicht viel mehr übrig als das Netzteil auszutauschen. Das half nicht viel, abgesehen davon dass ich nun von einer CD booten konnte. Der nervige Signalton war jedoch noch da. Schlussendlich bemerkte ich, dass der CPU-Lüfter nicht mehr drehte, da seine Halterung zerstört war und ein kleines Stück davon den Lüfter blockierte. Also baute ich die Halterung aus und befestigte den Lüfter auf eine Andere Weise. Nun funktionierte Alles. Durch das austauschen bemerkte ich jedoch auch, dass das Netzteil defekt war. Hätte ich das nicht getan hätte ich wohl noch länger vor dem nicht-funktionierenden Computer gesessen.

Daraus gelernt habe ich: Gibt ein Computer Signaltöne von sich, erst mal beobachten ob alles normal aussieht, also ob auch die Lüfter drehen und erst dann etwas austauschen.

Donnerstag, 25. Februar 2010

Februar 2010 / Office

ÜK 302 Fortgeschrittene Funktionen von Office Werkzeugen nutzen

Im Februar besuchte ich den ÜK 302. Wie im Titel beschrieben geht es darum Office effektiv zu nutzen.
Dieser ÜK beinhaltete sehr viele Informationen über die verschiedenen Office-Anwendungen.

Ganz am Anfang wiederholten wir noch einige Grundlagen zum Office aus dem Kurs 301 und füllten anschliessend einen Test aus. Dieser war nicht allzu schwierig, denn man musste wirklich nur Grundlegendes können.

Dann befassten wir uns mit Word, dem Textverarbeitungsprogramm. Am Anfang wurden uns einige Funktionen und Optionen mitgeteilt, die mir schon bekannt waren und daher war der erste Tag hauptsächlich auch Repetition. Wir schauten uns Dinge wie die Formatvorlagen, die Kopf- und Fusszeilen und die Tabstopps an. Diese Funktionen bzw. Hilfen waren mir schon bekannt. Wir lernten dann jedoch auch für mich neue Dinge kennen wie z.B. den Abschnittswechsel, den Initial und die Formatübertragung.
Wir mussten ebenfalls ein Formular erstellen. Zuerst konnte ich mir darunter eigentlich nichts vorstellen. Doch jetzt weiss ich: Ein Formular ist eine Vorlage, in welcher man nur die gekennzeichneten Felder Ausfüllen oder auswählen kann. Normalerweise speichert man ein Formular als eine gesicherte .dot-Datei ab.

Anschliessend beschäftigten wir uns mit Excel, dem Tabellenkalkulationsprogramm. Mit dieser Anwendung hatte ich nicht so grosse Erfahrung wie mit dem Word. Die meisten Dinge hier waren für mich neu, abgesehen vom Formatieren der Zellen, dem verwenden von Formeln und der Sortieren-Funktion. Einige für mich neue Funktionen waren, das Festlegen des Druckbereichs, das erstellen von Kopf- und Fusszeile, die Bedingte Formatierung, das benennen von Datenbereichen und die gesamten Datenbank-Funktionen. Ebenfalls lernte ich wie man Diagramme erstellt. Das ist eine sehr nützliche Funktion, jedoch wusste ich nie genau wie sie funktionierte.

Da wir nun Word und Excel auch als Datenbank verwenden konnten, begannen wir mit einem Serienbrief. Dieser war für mich ebenfalls unbekannt. Er dient dazu Massensendungen zu erstellen und zu versenden, ohne jeden Brief von Hand abzuändern, denn in jedem Brief müssen Name, Adresse und je nach dem noch andere Angaben Empfängerspezifisch sein. Um einen Serienbrief zu erstellen, muss man zuerst den gewollten Brief verfassen, und an den Stellen, für die individuellen Angaben eine Lücke lassen. Dieses Dokument wird Hauptdokument genannt. Danach kann man eine Datenbank-Datei mit den erwünschten Angaben, also Access, Excel oder SQL, mit dem Word fusionieren. Nun kann man noch auswählen welche Angaben wo hingeschrieben werden sollen, also in die Lücken. Anschliessend kann man den Serienbrief erstellen lassen, und man bekommt ein Word-Dokument in dem für jeden einzelnen Datensatz ein Brief verfasst wurde.

Schlussendlich befassten wir uns noch mit Outlook, hauptsächlich mit den Mails. Zuerst erstellten wir ein POP3 E-Mail-Konto. Dann lernten wir einige E-Mail Funktionen kennen, wie das hinzufügen von Abstimmungen, das einstellen der Priorität oder das Einladen anderer User zu einem Termin oder einer Terminserie.

In der Firma

In der Firma habe ich in diesem Monat leider nicht wirklich viel gearbeitet, da ich ja 2 Wochen im ÜK war und wegen einer Gehirnerschütterung eine Woche lang nicht arbeiten konnte. Daher habe ich eigentlich nicht viel mehr gemacht, als im WinCC 2 Bilder erstellt, Benutzerkonten für die WWAG auf dem Flyspray unserer Firma erstellt und Alarmtexte für den Zentralschlachthof Hinwil angepasst.

Donnerstag, 28. Januar 2010

Januar 2010 / Bart PE

Windows Live CD - WinPE, Bart PE und UBCD4Win

Die indico AG kaufte 2 neue Laptops mit dem Betriebssystem Windows 7. Wir hatten vorher noch keine Computer mit Windows 7 und auch Privat hatte ich keine Erfahrung damit.
Ich bekam jedoch den Auftrag diese Computer einzurichten, unnötige Programme oder Dienste zu deaktivieren und benötigte Programme zu installieren. Natürlich musste ich die Laptops zuerst Updaten. Sobald ich das gemacht hatte, wollte ich mit dem Programm Snapshot Backups der Laptops erstellen. Das funktionierte noch einwandfrei. Nun sollte ich jedoch anfangen, die Programme zu installieren, welche für die Spätere Nutzung der Laptops wichtig war.
Beide Laptops brauchten Microsoft Office 2007. Ich stellte fest dass das gesamte Paket schon installiert war, jedoch auf Englisch. Nun wollten wir (ich und mein Lehrmeister) in der Systemsteuerung mit Ändern die nicht benötigten Programme deinstallieren und noch nicht vollständig installierte Programme vervollständigen. Dazu sollten wir die CD einlegen, was wir auch taten. Da wir jedoch eine Deutsche Version hatten und eine Englische installiert war, funktionierte das nicht. und nun war die Uninstall-Datei kaputt. Wir konnten das Programm nicht deinstallieren.
Also wollte ich mit Bart PE, einer Windwos Live-CD von der aus man ein abgespecktes Windows XP starten kann, das Backup laden.

Nach dem Bootvorgang kam jedoch ein Bluescreen. Wir konnten diese CD nicht verwenden. Grund: Entweder weil es ein Windows 7 System ist (dachten wir zuerst) oder weil die Laptops zu neue Hardware hatten und die Treiber fehlten. Nun musste ich eine neue CD erstellen, die funktionierte.
Zuerst suchte ich sehr lange nach einer Windows 7 Live-CD. Angeblich soll man das mit einem Programm namens WinPE 3.0 erstellen können. Ich suchte sehr lange nach dem angegebenen Programm, ohne Erfolg.
Nun fand ich jedoch heraus, wie man eine Windows Vista Live-CD erstellte, und das ohne eine Vista Installations-CD. Nachdem ich die CD erstellt hatte konnte ich auch von ihr booten. Das Betriebssystem lief und auch Snapshot konnte ich starten. Nun sollte ich jedoch auf die USB-HD zugreifen können, um die gespeicherten Dateien zu holen. Das Problem war dass das Vista Live-Betriebssystem diese nicht erkannte. Ich versuchte auf unser Netzwerk zuzugreifen. Auch ohne Erfolg, obwohl ich Problemlos im Internet surfen konnte. Ich suchte wider im Internet nach einer Lösung. Ich fand einige Berichte von anderen Leuten, welche die selben Probleme hatten, jedoch keine Lösung dazu.

Ich entschloss mich dazu eine neue Bart PE-CD zu erstellen, mit Windows XP. Den es konnte eigentlich nicht daran liegen, dass es ein Windows 7 System war, es musste wohl oder übel an der Hardware liegen.
Ich lud mir die neuste Version des Bart PE Builders herunter, mit der Hoffnung das die Benötigten Treiber integriert waren, und erstellte eine CD. Nun ich konnte sie nicht booten. Da ich keine wirkliche Original-XP-CD zur Verfügung hatte, sondern nur solche von Maxdata, Dell oder HP. Sobald wir eine Original-XP-CD hatten erstellte ich eine CD die ich booten konnte. Jedoch landete ich wieder beim Bluescreen.

Ich suchte erneut im Internet nach einer Lösung. Und diesmal fand ich sie. UBCD4Win ist ein Bart PE Builder mit allen möglichen Programmen und Treibern. Ich lud es herunter, erstellte eine CD die nur die Treiber und Snapshot integriert hatte, damit ich das Ganze auf eine CD brennen konnte und nicht allzu lange warten musste um zu booten, und startete den Laptop. Es funktionierte. Nun musste ich nur noch die Daten zurückspielen und eine Dokumentation erstellen, wie man eine solche CD erstellt.