Quadro (iOS) ohne Shortcuts mit Autohotkey (Windows)

Quadro ist ein recht pfiffiges Bedienkonzept für PC und MAC unter Verwendung von iPhone oder besser iPad.

Eine schön und informativ gemachte Website sollte man einmal besuchen, falls nicht nur die Maus verwendet soll, oder man einfach Interesse an neuen Ideen hat: http://quadro.me/

Leider ist die App aber recht teuer, daher habe ich zunächst ein weiteres Ausprobieren beendet. So ganz konnte ich doch die Finger nicht von Quadro lassen. Zu sehr hat mich noch dieses Konzept gereizt. Und dann mache ich die Entdeckung des Tages:

Es können Autohotkey-Skripte in den „Actions“ verwendet werden. Damit steht so ziemlich jede Idee zur Umsetzung zur Verfügung. Ein Beispiel: Ich habe eine Anwendung mit relativ wenigen vordefinierten Shortcuts. In dieser kommt übrigens noch erschwerend hinzu, dass unter Windows 10 teilweise keine Icon in der Toolbar sichtbar sind. Man kann nun die Shortcuts anlegen und wenn man sie auswendig gelernt hat, auch die Toolbar abschalten, aber das erfordert reichlich Fleiß, Kreativität bei den Shortcuts und natürlich Erinnerungsvermögen. Also habe ich mir nun ein Autohotkey-Skript geschrieben, welches die als Parameter übergebenen Menü-Punkte im Programm startet. Ich brauche mir nun keine Shortcuts mehr ausdenken und merken und ich sehe in der Konfiguration von Quadro, was das Pad auf dem PC dann machen wird. „File Open“ ist irgendwie doch sprechender als „STRG-O“. Und die Pads auf dem iPad kann ich schön beschriften und und mit institutiven Symbole versehen.

Fazit: Neben meiner Maus liegt nun ein iPad, die Toolbars habe ich abgeschaltet und so auch mehr Platz auf dem Bildschirm. Ich brauche mir keine Shortcuts merken und mit dank des Autohotkey-Skriptes kann ich mir die „Actions“ in Windeseile anlegen.

Reguläre Ausdrücke im PowerBuilder

PowerBuilder Objekt

In einem älteren Beitrag habe ich hier einmal beschrieben, wie ich meine Archivierung teilweise automatisiert habe. In dem Artikel ging es im Wesentlichen darum, wie Dokumente verschlagwortet werden und sinnvolle Dateinamen bekommen. Der Ablauf OCR über die Dokumente, erkannten Text extrahieren, dann Meta-Daten schreiben und Datei umbenennen habe ich mit Autohotkey realisiert. Doch stieß ich hier schnell an Grenzen, zumindest bei dem Ansinnen, es auch alles etwas ergonomisch und nett für den Anwender zu machen. Da blieb dann für mich „nur“ noch der PowerBuilder von Sybase bzw. SAP und ich habe das Projekt im Prinzip von vorne begonnen.

Doch schnell stieß ich auf ein wesentliches Problem. Der extrahierte Text muss nach Datum, Belegnummer, Absender oder Kontonummer, Auszugnummer etc. durchsucht und die gefunden Werte in die Datenbank eingetragen werden. Bisher habe ich schlicht die Zeichenketten vor und die Zeichenketten nach einem Wert gesucht. Alles dazwischen entsprach bspw. einem Datum. Funktioniert prima, wenn es feste Werte sind. Steht vor einem Datum zum Beispiel eine Belegnummer, so ist diese natürlich nie gleich. Hier muss ich nach Zahlen suchen. Das geht mit den im PowerBuilder gebotenen Funktionen nicht so einfach. Denn es geht eigentlich nicht mehr ohne Reguläre Ausdrücke. Die Funktion Match() kann diese zwar grundsätzlich, doch liefert sie nur ein „gefunden oder nicht gefunden“ zurück. Ich benötige aber den Wert.

Nun hätte ich das auch auf Datenbankebene machen können. Mit REGEXP_SUBSTR sind RegEx im SQL möglich. Doch auch hier habe ich das Problem, dass ich zwar gemäß Muster was finde, aber ich will nicht das Suchergebnis, sondern einen bestimmten Teil dieses Ergebnisses. Und hier kommt nun unvo_regexp ins Spiel. Es ist ein natives userobject welches vbscript.regex OLE object (Author: Nicolas Georges) einbindet. Es kann hier heruntergeladen werden.

