WEBVTT

00:00:00.017 --> 00:00:02.917
Wir haben uns bei Midway dann tatsächlich auch für Oakleaf entschieden,

00:00:03.157 --> 00:00:07.217
genau weil es halt TypeScript ist und wir dann letztendlich gesagt haben,

00:00:07.297 --> 00:00:12.037
okay, die CLI ist für uns halt quasi auch eine Variante von Frontend.

00:00:13.997 --> 00:00:18.437
Anscheinend kann ich mich ja auch authentifizieren. Oft so auch bei Git-Tools.

00:00:18.537 --> 00:00:21.657
Wie kompliziert ist es denn, so einen Login zu machen?

00:00:21.937 --> 00:00:25.497
Business as usual und macht man es freundlich oder ist es furchtbar kompliziert?

00:00:26.217 --> 00:00:32.957
So, und wenn dir das jetzt alles nicht ausreicht, obwohl das ja schon echt mega

00:00:32.957 --> 00:00:37.977
gut klingt, dann hast du noch einen Tipp, wie man komplett eskalieren kann, korrekt?

00:00:38.197 --> 00:00:40.617
Wie man komplett? Ich glaube, ich weiß, worauf du hinaus möchtest.

00:00:40.857 --> 00:00:43.437
Richtig schön nerdig, total unnütz, aber ...

00:00:43.600 --> 00:01:08.560
Music.

00:00:55.497 --> 00:01:11.557
Revision 604.

00:01:25.497 --> 00:01:28.417
Leite eure Software-Abos und das Honorar unserer Audio-Producerin.

00:01:28.697 --> 00:01:30.217
Wenn ihr euch auch beteiligen wollt,

00:01:30.337 --> 00:01:33.457
könnt ihr das unter patreon.com slash workingcraft sehr gerne machen.

00:01:33.697 --> 00:01:37.017
Wir danken euch tausendfach für die Unterstützung und fürs weitere Zuhören.

00:01:41.857 --> 00:01:45.997
Wir sind heute zu dritt. Aus dem Team hätten wir dabei die Vanessa.

00:01:46.997 --> 00:01:51.097
Servus. Ich bin der Shep. Und das bedeutet, wir haben wieder einen Gast da.

00:01:51.197 --> 00:01:53.897
Und zwar den Martin. Hallo Martin. Moin.

00:01:54.577 --> 00:02:00.077
Moin. Du warst noch nicht bei uns und Erstgäste bitten wir immer,

00:02:00.137 --> 00:02:03.737
sich mal kurz vorzustellen und zu sagen, wer sie sind, was sie machen.

00:02:04.497 --> 00:02:09.017
Willst du mal erzählen? Ja, sehr gerne. Also erstmal vielen Dank,

00:02:09.037 --> 00:02:10.977
dass ihr mich hier haben wollt als Gast.

00:02:11.117 --> 00:02:13.977
Es freut mich sehr. Genau, ich bin Martin.

00:02:14.677 --> 00:02:20.297
Ich sitze in meinem Tagsüberleben bei Midwald, habe eigentlich einen Softwareentwicklungs-Background,

00:02:20.997 --> 00:02:26.797
und bin da in letzter Zeit aber so ein bisschen von weg. Also Softwareentwicklung gehört immer noch,

00:02:28.225 --> 00:02:33.445
Zum Kern meiner Tätigkeit, ich habe irgendwann so ein bisschen den Shift Richtung

00:02:33.445 --> 00:02:36.745
Software-Architektur und dann irgendwann Richtung Cloud-Architektur gemacht,

00:02:36.925 --> 00:02:42.085
war dann irgendwann bei Midwild übergreifend so für die Gesamtsoftware- und

00:02:42.085 --> 00:02:45.705
Cloud-Architektur von allem verantwortlich und habe jetzt in letzter Zeit so

00:02:45.705 --> 00:02:48.825
ein bisschen das Developer-Relations-Feld erkundet.

00:02:51.245 --> 00:02:55.425
Dazu gehört, ein bisschen den Kontakt zu Entwickler-Communities zu halten,

00:02:56.085 --> 00:03:02.165
Aber auch sowas wie mir Gedanken um die Developer Experience von der Produktwelt zu machen.

00:03:02.265 --> 00:03:06.465
Das heißt, wie nehmen Entwickler, die mit unseren Produkten arbeiten,

00:03:06.685 --> 00:03:07.945
die sie überhaupt waren?

00:03:08.045 --> 00:03:13.405
Das heißt zum Beispiel, wie intuitiv erschließen sich da die APIs?

00:03:13.405 --> 00:03:18.265
Ist, also Developer-Experience so analog zur User-Experience, so ein bisschen ich,

00:03:20.085 --> 00:03:22.705
bin dafür verantwortlich irgendwie einen Plan zu erarbeiten,

00:03:22.825 --> 00:03:26.965
was so das Tooling angeht, was wir Entwicklern bereitstellen zu schauen,

00:03:27.065 --> 00:03:29.985
sind wir da gut aufgestellt, fehlt irgendwas, können wir Entwickler irgendwo

00:03:29.985 --> 00:03:31.045
in ihren Workflows unterstützen,

00:03:32.085 --> 00:03:36.165
Developer-Education gehört auch dazu, also ich schreibe viel Dokumentation schreibe

00:03:36.165 --> 00:03:37.685
zwischendurch mal einen Blogpost,

00:03:39.225 --> 00:03:43.265
Open Source ist ein großes Thema das heißt, ich kümmere mich so ein bisschen

00:03:43.265 --> 00:03:44.405
um unser Open-Source-Engagement.

00:03:45.025 --> 00:03:50.825
Und um Use-Experience geht's ja auch heute. Also, das ist ja auch unser Thema.

00:03:52.165 --> 00:03:54.385
Bevor wir da aber einsteigen, würde mich noch interessieren,

00:03:55.105 --> 00:03:58.365
wie findest du heraus, was Entwickler möchten?

00:03:58.645 --> 00:04:05.465
Also, du musst ja dann quasi irgendwie zu denen gehen und mit denen irgendwie

00:04:05.465 --> 00:04:07.865
sprechen, arbeiten, Feedback einsammeln und so.

00:04:08.605 --> 00:04:13.005
Genau so ist es. Also, hauptsächlich durch Sprechen und Zuhören.

00:04:14.945 --> 00:04:18.265
Und ja, auch so ein bisschen beobachten. Also was sind die Workflows?

00:04:18.285 --> 00:04:20.485
Wie arbeiten die Leute mit den Produkten?

00:04:20.545 --> 00:04:26.665
Und dann findet man häufig Anknüpfpunkte, wo man sich vielleicht integrieren

00:04:26.665 --> 00:04:27.985
kann, wo man besser unterstützen kann.

00:04:30.539 --> 00:04:36.659
Ja, und genau, uns interessiert heute ein bestimmter UX-Aspekt,

00:04:36.699 --> 00:04:39.459
den wir noch gar niemals, jemals beleuchtet haben,

00:04:39.579 --> 00:04:48.139
und zwar die UX von Kommandozeilenprogrammen letztendlich oder Kommandozeileninterfaces.

00:04:48.139 --> 00:04:52.399
Ich weiß nicht, ob ich schon mal irgendwie eins gebaut habe. Ich glaube nicht.

00:04:52.639 --> 00:04:56.399
Also das, was dem am nächsten kommt, ist vielleicht irgendwie Node,

00:04:56.699 --> 00:05:02.139
das irgendwelche Parameter übernimmt, die ich übergebe und dann Dinge tut.

00:05:02.699 --> 00:05:09.779
Ansonsten habe ich Kommandozeilenprogramme vielleicht häufiger genutzt,

00:05:09.779 --> 00:05:13.719
aber das habe ich auch in der Vorbesprechung gesagt, wahrscheinlich gar nicht

00:05:13.719 --> 00:05:17.599
mal so genau drauf geachtet, wie die strukturiert sind.

00:05:17.659 --> 00:05:21.059
Deswegen wird das eine hochspannende Folge, glaube ich.

00:05:21.679 --> 00:05:25.259
Wie ist das mit dir, Vanessa? Hast du schon mal Kommandozeilen-Tools gebaut?

00:05:25.859 --> 00:05:32.959
Ich weiß nicht, ob Plop-Files schreiben als Kommandozeilen-Anwendung gebaut schon gilt.

00:05:34.559 --> 00:05:37.999
Ansonsten eher nicht. Ich hatte aber den gleichen Gedanken wie du.

00:05:38.059 --> 00:05:42.459
Ich habe auch vorher mich gar nicht so darauf fokussiert, wie gut oder schlecht

00:05:42.459 --> 00:05:46.419
sie funktionieren, die ich benutze. Was aber vermutlich auch bedeutet,

00:05:46.619 --> 00:05:49.099
dass sie zumindest schon mal nicht so schlecht funktionieren,

00:05:49.199 --> 00:05:52.059
weil sonst wäre mir das vielleicht stärker aufgefallen.

00:05:52.219 --> 00:05:56.719
Oder ich weiß auch eben einfach gar nicht, was alles möglich wäre. wäre.

00:05:59.619 --> 00:06:02.439
Und im Endeffekt habe ich mir auch nochmal gerade gedacht, im Endeffekt ist

00:06:02.439 --> 00:06:06.439
ja diese Art von Developer Experience dann auch einfach eine User Experience,

00:06:06.639 --> 00:06:11.859
weil jetzt sind ja wir auch mal die Nutzer, Nutzerinnen dann von diesen Sachen.

00:06:12.359 --> 00:06:16.519
Mir ist dann nur auch heute im Laufe des Tages schon mal eingefallen,

00:06:17.159 --> 00:06:20.359
als ich schon mal an die Aufnahme gedacht habe, dass es da glaube ich so eine

00:06:20.359 --> 00:06:23.499
krasse Wetteranwendung gibt für die,

00:06:23.939 --> 00:06:29.019
für das Terminal, was wohl, ich muss es raussuchen, mir ist es gerade eingefallen,

00:06:29.019 --> 00:06:31.559
ich war aber unterwegs, ich schaue es mal raus, vielleicht finde ich da ein

00:06:31.559 --> 00:06:33.099
paar Bildchen davon, es ging mir mal,

00:06:34.659 --> 00:06:38.279
ging mir mal, meine Tweet sagt mir jetzt nicht mehr so, in sozialen Netzwerken

00:06:38.279 --> 00:06:40.979
ist mir da das mal untergekommen. Ein kleiner Hype.

00:06:42.818 --> 00:06:45.218
Okay, eine Wetter-App auf der Kommandozeile, nicht schlecht.

00:06:45.338 --> 00:06:46.198
Ja, aber warum nicht, ne?

00:06:47.858 --> 00:06:52.758
Man kann, genau. Genau, also, richtig. Genau. Ja, genau.

00:07:22.638 --> 00:07:26.658
Dass man Maschinen provisionieren kann, was man über die Kommandozeile macht,

00:07:26.778 --> 00:07:29.798
weil Server jetzt ja keine grafischen Oberflächen haben.

00:07:31.138 --> 00:07:36.298
Ist ja dann auch so, wenn man so seinen alten Windows-Server mit grafischen

00:07:36.298 --> 00:07:40.538
Interfaces hatte, dann war es irgendwann so, dass man einfach keinen Bock mehr

00:07:40.538 --> 00:07:44.398
hatte und dann doch lieber irgendwie dann auf die PowerShell gewechselt ist.

00:07:44.518 --> 00:07:48.498
Aber was gibt es denn noch für Use Cases dafür?

00:07:50.258 --> 00:07:55.118
Ich glaube, da gibt es mehrere. die vielleicht auch so ein bisschen parallel

00:07:55.118 --> 00:07:56.298
nebeneinander herlaufen.

00:07:56.378 --> 00:07:59.678
Ich glaube, der erste geht tatsächlich schon in die Richtung,

00:07:59.738 --> 00:08:01.918
die du auch gerade angeschnitten hast.

00:08:03.358 --> 00:08:05.578
Thema Provisionierung oder einfach Automatisierung.

00:08:07.978 --> 00:08:12.438
Weil viele von diesen CLIs ja dann auch den Vorteil bieten, dass ich sie halt

00:08:12.438 --> 00:08:16.438
... Ich kann sie halt einerseits als Nutzer interaktiv benutzen.

00:08:16.878 --> 00:08:21.738
Ich kann sie aber auch nicht interaktiv benutzen und skripten zum Beispiel damit.

00:08:21.738 --> 00:08:26.378
Und das ist halt ein super spannender Punkt, wenn ich irgendwie Prozesse automatisieren möchte.

00:08:28.388 --> 00:08:32.348
Ohne mich jetzt irgendwie automatisch durch irgendeine Web-Nutzeroberfläche

00:08:32.348 --> 00:08:33.168
durchklicken zu müssen.

00:08:34.068 --> 00:08:37.828
Oder mich jetzt, viele Anbieter bieten ja auch eine API an stattdessen,

00:08:37.828 --> 00:08:39.988
aber vielleicht will ich mich damit nicht auseinandersetzen.

00:08:40.288 --> 00:08:46.108
Oder will nur irgendeine Kleinigkeit skripten und dafür so ein paar CLI-Aufrufe

00:08:46.108 --> 00:08:50.368
kann ich halt schnell in ein Shell-Skript oder PowerShell-Skript,

00:08:50.408 --> 00:08:52.168
kann man in PowerShell skripten?

00:08:52.588 --> 00:08:57.068
Ich weiß es nicht. Ich habe keine Ahnung. Also, genau, ich hab den Sprung zur

00:08:57.068 --> 00:08:58.368
PowerShell auch ehrlich gesagt nie.

00:08:58.468 --> 00:09:03.348
Also, ich bin ja so ein langjähriger Windows-Mensch, jetzt auf Mac frisch gewechselt.

00:09:03.708 --> 00:09:06.948
Aber die PowerShell, die hab ich tatsächlich mir nie erschlossen.

00:09:07.708 --> 00:09:11.348
Ja, also, da sind wir schon mindestens zu zweit, glaub ich.

00:09:12.148 --> 00:09:14.068
Aber sie ist, glaub ich, powerful, so.

00:09:15.448 --> 00:09:18.768
Ja. Und gibt's auch für andere Plattformen, so wie ich das mitbekommen hab.

00:09:20.348 --> 00:09:24.268
Ja, guck. Genau, also, Automatisierung ist ein Punkt.

00:09:25.108 --> 00:09:29.248
Wo ich auch immer so ein bisschen dran denke, ist, ich denke ganz häufig immer so an die Power-User.

00:09:30.828 --> 00:09:35.908
Das heißt, die Leute, die, ich glaube, zu dem Lager gehöre ich halt auch.

00:09:36.068 --> 00:09:39.828
Ich bin so im Arbeitsalter ganz, ganz viel auf der Kommandozeile unterwegs.

00:09:41.088 --> 00:09:45.388
Und da freue ich mich ja, je mehr ich über die Kommandozeile machen kann,

00:09:45.468 --> 00:09:48.368
desto besser funktioniert mein Workflow irgendwie.

00:09:50.288 --> 00:09:54.168
Also das beste Beispiel, was mir da irgendwie immer einfällt.

00:09:56.528 --> 00:10:00.648
Soll jetzt keine Werbung sein, aber so die GitHub-CLI zum Beispiel,

00:10:02.308 --> 00:10:03.568
das funktioniert wunderbar.

00:10:03.588 --> 00:10:05.848
Ich bin da kaum noch in der Wettbewerbsfläche unterwegs.

00:10:06.428 --> 00:10:12.108
Also alles, so der komplette Workflow, Repo runterladen, lokal entwickeln mit

00:10:12.108 --> 00:10:14.388
Git sowieso, das ist ja das Kernprinzip dabei.

00:10:15.128 --> 00:10:19.988
So, aber dann Issue aufmachen, Pull-Request erstellen, Pull-Request reviewen,

00:10:20.028 --> 00:10:23.808
approven, mergen, das geht alles über die Kommandozeile und das macht meinen

00:10:23.808 --> 00:10:24.888
Workflow so viel einfacher.

00:10:26.648 --> 00:10:29.788
Dann beschleunigt den auch wahrscheinlich deutlich. Beschleunigt den immens.

00:10:30.228 --> 00:10:33.308
Genau, weil du ja nicht mehrere Screens durchklicken musst. Du musst mit der

00:10:33.308 --> 00:10:37.348
Maus nicht von links oben nach rechts unten irgendwie dich bewegen.

00:10:38.448 --> 00:10:42.408
Und du kannst auch, das ist auch was, was, finde ich, bei der Kommando-Fälle

00:10:42.408 --> 00:10:48.748
ganz häufig unterschätzt wird, dass du ja in einem Terminal-Fenster quasi nahtlos

00:10:48.748 --> 00:10:51.268
zwischen ganz, ganz vielen verschiedenen Kontexten wechseln kannst.

00:10:51.268 --> 00:10:57.028
So, du musst jetzt nicht zwölf Browser-Tabs jonglieren, um zwischen GitHub,

00:10:57.288 --> 00:11:01.068
Midwald und deinem AWS-Konto hin und her zu switchen, sondern ...

00:11:02.587 --> 00:11:06.667
Du sprichst mit einem Befehl das eine Programm an, so, zack,

00:11:06.667 --> 00:11:08.987
enter, nächste Zeile, dann das nächste Programm.

00:11:09.247 --> 00:11:13.587
Du hast überhaupt keinen Kontext-Switch dazwischen und kannst viel effizienter arbeiten.

00:11:14.467 --> 00:11:18.167
Mal kurz auf den GitHub-Fall nochmal zurück. Das heißt, du öffnest wirklich

00:11:18.167 --> 00:11:24.407
Pull-Requests samt der Description und sind da vielleicht auch Bilder mit da?

00:11:24.447 --> 00:11:27.727
Bei meinen Frontend-Pull-Requests sind zum Beispiel oft Screenshots dabei.

00:11:27.887 --> 00:11:31.387
Das würde damit auch alles einwandfrei gehen, weil ich gebe zu,

00:11:31.627 --> 00:11:35.067
dass ich mache, natürlich warst du gerade meines, ja die Standardsachen so,

00:11:35.187 --> 00:11:40.147
Git-Terminal, forken, pullen, pushen, rebasen etc.

00:11:40.947 --> 00:11:44.327
Aber den Pull-Request erstellen mache ich tatsächlich in der GUI.

00:11:44.887 --> 00:11:47.147
Das muss sich gestehen, ob man da jetzt ein Bild einbetten kann,

00:11:47.227 --> 00:11:48.807
das weiß ich nicht. Ich würde vermuten nicht.

00:11:51.187 --> 00:11:56.147
Wahrscheinlich hat das irgendjemand schon mal gemacht. Irgendjemand Nerdiges

00:11:56.147 --> 00:11:59.727
hockt da schon draußen und hat das schon mal rumgebastelt, dass man auch ein Bild hochladen kann.

00:12:00.627 --> 00:12:04.307
Ja, das stimmt. Wobei, das könnte ich mir tatsächlich vorstellen,

00:12:04.427 --> 00:12:07.007
ist ein Prozess, der wahrscheinlich etwas komplizierter wäre,

00:12:07.107 --> 00:12:09.007
jetzt über einen Kommando-Zahl-Interface umzusetzen.

00:12:09.907 --> 00:12:12.667
Man müsste es irgendwie hochladen, dann müsste man den Link irgendwie ins Markdown

00:12:12.667 --> 00:12:16.107
einbetten. Das ist ein kleines bisschen komplizierter, glaube ich.

00:12:17.447 --> 00:12:20.207
Genau, vielleicht kann man das so, kann man sagen, so immer,

00:12:20.287 --> 00:12:24.207
wenn es um visuelle Dinge geht, braucht man ein visuelles Interface und wenn

00:12:24.207 --> 00:12:26.947
es um reine Textgeschichten geht,

00:12:27.087 --> 00:12:30.067
dann kann man mit einem Textinterface vielleicht effizienter arbeiten.

