Das ewige Leid der Programmierer

Eigentlich ist ja alles sooo einfach: Man bekommt eine Aufgabe und die soll man softwaretechnisch umsetzen. Also sucht man sich ein paar Wege und fängt an zu coden. Irgendwann stellt man dann fest, dass es hier nicht weitergeht. Also geht man zurück auf Anfang und durchdenkt das gesamte Konzept nochmal. Dann ist man wieder fertig und zeigt das Ganze dem Auftraggeber und prompt kommen wieder weitere Anmerkungen ("Ja und wenn das Programm mal abschmiert, was passiert dann?"). Also googelt man nach Fehlerbehandlungsmethoden für VB.NET und implementiert diese. Das tolle dabei ist: Man muss eigentlich nur noch eine Methode schreiben (außer an sehr schwierigen Stellen) und falls nun irgendwo was schief gehen sollte (beispielsweise sagt Windows: "Dein COM-Objekt mag ich nicht, deshalb kill ich es mal!"), wird das Programm beendet. Wenn es nicht gerade die Funktion für den Mailversand war, die der Auslöser war, wird noch eine Fehlermeldung verschickt!

Ach und außerdem soll noch was im Konzept geändert werden, was wir eigentlich ja auch so besprochen haben. Dummerweise habe ich es aber dann wieder anders verstanden und es lässt sich auch nicht wegkürzen. Naja, also ändert man eben wieder seinen Code und hofft, dass das nächste Mal alles in Ordnung ist. Solche Momente sind ein bisschen enttäuschend, aber lieber solche Momente (also Fehlersuche vor dem produktiven Einsatz), als wenn hinterher 5 Kollegen rummeckern (äh, das geht nicht....).

Ach und btw: VB.NET ist auf der einen Seite toll, man muss nicht viel machen. Aber auf der anderen Seite sind Bedingungen sehr krass dargestellt. In C oder von mir auch C# schreibst du eben einen 2 Zeiler:

If x = 0;
doing = "nix";

In VB.NET:

If x = 0
doing = "nix"
End If

Man hat zwar keine ; aber braucht manchmal ewig viele Zeilen. In solchen Momenten verflucht man dann doch mal VB. Aber gut, da ich sowieso alles auf Konsolenebene programmiere, ist mir das auch egal. Hauptsache das COM-Objekt arbeitet für mich und macht was ich will. :)

Warum ich das schreibe? Einfach so. Weil ich endlich mal das Programm live einsetzen möchte und nicht immer warten... ;) Aber heute haben wir alles besprochen und nun müsste es gehen.

Java, VB.NET und Linux

[youtube]http://www.youtube.com/watch?v=Mk3qkQROb_k[/youtube]
Sieht nett aus.

[youtube]http://www.youtube.com/watch?v=kLO1djacsfg[/youtube]
Ich kenn Java nicht, aber VB.NET reicht mir vollkommen. Das ist immerhin leichter als C. :D

Gefunden bei Heiko

Das meint Stupidedia zu Java. Visual Basic (also VB) kommt auch nicht so toll weg. Und ja diese ganzen Exception nerven ungemein. Wenn ich endlich diese Programme im Geschäft fertig geschrieben habe, lerne ich wohl besser Delphi

Nach der Lektüre dieses Artikels über Linux wird mir auch ganz anders.

Von nervenden Kindern, Überstunden und Mitarbeitermotivation

