Springe zum Inhalt →

Massimo Castell Beiträge

Todo.txt – Die einfache ToDo Liste

Ich bin immer auf der Suche nach eine Möglichkeit meine Aufgaben zu notieren, damit ich auch nichts vergesse. Und so habe ich über die Jahre schon viele ToDo Programme durchprobiert. Nicht viele haben mich langfristig an der Stange gehalten.

Im Büro verwende ich Outlook. Als zentrale Stelle für Kalender und Emails ist es auch der richtige Ort für meine Aufgaben. Und die Kopplung zu OneNote ist mehr als gut. Zusätzlich habe ich noch ein paar Helferlein, die meine Arbeitsweise noch mehr unterstützen.

Jedoch steht mir diese Umgebung privat nicht zur Verfügung. Ich habe etwas gesucht, dass einfach und über alle meine Systeme hin benutzbar ist. Und dabei bin ich auf eine simple Textdatei gestoßen.

ToDo.txt ist nicht nur der Name der Textdatei, nein es ist ein ganzes System ausgedacht von Gina Trapani. Sie hat diverse Namenskonventionen festgelegt, um in einer simplen Textdatei Aufgaben zu sortieren und bearbeiten. Alles nachzulesen auf dieser Seite.

So sieht eine Zeile und damit eine Aufgabe im Maximum aus.

Das erste Zeichen „x“ ist die Checkbox, ob eine Aufgabe erledigt ist oder nicht. Gefolgt von der Priorität in runden Klammern. Danach Data für den Abschluss und Erstellung. Gefolgt vom eigentlichen Aufgabentext und den Merker für Projekte „+“ und Kontext „@“. Zum Schluss die Deadline.

Wie man sieht, beinhaltet die Zeile alle Informationen die notwendig sind. Und mit einem ordentlichen Texteditor wie unser beliebtes Notepad++ kann man ohne Probleme z.B. alle Zeilen die als Projekt „+Wohnung“ haben sofort finden. So habe ich eine Zeitlang alle meine Aufgaben verwaltet. Einen kleinen Teaser habe ich ja in meinem „Jedi Tricks – Windows – Tastatur Shortcuts“ Beitrag erwähnt.

Und damit sind wir bei dem riesen Vorteil dieser Methode. Die Textdatei kann mit Allem bearbeitet werden und ist damit super flexibel. Und das eröffnet auch gleich alle Tore, um allerlei kompatible Programme zu erstellen. Sehr viele findet man auf der Homepage https://todotxt.org/

Nachdem ich vom Notepad++ als ToDo.txt Editor weggegangen bin, habe ich das kleine portable Tool todotxt.net verwendet. Eine simple GUI mit vielen Keyboard Shortcuts. Genau was ich liebe.

Trotzdem habe ich immer sehr neidisch auf Gina geschaut. Denn das eigentliche Tool, das Sie geschrieben hat, ist ein Kommandozeilen Tool (cli – command line interpreter). Wunderschön und simpel, aber nur für Mac oder Linux. Für Windows / DOS gibt es leider nichts.

Also gab es nur eine Möglichkeit. „Massimo setzt dich hin und programmiere es selbst!

Und so ist es entstanden. Ich habe mir ein rudimentäres Grundgerüst geklont und die letzten Tage immer mehr Features ran gebaut. Jetzt habe ich ein kleines feines Python Programm, dass meine ToDo.txt nach den Regeln bearbeitet. Es ist noch nicht ganz fertig und ich werde noch mehr Funktionen einbauen, die den Tastaturkürzeln von todotxt.net entsprechen.

Ich nehme gerne Wünsche und Anregungen entgegen. Downloaden und Kommentieren könnt Ihr es auf der dazugehörigen Github Seite.


Kommentare sind geschlossen.

Don’t tap the white tile – AutoHotkey Bot

Ich sehe gerade, dass ich hier noch nie etwas über Phrase Express und AutoHotkey geschrieben habe. Das Eine vorher, das Andere jetzt, sind eigentlich mein Rückgrat in meiner täglichen Arbeit. Das muss ich unbedingt als Jedi-Tricks verbloggen.

Doch kommen wir zur Überschrift.

Ich bin vor Kurzem auf dieses Video von CodeBullet (Channel) gestoßen. In diesem erstellt er ein Python Bot für das Spiel „Don’t tap the white tile“ oder „Piano Tiles“ auf sehr unterhaltsame Weise. Ich kann euch eh den ganzen Kanal nur empfehlen.

Das hat mich auch inspiriert. Ich habe schon vor Monaten mal versucht mit Python Forza Horizon 2 auf der XBox zu steuern. Das klappte jedoch nicht so gut, da das Koppeln des PCs mit der XBox mehr schlecht als recht war. Also am besten ein Spielt auf dem PC steuern. Da ich aber kein Abklatsch machen wollte, habe ich mir vorgenommen, dies mit AutoHotkey zu realisieren.

Ich habe das Spiel online auf dieser Seite gefunden. Der Bot und die Zeiten und Koordinaten sind auf diese Version eingestellt. Das muss natürlich von Umgebung zu Umgebung angepasst werden.

Das Skript startet mit den üblichen Umgebungseinstellungen für AutoHotkey.

#SingleInstance, force
#NoEnv 
SendMode Input
SetWorkingDir %A_ScriptDir%

Der nächste Block ist die Umgebung für den Bot. Mit persistent wird der Bot am Laufen gehalten. Deswegen wird er auch sofort pausiert.

Dann folgt der Settimer Befehl mit dem ich die Unterroutine spalte1 jede 10 Milisekunden (laut AutoHotkey Dokumentation nur annähernd) aufrufe. Zu den Unterroutinen komme ich gleich.

