Ein interessanter Fehler beim Testen von Software

In der Firma, in der ich arbeite, ist mir ein Malheur passiert, und zwar beim Testen der von mir geschriebenen Software. Ich will (vielleicht darf) ich keine Details verraten, aber es geht um ein Programm, welches ein anderes Programm startet, überwacht und beendet. Nichts Großes, nichts Kompliziertes. Eine Sache muss man aber wissen: das Programm, an dem ich arbeite und das Programm, dass von meinem gestartet wird, soll auf macOS arm64 und macOS amd64 laufen und ist keine Fat-Binary, was bedeutet, dass es für die jeweilige Plattform immer ein Bundle gibt.

Jetzt ging es zum Glück nur um eine Testversion, die ich meinen Kollegen zum Ausprobieren geben wollte. Ich packte mein Programm also, zusammen mit dem Fremdprogramm. Einmal für macOS amd64, einmal für macOS arm64 (und noch weitere Plattformen). Faul, wie ich bin, hatte ich dafür ein Script geschrieben. Leider habe ich nicht weit genug automatisiert, denn hier passierte das Problem: Ich packte mein Programm für amd64 und das Fremdprogramm für arm64. Bevor ich meine Software zum Testen herausgebe, probiere ich diese immer einmal aus, zumindest im kleinen Rahmen. Eine CI-CD-Pipeline gab es in dem frühen Entwicklungsstadium leider noch nicht (Das ist ein Fehler! Kümmert euch direkt darum!). Jetzt hätte das Problem beim Testen auffallen müssen, aber hier beging ich den entscheidenden großen Fehler in der gesamten, sehr suboptimalen Kette: Ich probierte die arm64 und die amd64 meine Software und der Fremdsoftware nur auf meiner arm64-macOS-VM aus.

Wer aufgepasst hat, kann sich sicher denken, was jetzt passiert ist: Da Rosetta 2 lief, startete sie natürlich mein amd64-Programm und mein amd64-Programm startete das arm64-Fremdprogramm, ohne, dass ich was von einem Fehler mitbekam.

Ich lieferte natürlich die amd64-Version aus und es kam, wie es kommen musste: bei den Kollegen mit amd64 macOS funktionierte zwar mein Programm, das Fremdprogramm aber natürlich nicht, da es kein Rosetta-Äquivalent auf macOS amd64 gibt.

Dabei hatte ich den Fehler die ganze Zeit auf dem Schirm, denn mein Paketierungsscript lieferte Hinweise, wenn die Architektur der Fremdsoftware mit der Architektur meines Programms nicht zusammenpasst. Aber ein Hinweis lässt sich im Stress leicht übersehen. Hier hätte ich doch besser einen Abbruch eingebaut.

Was lernen wir daraus? Am Besten vollständig automatisierte Tests implementieren, aber wenn man für verschiedene Architekturen händisch testet, das dann auch direkt auf der jeweiligen Architektur durchführen und nicht in einer Emulation.

Ich bin wieder in Lohn und Brot – Meine neue Festanstellung und wie es hier weitergeht

Ich bin wieder unter Dach und Fach und freue mich unendlich. Ich habe eine neue Festanstellung gefunden und befinde mich gerade in der Einarbeitung.

Da ich jetzt erstmal, zumindest während der Einarbeitung, in Vollzeit arbeite, habe ich leider keine Zeit mehr für Videos, da ich vollständig mit Job und Familie ausgelastet bin. Damit bleiben die ganzen Serien zuerst einmal stehen.

Wie es da in Zukunft weitergeht, weiß ich noch nicht. Ich danke aber schon einmal bis hierhin und hoffe, den ein oder anderen Blogartikel in den nächsten Wochen schreiben zu können.

Umstellung eines ganzen Netzwerks von Windows 2000 auf Ubuntu 6.04

Es muss 2005 gewesen sein, als wir überlegten, gut 60 Arbeitsplätze auf ein neues Betriebssystem zu heben. Im Einsatz war noch Windows 2000 inklusive Domäneninfrastruktur. Das System machte immer wieder Probleme, sei es bei Updates oder sogar beim Drucken. Hier und da nervte vieles und Windows 2000 war mit seinen fünf Jahren auch nicht mehr das Jüngste. Mittlerweile ging auch der Supportzeitraum zu Ende, zumindest der Mainstream-Support, und was keiner von uns wusste war, dass es noch den Extended Support gab. Aber abgesehen davon: Es musste was Moderneres her.