00:12:30.847 --> 00:12:34.907
Ja, kann man glaube ich so sagen. Wobei die Terminals ja auch schlauer geworden sind.

00:12:36.707 --> 00:12:41.847
Ich bin da jetzt nicht hundertprozentig firm, welches Terminal alles was unterstützt,

00:12:41.867 --> 00:12:44.207
aber so manche Terminals können mittlerweile auch Bilder darstellen.

00:12:47.437 --> 00:12:50.557
Naja, nee, da hab ich auch keine Ahnung. Aber da hat sich auf jeden Fall viel

00:12:50.557 --> 00:12:54.197
getan, vor allem in der Windows-Welt. Die haben ja auch gut aufgeholt.

00:12:55.117 --> 00:13:01.237
Die hinkten ja arg hinterher. Ich glaube, die haben auch den Druck gespürt seitens der Anwender.

00:13:01.617 --> 00:13:05.877
Ja, genau. Ich weiß ja nur, wie lange das gedauert hat, bis man da mal so Farben

00:13:05.877 --> 00:13:08.017
anzeigen konnte. Das ging ja auch nicht.

00:13:08.517 --> 00:13:12.497
Ja, oder allein so was Billiges wie, du machst eine CMD auf und du willst mehr

00:13:12.497 --> 00:13:14.537
als 80 Zeichen Spaltenbreite haben.

00:13:15.477 --> 00:13:17.717
Das war ja schon schwierig genug. Ja, stimmt.

00:13:19.037 --> 00:13:22.797
Wir hatten jetzt ein Beispiel mit Git oder Git-Tools.

00:13:23.737 --> 00:13:30.437
Trotzdem hast du mehrere konkrete Beispiele noch für uns, was so häufig wiederkehrende

00:13:30.437 --> 00:13:32.917
Aufgaben sind, die du da tatsächlich damit erledigst.

00:13:33.197 --> 00:13:36.717
Oder du es anderes siehst, was die damit machen.

00:13:38.357 --> 00:13:42.377
Ich denke jetzt mal, gut, das ist jetzt für mich das Heimspiel.

00:13:42.377 --> 00:13:45.197
Ich denke jetzt mal so an Infrastructure oder Plattform ist der Servicebereich.

00:13:46.777 --> 00:13:48.717
Da spielen wir natürlich mit, aber auch so ...

00:13:50.797 --> 00:13:54.497
Ich glaub, Heroku haben, glaub ich, auch angefangen mit einer sehr, sehr coolen CLI.

00:13:55.337 --> 00:14:01.317
AWS hat ein CLI-Tool, über das man auch, glaub ich, so mehr oder minder alles machen kann.

00:14:01.617 --> 00:14:04.337
Wir arbeiten viel mit OpenStack, da gibt's eine super CLI.

00:14:06.457 --> 00:14:10.537
WordPress hat auch eine CLI. WordPress, stimmt, WordPress hat auch eine CLI. Das ist richtig cool.

00:14:10.957 --> 00:14:15.737
Da muss man nicht irgendwie die ganzen Plugins zu Fuß installieren und so Zeugs, das ist echt mega.

00:14:17.077 --> 00:14:21.417
Stimmt, genau. Typo 3 hat auch ein Äquivalent, das ist die Typo 3-Konsole.

00:14:21.417 --> 00:14:23.217
Das funktioniert auch super.

00:14:23.877 --> 00:14:26.337
Genau, und gerade wenn ich jetzt so an WordPress-Typo oder sowas denke,

00:14:26.437 --> 00:14:27.397
das ist halt auch ein Use Case.

00:14:27.517 --> 00:14:31.777
Wenn ich zum Beispiel auf einem System unterwegs bin, wo ich gar keine grafische

00:14:31.777 --> 00:14:35.977
Oberfläche habe, ich bin per SSH auf irgendeinen Server hochkonnektiert.

00:14:38.912 --> 00:14:41.212
Dann gibt es da vielleicht tatsächlich nicht mehr als eine Kommandozeile.

00:14:43.292 --> 00:14:52.832
Ja, und dann gibt es natürlich auch so diese ganzen Create-XY-App-CLIs und sowas

00:14:52.832 --> 00:14:57.632
wie Laravel Artisan oder so, die einem auch einfach viel Arbeit abnehmen,

00:14:58.432 --> 00:15:04.112
indem man die Kommandozeilen Cowboy oder Girl macht.

00:15:04.832 --> 00:15:07.752
Also alles, was so in deinen Softwareentwicklungsprozess integriert ist,

00:15:07.752 --> 00:15:11.992
Also Projekt-Bootstrapping oder sei es alleine NPM.

00:15:12.152 --> 00:15:14.772
Wie viele Sachen macht NPM oder Yarn?

00:15:16.652 --> 00:15:21.312
Das ist ja schon der Wahnsinn. Ja, und ich finde auch manchmal,

00:15:21.652 --> 00:15:28.712
dass tatsächlich so Programme schreiben, die irgendeinen Task lösen, meistens gar nicht.

00:15:28.952 --> 00:15:32.612
Also das ist so relativ schnell gemacht. Aber wenn man dann noch die UI dazu

00:15:32.612 --> 00:15:37.372
braucht, dann fängt es an, echt nervig zu werden. Also zumindest ist das meine

00:15:37.372 --> 00:15:40.112
Erfahrung, dass UI immer am meisten Zeit kostet.

00:15:40.272 --> 00:15:44.692
Also die Logik an sich ist schnell gebaut, aber dann will man die irgendwie

00:15:44.692 --> 00:15:49.612
exponieren. Und wenn man eben so grafische Interfaces hat, dann ist das eben viel Arbeit.

00:15:49.652 --> 00:15:53.112
Wenn man das aber sozusagen auf die Kommandozeile verlegen kann,

00:15:53.172 --> 00:15:56.592
glaube ich, ist man vielleicht auch schneller am Ziel. Also...

00:15:57.790 --> 00:16:02.610
Mit einfach einem anderen Ansatz. Du meinst, das ist so aus der Bausicht heraus?

00:16:03.390 --> 00:16:09.410
Ja. Ja, weil ich finde es eigentlich aus der Nutzerinnen-Sicht ganz.

00:16:10.610 --> 00:16:14.330
Also es fällt mir jedes Mal wieder auf, wie langsam ich quasi unterwegs bin,

00:16:14.390 --> 00:16:16.770
wenn ich in irgendeinem Browser irgendwelche Sachen klicken muss,

00:16:17.290 --> 00:16:19.990
versus mit, ich kann das auf der Tastatur schnell erledigen.

00:16:20.070 --> 00:16:24.910
Jetzt gibt es natürlich auch Tools, mit denen ich, die generell oft schon eine

00:16:24.910 --> 00:16:30.650
höhere Accessibility haben Oder zumindest eine sehr hohe Keyboard-Erreichbarkeit von den Sachen.

00:16:31.370 --> 00:16:36.270
Ich glaube, bei VS Code generell komme ich ja auch mit Tastenkombinationen generell sehr weit.

00:16:36.550 --> 00:16:39.230
Und ich glaube, dann fällt mir das am meisten auf, wenn ich in einem Browser

00:16:39.230 --> 00:16:42.670
bin und ich will solche Sachen machen, wie eine Zeile wegschneiden und woanders hin.

00:16:42.850 --> 00:16:46.810
Und dann außerdem schließe ich einen Tab oder sowas, weil ich halt keine Ahnung was gedrückt habe.

00:16:48.270 --> 00:16:53.450
Also es ist unfassbar, wie viel schneller ich bin, wenn ich nicht auf Buttons drücken muss.

00:16:55.990 --> 00:17:03.550
Und selbst wenn die Webseite eine gute UX hat, allerdings es gibt ein Problemchen,

00:17:03.570 --> 00:17:06.430
was ich bei mir selber habe, wenn ich GitLab zum Beispiel verwende,

00:17:06.510 --> 00:17:09.030
weil ich es einfach selber persönlich ein bisschen anders machen würde.

00:17:09.030 --> 00:17:13.610
Ich kann da auf meine Pull-Requests, Merge-Requests gehen und dann kann ich

00:17:13.610 --> 00:17:17.730
auf den Filter klicken, dass ich nur die sehen möchte, die mir assigned sind.

00:17:18.110 --> 00:17:21.770
Aber dann scheine ich den Kontext da zu switchen, dass ich dann nicht mehr in

00:17:21.770 --> 00:17:28.010
meinem Projekt bin, in dem ich vorher war, sondern alle meine assigneden Merge-Requests

00:17:28.010 --> 00:17:29.410
über mehrere Projekte hinweg.

00:17:29.650 --> 00:17:32.070
Und ich weiß immer nicht mehr, wie ich zurückkomme.

00:17:32.330 --> 00:17:36.550
Ich muss immer ein neues Tab aufmachen und GitLab-Domain wieder eingeben.

00:17:37.490 --> 00:17:41.470
Bevor ich jetzt gleich Infos bekomme, ich bin mir sicher, ich müsste nur auf

00:17:41.470 --> 00:17:42.970
den richtigen Button wieder zurückklicken.

00:17:43.030 --> 00:17:45.930
Ich wollte nur sagen, es gibt immer so Sachen, wenn es grafisch ist,

00:17:46.050 --> 00:17:50.950
dass ich oft so ein bisschen drüber stolper, während es dann auf einer Kommandozeile

00:17:50.950 --> 00:17:52.530
halt alles auch Muscle Memory ist.

00:17:53.770 --> 00:17:57.770
Schätzungsweise ist aber natürlich einfach die Einstiegshürde viel größer.

00:17:58.627 --> 00:18:04.327
Etwas, was ich zum Beispiel auch immer noch kaum mit anschauen kann, ist bei anderen, die ihr.

00:18:05.987 --> 00:18:09.187
T-Mux, ich glaube T-Mux ist das, auf jeden Fall die, ach Item,

00:18:09.327 --> 00:18:13.727
die dann irgendwie ihre vier Fenster aufhaben mit Terminal und ich so,

00:18:13.847 --> 00:18:17.467
in welchem Fenster soll ich gucken? Wo bist du überhaupt? Wo ist der Cursor?

00:18:18.727 --> 00:18:22.587
Das ist was, was ich nicht kann. Ich kann meinen WIM benutzen,

00:18:23.267 --> 00:18:24.347
ich weiß auch, wie man es exited.

00:18:25.527 --> 00:18:27.467
Das ist ja die größte Herausforderung beim WIM.

00:18:29.687 --> 00:18:30.887
Das kann ich zum Beispiel nicht.

00:18:33.947 --> 00:18:39.087
Und Junta runterfahren funktioniert schon. Ja, da kommt man immer raus, meinst du, ne? Ja.

00:18:39.587 --> 00:18:42.727
Etwas, was ich lange lernen musste, ist, wie ich einen Rebase,

00:18:45.107 --> 00:18:48.607
abbreche beim Verändern der Commit-Nachricht, weil ich irgendwann wusste ich

00:18:48.607 --> 00:18:51.127
nicht, wie ich rauskomme und dann habe ich einen Terminal-Tab schließen müssen,

00:18:51.247 --> 00:18:53.467
damit ich jetzt nicht aussehen was Falsches rebase.

00:18:55.367 --> 00:19:00.387
Naja, passiert. Das ist aber auch irgendwie so ein Rite of Passage,

00:19:00.387 --> 00:19:03.127
sich mit dem Git-Rebase ins Knie zu schießen, oder? Also ich glaube,

00:19:03.147 --> 00:19:03.967
da musste jeder mal durch.

00:19:05.007 --> 00:19:06.387
Ja, ist aber lang her bei mir.

00:19:07.507 --> 00:19:11.167
Da war es eher so, dass ich, das hat jetzt gar nichts mit dem Rebase zu tun

00:19:11.167 --> 00:19:15.367
gehabt, glaube ich, wirklich nur ein Commit-Message-Reverten umbenennen.

00:19:16.047 --> 00:19:20.927
Und ich habe aber aus Versehen eine Zeile zusammengefügt und ich wusste nicht,

00:19:20.987 --> 00:19:23.587
wie Command-Z geht. Genau, ich wusste nicht, wie Command-Z geht.

00:19:27.127 --> 00:19:33.787
Genau, also wir haben festgestellt, Kommandozeilen haben ihre Vorteile in verschiedenen

00:19:33.787 --> 00:19:40.967
Bereichen und jetzt sind wir natürlich alle total angespitzt und wollen selber

00:19:40.967 --> 00:19:42.907
mal irgendwie was bauen,

00:19:43.007 --> 00:19:47.087
was sich über die Kommandozeile benutzen lässt, anstatt über ein grafisches Interface.

00:19:48.807 --> 00:19:54.607
Wie würden wir da anfangen? Sagen wir mal, wir würden irgendeine Utility bauen wollen.

00:19:55.287 --> 00:19:58.927
Wie machen wir das? Also ich, genau, ich kenne halt so okay,

00:19:59.087 --> 00:20:01.287
Node, ich glaube da gibt es auch irgendwelche Möglichkeiten,

00:20:01.487 --> 00:20:05.067
dass Node dann irgendwie in eine also,

00:20:06.527 --> 00:20:10.767
dass man dann quasi so ein globales Command hat, das eben dann nicht mehr Node

00:20:10.767 --> 00:20:15.427
und dann JS-File ist, sondern dann einen eigenen Namen hat.

00:20:16.367 --> 00:20:22.587
So, das kann man bauen, aber damit erschöpft sich das auch schon, was ich so darüber weiß.

00:20:24.327 --> 00:20:28.687
Genau, also du im Prinzip brauchst dir erstmal irgendeine Programmiersprache,

00:20:28.687 --> 00:20:34.607
die Daten auf der Standardausgabe ausgeben und irgendwie per Kommandozeile aufgerufen werden kann.

00:20:34.947 --> 00:20:37.027
Das ist im Endeffekt eigentlich jede.

00:20:38.267 --> 00:20:41.667
So, ich denke jetzt an dieses, die meisten Studenten machen im Studium irgendwann

00:20:41.667 --> 00:20:46.027
mal so eine Java Hello World Applikation, so die gibt einfach Hello World auf der Kommandozeile aus.

00:20:46.407 --> 00:20:49.667
Das ist eigentlich so das Minimum, was man braucht.

00:20:51.300 --> 00:20:54.960
Die Frage der Laufzeitumgebung ist natürlich immer eine spannende,

00:20:55.060 --> 00:21:02.680
weil das dann ja auch eine Systemanforderung ist, die ich an den User stelle.

00:21:02.780 --> 00:21:06.120
Wenn ich das jetzt in Java schreibe, dann erwarte ich vom User,

00:21:06.200 --> 00:21:08.520
der das Ding später benutzt, weil das ist ja keine Webanwendung,

00:21:08.560 --> 00:21:12.940
die ich jetzt über den Browser ausliefern kann, sondern der User muss das ganz

00:21:12.940 --> 00:21:14.960
klassisch bei sich lokal auf dem System installieren.

00:21:15.120 --> 00:21:17.640
Und deswegen, dementsprechend, muss ich mir ein bisschen Gedanken machen,

00:21:17.760 --> 00:21:20.560
was für Systemanforderungen bringe

00:21:20.560 --> 00:21:23.660
ich da jetzt mit, mit was für Systemanforderungen lege ich den User auf.

00:21:24.360 --> 00:21:30.460
Das heißt, das wären so Sprachen wie Go, die sich quasi mit dem Programm mitpackagen,

00:21:30.540 --> 00:21:34.320
wären wahrscheinlich da einfacher.

00:21:35.280 --> 00:21:39.380
Das macht die Distribution am Ende tatsächlich am einfachsten.

00:21:39.420 --> 00:21:44.940
Genau, irgendwie statisch kompiliertes Go-Binary, da kann nicht viel kaputt gehen.

00:21:45.300 --> 00:21:48.940
Bei Rust wird es genauso einfach funktionieren, abgesehen davon,

00:21:49.020 --> 00:21:51.980
dass die Sprache noch eine etwas steilere Lernkurve mit sich bringt.

00:21:54.560 --> 00:21:57.820
Bei Node.js muss man sich ein paar Gedanken machen.

00:21:58.520 --> 00:22:03.780
Man kann jetzt argumentieren, wenn deine primäre Zielgruppe jetzt sowieso Developer

00:22:03.780 --> 00:22:08.260
sind, ist die Wahrscheinlichkeit vielleicht eh hoch, dass du eine lokale Node.js

00:22:08.260 --> 00:22:09.280
Runtime installiert hast.

00:22:09.360 --> 00:22:14.640
Dann kannst du einfach sagen, hier npm install-g und dann hast du das Ding installiert.

00:22:15.280 --> 00:22:20.260
Man kann sich auch solcher Lösungen behelfen, die dir dann zum Beispiel noch

00:22:20.260 --> 00:22:26.540
deine eigene Node.js-Runtime in dein installierbares Paket mit einbetten.

00:22:26.620 --> 00:22:29.060
Also das gibt's auch, da musst du's nicht selber installieren.

00:22:29.500 --> 00:22:30.580
Sondern dann hast du quasi dein

00:22:30.580 --> 00:22:33.440
Installationspaket, da ist dann so ein eingebettetes Node.js mit drin.

00:22:35.020 --> 00:22:37.980
Genau, was wiederum wahrscheinlich dann den Nachteil mit sich bringt,

00:22:38.060 --> 00:22:42.260
dass es relativ groß wird, das Paket. Ja, das stimmt, das stimmt.

00:22:43.747 --> 00:22:46.807
Wir machen das bei unserer Mitwahl-TLI, also da machen wir genau das,

00:22:46.847 --> 00:22:52.507
das Ding ist in Node.js geschrieben und wir nutzen da quasi so einen vordefinierten,

00:22:52.627 --> 00:22:55.447
was ist das Wort, Paketierer?

00:22:56.767 --> 00:22:58.987
Keine Ahnung, kann man das sagen? Ja, bestimmt. Ich habe es verstanden.

00:22:59.107 --> 00:23:00.087
Ich finde, das klingt plausibel.

00:23:01.887 --> 00:23:05.827
Genau, also der baut hier quasi so die fertigen Distributionspakete zusammen,

00:23:05.927 --> 00:23:07.927
da ist dann eine komplette Node.js-Distribution mit drin.

00:23:08.267 --> 00:23:10.907
Vorteil ist, du hast am Ende eine ZIP-Datei, die kannst du entpacken,

00:23:10.927 --> 00:23:11.967
es ist alles drin und es läuft.

00:23:12.407 --> 00:23:16.207
Nachteil ist, das Ding ist dann 50, 60, 70, 100 MB groß.

00:23:18.607 --> 00:23:24.727
Ja, sag mal, es ist nicht das ressourcenschonendste, was man machen kann, aber,

00:23:26.727 --> 00:23:32.007
zumindest so in unseren Kreisen sollte das ja recht verkraftbar sein.

00:23:32.367 --> 00:23:38.207
Ich frage mich gerade, ob bei Cloudflare, die haben ja Wrangler als Kommandozeileninterface

00:23:38.207 --> 00:23:41.987
oder Tool, ob die das nicht eventuell ganz ganz genau so machen.

00:23:43.447 --> 00:23:47.707
Bin ich mir nicht ganz sicher. Das kann ich gerade auch nicht sagen, aber kann gut sein.

00:23:48.967 --> 00:23:54.447
Das heißt also im Grunde, man kann jede Sprache nehmen, um ein Commando-Tool zu schreiben.

00:23:54.547 --> 00:23:58.107
Vielleicht fängt man am Anfang, wenn man erst mal nur für sich selber baut,

00:23:58.167 --> 00:23:59.587
kann man ja dann nehmen, was man möchte.

00:23:59.787 --> 00:24:05.867
Also bei uns im Podcast, uns hören vorwiegend Frontend-Entwicklerinnen und da

00:24:05.867 --> 00:24:11.307
würde ich jetzt mal sagen, wird das vielleicht irgendwas Node-JavaScript-basiertes sein.

00:24:13.047 --> 00:24:16.467
Genau, und wenn man dann aber sozusagen wenn man das dann verteilt,