Und ganz wichtig bei Skripten, die Eingaben und die Maus steuern immer! eine Möglichkeit einbauen um das Skript zu pausieren oder gar abzuschalten. Ich habe F1 als Pause/Play Taste und ESC als Abbruch des Skriptes. Im Video von CodeBullet kann man schön sehen, was passieren kann, wenn man das vergisst.

#persistent
pause
Settimer, spalte1, 10

F1::pause
esc::exitapp

Jetzt kommen die Subroutinen für jede Spalte des Pianos. Diese gibt es natürlich vier mal mit verschiedenen Koordinaten.
Nach der Sprungmarke spalte1 wird der Befehl PixelSearch verwendet. Mit diesem kann man einen Bereich definieren, in dem nach einer Farbe gesucht wird. In unserem Fall 0x111111 für Schwarz. Diese Suchen wir in einem Rechteck mit den Koordinaten links oben 590,630 und rechts unten 620,660. Dieses befindet sich in der zweiten Reihe von unten und umfasst etwa immer das mittlere Drittel einer Tile wie im Screenshot zu sehen ist.

Wenn in dem genannten Bereich die Farbe nicht vorkommt, dann gibt PixelSearch einen Fehler aus den ich mit ErrorLevel abfangen. D.h. wenn ein Fehler ausgegeben wird, dann ist das Suchfeld nicht Schwarz, also Sprung zur nächsten Spalte. Ansonsten fahre ich mit der Maus an die vorgegeben Koordinaten und klicke. Die Koordinaten sind immer in der Mitte der Tile und am untersten Ende.

spalte1:
    PixelSearch, , , 590, 620, 630, 660, 0x111111, 0, Fast
    if ErrorLevel
        goto spalte2
    else
        MouseClick, left, 600, 710
        ;Send a
    return

Diese Routine wiederholt sich jetzt viel mal für jede Spalte. Nur bei Spalte 4 ist anstelle des goto auch ein return, da keine weitere Spalte folgt.

Die Suchkoordinaten, wie auch mit dem Klick Position, habe ich durch sehr langes ausprobieren eingestellt. Das sind die Stellen, an denen man schrauben muss, um den Highscore nach oben zu kitzeln.

Wie Ihr auch sehen könnt, habe ich Send a auskommentiert. Ich dachte, zuerst kann ich einfach nur die Taste klicken lassen. An Anfang ist jedoch das Spiel so langsam, dass der Bot ein schwarzes Feld doppelt erkennt und deswegen doppelt drückt. Die Maus zu positionieren und dann zu klicken hilft den Bot zu bremsen. Das ist jedoch, im späteren Verlauf, der Grund warum der Bot zu langsam ist. Hier habe ich schon eine Idee mit einem Zähler oder Timer, der ab einem bestimmten Zeitpunkt von Maus auf Tastatur umspringt und somit schneller wird.

Mit dieser Methode jedoch erreiche ich immer Highscores über 400 Punkte. Mein bisheriger Rekord ist bei 509.

Den Rekord vom Python Skript vom CodeBullet werde ich jedoch nicht so schnell erreichen, da AutoHotkey insgesamt etwas langsamer bei der Bilderkennung ist. Auch schwankt die Performance des Skriptes immens. Aber ich bleibe dran und melde mich, wenn ich einen Schritt weitergekommen bin.

Warum ich weiter mache? Weil ich auf dieses Video gestoßen bin. Das ist scheinbar auch ein AutoHotkey Bot, der sage und schreibe 9 Stunden gelaufen ist und 176.573 Tiles geklickt hat. Also muss es eine bessere Lösung geben.

Falls ich Euch inspiriert habe oder Ihr sogar Lösungsvorschläge für mich habt, dann könnt Ihr mich gerne über Twitter oder per Mail kontaktieren.

Zum Schluß der Code. Einfach als *.ahk Datei abspeichern, per AutoHotkey ausführen und das Spiel auf der Webseite öffnen.

#SingleInstance, force
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
CoordMode, Pixel , Client
timevar := 10

#persistent
 pause
;  timevar -= 0.23
 Settimer, spalte1, %timevar%

F1::pause
esc::exitapp

 spalte1:
 PixelSearch, , , 590, 620, 630, 660, 0x111111, 0, Fast
 if ErrorLevel
 goto spalte2
 else
 MouseClick, left, 600, 710
;  Send a
 return

 spalte2:
 PixelSearch, , , 690, 620, 730, 660, 0x111111, 0, Fast
 if ErrorLevel
 goto spalte3
 else
 MouseClick, left, 700, 710
;  Send s
 return

 spalte3:
 PixelSearch, , , 790, 620, 830, 660, 0x111111, 0, Fast
 if ErrorLevel
 goto spalte4
 else
 MouseClick, left, 800, 710
;  Send d
 return

 spalte4:
 PixelSearch, , , 890, 620, 930, 660, 0x111111, 0, Fast
 if ErrorLevel
 return
 else
 MouseClick, left, 900, 710
;  Send f
 return
Schreibe einen Kommentar

Jedi Tricks – Python – Bilder sortieren à la Tinder

Wenn man sein Mobiltelefon wechselt oder einfach mal nur aufräumen will, dann kann es passieren, dass meine einen Ordner mit hunderten von Bildern hat, von denen man jedoch nur dutzende Aufheben will. Typisch für so ein Fall ist der WhatsApp Medien Ordner.

Jetzt kann man natürlich mit IrfanView sich von Bild zu Bild klicken, anschauen und dann löschen. Das ist jedoch nicht schnell und löschen und weiterklicken geht nicht sehr flüssig von der Hand. Und Bilder, die man behalten will, bleiben dann immer „übrig“. Wenn man am nächsten Tag weiter sortieren will, stören sie.