Natürlich diskutierten wir über Windows XP, was aber auch schon ein wenig in die Jahre gekommen war und mir so absolut überhaupt nicht gefiel und natürlich dachten wir bereits an den Nachfolger, Windows Vista, der aber noch auf sich warten lies. Zuerst dachten wir, dass wir zwei Möglichkeiten hätten: Wir bleiben bei dem, was wir haben, also Windows 2000 und wechseln dann auf den Nachfolger von XP, wann auch immer dieser erscheinen würde oder wir wechseln auf XP und dann später auf den Nachfolger.

Die Entscheidung

Da wir bereits, neben FreeBSD, Linux auf einigen unserer Server nutzten, fragte die Geschäftsleitung, ob das auch im Clientbereich eine Idee wäre, denn es liefe ja gut. Ich sagte, dass das durchaus eine Option sein könnte, dachte aber eher daran, dass große Probleme kommen könnten. Ich sagte, wir evaluieren das mal. Ich hatte schon einige Jahre Erfahrung mit Linux, war dem Projekt also alles andere als abgeneigt und dachte mir auch, dass die Plattform stabil genug sei, um produktiv damit zu arbeiten.

Linux ist ja nicht gleich Linux und nur ein Kernel, aber selbst wenn wir von GNU/Linux sprechen: eine Distribution musste her. Ich hatte ewig lange Gentoo genutzt, aber nur privat und war sehr überzeugt davon. Wenn ich bedenke, wie viel Zeit ich in Kompilationen vergeudet habe … aber das ist ein anderes Thema. Mir war klar: wir können Gentoo keinesfalls für unser Netzwerk einsetzen. SuSE mochte ich nicht wirklich, RedHat auch nicht, Mandrake … naja … und ich weiß gar nicht mehr, was es um 2005/2006 so alles gab. Aber eine kleine Distribution begann, groß zu werden: Ubuntu. Debian war mir von jeher ein Begriff, und da Ubuntu darauf basierte, schauten wir uns das an und ich begann, längere Zeit damit zu arbeiten. Es war ok, lief stabil und ich konnte das Meiste damit erledigen. Allerdings war ich auch kein Kaufmann, Designer oder Redakteur. Mir war direkt klar: für unsere Produktion ist es nichts, darüber müssen wir nicht weiter nachdenken. Aber Texte damit verfassen: Das ging. Und so beschäftigten wir uns tiefer mit der Materie.

Die Automatisierung

Mein Vorgänger war der absolute Turnschuhadmin. Nichts war automatisiert, er bevorzugte das sinnlose Herumlaufen. Das wollten wir mit der Umstellung ebenfalls erschlagen. Wir wollten aber auch eine Art Domäne haben, zumindest mal globale Homeverzeichnisse und zentrale Anmeldungen. Die Installation sollte von selbst gehen, oder wenigstens, halbwegs von selbst.

Für die Installation entschieden wir uns, da ja Debian-basiert, für Kickstart und ein selbstentwickeltes Script. Mit Kickstart war es problemfrei möglich, eine generische Betriebssysteminstallation durchzuführen. Wir hatten zu dem Zeitpunkt die IP-Adressen noch manuell vergeben und keinen DHCP-Server mit MAC-Matching genutzt, so dass wir am Bootprompt die IP-Adresse für den jeweiligen Rechner mit angeben mussten. Anhand der IP-Adresse wurde entschieden, welche Software und Konfigurationen der Rechner bekam. Alles haben wir selbst gescriptet und entwickelt. Es lief recht reibungslos. Ich erinnere mich noch an den Tag der Umstellung. Wir liefen mit mehreren Personen durch die Abteilungen und starteten die Installationen an. CD rein, davon booten, IP eingeben, der Rest passierte letztlich automatisch. So ganz wahr ist das nicht. Der Installationsprozess war in zwei Bereiche aufgesplittet: den mit Kickstart zur Betriebssysteminstallation und dann der eigentliche Konfigurationsvorgang, der nach der Installation einmal händisch gestartet werden musste. Ich weiß nicht mehr, warum wir das nicht auch automatisierten, aber es hatte irgendeinen Grund. Ein Problem, das wir allerdings bis zum Schluss nicht wegbekamen, waren ein oder zwei Dialoge, die man tatsächlich selbst mit OK bestätigen musste. Sie ließen sich nicht wegoptimieren. Damit war eine unbeaufsichtigte Installation zwar nicht möglich, aber zu der Zeit konnten wir ein komplett installiertes und konfiguriertes System in gut dreißig Minuten mit wenig Aufwand bereitstellen. Das Optimum war damit noch nicht erreicht, aber der Komfort im Gegenzug zu früher war für uns weltbewegend.

Globalitäten

Zusätzlich wollten wir noch zwei weitere Dinge: eine zentrale Anmeldung und globale Home-Verzeichnisse.

Bei der zentralen Anmeldung entschieden wir uns gegen LDAP und Kerberos, da es einfach für uns in dem Zeitraum zu komplex war und wir ja auch noch das Tagesgeschäft zu betreuen hatten. Es gab eine sehr viel einfachere Lösung, die natürlich auch wesentlich limitierter war und letztlich kaum Sicherheit bot: NIS. Doch wir fuhren damit gut. Neben den Linux-Clients hatten wir daran auch die Macs und die FreeBSD-Maschinen angebunden und es lief. Wir arbeiteten später noch an LDAP, aber erstmal war das so in Ordnung.

Die Konstellation lief fast zehn Jahre und es gab unglaublich wenige Probleme. Aus Kompatibilitätsgründen (Kombination Word und InDesign) haben wir uns dann aber entschlossen, die Redaktion aus Linux herauszunehmen und Macs zu geben, damit der Austausch mit der Produktion besser lief.

Würde ich es wieder tun?

Technisch war das Projekt, meiner Meinung nach, ein voller Erfolg. Die Administration machte, zumeist, Spaß und lief, bis auf wenige Probleme, super. Aber würde ich es wieder tun? Nein. Denn was Computer vereinfachen, verkomplizieren die Menschen. Einige waren begeistert, aber viele eben nicht und es gab hier und da guten Gegenwind. Ich empfand es als sehr anstrengend. Was ich bei der Administration sparte, musste ich in sinnlosen Diskussionen ausbaden.

Das Interessante aber war, dass eine solche Umstellung möglich war. Es waren dann zwar keine sechzig Computer, aber immerhin um die fünfundreißig, die mit Linux liefen und das sehr gut. Aber die Leute müssen sich darauf einlassen.

Videoreihe: Entwicklung einer Desktopsoftware für compow mit C++, Qt und SQLite Teil 8

Der Benutzer soll die Datensätze exportieren können, und zwar als CSV, JSON und XML. Dazu treffen wir in diesem Video die Vorbereitungen, indem wir die Daten des CompanyTypes in einer Hashmap (QHash) speichern, um sie später einfach auszulesen.

Eine Desktopanwendung für compow mit C++, Qt und SQLite - Teil 8
Eine Desktopanwendung für compow mit C++, Qt und SQLite – Teil 8

Und so sieht es aus:

QtCreator mit CSV-Export in der Debug-Übersicht
QtCreator mit CSV-Export in der Debug-Übersicht

Hier geht es zum Video.

Meine IT-Laufbahn

Oftmals interessiert es Menschen, warum andere Menschen das tun, was sie nun mal tun und auch, warum. Ich möchte hier einmal meinen Werdegang niederschreiben, der mich beruflich und privat sehr geprägt hat. Es geht um meine IT-Laufbahn.

Alles begann, als ich ungefähr sechs Jahre alt war. Vielleicht auch schon ein wenig früher. Ich interessierte mich sehr für elektronisches Spielzeug, allem voran für Spielzeugroboter. Ich hatte eine ganze Menge. Sie konnten blinken, herumfahren, sprechen (entweder durch ein Sprachmodul oder durch ein kabelgebundenes Handsprechgerät) und manche konnten sogar dampfen. Die Zeit war großartig, und während andere ihre Kuscheltiere und Puppen mit ins Bett nahmen, nahm ich meine Roboter mit. Von meiner Mutter wurde das kritisch gesehen, wachte ich nicht nur einmal mit großen Schmerzen auf. Das nahm ich in Kauf.

Einer unserer Nachbarn und Bekannten verkaufte dann seine Spielekonsole und ich musste sie haben. Ich weiß nicht mehr, wann ich sie bekam, aber es musste um das Jahr 1985 herum gewesen sein. Ich erinnere mich noch, dass es kalt war, so dass ich davon ausgehe, sie zu Weihnachten bekommen zu haben. Es handelte sich um das Atari 2600. Ich muss überglücklich gewesen sein, und so kam es, dass wir alle fleißig Pac-Man spielten und was es sonst noch so gab. Ich erinnere mich noch, wie ich versuchte, mit einem Hubschrauber in Seitenansicht durch eine Art Labyrinth geflogen zu sein. Auch an Pitfall 2 erinnere ich mich sehr gerne, wie ich mit Lianen über gefährliche Gewässer und noch gefährlichere Krokodile geschwungen bin, über Baumstämme sprang und im Dungeon den gefährlichen Monstern auswich.