Letzte Woche war ja das berühmtberüchtigte Entdeckercamp von dem ich schon berichtet habe. Dort war auch ein Kind dabei, dass etwas extrem ist. Es schlägt öfters mal um sich und hat daher keine Freunde und wird auch sonst öfters abgewiesen. Selbst beim Spülen waren wir die meiste Zeit froh, wenn er nicht in unserer Nähe war.
Doch dann kam der Tag, an dem er Geburtstag hatte. Wir haben ihm ein Ständchen gesungen und von einem Betreuer (der auch berufsmäßig sein Betreuer an der Schule ist) hat ihm Age of Empires geschenkt. Dumm nur, dass sein Computer kaputt war. Also habe ich ihm angeboten, dass ich mal vorbei schaue und versuche ihn zu reparieren. Dazu haben wir später noch die Telefonnummern ausgetauscht und damit fing die Geschichte auch schon an. Er hat mich dann Sonntagabend noch angerufen, so dass ich montags nach der Fahrstunde zu ihm gefahren bin. Dort war die Sache relativ schnell klar: Die Grafikkarte war kaputt. Also zum Händler gefahren und eine neue eingebaut... Soweit, so gut. Damit lief der Rechner wieder. Ich habe ihm dann noch Windows XP installiert, da das vorhandene Windows Vista für seine Spiele einfach nichts taugte. Auch das ist an sich kein Problem. Doch wie es manchmal so ist, hat der Hersteller nur eine CD mit Treibern für Windows Vista beigepackt und es war mir nun nicht mehr wirklich möglich nach der Modellbezeichnung zu schauen. Nun hat alles funktioniert, bis auf die Soundausgabe. Ich hab dem Kind das auch so erklärt und er meinte dann: "Jaja ist doch alles OK. Danke erstmal, dass ich wieder spielen kann und dass du mir die Grafikkarte geschenkt hast!"
Zwei Tage später ruft er mich wieder abends an und meinte: "Du Tobi, mein Cousin und der Nachbar waren bei mir und meinten, ich soll dir sagen, dass du ein Idiot bist. Du hättest doch merken müssen, dass die Treiber nur für Vista funktionieren! Komm doch bitte nochmal vorbei und mach die Soundkarte wieder richtig!"
Nun denn, um die Sache noch abzuschließen gehe ich dann eben nochmal vorbei und schau ob ich doch noch irgendwie an eine Modellbezeichnung komme und somit an Treiber für Windows XP. Oh man, wenn das Kapitel abgeschlossen ist, mache ich drei Kreuze.

Dienstags bin ich wieder zur Arbeit gegangen und habe ich dann gleich mal eine neue Aufgabe bekommen. Die Synchronasation zwischen Lager und Warenwirtschaft geht ja schon grob und war nun nicht mehr wichtig. Nun solle ich "einfach" ein Programm schreiben, welches alle lieferbaren und fälligen Aufträge herausfischt und dem User herausfischt. Und als kleines Schmankerl darf ich, wenn die Sache zuverlässig funktioniert und produktiv eingesetzt werden kann die Firma zum Essen einladen. Bezahlt wird dann vom Cheffe.
Das habe ich dann die Tage auch schon angegangen und zuerst wild drauflos programmiert (grober Plan hatte ich ja im Kopf) und schon die ersten Schritte geschafft. Da der Chef nun im Sommerurlaub ist, habe ich 2 Wochen Zeit das Programm zu Ende zu schreiben und zu testen. Das Interessante ist ja, dass ca. 2000 Zeilen von der Datenbank ausgelesen werden müssen. Aber durch die aktive Filterung sind es dann doch wieder nur 1200 Zeilen, die ich dann in eine Exceldatei schreibe. Das Ganze muss man ja dann auch wieder sortieren können (alles automatisch) um es später wieder Zeile für Zeile auszulesen und weiterbearbeiten. Naja, wird noch etwas komplex, aber wird schon funktionieren... :)

Da der Artikel ja doch sehr lang ist, kommt hier mal was lustiges: Trinkgelder

Nun wieder sachlich weiter im Text:
Zur gleichen Zeit wurde auch beschlossen, dass man auf die neue Version upgraden könnte. Das habe ich dann auch gemacht, nachdem ich diese getestet habe (und doch einen Fehler übersehen habe!). Normalerweise brauche ich für solche Aktionen nicht länger als 3 Stunden. Doch ich wollte danach noch die Routine-Überprüfung drüberlaufen lassen. Diese hat sich dann bei einer Datenbank bis um 23Uhr30 hinausgezogen. Danach habe ich meine Sachen gepackt und noch von daheim aus weiter draufgeschaut. Als diese Überprüfung um 0Uhr immer noch nicht fertig war, wurde eben diese Aktion abgebrochen und die Reorganisation angestoßen. Diese war dann wenigstens um 1Uhr fertig. Naja um halb 8 bin ich dann wieder aufgewacht und nach einer langsamen Dusche und einem ordentlichen Frühstück war ich dann statt um 8Uhr eben um 8Uhr30 wieder Geschäft.