Auf Android gibt es die App SlideBox, die das Problem wie bei Tinder löst. Sie zeigt ein Bild an, man swiped in eine Richtung um es zu löschen, in eine Andere um es zu behalten. Das geht locker von der Hand. Aber am PC gibt es sowas nicht.

Und da ich nicht nur immer sage, dass man mehr programmieren sollte, habe ich mich hingesetzt und quick und dirty etwas zusammengeschrieben.

Den Quelltext habe ich auf meinem Github abgelegt. Gerne zum Downloaden und verwenden. Es setzt Python, TKinter und OpenCV voraus. Python sollte meiner Meinung nach immer auf einem Rechner installiert sein. Ab der Version 3.x ist TKinter mit dabei. OpenCV bekommt man einfach per:

pip install opencv-python

Ich gehe hier kurz auf das Skript ein.

import tkinter as tk
from tkinter import filedialog
import os
import cv2
import sys
import shutil

# output folder
sort = "e:/pic_swipe/sort/"
todelete = "e:/pic_swipe/delete/"

Zuerst werden die benötigten Pakete importiert.

TKinter brauchen wir für den Dateidialog. OS, SYS und SHUTIL für das Dateihandling und CV2 ist OpenCV um die Bilder zu betrachten und auch die Cursortasten abzufragen und mit Funktionen zu versehen.

Dann werden die Ausgabeverzeichnisse definiert. Man braucht ein Ordner in der die zu Löschenden und in der die zu behaltenden Dateien abgelegt werden sollen. Ja, die Ordner habe ich im ersten Wurf hart reingecoded. Das Skript hat noch ein paar weitere Schönheitsfehler. Das sollte jedoch nicht stören, wir brauchen eine Abhilfe für unser Problem.

# File dialog for picing picture folder
root = tk.Tk()
root.withdraw()
file_path = os.path.dirname(filedialog.askopenfilename())

Diese Zeilen öffnen einen Dateidialog. Man wählt damit eine Bilddatei in dem zu sortierenden Verzeichnis aus. Das Verzeichnis wird in der Variable „file_path“ gesichert.

# content of picutre folder
picturelist = os.listdir(file_path)
index = 0

Damit wird das Verzeichnis ausgelesen. Der Inhalt in die Liste „picturelist“ gesichert und die Indexvariable initialisiert.

# create viewer windows, resize picture
cv2.namedWindow("image", cv2.WINDOW_NORMAL)
img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
cv2.resizeWindow('image',800, 600)
cv2.imshow('image',img)

Mit OpenCV erstellen wir das Viewerfenster und legen es auf 800×600 Pixel fest. Und laden das erste Bild (Eintrag Index 0 der Liste). Alle Bilder, die angezeigt werden, werden auch das Format „gepresst“. Ja, das verreißt die Proportionen, aber wir wollen die Bilder nicht bearbeiten, sondern nur kurz anschauen, um dann zu entscheiden, ob ins Töpfchen oder ins Kröpfchen.

while(1):
    k = cv2.waitKeyEx(0)
    if k==27:           # wait for ESC key to exit
        cv2.destroyAllWindows()
        break

Und damit sind wir schon bei der Hauptschleife. Diese läuft mit while(1) unendlich. Mit cv2.waitKexEx(0) überprüfen wir welche Taste gedrückt wird und speichern dies in die Variable „k“.

„27“ ist der Code für die ESC Taste mit der die While Schleife unterbrochen und damit das Programm beendet wird.

    elif k==2490368:    # cursor up move to delete folder
        shutil.move(str(file_path)+"/"+str(picturelist[index]), str(todelete)+"/"+str(picturelist[index]))
        index += 1
        img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
        cv2.resizeWindow('image',800, 600)
        cv2.imshow('image',img)    

„2490368“ Pfeiltaste hoch. Damit verschieben wir die aktuell angezeigte Datei in den Löschen-Ordner. Erhöhen den Index um 1 und zeigen damit das nächste Bild an. Damit entsteht der Flow. Keine weitere Taste drücken um das nächste Bild zu bearbeiten.

    elif k==2621440:    #cursor down move to sort folder
        shutil.move(str(file_path)+"/"+str(picturelist[index]), str(sort)+"/"+str(picturelist[index]))
        index += 1
        img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
        cv2.resizeWindow('image',800, 600)
        cv2.imshow('image',img)

„2621440“ Pfeiltaste runter. Das Bild wird in den Sortieren-Ordner verschoben und auhc hier gleich die nächste Datei angezeigt.

    elif k==2424832:    # cursor left previous picture
        index -= 1
        if index < 0:
            index = 0
        img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
        cv2.resizeWindow('image',800, 600)
        cv2.imshow('image',img)
    elif k==2555904:    # cursor right next picture
        index += 1
        img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
        cv2.resizeWindow('image',800, 600)
        cv2.imshow('image',img)
    elif k==-1:         # ignore waitkey standard input
        continue
    else:               # print every other pressed key
        print(k)    

Die restlichen Abfragen sind nur noch Makulatur. „2424832“ Pfeiltaste links um zum vorherigen Bild zu gelangen und „2555904“ Pfeiltaste rechts um zum nächsten zu kommen. „-1“ brauchen wir, da waitKeyEx die Tasten immer wieder abfragt und -1 zurückgibt, wenn nichts betätigt wird. Und zum Schluss noch eine Ausgabe, wenn man eine andere Taste drückt. Mit diesem Print sieht man den Code der Taste.