Das reichte aber nicht. Ich brauchte einen Computer. Nun war es so, dass wir nicht viel Geld hatten, aber meine Eltern schafften es trotzdem, einen gebrauchten Schneider CPC464 zu organisieren. Wenn ich so zurückdenke, ein eigentlich grandioses Gerät, welches ich zu Weihnachten meines achten Lebensjahres bekam. Für die, die die alten Homecomputer nicht kennen: Computer und Tastatur bilden eine Einheit (wie auch beim C16, C64 und C128 von Commodore oder beim Amiga 500, 600 und 1200). Dazu war ein Datasettenlaufwerk eingebaut. Angeschlossen wurde diese Rechenmaschine an einen Grünmonitor. Das bedeutete, das ganze Bild war grün. Dunkelgrün, hellgrün, grün. Nach dem Einschalten startet man direkt im Basic-Prompt und kann anfangen, zu programmieren oder ein Programm oder Spiel von Kassette zu laden. Das dauerte nicht nur lange, sondern war auch recht fehleranfällig, so dass man die langen Versuche ab und an wiederholen musste. Ich mochte aber die Töne, die dabei herauskamen. Mit dem Monitor und dem Computer, an dem ich sogar meine Atari-2600-Joysticks anschließen konnte, und ein paar Spielen, kam auch ein umfangreiches Benutzerhandbuch mit, welches viele Codebeispiele in Basic bereithielt. So konnte ich … trotzdem nichts verstehen. Mit acht Jahren ist das gar nicht so einfach. Dennoch tippte ich viele Listings ab und feierte dabei einige Erfolge, wie auf einmal irgendwelche Kreise oder Vierecke auf dem Bildschirm gezeichnet wurden.

Ich wuchs und sah bei einem Freund eine völlig neue Welt. Er hatte eine Powermaschine. Ein System, was mich massiv beeindruckte und ich unbedingt auch haben wollte. Einen Amiga 500. Nicht nur konnte er Farbe (was der CPC auch konnte, hätte man den richtigen Monitor gehabt), nein, statt eines schäbigen Datasettenlaufwerks hatte er ein Diskettenlaufwerk mit einer mittleren Zugriffszeit von „wahnsinnige Geschwindigkeit“. Ich musste so ein Ding haben. Die Spiele waren eine neue Generation und auch die ganze Software interessierte mich brennend. Entweder meine Eltern erkannten meine Berufung, oder ich hatte noch mindestens so viel vom Kindchenschema, dass am nächsten Weihnachten diese Hightechwunderkiste unterm Baum lag. Es war wunderbar. Ich war in einem Alter, da wusste ich bereits, was ich bekam, so dass ich mir im Vorhinein vom Taschengeld etliche Disketten kaufte und alles von Freunden kopierte, was ich konnte. Ich startete an diesem Weihnachten mit einer schier endlosen Software- und Spielesammlung und war lange von dem System sehr begeistert, was ich auch heute wieder bin. Allerdings habe ich mit dem Computer nie wirklich versucht, zu programmieren. Was ich allerdings hatte war ein Neun-Nadeldrucker mit Farbe. Das Farbband hatte vier Farben und damit eine separate für Schwarz, so dass man „natives“ Schwarz drucken konnte, wenn man was Buntes gedruckt hat. Es gab aber auch einfache schwarze Bänder ohne Farbe, die erheblich günstiger waren. Das Gerät war laut, hatte keine Papierkassette, so dass jedes Blatt einzeln eingelegt werden musste, aber die Möglichkeit, DinA3 zu drucken und Endlospapier zu verarbeiten. Soweit ich mich noch erinnere, war es ein Star-LC 200, der via Centronics an den Parallelport des Amigas angeschlossen war. In Kombination mit meinem maximal 400dpi Handscanner war es zu der Zeit eine großartige Kombination und hat Spaß gemacht.

Die Zeit des Amigas war dann aber doch bald gezählt und schweren Herzens wünschte ich mir einen Personal Computer, denn meine Freunde hatten ja auch alle einen. So schloss ich mit meinen Eltern einen Pakt, dass wir den Amiga verkaufen wir dafür einen PC anschaffen. Wir schauten uns erneut auf dem Gebrauchtmarkt um und fanden in Köln (Weiden) ein passendes Angebot. Ein 386er sollte es werden mit 4MB RAM und 80MB Festplatte. Wir fuhren vorbei und kauften das Gerät. Schon bald interessierte es mich, wie Computer aufgebaut waren und, ich denke zum Entsetzen meiner Eltern, schraubte ich das Gerät auf und begann, Karten einzustecken, Diskettenlaufwerke zu tauschen und sogar ein CDROM einzubauen. Ich interessierte mich zuerst viel mehr für die administrative Seite der Computerei. Ich spielte viel mit DOS und Windows 3.11 herum, war von dem Zeug aber nie sonderlich begeistert.

Es kam die Zeit der Mofas und Mopeds und ich verlies ein wenig die Computerei. Nicht viel, ich blieb ihr immer treu, aber mein Fokus war für eine gewisse Zeit auf etwas anderes gerichtet. Ich kam aber wieder zurück und stellte fest, dass so ein 386er nicht mehr das Mittel der Wahl war, um vernünftig zu arbeiten … oder zu spielen. Also bat ich meine Eltern um Hilfe und sie, immer noch nicht reich, kratzten alles Geld zusammen und kauften mir einen Pentium mit 133MHz, 4MB RAM (keine Ahnung, warum so wenig), die ich später auf 8MB aufrüstete und dann auf 16MB, und einer Festplatte mit einer Kapazität von 1GB. Ich dachte, die bekomme ich niemals voll. So schnell hatte ich mich noch nie geirrt. Ich spielte weiter mit DOS und Windows 3.11, später dann mit Windows 95 und Windows 98. Es war interessant, doch hauten mich die Systeme nie aus den Socken. Ich probierte, neben MSDOS, noch andere DOS-Derivate, unter anderem DRDOS und PTS-DOS, spielte mit OS/2 Warp 3 herum und arbeitete an administrativen Kleinkram. Wenig später, ich hatte zusätzlich noch meinen 386er, kaufte ich mir meine ersten Netzwerkkarten. Zwei an der Zahl, bei denen man die IRQs noch selbst jumpern musste. Schon war man in der schönen neuen Welt des Datenaustausch in Netzwerk hausintern, mit Koaxialkabeln, T-Stücken, Terminatoren, 10Mbit und einer hohen Fehleranfälligkeit. Spaß hat es allemal gemacht, zumal man beginnen konnte, Computerspiele im Netzwerk zu spielen, und zwar mit mehr als nur einer weiteren Person, wie es mit Nullmodem- oder Parallelkabel möglich war. Diese Form von Netzwerk hat mich tatsächlich einige Zeit begleitet, bis ich auf ein 100Mbit-Netzwerk mit Hub umgestiegen bin. Die (theoretische) Verzehnfachung der Geschwindigkeit war bahnbrechend für mich und durch die Nutzung eines alten 486er als Router mit 56k-Modem konnten erstmals mehrere Rechner über einen SOCKS5Proxy ins weltweite, kaum bezahlbare Internet gehen. Ich weiß noch, wie meine Mutter immer schrie: „Bist du schon wieder im Internet? Ich will telefonieren!“

Nach den Rechnern von der Stange begann ich dann, meine Computer selbst zusammenzustellen und zusammenzubauen. Das habe ich über Jahre hinweg getan, den letzten vor ungefähr vier Jahren. Schnell, als armer Schüler, wechselte ich von Intel zu AMD, K5, K6, K6 II, K6 III, Duron und wie sie alle heißen und ich arbeitete mich in Linux ein. Immer wieder kurz, dann brachte es mich zurück zum verhassten Windows.

Aus persönlichen Gründen schmiss ich in der elften Klasse die Schule, lungerte ein oder zwei Monate zu Hause herum, bis meine Mutter mich zwang, aushilfsweise in einem Lager für Textilien auszuhelfen. Täglich zuerst eine Stunde für mehrere Wochen, dann wurde mir gesagt: „Hey, du bist zuverlässig, schnell und gut, warum willst du nicht länger, nämlich den ganzen Tag, hier arbeiten?“ Wie sehr ich es hasste. Aber ich musste die Zeit zum Zivildienst irgendwie herumbekommen und so arbeitete ich hart im Lager. Ich habe dann, mit meinen Kollegen, 40-Fuß-Container, teils mit Säcken mit 50kg, händisch ausgeladen. Ich arbeitete dort ein dreiviertel Jahr und, obwohl das eine schwere Arbeit war, die ich nie wieder machen möchte, möchte ich die Zeit nicht missen. Ich habe gutes Geld verdient und gelernt: „Körperliche Arbeit ist nichts für mich.“

Ich absolvierte also mein Jahr Zivildienst und mir war bereits seit meinem achten Lebensjahr klar, dass ich etwas mit Computer machen wollte. Ohne Abitur kein Studium, und da ich eh immer eher der Praktiker als der Theoretiker war, entschloss ich mich, mich für die Ausbildung zum Fachinformatiker mit Fachrichtung Anwendungsentwicklung zu bewerben. Ich weiß noch, dass ich bei einem Freund in Köln war, als meine Mutter gegen 18 Uhr anrief und meinte, dass ein Unternehmen, bei dem ich mich bewarb, anrief und sie mich gerne nehmen würden. Ich war außer mir vor Freude. Dort blieb ich dann 1,5 Jahre, ich hatte aber Gründe, zu wechseln und wechselte so in eine andere Firma, in der ich die Ausbildung abschloss.

