ICS-Kalenderdaten bereinigen //Update

Update: Leider gab es in der ersten Version des Scripts noch einen Fehler, der dazu führen konnte, dass bestimmte Arten (UNTIL, COUNT) von Serienterminen nicht übernommen werden, obwohl sie erst nach dem Löschtermin enden. Sollten Sie das Script bereits installiert haben, laden Sie es bitte noch einmal herunter. Wir bedauern die Unannehmlichkeiten.

Benutzen Sie auch das ICS-Format für Ihre Kalenderdaten? Dann sind Sie vielleicht schon einmal auf folgendes Problem gestoßen: Nehmen wir an, Sie haben im Jahr 2010 begonnen, Ihren Kalender im ICS-Format zu führen.

Über die Jahre sammeln sich viele Termine an, und nach einer Zeit könnten die natürlich weg. Aber Sie möchten die alten Termine nicht löschen, weil darin auch wiederkehrende Termine enthalten sind. Bestes Beispiel sind Geburtstage. Sie haben den Geburtstag eines Freundes im Jahr 2010 erfasst und möchten jährlich daran erinnert werden. Wenn Sie nun aber alle Termine vor z.B. 01.01.2023 löschen würden, dann wäre auch die Erinnerung an den Geburtstag des Freundes weg, weil dieser Termin vor 2023 angelegt wurde.

Und deshalb löschen Sie natürlich nicht, und die ICS-Datei wächst und wächst und schwillt mit der Zeit so weit an, dass es ein Performance-Problem ergibt.

„ICS-Kalenderdaten bereinigen //Update“ weiterlesen

Am Boden des Glases

„Der erste Schluck aus dem Glas der Wissenschaft macht Sie zu einem Atheisten, aber Gott wartet auf Sie am Boden des Glases“ (Werner Heisenberg)

Programmieren mit KI-Unterstützung

https://www.golem.de/news/ki-in-entwicklerumgebungen-spurkontrolle-fuer-programmierer-2304-173206.html

Die ersten Nachrichten zu KI in der Softwareentwicklung waren regelrechte Hiobsbotschaften – über Systeme, die Programme automatisch vervollständigen und Programmierer damit überflüssig machen sollten. Schnell wurde jedoch klar: Es geht eigentlich nicht darum, wie schnell und wie viel Code eine KI schreibt. Es geht darum, ob Automatisierung es uns erlaubt, uns auf Wichtigeres zu konzentrieren … Aktuell sind wir in der Phase, in der wir ausloten, wie KI unser Leben als Programmierer leichter machen kann.

Sehr interessanter Artikel mit Praxisbeispielen, wie neuartige KI-Systeme Programmierer bei der Arbeit unterstützen können. Letztlich ist es meiner Ansicht so, wenn Routineaufgaben wegrationalisiert werden können, wird das der Qualität des Produkts zugutekommen, zum Einen, weil gerade bei den langweiligen Tätigkeiten am leichtesten Fehler passieren, zum Anderen, weil mehr Zeit für die qualitativen Herausforderungen bleibt.

Einer für alle


Quelle Bild: DALL-E „chameleon caspar david friedrich“

Ein sehr interessanter Kommentar eines Lesers beschäftigt sich mit der Frage, ob ChatGPT auch Code von einer Sprache / einem System in ein(e) andere(s) transformieren kann. Das haben wir natürlich gleich einmal ausprobiert und durch ChatGPT den Code unseres Gesundheitstagesbuches von Bash (Linux) nach Powershell (Windows) übersetzen lassen:

„Here’s the PowerShell equivalent of the Bash script you posted:“

$ErrorActionPreference = "Stop"

$editor = "subl"

$defaults = @(
   "Was habe ich heute gegessen?"
   "Gesundheitlicher Zustand?"
   "Welche Aktivitäten durchgeführt?"
   "Für was bin ich heute dankbar?"
)

$homedir = Split-Path -Parent $MyInvocation.MyCommand.Definition
$allfnam = Join-Path $homedir "gesundheitstagebuch.txt"
$tagfnam = New-TemporaryFile
$tmpfnam = New-TemporaryFile
$curdate = Get-Date -Format "dddd dd.MM.yyyy"