Wie man unschwer erkennen kann, fange ich zwar einen Index kleiner 0 ab, aber den höchsten Index, d.h. nach der letzten Bilddatei, nicht. Auch läuft das Skript auf einen Fehler, wenn man ein Bild verschoben hat und dann zurück (Pfeil links) auf das Bild springt. Das ist dann nicht mehr da und OpenCV steigt mit einem Fehler aus.

Es gibt also noch ein paar Dinge zu erledigen. Z.B. den Code zum Bildanzeigen habe ich 5 mal „getippt“, dass schreit förmlich nach einer Subroutine.

Ihr könnt euch gerne austoben und auf mein Git die Änderungen commiten.

Bei Fragen könnt Ihr Euch gerne an mich wenden. Unten werde ich das komplette Skript nochmals einfügen, eine aktuellere Version werdet Ihr immer auf Github finden.

Viel Spaß mit dem Skript und beim Sortieren der Bilder.

import tkinter as tk
from tkinter import filedialog
import os
import cv2
import sys
import shutil

# output folder
sort = "e:/pic_swipe/sort/"
todelete = "e:/pic_swipe/delete/"

# File dialog for picing picture folder
root = tk.Tk()
root.withdraw()
file_path = os.path.dirname(filedialog.askopenfilename())

# content of picutre folder
picturelist = os.listdir(file_path)
index = 0

# create viewer windows, resize picture
cv2.namedWindow("image", cv2.WINDOW_NORMAL)
img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
cv2.resizeWindow('image',800, 600)
cv2.imshow('image',img)

while(1):
    k = cv2.waitKeyEx(0)
    if k==27:           # wait for ESC key to exit
        cv2.destroyAllWindows()
        break
    elif k==2490368:    # cursor up move to delete folder
        shutil.move(str(file_path)+"/"+str(picturelist[index]), str(todelete)+"/"+str(picturelist[index]))
        index += 1
        img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
        cv2.resizeWindow('image',800, 600)
        cv2.imshow('image',img)
    elif k==2621440:    #cursor down move to sort folder
        shutil.move(str(file_path)+"/"+str(picturelist[index]), str(sort)+"/"+str(picturelist[index]))
        index += 1
        img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
        cv2.resizeWindow('image',800, 600)
        cv2.imshow('image',img)
    elif k==2424832:    # cursor left previous picture
        index -= 1
        if index < 0:
            index = 0
        img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
        cv2.resizeWindow('image',800, 600)
        cv2.imshow('image',img)
    elif k==2555904:    # cursor right next picture
        index += 1
        img = cv2.imread(filename = str(file_path)+"/"+str(picturelist[index]))
        cv2.resizeWindow('image',800, 600)
        cv2.imshow('image',img)
    elif k==-1:         # ignore waitkey standard input
        continue
    else:               # print every other pressed key
        print(k)    
Schreibe einen Kommentar

Jedi Tricks – Notepad++ – Zeilen mit bestimmten Wort finden/löschen/kopieren

Immer mal wieder steht man vor der Aufgabe aus langen Listen etwas herauszufischen. Zum Beispiel alle E-Mail Adressen aus einem Excel Dokument oder alle Telefonnummern aus einer CSV Datei. Ich muss aus Datenbankauszügen die Zeilen mit den bestimmten Lizenzen weiterverarbeiten und auch manchmal alle Links zu Bildern oder Filme aus einer HTML Site oder XML Struktur herausfinden.
Je nach Aufgabe, ist es nicht immer Ratsam sofort einen Parser zu schreiben. Besonders wenn es sich um eine einmalige Sache handelt. Viel schneller kann man mit dem folgenden Trick im Notepad++ eine Batchdatei oder ein „Skript“ basteln.
Nehmen wir mal als Beispiel eine RSS Feed Datei eines Kurses der Uni Erlangen von Professor Kohlhase den ich nur wärmstens empfehlen kann. Diese beinhaltet im Body alle Element im folgenden Format.

<item>
  <title>1 – Künstliche Intelligenz I 2017/2018</title>
    <itunes:duration>01:23:51</itunes:duration>
    <enclosure url=“http://itunes.video.uni-erlangen.de/get/file/29771.m4v?src=itunesu“ length=“1682454663″ type=“video/mp4″  />
  <guid isPermaLink=“false“>/data/2017/10/19/FAU_W17_KII_ClipID_8350/20171019-KII-Kohlhase-Combined-H.264-1920×1080.m4v</guid>
  <pubDate>Thu, 19 Oct 2017 00:00:00 +0200</pubDate>
  <itunes:author>Prof. Dr. Michael Kohlhase</itunes:author>
  <itunes:keywords></itunes:keywords>
  <itunes:subtitle>Künstliche Intelligenz I</itunes:subtitle>
  <itunes:summary></itunes:summary>
  <itunesu:category itunesu:code=“101102″ />
  <itunes:order>1</itunes:order>
</item>
<item>
  <title>1 – Künstliche Intelligenz I 2017/2018</title>
    <itunes:duration>01:23:51</itunes:duration>
    <enclosure url=“http://itunes.video.uni-erlangen.de/get/file/29817.m4v?src=itunesu“ length=“1682499721″ type=“video/mp4″  />
  <guid isPermaLink=“false“>/data/2017/10/19/FAU_W17_KII_ClipID_8350/20171019-KII-Kohlhase1-H.264-1920×1080.m4v</guid>
  <pubDate>Thu, 19 Oct 2017 00:00:00 +0200</pubDate>
  <itunes:author>Prof. Dr. Michael Kohlhase</itunes:author>
  <itunes:keywords></itunes:keywords>
  <itunes:subtitle>Künstliche Intelligenz I</itunes:subtitle>
  <itunes:summary></itunes:summary>
  <itunesu:category itunesu:code=“101102″ />
  <itunes:order>1</itunes:order>
