Seiten

Donnerstag, 24. März 2011

Java Script? 24-03-2011

Nungut, heute habe ich mich zwar auch noch um andere Dinge gekümmert, darunter auch einige tests der bereits geschriebenen Software auf Lauffähigkeit, aber Aufgrund des Wunsches zu einer entsprechnenden Verwendung auch mit Java Scrpit.

Ich glaube es bereits erwähnt zu haben, dass die für den Browser entwickelte objektorientierte Programmiersprache Java Script nichts mit Java, der anderen nicht für Browser entwickelten Programmiersprache zu tun hat und früher einmal Mocha hieß. Aus unerfindlichen Gründen ( vermutlich um Verwirrung zu stiften ) wurde sie aber umbenannt.

Ganz egal. Mit Java script lassen sich tolle Sachen machen. Zum Beispiel sowas, oder auch sowas.
Ganz besonders angetan haben es mir aber sachen wie dies oder das.

Jeder, der mit tollen Effekten punkten möchte, seine Seiten aufhübschen oder einfach nur aus pragmatischen Gründen funktioneller machen will, kommt an Java Script einfach nicht vorbei.

Nun ein paar worte zur Technik:
Java Scrpit verwendet ein schwache typisierung ähnlich der von PHP, allerdings werden hier die Variablen nur einmal mit dem Befehl var deklariert und können nachher ohne spezielle Markierung ( $ ) alleine weiterleben.
Sie haben wie in php keinen festen Datentypen und können diesen währen der Laufzeit wechseln.

Dann werden in Java Script Objekte auf andere weise erzeugt als in PHP. Java Scrpit unterstützt das mir noch etwas mysteriöse Prototyping, bei dem Objekte nur aus bereits bestehenden Objekten "geklont" werden. Was aber nun der Unterschied zur Vererbung in PHP ist ist mir unklar. Neue Objekte sind meines Wissens auch nicht vollkommen jungfräulich sondern haben alle zumindest den Typ Objekt.

Nun mehr darüber auch ein andermal.

Mittwoch, 23. März 2011

Multithreading 23-03-2011

So Threads in der Informatik unterscheiden sich natürlich etwas von der direkten Übersetzung und haben mit Handarbeiten nichts zu tun.

Was ist also ein Thread? Laut Wikipedia ein:" Ausführungsstrang oder eine Ausführungsreihenfolge in der Abarbeitung eines Programms". Nun was bedeutet das?
Wie die meisten Computerbenutzer festgestellt haben sollten ist, das während sie mit Ihren Computern arbeiten nie nur ein Programm oder eine Anwendung auf einmal läuft. Das merken vor allem Leute wir ich, die neben der Grafikbearbeitung gerne surfen und Musik hören. Tja das wiederspricht aber eigentlich der Architektur des Computers, die vom Prinzip her darauf ausgelegt ist, nur einer Sache gleichzeitig zu tun, bzw. nur ein Programm auf einmal auszuführen.

Damit man aber während der Ausführung eines Programmes noch etwas anderes mit dem Computer machen kann musste eine Lösung gefunden werden, bei der mehrere Prozesse "gleichzeitig" laufen.

Trauriger weise ist das numal nicht möglich. Also was nun. sicher habe die meisten User ebenfalls festgestellt, dass ihre Rechner ziemlich schnell sind ( was Rechenvorgänge angeht ). Der Prozessor, das Herz des Computers übernimmt dabei die ganze Arbeit und "rechnet" je nach Architektur unterschiedlich schnell. Erst die ungeheure Geschwindigkeit mit der er das Tut macht z.B. die Darstellung eines Interfaces auf dem Bildschirm möglich macht.
 Um also die Gleichzeitigkeit verschiedener Anwendungen zu ermöglichen müssen diese Aufgeteilt und bei jedem in sehr kurzen Intervallen weitergerechnet werden. Wird zum Beispiel die Maus bewegt " quetscht " der Prozessor etwas Rechenleistung dazwischen und berechnet die neue Position der Maus auf dem Bildschirm, während der ganze andere "Kram" läuft. Das ist die "Synchronizität" der von Neumann Architektur.

Donnerstag, 10. März 2011

PHP und CSS

Gestern habe ich mich mit dem Ticketauswertungstool befasst. Dabei werden nicht nur einhaufen Daten aus der Datenbank abgefragt, sondern auch mehrere Tabellen mit vielen Einträgen, Zeilen und Spaletn generiert.


Um diese Tabellen, die über den Browser ausgegeben werden dem Auge etwas angenehmer zu gestalten nutzte ich css, die Cascading Style Sheets. Diese bieten eine einfache, und vor allem elegante Möglichkeit um Html und Tabellen zu Formatieren.