Nachdem man unvo_regexp.sru importiert hat, steht einem ein kleines Objekt mit den nötigen Methoden zur Verfügung.

Wenn man sich diese ein wenig ansieht, ist es nahezu selbsterklärend. In meinem Fall war hier insbesondere die Methode group() von entscheidender Bedeutung. Ich kann nun direkt auf den gewünschten Wert zugreifen, auch wenn mein Suchergebnis zum Erlangen eines präzisen Fundortes recht groß ist. Die richtige Klammer gesetzt und mit rx.group(matchindes,groupindex) direkt zugreifen.

Zum Abschluss ein kleines Code-Beispiel, mit dem ich das Objekt getestet habe. Aus der Zeichenkette, die in einer PDF natürlich noch viel mehr Text davor un dahinter hat, soll das Belegdatum herausgelöst werden:

text_ges = '01661978 20.10.2016 4597'
unvo_regexp rx
rx = create unvo_regexp
rx.initialize( "\d{8}.(([0-2][0-9]|30|31)\.(0[1-9]|1[0-2])\.[0-9]{4}).\d{4}" /*as_pattern*/, true/*ab_globalscope*/, true/*ab_casesensitive */)
ll_match_count = rx.search( text_ges )

gc = rx.groupcount(1) // Anzahl Gruppen 
gs = rx.group(1,1) // Erste Gruppe aus erstem Suchergebnis, hier das Datum.

In meinem Regeleditor für meine Archivierung kann ich nun einen regulären Ausdruck für jeden Wert eintragen. Mit diesem finde ich nahezu alles. Ich muss jedoch zugeben, für den Anwender ist das schon hartes Brot. Aber mit diesem RedEx Editor hat man alle Chancen, einen guten Ausdruck erzeugen zu können.

Online RegEx Editor

Sollte das Thema interessant sein, Fragen aufkommen, ich freue mich über jeden Kommentar.

Von „O“ bis „O“. In wenigen Tagen sind Winterreifen fällig.

Es gibt Regeln, deren Sinnhaftigkeit ist in diesen Tagen zu überdenken. Wir hatten heute alle einen herrlichen Sommertag. Im Traum würde ich nicht auf die Idee kommen, kommende Woche Winterreifen aufziehen zu wollen. Oder sieht das nach Winter aus?

Essen Baldeneysee

Das war heute in Essen am Badeneysee. Sonne pur, 26 Grad.

 

Produktfotos mit einfachen Mitteln

Wir haben leider die bittere Aufgabe, von ca. 30.000 Artikel Fotos machen zu müssen. Im Wesentlichen für die interne Verwendung, aber dennoch sollen sie halbwegs professionellen Ansprüchen genügen. Aber wir sind keine „Professionellen“ und wir wollen auch nicht erst einen Fotolehrgang machen. Interessanterweise haben wir jedoch eine professionelle Ausstattung mit Spiegelreflexkamera, Softbox und sündhaft teuren Lampen. Diese hat sich aber als viel zu umständlich und auch vom Ergebnis her als nicht gut erwiesen. Letzteres natürlich nur, weil wir keine Ahnung haben.

Aber angesichts die schieren Menge an Bildern verbietet sich übertriebener Aufwand. Selbst wenn wir nur eine Minute pro Bild benötigen, sind es dennoch 500 Stunden oder 62 komplette Arbeitstage. Also jede gesparte Zeit ist sehr viel Geld.

Wir haben uns eine Auflage mit satinierten Plexiglas gebaut. In einem Raum mit kräftiger Neonbeleuchtung haben wir sodann unsere Smartphones gezückt und so allerhand versucht. Wichtig war es zu erreichen, dass die Artikel keine Schatten warfen. Das Ergebnis, finde ich, kann sich sehen lassen:

artx05-1454-o305-al001 artz0539cl00alklip001artx05-1453-pz-al001

Jedoch will ich nicht verschweigen. dass wir die Bilder nachträglich freigestellt haben. Aber durch die Verwendung der schattenschluckenden Platte, war das sehr schnell erledigt. Mit Live-Auswahlrahmen funktioniert das mit Adobe Fireworks auch sehr schnell.