</item>

In der ganzen RSS Datei ist eigentlich nur der Link zur Video Datei wichtig, denn das ist zumindest ein Teil der URL um diese z.B. per wget downzuloaden. Deshalb müssen wir die Zeilen identifizieren, markieren und aus der großen RSS Datei herausholen.

Identifizieren
Wie man in dem Auszug sehen kann ist ein Teil der URL in den Zeilen mit dem Schlüsselwort „isPermaLink“. Wichtig ist, dass dieses Schlüsselwort in allen gewollten Zeilen vorkommt. Und besser ist es, wenn es in keinen weiteren Zeilen erscheint. Dann braucht man das Ergebnis nicht nochmal filtern.

Markieren
Dafür verwenden wir zwei Funktionen im Notepad++. Die Erste ist im Suchen Menu (STRG+F) die Hervorheben Funktion im gleichnamigen Reiter.
Wir suchen nach „isPermaLink“ und achten auf die markierten Optionen. „Lesezeichen setzen“ ist wichtig für die zweite Funktion, die wird verwenden werden. Damit werden alle Zeilen zur Weiterverarbeitung markiert. Die zweite Option „Für jede Suche löschen“ bedeutet, dass man vorhandene Lesezeichen beim Klick auf „Alle Markieren“ löscht und durch die neue Auswahl ersetzt. Man kann natürlich dies auch verwenden, wenn man zwei unterschiedliche Suchkriterien hat um alle Zeilen zu markieren. Dann sucht und markiert man zuest mit dem einem Kriterium die Zeilen, dann mit dem Nächste und addiert sozusagen die Lesezeichen. In unserem Fall ist das nicht notwendig.
Die markierten Zeilen werden durch einem blauen Punkt neben der Zeilennummer dargestellt.
Kopieren/Herausholen
Und damit ist auch schon fast alles gemacht. Im Suchen Menü gibt es eine Untermenü Lesezeichen, das unsere zweite Funktion beinhaltet. Darin sind auch weitere Funktionen, die keine Wünsche offen lassen. Mit diesen kann man die markierten Zeilen löschen, kopieren, ausschneiden, ersetzen usw.
In unserem Fall „Zeilen mit Lesezeichen kopieren„. Damit werden alle Zeilen in die Zwischenablage gelegt und wird können einfach ein neues leeres Dokument erstellen und alle Zeilen einfügen.
Mit der Funktion Ersetzen (STRG-H) und unseren Jedi Trick für Pre- und Suffixe sollte es jetzt kein Problem sein aus

das
<guid isPermaLink=“false“>/data/2017/10/19/FAU_W17_KII_ClipID_8350/20171019-KII-Kohlhase-Combined-H.264-1280×720.m4v</guid>

dies

zu erstellen. Dieses neue Datei dann als Batchdatei abspeichern und ausführen. Das „–no-check-certificate“ ist für den Download auf dem Server der Uni Erlangen notwendig, das ist nicht immer der Fall.
Hier fällt mir auf, dass ich euch noch gar nicht erklärt habe, wie man z.B. in einer Zeile 7 Zeichen am Ende löscht. Der nächste Jedi Trick – Notepad++ kommt.
Kommentare sind geschlossen.

Massimo und die DSGVO

Vor knapp einem Monat war der Stichtag der DSGVO. Das große Blogsterben wurde vorhergesagt und ist auch eingetreten. Viele kleine Blogs sind offline gegangen.
Und ich? Ja, auch ich habe alle meine Blogs und Webseiten in den Hyperschlaf gepackt. Jedoch hört das Jucken in den Finger nicht auf. Also bleibt einem nichts Anderes übrig, als sich mit den Dingen beschäftigen und Maßnahmen ergreifen.

Jetzt gehe ich hier wieder online. Mit ein paar Änderungen. Natürlich zu allererst HTTPS. Eine Datenschutzerklärung gibt es jetzt auch.

Die größte und einschneidendste Änderung ist jedoch das Abschalten meiner Kommentare. Es ist mir einfach zu viel Aufwand den ganzen gesetzlichen Bestimmungen nachzukommen. Ich verstehe das Ganze und finde, dass Jeder das Anrecht auf seine Daten hat. Immerhin ist das auch ein Grund, warum ich mich mit dem Thema Blockchain so tief auseinandersetze. Die persönlichen Userdaten am besten zu schützen, können Firmen, die auch Geld in das Thema investieren. Deswegen überlasse ich das lieber den Großen. Ich sehr froh, wenn wir unsere Diskussionen zu meinen Blogposts auf den gängigen Plattformen, zu denen ich diese Post repliziere, weiterführen.

Ihr findet mich auf LinkedIn, Xing und Facebook. Jedoch bin ich am aktivsten auf Twitter unterwegs.

Kommentare sind geschlossen.

Big Bad Wolf Data

