Kategorien
Schulung

COBOL mit Sub C als CGI

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.

Kategorien
Allgemein Schulung

Computer Service

Zusammen mit den Spezialisten der GfUD sind wir für EDV-Systemlösungen im Rechnungswesen, Buchhaltung und für die Digitalisierung von Büroprozessen der Ansprechpartner erster Wahl.

Unsere Systeme erfüllen den BSI-Standard, den Vorschriften von GoBD und DSGVO. Das ist unser Verständnis von Computer Service für Unternehmen:

Ein System ist als Ganzes zu betrachten. Die richtige Hardware, auf das Unternehmen angepasste Software, absolute Daten- und Betriebssicherheit sowie Befähigung der Mitarbeiter das System effektiv nutzen zu können.

Wir sind 24/7 für Sie da.

Kategorien
Randnotiz Schulung

KPI: Dashboard

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.

Kategorien
Schulung

IBM Watson 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

Kategorien
Schulung

Standard: Datenschleuse

Ich arbeite gerne mit Datenschleusen. Zugriff durch unsichere Anwendungen, von Extern oder von Windows Client verhindern. Interesse nach dieser Art und Weise der Konfiguration kam nach den jüngsten Erpressungsfällen durch den Verschlüßlungs-Trojaner auf. Diese Konfiguration verhindert das.

Diese Technik findet jetzt in meinen Pauschalsystemen der HALSYSTEM Anwendung.

Lasst uns in einem Workshop die unterschiedlichen Config-Sets (GPO, Scripte und Virenscanner) untersuchen und eine Doku zu Papier bringen.

Kategorien
Schulung

Python: Automatisierung Belegablage

Belege scannen und archivieren ist Dauerthema in der Systementwicklung. In den Workshops taucht schon einmal die Frage nach den Diensten für automatisierte Belegverarbeitung auf. Also: Belege scannen, verbuchen und archivieren. Natürlich habe ich mich damit vor längerem beschäftigt – nehmen wir das als neuen Workshop im CCGL auf.

Ich persönlich halte nicht viel davon, da es doch sehr fehleranfällig ist. Die Systeme müssen ständig trainiert und kontrolliert werden. Auch in Top-Systemen beschäftigt sich der Buchhalter mit Korrekturbuchungen wenn die Belege tatsächlich als Papier mit der Snail-Mail im Unternehmen ankommen. Ich zeige auch warum; meine Gedanken möchten Initalfunke für den Workshop sein. In der Realität arbeiten wir immer öfter mit der eRechnung.

Zwei Wege zur automatischen Verarbeitung sehe ich. Die bekannten Dienste lesen Kreditor, Belegnummer, Belegdatum und Summe aus dem Beleg. Wie findet man die Angaben?

Die einfach Art lehnt sich an eine schon früher besprochene Vorgehensweise an (Link). Der Scan liegt da als Fließtext vor. Mit entsprechenden awk und perl Scripten können Schlüßelwörter gefiltert werden.

Die anspruchsvollere Lösung habe ich vor 15 Jahren programmiert und wurde produktiv genutzt. Es basiert auf der Vermutung, das die wesentlichen Angaben einer Rechnung oft an der selben Stelle zu finden sind. Es existiert eine Norm (Link).

Beispielrechnung mit markiertem Feld Belegart und Nummer

Schauen wir uns den Beispielbeleg an. Der Beleg hat eine Breite und eine Länge in Pixeln. Anstatt den gesamten Text zu durchsuchen, kann ich auch nur einen definierten Ausschnitt betrachten. Wird nur der Ausschnitt gelesen, haben wir Belegart und Belegnummer. Hier verwende ich Python – sehr flexibel und eigentlich selbsterklärend:

from pdf2image import convert_from_path
image = convert_from_path("test.pdf")[0]


import pytesseract
import re
snummer = re.compile("[^0-9]")
sbart = re.compile("[^a-zA-Z]")

beleg = image.crop((52,500,800,600))

text = pytesseract.image_to_string(beleg)

def sauberenummer(text):
	text = re.sub(snummer,"",text)
	return text

def sauberebeleg(text):
	text = re.sub(sbart,"",text)
	return text	

print(sauberebeleg(text))
print(sauberenummer(text))

Schauen wir in Zeile 10: direkte Position des Ausschnitts in Pixel! Also Beginn x,y und Ende x,y in absoluten Pixeln. Zum Beispiel GIMP zeigt die Cursorposition in der Statusleiste in Pixeln an. Produktiv würde ich mit dem Verhältnis zur Gesamtgröße arbeiten. pytesseract ist nicht so flexibel wie das Paket tesseract selbst, dennoch sehr schnell und sicher.

