Kategorie: Software

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")