Ich habe am Dienstag, den 27.02. einen Vortrag über Big Data besucht. Es war ein Volkshochschul Vortrag mit dem Titel „Der digitale Umbruch – Big Data“. Jetzt sagt Ihr berechtigterweise. Massimo, auf einen VHS Vortrag geht man nicht. Erstrecht nicht mit deinem Basiswissen. Was kannst du denn da lernen? Aber ich liebe es zu erfahren wie andere Personen das Thema behandeln und noch viel wichtiger, wie das Publikum auf diese Themen reagiert. Denn, und das wisst Ihr genau, dank Big Data und der Datensammelwut lebt jeder von uns online in einer Blase. Und aus dieser sollte man sich manchmal befreien.
Und so kam es, dass ich mich unters „Volk“ gemischt habe. Die erste Überraschung war, das ich das Durchschnittsalter drastisch nach unten gesenkt habe. Und das obwohl ich auch schon die 40 deutlich überschritten habe. Die Zweite war der Dozent. Ein sehr sprach gewandter Mann, der nicht zum ersten Mal einen Vortrag gehalten hat. Saubere Übergänge und Spannungsbögen und immer im Kontakt mit dem Publikum.
Auch habe ich interessante Informationen aufgenommen. Er hat sich dem Thema Datensammelwut und Auswertung durch Big Data mit dem Beispielen „Überraschende Trump Wahl“ und den „nicht erwarteten Brexit“ genähert. Es sind Namen wie Gustave Le Bond mit seinem Buch Psychologie der Massen und Michal Kosinski mit seiner App myPersonality auf Facebook gefallen. Die daraus entwickelte OCEAN Methode und Firmen wie Cambridge Analytica die das angewendet hat. Es ist erschreckend und wenn man das alles auch noch geballt in 2 Stunden hört, dann ist es noch „brutaler“.
Und genau das war das größte Problem an dem Vortrag. Es ging nämlich nur in diese Richtung. Nachdem das Publikum schon negativ angeheizt war, wurden noch mehr Schreckensszenarien dargestellt. IoT und die Vernetzung der Autos und Straßen zur vollständigen Überwachung des Bürgers, ausgeschalteten Smartphones die trotzdem Bewegungsdaten aufnehmen, die komplette Transparenz der Personen in Soziale Medien, das Sammeln und Verkaufen von medizinischen Daten und der Verlust allem persönlichen Freiraums, der Privatsphäre und unserer Freiheit.

Ich weiß, das ist alles machbar und für totalitäre Staaten das neue Machtinstrument. Aber noch leben wir hier in Deutschland. Und ich hätte von so einer Veranstaltung erwartet, dass sie diese Szenarien aufzeigt um zu Informieren aber auch auf der anderen Seite auch die Vorteile und guten Aspekte dieser neuen Technologie aufzeigt. Besonders im medizinischen Bereich da der komplette Saal mit Menschen des älteren Semesters gefüllt war. Und so verließ ich die Veranstaltung eher mit einer negativen Stimmung.
Auf der anderen Seite habe ich mehrere Ideen bekommen. Vielleicht sollte ich so einen Vortag geben. „Big Data – The good and the bad“. Und auch Kurse wie diese Menschen sich schützen können und eine Medienkompetenz aufbauen. Ich werde Euch auf dem Laufenden halten.

Kommentare sind geschlossen.

80% der Bitcoins sind geschüft!

Ich bin heute nebenbei auf diese Information gestoßen. Und ich muss zugeben, wenn man die Hintergründe nicht kennt, dann ist das Erschreckend.

Bitcoins werden ja eigentlich nicht erzeugt. Dieses Gerücht hält sich hartnäckig, da ja auch von Schürfen die Rede ist. Die Technologie dahinter ist jedoch anders.

Damit Transaktionen auf der Blockchain festgeschrieben werden, muss ein Teilnehmer, der sogenannte Miner, erst ein mathematisches Problem lösen. Der erste Miner, der dieses Problem löst, hat das Recht gewonnen den Block zu beschreiben, wenn mehr als die Hälfte der Teilnehmer zustimmt, dass die Lösung richtig ist. Dann darf er alle anstehenden Transaktionen in den Block schreiben. Das ist der sogenannte „Proof of Work“. Dieser kostete sehr viel Rechenleistung und damit Energie. Das ist auch der Grund, warum immer gesagt wird, dass Bitcoin mehr Energie verbraucht wie Dänemark. Alle Miner berechnen diesen Hashwert etwa alle 10 Minuten.

Damit auch Miner diesen Proof of Work leisten bekommen Sie alle Transaktionengebühren gutgeschrieben. Diese Gebühren werden von jedem der eine „Überweisung“ durchführt variable an der Transaktion festgelegt. Und zusätzlich schüttet die Blockchain im Augenblick (Januar 2018) noch 12,5 Bitcoin zusätzlich aus. Das ist das buchstäbliche schürfen der „Dinger“ aus dem mathematischen Nirvana.

Nun ist Bitcoin, auf Grund der kryptographischen und mathematischen Regeln, eine begrenzte Ressource. Es wird nur 21.000.000 Bitcoins geben, damit ist Bitcoin so gesehen eine deflationäre Währung. Wenn dieser Punkt erreicht ist, dann werden beim Beenden des Proof of Work keine Bitcoins mehr ausgeschüttet und der Miner kassiert „nur“ die Transaktionsgebühren.

Das ist der kritische Punkt von Bitcoin. Denn wenn sich das Minen wegen den hohen Energiekosten nicht mehr lohnt, werden vielen Miner, die das professionell betreiben, auf den nächsten Coin weiterziehen. Die Verbleibenden werden ihre Unkosten nur aus den Transaktionsgebühren ziehen müssen. Also werden Sie nur die Transaktionen mit einer hohen Gebühr in den Block schreiben, da diese beschränkt ist und damit nur eine bestimmte Anzahl an Transaktionen tragen kann. Das bedeutet Bezahlvorgängen für z.B. einen 3 Euro Cappuccino ohne Transaktionsgebühr (da es bei so einer kleinen Summe keinen Sinn macht) würden sich zeitlich ziehen da niemand diese in die Blockchain schreiben will. Das wäre natürlich der Tod einer Alltags-Währung.

