2021 – das erste Jahr im Zeitalter des Wassermanns

Die Saturn und Jupiter Konstellation vor Weihnachten war nicht nur schön anzusehen, sie kündete dazu eine “große Mutation” an. Für die nächsten 200 Jahre läuft diese Konstellation im Sternzeichen Wassermann ab.

Zum ersten Mal hörte ich von diesem Zeitalter 1982 auf Sri Lanka. Ich machte nach dem Diplom ein paar Monate Auszeit dort. Ein Paar aus Würzburg wollte mal wieder Deutsch reden. Beide waren ganz in Rot gekleidet und gaben sich recht schnell als Sannyasins zu erkennen. Es war die Zeit von Bhagwan, dem Guru aus Puno, der in den USA für jeden Tag einen Rolls-Royce haben wollte.

Der Mann sagte nicht viel, sie erzählte umso mehr. Bald würde das “Zeitalter des Wassermanns” kommen, in dem das Spirituelle vor dem Materiellen käme. Dann würden sich Nationen und Egoismen auflösen und neue Religionen entstehen. Wer weiß, vielleicht wäre Bhagwan der Prophet dieser neuen Zeit. Diese Zeitenwenden verliefen immer apokalyptisch, aber diesemal ja vielleicht nicht.

Die Bhagwan-Geschichte endet im Skandal und ich erwartete eine Apokalypse:

  • atomare Mittelstreckenraketen
    Das war das Thema anfang der 80er. In Deutschland wäre in einer halben Stunde alles vorbei, aber der Rest der Welt hätte es auch nicht besser. Da durch die Atombomben soviel Staub in der Stratosphäre wäre, dass die Sonne ein paar Jahre nicht mehr scheinen würde, verhungert ein Großteil der Menschheit.
  • Ozonloch
    Durch die Kühlmittel der Klimaanlagen wird das Loch in der Ozonschicht oberhalb der Stratosphäre immer größer und durch die kosmische Strahlung ist dann ein Leben auf der Erdoberfläche nicht mehr möglich. Ein Teil der Menschheit könnte unterirdisch überleben und dann neu anfangen.
  • Waldsterben
    Durch die Entwaldung der Nordhalbkugel wird Landwirtschaft unmöglich und ein Großteil der Menschheit verhungert.
  • brennende Ölfelder im ersten Irakkrieg
    Rauchschwaden zogen bis hinauf zur Stratosspäre, würde ein atomarer Winter drohen?

Als die Löschung dieser Ölfelder durch “red adair” nur eine Fußnote im Spiegel wert, kündigte ich mein Abonnement und nahm die Sache mit den Apokalypsen nicht mehr so ernst. Das mit dem neuen Zeitalter vergaß ich.

Doch nun kommt Corona und dann diese Konstellation und ist vielleicht doch etwas dran am neuen Zeitalter?

Die alten Religionen, die alle ein “fürchtet euch nicht” predigten, tragen Mund-Nasenbeckung und halten Abstand. Ein Paradies nach dem Tod wird weder versprochen und noch ein Glaube daran verlangt. Damit bringen diese Religionen und Kirchen keine Gegenleistung fürs befolgen.

Ich bin gespannt was hier passieren wird.

 

Software – Magie oder ?

An manchen Tagen zeigt sich die magische Seite der Softwareentwicklung. Magisch ist alles, was dem Ungelernten verborgen ist. Manchmal aber glauben auch die Gelernten und die, die meinen etwas gelernt zu haben, an Magie.

An diesem Montag verhielt sich die Software anders als am Freitag. Von den schönen Bildern, die ich im letzten Beitrag schilderte, zeigte sich keines.

Magisch war an dieser Stelle noch nichts. Immerhin verwendete die Software Teile von anderen Projekten und bei einem neuerlichen Zusammenbau am Montag konnte es passieren, dass eben etwas nicht stimmte.

Obwohl? Unsere Oberfläche hat ihre eigenen Icons, die von unserem UX-Designer gemalt wurden. Warum nur wurden sie nicht gefunden?

Ich forschte den ganzen Tag. Am Ende zeigten sich die Bilder wieder. Die Ursache schien aber magisch zu sein!

„Software – Magie oder ?“ weiterlesen

Icon – drei Irrwege

Unsere Oberfläche muss in ihrer Auflösung den modernen Bildschirmen anpassen!