00:24:16.587 --> 00:24:19.867
dann ist vielleicht der Ansatz,

00:24:22.067 --> 00:24:26.107
nicht so gut oder dann sollte man zumindest das zusammen bundeln,

00:24:26.147 --> 00:24:29.407
die Runtime und den Code, wie auch immer das dann passiert.

00:24:32.547 --> 00:24:32.987
Okay.

00:24:34.520 --> 00:24:41.260
Ähm, genau, aber dann kann man, äh, also das ist jetzt sozusagen der Bare-Bones-Ansatz,

00:24:41.300 --> 00:24:45.880
dass man erstmal so quasi die eingebauten Möglichkeiten der Programmiersprachen

00:24:45.880 --> 00:24:48.900
nutzt, aber wie das immer so ist, ist ja im Browser auch nicht anders.

00:24:50.360 --> 00:25:00.780
Das ist halt sehr viel zu Fuß Arbeit und du weißt von Kommandozeilen,

00:25:03.140 --> 00:25:08.860
Frameworks, also die einem so wahrscheinlich ganz viel Legwork abnehmen,

00:25:09.060 --> 00:25:14.580
das mir jetzt gerade nicht bekannt ist, dieses Legwork, aber du erzählst mir

00:25:14.580 --> 00:25:15.580
das jetzt gleich mal oder uns.

00:25:17.280 --> 00:25:23.600
Genau, diese Frameworks machen dann Sinn, weil du ja eigentlich bei jeder Kommandozeile

00:25:23.600 --> 00:25:24.880
immer die gleichen Probleme hast.

00:25:25.480 --> 00:25:29.800
Du musst dir irgendwie überlegen, wie kriegst du User, wie nimmst du User-Input entgegen.

00:25:30.380 --> 00:25:34.040
Die meisten Kommandozeilen-Tools, die haben ja diese...

00:25:34.780 --> 00:25:37.480
Es ist kein Naturgesetz, aber das ist irgendwie so eine Konvention,

00:25:37.480 --> 00:25:42.600
die sich so etabliert hat, dass man irgendwie Flags und Argumente entgegennehmen kann.

00:25:42.740 --> 00:25:48.160
Also diese Flags mit minus minus keine Ahnung was, so minus minus help im einfachsten Fall.

00:25:49.160 --> 00:25:52.340
Das ist schon die erste Konvention, dass ich einen Befehl vielleicht mit minus

00:25:52.340 --> 00:25:57.040
minus help aufrufen können soll, weil die Leute einfach implizit davon ausgehen, dass das geht.

00:26:00.580 --> 00:26:05.600
Sagst du nochmal kurz was, also so einfach so, ich glaube so intuitiv wissen

00:26:05.600 --> 00:26:09.280
wir das schon, aber was ist der Unterschied zwischen Flags und Argumenten also

00:26:09.280 --> 00:26:10.840
wo unterscheiden die sich,

00:26:12.200 --> 00:26:15.860
genau also die Konvention ist eigentlich, dass,

00:26:17.280 --> 00:26:23.600
Flags sind häufig mit minus minus Name konnotiert können dann noch einen Wert

00:26:23.600 --> 00:26:26.340
haben, vielleicht auch nicht, dann ist es einfach ein Boolean Flag,

00:26:27.940 --> 00:26:30.840
sind häufig Häufig, vielleicht auch nicht immer, das ist wie gesagt,

00:26:30.960 --> 00:26:33.920
Konventionen kann man sich dran halten, muss man nicht, sind häufig optional.

00:26:34.420 --> 00:26:36.920
Argumente sind dann nur durch ihre Positionen,

00:26:38.733 --> 00:26:43.193
identifiziert. Okay, und es gibt aber doch manche Kommandozeilen,

00:26:43.273 --> 00:26:45.513
also ich sag jetzt mal so FFmpeg, glaube ich.

00:26:45.553 --> 00:26:49.953
Also das ist ja so ein totales Kommandozeilen-Interface-Monster.

00:26:50.213 --> 00:26:50.693
Ja.

00:26:52.493 --> 00:26:57.773
Hat das nicht auch noch einfach nur Bindestrich I für Input oder so?

00:26:57.853 --> 00:27:00.193
Und dann gibt man danach den Wert.

00:27:00.473 --> 00:27:03.233
Also das ist dann sozusagen einfach nur eine andere Konvention,

00:27:03.233 --> 00:27:08.553
dass man die Argumente, dann kann man quasi die Reihenfolge der Argumente wahrscheinlich auch ändern.

00:27:09.093 --> 00:27:11.713
Genau, das ist auch eine Konvention, dass du bei.

00:27:13.893 --> 00:27:17.053
Flags irgendeine Art von Shorthand angeben kannst.

00:27:17.213 --> 00:27:24.173
Also ganz häufig hast du es so, du hast irgendwie minus minus Input und weil

00:27:24.173 --> 00:27:28.313
Entwickler ja tendenziell faule Leute sind und sich jeden Tastaturanschlag gerne

00:27:28.313 --> 00:27:31.233
sparen möchten, gibt es dann minus i als Kurzform dafür.

00:27:32.533 --> 00:27:35.353
Das ist, wie gesagt, sagt die Konvention.

00:27:36.893 --> 00:27:41.393
Gerade auch für Dev-Dependencies zu installieren, minus D. Stimmt.

00:27:42.393 --> 00:27:45.253
Ja, und da musst du wieder mal aufpassen, minus Groß-D, minus Klein-D.

00:27:47.233 --> 00:27:51.133
Ja, da habe ich aber noch nicht rausgefunden,

00:27:51.893 --> 00:27:54.773
zumindest wäre es für mich nicht intuitiv gewesen, sondern diese Sachen habe

00:27:54.773 --> 00:27:58.673
ich mir dann irgendwann einfach auswendig gemerkt, gerade wenn ich mal umher

00:27:58.673 --> 00:28:03.133
hüpfe zwischen NPM und Jan, dann drücke ich oder schreibe ich erst mal fünfmal

00:28:03.133 --> 00:28:05.913
hintereinander das Falsche, bis ich dann dann wieder das richtige Kürzel schreibe.

00:28:05.913 --> 00:28:10.573
Gerade glaube ich, dass es bei npm install ist und bei yarn ist es add für den Package.

00:28:12.453 --> 00:28:16.473
Aber ich war mir tatsächlich auch immer so ein bisschen unsicher,

00:28:16.513 --> 00:28:21.993
darf ich die Flags mit minus minus überall hinsetzen oder nicht?

00:28:22.773 --> 00:28:23.873
Meistens hat es geklappt.

00:28:25.813 --> 00:28:26.553
Manchmal nicht.

00:28:28.363 --> 00:28:34.703
Aber inwiefern? Also wo hast du den Gedanken, dass du sie vielleicht nicht setzen könntest?

00:28:35.543 --> 00:28:39.283
Je komplizierter zum Beispiel auch die Skripte werden. Also du kannst ja zum

00:28:39.283 --> 00:28:43.043
Beispiel, wenn du jetzt, nehmen wir mal Webpack her,

00:28:43.243 --> 00:28:46.843
wenn du jetzt Webpack installiert hast, dann kannst du ja mit NPM oder mit YARN

00:28:46.843 --> 00:28:50.083
mit den festgelegten Skripten, die du vielleicht auch in der Package-Log jetzt

00:28:50.083 --> 00:28:52.923
hinterlegt hast, also Package-JSON, also jetzt sehr Frontend-lastig,

00:28:52.963 --> 00:28:55.583
die YARN- oder NPM-Skripte ausführen.

00:28:56.143 --> 00:29:01.223
Aber du kannst ja stattdessen auch einfach Node ausführen und sagst dann eben

00:29:01.223 --> 00:29:10.203
Node und dann suchen wir bei Node Modules bin Webpack irgendwie die Datei raus

00:29:10.203 --> 00:29:11.843
und dann führen wir das folgende aus.

00:29:11.843 --> 00:29:18.203
Das habe ich hin und wieder gemacht, wenn ich dann zum Beispiel mir die Memory

00:29:18.203 --> 00:29:23.523
Leaks oder Ähnliches anschauen möchte oder ich möchte generell den Verbrauch davon anschauen.

00:29:23.563 --> 00:29:26.823
Das heißt, ich verbinde ja sozusagen jetzt ein Node-Skript mit einem Webpack-Skript

00:29:26.823 --> 00:29:31.303
und dann war das, ich habe ja jetzt Flags für, wie ich Node ausführen möchte

00:29:31.303 --> 00:29:36.023
und ich habe Flags dafür für Webpack selber und dann war ich mir,

00:29:36.143 --> 00:29:38.143
dann, dann, dann, dann, genau. Genau.

00:29:40.183 --> 00:29:43.883
Das verkompliziert die Sache dann noch so ein bisschen. Also gerade so bei den

00:29:43.883 --> 00:29:48.263
Interpretersprachen, so wie Node.js, wo du dann noch Flags an den Interpreter

00:29:48.263 --> 00:29:50.283
wieder mitgeben kannst, der ja quasi dann sein ...

00:29:51.223 --> 00:29:55.563
Genau, das war jetzt, dass ein Fachwörter erklärt, was ich sagen wollte.

00:29:56.963 --> 00:30:00.403
Das müsste man einfach eskalieren mit noch mehr Bindestrichen.

00:30:02.863 --> 00:30:07.083
Der Interpreter, der kriegt dann drei Bindestriche und das Betriebssystem wiederum

00:30:07.083 --> 00:30:09.463
kriegt vier. das da drunter liegt.

00:30:10.872 --> 00:30:13.652
Ja, aber dann im Endeffekt sind es halt, wie gesagt, Conventions.

00:30:13.712 --> 00:30:17.152
Ich glaube, bei NPM und YARN zum Beispiel installiere ich Packages jeweils so

00:30:17.152 --> 00:30:19.172
ein bisschen anders. Einmal ist es Add, einmal ist es Install.

00:30:19.672 --> 00:30:24.152
Bei NPM geht es, das weiß ich fast hundertprozentig, geht auch einfach nur I.

00:30:24.892 --> 00:30:28.412
Ich habe jetzt noch nie versucht, YARN A zu schreiben für YARN Add.

00:30:29.232 --> 00:30:35.532
Im Endeffekt habe ich dann auch sehr oft mir einfach in meinem OhMyZSH mir die Aliases angelegt.

00:30:35.572 --> 00:30:37.992
Von daher komme ich dann auf einem anderen Terminal nicht mehr klar,

00:30:38.072 --> 00:30:41.372
weil ich meinen Branch nicht mehr so auschecken kann, wie ich das gewohnt bin.

00:30:41.572 --> 00:30:43.972
Dann geht GCO auf einmal gar nicht mehr.

00:30:47.972 --> 00:30:51.692
Ohne diese OhMyZSH-Git-Aliase könnte ich auch nicht mehr leben.

00:30:52.552 --> 00:30:59.552
Ja, ohne ... Ich habe tatsächlich meinen Laptop so clean wie möglich eingestellt.

00:30:59.592 --> 00:31:03.252
Wir hatten ja auch gerade in der letzten Revision, war das glaube ich,

00:31:03.272 --> 00:31:06.532
erst darüber gesprochen, welche Tools wir alle so benutzen und etc.

00:31:07.852 --> 00:31:12.372
Und ich versuche eigentlich tatsächlich so wenig wie möglich zu benutzen oder

00:31:12.372 --> 00:31:15.372
es so selber einzustellen und ich weiß, man kann alles in irgendeine Cloud und

00:31:15.372 --> 00:31:17.692
Backup hochladen, aber ich will immer in der Lage sein,

00:31:17.792 --> 00:31:20.532
egal mit welchem Laptop man mir gerade hinstellt, einfach arbeiten zu können

00:31:20.532 --> 00:31:24.372
oder auch andersherum, sodass die größte Hürde vielleicht einfach nur,

00:31:24.452 --> 00:31:27.832
es ist ein deutsches Tastatur-Layout oder ein englisches Tastatur-Layout ist.

00:31:27.832 --> 00:31:31.512
Aber was ich immer machen muss, auch wenn ich mich dann auch irgendwie auf eine

00:31:31.512 --> 00:31:36.792
Ubuntu-Maschine oder sowas einlogge, ich muss mir irgendwie dann Terminal und ohmyzsh installieren.

00:31:37.032 --> 00:31:40.572
Also ich komme mit meinem Standard-Terminal so bedingt weit,

00:31:40.752 --> 00:31:42.292
aber irgendwann macht das keinen Sinn mehr.

00:31:42.572 --> 00:31:44.772
So brew und ohmyzsh muss da drauf.

00:31:45.112 --> 00:31:48.432
Ansonsten ist es egal. Ach genau, was ich gerade noch sagen wollte,

00:31:48.552 --> 00:31:54.692
und sehr oft geht sowas wie "-help", oder "-list", beziehungsweise sehr oft

00:31:54.692 --> 00:31:58.032
geht "-h", oder "-h", dann komme ich aber auch schon wieder durcheinander,

00:31:58.132 --> 00:32:02.092
und "-l", für Liste, aber manchmal geht nur die lange Form, und das hat natürlich

00:32:02.092 --> 00:32:07.992
jetzt nichts mit der Programmiersprache zu tun, sondern wie wurde es konfiguriert,

00:32:08.012 --> 00:32:11.532
und das ist ja jetzt quasi die Richtung User Experience. Ja, genau.

00:32:12.690 --> 00:32:14.810
Wir sind ja bei den Frameworks so ein bisschen da hingekommen.

00:32:15.210 --> 00:32:16.450
Genau, ich wollte grad sagen, die

00:32:16.450 --> 00:32:20.630
bringen ja dann sozusagen einen Serviervorschlag mit, vermute ich, oder?

00:32:21.370 --> 00:32:25.530
Genau, und sie nehmen dir halt auch diese ganze Verarbeitung deiner Flags und

00:32:25.530 --> 00:32:29.190
Argumente irgendwie ab. Weil ansonsten ... Ist ein bisschen Brandwerk.

00:32:30.730 --> 00:32:34.350
Genau, stell dir vor, du hast irgendwie ein ultrakompliziertes Kommando,

00:32:34.370 --> 00:32:37.550
da kommen dann irgendwie zwölf Flags mit rein, von denen irgendwie noch manche

00:32:37.550 --> 00:32:38.610
Werte haben und manche nicht.

00:32:39.250 --> 00:32:43.570
Und dann wiederholen sich manche von denen noch und dann irgendwie noch drei

00:32:43.570 --> 00:32:46.130
Numere für Argumente irgendwie dahinter.

00:32:46.710 --> 00:32:49.570
Stimmt, und manche können sich ja quasi widersprechen. Ja, genau.

00:32:49.770 --> 00:32:55.670
So, run in, also parallel, also parallel abladen, oder Max Workers,

00:32:55.990 --> 00:32:59.590
vier, aber bitteschön run in band. So, was denn jetzt?

00:33:00.110 --> 00:33:02.930
Genau. Ach stimmt, da kommen ja auch Fehlermeldungen zurück.

00:33:02.990 --> 00:33:04.210
Die muss ja auch irgendjemand schreiben.

00:33:04.670 --> 00:33:07.590
Die muss auch jemand schreiben. Ja, habe ich ja noch nie drüber nachgedacht.

00:33:07.590 --> 00:33:08.490
Das hat immer einfach funktioniert.

00:33:09.230 --> 00:33:13.970
Das sind aber alles Sachen, für die diese Frameworks dann gut sind. Ja, nee, klingt super.

00:33:14.190 --> 00:33:16.270
Weil wenn du jetzt einfach ein ganz billiges Node.js-Programm schreibst oder

00:33:16.270 --> 00:33:19.650
Java-Programm oder keine Ahnung was, dann kriegst du halt dein String-Array,

00:33:19.650 --> 00:33:20.570
da ist irgendwie alles drin.

00:33:21.250 --> 00:33:24.390
Und dann, herzlichen Glückwunsch, du darfst das jetzt alles selber verarbeiten.

00:33:25.650 --> 00:33:29.450
Ja, nee, nee, ich erinnere, wie gesagt, es ist wirklich kein Vergleich bestimmt

00:33:29.450 --> 00:33:31.530
zu dem, was du an Erfahrung schon sammeln konntest.

00:33:31.590 --> 00:33:34.110
Aber bei den kleinen Plop-Files, die ich geschrieben hab, damit ich mir halt

00:33:34.110 --> 00:33:38.090
auch mal solche Skeletonsachen erstellen kann kann für,

00:33:38.210 --> 00:33:41.490
wir haben das relativ oft im Einsatz für API-Requests erstellen,

00:33:41.590 --> 00:33:44.850
also ob das ein Get- oder Post-Request ist, und da hatte ich halt so ein bisschen

00:33:44.850 --> 00:33:48.210
so ein, damit ich halt mal möglichst,

00:33:48.390 --> 00:33:52.670
ohne selber viel zu tippen, so ein Fetch-Request mir printen kann mit Payload

00:33:52.670 --> 00:33:57.190
und Headern und Query-Parametern vielleicht,

00:33:57.510 --> 00:33:59.770
und da ist mir dann auch aufgefallen, eigentlich müsste ich jetzt schauen,

00:33:59.830 --> 00:34:03.550
ob das mit der richtigen Syntax kommt, ob da Leerzeichen dazwischen sind,

00:34:03.670 --> 00:34:04.630
die muss ich dann trimmen.

00:34:05.710 --> 00:34:09.130
Ja, dann ist mir aufgefallen, auch für die Kommandozeile gibt es ganz schön

00:34:09.130 --> 00:34:11.810
viele Edge Cases zu berücksichtigen.

00:34:13.960 --> 00:34:20.560
Ja, es ist am Ende des Tages genauso wie im Web auch, wenn du einen Form-Input validieren willst.

00:34:21.940 --> 00:34:25.760
Es ist User-Input, wenn da ein Input reinkommt,

00:34:27.680 --> 00:34:30.740
der nicht dem entspricht, was du erwartest, dann hast du auf der CLI natürlich

00:34:30.740 --> 00:34:34.900
genauso die Herausforderung, das dem User irgendwie ansprechend zu präsentieren

00:34:34.900 --> 00:34:40.820
und ihm auch klarzumachen, was jetzt der erwartete Input war und was du falsch gemacht hast. Mhm.

00:34:42.180 --> 00:34:46.740
Das ist ja im Web genauso frustrierend. Du hast irgendwie ein Riesenformular

00:34:46.740 --> 00:34:49.560
mit zwölf verschiedenen Feldern und gibst alles ein und am Ende kommt einfach

00:34:49.560 --> 00:34:52.280
nur, Eingabe ist ungültig, aber ich sag dir nicht wo.

00:34:55.340 --> 00:34:58.880
Vermutlich gehören dann auch solche Sachen dazu, dass man eine Default-Antwort

00:34:58.880 --> 00:35:03.240
geben kann, wie Yes or No, dass wenn ich einfach nur Enter drücke,

00:35:03.380 --> 00:35:05.940
dass eins von den beiden schon der Default ist.

00:35:06.460 --> 00:35:08.900
Weil das auch gefährlich sein kann, wenn Yes dann der Default ist.

00:35:10.160 --> 00:35:14.480
Ja. Wollen sie wirklich alles löffnen? Ja, Enter O. Ups. Klar.

00:35:15.620 --> 00:35:21.560
Ich bin ja immer noch dankbar, dass das RM, wenn man es mit minus R auf Slash

00:35:21.560 --> 00:35:25.140
aufruft, noch irgendwie dreimal nachfragt, ob du wirklich sicher bist,

00:35:25.280 --> 00:35:26.800
dass man das wirklich will.

00:35:26.940 --> 00:35:31.360
Also das hat mir schon mindestens einmal die Root-Partition gerettet.

00:35:35.280 --> 00:35:39.960
Ich weiß gar nicht, hast du schon Framework-Namen genannt? Was würde ich jetzt googeln?

00:35:40.780 --> 00:35:44.700
ChatGPT oder was auch immer. Was würde ich jetzt suchen, wenn ich damit starten