##############################################################
## Dieser Block muss an den gewählten Editor angepasst sein ##
##############################################################
if (Get-Process $editor -ErrorAction SilentlyContinue | Where-Object {$_.MainModule.FileName -eq $allfnam}) {
Start-Process -FilePath wmctrl -ArgumentList "-a","$(Split-Path -Leaf $allfnam) - Sublime Text"
   exit 0
}
##############################################################

if ((Get-Content $allfnam -TotalCount 1 -ErrorAction SilentlyContinue) -ne $curdate) {
   "$curdate`n" | Out-File -FilePath $tagfnam -Encoding utf8
   foreach ($entry in $defaults) {
      "$entry ** `n`n" | Out-File -FilePath $tagfnam -Encoding utf8 -Append
   } 
   '=%.0s' * 79 | Out-File -FilePath $tagfnam -Encoding utf8 -Append; "`n" | Out-File -FilePath $tagfnam -Encoding utf8 -Append
   if (!(Test-Path $allfnam)) {
      Copy-Item -Path $tagfnam -Destination $allfnam
   } else {
      Get-Content $tagfnam,$allfnam | Set-Content -Path $tmpfnam -Encoding utf8
      Move-Item -Path $tmpfnam -Destination $allfnam -Force
   }
   Remove-Item $tagfnam
}

Start-Process -FilePath $editor -ArgumentList $allfnam

„Note that some of the functionality in the original Bash script (such as the wmctrl command) may not be available in PowerShell and would need to be replaced with alternative commands or methods.“

Leider reichen meine Powershell-Kenntnisse nicht so weit, dass ich die Qualität des Codes beurteilen könnte, aber das ist mindestens beim Lernen einer Programmiersprache eine sehr interessante Möglichkeit: Man formuliert die Befehle in einer Sprache, die man kennt, und lässt sie in die zu lernende Sprache übersetzen.

Tja. Es wäre schon nett, wenn Menschen so etwas auch könnten. Man lernt eine Programmiersprache und kann gleich alle anderen auch…

Für Firmengründer


Quelle Bild: DALL-E „3D-rendered image of an artist at work“

https://turbologo.com/de

Der Logo Maker von Turbologo hilft Ihnen, den richtigen Logostil, die richtigen Schriftarten, Symbole und Farbkombinationen für Ihr persönliches oder geschäftliches Logo zu finden. Unser einfach zu bedienendes Design-Tool hilft Ihnen bei der Auswahl der Vorlage, die Ihnen wirklich gefällt. Mit hunderten von Designoptionen können Sie das Beste für Ihr Unternehmen finden. Das alles dauert nur ein paar Klicks und bis zu zehn Minuten.

KI schreitet immer weiter fort, und erobert immer mehr Bereiche, von denen man dachte, sie seien rein menschliche Domänen. Wie Sie diesem hochinteressanten Podcast entnehmen können, begleitet uns auch KI schon weit länger, als die meisten wissen, und die Folgen für unsere Gesellschaft sind schon längst außerordentlich tiefgreifend.

Telefonbetrüger-Warnliste

https://www.giga.de/artikel/giga-warnliste-wer-steckt-hinter-dieser-telefonnummer/

An dieser Stelle warnen wir euch regelmäßig vor gefährlichen Telefonnummern, hinter denen Kostenfallen und Trickbetrüger stehen.

GIGA mit einem sehr interessanten Service, der eine Liste von Rufnummern bietet, für die es bekannt ist, dass Betrugsmaschen darüber ausgeführt werden. Die Tricks dieser Leute werden immer mieser, sagen Sie bloß nicht „Ja“, falls Sie so ein Telefonat versehentlich angenommen hätten. GIGA hat im verlinkten Artikel übrigens auch Tipps, wie man die Nummern generell sperren kann.

5 kleine Helferlein für Linux

1) Verzeichnis erstellen und hineinwechseln

mkdir -p {DirName} && cd $_