Mit dieser Information im Hinterkopf zu erfahren, dass Anfang 2018 schon 80% der Bitcoins geschürft sind, ist erschreckend. Bitcoin ist 2017 erst so richtig in das Bewusstsein der Menschen gekommen. In den vergangenen 9 Jahren wurden schon 80% gerechnet. Dann ist also schon in 2 Jahre das Ende? Genau zu dem Zeitpunkt, an dem er richtig losgehen soll?

Zum Glück nicht.

Die Ausschüttung wird in regelmäßigen Abständen halbiert. Da sollte für die Unkosten der Miner auch kein Problem sein, denn der Preis/Wert des Bitcoins sollte immer höher werden, da er deflationär angelegt ist. Am 09.Juli 2016 wurde die Ausschüttung von 25 BTC auf 12.5 halbiert. Gestartet ist die Blockchain mit 50 BTC Ausschüttung pro Block und die nächste Halbierung auf 6,25 BTC wird 2020 erwartet. Das von mir beschriebene End-Szenario soll damit erst 2140 eintreten. Anbei eine kleine Grafik von blockchain.info die das Volumen gut veranschaulicht. Auf der Seite sind übrigens viele weitere sehr informative Diagramme.

 

[via][via]

Kommentare sind geschlossen.

Alexa. Drucke meine Zeichnungen aus.

Ich war sehr erfreut als gestern mein Weihnachtsgeschenk aufgemacht habe und ich ein Amazon Echo in den Händen hielt. Seit langem liebäugelte ich mit dem Gedanken, habe es jedoch nie gekauft. Ein Frage die mich immer beschäftigte war, was genau macht man denn mit so einem intelligenten Lautsprecher? Und durch Zufall stoße ich auf dieses Bild in Olegs Blog.

Wie böse Zungen schon behaupten, werden die Lautsprecher hauptsächlich und mit Abstand nur zum Musik spielen, Wettervorhersagen und als Timer verwendet. An sich ziemlich teure Geräte nur für diesen Zweck.

Ich finde jedoch, dass da mehr dahinter steckt. Wir sind halt noch nicht bereit mit einem Assistenten per Sprache zu kommunizieren wie z.B. die Crew der Enterprise. Und mal abgesehen, dass Alexa, Google Home, Cortana gerade noch in den Kinderschuhen stecken und die Intelligenz, die sie an den Tag legen, auch diesen Kindern entsprechen. Ist das ein erster Schritt in unsere Zukunft.

Ich hatte mal die Idee einen Chatbot mit unserem PLM System zu verbinden. Chatbots waren genau vor einem Jahr die Sau die durch das Internetdorf getrieben wurde. Chatten ist jedoch etwas, zu dem Menschen noch weniger einen Draht haben. Auch wenn heutzutage ohne Whatsapp, Facebook Messenger, Telegram und Threema die Koordinations-Kommunikation nur sehr schwer möglich ist.

Was ich jedoch deutlich sehen kann ist eine Verbindung ein Spracherkennungsdienst mit dem PLM System. Solche Szenarien wie „Alexa schicke mir bitte die Layoutzeichnung des Werk per Email“ oder besser „… zeige uns die Zeichnung auf dem Beamer„. Denkt man jetzt noch eine Stufe weiter und bringt den Algorithmen die PMI Informationen bei, dann würde in der Fertigung an der CNC Maschine dies hier gehen. „Alexa, wie waren nochmal die Toleranzen der 5mm Bohrung in B3?“ oder „Sage mir alle Änderungen des Änderungsindex D„. Es würde eine neue Welt aufgehen. Kein herumtelefonieren in der Hoffnung jemanden anzutreffen, kein Warten auf die Antwortemail, die auch nur beinhaltet „Ich weiß nicht was Sie meinen, lassen sie uns telefonieren sobald ich aus meinen Meetings draußen bin.„. Man fragt nach der Lösung und bekommt diese von der Maschine geliefert.

Für die Kaffeepause: Ihr sollte euch man Gedanken machen welche wiederkehrenden Fragen auftauchen und versuchen diese in ein „Rezept“ zu packen. Denn irgendwann kann man diese Rezepte sicherlich einer Maschine geben um sie abzuarbeiten.

 

[via]

Kommentare sind geschlossen.

Die Revolution der KIs

Gerade lese ich den Beitrag „Wie revolutionär ist KI tatsächlich“ auf boot.ai.

Vollgepackt mit Phrasen wir toll KI ist und es zum Grundstein der nächsten IT Plattformen wird. So wichtig wie Elektrizität.

Ganz unrecht hat der Autor nicht. KIs werden immer intelligenter nicht zuletzt durch die immer performantere Hardware. Erst neulich hat Nvidia die neue Titan V vorgestellt. Der Traum eines jeden Daten Analysten mich eingeschlossen.

Aber auch die immer größere Verbreitung bringt neue schlaue Köpfe ins Boot des Maschinellen Lernen. Dadurch kommen auch neue Ideen und bessere Algorithmen heraus. Und der Weg zu generellen Künstlichen Intelligenz wird immer mehr zur Autobahn.

Aber ist KI so benutzbar wie Strom? Oder sogar so benutzbar wir ein PC? In Zukunft sicherlich. Vielleicht sogar früher als gedacht. Im Augenblick jedoch noch nicht. Wir stecken noch in den Kinderschuhen. Der Hype gerade verleitet zu denken, ich werfe der Grafikkarte Big Data technisch alle Daten hin und schon spuckt mir der Rechner den besten Weg heraus wie ich in meiner Industrieanlagen Strom sparen kann. Oder ich weiß wann Bauteile ausfallen und schon die Bestellung auslösen kann noch bevor ein Schaden entsteht. Im Augenblick sind jedoch noch so viel Vorarbeiter zu machen. Die Algorithmen müssen trainiert werden. Und wehe die Datenbasis ist nicht sauber und durchdacht. Overfitting oder unerwünschte Ergebnisse sind an der Tagesordnung. Ich möchte ja nicht schon wieder an Tay, den Chatbots von Microsoft, erinnern.