00:35:44.700 --> 00:35:45.620
möchte mit einem Framework?

00:35:46.600 --> 00:35:51.980
Ich würde generell googeln nach Name der Programmiersprache deiner Wahl und

00:35:51.980 --> 00:35:53.540
dann das hierleine Framework.

00:35:55.040 --> 00:36:00.380
Da gibt's eigentlich fast für jede von den Mainstream-Programmiersprachen so

00:36:00.380 --> 00:36:05.780
mindestens zwei, drei solide Frameworks, die das alles abnehmen.

00:36:06.840 --> 00:36:13.180
Wir was gibt's denn da so bei ich komm so hauptsächlich aus der Go-Welt,

00:36:13.200 --> 00:36:17.940
da ist Cobra zum Beispiel ganz groß unterwegs die Kubernetes-User kennen das

00:36:17.940 --> 00:36:19.920
wahrscheinlich weil kubectl halt da mitgebaut ist,

00:36:21.140 --> 00:36:26.960
dann im in der PHP-Welt gibt's die Symfony-Konsole Python hat Click,

00:36:28.320 --> 00:36:32.660
und so in der JavaScript-Welt also was ich bisher Commander gibt es,

00:36:32.760 --> 00:36:34.700
so in der JavaScript-Welt,

00:36:35.520 --> 00:36:40.620
Was ich mittlerweile eigentlich am liebsten habe, gerade so in der JavaScript-

00:36:40.620 --> 00:36:45.460
oder TypeScript-Welt eigentlich eher, also ich muss mich jetzt kurz outen,

00:36:45.460 --> 00:36:48.340
ich mache eigentlich so gut wie gar kein JavaScript, ich mache nur TypeScript.

00:36:49.780 --> 00:36:52.620
Gerade so in der TypeScript-Welt hat mir Oakcliffe eigentlich sehr gut gefallen

00:36:52.620 --> 00:36:55.580
oder O-C-L-I-F oder ich weiß bis heute nicht, wie man es ausspricht.

00:36:55.920 --> 00:37:00.220
Also das OpenCLI-Framework heißt es in voller Länge.

00:37:03.000 --> 00:37:07.960
Genau, das ist, das hat damals Ich muss aufpassen, dass ich jetzt nichts Falsches

00:37:07.960 --> 00:37:11.220
erzähle Ich glaub Heroku haben das gestartet und damals dann Open Source.

00:37:15.301 --> 00:37:22.101
Das dürfte dann wahrscheinlich auch das Framework sein, auf das unsere Hörerinnen

00:37:22.101 --> 00:37:25.561
am schärfsten sind, unterstelle ich jetzt einfach mal.

00:37:26.881 --> 00:37:29.801
Zumindest bin es ich, sagt man es einfach so. Genau.

00:37:29.921 --> 00:37:33.321
Also andere Programmiersprachen programmieren die höchstwahrscheinlich auch,

00:37:33.501 --> 00:37:37.901
aber ich glaube, das meiste dreht sich ja dann doch um diese Geschichten.

00:37:38.141 --> 00:37:41.441
Wir haben uns bei Midway dann tatsächlich auch für Oakleaf entschieden,

00:37:41.601 --> 00:37:47.241
genau weil es halt TypeScript ist Und wir dann letztendlich gesagt haben, okay,

00:37:47.421 --> 00:37:52.381
die CLI ist für uns halt quasi auch eine Variante von Frontend,

00:37:52.501 --> 00:37:55.721
so halt Web-Frontend und CLI-Frontend.

00:37:56.701 --> 00:38:00.381
Und die Weiterentwicklung davon liegt dann in den einzelnen Entwicklungsteams,

00:38:00.401 --> 00:38:04.101
die dafür verantwortlich sind, ein bestimmtes Teilprodukt jetzt irgendwie voranzutreiben.

00:38:04.101 --> 00:38:08.821
Deswegen war so das vorhandene JavaScript, TypeScript-Know-how in unseren Entwicklungsteams,

00:38:08.881 --> 00:38:12.941
die dann halt auch viel Frontend, klassische Web-Frontend-Development machen.

00:38:13.681 --> 00:38:15.961
Jetzt muss ich mich aufpassen, dass ich mich nicht mit der Frontend-Entwicklung

00:38:15.961 --> 00:38:20.561
verzettel, so CLI-Frontend, Web-Frontend und so, weil das Know-how halt da war.

00:38:21.461 --> 00:38:23.001
Das war jetzt keine neue Technologie.

00:38:24.681 --> 00:38:27.321
Wir mussten jetzt nicht Entwicklungsteams, die gewohnt waren,

00:38:27.421 --> 00:38:30.961
ausschließlich mit TypeScript zu arbeiten,

00:38:31.121 --> 00:38:34.081
weil sie im Backend halt auch mit TypeScript arbeiten, Dann jetzt noch zu sagen,

00:38:34.141 --> 00:38:37.821
ihr herzlichen Glückwunsch, ihr ist dieses Go-Ding, jetzt dürft ihr noch Go

00:38:37.821 --> 00:38:41.601
lernen oder Python oder Rust oder keine Ahnung was.

00:38:43.047 --> 00:38:49.847
Ja, und ich vermute, dass die EntwicklerInnen dann auch Codesharing betreiben

00:38:49.847 --> 00:38:55.687
können, wahrscheinlich zwischen den Web-Interface-gesteuerten Dingen und eben

00:38:55.687 --> 00:38:57.487
den Kommandozeilen-gesteuerten Dingen.

00:38:59.447 --> 00:39:07.087
Das ist tatsächlich so, genau. Also wir haben für unsere API eine Client-Bibliothek,

00:39:07.087 --> 00:39:11.207
die ist weitgehend einfach automatisch generiert aus einer Open-API-Spec,

00:39:11.247 --> 00:39:12.767
die kannst du per NPM installieren.

00:39:13.047 --> 00:39:16.767
Und die wird tatsächlich im Web-Frontend und auch von der CLI genutzt.

00:39:16.847 --> 00:39:19.567
Das ist sehr, sehr praktisch. Und dann hast du so die größten Teile.

00:39:22.787 --> 00:39:28.027
Okay. Also dann hast du schon sehr, sehr viel geshared zwischen den zwei Komponenten.

00:39:29.827 --> 00:39:33.567
Und du hast ja gerade gesagt, du benutzt TypeScript.

00:39:33.687 --> 00:39:39.707
Und in den Shownotes hast du native TypeScript-Unterstützung geschrieben bei

00:39:39.707 --> 00:39:44.247
diesem Framework. Das bedeutet aber letztendlich, also das wird am Ende auch

00:39:44.247 --> 00:39:46.347
einfach kompiliert, oder?

00:39:47.067 --> 00:39:49.327
Genau, es wird am Ende kompiliert.

00:39:50.667 --> 00:39:54.667
Was ich damit meinte ist, du hast bei OakLift die Möglichkeit,

00:39:55.047 --> 00:39:56.927
Commands zu definieren.

00:39:56.967 --> 00:39:59.007
Jedes Command ist dann am Ende eine TypeScript-Klasse.

00:40:00.347 --> 00:40:05.927
Und du definierst in der Klasse zum Beispiel, welche Flags nimmt dieses Command entgegen.

00:40:06.587 --> 00:40:12.847
Also zum Beispiel, du willst einen Minus-Minus-Input-Flag haben und das muss

00:40:12.847 --> 00:40:14.447
auf jeden Fall ein String sein.

00:40:16.047 --> 00:40:21.267
Dann macht Oakcliffe irgendeine sehr, sehr abgefahrene Typing-Magic,

00:40:21.267 --> 00:40:26.147
von der ich lügen würde, wenn ich behaupten würde, sie vollends durchblickt zu haben.

00:40:28.184 --> 00:40:31.924
Auf jeden Fall kriegt der Compiler das mit, dass es dieses Flag gibt und welchen,

00:40:32.424 --> 00:40:33.504
Datentyp dieses Flag hat.

00:40:33.904 --> 00:40:39.064
Und wenn du dann am Ende vorher als String definiertes Flag als Integer versuchst

00:40:39.064 --> 00:40:44.024
zu behandeln, dann schreit der Compiler dich halt an, wie du es von TypeScript kennst und liebst.

00:40:45.644 --> 00:40:52.824
Ja, macht auf jeden Fall Sinn. Genau, und du hast gesagt, jedes, also für jedes,

00:40:55.244 --> 00:40:59.364
Command, Subcommand letztlich, also Also, weiß ich nicht, sowas wie,

00:40:59.404 --> 00:41:02.924
was Vanessa gerade meinte, List oder sowas.

00:41:03.884 --> 00:41:08.644
Schreibst du, hast du gesagt, eine Klasse pro Subcommand? Eine Klasse pro Subcommand, genau.

00:41:09.984 --> 00:41:16.264
Genau, das wird dann auch auf jeden Fall gut aufgeräumt und gut durchstrukturiert.

00:41:19.224 --> 00:41:22.284
Ich würde fast noch ein bisschen mehr in die Designrichtung fragen.

00:41:22.924 --> 00:41:27.104
Also, wir hatten jetzt sehr viel mit Inputs.

00:41:28.784 --> 00:41:32.364
Aber jetzt, es fällt mir ein bisschen schwierig zu fragen, weil ich ja die Tools

00:41:32.364 --> 00:41:34.544
jetzt nicht so wirklich ausgiebig benutze.

00:41:34.984 --> 00:41:38.764
Aber was ich weiß, und das weiß ich ja eben auch von diesen Wetterdingens,

00:41:38.784 --> 00:41:42.604
das ich da mal gefunden hatte, manchmal kommt da nicht nur eine Antwort,

00:41:42.664 --> 00:41:45.664
die einfach so aus dem Satz besteht, sondern manchmal kommen da so Antworten,

00:41:45.664 --> 00:41:47.904
wie auch so mit Tabellen oder mit Farben.

00:41:49.424 --> 00:41:54.604
Wie schwierig ist das denn alles? Und hat da das Framework auch schon Hilfen dafür?

00:41:54.764 --> 00:41:58.604
Oder ist das dann selbst dabei? Oder gibt es da so Frameworks auf Frameworks?

00:41:58.624 --> 00:42:00.324
Kann ich mir da noch Libraries reinziehen?

00:42:00.424 --> 00:42:03.144
Wie funktioniert das denn? Ja, also das geht alles.

00:42:04.204 --> 00:42:09.304
Also Oakleaf zum Beispiel bietet, bringt Helper-Funktionen für so die wichtigsten Sachen mit.

00:42:11.152 --> 00:42:15.292
Daten tabellarisch ausgeben zum Beispiel. Das habe ich auch bei Test-Coverages

00:42:15.292 --> 00:42:17.872
und so was. Kommt ja irgendwie zu Tabellen. Genau.

00:42:18.872 --> 00:42:22.752
Oakleaf ist zum Beispiel sogar schon intelligent genug, wenn du jetzt eine Tabelle

00:42:22.752 --> 00:42:25.852
ausgibst über das Framework, sich auch automatisch an die Terminal-Breite anzupassen.

00:42:27.412 --> 00:42:34.632
Wow, das ist ja wie Breakpoints. Ja. Responsive Design. Geht das mit Table?

00:42:35.692 --> 00:42:37.252
Responsive CLI-Design, mega.

00:42:40.512 --> 00:42:47.832
Ja, das geht, das geht. Also du kannst über so ein bisschen TTY-Magic,

00:42:47.832 --> 00:42:51.752
kannst du die Breite des Terminals abfragen und dann darauf deinen Output anpassen.

00:42:51.892 --> 00:42:53.532
Das funktioniert tatsächlich.

00:42:54.232 --> 00:42:58.312
Vermutlich dann ohne Observer, dass wenn ich das resize, es sich nicht automatisch anfasst.

00:42:58.632 --> 00:43:02.972
Ja, genau. Du hast ja sowieso meistens, ja, kommt drauf an, du hast ja sowieso

00:43:02.972 --> 00:43:07.032
ganz häufig keine jetzt ständig laufende Anwendung, sondern du hast da einen

00:43:07.032 --> 00:43:11.832
Befehl, führst den aus, der printet dir dann seinen Output aufs Terminal und

00:43:11.832 --> 00:43:12.752
dann ist das Programm zu Ende.

00:43:13.232 --> 00:43:16.992
Es gibt natürlich auch diese CLIs, die quasi kontinuierlich laufen,

00:43:17.112 --> 00:43:20.372
die dann wirklich interaktiv Nutzer-Input verarbeiten.

00:43:22.172 --> 00:43:26.652
Die gibt es auch. Da bin ich so ein bisschen zwiegespaltener Meinung,

00:43:26.792 --> 00:43:29.992
weil das natürlich so mit Scripting überhaupt nicht funktioniert.

00:43:30.152 --> 00:43:36.072
Also wenn du jetzt so eine CLI irgendwie in einem Skript verwenden möchtest

00:43:36.072 --> 00:43:39.692
und das Ding reagiert nur auf interaktiven Input und läuft dann quasi kontinuierlich,

00:43:39.712 --> 00:43:43.052
das ist ein bisschen schwierig miteinander vereinbar.

00:43:43.892 --> 00:43:47.612
Hat man ja auch meistens eher nicht. Ja, genau.

00:43:49.079 --> 00:43:58.419
Genau, und dann, das Oakcliffe bietet dann auch ein, oder hat auch eine Paketierung

00:43:58.419 --> 00:44:01.239
mit integriert, korrekt?

00:44:01.259 --> 00:44:05.279
Also das wäre dann wahrscheinlich das, was du meintest, dass man dann vielleicht

00:44:05.279 --> 00:44:08.759
die Node-Runtime mit da rein bundelt oder so was?

00:44:09.459 --> 00:44:13.079
Genau, das macht er sehr, sehr komfortabel. Also das ist dann am Ende ein ...

00:44:14.299 --> 00:44:16.619
Oakcliffe nimmt das auch mit dem Dogfooding sehr, sehr ernst.

00:44:17.159 --> 00:44:23.279
Das heißt, wir bieten auch selber für das Bauen von CLI-Anwendungen eine eigene CLI-Anwendung.

00:44:24.499 --> 00:44:28.359
So ein bisschen CLI-ception, die da an den Tag gelegt wird.

00:44:29.179 --> 00:44:33.039
Die Oakcliffe CLI selber, die bietet dann auch tatsächlich sehr,

00:44:33.099 --> 00:44:35.479
sehr gute Werkzeuge, um diese ganze Paketierung zu übernehmen.

00:44:36.579 --> 00:44:42.259
Das heißt, du kriegst automatisch Pakete für Windows, Linux und Mac.

00:44:42.939 --> 00:44:46.999
Kriegst auch einen, für Windows kriegst du auch einen, tatsächlich einen richtigen

00:44:46.999 --> 00:44:48.239
Installer, wenn du es möchtest.

00:44:49.099 --> 00:44:52.959
Ja, so ein MSI-Ding, was man dann irgendwie ausführen kann.

00:44:54.039 --> 00:44:58.479
Ja, weil gerade unter Windows, da möchtest du nicht irgendeinen Tarball entpacken,

00:44:58.479 --> 00:45:00.839
also entpack unter Windows erstmal eine Tarball, da fängt es ja schon an.

00:45:01.999 --> 00:45:05.079
Du willst da nicht irgendeinen Tarball entpacken und den dann von Hand irgendwo

00:45:05.079 --> 00:45:08.079
in den Path reinwerfen, das ist halt ein Problem.

00:45:09.279 --> 00:45:13.259
Da ist so ein richtiger Installer halt schon ganz cool und das bietet Oakleaf

00:45:13.259 --> 00:45:14.179
halt alles out of the box.

00:45:15.399 --> 00:45:19.359
Für MacOS kriegst du auch eine PKG-Datei, die du dann auch direkt installieren kannst.

00:45:22.069 --> 00:45:25.369
Wobei, da muss ich dazu, also da solltest du dann auch das Apple Developer Certificate

00:45:25.369 --> 00:45:28.129
haben, damit du den Kram dann auch signieren kannst, weil sonst schreit macOS

00:45:28.129 --> 00:45:30.989
beim Installieren dich halt an. Ja, Klassiker.

00:45:32.229 --> 00:45:32.709
Klassiker.

00:45:34.069 --> 00:45:39.749
Genau, und dann bieten die auch, wenn ich das hier richtig verstehe,

00:45:39.889 --> 00:45:43.709
auch ein Update-Mechanismus, wie du,

00:45:43.949 --> 00:45:48.269
also das, ich verstehe das so, dass du dann sozusagen ein Auto-Update-Mechanismus

00:45:48.269 --> 00:45:52.089
hast, wo du dann Updates pushen kannst, zu den Usern, richtig?

00:45:52.669 --> 00:45:55.309
Das geht auch. Das ist bei Oakleaf ein Plugin.

00:45:56.469 --> 00:46:00.649
Das funktioniert dann quasi so, also du puffst es nicht wirklich,

00:46:00.829 --> 00:46:03.489
das Plugin checkt quasi irgendwie so in,

00:46:04.769 --> 00:46:07.629
regulären oder irregulären Abständen, das müsste ich in der Readme jetzt nochmal

00:46:07.629 --> 00:46:12.689
genau nachlesen, ob es quasi eine neuere Version von sich selbst gibt und dann

00:46:12.689 --> 00:46:15.109
kann er sich selber updaten. Das funktioniert.

00:46:15.429 --> 00:46:20.729
Du musst dafür die diese Distribution Starballs musst du dafür irgendwie in

00:46:20.729 --> 00:46:24.669
einen AWS S3 Bucket oder sowas pushen.

00:46:24.689 --> 00:46:30.689
Oder halt irgendwo ins Netz, wo der Updater gucken kann, gibt's jetzt eine neue Version von mir selbst.

00:46:31.509 --> 00:46:37.449
Ja, gut, das macht Sinn. Also, sonst kann das ja schlecht funktionieren,

00:46:37.469 --> 00:46:41.569
wenn man ihm nicht vorab sagt, wo er immer nachgucken muss, an welcher Stelle.

00:46:42.189 --> 00:46:46.009
Genau. Ja. Und so gerade so Updates ausrollen ist halt auch super wichtig bei

00:46:46.009 --> 00:46:51.969
so einer CLI, weil so bei einer Web-Anwendung hat man das Problem nicht,

00:46:52.049 --> 00:46:53.869
weil die wird ja sowieso über den Browser ausgeliefert.

00:46:55.489 --> 00:47:02.069
Und du willst den User jetzt ja auch nicht jedes Mal dazu zwingen,

00:47:02.089 --> 00:47:04.949
jetzt diesen MSI-Installer nochmal wieder neu runterzuladen.

00:47:05.629 --> 00:47:08.029
Vor allem, wie sagst du ihm das, dass er das jetzt tun muss?

00:47:09.349 --> 00:47:11.949
Wenn er nicht von alleine auf die Idee kommt, mal zu gucken,

00:47:12.029 --> 00:47:12.969
hey, gibt's irgendwie ein Update?

00:47:14.369 --> 00:47:17.069
So, bei Desktop-Anwendungen ist das noch so ein bisschen einfacher,

00:47:17.129 --> 00:47:19.729
so die kannst du irgendwie dann zumindest über die üblichen App-Stores oder

00:47:19.729 --> 00:47:23.249
bei Linux irgendwie über die Repos verteilen, so dann kriegst du sie über die

00:47:23.249 --> 00:47:27.349
automatischen Updates irgendwie mit und so irgendeinen Mechanismus,

00:47:27.409 --> 00:47:28.949
um Updates auszurollen, braucht man halt,

00:47:29.049 --> 00:47:33.429
wenn du möchtest, dass deine User irgendwie auf einer, sagen wir mal,

00:47:33.489 --> 00:47:35.389
halbwegs aktuellen Version deiner Software arbeiten.

00:47:38.969 --> 00:47:42.969
Ja. Cool. So, und wenn dir das

00:47:42.969 --> 00:47:48.369
jetzt alles nicht ausreicht, obwohl das ja schon echt mega gut klingt ...