Die ganz wichtigen Kunden haben Bildschirme mit nahezu Apple Auflösung. Da kommen die kleinen 16 mal 16 Pixel großen Button nicht gut. Wenn Windows das automatisch anpasst, sieht das eckig und verschwommen aus. Ohne Anpassung sind die Schaltflächen so klein, dass kein Kunde sie findet.

Deswegen gilt es auf zu hübschen!

Der UX Designer hat schon skalierbare Icons für alle Button Bitmaps entworfen. Entscheidungsträger haben sich darüber versammelt und endgültige Versionen beschlossen.

Ich brauchte sie nur noch einzubauen. Das muss Pillepalle sein und ich wollte es nebenher erledigen.

Da wir Win32 API verwenden, muss ich die Icons zu Bitmaps im BMP Format konvertieren. Der UX Designer hat aus den Icons Bitmaps im PNG-Format in verschiedenen Auflösungen erzeugt.

Das einzige Problem war die Toolbar API. Hier kommen Imagelists zum Einsatz. Es galt die Bitmaps zu „Bitmapstripes“ zu verknüpfen.

Das sollte doch einfach sein. Was konnte da schiefgehen?

„Icon – drei Irrwege“ weiterlesen

Dreimal C++ – lambdas in legacy code

Wie schon zuletzt beschrieben, galt es C++ Software aus einem Nachbarprojekt zu übernehmen. Die dort tätigen Kollegen verwendeten begeistert die Features von C++ 2014. Vor allem der Datentyp „auto“ und die Initialisierung mit geschweiften Klammern hatte es ihnen angetan. Auch setzten sie shared_ptr und unique_ptr ein. Falls diese dann doch mit traditionellen Pointer darunter mischen, startet unter Umständen eine interessante Fehlersuche.

Aber mich interessierte die Art und Weise wie sie lambdas einbauten. Ich suchte nach eckigen Klammer gefolgt von einer geöffneten Klammer und konnte drei Sorten identifizieren:

  1. lokale Subroutinen (hätte man auch mit #defines machen können)
  2. Abräumer von von Windows handles (scope guard, geht kaum ohne lambdas)
  3. zur Initialisierung von static Variablen (das fand ich cool)

„Dreimal C++ – lambdas in legacy code“ weiterlesen

c++ im Jahr 2019: lambda und diskette

Was ich neulich im Job sah, warf mich förmlich um. Zum ersten Mal sah ich C++ lambda Ausdrücke in einem in die Jahre gekommen Softwarestapel. Es war sogar eine richtig praktische Anwendung, an die die Erfinder dieser neuen Sprachfeatures nicht gedacht hatten:


auto const fDoEvents = [&]()
     ProcessMessagesForCurrentProcessMainWindow();
     ProcessAfxMessagePump();
};
fDoEvents();

// vollen Refresh auslösen
xy->AddChanges(CTRL_NAV_RESULT);
z->Refresh(CTRL_NAV_CURR, true);
fDoEvents();

Das lambda fasste Statements zusammen, die in einem Spaghetticode immer wieder zu wiederholen sind. Hier war es immer mal wieder Messages zu bearbeiten. In der guten(?), alten Zeit hätten #define macros herhalten müssen.

In unmittelbarer Nähe, ein paar Zeilen unter dem zweiten Aufruf von fDoEvent()  befand sich ein Kommentar mit der Diskette:

// TODO: OFL aktualisieren (Dirtyflag / Diskette zurücksetzen)

Nach dem ersten Lachen stellte sich die Frage, wie dieser Kommentar in den Source kam.

Die Datei wurde laut tfs um 2015 geschrieben.

Die zweite Frage, war die, wie lambda Ausdrücke in den neuen C++ Standards funktioneren?

Das lud mich dann ein hierzu etwas zu schreiben.

„c++ im Jahr 2019: lambda und diskette“ weiterlesen

const char * und CString — täglich grüßt das Murmeltier

Ich fühlte mich wie in besagtem Film. Es ging um die Frage, warum die Software so lange braucht, obwohl nur wenig Daten zu verarbeiten waren. Zwar hatten sich die Kunden bestimmt schon an die Zwangspause gewöhnt, aber trotzdem sollte das doch mal schneller gehen. Wir könnten einen guten Eindruck machen, wenn es ein wenig schneller ginge mit der Erstellung einer Ausgabedatei.