Ich kann es selbst nicht erwarten, diese hilfreichen KIs zu erleben. Und ich bin mir auch sicher, dass das noch zu meinen Lebzeiten passieren wird. Es ist jedoch noch ein sehr spannender Weg dahin.

Was denkt Ihr darüber? Liege ich falsch? Gibt es schon eine Alexa, Siri oder Cortana die mir mein Leben erleichtert anstatt eine SMS fünf mal zu diktieren?

Kommentare sind geschlossen.

Jedi Tricks – Irfanview – Screenshots

Heute schreibe ich über mein Lieblingsbild Bildmanipulationsprogramm Irfanview. Das Tool ist eine Eierlegendewollmilchsau was Bildmanipulationen betrifft. Irfanview war eigentlich ein Viewer. Es wurde jedoch immer weiter erweitert, dass es jetzt viele kleine Tricks beherrscht. Es ist nicht mit Gimp oder Photoshop zu vergleichen, sondern mehr für alle andere Aufgaben. Batchverarbeitung zum Bilder vergrößern/verkleinern, umbenennen, Wasserzeichen einbauen, in andere Formate konvertieren usw. Farben/Farbkanäle bearbeiten, „Rote Augen“ entfernen, Beschneiden und verlustfrei drehen. Und natürlich das Tool um schnell Bilder in einem Verzeichnis durchzuscannen und anzuschauen.

Heute zeige ich euch eine Funktion, die nicht so bekannt ist. Screenshots mit Irfanview durchführen. Jetzt kann man natürlich sagen: „Was soll das Massimo? Mit dem Snipping Tool von Windows hat man doch alles.“ Ja, das Snipping Tool ist schon gut und in manchen Stellen sogar besser. Z.B. wenn man etwas mit einem „Marker“ hervorheben will. Aber Irfanview kann den Mauszeiger und aufgeklappte Menüs abfotografieren. So heißt auch die Funktion.

Diese startet man mit „c“.

Und schon sieht man, was Irfanview alles kann. Wenn man das gleiche machen wie mit dem Snipping Tool, dann wählt man 5 aus und drückt Return. Also „c“ „5“ „Return“. Und schon kann man den gewünschten Rahmen ziehen.

Option 1 und 2 braucht man wenn man die aufgeklappten Menüs fotografieren will. „c“ „2“ „Return“. Dann das Menü aufklappen, wie man es braucht. Und mit „Strg“+“F11“ bekommt man das Foto.

z.B sowas:

Das Tastaturkürzel kann natürlich links oben verändert werden. Man kann auch einen Timer ablaufen lassen und Irfanview macht dann automatisch das Foto.

Im unteren Rand des Fotografieren Fenster kann man einstellen, was nach dem Fotografieren passieren soll. Screenshot automatisch ausdrucken oder vielleicht automatisch speichern, wenn man eine Reihe an Screenshots erstellen will.

Doch wie habe ich den genau das Bild des Menüs mit dem Zeiger gemacht? Zuerst fotografiert man den „aktuellen Monitor“ Option 2. D.h. „c“ „2“ „Return“. Dann das Menü aufklappen und den Mauszeiger an die gewünschte Position und „Strg“+“F11“. Damit bekommt man jedoch den gesamten Bildschirm ins Irfanview Fenster.

In diesem Fester zieht man einfach einen Kasten mit der linken Maustaste

und klickt „Strg“+“y“. Das ist die Freistellen Funktion. Und schon hat man nur den Ausschnitt.

Und sollte man sich verschnitten haben. Mit Rückgängig („Strg“+“z“) hat man wieder das gesamte Bild.

Kommen wir jedoch zu einer etwas umständlicheren Funktion. Im Snipping Tool kann man einfach den gelben Marker anklicken und eine besondere Stelle „freihändig“ hervorheben. Das gibt es im Ifranview nicht. Man muss einen Kasten über den Bereich ziehen, denn man markieren will. Dieser ist natürlich komplett verschiebbar, einfach auf die Ränder klicken und „schieben“.

Shift“+“g“ und das „Farbe ändern“ Menu geht auf.

Wenn man jetzt den Regler für die Farbe Blau ganz nach rechts schiebt, entsteht der gelbe Marker Effekt, den man im Vorschaufenster oben rechts sieht.

Der Vorteil wiederum ist, man kann auch die anderen Regler verschieben und auch einen roten, grünen oder orangen Marker simulieren. Auch kann man z.B. Bereiche mit dem „Kontrast“ und „Gamma-Korrektur“ ausgrauen. Wenn Ihr aufgepaßt habt, dann sieht ihr den Effekt in einem vorhergehenden Screenshot. Jedoch leider immer nur rechteckig.

 

Und malen kann man auch. Mit „F12“ erscheint die Toolbox die rechts abgebildet ist.

Und mit diese kann wiederum alles machen, was ein Bildbearbeitungstool beherrscht. Pinsel, Füllen mit dem Farbeimer, Linen und Rechtecke zeichnen und sogar einen Clone Stempel hat man. Einfach mal mit den Funktionen rumspielen.

 

 

Das war’s. Wenn Ihr noch Fragen habt, einfach ein Kommentar hinterlassen oder per Twitter.

Möge die Macht mit euch sein.

 

Kommentare sind geschlossen.