Dann war ich einen Monat arbeitssuchend.

Der Mann meiner Cousine kannte aber jemanden in einem Verlag in Remagen, der auch händeringend nach Verstärkung suchte und ich dachte mir, ich schicke da mal eine Bewerbung hin. Lust hatte ich keine. Dummerweise wurde ich zum Vorstellungsgespräch eingeladen. Ich dachte, das geht eh nach hinten los. Ich hatte meine schäbigsten Klamotten angezogen, völlig ausgewaschenes Hemd, kaputte Hose. Das Vorstellungsgespräch empfand ich nicht als gut gelaufen und ich war froh, bis mich, einige Stunden später, jemand von der Firma anrief und sagte, ich hätte den Job. Ich dachte mir: Shit. Ok, ich nahm mir dann vor, dort ein halbes Jahr zu bleiben. Daraus wurden 14 Jahre, bis die Firma leider insolvent ging.

Zuerst assistierte ich meinem Vorgesetzten bei administrativen Aufgaben. Schnell wurde bekannt, dass ich ja Programmierer bin und ich bekam die ersten programmiertechnischen Aufgaben zugeteilt. Zuerst Websites, dann Database Publishing. Mein Vorgesetzter wurde aus diversen (guten) Gründen gefeuert und ich übernahm das Steuerrad der IT. Eineinhalb Jahre habe ich geklotzt, kein Urlaub, kein krank, teils bis spät in den Abend oder die Nacht, teils an Wochenenden. Dann kam die Idee auf, einen Auszubildenden aufzunehmen, der mich unterstützt. Er war auch bis zum Schluss bei der Firma. Gemeinsam brachten wir das Netzwerk auf einen akkuraten Stand, machten mit Softwareentwicklung weiter und bildeten noch weitere aus und holten noch mehr Leute mit in die Abteilung, denn es wurde ernst, als wir das Verlagsprogramm ablösen sollten. Die Frage war: nehmen wir was von der Stange oder entwickeln wir selbst was? Wir entwickelten selbst, mit wxWidgets und C++ und PostgreSQL. Nebenher stellten wir noch das ganze Netzwerk von Windows 2000 auf Ubuntu Linux um, kümmerten uns ums Autodeployment, automatisierten einiges weg, stellten die Redaktion dann doch von Ubuntu auf macOS (damals noch Mac OS X) um, automatisierten dort auch (DeployStudio, AutoDMG, AutoPKG, Munki, eigene Software) und machten einige weitere Softwareentwicklungen, kümmerten uns um hochverfügbare Firewalls mit OpenBSD und redundante Server mit FreeBSD. Es war herrlich, wir haben sehr viel gemacht, ich war für die Abteilung zuständig und für alles, was man in eine Steckdose stecken kann. Wir haben alles inhouse gemacht, selbst um Kopiersysteme haben wir uns gekümmert, das E-Paper-System sowie Shopsysteme entwickelt, gepflegt und an die Verlagssoftware angebunden, Inventarisierungssysteme und Softwareverteilungssysteme für unsere Vielzahl an Betriebssystemen entwickelt (Windows, macOS, Linux, FreeBSD und OpenBSD war im Einsatz), das Backup auf Tape und Storage gemacht, und so weiter und sofort. Ich habe in C eine Software geschrieben, um die Website von einem Quantum SuperLoader 3 auszulesen und zu steuern, da es keine Treiber für FreeBSD für die Maschine gab, um zu schauen, was genau ist in welchem Slot drin. Wir haben sogar Platinen geätzt und mit Mikrocontrollern Schaltungen gebaut. Ich habe in der Zeit eine Menge gelernt, bis, ja bis wir alle hochgerufen wurden und uns die Kündigung gegeben wurde. Das war traurig, sehr traurig.

Ich versuchte mich dann mit meiner Frau an einer eigenen Firma. Wir entwickelten compow, eine Firmenwebsite, auf der sich Firmen vorstellen können und Benutzer nach Jobs suchen können. Programmiertechnisch recht anspruchsvoll, aber wir sind einfach keine Unternehmer. Also heuerte ich bei einer neuen Softwarefirma an. Auch da entwickelte ich in Java, C++, VisualBasic und Pascal (Delphi -> FreePascal).

Die Computerrei war aber auch immer mein Hobby, nicht nur mein Beruf. So entwickelte ich teils an freier Software, an eigener Software, probierte viel über die Dekaden aus und herum und bildete mich so weiter.