Python und tesseract lesen Belegart und Nummer

Ich wende hier zum lesen zwei verschiedene Filter an. Zeile 7 definiert einen Filter der nur Zahlen zwischen 0 und 9 zurück gibt – Zeile 8 nur Buchstaben ohne Umlaute. Die Funktionen in den Zeilen 14 und 18 wenden den Filter an und ersetzen jedes andere Zeichen durch „“ (Nichts).

Hier sehen wir die Problematik. „BarverkaufNr“ ist keine Belegart. Es müssen einige Routinen geschrieben werden um hier eine Rechnung verarbeiten zu können. Die Belegnummer kann so weiter verarbeitet werden.

Ich bin sehr gespannt auf Eure Vorschläge!

Kategorien
Allgemein Schulung

LOCKSS: Langzeitarchivierung

Wir entwickeln derzeit Möglichkeiten, wie unsere Kunden digitale Daten archivieren können. CD oder DVD mag für die Archivierung der steuerlich relevanten Daten ausreichend sein – WENN man das Medium optimal lagert, geht das für den Zeitraum von 10 Jahren gut.

Aber selbst mein privates Archiv umfasst 30 Jahre an Daten. Wichtige Unterlagen, Patente oder Verträge manch einer Firma, sollen Jahrhunderte überleben. Das geht – es existieren verschiedene Ansätze und Lösungen.

Im voran gegangenen BootCamp zum Workshop „Langzeitarchive“ habe ich die OpenSource Initiative LOCKSS vorgestellt. Sie ist Grundlage des Bundesdeutschen Projekts LuKII mit dessen Hilfe sogar die Stasi-Akten digital archiviert werden.

Für unsere Kunden ist die wirtschaftliche Effektivität, Sicherheit und Automatisierung wichtig. In den nächsten Versionen der HALSYSTEM sollen die ersten Archivsysteme realisiert sein. Ich freue mich, unsere Lösungen hier dokumentieren zu können.

Bildquelle: CC BY-SA 3.0, Link

Kategorien
Allgemein Schulung

Docker: RHEL8 – Entwicklungshilfe

Das neue RedHat Enterprise Linux 8 ist für Entwickler kostenfrei nutzbar. Die Entwicklungen haben wir bisher nur mit Debian und SuSe Distributionen durchgeführt.

Ohne Registrierung und in weniger als 5 Minuten einsatzbereit:
docker run –rm -it registry.access.redhat.com/ubi8/ubi

RHEL8 im Docker Container

Bis Ende 2019 haben wir noch reichlich Entwicklungsarbeit für HALSYSTEM vor uns und berichten dann über die Erfahrungen mit RHEL8 und SLES12.

Kategorien
Schulung

IBM Lotus: Smart Suite

Das wohl beste Officepaket –> Lotus SmartSuite

Im letzten Workshop „EXCEL Pivot“ sprachen wir über Datenbankanbindungen und Wizards die uns die Erstellung von brauchbaren Reports erleichtern. Im Rahmen dessen habe ich Lotus vorgestellt. In Verbindung mit der Datenbankanwendung Approach sind Dinge möglich, für die man mit EXCEL oder LibreOffice schon einige Klimmzüge veranstalten muss.

Wer das nachvollziehen möchte, kann das Lotus Paket hier (Link) herunter laden. Das Passwort für den Download ist „Lotus123“. Viel Spass!

Kategorien
Randnotiz Schulung

Debian: Offline Update

Das System auf dem neusten Stand zu halten, ist kein Hexenwerk. Das apt Werkzeug macht es uns einfach. Aber was, wenn zum Beispiel aus Gründen der Sicherheit, kein Zugriff auf das Internet möglich ist?

Mehr oder weniger aktuelle Updates lassen sich auch als DVD ISO Image auf einem anderen Computer mit WAN Zugang herunter laden (Link).

Das Image dann als CDROM einbinden – ich mache das über die fstab – und dann mit apt-cdrom als Repository dem System bekannt machen.

Hier kann sich das System unterschiedlich verhalten. Entscheident ist, dass das Image als /media/cdrom – so, wie es in der /etc/apt/sources.list eingetragen wurde – mounted, also verfügbar ist.

Das anschließende apt-upgrade installiert nun die Updates auf der DVD – apt autoremove anschließend nicht vergessen. Wird ein fehlender oder unbekannter Key moniert, die Zeile „deb cdrom:…..“ in der /etc/apt/sources.list auf „deb [ trusted=yes ] cdrom:…..“ ändern. Damit wird auch dem unbekannten Key vertraut und installiert die Quelle anstandslos.