COBOL: neuer IBM Compiler

Wir haben ihn direkt probiert, den neuen IBM COBOL Compiler.

IBM setzt auf kompatibilität mit x86 Systemen und bietet hierfür einen Compiler zum Kauf an. Der Preis ist noch unbekannt – die 60 Tage Testversion haben wir als Podman Container getestet. Hier kleiner Merkzettel nach unserem CCGL Workshop:

Wir haben zunächst ein Dockerfile erstellt in das wir die relevanten RPM Files von IBM kopieren

1
2
3
4
FROM centos
COPY IBM_COBOL_V1.1.0_LINUX_EVAL.x86-64/images/rhel/cobol.cmp.1.1.0-1.1.0.0-210415.779.x86_64.rpm /cobol/
COPY IBM_COBOL_V1.1.0_LINUX_EVAL.x86-64/images/rhel/cobol.cmp.license-eval.1.1.0-1.1.0.0-210415.779.x86_64.rpm /cobol/
COPY IBM_COBOL_V1.1.0_LINUX_EVAL.x86-64/images/rhel/cobol.rte.1.1.0-1.1.0.0-210415.779.x86_64.rpm /cobol/

„podman build“ erstellt nun ein Image mit den RPM’s im Verzeichnis /cobol/. „podman images“ zeigt die ID. Starten wir das Ganze initial mit „podman run -it –mount type=bind,source=/austausch,target=/home/ –name=IBM_cobol 096972054812“. Mit dem initialen Kommando legen wir gleichzeitig einen Container mit dem Namen „IBM_cobol“ an und mounten ein Austauschverzeichnis. Hiernach kann der Container mit „podman start -ia IBM_cobol“ gestartet werden.

Im Container wechseln wir in das /cobol/ Verzeichnis und sorgen erst einmal für die Auflösung der Abhängigkeiten lt. IBM Installationsanleitung:

1
2
3
4
yum install perl gcc glibc.i686 glibc-devel.i686 libgcc.i686 libstdc++.i686 libquadmath.i686
rpm -Uvh cobol/*.rpm
ln -s /opt/ibm/cobol/1.1.0/usr/bin/cob2 /usr/bin/cob2
ln -s /opt/ibm/cobol/1.1.0/etc/cob2.cfg /etc/cob2.cfg

Das war’s schon. „cob2 -V“ sollte jetzt die Version des Compilers wiedergeben. Als erstes haben wir ein „Hello World“ Code geschrieben und diesen, ähnlich GNUcobol, mit „cob2 code.cbl -o test“ kompiliert. „test“ ist erfolgreich ausführbar und es wird per default ein Bericht generiert.

Im direktem Vergleich mit GNUcobol fällt die strengere Kontrolle der Code Formatierung auf. Code, den wir geschrieben haben, mit Link zu Librarys wie libq, müssen wir noch umschreiben.

Happy Coding!

SNMP: Datenerhebung

Für die Erstellung einer KPI für Überwachungskameras von MOBOTIX mussten Daten beschafft werden.

Interessante Daten für Überwachung sind neben den elementaren Hardwaredaten wie Seriennummer, Hostname, VPN User und Temperatur, die Daten über Anzahl und Zeitpunkt von Alarmen. SNMP, die etablierte Allzweckwaffe, bietet sich an. Vom Schreibtisch aus läßt sich die Konfiguration auch einer im Betrieb befindlichen MOBOTIX Kamera um die nötigen Einträge für den SNMP Dienst einstellen.

curl -q -m 10 -u ‚user:passwort‘ –data-binary @befehl.txt „http://meineKamera/admin/remoteconfig“

Die Befehlszeile übergibt die Befehlssequenz aus der Textdatei befehl.txt an die Kamera:

helo
write params
snmp/SNMPD=1
snmp/V2C_RO_COM=“community“
update section snmp
store
reboot
quit

Mit der Befehlsfolge konfigurieren wir SNMP Version 2c mit dem Read-Only Community Namen „community“. Nach dem Neustart steht der Dienst zu Verfügung. Wie findet man nun die passende OID mit der ich die gefragten Werte auslesen kann? Nun – fragt man den Hersteller, ist man verloren. MOBOTIX verweist an den Händler, als sei die Antwort abhängig vom Umsatz. Auf erneute Nachfrage bekomme ich einen Link, der wenig befriedigend ist. Werte, die abgefragt werden können, belaufen sich je nach Firmwarestand auf cirka 1200 an der Zahl! Welche Werte tatsächlich mit welcher OID abgerufen werden kann, erfährt man mit der Abfrage

snmpwalk -v 2c -c community -m +MOBOTIX-MIB meineKamera .iso

Am Ende .(Punkt) iso. Der Punkt bedeutet, am Rootpunkt der hierarchisch aufgebauten OID Liste zu beginnen. Entgegen der OID Liste aus dem Link der Firma MOBOTIX wird beispielweise der Wert cameraModel nicht mit der OID cameraModel abgerufen. Gezielt lässt sich der Wert ohne Beschreibung, also in leicht weiter verwertbarer Form, mit dem Befehl ermitteln:

snmpget -v 2c -c community -Ovq -m +MOBOTIX-MIB meineKAMERA cameraModel.0

Dabei ist das Einbinden der OID Beschreibung MOBOTIX-MIB wichtig. Andernfalls muss über die ISO OID abgefragt werden. In dem Fall wäre das iso.3.6.1.2.1.1.5.0

In den über 1200 möglichen Abfragen befinden sich trotzdem nicht alle Daten. Daten wie, zum Beispiel, der VPN Benutzername oder die Anzahl der registrierten Alarmmeldungen sind unerreichbar. Mir zeigt das eine gewisse unorganisiertheit der Entwickler. Beim Abruf des letzten Alarmbildes lässt sich per URL Parameter ?output=m1img der Zeitpunkt des letzten Alarms und die Anzahl der Alarmmeldungen in Textform abfragen. Abenteuerlich, nicht wahr?!

curl -q -m 10 -u ‚user:pw‘ „http://IP/control/event.jpg?output=m1img“

Nicht empfehlenswert, da das Verhalten der Kamera je nach Firmwarestand sehr unterschiedlich und damit nicht berechenbar sind. Die Anzahl stelle ich über eine Datenbank fest, die einzelne Werte periodisch speichert und zählt. Fehlt noch der VPN User! Nach meiner Kenntnis muss er aus der Konfiguration ausgelesen werden. Der Befehl für die Konfiguration der Kamera, kann auch zum Auslesen der Selben genutzt werden (siehe erster Absatz). Die Befehlssequenz sieht dann so aus:

helo
view section ethernet vpn imageimprover
exit

Entscheident ist „view section vpn“. Hier werden die Konfigurationsdaten wie User, Passwort usw. ausgegeben. Die section imageprovider nutze ich um die konfigurierten Bildeinblendungen auszulesen. Einfach mal ausprobieren!

COBOL: Report mit HTML Link

Schnelles Programm in COBOL mit Sub-Routine in C für die Generierung von HTML Code. Vorhanden ist die OpenVPN Liste eines Servers die auch tote Verbindungen enthält. Erstellt werden soll eine Liste, die nur aktive Verbindungen enthält. Die OpenVPN Verbindung soll über eine Website der Welt zur Verfügung stehen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SLS.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT CAMS ASSIGN TO 'online.txt'
           ORGANIZATION IS LINE SEQUENTIAL.           
       DATA DIVISION.
       FILE SECTION.
       FD CAMS.
       01 CAMS-FILE PIC X(118).
       01 EOF PIC A(1).
       WORKING-STORAGE SECTION.
       01 STR-LEN PIC 9(3).
       01 SUB PIC 9(3).
       01 WS-EOF PIC A(1).
       01 WS-REC PIC X(118).
       01 WERT1 PIC X(4).
       01 WERT2 PIC X(20).
       01 WERT3 PIC X(5).
       01 WERT4 PIC X(20).
       01 WERT5 PIC X(15).
       01 WERT6 PIC X(1).
       01 WERT7 PIC X(20).
       01 WERT8 PIC X(20).
       01 RET PIC 9(1).
       PROCEDURE DIVISION.
           OPEN INPUT CAMS.
           PERFORM UNTIL WS-EOF='Y'
           READ CAMS INTO CAMS-FILE
            AT END MOVE 'Y' TO WS-EOF
            NOT AT END
            UNSTRING CAMS-FILE DELIMITED BY ALL SPACES
            INTO WERT1
                 WERT2
                 WERT3
                 WERT4
                 WERT5
                 WERT6
                 WERT7
                 WERT8
            END-UNSTRING
          MOVE LENGTH OF WERT5 TO STR-LEN
           PERFORM VARYING SUB FROM STR-LEN BY -1
           UNTIL WERT5(SUB:1) NOT = SPACE
           END-PERFORM
          CALL "test" USING
               BY REFERENCE WERT5(1:SUB)
               RETURNING RET
           END-CALL
          IF RET = 1
           THEN
           DISPLAY '<a href="https://Seite.COM/xxx/'WERT5(1:SUB)
      -    '/" target="_blank" rel="noopener noreferrer">'
      -    WERT8'</a><br>'
           END-IF
           END-READ
           END-PERFORM.
           CLOSE CAMS.
           STOP RUN.

Die Sub-Routine „test“ ist ein C Programm (Link) das einen Ping durchführt und wahr/falsch zurück gibt. Zeilen 28-42 lies eine Zeile mit 8 Spalten und legt die Werte in den Variablen WERT1 bis WERT8 ab. 43-46 entfernt Leerzeichen durch simples abzählen der Stellen bis „Leerzeichen“. Danach erfolgt durch Aufruf der Ping Routine eine Prüfung der Erreichbarkeit. Wenn wahr, wird ein HTML Link generiert.

Workshop: Web Excel in Teams

Im letzten Jahr gab es einen Workshop den ich mit meiner These, man brauche als Kleinunternehmer theoretisch keine weitere Software als denn Windows, begonnen hatte.

Viele Lösungen haben wir in dem Workshop im April 2019 im Microsoft Live.com erarbeitet und bewiesen, das für die Unternehmensführung eines Kleinbetriebes nicht mehr Software nötig ist. Konkret habe ich gezeigt, das EXCEL selbst in der sehr einfachen Web Version unglaublich vielseitig einsetztbar ist. „Einfach“ deshalb, weil die Web Version auf keine Datenbanken zugreifen, keine Regeln für bedingte Formatierungen editieren und nicht programmiert werden kann. Wir können lediglich auf einfache Mittel der Datenüberprüfung, bedingte Formatierung und Formeln – wichtig ist der SVERWEIS – zurück greifen.

Mit erscheinen von Microsoft Teams, das kostenlos zur Verfügung steht, hat der Unternehmer ein unverzichtbares Arbeitsmittel. Die Frage, ob das EXCEL im Live.com und das innerhalb des Teams gleich sind, kann mit „Ja“ beantwortet werden. Ich habe die damals erarbeiteten Lösungen wie zB das Kassenbuch, die Kaffeekasse und eine einfache Einnahmen-Überschuss-Rechnung in Teams mit mehreren Teilnehmern gleichzeitig geteilt.

Neben dem Kassenbuch ist auch eine EÜR problemlos möglich. Durch die fehlende Datenbank ist aber zu empfehlen, je nach Menge der Geschäftsvorfälle, die Daten nach Periode in einzelnen Worksheets abzulegen. Mit Hilfe der Pivot Tabelle, ist eine Auswertung nach Periode in jeder Art und Weise möglich.

Das und einiges mehr hat jeder PC Nutzer mit dem Kauf einer Windows 10 Lizenz mit erworben. Gerne können wir darüber nachdenken, welche Lösungen möglich sind.

COBOL mit Sub C als CGI

Kurze Demo wie der Browser als Terminalersatz verwendet werden kann.

Im letzten Workshop haben wir über Möglichkeiten der Programmierung für Terminal Consolen gesprochen. Im Moment haben wir keine Alternative zu den bekannten 3270 Terminal Programmen gefunden. Besonderheit ist, das Zeilen und Spalten aus dem Programm heraus direkt ansprechbar sind – die Bash ist ein rollierender Terminal, also ungeeignet.

Gespielt haben wir deshalb mit der Alternative Browser. Ein Apache2 Web-Server mit aktiviertem CGI Modul lässt unglaublich dynamische Programmierungen zu. Das Beispiel, das ich gezeigt habe, ist aus unseren Workshops zu den Themen „COBOL mit C Subroutinen“ und „Terminal“. Hier in Kurzform:

Da der COBOL Compiler über die Sprache C compiliert, können wir C Code einfach einbinden ( cobc -x list.cob list.c ). Wir haben getestet, dass mit dem CALL Variablen kopiert oder als Referenz übergeben werden können. In unserer einfachen Subroutine verändern wir die Variablen und sehen, das eben nur die referenzierte Variable geändert wird. Das Programm setzt aber die Bash voraus, die nicht jeder hat. Einen Browser hat jeder.

Anstatt printf(text) und DISPLAY Text können wir den Text mit HTML Steuerelementen schmücken. Mehr ist nicht nötig. Mehr Probleme bereitet die Tatsache, dass das Ereignis <button type=“submit“ >Send</button> in der Webpage, einen Stream zurück gibt. Diesem Stream müssen wir filtern und die eingebenen Werte durch UNSTRING aus dem Stream extrahieren.

Wir sehen das der BY REFERNCE übergebene Wert in der Subroutine verändert, zurück gegeben und als HTML Table ausgegeben wird. Beispiel ist hier Online.

OpenSAP: Qualifizierung

Es sind noch ein paar Wochen bis zum nächsten Projekt. Ich nutze die Zeit zum programmieren und lernen. hat neben dem Community Bereich auch einen Schulungsbereich. Zwischendurch lassen sich hier kleinere Themen vertiefen. Gutes Schulungsmaterial und Videos – so wie man es von SAP gewohnt ist, aussergewöhnlich gut!

Kürzlich erworben:

Grundlagen Updates Netweaver

KPI: Dashboard

Eines von vielen Dashboards näher betrachtet. Nebenbei kann man hier einiges über Datenbeschaffung und Verarbeitung zeigen. Hier die Zusammenfassung unseres Workshops.

Freeboard hat einige Vorteile. Es ist schlicht, komplett offen programmierbar und leicht mit HTML oder JavaScript einstellbar. Um den Workshop nachvollziehen zu können, hier ein paar Eckpunkte.
Nach der Installation von Freeboard auf unserem Debian 9 System mit Apache2, muss noch eine Weile gesucht werden um sinnvolle Erweiterungen zu finden – je nachdem welche Darstellungen man zeigen möchte.

Im Bild oben ist unsere Finale index.html in der verschiedene JavaScript Widgets eingebunden sind. Das altgauge.js haben wir verändert.

zu grün ändernde Anzeige

In Zeile 29 ändern wir die Farbreihenfolge von rot über gelb nach grün. Besonderst interessant sind das HighChart, das einzelne Werte auf einer Zeitachse darstellt und die FLOT Widgets, die saubere Linien und Balkendiagramme ermöglicht. Grundsätzlich „versteht“ Freeboard JSON Datenquellen und ist per JavaScript einstellbar. JSON Datensätze sehen grundsätzlich gleich aus, unterscheiden sich aber je nach eingesetztem Chart. Mal werden einzelne Werte erwartet, mal x,y Werte.Einzelne Werte für Tachoanzeigen und/oder Text/HTML. Geschachtelte Werte für Linien- oder Balkengrafik.

Natürlich versteht Freeboard auch mehrdimensionale JSON Array’s. In der Praxis haben wir die Daten aus https://warnung.bund.de/bbk.dwd/unwetter.json genutzt. Dort werden Warnmeldungen nach Art und Ort ausgegeben. Es empfiehlt sich die Daten vor Darstellung lokal aufzuarbeiten, da die Darstellung aller Daten in einer nicht vorhersehbaren Reihenfolge nicht empfehlenswert ist. Wie sieht das im einzelnen aus:

Im PHP Code durchsuchen wir das Array in der ersten und zweiten Dimension – die Menge können wir nicht beeinflussen. Wir nehmen Unwetterwarnungen nur für unsere Geolokation die so übergeben wird: value“094780000000″. Welcher Ort welchem Wert entspricht kann unter (Link) gesucht werden. In unserem Fall rufen wir nur Unwettermeldungen für den Rheinisch-Bergischen-Kreis heraus.

Das Dashboard (Link) bleibt auf dem Server und wer Einzelheiten aus dem Code wissen möchte oder noch Fragen zur Datenaufbereitung hat, mag mich einfach fragen. Sendet doch Beispiele eurer Dashboards – wir können sie hier veröffentlichen.

IBM Watson Chat Bot

IBM Cloud – Watson Lite Chat Bot.

Diesen Sonntag haben wir uns mit der IBM Cloud, genauer, mit dem Watson Chat Bot beschäftigt. Wir haben gesehen, das wir einen Gesprächsverlauf abhängig von Worten und Sätzen, die unterschiedlich bewertet werden können, an unterschiedlichen Stellen im Gesprächsverlauf, mit grundsätzlich unterschiedliche Reaktionen, programmieren können.

IBM Watson Online IDE

In der Lite Version des Watson Chat Bot’s können (müssen) wir Synonyme oder Redewendungen selbst definieren, wenn wir darauf reagieren wollen. In der Online IDE findet sich praktischer Weise, ein Test-Bot „Try it out“ mit dem eine recht schnelle Entwicklung möglich wird.

Ein riesen Spass und ein tolles Angebot von IBM.

Check it out —> Link