Zuerst war klar, die Leserlichket wird durch eine Seriefenlose Schrift verbessert und die allgemeine Optik auch. Also ein css - file erstellt und mit dem * - Selektor eine Klasse gebaut. Dieser Selektor wählt alle Elemente der Seite aus. Hier das Ergebnis:


* {
font-family: "Arial" , sans-serif ;
}


so, das wäre geschafft. Nun muss noch dieser eklige Doppelrahmen fort. Das erledigt:


table {
table-layout:auto;
border-collapse:collapse;
border-color: white;
}


damit verschwinden die Ränder der Table und alles schrumpft etwas zusammen. Allerdings verlieren die Einträge auch an Struktur. Was steht denn nun in welcher Zeile? - Egal kümmern wir uns erst einmal um die Überschriften, also die Table Header:


th {
background-color: cc0033;
color: white
}


so. Nun haben wir einen guten Kontrast und die Farben sind ja die Gleichen wie bei DocCheck!

Ok, bleibt nur noch das Problem mit den schlecht leserlichen Zeilen. Auf Bus - und Zugfahrplänen sind die Zeilen oft in verschiedenen Farben dargestellt. Spart platz und sieht eigentlich ganz ok aus, aber wie macht man das mit PHP?

Der PHP code erzeugt das HTML dynamisch. so auch die zeilen der Tabelle. Natürlich wird nicht jede Zeile vorher Implementiert, also muss man es anders machen:


Zuerst 2 css Klassen Schreiben:


.row_0 {
background-color: #FFFFFF;
}

.row_1 {
background-color: #E1E8F1;
}


dann muss vor der Erzeugung der Tabelle noch etwas PHP-Code her:


$bg = 0;

if($it % 2 == 0){
$bg = 1;
}

else {
$bg = 0;
}

so, jetzt muss die Variable $it nach jeder geschriebenen Zeile inkrementiert werden!

$it++;

so. Nun nur noch die Tags angepasst:

echo "";

und schon werden die einzelnen Zeilen unterschiedlich eingefärbt!
Nun sind sie leserlich, platzsparend und sehen sogar noch schick aus.

Mittwoch, 9. März 2011

PHP und SQL

Heute habe ich mich damit beschäftigt das Ticketauswertungstool, welches mein Ausbilder großteils fertig gestellt hat zuende zu führen und dessen erscheinung so zu formatieren, das man die Zahlreichen Zeilen und spalten angenehm lesen und möglichst schnell finden kann. Geschrieben ist das ganze Tool als ein einziges, aus mehreren Dokumenten bestehendes PHP-File.

Es werden haufenweise Datenbankabfragen gemacht, die sich wiederholen, und bei denen sich nur wenige Kleinigkeiten ändern ( z.B.: eine Spaltenbezeichnung ). Um die Wiederholungen nach Möglichkeit zu automatisieren wurde die Möglichkeit genutzt, den SQL - Code, der inform einer String - Variablen an die Klasse übergeben wird, welche die Datenbankabfrage ausführt, stückchenweise während der Ausführung zusammenzubauen.

Es kommen also desöfteren Variablen vor die so aussehen:
$query = "SELECT from".$tabelle1.",".$tabelle2." ´dieseSpalte´";
Während der Laufzeit kommen dann in diese $query-Variable viele verschiedene Quellen rein und ebensoviele Abfragen werden gemacht, ohne jedes mal den kompletten SQL-Code schreiben zu müssen.

Die Variable wird dann als Parameter an die mysql_query($query) übergeben, und wenn man alles richtig gemacht hat bekommt man von der MySQL-Datenbank genau die angefragten Werte zurück. Wenn nicht, dann gibts einen SQL-Error ^^.

Allerdings gab es im Code einen Fehler, der dann doch etwas mehr Programmier, bzw Schreibarbeit verlangte. Durch die Verkürzung konnte ein Wert nichtmehr unabhängig ausgelesen werden. Ich habe dann für alle Fälle den entsprechenden Code ausgeschrieben. Dies ging allerdings nur mit Vorsicht, da gerade große und einfache Codeteile zum Kopieren und Umschreiben einladen. Und wenn man etwas übersieht wird die Fehlersuche schwierig.

Montag, 7. März 2011

Montag der Prozesse und Gutscheine

Heute verbrachte ich den größten Teil des Tages damit den Prozess unserer Auftragserfassung mit Aris Express zu modellieren. Es ist ein relativ komplexer Vorgang mit vielen möglichen Verzweigungen und noch mehr Handgriffen, die alle aufgenommen werden müssen. Aris Express  bietet hierfür eine Modell der Ereignisgestuerten Prozesskette und ein leicht verständliches und einfach zu bedienendes Interface, welches mir ermöglichte die Sache so schnell und effizient umzusetzen, dass ich heute den Punkt erreichen konnte, das nur noch Korrekturen zu machen sind.

Zur Auftragserfassung wird speziell für unseren Betrieb geschriebene Software verwendet, somit wird diese Beschreibung wohl kaum für andere Betriebe nutzen. Sollte ein Umstieg unsererseits stattfinden werde ich hier häufige Vorgänge die ich modelliert habe veröffentlichen.

Den übrigen Teil des Tages habe ich für die vor kurzem ausgelaufene Stammkundenaktion einige Gutscheine versendet. Die Idee hierbei war, dass jeder Kunde, welcher in das Mitteilungsfeld der Bestellung das Wort "Stammkunde" eingibt, einen Gutschein über 10 Euro erhält. Dieser Gutschein hat einen Mindestbestellwert von 100 Euro. Wird der Gutschein wärend der Aktion eingelöst erhält der Kunde einen weiteren Gutschein mit dem Wert von 20 Euro über einen Bestellwert von 150 Euro. So setzt sich das ganze dann fort. Ein steigender Gutscheinwert bei jeder Bestellung.

Das von uns hierfür eingesetzte Tool OTRS zu Ticketbearbeitung ist jedoch aufgrund seiner fehlenden Vorlagenfunktion nicht optimal für die manuelle Massenversendung von Gutschein -Emails geeignet. Deswegen war das Versenden etwas schwerfällig.

Freitag, 4. März 2011

Auswertungstool der XML Daten und Schule

Dieser Freitag bestand für mich auch Unterricht und der darauffolgenden Ausarbeitung für die Datenbank und der darin von uns erfassten Daten. Schulisch ging es zuerst um die Globalisierung, mit ihren Ursachen. genannt wurden untern anderen das Ende des Ost-West-Konfliktes, und die Weiterentwicklung der Kommunikationstechnologie. Auch die Riesigen wurden angesprochen. Danach wurde in ITS der elektrische Strom behandelt und die Stunde Betriebswirtschaftslehre danach klärte uns über Monopole, Polypole und Oligopole auf.

Nach dem Unterricht bin ich dann wieder in den Betrieb gefahren und habe mit meinem Ausbilder begonnen das XML - Tool mit dem ersten Auswertungs - Plugin zu erweitern. Bereits in der Datenbank enthaltene Daten sollten über einen Schlüssel mit einem weiteren Export, welcher über ein anderes Java Tool als .xls in die Datenbank eingespielt wurde abgeglichen werden. Dazu wurden zwei weitere Klassen geschrieben. Eine, welche den Vergleich vornimmt und eine weitere, welche die Vergleicherklasse instanziiert. Der Code bestand dann zum Schluß vorrangig aus SQL. Nachdem die Tests erfolgreich waren wurde der Aufruf in den Bereits bestehenden Timer eingebaut, denn die Auswertung soll ebenfalls zyklisch in einem gewissen Zeitraum und selbsttätig ausgeführt werden.

Die entstehenden Daten werden in die Datenbank in eine neue Table zurückgeschrieben und bleiben dort erhalten. Die Veränderung über einen größeren Zeitraum zu betrachten ist dabei von nicht unerheblichem Interesse. Die Auswertung bzw. Übertragung der Daten erfolgt noch (auf die Guttenberg-Art) , wird aber bei Zeiten entweder über den Browser, oder per Java erfolgen.

Donnerstag, 3. März 2011

Excel nach SQL mit JAVA

Wenn mann mit Datenbanken arbeitet kommt es öfter vor, dass mann verschiedene Datenquellen hat die man aber trotzdem automatisiert auswerten möchte. Hierfür ist es wichtig, dass man die Daten ersteinmal in einem einheitlichen System, wie zu Bespiel einer SQL - Datenbak hat, damit die Anbindung per Software einfacher und schneller von statten geht. Selbstverständlich ist es auch möglich mit den unterschiedlichsten Formaten zu arbeiten, allerdings wirds dann kompliziert, wenn sich Strukturen oder Verzeichnisse ändern, oder wenn einfach mal Fehler auftauchen und man nicht ausschließen kann, das diese nicht beim Datenimport entstanden sind.

Zuerst haben wir uns mit der Übertragung von XML nach SQL beschäftigt, nun war auch Ecxel und sein .xls Dateiformat dran. Auch heirfür gibt es, genau wie bei XML auch bereits vorgefertigte Bibliotheken, die man nur einbauen muss um dann sofort die Möglichkeiten nutzen zu können.

Hier wird zunächst ein neues Workbook erstellt. Die Klasse workbook, welche dann die xls öffnet kann dann über die Methode getSheet in einzelne Arbeitsblätter, welche in der Datei enthlaten sind aufgeteilt werden.
Also erzeugt man ein neues Sheet-Objekt und lädt diese dort hinein.
Einzelne Werte können dann methodisch reihen - und spaltenweise ausgelesen und mithilfe von SQL - Befehlen und PreparedStatement sowie ResultSet an die Datenbank übergeben werden.