Von Stack Overflow zu ChatGPT

Ich habe zwar früh mit dem Programmieren ange­fan­gen und kann auf eine über 40 jäh­ri­ge Historie zurück­bli­cken, bin aber nie über die rudi­men­tä­ren Grundlagen hin­aus­ge­kom­men. Die Liste der „erlern­ten” Programmiersprachen ist lang und soll zei­gen, dass ein biß­chen Knowhow bei mir schon vor­han­den sein soll­te:

  • Programmierbarer Taschenrechner (TI58/59)
  • Basic (Kaufhaus Spass mit „goto 10”, Apple II, Pet 2000, Commodore 64)
  • Turbo Pascal (Schneider Joyce, MS/DOS)
  • ELAN (Programmiermethodik I+II an der TU Berlin)
  • LISP (Einführungskurs)
  • Aegis Shell Scripte für ein Projektteam (Apollo Domain Workstation)
  • HyperTalk (Apple Hypercard)
  • AppleScript
  • ABAP (Grundkonzepte)
  • bash/tsh/zsh Scripte (Mac, Linux)
  • Python
  • Apple Shortcuts

Ich wür­de mich auf­grund mei­ner Herangehensweise als Stack Overflow-Programmierer bezeich­nen. Ich weiß zwar in etwa was und wie ich ein Problem lösen möch­te, aber mir feh­len ein­zel­ne Bausteine wie die grund­le­gen­de Syntax einer Programmiersprache oder eines Linux-Befehls (Parameterübergabe, Schleifensyntax, Stringbehandlung etc.), alles Dinge, bei denen ich über eine Google-Suche meist auf Stack Overflow oder ähn­li­chen Seiten lan­de und ich dann die ange­bo­te­nen (Teil-)Lösungen an mein Problem anpas­se und kom­bi­nie­re. Am Ende kommt dann meist etwas Lauffähiges her­aus, das auch mein Problem auch löst.

Da ich mei­ne Lösungen meist nicht kom­men­tie­re oder doku­men­tie­re, muss ich bei jeder ähn­li­chen Problem den gan­zen Prozess erneut durch­lau­fen. Warum habe ich das so und nicht anders gemacht, wel­che Quellen habe ich benutzt? Das gilt für Programmierprobleme, aber auch für die Einrichtung von Tools wie z.B. Paperless auf mei­nem Synology NAS oder ioBroker, Influx DB, Grafana zum Monitoren mei­ner Heizung auf dem Raspberry.

Seit Weihnachten 2021 habe ich mei­ne Herangehensweise an die moder­nen Zeiten ange­passt und begin­ne anstatt zu goo­geln ChatGPT zu fra­gen, wel­ches mir die Web-Inhalte auf­be­rei­tet und leich­ter zugäng­lich macht. Das klappt erstaun­li­cher­wei­se sehr gut, da mei­ne Probleme meist klein sind oder ich sie gut in Teilprobleme zer­le­gen kann, die dann ein­zeln abge­ar­bei­tet wer­den kön­nen. Das ich am Ende wie­der von Stack Overflow/GitHub und ande­ren klas­si­schen Quellen pro­fi­tie­re ist mir schon klar. Das der Lerneffekt viel­leicht noch klei­ner ist als beim Copy and Paste Programmieren auch. Das am Ende mit die­sen KI-Systemen auch ein rie­si­ge selbst­re­fe­ren­zie­ren­de Monster ent­ste­hen eben­so. Aber im Moment ist es span­nend zu eru­ie­ren was mit der kos­ten­lo­sen ChatGPT 3.5 Variante schon alles mög­lich ist, wo es bei Problemen hel­fen kann.

Ein klei­nes Beispiel:

Ich habe ein Problem mit mei­nem Mesh Orbi Router, der als Access Point hin­ter mei­ner Fritz!Box ein­ge­setzt wird. Die ange­mel­de­ten Geräte ver­lie­ren von Zeit zu Zeit die Verbindung zum Internet. Um etwas genau­er zu ver­ste­hen, was da vor sich geht, inter­es­siert mich wann der AP Probleme macht, ob er sich wie­der fängt und wenn ja, wie lan­ge so eine Phase dau­ert. Um das zu doku­men­tie­ren woll­te ich einen cron-Eintrag auf einem Raspberry im Netz anle­gen, der alle x‑Minuten den Router anpingt und bei einem erfolg­lo­sen Ping einen Zeitstamp in eine log-Datei schreibt.

Nachdem ich ChatGPT gesagt habe, das ChatGPT ein Linux Programmierer sei und Shell-Scripte für Cron schreibt, habe ich die fol­gen­de Aufgabe ein­ge­ge­ben:

„you want to ping ano­ther com­pu­ter every minu­te with excact­ly one ping. If that ping fai­led you want to wri­te this with a time stamp into a log file. How will that line look like for cron­tab”

(in mei­nem schlech­ten Englisch und mit allen Rechtschreibfehlern)

Antwort:

* * * * * ping -c 1 -W 1 <IP_address> >/dev/null || echo "$(date) - Ping failed" >> /path/to/logfile.log

Aber nicht nur das, son­dern es gab auch eine Erklärung dazu:

Here’s what each part of the cron job line does:

  • * * * * *: This repres­ents the cron sche­du­le. It means the job will run every minu­te.
  • ping -c 1 -W 1 <IP_address>: This is the com­mand to ping the spe­ci­fied IP address. The -c 1 flag sets the num­ber of pings to 1, and the -W 1 flag sets the time­out for each ping to 1 second.
  • >/dev/null: This part redi­rects the out­put of the ping com­mand to /dev/null, dis­car­ding the nor­mal out­put.
  • ||: This is the logi­cal OR ope­ra­tor, which means the next com­mand will run only if the pre­ce­ding com­mand fails (returns a non-zero exit sta­tus).
  • echo "$(date) - Ping failed" >> /path/to/logfile.log: If the ping fails, this com­mand will append a line to the spe­ci­fied log file (/path/to/logfile.log) with a timestamp (gene­ra­ted by date) and the mes­sa­ge „Ping fai­led”. You should replace /path/to/logfile.log with the actu­al path to your log file.

Make sure to replace <IP_address> with the IP address of the com­pu­ter you want to ping. Also, ensu­re that the user run­ning the cron job has per­mis­si­on to wri­te to the spe­ci­fied log file.

Save the cron­tab file after adding this line, and the cron dae­mon will exe­cu­te the ping com­mand every minu­te and log the results if it fails.

Dies ist ein ein­fa­ches Beispiel, aber es zeigt, wozu ChatGPT in der Lage ist: Es hilft Leuten wie mir, die im Großen und Ganzen wis­sen, was sie brau­chen, um ein Problem zu lösen. ChatGPT sam­melt die rich­ti­gen Dinge zusam­men, kor­ri­giert die Lösungen und kann sogar die Vorgehensweise erklä­ren. Ich muss aber die Lösung immer noch selbst beur­tei­len.

Nun bin ich im Bilde, wann es pas­siert und wie lan­ge die­se Ausfälle dau­ern. Warum sie gesche­hen, weiß ich aller­dings noch nicht. Hinweise ger­ne in die Kommentare. Wer genaue­res über die­ses klei­ne Projekt wis­sen will kann hier kli­cken.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert