Kategorie: Software

EPSON Dokumentenscanner unter Linux

Es wird von EPSON nicht offensiv beworben (so jedenfalls mein Eindruck), aber die Dokumentenscanner lassen sich auch unter Linux problemlos verwenden. Mein Testkandidat ist der Scanner DS-310. Der Dokumentation zufolge müssten auch andere Scanner funktionieren.

Zunächst muss die Software heruntergeladen und installiert werden. Sie ist auf der Webseite von Epson nicht ohne weiteres zu finden, aber schließlich landet man auf http://download.ebz.epson.net/dsc/search/01/search/

Dort lässt sich die Software für die gängigen Linux-Derivate laden, auch eine Installationsanleitung fehlt nicht.

Nach der Installation gibt es ein neues Programm auf dem Rechner: epsonscan2

Dieses kann man über den normalen Start für grafische Programm aufrufen, aber auch über die Kommandozeile.

Es fällt auf, dass im Gegensatz zur Version für MacOS die Dateien nicht mit einem Zeitstempel versehen werden können (immerhin werden sie durchnummeriert).

Auch findet keine OCR der erzeugten pdf-Dateien statt, es wird also nicht versucht, den Text zu erkennen.

Beides lässt sich mit Linux-Mitteln natürlich nachrüsten.

Aufruf über die Kommandozeile

Die Dokumentation ist nicht ganz eindeutig, aber mit diesen Schritten kann über im Terminal gescanned werden.

  1. epsonscan2 --list
    zeigt den angeschlossenen Scanner, um zu sehen, ob er erkannt wird.
  2. epsonscan2 --create
    erzeugt im aktuellen Verzeichnis eine Konfigurationsdatei namens „DefaultSettings.SF2“. Diese Datei ist im JSON-Format und kann also mit dem Texteditor bearbeitet werden. Einfacher ist
  3. epsonscan2 --edit ./DefaultSettings.SF2
    öffnet das Einstellungs-Fenster (siehe oben), aber mit dem Button „Save“, um Änderungen in die Konfigurationsdatei zu schreiben.
  4. epsonscan2 --scan ./DefaultSettings.SF2
    führt dann den eigentlichen Scan durch

Die Konfigurationsdatei kann natürlich umbenannt werden. So lassen sich beispielsweise zwei Dateien für ein- und doppelseitige Scans einrichten.

Wer die erzeugten pdf-Dateien mit einem Zeitstempel versehen will kann die Datei umbenennen mit
mv img.pdf img$(date +%Y-%m-%dT%H:%M:%S).pdf
Die Datei erhält ein Datum nach ISO 8601, z.B. „img2024-10-04T21:19:08.pdf“.
Die Umbennenung kann dann leicht zusammen mit dem Scan-Befehl in ein kleines Script gepackt werden.

Running a Typescript program in IntelliJ

The following is an alternative way to run a Typescript program in IntelliJ. In my eyes this is easier than described here: https://www.jetbrains.com/help/idea/running-and-debugging-typescript.html#ws_ts_run_directly_launch

What to install

Install typescript (node.js also required, of course):

sudo npm install -g typescript
sudo npm install -g node-ts

whereis ts-node

How to setup IntelliJ

Now edit a configuration in IntelliJ like this:

If we now take a very simple Typescript-program, it can be easily run:

And, before you ask, also debugging works with this setup.

Das HHKB am iPad Air 5

Das iPad Air 5 hat eine USB-C Schnittstelle, genauso wie mein Happy Hacking Keyboard Classic. Da liegt es nahe, beide Geräte mal mit einem USB-C Kabel zu verbinden und diese Kombination zu testen.

Grundsätzlich funktionieren die beiden Geräte zusammen, die Tasten produzieren die erwartete Ausgabe auf dem iPad.
Übrigens gilt das nicht für jede Tastatur, ein Gegenbeispiel ist die „Ducky One 2 SF“.

Dabei habe ich folgende Einstellungen verwendet: An der HHKB haben die sechs Dip-Schalter die Positionen OFF-ON-ON-ON-OFF-OFF. Sie ist also im Mac-Modus.
Auf der iPad-Seite habe ich in den Einstellungen bei den ’Tastaturen‘ unter ‚Hardwaretastatur‘ die „US International PC“ ausgewählt, und die Autokorrektur angeschaltet.

  • Alle Zeichen und Sonderzeichen kommen wie erwartet, auch { } [ ] @ \ ~
  • Umlaute lassen sich durch zwei Tastendrücke produzieren: Alt-u plus Taste oder “plus Taste. Also z.B. Alt-u und u für ein ü.
    Das „scharfe s“ ß braucht nur einen Tastendruck: Alt-s
  • Pfeiltasten funktionieren, auch mit Shift, um Text zu markieren. ‘Home‘ und ‘End‘ allerdings nicht.
  • Cut, Copy und Paste funktionieren mit der rechten Raute-Taste ◊ , die auch als Apple-Command beschriftet ist mit dem Schleifenquadrat ⌘. Mit anderen Positionen der Dip-Schalter wird wohl auch die linke Raute-Taste funktionieren.
  • ⌘-W schließt Fenster. ⌘-A markiert alles. Und genauso klappt es mit den anderen Kombinationen auf https://support.apple.com/de-de/HT211096 mit ⌘ als ‚Command‘, die auf Deutsch ’Befehlstaste‘ heißt.
  • Die Lautstärke-Tasten haben die erwartete Funktion

Insgesamt: Mit dieser Kombination aus iPad und HHKB lässt sich arbeiten, zumindest nach einer gewissen Eingewöhnungszeit.

[Dieser Artikel wurde natürlich auf dem iPad mit der HHKB geschrieben.]

In Gradle: Python liest Excel-Sheet

Die Aufgabe war: Ein Python-Script soll Daten aus einer Excel-Tabelle, also einer xlsx-Datei lesen. Dieses Python-Script wird als Task in Gradle aufgerufen.

Python und pip (pip ist sowas wie der npm für Python) kann als installiert vorausgesetzt werden, spezielle Libraries aber nicht.

Verwendete Tools

Alles kein Problem, wenn man die richtigen Werkzeuge einsetzt:

  • Um die richtigen Module zu laden und Python zu starten, lässt sich in gradle das gradle-use-python-plugin verwenden.
  • Unter den zahlreichen Bibliotheken, die Excel-Sheets in Python lesen, habe ich mich für openpyxl entschieden.

Die build.gradle

Zunächst muss gradle natürlich das plugin kennen:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'ru.vyarus:gradle-use-python-plugin:2.3.0'
    }
}
apply plugin: 'ru.vyarus.use-python'

Dann muss mit Hilfe von pip das openpyxl geladen werden:

python {
    pip 'openpyxl:3.0.10'
}

Und schließlich muss das Python-script in der richtigen Weise aufgerufen werden, beispielsweise so:

task callSomePythonScript(type: PythonTask) {
    group 'other'
    description 'call a python script'

    File script = file "scripts/doWhatHasToBeDone.py"
    command = [script, "argument1", "argument2" ]
}

Das python-Script

Jetzt kann in python problemlos auf die Daten im xslx-File zugriffen werden. Erst der Import:

import openpyxl

und dann der Zugriff (in diesem Beispiel ist nur die dritte Spalte relevant):

def read_excel_file(excel_file):
    # Check if file exists
    if excel_file is not None and exists(excel_file):
        workbook = openpyxl.load_workbook(excel_file)
        worksheet = workbook.active

        # Iterate the loop to read the cell values
        for row in worksheet.iter_rows():
            doc = row[2].value
            if doc is not None:
                print(doc)
    else:
        print("File not found")