Zum Inhalt springen

MiaPlan war zu Gast im Python Podcast. Dieser liefert einen tiefen Blick hinter die Kulissen. Hier die Transkription des Interviews:
Hallo, ich bin Martin von miaplan.de.
Und soll ich mich kurz vorstellen?
Oder wie habt ihr euch das gedacht?
Also vielleicht kurz zu mir.
Ich habe Bioinformatik studiert.
War dann fünf Jahre in der Softwareentwicklung.
Erst im SAP-Umfeld, dann im Bereich Automobil.
Dann habe ich das Angebot bekommen,
in den Familienbetrieb meiner Eltern mit einzusteigen.
Die machen Märkte im Einzelhandel.
Und das habe ich angenommen.
Und habe dann gesehen, wie meine Mutter dort die Dienstpläne erstellt.
Also sie hatte Personalverantwortung und hat Dienstpläne erstellt.
Und sie hat dort Excel-Listen erstellt.
Sie hat ein Kreuz für jede halbe Stunde gemacht,
die ihre Mitarbeiter eingeplant sind.
Das Ganze für damals zehn Mitarbeiter,
acht Stunden pro Tag, 26 Tage im Monat.
Da kann man sich vorstellen, wie viele Kreuze sie da gemacht hat.
Sie hatte dann irgendwann sich eine größere Sammlung an Bleistiften zugelegt,
weil die halt der Reihe nach abgenutzt waren.
Und das habe ich mir eine Weile angeschaut
und habe mir dann gedacht, das muss besser gehen.
Und da war dann MiaPlan geboren.
Vielleicht dazu, was ist MiaPlan?
Also das ist ein SAS, also Software as a Service,
zur Dienstplanung.
Man kann damit machen Schichtplanung,
Planung in der Produktion, also wenn man Maschinen hat.
Automatische Planung, Bereitschaftsdienste, Nachtarbeit.
Also vieles, was man sich da so wünschen kann in dem Bereich.
Ja, klingt interessant.
Also ich glaube, die Menge der Unternehmen,
die das mit Excel-Listen machen, das wird nicht so klein sein.
Das habe ich auch schon häufig gesehen.
Also ich habe ganz oft schon die Anforderungen an sowas gehört.
Aber mich würde jetzt interessieren,
warum denn mit Qt und nicht als Web-Anwendung?
Ja, ganz kurz zu Excel.
Also Excel machen, glaube ich, alle.
Also man fängt halt mit Excel an,
probiert es quasi umzusetzen, was man sich halt so wünscht.
Und irgendwann stößt man an Grenzen.
Ich glaube, das haben halt alle.
Und dann fängt man halt an, sich umzuschauen.
Ja, warum Qt?
Also ich habe mir angeguckt, wie komme ich am besten zum Ziel?
Also am Anfang des Projektes war klar,
ich brauche eine grafische Oberfläche.
Die soll im Web stattfinden.
Also das soll quasi nicht auf einem Computer installiert werden.
Denn, ja, also wir wollen eigentlich von überall planen.
Also nicht nur, man hat nicht immer einen Rechner zur Verfügung.
Und meine Mutti war nicht immer am Rechner zu Hause,
sondern die wollte halt auch vom Markt aus planen und was weiß ich.
Also es war klar, das muss irgendwie auch ins Web, das Ganze.
Ich habe mir verschiedene Sachen angeschaut.
Ihr habt ja auch schon so ein bisschen angesprochen.
Also es gibt zig Frameworks, die man nutzen kann.
Euer Liebling ist Django, wie man unschwer raushört,
wenn man euch kennt.
Das habe ich mir auch angeschaut.
Da kann ich ja dann noch ein bisschen was zu erzählen.
Ansonsten, wenn man jetzt nicht die Bedingung Web hat,
gibt es verschiedene Frameworks.
Also Kiwi ist eins davon.
Qt ist eins davon.
Ansonsten gibt es auch noch GTK zum Beispiel.
Ja, das GIMP Toolkit.
Und ja, habe ich mir sozusagen alle der Reihe nochmal angeguckt
und geschaut, was können die für mich leisten sozusagen.
Und wenn man die so vergleicht, also die Frameworks für den Desktop,
dann kommt man eigentlich darauf, dass es zwei Frameworks gibt,
die da nur in Frage kommen.
Das ist einmal Qt und einmal GTK.
Das sind die einzigen, die, ich sage mal,
weit fortgeschrittene Widgets bieten.
Also wenn man quasi sehr spezielle Sachen machen will,
und das will ich,
dann kommt man eigentlich um Qt beziehungsweise GTK nicht drumrum.
Was wäre so ein Widget beispielsweise,
wo du sagen würdest, gut, das ist halt so was,
was man nur da bekommt?
Also zum Beispiel Tabellen, ja.
Aber nicht einfach nur Tabellen, sondern halt spezielle Tabellen.
Zum Beispiel brauchte ich Tabellen, die ein Kontextmenü können,
die sollten farben können.
Ich wollte Farbige Frames um die Zellen zeichnen.
Ich brauche Callbacks,
wenn ich einen Klick auf so eine Tabellenzelle mache und so weiter.
Und ich habe mir das Ganze auch im Web angeschaut.
Also die Webframeworks. Angenommen, ich hätte jetzt Django genommen.
Dann hätte ich wahrscheinlich
irgendeine Art JavaScript-Tabellenframework genommen.
Und ich habe dort sehr, sehr lange gesucht.
Ich habe keins gefunden, was alles kann, was ich brauche.
Und dann habe ich überlegt,
na ja, jetzt könnte ich das vielleicht anders umsetzen,
als ich mir das eigentlich vorstelle.
Also ich könnte, weiß ich nicht,
die Bedienung müsste ich dann halt so umstricken,
dass ich irgendwie dann die jeweilige Bibliothek kann.
Und das wollte ich aber nicht.
Also ich wollte das eigentlich so machen, wie ich mir das vorstelle.
Und ja, da kam ich eigentlich nur bei Qt raus.
Also Qt hat sehr weit entwickelte Widgets.
Und damit kann man, also sagen wir mal so,
ich habe noch nichts gefunden, was man damit nicht umsetzen könnte.
Und das ist alles schon da.
Also ich brauche da nichts mehr mehr selber entwickeln sozusagen,
also was die Oberfläche angeht,
sondern Qt bietet eigentlich von Haus aus schon alles,
was man sich vorstellen kann.
Und das war quasi, sagen wir mal, eine Grundvoraussetzung.
Ich brauche eine hohe Entwicklungsgeschwindigkeit,
sonst komme ich nicht zum Ziel.
Und genau, das waren quasi die Bedingungen.
Hätte ich angefangen, da mir ein Webframework rauszusuchen, Django,
ich habe ein Testprojekt aufgesetzt schon gehabt
und habe mal geguckt, wie weit ich komme.
Aber da hat sich ziemlich schnell herausgestellt,
da hätte ich sehr, sehr viel selber entwickeln müssen an Funktionalität.
Und das kam nicht in Frage.
Und wie machst du es hübsch?
Was genau stellst du dir hübsch vor?
Also wie kannst du es erst stylen?
Also mit Themes?
Oder musst du da alle Widgets einzeln überschreiben?
Ist das responsive?
Oder musst du jeweils eine eigene Applikation
für verschiedene Geräte schreiben?
Oder wie löst Qt das?
Ja, da müsste ich vielleicht erst mal sagen,
wie ich das überhaupt gebaut habe.
Fangen wir mal von vorne an.
Also es stand sozusagen fest,
oder ihr könnt ja auch vielleicht noch mal was zu den Widgets sagen
und wie man die in Django einbindet.
Aber für mich stand fest,
okay, mit Qt kann ich das sehr schnell umsetzen,
was ich brauche.
Jetzt hat Qt aber ein Problem,
das ist eigentlich ein Desktop-Framework.
Also üblicherweise würde ich also eine Software schreiben,
würde die dann bundeln,
also mit PyInstaller, was weiß ich.
Und würde die dann sozusagen eine Software mir erstellen
und die dann zum Kunden liefern
oder würde die zum Download anbieten oder so.
Ging in dem Fall, also in meinem Fall sozusagen nicht.
Jetzt ist die Frage,
wie kommt die Desktop-Anwendung ins Web?
Und die Lösung dafür lautet Apache Guacamole.
Das ist quasi, ich weiß nicht, habt ihr das schon mal gehört?
Nein.
Das ist im Prinzip wie Remote Desktop,
aber ohne Client.
Das heißt, jeder Nutzer bekommt quasi einen Account.
Und loggt sich damit sozusagen auf meinen Servern ein
und läuft damit unter einen Nutzer-Account.
Also ich starte dann sozusagen auf meinem Server eine Anwendung,
zum Beispiel in Qt.
Und die kriegt dann der Anwender zu sehen.
Also die Software läuft sozusagen auf meinen Servern
und der Anwender guckt sich das von außen an
und kann die Software auch bedienen.
Und installiert aber selber nichts.
Das heißt, es läuft rein über den Browser.
Oder anders gesagt,
Apache stellt einen HTML5-Client schon zur Verfügung,
der einfach im Browser läuft.
Ja, ich glaube, ich habe das mal irgendwie gesehen.
Wie heißt das?
Guacamole? Ah, ja.
Auf der DjangoCon 2021
gab es einen Talk darüber,
wo auch jemand eine Shell quasi damit,
so konnte man halt quasi auf eine Shell zugreifen,
auch über den Browser.
Und das war ziemlich cool.
Und das ist jetzt quasi das gleiche System, wie das funktioniert.
Ja, sehr schick. Coole Idee.
Also theoretisch kann man damit einen ganzen Desktop
in den Browser reinzeichnen.
Das ist auch der Standard-Anwendungsfall.
Aber es geht eben auch für eine einzelne Software.
Genau.
Ja, das hat den Vorteil, dass ich Qt nutzen kann.
Mittlerweile macht mir Qt auch Spaß.
Also mittlerweile im Sinne von,
jetzt weiß ich, wie es funktioniert.
Das heißt, es hat ein bisschen gedauert.
Das hört sich so an, als wäre die Lernkurve steil.
Ja, die Lernkurve ist schon steil, würde ich behaupten.
Aber ich habe festgestellt,
das kann eigentlich alles, was man braucht.
Also ich habe noch nichts gefunden, was das Ding nicht kann.
Und was außerdem Spaß macht, ist,
ich arbeite seit ungefähr drei Jahren damit,
und ich habe insgesamt fünf Bugs gefunden.
Und das ist echt wenig.
Ja.
Also da habe ich schon ganz, ganz andere Sachen erlebt.
Ja.
Genau, also das macht echt Spaß, muss ich sagen.
Ja, ansonsten kann ich fast nur synchronen Code schreiben.
Ihr habt ja schon ein bisschen gesprochen.
Die Frameworks stellen jetzt alle auf Async um,
damit die mehrere, also mehr Requests quasi handeln können.
Und ich habe eigentlich den Vorteil,
ich kann synchronen Code schreiben.
Ja, ja, das ist natürlich,
aus Entwicklersicht angenehmer.
Ja, das ist deutlich angenehmer, und es ist einfach.
Ich weiß gar nicht, wann Qt genau gestartet ist,
und wann es die Firma dazu gab.
KDE ist ja da, das war schon so in den 90ern irgendwie.
Ich weiß gar nicht, wann Qt gestartet ist,
aber es muss irgendwann in den 90ern wahrscheinlich gewesen sein.
Ist das jetzt in Version 5 oder 6, oder wie benutzt ihr das?
Ich mache gerade die Transition von 5 nach 6.
Und das ist halt keine komplett Open-Source-Lizenz,
wenn ich das richtig in Erinnerung habe.
Genau, das ist dual lizenziert,
also es hängt ein bisschen davon ab, welche Version du nutzt.
Die aktuelle, also immer die aktuellste Version,
meine ich, ist ausschließlich kommerziell.
Und die Lizenz, also da bin ich jetzt nicht hundertprozentig drin,
aber die Lizenz sagt so in etwa, wenn der Code ein Jahr alt ist,
dann müssen sie es zusätzlich unter die LGPL stellen.
Also wenn man quasi die LGPL-Lizenz nutzen will,
dann ist der Code recht gut abgehangen sozusagen.
Also LGPL ist quasi Strong Copy Left,
wenn ich das richtig verstehe.
Aber ja, es ist eine relativ restriktive Lizenz
und man muss schauen, dass man das, also wenn man das verwenden will
und man möchte es kommerziell einsetzen,
dann muss man schon ganz genau hingucken.
Ja, interessant.
Genau, MySQL hatte doch so eine ähnliche Lizenz,
aber ich bin mir nicht sicher, ob es die LGPL war,
wahrscheinlich eher nicht.
Ja.
Ja, nee, Qt irgendwie.
Aber ich meine, Qt selber ist ja irgendwie in C++ geschrieben, glaube ich.
Wie greift man denn dann von Python,
weil ich meine, die Anwendung ist ja dann in Python geschrieben hauptsächlich?
Richtig, genau. Das ist 100% Python.
Wie kommt man denn dann an C++ dran?
Da braucht man ja wahrscheinlich irgendeinen Wrapper um...
PyQt oder sowas?
Ja, irgendwie sowas.
Die haben eine Python API.
Python Bindings quasi.
Python Bindings, richtig.
Und die Widgets, die du brauchst,
die kannst du auch einfach quasi in jedem Betriebssystem jetzt wiederverwenden,
wenn du das möchtest.
Könnte ich, ja. Also Qt ist plattformunabhängig.
Also die laufen eigentlich fast überall.
Ich setze es aber unter Linux einfach ein.
Genau.
Und wie machst du sowas wie Stylings und sowas?
Also wie das, was ich eben gesagt habe mit hübsch oder sowas.
Wie gehst du da vor, dass das irgendwie so ein bisschen dynamisch ist und so?
Bietet das Qt einfach alles von Haus aus?
Ja, Theming lässt sich machen mit Qt.
Es bringt aber von Haus aus schon quasi das Styling mit.
Das sieht einigermaßen nativ aus unter jeder Plattform.
Unter Linux hat es eben den Style, den es unter Linux hat.
Man kann quasi jedes Element nochmal separat stylen,
wenn man das möchte. Das geht einfach mit CSS dann.
Wenn man das möchte.
Also die haben quasi so eine abgespeckte Art von CSS.
Und da kann man quasi seine Elemente dann färben
oder einen anderen Rahmen geben oder was weiß ich.
Ja, genau.
Ja, ja, ja. Ne, interessant.
Ich glaube, wie fandest du das letzte Mal mit Qt?
Ich erinnere mich noch dran, das war schon auch wieder ein bisschen her,
glaube ich, 2016 oder so habe ich das letzte Mal irgendwie
für einen Headless-Browser, den ich brauchte,
weil irgendwie JavaScript ausgeführt werden sollte.
Irgendwie das war auch damals irgendwie das Ding,
das ich da verwendet hatte.
Das war auch noch mit WebKit.
Die Engine war WebKit.
Und dann brauchte man noch so ein bisschen Qt außenrum.
Und dann musste ich da irgendwie Qt 5 selber kompilieren.
Und ich erinnere mich noch, dass das ganz schön schmerzhaft war.
Also ich erinnere mich auch dran,
dass ich bin damals, glaube ich, über die Lizenz gestolpert.
In meinen ersten Gehversuchen zu den Pythons,
da wollte ich unbedingt, wie man das am Anfang macht,
irgendwas mit GUI bauen,
dass da irgendwie man was anzeigen kann auf seinem Bildschirm.
Und dann habe ich so ein bisschen rumprobiert, auch mit Qt.
Das hat irgendwie nicht so funktioniert, wie ich das wollte.
Und ich bin da so ein bisschen über diese C++-Symptomatierung gestolpert.
Und ich fand auch PyQt nicht so super.
Und bin dann bei Kiwi gelandet tatsächlich.
Wo ich auch sagen muss, da ging ein paar Sachen.
Aber das war auch alles eher so, ich weiß nicht genau.
Nicht so, wie ich das eigentlich angenehm finde.
Und dann habe ich es dann mit den GUIs wieder gelassen.
Beziehungsweise mit Web angefangen irgendwann.
Ja, Kiwi.
Also Kiwi, die Widgets sind halt,
also die haben nicht genug Widgets.
Und da kommt man nicht weit,
wenn man wirklich intensiv was damit machen will, finde ich.
Ja, ich meine, aus meiner Perspektive wäre jetzt eher so die Frage,
warum macht man heutzutage überhaupt noch GUI?
Ich weiß doch heute alles Web.
Und es ist ja ein etwas anderes Modell.
Und eigentlich vielleicht ein bisschen einfacher zu maintainen,
gerade wenn man jetzt eben nicht so eine größere Organisation ist,
sondern eher kleiner.
Dann ist das ja mit, wie macht man das,
wenn Clients inkompatibel werden oder so.
Oder unterschiedliche Versionen hat.
Das ist ja alles ganz schrecklich.
Und das ist ja so ein Problem, das man halt hat,
wenn man irgendwie klassisch Client-Server machen würde oder so.
Oder diese alten Desktop-GUI-Geschichten machen würde.
Aber ich meine, klar, wenn du das zentral laufen lässt
und greifst dann nur sozusagen auf das Ding, wo das dann läuft zu,
dann hast du diese ganzen Probleme eigentlich nicht mehr.
Ich habe eine ganze Menge Probleme vom Hals geschafft sozusagen.
Wo ich mir am Anfang sehr, sehr viele Gedanken drüber gemacht habe,
ist, wie ist das ressourcentechnisch?
Wenn man eine Web-Anwendung hat,
dann habe ich ja quasi einen ganzen Sprung von Usern.
Und die teilen sich in der Regel keinen,
die teilen sich einen State in der Web-Anwendung,
in der Regel würde ich jetzt mal behaupten.
Und dadurch kann ich quasi die Ressourcen
gleichmäßig auf meine Datenbank und so weiter verteilen.
Da kennt ihr euch eigentlich besser aus.
Ich würde sagen, der State einer Web-Anwendung
liegt normalerweise in der Datenbank,
sozusagen aus meiner Perspektive.
Und dann gibt es halt diverse Prozesse,
an die man Requests hinschickt.
Dann senden sie halt Responses zurück.
Ich dachte, es gäbe das Problem,
dass ich das nicht machen kann sozusagen.
Also meine Anwendung, Miaplan,
hat einen State für jeden Nutzer.
Und hier hatte ich in meinem Django-Prototypen auch probiert,
diesen Zustand quasi umzusetzen
und bin da aber so schon irgendwie auf eine Hürde gestoßen.
Also das scheint jedenfalls nicht nativ so zu gehen in Django,
wenn ich das richtig gesehen habe.
Allerdings habe ich auch nur vielleicht eine Woche oder so
das ausgetestet.
Das geht schon.
Also du kannst halt deine Daten modellieren
und die kannst du in eine Datenbank speichern
und dann kommst du da auch wieder dran.
Also es ist die Frage,
was genau du da halten wolltest an State.
Naja, also ich habe zum Beispiel relativ große NumPy-Matrizen.
Und das muss auch NumPy sein.
Also das kann ich mir jetzt nicht irgendwie
in die Datenbank reinschieben,
das könnte ich schon tun,
aber für jede Operation müsste ich mir das dann wieder rausziehen.
Das macht also eigentlich keinen Sinn.
Und da hatte ich jetzt, also von meinem Draufgucken,
keine gute Idee, wie ich das mit Django überhaupt umsetzen kann.
Das ist natürlich auch eine interessante Anforderung.
Also das wäre dann die Frage,
warum hast du denn NumPy-Matrizen?
Also ich meine, so klassischerweise
hast du ja eine relationale Datenbank
und dann hast du die Daten halt in der Tabelle irgendwie
oder in mehreren Tabellen im Schema.
Also was ist überhaupt das Problem?
Das Problem ist folgendes: Du hast jetzt Menschen, die arbeiten zu Zeiten
und die sich koordinieren wollen.
Ja, also Anforderung ist im Prinzip die folgende.
Ich habe einen Sprung von Mitarbeitern
und die möchte ich einplanen
über meinetwegen einen Monat.
Also der Zeitraum ist variabel.
Und ich möchte eigentlich zu jeder halben Stunde wissen,
wie viele Mitarbeiter arbeiten in Summe
gerade an diesem Tag meinetwegen an diesem Arbeitsplatz.
Und da muss ich effizient Berechnungen drauf machen können.
Und auch auf der Länge, also wie lange arbeitet ein Mitarbeiter
an diesem Tag an dieser Maschine zum Beispiel.
Da muss ich in der Lage sein,
effizient Berechnungen drauf zu machen,
weil darauf basiert natürlich zum Beispiel
die automatische Planung, die ich machen kann und so weiter.
Also da mache ich eigentlich sämtliche Berechnungen drauf,
auch die Anzahl der Stunden,
wie lange sind Mitarbeiter eingeplant und so weiter.
Und ja, das lässt sich meiner Ansicht nach
am einfachsten mit NumPy machen,
weil da lege ich mir eine Matrix an,
tue die Stunden rein und dann
habe ich in NumPy sämtliche Operationen, die ich brauche.
Ja, klar.
Also wenn man jetzt NumPy Arrays hat,
dann ist das natürlich so ein bisschen incompatibel
jetzt mit diesem Standardmodell,
wo man in Django halt ein relationaler Datenbank hat.
Ich meine, man kann das natürlich auch machen.
Dann ist halt die Frage, ob einem Django noch so viel nützt,
weil dann kann man den ORM halt nicht benutzen.
Ich bin schon mal erfreut, dass ihr nicht sagt,
ach Mensch, da gibt es doch hier dieses Plugin,
da lädst du dir einfach Folgendes und dann geht das schon.
Nein, nein, nein, das geht tatsächlich eher nicht, denke ich.
Also was man, der wahrscheinlich wäre dann eine Art,
dass man das halt irgendwie, die Daten, die man hat,
die hat man halt irgendwo in einem Objekt liegen oder so,
in Parquetformat oder sonst wie.
Und dann geht das natürlich auch,
aber dann nützt einem halt der ganze ORM-Kram nichts mehr.
Die Frage wäre halt,
kann man das nicht vielleicht doch irgendwie auf SQL abbilden
oder geht das halt gar nicht?
Wenn es nicht geht, ja, dann kann man halt nichts machen.
Dann nützt es einem nichts.
Das klingt für mich, als wären da viele Relationen irgendwie.
Also das kann man mit Sicherheit abbilden.
Die Frage ist, wie viel Schmerzen hat man dabei?
Ja, gut, genau.
Und wenn man es schon so hat und das gut funktioniert,
dann ist halt die Frage, lohnt sich das
oder macht man es nicht dann lieber so,
dass man das einfach verwenden kann, was man schon hat,
was funktioniert.
Ja.
Tja, da kommt es her.
Interessant.
Aber es ist auch wirklich rein NumPy,
kein Pandas oder sowas?
Auch, aber das versuche ich zu vermeiden.
Also jetzt rein Pandas ist meiner Ansicht nach nicht praktikabel,
weil ganz einfach die Importzeit beträgt drei Sekunden.
Ja, ja, ja.
Das ist völlig inakzeptabel.
Musst du nicht nur einmal importieren?
Ja, aber selbst wenn ich den Import an die Startzeit verschiebe
oder in die Laufzeit, ist ja egal,
drei Sekunden sind an keiner Stelle akzeptabel.
Okay, ja gut.
Und da bleibt höchstens die Variante,
hier die Alternativen zu nehmen, die es inzwischen gibt.
Jetzt müsste ich Polars, war, glaube ich,
die aktuelle Entwicklung in Rust, wenn mich nicht alles täuscht.
Ja.
Das habe ich mir noch nicht in der Tiefe angeguckt.
Ich nehme mal an, die Importzeiten sind da besser.
Ich weiß aber nicht, ob Polars schon alles kann,
was ich da brauche.
Ja, das ist ja jetzt erst am Anfang genau.
Ja, ja, interessant.
Ja.
Ja, also das ist natürlich auch etwas,
was man halt in Python gut machen kann
und sonst wahrscheinlich auch eher nicht hat,
dass man halt diese NumPy-Geschichte
auch verwenden kann, ja.
Ja.
Also NumPy ist eine der besten Bibliotheken in Python,
würde ich sagen.
Ja, ja.
Da kann man echt so viel rausziehen.
Und da ist so viel schon da.
Und es ist vor allem verdammt schnell.
Ja.
Aber wie ist denn das,
muss man in Qt dann CamelCase verwenden?
Wahrscheinlich ja, ne?
In Qt 6 nicht mehr.
Da haben sie es quasi normal gemacht.
Aber na ja, man gewöhnt sich dran, sag ich mal.
Ja, gut.
Es ist jetzt auch kein Weltuntergang,
wenn ich jetzt für die Calls dann eben CamelCase habe.
Aber ja, schön ist es nicht, das stimmt.
Mhm.
Ja, gut, ich meine,
ich mache ja auch andere Sachen auf TypeScript und so,
da mache ich auch CamelCase.
Aber wenn man in Python ist, dann finde ich das mal,
wenn die Kombination, manchmal ein snake case,
manchmal CamelCase, dann ist es ein bisschen, äh.
Aber ja, gut.
Ja.
Ja, ja, ja.
Interessante Geschichte.
Aber wie ist das denn jetzt,
wenn jetzt mehrere Leute auf die Applikation zugreifen?
Genau.
Genau, also ich war ja stehen geblieben,
also ich habe mir Sorgen gemacht sozusagen,
dass das nicht skaliert.
Ja.
Und das scheint aber nicht so schlimm zu sein.
Also nein, es scheint relativ gut zu sein.
Also ich habe mir vor allem Sorgen gemacht um die Bandbreite.
Und da muss ich sagen, das ist gar kein Problem.
Also das kostet tatsächlich fast keine Bandbreite
und würde sogar behaupten,
das ist ähnlich einer Webapplikation.
Hm.
Wie überträgt denn dieses, das Guacamole die Daten,
ist das nicht ein Bild oder?
Nein.
Ah, okay.
Also das kommt darauf an.
Ah, okay.
Das unterstützt mehrere Backends.
Man kann zum Beispiel VNC nehmen.
Man kann aber auch XRDP nehmen.
Und je nachdem, wie effizient das implementiert ist,
ist es gut.
Und im Fall von XRDP ist es gut.
Und da werden also keine Bilder mehr übertragen.
Also da wird vielleicht ein Frame am Anfang übertragen
und dann werden nur noch Deltas übertragen.
Okay, ja.
Also da entsteht tatsächlich nicht viel Traffic.
Und was den Speicherbedarf angeht,
da bin ich ja selber für verantwortlich
und habe das selber in der Hand.
Aber es ist denn ja schon so,
dass du quasi eine Applikation pro Nutzer irgendwie starten musst.
Ja, richtig.
Genau, das ist schon so.
Aber ich habe mir das angeschaut.
Und das funktioniert.
Also ich kann ja auch selber mehr oder weniger bestimmen,
sage ich mal, wie viel Speicher das Ganze frisst.
Und wenn ich mir halt die Bibliothek reinziehe,
die 500 Megabyte beim Import frisst,
dann kann ich die halt nicht nehmen.
Ja, auch interessant.
Und genau, was mich auch noch interessieren würde,
um diese grafische Darstellung,
die muss ja dann irgendwie schon irgendwo gerendert werden.
Das heißt, du brauchst auf dem Server,
hast du dann quasi auch ein X oder irgendwie so was?
Genau.
Ah, okay.
Also es wird ein X-Server pro Anwender gestartet.
Ah, okay.
Und es ist leider noch ein X-Server.
Und jetzt komme ich gerade nicht auf den Namen.
Was war die Weiterentwicklung davon?
Oh, das habe ich ja.
Was kam nach X?
Wayland.
Wayland, genau.
Wayland, richtig, genau.
Also es wird daran gearbeitet,
dass das Ganze Wayland-kompatibel wird,
aber ist noch nicht so weit.
Aber meine Hoffnung ist ja,
X gibt es ja jetzt schon, ich weiß nicht, 20 Jahre, 30 Jahre.
Ja, noch.
Also ich denke, es wird es auch noch eine Weile geben,
dass da noch genug Zeit ist, das zu portieren.
Ja.
Und dann ist quasi ein User, der das von außen benutzt,
eigentlich mehr oder weniger auch ein User im Unix-System, ne?
Dann wahrscheinlich.
Ja, nicht eigentlich, sondern tatsächlich.
Tatsächlich, also genau.
Ja, wirklich.
Ja, das ist, Dominik hat mir gerade irgendwie,
der hat, glaube ich, Miaplan auf dem Telefon aufgemacht.
Und da flackerte das.
Das weiß ich allerdings aber nicht, ob das jetzt irgendwie...
Ja, also das Ganze läuft auf Tablets und Telefonen,
aber das ist nicht meine Zielgruppe eigentlich.
Ja.
Also es funktioniert.
Man kann damit auch planen.
Man kann sogar Tastatureingaben und alles machen.
Da gibt es eine Tastenkombination dafür, wie das geht.
Wenn man in der FAQ nachguckt, steht das da drin.
Aber eigentlich ziele ich auf den Desktop-Anwender.
Und eigentlich ist es nur schön, auf dem Desktop zu planen.
Ich glaube, keiner möchte wirklich
auf dem Handy seine 32 Mitarbeiter planen.
Also ich weiß nicht, ob es da irgendeine Software gibt,
die das gut macht.
Wenn, dann Chapeau.
Aber ich ziele da nicht drauf.
Also ich habe tatsächlich so ein paar Ideen an der Stelle
auch schon durchgespielt, weil ich diese Anforderungen
wirklich auch so ein paar Mal gekriegt habe.
Aus einem Businesses heraus, die das halt wirklich brauchten
und die es interessant fanden.
Hm.
Also, ist noch nicht raus.
Muss ich eigentlich noch mal umsetzen.
Irgendwann im nächsten Leben, wenn ich mal Zeit finde.
Ja.
Wenn es immer so ist.
Ja, ja, ja.
Ich meine, man kann sich schon, also gerade im Büroumfeld,
da sitzen, die meisten Leute schon vorm Rechner,
dann kann man schon davon ausgehen, dass das so funktioniert.
Ja.
Ja, ja, ja.
Naja, ich meine, das ist halt ganz anders,
als man das sozusagen so kennt.
Aber ich meine, wenn man so ein bisschen drüber nachdenkt,
dann ist das eigentlich gar nicht so blöd.
Das ist schon interessant.
Also der größte Vorteil, den ich sehe,
ist wirklich die Entwicklungsgeschwindigkeit.
Ich habe kein HTML, ich habe kein CSS,
ich habe kein JavaScript, ich kann reines Python schreiben
und kann mein Feature deployen.
Ja.
Ja, ja.
Und ich mag Python.
Und ich mag weniger CSS und JavaScript,
das mag ich nicht so gerne.
Ja.
Also ich kann es, ich komme nicht drum rum.
Also ich mache das auch, aber nur, wo es wirklich nötig ist.
Ja.
Ja.
Ich überlege gerade, man hat sich so ein bisschen daran gewohnt.
Also ich finde zum Beispiel mittlerweile schwierig,
das Frontend nicht mit CSS irgendwie,
vielleicht auch ein bisschen mit JavaScript zu stylen,
weil mir so ein paar Sachen dann immer fehlen.
So diese dynamischen Sachen, an die man sich dann doch irgendwie gewöhnt.
So Headless UI oder so.
Das geht mir schon auf die Nerven, wenn ich jetzt in Django,
das ohne Rest API benutzen möchte,
sondern es in die Templates einbaue.
Das ist manchmal schon immer so ein bisschen struggling,
weil ich halt da schon relativ viel auf Vue.js klebe.
Ja, aber das ist ja kein Problem von, also es ist ja beides.
Das ist ja die Frage des Ökosystems.
Die Frage ist halt, welche Leute haben sich schon
wie viel auseinandergesetzt mit Dingen zu entwickeln,
die das schön, einfach und pretty zu benutzen machen.
Du meinst, ach so, ja gut, okay.
Also wenn du aus der Entwicklersicht drauf guckst
und dir dann überlegst, okay, wenn ich jetzt.
Schnellproduktivität.
Geschichten mit irgendwie UI-Sachen,
wenn ich quasi fürs Web eine Applikation so schreiben will,
wie ich das sonst mit PyQt machen würde.
Welches, was nehme ich denn da?
Dann landest du wahrscheinlich bei den SPAs
und dann landest du halt auch irgendwie bei irgendwas
von den großen UI-Frameworks, die es halt für JavaScript gibt.
Weil genau, da ist halt schon am meisten Arbeit reingegangen.
Also ich binde mir natürlich da so ein bisschen einen Klotz ans Bein.
Naja, aber dafür habe ich natürlich auch das ganze Ökosystem mit damit.
Ich bin halt nicht ganz alleine.
Das Problem wäre jetzt bei PyQt in Python mit den Bindings.
Ich muss das halt alles selber bauen.
Also vom Scratch irgendwie.
Ich muss mir selber gerade überlegen, wie das aussehen muss.
Ich frage mich gerade so ein bisschen,
was ich auch noch gerne von Martin wissen würde,
wie überhaupt so ein UI strukturiert ist so prinzipiell in Python.
Also von der Struktur her.
Also ich glaube, das ist gar nicht so groß anders,
als wenn man mit Django das machen würde.
Also es gibt einen Event-Loop.
Und ja, eigentlich dreht sich alles um das Event-Loop.
Und wenn man was Asynchrones braucht,
dann bietet Qt da auch was Asynchrones.
Das ist im Wesentlichen eine Python-Klasse.
Ja.
Was interessiert dich speziell?
Also mich interessiert vor allem das UI irgendwie.
Baue ich zuerst mir einen Rahmen
und dann da verschiedene Container rein?
Oder mache ich das irgendwie über so Floating-Geschichten?
Oder mache ich das alles statisch?
Ach so, jetzt habe ich dich falsch verstanden.
Ich dachte, du meinst das Design der Python-Applikation.
Aber du meinst tatsächlich die Oberfläche an sich.
Ja, also Qt hat unterschiedliche Wege, wie man das machen kann.
Ich habe da auch noch nicht alle bis ins Detail ergründet tatsächlich.
Auch nach drei Jahren noch nicht.
Aber der Standardweg ist,
man programmiert sich sozusagen seine Oberfläche.
Also ich sage, ich möchte einen...
Also es gibt verschiedene Frame-Arten.
Zum Beispiel einen horizontalen Frame, einen vertikalen Frame
oder was tabellenartiges oder was formularartiges.
Und dort gruppiere ich mir quasi meine Elemente rein.
In diese Boxen, sage ich mal.
Und das Ganze ist responsiv, wenn man das will.
Auch animiert?
Wie bitte?
Auch animiert?
Ja, kann alles.
Du kannst animieren.
Du kannst dir die Widgets angucken, die es so gibt.
Animiert.
Du kannst dir Schieberegler machen.
Du kannst dir Knöpfe machen in bunt oder in blinkend
oder in wabernd.
Ja, das geht alles.
Woran ich eben denken musste,
ich glaube, es ist sehr stark davon abhängig,
ob das jetzt eine gute Idee ist,
dass man das einfach so nehmen kann, die Widgets.
Wahrscheinlich kann man sie ein bisschen stylen.
Oder ob das jetzt besser wäre,
das über CSS und JavaScript zu machen.
Hängt wahrscheinlich sehr stark von deinem Use-Case an.
Die Frage ist, wie viel Arbeit muss ich da noch reinstecken,
wenn das so ist, du willst irgendwas Kompliziertes machen.
Aber letztlich ist es nicht so wahnsinnig wichtig,
dass das jetzt zu deinen Brandfarben passt.
Weil das ist halt gar nichts, was jetzt Customer-Facing ist.
Sondern es ist halt irgendwie ein Ding,
was Leute benutzen, um irgendwas zu erreichen.
Aber das ist nie nach außen hin sozusagen ...
Wer ist denn der Customer?
Ja gut, natürlich schon die Leute, die das benutzen.
Aber das ist halt nur intern.
Das würde ich anders sehen mit dem nur intern.
Ja gut, aber warum ...
Okay, aber da würde ich jetzt denken,
an der Stelle macht es halt Sinn, vielleicht was zu verwenden,
womit du komplizierte Sachen hinbekommst,
die du vielleicht brauchst,
weil das ein kompliziertes Problem ist.
Aber die Anforderung, dass du das jetzt irgendwie besonders hübsch
oder so auf dich angepasst dargestellt hast,
dass es so aussieht, das ist halt nicht so wichtig.
Vielleicht wäre nicht das so hübsch hinbekommen.
Vielleicht wäre das ganz schrecklich viel Aufwand.
Aber wenn dir das egal ist, dann musst du es nicht machen.
Naja, also du meintest gerade,
entweder ich mache es mit CSS oder ich mache es mit Qt.
Das stimmt nicht so ganz.
Was ich meinte, ist nicht mit CSS oder mit Qt,
sondern ich meinte, was ich mit den ganzen Frameworks habe,
die ich halt gerne benutze, keine Ahnung, Tailwind oder sowas,
damit ich halt schneller produktiv für ein Utility oder so,
für Utility-Klassen einbauen.
Aha.
Wenn ich das ganze CSS dann immer selber schreiben muss
und dann muss ich mir erst mal überlegen
und dann muss ich erst mal so ein paar Boxen bauen,
dass das alles so passt, dann ...
Na ja, kommt drauf an.
Also Qt hat auch noch einen Designer.
Wenn du das Projekt nicht kommerziell nutzen willst,
kannst du diesen Designer nutzen.
Aber wenn ich das nicht kommerziell nutze ...
Genau. Kannst du den Designer nutzen.
Kannst du den mitziehen und ablegen quasi?
Jetzt erinnere ich mich. Das hatte ich genauso.
Wie man das früher von, ich glaube, Visual Basic ...
Ja.
Da war das so ähnlich schon. Kann man auch, wenn man will.
Der war auch sehr hübsch.
Ich hatte tatsächlich, glaube ich, den angefangen auszuprobieren
und dann bin ich darüber gestolpert,
dass man das irgendwie mit der Lizenz eben nicht benutzen darf,
wenn man das macht.
Okay, ja.
Ich kenne jetzt die iOS-Seite besser, aber da Xcode und so,
da gibt es ja auch solche Dinge,
wo du dann halt grafisch dann die ganzen Elemente sozusagen ...
Dann kannst du sogar Linien irgendwie da hinziehen
und dann werden Event Listener hinzugefügt oder keine Ahnung.
Ja, genau. Damit geht das wahrscheinlich auch irgendwie.
Aber na ja, ich könnte mir schon vorstellen, dass ...
Also du kannst zum Beispiel an der iOS-App, da kann ich es halt.
Ich nehme mal an, dass es bei Qt genauso ist.
Damit kannst du im Grunde alles machen.
Aber wenn du jetzt eine iOS-App so hinkriegen willst,
dass die genauso aussieht, wie du das haben möchtest,
ist das halt eine Menge Arbeit.
Und zwar wahrscheinlich mehr Arbeit,
als wenn du eine Webseite so aussehen lassen möchtest,
wie du das aussehen lassen möchtest.
Ohne, dass ich jetzt angreifen möchte,
aber das ist so ein bisschen mein Problem mit diesen Beauty-Sachen
oder meine Kritik daran.
Ich glaube, dass das wirklich schwieriger ist,
das richtig schön hinzubekommen.
Versuch mal in HTML und CSS eine Tabelle so hinzukriegen,
mit all den Widgets und Features, die du vielleicht haben möchtest,
für deinen Use-Case.
Dann hast du an der Stelle ein Riesenproblem.
Das geht ja auch nicht gut.
Ja, also aus meiner Perspektive.
Mein Branding mache ja ich.
Ja.
Von daher hatte ich das Problem nicht.
Ja.
Dazu kann ich dann entsprechend auch nicht so viel sagen.
Also was ich sagen kann ist,
man kann jedes Element mit CSS stylen, wenn man das will.
Ich glaube, so groß und unterscheidend tut sich das gar nicht.
Versus Django.
Ah ja, okay.
Mit dem Unterschied natürlich,
wenn man sein geliebtes Framework nutzen will,
Tailwind, was weiß ich.
Das funktioniert natürlich anders.
Aber gut, wenn man sich ein anderes Framework auswählt,
dann sind halt Dinge anders.
Also was ich meine, du kannst halt jetzt,
wie wir das bei unserem Podcast gemacht haben,
der Bootstrap importiert und sonst nichts tun für das Design,
weil ihm das nicht wichtig ist.
Ja, ja, genau.
Ich glaube auch, das ist der Grund,
warum Bootstrap so viel verwendet wird in internen Tools.
Weil da ist es halt oft egal.
Ist halt wurscht.
Wie das jetzt aussieht,
es muss halt bloß halbwegs bedienbar sein.
Und das kriegt man mit Bootstrap ja schon hin.
Es sieht halt nicht so toll aus.
Was möchte man am Anfang immer machen,
wenn man jung ist und Software entwickeln will,
möchte man Spiele programmieren.
Das geht mit Qt wahrscheinlich schon ein bisschen besser als mit Web.
Aber auch da bin ich mir nicht sicher,
ob das die richtige Idee ist, das so zu betrachten.
Nee, ich glaube, da würdest du ...
Mit Spielen ...
Ob da eine 3D-Ansicht möglich ist oder nicht.
Ob da eine zweidimensionale ...
Kann man Fensteransicht sagen zu Qt?
Für Spiele wäre jetzt Qt nicht mal eine erste Idee.
Aber kommt sicherlich aufs Spiel an.
Ja, ich glaube auch.
Nur weil man es in Python machen wollen würde.
Bürosimulator 3.0.
Ja, genau.
Aber ...
Das geht wahrscheinlich gut.
Da kam ich mit Qt schon ein bisschen weiter.
Es war auch so eine Art Bürosimulator 3.0.
Ja.
Ich habe einen Fantasy-Manager
für unsere Eishockey-Runde gebaut.
Ja, gut, sowas.
Es hat wundervoll funktioniert.
Ja.
Es war sogar hübsch in Qt.
Aber ja, ich glaube,
man will das nicht benutzen.
Aber was mich auch noch mal interessiert,
rein ressourcenverbrauchmäßig,
wenn ein User eine Applikation startet mit Qt,
dann habe ich schon das Gefühl,
wahrscheinlich ein paar Megabyte
wird die dann schon an den Hauptsprecher brauchen.
Die muss ja dann auch die ganze Zeit laufen.
Obwohl, die muss eigentlich nur so lange laufen,
wie ein Benutzer sie tatsächlich benutzt.
Dann kann man irgendwie den State rausserialisieren.
Und erst beim nächsten Mal,
wenn der Nutzer wieder kommt,
dann muss man sich das irgendwie wieder herholen.
Genauso ist es.
Aber tatsächlich hast du,
solange ein Nutzer quasi da drauf guckt,
also die Frage eingeloggt ist,
oder ich weiß nicht, wie man das beschreiben kann,
solange irgendwie eine Session aktiv ist,
wie auch immer,
brauchst du halt diesen Hauptsprecher.
Ja, genau.
Ja, okay.
Das ist ja wobei,
da auch einiges im Shared Memory sich befindet.
Ja, die ganzen Bibliotheken wahrscheinlich, ja.
Das macht Python von sich aus schon.
Das heißt, man hat jetzt nicht komplett
den Overhead von einem Nutzer auf alle Nutzer,
sondern da wird noch einiges geteilt.
Aber ja, prinzipiell schon.
Ja, weil da bist du natürlich dann
wahrscheinlich ein bisschen ineffizienter
als eine Webanwendung,
die halt nur,
wo es dann halt einen Prozess gibt,
der halt dann viele Requests von unterschiedlichen Nutzern.
Genau.
Also speicherintensiver ist das schon.
Wobei es nicht so wichtig ist,
dass der Sprecher schnell beschrieben werden kann.
Also mit anderen Worten,
es muss nicht zwingend RAM sein.
Ah, okay.
Was einem die Möglichkeit gibt,
einen Swap-Laufwerk anzulegen.
Das irgendwo hinzutun,
wo es einen relativ zügigen Zugriff hat.
Und ja,
da geht es auch.
Ja, und SSDs sind jetzt auch nicht so
super langsam.
Genau, also eigentlich sind wir
mit der Swap-Variante unbegrenzt
im Hauptspeicher.
Fast.
Ja, ja, ja.
Das ist ein ganz interessantes Modell.
Ja, und
ja, ich meine,
für die Benutzer ist das ja auch so ein bisschen,
die kommen aber gut damit klar
und nehmen das so an.
Oder hörst du da häufiger,
das ist irgendwie komisch.
Ich weiß es nicht genau.
Also bis jetzt habe ich tatsächlich dazu noch
gar nichts gehört.
Interessant.
Es scheint einigermaßen intuitiv
zu sein.
Ja, weil man es ja auch vom Desktop schon kennt.
Ja.
Also die Art der Bedienung, sage ich mal.
Geht denn da wirklich alle,
jetzt stelle ich mir natürlich die Frage,
wie ist das denn jetzt mit Tastaturkürzeln oder
rechter Mausklick oder so,
das muss ja jetzt alles durch den Browser durch.
Der Browser lässt ja jetzt nicht alles durch.
Manche Sachen fängt der Browser ja wahrscheinlich schon ab,
wenn man ein anderes Tab auswählt
oder das Fenster zumacht oder so.
Das geht dann ja gar nicht bis auf die andere Seite.
Aber ich weiß jetzt auch nicht genau,
ich weiß es nicht.
Also hätte man das selber entwickeln müssen,
den Client in JavaScript,
hätte man wahrscheinlich mehrere Jahre gebraucht.
Muss ich aber nicht.
Der ist schon fertig.
Und der kann tatsächlich alles,
was man sich unter Desktop so vorstellt.
Also Rechtsklick ist kein Problem,
Tastatureingaben sind kein Problem,
Tastaturkürzel sind kein Problem.
Also das ist eigentlich alles da
und wird von Firefox und von Chrome
supported und damit eigentlich
von 90 Prozent
von allem, was es da so gibt.
Ja, ja, ja.
Ja, das heißt,
man kriegt auch gar nichts,
aber es ist schon in einem Browserfenster,
muss es halt sein.
Richtig.
Ja, aber ansonsten kriegt man eigentlich gar nicht mit,
dass es wirklich ein Browser ist,
sondern es verhält sich eher wie eine native Applikation.
Es verhält sich so, als ob man die Anwendung lokal auf dem Rechner hätte
auch copy und paste, wahrscheinlich bei Text kein Problem.
Wenn ich jetzt irgendwas da reinziehe
oder so, dann passieren wahrscheinlich komische Sachen.
Genau, es gibt Dateitransfer,
es gibt, wenn man will, sogar Audio.
Ah.
Ja.
Ja, schick.
Ich glaube, dieses Guacamole
muss ich mir auch mal angucken.
Das scheint ja schon sehr interessant
zu sein.
Ja, ja.
Ja,
lass mal überlegen,
was kann man sich denn noch so vorstellen,
was interessant sein könnte?
Ist das der Client selber,
der Python-Wrapper
um Qt kommt selber auch von,
ich weiß nicht,
wie hieß denn diese Firma nochmal,
die Qt baut?
Qt Foundation, meine ich.
Ah ja, gut, ich weiß es nicht mehr.
Da war ja auch noch lange Zeit,
vielleicht gibt es die Firma auch nicht mehr,
keine Ahnung, Foundation klingt jetzt irgendwie
äh, genau, von denen
kommen die Python-Bindings,
weil ich habe irgendwie gehört, dass es PySide gibt.
Genau.
Das sind die dann.
Wenn ich Qt sage, dann meine ich PySide.
Ah, okay.
Es gibt unterschiedliche Ausprägungen,
wie man Qt nutzen will,
kann, und
ja, ich habe mich für PySide entschieden.
Mhm.
The Qt Company.
Ah, okay.
Hier gibt es ja noch so ein paar andere Sachen, ne?
Vielleicht wollen wir die noch kurz erwähnen.
Also Kiwi haben wir jetzt schon, glaube ich, erwähnt.
Wir haben noch WXPython und
kennt jemand ein GTK-Bindings für
Python? Genau, also
GTK, würde ich sagen, ist so das zweite
große Framework, was man da nutzen kann.
Was
nicht ganz, aber so ungefähr
auf Augenhöhe, naja,
andere würden wahrscheinlich was anderes sagen.
Also es ist auf Augenhöhe mit Qt
und ja, die Widgets
sind ähnlich weit gediehen.
Mhm.
Kann man das dann quasi aussuchen.
Du würdest da wahrscheinlich alles,
dein ganzes User-Interface und auch dein
Desktop komplett mit Qt bauen oder
mit GTK?
Dafür
habe ich GTK noch nicht zu sehr
in die Tiefe getestet, um das sagen zu können.
Aber ja,
also es scheint ähnlich weit zu sein.
Aber dafür habe ich es mir nicht genug angeguckt, um jetzt
speziell sagen zu können, das geht damit und das geht
damit nicht. Und dann gibt es noch
einen Wrapper da irgendwie drum, PySimpleGui,
der mit dem einfache Sachen irgendwie dann auch
gehen, schneller oder sowas, oder noch mehr
High-Level-Interface, oder?
Kenn ich auch nicht im Detail, PySimpleGui.
Mhm, das macht er so beinahe
auch über Qt, kann man
dann, oder wxPython.
wxPython wäre nicht so ein Ding.
Mhm.
Habe ich jetzt auch mal kurz ausprobiert, aber
war so mittelhübsch. Ja,
habe ich da schon ganz lange nichts mehr von gehört. Ja, genau.
Aber es gehen wohl ein paar Sachen.
Ja, also
PySimpleGui ist
immer noch so ein bisschen...
Ja, wobei ich tatsächlich, also
ich würde schon die Ansicht vertreten, also ich meine auch,
wenn das alles
ja schon eine interessante Geschichte ist,
aber ich habe schon so das Gefühl,
dass so diese Desktop
UI-Geschichten so ein bisschen...
Also, vielleicht riechen sie
auch nur komisch.
Also, ich meine, da könnte es schon so ein bisschen tot sein.
Was ist mit BeeWare?
Ja, ja, genau.
Also, das würde ich auch so sehen.
Also, das ist
Russell Keith McGee, der hat ja
auf irgendeiner PyCon
eine Keynote drüber gehalten,
was sind die größten Gefahren für Python.
Oder Black Swan
irgendwas war im Titel.
Dem würde ich mich durchaus anschließen.
Also, was für Python richtig gefährlich ist,
dass das nicht auf Mobile läuft.
Weil tatsächlich irgendwie Computer werden verdrängt.
Also, die Telefone sind inzwischen,
also, ich würde mal sagen, ein durchschnittliches
iPhone ist wahrscheinlich schneller und leistungsfähiger
als ein durchschnittlicher Desktop-Rechner.
Ja, du stellst halt einfach irgendwo so ein Tablet hin und dann
gibt es halt ein paar Knöpfchen drauf und dann muss das halt dann funktionieren.
Ja, und Kinder wachsen damit auf.
Die kennen das gar nicht mehr. Die denken sich so, was sind das
so komische große Dinger da? Seltsam.
Was ist das? Kann man die jetzt swipen?
Ja, genau. Tippen dann auf den Bildschirm, dann passiert nichts.
Dann ist es kaputt.
Das ist ein Problem, weil
in 10 Jahren oder 20 Jahren
wird das wahrscheinlich keiner mehr benutzen.
Halte ich für eine steile These.
Ja, gut, aber ich meine,
das ist ein Risiko.
Ob das jetzt so eintritt oder nicht, ist natürlich unklar.
Wie hoch ist das Risiko?
Wenn man das benutzt, muss man wahrscheinlich schon relativ viel
sich damit auskennen.
Ja, aber
wie auch immer,
dass es da ein Risiko gibt,
würde ich schon sagen, einfach deswegen, weil Python
nicht läuft. Es läuft da nicht.
Und das ist ein Problem.
Und jetzt muss man entweder irgendeinen Weg finden,
wie man Python da,
wie man sozusagen es schaffen kann,
dass man Python entwickelt und dann halt aber auch eine
iOS- oder Android-App dabei rauskommt.
Und das ist halt genau, BeeWare macht das halt genau.
Es gibt dann diverse Komponenten, die dafür nötig sind.
Ja, letztlich
macht es so was Ähnliches, was halt React Native
oder so auch macht. Es ruft schon die
echten UI-Funktionen dann auf
von den Frameworks.
Also kompiliert runter quasi auf
Kotlin oder?
Nicht ganz, nee.
Es gibt unterschiedliche Komponenten
und die machen unterschiedliche Sachen, aber letztlich
es gibt auch Wrapper, um
die echten Funktionen sozusagen drum herum
und die werden dann aufgerufen.
Und
ja.
Wäre auch interessant zu wissen, wie React das eigentlich
macht. Und dann gibt es ja noch sowas wie Ionos oder
Capacitor oder so.
Teile sind halt komplett nativ
und kann man aus dem Web nachladen
und kann JavaScript ausführen.
Oder Elektron macht das ja auch so.
Ja, also
ich glaube, da sind wir auch noch nicht durch.
Das war auch ganz interessant.
Ich hab mich jetzt, ich war letzte
Woche Donnerstag auf einem Treffen
der Java User Group.
Was hat dich denn dahin verschlagen?
Ja, ich dachte, ich muss mich mal weiterentwickeln
Ich bin da hingegangen, weil
der Vortrag, da hat mich
irgendwie, ist mir aufgefallen,
dass da Stefan Tillkopf und
Ebert Wolf, die machen
Software minus
Architektur, TV und
die machen auch einen Podcast und die sind
beide bei InuQ und die haben auch schon viele interessante
Stefan Tillkopf
ist oft zu Gast in anderen Podcasts.
Letztens war er bei der Premiere
und hat da über Architektur
gesprochen. Die machen viel Software Architektur.
Die sind auch so, das ist so eine der Firmen, wo man
hingeht, wenn man jetzt ein großes Problem hat, ein großes
Projekt und man möchte jetzt irgendwie
so, dass einer mal wirklich erklärt, wie man
das denn so angeht und wie man das besser machen
kann, dann ist das so eine der Adressen, zu denen man
gehen kann und wahrscheinlich eine der
renommierteren Adressen.
Ich höre dem immer gerne,
ich höre zum Beispiel Stefan Tillkopf immer gerne zu,
weil ich finde, der kann das immer schön
lernen, was so die Probleme sind, die man da hat
und
ja, deswegen bin ich da hingegangen und
sie haben geredet über, wie sah das eigentlich
vor zehn Jahren aus, wie sieht es heute aus, haben sich die Probleme
irgendwie verändert in der IT,
welche Sachen sind besser geworden, welche
Sachen sind immer noch genauso wie vorher
und genau
da
jetzt bin ich schon wieder abgeschweift,
da war auch einer, der machte
so ein bisschen Elixier und
auch kein Java
und
der meinte, in letzter Zeit
macht er immer mehr Dart, weil
Dart für,
das ist diese Sprache von, genau,
von Google für so
das sollte, glaube ich, auch
mal irgendwann Webgeschichte werden, aber jetzt hat es sich
so halt eine Nische gefunden,
man kann damit halt Mobile Apps
irgendwie oder Apps für Android
Telefone oder iOS-Geräte
entwickeln, das ist eine eigene
Sprache, Flutter ist halt
das Ding, was dann UI macht und
das braucht im Grunde nur irgendwie ein Canvas,
wo es halt irgendwie
SVG rendern kann oder so, glaube ich
und macht dann eine UI
komplett selber, also das ruft nicht irgendwelche Funktionen
nativen UI-Funktionen auf
von
dem entsprechenden irgendwie
Gerätehersteller
sondern
das zeichnet alles selber, also alle Buttons
und Dinge und so werden halt einfach
irgendwie tatsächlich in ein Canvas reingezeichnet
und da Canvas überall da ist und man da
irgendwie bliebige Dinge reinzeichnen kann,
kann man halt alle Sachen gleich aussehen lassen
auf allen Geräten damit
und halt auch relativ, und es ist halt
einfacher zu entwickeln, als wenn man jetzt irgendwie,
das haben ja diese statischen Programmiersprachen
oder statistisierten Programmiersprachen, da ist halt
immer so, ja, ich meine
gut, mit Kotlin ist es auch schon ein bisschen besser geworden,
aber Java ist halt schon
für Android, das ist halt schon sehr
verbose und man muss halt sehr viel
Boilerplate schreiben und auch Swift ist da vielleicht
ein bisschen besser, aber so wahnsinnig viel
besser, auch nicht, ist auch relativ schrecklich
und ich meine,
mein böser Scherz
an der Stelle wäre ja mal so, naja, Softwarearchitektur hat mich auch
lange nicht interessiert, weil man schreibt ja in Python oft nicht so
große Sachen, weil man muss ja nicht so viel schreiben
und wenn Java für
Hello World halt schon tausend Zeilen
irgendwie Boilerplate schreiben muss, dann davon
muss man sich Gedanken um Softwarearchitektur machen,
einfach um das Boilerplate-Zeugs
irgendwie zu organisieren
und ja,
das muss man mit Dart auch nicht so und dann
hat man da eine Alternative,
die vielleicht ein bisschen einfacher zu verwenden
ist und das setzt sich gerade durch, also ich glaube
das, was der sagte, war
irgendwie inzwischen sind fünf, also der
Marktanteil von Flutter ist halt
inzwischen größer
als der von allen anderen Sachen, die es da halt
auch gibt, mit Elektronen und keine Ahnung
die ganzen, als
von allen anderen zusammen
und das sind halt die Schulden...
Ja, man spart sich halt
die Doppelentwicklung,
also wenn man zum Beispiel eine App machen will
für Android und IOS,
dann muss man es halt nur einmal schreiben, das ist der
große Vorteil.
Es bringt aber, wenn man es länger
verwendet, doch auch so
das eine oder andere Problemchen mit sich,
wo man am Anfang nicht unbedingt
von weiß.
Ja,
also ich meine, das ist halt immer
schwierig, glaube ich.
Also ich hatte zum Beispiel,
also ich habe eine App
oder mehrere in Flutter entwickelt
und
es gibt, also
es gibt dort ein Paketsystem, sozusagen.
Also man kann sich
dort Zusatzfunktionalitäten, ähnlich
wie in Python mit Libraries,
kann man sich, oder Packages,
kann man sich dort auch
reinladen, sozusagen.
Das Problem
daran ist so ein bisschen,
dass die oftmals
von externen Entwicklern kommen,
so von dir und mir.
Und externen Entwickler dann
nach anderthalb Jahren gerne mal
die Lust an den Projekten verlieren.
Und dann hat man, ja,
so unmaintained dependencies
in seinem Projekt drin und
muss dann gucken,
dass man eine neue Bibliothek
halt findet, die das gleiche noch kann.
Und
das heißt, wenn man ein Projekt
fertig entwickelt hat und man guckt
ein halbes Jahr später
und versucht es quasi wieder zu kompilieren,
dann wird
das auf jeden Fall nicht funktionieren.
Nach einem halben Jahr
ist es ausgeschlossen, dass es funktioniert.
Zum einen
führt Google selber regelmäßig
Änderungen im Framework ein, und zwar
Breaking Changes.
Und zum anderen sind halt
Pakete dann nicht mehr aktuell
und müssen ersetzt werden, sodass
der Wartungsaufwand dafür nach meiner Einschätzung
sehr, sehr groß ist.
Hm.
Okay, das erinnert mich jetzt auch ein bisschen an die
JavaScript Developer Experience,
hätte ich gesagt.
Also vielleicht hat sich das inzwischen verbessert.
Das weiß ich nicht genau.
Aber das waren auf jeden Fall die Probleme,
mit denen ich so zu kämpfen hatte.
Also ich habe auch gehört, dass
Flutter irgendwie so für größere Projekte
irgendwann nervig wird.
Und Capacitor habe ich sehr empfohlen gekriegt.
Und das geht halt auch mit Vue.js.
Ja, ist quasi dann so ähnlich
wie React Native für
Vue, ne? Ja, genau. Es gab irgendwie auch mal
Vue Native, aber das ist auch kaputt gegangen, aus
denselben Gründen, weil irgendwer ja keine Lust mehr hatte.
Und das klingt so ein bisschen
als wäre das so das neueste Ding.
Aber
ob das gut funktioniert und wie lange das funktioniert, weiß man halt auch alles nicht.
Also was mir ja ehrlich gesagt
am liebsten wäre, wenn es so ausgeht,
wäre halt, dass es auf allen Plattformen
gut genug funktioniert, dass man die anderen Sachen nicht
kaufen muss. Aber gut.
Und mit Safari 16.4
ist ja jetzt natürlich auch
iOS hat jetzt einen Großteil
der Sachen, die gefehlt haben oder die bis jetzt so richtig
schmerzhaft waren, bekommen.
Und es sollte jetzt irgendwie
dann auch quasi auf iOS halt
eigentlich ganz gut funktionieren.
Aber okay, ja. Ja, aber diese PWA
ist halt auch immer so ...
Ja, ja, es hat schon alles noch so seine Ecken und Kanten.
Es ist nicht ganz das gleiche,
als wenn man Native das macht.
Kennt ihr PyScript?
Ja, klar.
Das ist doch eigentlich
die Lösung aller unserer Probleme.
Ja.
Ja.
Also es geht quasi darum, dass man
Python einfach im Browser, also
irgendwie im Browser laufen kann.
Ja, das
große Problem an der Stelle ist halt,
dass das, oder es ist halt die Frage,
ob das ein großes Problem ist oder nicht,
dass das halt bedeutet, dass man
halt irgendwie ein paar Megabyte Zeug
irgendwie runterlädt, weil der Python-Interpreter,
der ist halt nicht im Browser drin.
JavaScript-Interpreter halt schon.
Und das bedeutet, man muss halt erstmal
ein paar Megabyte irgendwie runterladen
und kann dann erst irgendwas machen.
Hm.
Wobei, das ließe sich ja leicht lösen, wenn sich
das so weit durchgesetzt hat, dass die Browserhersteller
sagen, ja gut, dann bundeln
wir das halt mit in den Browser rein.
Ja, das wäre natürlich eine Perspektive.
Das wäre natürlich schick. Dann hätten wir gewonnen,
aber naja.
Ja, aber dann kommen auch noch alle anderen und wollen das auch haben.
Ja, ich weiß es nicht.
Aber ja, natürlich, also das ist auf jeden Fall
auch ein interessanter Weg, ja.
Das halt alles irgendwie dann nach WebAssembly
kompiliert letztendlich.
Ihr habt letztens gehört, das fand ich auch sehr interessant,
dass tatsächlich,
ich glaube, Figma war's.
Ich hoffe, ich erzähle jetzt keinen allzu
großen Unsinn, aber ich glaube,
Figma ist tatsächlich
eine Applikation, die ist geschrieben in C++
oder so
und dann kompiliert das aber zu WebAssembly
und läuft im Browser. Aber die
Leute, die das entwickeln, entwickeln tatsächlich in C++.
Ja.
Okay.
Figma ist das Design-Tool für alle, die es noch nicht können, mit dem man
ohne Plan von Entwicklung so
Screens zusammen klicken kann, ein bisschen mit
Funktionalität versehen, um so Klickstrecken zu verwirklichen.
Wo es auch tolle Tools gibt,
wo man das exportieren kann als Vue.js-Komponenten
oder direkt mit CSS
rausrendern kann und so weiter vom Figma.
Dann spart man sich so den Zwischenschritt, was
sehr praktisch ist. Was mein Problem wäre,
sowas wie Qt zu verwenden,
weil ich glaube, ich möchte jemanden,
der von Design mehr Ahnung hat als ich, das bauen lassen,
das dann exportieren und
dann in meinen Anwendungen importieren.
Dann muss ich mich darum nämlich nicht mehr groß kümmern.
Ja, aber da
würde ich eben denken, das ist genau diese
Frage.
Du hast halt eine Bandbreite von
das Design ist super wichtig und
du hast eigentlich nicht so viel komplizierte Funktionalität.
Auf der einen Seite vielleicht und
auf der anderen Seite hast du halt, du hast viel komplizierte Funktionalität,
aber Design ist nicht so wichtig. Und je nachdem,
wo dein Use Case ist, ist halt das eine oder andere
halt interessanter, weil wenn du
halt sehr viel komplizierte Funktionalität hast
und dann
versuch das mal einem Designer zu erklären.
Also ich würde auch der Vertriebs- und auch der Marketing-Design
sagen, Design ist alles. Also ich habe
immer das Gefühl, die Sachen, die super toll aussehen,
aber nichts können, verkaufen sich x-mal
viel besser als die Sachen, die es anders machen.
Das kommt auf deine Zielgruppe an.
Ja, ich würde sagen,
die Normalverteilung
in der Mitte sagt leider was anderes.
Also ich wäre durchaus auch bei
gute Funktionalität würde ich eher bevorzugen.
Aber naja.
Ich glaube, dass es selten das dem so ist.
Ich weiß es nicht.
Ja, ja.
Ja, aber genau, vielleicht noch mal zu dem
MiaPlan.
Das ist aber quasi
ist es entstanden
für einen konkreten Anwendungsfall,
in dem es dann auch eingesetzt wird,
aber es verwenden jetzt auch andere Leute schon
und es funktioniert eigentlich ganz gut quasi.
Und man kann das, also wenn man irgendwie so ein Problem hat
mit, man möchte irgendwie
Personalplanung machen, im Grunde kann
jeder das einfach so dann verwenden.
Kann jeder das einfach so verwenden.
Genau.
Das, ja genau.
Klingt ja auf jeden Fall schon mal gut.
Ich weiß nicht, fällt dir noch was ein?
Ich überlege gerade, ob ich noch irgendwelche Fragen habe oder
irgendwelche Dinge, über die man mal reden könnte, aber.
Wir haben jetzt alles wirklich tief behandelt.
Also was mir,
ich höre euch ja auch regelmäßig.
Was mir aufgefallen ist,
es gibt noch einen
Unterschied.
Was wir anders machen, was ich anders mache,
als ihr wahrscheinlich.
Ihr nutzt gerne Datenbanken.
Ich nicht.
Ja, das ist auch interessant, ja.
Und
was nimmst du? Files?
Datei-basiert, genau.
Die Gründe, warum ich,
also es stimmt natürlich nicht,
also ich habe auch Datenbanken, aber nur
da, wo ich sie haben muss.
Also zum Beispiel,
Guacamole hat
eine Datenbank im Hintergrund.
Da komme ich nicht drum rum.
Aber ja, Datenbanken.
Da habe ich verschiedene Nachteile, die ich da sehe.
Zum Beispiel brauche ich ein Tool, mit der ich
die angucken
kann, muss. Das heißt, wenn ich
mal schnell was nachschauen will,
dann geht das mal nicht so einfach.
Ich kann mich nicht einfach per SSH auf einen Server einloggen,
kann mir eine Datei anschauen
mit dem Dateieditor
meiner Wahl, sondern ich muss da irgendwie
dann mit einem SQLite,
was weiß ich, Viewer oder von außen,
gut, da kann ich einen Port aufmachen, aber den muss ich auch
erst mal aufmachen,
dann da drauf.
Also das ist deutlich einfacher mit einer Datei,
würde ich mal sagen.
Dann habe ich die Wartung
der Datenbank. Ich möchte ja regelmäßig,
möchte ich da, möchte ich die
reinigen, ich möchte die komprimieren
vielleicht, alte
Sachen rausschmeißen. Das habe
ich auf Dateiebene zwar auch
so ein bisschen, aber
ich würde sagen, es ist da wesentlich einfacher.
Also wenn ich da
Sachen habe, die ich nicht mehr brauche, dann kann ich
die mir konkret angucken
und kann dann zum Beispiel in Python dafür sorgen,
dass die wieder rausfliegen.
Wie machst du das? Also pickelst du die Sachen dann weg oder
schreibst du das JSON weg?
Ne, ich mache alles, was geht,
mache ich Menschen-lesbar.
Also ja, JSON
oder INI.
Ja.
Also JSON mache ich auch, in einigen Applikationen schreibe ich einfach
tatsächlich JSON-Files raus.
Also JSON ist ganz nett,
das ist vor allem schnell.
Eigentlich
würde ich gerne noch woanders hin.
Es gab jetzt ein neues
Settings-Format
von Python.
Ah, Toml.
Message-Spec.
Das ist eigentlich das, wo ich jetzt hin
wollte, aber
ja, also sämtliche
Operationen, die ich eigentlich,
also ich brauche natürlich auch Operationen
für die Daten, die ich da lese, das ist klar.
Aber die mache ich eigentlich alle
in NumPy.
Also ich lade die Datei
in meinen Speicher rein
und das geht relativ schnell,
ich brauche nur die, also das geht mit der Geschwindigkeit,
mit der ich von der Platte lesen kann
und kann dann halt die ganzen Aggregationsfunktionen,
die ich brauche, was weiß ich,
Summe, Maximum und so weiter,
die habe ich in NumPy auch, also mache ich das in NumPy.
Ja, ansonsten Datenbank-Nachteile,
ja, ich muss natürlich,
ich muss die stoppen, wenn ich
einen Backup mache.
Ja, das weiß ich nicht, also da...
Ja, okay, gibt es vielleicht so eine Live-Variante?
Also ich kenne es noch, weiß ich nicht.
Also es kommt drauf an, was für einen Datenbank man verwendet, aber ich meine jetzt bei Postgres,
das geht schon.
Also muss man nicht stoppen.
Aber ja, das ist natürlich ein Problem.
Ja, du hast halt irgendwie einen Tail halt,
mit dem du irgendwie umgehen musst,
zwischen dem letzten Backup
und dem, wo du gerade backupen willst,
was da an Transaktionen gerade quasi reinkommt,
der relativ groß werden kann, wenn du
viel Traffic drauf hast.
Ja, gut, aber da gibt es schon Wege,
damit umzugehen. Ich meine,
was da empfohlen wird, ist ja dann auch immer nicht,
das selber zu machen, wenn man das nicht,
weil das natürlich ein Riesenaufwand ist, sich da einzuarbeiten.
Das ist durchaus ein Nachteil,
ganz klar.
Man kann ja auch da Dienstleister benutzen
und sowas wie Crunchybridge,
oder sonst irgendwen,
der halt sowas Managed Postgres anbietet oder so.
Okay, interessant.
Dann pack ich bitte
nochmal in die Show Notes.
Aber man kann das auch selber machen, was sie tun.
Hat aber den Nachteil,
dass dann meine Daten woanders liegen.
Und das will ich
eigentlich nicht, sondern
mein Ansatz ist,
ich möchte eigentlich gar keine Kundendaten
haben.
Und wenn ich sie haben muss,
möchte ich so wenig wie möglich davon haben.
Also
zum Beispiel bei der Anmeldung
verlange ich auch nur Nutzername und Passwort mehr nicht.
Noch nicht mal eine E-Mail.
Gut, aber
wenn jemand sein Passwort
vergisst, genau.
Dann kann er mich
anschreiben.
Dann kann er mich anschreiben und
falls das öfter passiert, das ist tatsächlich noch nie passiert,
dann mache ich da
ein automatisches Verfahren draus.
Aber solange das nicht häufig vorkommt,
ich antworte auch schnell.
Ich denke auch,
das ist halt wieder eine Frage,
wer die Kunden sind.
Also wenn du jetzt ganz viele Endkunden hast,
an denen du nicht viel verdienst,
dann ist
schlecht, wenn die Leute
alle dich anschreiben.
Wenn du nur wenig Kunden hast, die sich auskennen,
dann ist das halt alles nicht so schlimm.
Ich werde das auch automatisieren, solange das überhand nimmt.
Wenn das überhand nimmt, aber das ist nicht der Fall.
Datensparender, ich finde es interessant.
Ich weiß nicht.
Ich denke mir,
irgendwas könnte man mit den Daten noch anfangen.
So aus der ...
Es gibt ja auch
die Verantwortung an die Hand.
Wenn ich jetzt sage, ich habe hier einen Riesenhaufen von Nutzerdaten
mit E-Mail-Adresse, Passwort,
Bankdaten, was weiß ich
und dann kommt irgendjemand
auf meinen Server und trägt
das ganze Zeug raus,
dann habe ich auf jeden Fall ein Problem.
Das kann ich schon mal insofern vermeiden,
wenn ich das Zeug gar nicht erst habe.
Das würde aber auch für Managed sprechen,
weil dann hast du die Verantwortung auch abgegeben.
Naja.
Du schließt dann
einen Servicevertrag
mit dem, der das halt managt,
aber in der Verantwortung stehe trotzdem ich.
Also ganz so ist das nämlich.
Also wenn jemand dann ...
Nehmen wir an, du hast eine Managed-Datenbank
irgendwo gekauft zum Beispiel,
da geht irgendjemand rein
und trägt alle Daten raus, dann hast du natürlich
trotzdem ein Problem.
Auch wenn du das vertraglich dann sagen kannst,
ich bin jetzt vielleicht aus der Haftung,
aber das ist ja trotzdem Kacke für deine Kunden.
Genau, aber das kommt halt
vielleicht auf die detaillierte Vertragsbeziehungen
mit deinen Kunden oder mit den Kunden deiner Kunden an.
Ja, aber vielleicht willst du das auch einfach gar nicht.
Aber die Frage ist halt tatsächlich,
was jetzt aus der Datenrausträgersperspektive
sicherer oder besser ist,
wenn man jetzt ein kleines Team hat,
sich noch komplett um so ein Datenbank-Cluster-Management
zu kümmern zu müssen
oder das halt an einen Service-Insider auszusourcen,
der da vielleicht mehr Zeit für hat
oder mehr Ressourcen, weil er das nur macht
und da sich auch besser mit auskennt als man selber.
Und das geht ja für verschiedene andere Services auch so.
Ja, also es kann durchaus sein,
dass das sogar die sichere Alternative ist,
wenn du dich selber halt nicht damit auskennst.
Genau, oder man hat halt nicht so relevante Sachen.
Und ich sag mal so, ja, okay,
klar gibt es so Punkte, wo man jetzt gucken muss,
dass man jetzt nicht alles so sammelt,
also Krake, da gibt es ja so ein paar Google-Kraken,
die das so machen.
Ja, aber es gibt viele Unternehmen,
die erstmal alles in ihrem Data-Lake irgendwo hin...
Ja, also ich würde jetzt auch nicht alles...
Vielleicht kann man damit irgendwann mal irgendwas anfangen,
aber da bin ich auch kein Freund von, von solchen.
Also ich kann das so ein bisschen verstehen,
also jetzt nicht von Kunden an,
aber wenn ich jetzt so ein Request habe oder so,
warum soll ich die ganzen Informationen da wegschmeißen?
Also der neueste Trend scheint zu sein,
dass jeder Dienst, egal wie unwichtig der ist,
meine TelefonNumba haben will.
Das finde ich ganz, ganz grausam.
Ja.
Also ich würde jetzt auch sagen,
also mir geht es gar nicht so um Kundendaten,
sondern eher so um so Meta-Quatsch.
Log-Zeitstempel oder sowas.
So Telemetrie.
Ja.
Und ohne, dass ich jetzt irgendwie so einen Nutzer
daran identifizieren möchte, um irgendwie da noch
ein Quäntchen Umsatz rauszuquetschen,
sondern einfach nur so ein bisschen um den Flow
so ein bisschen besser im Blick zu haben.
Naja, technische Daten brauchst du natürlich,
sonst funktioniert die Software ja nicht.
Ja.
Ja, aber auch da,
ich meine, man macht sich vielleicht nicht immer klar,
welche Optionen man eigentlich hat.
Natürlich kann man irgendwie Sachen speichern und so,
aber die Frage ist halt,
wiederum, wenn du nicht so viele Nutzer hast,
du kannst ja auch einfach fragen.
Ja, also zum Beispiel,
wenn ich jetzt nicht ein Problem mit Latenz habe,
ich ziehe mir dann Maximum und schmeiße alles weg,
was ich nicht brauche.
Also man könnte natürlich auch direkt die Query so effektiv
stellen, dass man das Minimum holt.
Du kannst auch direkt die Datenbank
quasi in deinen Browser reinpacken.
Das geht natürlich auch.
Es gibt auch bestimmte Anwendungsfälle, in denen das nicht toll ist.
Aber, ja,
es gibt auch gute Gründe, warum Leute das anders machen.
Ja, man muss halt ein bisschen performant sein.
Ja, ein weiterer Vorteil ist,
wenn ich die Daten nicht sammle,
dann ist mein Backup deutlich kleiner.
Ja, also ich würde sagen,
einer der wichtigsten Argumente ist vielleicht auch,
dass es weniger Strom verbraucht, so ein bisschen weniger Kosten.
Also ökologisch gesagt.
Ja, aber ich finde das,
also so Dinge als Grundsatz zu sagen,
schau mal, ob ich jetzt
nicht vielleicht irgendwie,
welche Daten ich wirklich brauche und welche halt nicht.
Und die, die ich nicht brauche,
die speichere ich gar nicht erst.
Das finde ich eigentlich schon recht sinnvoll.
Ja, ja.
Ja.
Was eigentlich für so ein ORM-Ding,
sprich mal mit klaren, definierten Modellen,
mit einer klaren Validierung?
Also zu dieser grundsätzlichen Frage,
Datenbank ja oder nein,
aus meiner Perspektive ist das jetzt eher,
würde ich ja sagen, ja gut,
das Dateisystem ist ja auch eine Datenbank.
Ja.
Es ist halt nur eine andere Art von Datenbank.
Es ist halt eine hierarchische Datenbank,
keine relationale.
Busker steht ja auch in Pfalz irgendwo rum.
Ja, genau.
Insofern ist halt auch da die Frage,
die sind die,
jetzt wenn man ein Dschungel hat oder so,
oder was auch immer,
für eine Standard-Web-Anwendung,
dann üblicherweise hat man ja auch da nicht nur
Daten in Tabellen,
sondern da hat man ja auch noch was anderes.
Da hat inzwischen
eigentlich nicht mehr wirklich Filesystem.
Früher war es dann Filesystem noch,
aber inzwischen ist es halt ein Object-Store meistens.
Irgendwas Cache-Redis oder ...
Cache, gut, aber das ist jetzt nicht unbedingt Teil der Datenhaltung.
Da liegt ja auch nur eine Kopie von dem,
aber du musst ja z.B. Redis auch nicht nur ins Cache nehmen,
man kann es halt auch da bestimmte Sachen
vorberechnen und ablegen, wenn das irgendwie ...
Gut, das ist nochmal eine andere ...
Redis ist halt so ein Key-Value-Store
im weitesten Sinne.
Aber dafür gibt es natürlich
auch wieder Anwendungsfälle, wo das gut ist.
Aber diese Kombination
relationaler Datenbank auf der einen Seite,
auf der anderen Seite Object-Storage
für halt irgendwie Daten,
die jetzt irgendwie eine interne Struktur vielleicht haben,
aber die jetzt nicht irgendwie ...
Das ist eigentlich schon eine super Kombination.
Aber, ja, ich meine gut,
Filesystem hat natürlich auch Vorteile.
Was würdest du denn mit einem Object-Store nehmen?
Also, das habe ich leider noch mal ...
Also, was ich mir gerne angucken würde
und wovon ich jetzt schon Gutes gehört habe,
im Zuge von Mastodon
hat ja dieses Problem auch.
Also, Leute wollen ihre eigenen Instanzen hosten
und haben dann jetzt auch das Problem,
dass da ganz viele Bilder und Videos und so Zeugs kommen,
dass diese irgendwo hinlegen müssen.
Und wenn man das halt nach ...
Ich habe jetzt letztens irgendwie ...
Wann war das?
Gestern Morgen oder so, keine Ahnung,
war auch Python-Podcast,
die war weg.
Hä, warum das denn? Na ja, gut, Platte vollgelaufen.
Und warum? Ja, weil da
eine Mastodon-Instanz auf dem gleichen Rechner läuft,
die halt irgendwie alles vollgemüllt hat.
Und ...
Genau, dann die Standardlösung,
oder das Erste ist dann halt,
Leute legen das dann nach S3 oder so
und denken dann fest, oh mein Gott, das ist ja voll teuer.
Ja, das ist ...
Ja, ich habe jetzt,
ich weiß nicht, vor den letzten Monaten,
und ich habe ja eine super kleine Instanz,
aber ich habe trotzdem die letzten drei, vier Monate
hat das Ding irgendwie 60 GB Daten
oder so angesammelt an Zeugs.
Und gut,
bei größeren Instanzen wird das noch viel, viel mehr sein.
Und dann wird das halt irgendwann teuer,
wenn man das halt alles nach S3 legt.
Und dann ist die Frage, okay, kann man das irgendwie selber machen?
Ja, kann man.
Das, was ich gerade verwendet habe, ist so Minio.
Ah, Minio.
Ja.
Das ist aber so ...
Das Problem dabei ist ...
Was genau macht das?
Das ist quasi ...
So ein Bucket-Lokal.
Gleicher API, gleiches Interface wie S3.
Gleicher API wie S3, aber du kannst es halt selber hosten.
Okay.
Das ist eigentlich ganz nett.
Ich glaube auch GPL.
Ja, das kann man durchaus verwenden.
Auch im kommerziellen Kontext geht das.
Aber es gibt da eine Firma hinter.
Die sitzt auch im Silicon Valley.
Das ist alles irgendwie in Go geschrieben.
Und da arbeiten viele Leute.
Die haben wirklich viel, viel Venture-Capital eingesammelt.
Das müssen sie halt irgendwie auch wieder rausholen.
Das heißt, irgendwann werden sie irgendwie versuchen,
Methoden zu finden,
wie sie einem dafür irgendwie ...
Das kleine Schräubchen.
Einen dafür bezahlen lassen können,
was ja auch irgendwie legitim ist.
Und was halt der große Nachteil von Minio ist,
dass du da nicht dynamisch
irgendwie Dinge hinzustellen
und wegnehmen kannst.
Sondern das ist halt schon
eher so auf dem Betrieb ausgelegt.
Du weißt schon, wie viel Platz du hast.
Und das ist alles fertig.
Wieso kannst du da nicht dynamisch was ...
Du kannst halt nicht einfach eine Maschine dazustellen
und sagen, so, hier eine Maschine mehr.
Doch, du kannst auch so einen Cluster.
Da kannst du irgendwie so eine Liste eintragen.
Das ist dann etwas, wo dann die Leute draufgestoßen sind,
die dann Minio verwendet haben.
Das ist ja auch so ein Teil von AWS und Lambda-Geschichte,
dass du das halt einfach hochskalieren kannst
mit einem Klick.
Ja, genau.
Aber Minio ist eher so für jemanden,
der sowas wie S3 betreiben möchte.
Und dann halt schon ...
Wo du halt schon ein Data Center hast und wo das alles ...
Aber wenn du jetzt dynamisch irgendwie ...
Du sagst, oh, ich brauche jetzt aber noch mal
ein paar Terabyte mehr Daten, Speicher.
Dann ist Minio ...
Da kannst du Sachen auf jeden Fall hinzufügen.
Das heißt, wenn du dir irgendwie
einen Spawn spawnst, auf den du Minio aufsetzt,
und die dann kannst du einfach deinem Cluster hinzufügen.
Also theoretisch geht das halt schon.
Ja, also jedenfalls ...
Ich beziehe mich jetzt auf die ganzen Performance-Tuning
und so Dinge, Artikel,
die Leuten dann aufgefallen sind,
die größere Mastodon-Instanzen betreiben,
die meinen so, ah, shit, das geht nicht.
Mit Minio geht nicht gut, weil du kannst es nicht dynamisch ...
Kannst du Sachen hinzufügen oder wegnehmen, geht nicht gut.
Und die sind dann alle umgestiegen auf etwas,
nennt sich SeaweedFS.
Und da geht das wohl.
Das habe ich aber selber noch nicht ausprobiert.
Also keine Ahnung.
Ja.
Ja.
Genau, das sind halt so die Dinge, die man ...
Wieder auf die To-Do-Liste.
Ja.
Naja, genau.
Also die Kombination ist eigentlich schon gut,
aber klar, ich sehe auch, wenn man ein File-System hat,
ist es auch nicht so schlecht, wenn man da tatsächlich reingucken kann.
Ja.
Ja, es ist halt,
man kommt auf einen Anwendungsfall an,
wenn es da mehr Sinn macht.
Ja, aber ich meine,
sozusagen aus der Datenbank-Perspektive,
du musst dich ja jetzt dann auch tatsächlich um solche Sachen kümmern,
wie Backup und ...
Was passiert eigentlich,
wenn irgendwas weg ist,
wie kommt das wieder zurück?
Und diese ganzen Prozesse, wo du ja ...
Ich meine, klar, bei Datenbanken ist es halt vielleicht komplizierter,
aber da gibt es ja schon dann fertige Lösungen für.
Das musst du dann ja selber bauen, eigentlich.
Naja, eigentlich nicht.
Also wie kommt das zurück, war ja deine Frage.
Naja, mit Ansible und dem Backup.
Ja.
Und ja,
Backups mache ich mit Borg.
Habe noch nichts Besseres gefunden.
Ja. Restic ist gut.
Kennst du Restic?
Restic habe ich gelesen,
brauche ich da aber eigentlich nicht.
Also,
habe noch keinen Anwendungsfall,
wo ich jetzt oberhalb von Borg
noch was brauchen würde.
Was kann Restic noch zusätzlich?
Du kannst halt auch direkt auf ein Bucket backupen,
zum Beispiel, oder so.
Ach so.
Also, oder auch irgendwo,
wo halt einer läuft, also relativ gutes.
Ja, das mache ich sowieso.
Aber gut, das mache ich dann händisch.
Ja.
Also nicht händisch, sondern automatisch.
Also ich habe es programmiert, sodass es jetzt automatisch läuft,
sozusagen.
Ja.
Ja, aber,
ja, also ich meine,
klar, das ist schon eine prächtigte,
also muss man sich eigentlich schon überlegen.
Es ist ja meistens so, dass relationale Datenbanken immer so gesetzt sind.
Aber ob das für alle Anwendungsfälle
immer so der Default sein sollte,
das weiß ich auch nicht.
Das ist schon, kann man auch nochmal drüber nachdenken.
Ob das für den eigenen Fall
irgendwie Sinn macht.
Ich meine, aus so einer Softwarearchitekturperspektive
kann man natürlich auch einfach sagen,
das ist halt ein Implementationsdetail,
das ich jetzt aus dem Kern von der Software auch eigentlich raushalten kann.
Ich mache dann halt irgendwie
einen Story-Pattern oder so.
Und dann habe ich sowieso in meiner Applikation
oder in meiner Kernlogik
irgendwie nur mit Objekten zu tun.
Und wie die jetzt letztlich gespeichert werden,
ob die in einem Filesystem landen,
in Json oder Toml oder der Datenbank,
das ist letztlich egal.
Da kümmert sich irgendwie ein anderer Teil drum.
Und das ist gar nicht im Kern
meiner Applikation drin.
Naja, der Vorteil der Datenbank,
das sehe ich in erster Linie
in den Aggregationsfunktionen, die das halt mitbringt.
Ja.
Aber das mache ich halt woanders dann.
Ja.
Also ich meine,
was du in NumPy halt nicht hast,
wenn du jetzt so große Datenmengen hast,
dass die gar nicht so wirklich
in deinen Hauptspeicher passen.
Wenn die nicht in den Speicher passen, richtig.
Aber auch da gibt es Lösungen tatsächlich.
Da gibt es Abstraktionen von NumPy,
die das quasi so Chunk-mäßig
dann bearbeiten.
Also das geht tatsächlich auch, wenn man das will.
Ja.
Ja, oder überhaupt so Indizes
und so hast du wahrscheinlich dann eher nicht.
Nee, brauche ich nicht.
Dann können auch
keine Indizes kollidieren, wenn ich zwei
dicke Datensätze zusammenfüge.
Ja.
Ja, insofern
also auf jeden Fall finde ich
sehr interessant, weil viele
irgendwie eher unkonventionelle
Ansätze oder so, aber
ja,
auf jeden Fall sehr interessant
und für den Anwendungsfall
macht das wahrscheinlich durchaus
alles Sinn.
Hat natürlich alles Vor- und Nachteile, aber
gut, da muss man sich halt dann informieren
vorher.
Ja, ich weiß nicht,
hast du noch irgendein Thema, Martin,
was du
wo wir jetzt noch nicht
drüber gesprochen hätten
oder sind wir quasi durch?
Nö, aktuell
würde ich sagen, haben wir
relativ breit alles erschlagen.
Da machen wir noch Picks.
Wer möchte anfangen?
Okay, dann fange ich mal an.
Picks.
Ich würde gerne
eine
kleine, feine Anwendung
picken,
die
jetzt ist auch wieder natürlich
für so wahnsinnig viele Leute interessant,
das gibt es auch auf iOS und
auf dem Mac und zwar heißt
die
Paprika
und das ist so eine Rezeptverwaltung.
Ich weiß nicht, wenn man halt
gerne kocht und viele Rezepte hat und so,
dann überlegt man sich ja häufig,
wo man die dann irgendwie zentral lagert
oder keine Ahnung, was man damit...
Obsidien.
Ja gut, aber das ist dann halt
sehr
puristisch irgendwie.
Du kannst ja auch direkt
Static Pages, das für Rezepte eignet sich
dafür sehr gut, erinnern lassen deinen Blog.
Ja, aber
klar, kann man
machen, ist jetzt aber nicht unbedingt
auf den Rezeptanwendungsfall irgendwie so
wahnsinnig gut
zugeschnitten und
das Ding kann halt so Sachen wie zum Beispiel
das hat
einen eingebauten Browser und dann
wenn man irgendwo im Web ist und sieht halt
irgendwo ein Rezept oder so, dann kann man sagen, okay, speichern wir das mal
und dann
kann man halt die unterschiedlichen Teile,
also man hat sozusagen ein Schema, in dem
die Rezepte irgendwie gespeichert werden
und dann kann man dann halt
in dem eingebauten Browser kann man dann halt so
Rechtecke ziehen und sagen so, das hier sind die Zutaten
und dann zieht man da einfach ein Rechteck drüber und sagt so, da waren die Zutaten
und dann macht es halt flupp und dann sind die Zutaten halt in einem ordentlichen
Format drin oder hier, das ist das
Bild, wo man wirklich sehen kann, was da drauf
also woher soll
will man sonst wissen, oft
auf Webseiten gibt es halt viele Bilder, wo ist denn
welches Bild ist denn hierzu das, auf dem es wirklich zu sehen
ist, was da gekocht wurde und dann
klickt man halt auf das Richtige und dann
hat man hinterher, also mit relativ wenig
also hat sich jemand wirklich Mühe gegeben, dass man
mit relativ wenig Aufwand und irgendwie
auf so einer Seite rumklicken, quasi
ein Rezept in eine sehr strukturierte Form
bringen kann, wo man dann nachher so Abfragen machen kann wie
gib mir doch mal alles, wo irgendwie
Zucchini vorkommt und irgendwie
keine Ahnung, weiß ich nicht, und ein Dessert ist oder so
und das kommt hier dran, was mit dem Obsidian
Ansatz natürlich
ist dann halt schwieriger.
Ja genau und das synchronisiert halt auch, man kann
auch direkt sagen, wenn man ein Rezept hat, okay machen wir mal
eine Einkaufsliste draus und so und
ja
dann hat das dann halt auf dem
Telefon beziehungsweise auf der Uhr
wenn man durch den Supermarkt läuft, dann kann man die Sachen
wegklicken
also
Das ist ein sehr angenehmes Ding, ich bin
deswegen drauf gekommen, weil ich habe halt so eine
es gibt so eine Webseite
Captain Cook irgendwie
da gibt es immer ganz interessante
Vorschläge, was die Rezepte angeht
so drei pro Tag und ich hatte früher
auch eine Kombination aus Python
Backend und Vue.js Melee
verwendet
Früher, also vor drei Wochen
Vor einem Jahr ungefähr habe ich damit mal angefangen
weil das auch ganz interessant aussah
aber ehrlich gesagt
also das zu deployen ist schon ein ganz schöner Horror
Ja ich fand Melee nicht so cool
Ja aber
dann habe ich irgendwie ein Ding gebaut
was mir sozusagen die
Rezeptgeschichten, die es da bei
dieser App gibt, diese Captain Cook App
halt rübersüngt in meinen Melee und ich dann
halt nur noch Melee verwenden muss und nicht mehr
die komische App, weil die App von Captain Cook ist halt
sieht zwar irgendwie nett aus, aber sie ist halt, funktioniert nicht so richtig
und
genau und da hat jemand dann
ein Pull-Request
gegengestellt
und hat gesagt hier, soll das nicht auch
vielleicht mal nach Paprika sünken und so
Paprika kann ich gar nicht, da bin ich aufmerksam geworden
und ja voll super, jetzt sünkt es halt auch dahin
und jetzt verwende ich Paprika und bin sehr zufrieden
Also was echt cool klingt
übrigens mit den Bildern und den Zutaten, weil
ich mache das halt immer alles selber, aber gut
Korrektierte Rezepte
Ja okay
Cool, ich würde
Copilot Labs picken
Ah
Also Copilot, haben wir ja schon ein paar Mal drüber gesprochen
Wunderschöne Extension
für den Editor deiner Wahl zum
besser machen
Copilot Labs ist, ich weiß nicht, ob es auch für andere
IDEs geht als VSCode, aber damit kannst du halt
so Sachen machen wie
markier dir irgendwie ein paar Funktionen
mach doch mal bitte Typings dran oder
ein paar Tests hätte ich hier gerne und so
und das funktioniert ganz gut, das ist ganz nett
oder übersetzt das mal
in eine andere Sprache, also hier habe ich einen Python-Code
ich hätte gern Go oder andersrum oder
ja, das
habe ich auch noch nicht, ich verwende immer nur den Standard Copilot
Ja und das würde ich sagen, ist das eine
sehr sehr geile Extension noch dazu
Was ich beim Copilot
gelesen habe
ist das folgende, wenn da ein Fehler auftritt
also angenommen man nutzt halt Copilot
in VSCode oder so
dann schickt der einmal
komplett alle geöffneten
Files zu Microsoft drüber
und da bin ich ein bisschen stutzig
geworden
ob das denn so geht
Ja und Teams-Chat und so
und alles was so im
Memory hängt noch irgendwie an
Ja das weiß ich nicht, aber
also ich habe halt gelesen
alle geöffneten Files im VSCode
schickt der dann rüber
und das geht ja dann nicht
also wenn er zum Beispiel in irgendeiner Firma
sitzt, glaube ich kaum
dass die Company-Richtlinien
das dann erlauben
Ja ich meine
das ist natürlich schon ein Problem
Es gibt ja den berühmten Spruch
da würde ich jetzt sagen an der Stelle
Better ask for forgiveness than for permission
Ja
Es kommt
vielleicht darauf an, ob du jetzt tatsächlich patentrelevante
Dinge machst oder nicht
Fragen wir es mal so
Ich meine auch da OpenAI
hat da ja diverse Probleme
die sind ja irgendwie
Italien ist komplett
gesperrt worden
Jetzt ist es wieder frei
Jetzt ist es wieder frei, aber
das fand ich schon auch ein bisschen dreist
von der OpenAI, dass sie da halt wirklich gar nichts zu sagen
Ich meine sie können ja
wenn man das sagt, was man da tut
kann man ja durchaus einiges machen, aber sie haben halt einfach gar nichts
dazu gesagt
Wobei das ist ein bisschen andersrum
Du musst die Story jetzt auch ehrlich erzählen, man konnte die Story gar nicht
verstehen, Entschuldigung
Was sie da einfach gesperrt haben Italien
Ich dachte Italien hat sich überlegt, dass sie kein Bock
drauf haben
auf europäische Gerichte
Das drohte auch dann in anderen europäischen Ländern
zu passieren, weil
du musst halt, wenn du Daten von Leuten speicherst
oder damit irgendwas machst, musst du halt
zumindest sagen, was du da tust und warum
und das haben sie nicht gemacht
und daher kann man sagen, okay
darfst du deine Produkte
in der EU nicht anbieten und Italien hat das so ausgelegt
das kann jedes Land dann so auslegen
wie sie das möchten, dass
niemand mehr darauf zugreifen kann
Artikel 6 DSGVO
zum Beispiel sagt, dass ein Anbieter
eines Dienstes alle für den
Vertragserfüllung relevanten Daten durchaus erheben darf
Ja klar, aber du
musst trotzdem sagen, was du
da irgendwie machst und warum
Du darfst das schon, aber
sie haben ja nicht mal was dazu gesagt
und das machen sie jetzt und dann geht's wieder
also insofern, aber ja
ich mein, so
Wobei
da ist es so ein bisschen andersrum, also da nimmt sich ja
OpenAI quasi
die Datensatz Internet
und lernt da drauf und
falls sie damit was machen, was sie nicht dürfen
haben die ja das Problem, bei
Copilot ist es ja so ein bisschen andersrum
da ist ja der Anwender quasi dafür verantwortlich
also wenn der Anwender in der Firma
sitzt und lädt jetzt Teile
des Quellcodes der Firma irgendwo hoch
darf glaube ich
der geneigte Mitarbeiter
eigentlich auch nicht
Naja, sag mal so, wenn du über Git habt, ist das eh wurscht, ne?
Ja, wenn
deine Code da eh liegt, ja, klar
aber ich meine
auch was Leute halt so bei
ChatGPT oder so reinpasten, also ehrlich gesagt
ich paste da ja auch viel Code rein, also daher
das ist halt
auch ein Anwendungsfall
und da ist wahrscheinlich auch vieles dabei, wo
man als Firma ein Problem hätte, wenn Leute das
halt machen, aber ja
Ja, aber als Firma, ganz ehrlich
gerade
als Firma ist doch wohl ein berechtigtes
Interesse daran
die Produktivität und Effektivität zu haben
und die ganzen Secrets, die irgendjemand
damit preisgeben könnte
die Maschine dahinter, die fängt jetzt ja nicht an
individuell nach dir zu suchen
und deine Secrets rauszupaldobern
um da selber einen Profit zu machen
also gerade aus, also auch
als Firma würde ich jetzt sagen
Ja, aber ich weiß jetzt nicht
ob ich meine wirklich patentierbaren Sachen
da irgendwie, ja genau
aber ansonsten würde ich jetzt sagen
und es gibt halt auch zum Beispiel, wenn man das
ich möchte als Firma ja durchaus
Auftragsdatenverarbeitungsdinge
wenn man jetzt mit dem Microsoft Professional Vertrieb
spricht, wo man dann
APIs bekommt, wo die Daten halt nicht zurückgeflossen
werden sollen und so weiter
das heißt, dann meint man halt sowas, dann hat man halt
einen anderen API-Endpunkt mit einem anderen API-Key
basta, so
Also ich weiß von einer Firma, da ist
in den Firmenrichtlinien Copilot direkt
verboten worden. Ja, das stellen sich auch
immer alle ziemlich viel an
Also ich fand den
Punkt auch von, ich weiß gar nicht, wer das gesagt hat
Ich glaube Martin hat das in der letzten
Episode gesagt, bei Firmen ist ja sowieso
an einer gewissen Größe, so effizient
kannst du da gar nicht mehr sein. Ja, aber
jeder Angst hat dann, dass du jedes einzelne
Softwarepaket irgendwie verifizieren
musst von irgendeinem Audit-Team, was
meins kannst besser als die Open-Source-Community und so
und dann sitzen da zwei Männchen und machen
dann Audit von 150
Paketen oder sowas, Entschuldigung
Ja, muss ja nicht alles sinnvoll sein
aber das
Worüber reden wir? Ist das der ABM oder was?
Also ganz ehrlich, die Kosten und
den Nutzen vom Business würde ich jetzt sagen auch von
ähm, tu jetzt mal so, von einem
anderen Flight-Level würde ich
sagen, ist das vernachlässigbar
Naja, muss halt die Firma dann
am Ende entscheiden. Ja, genau
Eher nicht der Mitarbeiter
Aber das ist die Frage, ob sich jemand in der Firma
damit auskennt, um diese Entscheidungsgrundlage zu haben, um das zu verstehen
Oft genug wahrscheinlich nicht, aber
Das ist halt ein Trade-Off
Ja
Ja, okay, aber Co-Pilot Labs
Okay, interessant
Ja, jetzt haben wir
Du hast noch einen Pick auch, Martin
Ähm, ja, ihr hattet
ja eine Episode mal gemacht zu PiPi
Ziemlich cooles
Tool übrigens
Ähm, und ich
hab noch so eine Ergänzung dazu quasi
Das nennt sich Numba
Ah ja, okay
Das ist von den Entwicklern von Anaconda
Anaconda, das ist die
Quasi-Python-Distribution
Und, ähm, das finde ich
auch richtig genial
Ähm, mein großer
Wunsch war, oder mein großer
Traum war, ich schreibe Python-Code
Dann drücke ich einen Knopf und der übersetzt mir das nach
C
Und im Prinzip macht es das
Ähm
Eigentlich fast ohne
Code-Anpassung, also alles was ich
äh, was ich da machen muss, ist
Ähm, ich mache einen
Decorator über meine Funktion drüber
Und muss ein bisschen
aufpassen mit den Eingaben, also
über die Funktion drüber
muss ein bisschen aufpassen mit den Eingabe- und
Ausgabe-Datentypen, und dann
ist es das
Dann erzeugt er mir quasi zur
Laufzeit C-Code, cached die
und führt die quasi mit
C-Geschwindigkeit aus, die Funktion
Hab ich probiert, funktioniert, genial
Mhm
Äh, ja, äh, wo würdest du
Hast du auch schon mal Cyton ausprobiert?
Weil das ist immer so, das was so standardmäßig
irgendwie auch bei Scikit-Learn oder so
verwendet wird. Das Problem ist
Ähm, wenn das Projekt hinreichend
groß wird, dann hab ich
Also ich hab ja bei Cyton und bei
äh, bei PyPy nicht so richtig die
Wahl, äh, dass ich jetzt nur
einen bestimmten Teil meines Projektes damit
Doch, doch, also Cyton auf jeden Fall
Also, oder ich weiß nicht, bei Cyton gibt's das?
Das ist einfach auch eine Art Python-Dialekt
Wo man aber dann zum Beispiel, wenn man es schnell haben will
Ah, ja, ja, ich erinnere mich
Die Typen mit dazu schreibt, ist halt ein bisschen, ist auch älter als die
Typannotation, deswegen
Ja, ja, ich erinnere mich, aber da musst du einiges für tun
Also da musst du eigentlich den ganzen Code umstellen
Nee, nee, nee, nee, das kannst du für einzelne Funktionen auch machen
Oder für, äh
Ja, aber wenn die Funktion schon da ist, musst du sie umstellen
Äh, äh, ja, das ist richtig
Stimmt, das musst du bei Numba nicht unbedingt, okay, ja
Und bei Numba brauchst du das nicht, da kannst du das lassen
Eigentlich wie es ist, Klammer auf
Äh, abgesehen von den Eingabe- und Ausgabe-Datentypen
Die müssen ein spezielles
Format haben, aber da ist eigentlich
Also wenn du eine NumPy-Matrix zum Beispiel hast
Die kannst du mehr oder weniger so lassen
Und dann, äh, ja, ist es das
Dekorator drüber, Funktion ist in C, fertig
Und ich kann sie von Python aus genauso rufen wie vorher
Und die ist halt einfach tausendmal schneller
Ja
Ja, ja, ja, ja, nee, Numba
Auch super, ja
Cool
Da wir jetzt bei dem Speed waren, hat's eben auch noch event
noch mal ans Ende gepackt, Polars
Ich glaub, das ist auch cool
In dem Zusammenhang, wenn wir schon bei Speed wieder sind
So als Dataframe
Tool
Für Rust und Python irgendwie noch kombiniert
Oh, jo
Ja
Ja, vielleicht, äh, ja
Ich hör immer, Python ist langsam
Ähm, ja
Also bis jetzt lag's immer an mir
Und nicht an Python
Und wenn's an mir lag
Dann, äh, hatte ich auch eine Chance
das zu beheben
Also da gibt's zum Beispiel, äh, den
Line Profiler für Python
Ähm, weiß nicht, ob ihr das kennt
Äh, ist das der
Ist nicht der eingebaute, ne, oder
Nee, äh, ist nicht der eingebaute
Also Line Profiler macht im Prinzip folgendes
Ist auch wieder ein Dekorator, den schreibst du
über deine Funktion drüber
Und der annotiert dir an jeder Quellcode-Zeile
Wie schnell oder langsam die war
Ah, okay, ja, ja
Also dann, äh, also
Üblicherweise würde man das so verwenden, du findest erstmal
die Funktion, die langsam ist, das kannst du mit den klassischen
Äh, Tools machen
Ja, also, äh, ja, was man halt
Üblicherweise so nimmt, da springen ja hinten
Quasi die Funktionen raus, die langsam sind
Wenn man's richtig bedient
Und dann gehst du quasi mit dem Line Profiler
In die Funktion rein und schaust dir an
Was genau ist denn da langsam
Und so kommt man echt richtig schnell
Äh, ja, zu einer
Performance-Analyse
Man kann das dann beheben oder dann irgendwie
auch doch ein mit einem Numba-Dekorator versehen
Hast du irgendeinen Lieblings-Profiler
So für die globale Sicht? Ich hab in letzter Zeit
Häufiger mal Skalene verwendet, aber
Ähm
Nö, da nehm ich den Pythonstandard
C-Profile
Genau, ist, ja, funktioniert
Ist nicht schön bedienbar, aber funktioniert
Ja, funktioniert. So oft braucht man's
Ja auch zum Glück auch nicht
Also ich bin auch kein Freund von Pre-Mature
Optimization, also ich
Optimiere dann, wenn ich wirklich feststelle
Es ist langsam und
Für meinen Geschmack ist Python oft nicht
Langsam, aber wenn's eben doch mal langsam
Ist, dann fang ich an zu profilen und dann
Krieg ich das
Bis jetzt hab ich's immer weggekriegt, das Problem
Ja, ne, klingt gut
Ich hab, äh, das verlinke ich
Vielleicht auch nochmal, äh, letztens
Einen ganz interessanten Artikel, äh, gelesen
Zum Thema
Mythen der, äh, von
Performance-Mythen und das ist halt ein
Jetzt hab ich den Namen nicht parat
Ein Spieleentwickler, der da halt auch schon
Seit langer Zeit, der hat auch so einen YouTube-Channel, der
Irgendwie relativ beliebt ist
Und, äh, der
Der hat dann so
Einen Artikel geschrieben, wo er irgendwie so
Darüber rantet, was halt
Aus seiner Sicht die Leute immer sagen über Performance, was alles nicht stimmt
Und da waren so, sind so ein paar interessante
Sachen dabei, wo ich dachte so, oh, das hör ich
Sehr oft solche Sachen und das
Wahrscheinlich Quatsch, also wo er zum Beispiel sowas schreibt wie
Naja, die Leute sagen immer, äh, man muss
Nicht nur die Hotspots, äh, irgendwie optimieren, ne
Also du machst halt erstmal keine
Performance-Geschichten, äh, entwickelst ohne
Performance, äh, im Hinterkopf
Zu haben, irgendwie, eben keine premature
Optimisation, ähm, äh
Dein, dein, dein Code und dann wenn's
Langsam ist, dann guckst du halt, wo's langsam ist und dann optimierst
Du das weg und dann meint er so, ja, also
Das funktioniert ja auch manchmal, aber manchmal halt auch nicht
Und grad wenn du jetzt wirklich performancekritische Sachen
Machst, dann kann's gut sein
Dass dieser Ansatz überhaupt nicht funktioniert, weil du
Ähm, äh
Weil du, weil, weil du halt sozusagen
Dann rauskriegst, wenn du anguckst, was ist denn die
Teile, äh, deines Codes, die langsam sind
Naja, dann ist da halt irgendwie Memcopy oder
Keine Ahnung, da wird halt Hauptspeicher durch den Prozessor
Geschoben, das ist was, was du willst da optimieren
Das ist halt, da kannst du nichts mehr machen
Und da musst du eigentlich wieder ans Design deiner
Applikationen, da musst du umstrukturieren
Wenn ich von vornherein, von vornherein weiß, dass das
Performancekritisch ist, dann schreibe ich ganz
Anderen Code, dann ist der Code komplett
Komplett anders eigentlich, äh, ja
Also da kannst du vergessen, da musst du komplett
Das Design ändern
Genau, und er meinte dann halt auch, dann kann es sein
Wen meint das so, John Carmack, oder?
Nee, nee, ähm, der hat irgendwie so einen italienisch klingenden Namen
Ah, ich hab jetzt aber, ich hab's nicht mehr ganz
Okay, I don't know
Ähm, ja, der, äh, genau
Genau, es hängt halt davon ab, ob man
Performancekritischen Kram macht oder nicht, und wenn man's nicht macht, dann muss man
Das nicht machen, aber wenn man, wenn man das
Hat und hat aber auf die falsche Art
Entwickelt und glaubt dann mit irgendwie Hotspots
Optimieren, da rauskommen zu können
Dann meint er so, hat er schlechte Nachrichten
Kann gut sein, dass das nicht geht, und das
Auch wenn man rausfinden möchte, jetzt
Okay, was ist denn, wie muss ich denn die Architektur ändern?
Äh, oder das Design, dann
Kann es sein, dass, äh, dass
Wenn das ein größeres Projekt ist, das wird schlimmer
Als ein Rewrite, der dann
Wo man im Hinterkopf hat, dass das Performancekritisch ist
Und deswegen wird das in der Spieleindustrie auch
Häufiger gemacht, und es ist tatsächlich auch ab und zu erfolgreich
In anderen Bereichen sollte man das vielleicht nicht
Machen, also, ähm, aber da
Ist das halt wohl ab und zu, äh, irgendwie
Dann halt der beste Weg, und, ähm, ja
Tja, ja, das ist alles nicht so einfach
Ja
Das ist vielleicht dein Schlusswort
Ja, kann man immer sagen, hängt davon ab, kommt drauf an
Ist alles nicht so einfach
Vielen schönen Dank, dass wir dir zugehört haben, und vielen Dank Martin, dass du da warst
Ja, ne, ist sehr interessant
Ja, hat viel Spaß gemacht
Dann schaltet uns doch bald wieder rein
Hallo at pythonpodcast.de
Bis zum nächsten Mal
Bis dann, ciao