Der Parameter „-p“ für mkdir erstellt fehlende Verzeichnisse oberhalb von {DirName} und gibt keinen Fehler aus, falls das Verzeichnis schon existiert. Der Parameter „$_“ für cd liefert das Argument des zuvor benutzten Bash-Befehls, deshalb erstellt diese Sequenz ein Verzeichnis (incl. etwaigen fehlenden Verzeichnissen darüber) und wechselt anschließend hinein. Übrigens, wenn Sie sich das als Alias definieren wollen, dann müssen Sie etwas tricksen, Aliase nehmen keine Parameter. Definieren Sie sich also eine Funktion (geht auch in .bash_aliases):

xcd() { mkdir -p "$1" && cd "$_"; }

2) Sudo in Script erzwingen

Ein Script benötigt sudo, aber Sie möchten es auch ohne sudo aufrufen können, es soll sich dann selbständig „sudofizieren“. Setzen Sie folgenden Code zu Beginn des Scripts:

if [ $(id -u) -ne 0 ]; then
        sudo "$0 $*"
        exit $?
fi

Nur der Superuser hat ID 0, für jeden anderen Benutzer ruft das Script sich wieder selbst auf mit allen Parametern und sudo.

3) Search und Replace in Textdateien mit überlangen Zeilen

Passiert gerne beim Export von Datenbanken: manche Zeilen sind zigtausende Zeichen lang. Wenn man das mit sed bearbeiten will, geht es schief, weil sed eine Begrenzung für die maximal zulässige Anzahl von Zeichen in einer Zeile hat. Benutzen Sie in solchen Fällen perl:

perl -pi -e 's/{string-in}/{string-out}/g' {file}

4) Nur die IP einer URL ausgeben

Oft benötigt man nur die IP einer URL, aber dig erzählt einen ganzen Roman. Ein nettes kleines Alias (wiederum als Funktion) ist deshalb:

xdig() { dig +noall +answer "$1"|awk '{print $5}'; }

5) Prozess suchen, aber Suche dafür ausfiltern

Finden Sie es auch lästig, wenn Sie mit ps einen Prozess in der Prozessliste suchen, und dafür das Ergebnis von ps mit grep filtern, dann ist immer grep im Ergebnis mit dabei? Auch hierzu ein hilfreiches Funktions-Alias:

xps() { ps ax |grep -i "$1"|grep -v grep; }

Ja, das geht auch mit „ps -C“, aber dann ist es nicht mehr der BSD-Parameter-Standard, findet weniger und außerdem, warum auch immer, funktioniert „-C“ nicht mit „-e“ (alle Prozesse im UNIX-Parameter-Standard).

//Update: Unser Linux-Guru weist mich darauf hin, dass die gewünschte Funktionalität mittels pgrep eleganter zu erzielen ist, nämlich mit pgrep -aif „$1“. Die Funktionsdefinition dafür lautet:

xps() { pgrep -aif "$1"; }

Übrigens, wenn Sie die Datei .bash_aliases editieren, müssen Sie sich danach nicht neu einloggen, um die geänderten Aliase wirksam zu machen. Führen Sie stattdessen „source .bashrc“ aus, das lädt die Umgebung im laufenden Terminal neu.

Freunde fürs Leben

Hunde kommen in unser Leben, um zu bleiben. Sie gehen nicht fort, wenn es schwierig wird, und auch, wenn der erste Rausch verflogen ist, sehen sie uns noch immer mit genau diesem Ausdruck in den Augen an. Das tun sie bis zu ihrem letzten Atemzug.

Vielleicht, weil sie uns von Anfang an als das sehen, was wir wirklich sind: fehlerhafte, unvollkommene Menschen. Menschen, die sie sich dennoch genau so ausgesucht haben.

Ein Hund entscheidet sich einmal für den Rest seines Lebens. Er fragt sich nicht, ob er wirklich mit uns alt werden möchte. Er tut es einfach. Seine Liebe, wenn wir sie erst verdient haben, ist absolut.

Pablo Picasso

Für die Ritter der Linux-Kommandozeile

https://linuxhandbook.com/run-alias-as-sudo/

An alias helps you to run lengthy custom commands easily. You can make alias permanent by adding it to your .bashrc or the configuration file of whichever shell you are running in Linux. The problem arises when you try to run the alias with sudo. You’ll see an error like this –
[ sudo: my_alias: command not found ]