Mein nächster Schritt wird es sein zu versuchen, das Freistellen zu automatisieren. Für heute in ein Anfang gemacht und ich bin recht zufrieden. „Leider“ gibt es schon viele Bilder, da unsere aber nun doch viel besser sind, müssen wir diese auch erneuern.

Wir haben nun eine Fotostation und definierte Regeln, wonach die Fotos zu machen sind. Einheitlicher und professioneller Darstellung aller Produkte steht nun nichts mehr im Wege. Außer Zeit und Kosten.

 

 

Flowheater macht die Datenübernahme einfach

Worum geht es?

Datenübernahme kann ein schwieriges Geschäft sein. Oder eine Routineaufgabe. Ich habe FlowHeater der FlowHeater GmbH gefunden und möchte meine positiven Erfahrungen hiermit teilen.

flowheater

Im Kollegenkreis hat so jeder seine spezielle Art, Daten zu übernehmen. Zu exportieren, zu synchronisieren oder zu importieren. Es werden Tools der Datenbank, eigene Skripte, oder die Funktionen der Entwicklungsumgebung verwendet. Ich bin aber natürlich der Meinung, ich mache es besser. Ich erstelle Definitionen für Datenübertragungen in einer grafischen Umgebung. Das geht nicht nur schneller, es verhindert auch Fehler. Sicher hat man mit selbst geschriebenen Skripten noch mehr und detaillierte Kontrolle, man muss es aber auch kontrollieren, sprich machen. In FlowHeater klickt man zusammen, testet und führt aus. Und wenn man es dann regelmäßig braucht, gibt es die Möglichkeit der geplanten Batchverarbeitung.

Was ist Flowheater?

  • Eine sehr intuitive Umgebung, um 2 Datenquellen zu verbinden. Ist dies geschehen, können einzelne Tabellen über sogenannte Pipes sehr einfach deren Spalten verbinden
  • Auf dem Wege von der Quelle ins Ziel, lassen sich diese Pipes mit … beeinflussen. So sind vielschichtige Änderungen der auf dem Wege befindlichen Daten möglich
  • Ob Daten nur angefügt, ersetzt und/oder aktualisiert werden sollen, ist über einen simplen Mausklick definiert
  • Diese Projekte lassen sich in einem FlowHeater-Dateiformat speichern und jederzeit wiederholen
  • Es gibt viele Konnektoren. Text, CSV, XML, ODBC, um nur einige und für mich wichtigsten zu nennen

Was macht Flowheater besser?

  • Es fängt Probleme ab Eine Verbindung und Datenübertragung funktioniert nahezu immer auf Anhieb. Zudem gibt es Hilfen wie “Testverbindung”
  • Es fängt Aufwand ab Durch die grafische Benutzeroberfläche ist es auch für den Laien recht einfach, eine Datenübertragung zu realisieren. Aber auch der Profi profitiert. In der Situation”schnell mal eben” aber auch bei komplexen Aufgaben. Vor allem durch die Testfunktionen, ohne wirkliche Übertragung, gestalten sich derartige Aufgaben wesentlich entspannter
  • Es wird protokoliert In einer Ergebnisübersicht sieht man, was passiert ist. Insbesondere auch das, was nicht passiert ist, sprich eine Erklärung, warum einzelne Daten nicht angekommen sind.
  • Es werden SQL-Skripte generiert. So ist ein Import auch ohne FlowHeater ausführbar

Beispiele

Online-Banking

Online-Banking habe ich lange Zeit mit Anwendungen wie “Mein Geld” durchgeführt. Doch immer wieder gab es irgendwelche Probleme mit den Zugängen oder Fehler genereller Art. Mir entstand immer mal wieder der Eindruck, dass ich mich mehr mit der Software, als mit den Daten beschäftigt habe. Eine Lösung musste her. Da es mir nur um Auswertung und hierfür Kategorisierungen ging, hatte ich eine realistische Chance, etwas sinnvolles selber programmieren zu können. Gesagt, getan.

Die Daten der Banken liegen online bei jeder mir bekannten Bank als CSV-Download vor. Einen kleinen manuellen Schritt, der Download dieser Daten, musste ich akzeptieren. Um danach aber keine Hampelei mehr zu haben, konnte ich nun auch für den Import dieser Daten etwas selbst programmieren. Oder Flowheater verwenden. Es ist jetzt nicht überraschend, dass ich mich für Letzteres entschieden habe, denn es hat mir eine Menge Arbeit erspart.