00:47:49.736 --> 00:47:52.956
Dann hast du noch einen Tipp, wie man komplett eskalieren kann,

00:47:53.016 --> 00:47:56.556
korrekt? Wie man komplett, ich glaube, ich weiß, worauf du hinaus willst.

00:47:59.636 --> 00:48:04.176
Dafür würde ich nochmal an Vanessas Frage andocken, die du vorhin gerade gestellt

00:48:04.176 --> 00:48:05.996
hast. Ich bin da so ein bisschen drüber weggegangen.

00:48:06.476 --> 00:48:11.296
Du kannst natürlich in diesen ganzen CLI-Anwendungen noch an Node-Bibliotheken

00:48:11.296 --> 00:48:12.556
nachinstallieren, was man will.

00:48:13.836 --> 00:48:17.136
Wenn du jetzt sagst, dieser Standard-Tabellenhelfer, den Oaklyft zum Beispiel

00:48:17.136 --> 00:48:21.396
anbietet, der reicht mir nicht, weil ich irgendwie was Schickeres haben möchte.

00:48:22.536 --> 00:48:25.636
So Color-Output oder sowas ist im Übrigen überhaupt kein Problem.

00:48:25.796 --> 00:48:28.896
Also da gibt es auch ganz viele Helferfunktionen für, die irgendwie farbigen

00:48:28.896 --> 00:48:31.376
Output auf dem Terminal anbieten.

00:48:31.436 --> 00:48:33.896
Also das ist kein Problem, wobei man da vorsichtig sein muss,

00:48:34.036 --> 00:48:37.716
wieder wenn es jetzt zum Beispiel um Scripting oder sowas geht.

00:48:37.856 --> 00:48:40.696
Also dann braucht man meistens irgendwie einen Mechanismus, um zu gucken,

00:48:40.776 --> 00:48:42.996
laufe ich jetzt gerade in einem Terminal oder laufe ich in einem Script,

00:48:43.116 --> 00:48:46.416
weil dann will ich die ganzen bunten Farben da meistens nicht drin haben.

00:48:46.956 --> 00:48:51.716
Ja, zu Color-Befehle, die sehe ich ja auch hin und wieder bei fast allen Sachen, die ich benutze.

00:48:51.976 --> 00:48:56.136
Was ich aber zum Beispiel selber sehr selten sehe und dementsprechend auch davon

00:48:56.136 --> 00:49:00.516
ausgehe, dass es vielleicht gar nicht so easy ist, wäre, ich habe ja vorher

00:49:00.516 --> 00:49:01.836
schon gesagt, Test-Coverage.

00:49:01.876 --> 00:49:05.936
Und es gibt jetzt so ein paar Skripte, die brauchen so ein bisschen länger, wenn sie laufen.

00:49:05.936 --> 00:49:11.396
Und was ich meistens sehe, ist entweder gar kein Output oder quasi die ganze

00:49:11.396 --> 00:49:17.136
Zeit Prints oder Console Logs, wie auch immer, von was das Skript gerade tut.

00:49:17.376 --> 00:49:20.276
Also so ESLint sagt halt, jetzt mach ich das, jetzt mach ich das,

00:49:20.336 --> 00:49:22.536
jetzt mach ich das, jetzt mach ich das, jetzt mach ich das, jetzt mach ich das. das.

00:49:23.976 --> 00:49:26.176
Und ein paar habe ich gesehen, die machen halt Punkt, Punkt,

00:49:26.196 --> 00:49:29.696
Punkt, Punkt, Punkt, Punkt, dass man weiß, das Terminal ist nicht eingefroren

00:49:29.696 --> 00:49:32.956
und irgendwie wird was kommen. Was Fanzigeres habe ich noch nie gesehen.

00:49:33.296 --> 00:49:38.276
Ich habe auch noch nie gesehen, dass es eine Art Kalender Tagesauswahl gibt.

00:49:38.496 --> 00:49:39.816
Weiß auch nicht, ob das notwendig ist.

00:49:40.196 --> 00:49:44.416
Aber wer ist denn, geht das in die Richtung von Sachen, die man selber bauen

00:49:44.416 --> 00:49:45.936
müsste, selber bauen kann?

00:49:46.476 --> 00:49:52.356
Loading States oder Advanced Input Felder wie wie Dates, Timestamps.

00:49:54.396 --> 00:49:57.576
Genau, das sind alles Sachen, die man selber bauen kann. Oder jetzt gerade,

00:49:57.656 --> 00:50:01.296
wenn es um so eine ... Aber man kann das wirklich tun. Man kann das tun, ja, ja.

00:50:01.876 --> 00:50:05.076
Oder jetzt gerade, also so der einfachste Fall, vielleicht so was gerade wie

00:50:05.076 --> 00:50:08.196
eine Fortschrittsanzeige, die du jetzt gerade genannt hast. Punkt, Punkt, Punkt.

00:50:09.496 --> 00:50:11.816
Ja, also das ist halt so der einfachste Fall.

00:50:13.296 --> 00:50:16.536
Was aber viele Leute vielleicht auch nicht wissen, was man auf einem Terminal

00:50:16.536 --> 00:50:21.176
machen kann, Das ist ja nicht, so ein Terminal ist nicht zu 100% linear.

00:50:21.556 --> 00:50:26.876
Es ist jetzt nicht so, dass du, du bist nicht darauf angewiesen,

00:50:26.916 --> 00:50:30.556
jetzt mal ein Console.log zu machen und das, was dann geprintet wird, steht für immer da.

00:50:31.939 --> 00:50:38.479
Sondern die meisten Terminals unterstützen ja auch sowas wie das Wagenrücklaufzeichen,

00:50:38.559 --> 00:50:42.819
wer sich noch dran erinnert, wo du deinen Cursor wieder zurücksetzen kannst

00:50:42.819 --> 00:50:45.999
und Sachen überschreiben kannst, die du vorher schon aufs Terminal geprintet hast.

00:50:46.739 --> 00:50:49.639
Das heißt, theoretisch, wenn du einen langlaufenden Prozess hast,

00:50:49.739 --> 00:50:53.819
könntest du sagen, ich gebe jetzt meine Fortschrittsanzeige aus,

00:50:53.899 --> 00:51:00.119
so als Text-Äquivalent der Progress-Bar, wie man sie aus der GUI auch kennt.

00:51:01.119 --> 00:51:03.679
Und wenn ich dann einen Progress habe, dann kann man auch so bei Docker starten,

00:51:03.699 --> 00:51:07.939
wenn dann schon steht 10%, 50%. Ja, genau, Docker macht das genauso, genau.

00:51:08.399 --> 00:51:12.419
Und dann setze ich halt die Zeile in dem Terminal einfach zurück und gebe eine

00:51:12.419 --> 00:51:13.839
geupdatete Progress-Bar wieder aus.

00:51:15.179 --> 00:51:20.299
Das kann man mit diesen ganzen einfachen Terminal-Steuerzeichen natürlich selber

00:51:20.299 --> 00:51:23.579
bauen, aber auch da gibt es Bibliotheken für, die halt genau das machen.

00:51:24.679 --> 00:51:32.419
Und ich glaube, das ist jetzt auch die Überleitung wo du vorhin drauf hinaus wolltest.

00:51:33.219 --> 00:51:36.259
Wir haben dann irgendwann, ich konnte dann irgendwann selber meinen Augen nicht

00:51:36.259 --> 00:51:37.699
so ganz trauen, als ich das gesehen habe.

00:51:39.459 --> 00:51:43.159
Es gibt tatsächlich Node.js-Bibliotheken, die es dir erlauben,

00:51:43.159 --> 00:51:45.419
auf der Kommandozeile mit React zu arbeiten.

00:51:47.419 --> 00:51:51.719
Holy shit. Hat mich selber überrascht, als ich es gesehen habe.

00:51:52.499 --> 00:51:55.499
Also für die Leute, die dann nach Google wollen, Ink heißt das Projekt.

00:51:57.279 --> 00:52:03.439
Das das erlaubt es dir tatsächlich React-Komponenten so mehr oder minder,

00:52:03.519 --> 00:52:08.979
wie du sie aus dem Web halt auch kennst, für Konsolenanwendungen zu definieren.

00:52:10.319 --> 00:52:14.299
Natürlich mit ein paar Einschränkungen. Also HTML funktioniert auf der Konsole halt nicht.

00:52:14.399 --> 00:52:18.919
Das heißt, du bist darauf angewiesen, so die Komponenten zu verwenden,

00:52:18.919 --> 00:52:20.559
die Ink dann zum Beispiel mitliefert.

00:52:21.379 --> 00:52:24.619
Da gibt es zum Beispiel eine Textkomponente. Die hat dann...

00:52:25.899 --> 00:52:29.399
Die Props, die ich brauche, um irgendwie Text auf der Kommandozeile zu formatieren.

00:52:30.499 --> 00:52:33.979
Farbe und, also da gibt es nicht viele Möglichkeiten, Farbe und Fett,

00:52:33.979 --> 00:52:37.079
ja oder nein. Das ist meistens so das, worauf es sich dann beschränkt.

00:52:37.879 --> 00:52:40.379
So, aber immerhin, das ist halt schon eine Million Mal cooler,

00:52:40.479 --> 00:52:43.759
als sich irgendwie mit diesen Ansi-Escape-Color-Codes auseinandersetzen zu müssen.

00:52:43.859 --> 00:52:47.899
Weil wer das einmal gemacht hat, never again. gern.

00:52:48.359 --> 00:52:55.919
Die Listen hier insgesamt so sechs verschiedene Komponententypen auf, die man nutzen kann.

00:52:55.979 --> 00:52:58.819
So Textbox, Newline, Spacer, Static und Transform.

00:53:00.779 --> 00:53:05.719
Genau. Und intern kann man aber dann eben mit den üblichen, also was so die,

00:53:07.359 --> 00:53:11.219
Programmlogik angeht, kann man ja die üblichen Kniffe benutzen,

00:53:11.259 --> 00:53:13.099
die man so von React kennt.

00:53:13.319 --> 00:53:18.199
Und eben eben UseState, UseEffect und Co.

00:53:18.659 --> 00:53:22.999
Du kannst genauso wie im Web einfach deine eigenen Komponenten definieren,

00:53:23.039 --> 00:53:25.119
so im einfachsten Fall halt irgendeine Function Component.

00:53:26.459 --> 00:53:30.279
Du kannst, ich weiß nicht, ob es irgendwelche Einschränkungen gibt,

00:53:30.379 --> 00:53:34.439
aber ich habe bisher keinen von den üblichen React-Hooks gefunden,

00:53:34.679 --> 00:53:37.199
die du im Web nutzen kannst und unter Ink dann nicht.

00:53:37.419 --> 00:53:40.819
Das heißt, du kannst auch Stateful-Components definieren mit UseState,

00:53:40.879 --> 00:53:42.059
UseEffect, das funktioniert alles.

00:53:42.719 --> 00:53:45.799
Und kriegst da aber dann zum Beispiel auch eine Progress-Bar hin. zum Beispiel.

00:53:45.919 --> 00:53:51.399
Also du könntest dann sagen, du definierst eine Progress-Bar-Komponente,

00:53:51.519 --> 00:53:57.939
wirfst dann als Prop vielleicht den aktuellen Progress als Number oder sowas

00:53:57.939 --> 00:53:59.759
da rein und formatierst das Ding dann entsprechend.

00:54:02.179 --> 00:54:05.439
Und ja, so genau wie mit React im Web auch.

00:54:05.559 --> 00:54:09.779
Wenn du die Komponente aktualisierst mit veränderten Drops, dann rendert sich

00:54:09.779 --> 00:54:14.159
das Ding neu, resettet sich einmal auf dem Terminal und aktualisiert sich dann

00:54:14.159 --> 00:54:15.559
quasi in Place. Vielen Dank.

00:54:17.275 --> 00:54:20.655
Und darüber kriegst du auch komplexe Input-Fields hin.

00:54:23.015 --> 00:54:29.215
Wir haben darüber einen Input-Field zum Beispiel für maskierten Password-Input

00:54:29.215 --> 00:54:31.855
oder sowas gebaut, wie man es aus dem Web halt auch kennt.

00:54:33.555 --> 00:54:35.955
Theoretisch haben wir jetzt nicht gemacht, aber könnte man theoretisch.

00:54:35.955 --> 00:54:40.515
Theoretisch könntest du auch so ein richtig komplexes Passwort-Input-Field bauen,

00:54:40.695 --> 00:54:41.535
der dann irgendwie noch deine,

00:54:42.635 --> 00:54:45.495
wie man es aus dem Web halt auch kennt, der dann deine Passwortstärke irgendwie

00:54:45.495 --> 00:54:50.495
noch mit irgendeinem Stärkebalken oder Color-Codes oder sowas validiert.

00:54:50.635 --> 00:54:52.715
Also die Fantasie ist die Grenze.

00:54:53.815 --> 00:54:57.255
Naja, und halt die Textdarstellung im Terminal. Es muss halt am Ende immer noch

00:54:57.255 --> 00:54:58.555
als Text irgendwie darstellbar sein.

00:54:59.135 --> 00:55:05.135
Ja, also was man so quasi quasi aus den ASCII-Tabellen oder wie auch immer kennt,

00:55:05.395 --> 00:55:07.895
an Zeichen kann man benutzen, oder?

00:55:08.195 --> 00:55:15.795
Genau, wobei dir ja schon die komplette Welt von Unicode zur Verfügung steht. Ja, genau.

00:55:16.695 --> 00:55:19.195
Emojis und so kannst du da auch drauf packen.

00:55:20.235 --> 00:55:24.235
Alleine wie viele Unicode-Zeichen es gibt, um Boxen zu rendern.

00:55:26.215 --> 00:55:30.655
Runde Ecken, eckige Ecken, mit Schatten, ohne Schatten, einfache Linien, doppelte Linien.

00:55:31.935 --> 00:55:35.975
Man kann so eine einfache Box auf dem Terminal auch schon sehr,

00:55:36.035 --> 00:55:38.395
sehr kreativ stylen. Also da gibt es doch schon einige Möglichkeiten.

00:55:39.035 --> 00:55:42.075
Wenn man das will. Man sollte es natürlich auch nicht übertreiben,

00:55:42.135 --> 00:55:44.635
weil irgendwann wird es dann auch auf dem Terminal dann zur Reizüberflutung.

00:55:45.635 --> 00:55:49.855
Ja, genau. Und jetzt nur mal so dahergesponnen. Also man könnte wahrscheinlich

00:55:49.855 --> 00:55:55.755
mit Ink, könnte man damit auch so was wie, keine Ahnung, Tetris programmieren?

00:55:56.015 --> 00:55:56.855
Wahrscheinlich schon, oder? oder?

00:55:57.375 --> 00:56:02.515
Weil das klingt ja so auch noch, also wenn man so ein State hat und den dann

00:56:02.515 --> 00:56:03.915
einfach aktualisiert und alles...

00:56:04.595 --> 00:56:07.935
Also wahrscheinlich schon. Ich hab's jetzt noch nie ausprobiert, aber ich,

00:56:09.533 --> 00:56:13.693
Richtig schön nerdig. Total unnütz, aber ... Es gibt auch einen ...

00:56:15.333 --> 00:56:21.013
Ink bringt auch so ein paar spezielle Hooks mit, die jetzt im Web vielleicht

00:56:21.013 --> 00:56:23.933
nicht so viel Sinn machen, aber wo du halt zum Beispiel auf einen speziellen

00:56:23.933 --> 00:56:25.433
Keypress oder sowas reagieren kannst.

00:56:28.513 --> 00:56:31.413
Sehr geil. Ja, cool.

00:56:33.513 --> 00:56:35.373
Also das ist dann sozusagen die,

00:56:37.453 --> 00:56:41.993
Spitze der Evolution, wenn man man wirklich komplett steil gehen will und einem

00:56:41.993 --> 00:56:46.813
das Standard-Oakcliffe und die Plugins, die es dafür gibt, wenn die dann nicht ausreichen.

00:56:47.493 --> 00:56:53.073
Aber es macht natürlich am meisten Sinn bei Dingen, wo States sich aktualisieren.

00:56:53.273 --> 00:56:59.673
Also so bei Sachen, die einmal irgendwie gerendert werden, da braucht man sowas

00:56:59.673 --> 00:57:00.873
wie Ink wahrscheinlich eher nicht.

00:57:01.513 --> 00:57:03.473
Ich find's auch da sinnvoll, wo du.

00:57:06.873 --> 00:57:08.993
Präsentationskomponenten hast, die du häufig wiederverwenden willst.

00:57:10.113 --> 00:57:14.893
Also wir haben das bei uns in der CLI zum Beispiel keine Ahnung, du hast,

00:57:17.073 --> 00:57:21.753
so ein paar Dutzend Commands, die einfach nur get irgendwas machen und dann

00:57:21.753 --> 00:57:25.453
lädst du irgendein, dann lädt das irgendeine Ressource von der API runter,

00:57:25.913 --> 00:57:28.693
soll es einfach nur ausgeben. Und.

00:57:31.033 --> 00:57:36.693
Da bietet dir so eine, wenn du da so eine kleine Bibliothek an fertigen React-Komponenten hast.

00:57:38.633 --> 00:57:42.913
Auch da wieder genau wie im Web, da bietest du deinen Entwicklern dann so einen

00:57:42.913 --> 00:57:46.893
Baukasten an fertigen Komponenten, an denen sie sich bedienen können,

00:57:47.513 --> 00:57:52.153
um da auch so ein bisschen Konsistenz ins Look and Feel reinzukriegen,

00:57:52.213 --> 00:57:57.853
damit jetzt nicht jeder seine Detailansicht oder seine Tabellenansicht oder

00:57:57.853 --> 00:58:02.473
sind sie wirklich sicher, dass sie diese Ressource löschen wollen, Confirmation Dialog,

00:58:03.213 --> 00:58:05.193
immer wieder from scratch neu programmieren müssen.

00:58:05.793 --> 00:58:08.913
Ja, macht total Sinn. Ja, hast recht.

00:58:09.213 --> 00:58:13.213
Und habt jetzt nochmal so gefragt, wie ist das bei euch?

00:58:13.253 --> 00:58:20.313
Habt ihr dann irgendwie so ein Team oder eine Person, die sozusagen da den Hut

00:58:20.313 --> 00:58:26.633
auf hat und diese Komponentenbibliothek zentral irgendwie pflegt, die alle nutzen?

00:58:28.113 --> 00:58:32.593
So zentralisiert haben wir es bisher nicht. Wir sind aber auch noch so ein bisschen

00:58:32.593 --> 00:58:35.793
dabei, unseren Prozess darum zu finden.

00:58:36.453 --> 00:58:42.913
Ja, aber macht auch da total Sinn. Die Analogie eben zu den Designsystemen,

00:58:42.913 --> 00:58:44.353
die wir im Frontend ja auch nutzen.

00:58:45.813 --> 00:58:50.293
Ja, sehr, sehr cool. Wer testet das dann so?

00:58:50.593 --> 00:58:54.793
So von der UX her? Gibt es da, weil ich frage gerade, normalerweise ist ja das

00:58:54.793 --> 00:58:57.513
Übliche, man zeigt es Kollegen, Kolleginnen und sagt, mach mal.

00:58:58.493 --> 00:59:04.273
Kann man da genauso machen. Genau. Erzähl mal, wie viele Leute testen das normalerweise?

00:59:04.473 --> 00:59:06.373
Und gibt es da schon auch so Best Practices?

00:59:06.573 --> 00:59:11.473
Ich würde ja hoffen, es gibt weniger Best Practices, aber wahrscheinlich, wer weiß.

00:59:14.133 --> 00:59:17.813
Wie viele Leute testen das? Also es geht jetzt gar nicht so drum,

00:59:17.893 --> 00:59:21.753
wie viele Leute testen das, aber was passiert denn normalerweise,

00:59:22.853 --> 00:59:27.433
wenn du jetzt zum Beispiel sagst, du hast hier das neueste Feature dran gebaut,

