Geteilter Code ist doppelte Programmfreude

… oder dreifache, vierfache – je nachdem, für wie viele Plattformen Sie programmieren möchten.

Ich möchte hier kurz ein Detail beleuchten, das ich mir für die Präsentation auf der PiAndMore überlegt hatte. Zu letzterer soll baldigst noch ein kurzes Resuméee folgen, wird sie doch unverständlicherweise für eine so feine, exzellent organisierte Entwicklermesse von der Presse weiträumig umschifft, wenngleich die kostenlosen Fachzeitschriften (deren Regale dann auch mit beachtlicher Frequenz nachbestückt werden mussten) darauf hindeuten, dass eine gewisse Wahrnehmung stattfindet.

Aber zurück zum Text: Das Programmierdetail, das ich heute in den Fokus stellen möchte, ist gemeinsam genutzer (oder auf gut Denglisch: geshareter) Code. Oft macht sich ProgrammiererIn das Leben viel zu schwer: Man entwickelt ein Modul, das nach ausgiebigem Test dann auch ordentlich funktioniert, und baut es dann in seine Projekte ein. Diese können ganz unterschiedlicher Natur sein, im Xojo-Maximalfall also Desktop-, Kommandozeilen- und womöglich noch Web-Projekt aller drei Plattformen macOS, Windows und Linux, und dann gäbe es da noch iOS und eben den Raspberry Pi, der als Linux-Sonderfall eventuell Gebrauch von seinem GPIO, diesem extrem vielseitigem Vielzweckport, machen möchte.

In diesem GACV-Szenario (größte anzunehmende Code-Vervielfältigung) (das müssen Sie jetzt nicht googlen; der Begriff wurde gerade von mir in die Welt gesetzt, um diesen Beitrag dramatisch, wissenschaftlich und bedeutsam klingen zu lassen) also existiert das Modul jetzt nicht einmal, sondern elfmal auf Ihrem Speichermedium. In jedem Projekt aufs Neue.

Ich werde jetzt nicht zum Komitee für die ressourcenschonende Verwendung von Computerspeicher mutieren; ich gehe mal davon aus, dass Ihre Festplatte oder deren Entsprechung das schon verkraftet. Was aber ist, wenn Sie merken, dass Ihrem Modul eigentlich noch eine wichtige Funktion fehlt? Oder dass es doch nicht ganz so fehlerfrei werkelt wie gedacht?

In obigem Szenario bleibt Ihnen jetzt nichts anderes übrig, als die Erweiterung vermutlich auf Ihrer Lieblingsplattform vorzunehmen und dann zum Textbearbeiter umzuschulen, indem Sie die neue Version des Moduls nach Entfernen der alten in die anderen Projekte einkopieren. Hoffentlich werden Sie in dieser Zeit nicht gestört – sonst stellt sich später die Frage, ob irrtümlich nicht doch noch alter Code in einem der Projekte verblieben ist.

Ich weiß nicht, wie es Ihnen geht, aber rein subjektiv möchte ich einmal die Behauptung aufstellen, dass die Freude beim Programmieren sich oft auf die erfolgreiche Automatisierung sonst mühseliger Routineaufgaben gründet, und dass sie auch ganz schnell in dem Maße schwindet, in dem das Programmieren selbst zur mühseligen Routineaufgabe verkommt.

Viel einfacher wäre es doch, den Modulcode nur einmal vorrätig zu halten, und alle Projekte, die ihn benötigen, greifen auf diese eine Kopie zu. Digitale Kammerjägerdienste werden dann nur einmal benötigt; eine neue Funktion steht sofort allen Projekten zur Verfügung, die auf dieses Modul zugreifen.

Netterweise beläuft sich der Aufwand für gesharten Code in Xojo auf nicht sehr viel mehr als einen Rechtsklick auf das zu exportierende Modul.

Wenn Sie mögen, dann laden Sie doch einmal das frei verfügbare OpenWeathermap.Org-Projekt. (Klicken Sie dazu auf den grünen „Clone or Download“-Knopf und wählen Sie „Download Zip“.) Sie finden im dann auf Ihrem Speichermedium befindlichen Ordner mehrere Xojo-Projekte. Hier beispielhaft der Navigator des Desktop-Projekts:

shared code.png
Navigator des OpenWeatherMap.Org-Desktop-Projekts

Und wie Sie sehen, tragen die Bestandteile des OpenWeather-Ordners kleine geschwungene Pfeile, so wie man sie auch vom Finder kennt, wenn dieser eine Alias-Datei anzeigt, also nur den Verweis auf ein Objekt, das an anderer Stelle residiert.

Genauso dürfen Sie sie auch hier verstehen: Als Verweis auf externe Projekt-Daten. Klicken Sie einmal mit rechter Taste auf das Modul oder eine der beiden Klassen und wählen Sie „Show on Disk“, und Sie sollten als Beweis meiner Worte  in etwa das hier sehen:

OpenWeather Folder structure.png
Dateistruktur des OpenWeather-Ordners

Der OpenWeatherFolder liegt wirklich nur ein einziges Mal vor – als separater Odner innerhalb des Repositories. Erzeugt habe ich ihn, indem ich ihn nach seiner Erstellung im Desktop-Projekt rechtsklickte und „make External“ anwählte. Dann wird man nach dem gewünschten Speicherort gefragt, und die gewählten Dateien werden exportiert.

Den Ordner kann man dann im Xojo-Navigator anwählen, in die Zwischenablage kopieren und in andere Projekte einfügen. Er wird dann von ihnen ebenso extern referenziert. Und so habe ich das dann auch mit den anderen Projekten dort gemacht: Commandline, Web und RaspiDisplay. Wähle ich ein Modul an, so wird es ganz normal im Code-Editor dargestellt. Änderungen darin sind aber automatisch Bestandteile der anderen Projekte, und ein Neukompilieren dieser ist genug, um eine neue Version zu erhalten.

Ach, falls es Sie interessiert, was das Programm eigentlich macht (sehr spektakulär ist es nicht, es diente in erster Linie zum Demonstrieren dieser meines Erachtens sehr praktischen Xojo-Angelegenheit): Es bietet einen vereinfachten Zugriff auf die kostenlosen Features der OpenWeatherMap.Org-Api, oder, weniger kryptisch: Sie können damit die aktuellen Wetterdaten und eine 5-Tages-Vorhersage von diesem Wetterdienst abrufen. Dazu benötigen Sie eine kostenlose API-ID, die Sie auf obiger Site erhalten und in die Konstante API_ID des OpenWeather-Moduls eintragen müssen, und die erwartete City-ID für die Identifikationsnummer Ihrer Stadt für die andere Konstante finden Sie in einer umfangreichen Liste (siehe CityList oder CityList.US).

Die Funktionen selbst sind dann relativ trivial: Via GetCurrentWeather oder GetForecast wird eine der beiden Klassen zur einfacheren Abbildung der aktuellen Wettersituation oder der Vorhersage aufgerufen, und die Demo-Projekte stellen einen Teil dieser Daten dar.

Im übrigen scheint das XML-Objekt, das man optional erhalten kann, mehr Informationen zu besitzen. Vielleicht haben Sie ja Lust, das Projekt entsprechend zu erweitern. Dann hätten wir auch gleich eine praktische Übung in Sachen SourceCode-Management untergebracht.

Und wenn Sie eher visuell orientiert sind, finden Sie hier auch das Video dazu, das in etwa meiner Präsentation auf der PiAndMore entspricht:

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s