Mit diesem hübschen kleinen Trick können Sie auch alle Alias-Definitionen Ihrer Shell mit sudo ausführen. Haben Sie sich noch nie darüber geärgert, dass [ sudo ll ] nur einen Fehler wirft? Man benötigt ein Alias für sudo mit einem Blank am Ende [ alias sudo=’sudo ’ ] dann wird auch der nachfolgende Befehl aufgelöst.

Alternativer Twitter-Zugang

https://www.inputmag.com/tech/nitter-is-a-new-front-end-for-twitter-that-helps-hide-you-from-advertisers

Fortunately, there are alternative ways to view Twitter if you’d like to avoid your every cursor movement being monitored. One of them, called Nitter, redirects Twitter web links to an alternative, re-skinned version of the social network that yanks out all the code necessary to track your behavior.

Sie kennen das vermutlich, wenn Sie auf Twitter nicht eingeloggt sind, können Sie es nur sehr eingeschränkt nutzen. Und ohne Javascript geht sowieso nichts. Via Nitter lässt sich Twitter aber „barrierefrei“ nutzen, und bisher ist es Twitter nicht gelungen, diesen Zugang zu blockieren, obwohl Twitter alternative Clients verbietet. Übrigens ist Nitter auch viel schneller als der Zugriff via Twitter, weil die ganze Überwachungsmaschinerie ausgeschaltet ist.

Die Verwendung ist sehr einfach, ersetzen Sie in der URL „twitter.com“ durch „nitter.net“. Für z.B. den Twitter-Account der Cephei also https://nitter.net/CepheiAG. Kleiner Wermutstropfen: Während die Desktop-Version sehr gut funktioniert, sieht es für Mobiles eher mau aus, weil es bisher keine nativen Apps gibt.

Stress einfach wegatmen

https://www.youtube.com/watch?v=BckqffhrF1M

Wim Hof ist „The Iceman“. Er ist Extremsportler und hält eine Vielzahl von Weltrekorden, die meisten davon für seine ungewöhnliche Fähigkeit, extremer Kälte zu widerstehen. Er klettert barfuß und in Shorts auf hohe Berge, badet stundenlang in Eiswasser und schwimmt und taucht weite Strecken in arktischen Gewässern. Er läuft aber auch Marathons in der Wüste nur in kurzen Hosen und ohne Wasser.

Weil all dies bestens dokumentiert ist, und diese Dinge eigentlich nicht zu überleben sind, hat Wim Hof sogar die Aufmerksamkeit der Wissenschaft auf sich gezogen. Er wurde oft im Labor untersucht und vermessen, zum Beispiel während er stundenlang in Eiswasser bis zum Hals saß und gleichzeitig mit Gift und gefährlichen Bakterien traktiert wurde, aber all das zeigte keine Wirkung auf seinen Organismus und die Forscher haben keine Erklärung dafür.

Wim Hof sagt, dass es seine spezielle Atemtechnik sei, die ihn so unempfindlich gegen äußere Einflüsse macht. Und er empfiehlt jedem tägliche kalte Duschen.

Auch wenn Sie mit kalten Duschen nichts anfangen können, vielleicht ist aber die Atemtechnik etwas für Sie? Sie finden sie oben im ersten Link dieses Beitrags. Aus eigener Erfahrung kann ich bestätigen, das ist der beste Stressabbau den ich kenne, und gerade Stress hat man ja als Programmierer reichlich, wie wir alle wissen.

Eine kompakte Dokumentation über Wim Hof finden Sie hier, und Hintergründe zu seinem erstaunlichen und teilweise auch tragischen Lebenslauf erzählt er in diesem Video. Für mehr Informationen können Sie auch seinen Youtube-Kanal und seine Website besuchen.

Festplatte aufräumen

Wenn Ihre Festplatte vollläuft, und Sie keine neue kaufen können, z.B. weil China offenbar entschlossen ist, den Welthandel lahmzulegen, sind Sie unter Linux fein raus. Dort können Sie mit Bordmitteln die Belegung von Directory-Zweigen anzeigen lassen, damit Sie wissen, wo es sich nach unnützen Datenleichen zu suchen lohnt.