00:59:28.333 --> 00:59:30.593
was passiert danach oder davor?

00:59:30.933 --> 00:59:34.813
Im Idealfall kann man es dann genauso machen, wie man es mit einem ganz klassischen

00:59:34.813 --> 00:59:35.933
User-Test auch machen würde.

00:59:36.033 --> 00:59:42.353
Das heißt, dann sucht sich irgendein, mehr oder weniger Freiwilligen dafür raus

00:59:42.353 --> 00:59:47.813
und im einfachsten Fall gibst du ihm eine Aufgabe, versuch mal über diese CLI,

00:59:49.973 --> 00:59:54.653
dein WordPress zu installieren, denk bitte laut dabei und dann setzt du dich

00:59:54.653 --> 00:59:58.613
daneben und beobachtest und merkst, was man alles besser machen kann.

00:59:59.033 --> 01:00:01.553
Der neueste Trend ist übrigens nicht mehr laut denken zu lassen,

01:00:01.653 --> 01:00:04.333
weil Leute sich anders verhalten, wenn sie laut denken müssen,

01:00:04.413 --> 01:00:06.893
weil sie dann bewusst über die Sachen nachdenken, die sie tun.

01:00:09.993 --> 01:00:13.593
Ich bin da definitiv nicht auf dem neuesten Stand.

01:00:14.113 --> 01:00:18.353
Wollte es auch nur am Rande erwähnen. Aber was ich jetzt schon drüber nachdenke,

01:00:18.433 --> 01:00:23.853
hat man da vorher so ein Design oder passiert das Design halt eher währenddessen?

01:00:24.413 --> 01:00:28.173
Weil was ich ja schon oft in der Webentwicklung im Frontend habe,

01:00:28.273 --> 01:00:32.073
ist, dass ich ein Design übersetze in Browsersprache.

01:00:33.593 --> 01:00:39.533
Wenn ich jetzt aber selber für mich quasi Tools entwickle, dann mache ich immer

01:00:39.533 --> 01:00:42.653
erst mal die Funktionen, die ich brauche und danach überlege ich mir,

01:00:42.753 --> 01:00:43.953
wie könnte es eigentlich ausschauen.

01:00:44.513 --> 01:00:48.313
Das heißt, wenn ich jetzt eine CLI schreiben würde, würde ich mir auch erst mal,

01:00:50.553 --> 01:00:53.473
alle Funktionalitäten zusammenbasteln, damit ich jetzt schon mal theoretisch

01:00:53.473 --> 01:00:55.953
machen könnte, was ich brauche. Und dann würde ich mir denken,

01:00:56.013 --> 01:00:57.613
ist aber nicht so hübsch, ich brauche noch einen Loading State.

01:00:58.733 --> 01:01:02.753
Also wir sind bei uns tatsächlich nicht mit dem großen Upfront-Design gestartet.

01:01:03.233 --> 01:01:08.593
Weil wir sind, also unser Projekt, direkt, das ist auch so intern so als Ergebnis,

01:01:09.913 --> 01:01:11.093
eines Hackathons entstanden.

01:01:12.773 --> 01:01:15.933
Und wir haben tatsächlich damit angefangen, dass wir einfach so ein bisschen

01:01:15.933 --> 01:01:17.093
drauf losprogrammiert haben.

01:01:17.413 --> 01:01:19.673
Wir hätten uns wahrscheinlich ein paar Umwege sparen können,

01:01:19.753 --> 01:01:24.973
wenn man tatsächlich mit einem UX-Konzept für die CLI angefangen hätte.

01:01:25.113 --> 01:01:27.813
Also ich würde das tatsächlich empfehlen, damit einzusteigen,

01:01:28.993 --> 01:01:33.993
weil ich vielleicht auch durch Schmerz gelernt habe, was passiert, wenn man das nicht tut.

01:01:37.573 --> 01:01:42.173
Weil wenn du einfach drauf loscodest und dann kommen so auf,

01:01:43.293 --> 01:01:47.873
durch natürliches Wachstum immer mehr und mehr Subcommands zu deiner TLI dazu,

01:01:48.053 --> 01:01:49.793
du merkst dann irgendwann, dass sich so ein paar,

01:01:50.433 --> 01:01:54.993
dass sich Inkonsistenzen einschleichen, dass dann vielleicht mal ein Flag beim

01:01:54.993 --> 01:01:59.993
einen Subcommand anders benannt ist als bei dem anderen oder sich vom Wording

01:01:59.993 --> 01:02:02.493
her Inkonsistenzen einschleichen. Dann heißt es,

01:02:04.123 --> 01:02:08.403
keine Ahnung, dann heißt es Project Delete und Domain Remove.

01:02:09.503 --> 01:02:12.963
Das ist halt kompletter Quatsch, weil das kapiert der ja keine Sau mehr.

01:02:15.063 --> 01:02:18.363
Fangen wir mit Archive noch an. Ja, genau.

01:02:19.883 --> 01:02:24.263
Und manchmal heißt es beim Delete dann minus minus Confirm und dann heißt es

01:02:24.263 --> 01:02:26.743
minus minus Force und es tut aber eigentlich beides das Gleiche.

01:02:28.123 --> 01:02:31.583
Du nennst gerade noch Beispiele, da könnte ich mir zumindest vorstellen,

01:02:31.783 --> 01:02:33.423
das wäre jetzt noch einfach zu ändern.

01:02:34.123 --> 01:02:37.123
Ich denke jetzt gerade auch dran, wenn ich eben zum Beispiel dann im Web mal

01:02:37.123 --> 01:02:40.963
was ändern muss, dann sind die schmerzhaften Dinge wirklich,

01:02:41.043 --> 01:02:44.063
wenn sich so die Layout-Organisierung so komplett ändert.

01:02:45.563 --> 01:02:50.543
Und wenn ich jetzt hier diesen Text aus dieser Box rausnehme,

01:02:50.623 --> 01:02:53.763
dann brauche ich statt Flexbox, muss ich dann Grid verwenden.

01:02:54.703 --> 01:03:00.703
Oder ein Beispiel, manchmal in 90% der Fällen kann ich zum Beispiel im Web Text

01:03:00.703 --> 01:03:06.363
abpunkten und in 10% der Fällen ist es aber in irgendeinem Flex-Container, wo gar nichts mehr geht.

01:03:06.603 --> 01:03:10.423
Und dann ist es so, nee, wir machen das jetzt einfach ganz anders.

01:03:10.443 --> 01:03:13.843
Wir machen hier nicht abhunken, wir lassen den Text einfach umbrechen. Ist ja sowieso besser.

01:03:14.083 --> 01:03:18.263
Aber du sagst schon, dass auch das Design im Nachhinein hinzufügen oder abändern

01:03:18.263 --> 01:03:20.883
kann mit Schmerz verbunden sein in deiner Erfahrung?

01:03:21.123 --> 01:03:24.403
Das kann mit Schmerz verbunden sein, weil anders als im Web musst du bei einer

01:03:24.403 --> 01:03:29.343
CLI ja tatsächlich auch immer damit rechnen, dass irgendwer ankommt und skriptet mit dem Ding.

01:03:29.783 --> 01:03:32.683
Ah, ja, Frechheit. Ja, frech.

01:03:34.743 --> 01:03:37.343
Musst du im Web auch mitrechnen, also du musst auch damit rechnen,

01:03:37.363 --> 01:03:40.483
dass irgendwer deine Oberfläche scrapt und sich irgendwie automatisch da durchklickt.

01:03:41.843 --> 01:03:45.243
Das ist meistens so mit weniger Erwartungen verbunden. So, wenn sich dann die

01:03:45.243 --> 01:03:47.803
Oberfläche ändert und dein Scraper funktioniert nicht mehr, dann sagst du halt

01:03:47.803 --> 01:03:49.243
meistens, ja, so, sorry, selber schuld.

01:03:50.543 --> 01:03:53.903
Das ist bei Kommandozeilen halt nicht so, weil da ist häufig so eine gewisse

01:03:53.903 --> 01:03:55.743
Erwartung der Stabilität mit verbunden.

01:03:56.323 --> 01:03:59.163
Wenn du jetzt irgendwie auf einmal einen Parameter umbenennst oder einen Command

01:03:59.163 --> 01:04:03.363
umbenennst, Herzlichen Glückwunsch, du hast gerade bei 200 Leuten irgendwie

01:04:03.363 --> 01:04:06.383
die Skripte kaputt gemacht Uiuiui.

01:04:08.706 --> 01:04:12.386
Kommt drauf an. Also Abwärtskompatibilität ist da, glaube ich,

01:04:12.386 --> 01:04:19.126
eine relativ große Anforderung. Zumindest wenn Nutzung in Skripten tatsächlich

01:04:19.126 --> 01:04:23.586
einer deiner erklärten Anwendungsfälle ist.

01:04:25.066 --> 01:04:28.226
Gibt es auch Mittel und Wege drumherum. Ich habe noch eine merkwürdige Frage.

01:04:29.106 --> 01:04:32.966
Da gibt es ja vermutlich, jetzt aber nicht sowas wie ein Tracking,

01:04:33.186 --> 01:04:36.846
also ihr könnt jetzt vermutlich nicht von euren Usern wissen,

01:04:38.346 --> 01:04:41.506
welche Befehle haben sie in welcher Reihenfolge eingegeben?

01:04:41.866 --> 01:04:46.266
Oder haben die Enter gedruckt oder Leertaste? Da ist jetzt nicht so ein Google

01:04:46.266 --> 01:04:48.626
Analytics drauf, oder doch? Nee.

01:04:50.306 --> 01:04:51.846
Sonst hätte ich jetzt Angst vor meinem Terminal.

01:04:53.986 --> 01:04:57.946
Ich würde lügen, wenn ich behaupten würde, dass ich nicht schon mal versucht

01:04:57.946 --> 01:04:58.886
hätte, mich da schlau zu machen.

01:04:59.806 --> 01:05:03.206
Ja, klar. Tatsächlich gibt's da nix. Es gibt aber auch niemanden,

01:05:03.206 --> 01:05:05.526
der irgendwie drüber schreit. Es gibt auch keine API-Tests dann.

01:05:06.786 --> 01:05:13.966
Genau. Was man natürlich machen kann, ist zum Beispiel irgendwie über Access-Log-Analyse,

01:05:14.546 --> 01:05:17.706
seitens der API dann zu gucken, was ist so ... Ja.

01:05:18.266 --> 01:05:23.386
Welche API-Requests kommen jetzt zum Beispiel über die CLI rein?

01:05:23.386 --> 01:05:26.146
Kann, dann versuchen, irgendwie Schlussfolgerungen zu ziehen,

01:05:26.206 --> 01:05:28.426
was passiert da jetzt, wie, wo, wann, in welcher Reihenfolge,

01:05:28.446 --> 01:05:30.146
aber du kannst jetzt nichts sehen. Ja gut, dann muss man jetzt zumindest mal

01:05:30.146 --> 01:05:33.346
Enter drücken oder so was und dann sieht man jetzt nicht, was genau die Person

01:05:33.346 --> 01:05:35.206
da jetzt tippt oder wieder weggetippt hat.

01:05:35.566 --> 01:05:40.866
Ja, genau, also du kannst jetzt nicht irgendwie einzelne Keystrokes oder sowas analysieren.

01:05:42.246 --> 01:05:47.806
Ihr müsst einfach euer Programm zusammen mit einer richtig coolen Tastatur liefern

01:05:47.806 --> 01:05:49.686
und die telefoniert nach Hause.

01:05:51.266 --> 01:05:52.666
Kreditkarten werden auch noch mitgeschickt.

01:05:56.486 --> 01:06:00.446
Die Technik für Herausforderungen liegt ja auch daran, dass zumindest wenn du

01:06:00.446 --> 01:06:04.946
so eine Command-basierte CLI hast, das Programm wird ja erst dann ausgeführt,

01:06:04.966 --> 01:06:06.106
wenn du auf Enter gedrückt hast.

01:06:06.286 --> 01:06:09.626
Das heißt, du kannst jetzt nicht... Du müsstest dich ja ins Terminal des Users

01:06:09.626 --> 01:06:16.426
selber einklinken, um rauszufinden, wie kommt er oder sie jetzt zu diesem Befehl,

01:06:16.506 --> 01:06:17.846
der dann am Ende ausgeführt wird.

01:06:18.046 --> 01:06:21.986
Also das ist... Aber es gibt ja schon auch so Sachen, die sich dann dann zu

01:06:21.986 --> 01:06:25.146
öffnen. So wenn ich jetzt dran denke, in irgendwelche Backend-Konsolen.

01:06:25.646 --> 01:06:29.306
Ich kann zum Beispiel eine Rails-Konsole aufrufen und dann bin ich ja irgendwie

01:06:29.306 --> 01:06:30.586
in so einer Rails-Konsole drin.

01:06:31.606 --> 01:06:35.446
Stimmt. Dann bist du in der Software und dann kannst du theoretisch jeden Keystroke

01:06:35.446 --> 01:06:41.286
und die Timings dazwischen tracken, wenn du so eine interaktive selber so eine

01:06:41.286 --> 01:06:42.286
interaktive Konsole hast.

01:06:44.130 --> 01:06:49.750
Wir haben ja gerade über sozusagen Umgestaltung und Lieberlassen,

01:06:49.970 --> 01:06:53.730
weil vielleicht möchte jemand ja den Output scrapen und wenn der sich verändert,

01:06:53.950 --> 01:06:55.670
dann kann nicht mehr gescrapet werden.

01:06:55.750 --> 01:07:02.830
Genauso, was so die Rückwärtskompatibilität für Flags und Argumente angeht,

01:07:02.830 --> 01:07:05.070
also dass man das stabil hält.

01:07:06.450 --> 01:07:09.550
Genau, also letzteres, das ist, glaube ich, noch so,

01:07:11.290 --> 01:07:16.050
da wäre ich selber drauf gekommen, was so die Stabilität der Ausgabe angeht,

01:07:16.070 --> 01:07:18.790
da wäre ich vielleicht schon mal nicht so sehr drauf gekommen,

01:07:18.910 --> 01:07:23.630
dass ja Leute das dann wieder irgendwie den Output weiterverarbeiten.

01:07:23.710 --> 01:07:26.090
Aber macht auch total Sinn. Gibt es noch irgendwelche Dinge,

01:07:26.150 --> 01:07:29.610
auf die man achten sollte, die einem sonst auf die Füße fallen?

01:07:30.530 --> 01:07:33.710
Was können User machen, mit denen man nicht rechnet?

01:07:36.090 --> 01:07:41.230
Gerade im Terminal hast du es ja so, dass du häufig ... So gerade die Linux-Leute

01:07:41.230 --> 01:07:45.650
machen das ja gerne, gerne, dass sie irgendwie Output aus einem Command dann

01:07:45.650 --> 01:07:47.770
wieder ins nächste Command reinpipen und sowas.

01:07:48.370 --> 01:07:52.190
Ja, das finde ich auch einen relativen Standardfall, irgendwie mal von einem

01:07:52.190 --> 01:07:56.350
Webbrowser oder von einer Webseite irgendwas runterzuladen und danach den Text,

01:07:57.110 --> 01:07:58.970
weiterzuverarbeiten, so durchsuchen, zu filtern.

01:07:59.270 --> 01:08:01.770
Ja, genau, also da sollte man halt auf jeden Fall mit rechnen.

01:08:02.010 --> 01:08:05.830
Was muss man dafür tun, dass man dem nicht im Weg steht?

01:08:07.930 --> 01:08:10.830
Ich denke mir jetzt mal gerade so einen ganz einfachen Anwendungsfall aus,

01:08:10.930 --> 01:08:13.730
so du hast vielleicht irgendeinen einen List-Command, das gibt dir eine Tabelle aus.

01:08:14.890 --> 01:08:20.070
Und jemand pipet diese Tabellenausgabe dann durch Grepp oder so was.

01:08:20.210 --> 01:08:22.730
Einfach, weil du irgendwie suchen, filtern willst oder so was.

01:08:23.550 --> 01:08:27.650
Ich würde dann in dem Fall darauf achten, dass du ... Also, was dem zum Beispiel

01:08:27.650 --> 01:08:34.810
im Wege stehen würde, wäre, wenn dann alle möglichen Kontrollsequenzen für Farb-Output,

01:08:34.910 --> 01:08:36.770
also für Color-Output mit da drin stehen ...

01:08:39.143 --> 01:08:43.283
Weil das bringt so deinen regulären Ausdruck im Grep dann vielleicht auseinander.

01:08:43.663 --> 01:08:49.483
Aber wie kann ich denn erkennen, dass so ein Grep da hinten dran hängt und dann

01:08:49.483 --> 01:08:53.043
gebe ich keine Farbcodes aus? Kann ich das sehen?

01:08:53.703 --> 01:09:02.023
Ja, du kannst in fast allen Programmiersprachen über irgendeine Library-Funktion

01:09:02.023 --> 01:09:07.363
testen, ob der aktuell laufende Prozess an ein TTY, also an ein echtes Terminal, attached ist.

01:09:08.523 --> 01:09:12.603
Und wenn du selbst wenn du den Befehl in einem Terminal startest,

01:09:12.663 --> 01:09:15.243
aber dann per den Output per Pipe irgendwann das hinschickst,

01:09:16.343 --> 01:09:19.303
findest du das darüber raus und kannst entsprechend drauf reagieren.

01:09:19.643 --> 01:09:23.163
Okay. Und die meisten Frameworks machen das auch schon automatisch.

01:09:23.183 --> 01:09:27.923
Also die meisten Frameworks, die jetzt zum Beispiel sagen, ich unterstütze Color

01:09:27.923 --> 01:09:31.663
Codes, farbige Ausgabe oder sowas, die reagieren automatisch darauf und stellen

01:09:31.663 --> 01:09:32.783
diesen Color Output dann,

01:09:33.443 --> 01:09:36.883
aus, wenn sie merken, hey, ich laufe jetzt jetzt in einem Script oder mein Output

01:09:36.883 --> 01:09:41.103
wird irgendwo hin weitergepiped und ich laufe nicht in einem echten Terminal.

01:09:41.223 --> 01:09:45.083
So, dann spart man sich diese farbige Ausgabe.

01:09:46.023 --> 01:09:50.603
Ja, super. Ja, spricht dann ja auch für die Nutzung eines Frameworks,

01:09:50.783 --> 01:09:55.663
das dann solche Dinge irgendwie mit einpreist. Genau.

01:09:57.223 --> 01:10:00.083
Ich würde auch immer, das ist dann vielleicht so ein User-Präferenz-Ding,

01:10:01.523 --> 01:10:05.683
ich würde auch immer ein zusätzliches Flag anbieten, um dem dem User quasi die

01:10:05.683 --> 01:10:08.263
Möglichkeit zu geben, hey, ich will diesen Farboutput nicht haben.

01:10:10.083 --> 01:10:16.883
Ja. Das habe ich auch schon gemerkt. Also gerade, wenn man irgendwie mit Farben

01:10:16.883 --> 01:10:18.063
auf dem Terminal arbeitet.

01:10:20.103 --> 01:10:23.663
Die hat man nicht immer unbedingt unter Kontrolle, weil man nie genau weiß,

01:10:23.763 --> 01:10:26.963
wie hat der User jetzt gerade sein Terminal überhaupt konfiguriert.

01:10:27.203 --> 01:10:30.843
Das wollte ich gerade fragen, wenn du jetzt zum Beispiel Gelb einstellst, ist es immer Gelb?

01:10:30.863 --> 01:10:34.563
Oder gibt es da quasi, wie bei VS Code Color Themes, dass ich sage,

01:10:34.763 --> 01:10:39.603
das ist mein Italic-Text, der kann einmal gelb sein oder der kann einmal blau

01:10:39.603 --> 01:10:41.343
sein oder er wird immer hell dargestellt?

01:10:42.563 --> 01:10:47.103
Das kommt tatsächlich auf den User an, was für Präferenzen der eingestellt hat.