Und genau das mache ich jetzt immer noch. Natürlich bin ich zurzeit aktiv auf Jobsuche, denn leider hat das letzte Unternehmen, in dem ich beschäftigt war, auch Insolvenz angemeldet. Ich nutzte jetzt die Gelegenheit und versuche mich momentan an YouTube. Weiterhin bilde ich mich in verschiedenen Systemen weiter. Die Zeit, die ich vorher mit einem Job verbracht habe, versuche ich nun, mit Jobsuche, Weiterbildung und YouTube sinnvoll auszufüllen.

So viel zu mir. Wenn ihr Fragen habt, gerne her damit (:

Warum ist QtCreator so schlecht?

Immer wieder lese ich zur Zeit, dass Programmierer den QtCreator für eine der schlechtesten IDEs überhaupt halten. Ich konnte das bisher nicht nachvollziehen, bis auf Kleinigkeinten finde ich, dass QtCreator eine recht gut IDE ist.

QtCreator
QtCreator

Ich muss durchaus zugeben, dass ich eher die Kommandozeile (Shell), make oder gmake und vor allem einen vernünftigen Editor – VIM – bevorzuge, um zu entwickeln. Zumindest habe ich das so über Jahre hinweg recht erfolgreich gemacht. Doch neben meinem liebsten Editor kenne ich auch andere Editoren, Pseudo-IDEs (Visual Studio Code zum Beispiel) und einige IDEs (Visual Studio, Eclipse, Netbeans, IntelliJ IDEA, Clion, Delphi, Lazarus, Anjuta, KDevelop, Code::Blocks und was weiß ich, was noch). Die beiden verschrienen IDEs gefallen mir komischerweise am besten: QtCreator und Lazarus IDE.

Warum ist das so? Nehmen wir einmal Visual Studio. Bis das Ding gestartet ist, bis ich ein Projekt angelegt oder, schlimmer noch, geladen habe, dauert es ewig bis drei Tage. Danach ist alles so träge und nervig, die Vorkonfiguration kaum zu benutzen, das Einrückverhalten eine Katastrophe und der Editor eine Art Notepad im modernen Gewand. Gut, das ist jetzt übertrieben. Die Editoren leisten schon eine Menge mehr, als Notepad, allerdings halte ich sie, zumindest in der Standardkonfiguration, für unbenutzbar. Tatsächlich ist das bei QtCreator und Lazarus nicht anders. Vergleicht man die Editoren mit modernen Dinosauriern wie VIM, dann merkt man schnell, was effizient ist und was pseudoeffizient ist.

Dann kommen die ganzen Automatismen, die Automagic dazu. All das nervt mich oftmals, denn tauchen Probleme auf, sind sie oftmals nur schwer behebbar, denn man kennt die Automagic dahinter ja nicht und dann nehmen einem diese Systeme nicht Arbeit ab, sondern machen noch viel mehr.

Natürlich sind die integrierten Debugger toll, auch, dass Referenzenzähler mit drin sind, man im Code hin und her springen kann usw. Aber sie lahmen oftmals so sehr, dass ich meinen Gedankenfluss andauernd unterbrechen muss, warten muss oder irgendwas abstürzt.

QtCreator kann nicht viel. Es handelt sich um einen “schlechten” Editor mit Projektmanagement, GUI-Designer und ein paar Nettigkeiten wie integriertem Debugger. Die Sache ist schon komplexer, aber wenn man es herunterbricht, bleibt eine nicht so hochkomplexe IDE, die sich angenehm betreiben lässt. Denn sie unterstützt mich, macht Automatismen oder sichtbar und einfach handlebar. Genau das ist für mich wichtig: zumeist, nicht immer, weiß ich, was passiert und kann auch händisch recht problemfrei eingreifen. Dabei kann ich aber auch im Code herumspringen, Fenster splitten, den grafischen Debugger starten und Kompilierszenarien auswählen. Mir gefällt das sehr und ich empfinde QtCreator tatsächlich als eine IDE, mit der ich gerne arbeite, auch wenn sie Schwächen hat (Editor – das Problem haben aber alle IDEs, die ich kenne, Refactoring ist nicht schön, Automatismen wie Getter/Setter erstellen sind nicht vorhanden, usw.). Ich finde es schade, dass die IDE so zerissen wird. Das selbe bei Lazarus. Ich finde die IDE schön aufgeräumt und einfach in der Nutzung. Darin liegt für mich die Mächtigkeit des Systems.

Doch freue ich mich auch immer wieder, wenn ich auf der Shell und mit VIM arbeiten kann.

FreeBSD-Grundkurs 013: Software installieren und verwalten mit der Ports-Collection

Nachdem wir uns im letzten Video mit der Softwareverwaltung mittels “pkg” beschäftigt haben, kommt heute ein Überblick über die Benutzung der Ports-Collection.

Software installieren und verwalten mit der Ports-Collection
Software installieren und verwalten mit der Ports-Collection

Im Gegensatz zu pkg, bei dem bereits kompilierte Software installiert wird, wird sie beim Installieren von Ports kompiliert. Hat den Vorteil, dass man noch spezifizieren kann – natürlich je nach Port – was man drin haben möchte, aber den Nachteil, dass man kompilieren muss und das Zeit, Strom und Geld kostet.

Worum es in diesem Video nicht geht: Management-Software wie portmaster oder portupgrade. Ich zeige aber einmal die Verwendung von portfind.

Hier geht es zum Video.

Tipp: Notizenprogramm für nahezu alle Plattformen mit Synchronisierung

Wahrscheinlich werde ich noch ein Video dazu machen, aber erstmal als ein kleiner Tipp: Joplin.

Nachdem ich schon eine ganze Weile wieder auf macOS umgestiegen bin (von FreeBSD), suchte ich eine Alternative zu CherryTree, da die GTK-Anwendung unter macOS recht unzuverlässig läuft und sich auch nicht sonderlich gut benutzen lässt. Ich bin dann zufällig auf Joplin gestoßen.

Joplin
Joplin

Letztlich handelt es sich um eine Notizen-App, die via Markdown oder per WYSIWYG-Editor benutzt werden kann. Informationen können in einer Baumstruktur gespeichert werden und die Software gibt es für alle möglichen Betriebssysteme. Ich nutze sie auf

  • macOS
  • Windows
  • iPadOS
  • Android

Das Schöne an Joplin ist, dass die Software ihre Daten synchronisieren kann. Sie bietet dafür verschiedene Dienste an. Ich nutze WebDav. Damit habe ich alle Infos auf allen genutzten Geräten und kann auch per Handy mal flott was notieren und auf meiner Workstation dann weiter verarbeiten.

Zwei Dinge nerven mich allerdings:

  • Die Synchronisierung auf WebDav ist schnarch lahm. Vielleicht liegt es an NextCloud, welches wohl Probleme mit PostgreSQL hat (gibt Foreneinträge ohne Lösung dazu), vielleicht aber auch an Joplin. Ich suche noch nach einer Lösung
  • Auf den mobilen Plattformen gibt es keinen WYSIWYG-Editor

Schaut es euch einfach mal an, es ist kostenlos.

Videoreihe: Entwicklung einer Desktopsoftware für compow mit C++, Qt und SQLite Teil 7

In diesen ca. 20 Minuten machen wir einiges. Wir laden das Logo der Firma im Firmeneintrag und zeigen es an. Dann implementieren wir noch die Funktion, dass man aus der Firmenmaske die Firma direkt auf der compow-Website anzeigen kann und wir machen die Ausgabetabelle der Firmen sortierbar.

Videoreihe: Entwicklung einer Desktopsoftware für compow mit C++, Qt und SQLite Teil 7
Videoreihe: Entwicklung einer Desktopsoftware für compow mit C++, Qt und SQLite – Teil 7

Und so sieht es (auf macOS) aus:

Firmeneintrag mit angezeigtem Logo
Firmeneintrag mit angezeigtem Logo

Hier geht es zum Video.

Videoreihe: Entwicklung einer Desktopsoftware für compow mit C++, Qt und SQLite – Was kommt jetzt?

Diese Woche wird es erstmal kein Video geben, da zu viel los ist und alle hier kränkeln. Aber was kommt als nächstes?

Nunja, ohne Video werde ich als erstes die Anzeigemaske für die Firmen erstellen, denn das ist langweilige Fließbandarbeit. Danach werden wir uns gemeinsam ansehen, wie wir das Logo-Bild der einelnen Firmen, welches Base64-encoded in der SQLite-Datenbank liegt, in der Firmenmaske anzeigen können. Vielleicht bauen wir es auch in die Ergebnisliste mit ein.

Dann brauchen wir noch etliche weitere Teile:

  • Export der Suchliste
  • Export von Firmen
    • XML?
    • JSON?
    • CSV?
    • Text?
  • Drucken von Firmen
  • Eine Toolbar
  • Ein Menü
  • Einen “Über”-Dialog (About)
  • Für Windows einen Installer
  • Eine Hilfe für die Software oder ein Handbuch?
  • Tests auf Linux, FreeBSD und Windows
  • Vielleicht noch mehr, was mir gerade nicht einfällt

Ich denke, wir werden uns dann nächste Woche damit beschäftigen. Bis dahin hoffe ich, dass ich die Firmenmaske fertig bekomme, wonach es zur Zeit aber nicht aussieht.