Folgende Aufgaben mussten erfüllt werden

  • Eine wiederverwendbare Definition des Imports
  • Reaktion auf Besonderheiten der jeweiligen CSV-Dateien
  • Manche Datenbanken haben einen aufwändigen Header. Der muss übersprungen werden
  • Direkter Import in eine SQL-Datenbank, ohne diese CSV-Daten vorher noch bearbeiten zu müssen

Umsetzung mit Flowheater

In ein definiertes Verzeichnis lade ich die CSV-Dateien herunter. Das ist der einzige Schritt, bei dem ich noch denken muss. Danach lasse ich FlowHeater die Daten in meine SQL-Datenbank (SAP SQL Anywhere 12) importieren. Und da FlowHeater alles für mich macht, sind die Daten schön aufbereitet in meiner eigenen Anwendung auswertbar.

Mit den sogenannten Heater-Funktionen, könnte ich bereits beim Import schon Regeln definieren und Daten aufbereiten. Denn diese bieten Kontrollstrukturen, Zeichenketten-, Zahlen- und Datumsfunktionen. Ich habe es nicht probiert, aber sicher könnte man an der Stelle Buchungen kategorisieren.

Alt text

Beispiel Umstellung von Artikelnummern

Die eigentliche Aufgabe, wie hier in der Überschrift beschrieben, betrifft Flowheater nun nicht wirklich. Dennoch halte ich dieses Beispiel für erwähnenswert.
Es soll in einer Datenbank mit ca. 40.000 Artikel der Artikelnummerstruktur geändert werden. Diese Daten sollten zunächst einmal schön bearbeitbar in eine Exceltabelle übernommen werden. Eigentlich kein großes Problem. Doch hatte ich das Problem, dass genau nach 16.267 Artikeln der Import abgebrochen ist. So ganz spontan habe ich auch nach der Analyse der Quelldaten keinen wirklichen Grund gefunden, woran das lag.

Hier machte sich dann guter Support bezahlt. Ich habe in meiner Ungeduld mal eben eine E-Mail an den Hersteller geschrieben. Schon nach kurzer Zeit bekam ich eine Antwort. Ich durfte Testdaten senden und bekam innerhalb einer Stunde die Lösung mitgeteilt. Und diese lautete wie folgt:

Das Problem ist, dass in der Bezeichnung teilweise ein „=“ am Anfang steht und Excel hier von einer Formel ausgeht. Siehe Zeile 16.267. Sie können das umgehen indem Sie mittels des String Append Heater ein Anführungszeichen am Anfang der Zeichenkette einfügen, siehe Beispiel.

Und das Beispiel konnte ich dann auch sofort verwenden.

Beispiel EXIF Daten

Mit FlowHeater importiere ich die EXIF-Daten völlig automatisch unter Verwendung des Batch-Moduls in unser ERP-System. Jeden Tag. Kein neues oder geändertes Bild wird übersehen. Die entsprechende CSV-Datei lassen ich über ein EXIF-Tool erzeugen. An der Stelle sein angemerkt, dass das Batch-Modul zusätzliche Kosten verursacht, aber auch im Vergleich zu Zeiterspanis und Nutzen ist dies nicht der Rede wert.

Warum lohnt sich die Investition?

  • FlowHeater spart Zeit. Aus meiner Erfahrung heraus kann ich sagen, sehr viel Zeit.
  • Die Software mag in der Optik vielleicht nicht jeden überzeugen, auch ich dachte zu Anfang, hmm, sieht etwas aus der Zeit aus. Doch darf man sich davon nicht im Negativen blenden lassen. Technisch absolut auf der Höhe der Zeit.
  • Es wird eine Batch-Modul angeboten. Definierte Vorgänge lassen sich dadurch automatisieren. Regelmäßiges Übertragen stellt kein Problem dar. Regelmäßiges Befüllen einer MySQL-Datenbank für Web-Anwendungen aus dem eigenen ERP-System oder anderen/weiteren Quellen lassen sich recht einfach realisieren.
  • Wer einmal EXCEL-Daten in sein ERP-System übernehmen wollte, kennt die Basteleien. Das geht mit FlowHeater definitiv deutlich schneller.