#!/bin/bash

#---------------------------------
#Script lds = list directory sizes
#---------------------------------

TGT="."
if [ "$1" != "" ]; then
    if [ ! -d "$1" ]; then
        echo "Not a directory: $1"
        exit 1
    else
        TGT="$1"
    fi
fi
DIR="$(realpath $TGT)"

find $DIR -type d -exec du -hsS {} \; |sort -h

Dieses Script listet ein Verzeichnis und dessen Unterverzeichnisse mit Größenangabe auf, aufsteigend nach Größe sortiert. Beispiel:

lds Backup

4,0K /home/user/Backup/mdaten
8,0K /home/user/Backup/hibernate
32K  /home/user/Backup/unison
64K  /home/user/Backup/hChase
192K /home/user/Backup/media-daten
1,8M /home/user/Backup/media-exec
16M  /home/user/Backup
513M /home/user/Backup/hChase/old
16G  /home/user/Backup/server-bkup

Schutzschild gegen Zeitfresser

https://www.giga.de/news/nur-schrott-auf-netflix-mit-diesem-geheimtipp-findest-du-das-gute-zeug/

»Da hat man schon mit Netflix, Amazon Prime Video, Disney+ und Co. unzählige Streaming-Dienste abonniert und findet nach einer gewissen Zeit nur noch Schrott. Was also tun, wie das gute Zeug finden?«

Mich wundert es schon lange, warum die Streaming-Anbieter alles daran setzen, möglichst wenig über ihren Content zu sagen. Was genau bringt es, wenn eine Vielzahl von Nutzern nach ein paar Minuten enttäuscht abbricht?

Natürlich könnte man immer erstmal im Internet suchen, bevor man den Film oder die Serie ansieht. Aber das kann recht mühsam werden. Eine bessere Alternative ist das in obigem Artikel bei Giga beschriebene Portal JustWatch, das für sehr viele Streaming-Anbieter eine komfortable Möglichkeit bietet, den Film oder die Serie vor dem Anschauen auf Qualität und Inhalt näher zu untersuchen. Auch bieten verschiedene Filter die Möglichkeit, Perlen im Angebot zu entdecken, auf die man sonst nur schwer treffen würde.

Ein Beispiel: Nehmen wir an, Sie haben ein Netflix und ein Amazon Prime Abo. Sie wählen diese beiden Anbieter aus. Ihnen steht der Sinn nach einem Film, also klicken Sie „Filme“. Der Film soll Science-Fiction sein, das selektiert man unter „Genres“. Außerdem möchten Sie einen wirklich guten Film sehen, und deshalb schieben Sie den Regler bei „Bewertung“ auf 8 (das ist die IMDB-Bewertung, ab 8 sind die von der Kritik höchstgelobten Filme).

Und wenn Sie dann in JustWatch etwas gefunden haben, können Sie direkt zum gewünschten Streaming-Anbieter wechseln und den Inhalt dort abspielen. JustWatch gibt es für Web, iOS und Android.

Müßiggang ist aller Laster Anfang? In der Ruhe liegt die Kraft!

https://www.infosperber.ch/wirtschaft/der-kult-der-optimalen-betriebsamkeit/

Maria Montessori nannte es den „Flow“ bzw. die „Polarisation der Aufmerksamkeit“, und es ist das zentrale Ziel der Montessori-Pädagogik. Nun gibt es jedoch eine Untersuchung zu einem regelrechten Kult, der sich darum gebildet hat, und das Problem dabei ist nicht der „Flow“, der ist sehr hilfreich und förderlich, sondern dass er leicht in eine exzessive (und schädliche) Betriebsamkeit umkippen kann. Denn der „Flow“ hat quasi Suchtpotential, ist die Erklärung der Forscher an der ESSEC Business School in Frankreich.

Der Schlüssel, es mit dem „Flow“ nicht zu übertreiben, wird wohl darin liegen, den dritten Aufmerksamkeitsmodus nicht zu vernachlässigen. Dieser Modus ist die ruhige Zeit und bildet einen, meines Erachtens unbedingt notwendigen, Gegenpol zum „Flow“. Lesen Sie dazu bitte auch diesen Beitrag.