01:10:47.203 --> 01:10:53.203
Also unter macOS-Items, da kann man ja jeden Color-Code einzeln anpassen.

01:10:56.043 --> 01:10:59.903
Unter Windows muss ich jetzt gerade ... Ich habe mich vorhin schon geoutet.

01:10:59.963 --> 01:11:04.103
Ich bin jetzt nicht der harte Windows-User. Also, da weiß ich gar nicht,

01:11:04.123 --> 01:11:05.643
was man da genau alles einstellen kann.

01:11:08.243 --> 01:11:11.703
Und manchmal muss man halt auch ein bisschen aufpassen, wie...

01:11:15.521 --> 01:11:19.921
Wie man jetzt mit dem Farbschema des Users zusammenarbeitet und auch wie man Farben ausgibt.

01:11:22.161 --> 01:11:26.081
Es gibt zum Beispiel Color Codes für das Terminal, wo ich einfach nur sagen

01:11:26.081 --> 01:11:28.501
kann, dieser Text soll jetzt gelb sein.

01:11:29.041 --> 01:11:32.921
Und je nachdem, mit welchem Farbschema das Terminal des Users läuft,

01:11:33.061 --> 01:11:34.341
ist es dann vielleicht ein anderes Gelb.

01:11:36.061 --> 01:11:39.441
Keine Ahnung, ich denke jetzt gerade an so klassische Unterscheidungen.

01:11:39.781 --> 01:11:42.021
Helles Farbschema, dunkles Farbschema im Terminal.

01:11:42.901 --> 01:11:46.121
Bei hellem Hintergrund habe ich dann wahrscheinlich lieber einen etwas dunkleren

01:11:46.121 --> 01:11:50.381
Gelbton, weil so hellgelb auf weiß ist eher so mäh.

01:11:51.441 --> 01:11:55.761
Aber auch dunkelgelb auf weiß kann mäh sein. Ja, aber dann kannst du es wenigstens lesen.

01:11:56.761 --> 01:12:01.821
Je nachdem. Je nachdem, wie dunkel. Und beim dunklen Farbschema ist es dann halt andersrum.

01:12:02.001 --> 01:12:04.581
Aber dann kann ich mich zumindest darauf verlassen, wenn ich einfach nur sage,

01:12:04.681 --> 01:12:08.161
diese Textausgabe soll jetzt gelb sein, dass es sowohl bei einem hellen und

01:12:08.161 --> 01:12:10.181
einem dunklen Farbschema auch okay aussieht.

01:12:10.641 --> 01:12:14.561
Nee, aber ich verstehe schon generell, dass es vermutlich gar nicht so unwichtig

01:12:14.561 --> 01:12:17.881
sein kann, dass man im Notfall sagen kann, du gib mir das mal einfach ohne Color.

01:12:18.401 --> 01:12:21.581
Hauptsächlich kannst du lesen. Und wo du dich halt richtig mit ins Knie schießen

01:12:21.581 --> 01:12:23.741
kannst, ist bei modernen Terminals kannst du halt tatsächlich,

01:12:24.061 --> 01:12:27.841
also du kannst da theoretisch 32 Millionen Farben verwenden.

01:12:27.921 --> 01:12:33.521
Also du kannst einfach, oder warte mal, 3-Bit.

01:12:33.541 --> 01:12:37.161
Wahrscheinlich gibt es sogar Wide-Gamut-Terminals mittlerweile. Mittlerweile.

01:12:38.641 --> 01:12:44.081
Die neuen Farbräume alle unterstützen. Wenn du dann sagst, ich möchte diesen

01:12:44.081 --> 01:12:45.241
Text jetzt tatsächlich mit.

01:12:47.181 --> 01:12:53.021
Hexcode für was auch immer hell, pastell, gelb ist ausgeben und jemand startet

01:12:53.021 --> 01:12:56.801
das Ding dann in seinem Terminal im Nicht-Dark-Mode, dann musst du halt damit

01:12:56.801 --> 01:13:01.561
rechnen, dass das für den User einfach nicht so cool aussehen wird.

01:13:03.261 --> 01:13:06.541
Und der will dann gerne die Option haben, diesen Color Output zu deaktivieren.

01:13:08.721 --> 01:13:13.681
Oder man macht das halt nicht. Man gibt keinen Text in Pastellfarben aus.

01:13:14.221 --> 01:13:17.081
Das geht nicht davon aus, dass jeder User sein Terminal im Dark Mode laufen

01:13:17.081 --> 01:13:19.561
hat. Auch wenn man es manchmal gerne würde.

01:13:21.721 --> 01:13:25.421
Ja, das ist schon gut, wenn man die Option anbietet.

01:13:26.081 --> 01:13:29.921
Ich hätte jetzt zwischenzeitlich noch eine andere Frage. Ich hatte ja vorhin

01:13:29.921 --> 01:13:31.521
gerade schon mal Homebrew erwähnt.

01:13:32.421 --> 01:13:36.801
Kommt dann alles automatisch so? Kann ich dann alles automatisch per Homebrew

01:13:36.801 --> 01:13:43.641
runterladen? Oder muss ich jetzt als Entwicklerin von meinem CLI-Tool was Spezielles

01:13:43.641 --> 01:13:46.261
machen, damit es das bei Homebrew auch gibt?

01:13:47.081 --> 01:13:48.861
Homebrew war tatsächlich ein bisschen Arbeit.

01:13:50.501 --> 01:13:53.081
Erzähl mal. Das kommt nicht automatisch mit.

01:13:55.941 --> 01:13:57.641
Homebrew funktioniert so, dass du.

01:14:00.884 --> 01:14:04.444
Homebrew hat verschiedene Tabs. Also die haben ja so ein ganz eigenes Vokabular.

01:14:07.604 --> 01:14:10.284
Ich weiß gar nicht, was ist die Metapher dahinter? Ist das Kaffee oder ist es

01:14:10.284 --> 01:14:12.864
Bier? Ich glaube, es ist Bier.

01:14:14.344 --> 01:14:19.124
Homebrew klingt nach Bier, genau. Das heißt, die haben verschiedene Tabs,

01:14:19.124 --> 01:14:23.804
also quasi verschiedene, die Linux-Leute würden sagen, verschiedene Paketquellen.

01:14:26.684 --> 01:14:35.344
Und jedes Tab ist quasi ein Git-Repo, wo Formulas für die einzelnen Pakete drin liegen.

01:14:35.824 --> 01:14:40.104
Das heißt, wenn man jetzt seine eigene Software per Homebrew ausholen möchte,

01:14:40.964 --> 01:14:43.544
entweder man klingt sich in das Homebrew-Standard-Tab mit ein.

01:14:45.404 --> 01:14:48.144
Das ist dann, ich muss gestehen, das habe ich noch nie gemacht.

01:14:48.644 --> 01:14:54.244
Oder man erstellt halt sein eigenes Tab. Das ist dann ein Git-Repository,

01:14:54.244 --> 01:14:57.884
was irgendwo in eurer GitHub-Org liegen muss.

01:14:57.884 --> 01:15:01.304
Das muss einem bestimmten Namensschema folgen und das muss einer bestimmten

01:15:01.304 --> 01:15:03.704
Dateistruktur in diesem Repository folgen.

01:15:04.064 --> 01:15:09.304
Und für das Paket liegt dann da jeweils eine Ruby-Datei, die quasi den Installationsprozess

01:15:09.304 --> 01:15:11.704
dieses Pakets beschreibt.

01:15:15.164 --> 01:15:17.664
Wir machen das mittlerweile so.

01:15:19.724 --> 01:15:23.064
Man könnte in dieser Formule alles Mögliche machen.

01:15:23.184 --> 01:15:28.604
Man könnte da jetzt auch sagen, lad dir die aktuelle Version der CLI-Software

01:15:28.604 --> 01:15:31.404
per Git runter und installiere noch eine Node.js als Dependency,

01:15:31.544 --> 01:15:32.404
damit das alles funktioniert.

01:15:33.024 --> 01:15:36.464
Wir haben es uns da jetzt einfach gemacht und laden dann an der Stelle einfach

01:15:36.464 --> 01:15:43.384
wieder diese präpaketierten, gebundelten Pakete mit eingebautem Node-Interpreter mit runter,

01:15:43.564 --> 01:15:47.544
weil das ist ein Tarball, den kann man entpacken, man weiß vorher,

01:15:47.664 --> 01:15:50.184
welche Tar-Prüfsumme hat das, kann das noch einmal gegenprüfen,

01:15:50.604 --> 01:15:54.044
damit man sicher sein kann, hey, es ist jetzt wirklich auch unverändert die

01:15:54.044 --> 01:15:55.504
Version angekommen, die du haben willst.

01:15:57.224 --> 01:15:59.764
Und automatisiert haben wir das über eine GitHub-Actions-Pipeline.

01:15:59.884 --> 01:16:03.144
Das heißt, immer wenn jetzt eine neue Version der CLI released wird,

01:16:03.224 --> 01:16:10.784
dann wird diese Formula einmal aktualisiert, dass da quasi die aktuellste Version runtergeladen wird.

01:16:10.784 --> 01:16:13.684
Es wird einmal die Fahrprüfsumme in dieser Formula aktualisiert,

01:16:13.744 --> 01:16:15.264
damit man das entsprechend prüfen kann.

01:16:15.924 --> 01:16:22.324
Und dann funktioniert auch so dieser ganze normale Brew-Upgrade-Prozess,

01:16:23.784 --> 01:16:25.264
den man so von Homebrew kennt.

01:16:26.044 --> 01:16:27.584
Das war tatsächlich ein bisschen Arbeit.

01:16:28.484 --> 01:16:31.204
Ich hätte mir das fast auch vorstellen können, dass man da so,

01:16:31.284 --> 01:16:38.344
ähnlich wie Podcasts zu Spotify plumpsen, dass solche CLI-Tools automatisch

01:16:38.344 --> 01:16:40.064
von Homebrew aufgenommen werden.

01:16:40.844 --> 01:16:43.564
Also vielleicht gibt es da einen einfacheren Weg und ich habe ihn einfach nicht

01:16:43.564 --> 01:16:47.244
gefunden, das will ich jetzt nicht ausschließen, also falls irgendwer von euren

01:16:47.244 --> 01:16:52.564
Hörern da einen besseren Weg kennt, schreibt mir eine Mail, ich bin dafür feedback-offen.

01:16:54.574 --> 01:16:56.094
Wir hatten ja auch vorhin schon mal

01:16:56.094 --> 01:17:01.354
kurz drüber gesprochen, über dann die Anwendungen zu bauen und verteilen.

01:17:01.454 --> 01:17:05.574
Gibt es aber noch was Spezifisches, was du darüber erzählen möchtest, außer Homebrew?

01:17:05.734 --> 01:17:08.474
Wenn du sagst, da war es schwierig, was war leicht?

01:17:10.234 --> 01:17:17.074
Leicht war das Docker-Image, das war relativ dankbar, weil ein Docker-File zu

01:17:17.074 --> 01:17:23.514
bauen, bau auf dem Standard Node.js-Image auf, kopiere deine App da rein, gut ist.

01:17:23.594 --> 01:17:28.954
Das ist relativ dankbar, vor allem da weißt du, dass das dann auch so gut wie überall funktioniert.

01:17:29.154 --> 01:17:32.474
Du weißt, dass das auf dem Mac gleich funktioniert wie unter Linux,

01:17:32.654 --> 01:17:34.954
gleich funktioniert wie unter Windows.

01:17:37.614 --> 01:17:41.434
Zieht natürlich wieder den Haken nach sich. Nicht jeder ist jetzt vielleicht

01:17:41.434 --> 01:17:48.814
Docker-User, gerade wenn du in deiner CLI viel mit lokalen Dateien interagieren möchtest.

01:17:48.854 --> 01:17:51.034
Also kommt halt immer so ein bisschen drauf an, was dein Programm dann tut.

01:17:51.854 --> 01:17:55.954
Ist das immer so ein bisschen schwierig, weil dann musst du wieder mit den Volumes aufpassen.

01:17:57.414 --> 01:18:01.134
Halt alle Probleme, die man bei Docker so hat, wenn man mit lokalen Dateien arbeiten möchte.

01:18:03.134 --> 01:18:05.734
Ansonsten ist das eigentlich ein sehr, sehr dankbarer Distributionsweg,

01:18:05.854 --> 01:18:10.234
aber es ist halt nicht so die nahtloseste Integration.

01:18:12.134 --> 01:18:15.014
Es gibt dann natürlich so die ganzen plattformspezifischen Paketmanager.

01:18:15.214 --> 01:18:19.994
Also ich könnte auch sagen, ich packe meine CLI einfach als Paket auf npm und

01:18:19.994 --> 01:18:26.214
dann soll der User halt einfach einen npm install oder ein install-g für Global Installation machen.

01:18:27.974 --> 01:18:31.734
Das hat dann wieder den Haken, ich weiß ja nicht, welche welche Node.js-Version

01:18:31.734 --> 01:18:32.814
der User installiert hat.

01:18:32.934 --> 01:18:37.654
Also vielleicht hat der eine Node.js-Version laufen, mit der ich meine Software

01:18:37.654 --> 01:18:38.514
gar nicht getestet habe.

01:18:39.014 --> 01:18:44.134
Und keine Ahnung, oder vielleicht läuft er noch auf Node 12 oder keine Ahnung was.

01:18:45.824 --> 01:18:48.304
Das heißt, das macht es dann schwierig, Garantien abzugeben,

01:18:48.344 --> 01:18:49.584
dass das Ganze wirklich so funktioniert.

01:18:51.024 --> 01:18:54.244
Das kommt auch so ein bisschen darauf an, mit welcher Programmiersprache man halt arbeitet.

01:18:54.524 --> 01:18:58.824
Also Go-Modules ist da relativ dankbar.

01:18:58.944 --> 01:19:04.384
Da hat man dann irgendwie so einen Go-Install-Einzeiler, bei dem man sich dann

01:19:04.384 --> 01:19:06.464
häufig auch darauf verlassen kann, dass das irgendwie funktioniert.

01:19:08.204 --> 01:19:12.684
PHP hat Composer. Das ist meistens auch ein akzeptables Distributionsmedium.

01:19:14.044 --> 01:19:17.724
Wobei da auch natürlich, da kann es wieder Cross-Dependencies oder Konflikte geben, also.

01:19:19.624 --> 01:19:23.824
Wenn man irgendeine Möglichkeit hat, so ein isoliertes Installationspaket zu

01:19:23.824 --> 01:19:29.544
verteilen, ist das eigentlich immer am besten Oder zumindest am bietet am wenigsten

01:19:29.544 --> 01:19:31.524
Fehlerpotenzial beim Endanwender.

01:19:35.364 --> 01:19:41.604
Ich mache eine nahtlose Überleitung zu einer wiederum ganz anderen Frage Wir

01:19:41.604 --> 01:19:46.824
haben vorher drüber gesprochen, wir haben Plex am Anfang wie Help oder List,

01:19:46.924 --> 01:19:48.264
um erstmal zu schauen, was wir machen können.

01:19:48.624 --> 01:19:51.304
So ein paar Sachen, die ich in der Vergangenheit benutzt habe,

01:19:51.424 --> 01:19:54.304
je länger wir darüber reden, fallen mir viel mehr Beispiele ein,

01:19:55.204 --> 01:19:57.744
waren auch Tools, bei denen ich mich dann einloggen musste.

01:19:59.624 --> 01:20:01.644
Wir haben nicht drüber nachgedacht, hat einfach funktioniert.

01:20:01.784 --> 01:20:05.144
Aber anscheinend kann ich mich ja auch authentifizieren.

01:20:06.704 --> 01:20:11.444
Oft so auch bei Git-Tools. Wie kompliziert ist es denn, so ein Login zu machen?

01:20:11.724 --> 01:20:16.424
Ist das Business as usual und macht man standig oder ist das furchtbar kompliziert?

01:20:17.364 --> 01:20:23.144
Es kommt so ein bisschen darauf an, wie der Authentifizierungsflow genau aussieht.

01:20:24.704 --> 01:20:28.604
Und es kommt auch so ein bisschen darauf an, was für Möglichkeiten man auf dem

01:20:28.604 --> 01:20:30.504
Endgerät des Users hat. Ja.

01:20:32.429 --> 01:20:38.049
GitHub macht das zum Beispiel ganz, ganz schön, da hast du einfach deinen Standard O-Out-Login-Flow,

01:20:38.249 --> 01:20:46.869
das heißt, du startest deinen Login-Prozess über die Kommandozeile und die CLI

01:20:46.869 --> 01:20:52.949
tritt dann quasi als O-Out- oder OpenID-Connect-Consumer auf und dann geht einmal

01:20:52.949 --> 01:20:53.889
ein Browserfenster auf,

01:20:53.969 --> 01:20:56.009
du darfst dich dann beim Provider irgendwie einmal einloggen,

01:20:56.069 --> 01:21:00.209
musst dem Client dann Zugriff erteilen auf die Ressourcen, auf die er angefordert

01:21:00.209 --> 01:21:01.509
hat. die angefordert hat.

01:21:02.009 --> 01:21:05.129
Und dann kriegst du quasi den API-Token, das geht zurück an die CLI,

01:21:05.169 --> 01:21:07.889
der kann sich das irgendwo in seinem Konfigurationsverzeichnis wegspeichern

01:21:07.889 --> 01:21:10.249
und dann bist du authentifiziert.

01:21:10.409 --> 01:21:13.269
Das setzt natürlich erstmal voraus, dass du einen OAuth-Provider hast,

01:21:13.409 --> 01:21:17.549
gegen den sich deine Anwendung authentifizieren kann. Also der muss halt da sein.

01:21:18.249 --> 01:21:21.509
Und du musst einen Browser haben, den du öffnen kannst. Wenn du jetzt auf dem

01:21:21.509 --> 01:21:25.489
Server unterwegs bist, funktioniert das irgendwie auch nicht so gut. Ansonsten,

01:21:27.689 --> 01:21:33.109
das Minimum, was man meistens machen kann, ist hey, du brauchst einen API,

01:21:33.869 --> 01:21:38.069
Token, um auf diese API zuzugreifen, bitte copy-paste den hier jetzt irgendwo

01:21:38.069 --> 01:21:42.149
rein, das ist jetzt nicht so der ideale Nutzerfluss, weil du zwingst den Nutzer

01:21:42.149 --> 01:21:45.569
dann dazu, sich wieder in irgendein anderes, dann doch wieder per Web irgendwo

01:21:45.569 --> 01:21:46.849
anders einzuloggen und sich dann,

01:21:47.649 --> 01:21:51.249
von Hand einen API Token zu erstellen und den irgendwo reinzukopieren, das ist nicht so,

01:21:52.229 --> 01:21:55.129
ideal, aber das funktioniert halt meistens.

01:21:58.089 --> 01:22:05.249
Manche Tools machen es ja auch so, dass man direkt in der CLI seine Zugangsdaten eingeben kann.

01:22:05.369 --> 01:22:09.029
Dass du in der CLI direkt nach Username und Passwort gefragt wirst.

01:22:09.429 --> 01:22:12.089
Ich glaube, du hast die größte Störversteller, dass, wenn man ein Passwort tippt,

01:22:12.089 --> 01:22:14.589
gar nichts erscheint, auch keine Sternchen. Ja.

01:22:15.369 --> 01:22:18.549
Und dann ist das so, äh, wo bin ich?

01:22:19.289 --> 01:22:22.509
Was mache ich hier? Ich drücke Enter und gucke, was passiert.

01:22:22.789 --> 01:22:25.409
Und was machst du mit sowas wie wie zwei Faktor out oder sowas,

01:22:25.409 --> 01:22:28.269
weil das müsstest du dann ja theoretisch auch alles supporten.

01:22:29.269 --> 01:22:30.229
Und Passcodes.

01:22:31.349 --> 01:22:33.609
Das wäre ideal, das stimmt. Ja.