Das war also echt eine herrliche Woche mit einem nervigen Kind, das mir irgendwie leid tut, einer neuen Herausforderung mit super Belohnung, einem langen Arbeitstag und gaaaaaaaaanz viiiiiiiiiiiiiiiiieeeel Kaffee. Da war sicher kein Tag dabei, an dem ich weniger als 5 Tassen Kaffee getrunken habe.

Aber der Abschluss war dann gestern abend bei einer Geburtstagfeier. Da gabs dann lecker Sandwichtoast, nette Gespräche und ein paar "Cheers for Beers!" So eine krasse Woche hatte ich irgendwie schon länger nicht mehr.

Kaffeebild von hier geklaut. Danke an xenonb. für das tolle Bild.

Franchising unter Crackern

Das Internet ist ja richtig böse. Facebook sammelt alle Daten und weiß beinahe alles über uns. Google ist ja sowieso die größte Krake. Da vergisst man doch schon fast wieder die guten alten Phisher, welche uns auch noch die Kreditkartendaten klauen wollen. Und diese Phisher sind heutzutage auch faul und greifen auf fertige Tools zurück. Dumm nur, dass sie dabei auch noch von den Programmierern beschissen werden wie Heise berichtet.
Findige Cracker aus Algerien haben deshalb ein Tool geschrieben, welches automatisch eine Phishingseite erstellt. Dieses wird mit einer Hilfe in arabischer Sprache ausgeliefert. Lädt nun ein User dieses kleine aber feine Tool auf seinen Rechner herunter, kann er auswählen zu welchem Anbieter er eine Phishingseite erstellen möchte. Die damit erstellten Dateien lädt er dann auf seinen Server und verschickt ein paar ehrlich aussehende SPAM-Mails, bzw. macht Werbung für die Seite.
Der Clou ist nun allerdings, dass der Anwender nicht alle von Usern eingegebenen Datensätze zu sehen bekommt. Nein, der Coder ist ja nicht dumm und greift sich einfach 80% aller eingegebenen Datensätze selbst ab und verwendet diese selber. Der Tool-Anwender bekommt nur die restlichen 20% zu Gesicht.
Somit hat der Coder ein wenig Arbeit mit dem Coden aber er muss sich nicht um Werbung und Server kümmern. Sollte der Server irgendwann mal auffliegen führt die Spur ja zum "armen" Klick-Kiddie. :)
- "Es gibt einfach keine ehrlichen Verbrecher mehr."
- Franchising

Von der buero+ COM-Programmierung