Es gab eine ältere Fehlermeldung die etwas von einer ganz langen Erstellung einer solchen Ausgabe beschrieb. Die Datenbank lief auf einem eigenen Server. Die Anwendungssoftware auf einem Clientrechner.  Für mich deutete das auf ein Problem im Netz hin. Vermutlich war der merkwürdige Datenzugriff schuld. Die Anwendung war auf C-Isam zugeschnitten und nutzte SQL nur zum atomaren Zugriff auf Datensätze.

Das wollte ich zeigen. Es sollte einfach sein. War aber dann ganz anders.

„const char * und CString — täglich grüßt das Murmeltier“ weiterlesen

Legacy Code — Exe schläft nach Kaltstart

Endlich kam eine interessante Aufgabe. Eine Aufgabe, die typisch für Legacy Code war. Die schon in die Jahre gekommene Anwendung zeigte mit jeder neuen Version einen schlechteren Kaltstart. Wenn sie zum ersten Mal gestartet wurde, fror sie für einige Zeit ein. Diese Zeit wurde von Version zu Version immer länger. In der aktuellen Version konnten es mehrere Minuten sein.

Zwar hatten sich die Anwender schon an einen Verzug gewöhnt. Nun sollte wenigstens ein Grund für diesen Verzug gefunden werden. Eine Behebung sollte anschließend geplant werden.

Wie freute ich mich auf diese Aufgabe!

„Legacy Code — Exe schläft nach Kaltstart“ weiterlesen

boolVariable = !! BoolVariable, was will der C++ Source mitteilen?

Ich staunte nicht schlecht, als ich die zwei ! Zeichen sah.  Was sollte das?

War das ein Versehen? Hat da jemand den not-Operators überladen?

Es waren immer Stellen wie diese:

bIsOpen = !!mPtr->openFile(….) ;

Nachdem ich das zum ersten Mal gesehen hatte, entdeckte ich die doppelte Verneinung an immer mehr Stellen, in dem C++-Source, den zu warten ich für dieses Jahr übernommen hatte.

Um 20005 herum war es einmal eine Art Richtlinie. Was für einen Sinn das wohl gehabt hatte?

Ich forschte nach und bekam Antworten und Ergebnisse, die mich dann doch überraschten.

„boolVariable = !! BoolVariable, was will der C++ Source mitteilen?“ weiterlesen

Religion und Informatik – zwei Überraschungen

“Also Religion, da soll nur jemand kommen”, meinte mein neuer Kollege. Es ging beim Mittag um Themen, die im Job nicht angesprochen werden sollten. Das waren eben Religion und Politik.

Ich erkannte sofort ein Exemplar des atheistischen Logikers. Logik und Glauben schliessen sich bei dieser Spezies aus.

Schade, dabei kenne ich zwei religiöse Vorstellungen und Erzählungen, die nur aus informatischer Weltsicht richtig verständlich sind.

Schade, dass das Gespräch darüber eher schwierig ist. Zumal in einem Plenum immer auch das Gesicht verteidigt werden muss. Dann muss ich das wohl beschreiben.
„Religion und Informatik – zwei Überraschungen“ weiterlesen

Drei Userstories zum Thema Webapp und WordPress 5.x

Zufällig las ich in MeWe diesen Beitrag zu react Komponenten und Gutenberg:

Sharing React Components With Gutenberg

Der Schreiber verheiratet modernste Webtechnologie mit dem guten, alten WordPress. Für mich war das ein Grund einmal nachzuforschen, wie es mit meinem Lieblingsthema, den progressiven web Apps, und der Beziehung zu WordPress, meiner neuen Blogging Plattform, steht. Ich hatte dort schon push notifications eingebaut. Andere Entwickler beschäftigen sich selbstverständlich auch mit solchen Ideen.

Nach einer Mitteilung in WordPress core Forum ist revolutionäres geplant. WordPress Blogs sollen zu richtigen web Apps werden können. Damit unterschiedliche Plugins und Themes sich ihr service worker Javascript nicht überschreiben, entwickeln sie einen Standard. Das soll dann ähnlich wie bei den Widgets mit einem Registriermechanismus funktionieren.

Diese Entwicklungen werden von Google angetrieben.  Weil mit diesen Techniken die Webseiten schneller laden, bekommen diese eine höhere Sichtbarkeit. Das ist immer gut!

Was bringt das einem Blogger noch?

Ich habe mir drei Userstories überlegt:

  1. Freizeitblogger und seine Leser
  2. Produktblogger, die bloggen um zu verkaufen
  3. Patientenblogger, die nur für ihre Ärzte bloggen

„Drei Userstories zum Thema Webapp und WordPress 5.x“ weiterlesen