Transcript: GUI-Applikationen am Beispiel von MiaPlan
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, heute Jubiläums-Episode 50, herzlichen Glückwunsch Jochen.
Ja, herzlichen Glückwunsch zurück, 50, sind wir schon, wow.
Ja, ganz gut, oder?
Ja.
Wir sprechen heute über Qt und andere grafische Anwendungen in Python und über Mia-Plan, das da gebaut ist, und haben den Martin zu Gast, hi Martin.
Hallihallo.
Hallöchen.
Ja, wollen wir ein bisschen News machen am Anfang?
Ja, diesmal vielleicht schon, hatten wir letztes Mal ja nicht.
Genau, und dann mache ich das hier gerade mal auf, was wir da so.
Ja, also es gibt halt so ein paar langweilige Software-Geschichten,
wo es vielleicht nicht schlecht wäre zu wissen, was da passiert.
Es gab jetzt, das ist aber auch schon was länger her,
ich habe jetzt ja dummerweise die News von zwei Episoden
und dazwischen ist auch mal was ausgefallen.
Kann sein, dass es jetzt doch ein bisschen veraltet ist.
Zum Beispiel, was ich hier drauf habe, ist,
dass die einzelne Version von MyPi rausgekommen ist,
was vielleicht ganz interessant ist.
ist auch nochmal, dass
rausgekommen gewesen war, wolltest du also sagen.
Ja,
ist schon länger her und
das Einzige, was mir jetzt noch so in Erinnerung ist,
ist halt deutlich schneller geworden damit auch.
Ansonsten
SQL Alchemy 2
ist raus. Da war
auch das, was man quasi an coolen Dingen
verwenden konnte, war schon in 1.4 irgendwie
drin und der 2.0 Schritt
ist glaube ich nur, dass jetzt Sachen
deprecated sind, die halt vorher
noch gingen und jetzt gehen sie halt nicht mehr.
Deswegen halt der Manager-Versionssprung.
Aber eigentlich auch ganz
interessant, weil so gerade so Async-Geschichten
ist halt, das ist
auch da noch relativ neu.
Also, dass man da halt so mit
na, wie heißt das?
PG?
Async-PG.
Async-PG, genau.
Das auf Postgres zum Beispiel zugreifen kann.
Und das halt alles so ordentlich
funktioniert.
Ja, da hatte ich auch schon viel Spaß mit.
Hört sich gut an.
Dann Wagtail hat sich eine ganze Menge getan.
Da habe ich hier noch die Release Notes drin von Wagtail 4.2.
Ui.
Und jetzt ist aber schon 5.0 gestern erschienen.
Ah.
Das ist tatsächlich, ja.
Wie viele Backing Chases gab es diesmal?
Doch, gab ein paar.
Und ich hatte auch da so ein bisschen Probleme mit.
Also das war nicht so, das war schon ein etwas holprigeres Update.
Weil, also dazu, die Software, mit der wir hier den Podcast irgendwie publishen, basiert halt auch auf Wagtail.
DjangoCast.
Genau, und auf Django natürlich. Und ja, deswegen kriege ich das immer mit, wenn es irgendwas bricht, dann bricht es halt ja auch.
Der Grund, warum ich es nicht mehr mitkriege, ich habe es aus diesem Grund rausgeschmissen.
Ja, aber also, ja gut, sie machen da was dran, sie machen das jetzt auch über Major-Versionen, also man kriegt zumindest so ein bisschen irgendwie einen Eindruck davon, dass irgendwas kaputt gehen könnte, wenn sie dann die Major-Version erhöhen und sie koppeln sich jetzt auch quasi an den Django-Release-Prozess dran und das war jetzt auch nur einen Monat nach dem Release von Django 4.2, also Wagtail 5 ist die erste Wagtail-Version, die offiziell Django 4.2 unterstützt und das ist, früher war das immer noch ein bisschen länger.
Und jetzt inzwischen ist es halt so
einen Monat später oder so.
Ja gut, ist nicht super aktuell.
Ein Monat ist ein Monat.
Ja, ist schon ganz okay.
Die müssen halt auch relativ viel fixen und ändern.
Daher ist es schon verständlich,
dass es nicht immer so fortgeht.
Aber Jocken, du bist doch eigentlich immer dagegen,
dass man sich so dicke Klötze ans Bein bindet.
Ja, ich hätte das auch
am liebsten vermieden, wenn das irgendwie möglich gewesen wäre.
Aber ich möchte,
also ich hätte jetzt auch ein eigenes Thema schreiben können.
Ja, das wäre auch gegangen.
Warum denn nicht?
Wir hatten letztens jemanden getroffen,
der hat ein eigenes CMS in PHP geschrieben.
Kann das sein?
Ja, oder hat er mit...
Wir waren auf dem Vue.js
Meetup Cologne.
Das war ganz interessant, ja.
Der hat ein Statamic
mitentwickelt, beziehungsweise ist einer der Leute, die da halt
bezahlt werden für, dass sie da dann entwickeln.
Das ist tatsächlich so ähnlich wie Wagtail, bloß halt für
PHP und Laravel.
Und
ja, nee, das ist also CMS
das ist schon eine große Geschichte. Wacktail ist auch
relativ groß, viel Code drin
und das weiß ich nicht, ob man das wirklich selber machen möchte.
Es gibt da ein schönes Projekt von, jetzt habe ich den Namen
vergessen,
auch sehr bekannt eigentlich in der
Kerstin,
in der
Django-Community,
genau, der hat FeinCMS geschrieben
und das gefällt mir,
also wenn man sich den Source anguckt, das gefällt mir
tatsächlich auch ein bisschen besser als Wacktail, aber
es kann halt nicht so viel und
ja, an der Stelle ist halt, Wacktail kann
halt schon sehr, sehr viel. Also das ist halt
irgendwie, also damit kann man so ziemlich
alles machen, was man irgendwie gerne machen möchte.
Fein CMS, also tatsächlich
ein deutsches Fein und kein
englisches Fein. Ja, ich glaube, der kommt aus
der Schweiz oder so. Und ja,
also ich meine, sowas hätte ich natürlich auch schreiben können
oder das nehmen können, aber dann hätte ich auch viel schreiben müssen,
weil viele Sachen, die ich gerne hätte, sind da halt auch
nicht drin.
Das muss ein Alter sein, Copyright 2009.
Der macht das schon lange, ja.
Ja, ja. Und
ja, deswegen
nehme ich halt Wacktail, obwohl ich auch
manchmal denke so,
es knirscht halt ab und zu.
Das letzte Release war die Kompatibilität
mit Django 1.10.
Nee, dann bist du wahrscheinlich auf der falschen Seite.
Da ist auch in letzter Zeit noch mal was
dazugekommen, meine ich, ja.
Es gibt da möglicherweise auch
vielleicht ist es dann auch FeinCMS 3 oder
so. Das hat auch mehrere
Major-Visionen inzwischen.
Ja,
also Wacktail, also
CMS, das hab ich früher immer gedacht, das ist ja gut, was ist das
schon groß, aber es ist halt, da hängt schon eine ganze Menge
Zeugs dran. Und was
jetzt zum Beispiel mir Probleme
gemacht hat bei dem Update, ist halt,
dass sie intern irgendwie einen, weil ich
hab halt eine Extension, also ein Ding gebaut,
was das halt so ein bisschen erweitert, weil ich hab halt viele
Bilder für andere Zwecke, jetzt bei dem Podcast
kommen nicht so viele Bilder vor, aber
noch andere Interessen machen. Ich möchte gerne Bilder
in der absolut maximal bestmöglichen
Qualität. Ich möchte, dass sie nicht total unscharf
sind. Das ist,
kann man so oder so sehen.
Ja, aber ich sehe das schon.
Ich denke mir immer, immer wenn ich auf so Seiten,
also gerade auch Wagtail-Seiten, es gibt ja viele
andere, die auch Wagtail verwenden,
so unter anderem NASA, Google,
irgendwie der National Health
Service in den UK und so.
Es gibt schon viele große und immer wenn ich da drauf gucke,
denke ich mir so, ey, die Bilder sind doch unscharf.
2.000 Leute haben auch dieses Problem.
Ja, also ich weiß nicht.
Also ich finde es super, das ist cool. Mir ist es tatsächlich auch
aufgefallen, wenn ich mal so ein paar Sachen von dir angeguckt habe,
dass das sehr viel schöner ist. Wahrscheinlich hat man sich
einfach nur daran gewohnt, dass die Sachen gar nicht so cool
aussehen, dass das gar nicht so schön
sein kann, weiß man gar nicht so genau.
Ja, also sag mal so,
ich meine, selbst WordPress macht das
besser. Also das hat
auch nur so drei oder fünf
statische Größen für Bilder drin.
Also das Problem ist grundsätzlich, dass
wenn du, du hast halt
zwei unterschiedliche Arten von Pixel, du hast halt sozusagen
die Pixel für deine,
wie groß dein,
wie breit quasi dein Bildschirm ist oder so und da kannst du auch
in Pixeln rechnen, aber das, was angezeigt ist,
ist halt was anderes,
weil es halt mittlerweile halt
Devices gibt,
Telefone, irgendwie
Bildschirme, 4K-Bildschirme oder noch
mehr, die halt dann mehrere
physikalische Pixel für einen virtuellen Pixel
quasi benutzen. Und wenn
du halt nicht sozusagen dann die
Bildgrößen entsprechend mitlieferst,
sondern sagst, mein Bild ist halt genauso breit wie
so viele virtuelle Pixel, dann hast
du halt ein implizites Upscaling
von Faktor 4 oder so darin und dann wird's halt
unscharf. Und ja,
das ist halt irgendwie, da gibt's noch, sie arbeiten
da auch dran. Also so ist es nicht. Da gibt es jetzt inzwischen
auch ein sehr vielversprechendes, da gibt es
so eine Roadmap, wo drin steht, was sie da machen
wollen und sie wollen das mit
Picture-Elementen machen und irgendwie so
modern oder so. Ihre Hauptmotivation
dabei ist aber eher irgendwie Wandbreite
sparen, weil man dann halt so modernere
Formate wie
WP oder solche
Sachen verwenden kann.
Aber damit
kriegt man das auch hin, dass man dann halt scharfe Bilder
hat. Mein Ding ist aber eher, ich will scharfe
Bilder haben und JPEG reicht mir eigentlich.
und deshalb habe ich da so ein Ding geschrieben
und da haben sie jetzt irgendwas umbenannt, irgendwie
ein Attribut auf dem Image-Node
heißt jetzt irgendwie anders, weil
ich muss jetzt halt, also meine
Erweiterung für Wagtail,
die erzeugt halt
dann Bilder in unterschiedlichen Größen
und macht da so ein Sourced-Attribut.
Und dann, genau,
da greife ich halt auf irgendwie so
die Filter von dem
Ding irgendwie zu, weil du kannst ja da noch andere Sachen
reinschreiben wie JPEG-Qualität
und weißer Teufel und die Breite
und das muss ich ja irgendwie auslesen
und das hat sich irgendwie umgeladen. Vorher war es ein String,
der irgendwie durch so Pipes getrennt war und den habe ich dann
gesplittet und jetzt ist es halt irgendwie die Liste
schon gesplittet.
Und jetzt muss ich halt eine Fallunterscheidung machen zwischen
also wenn es... Alte Version, neue Version.
Es war nicht
mal irgendwie so ein...
Es war eigentlich ein...
Und solche Sachen machen halt schon Arbeit.
Da habe ich so ein bisschen was jetzt machen müssen, aber insgesamt
ging es eigentlich. So schlimm war es nicht.
Und jetzt laufen halt auch, läuft alles irgendwie auf Django 4.2 und Wagtail 5.
Und das ist eigentlich schon nett.
Also Wagtail, wenn man sich das vor einiger Zeit angeguckt hat und nicht zufrieden war,
kann man das eigentlich nochmal machen.
Also einige Zeit heißt, bei mir ist das zwei Jahre her, würde ich sagen.
Ja, zwei Jahre reicht auf jeden Fall.
Also inzwischen hat sich da sehr viel getan.
Also die Changelogs sind halt auch immer sehr lang.
Also würde ich sagen, was ist an dem modernen Wagtail eigentlich cooler?
Was sie verbessert haben, ist, es gibt ja schon
seit einiger Zeit so ein Stream-Field.
Das machen alle CMSs irgendwie gleich.
Für Video, Audio und dergleichen.
Du hast halt ein JSON-Field in der Datenbank oder so
und dann hast du halt so Blöcke drin,
wo halt in dem Block steht halt sozusagen drin,
was das jetzt ist.
Ist das jetzt ein Text oder ist das jetzt ein Bild?
Und dann kannst du die sozusagen,
kannst du eigene Widgets dafür bauen,
um solche Sachen einzutragen.
Und ja, Vectel macht das halt auch.
Aber das war, wenn das sehr groß wurde,
früher dann halt schon auch
eher langsam und so und ein bisschen
komisch, weil das halt alles,
weil die HTML-Formulare so unfassbar riesig
groß geworden sind, wenn du halt viele Dinge drin hattest.
Und du musst ja deine Formulare
für jeden Eintrag
quasi generieren.
Und das ist jetzt,
das
Editier von Reactel ist jetzt auch
eine React-App, kann man auch sagen, so igitt.
Aber,
also das ist halt einer der Vorteile, ist halt, wenn man jetzt
riesige Seiten hat mit ganz, ganz vielen Formularen
oder so, dann ist das halt
nicht mehr langsam
beim Rendern. Oder wenn man irgendwas ändert,
dann muss nicht alles neu gerendert werden, weil es halt nicht mehr
klassisch ist, sondern dann passiert das alles im Kleinen
nur noch und das geht jetzt schneller.
Also überhaupt, das ganze Ding ist deutlich schneller geworden.
Also ich meine, so sehr React irgendwie doof ist
für die Sachen, für die es
oft verwendet wird, für sowas wie eine komplizierte
Content-Editier-Geschichte,
wo halt irre viele Formulare
sind und es Interaktionen dazwischen
gibt und dafür ist es jetzt vielleicht auch nicht so schlecht.
Das ist eigentlich gar nicht schlecht. Sieht das denn gut aus und kann man
das denn theme? Theme
kann sein, das weiß ich,
kann man, man kann auf jeden Fall Dinge ändern.
Oder dass man jetzt halt ganz tief wieder rein...
Eines der neuen Features bei Vectile 5 ist,
es gibt jetzt ein Dark-Theme.
Oh ja.
Wer braucht das nicht?
Genau,
ist mir direkt aufgefallen,
weil ich das dann auch direkt hatte, weil ich hier auf dem
Dark-Mode bin.
Das ist für die Augen viel angenehmer.
Naja, also ich finde, es sieht ganz okay aus.
Also so wirklich hübsch ist es nicht, aber ich meine, das ist ja nur das
Editier-Ding. Es ist ja nicht so, also wie es dann
hinterher aussieht, was auf der Webseite zu sehen ist.
Das kannst du ja machen, wie du willst.
Das hat ja nichts mit Wagtail zu tun.
Ja, insofern. Jetzt hatten wir fast eine schöne Übergleichung
zum Thema, aber ich glaube, wir sind noch nicht ganz fertig.
Nee, da kommt noch, oh je. Genau,
nächstes wäre halt Django 4.2.
Ja, auch nächste
LTS. 42.
Ja.
War auch jetzt, da war auch wenig drin, was irgendwie
kaputt gegangen ist. Die große Neuerung da
ist halt, dass
man jetzt auch Async mit der Datenbank
sprechen kann und
zum Beispiel PsychoPG
3 wird jetzt unterstützt und dann
also sozusagen man hat jetzt die Voraussetzungen dafür,
dass man komplett Async von
vorne bis hinten sozusagen von Frontend
von View bis
zur Datenbank kann man halt jetzt durchgängig
Async Dinge machen und man könnte
jetzt so Sachen bauen wie
man verwendet diesen ListenNotify
Mechanismus von Postgres, um halt wirklich so richtig
reaktiv Dinge zu machen,
sodass man,
also ging ja auch vorher schon, aber da war es immer so ein bisschen
hm, jetzt geht's halt, also
man muss dann Django Channels verwenden und
weiß nicht, aber jetzt
ging es halt richtig
sauber eigentlich. Also da gibt's
noch keine wirkliche Unterstützung für, das müsste
man dann alle selber schreiben, aber es geht jetzt theoretisch
zumindest schon mal. Und das ist eigentlich schon schön.
Auch der ORM könnte jetzt dann halt irgendwie
Async werden, der hat ja auch schon Async-Interfaces,
aber
die kann man auch schon verwenden
und kriegt dann halt irgendwie den Gewinn, dass es
wirklich Async ist, irgendwann, wenn das dann halt
mal bepflichtet ist. Momentan
ist es dann halt nicht
Async wirklich, sondern es ist halt dann irgendwie
es wird über ein Threadpool
und in Sync gemacht, aber
ja, so das
wird noch ein bisschen dauern, bis die ORM
Geschichten halt auch wirklich Async sind, aber
ja, geht auf jeden Fall in die Richtung und
irgendwann dann
wird auch alles auf Async dann quasi
umgestellt sein und man kann es dann
verwenden, wenn man möchte. Muss man ja nicht. Man kann auch einfach
Sync verwenden, wenn man nicht so viele Queries hat
und wenn es
Sync ist auch mal ein bisschen schneller als
iSync, weil man da halt schon noch so ein bisschen
Abstraktionsschichten mehr dazwischen hat.
Aber es gibt halt einiges Fälle, in denen es
total praktisch wäre, das zu haben. Und
dafür ist es natürlich gut. Kannst du noch mal
einen Anwendungsfall dafür nennen?
Ne, wenn du zum Beispiel viele Queries machst
und du willst halt
nicht, dass sich die Latenzen und deine Datenbank
steht jetzt zum Beispiel woanders, sagen wir mal so.
Das wäre jetzt nochmal so.
Nehmen wir an, deine Datenbank
steht irgendwie in Amerika und du hast hier
deinen Applikationsserver oder wie auch immer
das Ding, was halt jedenfalls
das HTML rendert, ist halt
irgendwo so. Und jetzt hast du halt große Latenz
zwischen Datenbank und
Frontend. Dann
momentan ist es halt so, leider addieren sich
die Latenzen auf. Und wenn du halt
100 Queries machst, um eine Seite
anzuzeigen, dann hast du 100 Mal die Latenz
dazwischen und das ist halt dann schon
ätzend. Also wenn das halt nur
ein paar Millisekunden sind, dann sind es halt insgesamt
ein paar hundert Millisekunden vielleicht. Das ist nicht so tragisch,
aber wenn du jetzt 50 Millisekunden Latenz dazwischen hast,
dann bist du halt schon bei 5 Sekunden
oder sowas. Und dann ist es halt doof.
Und wenn du
das I-Sync machen würdest und könntest
die Datenbank-Requests gleichzeitig
an die Datenbank schicken, dann
wäre die Gesamtlatenz halt nur
die Latenz der langsamsten
Query und nicht irgendwie
die würden sich nicht alle aufaddieren.
Also in solchen Fällen wäre es halt irgendwie durchaus
ja, sehr praktisch
ähm, genau
ja, also genau
Jungle 4 2, weiß jetzt gar nicht
genau was sonst noch da an, wirklich, da waren auch noch
jede Menge coole Sachen dabei, ach, das hab ich jetzt
ähm
hab ich mir gar nicht mehr so in Erinnerung, das ist doch schon wieder einen Monat her
dass das
äh, dass das veröffentlicht
wurde, und bei
Formularen hat sich auch noch eine Menge getan
also, äh
ja, ähm
und es sind halt einige Sachen
noch deprecated worden, ja so
keine Ahnung, kann man sich mal angucken
Der kam bestimmt auch dann die
World Map von Django 5, oder?
Ja
bestimmt irgendwie, keine Ahnung
es gibt auf jeden Fall schon Leute, die sich darüber Gedanken
machen
ich habe auch schon so ein bisschen gehört, was
bei Django 5
die nächste Geschichte, die jetzt angegangen
wird, es ist halt jetzt so, ich habe das jetzt nicht
irgendwo gelesen offiziell, sondern ich habe das jetzt so
was ich so mitkriege, wenn ich da mal ab und zu
irgendwie so mitlese, was da so passiert,
ist,
sie wollen das Request-Objekt,
das halt uralt ist und das sehr schwer
zu ändern ist, so ein bisschen anpassen. Also da gibt's
ja immer noch momentan so Request.get
und Request.post und Post.get sind groß
geschrieben und das ist quasi genauso, wie
das damals halt so in
CGI oder PHP war,
wo man das dann halt sozusagen, diese Inspiration
für diese Geschichten her hatte, aber
das ist natürlich jetzt heutzutage eigentlich blöd
Und man hat es aber nie geändert in den letzten 15 Jahren, weil klar ist, dass wenn man das ändert, dann brechen halt überall Deployments, in denen halt irgendwie, keine Ahnung, Leute darauf halt zugreifen.
Und deswegen kann man das nicht so einfach jetzt irgendwie umdenken.
Ja, aber da soll jetzt was passieren.
Und zwar hat man jetzt einen Grund, um diese großen Änderungen anzugehen.
Und zwar soll halt so ein bisschen Fähigkeit zu JSON generieren und so.
Also ich glaube, die harten Sachen, die man dafür braucht, also der Umgang mit unterschiedlichen, ich weiß es gar nicht mehr, also jedenfalls die Basisarbeit dafür ist schon drin.
Diese ganzen, da geht es irgendwie um Header und weiß der Teufel, irgendwie Support.
Aber was man eigentlich gerne hätte, ist ja, dass man JSON rausrennen kann und das halt auch ordentlich funktioniert.
Also sozusagen eigentlich wird jetzt quasi die Basis dafür gelegt,
dass sowas wie Django REST-Framework
eigentlich in Django Core mit reinwandert.
Oder man das halt sowas wie Django REST-Framework
eigentlich gar nicht mehr braucht.
Weil die schwierigen Teile in Django REST-Framework,
die sind jetzt eigentlich schon in Django Core drin.
Und jetzt geht es halt noch darum,
das alles so ein bisschen aufzuhübschen,
das Request-Objekt zu modernisieren,
dass man halt jetzt sehr viel leichter
JSON da auch rausrennen kann oder irgendwas anderes halt XML.
Gut, mittlerweile benutzen alle nur noch JSON.
Ja, das ist auf jeden Fall das, was ...
Jason, eine von den Sachen in Django 5 ist
Formulare.
Django 5 ist auch Formulare? Ja, ein bisschen besser.
Also Formulare sind auch jetzt schon, da wird
auch schon viel dran gemacht. Ja, ich meine, also
der Anwendungsfall
an der Stelle ist halt einfach, dass man
lieber, also das war früher etwas schwierig,
man möchte halt
Teile von Formularen und so rendern können besser.
Also gerade so interaktiv
möchte man gerne das
Verhalten so haben, wie jetzt man das in der SBA halt
auch hat, nur halt mit
ordentlicher Serversite, Validierung von
irgendwelchen Eingabedaten und so. Und das geht
natürlich auch. Also, das habe ich auch schon häufiger
gemacht, dass man dann halt, sobald sich
irgendwie ein Feld von einem
Formular ändert, dass man dann halt das
an den Server schickt und dann kriegt man halt sozusagen
nur das gerenderte Feld zurück
und ersetzt das dann. Und dann, wenn da eine Fehlermeldung
drinsteht, dann steht die halt auch da drin und so. Das geht alles.
Aber irgendwie zum Beispiel mit Crispy Forms
irgendwie einzelne Felder rendern
ist halt, ist es möglich?
Es ist halt irgendwie nicht.
das macht keinen Spaß. Und das zu testen
macht auch nicht so richtig Spaß und das ist alles
so ein bisschen, und ja, da wird auch viel daran gearbeitet,
damit das halt einfacher wird und besser geht alles.
Ja.
Ja, genau, Django 4.2.
Ja. Ich hab gehört, die Twitter-API ist kaputt.
Ja.
Das ist auch schon lange her.
Bei Twitter ist noch alles möglich kaputt gegangen.
Ja, es ist
da...
Du machst ja immer gerne so einen
Pann, deswegen dachte ich...
Ich glaube, das ist echt total
veraltet, was da drin steht. Also das ist
irgendwie von vor zwei Monaten oder so, dass das halt
jetzt die APIs zugemacht haben.
Ja, und das halt für viele Leute war das halt echt
nochmal so ein Grund, dann auch
zu Mastodon zu wechseln, weil
für Mastodon gibt es jetzt noch irgendwie ordentliche
Apps und Twitch wird halt nicht mehr.
Gibt es nur die
Standard-App und die ist halt Mist.
Genau.
Ah, was auch noch ganz interessant ist vielleicht,
ist,
es gibt das Pidentic.
Pidentic hat irgendwie Venture Capital
eingesammelt. Oh, okay.
Ja, ja. Fünf Millionen
von Sequoia oder so. Okay.
Was ich jetzt, weiß ich nicht, ob man
sich darüber freuen soll oder ob man besorgt sein soll.
Gut oder schlecht? Das kann beides sein,
das ist so unklar. Ich weiß nicht genau,
wie sie sich vorgestellt haben, dass sie das Investment
wieder reinholen, aber
das ist natürlich das Problem,
Wenn man jetzt irgendwie ganz viel Infrastruktur, also
Pidentic als Infrastruktur verwendet
und darauf aufbaut, dann ist es so, okay,
hm, haben die
jetzt ein großes Incentives, mich irgendwie
dafür bezahlen zu lassen?
Das will man vielleicht nicht unbedingt, aber
ja,
auf der anderen Seite, was natürlich
vielleicht schon schön wäre, ist, wenn da halt so ein bisschen
mehr, also ich glaube,
der hat dann noch, also hier, wie heißt der noch?
Samuel? Der Bastian Ramirez? Nee, das ist der
von FastAPI, aber
der ist Samuel Colvin, glaube ich, heißt der?
von Pydentic. Macht die
natürlich auch mit Pydentic?
Ja, kann sein. Weiß ich nicht so genau.
Aber der hat
jetzt dann auch irgendwie Leute angeheuert und
jetzt gibt es dann noch ein bisschen mehr
Druck irgendwie beim Entwickeln
an der Stelle und das ist natürlich vielleicht schon
nicht so schlecht, weil also Pydentic ist ja eigentlich schon
eine sehr coole Idee. Ich fände das auch mal gerne,
wenn man mal irgendwie
so wirklich validieren will, dass die Daten,
die man irgendwo reinbekommt, halt so richtig
so quasi tatsächlich dem entsprechen, was man erwartet.
Ja, hat eine so schöne Syntax.
Man schreibt eigentlich nur die Type-Annotations hin
und dann, genau, hat man
hinterher validierte Daten. Das ist ja alles
echt schick.
Du hast natürlich recht, ja.
Ja, genau. Aber das,
was halt so ein bisschen problematisch ist, ist halt, dass es sehr langsam
im Vergleich zu Standard
Python-Objekte irgendwie einfach nur
erstellen. Da kannst du ja Python-Icon nehmen, damit
das dann auch in Rust läuft. Ja, genau. Und wenn das dann
in Rust ist, ist es natürlich auch klar,
dass man mehr Arbeit hat, das in Rust zu schreiben und so.
Ja, also mal gucken. Aber es ist auf jeden Fall eine interessante
Entwicklung und gut,
Ja, wie es ausgeht, wissen wir nicht.
Dann haben wir noch, was haben wir noch?
Node.js 20, naja, ich weiß nicht, ob das irgendwie interessant ist.
Nö, eigentlich nicht.
Ja, Pythonista ist eine neue Version veröffentlicht worden.
Das freut mich ja total.
Aber ich glaube, vielen Leuten wird das nichts sagen.
Aber es gibt für iOS eine App namens Pythonista.
da kann man tatsächlich Python-Code ausführen.
Also man kriegt dann halt so eine richtige interaktive
Shell und da ist auch NumPy mit drin und der ganze Kram
auf dem Telefon.
Achso.
Und man kann sogar dann Python-Programme...
Ja, ja.
Man kann da auch Programme dann ausführen und so.
Man kann die auch, das habe ich schon mal gemacht,
dann, dass man im Share-Sheet sagen kann,
ich share das jetzt mit irgendwie
einem Python-Skript und dann
kriege ich das Python-Skript das und kann damit
irgendwas machen. Also man kann da tatsächlich irgendwie
Python-Code auf Telefonen und
iPads und so ausführen
und das ist jetzt halt in der Version erschienen,
dass Python 3.10 unterstützt wird und
ja, das ist schon sehr nett.
Also das ist wirklich, wie das mit dieser
App-Store-Policy vereinbar ist, dass eigentlich
nur Objective-C,
Swift und irgendwie C
und C++ irgendwie ausgeführt werden können,
sollen, ist mir
nicht so ganz klar. Eigentlich
ja, war es wahrscheinlich zu unbekannt,
dass da jemand wirklich mal drauf geguckt hätte.
Jetzt rausgekegelt.
Aber es ist wirklich toll. Also das ist auch
mit sehr viel Liebe
handgedengelt. Ja, sehr schön.
Ja.
Ich finde, wir können ja langsam mal übergehen.
Wir könnten langsam mal übergehen, ne?
Interessanten Dingen.
Genau, machen wir doch einfach mal so allmählich das Thema.
Ansonsten habe ich ja auch nur so Meta-Kram und so Zeugs.
Ja, wir wollten heute so ein bisschen über grafische
Interfaces reden. Ja, haben wir noch nie gemacht.
Genau, und was man da machen kann.
Also ich höre ja immer, oder ich
weiß das aus eigener Erfahrung, dass man grafische Interfaces
Python vielleicht gar nicht so wirklich machen will.
Man kann vielleicht
Turtle benutzen oder so.
Ja, es ist die Frage, ob man das überhaupt noch machen will, aber gut.
Ja, aber
genau, es gibt verschiedene Sachen
in Python dazu und vielleicht mal den Martin
fragen, warum benutzt du denn Qt?
Oder wer bist du eigentlich?
Ja, vielleicht bringst du einfach erstmal.
Ja, also
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, also Fressnapf.
Und das habe ich angenommen und habe dann gesehen, wie meine Mutter dort die Dienstpläne erstellt.
Also sie hatte Personalverantwortung sozusagen, hat Dienstpläne erstellt.
Und sie hat dort Excel-Listen erstellt und hat ein Kreuz für jede halbe Stunde gemacht, die ihren Mitarbeiter sozusagen eingeplant ist.
Das Ganze für damals zehn Mitarbeiter, acht Stunden pro Tag, 26 Tage im Monat, da kann man sich dann 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 ja, das habe ich mir eine Weile angeschaut und habe mir dann gedacht, also das muss besser gehen und ja, da war dann Miaplan geboren.
Ja, vielleicht dazu, was ist MIA Plan? 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, ja, also alles, was man sich da so will oder fast alles, was man sich da so wünschen kann in dem Bereich.
Ja, klingt interessant.
Also ich glaube, die Menge der Unternehmen,
die das halt irgendwie mit Excel-Listen machen,
das wird nicht so klein sein.
Das habe ich auch schon häufig gesehen.
Also ich habe ganz oft da 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 quasi zum Ziel?
Also am Anfang des Projektes war klar,
ich brauche eine grafische Oberfläche.
Ja, die soll im Web stattfinden.
Also das soll quasi nicht auf einer 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.
Hab mir verschiedene Sachen angeschaut. Ihr habt es 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. 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. Das gibt 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 sag 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 drumherum.
Was wäre so ein Widget beispielsweise, wo du sagen würdest, gut, das ist halt so was, was man nur da bekommt?
Ja, also zum Beispiel Tabellen, 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, naja, 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 das 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 so, ich habe noch nichts gefunden, was man damit nicht umsetzen könnte. Und das ist alles schon da.
Also ich brauche dann nichts 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, sag mal, eine Grundvoraussetzung, denn ich bin in einem Mann SAS, das heißt, ich brauche eine hohe Entwicklungsgeschwindigkeit, sonst komme ich nicht zum Ziel.
Und genau, ja, das war quasi die Bedingung und hätte ich angefangen, da mir einen Web-Framework 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?
Werd mal spezieller, was genau
stellst du dir heute hübsch vor? Also wie kannst du das
erst teilen, also oder sieben 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, das Ganze, also
fangen wir von vorne an vielleicht, ja. 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 sozusagen das sehr schnell umsetzen, was ich brauche.
Jetzt hat Qt aber ein Problem, das ist eigentlich eine Desktop-Framework.
Ja, also üblicherweise würde ich also eine Software schreiben, würde die dann bundeln, ja, also mit Pi-Installer, 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 kriegen wir quasi die Desktop-Anwendung ins Web? Und die Lösung dafür lautet Apache Jack-a-Molly. Das ist quasi, ich weiß nicht, habt ihr das schon mal gehört?
Das ist im Prinzip wie Remote Desktop, aber ohne Client. Das heißt, jeder Nutzer bekommt quasi einen Account und lockt sich damit sozusagen auf meinen Servern ein und läuft damit unter einen Nutzeraccount.
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 quasi 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 quasi 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?
Guacamole?
Auf der DjangoCon
2021
gab es
einen Talk darüber, wo auch jemand
eine Shell
quasi damit, also konnte man
halt quasi auf eine Shell zugreifen,
auch über einen Browser.
Das war ziemlich cool.
Und das ist jetzt quasi das gleiche System,
wie das funktioniert. Ja, sehr schick.
Cool Idee. Also theoretisch kann man
damit einen ganzen Desktop
in den Browser reinzeichnen.
Das ist auch die Standard,
also der Standard-Anwendungsfall, aber es geht
eben auch für eine einzelne Software.
Ja. 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, das hat ein bisschen gedauert. Hört sich so an,
als wäre die Lernkommissar. Ja, ja. Also die
Lernkurve ist schon steil, würde
ich behaupten.
Aber, also 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,
also ich arbeite jetzt seit ungefähr drei Jahren
damit und ich habe insgesamt
fünf Bugs gefunden.
Und das ist
echt wenig.
Also da habe ich schon
ganz, ganz andere Sachen erlebt.
Genau, also das ist, also
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, wenn man es aus Entwicklersicht
angenehmer. Ja, das ist deutlich
angenehmer und es ist einfach.
Ja.
Es ist sehr einfach.
Ja,
ich meine, ich glaube auch, dass
Qt hat halt irgendwie, das ist halt
schon, das ist halt eigentlich ein sehr, sehr altes
Projekt tatsächlich, aus heutiger Sicht nicht,
weil ich weiß gar nicht, wann das genau gestartet
ist und wann es die Firma
dazu gab. KDE ist ja da irgendwie, das war schon
so in den 90ern irgendwie, ist das
ich
weiß gar nicht, wann Qt gestartet ist, aber
muss irgendwann in den 90ern wahrscheinlich gewesen sein.
Und das ist jetzt in Version 5 oder 6 oder wie benutzt ihr das?
Ich mache gerade die Transition von 5 nach 6.
Und das ist keine komplett Open-Source-Lizenz, wenn ich das richtig in Erinnerung habe.
Genau, also das ist dual lizenziert.
Also es hängt ein bisschen davon ab, welche Version du nutzt.
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 Strong Copy Left, wenn ich das richtig verstehe?
Da müsste ich jetzt meinen Anwalt fragen. 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, sage ich mal.
Ja.
Ja, ja, ja, ja.
Ja, interessant.
Ja, ja, ich...
Genau, MySQL hatte doch so eine ähnliche
Lizenz, aber ich bin mir nicht sicher,
ob es die LGPL war, wahrscheinlich eher nicht.
Ja.
Ja.
Ja, nee.
Qt irgendwie...
Aber ich meine, dann...
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 irgendwie 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.
Irgendwie sowas. Das ist, die haben
ja 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 wieder verwenden,
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.
Naja.
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 oder?
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, lässt sich aber anpassen, 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, unterstützen sie und ja, da kann man quasi seine Elemente dann färben oder einen anderen Rahmen geben oder was weiß ich.
Ja, genau.
Ja, ja, ja.
Nee, interessant. Ich glaube, ich fand natürlich das letzte Mal
mit Qt, also ich erinnere mich noch daran,
das ist aber 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, was ich da verwendet hatte.
Das war auch noch diese,
die, ich glaube, 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, aber
Also ich erinnere mich auch daran, dass ich bin damals, glaube ich,
über die Lizenz gestolpert. In meinen ersten
Gehversuchen, so in Python, 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, aber das hat irgendwie nicht
so funktioniert, wie ich das wollte
und ich bin da so ein bisschen über diese C++-Implementierung
gestolpert und ich fand auch diese PyQt
nicht so super und bin dann bei Kiwi gelandet
tatsächlich. Wo ich auch sagen muss, da gingen
zwar 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.
Da kommt man nicht weit, wenn man wirklich
intensiv was damit machen will,
finde ich.
Ja.
Ja, ich meine, aus meiner Perspektive wäre jetzt eher so die Frage, warum nicht, ich meine, warum macht man heutzutage überhaupt noch GUI? Ich meine, das macht man, eigentlich ist doch heute alles Web. Und sagen wir mal, das 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 irgendwie, wie macht man das, wenn Clients inkompatibel werden oder so oder unterschiedliche Versionen hat oder 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-UI-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.
Richtig, also ich habe eine ganze Menge Probleme vom Hals geschafft sozusagen. Wo ich mir am Anfang sehr, sehr viele Gedanken darüber gemacht habe, ist, wie ist das ressourcentechnisch?
Ja, also man hat ja quasi das, oder wenn man eine Web-Anwendung hat, dann habe ich ja quasi einen ganzen Schwung 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, sag mal, gleichmäßig auf meine Datenbank und so weiter verteilen.
Ja, ich weiß nicht, also da kennt ihr euch eigentlich
besser aus. Ja, also ich würde sagen, also der
State einer Web-Anwendung liegt
normalerweise in der Datenbank, sozusagen aus meiner
Perspektive und genau, dann gibt es
halt irgendwie diverse Prozesse, die halt
an die man Requests hinschickt und dann senden sie halt
Responses zurück
und genau, ja.
So, und da
hatte ich das Problem, also ich dachte, es gäbe
das Problem,
dass ich das nicht machen kann, sozusagen.
Also meine
Anwendung, die ich, also Miaplan ist
hat ein 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 musst halt deine Daten irgendwie
modellieren und die kannst du in eine Datensprache 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.
Okay, das ist natürlich auch eine interessante Anforderung.
Also das wäre dann die Frage, okay, warum hast du denn NumPy-Matrizen?
Also ich meine, klassischerweise hast du ja eine relationale Datenbank
und dann hast du die Daten halt in einer Tabelle irgendwie
oder in mehreren Tabellen.
Ja, vielleicht nochmal ein Planungsding.
Also was ist überhaupt das Problem?
Also 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 quasi 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.
Das muss ich wissen 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.
Und 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 ist ein 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
kann ich in NumPy, sage ich, oder habe ich
aber sämtliche Operationen, die ich brauche.
Ja, also
ja klar, also wenn man jetzt
NumPy-Arrays
hat, dann ist das natürlich so ein bisschen
inkompatibel 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 Plug-in,
da lädst du dir einfach Folgendes
und dann geht das schon.
Nee, nee, das geht tatsächlich
eher nicht, denke ich.
Also, was man,
wahrscheinlich wäre dann
eine Art, dass man das halt irgendwie
die Daten, die man hat, die hat man halt
irgendwo in einem Object zu liegen oder so,
in Parquet-Format 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
einem... Also klingt für mich, als wären da viele Relationen
irgendwie, ne? 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, ist das, lohnt sich das?
Oder macht man es nicht dann lieber so, dass man das einfach
verwenden kann, was man schon hat, was funktioniert?
Ja.
Ja.
Ja, da kommt es her.
Interessant.
Aber es ist auch wirklich rein
Nampai. Kein Pandas oder sowas, sondern
einfach 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.
Das soll ich 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.
Das habe ich mir noch nicht in der Tiefe angeguckt.
Ich nehme mal an, die
Import-Seiten 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, 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 da direkt
irgendwie verwenden kann.
Ja, also
NumPy ist eine der besten Bibliotheken
in Python, würde ich sagen.
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, also wenn wir jetzt
zu dem Qt da,
also die beiden
Dings, ist das dann halt, da muss man dann
Camel Case verwenden?
Wahrscheinlich ja, ne?
In Qt 6 nicht mehr.
Da haben sie es
quasi normal gemacht.
Aber
naja, man gewöhnt sich dran, sage ich mal.
Es ist jetzt auch kein
Weltuntergang, wenn ich jetzt für die
Calls
dann eben Camel Case habe, aber ja,
schön ist es nicht, das stimmt.
Ja, sind die Fußlegel nach oben gekriegt?
Ja gut, ich meine, ich mache ja auch
andere Sachen, noch TypeScript und so, dann mache ich auch CamelCase,
aber wenn man in Python ist, dann
finde ich das mal, wenn die Kombination, wenn man manchmal
SnackCase hat und manchmal CamelCase, dann ist es ein bisschen
aber ja, gut.
Ja,
interessante Geschichte,
aber wie ist das denn jetzt, wenn jetzt
mehrere Leute
auf die Applikation zugreifen?
Genau.
Ich war ja stehen geblieben, also ich habe mir
Sorgen gemacht sozusagen,
dass das nicht skaliert
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 Web-Applikation.
Wie überträgt denn dieses Guacamole-Daten, ist das nicht ein Bild?
Nein, also das kommt darauf an.
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 dann 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 durchgerechnet,
also 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 sowas? Genau.
Leider ist es noch ein, 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 kam nach
X.
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, dass
X gibt es ja jetzt schon, ich weiß nicht,
20 Jahre, 30 Jahre.
Also ich denke, es wird es auch noch eine Weile geben,
dass da noch genug Zeit ist,
das zu portieren.
Ja. Und dann
ist Matt quasi ein User, der
das von außen benutzt,
eigentlich mehr oder weniger auf dem User
im Unix-System.
Nicht eigentlich, sondern tatsächlich.
Tatsächlich, genau.
Ja.
Ja, das ist, Dominik hat mir gerade irgendwie, hat auf dem Telefon aufgemacht und da flackerte das.
Oh je.
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.
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 FAK nachguckt, steht es da drin. Aber eigentlich ziele ich auf den Desktop-Anwender.
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 es nicht davor.
Also ich habe tatsächlich so ein paar Ideen
an der Stelle auch schon durchgespielt,
weil ich diese Anforderung wirklich auch so ein paar Mal
gekriegt habe, auch so Businesses heraus,
die es halt wirklich brauchten und das ganz interessant fanden.
Also, da bist du nicht raus
Muss ich eigentlich nochmal umsetzen
Irgendwann im nächsten Leben, wenn ich mal teilzunehmen
Wenn es immer so ist
Ja, ja, ja
Aber ich meine, man kann sich schon, also so gerade im
Probenfeld haben die sitzen, die Leute ja schon mal
schon vom Rechner, dann kann man schon davon ausgehen, dass das so
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.
Und ich mag Python.
Und ich mag weniger CSS und JavaScript,
das mag ich nicht so gerne.
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 in JavaScript zu stylen, weil mir so ein paar Sachen dann immer fehlen.
So diese dynamischen Sachen, an die man sich dann doch irgendwie daran 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 das in die Templates
einbaue, das ist manchmal schon immer so ein bisschen
strugglig, weil ich halt da schon relativ
viel auf Vue.js klebe.
Ja, aber das ist ja kein
Problem von, also
es ist ja beides.
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, achso, ja gut, okay,
also wenn du aus der Entwicklersicht drauf guckst
und dir dann überlegst, okay, wenn ich
jetzt schnell Produktivität
und Maximalaufbau. Webgeschichten mit
irgendwie UI-Sachen, wo ich
meine, wenn ich quasi
fürs Web eine Applikation so schreiben will,
wie ich das sonst mit PyQt machen würde
oder mit Qt.
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 bin mir natürlich da so ein bisschen so ein Klotz ans Bein.
Naja,
aber dafür habe ich natürlich auch das ganze Ökosystem mit
damit. Ich bin halt nicht ganz alleine.
Mein Problem wäre jetzt bei Qt in Python
mit den Bindings.
Ich muss halt alles selber bauen.
Also vom Scratch irgendwie. Ich muss mir selber
komplett ü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. Also wie 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?
Achso, achso, 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?
Ja, ist responsiv, wenn man das will.
Wie bitte?
Auch animiert?
Ja, kann alles.
Du kannst animieren, du kannst, also du kannst ja immer 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
ist halt, ich glaube es ist halt sehr
stark davon abhängig, ob das jetzt eine gute Idee
ist sozusagen, dass
man das einfach so nehmen
kann, die Widgets, oder wahrscheinlich kann man sie ein bisschen
stylen, oder ob das jetzt besser wäre
das über CSS und JavaScript zu machen
hängt halt wahrscheinlich sehr stark von einem Use Case ab
Ja, die Frage ist halt, wie viel Arbeit muss ich jetzt
da noch reinstecken, um mir so ein komplettes Konzept
auszudenken. Aber wenn dein Use Case 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 in der Customer?
Naja 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, ja okay, aber da würde ich jetzt
denken, an der Stelle ist es
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, also das so aussieht,
das ist halt nicht so wichtig.
Selbst wenn ich das so hübsch hinbekomme, weil das so viel Aufwand ist,
das so hübsch hinzubekommen. Ja, vielleicht wäre das dann schrecklich viel
Aufwand, aber wenn dir das egal ist, dann musst du das nicht machen.
Ja, also
du meintest gerade, entweder ich mache es
mit CSS oder ich mache es mit Qt.
Das stimmt nicht so ganz.
Nein, was ich meinte ist nicht
mit CSS oder mit Qt, sondern ich meinte
sowas wie mit den ganzen Frameworks, die ich habe.
Die ich halt gerne muss, keine Ahnung,
Tailwind oder sowas, damit ich halt
schneller produktiv bin, Utility
oder so, Utility-Klassen einbauen.
Aha.
Aber wenn ich das ganze CSS
dann immer selber schreiben muss und dann muss ich mir erst mal
überlegen und dann muss ich mir erst mal so ein paar Boxen bauen,
dass das alles so passt, dann
naja, kommt drauf an, also
QT hat auch noch
einen Designer, ja, wenn du das
Projekt nicht kommerziell nutzen willst, kannst
du diesen Designer nutzen.
Aber wenn ich das nicht kommerziell nutze, okay.
Genau. Kannst du den
Designer nutzen, das ist quasi mit
ziehen und ablegen
quasi. Jetzt erinnere ich mich, das hatte ich
genauso. Wie man das früher
von, ich glaube, Visual Basic
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 machen muss.
Okay, ja.
Ja, ja, ich meine, das machen
ja auch die ganzen, oder
ich meine, ich kenne jetzt die iOS-Seite besser, aber
halt da Xcode und so, da gibt es ja auch solche Dinge,
wo du dann halt dann grafisch dann die ganzen
Elemente irgendwie sozusagen,
selbst dann kannst du sogar Linien
irgendwie dahin ziehen und dann werden dann halt irgendwie
Event-Listener hinzugefügt oder keine Ahnung.
Ja, genau.
Damit geht das wahrscheinlich auch.
irgendwie. Aber
naja, ich könnte mir schon
vorstellen, dass, also du kannst jetzt zum Beispiel
an der iOS-App, da kann ich es halt, weil ich nehme
mal an, dass es bei Qt genauso ist.
Sozusagen
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.
Ja, genau. Und zwar wahrscheinlich
mehr Arbeit, als wenn du eine Webseite so aussehen
lassen möchtest, wie du das aussehen lassen möchtest.
Das ist auch so ein bisschen, also ohne, dass ich jetzt
angreifen möchte, aber das ist so ein bisschen mein Problem
mit diesen Beauty-Sachen oder meine
Kritik daran. Also ich glaube, dass das
wirklich schwieriger ist, das
richtig schön hinzubekommen.
Ja, aber jetzt noch mal, jetzt 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 Newscase.
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. Dazu kann ich dann entsprechend auch nicht so viel sagen. Also was ich sagen kann ist, es lässt sich jedes Element mit CSS stylen, wenn man das will. Ja, ich glaube so groß und unterscheiden 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, Bootstrap importiert und sonst nichts tun für das Design, weil einem das nicht wichtig ist.
Ja, ja, genau, also
ja, da habe ich das ja auch
im Grunde, ja, ich glaube auch, das ist der Grund, warum halt
Bootstrap quasi so viel verwendet
wird in internen Tools,
weil da ist es halt oft egal,
ist halt wurscht, ja, also
wie das jetzt aussieht, es muss halt bloß irgendwie halbwegs bedienbar
sein und
das kriegt man mit Bootstrap ja schon hin.
Es sieht halt nicht so toll aus, aber
ja, genau.
Ja, ja,
ja, ich weiß es nicht so genau.
Es ist immer, es ist alles eine,
Das ist da so wirklich...
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, irgendwie das so zu betrachten.
Nee.
Ich glaube, da würdest du
Spiele...
Ob du eine 3D-Intel
möchtest oder halt nicht, also ob du halt
eine zweidimensionale, weiß nicht,
kann man Fensteransicht sagen zu Qt?
reicht.
Also 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 dann Pfeifen machen wollen würde.
Büro-Simulator 3.0.
Ja, genau.
Das geht
wahrscheinlich gut.
Da kam ich
mit Kiwi schon ein bisschen weiter tatsächlich.
Also es war auch so eine Art Büro-Simulator.
Ja.
Ja.
Ich habe einen Fantasy-Manager
für unsere Eishockey-Runde gebaut.
Ja, gut, sowas.
Das hat wundervoll funktioniert.
Ja.
Das war sogar hübsch in Kiwi.
Aber ja, ich glaube,
man will das nicht benutzen, das ist halt befummelig.
Ja, aber was mich auch nochmal interessieren würde,
so rein ressourcenverbrauchmäßig, wenn ich jetzt
für einen User so eine
Applikation starte mit Qt, dann habe ich schon das
Gefühl, also wahrscheinlich so ein paar Megabyte wird die dann
schon einen Hauptspeicher brauchen oder so.
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 irgendwie so raus serialisieren und erst
beim nächsten Mal, wenn der Nutzer wieder kommt, dann
muss man das halt irgendwie wieder sich irgendwo
herholen. Genau so ist es.
Aber tatsächlich
hast du, solange ein Nutzer
irgendwie 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 Hauptspeicher.
Ja, genau.
Ja, okay.
Das ist so, 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 Web-Anwendung,
die halt nur das, wo es dann halt einen Prozess gibt,
halt dann viele Quests von unterschiedlichen Benutzern.
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,
ein Swap-Laufwerk
anzulegen, das irgendwo hin
zu tun, wo es einen relativ zügigen
Zugriff hat. Und
ja, da geht es auch.
Ja, und SSDs sind jetzt auch nicht
du mir so super langsam? Ja.
Genau, also eigentlich sind wir
mit der Swap-Variante
unbegrenzt im Hauptspeicher.
Ja. Fast.
Ja, ja, ja, ja.
Nee, durchaus interessantes Modell.
Ja. Und
ja, ich meine, was
wenn man jetzt aber, 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
so, warum, das ist irgendwie komisch.
Ich weiß es nicht genau.
Also bis jetzt habe ich tatsächlich dazu noch gar nichts gehört.
Ah, okay. Interessant.
Also es scheint einigermaßen intuitiv zu sein.
Vor allem, weil man es ja auch vom Desktop schon kennt.
Ja.
Also die Art der Bedienung, sage ich mal.
Gehen denn da wirklich alle, also jetzt stelle ich mir natürlich die Frage,
wie ist das denn jetzt mit Tastaturkürzeln oder, weiß ich nicht, rechter Mausklick oder so.
Das muss ja jetzt alles durch den Browser durch.
Der Browser lässt ja jetzt nicht alles durch.
Manche Sachen sind ja auch, quasi 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, was da möglich ist und was nicht.
Ja, 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 gesucht gibt.
Ja, das heißt, man kriegt auch gar nichts, aber es ist schon in einem Browserfenster, muss es halt sein.
Richtig.
Aber ansonsten kriegt man eigentlich gar nicht mit, dass es wirklich ein Browser ist, sondern das ist eigentlich eher, verhält sich wie eine native Applikation.
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
Okay, dann passieren wahrscheinlich komische Sachen
Genau, es gibt Dateitransfer
Es gibt, wenn man will, sogar Audio
Ja, schick
Ich glaube, dieses Guacamole
muss ich mir auch mal angucken
Scheint ja schon sehr interessant zu sein
Lass mal überlegen
was gibt es denn, was kann man sich denn noch so
vorstellen, was interessant sein könnte
bei diesem, also gibt es, ist das
der Client selber, der Python
Rapper um Qt
kommt selber auch von, ich weiß nicht
wie hieß denn diese Firma nochmal
die Qt baut
Qt Foundation
Qt Foundation
na gut, ich weiß nicht mehr, da war ja auch noch eine lange Zeit
vielleicht gibt es die Firma auch nicht mehr, keine Ahnung
Foundation klingt jetzt irgendwie eher nicht mehr nach
Rundfunk, aber
genau, von denen kommt halt
auch, kommen die Python-Bindings, weil ich
habe irgendwie gehört, PySite gibt es, oder
das sind
die dann. Wenn ich Qt
sage, dann meine ich PySite.
Also es gibt
unterschiedliche Ausprägungen,
wie man Qt nutzen will, kann
und
ja, ich habe mich für PySite entschieden.
The Qt Company.
Ah, okay.
Hier gibt es dann noch so ein paar andere Sachen.
Vielleicht wollen wir die noch kurz erwähnen.
Also Kiwi haben wir jetzt schon, glaube ich, erwähnt.
Hier ist noch WX-Python.
Kennt jemand 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.
Kann man sich dann quasi aussuchen.
Du würdest ja wahrscheinlich alles, dein ganzes User-Interface
und auch deinen 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 Rapper da irgendwie
drum, Piesimplegui, 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,
Piesimplegui.
Das macht er so beinahe auch über
Qt, kann man dann lieber WX peisen.
WX peisen wäre noch so ein Ding.
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 gegen wohl ein paar
Sachen.
Ja, also
es ist immer noch so, Python und GUI
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 und
aber ich habe schon so das Gefühl, dass
so diese Desktop-UI
Geschichten so ein bisschen
Also vielleicht riechen sie auch nur komisch
Das könnte auch, also ich meine
da könnte es schon so ein bisschen tot sein
Was ist mit Beware?
Ja, ja, genau.
Also das würde ich auch so sehen.
Also das ist Russell
Keith-McGee, der hat ja auf der
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, 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 ist denn das für komische große Dinger da, seltsam, was ist das?
Kann man die just swipen?
Ja, genau, tippen dann auf den Bildschirm, dann passiert nichts, dann ist es kaputt.
Also 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 nur so ein,
das ist ein Risiko. Also ob das jetzt so eintritt
oder nicht, ist natürlich klar, wie hoch
ist das Risiko. Also auch marktanteilende Worte, wenn man das
benutzt, muss man wahrscheinlich schon relativ viel sich damit auskennen.
Ja, aber
also, wie
auch immer, aber
dass es da ein Risiko gibt, würde ich schon
sagen, einfach deswegen, weil Python da halt nicht
läuft. Das 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 hat. Und das ist halt genau,
B-Ware macht das halt genau.
Es sind diverse Komponenten, die dafür nötig sind.
Ja, letztlich macht es
sowas ähnliches, was halt React Native oder so
auch macht, dass es ruft schon die
echten UI-Funktionen dann auf von den
Frameworks der entsprechenden...
Also kompiliert runter quasi auf
Kotlin oder? Ja, nicht ganz.
Nee, es kompiliert, es ist nicht...
Also es gibt unterschiedliche Komponenten und die
machen unterschiedliche Sachen, aber letztlich
es gibt auch Wrapper um die
echten Funktionen sozusagen drumrum und
die werden dann aufgerufen
und
ja.
Wäre auch interessant zu wissen, wie React das eigentlich macht
und dann gibt es ja noch irgendwas wie Yonos oder Capacitor
oder so. Ja, es gibt dann
Teile, die sind halt komplett nativ und dann
Teile kann man aus dem Web nachladen,
man kann JavaScript ausführen und es ist
ja gut, oder Elektron macht das ja auch so.
Ja, also
ich glaube, da sind wir auch noch nicht
durch. Das war auch ganz interessant,
ich habe mich jetzt, ich war letzte Woche
Donnerstag auf dem Treffen der
Java User Group,
rein Juk,
die Java User Group rein.
Was hat dich denn dahin verschlagen, Juk?
Ja, ich dachte, ich muss mich mal weiterentwickeln
und dann dieses Python entwickeln.
Das hat keine Zukunft, den muss man bei Java angucken.
Nee.
Ich bin da hingegangen, weil
der Vortrag da hat mich
irgendwie, ist mir aufgefallen,
Stefan Tilkoff und
Ebert Wolf, die machen so
Software minus Architektur,
TV und die machen auch
Podcasts und die sind beide bei
InnoQ und die haben auch schon viele interessante
Stefan Tilkoff ist
oft zu Gast in anderen Podcasts, gerade
letztens war er bei der Programmierbar
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 einem 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. Und
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 erklären,
was so die Probleme sind, die man da hat.
Ja,
deswegen bin ich da hingegangen und
sie haben geredet über, wie sah es 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 auch 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 Google,
für so, das sollte, glaube ich, auch mal irgendwann Webgeschichte werden,
aber jetzt hat 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 reinrendern 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 Canvas reingezeichnet
und da Canvas überall da ist
und man da irgendwelche Dinge reinzeichnen kann
kann man halt alle Sachen gleich aussehen
lassen auf allen Geräten damit
und halt auch relativ
und ist es halt einfacher zu entwickeln als wenn man jetzt irgendwie
das haben ja diese statischen
Programmiersprachen oder statistikisierten Programmiersprachen
da ist halt immer so
ich meine gut mit Kotlin ist es schon ein bisschen besser
geworden, aber Java ist halt schon
für Android, das ist halt schon sehr
sehr verbose und man muss
ja 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 immer so, naja, Software
Architektur 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 man in Java
für Hello World halt schon tausend
Zeilen irgendwie Boilerplate schreiben muss,
allein davon muss man sich Gedanken um Softwarearchitektur
machen, einfach, um das
Spoiler-Play-Zeugs zu organisieren.
Und
ja, das muss man mit Dart auch nicht so
und dann hat man
eine Alternative, die vielleicht ein bisschen
einfacher zu verwenden ist. Und das setzt sich gerade
durch. Also ich glaube, das, was der
sagte, war, inzwischen sind
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.
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 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 halt 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.
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 quasi der Wartungsaufwand dafür nach meiner Einschätzung sehr, sehr groß ist.
Oh, okay, das erinnert mich jetzt noch 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 ja, die Capacitor habe ich sehr empfohlen gekriegt.
Und das geht halt auch mit Vue.js.
Ja, ist quasi dann so ähnlich wie React Native, nur halt für Vue, ne?
Ja genau, es gab irgendwie auch mal View 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 auf allen Plattformen Web gut genug funktioniert, dass man die anderen Sachen nicht machen muss, aber gut. Und mit Safari 16.4 ist ja jetzt natürlich auch, also iOS hat jetzt einen Großteil der Sachen, die gefehlt haben oder die bisher 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 in 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 halt Python einfach im Browser
also irgendwie im Browser
laufen hat.
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 den Interpreter,
Python-Interpreter, der ist halt nicht im Browser drin.
Die JavaScript-Interpreter halt schon.
Und das bedeutet, man muss
halt erstmal ein paar Megabyte irgendwie
runterladen und kann dann erst
irgendwas machen.
Wobei, das ließe sich ja leicht lösen,
wenn sich das so weit durchgesetzt hat, dass die
Browser-Hersteller 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.
Das halt alles irgendwie dann nach
WebAssembly kompiliert letztendlich.
Ich habe letztens gehört, das fand ich auch sehr interessant,
dass tatsächlich,
ich glaube, Figma war es.
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.
Also 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 VJS-Komponenten
oder direkt mit CSS rausrennen 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 meine
Anwendung 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 musst, 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 ein 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.
Ich würde, also
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 nochmal zu dem
MIA-Plan. Das ist aber
quasi
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.
Ja.
Das, ja, genau.
Ja, 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.
Wir haben jetzt alles so ein bisschen
gefreut, was wir so wirklich tief gemacht haben.
Also was mir,
ich höre euch ja auch regelmäßig,
was mir aufgefallen ist,
es gibt noch einen
Unterschied, was wir
sozusagen, 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?
Wie bitte? Was nimmst du? Files?
Dateibasiert, genau.
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 das
Jack and Molly hat
halt eine Datenbank im Hintergrund.
Da komme ich nicht drum rum.
Aber Datenbanken, da habe ich verschiedene Nachteile, die ich da sehe.
Zum Beispiel brauche ich ein Tool, mit dem 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 den 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 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 das JSON weg?
Nee, ich mache alles, was geht,
mache ich menschenlesbar.
Also, ja,
JSON oder
INI, ja.
Also JSON mache ich auch, in einigen Applikationen
schreibe ich einfach tatsächlich so JSON-Files raus.
Ja, 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. Das ist eigentlich das, wo ich jetzt hin wollte.
Also sämtliche Operationen, die ich eigentlich, also ich brauche natürlich auch Operationen auf den 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 wäre mir nicht bekannt.
Also kommt drauf an, was für eine Datenbank man verwendet, aber ich meine
jetzt bei Postgres, das geht schon, also
da gibt es so, ja, also muss man
nicht stoppen.
Aber ja, das ist natürlich ein Problem.
Ja, du musst halt irgendwie, du hast einen Tail halt,
mit dem du irgendwie umgehen musst, von
Zeugs, das irgendwie in der Luft hängen kann, zwischen dem
letzten Backup und dem, wo du gerade
backuppen 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, sowas wie Crunchybridge
Crunchy Data verwenden oder so, oder sonst
irgendwen, der halt so was Managed Postgres
anbietet oder so. Okay, interessant.
Dann muss er bitte noch meine Shownotes packen.
Packet bitte noch meine Shownotes.
Aber man kann das auch selber machen, was sie tun.
Hat aber den Nachteil,
dass dann meine Daten woanders liegen.
Ja, ja, gut, okay.
Das will ich eigentlich nicht, sondern
also, mein Ansatz
ist, ich möchte eigentlich gar keine
Kundendaten haben.
Und wenn ich sie haben muss,
dann möchte ich so wenig wie möglich davon haben.
Ja, also z.B. bei der Anmeldung verlange ich auch nur Nutzername und Passwort, mehr nicht. Noch nicht mal eine E-Mail.
Ja, gut, aber was ist dann, wenn jemand sein Passwort vergisst?
Genau, dann kann er mich anschreiben und falls das öfter passiert, das ist tatsächlich noch nie passiert, dann mache ich das in einem automatischen Verfahren draus.
Aber solange das nicht häufig
vorkommt, ich antworte
auch schnell.
Ich denke auch, das ist halt wieder eine Frage,
was die Kunden, wer die Kunden sind.
Also wenn du jetzt ganz viele
Endkunden hast, an denen du nicht viel verdienst
und dann
muss alles automatisiert sein.
Dann ist schlecht, wenn die Leute alle dich anschreiben.
Wenn du jetzt 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.
Ich finde es interessant.
Ich weiß nicht.
Ich denke mir so,
irgendwas könnte man mit den Daten auch anfangen.
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.
Und das kann ich schon mal insofern vermeiden,
wenn ich das Zeug gar nicht erst habe.
Das würde zum Beispiel aber auch für Managed sprechen,
weil dann hast du die Verantwortung quasi auch abgegeben.
Naja, nicht ganz.
Du schließt dann einen Servicevertrag mit dem, der das halt managt,
aber in der Verantwortung steht trotzdem ich.
Also ganz so ist das dann nicht.
Also wenn jemand dann, also nehmen wir an,
du hast eine Managed-Datenbank irgendwo gekauft zum Beispiel
mit Crunchy Data und dann irgendwie Crunchy Data,
da geht irgendjemand rein und trägt alle Daten raus.
aus, dann hast du natürlich trotzdem ein Problem.
Auch wenn du das vertraglich dann sagen kannst,
das bin ich gar nicht jetzt, ich bin jetzt
vielleicht außer Haftung, aber das ist ja trotzdem
Kacke für deine Kunden und überhaupt.
Aber das kommt halt genau da vielleicht auf die detaillierte
Vertragsbeziehung mit deinen Kunden oder mit den Kunden
deiner Kunden an und so. Ja, aber vielleicht willst du das auch einfach
gar nicht. Vielleicht sagst du, ich will nicht, dass das passieren kann.
Die Frage ist halt tatsächlich, also was jetzt aus der
Datenraustrageperspektive sicherer
oder besser ist, wenn man jetzt
ein kleines Team hat, sich
noch komplett um so ein Datenbankcluster-Management
zu kümmern zu müssen oder das halt
einen Service-Dienstleister 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.
Würde ich auch sagen. Wenn du das outsourcest,
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
wie jetzt die letzte Krake. Da gibt es
ja so ein paar Google-Kraken, die das
so machen. Ja, aber es gibt viele Unternehmen, die erstmal
mal 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 das habe ich auch keinen Freund
von, von sich. Also...
Ich kann das so ein bisschen verstehen,
also jetzt nicht von Kunden, 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, mal eine Telefonnummer
haben will. Und das finde
ich ganz, ganz grausam.
Ja. Also ich würde jetzt auch
sagen, also mir geht es gerade nicht um Kundendaten,
sondern eher so um so Meta-Quatsch.
Logzeitstempel oder sowas.
So Telemetrie im weitesten Sinne.
Ja, im weitesten Sinne, ja.
Und ohne, dass ich jetzt irgendwie so 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.
Ja, technische Daten brauchst du natürlich.
Das steht ja außer Frage.
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.
Beispielsweise wäre jetzt auch so ein GraphQL-Api.
Wenn ich jetzt nicht ein Problem mit
Latenz habe, ich ziehe mir dann Maximum
und schmeiße alles weg, was ich nicht brauche.
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
Anwendungswelle nennen, das so toll ist.
Aber ja, es gibt
auch gute Gründe, warum Leute das anders machen.
Ja, man muss halt ein bisschen mehr Format haben.
Der weitere 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 das weniger Stromverbrauch, so ein bisschen
weniger Kosten, auch
ökologisch.
Ja.
Aber ich finde das
als Grundsatz zu sagen,
ich schaue 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.
Was eigentlich für so ein ORM-Ding
sprechen wir mit Klaren, definierten Modellen
mit einer Klarenvalidierung?
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.
Die Buskette steht ja auch in Falsch irgendwo rum.
Ja, genau.
Insofern
ist halt auch da
die Frage, und es ist ja auch, wenn man
eine Web-Anwendung hat, die sind die,
jetzt wenn man ein Django 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 man 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, was man...
Du musst ja Redis jetzt auch nicht nur als Cache nehmen,
sondern kannst halt auch da bestimmte Sachen vorberechnen,
da 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 also diese Kombination
Relationale 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 dem Object Storage nehmen?
Also das habe ich
leider nochmal, 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, die sie irgendwo hinlegen müssen.
Und wenn man das halt nach, ich habe jetzt
letztens irgendwie,
wann war das?
Bis gestern Morgen oder so, keine Ahnung, war
auch
Python Podcast, die war weg.
Hä, warum das denn? Naja, gut, Platte vollgelaufen.
Und warum? Ja, weil da
eine Mast oder eine Instanz auf dem
gleichen Rechner läuft, die halt irgendwie alles vollgemüllt hat.
genau, dann
die Standardlösung, oder das erste ist dann halt,
Leute legen das dann nach S3 oder so
und stellen dann fest, oh mein Gott, das ist ja voll teuer.
Ja, das ist...
Und ja, ich hab jetzt,
ich weiß nicht, vor den letzten Monaten, und ich hab ja eine super
kleine Instanz, aber ich hab 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. Was ich
dafür schon verwendet habe, ist so
Minio.
Ja, das ist aber
so...
Das Problem dabei ist,
das ist quasi
so ein Bucket-Lokal.
Gleicher API, gleiches Interface wie S3.
Gleicher API wie S3,
aber du kannst halt selber hosten.
Das ist eigentlich ganz nett.
Auch GPL, ich glaube auch.
Ja, das kann man durchaus verwenden,
auch im kommerziellen Kontext geht das.
Aber es gibt da eine Firma hinter,
die ist jetzt auch im Silicon Valley,
das ist alles irgendwo geschrieben
und da arbeiten viele Leute,
die haben wirklich viel, viel Venture-Capital eingesammelt
und 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
einen dafür bezahlen lassen können,
was ja auch irgendwie legitim ist,
aber das ist halt so ein bisschen...
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 den 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,
dann kannst du irgendwie die in so eine Liste eintragen.
Das ist dann etwas, wo dann die Leute
draufgestoßen sind, die dann Minio verwendet
haben. Das ist ja der große Vorteil
von AWS und
der Lambda-Geschichte, dass du das halt
einfach hochskalieren kannst mit einem Klick.
Ja, genau. Also wenn du,
aber Minio ist eher so für jemand,
der sowas wie S3 betreiben möchte
und dann halt schon,
wo du halt schon ein Datastart hast und wo das alles,
aber wenn du jetzt dynamisch
irgendwie, du sagst, oh, ich brauche jetzt aber nochmal ein paar
Terabyte mehr Datenspeicher,
dann ist Minio flasht.
Du kannst dein Minio-Cluster, kannst du Sachen auf jeden Fall hinzufügen.
Das heißt, wenn du dir irgendwie
dynamisch Kisten spawnst, auf denen
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 da jetzt auf die ganzen
Performance-Tuning und so Dinge, Artikel,
die Leuten dann aufgefallen sind, die
größere Mastodon-Inzidenzen betreiben, die meinen so
Arschhit, 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, das nennt sich Seaweed FS.
Okay. Und da geht
das wohl. Das habe ich aber selber noch nicht
ausprobiert, also keine Ahnung. Seaweed.
Ja.
Ja.
Genau, das sind halt so die Dinge,
die man macht. Wieder auf die Enable-To-Do-Liste.
Ja.
Naja, genau. Aber ja, also
die Kombination ist eigentlich schon gut, aber ja klar, ich sehe auch,
dass man, wenn man ein Fallsystem hat, ist auch nicht
so schlecht, ja. Also wenn man da tatsächlich reingucken
kann und so.
Ja,
es kommt immer auf den Anwendungsfall an,
was jetzt da mehr Sinn macht.
Ja,
aber ich meine, sozusagen
aus der Datenbankperspektive, 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.
Und
ja, Backups
mache ich mit Borg.
Habe noch nichts besseres gefunden.
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.
Achso.
Also oder auch irgendwo, wo halt einer läuft,
also relativ gut ist. Okay, ja, das mache ich sowieso.
Aber gut, das mache ich dann händisch.
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 Daten 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.
Ja, ich meine, aus einer Software-Architektur-Perspektive kann man natürlich auch einfach sagen, das ist halt ein Implementationsdetail, das ich jetzt aus dem Kern meiner Software auch eigentlich raushalten kann. Ich mache an dem halt irgendwie Repository-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 Tommel 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.
Aber das mache ich halt woanders
dann.
Ja, also ich meine, du könntest halt,
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
oder so. 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.
Ach cool. Wenn man das will.
Ja, oder überhaupt so Indizes
und so hast du wahrscheinlich dann eher nicht.
Nee, brauche ich nicht.
Glücklicherweise. Dann können auch keine
Indizes kollidieren, wenn ich zwei dicke
Datensätze zusammenfüge.
Ja, insofern
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
hatten, oder
sind wir quasi durch?
Nö, aktuell
würde ich sagen, haben wir relativ
breit alles erschlagen.
Gut, dann machen wir noch Pics.
Wer möchte anfangen?
Okay, dann fange ich mal an.
Moment.
Pics.
Ich würde gerne
auch eine
kleine, feine Anwendungen
picken,
die jetzt, also auch wieder natürlich
nicht für so wahnsinnig viele Leute interessant ist,
gibt es 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...
Obsidian. Ja, Obsidian.
Ja, gut, aber das dann halt,
das ist halt sehr
puristisch irgendwie.
Kannst ja
direkt Static Pages, das
Rezepte eignet sich dafür sehr gut, rinnern lassen, deinen Bock.
Ja, aber
klar, kann man
machen, ist halt aber
nicht unbedingt auf den Rezeptanwendungsfall
irgendwie so wahnsinnig gut
zugeschnitten.
Und das Ding kann halt so Sachen wie
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, speichere mir 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 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 weil, woher
soll, will man sonst
wissen, also oft auf Webseiten gibt es halt viele Bilder,
wo ist denn, welches Bild ist denn jetzt so 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 zu dir dann.
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, sehr angenehmes Ding.
Ich bin deswegen drauf gekommen, weil
ich habe halt so eine
Webseite Captain Cook
irgendwie.
Da gibt es immer ganz interessante Vorschläge,
was Rezepte angeht, so drei pro Tag.
Und ich hatte früher auch
eine Kombination aus Paltenbeckend 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,
das zu deployen ist schon ganz schön ein Horror.
Ja, ich mag Melee nicht so gut.
Ja, aber und dann habe ich irgendwie ein Ding gebaut, was mir sozusagen die Rezeptgeschichten, die es da bei dieser App gibt, in dieser Captain Cook App, halt rüber sinkt 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.
genau. Und da hat jemand dann ein Pull-Request
gegengestellt und hat gesagt,
hier, soll das nicht auch vielleicht mal nach
Paprika sinken und so? Ich so, Paprika kenne ich gar nicht.
Da bin ich auch aufmerksam geworden und
ja, voll super, jetzt sinkt das halt auch dahin und jetzt
verwende ich Paprika und bin sehr zufrieden.
Also was echt cool klingt,
ist halt mit den Bildern und den Zutaten, weil
ich mache das halt immer alles selber, aber gut.
Ja.
Ja, okay.
Cool. Ich würde
Copilot Labs picken.
Also Copilot, haben wir ja schon ein paar Mal
drüber gesprochen, wunderschöne Extension
für den Editor deiner Wahl,
zum Bessermachen.
Copilot Labs, ich weiß nicht, ob es auch für andere
IDEs geht, als VS Code, aber
damit kannst du halt so Sachen machen, wie
markier dir irgendwie ein paar Funktionen,
mach doch mal bitte Type-Ins 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, hier kann ich go, oder andersrum,
Oder, ja, das...
Okay, hab ich auch noch nicht. Ich verwende immer nur
den Standard-Copilot, ja. Ja, und das würde ich sagen,
das ist 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 VS Code 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 ich habe halt gelesen,
alle geöffneten Files im VS Code schickt er dann rüber.
Und das geht ja dann nicht.
Also wenn da zum Beispiel irgendeine 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 ja vielleicht darauf an,
ob du jetzt tatsächlich patentrelevante Dinge
machst oder nicht.
Also,
ich meine, auch OpenAI hat da ja
diverse Probleme, die sind ja
irgendwie, wie heißt das,
Italien ist komplett gesperrt
worden.
Jetzt ist es wieder frei.
Jetzt ist es wieder frei, aber
weil sie haben, aber das fand ich schon
auch ein bisschen dreist von Open Air, dass sie da halt wirklich
gar nichts zu sagen, ich meine sie können ja
da, man kann ja, wenn man das sagt, was man da tut
mit den Taten, das kann man ja durchaus einiges machen, aber
sie haben halt einfach gar nichts dazu gesagt und das ist halt schon
Wobei das ist ein bisschen andersrum
also die haben ja quasi
Du musst die Story jetzt auch fertig erzählen, man konnte die Story gar nicht verstehen, Entschuldigung
Welche Story?
Was sie da einfach gesperrt haben in Italien, ich dachte Italien hat
sich überlegt, dass sie da keinen Bock drauf haben
Nee, nee, nee, das ist eine europäische Geschichte
das hätte auch dann, das droht da auch
dann in anderen europäischen Ländern zu
passieren, weil du musst halt, wenn du irgendwie 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 kann das da
niemand mehr darauf zugreifen. Ja gut, aber Artikel
6.1 FDSGVO
zum Beispiel sagt, dass ein Anbieter
eines Dienstes alle für den
Vertragserfüllung relevanten Daten durchaus erheben darf.
Ja, ja, 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 meine, na, so.
Nee, ist halt...
Wobei da ist es ein bisschen andersrum. Also da nimmt sich ja
OpenAI quasi den
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, ich sag mal so, wenn du über GitHub bist, ist das eh wurscht.
Ja, wenn deine Code da eh liegt, ja, klar.
Aber ich meine,
auch was Leute halt so bei
ChatGPT oder so reinpesten. Also ehrlich
gesagt, ich paste da ja auch viel Code rein.
Das ist
halt auch ein Anwendungsfall
und da ist wahrscheinlich auch viel
dabei, wo man als Firma ein Problem
mit 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,
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 Sequels
rauszupaldovern, um
da selber einen Profit zu machen. Also gerade aus,
also auch als Firma würde ich das sagen.
Das ist aber viele Könnte, Sollte dabei.
Ich weiß jetzt nicht, ob ich meine wirklich
patentierbaren Sachen da irgendwie
optimieren lassen würde, aber ansonsten
würde ich jetzt sagen, hm. Und es gibt halt auch
zum Beispiel, wenn man das nicht möchte, als
Firma, ja durchaus, Auftragsdatenverarbeitungs
Dinge, 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.
Ja, genau. 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, ich weiß gar nicht,
wer das gesagt hatte, ich glaube
Manuel, das hast du 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
dass du jedes einzelne Software-Paket
irgendwie verifizieren musst von irgendeinem
Audit-Team, was meinst du, kannst du besser als die
Umsatz-Community und so, und dann sitzen da
zwei Männchen und machen dann ein Audit von
150.000 Datapaketen oder sowas,
Entschuldigung.
Muss ja nicht alles sinnvoll sein, aber
das...
Worüber reden wir, ist das eine ABM oder was?
Also ganz ehrlich, die Kosten und den Nutzen vom Business
würde ich jetzt sagen, auch von
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 ja.
Das ist halt ein Trade-off.
Ja, genau.
Ja, okay, aber Copilot Labs,
okay, interessant.
Ja, jetzt haben wir,
du hast noch einen Pick auch, Martin?
Ja, ihr hattet ja
eine Episode mal gemacht zu PyPy.
Ziemlich cooles Tool
übrigens und ich habe noch so eine Ergänzung dazu quasi, das nennt sich Numba. Das ist von den Entwicklern von Anaconda. Anaconda, das ist die quasi Python-Distribution und das finde ich auch richtig genial.
Mein großer Wunsch
war, ich schreibe, oder mein großer Traum
war, ich schreibe Python-Code, dann drücke
ich einen Knopf und der übersetzt mir das nach C.
Aha. Und im
Prinzip macht es das
eigentlich
fast ohne Code-Anpassung.
Also alles, was ich
da machen muss, ist
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 Ausgabedatentypen
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. Finde ich, habe ich probiert,
funktioniert genial.
Ja,
wo würdest du, hast du auch schon mal
Saiten ausprobiert?
Weil das ist immer so das, was so standardmäßig irgendwie auch
bei Scikit-Learn oder so verwendet wird.
Das Problem ist,
wenn das Projekt hinreichend groß wird,
dann habe ich, also ich habe ja
bei Saiten und bei PyPy
nicht so richtig die Wahl,
dass ich jetzt nur einen bestimmten
Teil meines Projektes damit ausführe.
Doch, doch, also Saiten auf jeden Fall, also oder ich weiß nicht.
Ach, bei Saiten gibt es das? Saiten ist einfach auch eine Art
Python-Dialekt, wo man aber dann
zum Beispiel, wenn man es schneller haben will,
die Typen mit dazu schreibt.
Ist halt ein bisschen, ist auch älter als die Typ-Annotation.
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, das kannst du für einzelne Funktionen
auch machen oder für... Ja, aber
wenn die Funktion schon da ist, musst du sie umstellen.
Ja, das ist richtig.
Stimmt, das musst du bei Nummer nicht unbedingt, okay, ja.
Und bei Nummer brauchst du das nicht, da kannst du das lassen.
Eigentlich wie es ist,
Klammer auf, abgesehen von den Eingabe-
und Ausgabedatentypen, 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, 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.
Dann war das auch super.
Ja.
Da wir jetzt bei dem Speed waren, hat es eben auch noch
erwähnt, das wollte ich jetzt nochmal ans Ende packen,
Polar-IRS. Ich glaube, das ist auch
cool. In dem Zusammenhang, wenn wir
schon bei Speed wieder sind.
So als Data-Frame-Tool
für Rust und Python irgendwie noch
kombiniert.
Jojo. Ja.
Genau. Ja, vielleicht
ja, ich höre immer, Python ist langsam.
Ja.
Also bis jetzt lag es immer an mir
und nicht an Python.
Ja. Und wenn es an mir
lag, dann hatte ich
auch eine Chance, das zu beheben. Also da gibt
es zum Beispiel den
Line-Profiler für
Python. Weiß nicht, ob
ihr das kennt.
Ist das nicht der eingebaute, ne?
Nee, ist nicht der
eingebaute. Also Line-Profiler macht im Prinzip
folgendes, das ist auch wieder ein Dekorator,
den schreibst du über deine Funktion drüber und der
annotiert dir an jede Quellcode-Zeile
wie schnell oder langsam die war.
Und dann kannst du quasi,
also üblicherweise
würde man das so verwenden, du findest
erstmal die Funktion, die langsam ist, das kannst du mit den
klassischen Tools machen.
Ja, also was man
halt üblicherweise so nimmt, da springen ja
hinten quasi die Funktionen raus, die langsam sind,
wenn man es 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
zu einer Performance-Analyse.
Man kann das dann beheben
oder dann irgendwie auch doch ein C oder ein Mid-Number-Deprogrammter
versehen und so. Hast du irgendeinen Lieblingsprofiler
so für die globale Sicht?
Ich habe in letzter Zeit häufiger mal das Galin verwendet,
aber
Nö, da nehme ich den
Python-Standard. C-Profile.
Genau.
Funktioniert, ist nicht schön, bedienbar,
aber funktioniert.
So oft braucht man es ja auch zum Glück auch nicht.
Also ich bin auch kein Freund von Pre-Major Optimization.
Also ich optimiere dann, wenn ich wirklich feststelle, es ist langsam.
Und für meinen Geschmack ist Python oft nicht langsam.
Aber wenn es eben doch mal langsam ist, dann fange ich an zu profilen und dann kriege ich das, bis jetzt habe ich es immer weggekriegt, das Problem.
Klingt gut. Das verlinke ich
vielleicht auch nochmal. Letztens
einen ganz interessanten Artikel gelesen
zum Thema
Müten, von
Performance-Mythen. Und das ist halt ein
jetzt habe 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
der hat
dann so einen Artikel geschrieben, wo er
irgendwie so darüber renntet, was halt
aus seiner Sicht die Leute immer sagen über Performance,
was alles nicht stimmt. Und da
sind so ein paar interessante Sachen dabei, wo ich
dachte so, oh, das höre ich sehr oft, solche Sachen
und das ist wahrscheinlich Quatsch. Also wo er zum Beispiel
sowas schreibt wie, naja, die Leute sagen immer,
man muss eigentlich nur die Hotspots
irgendwie optimieren. Also du machst
halt erstmal keine Performance-Geschichten,
entwickelst ohne Performance
im Hinterkopf zu haben,
eben keine premature optimization
dein Code
und dann, wenn es langsam ist, dann guckst du halt, wo es 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 gerade wenn du jetzt wirklich
performance-kritische Sachen machst, dann kann es gut
sein, dass dieser Ansatz überhaupt nicht
funktioniert, weil du
halt sozusagen
dann rauskriegst, wenn du anguckst,
was sind die Teile deines Codes,
die langsam sind. Naja, dann ist da halt irgendwie
Memcpy oder keine Ahnung, da wird halt Hauptspeicher
durch den Prozessor geschoben. Das ist was, das willst du
da optimieren. Das ist halt, da kannst du nichts mehr machen.
Und da musst du eigentlich wieder ans Design
deiner Applikation. Ja, umstrukturieren.
Aber wenn ich von vornherein weiß, dass
dass das performancekritisch ist, dann schreibe
ich ganz anderen Code. Dann ist der Code
komplett anders eigentlich.
Ja, also da kannst du vergessen,
da musst du komplett das Design ändern.
Genau, und er meinte dann halt auch,
dann kann es sein... Wie meintest du, John Carmack?
Nee, nee, der hat irgendwie so einen
italienisch klingenden Namen. Ich hab's
nicht mehr ganz... Okay, I don't know.
Ja, der...
Genau, es hängt halt davon ab,
ob man performancekritisch einen Kram macht oder nicht.
Wenn man es nicht macht, dann muss man das nicht machen. Aber wenn man
das hat und hat aber auf die
falsche Art entwickelt und glaubt dann mit
irgendwie Hotspots zu optimieren, da rauszukommen
zu können, dann meint er, so hat er
schlechte Nachrichten, das 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 oder
das Design, dann kann es sein, 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
aber da ist das halt wohl
ab und zu irgendwie dann halt der beste
Weg. Und ja,
tja, ja, das ist alles nicht so einfach.
Das ist vielleicht dein Schlusswort.
Ja, kann man immer sagen.
Hängt davon ab, kommt drauf an.
Das ist alles nicht so einfach.
Schönen Dank, dass wir hier zugehört haben.
Vielen Dank, Martin, dass du da warst.
Ja, gerne, danke.
Das war sehr interessant.
Dann schaltet uns doch bald wieder rein.
Hallo at peisenpodcast.de
Bis zum nächsten Mal. Bis dann.
Ciao.