Oftmals blocke ich alles Neue, mir Unbekannte ab. Erstens kenne ich es nicht und zweitens kann ich den Arbeitsaufwand immer schlecht einschätzen. Doch im Zuge einer Erweiterung des Lagers musste nun doch die immer wieder aufgeschobene COM-Programmierung in Angriff genommen werden. Der Angst davor war im Endeffekt aber dann doch ziemlich unbegründet, sondern eher aus Unwissenheit aufgebauscht worden. Schon im Februar im Rahmen der automatischen PDF-Auswertung-und-in-Datenbank-Arbeit war die COM-Programmierung ein sehr großer Knackpunkt. Nun habe ich die Dokumentation aber doch noch einmal genauer angelesen und festgestellt, dass auch ein paar brauchbare Delphi und VB Beispiele dabei sind. Damit war dann der grundsätzliche Aufbau schnell geklärt und mir war auch klar, dass ich wegen mangelnder Kenntnis der Objektorientierung zum damaligen Zeitpunkt nicht durchgestiegen bin. Damals hatte ich von einem Programmierer ein Beispiel zur Implementierung der Datenbankänderung in C# bekommen. Als Gegenzug gabs für den netten Menschen eine Packung Gummibärle.
Da ich C# nie gelernt habe, habe ich den Code anfangs auch nicht verstanden. Aber es hat funktioniert. Dank Debugging des C# Programms wurden mir dann auch die Aufrufe etwas klarer und die Doku machte auf einmal wieder mehr Sinn. Vor allem die Try... Catch... Finally... Anweisungen haben mich ein wenig gewundert. Doch das macht nun natürlich auch Sinn, denn nur so kann ich elegant auf Exceptions (also Ausnahmefehler, wenn beispielsweise die Datenbank belegt ist) reagieren.
Und nach ein bisschen ausprobieren und abschauen von den ganzen anderen Funktionen und Beispielcodes ging das meiste recht flott von der Hand. So habe ich zum Beispiel entdeckt (bzw. wurde darauf hingewiesen), dass ein Lagerbuchungsassistent existiert. Somit wird schon mal Arbeit erspart.
Und wenn ich mal nichts mehr direkt wusste und manche Fehlermeldung komisch erscheint gibt es ja immer noch Google. Beispielsweise eine Umwandlung von DBNull nach Double ist nicht möglich. Also muss noch eine Abfrage rein um zu prüfen ob das Ergebnis DBNull ist. Ich konnte es zwar nicht nachvollziehen, da in der WaWi es richtig angezeigt wird, aber naja... :)
Nach anfänglichen Bedenken, ob die 9 Wochen Arbeitszeit reichen würden, stand das komplette Grundgerüst innerhalb 3 Tagen zusammen. Es hat sogar einwandfrei funktioniert, doch die Fehlerbehandlungsroutinen fehlten noch und es war ziemlich chaotisch. Nun ist es ein bisschen geordneter und vor allem übersichtlich nach Funktionen sortiert. (Aktuell sind es mit Kommentaren und teilweise Leerzeilen ca. 400 Zeilen Code!) Als dass dann fertig war kam noch die zweite Anforderung, nämlich eine Excelliste mit den lieferfähigen Artikeln erstellen zu lassen. In der WaWi ist dazu eine Funktion implementiert, welche leider keine genauen Rückschlüsse auf die verwendeten Datenbanken zulässt. Doch ein Blick in die Variablenliste hat dann auch wieder manches Licht ins Dunkel gebracht. Die kannte ich wenigstens schon, da man diese auch öfters mal für den Druckdesigner braucht.
Je mehr ich mich damit beschäftige, desto mehr Respekt bekomme ich vor diesem WaWi. Gleichzeitig wird mir aber auch immer klarer, warum andauernd so viele EAccess Violations auftreten. Das System ist einfach ziemlich mächtig von den Funktionen und Möglichkeiten her, was aber leider auch immer wieder neue Fehlerquellen eröffnet. Doch diese sind ja meistens gut abgefangen.

"Wenn du meinst dein System sei idiotensicher, dann erfinden die User einen neuen Idioten."

Hat irgendjemand mal gesagt und leider ist damit auch ziemlich viel wahres dran.
Hoffentlich finden wir bis zum September alle Fehlerquellen und die passenden Lösungen.

Ein Gutes hat das Ganze auch: Ich habe wieder ein Ziel und damit wieder neue Lust aufs Programmieren bekommen. Ist zwar nur Konsolenprogrammierung, aber das reicht ja auch. Und wenn man es bedenkt ist COM-Programmierung auch relativ angenehm. Man greift auf fertige Funktionen zurück und muss diese eigentlich nur noch nutzen. Vielleicht noch ein wenig darauf achten, dass diese auch effizient ablaufen. Die COM-Schnittstelle ist nämlich schon recht langsam.
So im Nachhinein bin ich fast schon froh, dass mein PDF-Umwandlungsprogramm nicht zum Einsatz kam. Denn die vielen externen Programmaufrufe kann ich nun doch um einiges eleganter lösen. Vor allem macht es Sinn alles in einer Sprache zu schreiben. Das erleichtert auch das Warten des Codes. :)