01:22:35.940 --> 01:22:40.400
Habe ich noch nie gearbeitet mit. Auf der TLE auch. Es reicht noch nicht.

01:22:42.080 --> 01:22:46.700
Ich auch noch nicht. Aber man sollte es sich angucken. Ich dachte,

01:22:46.720 --> 01:22:48.940
der Chef sagt es ja. Man muss ja nicht jeden Trend mitmachen.

01:22:49.800 --> 01:22:53.760
Ja, genau. Ach, das ist ja bald wieder verstanden. Das Posted am Bildschirm

01:22:53.760 --> 01:22:54.660
funktioniert schon immer.

01:22:54.780 --> 01:22:58.880
1, 2, 3, 4, 5, 6, 7, 8, 9, ausgeführt Zeichen. Äh.

01:22:59.900 --> 01:23:03.820
Genau, und zwei Faktor und One-Time-Code und so. Pff, man braucht so was.

01:23:04.760 --> 01:23:06.080
Ja, wird auch auch überbewertet.

01:23:09.200 --> 01:23:16.720
Okay, ich würde jetzt noch mal ein bisschen noch mal zu UX auch zurückkommen oder dann auch zu UI.

01:23:17.880 --> 01:23:22.940
Etwas, womit ich in den letzten Jahren immer wieder mehr konfrontiert wurde

01:23:22.940 --> 01:23:25.820
mit User-Inputs, waren Emojis.

01:23:25.940 --> 01:23:29.420
Und ich weiß, an sich ist es UTF-8, aber manchmal bin ich doch einfach ganz

01:23:29.420 --> 01:23:31.520
happy, dass es doch irgendwie einfach funktioniert.

01:23:31.920 --> 01:23:35.160
Spannend wird es zum Beispiel auch sehr, wenn User anfangen,

01:23:35.840 --> 01:23:42.160
Titel von Dingen mit einem Emoji zu prefixen und du versuchst das dann zu sortieren

01:23:42.160 --> 01:23:46.680
und fragst dich dann, ist das Emoji eigentlich vor A oder hinter Z?

01:23:46.960 --> 01:23:49.840
Es gibt dann auch Browser, die können das dann, oder ich weiß gar nicht,

01:23:49.860 --> 01:23:55.560
ob es Browser sind oder Sprachen, die können mit Emoji sortieren oder die jumpen

01:23:55.560 --> 01:23:58.340
mal über das Emoji drüber und sortieren dann erst alphabetisch.

01:23:59.120 --> 01:24:02.960
Aber Frage der Fragen, ich kann jetzt ernsthaft nicht sagen,

01:24:03.080 --> 01:24:06.480
ob ich schon gesehen habe oder nicht, können wir Emojis verwenden.

01:24:07.560 --> 01:24:08.980
Können wir. Also die...

01:24:10.460 --> 01:24:11.980
Da ist ein Sternchen Text mit dran.

01:24:13.600 --> 01:24:17.200
Physikalisch gesehen können wir, wir wollen aber nicht. Die meisten modernen

01:24:17.200 --> 01:24:18.460
Terminals unterstützen das.

01:24:18.640 --> 01:24:21.640
Ich muss jetzt da wieder den Disclaimer nennen, ich weiß nicht,

01:24:21.680 --> 01:24:24.520
wie sich so eine Windows CMD prompt verhält.

01:24:24.820 --> 01:24:27.740
Es gibt eh nur die Android Emojis, die vielleicht nicht funktionieren.

01:24:28.120 --> 01:24:31.820
Das kann ich jetzt ganz ehrlich nicht sagen. Ähm...

01:24:33.212 --> 01:24:38.912
Also wir können das. Und ich finde auch, das bringt durchaus seinen Mehrwert,

01:24:38.952 --> 01:24:40.992
wenn man es irgendwie in Maßen einsetzt.

01:24:41.232 --> 01:24:44.792
Also ja, ich finde zum Beispiel Jan macht das sehr, sehr hübsch.

01:24:47.072 --> 01:24:50.532
Weil Jan es schafft, irgendwie über geschickt gewählte Emojis.

01:24:52.932 --> 01:24:57.252
Relativ gut erkennbare Statusinformationen rüberzubringen. Das heißt,

01:24:57.292 --> 01:25:00.012
man muss jetzt nicht groß den Text lesen.

01:25:00.072 --> 01:25:02.732
Wow, Entschuldigung, ich habe meinen Terminal aufgemacht. Ach,

01:25:02.772 --> 01:25:03.952
natürlich sind da Emojis.

01:25:04.292 --> 01:25:08.052
Da steht ja hier, Spikeldone in 70 seconds.

01:25:10.332 --> 01:25:16.232
Hab ich noch nie gesehen. Ja, also ich finde, das bietet halt schon das Potenzial,

01:25:16.232 --> 01:25:21.672
dass man so auf einen Blick, ohne jetzt wirklich die Textausgabe lesen zu müssen,

01:25:21.672 --> 01:25:23.732
sehr, sehr schnell erfassen kann, was da gerade passiert.

01:25:24.552 --> 01:25:27.292
Ja, klar, dafür sind ja quasi da so ein bisschen Highlighter.

01:25:27.452 --> 01:25:28.512
Bringt schon seinen Wert.

01:25:28.752 --> 01:25:33.472
Du musst jetzt visuell einfach nur noch auf das Spikelemoji achten und du weißt

01:25:33.472 --> 01:25:37.572
so, okay, ja, ein Install hat geklappt. Herzlichen Glückwunsch. Ja.

01:25:38.632 --> 01:25:41.672
Was man nicht machen sollte, ist sich nur darauf zu verlassen.

01:25:41.752 --> 01:25:46.932
Also ich würde jetzt davon abraten, eine CLI so zu bauen, dass jetzt wichtige

01:25:46.932 --> 01:25:50.272
Statusinformationen nur über irgendwelche Emojis kommen,

01:25:51.152 --> 01:25:54.992
weil so dann sind wir wieder beim Thema, was ist auf dem Terminal,

01:25:55.832 --> 01:25:59.212
wo statt einem Emoji einfach nur ein Viereck mit einem Fragezeichen drin dargestellt wird.

01:25:59.432 --> 01:26:02.092
Das haben wir ja auch alles bei der Frontend-Web-Entwicklung.

01:26:02.212 --> 01:26:05.092
Das ist genauso mit Menüs, die nur aus Icons bestehen.

01:26:05.272 --> 01:26:08.692
Disclaimer, Icons sind bis heute auch immer noch nicht selbsterklärend.

01:26:08.772 --> 01:26:13.292
Man lernt, was irgendwann der Explorer ist, so eine File Icon,

01:26:13.332 --> 01:26:15.772
aber der Rest ist rausfinden. Ja.

01:26:18.972 --> 01:26:19.432
Genau.

01:26:25.962 --> 01:26:29.662
Hast du dir schon mal auch bewusst dann drüber Gedanken gemacht,

01:26:29.802 --> 01:26:32.162
mit Fehlerfällen umzugehen?

01:26:32.202 --> 01:26:35.502
Also ich habe es ja vorher genannt, als ich die Plop-Files geschrieben hatte,

01:26:35.582 --> 01:26:39.942
für API-Requests oder Fetch-Requests zu generieren, wollte ich dann auch so

01:26:39.942 --> 01:26:41.482
Fehlermeldungen zurückgeben.

01:26:41.822 --> 01:26:44.802
Zum Beispiel, wenn man jetzt nicht wüsste, wie ich das trimmen könnte,

01:26:45.002 --> 01:26:47.402
zum Beispiel zu sagen, hey, du hast mit dem Space losgelegt,

01:26:47.482 --> 01:26:52.162
mach das mal ohne. oder wir erwarten gerade eine KMLK-Syntax,

01:26:52.302 --> 01:26:54.182
das scheint uns eine Hyphen-Syntax zu sein.

01:26:55.482 --> 01:26:58.482
Wie bist du mit solchen Situationen umgegangen, wenn es die schon gab?

01:26:59.682 --> 01:27:04.662
Ich finde das sehr, sehr nützlich, vor allem, weil du, also gerade wenn es jetzt

01:27:04.662 --> 01:27:10.262
um so Input-Flag-Namen oder sowas geht, das ist halt schon eine relativ.

01:27:12.362 --> 01:27:16.942
Hohe kognitive Leistung, die du da bringen musst, gerade bei komplexen Commands,

01:27:16.942 --> 01:27:19.822
die irgendwie von, selbst wenn du vorher gerade die Hilfe-Seite aufgerufen hast,

01:27:20.262 --> 01:27:25.222
um dir dann zu merken, welches Command oder welches Flag muss ich da jetzt genau

01:27:25.222 --> 01:27:28.162
an dieses Command irgendwie übergeben und welches Format wird da erwartet,

01:27:29.322 --> 01:27:30.362
da finde ich schon,

01:27:31.962 --> 01:27:34.862
da könnte ich mir zum Beispiel vorstellen, dass man versucht, irgendwie so eine Art,

01:27:35.942 --> 01:27:39.122
Fuzzy-Matching zu bauen zwischen, hey, welche Commands,

01:27:39.242 --> 01:27:43.082
sorry, welche Flags sind denn überhaupt für dieses Command zum Beispiel definiert,

01:27:43.122 --> 01:27:47.242
welche habe ich bekommen und welche, welche, die ich nicht kenne,

01:27:47.302 --> 01:27:51.182
sehen aber vielleicht Flags ähnlich, die definiert sind.

01:27:51.342 --> 01:27:55.422
Und dann könnte ich dem User vorschlagen, hey, dieses Flag, was du hier angegeben

01:27:55.422 --> 01:27:58.162
hast, das gibt es nicht, aber es gibt folgende zwei Flags, die irgendwie so

01:27:58.162 --> 01:27:59.642
ähnlich aussehen. Meintest du eins von denen?

01:28:01.302 --> 01:28:03.062
Das fände ich sehr, sehr entgegenkommend.

01:28:05.322 --> 01:28:10.542
Ansonsten gelten auf der Kommandozeile, glaube ich, so dieselben Prinzipien,

01:28:10.562 --> 01:28:12.922
die im Web halt auch gelten.

01:28:12.922 --> 01:28:16.562
Also ich glaube, long story short geht es ja eigentlich immer darum,

01:28:16.622 --> 01:28:22.822
dass ich als User nachvollziehen kann, warum irgendeine Art von Eingabe,

01:28:22.822 --> 01:28:24.942
die ich gerade gemacht habe, nicht gültig ist und was ich tun muss,

01:28:25.002 --> 01:28:26.802
um das irgendwie zu korrigieren.

01:28:27.762 --> 01:28:32.322
Und im Idealfall, wenn ich das ist vielleicht auch noch so ein Punkt wenn ich

01:28:32.322 --> 01:28:34.682
irgendwie fünf falsche Eingaben gleichzeitig gemacht hab,

01:28:35.422 --> 01:28:39.762
dann sollte ich dem User auch alle fünf Fehler gleichzeitig anzeigen und nicht,

01:28:40.422 --> 01:28:43.242
einen nach dem anderen wenn er jeweils den nächsten korrigiert hat.

01:28:47.797 --> 01:28:51.497
Und kann auch zustimmen, ist extrem hilfreich.

01:28:51.717 --> 01:28:54.077
Also ich glaube, wir kennen es alle, das hat jetzt vielleicht,

01:28:54.197 --> 01:28:57.517
ich weiß nicht, wie viel es mit dem Tool zu tun hat, aber gerade im Testing-Bereich,

01:28:57.517 --> 01:29:00.857
da können manchmal sehr kryptische Fehlermeldungen kommen, die überhaupt nichts

01:29:00.857 --> 01:29:04.337
damit zu tun haben konnten. konnten. Meistens sind das ja so Compiler oder Parser-Sachen.

01:29:04.597 --> 01:29:10.757
Und es ist einfach super, wenn da dabei steht, die Datei darf nicht mit einem

01:29:10.757 --> 01:29:12.437
spitzen Klammer losgehen.

01:29:13.057 --> 01:29:16.817
Übrigens, es scheint so, als würdest du Module vom Typen her verwenden.

01:29:16.937 --> 01:29:20.357
Ich glaube, du brauchst dafür noch den Parser. Guck mal, ob dir das hilft.

01:29:20.757 --> 01:29:23.397
Weil in sehr vielen Fällen stimmt das dann tatsächlich.

01:29:25.897 --> 01:29:29.497
Also vielen lieben Dank an alle da draußen, die das für uns schreiben.

01:29:32.677 --> 01:29:36.297
Da ist Git für mich auch so ein ganz großes Vorbild. Also ich finde gerade so

01:29:36.297 --> 01:29:39.397
die Hilfestellungen, die Git dir auf der Kommandoteile anbietet.

01:29:40.117 --> 01:29:43.157
Weil ich weiß nicht, also alleine wenn man sich mal so den Git-Status-Output

01:29:43.157 --> 01:29:48.377
oder sowas anschaut, du siehst immer offensichtlich, in welchem Zustand ist

01:29:48.377 --> 01:29:50.417
mein Repo gerade. Dafür ist der Befehl halt da.

01:29:50.917 --> 01:29:55.937
Der gibt dir aber auch alle Befehle aus, die du brauchst, um aus irgendeinem

01:29:55.937 --> 01:29:57.097
Status wieder rauszukommen.

01:29:57.217 --> 01:30:00.817
Das heißt, wenn du eine bearbeitete Working-Copy hast, hast,

01:30:00.877 --> 01:30:03.637
dann sagt er dir so, du brauchst folgende zwei Befehle, um jetzt zu committen

01:30:03.637 --> 01:30:09.337
oder wieder zu reverten oder wenn du gerade einen Merch-Konflikt hast,

01:30:09.477 --> 01:30:11.897
dann sagt er dir so, du brauchst folgenden Befehl, um jetzt,

01:30:13.097 --> 01:30:17.357
weiterzumachen, du brauchst folgenden Befehl, um den Merch wieder abzubrechen und sowas.

01:30:18.357 --> 01:30:20.257
Das geht, finde ich, sehr, sehr gut.

01:30:26.470 --> 01:30:30.330
Ich denke auch, wenn ich einfach den, sorry, ich habe gerade die Mute-Taste

01:30:30.330 --> 01:30:34.350
auch nicht gefunden, einfach mit dem Branch-Wechsel, schreibt der Git auch schon

01:30:34.350 --> 01:30:37.430
mal rein, du kannst pullen oder bist up-to-date.

01:30:37.570 --> 01:30:40.370
Hat ja niemand gesagt, dass die da schreiben müssen, aber natürlich,

01:30:40.450 --> 01:30:42.410
das ist so eine Kleinigkeit, die extrem hilfreich ist.

01:30:42.890 --> 01:30:46.890
Oder wenn man was prunen muss, weil irgendwas im Cache, bla bla bla.

01:30:47.290 --> 01:30:50.870
Du hast recht, sehr hilfreiche kleine Sätzchen stehen da dabei.

01:30:51.230 --> 01:30:53.870
Und immer sehr freundlich, aber auch prägnant.

01:30:56.670 --> 01:31:05.870
Also ich finde jetzt auf jeden Fall hält man die Augen ein bisschen mehr auf und also ich glaube,

01:31:05.910 --> 01:31:12.210
ich werde auf jeden Fall mehr auf den Output, aber auch so das Interface von

01:31:12.210 --> 01:31:18.270
Kommandozeilen-Tools schauen jetzt in nächster Zeit,

01:31:18.330 --> 01:31:20.990
nachdem wir jetzt hier heute Abend gesprochen haben.

01:31:20.990 --> 01:31:23.350
Also echt sehr spannend.

01:31:24.290 --> 01:31:30.250
Ich kann mir vorstellen, dass auch ein paar von unseren Hörerinnen solche Tools schon bauen.

01:31:31.770 --> 01:31:38.710
Und genau, da würde mich auf jeden Fall auch interessieren, was ihr da gebaut

01:31:38.710 --> 01:31:40.670
habt und was ihr vielleicht für Erfahrungen habt.

01:31:40.670 --> 01:31:45.270
Vielleicht gibt es ja noch irgendwelche Frameworks oder Kniffe,

01:31:45.370 --> 01:31:48.930
die wir heute nicht besprochen haben.

01:31:51.410 --> 01:31:58.610
Wenn ihr Fragen habt zu dem Thema, kann man dich da anpingen,

01:31:58.670 --> 01:32:00.750
Martin? Auf jeden Fall, natürlich.

01:32:01.650 --> 01:32:05.790
Auf welchen Kanälen bist du anpingbar? Ich bin auch gern für jederlei Feedback dankbar.

01:32:05.950 --> 01:32:09.150
Wenn jemand sagt, hey, du hast da gerade totalen Quatsch erzählt,

01:32:09.150 --> 01:32:10.570
weil das muss man total anders machen.

01:32:13.783 --> 01:32:17.763
Ich kann hier jetzt nicht behaupten, die ultimative Autorität in dem Thema zu

01:32:17.763 --> 01:32:20.043
sein. Aber das sind wir ja alle nicht. Ja, genau.

01:32:20.743 --> 01:32:23.703
Aber es ist auf jeden Fall ein super Thema, das du mitgebracht hast,

01:32:23.763 --> 01:32:29.443
auch weil das so fernab von dem ist, was so, womit wir sonst eigentlich,

01:32:29.843 --> 01:32:33.323
also wir haben schon damit zu tun, aber so eigentlich kreisen unsere Gedanken

01:32:33.323 --> 01:32:34.903
ja selten um diese Dinge.

01:32:34.923 --> 01:32:39.663
Zumindest jetzt, also die von uns Hosts und möglicherweise auch die von den

01:32:39.663 --> 01:32:40.903
meisten Hörerinnen nicht.

01:32:41.883 --> 01:32:47.123
Aber das das sollten sie vielleicht. Und das werden sie ab jetzt auch vielleicht eher mal.

01:32:48.623 --> 01:32:51.183
Ja, cool. Genau, weil du gerade nach Kanälen gefragt hast. Ich glaube,

01:32:51.243 --> 01:32:53.343
LinkedIn und Co. sind wahrscheinlich am einfachsten.

01:32:53.523 --> 01:32:57.303
Bist du auch auf Mastodon oder so? Da bin ich nicht. Da bist du nicht. Okay.

01:32:58.203 --> 01:33:05.083
Wir werden deinen LinkedIn-Account auf jeden Fall in den Show Notes auch verlinken.

01:33:06.643 --> 01:33:11.403
Vielen, vielen Dank, dass du da warst. Ja, sehr gerne. Ich danke auch.

01:33:12.483 --> 01:33:15.503
Du bist wahrscheinlich auch nicht zum letzten Mal da. Wir haben auch gedacht,

01:33:15.823 --> 01:33:21.743
also du hast ja relativ viel so auf der Pfanne an guten Themen und da haben

01:33:21.743 --> 01:33:27.023
wir auch schon das ein oder andere noch uns rausgesucht, wo wir dich dann nochmal zu,

01:33:27.543 --> 01:33:29.403
interviewen und befragen werden in Zukunft.

01:33:31.263 --> 01:33:34.443
Genau. Aber das verraten wir natürlich noch nicht, was das ist.

01:33:35.403 --> 01:33:38.583
Das wäre ja auch langweilig. Vielen lieben Dank fürs Kommen.

01:33:39.763 --> 01:33:42.843
Vielen Dank auch von meiner Seite. Danke für eure Gastfreundschaft.

01:33:43.463 --> 01:33:47.443
Gerne. Und unseren Hörerinnen auch vielen Dank fürs Zuhören.

01:33:47.523 --> 01:33:51.243
Und wie gesagt, wenn ihr Feedback habt oder Fragen, dann meldet euch gerne.

01:33:52.323 --> 01:33:53.943
Und dann hören wir uns nächste Woche wieder.

01:33:55.423 --> 01:33:59.223
Bis dahin. Tschüss. Ciao, ciao. Ciao.

01:34:00.080 --> 01:34:23.120
Music.

01:34:13.583 --> 01:34:17.863
Bis zum nächsten Mal.

